From 3b107e39c24442f7971e864f960243a690be7619 Mon Sep 17 00:00:00 2001 From: Ajanth Uthayan Date: Sat, 12 Sep 2026 11:05:25 -0400 Subject: [PATCH] Add s-pos-list and the posListTemplate compiler for POS 2026-10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `` renders a virtualized list whose rows are plain data (`rows`) and whose markup comes from item templates (`itemTemplates`) compiled in the extension bundle by the `posListTemplate` tagged template. POS hydrates one template copy per mounted row, so lists of thousands of rows stay responsive and no extension code runs while scrolling. Templates are static `` roots. Inside them `{{path}}` interpolates a row field as text, `bind:prop="path"` passes a row field to a component prop with its own type, and `{{#if path}}…{{/if}}` renders its content when the field is truthy. Event handlers, interpolated values, nested `#if`, `#each`, text directly under the root, and any other `{{…}}` expression are rejected at compile time with a `posListTemplate:` prefixed error. The compiled output is stamped with this package's API version (`2026-10`); POS renders templates only for an extension declaring the same API version, so bundling a package that does not match the extension's `api_version` is reported by name instead of rendering unexpectedly. The component types are generated from POS Mobile's `meta.ts` and merged into `components.d.ts`; `POSList` joins `StandardComponents`; the POS docs data for 2026-10 is regenerated. `htm` (already a transitive dependency of several surfaces) becomes a direct dependency for the parser. Assisted-By: devx/058a962b-6514-4c8e-a49e-37b8e478fe36 --- .changeset/pos-list-template-component.md | 5 + .../2026-10/generated_docs_data_v2.json | 3008 ++++++++++------- .../pos_ui_extensions/2026-10/targets.json | 20 + packages/ui-extensions/package.json | 1 + .../src/surfaces/point-of-sale.ts | 13 + .../surfaces/point-of-sale/components.d.ts | 209 ++ .../point-of-sale/components/POSList.d.ts | 191 ++ .../components/POSList/examples/default.jsx | 56 + .../POSList/examples/incremental-loading.jsx | 8 + .../components/targets/StandardComponents.ts | 1 + .../point-of-sale/pos-list-template.ts | 358 ++ .../tests/pos-list-template.test.ts | 304 ++ yarn.lock | 292 +- 13 files changed, 3237 insertions(+), 1229 deletions(-) create mode 100644 .changeset/pos-list-template-component.md create mode 100644 packages/ui-extensions/src/surfaces/point-of-sale/components/POSList.d.ts create mode 100644 packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/default.jsx create mode 100644 packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/incremental-loading.jsx create mode 100644 packages/ui-extensions/src/surfaces/point-of-sale/pos-list-template.ts create mode 100644 packages/ui-extensions/src/surfaces/point-of-sale/tests/pos-list-template.test.ts diff --git a/.changeset/pos-list-template-component.md b/.changeset/pos-list-template-component.md new file mode 100644 index 0000000000..152330ae98 --- /dev/null +++ b/.changeset/pos-list-template-component.md @@ -0,0 +1,5 @@ +--- +'@shopify/ui-extensions': minor +--- + +Add the `s-pos-list` web component for POS and the `posListTemplate` tagged template that compiles its `` row markup. diff --git a/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/generated_docs_data_v2.json b/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/generated_docs_data_v2.json index 6887b231ca..494a5be029 100644 --- a/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/generated_docs_data_v2.json +++ b/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/generated_docs_data_v2.json @@ -154,6 +154,13 @@ "value": "Discount[]", "description": "An array of cart-level discounts to apply during bulk update. Replaces all existing cart discounts with the provided array." }, + { + "filePath": "src/surfaces/point-of-sale/types/cart.ts", + "syntaxKind": "PropertySignature", + "name": "currency", + "value": "string", + "description": "The ISO 4217 currency code for this cart." + }, { "filePath": "src/surfaces/point-of-sale/types/cart.ts", "syntaxKind": "PropertySignature", @@ -214,7 +221,7 @@ "description": "The total tax amount for the cart, formatted as a currency string." } ], - "value": "export interface Cart {\n /**\n * Indicates whether the cart is currently editable. An `undefined` value should be treated as `true` for backward compatibility. Use this to determine if cart modification operations are allowed.\n */\n editable?: boolean;\n /**\n * The subtotal amount of the cart before taxes and discounts, formatted as a currency string.\n */\n subtotal: string;\n /**\n * The total tax amount for the cart, formatted as a currency string.\n */\n taxTotal: string;\n /**\n * The final total amount including all items, taxes, and discounts, formatted as a currency string.\n */\n grandTotal: string;\n /**\n * The cart note to set during bulk update. Replaces existing note or sets new note if none exists. Set to `undefined` to remove current note.\n */\n note?: string;\n /**\n * The cart-level discount to apply during bulk update. Replaces existing cart discount. Set to `undefined` to remove current discount.\n */\n cartDiscount?: Discount;\n /**\n * An array of cart-level discounts to apply during bulk update. Replaces all existing cart discounts with the provided array.\n */\n cartDiscounts: Discount[];\n /**\n * The customer to associate with the cart during bulk update. Replaces existing customer or converts guest cart to customer cart.\n */\n customer?: Customer;\n /**\n * An array of line items to set during bulk update. Completely replaces existing cart contents—removes all current items and adds the provided ones.\n */\n lineItems: LineItem[];\n /**\n * The custom key-value properties to apply to the line item. Merged with existing properties—duplicate keys overwrite existing values.\n */\n properties: Record;\n}" + "value": "export interface Cart {\n /**\n * Indicates whether the cart is currently editable. An `undefined` value should be treated as `true` for backward compatibility. Use this to determine if cart modification operations are allowed.\n */\n editable?: boolean;\n /**\n * The subtotal amount of the cart before taxes and discounts, formatted as a currency string.\n */\n subtotal: string;\n /**\n * The total tax amount for the cart, formatted as a currency string.\n */\n taxTotal: string;\n /**\n * The final total amount including all items, taxes, and discounts, formatted as a currency string.\n */\n grandTotal: string;\n /**\n * The ISO 4217 currency code for this cart.\n */\n currency: string;\n /**\n * The cart note to set during bulk update. Replaces existing note or sets new note if none exists. Set to `undefined` to remove current note.\n */\n note?: string;\n /**\n * The cart-level discount to apply during bulk update. Replaces existing cart discount. Set to `undefined` to remove current discount.\n */\n cartDiscount?: Discount;\n /**\n * An array of cart-level discounts to apply during bulk update. Replaces all existing cart discounts with the provided array.\n */\n cartDiscounts: Discount[];\n /**\n * The customer to associate with the cart during bulk update. Replaces existing customer or converts guest cart to customer cart.\n */\n customer?: Customer;\n /**\n * An array of line items to set during bulk update. Completely replaces existing cart contents—removes all current items and adds the provided ones.\n */\n lineItems: LineItem[];\n /**\n * The custom key-value properties to apply to the line item. Merged with existing properties—duplicate keys overwrite existing values.\n */\n properties: Record;\n}" } }, "Discount": { @@ -1111,6 +1118,13 @@ "name": "updateDefaultAddress", "value": "(addressId: number) => Promise", "description": "Set a specific address as the default address for the customer using the address `ID`. The customer must be present in the cart to update the default address with enhanced validation." + }, + { + "filePath": "src/surfaces/point-of-sale/api/cart-api/cart-api.ts", + "syntaxKind": "MethodSignature", + "name": "updateLineItemQuantity", + "value": "(uuid: string, quantity: number) => Promise", + "description": "Set the quantity of an existing line item identified by its `UUID`, preserving the line item's properties, discounts, and selling plans. This is equivalent to a merchant adjusting the quantity on the native cart line.\n\nIf POS has split the line into multiple allocations that share the same `UUID` (for example, lines split across delivery methods), the target line is ambiguous and the call throws instead of guessing.\n\nOnly available on API version `2026-10` and later." } ], "value": "export interface CartApiContent\n extends ReadonlyCartApiContent,\n MutableCartApiContent {}" @@ -1384,9 +1398,16 @@ "name": "updateDefaultAddress", "value": "(addressId: number) => Promise", "description": "Set a specific address as the default address for the customer using the address `ID`. The customer must be present in the cart to update the default address with enhanced validation." + }, + { + "filePath": "src/surfaces/point-of-sale/api/cart-api/cart-api.ts", + "syntaxKind": "MethodSignature", + "name": "updateLineItemQuantity", + "value": "(uuid: string, quantity: number) => Promise", + "description": "Set the quantity of an existing line item identified by its `UUID`, preserving the line item's properties, discounts, and selling plans. This is equivalent to a merchant adjusting the quantity on the native cart line.\n\nIf POS has split the line into multiple allocations that share the same `UUID` (for example, lines split across delivery methods), the target line is ambiguous and the call throws instead of guessing.\n\nOnly available on API version `2026-10` and later." } ], - "value": "export interface MutableCartApiContent {\n /**\n * Perform a bulk update of the entire cart state including note, discounts, customer, line items, and properties. Returns the updated cart object after the operation completes with enhanced validation and error handling.\n *\n * @param cartState the cart state to set\n * @returns the updated cart\n */\n bulkCartUpdate(cartState: CartUpdateInput): Promise;\n\n /**\n * Apply a cart-level discount with the specified type (`'Percentage'`, `'FixedAmount'`, or `'Code'`), title, and optional amount. For discount codes, omit the `amount` parameter. Enhanced validation ensures proper discount application.\n *\n * @param type the type of discount applied (example: 'Percentage')\n * @param title the title attributed with the discount\n * @param amount the percentage or fixed monetary amount deducted with the discount. Pass in `undefined` if using discount codes.\n */\n applyCartDiscount(\n type: CartDiscountType,\n title: string,\n amount?: string,\n ): Promise;\n\n /**\n * Apply a discount code to the cart. The system will validate the code and apply the appropriate discount if the code is valid and applicable to the current cart contents with improved error messaging.\n *\n * @param code the code for the discount to add to the cart\n */\n addCartCodeDiscount(code: string): Promise;\n\n /**\n * Remove the current cart-level discount. This only affects cart-level discounts and does not impact line item discounts or automatic discount eligibility.\n */\n removeCartDiscount(): Promise;\n\n /**\n * Remove all discounts from both the cart and individual line items. Set `disableAutomaticDiscounts` to `true` to prevent automatic discounts from being reapplied after removal with enhanced discount allocation handling.\n *\n * @param disableAutomaticDiscounts Whether or not automatic discounts should be enabled after removing the discounts.\n */\n removeAllDiscounts(disableAutomaticDiscounts: boolean): Promise;\n\n /**\n * Remove all line items and reset the cart to an empty state. This action can't be undone and will clear all cart contents including line items, discounts, properties, and selling plans.\n */\n clearCart(): Promise;\n\n /**\n * Associate a customer with the current cart using the customer object containing the customer `ID`. This enables customer-specific pricing, discounts, and checkout features with enhanced customer data validation.\n *\n * @param customer the customer object to add to the cart\n */\n setCustomer(customer: Customer): Promise;\n\n /**\n * Remove the currently associated customer from the cart, converting it back to a guest cart without customer-specific benefits or information while preserving cart contents.\n */\n removeCustomer(): Promise;\n\n /**\n * Add a custom sale item to the cart with specified quantity, title, price, and taxable status. Returns the `UUID` of the created line item for future operations and property management.\n *\n * @param customSale the custom sale object to add to the cart\n * @returns {string} the UUID of the line item added\n */\n addCustomSale(customSale: CustomSale): Promise;\n\n /**\n * Add a product variant to the cart by its numeric `ID` with the specified quantity. Returns the `UUID` of the newly added line item, or an empty string if the user dismissed an oversell guard modal. Throws an error if POS fails to add the line item due to validation or system errors.\n *\n * Pass `options` to attach line-item properties in the same operation, instead of following up with a separate `addLineItemProperties` call.\n *\n * @param variantId the product variant's numeric ID to add to the cart\n * @param quantity the number of this variant to add to the cart\n * @param options optional line-item properties to apply to the new line item in the same operation\n * @returns {string} the UUID of the line item added, or the empty string if the user dismissed an oversell guard modal\n * @throws {Error} if POS fails to add the line item\n */\n addLineItem(\n variantId: number,\n quantity: number,\n options?: AddLineItemOptions,\n ): Promise;\n\n /**\n * Remove a specific line item from the cart using its `UUID`. The line item will be completely removed from the cart along with any associated discounts, properties, or selling plans.\n *\n * @param uuid the uuid of the line item that should be removed\n */\n removeLineItem(uuid: string): Promise;\n\n /**\n * Add custom key-value properties to the cart for storing metadata, tracking information, or integration data. Properties are merged with existing cart properties with enhanced validation and conflict resolution.\n *\n * @param properties the custom key to value object to attribute to the cart\n */\n addCartProperties(properties: Record): Promise;\n\n /**\n * Remove specific cart properties by their keys. Only the specified property keys will be removed while other properties remain intact with improved error handling for non-existent keys.\n *\n * @param keys the collection of keys to be removed from the cart properties\n */\n removeCartProperties(keys: string[]): Promise;\n\n /**\n * Add custom properties to a specific line item using its `UUID`. Properties are merged with existing line item properties for metadata storage and tracking with enhanced validation.\n *\n * @param uuid the uuid of the line item to which the properties should be stringd\n * @param properties the custom key to value object to attribute to the line item\n */\n addLineItemProperties(\n uuid: string,\n properties: Record,\n ): Promise;\n\n /**\n * Add properties to multiple line items simultaneously using an array of inputs containing line item `UUIDs` and their respective properties for efficient bulk operations with enhanced validation and error reporting.\n *\n * @param lineItemProperties the collection of custom line item properties to apply to their respective line items.\n */\n bulkAddLineItemProperties(\n lineItemProperties: SetLineItemPropertiesInput[],\n ): Promise;\n\n /**\n * Remove specific properties from a line item by `UUID` and property keys. Only the specified keys will be removed while other properties remain intact with improved error handling.\n *\n * @param uuid the uuid of the line item to which the properties should be removed\n * @param keys the collection of keys to be removed from the line item properties\n */\n removeLineItemProperties(uuid: string, keys: string[]): Promise;\n\n /**\n * Apply a discount to a specific line item using its `UUID`. Specify the discount type (`'Percentage'` or `'FixedAmount'`), title, and amount value with improved discount allocation tracking. `FixedAmount` discounts use per-unit amounts. For example, passing `'5.00'` on a line item with quantity 2 results in a $10.00 total discount.\n *\n * @param uuid the uuid of the line item that should receive a discount\n * @param type the type of discount applied (example: 'Percentage')\n * @param title the title attributed with the discount\n * @param amount the percentage or fixed monetary amount deducted with the discout\n */\n setLineItemDiscount(\n uuid: string,\n type: LineItemDiscountType,\n title: string,\n amount: string,\n ): Promise;\n\n /**\n * Apply discounts to multiple line items simultaneously. Each input specifies the line item `UUID` and discount details for efficient bulk discount operations with enhanced validation and allocation tracking. `FixedAmount` discounts use per-unit amounts. For example, passing `'5.00'` on a line item with quantity 2 results in a $10.00 total discount.\n *\n * @param lineItemDiscounts a map of discounts to add. They key is the uuid of the line item you want to add the discount to. The value is the discount input.\n */\n bulkSetLineItemDiscounts(\n lineItemDiscounts: SetLineItemDiscountInput[],\n ): Promise;\n\n /**\n * Set the attributed staff member for all line items in the cart using the staff `ID`. Pass `undefined` to clear staff attribution from all line items with enhanced staff validation and tracking.\n *\n * @param staffId the ID of the staff. Providing undefined will clear the attributed staff from all line items.\n */\n setAttributedStaff(staffId: number | undefined): Promise;\n\n /**\n * Set the attributed staff member for a specific line item using the staff `ID` and line item `UUID`. Pass `undefined` as `staffId` to clear attribution from the line item with improved validation and error handling.\n *\n * @param staffId the ID of the staff. Providing undefined will clear the attributed staff on the line item.\n * @param lineItemUuid the UUID of the line item.\n */\n setAttributedStaffToLineItem(\n staffId: number | undefined,\n lineItemUuid: string,\n ): Promise;\n\n /**\n * Remove all discounts from a specific line item identified by its `UUID`. This will clear any custom discounts applied to the line item while preserving discount allocation history.\n *\n * @param uuid the uuid of the line item whose discounts should be removed\n */\n removeLineItemDiscount(uuid: string): Promise;\n\n /**\n * Add a new address to the customer associated with the cart. The customer must be present in the cart before adding addresses with enhanced address validation and formatting.\n *\n * @param address the address object to add to the customer in cart\n */\n addAddress(address: Address): Promise;\n\n /**\n * Delete an existing address from the customer using the address `ID`. The customer must be present in the cart to perform this operation with improved error handling for invalid address `IDs`.\n *\n * @param addressId the address ID to delete\n */\n deleteAddress(addressId: number): Promise;\n\n /**\n * Set a specific address as the default address for the customer using the address `ID`. The customer must be present in the cart to update the default address with enhanced validation.\n *\n * @param addressId the address ID to set as the default address\n */\n updateDefaultAddress(addressId: number): Promise;\n\n /**\n * Add a selling plan to a line item in the cart using the line item `UUID`, selling plan `ID`, and selling plan name. Optionally provide delivery interval and interval count for improved performance, otherwise POS will fetch them after syncing the cart.\n *\n * @param uuid the uuid of the line item that should receive the selling plan\n * @param sellingPlanId the ID of the selling plan to add to the line item\n */\n addLineItemSellingPlan(input: SetLineItemSellingPlanInput): Promise;\n\n /**\n * Remove the selling plan from a line item in the cart using the line item `UUID`. This will clear any subscription or recurring purchase configuration from the line item.\n *\n * @param uuid the uuid of the line item whose selling plan should be removed\n */\n removeLineItemSellingPlan(uuid: string): Promise;\n}" + "value": "export interface MutableCartApiContent {\n /**\n * Perform a bulk update of the entire cart state including note, discounts, customer, line items, and properties. Returns the updated cart object after the operation completes with enhanced validation and error handling.\n *\n * @param cartState the cart state to set\n * @returns the updated cart\n */\n bulkCartUpdate(cartState: CartUpdateInput): Promise;\n\n /**\n * Apply a cart-level discount with the specified type (`'Percentage'`, `'FixedAmount'`, or `'Code'`), title, and optional amount. For discount codes, omit the `amount` parameter. Enhanced validation ensures proper discount application.\n *\n * @param type the type of discount applied (example: 'Percentage')\n * @param title the title attributed with the discount\n * @param amount the percentage or fixed monetary amount deducted with the discount. Pass in `undefined` if using discount codes.\n */\n applyCartDiscount(\n type: CartDiscountType,\n title: string,\n amount?: string,\n ): Promise;\n\n /**\n * Apply a discount code to the cart. The system will validate the code and apply the appropriate discount if the code is valid and applicable to the current cart contents with improved error messaging.\n *\n * @param code the code for the discount to add to the cart\n */\n addCartCodeDiscount(code: string): Promise;\n\n /**\n * Remove the current cart-level discount. This only affects cart-level discounts and does not impact line item discounts or automatic discount eligibility.\n */\n removeCartDiscount(): Promise;\n\n /**\n * Remove all discounts from both the cart and individual line items. Set `disableAutomaticDiscounts` to `true` to prevent automatic discounts from being reapplied after removal with enhanced discount allocation handling.\n *\n * @param disableAutomaticDiscounts Whether or not automatic discounts should be enabled after removing the discounts.\n */\n removeAllDiscounts(disableAutomaticDiscounts: boolean): Promise;\n\n /**\n * Remove all line items and reset the cart to an empty state. This action can't be undone and will clear all cart contents including line items, discounts, properties, and selling plans.\n */\n clearCart(): Promise;\n\n /**\n * Associate a customer with the current cart using the customer object containing the customer `ID`. This enables customer-specific pricing, discounts, and checkout features with enhanced customer data validation.\n *\n * @param customer the customer object to add to the cart\n */\n setCustomer(customer: Customer): Promise;\n\n /**\n * Remove the currently associated customer from the cart, converting it back to a guest cart without customer-specific benefits or information while preserving cart contents.\n */\n removeCustomer(): Promise;\n\n /**\n * Add a custom sale item to the cart with specified quantity, title, price, and taxable status. Returns the `UUID` of the created line item for future operations and property management.\n *\n * @param customSale the custom sale object to add to the cart\n * @returns {string} the UUID of the line item added\n */\n addCustomSale(customSale: CustomSale): Promise;\n\n /**\n * Add a product variant to the cart by its numeric `ID` with the specified quantity. Returns the `UUID` of the newly added line item, or an empty string if the user dismissed an oversell guard modal. Throws an error if POS fails to add the line item due to validation or system errors.\n *\n * Pass `options` to attach line-item properties in the same operation, instead of following up with a separate `addLineItemProperties` call.\n *\n * @param variantId the product variant's numeric ID to add to the cart\n * @param quantity the number of this variant to add to the cart\n * @param options optional line-item properties to apply to the new line item in the same operation\n * @returns {string} the UUID of the line item added, or the empty string if the user dismissed an oversell guard modal\n * @throws {Error} if POS fails to add the line item\n */\n addLineItem(\n variantId: number,\n quantity: number,\n options?: AddLineItemOptions,\n ): Promise;\n\n /**\n * Set the quantity of an existing line item identified by its `UUID`, preserving the line item's properties, discounts, and selling plans. This is equivalent to a merchant adjusting the quantity on the native cart line.\n *\n * If POS has split the line into multiple allocations that share the same `UUID` (for example, lines split across delivery methods), the target line is ambiguous and the call throws instead of guessing.\n *\n * Only available on API version `2026-10` and later.\n *\n * @param uuid the UUID of the line item to update\n * @param quantity the new absolute quantity; must be an integer of 1 or greater. To remove a line item, use `removeLineItem` instead.\n * @returns A promise that resolves after the cart state reflects the change.\n * @throws {Error} if the line item is not found, the `UUID` matches multiple split-line allocations, the quantity is invalid, the cart is not editable because it is a return or exchange, or the POS app version does not support this method.\n */\n updateLineItemQuantity(uuid: string, quantity: number): Promise;\n\n /**\n * Remove a specific line item from the cart using its `UUID`. The line item will be completely removed from the cart along with any associated discounts, properties, or selling plans.\n *\n * @param uuid the uuid of the line item that should be removed\n */\n removeLineItem(uuid: string): Promise;\n\n /**\n * Add custom key-value properties to the cart for storing metadata, tracking information, or integration data. Properties are merged with existing cart properties with enhanced validation and conflict resolution.\n *\n * @param properties the custom key to value object to attribute to the cart\n */\n addCartProperties(properties: Record): Promise;\n\n /**\n * Remove specific cart properties by their keys. Only the specified property keys will be removed while other properties remain intact with improved error handling for non-existent keys.\n *\n * @param keys the collection of keys to be removed from the cart properties\n */\n removeCartProperties(keys: string[]): Promise;\n\n /**\n * Add custom properties to a specific line item using its `UUID`. Properties are merged with existing line item properties for metadata storage and tracking with enhanced validation.\n *\n * @param uuid the uuid of the line item to which the properties should be stringd\n * @param properties the custom key to value object to attribute to the line item\n */\n addLineItemProperties(\n uuid: string,\n properties: Record,\n ): Promise;\n\n /**\n * Add properties to multiple line items simultaneously using an array of inputs containing line item `UUIDs` and their respective properties for efficient bulk operations with enhanced validation and error reporting.\n *\n * @param lineItemProperties the collection of custom line item properties to apply to their respective line items.\n */\n bulkAddLineItemProperties(\n lineItemProperties: SetLineItemPropertiesInput[],\n ): Promise;\n\n /**\n * Remove specific properties from a line item by `UUID` and property keys. Only the specified keys will be removed while other properties remain intact with improved error handling.\n *\n * @param uuid the uuid of the line item to which the properties should be removed\n * @param keys the collection of keys to be removed from the line item properties\n */\n removeLineItemProperties(uuid: string, keys: string[]): Promise;\n\n /**\n * Apply a discount to a specific line item using its `UUID`. Specify the discount type (`'Percentage'` or `'FixedAmount'`), title, and amount value with improved discount allocation tracking. `FixedAmount` discounts use per-unit amounts. For example, passing `'5.00'` on a line item with quantity 2 results in a $10.00 total discount.\n *\n * @param uuid the uuid of the line item that should receive a discount\n * @param type the type of discount applied (example: 'Percentage')\n * @param title the title attributed with the discount\n * @param amount the percentage or fixed monetary amount deducted with the discout\n */\n setLineItemDiscount(\n uuid: string,\n type: LineItemDiscountType,\n title: string,\n amount: string,\n ): Promise;\n\n /**\n * Apply discounts to multiple line items simultaneously. Each input specifies the line item `UUID` and discount details for efficient bulk discount operations with enhanced validation and allocation tracking. `FixedAmount` discounts use per-unit amounts. For example, passing `'5.00'` on a line item with quantity 2 results in a $10.00 total discount.\n *\n * @param lineItemDiscounts a map of discounts to add. They key is the uuid of the line item you want to add the discount to. The value is the discount input.\n */\n bulkSetLineItemDiscounts(\n lineItemDiscounts: SetLineItemDiscountInput[],\n ): Promise;\n\n /**\n * Set the attributed staff member for all line items in the cart using the staff `ID`. Pass `undefined` to clear staff attribution from all line items with enhanced staff validation and tracking.\n *\n * @param staffId the ID of the staff. Providing undefined will clear the attributed staff from all line items.\n */\n setAttributedStaff(staffId: number | undefined): Promise;\n\n /**\n * Set the attributed staff member for a specific line item using the staff `ID` and line item `UUID`. Pass `undefined` as `staffId` to clear attribution from the line item with improved validation and error handling.\n *\n * @param staffId the ID of the staff. Providing undefined will clear the attributed staff on the line item.\n * @param lineItemUuid the UUID of the line item.\n */\n setAttributedStaffToLineItem(\n staffId: number | undefined,\n lineItemUuid: string,\n ): Promise;\n\n /**\n * Remove all discounts from a specific line item identified by its `UUID`. This will clear any custom discounts applied to the line item while preserving discount allocation history.\n *\n * @param uuid the uuid of the line item whose discounts should be removed\n */\n removeLineItemDiscount(uuid: string): Promise;\n\n /**\n * Add a new address to the customer associated with the cart. The customer must be present in the cart before adding addresses with enhanced address validation and formatting.\n *\n * @param address the address object to add to the customer in cart\n */\n addAddress(address: Address): Promise;\n\n /**\n * Delete an existing address from the customer using the address `ID`. The customer must be present in the cart to perform this operation with improved error handling for invalid address `IDs`.\n *\n * @param addressId the address ID to delete\n */\n deleteAddress(addressId: number): Promise;\n\n /**\n * Set a specific address as the default address for the customer using the address `ID`. The customer must be present in the cart to update the default address with enhanced validation.\n *\n * @param addressId the address ID to set as the default address\n */\n updateDefaultAddress(addressId: number): Promise;\n\n /**\n * Add a selling plan to a line item in the cart using the line item `UUID`, selling plan `ID`, and selling plan name. Optionally provide delivery interval and interval count for improved performance, otherwise POS will fetch them after syncing the cart.\n *\n * @param uuid the uuid of the line item that should receive the selling plan\n * @param sellingPlanId the ID of the selling plan to add to the line item\n */\n addLineItemSellingPlan(input: SetLineItemSellingPlanInput): Promise;\n\n /**\n * Remove the selling plan from a line item in the cart using the line item `UUID`. This will clear any subscription or recurring purchase configuration from the line item.\n *\n * @param uuid the uuid of the line item whose selling plan should be removed\n */\n removeLineItemSellingPlan(uuid: string): Promise;\n}" } }, "CartLineItemApi": { @@ -4002,6 +4023,38 @@ "value": "export interface CashTrackingSessionCompleteEvent\n extends CashTrackingSessionEvent {\n /** ISO 8601 timestamp when the session was closed. */\n readonly closingTime: string;\n}" } }, + "ScanEvent": { + "src/surfaces/point-of-sale/events/scan-event.ts": { + "filePath": "src/surfaces/point-of-sale/events/scan-event.ts", + "name": "ScanEvent", + "description": "Dispatched once for each successful scan captured by a camera, external, or embedded scanner. Every event carries a decoded `data` value and its `source`; no event is dispatched for initial or empty scanner state.\n\nThe event is delivered only after POS has finished handling the scan itself.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/events/scan-event.ts", + "syntaxKind": "PropertySignature", + "name": "data", + "value": "string", + "description": "The decoded string captured by the scan. Contains the scanned barcode, QR code, or other scannable data. Always present: an event is only dispatched for a successful scan." + }, + { + "filePath": "src/surfaces/point-of-sale/events/scan-event.ts", + "syntaxKind": "PropertySignature", + "name": "source", + "value": "ScannerSource", + "description": "The scanner source that captured the scan. One of the following scanner types:\n\n• `'camera'` - Built-in device camera used for scanning • `'external'` - External scanner hardware connected to the device • `'embedded'` - Embedded scanner hardware built into the device" + }, + { + "filePath": "src/surfaces/point-of-sale/events/scan-event.ts", + "syntaxKind": "PropertySignature", + "name": "type", + "value": "'scan'", + "description": "The event name." + } + ], + "value": "export interface ScanEvent {\n /** The event name. */\n readonly type: 'scan';\n /**\n * The decoded string captured by the scan. Contains the scanned barcode, QR code, or other scannable data. Always present: an event is only dispatched for a successful scan.\n */\n readonly data: string;\n /**\n * The scanner source that captured the scan. One of the following scanner types:\n *\n * • `'camera'` - Built-in device camera used for scanning\n * • `'external'` - External scanner hardware connected to the device\n * • `'embedded'` - Embedded scanner hardware built into the device\n */\n readonly source: ScannerSource;\n}" + } + }, "ShopifyEventMap": { "src/surfaces/point-of-sale/events.ts": { "filePath": "src/surfaces/point-of-sale/events.ts", @@ -4023,6 +4076,13 @@ "value": "CashTrackingSessionStartEvent", "description": "Dispatched when a cash tracking session opens." }, + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "scan", + "value": "ScanEvent", + "description": "Dispatched once for each successful scan captured by a camera, external, or embedded scanner, after POS has finished handling the scan itself. Every event carries decoded `data` and its `source`." + }, { "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", @@ -4031,7 +4091,7 @@ "description": "Dispatched when a sale, return, or exchange transaction completes. Narrow on `transactionType` to access per-type fields." } ], - "value": "export interface ShopifyEventMap {\n /**\n * Dispatched when a sale, return, or exchange transaction completes.\n * Narrow on `transactionType` to access per-type fields.\n */\n [POS_EVENT_NAMES.TRANSACTION_COMPLETE]: TransactionCompleteEvent;\n /** Dispatched when a cash tracking session opens. */\n [POS_EVENT_NAMES.CASH_TRACKING_SESSION_START]: CashTrackingSessionStartEvent;\n /** Dispatched when a cash tracking session closes after reconciliation. */\n [POS_EVENT_NAMES.CASH_TRACKING_SESSION_COMPLETE]: CashTrackingSessionCompleteEvent;\n}" + "value": "export interface ShopifyEventMap {\n /**\n * Dispatched when a sale, return, or exchange transaction completes.\n * Narrow on `transactionType` to access per-type fields.\n */\n [POS_EVENT_NAMES.TRANSACTION_COMPLETE]: TransactionCompleteEvent;\n /** Dispatched when a cash tracking session opens. */\n [POS_EVENT_NAMES.CASH_TRACKING_SESSION_START]: CashTrackingSessionStartEvent;\n /** Dispatched when a cash tracking session closes after reconciliation. */\n [POS_EVENT_NAMES.CASH_TRACKING_SESSION_COMPLETE]: CashTrackingSessionCompleteEvent;\n /**\n * Dispatched once for each successful scan captured by a camera, external,\n * or embedded scanner, after POS has finished handling the scan itself.\n * Every event carries decoded `data` and its `source`.\n */\n [POS_EVENT_NAMES.SCAN]: ScanEvent;\n}" } }, "CustomerApi": { @@ -4562,861 +4622,1063 @@ "value": "interface TabListJSXProps extends Pick {\n children?: ComponentChildren;\n}" } }, - "LinkEvents": { + "POSListJSXProps": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "LinkEvents", - "description": "The link component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "name": "POSListJSXProps", + "description": "Displays a virtualized list of rows rendered from plain data and item templates compiled with `posListTemplate`.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "click", - "value": "(event: CallbackEvent<\"s-link\">) => void", - "description": "Called when the link is activated.", + "name": "header", + "value": "ComponentChild", + "description": "Content displayed before the rows as part of the list's scrollable content.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "itemTemplates", + "value": "POSListTemplates", + "description": "The compiled item templates, one per ``, produced by `posListTemplate`. A row whose `templateFor` matches no template renders nothing.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "loadingMore", + "value": "boolean", + "description": "Whether additional rows are being loaded. Renders a progress indicator after the last row.", + "isOptional": true, + "defaultValue": "false" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "onLoadMore", + "value": "((event: CallbackEvent) => void) | null", + "description": "Callback when the list has scrolled near its end and more rows should be loaded.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "onRowClick", + "value": "((event: POSListRowClickEvent) => void) | null", + "description": "Callback when a `button` row is activated. `event.detail.item` is the row and `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it.", "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "rows", + "value": "POSListRow[]", + "description": "The rows displayed in the list. Each row names the item template that renders it through `templateFor`.", + "isOptional": true, + "defaultValue": "[]" } ], - "value": "interface LinkEvents {\n /** Called when the link is activated. */\n click?: (event: CallbackEvent) => void;\n}" + "value": "interface POSListJSXProps {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * The rows displayed in the list. Each row names the item template that renders it through\n * `templateFor`.\n *\n * @default []\n */\n rows?: POSListRow[];\n /**\n * The compiled item templates, one per ``, produced by `posListTemplate`.\n * A row whose `templateFor` matches no template renders nothing.\n */\n itemTemplates?: POSListTemplates;\n /**\n * Whether additional rows are being loaded. Renders a progress indicator after the last row.\n *\n * @default false\n */\n loadingMore?: boolean;\n /**\n * Callback when a `button` row is activated. `event.detail.item` is the row and\n * `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it.\n */\n onRowClick?: ((event: POSListRowClickEvent) => void) | null;\n /** Callback when the list has scrolled near its end and more rows should be loaded. */\n onLoadMore?: ((event: CallbackEvent) => void) | null;\n /** Content displayed before the rows as part of the list's scrollable content. */\n header?: ComponentChild;\n}" } }, - "CallbackEvent": { + "ComponentChild": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "CallbackEvent", + "syntaxKind": "TypeAliasDeclaration", + "name": "ComponentChild", + "value": "VNode | object | string | number | bigint | boolean | null | undefined", + "description": "" + } + }, + "VNode": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "VNode", "description": "", "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "bubbles", - "value": "boolean", - "description": "", + "name": "endTime", + "value": "number", + "description": "The time that the rendering of this `vnode` was completed. Will only be set when the devtools are attached. Default value: `-1`", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "cancelable", - "value": "boolean", - "description": "", - "isOptional": true + "name": "key", + "value": "Key", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "composed", - "value": "boolean", - "description": "", - "isOptional": true + "name": "props", + "value": "P & { children: ComponentChildren$1; }", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "currentTarget", - "value": "HTMLElementTagNameMap[T]", - "description": "" + "name": "ref", + "value": "Ref | null", + "description": "ref is not guaranteed by React.ReactElement, for compatibility reasons with popular react libs we define it as optional too", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "detail", - "value": "any", - "description": "", + "name": "startTime", + "value": "number", + "description": "The time this `vnode` started rendering. Will only be set when the devtools are attached. Default value: `0`", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "eventPhase", - "value": "number", + "name": "type", + "value": "ComponentType

| string", "description": "" - }, + } + ], + "value": "export interface VNode

{\n type: ComponentType

| string;\n props: P & {\n children: ComponentChildren$1;\n };\n key: Key;\n /**\n * ref is not guaranteed by React.ReactElement, for compatibility reasons\n * with popular react libs we define it as optional too\n */\n ref?: Ref | null;\n /**\n * The time this `vnode` started rendering. Will only be set when\n * the devtools are attached.\n * Default value: `0`\n */\n startTime?: number;\n /**\n * The time that the rendering of this `vnode` was completed. Will only be\n * set when the devtools are attached.\n * Default value: `-1`\n */\n endTime?: number;\n}" + } + }, + "Key": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "Key", + "value": "string | number | any", + "description": "" + } + }, + "Ref": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "Ref", + "value": "RefObject | RefCallback | null", + "description": "" + } + }, + "RefObject": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "RefObject", + "value": "{\n current: T | null;\n}", + "description": "", + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "target", - "value": "HTMLElementTagNameMap[T] | null", + "name": "current", + "value": "T | null", "description": "" } + ] + } + }, + "RefCallback": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "RefCallback", + "description": "", + "params": [ + { + "name": "instance", + "description": "", + "value": "T", + "filePath": "src/surfaces/point-of-sale/components.ts" + } ], - "value": "interface CallbackEvent {\n currentTarget: HTMLElementTagNameMap[T];\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n detail?: any;\n eventPhase: number;\n target: HTMLElementTagNameMap[T] | null;\n}" + "returns": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "description": "", + "name": "void | (() => void)", + "value": "void | (() => void)" + }, + "value": "(instance: T | null) => void | (() => void)" } }, - "Link": { + "ComponentType": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Link", - "description": "The link component makes text interactive, allowing users to trigger actions through tappable text. Use it for lightweight interactions, navigation triggers, or actions embedded within text content.\n\nLinks support the command system for controlling other components declaratively. Use `command` and `commandFor` to show, hide, or toggle modals and other targetable elements. For primary actions like submitting forms or triggering operations, use [button](/docs/api/pos-ui-extensions/{API_VERSION}/polaris-web-components/actions/button) instead.", - "isPublicDocs": true, + "syntaxKind": "TypeAliasDeclaration", + "name": "ComponentType", + "value": "ComponentClass

| FunctionComponent

", + "description": "" + } + }, + "ComponentClass": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "ComponentClass", + "description": "", "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "accessibilityLabel", - "value": "string", - "description": "A label that describes the purpose or contents of the link. It will be read to users using assistive technologies such as screen readers.\n\nUse this when using only an icon or the content of the link is not enough context for users using assistive technologies.", + "name": "contextType", + "value": "Context", + "description": "", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "command", - "value": "'--auto' | '--show' | '--hide' | '--toggle' | '--copy'", - "description": "Sets the action the `commandFor` should take when this clickable is activated.\n\nSee the documentation of particular components for the actions they support.\n\n- `--auto`: a default action for the target component.\n- `--show`: shows the target component.\n- `--hide`: hides the target component.\n- `--toggle`: toggles the target component.\n- `--copy`: copies the target ClipboardItem.", - "isOptional": true, - "defaultValue": "'--auto'" + "name": "defaultProps", + "value": "Partial

", + "description": "Make all properties in T optional", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "commandFor", + "name": "displayName", "value": "string", - "description": "ID of a component that should respond to activations (e.g. clicks) on this component.\n\nSee `command` for how to control the behavior of the target.", + "description": "", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "id", - "value": "string", - "description": "A unique identifier for the element.", + "syntaxKind": "MethodSignature", + "name": "getDerivedStateFromError", + "value": "(error: any) => Partial", + "description": "", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "MethodSignature", + "name": "getDerivedStateFromProps", + "value": "(props: Readonly

, state: Readonly) => Partial", + "description": "", "isOptional": true } ], - "value": "interface Link {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * ID of a component that should respond to activations (e.g. clicks) on this component.\n *\n * See `command` for how to control the behavior of the target.\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#commandfor\n */\n commandFor?: string;\n /**\n * Sets the action the `commandFor` should take when this clickable is activated.\n *\n * See the documentation of particular components for the actions they support.\n *\n * - `--auto`: a default action for the target component.\n * - `--show`: shows the target component.\n * - `--hide`: hides the target component.\n * - `--toggle`: toggles the target component.\n * - `--copy`: copies the target ClipboardItem.\n * @default '--auto'\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#command\n */\n command?: '--auto' | '--show' | '--hide' | '--toggle' | '--copy';\n /**\n * A label that describes the purpose or contents of the link. It will be read to users using assistive technologies such as screen readers.\n *\n * Use this when using only an icon or the content of the link is not enough context\n * for users using assistive technologies.\n */\n accessibilityLabel?: string;\n}" + "value": "export interface ComponentClass

{\n new (props: P, context?: any): Component;\n displayName?: string;\n defaultProps?: Partial

;\n contextType?: Context;\n getDerivedStateFromProps?(\n props: Readonly

,\n state: Readonly,\n ): Partial | null;\n getDerivedStateFromError?(error: any): Partial | null;\n}" } }, - "EmptyStateSlots": { + "Context": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "EmptyStateSlots", - "description": "The empty state component supports slots for adding graphics and actions. Learn more about [using slots](/docs/api/polaris/using-polaris-web-components#slots).", - "isPublicDocs": true, + "name": "Context", + "description": "", "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "graphic", - "value": "HTMLElement", - "description": "The graphic to display in the empty state. The only supported components is Icon, with a type of `alert-circle`, `search`, `info`, or `circle-info`.", - "isOptional": true + "name": "Consumer", + "value": "Consumer", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "primary-action", - "value": "HTMLElement", - "description": "The primary action to perform, provided as a button or link type element.", + "name": "defaultProps", + "value": "Partial

| undefined", + "description": "Make all properties in T optional", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "secondary-actions", - "value": "HTMLElement", - "description": "The secondary actions to perform, provided as button or link type elements.", + "name": "displayName", + "value": "string", + "description": "", "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "Provider", + "value": "Provider", + "description": "" } ], - "value": "interface EmptyStateSlots {\n /** The primary action to perform, provided as a button or link type element. */\n 'primary-action'?: HTMLElement;\n /** The secondary actions to perform, provided as button or link type elements. */\n 'secondary-actions'?: HTMLElement;\n /** The graphic to display in the empty state. The only supported components is Icon, with a type of `alert-circle`, `search`, `info`, or `circle-info`. */\n graphic?: HTMLElement;\n}" + "value": "export interface Context extends Provider {\n Consumer: Consumer;\n Provider: Provider;\n displayName?: string;\n}" } }, - "EmptyState": { + "Consumer": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "EmptyState", - "description": "Displays an empty-state message with optional actions and supporting graphics.", - "isPublicDocs": true, + "name": "Consumer", + "description": "", "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "heading", - "value": "string", - "description": "The heading of the empty state.", + "name": "defaultProps", + "value": "Partial

| undefined", + "description": "Make all properties in T optional", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "subheading", + "name": "displayName", "value": "string", - "description": "The subheading of the empty state.", + "description": "", "isOptional": true } ], - "value": "interface EmptyState {\n /** The subheading of the empty state. */\n subheading?: string;\n /** The heading of the empty state. */\n heading?: string;\n}" + "value": "export interface Consumer\n extends FunctionComponent<{\n children: (value: T) => ComponentChildren$1;\n }> {}" } }, - "Embed": { + "Provider": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Embed", - "description": "The embed component displays a preview of printable content from a specified source URL. Use it to show users what will be printed before triggering the actual print operation.\n\nEmbed works in conjunction with the Print API to provide complete print functionality from preview to execution.\n\nSupported document types:\n\n- **HTML documents** (`.html`, `.htm`) - Best printing experience with full CSS styling, embedded images, and complex layouts. Use for receipts, invoices, and formatted reports.\n\n- **Text files** (`.txt`, `.csv`) - Plain text with basic content and tabular data support. Use for simple receipts and data exports.\n\n- **PDF files** (`.pdf`) - Behavior varies by platform: prints directly on iOS/desktop, but downloads to external viewer on Android. Use for complex documents and compliance requirements.\n\n[Learn how to build a print extension in POS](/docs/apps/build/pos/build-print-extension).", - "isPublicDocs": true, + "name": "Provider", + "description": "", "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "accessibilityLabel", - "value": "string", - "description": "A label that describes the purpose or contents of the embed. It will be read to users using assistive technologies such as screen readers.", + "name": "defaultProps", + "value": "Partial

| undefined", + "description": "Make all properties in T optional", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "blockSize", - "value": "SizeUnitsOrAuto", - "description": "Adjust the block size.", - "isOptional": true, - "defaultValue": "'auto'" - }, + "name": "displayName", + "value": "string", + "description": "", + "isOptional": true + } + ], + "value": "export interface Provider\n extends FunctionComponent<{\n value: T;\n children?: ComponentChildren$1;\n }> {}" + } + }, + "FunctionComponent": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "FunctionComponent", + "description": "", + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "inlineSize", - "value": "SizeUnitsOrAuto", - "description": "Adjust the inline size.", - "isOptional": true, - "defaultValue": "'auto'" + "name": "defaultProps", + "value": "Partial

| undefined", + "description": "Make all properties in T optional", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxBlockSize", - "value": "SizeUnitsOrNone", - "description": "Adjust the maximum block size.", - "isOptional": true, - "defaultValue": "'none'" - }, + "name": "displayName", + "value": "string", + "description": "", + "isOptional": true + } + ], + "value": "export interface FunctionComponent

{\n (props: RenderableProps

, context?: any): ComponentChildren$1;\n displayName?: string;\n defaultProps?: Partial

| undefined;\n}" + } + }, + "POSListTemplates": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "POSListTemplates", + "description": "", + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxInlineSize", - "value": "SizeUnitsOrNone", - "description": "Adjust the maximum inline size.", - "isOptional": true, - "defaultValue": "'none'" + "name": "templates", + "value": "POSListItemTemplate[]", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "minBlockSize", - "value": "SizeUnits", - "description": "Adjust the minimum block size.", - "isOptional": true, - "defaultValue": "'0'" - }, + "name": "version", + "value": "`${number}-${number}` | 'unstable'", + "description": "The API version whose `posListTemplate` compiled these templates, e.g. `'2026-10'`. The host renders them only for an extension declaring the same API version." + } + ], + "value": "interface POSListTemplates {\n /**\n * The API version whose `posListTemplate` compiled these templates, e.g. `'2026-10'`. The host\n * renders them only for an extension declaring the same API version.\n */\n version: `${number}-${number}` | 'unstable';\n templates: POSListItemTemplate[];\n}" + } + }, + "POSListItemTemplate": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "POSListItemTemplate", + "description": "One `` root.", + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "minInlineSize", - "value": "SizeUnits", - "description": "Adjust the minimum inline size.", - "isOptional": true, - "defaultValue": "'0'" + "name": "children", + "value": "POSListTemplateNode[]", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "src", + "name": "templateId", "value": "string", - "description": "The source of the file to preview.\n\nThe value must be either:\n- A relative path that will be appended to your app's `application_url`.\n- A full URL to your app's backend that will be used to return the file.\n\nSupported file types:\n- HTML files\n- Text files\n- PDF files", - "isOptional": true + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", "name": "type", - "value": "'text/html' | 'text/plain' | 'application/pdf'", - "description": "The content type of the file to display.", - "isOptional": true, - "defaultValue": "'text/html'" + "value": "'button' | 'text'", + "description": "`button` rows fire `rowclick`; `text` rows are static content." } ], - "value": "interface Embed {\n /**\n * Adjust the block size.\n * @default 'auto'\n */\n blockSize?: SizeUnitsOrAuto;\n /**\n * Adjust the minimum block size.\n * @default '0'\n */\n minBlockSize?: SizeUnits;\n /**\n * Adjust the maximum block size.\n * @default 'none'\n */\n maxBlockSize?: SizeUnitsOrNone;\n /**\n * Adjust the inline size.\n * @default 'auto'\n */\n inlineSize?: SizeUnitsOrAuto;\n /**\n * Adjust the minimum inline size.\n * @default '0'\n */\n minInlineSize?: SizeUnits;\n /**\n * Adjust the maximum inline size.\n * @default 'none'\n */\n maxInlineSize?: SizeUnitsOrNone;\n /**\n * The content type of the file to display.\n * @default 'text/html'\n */\n type?: 'text/html' | 'text/plain' | 'application/pdf';\n /**\n * The source of the file to preview.\n *\n * The value must be either:\n * - A relative path that will be appended to your app's `application_url`.\n * - A full URL to your app's backend that will be used to return the file.\n *\n * Supported file types:\n * - HTML files\n * - Text files\n * - PDF files\n * @implementation If this value is omitted, the component should render an empty state or nothing.\n */\n src?: string;\n /**\n * A label that describes the purpose or contents of the embed. It will be read to users\n * using assistive technologies such as screen readers.\n * @implementation for web-based implementations, this should map to the [title](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/title) attribute\n */\n accessibilityLabel?: string;\n}" + "value": "interface POSListItemTemplate {\n templateId: string;\n /** `button` rows fire `rowclick`; `text` rows are static content. */\n type: 'button' | 'text';\n children: POSListTemplateNode[];\n}" } }, - "SizeUnitsOrAuto": { + "POSListTemplateNode": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "TypeAliasDeclaration", - "name": "SizeUnitsOrAuto", - "value": "SizeUnits | 'auto'", + "name": "POSListTemplateNode", + "value": "{\n kind: 'element';\n tag: string;\n props?: Record;\n children?: POSListTemplateNode[];\n } | {\n kind: 'text';\n segments: POSListTemplateSegment[];\n } | {\n kind: 'if';\n path: string;\n children: POSListTemplateNode[];\n }", "description": "" } }, - "SizeUnits": { + "POSListTemplateProp": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "TypeAliasDeclaration", - "name": "SizeUnits", - "value": "`${number}px` | `${number}%` | `0`", + "name": "POSListTemplateProp", + "value": "{\n kind: 'literal';\n value: string | boolean;\n } | {\n kind: 'field';\n path: string;\n } | {\n kind: 'segments';\n segments: POSListTemplateSegment[];\n }", "description": "" } }, - "SizeUnitsOrNone": { + "POSListTemplateSegment": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "TypeAliasDeclaration", - "name": "SizeUnitsOrNone", - "value": "SizeUnits | 'none'", - "description": "" + "name": "POSListTemplateSegment", + "value": "string | {\n path: string;\n }", + "description": "A literal string piece or a row-field lookup within interpolated text." } }, - "Spinner": { + "CallbackEvent": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Spinner", - "description": "Displays a loading indicator while content or actions are in progress.", - "isPublicDocs": true, + "name": "CallbackEvent", + "description": "", "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "accessibilityLabel", - "value": "string", - "description": "A label that describes the purpose of the progress. When set, it will be announced to users using assistive technologies and will provide them with more context. Providing an `accessibilityLabel` is recommended if there is no accompanying text describing that something is loading.", + "name": "bubbles", + "value": "boolean", + "description": "", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "id", - "value": "string", - "description": "A unique identifier for the element.", - "isOptional": true - } - ], - "value": "interface Spinner {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * A label that describes the purpose of the progress. When set,\n * it will be announced to users using assistive technologies and will\n * provide them with more context. Providing an `accessibilityLabel` is\n * recommended if there is no accompanying text describing that something\n * is loading.\n */\n accessibilityLabel?: string;\n}" - } - }, - "SwitchEvents": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "SwitchEvents", - "description": "The switch component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", - "isPublicDocs": true, - "members": [ - { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "change", - "value": "(event: CallbackEvent<\"s-switch\">) => void", + "name": "cancelable", + "value": "boolean", "description": "", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "input", - "value": "(event: CallbackEvent<\"s-switch\">) => void", + "name": "composed", + "value": "boolean", "description": "", "isOptional": true - } - ], - "value": "interface SwitchEvents {\n input?: (event: CallbackEvent) => void;\n change?: (event: CallbackEvent) => void;\n}" - } - }, - "Switch": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Switch", - "description": "Allows merchants to toggle a setting on or off.", - "isPublicDocs": true, - "members": [ + }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "accessibilityLabel", - "value": "string", - "description": "A label used for users using assistive technologies like screen readers. When set, any children or `label` supplied will not be announced. This can also be used to display a control without a visual label, while still providing context to users using screen readers.", - "isOptional": true + "name": "currentTarget", + "value": "HTMLElementTagNameMap[T]", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "checked", - "value": "boolean", - "description": "Whether the control is active.", - "isOptional": true, - "defaultValue": "false" + "name": "detail", + "value": "any", + "description": "", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "defaultChecked", - "value": "boolean", - "description": "Whether the control is active by default.", - "isOptional": true, - "defaultValue": "false" + "name": "eventPhase", + "value": "number", + "description": "" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "details", - "value": "string", - "description": "Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user.\n\nThis will also be exposed to screen reader users.", - "isOptional": true - }, + "name": "target", + "value": "HTMLElementTagNameMap[T] | null", + "description": "" + } + ], + "value": "interface CallbackEvent {\n currentTarget: HTMLElementTagNameMap[T];\n bubbles?: boolean;\n cancelable?: boolean;\n composed?: boolean;\n detail?: any;\n eventPhase: number;\n target: HTMLElementTagNameMap[T] | null;\n}" + } + }, + "POSListRowClickEvent": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "POSListRowClickEvent", + "value": "CallbackEvent & {\n detail: {\n item: POSListRow;\n index: number;\n };\n}", + "description": "The event fired when a `button` row is activated. `detail.item` is the activated row and `detail.index` its position in `rows`. POS delivers the row data in `detail` because its RemoteDOM bridge forwards only `detail` when dispatching an event to the extension; the shared `POSListRowClickEvent` contract declares `item` and `index` on the event, which POS exposes once the bridge forwards custom event properties." + } + }, + "POSListRow": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "POSListRow", + "description": "A row supplied to `s-pos-list`. Rows are plain data; every member other than `id` and `templateFor` is available to the row's item template through `{{path}}`, `bind:prop`, and `{{#if path}}` bindings.", + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "disabled", - "value": "boolean", - "description": "Disables the control, disallowing any interaction.", - "isOptional": true, - "defaultValue": "false" + "name": "[field: string]", + "value": "unknown" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "error", + "name": "id", "value": "string", - "description": "Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately.", - "isOptional": true + "description": "A unique identifier for the row. Keys virtualization and identity across incremental loads." }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "label", + "name": "templateFor", "value": "string", - "description": "Visual content to use as the control label.", - "isOptional": true - }, + "description": "The `templateId` of the item template that renders this row." + } + ], + "value": "interface POSListRow {\n /** A unique identifier for the row. Keys virtualization and identity across incremental loads. */\n id: string;\n /** The `templateId` of the item template that renders this row. */\n templateFor: string;\n /** Any additional data the row's template reads. */\n [field: string]: unknown;\n}" + } + }, + "POSListEvents": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "POSListEvents", + "description": "The POS list component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "labelAccessibilityVisibility", - "value": "'visible' | 'exclusive'", - "description": "Changes the visibility of the component's label.\n\n- `visible`: the label is visible to all users.\n- `exclusive`: the label is visually hidden but remains in the accessibility tree.", - "isOptional": true, - "defaultValue": "'visible'" + "name": "loadmore", + "value": "(event: CallbackEvent<\"s-pos-list\">) => void", + "description": "Callback when the list has scrolled near its end and more rows should be loaded.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "value", - "value": "string", - "description": "The value used in form data when the control is checked.", + "name": "rowclick", + "value": "(event: POSListRowClickEvent) => void", + "description": "Callback when a `button` row is activated. `event.detail.item` is the row and `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it.", "isOptional": true } ], - "value": "interface Switch {\n /** The value used in form data when the control is checked. */\n value?: string;\n /**\n * Whether the control is active by default.\n * @implementation `defaultChecked` reflects to the `checked` attribute.\n * @default false\n */\n defaultChecked?: boolean;\n /**\n * Disables the control, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n /**\n * A label used for users using assistive technologies like screen readers. When set, any children or `label` supplied will not be announced.\n * This can also be used to display a control without a visual label, while still providing context to users using screen readers.\n */\n accessibilityLabel?: string;\n /**\n * Whether the control is active.\n * @default false\n */\n checked?: boolean;\n /** Visual content to use as the control label. */\n label?: string;\n /**\n * Additional text to provide context or guidance for the field.\n * This text is displayed along with the field and its label\n * to offer more information or instructions to the user.\n *\n * This will also be exposed to screen reader users.\n */\n details?: string;\n /**\n * Indicate an error to the user. The field will be given a specific stylistic treatment\n * to communicate problems that have to be resolved immediately.\n */\n error?: string;\n /**\n * Changes the visibility of the component's label.\n *\n * - `visible`: the label is visible to all users.\n * - `exclusive`: the label is visually hidden but remains in the accessibility tree.\n * @default 'visible'\n */\n labelAccessibilityVisibility?: ExtractStrict<\n 'visible' | 'hidden' | 'exclusive',\n 'visible' | 'exclusive'\n >;\n}" + "value": "interface POSListEvents {\n /**\n * Callback when a `button` row is activated. `event.detail.item` is the row and\n * `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it.\n */\n rowclick?: (event: POSListRowClickEvent) => void;\n /** Callback when the list has scrolled near its end and more rows should be loaded. */\n loadmore?: (event: CallbackEvent) => void;\n}" } }, - "TabsEvents": { + "POSListSlots": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "TabsEvents", - "description": "The tabs component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "name": "POSListSlots", + "description": "Content slots for the POS list.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "change", - "value": "(event: CallbackEvent<\"s-tabs\">) => void", - "description": "", + "name": "header", + "value": "HTMLElement", + "description": "Content displayed before the rows as part of the list's scrollable content.", "isOptional": true } ], - "value": "interface TabsEvents {\n change?: (event: CallbackEvent) => void;\n}" + "value": "interface POSListSlots {\n /** Content displayed before the rows as part of the list's scrollable content. */\n header?: HTMLElement;\n}" } }, - "Tabs": { + "POSList": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Tabs", - "description": "Groups related content into selectable tabbed views.", + "name": "POSList", + "description": "Displays a virtualized list of rows rendered from plain data and item templates compiled with `posListTemplate`.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "defaultValue", + "name": "id", "value": "string", - "description": "The default value of the selected tab.\n\nThis should match the `id` prop of one of the tab panel components. If not provided, the first tab will be selected by default.\n\nReflects to the `value` attribute", + "description": "A unique identifier for the element.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "disabled", - "value": "boolean", - "description": "Disables all tabs and prevents user interaction.", + "name": "itemTemplates", + "value": "POSListTemplates", + "description": "The compiled item templates, one per ``, produced by `posListTemplate`. A row whose `templateFor` matches no template renders nothing.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "value", - "value": "string", - "description": "The value of the selected tab.\n\nThis should match the `id` prop of one of the tab panel components. If not provided, the first tab will be selected by default.", - "isOptional": true + "name": "loadingMore", + "value": "boolean", + "description": "Whether additional rows are being loaded. Renders a progress indicator after the last row.", + "isOptional": true, + "defaultValue": "false" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "rows", + "value": "POSListRow[]", + "description": "The rows displayed in the list. Each row names the item template that renders it through `templateFor`.", + "isOptional": true, + "defaultValue": "[]" } ], - "value": "interface Tabs {\n /**\n * The value of the selected tab.\n *\n * This should match the `id` prop of one of the tab panel components.\n * If not provided, the first tab will be selected by default.\n */\n value?: string;\n /**\n * The default value of the selected tab.\n *\n * This should match the `id` prop of one of the tab panel components.\n * If not provided, the first tab will be selected by default.\n *\n * Reflects to the `value` attribute\n */\n defaultValue?: string;\n /** Disables all tabs and prevents user interaction. */\n disabled?: boolean;\n}" + "value": "interface POSList {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * The rows displayed in the list. Each row names the item template that renders it through\n * `templateFor`.\n * @default []\n */\n rows?: POSListRow[];\n /**\n * The compiled item templates, one per ``, produced by `posListTemplate`.\n * A row whose `templateFor` matches no template renders nothing.\n */\n itemTemplates?: POSListTemplates;\n /**\n * Whether additional rows are being loaded. Renders a progress indicator after the last row.\n * @default false\n */\n loadingMore?: boolean;\n}" } }, - "Tab": { + "LinkEvents": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Tab", - "description": "Represents an individual tab inside a tabs component.", + "name": "LinkEvents", + "description": "The link component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "controls", - "value": "string", - "description": "Corresponds to the `id` property of the tab panel component that will be displayed when selected", + "name": "click", + "value": "(event: CallbackEvent<\"s-link\">) => void", + "description": "Called when the link is activated.", "isOptional": true - }, - { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "disabled", - "value": "boolean", - "description": "Disables the control, disallowing any interaction.", - "isOptional": true, - "defaultValue": "false" } ], - "value": "interface Tab {\n /** Corresponds to the `id` property of the tab panel component that will be displayed when selected */\n controls?: string;\n /**\n * Disables the control, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n}" + "value": "interface LinkEvents {\n /** Called when the link is activated. */\n click?: (event: CallbackEvent) => void;\n}" } }, - "TabPanel": { + "Link": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "TabPanel", - "description": "Represents content associated with a selected tab.", + "name": "Link", + "description": "The link component makes text interactive, allowing users to trigger actions through tappable text. Use it for lightweight interactions, navigation triggers, or actions embedded within text content.\n\nLinks support the command system for controlling other components declaratively. Use `command` and `commandFor` to show, hide, or toggle modals and other targetable elements. For primary actions like submitting forms or triggering operations, use [button](/docs/api/pos-ui-extensions/{API_VERSION}/polaris-web-components/actions/button) instead.", "isPublicDocs": true, "members": [ + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "accessibilityLabel", + "value": "string", + "description": "A label that describes the purpose or contents of the link. It will be read to users using assistive technologies such as screen readers.\n\nUse this when using only an icon or the content of the link is not enough context for users using assistive technologies.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "command", + "value": "'--auto' | '--show' | '--hide' | '--toggle' | '--copy'", + "description": "Sets the action the `commandFor` should take when this clickable is activated.\n\nSee the documentation of particular components for the actions they support.\n\n- `--auto`: a default action for the target component.\n- `--show`: shows the target component.\n- `--hide`: hides the target component.\n- `--toggle`: toggles the target component.\n- `--copy`: copies the target ClipboardItem.", + "isOptional": true, + "defaultValue": "'--auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "commandFor", + "value": "string", + "description": "ID of a component that should respond to activations (e.g. clicks) on this component.\n\nSee `command` for how to control the behavior of the target.", + "isOptional": true + }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", "name": "id", "value": "string", - "description": "The id of the tab panel used for identification in the tabs component. Must match the `controls` prop of the corresponding tab component.", + "description": "A unique identifier for the element.", "isOptional": true } ], - "value": "interface TabPanel {\n /**\n * The id of the tab panel used for identification in the tabs component.\n * Must match the `controls` prop of the corresponding tab component.\n */\n id?: string;\n}" + "value": "interface Link {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * ID of a component that should respond to activations (e.g. clicks) on this component.\n *\n * See `command` for how to control the behavior of the target.\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#commandfor\n */\n commandFor?: string;\n /**\n * Sets the action the `commandFor` should take when this clickable is activated.\n *\n * See the documentation of particular components for the actions they support.\n *\n * - `--auto`: a default action for the target component.\n * - `--show`: shows the target component.\n * - `--hide`: hides the target component.\n * - `--toggle`: toggles the target component.\n * - `--copy`: copies the target ClipboardItem.\n * @default '--auto'\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#command\n */\n command?: '--auto' | '--show' | '--hide' | '--toggle' | '--copy';\n /**\n * A label that describes the purpose or contents of the link. It will be read to users using assistive technologies such as screen readers.\n *\n * Use this when using only an icon or the content of the link is not enough context\n * for users using assistive technologies.\n */\n accessibilityLabel?: string;\n}" } }, - "TextAreaEvents": { + "EmptyStateSlots": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "TextAreaEvents", - "description": "The text area component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "name": "EmptyStateSlots", + "description": "The empty state component supports slots for adding graphics and actions. Learn more about [using slots](/docs/api/polaris/using-polaris-web-components#slots).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "blur", - "value": "(event: CallbackEvent<\"s-text-area\">) => void", - "description": "Callback when the element loses focus.", - "isOptional": true - }, - { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "change", - "value": "(event: CallbackEvent<\"s-text-area\">) => void", - "description": "Callback after editing completes (typically on blur).", + "name": "graphic", + "value": "HTMLElement", + "description": "The graphic to display in the empty state. The only supported components is Icon, with a type of `alert-circle`, `search`, `info`, or `circle-info`.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "focus", - "value": "(event: CallbackEvent<\"s-text-area\">) => void", - "description": "Callback when the element receives focus.", + "name": "primary-action", + "value": "HTMLElement", + "description": "The primary action to perform, provided as a button or link type element.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "input", - "value": "(event: CallbackEvent<\"s-text-area\">) => void", - "description": "Callback when the user makes any changes in the field.", + "name": "secondary-actions", + "value": "HTMLElement", + "description": "The secondary actions to perform, provided as button or link type elements.", "isOptional": true } ], - "value": "interface TextAreaEvents {\n /** Callback when the user makes any changes in the field. */\n input?: (event: CallbackEvent) => void;\n /** Callback after editing completes (typically on blur). */\n change?: (event: CallbackEvent) => void;\n /** Callback when the element loses focus. */\n blur?: (event: CallbackEvent) => void;\n /** Callback when the element receives focus. */\n focus?: (event: CallbackEvent) => void;\n}" + "value": "interface EmptyStateSlots {\n /** The primary action to perform, provided as a button or link type element. */\n 'primary-action'?: HTMLElement;\n /** The secondary actions to perform, provided as button or link type elements. */\n 'secondary-actions'?: HTMLElement;\n /** The graphic to display in the empty state. The only supported components is Icon, with a type of `alert-circle`, `search`, `info`, or `circle-info`. */\n graphic?: HTMLElement;\n}" } }, - "TextArea": { + "EmptyState": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "TextArea", - "description": "Collects multi-line text input from the merchant.", + "name": "EmptyState", + "description": "Displays an empty-state message with optional actions and supporting graphics.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "details", + "name": "heading", "value": "string", - "description": "Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user.\n\nThis will also be exposed to screen reader users.", + "description": "The heading of the empty state.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "disabled", - "value": "boolean", - "description": "Disables the field, disallowing any interaction.", - "isOptional": true, - "defaultValue": "false" - }, + "name": "subheading", + "value": "string", + "description": "The subheading of the empty state.", + "isOptional": true + } + ], + "value": "interface EmptyState {\n /** The subheading of the empty state. */\n subheading?: string;\n /** The heading of the empty state. */\n heading?: string;\n}" + } + }, + "Embed": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Embed", + "description": "The embed component displays a preview of printable content from a specified source URL. Use it to show users what will be printed before triggering the actual print operation.\n\nEmbed works in conjunction with the Print API to provide complete print functionality from preview to execution.\n\nSupported document types:\n\n- **HTML documents** (`.html`, `.htm`) - Best printing experience with full CSS styling, embedded images, and complex layouts. Use for receipts, invoices, and formatted reports.\n\n- **Text files** (`.txt`, `.csv`) - Plain text with basic content and tabular data support. Use for simple receipts and data exports.\n\n- **PDF files** (`.pdf`) - Behavior varies by platform: prints directly on iOS/desktop, but downloads to external viewer on Android. Use for complex documents and compliance requirements.\n\n[Learn how to build a print extension in POS](/docs/apps/build/pos/build-print-extension).", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "error", + "name": "accessibilityLabel", "value": "string", - "description": "Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately.", + "description": "A label that describes the purpose or contents of the embed. It will be read to users using assistive technologies such as screen readers.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "id", - "value": "string", - "description": "A unique identifier for the element.", - "isOptional": true + "name": "blockSize", + "value": "SizeUnitsOrAuto", + "description": "Adjust the block size.", + "isOptional": true, + "defaultValue": "'auto'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "label", - "value": "string", - "description": "Content to use as the field label.", - "isOptional": true + "name": "inlineSize", + "value": "SizeUnitsOrAuto", + "description": "Adjust the inline size.", + "isOptional": true, + "defaultValue": "'auto'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxLength", - "value": "number", - "description": "Specifies the maximum number of characters allowed.", + "name": "maxBlockSize", + "value": "SizeUnitsOrNone", + "description": "Adjust the maximum block size.", "isOptional": true, - "defaultValue": "Infinity" + "defaultValue": "'none'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "placeholder", - "value": "string", - "description": "A short hint that describes the expected value of the field.", - "isOptional": true + "name": "maxInlineSize", + "value": "SizeUnitsOrNone", + "description": "Adjust the maximum inline size.", + "isOptional": true, + "defaultValue": "'none'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "required", - "value": "boolean", - "description": "Whether the field needs a value. This requirement adds semantic value to the field, but it will not cause an error to appear automatically. If you want to present an error when this field is empty, you can do so with the `error` property.", + "name": "minBlockSize", + "value": "SizeUnits", + "description": "Adjust the minimum block size.", "isOptional": true, - "defaultValue": "false" + "defaultValue": "'0'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "rows", - "value": "number", - "description": "A number of visible text lines.", + "name": "minInlineSize", + "value": "SizeUnits", + "description": "Adjust the minimum inline size.", "isOptional": true, - "defaultValue": "2" + "defaultValue": "'0'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "value", + "name": "src", "value": "string", - "description": "The current value for the field. If omitted, the field will be empty.", + "description": "The source of the file to preview.\n\nThe value must be either:\n- A relative path that will be appended to your app's `application_url`.\n- A full URL to your app's backend that will be used to return the file.\n\nSupported file types:\n- HTML files\n- Text files\n- PDF files", "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "type", + "value": "'text/html' | 'text/plain' | 'application/pdf'", + "description": "The content type of the file to display.", + "isOptional": true, + "defaultValue": "'text/html'" } ], - "value": "interface TextArea {\n /** A unique identifier for the element. */\n id?: string;\n /** Content to use as the field label. */\n label?: string;\n /**\n * Additional text to provide context or guidance for the field.\n * This text is displayed along with the field and its label\n * to offer more information or instructions to the user.\n *\n * This will also be exposed to screen reader users.\n */\n details?: string;\n /** The current value for the field. If omitted, the field will be empty. */\n value?: string;\n /** A short hint that describes the expected value of the field. */\n placeholder?: string;\n /**\n * Disables the field, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n /**\n * Indicate an error to the user. The field will be given a specific stylistic treatment\n * to communicate problems that have to be resolved immediately.\n */\n error?: string;\n /**\n * Whether the field needs a value. This requirement adds semantic value\n * to the field, but it will not cause an error to appear automatically.\n * If you want to present an error when this field is empty, you can do\n * so with the `error` property.\n * @default false\n */\n required?: boolean;\n /**\n * Specifies the maximum number of characters allowed.\n * @default Infinity\n */\n maxLength?: number;\n /**\n * A number of visible text lines.\n * @default 2\n */\n rows?: number;\n}" + "value": "interface Embed {\n /**\n * Adjust the block size.\n * @default 'auto'\n */\n blockSize?: SizeUnitsOrAuto;\n /**\n * Adjust the minimum block size.\n * @default '0'\n */\n minBlockSize?: SizeUnits;\n /**\n * Adjust the maximum block size.\n * @default 'none'\n */\n maxBlockSize?: SizeUnitsOrNone;\n /**\n * Adjust the inline size.\n * @default 'auto'\n */\n inlineSize?: SizeUnitsOrAuto;\n /**\n * Adjust the minimum inline size.\n * @default '0'\n */\n minInlineSize?: SizeUnits;\n /**\n * Adjust the maximum inline size.\n * @default 'none'\n */\n maxInlineSize?: SizeUnitsOrNone;\n /**\n * The content type of the file to display.\n * @default 'text/html'\n */\n type?: 'text/html' | 'text/plain' | 'application/pdf';\n /**\n * The source of the file to preview.\n *\n * The value must be either:\n * - A relative path that will be appended to your app's `application_url`.\n * - A full URL to your app's backend that will be used to return the file.\n *\n * Supported file types:\n * - HTML files\n * - Text files\n * - PDF files\n * @implementation If this value is omitted, the component should render an empty state or nothing.\n */\n src?: string;\n /**\n * A label that describes the purpose or contents of the embed. It will be read to users\n * using assistive technologies such as screen readers.\n * @implementation for web-based implementations, this should map to the [title](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/title) attribute\n */\n accessibilityLabel?: string;\n}" } }, - "EmailFieldEvents": { + "SizeUnitsOrAuto": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "EmailFieldEvents", - "description": "The email field component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "syntaxKind": "TypeAliasDeclaration", + "name": "SizeUnitsOrAuto", + "value": "SizeUnits | 'auto'", + "description": "" + } + }, + "SizeUnits": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "SizeUnits", + "value": "`${number}px` | `${number}%` | `0`", + "description": "" + } + }, + "SizeUnitsOrNone": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "SizeUnitsOrNone", + "value": "SizeUnits | 'none'", + "description": "" + } + }, + "Spinner": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Spinner", + "description": "Displays a loading indicator while content or actions are in progress.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "blur", - "value": "(event: CallbackEvent<\"s-email-field\">) => void", - "description": "Callback when the element loses focus.", + "name": "accessibilityLabel", + "value": "string", + "description": "A label that describes the purpose of the progress. When set, it will be announced to users using assistive technologies and will provide them with more context. Providing an `accessibilityLabel` is recommended if there is no accompanying text describing that something is loading.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "change", - "value": "(event: CallbackEvent<\"s-email-field\">) => void", - "description": "Callback after editing completes (typically on blur).", + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", "isOptional": true - }, + } + ], + "value": "interface Spinner {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * A label that describes the purpose of the progress. When set,\n * it will be announced to users using assistive technologies and will\n * provide them with more context. Providing an `accessibilityLabel` is\n * recommended if there is no accompanying text describing that something\n * is loading.\n */\n accessibilityLabel?: string;\n}" + } + }, + "SwitchEvents": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "SwitchEvents", + "description": "The switch component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "focus", - "value": "(event: CallbackEvent<\"s-email-field\">) => void", - "description": "Callback when the element receives focus.", + "name": "change", + "value": "(event: CallbackEvent<\"s-switch\">) => void", + "description": "", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", "name": "input", - "value": "(event: CallbackEvent<\"s-email-field\">) => void", - "description": "Callback when the user makes any changes in the field.", + "value": "(event: CallbackEvent<\"s-switch\">) => void", + "description": "", "isOptional": true } ], - "value": "interface EmailFieldEvents {\n /** Callback when the user makes any changes in the field. */\n input?: (event: CallbackEvent) => void;\n /** Callback after editing completes (typically on blur). */\n change?: (event: CallbackEvent) => void;\n /** Callback when the element loses focus. */\n blur?: (event: CallbackEvent) => void;\n /** Callback when the element receives focus. */\n focus?: (event: CallbackEvent) => void;\n}" + "value": "interface SwitchEvents {\n input?: (event: CallbackEvent) => void;\n change?: (event: CallbackEvent) => void;\n}" } }, - "EmailField": { + "Switch": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "EmailField", - "description": "Collects and validates email address input.", + "name": "Switch", + "description": "Allows merchants to toggle a setting on or off.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "details", + "name": "accessibilityLabel", "value": "string", - "description": "Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user.\n\nThis will also be exposed to screen reader users.", + "description": "A label used for users using assistive technologies like screen readers. When set, any children or `label` supplied will not be announced. This can also be used to display a control without a visual label, while still providing context to users using screen readers.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "disabled", + "name": "checked", "value": "boolean", - "description": "Disables the field, disallowing any interaction.", + "description": "Whether the control is active.", "isOptional": true, "defaultValue": "false" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "error", - "value": "string", - "description": "Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately.", - "isOptional": true + "name": "defaultChecked", + "value": "boolean", + "description": "Whether the control is active by default.", + "isOptional": true, + "defaultValue": "false" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "id", + "name": "details", "value": "string", - "description": "A unique identifier for the element.", + "description": "Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user.\n\nThis will also be exposed to screen reader users.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "label", - "value": "string", - "description": "Content to use as the field label.", - "isOptional": true + "name": "disabled", + "value": "boolean", + "description": "Disables the control, disallowing any interaction.", + "isOptional": true, + "defaultValue": "false" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxLength", - "value": "number", - "description": "Specifies the maximum number of characters allowed.", - "isOptional": true, - "defaultValue": "Infinity" + "name": "error", + "value": "string", + "description": "Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "placeholder", + "name": "label", "value": "string", - "description": "A short hint that describes the expected value of the field.", + "description": "Visual content to use as the control label.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "required", - "value": "boolean", - "description": "Whether the field needs a value. This requirement adds semantic value to the field, but it will not cause an error to appear automatically. If you want to present an error when this field is empty, you can do so with the `error` property.", + "name": "labelAccessibilityVisibility", + "value": "'visible' | 'exclusive'", + "description": "Changes the visibility of the component's label.\n\n- `visible`: the label is visible to all users.\n- `exclusive`: the label is visually hidden but remains in the accessibility tree.", "isOptional": true, - "defaultValue": "false" + "defaultValue": "'visible'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", "name": "value", "value": "string", - "description": "The current value for the field. If omitted, the field will be empty.", + "description": "The value used in form data when the control is checked.", "isOptional": true } ], - "value": "interface EmailField {\n /** A unique identifier for the element. */\n id?: string;\n /** Content to use as the field label. */\n label?: string;\n /** The current value for the field. If omitted, the field will be empty. */\n value?: string;\n /** A short hint that describes the expected value of the field. */\n placeholder?: string;\n /**\n * Disables the field, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n /**\n * Indicate an error to the user. The field will be given a specific stylistic treatment\n * to communicate problems that have to be resolved immediately.\n */\n error?: string;\n /**\n * Whether the field needs a value. This requirement adds semantic value\n * to the field, but it will not cause an error to appear automatically.\n * If you want to present an error when this field is empty, you can do\n * so with the `error` property.\n * @default false\n */\n required?: boolean;\n /**\n * Specifies the maximum number of characters allowed.\n * @default Infinity\n */\n maxLength?: number;\n /**\n * Additional text to provide context or guidance for the field.\n * This text is displayed along with the field and its label\n * to offer more information or instructions to the user.\n *\n * This will also be exposed to screen reader users.\n */\n details?: string;\n}" + "value": "interface Switch {\n /** The value used in form data when the control is checked. */\n value?: string;\n /**\n * Whether the control is active by default.\n * @implementation `defaultChecked` reflects to the `checked` attribute.\n * @default false\n */\n defaultChecked?: boolean;\n /**\n * Disables the control, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n /**\n * A label used for users using assistive technologies like screen readers. When set, any children or `label` supplied will not be announced.\n * This can also be used to display a control without a visual label, while still providing context to users using screen readers.\n */\n accessibilityLabel?: string;\n /**\n * Whether the control is active.\n * @default false\n */\n checked?: boolean;\n /** Visual content to use as the control label. */\n label?: string;\n /**\n * Additional text to provide context or guidance for the field.\n * This text is displayed along with the field and its label\n * to offer more information or instructions to the user.\n *\n * This will also be exposed to screen reader users.\n */\n details?: string;\n /**\n * Indicate an error to the user. The field will be given a specific stylistic treatment\n * to communicate problems that have to be resolved immediately.\n */\n error?: string;\n /**\n * Changes the visibility of the component's label.\n *\n * - `visible`: the label is visible to all users.\n * - `exclusive`: the label is visually hidden but remains in the accessibility tree.\n * @default 'visible'\n */\n labelAccessibilityVisibility?: ExtractStrict<\n 'visible' | 'hidden' | 'exclusive',\n 'visible' | 'exclusive'\n >;\n}" } }, - "ButtonEvents": { + "TabsEvents": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "ButtonEvents", - "description": "The button component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "name": "TabsEvents", + "description": "The tabs component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "click", - "value": "(event: CallbackEvent<\"s-button\">) => void", - "description": "Called when the button is activated.", + "name": "change", + "value": "(event: CallbackEvent<\"s-tabs\">) => void", + "description": "", "isOptional": true } ], - "value": "interface ButtonEvents {\n /** Called when the button is activated. */\n click?: (event: CallbackEvent) => void;\n}" + "value": "interface TabsEvents {\n change?: (event: CallbackEvent) => void;\n}" } }, - "Button": { + "Tabs": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Button", - "description": "Triggers actions when selected by the merchant.", + "name": "Tabs", + "description": "Groups related content into selectable tabbed views.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "command", - "value": "'--auto' | '--show' | '--hide' | '--toggle'", - "description": "Sets the action the `commandFor` should take when this clickable is activated.\n\nSee the documentation of particular components for the actions they support.\n\n- `--auto`: a default action for the target component.\n- `--show`: shows the target component.\n- `--hide`: hides the target component.\n- `--toggle`: toggles the target component.", - "isOptional": true, - "defaultValue": "'--auto'" - }, - { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "commandFor", + "name": "defaultValue", "value": "string", - "description": "ID of a component that should respond to activations (e.g. clicks) on this component.\n\nSee `command` for how to control the behavior of the target.", + "description": "The default value of the selected tab.\n\nThis should match the `id` prop of one of the tab panel components. If not provided, the first tab will be selected by default.\n\nReflects to the `value` attribute", "isOptional": true }, { @@ -5424,119 +5686,142 @@ "syntaxKind": "PropertySignature", "name": "disabled", "value": "boolean", - "description": "Disables the button meaning it cannot be clicked or receive focus.", - "isOptional": true, - "defaultValue": "false" + "description": "Disables all tabs and prevents user interaction.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "id", + "name": "value", "value": "string", - "description": "A unique identifier for the element.", + "description": "The value of the selected tab.\n\nThis should match the `id` prop of one of the tab panel components. If not provided, the first tab will be selected by default.", "isOptional": true - }, + } + ], + "value": "interface Tabs {\n /**\n * The value of the selected tab.\n *\n * This should match the `id` prop of one of the tab panel components.\n * If not provided, the first tab will be selected by default.\n */\n value?: string;\n /**\n * The default value of the selected tab.\n *\n * This should match the `id` prop of one of the tab panel components.\n * If not provided, the first tab will be selected by default.\n *\n * Reflects to the `value` attribute\n */\n defaultValue?: string;\n /** Disables all tabs and prevents user interaction. */\n disabled?: boolean;\n}" + } + }, + "Tab": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Tab", + "description": "Represents an individual tab inside a tabs component.", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "loading", - "value": "boolean", - "description": "Replaces content with a loading indicator while a background action is being performed.\n\nThis also disables the button.", - "isOptional": true, - "defaultValue": "false" + "name": "controls", + "value": "string", + "description": "Corresponds to the `id` property of the tab panel component that will be displayed when selected", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "tone", - "value": "'auto' | 'neutral' | 'caution' | 'warning' | 'critical'", - "description": "Sets the tone of the button, based on the intention of the information being conveyed.", + "name": "disabled", + "value": "boolean", + "description": "Disables the control, disallowing any interaction.", "isOptional": true, - "defaultValue": "'auto'" - }, + "defaultValue": "false" + } + ], + "value": "interface Tab {\n /** Corresponds to the `id` property of the tab panel component that will be displayed when selected */\n controls?: string;\n /**\n * Disables the control, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n}" + } + }, + "TabPanel": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "TabPanel", + "description": "Represents content associated with a selected tab.", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "variant", - "value": "'auto' | 'primary' | 'secondary'", - "description": "Changes the visual appearance of the button.", - "isOptional": true, - "defaultValue": "'auto'" + "name": "id", + "value": "string", + "description": "The id of the tab panel used for identification in the tabs component. Must match the `controls` prop of the corresponding tab component.", + "isOptional": true } ], - "value": "interface Button {\n /**\n * Sets the action the `commandFor` should take when this clickable is activated.\n *\n * See the documentation of particular components for the actions they support.\n *\n * - `--auto`: a default action for the target component.\n * - `--show`: shows the target component.\n * - `--hide`: hides the target component.\n * - `--toggle`: toggles the target component.\n * @default '--auto'\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#command\n */\n command?: '--auto' | '--show' | '--hide' | '--toggle';\n /**\n * Sets the tone of the button, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: 'auto' | 'neutral' | 'caution' | 'warning' | 'critical';\n /**\n * Changes the visual appearance of the button.\n * @default 'auto'\n */\n variant?: 'auto' | 'primary' | 'secondary';\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Disables the button meaning it cannot be clicked or receive focus.\n * @default false\n */\n disabled?: boolean;\n /**\n * ID of a component that should respond to activations (e.g. clicks) on this component.\n *\n * See `command` for how to control the behavior of the target.\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#commandfor\n */\n commandFor?: string;\n /**\n * Replaces content with a loading indicator while a background action is being performed.\n *\n * This also disables the button.\n * @default false\n */\n loading?: boolean;\n}" + "value": "interface TabPanel {\n /**\n * The id of the tab panel used for identification in the tabs component.\n * Must match the `controls` prop of the corresponding tab component.\n */\n id?: string;\n}" } }, - "Text": { + "TextAreaEvents": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Text", - "description": "Renders styled textual content.", + "name": "TextAreaEvents", + "description": "The text area component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "color", - "value": "ColorKeyword", - "description": "Modify the color to be more or less intense.", - "isOptional": true, - "defaultValue": "'base'" + "name": "blur", + "value": "(event: CallbackEvent<\"s-text-area\">) => void", + "description": "Callback when the element loses focus.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "id", - "value": "string", - "description": "A unique identifier for the element.", + "name": "change", + "value": "(event: CallbackEvent<\"s-text-area\">) => void", + "description": "Callback after editing completes (typically on blur).", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "tone", - "value": "| 'auto'\n | 'neutral'\n | 'info'\n | 'success'\n | 'caution'\n | 'warning'\n | 'critical'", - "description": "Sets the tone of the component, based on the intention of the information being conveyed.", - "isOptional": true, - "defaultValue": "'auto'" + "name": "focus", + "value": "(event: CallbackEvent<\"s-text-area\">) => void", + "description": "Callback when the element receives focus.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "type", - "value": "'strong' | 'small' | 'generic'", - "description": "Provide semantic meaning and default styling to the text.\n\nOther presentation properties on Text override the default styling.", - "isOptional": true, - "defaultValue": "'generic'" + "name": "input", + "value": "(event: CallbackEvent<\"s-text-area\">) => void", + "description": "Callback when the user makes any changes in the field.", + "isOptional": true } ], - "value": "interface Text {\n /**\n * Modify the color to be more or less intense.\n * @default 'base'\n */\n color?: ColorKeyword;\n /**\n * Provide semantic meaning and default styling to the text.\n *\n * Other presentation properties on Text override the default styling.\n * @default 'generic'\n */\n type?: 'strong' | 'small' | 'generic';\n /**\n * Sets the tone of the component, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?:\n | 'auto'\n | 'neutral'\n | 'info'\n | 'success'\n | 'caution'\n | 'warning'\n | 'critical';\n /** A unique identifier for the element. */\n id?: string;\n}" - } - }, - "ColorKeyword": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "TypeAliasDeclaration", - "name": "ColorKeyword", - "value": "'subdued' | 'base' | 'strong'", - "description": "" + "value": "interface TextAreaEvents {\n /** Callback when the user makes any changes in the field. */\n input?: (event: CallbackEvent) => void;\n /** Callback after editing completes (typically on blur). */\n change?: (event: CallbackEvent) => void;\n /** Callback when the element loses focus. */\n blur?: (event: CallbackEvent) => void;\n /** Callback when the element receives focus. */\n focus?: (event: CallbackEvent) => void;\n}" } }, - "ScrollBox": { + "TextArea": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "ScrollBox", - "description": "Provides a scrollable container for overflowing content.", + "name": "TextArea", + "description": "Collects multi-line text input from the merchant.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "blockSize", - "value": "SizeUnitsOrAuto", - "description": "Adjust the block size.", + "name": "details", + "value": "string", + "description": "Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user.\n\nThis will also be exposed to screen reader users.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "disabled", + "value": "boolean", + "description": "Disables the field, disallowing any interaction.", "isOptional": true, - "defaultValue": "'auto'" + "defaultValue": "false" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "error", + "value": "string", + "description": "Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", @@ -5549,176 +5834,132 @@ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "inlineSize", - "value": "SizeUnitsOrAuto", - "description": "Adjust the inline size.", - "isOptional": true, - "defaultValue": "'auto'" + "name": "label", + "value": "string", + "description": "Content to use as the field label.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxBlockSize", - "value": "SizeUnitsOrNone", - "description": "Adjust the maximum block size.", + "name": "maxLength", + "value": "number", + "description": "Specifies the maximum number of characters allowed.", "isOptional": true, - "defaultValue": "'none'" + "defaultValue": "Infinity" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxInlineSize", - "value": "SizeUnitsOrNone", - "description": "Adjust the maximum inline size.", - "isOptional": true, - "defaultValue": "'none'" + "name": "placeholder", + "value": "string", + "description": "A short hint that describes the expected value of the field.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "minBlockSize", - "value": "SizeUnits", - "description": "Adjust the minimum block size.", + "name": "required", + "value": "boolean", + "description": "Whether the field needs a value. This requirement adds semantic value to the field, but it will not cause an error to appear automatically. If you want to present an error when this field is empty, you can do so with the `error` property.", "isOptional": true, - "defaultValue": "'0'" + "defaultValue": "false" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "minInlineSize", - "value": "SizeUnits", - "description": "Adjust the minimum inline size.", - "isOptional": true, - "defaultValue": "'0'" - }, - { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "padding", - "value": "MaybeAllValuesShorthandProperty", - "description": "Adjust the padding of all edges.\n\n[1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:\n\n- 4 values: `block-start inline-end block-end inline-start`\n- 3 values: `block-start inline block-end`\n- 2 values: `block inline`\n\nFor example:\n- `large` means block-start, inline-end, block-end and inline-start paddings are `large`.\n- `large none` means block-start and block-end paddings are `large`, inline-start and inline-end paddings are `none`.\n- `large none large` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `none`.\n- `large none large small` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `small`.\n\nA padding value of `auto` will use the default padding for the closest container that has had its usual padding removed.", - "isOptional": true, - "defaultValue": "'none'" - }, - { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "PropertySignature", - "name": "paddingBlock", - "value": "'' | MaybeTwoValuesShorthandProperty", - "description": "Adjust the block-padding.\n\n- `large none` means block-start padding is `large`, block-end padding is `none`.\n\nThis overrides the block value of `padding`.", + "name": "rows", + "value": "number", + "description": "A number of visible text lines.", "isOptional": true, - "defaultValue": "'' - meaning no override" + "defaultValue": "2" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "paddingBlockEnd", - "value": "'' | PaddingKeyword", - "description": "Adjust the block-end padding.\n\nThis overrides the block-end value of `paddingBlock`.", - "isOptional": true, - "defaultValue": "'' - meaning no override" - }, + "name": "value", + "value": "string", + "description": "The current value for the field. If omitted, the field will be empty.", + "isOptional": true + } + ], + "value": "interface TextArea {\n /** A unique identifier for the element. */\n id?: string;\n /** Content to use as the field label. */\n label?: string;\n /**\n * Additional text to provide context or guidance for the field.\n * This text is displayed along with the field and its label\n * to offer more information or instructions to the user.\n *\n * This will also be exposed to screen reader users.\n */\n details?: string;\n /** The current value for the field. If omitted, the field will be empty. */\n value?: string;\n /** A short hint that describes the expected value of the field. */\n placeholder?: string;\n /**\n * Disables the field, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n /**\n * Indicate an error to the user. The field will be given a specific stylistic treatment\n * to communicate problems that have to be resolved immediately.\n */\n error?: string;\n /**\n * Whether the field needs a value. This requirement adds semantic value\n * to the field, but it will not cause an error to appear automatically.\n * If you want to present an error when this field is empty, you can do\n * so with the `error` property.\n * @default false\n */\n required?: boolean;\n /**\n * Specifies the maximum number of characters allowed.\n * @default Infinity\n */\n maxLength?: number;\n /**\n * A number of visible text lines.\n * @default 2\n */\n rows?: number;\n}" + } + }, + "EmailFieldEvents": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "EmailFieldEvents", + "description": "The email field component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "paddingBlockStart", - "value": "'' | PaddingKeyword", - "description": "Adjust the block-start padding.\n\nThis overrides the block-start value of `paddingBlock`.", - "isOptional": true, - "defaultValue": "'' - meaning no override" + "name": "blur", + "value": "(event: CallbackEvent<\"s-email-field\">) => void", + "description": "Callback when the element loses focus.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "paddingInline", - "value": "'' | MaybeTwoValuesShorthandProperty", - "description": "Adjust the inline padding.\n\n- `large none` means inline-start padding is `large`, inline-end padding is `none`.\n\nThis overrides the inline value of `padding`.", - "isOptional": true, - "defaultValue": "'' - meaning no override" + "name": "change", + "value": "(event: CallbackEvent<\"s-email-field\">) => void", + "description": "Callback after editing completes (typically on blur).", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "paddingInlineEnd", - "value": "'' | PaddingKeyword", - "description": "Adjust the inline-end padding.\n\nThis overrides the inline-end value of `paddingInline`.", - "isOptional": true, - "defaultValue": "'' - meaning no override" + "name": "focus", + "value": "(event: CallbackEvent<\"s-email-field\">) => void", + "description": "Callback when the element receives focus.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "paddingInlineStart", - "value": "'' | PaddingKeyword", - "description": "Adjust the inline-start padding.\n\nThis overrides the inline-start value of `paddingInline`.", - "isOptional": true, - "defaultValue": "'' - meaning no override" + "name": "input", + "value": "(event: CallbackEvent<\"s-email-field\">) => void", + "description": "Callback when the user makes any changes in the field.", + "isOptional": true } ], - "value": "interface ScrollBox {\n /**\n * Adjust the block size.\n * @default 'auto'\n */\n blockSize?: SizeUnitsOrAuto;\n /**\n * Adjust the inline size.\n * @default 'auto'\n */\n inlineSize?: SizeUnitsOrAuto;\n /**\n * Adjust the maximum block size.\n * @default 'none'\n */\n maxBlockSize?: SizeUnitsOrNone;\n /**\n * Adjust the maximum inline size.\n * @default 'none'\n */\n maxInlineSize?: SizeUnitsOrNone;\n /**\n * Adjust the minimum block size.\n * @default '0'\n */\n minBlockSize?: SizeUnits;\n /**\n * Adjust the minimum inline size.\n * @default '0'\n */\n minInlineSize?: SizeUnits;\n /**\n * Adjust the padding of all edges.\n *\n * [1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is\n * supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:\n *\n * - 4 values: `block-start inline-end block-end inline-start`\n * - 3 values: `block-start inline block-end`\n * - 2 values: `block inline`\n *\n * For example:\n * - `large` means block-start, inline-end, block-end and inline-start paddings are `large`.\n * - `large none` means block-start and block-end paddings are `large`, inline-start and inline-end paddings are `none`.\n * - `large none large` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `none`.\n * - `large none large small` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `small`.\n *\n * A padding value of `auto` will use the default padding for the closest container that has had its usual padding removed.\n * @default 'none'\n */\n padding?: MaybeAllValuesShorthandProperty;\n /**\n * Adjust the block-padding.\n *\n * - `large none` means block-start padding is `large`, block-end padding is `none`.\n *\n * This overrides the block value of `padding`.\n * @default '' - meaning no override\n */\n paddingBlock?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the block-start padding.\n *\n * This overrides the block-start value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockStart?: '' | PaddingKeyword;\n /**\n * Adjust the block-end padding.\n *\n * This overrides the block-end value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockEnd?: '' | PaddingKeyword;\n /**\n * Adjust the inline padding.\n *\n * - `large none` means inline-start padding is `large`, inline-end padding is `none`.\n *\n * This overrides the inline value of `padding`.\n * @default '' - meaning no override\n */\n paddingInline?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the inline-start padding.\n *\n * This overrides the inline-start value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineStart?: '' | PaddingKeyword;\n /**\n * Adjust the inline-end padding.\n *\n * This overrides the inline-end value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineEnd?: '' | PaddingKeyword;\n /** A unique identifier for the element. */\n id?: string;\n}" - } - }, - "PaddingKeyword": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "TypeAliasDeclaration", - "name": "PaddingKeyword", - "value": "SizeKeyword | 'none'", - "description": "" - } - }, - "SizeKeyword": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "TypeAliasDeclaration", - "name": "SizeKeyword", - "value": "'small-500' | 'small-400' | 'small-300' | 'small-200' | 'small-100' | 'small' | 'base' | 'large' | 'large-100' | 'large-200' | 'large-300' | 'large-400' | 'large-500'", - "description": "" + "value": "interface EmailFieldEvents {\n /** Callback when the user makes any changes in the field. */\n input?: (event: CallbackEvent) => void;\n /** Callback after editing completes (typically on blur). */\n change?: (event: CallbackEvent) => void;\n /** Callback when the element loses focus. */\n blur?: (event: CallbackEvent) => void;\n /** Callback when the element receives focus. */\n focus?: (event: CallbackEvent) => void;\n}" } }, - "TileEvents": { + "EmailField": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "TileEvents", - "description": "The tile component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", + "name": "EmailField", + "description": "Collects and validates email address input.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "click", - "value": "(event: CallbackEvent<\"s-tile\">) => void", - "description": "Callback when the tile is activated.", + "name": "details", + "value": "string", + "description": "Additional text to provide context or guidance for the field. This text is displayed along with the field and its label to offer more information or instructions to the user.\n\nThis will also be exposed to screen reader users.", "isOptional": true - } - ], - "value": "interface TileEvents {\n /** Callback when the tile is activated. */\n click?: (event: CallbackEvent) => void;\n}" - } - }, - "Tile": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Tile", - "description": "Displays tappable content in a compact tile layout.", - "isPublicDocs": true, - "members": [ + }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", "name": "disabled", "value": "boolean", - "description": "Disables the tile meaning it cannot be clicked or receive focus.", + "description": "Disables the field, disallowing any interaction.", "isOptional": true, "defaultValue": "false" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "heading", + "name": "error", "value": "string", - "description": "A title that describes the content of the tile.", - "isOptional": true, - "defaultValue": "''" + "description": "Indicate an error to the user. The field will be given a specific stylistic treatment to communicate problems that have to be resolved immediately.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", @@ -5731,74 +5972,98 @@ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "itemCount", - "value": "number", - "description": "A numeric indicator rendered within the tile (for example, a count or a step number).\n\n- When provided, the indicator is displayed inside the tile.\n- Intended for small integers. It may clamp, truncate, or abbreviate larger values.", + "name": "label", + "value": "string", + "description": "Content to use as the field label.", "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "subheading", - "value": "string", - "description": "Supporting text displayed below the heading.", + "name": "maxLength", + "value": "number", + "description": "Specifies the maximum number of characters allowed.", "isOptional": true, - "defaultValue": "''" + "defaultValue": "Infinity" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "tone", - "value": "'auto' | 'neutral' | 'accent'", - "description": "Sets the tone of the tile, based on the intention of the information being conveyed.", + "name": "placeholder", + "value": "string", + "description": "A short hint that describes the expected value of the field.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "required", + "value": "boolean", + "description": "Whether the field needs a value. This requirement adds semantic value to the field, but it will not cause an error to appear automatically. If you want to present an error when this field is empty, you can do so with the `error` property.", "isOptional": true, - "defaultValue": "'auto'" + "defaultValue": "false" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "value", + "value": "string", + "description": "The current value for the field. If omitted, the field will be empty.", + "isOptional": true } ], - "value": "interface Tile {\n /**\n * Disables the tile meaning it cannot be clicked or receive focus.\n * @default false\n */\n disabled?: boolean;\n /**\n * A title that describes the content of the tile.\n * @default ''\n */\n heading?: string;\n /** A unique identifier for the element. */\n id?: string;\n /**\n * A numeric indicator rendered within the tile (for example, a count or a step number).\n *\n * - When provided, the indicator is displayed inside the tile.\n * - Intended for small integers. It may clamp, truncate, or abbreviate larger values.\n */\n itemCount?: number;\n /**\n * Sets the tone of the tile, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: ExtractStrict;\n /**\n * Supporting text displayed below the heading.\n * @default ''\n */\n subheading?: string;\n}" + "value": "interface EmailField {\n /** A unique identifier for the element. */\n id?: string;\n /** Content to use as the field label. */\n label?: string;\n /** The current value for the field. If omitted, the field will be empty. */\n value?: string;\n /** A short hint that describes the expected value of the field. */\n placeholder?: string;\n /**\n * Disables the field, disallowing any interaction.\n * @default false\n */\n disabled?: boolean;\n /**\n * Indicate an error to the user. The field will be given a specific stylistic treatment\n * to communicate problems that have to be resolved immediately.\n */\n error?: string;\n /**\n * Whether the field needs a value. This requirement adds semantic value\n * to the field, but it will not cause an error to appear automatically.\n * If you want to present an error when this field is empty, you can do\n * so with the `error` property.\n * @default false\n */\n required?: boolean;\n /**\n * Specifies the maximum number of characters allowed.\n * @default Infinity\n */\n maxLength?: number;\n /**\n * Additional text to provide context or guidance for the field.\n * This text is displayed along with the field and its label\n * to offer more information or instructions to the user.\n *\n * This will also be exposed to screen reader users.\n */\n details?: string;\n}" } }, - "BannerSlots": { + "ButtonEvents": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "BannerSlots", - "description": "The banner component supports slots for additional content placement within the banner. Learn more about [using slots](/docs/api/polaris/using-polaris-web-components#slots).", + "name": "ButtonEvents", + "description": "The button component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "primary-action", - "value": "HTMLElement", - "description": "The action taken when the banner is pressed.", + "name": "click", + "value": "(event: CallbackEvent<\"s-button\">) => void", + "description": "Called when the button is activated.", "isOptional": true } ], - "value": "interface BannerSlots {\n /** The action taken when the banner is pressed. */\n 'primary-action'?: HTMLElement;\n}" + "value": "interface ButtonEvents {\n /** Called when the button is activated. */\n click?: (event: CallbackEvent) => void;\n}" } }, - "Banner": { + "Button": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Banner", - "description": "Shows prominent status and messaging content with optional actions.", + "name": "Button", + "description": "Triggers actions when selected by the merchant.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "heading", - "value": "string", - "description": "The title of the banner.", + "name": "command", + "value": "'--auto' | '--show' | '--hide' | '--toggle'", + "description": "Sets the action the `commandFor` should take when this clickable is activated.\n\nSee the documentation of particular components for the actions they support.\n\n- `--auto`: a default action for the target component.\n- `--show`: shows the target component.\n- `--hide`: hides the target component.\n- `--toggle`: toggles the target component.", "isOptional": true, - "defaultValue": "''" + "defaultValue": "'--auto'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "hidden", + "name": "commandFor", + "value": "string", + "description": "ID of a component that should respond to activations (e.g. clicks) on this component.\n\nSee `command` for how to control the behavior of the target.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "disabled", "value": "boolean", - "description": "Determines whether the banner is hidden.", + "description": "Disables the button meaning it cannot be clicked or receive focus.", "isOptional": true, "defaultValue": "false" }, @@ -5810,34 +6075,52 @@ "description": "A unique identifier for the element.", "isOptional": true }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "loading", + "value": "boolean", + "description": "Replaces content with a loading indicator while a background action is being performed.\n\nThis also disables the button.", + "isOptional": true, + "defaultValue": "false" + }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", "name": "tone", - "value": "'auto' | 'info' | 'success' | 'warning' | 'critical'", - "description": "Sets the tone of the banner, based on the intention of the information being conveyed.", + "value": "'auto' | 'neutral' | 'caution' | 'warning' | 'critical'", + "description": "Sets the tone of the button, based on the intention of the information being conveyed.", + "isOptional": true, + "defaultValue": "'auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "variant", + "value": "'auto' | 'primary' | 'secondary'", + "description": "Changes the visual appearance of the button.", "isOptional": true, "defaultValue": "'auto'" } ], - "value": "interface Banner {\n /**\n * Determines whether the banner is hidden.\n * @default false\n */\n hidden?: boolean;\n /**\n * Sets the tone of the banner, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: 'auto' | 'info' | 'success' | 'warning' | 'critical';\n /**\n * The title of the banner.\n * @default ''\n */\n heading?: string;\n /** A unique identifier for the element. */\n id?: string;\n}" + "value": "interface Button {\n /**\n * Sets the action the `commandFor` should take when this clickable is activated.\n *\n * See the documentation of particular components for the actions they support.\n *\n * - `--auto`: a default action for the target component.\n * - `--show`: shows the target component.\n * - `--hide`: hides the target component.\n * - `--toggle`: toggles the target component.\n * @default '--auto'\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#command\n */\n command?: '--auto' | '--show' | '--hide' | '--toggle';\n /**\n * Sets the tone of the button, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: 'auto' | 'neutral' | 'caution' | 'warning' | 'critical';\n /**\n * Changes the visual appearance of the button.\n * @default 'auto'\n */\n variant?: 'auto' | 'primary' | 'secondary';\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Disables the button meaning it cannot be clicked or receive focus.\n * @default false\n */\n disabled?: boolean;\n /**\n * ID of a component that should respond to activations (e.g. clicks) on this component.\n *\n * See `command` for how to control the behavior of the target.\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#commandfor\n */\n commandFor?: string;\n /**\n * Replaces content with a loading indicator while a background action is being performed.\n *\n * This also disables the button.\n * @default false\n */\n loading?: boolean;\n}" } }, - "Box": { + "Text": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Box", - "description": "Provides a generic layout container with sizing and spacing controls.", + "name": "Text", + "description": "Renders styled textual content.", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "blockSize", - "value": "SizeUnitsOrAuto", - "description": "Adjust the block size.", + "name": "color", + "value": "ColorKeyword", + "description": "Modify the color to be more or less intense.", "isOptional": true, - "defaultValue": "'auto'" + "defaultValue": "'base'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", @@ -5850,8 +6133,63 @@ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "inlineSize", - "value": "SizeUnitsOrAuto", + "name": "tone", + "value": "| 'auto'\n | 'neutral'\n | 'info'\n | 'success'\n | 'caution'\n | 'warning'\n | 'critical'", + "description": "Sets the tone of the component, based on the intention of the information being conveyed.", + "isOptional": true, + "defaultValue": "'auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "type", + "value": "'strong' | 'small' | 'generic'", + "description": "Provide semantic meaning and default styling to the text.\n\nOther presentation properties on Text override the default styling.", + "isOptional": true, + "defaultValue": "'generic'" + } + ], + "value": "interface Text {\n /**\n * Modify the color to be more or less intense.\n * @default 'base'\n */\n color?: ColorKeyword;\n /**\n * Provide semantic meaning and default styling to the text.\n *\n * Other presentation properties on Text override the default styling.\n * @default 'generic'\n */\n type?: 'strong' | 'small' | 'generic';\n /**\n * Sets the tone of the component, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?:\n | 'auto'\n | 'neutral'\n | 'info'\n | 'success'\n | 'caution'\n | 'warning'\n | 'critical';\n /** A unique identifier for the element. */\n id?: string;\n}" + } + }, + "ColorKeyword": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "ColorKeyword", + "value": "'subdued' | 'base' | 'strong'", + "description": "" + } + }, + "ScrollBox": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "ScrollBox", + "description": "Provides a scrollable container for overflowing content.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "blockSize", + "value": "SizeUnitsOrAuto", + "description": "Adjust the block size.", + "isOptional": true, + "defaultValue": "'auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "inlineSize", + "value": "SizeUnitsOrAuto", "description": "Adjust the inline size.", "isOptional": true, "defaultValue": "'auto'" @@ -5956,24 +6294,70 @@ "defaultValue": "'' - meaning no override" } ], - "value": "interface Box {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Adjust the block size.\n * @default 'auto'\n */\n blockSize?: SizeUnitsOrAuto;\n /**\n * Adjust the inline size.\n * @default 'auto'\n */\n inlineSize?: SizeUnitsOrAuto;\n /**\n * Adjust the maximum block size.\n * @default 'none'\n */\n maxBlockSize?: SizeUnitsOrNone;\n /**\n * Adjust the maximum inline size.\n * @default 'none'\n */\n maxInlineSize?: SizeUnitsOrNone;\n /**\n * Adjust the minimum block size.\n * @default '0'\n */\n minBlockSize?: SizeUnits;\n /**\n * Adjust the minimum inline size.\n * @default '0'\n */\n minInlineSize?: SizeUnits;\n /**\n * Adjust the padding of all edges.\n *\n * [1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is\n * supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:\n *\n * - 4 values: `block-start inline-end block-end inline-start`\n * - 3 values: `block-start inline block-end`\n * - 2 values: `block inline`\n *\n * For example:\n * - `large` means block-start, inline-end, block-end and inline-start paddings are `large`.\n * - `large none` means block-start and block-end paddings are `large`, inline-start and inline-end paddings are `none`.\n * - `large none large` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `none`.\n * - `large none large small` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `small`.\n *\n * A padding value of `auto` will use the default padding for the closest container that has had its usual padding removed.\n * @default 'none'\n */\n padding?: MaybeAllValuesShorthandProperty;\n /**\n * Adjust the block-padding.\n *\n * - `large none` means block-start padding is `large`, block-end padding is `none`.\n *\n * This overrides the block value of `padding`.\n * @default '' - meaning no override\n */\n paddingBlock?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the block-start padding.\n *\n * This overrides the block-start value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockStart?: '' | PaddingKeyword;\n /**\n * Adjust the block-end padding.\n *\n * This overrides the block-end value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockEnd?: '' | PaddingKeyword;\n /**\n * Adjust the inline padding.\n *\n * - `large none` means inline-start padding is `large`, inline-end padding is `none`.\n *\n * This overrides the inline value of `padding`.\n * @default '' - meaning no override\n */\n paddingInline?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the inline-start padding.\n *\n * This overrides the inline-start value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineStart?: '' | PaddingKeyword;\n /**\n * Adjust the inline-end padding.\n *\n * This overrides the inline-end value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineEnd?: '' | PaddingKeyword;\n}" + "value": "interface ScrollBox {\n /**\n * Adjust the block size.\n * @default 'auto'\n */\n blockSize?: SizeUnitsOrAuto;\n /**\n * Adjust the inline size.\n * @default 'auto'\n */\n inlineSize?: SizeUnitsOrAuto;\n /**\n * Adjust the maximum block size.\n * @default 'none'\n */\n maxBlockSize?: SizeUnitsOrNone;\n /**\n * Adjust the maximum inline size.\n * @default 'none'\n */\n maxInlineSize?: SizeUnitsOrNone;\n /**\n * Adjust the minimum block size.\n * @default '0'\n */\n minBlockSize?: SizeUnits;\n /**\n * Adjust the minimum inline size.\n * @default '0'\n */\n minInlineSize?: SizeUnits;\n /**\n * Adjust the padding of all edges.\n *\n * [1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is\n * supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:\n *\n * - 4 values: `block-start inline-end block-end inline-start`\n * - 3 values: `block-start inline block-end`\n * - 2 values: `block inline`\n *\n * For example:\n * - `large` means block-start, inline-end, block-end and inline-start paddings are `large`.\n * - `large none` means block-start and block-end paddings are `large`, inline-start and inline-end paddings are `none`.\n * - `large none large` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `none`.\n * - `large none large small` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `small`.\n *\n * A padding value of `auto` will use the default padding for the closest container that has had its usual padding removed.\n * @default 'none'\n */\n padding?: MaybeAllValuesShorthandProperty;\n /**\n * Adjust the block-padding.\n *\n * - `large none` means block-start padding is `large`, block-end padding is `none`.\n *\n * This overrides the block value of `padding`.\n * @default '' - meaning no override\n */\n paddingBlock?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the block-start padding.\n *\n * This overrides the block-start value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockStart?: '' | PaddingKeyword;\n /**\n * Adjust the block-end padding.\n *\n * This overrides the block-end value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockEnd?: '' | PaddingKeyword;\n /**\n * Adjust the inline padding.\n *\n * - `large none` means inline-start padding is `large`, inline-end padding is `none`.\n *\n * This overrides the inline value of `padding`.\n * @default '' - meaning no override\n */\n paddingInline?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the inline-start padding.\n *\n * This overrides the inline-start value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineStart?: '' | PaddingKeyword;\n /**\n * Adjust the inline-end padding.\n *\n * This overrides the inline-end value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineEnd?: '' | PaddingKeyword;\n /** A unique identifier for the element. */\n id?: string;\n}" } }, - "Icon": { + "PaddingKeyword": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Icon", - "description": "Displays a predefined icon glyph.", + "syntaxKind": "TypeAliasDeclaration", + "name": "PaddingKeyword", + "value": "SizeKeyword | 'none'", + "description": "" + } + }, + "SizeKeyword": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "SizeKeyword", + "value": "'small-500' | 'small-400' | 'small-300' | 'small-200' | 'small-100' | 'small' | 'base' | 'large' | 'large-100' | 'large-200' | 'large-300' | 'large-400' | 'large-500'", + "description": "" + } + }, + "TileEvents": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "TileEvents", + "description": "The tile component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "color", - "value": "ColorKeyword", - "description": "Modify the color to be more or less intense.", + "name": "click", + "value": "(event: CallbackEvent<\"s-tile\">) => void", + "description": "Callback when the tile is activated.", + "isOptional": true + } + ], + "value": "interface TileEvents {\n /** Callback when the tile is activated. */\n click?: (event: CallbackEvent) => void;\n}" + } + }, + "Tile": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Tile", + "description": "Displays tappable content in a compact tile layout.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "disabled", + "value": "boolean", + "description": "Disables the tile meaning it cannot be clicked or receive focus.", "isOptional": true, - "defaultValue": "'base'" + "defaultValue": "false" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "heading", + "value": "string", + "description": "A title that describes the content of the tile.", + "isOptional": true, + "defaultValue": "''" }, { "filePath": "src/surfaces/point-of-sale/components.ts", @@ -5986,110 +6370,113 @@ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "size", - "value": "SizeKeyword", - "description": "Adjusts the size of the icon.", - "isOptional": true, - "defaultValue": "'base'" + "name": "itemCount", + "value": "number", + "description": "A numeric indicator rendered within the tile (for example, a count or a step number).\n\n- When provided, the indicator is displayed inside the tile.\n- Intended for small integers. It may clamp, truncate, or abbreviate larger values.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "tone", - "value": "ToneKeyword", - "description": "Sets the tone of the icon, based on the intention of the information being conveyed.", + "name": "subheading", + "value": "string", + "description": "Supporting text displayed below the heading.", "isOptional": true, - "defaultValue": "'auto'" + "defaultValue": "''" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "type", - "value": "SupportedIconNames", - "description": "The type of icon to display.", + "name": "tone", + "value": "'auto' | 'neutral' | 'accent'", + "description": "Sets the tone of the tile, based on the intention of the information being conveyed.", "isOptional": true, - "defaultValue": "''" + "defaultValue": "'auto'" } ], - "value": "interface Icon {\n /**\n * The type of icon to display.\n * @default ''\n */\n type?: SupportedIconNames;\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Sets the tone of the icon, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: ToneKeyword;\n /**\n * Modify the color to be more or less intense.\n * @default 'base'\n */\n color?: ColorKeyword;\n /**\n * Adjusts the size of the icon.\n * @default 'base'\n */\n size?: SizeKeyword;\n}" - } - }, - "ToneKeyword": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "TypeAliasDeclaration", - "name": "ToneKeyword", - "value": "'auto' | 'neutral' | 'info' | 'success' | 'caution' | 'warning' | 'critical' | 'accent' | 'custom'", - "description": "Tone is a property for defining the color treatment of a component.\n\nA tone can apply a grouping of colors to a component. For example, critical may have a specific text color and background color.\n\nIn some cases, like for Banner, the tone may also affect the semantic and accessibility treatment of the component." - } - }, - "SupportedIconNames": { - "src/surfaces/point-of-sale/components.ts": { - "filePath": "src/surfaces/point-of-sale/components.ts", - "syntaxKind": "TypeAliasDeclaration", - "name": "SupportedIconNames", - "value": "'external' | 'alert-circle' | 'apps' | 'arrow-down' | 'arrow-left' | 'arrow-right' | 'arrow-up' | 'backspace' | 'barcode' | 'battery-low' | 'bolt-filled' | 'bullet' | 'camera-flip' | 'caret-down' | 'caret-up' | 'cart' | 'cart-down' | 'cart-filled' | 'cart-send' | 'cart-up' | 'chart-line' | 'chart-vertical' | 'check' | 'check-circle-filled' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'chevron-up' | 'circle' | 'clipboard-checklist' | 'clock' | 'collection' | 'credit-card' | 'credit-card-reader' | 'delete' | 'delivery' | 'desktop' | 'disabled' | 'disabled-filled' | 'discount' | 'discount-add' | 'discount-automatic' | 'discount-code' | 'discount-remove' | 'drag-handle' | 'drawer' | 'duplicate' | 'edit' | 'email' | 'exchange' | 'flag' | 'gift-card' | 'graduation-hat' | 'grid' | 'hide-filled' | 'home' | 'home-filled' | 'image' | 'images' | 'info' | 'inventory' | 'inventory-edit' | 'inventory-list' | 'inventory-transfer' | 'keyboard-hide' | 'keypad' | 'link' | 'list-bulleted' | 'list-bulleted-filled' | 'live' | 'live-critical' | 'live-none' | 'location' | 'lock' | 'maximize' | 'menu' | 'menu-filled' | 'menu-horizontal' | 'minimize' | 'minus' | 'mobile' | 'money' | 'money-split' | 'note' | 'order' | 'order-draft' | 'order-filled' | 'package' | 'package-cancel' | 'package-reassign' | 'payment' | 'person' | 'person-add' | 'person-filled' | 'phablet' | 'phone-out' | 'play-circle' | 'plus' | 'point-of-sale' | 'point-of-sale-register' | 'print' | 'product' | 'product-filled' | 'profile' | 'question-circle-filled' | 'receipt' | 'refresh' | 'return' | 'scan-qr-code' | 'search' | 'send' | 'settings' | 'shipping-label-cancel' | 'sort' | 'star-circle' | 'star-filled' | 'store' | 'tablet' | 'transaction-fee-add' | 'unlock' | 'variant' | 'view' | 'wallet' | 'x' | 'x-circle'", - "description": "" + "value": "interface Tile {\n /**\n * Disables the tile meaning it cannot be clicked or receive focus.\n * @default false\n */\n disabled?: boolean;\n /**\n * A title that describes the content of the tile.\n * @default ''\n */\n heading?: string;\n /** A unique identifier for the element. */\n id?: string;\n /**\n * A numeric indicator rendered within the tile (for example, a count or a step number).\n *\n * - When provided, the indicator is displayed inside the tile.\n * - Intended for small integers. It may clamp, truncate, or abbreviate larger values.\n */\n itemCount?: number;\n /**\n * Sets the tone of the tile, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: ExtractStrict;\n /**\n * Supporting text displayed below the heading.\n * @default ''\n */\n subheading?: string;\n}" } }, - "Stack": { + "BannerSlots": { "src/surfaces/point-of-sale/components.ts": { "filePath": "src/surfaces/point-of-sale/components.ts", - "name": "Stack", - "description": "Arranges children in a horizontal or vertical stack.", + "name": "BannerSlots", + "description": "The banner component supports slots for additional content placement within the banner. Learn more about [using slots](/docs/api/polaris/using-polaris-web-components#slots).", "isPublicDocs": true, "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "alignContent", - "value": "AlignContentKeyword", - "description": "Aligns the stack along the cross axis.", + "name": "primary-action", + "value": "HTMLElement", + "description": "The action taken when the banner is pressed.", "isOptional": true - }, + } + ], + "value": "interface BannerSlots {\n /** The action taken when the banner is pressed. */\n 'primary-action'?: HTMLElement;\n}" + } + }, + "Banner": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Banner", + "description": "Shows prominent status and messaging content with optional actions.", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "alignItems", - "value": "AlignItemsKeyword", - "description": "Aligns the stack's children along the cross axis.", - "isOptional": true + "name": "heading", + "value": "string", + "description": "The title of the banner.", + "isOptional": true, + "defaultValue": "''" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "blockSize", - "value": "SizeUnitsOrAuto", - "description": "Adjust the block size. **Mobile surfaces:** Avoid using percentage-based sizes. They do not behave as expected when placed within a scrollable container.", + "name": "hidden", + "value": "boolean", + "description": "Determines whether the banner is hidden.", "isOptional": true, - "defaultValue": "'auto'" + "defaultValue": "false" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "columnGap", - "value": "'' | SpacingKeyword", - "description": "Adjust spacing between elements in the inline axis. This overrides the column value of gap.", - "isOptional": true, - "defaultValue": "'' - meaning no override" + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "direction", - "value": "'block' | 'inline'", - "description": "Sets how the children are placed within the stack. This uses logical properties.", + "name": "tone", + "value": "'auto' | 'info' | 'success' | 'warning' | 'critical'", + "description": "Sets the tone of the banner, based on the intention of the information being conveyed.", "isOptional": true, - "defaultValue": "'block'" - }, + "defaultValue": "'auto'" + } + ], + "value": "interface Banner {\n /**\n * Determines whether the banner is hidden.\n * @default false\n */\n hidden?: boolean;\n /**\n * Sets the tone of the banner, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: 'auto' | 'info' | 'success' | 'warning' | 'critical';\n /**\n * The title of the banner.\n * @default ''\n */\n heading?: string;\n /** A unique identifier for the element. */\n id?: string;\n}" + } + }, + "Box": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Box", + "description": "Provides a generic layout container with sizing and spacing controls.", + "isPublicDocs": true, + "members": [ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "gap", - "value": "MaybeTwoValuesShorthandProperty", - "description": "Adjust spacing between elements. A single value applies to both axes. A pair of values (eg large-100 large-500) can be used to set the inline and block axes respectively.", + "name": "blockSize", + "value": "SizeUnitsOrAuto", + "description": "Adjust the block size.", "isOptional": true, - "defaultValue": "'none'" + "defaultValue": "'auto'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", @@ -6111,18 +6498,270 @@ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "justifyContent", - "value": "JustifyContentKeyword", - "description": "Aligns the stack along the main axis.", + "name": "maxBlockSize", + "value": "SizeUnitsOrNone", + "description": "Adjust the maximum block size.", "isOptional": true, - "defaultValue": "'normal'" + "defaultValue": "'none'" }, { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "maxBlockSize", + "name": "maxInlineSize", "value": "SizeUnitsOrNone", - "description": "Adjust the maximum block size. **Mobile surfaces:** Avoid using percentage-based sizes. They do not behave as expected when placed within a scrollable container.", + "description": "Adjust the maximum inline size.", + "isOptional": true, + "defaultValue": "'none'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "minBlockSize", + "value": "SizeUnits", + "description": "Adjust the minimum block size.", + "isOptional": true, + "defaultValue": "'0'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "minInlineSize", + "value": "SizeUnits", + "description": "Adjust the minimum inline size.", + "isOptional": true, + "defaultValue": "'0'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "padding", + "value": "MaybeAllValuesShorthandProperty", + "description": "Adjust the padding of all edges.\n\n[1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:\n\n- 4 values: `block-start inline-end block-end inline-start`\n- 3 values: `block-start inline block-end`\n- 2 values: `block inline`\n\nFor example:\n- `large` means block-start, inline-end, block-end and inline-start paddings are `large`.\n- `large none` means block-start and block-end paddings are `large`, inline-start and inline-end paddings are `none`.\n- `large none large` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `none`.\n- `large none large small` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `small`.\n\nA padding value of `auto` will use the default padding for the closest container that has had its usual padding removed.", + "isOptional": true, + "defaultValue": "'none'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "paddingBlock", + "value": "'' | MaybeTwoValuesShorthandProperty", + "description": "Adjust the block-padding.\n\n- `large none` means block-start padding is `large`, block-end padding is `none`.\n\nThis overrides the block value of `padding`.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "paddingBlockEnd", + "value": "'' | PaddingKeyword", + "description": "Adjust the block-end padding.\n\nThis overrides the block-end value of `paddingBlock`.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "paddingBlockStart", + "value": "'' | PaddingKeyword", + "description": "Adjust the block-start padding.\n\nThis overrides the block-start value of `paddingBlock`.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "paddingInline", + "value": "'' | MaybeTwoValuesShorthandProperty", + "description": "Adjust the inline padding.\n\n- `large none` means inline-start padding is `large`, inline-end padding is `none`.\n\nThis overrides the inline value of `padding`.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "paddingInlineEnd", + "value": "'' | PaddingKeyword", + "description": "Adjust the inline-end padding.\n\nThis overrides the inline-end value of `paddingInline`.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "paddingInlineStart", + "value": "'' | PaddingKeyword", + "description": "Adjust the inline-start padding.\n\nThis overrides the inline-start value of `paddingInline`.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + } + ], + "value": "interface Box {\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Adjust the block size.\n * @default 'auto'\n */\n blockSize?: SizeUnitsOrAuto;\n /**\n * Adjust the inline size.\n * @default 'auto'\n */\n inlineSize?: SizeUnitsOrAuto;\n /**\n * Adjust the maximum block size.\n * @default 'none'\n */\n maxBlockSize?: SizeUnitsOrNone;\n /**\n * Adjust the maximum inline size.\n * @default 'none'\n */\n maxInlineSize?: SizeUnitsOrNone;\n /**\n * Adjust the minimum block size.\n * @default '0'\n */\n minBlockSize?: SizeUnits;\n /**\n * Adjust the minimum inline size.\n * @default '0'\n */\n minInlineSize?: SizeUnits;\n /**\n * Adjust the padding of all edges.\n *\n * [1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is\n * supported. Note that, contrary to the CSS, it uses flow-relative values and the order is:\n *\n * - 4 values: `block-start inline-end block-end inline-start`\n * - 3 values: `block-start inline block-end`\n * - 2 values: `block inline`\n *\n * For example:\n * - `large` means block-start, inline-end, block-end and inline-start paddings are `large`.\n * - `large none` means block-start and block-end paddings are `large`, inline-start and inline-end paddings are `none`.\n * - `large none large` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `none`.\n * - `large none large small` means block-start padding is `large`, inline-end padding is `none`, block-end padding is `large` and inline-start padding is `small`.\n *\n * A padding value of `auto` will use the default padding for the closest container that has had its usual padding removed.\n * @default 'none'\n */\n padding?: MaybeAllValuesShorthandProperty;\n /**\n * Adjust the block-padding.\n *\n * - `large none` means block-start padding is `large`, block-end padding is `none`.\n *\n * This overrides the block value of `padding`.\n * @default '' - meaning no override\n */\n paddingBlock?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the block-start padding.\n *\n * This overrides the block-start value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockStart?: '' | PaddingKeyword;\n /**\n * Adjust the block-end padding.\n *\n * This overrides the block-end value of `paddingBlock`.\n * @default '' - meaning no override\n */\n paddingBlockEnd?: '' | PaddingKeyword;\n /**\n * Adjust the inline padding.\n *\n * - `large none` means inline-start padding is `large`, inline-end padding is `none`.\n *\n * This overrides the inline value of `padding`.\n * @default '' - meaning no override\n */\n paddingInline?: '' | MaybeTwoValuesShorthandProperty;\n /**\n * Adjust the inline-start padding.\n *\n * This overrides the inline-start value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineStart?: '' | PaddingKeyword;\n /**\n * Adjust the inline-end padding.\n *\n * This overrides the inline-end value of `paddingInline`.\n * @default '' - meaning no override\n */\n paddingInlineEnd?: '' | PaddingKeyword;\n}" + } + }, + "Icon": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Icon", + "description": "Displays a predefined icon glyph.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "color", + "value": "ColorKeyword", + "description": "Modify the color to be more or less intense.", + "isOptional": true, + "defaultValue": "'base'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "size", + "value": "SizeKeyword", + "description": "Adjusts the size of the icon.", + "isOptional": true, + "defaultValue": "'base'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "tone", + "value": "ToneKeyword", + "description": "Sets the tone of the icon, based on the intention of the information being conveyed.", + "isOptional": true, + "defaultValue": "'auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "type", + "value": "SupportedIconNames", + "description": "The type of icon to display.", + "isOptional": true, + "defaultValue": "''" + } + ], + "value": "interface Icon {\n /**\n * The type of icon to display.\n * @default ''\n */\n type?: SupportedIconNames;\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Sets the tone of the icon, based on the intention of the information being conveyed.\n * @default 'auto'\n */\n tone?: ToneKeyword;\n /**\n * Modify the color to be more or less intense.\n * @default 'base'\n */\n color?: ColorKeyword;\n /**\n * Adjusts the size of the icon.\n * @default 'base'\n */\n size?: SizeKeyword;\n}" + } + }, + "ToneKeyword": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "ToneKeyword", + "value": "'auto' | 'neutral' | 'info' | 'success' | 'caution' | 'warning' | 'critical' | 'accent' | 'custom'", + "description": "Tone is a property for defining the color treatment of a component.\n\nA tone can apply a grouping of colors to a component. For example, critical may have a specific text color and background color.\n\nIn some cases, like for Banner, the tone may also affect the semantic and accessibility treatment of the component." + } + }, + "SupportedIconNames": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "SupportedIconNames", + "value": "'external' | 'alert-circle' | 'apps' | 'arrow-down' | 'arrow-left' | 'arrow-right' | 'arrow-up' | 'backspace' | 'barcode' | 'battery-low' | 'bolt-filled' | 'bullet' | 'camera-flip' | 'caret-down' | 'caret-up' | 'cart' | 'cart-down' | 'cart-filled' | 'cart-send' | 'cart-up' | 'chart-line' | 'chart-vertical' | 'check' | 'check-circle-filled' | 'chevron-down' | 'chevron-left' | 'chevron-right' | 'chevron-up' | 'circle' | 'clipboard-checklist' | 'clock' | 'collection' | 'credit-card' | 'credit-card-reader' | 'delete' | 'delivery' | 'desktop' | 'disabled' | 'disabled-filled' | 'discount' | 'discount-add' | 'discount-automatic' | 'discount-code' | 'discount-remove' | 'drag-handle' | 'drawer' | 'duplicate' | 'edit' | 'email' | 'exchange' | 'flag' | 'gift-card' | 'graduation-hat' | 'grid' | 'hide-filled' | 'home' | 'home-filled' | 'image' | 'images' | 'info' | 'inventory' | 'inventory-edit' | 'inventory-list' | 'inventory-transfer' | 'keyboard-hide' | 'keypad' | 'link' | 'list-bulleted' | 'list-bulleted-filled' | 'live' | 'live-critical' | 'live-none' | 'location' | 'lock' | 'maximize' | 'menu' | 'menu-filled' | 'menu-horizontal' | 'minimize' | 'minus' | 'mobile' | 'money' | 'money-split' | 'note' | 'order' | 'order-draft' | 'order-filled' | 'package' | 'package-cancel' | 'package-reassign' | 'payment' | 'person' | 'person-add' | 'person-filled' | 'phablet' | 'phone-out' | 'play-circle' | 'plus' | 'point-of-sale' | 'point-of-sale-register' | 'print' | 'product' | 'product-filled' | 'profile' | 'question-circle-filled' | 'receipt' | 'refresh' | 'return' | 'scan-qr-code' | 'search' | 'send' | 'settings' | 'shipping-label-cancel' | 'sort' | 'star-circle' | 'star-filled' | 'store' | 'tablet' | 'transaction-fee-add' | 'unlock' | 'variant' | 'view' | 'wallet' | 'x' | 'x-circle'", + "description": "" + } + }, + "Stack": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "name": "Stack", + "description": "Arranges children in a horizontal or vertical stack.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "alignContent", + "value": "AlignContentKeyword", + "description": "Aligns the stack along the cross axis.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "alignItems", + "value": "AlignItemsKeyword", + "description": "Aligns the stack's children along the cross axis.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "blockSize", + "value": "SizeUnitsOrAuto", + "description": "Adjust the block size. **Mobile surfaces:** Avoid using percentage-based sizes. They do not behave as expected when placed within a scrollable container.", + "isOptional": true, + "defaultValue": "'auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "columnGap", + "value": "'' | SpacingKeyword", + "description": "Adjust spacing between elements in the inline axis. This overrides the column value of gap.", + "isOptional": true, + "defaultValue": "'' - meaning no override" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "direction", + "value": "'block' | 'inline'", + "description": "Sets how the children are placed within the stack. This uses logical properties.", + "isOptional": true, + "defaultValue": "'block'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "gap", + "value": "MaybeTwoValuesShorthandProperty", + "description": "Adjust spacing between elements. A single value applies to both axes. A pair of values (eg large-100 large-500) can be used to set the inline and block axes respectively.", + "isOptional": true, + "defaultValue": "'none'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "inlineSize", + "value": "SizeUnitsOrAuto", + "description": "Adjust the inline size.", + "isOptional": true, + "defaultValue": "'auto'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "justifyContent", + "value": "JustifyContentKeyword", + "description": "Aligns the stack along the main axis.", + "isOptional": true, + "defaultValue": "'normal'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "maxBlockSize", + "value": "SizeUnitsOrNone", + "description": "Adjust the maximum block size. **Mobile surfaces:** Avoid using percentage-based sizes. They do not behave as expected when placed within a scrollable container.", "isOptional": true, "defaultValue": "'none'" }, @@ -7494,10 +8133,19 @@ { "filePath": "src/surfaces/point-of-sale/components.ts", "syntaxKind": "PropertySignature", - "name": "id", - "value": "string", - "description": "A unique identifier for the element.", - "isOptional": true + "name": "borderRadius", + "value": "MaybeAllValuesShorthandProperty", + "description": "Border radius for the image corners.\n\n[1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is supported. Note that, contrary to CSS, it uses flow-relative values and the order is:\n\n- 4 values: `start-start start-end end-end end-start`\n- 3 values: `start-start (start-end & end-start) end-end`\n- 2 values: `(start-start & end-end) (start-end & end-start)`\n\nFor example:\n- `base` means all corners have `base` radius\n- `base none` means start-start and end-end corners are `base`, start-end and end-start corners are `none`\n- `base none large` means start-start is `base`, start-end and end-start are `none`, end-end is `large`\n- `base none large small` means start-start is `base`, start-end is `none`, end-end is `large`, end-start is `small`", + "isOptional": true, + "defaultValue": "'none'" + }, + { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "PropertySignature", + "name": "id", + "value": "string", + "description": "A unique identifier for the element.", + "isOptional": true }, { "filePath": "src/surfaces/point-of-sale/components.ts", @@ -7526,7 +8174,16 @@ "isOptional": true } ], - "value": "interface Image {\n /**\n * The displayed inline width of the image.\n *\n * - `fill`: the image will takes up 100% of the available inline size.\n * - `auto`: the image will be displayed at its natural size.\n *\n * **Mobile surfaces:** Always wrap your image in a box with a set width and height.\n * ScrollViews on mobile have a dynamic height, which can cause images to appear\n * inconsistently without defined dimensions.\n * @default 'fill'\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#width\n */\n inlineSize?: 'fill' | 'auto';\n /**\n * The image source, which should be a remote URL.\n *\n * When the image is loading or no `src` is provided, a placeholder will be rendered.\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#src\n */\n src?: string;\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Determines how the content of the image is resized to fit its container.\n * The image is positioned in the center of the container.\n * @default 'contain'\n * @see ://developer.mozilla.org/en-US/docs/Web/CSS/object-fit\n */\n objectFit?: 'contain' | 'cover';\n /**\n * An alternative text description that describe the image for the reader to\n * understand what it is about. It is extremely useful for both users using\n * assistive technology and sighted users. A well written description\n * provides people with visual impairments the ability to participate in\n * consuming non-text content. When a screen readers encounters an `s-image`,\n * the description is read and announced aloud. If an image fails to load,\n * potentially due to a poor connection, the `alt` is displayed on\n * screen instead. This has the benefit of letting a sighted buyer know an\n * image was meant to load here, but as an alternative, they’re still able to\n * consume the text content. Read\n * [considerations when writing alternative text](https://www.shopify.com/ca/blog/image-alt-text#4)\n * to learn more.\n * @default `''`\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#alt\n */\n alt?: string;\n}" + "value": "interface Image {\n /**\n * The displayed inline width of the image.\n *\n * - `fill`: the image will takes up 100% of the available inline size.\n * - `auto`: the image will be displayed at its natural size.\n *\n * **Mobile surfaces:** Always wrap your image in a box with a set width and height.\n * ScrollViews on mobile have a dynamic height, which can cause images to appear\n * inconsistently without defined dimensions.\n * @default 'fill'\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#width\n */\n inlineSize?: 'fill' | 'auto';\n /**\n * The image source, which should be a remote URL.\n *\n * When the image is loading or no `src` is provided, a placeholder will be rendered.\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#src\n */\n src?: string;\n /** A unique identifier for the element. */\n id?: string;\n /**\n * Determines how the content of the image is resized to fit its container.\n * The image is positioned in the center of the container.\n * @default 'contain'\n * @see ://developer.mozilla.org/en-US/docs/Web/CSS/object-fit\n */\n objectFit?: 'contain' | 'cover';\n /**\n * An alternative text description that describe the image for the reader to\n * understand what it is about. It is extremely useful for both users using\n * assistive technology and sighted users. A well written description\n * provides people with visual impairments the ability to participate in\n * consuming non-text content. When a screen readers encounters an `s-image`,\n * the description is read and announced aloud. If an image fails to load,\n * potentially due to a poor connection, the `alt` is displayed on\n * screen instead. This has the benefit of letting a sighted buyer know an\n * image was meant to load here, but as an alternative, they’re still able to\n * consume the text content. Read\n * [considerations when writing alternative text](https://www.shopify.com/ca/blog/image-alt-text#4)\n * to learn more.\n * @default `''`\n * @see ://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#alt\n */\n alt?: string;\n /**\n * Border radius for the image corners.\n *\n * [1-to-4-value syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box) is\n * supported. Note that, contrary to CSS, it uses flow-relative values and the order is:\n *\n * - 4 values: `start-start start-end end-end end-start`\n * - 3 values: `start-start (start-end & end-start) end-end`\n * - 2 values: `(start-start & end-end) (start-end & end-start)`\n *\n * For example:\n * - `base` means all corners have `base` radius\n * - `base none` means start-start and end-end corners are `base`, start-end and end-start corners are `none`\n * - `base none large` means start-start is `base`, start-end and end-start are `none`, end-end is `large`\n * - `base none large small` means start-start is `base`, start-end is `none`, end-end is `large`, end-start is `small`\n *\n * @default 'none'\n */\n borderRadius?: MaybeAllValuesShorthandProperty;\n}" + } + }, + "BorderRadiusKeyword": { + "src/surfaces/point-of-sale/components.ts": { + "filePath": "src/surfaces/point-of-sale/components.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "BorderRadiusKeyword", + "value": "SizeKeyword | 'max' | 'none'", + "description": "" } }, "PageSlots": { @@ -7728,7 +8385,7 @@ "filePath": "src/surfaces/point-of-sale/components/targets/StandardComponents.ts", "syntaxKind": "TypeAliasDeclaration", "name": "StandardComponents", - "value": "'Badge' | 'Banner' | 'Box' | 'Button' | 'Choice' | 'ChoiceList' | 'Clickable' | 'DateField' | 'DatePicker' | 'DateSpinner' | 'Divider' | 'EmailField' | 'Embed' | 'EmptyState' | 'Heading' | 'Icon' | 'Image' | 'Link' | 'Modal' | 'NumberField' | 'Page' | 'POSBlock' | 'PosBlock' | 'Route' | 'Router' | 'ScrollBox' | 'SearchField' | 'Section' | 'Spinner' | 'Stack' | 'Switch' | 'Tab' | 'TabList' | 'TabPanel' | 'Tabs' | 'Text' | 'TextArea' | 'TextField' | 'Tile' | 'TimeField' | 'TimePicker'", + "value": "'Badge' | 'Banner' | 'Box' | 'Button' | 'Choice' | 'ChoiceList' | 'Clickable' | 'DateField' | 'DatePicker' | 'DateSpinner' | 'Divider' | 'EmailField' | 'Embed' | 'EmptyState' | 'Heading' | 'Icon' | 'Image' | 'Link' | 'Modal' | 'NumberField' | 'Page' | 'POSBlock' | 'POSList' | 'PosBlock' | 'Route' | 'Router' | 'ScrollBox' | 'SearchField' | 'Section' | 'Spinner' | 'Stack' | 'Switch' | 'Tab' | 'TabList' | 'TabPanel' | 'Tabs' | 'Text' | 'TextArea' | 'TextField' | 'Tile' | 'TimeField' | 'TimePicker'", "description": "", "isPublicDocs": true } @@ -7738,7 +8395,7 @@ "filePath": "src/surfaces/point-of-sale/components/targets/BasicComponents.ts", "syntaxKind": "TypeAliasDeclaration", "name": "BasicComponents", - "value": "'Badge' | 'Banner' | 'Box' | 'Button' | 'Choice' | 'ChoiceList' | 'Clickable' | 'DateField' | 'DatePicker' | 'DateSpinner' | 'Divider' | 'EmailField' | 'Embed' | 'EmptyState' | 'Heading' | 'Icon' | 'Image' | 'Link' | 'Modal' | 'NumberField' | 'Page' | 'POSBlock' | 'PosBlock' | 'Route' | 'Router' | 'ScrollBox' | 'SearchField' | 'Section' | 'Spinner' | 'Stack' | 'Switch' | 'Tab' | 'TabList' | 'TabPanel' | 'Tabs' | 'Text' | 'TextArea' | 'TextField' | 'TimeField' | 'TimePicker'", + "value": "'Badge' | 'Banner' | 'Box' | 'Button' | 'Choice' | 'ChoiceList' | 'Clickable' | 'DateField' | 'DatePicker' | 'DateSpinner' | 'Divider' | 'EmailField' | 'Embed' | 'EmptyState' | 'Heading' | 'Icon' | 'Image' | 'Link' | 'Modal' | 'NumberField' | 'Page' | 'POSBlock' | 'POSList' | 'PosBlock' | 'Route' | 'Router' | 'ScrollBox' | 'SearchField' | 'Section' | 'Spinner' | 'Stack' | 'Switch' | 'Tab' | 'TabList' | 'TabPanel' | 'Tabs' | 'Text' | 'TextArea' | 'TextField' | 'TimeField' | 'TimePicker'", "description": "", "isPublicDocs": true } @@ -7801,6 +8458,96 @@ "value": "interface ExtensionError extends Error {\n /**\n * The severity level of this error:\n * - `'error'`: A critical error that prevents the extension from completing successfully. Errors typically block the user workflow and require resolution before proceeding.\n * - `'warning'`: A non-critical issue that doesn't prevent extension execution but indicates a problem or unexpected condition. Warnings allow the workflow to continue but should be logged or displayed to users.\n */\n level: 'error' | 'warning';\n /**\n * The human-readable error message describing what went wrong. This message should be clear and actionable, helping merchants understand the issue and how to resolve it (for example, \"Product not found\", \"Invalid discount code\", \"Insufficient inventory\"). The message may be displayed to users in the POS interface depending on the error severity and context.\n */\n message: string;\n}" } }, + "POSListTemplateTag": { + "src/surfaces/point-of-sale/pos-list-template.ts": { + "filePath": "src/surfaces/point-of-sale/pos-list-template.ts", + "name": "POSListTemplateTag", + "description": "The tagged template that compiles `` markup into the `itemTemplates` value `` accepts. Templates are static: the result contains no functions. Compilation and validation happen when the helper executes, not during the extension build. Define templates at module scope to compile once per module execution. Invalid templates throw synchronously and return no partial collection. An uncaught module-scope exception aborts module evaluation; catch the helper invocation to recover explicitly. There is no automatic list-only fallback.", + "isPublicDocs": true, + "params": [ + { + "name": "strings", + "description": "", + "value": "TemplateStringsArray", + "filePath": "src/surfaces/point-of-sale/pos-list-template.ts" + }, + { + "name": "values", + "description": "", + "value": "never[]", + "filePath": "src/surfaces/point-of-sale/pos-list-template.ts" + } + ], + "returns": { + "filePath": "src/surfaces/point-of-sale/pos-list-template.ts", + "description": "", + "name": "POSListTemplates", + "value": "POSListTemplates" + }, + "value": "(\n strings: TemplateStringsArray,\n ...values: never[]\n) => POSListTemplates" + } + }, + "BaseDataSession": { + "src/surfaces/point-of-sale/event/data/BaseData.ts": { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "name": "BaseDataSession", + "description": "A snapshot of the POS session provided to receipt targets.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "currency", + "value": "CurrencyCode", + "description": "The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code associated with the location currently active on POS." + }, + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "locationId", + "value": "number", + "description": "The location ID associated with the POS device's current location." + }, + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "posVersion", + "value": "string", + "description": "The version of [the POS app](https://apps.shopify.com/shopify-pos) currently running." + }, + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "shopDomain", + "value": "string", + "description": "The shop domain associated with the shop currently logged into POS." + }, + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "shopId", + "value": "number", + "description": "The shop ID associated with the shop currently logged into POS." + }, + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "staffMemberId", + "value": "number", + "description": "The ID of the staff member pinned into POS for this receipt event. This snapshot is separate from the reactive `session.staffMember` on the Session API.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", + "syntaxKind": "PropertySignature", + "name": "userId", + "value": "number", + "description": "The user ID associated with the Shopify account currently authenticated on POS." + } + ], + "value": "export interface BaseDataSession extends Session {\n /**\n * The ID of the staff member pinned into POS for this receipt event. This\n * snapshot is separate from the reactive `session.staffMember` on the Session API.\n */\n staffMemberId?: number;\n}" + } + }, "BaseData": { "src/surfaces/point-of-sale/event/data/BaseData.ts": { "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", @@ -7964,6 +8711,14 @@ "value": "RenderExtension<\n ActionTargetApi<'pos.cart.line-item-details.action.render'> &\n CartApi &\n CartLineItemApi,\n BasicComponents\n >", "description": "Renders a full-screen modal interface launched from cart line item menu items. Use this target for complex line item workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n\nExtensions at this target have access to detailed line item data through the Cart Line Item API and support workflows with multiple screens, navigation, and interactive components. Action render targets are themselves the modal destination, so the Action API (`shopify.action.presentModal()`) is not available here; use the Navigation API for in-workflow navigation." }, + { + "filePath": "src/surfaces/point-of-sale/extension-targets.ts", + "syntaxKind": "PropertySignature", + "name": "pos.cart.validations.resolution.render", + "value": "RenderExtension<\n StandardApi<'pos.cart.validations.resolution.render'> &\n ScannerApi &\n CartApi &\n ResolutionApi,\n ResolutionComponents\n >", + "description": "Renders the remediation interface when a `cartvalidations` interceptor returns a validation. Use this target to resolve all of the app's findings for the event.", + "isPrivate": true + }, { "filePath": "src/surfaces/point-of-sale/extension-targets.ts", "syntaxKind": "PropertySignature", @@ -8065,6 +8820,14 @@ "value": "RenderExtension<\n StandardApi<'pos.order-details.block.render'> &\n CartApi &\n OrderApi &\n ActionApi,\n BlockExtensionComponents\n >", "description": "Renders a custom information section within the order details screen. Use this target for displaying supplementary order data like fulfillment status, tracking numbers, or custom order analytics alongside standard order details.\n\nExtensions at this target appear as persistent blocks within the order details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex order operations." }, + { + "filePath": "src/surfaces/point-of-sale/extension-targets.ts", + "syntaxKind": "PropertySignature", + "name": "pos.payment.validations.resolution.render", + "value": "RenderExtension<\n StandardApi<'pos.payment.validations.resolution.render'> &\n ScannerApi &\n ReadonlyCartApi &\n ResolutionApi,\n ResolutionComponents\n >", + "description": "Renders the remediation interface when a `paymentvalidations` interceptor returns a validation. Use this target to resolve all of the app's findings for the event.", + "isPrivate": true + }, { "filePath": "src/surfaces/point-of-sale/extension-targets.ts", "syntaxKind": "PropertySignature", @@ -8169,7 +8932,7 @@ "isPrivate": true } ], - "value": "export interface RenderExtensionTargets {\n /**\n * Renders a single interactive tile component on the POS home screen's smart grid. The tile appears once during home screen initialization and remains persistent until navigation occurs. Use this target for high-frequency actions, status displays, or entry points to workflows that merchants need daily.\n *\n * Extensions at this target can dynamically update properties like enabled state and badge values in response to cart changes or device conditions. Tiles typically invoke `shopify.action.presentModal()` to launch the companion modal for complete workflows.\n */\n 'pos.home.tile.render': RenderExtension<\n StandardApi<'pos.home.tile.render'> & ActionApi & CartApi,\n SmartGridComponents\n >;\n /**\n * Renders a full-screen modal interface launched from smart grid tiles. The modal appears when users tap a companion tile. Use this target for complete workflow experiences that require more space and functionality than the tile interface provides, such as multi-step processes, detailed information displays, or complex user interactions.\n *\n * Extensions at this target support full navigation hierarchies with multiple screens, scroll views, and interactive components to handle sophisticated workflows.\n */\n 'pos.home.modal.render': RenderExtension<\n ActionTargetApi<'pos.home.modal.render'> & CartApi,\n BasicComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the post-return action menu. Use this target for post-return operations like generating return receipts, processing restocking workflows, or collecting return feedback.\n *\n * Extensions at this target can access the order identifier through the Order API to perform return-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete post-return workflows.\n *\n * @private\n */\n 'pos.return.post.action.menu-item.render': RenderExtension<\n StandardApi<'pos.return.post.action.menu-item.render'> &\n ActionApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from post-return menu items. Use this target for complex post-return workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n *\n * @private\n */\n 'pos.return.post.action.render': RenderExtension<\n ActionTargetApi<'pos.return.post.action.render'> & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the post-return screen. Use this target for displaying supplementary return data like completion status, refund confirmations, or follow-up workflows alongside standard return details.\n *\n * Extensions at this target appear as persistent blocks within the post-return interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex post-return operations.\n *\n * @private\n */\n 'pos.return.post.block.render': RenderExtension<\n StandardApi<'pos.return.post.block.render'> & OrderApi & ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the post-exchange action menu. Use this target for post-exchange operations like generating exchange receipts, processing restocking workflows, or collecting exchange feedback.\n *\n * Extensions at this target can access the order identifier through the Order API to perform exchange-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete post-exchange workflows.\n *\n * @private\n */\n 'pos.exchange.post.action.menu-item.render': RenderExtension<\n StandardApi<'pos.exchange.post.action.menu-item.render'> &\n ActionApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from post-exchange menu items. Use this target for complex post-exchange workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n *\n * @private\n */\n 'pos.exchange.post.action.render': RenderExtension<\n ActionTargetApi<'pos.exchange.post.action.render'> & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the post-exchange screen. Use this target for displaying supplementary exchange data like completion status, payment adjustments, or follow-up workflows alongside standard exchange details.\n *\n * Extensions at this target appear as persistent blocks within the post-exchange interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex post-exchange operations.\n *\n * @private\n */\n 'pos.exchange.post.block.render': RenderExtension<\n StandardApi<'pos.exchange.post.block.render'> & OrderApi & ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the post-purchase action menu. Use this target for post-purchase operations like sending receipts, collecting customer feedback, or launching follow-up workflows after completing a sale.\n *\n * Extensions at this target can access the order identifier through the Order API to perform purchase-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete post-purchase workflows.\n */\n 'pos.purchase.post.action.menu-item.render': RenderExtension<\n StandardApi<'pos.purchase.post.action.menu-item.render'> &\n ActionApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from post-purchase menu items. Use this target for complex post-purchase workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.purchase.post.action.render': RenderExtension<\n ActionTargetApi<'pos.purchase.post.action.render'> & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the post-purchase screen. Use this target for displaying supplementary purchase data like completion status, customer feedback prompts, or next-step workflows alongside standard purchase details.\n *\n * Extensions at this target appear as persistent blocks within the post-purchase interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex post-purchase operations.\n */\n 'pos.purchase.post.block.render': RenderExtension<\n StandardApi<'pos.purchase.post.block.render'> & OrderApi & ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the product details action menu. Use this target for product-specific operations like inventory adjustments, product analytics, or integration with external product management systems.\n *\n * Extensions at this target can access the product identifier through the Product API to perform product-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete product workflows.\n */\n 'pos.product-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.product-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n ProductApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from product details menu items. Use this target for complex product workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to product and cart data through the Product API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.product-details.action.render': RenderExtension<\n ActionTargetApi<'pos.product-details.action.render'> & CartApi & ProductApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the product details screen. Use this target for displaying supplementary product data like detailed specifications, inventory status, or related product recommendations alongside standard product details.\n *\n * Extensions at this target appear as persistent blocks within the product details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex product operations.\n */\n 'pos.product-details.block.render': RenderExtension<\n StandardApi<'pos.product-details.block.render'> &\n CartApi &\n ProductApi &\n ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the order details action menu. Use this target for order-specific operations like reprints, refunds, exchanges, or launching fulfillment workflows.\n *\n * Extensions at this target can access the order identifier through the Order API to perform order-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete order workflows.\n */\n 'pos.order-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.order-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from order details menu items. Use this target for complex order workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.order-details.action.render': RenderExtension<\n ActionTargetApi<'pos.order-details.action.render'> & CartApi & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the order details screen. Use this target for displaying supplementary order data like fulfillment status, tracking numbers, or custom order analytics alongside standard order details.\n *\n * Extensions at this target appear as persistent blocks within the order details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex order operations.\n */\n 'pos.order-details.block.render': RenderExtension<\n StandardApi<'pos.order-details.block.render'> &\n CartApi &\n OrderApi &\n ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the draft order details action menu. Use this target for draft order-specific operations like sending invoices, updating payment status, or launching custom workflow processes for pending orders.\n *\n * Extensions at this target can access draft order information including order ID, name, and associated customer through the Draft Order API. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete draft order workflows.\n */\n 'pos.draft-order-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.draft-order-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n DraftOrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from draft order details menu items. Use this target for complex draft order workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to draft order data through the Draft Order API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.draft-order-details.action.render': RenderExtension<\n ActionTargetApi<'pos.draft-order-details.action.render'> &\n DraftOrderApi &\n CartApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the draft order details screen. Use this target for displaying supplementary order information like processing status, payment status, or workflow indicators alongside standard draft order details.\n *\n * Extensions at this target appear as persistent blocks within the draft order interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex draft order operations.\n */\n 'pos.draft-order-details.block.render': RenderExtension<\n StandardApi<'pos.draft-order-details.block.render'> &\n ActionApi &\n CartApi &\n DraftOrderApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the customer details action menu. Use this target for customer-specific operations like applying customer discounts, processing loyalty redemptions, or launching profile update workflows.\n *\n * Extensions at this target can access the customer identifier through the Customer API to perform customer-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete customer workflows.\n */\n 'pos.customer-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.customer-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n CustomerApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from customer details menu items. Use this target for complex customer workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to customer data through the Customer API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.customer-details.action.render': RenderExtension<\n ActionTargetApi<'pos.customer-details.action.render'> &\n CartApi &\n CustomerApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the customer details screen. Use this target for displaying supplementary customer data like loyalty status, points balance, or personalized information alongside standard customer details.\n *\n * Extensions at this target appear as persistent blocks within the customer details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex customer operations.\n */\n 'pos.customer-details.block.render': RenderExtension<\n StandardApi<'pos.customer-details.block.render'> &\n CartApi &\n CustomerApi &\n ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the cart line item action menu. Use this target for item-specific operations like applying discounts, adding custom properties, or launching verification workflows for individual cart items.\n *\n * Extensions at this target can access detailed line item information including title, quantity, price, discounts, properties, and product metadata through the Cart Line Item API. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete workflows.\n */\n 'pos.cart.line-item-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.cart.line-item-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n CartLineItemApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from cart line item menu items. Use this target for complex line item workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to detailed line item data through the Cart Line Item API and support workflows with multiple screens, navigation, and interactive components. Action render targets are themselves the modal destination, so the Action API (`shopify.action.presentModal()`) is not available here; use the Navigation API for in-workflow navigation.\n */\n 'pos.cart.line-item-details.action.render': RenderExtension<\n ActionTargetApi<'pos.cart.line-item-details.action.render'> &\n CartApi &\n CartLineItemApi,\n BasicComponents\n >;\n /**\n * Renders a custom section in the footer of printed receipts. Use this target for adding contact details, return policies, social media links, or customer engagement elements like survey links or marketing campaigns at the bottom of receipts.\n *\n * Extensions at this target appear in the receipt footer area and support limited components optimized for print formatting, including text content for information display.\n *\n * @private\n */\n 'pos.receipt-footer.block.render': RenderExtension<\n {[key: string]: any} & StorageApi & TransactionCompleteWithReprintData,\n ReceiptComponents\n >;\n /**\n * Renders a custom section in the header of printed receipts. Use this target for adding custom branding, logos, promotional messages, or store-specific information at the top of receipts.\n *\n * Extensions at this target appear in the receipt header area and support limited components optimized for print formatting, including text content for information display.\n *\n * @private\n */\n 'pos.receipt-header.block.render': RenderExtension<\n {[key: string]: any} & StorageApi & TransactionCompleteWithReprintData,\n ReceiptComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the register details action menu. Use this target for register-specific operations like cash drawer management, shift reports, or launching cash reconciliation workflows.\n *\n * Extensions at this target can access cash drawer functionality through the Cash Drawer API to perform register-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete register workflows.\n */\n 'pos.register-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.register-details.action.menu-item.render'> &\n ActionApi &\n CashDrawerApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from register details menu items. Use this target for complex register workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to cash drawer functionality through the Cash Drawer API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.register-details.action.render': RenderExtension<\n ActionTargetApi<'pos.register-details.action.render'> & CashDrawerApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the register details screen. Use this target for displaying supplementary register data like cash drawer status, transaction summaries, or shift analytics alongside standard register details.\n *\n * Extensions at this target appear as persistent blocks within the register details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex register operations.\n */\n 'pos.register-details.block.render': RenderExtension<\n StandardApi<'pos.register-details.block.render'> &\n ActionApi &\n CashDrawerApi,\n BlockExtensionComponents\n >;\n}" + "value": "export interface RenderExtensionTargets {\n /**\n * Renders a single interactive tile component on the POS home screen's smart grid. The tile appears once during home screen initialization and remains persistent until navigation occurs. Use this target for high-frequency actions, status displays, or entry points to workflows that merchants need daily.\n *\n * Extensions at this target can dynamically update properties like enabled state and badge values in response to cart changes or device conditions. Tiles typically invoke `shopify.action.presentModal()` to launch the companion modal for complete workflows.\n */\n 'pos.home.tile.render': RenderExtension<\n StandardApi<'pos.home.tile.render'> & ActionApi & CartApi,\n SmartGridComponents\n >;\n /**\n * Renders a full-screen modal interface launched from smart grid tiles. The modal appears when users tap a companion tile. Use this target for complete workflow experiences that require more space and functionality than the tile interface provides, such as multi-step processes, detailed information displays, or complex user interactions.\n *\n * Extensions at this target support full navigation hierarchies with multiple screens, scroll views, and interactive components to handle sophisticated workflows.\n */\n 'pos.home.modal.render': RenderExtension<\n ActionTargetApi<'pos.home.modal.render'> & CartApi,\n BasicComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the post-return action menu. Use this target for post-return operations like generating return receipts, processing restocking workflows, or collecting return feedback.\n *\n * Extensions at this target can access the order identifier through the Order API to perform return-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete post-return workflows.\n *\n * @private\n */\n 'pos.return.post.action.menu-item.render': RenderExtension<\n StandardApi<'pos.return.post.action.menu-item.render'> &\n ActionApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from post-return menu items. Use this target for complex post-return workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n *\n * @private\n */\n 'pos.return.post.action.render': RenderExtension<\n ActionTargetApi<'pos.return.post.action.render'> & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the post-return screen. Use this target for displaying supplementary return data like completion status, refund confirmations, or follow-up workflows alongside standard return details.\n *\n * Extensions at this target appear as persistent blocks within the post-return interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex post-return operations.\n *\n * @private\n */\n 'pos.return.post.block.render': RenderExtension<\n StandardApi<'pos.return.post.block.render'> & OrderApi & ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the post-exchange action menu. Use this target for post-exchange operations like generating exchange receipts, processing restocking workflows, or collecting exchange feedback.\n *\n * Extensions at this target can access the order identifier through the Order API to perform exchange-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete post-exchange workflows.\n *\n * @private\n */\n 'pos.exchange.post.action.menu-item.render': RenderExtension<\n StandardApi<'pos.exchange.post.action.menu-item.render'> &\n ActionApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from post-exchange menu items. Use this target for complex post-exchange workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n *\n * @private\n */\n 'pos.exchange.post.action.render': RenderExtension<\n ActionTargetApi<'pos.exchange.post.action.render'> & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the post-exchange screen. Use this target for displaying supplementary exchange data like completion status, payment adjustments, or follow-up workflows alongside standard exchange details.\n *\n * Extensions at this target appear as persistent blocks within the post-exchange interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex post-exchange operations.\n *\n * @private\n */\n 'pos.exchange.post.block.render': RenderExtension<\n StandardApi<'pos.exchange.post.block.render'> & OrderApi & ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the post-purchase action menu. Use this target for post-purchase operations like sending receipts, collecting customer feedback, or launching follow-up workflows after completing a sale.\n *\n * Extensions at this target can access the order identifier through the Order API to perform purchase-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete post-purchase workflows.\n */\n 'pos.purchase.post.action.menu-item.render': RenderExtension<\n StandardApi<'pos.purchase.post.action.menu-item.render'> &\n ActionApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from post-purchase menu items. Use this target for complex post-purchase workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.purchase.post.action.render': RenderExtension<\n ActionTargetApi<'pos.purchase.post.action.render'> & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the post-purchase screen. Use this target for displaying supplementary purchase data like completion status, customer feedback prompts, or next-step workflows alongside standard purchase details.\n *\n * Extensions at this target appear as persistent blocks within the post-purchase interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex post-purchase operations.\n */\n 'pos.purchase.post.block.render': RenderExtension<\n StandardApi<'pos.purchase.post.block.render'> & OrderApi & ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the product details action menu. Use this target for product-specific operations like inventory adjustments, product analytics, or integration with external product management systems.\n *\n * Extensions at this target can access the product identifier through the Product API to perform product-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete product workflows.\n */\n 'pos.product-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.product-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n ProductApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from product details menu items. Use this target for complex product workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to product and cart data through the Product API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.product-details.action.render': RenderExtension<\n ActionTargetApi<'pos.product-details.action.render'> & CartApi & ProductApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the product details screen. Use this target for displaying supplementary product data like detailed specifications, inventory status, or related product recommendations alongside standard product details.\n *\n * Extensions at this target appear as persistent blocks within the product details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex product operations.\n */\n 'pos.product-details.block.render': RenderExtension<\n StandardApi<'pos.product-details.block.render'> &\n CartApi &\n ProductApi &\n ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the order details action menu. Use this target for order-specific operations like reprints, refunds, exchanges, or launching fulfillment workflows.\n *\n * Extensions at this target can access the order identifier through the Order API to perform order-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete order workflows.\n */\n 'pos.order-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.order-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n OrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from order details menu items. Use this target for complex order workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to order data through the Order API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.order-details.action.render': RenderExtension<\n ActionTargetApi<'pos.order-details.action.render'> & CartApi & OrderApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the order details screen. Use this target for displaying supplementary order data like fulfillment status, tracking numbers, or custom order analytics alongside standard order details.\n *\n * Extensions at this target appear as persistent blocks within the order details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex order operations.\n */\n 'pos.order-details.block.render': RenderExtension<\n StandardApi<'pos.order-details.block.render'> &\n CartApi &\n OrderApi &\n ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the draft order details action menu. Use this target for draft order-specific operations like sending invoices, updating payment status, or launching custom workflow processes for pending orders.\n *\n * Extensions at this target can access draft order information including order ID, name, and associated customer through the Draft Order API. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete draft order workflows.\n */\n 'pos.draft-order-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.draft-order-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n DraftOrderApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from draft order details menu items. Use this target for complex draft order workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to draft order data through the Draft Order API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.draft-order-details.action.render': RenderExtension<\n ActionTargetApi<'pos.draft-order-details.action.render'> &\n DraftOrderApi &\n CartApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the draft order details screen. Use this target for displaying supplementary order information like processing status, payment status, or workflow indicators alongside standard draft order details.\n *\n * Extensions at this target appear as persistent blocks within the draft order interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex draft order operations.\n */\n 'pos.draft-order-details.block.render': RenderExtension<\n StandardApi<'pos.draft-order-details.block.render'> &\n ActionApi &\n CartApi &\n DraftOrderApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the customer details action menu. Use this target for customer-specific operations like applying customer discounts, processing loyalty redemptions, or launching profile update workflows.\n *\n * Extensions at this target can access the customer identifier through the Customer API to perform customer-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete customer workflows.\n */\n 'pos.customer-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.customer-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n CustomerApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from customer details menu items. Use this target for complex customer workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to customer data through the Customer API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.customer-details.action.render': RenderExtension<\n ActionTargetApi<'pos.customer-details.action.render'> &\n CartApi &\n CustomerApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the customer details screen. Use this target for displaying supplementary customer data like loyalty status, points balance, or personalized information alongside standard customer details.\n *\n * Extensions at this target appear as persistent blocks within the customer details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex customer operations.\n */\n 'pos.customer-details.block.render': RenderExtension<\n StandardApi<'pos.customer-details.block.render'> &\n CartApi &\n CustomerApi &\n ActionApi,\n BlockExtensionComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the cart line item action menu. Use this target for item-specific operations like applying discounts, adding custom properties, or launching verification workflows for individual cart items.\n *\n * Extensions at this target can access detailed line item information including title, quantity, price, discounts, properties, and product metadata through the Cart Line Item API. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete workflows.\n */\n 'pos.cart.line-item-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.cart.line-item-details.action.menu-item.render'> &\n ActionApi &\n CartApi &\n CartLineItemApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from cart line item menu items. Use this target for complex line item workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to detailed line item data through the Cart Line Item API and support workflows with multiple screens, navigation, and interactive components. Action render targets are themselves the modal destination, so the Action API (`shopify.action.presentModal()`) is not available here; use the Navigation API for in-workflow navigation.\n */\n 'pos.cart.line-item-details.action.render': RenderExtension<\n ActionTargetApi<'pos.cart.line-item-details.action.render'> &\n CartApi &\n CartLineItemApi,\n BasicComponents\n >;\n /**\n * Renders a custom section in the footer of printed receipts. Use this target for adding contact details, return policies, social media links, or customer engagement elements like survey links or marketing campaigns at the bottom of receipts.\n *\n * Extensions at this target appear in the receipt footer area and support limited components optimized for print formatting, including text content for information display.\n *\n * @private\n */\n 'pos.receipt-footer.block.render': RenderExtension<\n {[key: string]: any} & StorageApi & TransactionCompleteWithReprintData,\n ReceiptComponents\n >;\n /**\n * Renders a custom section in the header of printed receipts. Use this target for adding custom branding, logos, promotional messages, or store-specific information at the top of receipts.\n *\n * Extensions at this target appear in the receipt header area and support limited components optimized for print formatting, including text content for information display.\n *\n * @private\n */\n 'pos.receipt-header.block.render': RenderExtension<\n {[key: string]: any} & StorageApi & TransactionCompleteWithReprintData,\n ReceiptComponents\n >;\n /**\n * Renders a single interactive button component as a menu item in the register details action menu. Use this target for register-specific operations like cash drawer management, shift reports, or launching cash reconciliation workflows.\n *\n * Extensions at this target can access cash drawer functionality through the Cash Drawer API to perform register-specific operations. Menu items typically invoke `shopify.action.presentModal()` to launch the companion modal for complete register workflows.\n */\n 'pos.register-details.action.menu-item.render': RenderExtension<\n StandardApi<'pos.register-details.action.menu-item.render'> &\n ActionApi &\n CashDrawerApi,\n ActionExtensionComponents\n >;\n /**\n * Renders a full-screen modal interface launched from register details menu items. Use this target for complex register workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n *\n * Extensions at this target have access to cash drawer functionality through the Cash Drawer API and support workflows with multiple screens, navigation, and interactive components.\n */\n 'pos.register-details.action.render': RenderExtension<\n ActionTargetApi<'pos.register-details.action.render'> & CashDrawerApi,\n BasicComponents\n >;\n /**\n * Renders a custom information section within the register details screen. Use this target for displaying supplementary register data like cash drawer status, transaction summaries, or shift analytics alongside standard register details.\n *\n * Extensions at this target appear as persistent blocks within the register details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex register operations.\n */\n 'pos.register-details.block.render': RenderExtension<\n StandardApi<'pos.register-details.block.render'> &\n ActionApi &\n CashDrawerApi,\n BlockExtensionComponents\n >;\n /**\n * Renders the remediation interface when a `cartvalidations` interceptor returns a validation. Use this target to resolve all of the app's findings for the event.\n *\n * @private\n */\n 'pos.cart.validations.resolution.render': RenderExtension<\n StandardApi<'pos.cart.validations.resolution.render'> &\n ScannerApi &\n CartApi &\n ResolutionApi,\n ResolutionComponents\n >;\n /**\n * Renders the remediation interface when a `paymentvalidations` interceptor returns a validation. Use this target to resolve all of the app's findings for the event.\n *\n * @private\n */\n 'pos.payment.validations.resolution.render': RenderExtension<\n StandardApi<'pos.payment.validations.resolution.render'> &\n ScannerApi &\n ReadonlyCartApi &\n ResolutionApi,\n ResolutionComponents\n >;\n}" } }, "RenderExtension": { @@ -8203,6 +8966,124 @@ "value": "export interface RenderExtension {\n /**\n * The API object providing access to extension capabilities, data, and methods. The specific API type depends on the extension target and determines what functionality is available to your extension, such as authentication, storage, data access, and GraphQL querying.\n */\n api: Api;\n /**\n * The set of UI components available for rendering your extension. This defines which Polaris components and custom components can be used to build your extension's interface. The available components vary by extension target.\n */\n components: ComponentsSet;\n /**\n * The render function output. Your extension's render function should return void or a Promise that resolves to void. Use this to perform any necessary setup, rendering, or async operations when your extension loads.\n */\n output: void | Promise;\n}" } }, + "ResolutionApi": { + "src/surfaces/point-of-sale/api/resolution-api/resolution-api.ts": { + "filePath": "src/surfaces/point-of-sale/api/resolution-api/resolution-api.ts", + "name": "ResolutionApi", + "description": "The `ResolutionApi` object gives a validation resolution target access to the data of the intercepted event it was opened to resolve. Access it through `shopify.resolution`.", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/api/resolution-api/resolution-api.ts", + "syntaxKind": "PropertySignature", + "name": "resolution", + "value": "ResolutionApiContent", + "description": "" + } + ], + "value": "export interface ResolutionApi {\n resolution: ResolutionApiContent;\n}" + } + }, + "ResolutionApiContent": { + "src/surfaces/point-of-sale/api/resolution-api/resolution-api.ts": { + "filePath": "src/surfaces/point-of-sale/api/resolution-api/resolution-api.ts", + "name": "ResolutionApiContent", + "description": "", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/api/resolution-api/resolution-api.ts", + "syntaxKind": "PropertySignature", + "name": "event", + "value": "ReadonlySignalLike", + "description": "The data of the intercepted event this resolution target was opened for. The `value` property provides the current data, and `subscribe` allows listening for host-owned revalidation updates." + } + ], + "value": "export interface ResolutionApiContent {\n /**\n * The data of the intercepted event this resolution target was opened for.\n * The `value` property provides the current data, and `subscribe` allows\n * listening for host-owned revalidation updates.\n */\n event: ReadonlySignalLike;\n}" + } + }, + "CartValidationsEventData": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "name": "CartValidationsEventData", + "description": "The data carried by a `cartvalidations` event.", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "cart", + "value": "Cart", + "description": "A snapshot of the POS cart taken when the event was produced." + } + ], + "value": "export interface CartValidationsEventData {\n /** A snapshot of the POS cart taken when the event was produced. */\n readonly cart: Cart;\n}" + } + }, + "ResolutionComponents": { + "src/surfaces/point-of-sale/components/targets/ResolutionComponents.ts": { + "filePath": "src/surfaces/point-of-sale/components/targets/ResolutionComponents.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "ResolutionComponents", + "value": "'Badge' | 'Banner' | 'Box' | 'Button' | 'Choice' | 'ChoiceList' | 'Clickable' | 'DateField' | 'DatePicker' | 'DateSpinner' | 'Divider' | 'EmailField' | 'Embed' | 'EmptyState' | 'Heading' | 'Icon' | 'Image' | 'Link' | 'Modal' | 'NumberField' | 'POSList' | 'Route' | 'Router' | 'ScrollBox' | 'SearchField' | 'Section' | 'Spinner' | 'Stack' | 'Switch' | 'Tab' | 'TabList' | 'TabPanel' | 'Tabs' | 'Text' | 'TextArea' | 'TextField' | 'TimeField' | 'TimePicker'", + "description": "Components available on validation resolution targets. Resolution UI renders inside a POS-owned flow step, so page-level and block-level containers are excluded, along with the smart-grid-only `Tile`." + } + }, + "PaymentValidationsEventData": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "name": "PaymentValidationsEventData", + "description": "The data carried by a `paymentvalidations` event.", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "amount", + "value": "MoneyV2", + "description": "The amount this tender would charge, in presentment currency." + }, + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "paymentMethod", + "value": "InterceptedPaymentMethod", + "description": "The payment method staff selected." + } + ], + "value": "export interface PaymentValidationsEventData {\n /** The payment method staff selected. */\n readonly paymentMethod: InterceptedPaymentMethod;\n\n /** The amount this tender would charge, in presentment currency. */\n readonly amount: MoneyV2;\n}" + } + }, + "InterceptedPaymentMethod": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "name": "InterceptedPaymentMethod", + "description": "Identifies the payment method being attempted.\n\n`type` alone identifies singleton methods (for example `cash`). `identifier` disambiguates method types a shop can have several of (for example custom payment methods) as they become interceptable.", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "identifier", + "value": "string", + "description": "Present when `type` alone is ambiguous. Matching is exact on the pair.", + "isOptional": true + }, + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "type", + "value": "InterceptedPaymentMethodType", + "description": "The kind of payment method being attempted." + } + ], + "value": "export interface InterceptedPaymentMethod {\n readonly type: InterceptedPaymentMethodType;\n\n /** Present when `type` alone is ambiguous. Matching is exact on the pair. */\n readonly identifier?: string;\n}" + } + }, + "InterceptedPaymentMethodType": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "InterceptedPaymentMethodType", + "value": "'cash'", + "description": "The kind of payment method being attempted." + } + }, "TransactionCompleteWithReprintData": { "src/surfaces/point-of-sale/event/data/TransactionCompleteData.ts": { "filePath": "src/surfaces/point-of-sale/event/data/TransactionCompleteData.ts", @@ -8875,6 +9756,14 @@ "value": "RenderExtension<\n ActionTargetApi<'pos.cart.line-item-details.action.render'> &\n CartApi &\n CartLineItemApi,\n BasicComponents\n >", "description": "Renders a full-screen modal interface launched from cart line item menu items. Use this target for complex line item workflows that require forms, multi-step processes, or detailed information displays beyond what a simple button can provide.\n\nExtensions at this target have access to detailed line item data through the Cart Line Item API and support workflows with multiple screens, navigation, and interactive components. Action render targets are themselves the modal destination, so the Action API (`shopify.action.presentModal()`) is not available here; use the Navigation API for in-workflow navigation." }, + { + "filePath": "src/surfaces/point-of-sale/extension-targets.ts", + "syntaxKind": "PropertySignature", + "name": "pos.cart.validations.resolution.render", + "value": "RenderExtension<\n StandardApi<'pos.cart.validations.resolution.render'> &\n ScannerApi &\n CartApi &\n ResolutionApi,\n ResolutionComponents\n >", + "description": "Renders the remediation interface when a `cartvalidations` interceptor returns a validation. Use this target to resolve all of the app's findings for the event.", + "isPrivate": true + }, { "filePath": "src/surfaces/point-of-sale/extension-targets.ts", "syntaxKind": "PropertySignature", @@ -8976,6 +9865,14 @@ "value": "RenderExtension<\n StandardApi<'pos.order-details.block.render'> &\n CartApi &\n OrderApi &\n ActionApi,\n BlockExtensionComponents\n >", "description": "Renders a custom information section within the order details screen. Use this target for displaying supplementary order data like fulfillment status, tracking numbers, or custom order analytics alongside standard order details.\n\nExtensions at this target appear as persistent blocks within the order details interface and support interactive elements that can launch modal workflows using `shopify.action.presentModal()` for more complex order operations." }, + { + "filePath": "src/surfaces/point-of-sale/extension-targets.ts", + "syntaxKind": "PropertySignature", + "name": "pos.payment.validations.resolution.render", + "value": "RenderExtension<\n StandardApi<'pos.payment.validations.resolution.render'> &\n ScannerApi &\n ReadonlyCartApi &\n ResolutionApi,\n ResolutionComponents\n >", + "description": "Renders the remediation interface when a `paymentvalidations` interceptor returns a validation. Use this target to resolve all of the app's findings for the event.", + "isPrivate": true + }, { "filePath": "src/surfaces/point-of-sale/extension-targets.ts", "syntaxKind": "PropertySignature", @@ -9188,542 +10085,206 @@ "name": "Navigation", "description": "The `Navigation` object provides navigation controls for extension modals.", "isPublicDocs": true, - "members": [ - { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "syntaxKind": "MethodSignature", - "name": "addEventListener", - "value": "(type: \"currententrychange\", cb: (event: NavigationCurrentEntryChangeEvent) => void) => void", - "description": "Registers an event listener for navigation events. The `currententrychange` event fires when the `currentEntry` property changes, such as when the user navigates to a different screen within the extension modal. Use to track navigation changes, update UI state based on the current location, or implement analytics for navigation patterns." - }, - { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "syntaxKind": "MethodSignature", - "name": "back", - "value": "() => void", - "description": "Navigates to the previous entry in the history list. Use for implementing back buttons, breadcrumb navigation, or allowing users to return to previous screens in multi-step workflows." - }, - { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "syntaxKind": "PropertySignature", - "name": "currentEntry", - "value": "NavigationHistoryEntry", - "description": "Returns a `NavigationHistoryEntry` object representing the location the user is currently navigated to. Use to access current URL, navigation state, or implement navigation-aware functionality based on the current location." - }, - { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "syntaxKind": "PropertySignature", - "name": "navigate", - "value": "(url: string, options?: NavigationNavigateOptions) => Promise", - "description": "Navigates to a specific URL, updating any provided state in the history entries list. Returns a promise that resolves when navigation is complete. Use for programmatic navigation between screens, implementing custom navigation controls, or deep-linking to specific modal states." - }, - { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "syntaxKind": "MethodSignature", - "name": "removeEventListener", - "value": "(type: \"currententrychange\", cb: (event: NavigationCurrentEntryChangeEvent) => void) => void", - "description": "Removes a previously registered event listener. The callback reference must match the one passed to `addEventListener`. Use to clean up event listeners when they are no longer needed, such as when a component unmounts or navigation tracking should be disabled." - } - ], - "value": "export interface Navigation {\n /**\n * Navigates to a specific URL, updating any provided state in the history entries list. Returns a promise that resolves when navigation is complete. Use for programmatic navigation between screens, implementing custom navigation controls, or deep-linking to specific modal states.\n */\n navigate: (url: string, options?: NavigationNavigateOptions) => Promise;\n /**\n * Returns a `NavigationHistoryEntry` object representing the location the user is currently navigated to. Use to access current URL, navigation state, or implement navigation-aware functionality based on the current location.\n */\n currentEntry: NavigationHistoryEntry;\n /**\n * Navigates to the previous entry in the history list. Use for implementing back buttons, breadcrumb navigation, or allowing users to return to previous screens in multi-step workflows.\n */\n back(): void;\n /**\n * Registers an event listener for navigation events. The `currententrychange` event fires when the `currentEntry` property changes, such as when the user navigates to a different screen within the extension modal. Use to track navigation changes, update UI state based on the current location, or implement analytics for navigation patterns.\n * @param type - The event type to listen for. Currently only `'currententrychange'` is supported.\n * @param cb - The callback function invoked when the event fires. Receives a `NavigationCurrentEntryChangeEvent` containing the previous entry that was navigated away from.\n */\n addEventListener(\n type: 'currententrychange',\n cb: (event: NavigationCurrentEntryChangeEvent) => void,\n ): void;\n /**\n * Removes a previously registered event listener. The callback reference must match the one passed to `addEventListener`. Use to clean up event listeners when they are no longer needed, such as when a component unmounts or navigation tracking should be disabled.\n * @param type - The event type to remove the listener for. Currently only `'currententrychange'` is supported.\n * @param cb - The callback function to remove. Must be the same function reference that was passed to `addEventListener`.\n */\n removeEventListener(\n type: 'currententrychange',\n cb: (event: NavigationCurrentEntryChangeEvent) => void,\n ): void;\n}" - } - }, - "Window": { - "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts": { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "name": "Window", - "description": "The global `window` object provides control over the extension modal lifecycle. Access these properties and methods directly through the global `window` object to manage the modal interface programmatically.", - "isPublicDocs": true, - "members": [ - { - "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", - "syntaxKind": "MethodSignature", - "name": "close", - "value": "{ (): void; (): void; }", - "description": "Closes the extension screen and dismisses the modal interface. Use to programmatically close the modal after completing a workflow, canceling an operation, or when user action is no longer required. This provides the same behavior as the user dismissing the modal through the UI." - } - ], - "value": "export interface Window {\n /**\n * Closes the extension screen and dismisses the modal interface. Use to programmatically close the modal after completing a workflow, canceling an operation, or when user action is no longer required. This provides the same behavior as the user dismissing the modal through the UI.\n */\n close(): void;\n}" - } - }, - "ShopifyGlobal": { - "src/surfaces/point-of-sale/globals.ts": { - "filePath": "src/surfaces/point-of-sale/globals.ts", - "name": "ShopifyGlobal", - "description": "The `shopify` global provides APIs that are available to all POS extensions without needing to access them through the target's `api` argument.", - "isPublicDocs": true, - "members": [], - "value": "export interface ShopifyGlobal {}" - } - }, - "BackgroundShopifyGlobal": { - "src/surfaces/point-of-sale/globals.ts": { - "filePath": "src/surfaces/point-of-sale/globals.ts", - "name": "BackgroundShopifyGlobal", - "description": "Background-only extension of `ShopifyGlobal`. Adds host-event listener APIs that are only valid from the session-lifetime background target (`pos.app.ready.data`). Non-background targets see the narrower `ShopifyGlobal` and cannot type-check calls to these methods.", - "isPublicDocs": true, - "members": [ - { - "filePath": "src/surfaces/point-of-sale/globals.ts", - "syntaxKind": "MethodSignature", - "name": "addEventListener", - "value": "(type: K, listener: (event: ShopifyEventMap[K]) => void) => void", - "description": "Register a listener for a POS host event. Listeners are fire-and-forget: their return values are ignored, and their errors are caught without affecting the host or other listeners." - }, - { - "filePath": "src/surfaces/point-of-sale/globals.ts", - "syntaxKind": "MethodSignature", - "name": "intercept", - "value": "(type: K, interceptor: ShopifyInterceptor) => () => void", - "description": "Register an interceptor for a POS host workflow that can be blocked. Returns a function that unregisters the interceptor.", - "isPrivate": true - }, - { - "filePath": "src/surfaces/point-of-sale/globals.ts", - "syntaxKind": "MethodSignature", - "name": "removeEventListener", - "value": "(type: K, listener: (event: ShopifyEventMap[K]) => void) => void", - "description": "Remove a listener previously registered with `addEventListener`. The `listener` reference must match the one used to register." - } - ], - "value": "export interface BackgroundShopifyGlobal extends ShopifyGlobal {\n /**\n * Register a listener for a POS host event. Listeners are fire-and-forget:\n * their return values are ignored, and their errors are caught without\n * affecting the host or other listeners.\n */\n addEventListener(\n type: K,\n listener: (event: ShopifyEventMap[K]) => void,\n ): void;\n\n /**\n * Remove a listener previously registered with `addEventListener`. The\n * `listener` reference must match the one used to register.\n */\n removeEventListener(\n type: K,\n listener: (event: ShopifyEventMap[K]) => void,\n ): void;\n\n /**\n * Register an interceptor for a POS host workflow that can be blocked.\n * Returns a function that unregisters the interceptor.\n *\n * @private\n */\n intercept(\n type: K,\n interceptor: ShopifyInterceptor,\n ): () => void;\n}" - } - }, - "ShopifyInterceptMap": { - "src/surfaces/point-of-sale/events.ts": { - "filePath": "src/surfaces/point-of-sale/events.ts", - "name": "ShopifyInterceptMap", - "description": "Maps POS interceptable workflow names to their corresponding `Event` types.\n\nUsed as the generic type parameter for `shopify.intercept`.", - "members": [ - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "cartvalidations", - "value": "CartValidationsEvent", - "description": "Dispatched when staff attempts to leave the active cart for checkout." - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "paymentvalidations", - "value": "PaymentValidationsEvent", - "description": "Dispatched when staff selects a payment method on the payments screen." - } - ], - "value": "export interface ShopifyInterceptMap {\n [POS_INTERCEPT_NAMES.CART_VALIDATIONS]: CartValidationsEvent;\n [POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS]: PaymentValidationsEvent;\n}" - } - }, - "CartValidationsEvent": { - "src/surfaces/point-of-sale/events.ts": { - "filePath": "src/surfaces/point-of-sale/events.ts", - "name": "CartValidationsEvent", - "description": "Dispatched when staff attempts to leave the active cart for checkout.", - "members": [ - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "AT_TARGET", - "value": "2", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "bubbles", - "value": "boolean", - "description": "The **`bubbles`** read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/bubbles)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "BUBBLING_PHASE", - "value": "3", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "cancelable", - "value": "boolean", - "description": "The **`cancelable`** read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelable)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "cancelBubble", - "value": "boolean", - "description": "The **`cancelBubble`** property of the Event interface is deprecated.", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "CAPTURING_PHASE", - "value": "1", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "cart", - "value": "Cart", - "description": "The POS cart at the point checkout was requested." - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "composed", - "value": "boolean", - "description": "The read-only **`composed`** property of the or not the event will propagate across the shadow DOM boundary into the standard DOM.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composed)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "composedPath", - "value": "() => EventTarget[]", - "description": "The **`composedPath()`** method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composedPath)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "currentTarget", - "value": "EventTarget | null", - "description": "The **`currentTarget`** read-only property of the Event interface identifies the element to which the event handler has been attached.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/currentTarget)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "defaultPrevented", - "value": "boolean", - "description": "The **`defaultPrevented`** read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/defaultPrevented)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "eventPhase", - "value": "number", - "description": "The **`eventPhase`** read-only property of the being evaluated.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/eventPhase)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "initEvent", - "value": "(type: string, bubbles?: boolean, cancelable?: boolean) => void", - "description": "The **`Event.initEvent()`** method is used to initialize the value of an event created using Document.createEvent().", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/initEvent)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "isTrusted", - "value": "boolean", - "description": "The **`isTrusted`** read-only property of the when the event was generated by the user agent (including via user actions and programmatic methods such as HTMLElement.focus()), and `false` when the event was dispatched via The only exception is the `click` event, which initializes the `isTrusted` property to `false` in user agents.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/isTrusted)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "NONE", - "value": "0", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "preventDefault", - "value": "() => void", - "description": "The **`preventDefault()`** method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/preventDefault)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "returnValue", - "value": "boolean", - "description": "The Event property **`returnValue`** indicates whether the default action for this event has been prevented or not.", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/returnValue)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "srcElement", - "value": "EventTarget | null", - "description": "The deprecated **`Event.srcElement`** is an alias for the Event.target property.", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/srcElement)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "stopImmediatePropagation", - "value": "() => void", - "description": "The **`stopImmediatePropagation()`** method of the If several listeners are attached to the same element for the same event type, they are called in the order in which they were added.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopImmediatePropagation)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "stopPropagation", - "value": "() => void", - "description": "The **`stopPropagation()`** method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopPropagation)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "target", - "value": "EventTarget | null", - "description": "The read-only **`target`** property of the dispatched.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/target)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "timeStamp", - "value": "DOMHighResTimeStamp", - "description": "The **`timeStamp`** read-only property of the Event interface returns the time (in milliseconds) at which the event was created.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/timeStamp)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "type", - "value": "'cartvalidations'", - "description": "The **`type`** read-only property of the Event interface returns a string containing the event's type.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/type)" - } - ], - "value": "export interface CartValidationsEvent extends Event {\n readonly type: typeof POS_INTERCEPT_NAMES.CART_VALIDATIONS;\n /** The POS cart at the point checkout was requested. */\n readonly cart: Cart;\n}" - } - }, - "PaymentValidationsEvent": { - "src/surfaces/point-of-sale/events.ts": { - "filePath": "src/surfaces/point-of-sale/events.ts", - "name": "PaymentValidationsEvent", - "description": "Dispatched when staff selects a payment method on the payments screen.", - "members": [ - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "amount", - "value": "MoneyV2", - "description": "The amount this tender would charge, in presentment currency." - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "AT_TARGET", - "value": "2", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "bubbles", - "value": "boolean", - "description": "The **`bubbles`** read-only property of the Event interface indicates whether the event bubbles up through the DOM tree or not.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/bubbles)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "BUBBLING_PHASE", - "value": "3", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "cancelable", - "value": "boolean", - "description": "The **`cancelable`** read-only property of the Event interface indicates whether the event can be canceled, and therefore prevented as if the event never happened.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelable)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "cancelBubble", - "value": "boolean", - "description": "The **`cancelBubble`** property of the Event interface is deprecated.", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/cancelBubble)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "CAPTURING_PHASE", - "value": "1", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "composed", - "value": "boolean", - "description": "The read-only **`composed`** property of the or not the event will propagate across the shadow DOM boundary into the standard DOM.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composed)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "composedPath", - "value": "() => EventTarget[]", - "description": "The **`composedPath()`** method of the Event interface returns the event's path which is an array of the objects on which listeners will be invoked.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/composedPath)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "currentTarget", - "value": "EventTarget | null", - "description": "The **`currentTarget`** read-only property of the Event interface identifies the element to which the event handler has been attached.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/currentTarget)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "defaultPrevented", - "value": "boolean", - "description": "The **`defaultPrevented`** read-only property of the Event interface returns a boolean value indicating whether or not the call to Event.preventDefault() canceled the event.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/defaultPrevented)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "eventPhase", - "value": "number", - "description": "The **`eventPhase`** read-only property of the being evaluated.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/eventPhase)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "MethodSignature", - "name": "initEvent", - "value": "(type: string, bubbles?: boolean, cancelable?: boolean) => void", - "description": "The **`Event.initEvent()`** method is used to initialize the value of an event created using Document.createEvent().", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/initEvent)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "isTrusted", - "value": "boolean", - "description": "The **`isTrusted`** read-only property of the when the event was generated by the user agent (including via user actions and programmatic methods such as HTMLElement.focus()), and `false` when the event was dispatched via The only exception is the `click` event, which initializes the `isTrusted` property to `false` in user agents.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/isTrusted)" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "NONE", - "value": "0", - "description": "" - }, - { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "paymentMethod", - "value": "InterceptedPaymentMethod", - "description": "The payment method staff selected." + "members": [ + { + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", + "syntaxKind": "MethodSignature", + "name": "addEventListener", + "value": "(type: \"currententrychange\", cb: (event: NavigationCurrentEntryChangeEvent) => void) => void", + "description": "Registers an event listener for navigation events. The `currententrychange` event fires when the `currentEntry` property changes, such as when the user navigates to a different screen within the extension modal. Use to track navigation changes, update UI state based on the current location, or implement analytics for navigation patterns." }, { - "filePath": "src/surfaces/point-of-sale/events.ts", + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", "syntaxKind": "MethodSignature", - "name": "preventDefault", + "name": "back", "value": "() => void", - "description": "The **`preventDefault()`** method of the Event interface tells the user agent that if the event does not get explicitly handled, its default action should not be taken as it normally would be.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/preventDefault)" + "description": "Navigates to the previous entry in the history list. Use for implementing back buttons, breadcrumb navigation, or allowing users to return to previous screens in multi-step workflows." }, { - "filePath": "src/surfaces/point-of-sale/events.ts", + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", "syntaxKind": "PropertySignature", - "name": "returnValue", - "value": "boolean", - "description": "The Event property **`returnValue`** indicates whether the default action for this event has been prevented or not.", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/returnValue)" + "name": "currentEntry", + "value": "NavigationHistoryEntry", + "description": "Returns a `NavigationHistoryEntry` object representing the location the user is currently navigated to. Use to access current URL, navigation state, or implement navigation-aware functionality based on the current location." }, { - "filePath": "src/surfaces/point-of-sale/events.ts", + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", "syntaxKind": "PropertySignature", - "name": "srcElement", - "value": "EventTarget | null", - "description": "The deprecated **`Event.srcElement`** is an alias for the Event.target property.", - "deprecationMessage": "[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/srcElement)" + "name": "navigate", + "value": "(url: string, options?: NavigationNavigateOptions) => Promise", + "description": "Navigates to a specific URL, updating any provided state in the history entries list. Returns a promise that resolves when navigation is complete. Use for programmatic navigation between screens, implementing custom navigation controls, or deep-linking to specific modal states." }, { - "filePath": "src/surfaces/point-of-sale/events.ts", + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", "syntaxKind": "MethodSignature", - "name": "stopImmediatePropagation", - "value": "() => void", - "description": "The **`stopImmediatePropagation()`** method of the If several listeners are attached to the same element for the same event type, they are called in the order in which they were added.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopImmediatePropagation)" - }, + "name": "removeEventListener", + "value": "(type: \"currententrychange\", cb: (event: NavigationCurrentEntryChangeEvent) => void) => void", + "description": "Removes a previously registered event listener. The callback reference must match the one passed to `addEventListener`. Use to clean up event listeners when they are no longer needed, such as when a component unmounts or navigation tracking should be disabled." + } + ], + "value": "export interface Navigation {\n /**\n * Navigates to a specific URL, updating any provided state in the history entries list. Returns a promise that resolves when navigation is complete. Use for programmatic navigation between screens, implementing custom navigation controls, or deep-linking to specific modal states.\n */\n navigate: (url: string, options?: NavigationNavigateOptions) => Promise;\n /**\n * Returns a `NavigationHistoryEntry` object representing the location the user is currently navigated to. Use to access current URL, navigation state, or implement navigation-aware functionality based on the current location.\n */\n currentEntry: NavigationHistoryEntry;\n /**\n * Navigates to the previous entry in the history list. Use for implementing back buttons, breadcrumb navigation, or allowing users to return to previous screens in multi-step workflows.\n */\n back(): void;\n /**\n * Registers an event listener for navigation events. The `currententrychange` event fires when the `currentEntry` property changes, such as when the user navigates to a different screen within the extension modal. Use to track navigation changes, update UI state based on the current location, or implement analytics for navigation patterns.\n * @param type - The event type to listen for. Currently only `'currententrychange'` is supported.\n * @param cb - The callback function invoked when the event fires. Receives a `NavigationCurrentEntryChangeEvent` containing the previous entry that was navigated away from.\n */\n addEventListener(\n type: 'currententrychange',\n cb: (event: NavigationCurrentEntryChangeEvent) => void,\n ): void;\n /**\n * Removes a previously registered event listener. The callback reference must match the one passed to `addEventListener`. Use to clean up event listeners when they are no longer needed, such as when a component unmounts or navigation tracking should be disabled.\n * @param type - The event type to remove the listener for. Currently only `'currententrychange'` is supported.\n * @param cb - The callback function to remove. Must be the same function reference that was passed to `addEventListener`.\n */\n removeEventListener(\n type: 'currententrychange',\n cb: (event: NavigationCurrentEntryChangeEvent) => void,\n ): void;\n}" + } + }, + "Window": { + "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts": { + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", + "name": "Window", + "description": "The global `window` object provides control over the extension modal lifecycle. Access these properties and methods directly through the global `window` object to manage the modal interface programmatically.", + "isPublicDocs": true, + "members": [ { - "filePath": "src/surfaces/point-of-sale/events.ts", + "filePath": "src/surfaces/point-of-sale/api/navigation-api/navigation-api.ts", "syntaxKind": "MethodSignature", - "name": "stopPropagation", - "value": "() => void", - "description": "The **`stopPropagation()`** method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/stopPropagation)" + "name": "close", + "value": "{ (): void; (): void; }", + "description": "Closes the extension screen and dismisses the modal interface. Use to programmatically close the modal after completing a workflow, canceling an operation, or when user action is no longer required. This provides the same behavior as the user dismissing the modal through the UI." + } + ], + "value": "export interface Window {\n /**\n * Closes the extension screen and dismisses the modal interface. Use to programmatically close the modal after completing a workflow, canceling an operation, or when user action is no longer required. This provides the same behavior as the user dismissing the modal through the UI.\n */\n close(): void;\n}" + } + }, + "ShopifyGlobal": { + "src/surfaces/point-of-sale/globals.ts": { + "filePath": "src/surfaces/point-of-sale/globals.ts", + "name": "ShopifyGlobal", + "description": "The `shopify` global provides APIs that are available to all POS extensions without needing to access them through the target's `api` argument.", + "isPublicDocs": true, + "members": [], + "value": "export interface ShopifyGlobal {}" + } + }, + "BackgroundShopifyGlobal": { + "src/surfaces/point-of-sale/globals.ts": { + "filePath": "src/surfaces/point-of-sale/globals.ts", + "name": "BackgroundShopifyGlobal", + "description": "Background-only extension of `ShopifyGlobal`. Adds host-event listener APIs that are only valid from the session-lifetime background target (`pos.app.ready.data`). Non-background targets see the narrower `ShopifyGlobal` and cannot type-check calls to these methods.", + "isPublicDocs": true, + "members": [ + { + "filePath": "src/surfaces/point-of-sale/globals.ts", + "syntaxKind": "MethodSignature", + "name": "addEventListener", + "value": "(type: K, listener: (event: ShopifyEventMap[K]) => void) => void", + "description": "Register a listener for a POS host event. Listeners are fire-and-forget: their return values are ignored, and their errors are caught without affecting the host or other listeners." }, { - "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "PropertySignature", - "name": "target", - "value": "EventTarget | null", - "description": "The read-only **`target`** property of the dispatched.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/target)" + "filePath": "src/surfaces/point-of-sale/globals.ts", + "syntaxKind": "MethodSignature", + "name": "intercept", + "value": "(type: K, interceptor: ShopifyInterceptor) => () => void", + "description": "Register an interceptor for a POS host workflow that can be blocked. Returns a function that unregisters the interceptor.", + "isPrivate": true }, + { + "filePath": "src/surfaces/point-of-sale/globals.ts", + "syntaxKind": "MethodSignature", + "name": "removeEventListener", + "value": "(type: K, listener: (event: ShopifyEventMap[K]) => void) => void", + "description": "Remove a listener previously registered with `addEventListener`. The `listener` reference must match the one used to register." + } + ], + "value": "export interface BackgroundShopifyGlobal extends ShopifyGlobal {\n /**\n * Register a listener for a POS host event. Listeners are fire-and-forget:\n * their return values are ignored, and their errors are caught without\n * affecting the host or other listeners.\n */\n addEventListener(\n type: K,\n listener: (event: ShopifyEventMap[K]) => void,\n ): void;\n\n /**\n * Remove a listener previously registered with `addEventListener`. The\n * `listener` reference must match the one used to register.\n */\n removeEventListener(\n type: K,\n listener: (event: ShopifyEventMap[K]) => void,\n ): void;\n\n /**\n * Register an interceptor for a POS host workflow that can be blocked.\n * Returns a function that unregisters the interceptor.\n *\n * @private\n */\n intercept(\n type: K,\n interceptor: ShopifyInterceptor,\n ): () => void;\n}" + } + }, + "ShopifyInterceptMap": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "name": "ShopifyInterceptMap", + "description": "Maps POS interceptable workflow names to their corresponding `Event` types.\n\nUsed as the generic type parameter for `shopify.intercept`.", + "members": [ { "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", - "name": "timeStamp", - "value": "DOMHighResTimeStamp", - "description": "The **`timeStamp`** read-only property of the Event interface returns the time (in milliseconds) at which the event was created.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/timeStamp)" + "name": "cartvalidations", + "value": "CartValidationsEvent", + "description": "The event a `cartvalidations` interceptor receives. Carries a snapshot of the POS cart taken when the event was produced." }, { "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", - "name": "type", - "value": "'paymentvalidations'", - "description": "The **`type`** read-only property of the Event interface returns a string containing the event's type.\n\n[MDN Reference](https://developer.mozilla.org/docs/Web/API/Event/type)" + "name": "paymentvalidations", + "value": "PaymentValidationsEvent", + "description": "The event a `paymentvalidations` interceptor receives. Carries the tender attempt's payment method and amount; split payments produce one event per tender, each with its own amount." } ], - "value": "export interface PaymentValidationsEvent extends Event {\n readonly type: typeof POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS;\n\n /** The payment method staff selected. */\n readonly paymentMethod: InterceptedPaymentMethod;\n\n /** The amount this tender would charge, in presentment currency. */\n readonly amount: MoneyV2;\n}" + "value": "export interface ShopifyInterceptMap {\n [POS_INTERCEPT_NAMES.CART_VALIDATIONS]: CartValidationsEvent;\n [POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS]: PaymentValidationsEvent;\n}" } }, - "InterceptedPaymentMethod": { + "CartValidationsEvent": { "src/surfaces/point-of-sale/events.ts": { "filePath": "src/surfaces/point-of-sale/events.ts", - "name": "InterceptedPaymentMethod", - "description": "Identifies the payment method being attempted.\n\n`type` alone identifies singleton methods (for example `cash`). `identifier` disambiguates method types a shop can have several of (for example custom payment methods) as they become interceptable.", + "name": "CartValidationsEvent", + "description": "The event a `cartvalidations` interceptor receives. Carries a snapshot of the POS cart taken when the event was produced.", "members": [ { "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", - "name": "identifier", - "value": "string", - "description": "Present when `type` alone is ambiguous. Matching is exact on the pair.", - "isOptional": true + "name": "cart", + "value": "Cart", + "description": "A snapshot of the POS cart taken when the event was produced." }, { "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", "name": "type", - "value": "InterceptedPaymentMethodType", - "description": "The kind of payment method being attempted." + "value": "'cartvalidations'", + "description": "" } ], - "value": "export interface InterceptedPaymentMethod {\n readonly type: InterceptedPaymentMethodType;\n\n /** Present when `type` alone is ambiguous. Matching is exact on the pair. */\n readonly identifier?: string;\n}" + "value": "export interface CartValidationsEvent extends CartValidationsEventData {\n readonly type: typeof POS_INTERCEPT_NAMES.CART_VALIDATIONS;\n}" } }, - "InterceptedPaymentMethodType": { + "PaymentValidationsEvent": { "src/surfaces/point-of-sale/events.ts": { "filePath": "src/surfaces/point-of-sale/events.ts", - "syntaxKind": "TypeAliasDeclaration", - "name": "InterceptedPaymentMethodType", - "value": "'cash'", - "description": "The kind of payment method being attempted." + "name": "PaymentValidationsEvent", + "description": "The event a `paymentvalidations` interceptor receives. Carries the tender attempt's payment method and amount; split payments produce one event per tender, each with its own amount.", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "amount", + "value": "MoneyV2", + "description": "The amount this tender would charge, in presentment currency." + }, + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "paymentMethod", + "value": "InterceptedPaymentMethod", + "description": "The payment method staff selected." + }, + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "type", + "value": "'paymentvalidations'", + "description": "" + } + ], + "value": "export interface PaymentValidationsEvent extends PaymentValidationsEventData {\n readonly type: typeof POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS;\n}" } }, "ShopifyInterceptor": { "src/surfaces/point-of-sale/events.ts": { "filePath": "src/surfaces/point-of-sale/events.ts", "name": "ShopifyInterceptor", - "description": "", + "description": "The interceptor callback for a POS interceptable workflow, keyed by the workflow name so the event and its valid validation targets stay paired.", "params": [ { "name": "event", "description": "", - "value": "TEvent", + "value": "ShopifyInterceptMap[K]", "filePath": "src/surfaces/point-of-sale/events.ts" } ], "returns": { "filePath": "src/surfaces/point-of-sale/events.ts", "description": "", - "name": "InterceptResult", - "value": "InterceptResult" + "name": "InterceptResult", + "value": "InterceptResult" }, - "value": "(\n event: TEvent,\n) => InterceptResult" + "value": "(\n event: ShopifyInterceptMap[K],\n) => InterceptResult" } }, "InterceptResult": { @@ -9736,11 +10297,11 @@ "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", "name": "operations", - "value": "Operation[]", + "value": "Operation[]", "description": "" } ], - "value": "export interface InterceptResult {\n operations: Operation[];\n}" + "value": "export interface InterceptResult<\n TTarget extends ValidationTarget = ValidationTarget,\n> {\n operations: Operation[];\n}" } }, "Operation": { @@ -9753,12 +10314,12 @@ "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", "name": "validationAdd", - "value": "ValidationAdd", - "description": "Adds a validation to the workflow being intercepted.", + "value": "ValidationAdd", + "description": "", "isOptional": true } ], - "value": "export interface Operation {\n validationAdd?: ValidationAdd;\n}" + "value": "export interface Operation<\n TTarget extends ValidationTarget = ValidationTarget,\n> {\n validationAdd?: ValidationAdd;\n}" } }, "ValidationAdd": { @@ -9772,7 +10333,7 @@ "syntaxKind": "PropertySignature", "name": "handle", "value": "string", - "description": "Stable identifier for this validation." + "description": "Stable identifier for this validation. Handles are namespaced per extension and may repeat across targets: the same handle on two line items is two validations." }, { "filePath": "src/surfaces/point-of-sale/events.ts", @@ -9785,12 +10346,12 @@ "filePath": "src/surfaces/point-of-sale/events.ts", "syntaxKind": "PropertySignature", "name": "target", - "value": "string", - "description": "JSON-path locator for where the validation applies.", + "value": "TTarget", + "description": "Locates the data the validation applies to; the host decides where it renders. Omitted or unrecognized targets fall back to the event's root scope (`$.cart` / `$.payment`) — the validation still applies, rendered less specifically.\n\nLine item uuids are only valid within the event that delivered them: use `lineItems[n].uuid` from this event's cart snapshot, don't cache uuids across events. Bundle components are not addressable; target their parent line.", "isOptional": true } ], - "value": "export interface ValidationAdd {\n /** `ERROR` blocks the workflow. `WARNING` does not. */\n level: ValidationLevel;\n\n /** Stable identifier for this validation. */\n handle: string;\n\n /** JSON-path locator for where the validation applies. */\n target?: string;\n}" + "value": "export interface ValidationAdd<\n TTarget extends ValidationTarget = ValidationTarget,\n> {\n /** `ERROR` blocks the workflow. `WARNING` does not. */\n level: ValidationLevel;\n\n /**\n * Stable identifier for this validation. Handles are namespaced per\n * extension and may repeat across targets: the same handle on two line\n * items is two validations.\n */\n handle: string;\n\n /**\n * Locates the data the validation applies to; the host decides where it\n * renders. Omitted or unrecognized targets fall back to the event's root\n * scope (`$.cart` / `$.payment`) — the validation still applies, rendered\n * less specifically.\n *\n * Line item uuids are only valid within the event that delivered them:\n * use `lineItems[n].uuid` from this event's cart snapshot, don't cache\n * uuids across events. Bundle components are not addressable; target\n * their parent line.\n */\n target?: TTarget;\n}" } }, "ValidationLevel": { @@ -9802,6 +10363,66 @@ "description": "" } }, + "ValidationTargetMap": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "name": "ValidationTargetMap", + "description": "Maps POS interceptable workflow names to their valid validation targets.", + "members": [ + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "cartvalidations", + "value": "CartValidationTarget", + "description": "" + }, + { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "PropertySignature", + "name": "paymentvalidations", + "value": "PaymentValidationTarget", + "description": "" + } + ], + "value": "interface ValidationTargetMap {\n [POS_INTERCEPT_NAMES.CART_VALIDATIONS]: CartValidationTarget;\n [POS_INTERCEPT_NAMES.PAYMENT_VALIDATIONS]: PaymentValidationTarget;\n}" + } + }, + "CartValidationTarget": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "CartValidationTarget", + "value": "CartTarget | CartLineItemTarget", + "description": "" + } + }, + "CartTarget": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "CartTarget", + "value": "'$.cart'", + "description": "Targets the whole cart rather than a specific line item." + } + }, + "CartLineItemTarget": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "CartLineItemTarget", + "value": "`$.cart.lineItems['${string}']`", + "description": "Targets one cart line item by its `uuid` from this event's `cart` snapshot, for example `$.cart.lineItems['adfd6b06-4a24-4f5f-9f4b-ea21f4432dd4']`." + } + }, + "PaymentValidationTarget": { + "src/surfaces/point-of-sale/events.ts": { + "filePath": "src/surfaces/point-of-sale/events.ts", + "syntaxKind": "TypeAliasDeclaration", + "name": "PaymentValidationTarget", + "value": "\"$.payment\"", + "description": "" + } + }, "Docs_AppBackgroundEventMethods": { "src/surfaces/point-of-sale/api/docs.ts": { "filePath": "src/surfaces/point-of-sale/api/docs.ts", @@ -9826,66 +10447,5 @@ ], "value": "export interface Docs_AppBackgroundEventMethods\n extends Pick<\n BackgroundShopifyGlobal,\n 'addEventListener' | 'removeEventListener'\n > {}" } - }, - "BaseDataSession": { - "src/surfaces/point-of-sale/event/data/BaseData.ts": { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "name": "BaseDataSession", - "description": "A snapshot of the POS session provided to receipt targets.", - "isPublicDocs": true, - "members": [ - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "currency", - "value": "CurrencyCode", - "description": "The [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code associated with the location currently active on POS." - }, - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "locationId", - "value": "number", - "description": "The location ID associated with the POS device's current location." - }, - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "posVersion", - "value": "string", - "description": "The version of [the POS app](https://apps.shopify.com/shopify-pos) currently running." - }, - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "shopDomain", - "value": "string", - "description": "The shop domain associated with the shop currently logged into POS." - }, - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "shopId", - "value": "number", - "description": "The shop ID associated with the shop currently logged into POS." - }, - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "staffMemberId", - "value": "number", - "description": "The ID of the staff member pinned into POS for this receipt event. This snapshot is separate from the reactive `session.staffMember` on the Session API.", - "isOptional": true - }, - { - "filePath": "src/surfaces/point-of-sale/event/data/BaseData.ts", - "syntaxKind": "PropertySignature", - "name": "userId", - "value": "number", - "description": "The user ID associated with the Shopify account currently authenticated on POS." - } - ], - "value": "export interface BaseDataSession extends Session {\n /**\n * The ID of the staff member pinned into POS for this receipt event. This\n * snapshot is separate from the reactive `session.staffMember` on the Session API.\n */\n staffMemberId?: number;\n}" - } } -} +} \ No newline at end of file diff --git a/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/targets.json b/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/targets.json index ff41d794c2..e0c6f399cb 100644 --- a/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/targets.json +++ b/packages/ui-extensions/docs/surfaces/point-of-sale/generated/pos_ui_extensions/2026-10/targets.json @@ -56,6 +56,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -137,6 +138,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -257,6 +259,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -379,6 +382,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -501,6 +505,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -623,6 +628,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -745,6 +751,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -827,6 +834,7 @@ "Modal", "NumberField", "POSBlock", + "POSList", "Page", "PosBlock", "Route", @@ -1644,6 +1652,18 @@ "pos.register-details.block.render" ] }, + "POSList": { + "targets": [ + "pos.cart.line-item-details.action.render", + "pos.customer-details.action.render", + "pos.draft-order-details.action.render", + "pos.home.modal.render", + "pos.order-details.action.render", + "pos.product-details.action.render", + "pos.purchase.post.action.render", + "pos.register-details.action.render" + ] + }, "Page": { "targets": [ "pos.cart.line-item-details.action.render", diff --git a/packages/ui-extensions/package.json b/packages/ui-extensions/package.json index 0da57ff951..3b5be4baf4 100644 --- a/packages/ui-extensions/package.json +++ b/packages/ui-extensions/package.json @@ -169,6 +169,7 @@ } }, "dependencies": { + "htm": "^3.1.1", "ts-morph": "^25.0.1" } } diff --git a/packages/ui-extensions/src/surfaces/point-of-sale.ts b/packages/ui-extensions/src/surfaces/point-of-sale.ts index 6cfc50f190..243b8c6d6e 100644 --- a/packages/ui-extensions/src/surfaces/point-of-sale.ts +++ b/packages/ui-extensions/src/surfaces/point-of-sale.ts @@ -3,3 +3,16 @@ export * from './point-of-sale/events'; export * from './point-of-sale/extension-targets'; export * from './point-of-sale/event/data'; export * from './point-of-sale/event/output'; +export {posListTemplate} from './point-of-sale/pos-list-template'; +export type { + POSListTemplateTag, + POSListTemplates, + POSListItemTemplate, + POSListTemplateNode, + POSListTemplateProp, + POSListTemplateSegment, +} from './point-of-sale/pos-list-template'; +export type { + POSListRow, + POSListRowClickEvent, +} from './point-of-sale/components/POSList'; diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/components.d.ts b/packages/ui-extensions/src/surfaces/point-of-sale/components.d.ts index 915a32f478..13a4913d1e 100644 --- a/packages/ui-extensions/src/surfaces/point-of-sale/components.d.ts +++ b/packages/ui-extensions/src/surfaces/point-of-sale/components.d.ts @@ -5435,6 +5435,150 @@ declare module 'preact' { } } +/** + * The serialized template AST carried by `s-pos-list`'s `itemTemplates` + * property. + * + * Templates are authored in the extension sandbox with the `posListTemplate` + * tagged template, compiled once into this plain-JSON shape, and shipped + * across the bridge as a single property. The host hydrates the AST per + * visible row, so no RemoteDOM nodes exist for template content and no + * extension code runs while scrolling. + */ +/** A literal string piece or a row-field lookup within interpolated text. */ +type POSListTemplateSegment = + | string + | { + path: string; + }; +type POSListTemplateProp = + /** A static value. Web component attributes yield strings, or `true` when valueless. */ + | { + kind: 'literal'; + value: string | boolean; + } + /** The row field at `path`, passed through with its original type (`bind:prop="path"`). */ + | { + kind: 'field'; + path: string; + } + /** A string built from literal pieces and `{{path}}` lookups. */ + | { + kind: 'segments'; + segments: POSListTemplateSegment[]; + }; +type POSListTemplateNode = + | { + kind: 'element'; + tag: string; + props?: Record; + children?: POSListTemplateNode[]; + } + /** Literal text, possibly interpolated with `{{path}}` lookups. */ + | { + kind: 'text'; + segments: POSListTemplateSegment[]; + } + /** `{{#if path}}…{{/if}}`: children render only when the field is truthy. */ + | { + kind: 'if'; + path: string; + children: POSListTemplateNode[]; + }; +/** One `` root. */ +interface POSListItemTemplate { + templateId: string; + /** `button` rows fire `rowclick`; `text` rows are static content. */ + type: 'button' | 'text'; + children: POSListTemplateNode[]; +} +interface POSListTemplates { + /** + * The API version whose `posListTemplate` compiled these templates, e.g. `'2026-10'`. The host + * renders them only for an extension declaring the same API version. + */ + version: `${number}-${number}` | 'unstable'; + templates: POSListItemTemplate[]; +} + +declare const posListTagName = 's-pos-list'; +/** + * A row supplied to `s-pos-list`. Rows are plain data; every member other than `id` and + * `templateFor` is available to the row's item template through `{{path}}`, `bind:prop`, + * and `{{#if path}}` bindings. + */ +interface POSListRow { + /** A unique identifier for the row. Keys virtualization and identity across incremental loads. */ + id: string; + /** The `templateId` of the item template that renders this row. */ + templateFor: string; + /** Any additional data the row's template reads. */ + [field: string]: unknown; +} +/** + * The event fired when a `button` row is activated. `detail.item` is the activated row and + * `detail.index` its position in `rows`. POS delivers the row data in `detail` because its + * RemoteDOM bridge forwards only `detail` when dispatching an event to the extension; the shared + * `POSListRowClickEvent` contract declares `item` and `index` on the event, which POS exposes once + * the bridge forwards custom event properties. + */ +type POSListRowClickEvent = CallbackEvent & { + detail: { + item: POSListRow; + index: number; + }; +}; +/** + * Displays a virtualized list of rows rendered from plain data and item templates compiled with + * `posListTemplate`. + * + * @publicDocs + */ +interface POSListJSXProps { + /** A unique identifier for the element. */ + id?: string; + /** + * The rows displayed in the list. Each row names the item template that renders it through + * `templateFor`. + * + * @default [] + */ + rows?: POSListRow[]; + /** + * The compiled item templates, one per ``, produced by `posListTemplate`. + * A row whose `templateFor` matches no template renders nothing. + */ + itemTemplates?: POSListTemplates; + /** + * Whether additional rows are being loaded. Renders a progress indicator after the last row. + * + * @default false + */ + loadingMore?: boolean; + /** + * Callback when a `button` row is activated. `event.detail.item` is the row and + * `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it. + */ + onRowClick?: ((event: POSListRowClickEvent) => void) | null; + /** Callback when the list has scrolled near its end and more rows should be loaded. */ + onLoadMore?: ((event: CallbackEvent) => void) | null; + /** Content displayed before the rows as part of the list's scrollable content. */ + header?: ComponentChild; +} +type POSListElementProps = Omit; +declare global { + interface HTMLElementTagNameMap { + [posListTagName]: HtmlElementTagNameProps; + } +} +declare module 'preact' { + namespace createElement.JSX { + interface IntrinsicElements { + [posListTagName]: IntrinsicElementProps; + } + } +} + export type { BadgeJSXProps, BannerJSXProps, @@ -5457,6 +5601,7 @@ export type { ModalJSXProps, NumberFieldJSXProps, PageJSXProps, + POSListJSXProps, PosBlockJSXProps, QrCodeJSXProps, ScrollBoxJSXProps, @@ -5477,6 +5622,55 @@ export type { TimePickerJSXProps, }; +/** + * The POS list component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events). + * @publicDocs + */ +interface POSListEvents { + /** + * Callback when a `button` row is activated. `event.detail.item` is the row and + * `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it. + */ + rowclick?: (event: POSListRowClickEvent) => void; + /** Callback when the list has scrolled near its end and more rows should be loaded. */ + loadmore?: (event: CallbackEvent) => void; +} + +/** + * Content slots for the POS list. + * @publicDocs + */ +interface POSListSlots { + /** Content displayed before the rows as part of the list's scrollable content. */ + header?: HTMLElement; +} + +/** + * Displays a virtualized list of rows rendered from plain data and item templates compiled with + * `posListTemplate`. + * @publicDocs + */ +interface POSList { + /** A unique identifier for the element. */ + id?: string; + /** + * The rows displayed in the list. Each row names the item template that renders it through + * `templateFor`. + * @default [] + */ + rows?: POSListRow[]; + /** + * The compiled item templates, one per ``, produced by `posListTemplate`. + * A row whose `templateFor` matches no template renders nothing. + */ + itemTemplates?: POSListTemplates; + /** + * Whether additional rows are being loaded. Renders a progress indicator after the last row. + * @default false + */ + loadingMore?: boolean; +} + /** * The link component provides event callbacks for handling user interactions. Learn more about [handling events](/docs/api/polaris/using-polaris-web-components#handling-events). * @publicDocs @@ -7809,3 +8003,18 @@ declare global { } } } + +declare module 'react' { + namespace JSX { + interface IntrinsicElements { + [posListTagName]: IntrinsicElementProps; + } + } +} +declare global { + namespace JSX { + interface IntrinsicElements { + [posListTagName]: IntrinsicElementProps; + } + } +} diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList.d.ts b/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList.d.ts new file mode 100644 index 0000000000..cec325d3b4 --- /dev/null +++ b/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList.d.ts @@ -0,0 +1,191 @@ +/** VERSION: undefined **/ +/* eslint-disable import-x/extensions */ +/* eslint-disable @typescript-eslint/no-namespace */ +/* eslint-disable @typescript-eslint/member-ordering */ +/* eslint-disable line-comment-position */ +/* eslint-disable @typescript-eslint/unified-signatures */ +/* eslint-disable no-var */ +/* eslint-disable import-x/namespace */ +// eslint-disable-next-line @typescript-eslint/triple-slash-reference, spaced-comment +/// +import type {Key, Ref, ComponentChild} from './components-shared.d.ts'; + +export type ComponentChildren = any; +/** + * Used when an element does not have children. + */ +export interface BaseElementProps { + key?: Key; + ref?: Ref; + slot?: Lowercase; +} +/** + * Used when an element has children. + */ +export interface BaseElementPropsWithChildren + extends BaseElementProps { + children?: ComponentChildren; +} +export type IntrinsicElementProps = T & + BaseElementPropsWithChildren; +export type HtmlElementTagNameProps = T & HTMLElement; +export type ElementForTag = + T extends keyof HTMLElementTagNameMap + ? HTMLElementTagNameMap[T] + : HTMLElement; +export interface CallbackEvent { + currentTarget: ElementForTag; + bubbles?: boolean; + cancelable?: boolean; + composed?: boolean; + detail?: any; + eventPhase: number; + target: ElementForTag | null; +} + +/** + * The serialized template AST carried by `s-pos-list`'s `itemTemplates` + * property. + * + * Templates are authored in the extension sandbox with the `posListTemplate` + * tagged template, compiled once into this plain-JSON shape, and shipped + * across the bridge as a single property. The host hydrates the AST per + * visible row, so no RemoteDOM nodes exist for template content and no + * extension code runs while scrolling. + */ +/** A literal string piece or a row-field lookup within interpolated text. */ +export type POSListTemplateSegment = + | string + | { + path: string; + }; +export type POSListTemplateProp = + /** A static value. Web component attributes yield strings, or `true` when valueless. */ + | { + kind: 'literal'; + value: string | boolean; + } + /** The row field at `path`, passed through with its original type (`bind:prop="path"`). */ + | { + kind: 'field'; + path: string; + } + /** A string built from literal pieces and `{{path}}` lookups. */ + | { + kind: 'segments'; + segments: POSListTemplateSegment[]; + }; +export type POSListTemplateNode = + | { + kind: 'element'; + tag: string; + props?: Record; + children?: POSListTemplateNode[]; + } + /** Literal text, possibly interpolated with `{{path}}` lookups. */ + | { + kind: 'text'; + segments: POSListTemplateSegment[]; + } + /** `{{#if path}}…{{/if}}`: children render only when the field is truthy. */ + | { + kind: 'if'; + path: string; + children: POSListTemplateNode[]; + }; +/** One `` root. */ +export interface POSListItemTemplate { + templateId: string; + /** `button` rows fire `rowclick`; `text` rows are static content. */ + type: 'button' | 'text'; + children: POSListTemplateNode[]; +} +export interface POSListTemplates { + /** + * The API version whose `posListTemplate` compiled these templates, e.g. `'2026-10'`. The host + * renders them only for an extension declaring the same API version. + */ + version: `${number}-${number}` | 'unstable'; + templates: POSListItemTemplate[]; +} + +declare const tagName = 's-pos-list'; +/** + * A row supplied to `s-pos-list`. Rows are plain data; every member other than `id` and + * `templateFor` is available to the row's item template through `{{path}}`, `bind:prop`, + * and `{{#if path}}` bindings. + */ +export interface POSListRow { + /** A unique identifier for the row. Keys virtualization and identity across incremental loads. */ + id: string; + /** The `templateId` of the item template that renders this row. */ + templateFor: string; + /** Any additional data the row's template reads. */ + [field: string]: unknown; +} +/** + * The event fired when a `button` row is activated. `detail.item` is the activated row and + * `detail.index` its position in `rows`. POS delivers the row data in `detail` because its + * RemoteDOM bridge forwards only `detail` when dispatching an event to the extension; the shared + * `POSListRowClickEvent` contract declares `item` and `index` on the event, which POS exposes once + * the bridge forwards custom event properties. + */ +export type POSListRowClickEvent = CallbackEvent & { + detail: { + item: POSListRow; + index: number; + }; +}; +/** + * Displays a virtualized list of rows rendered from plain data and item templates compiled with + * `posListTemplate`. + * + * @publicDocs + */ +export interface POSListJSXProps { + /** A unique identifier for the element. */ + id?: string; + /** + * The rows displayed in the list. Each row names the item template that renders it through + * `templateFor`. + * + * @default [] + */ + rows?: POSListRow[]; + /** + * The compiled item templates, one per ``, produced by `posListTemplate`. + * A row whose `templateFor` matches no template renders nothing. + */ + itemTemplates?: POSListTemplates; + /** + * Whether additional rows are being loaded. Renders a progress indicator after the last row. + * + * @default false + */ + loadingMore?: boolean; + /** + * Callback when a `button` row is activated. `event.detail.item` is the row and + * `event.detail.index` its position in `rows`. Rows rendered by a `text` template never fire it. + */ + onRowClick?: ((event: POSListRowClickEvent) => void) | null; + /** Callback when the list has scrolled near its end and more rows should be loaded. */ + onLoadMore?: ((event: CallbackEvent) => void) | null; + /** Content displayed before the rows as part of the list's scrollable content. */ + header?: ComponentChild; +} +export type ElementProps = Omit; +declare global { + interface HTMLElementTagNameMap { + [tagName]: HtmlElementTagNameProps; + } +} +declare module 'preact' { + namespace createElement.JSX { + interface IntrinsicElements { + [tagName]: IntrinsicElementProps; + } + } +} + +export {tagName}; +export type {ElementProps, POSListJSXProps, POSListRow, POSListRowClickEvent}; diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/default.jsx b/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/default.jsx new file mode 100644 index 0000000000..098d118cf2 --- /dev/null +++ b/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/default.jsx @@ -0,0 +1,56 @@ +import {posListTemplate} from '@shopify/ui-extensions/point-of-sale'; + +const itemTemplates = posListTemplate` + + {{title}} + + + + + + + + + {{name}} + {{variant}} + {{#if onSale}}Sale{{/if}} + + + + +`; + + { + console.log( + 'Selected row', + event.detail.item.id, + 'at index', + event.detail.index, + ); + }} +> + +; diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/incremental-loading.jsx b/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/incremental-loading.jsx new file mode 100644 index 0000000000..f1fa10ca9b --- /dev/null +++ b/packages/ui-extensions/src/surfaces/point-of-sale/components/POSList/examples/incremental-loading.jsx @@ -0,0 +1,8 @@ + { + void loadMoreProducts(); + }} +/>; diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/components/targets/StandardComponents.ts b/packages/ui-extensions/src/surfaces/point-of-sale/components/targets/StandardComponents.ts index 71a74c8f59..63229dd94a 100644 --- a/packages/ui-extensions/src/surfaces/point-of-sale/components/targets/StandardComponents.ts +++ b/packages/ui-extensions/src/surfaces/point-of-sale/components/targets/StandardComponents.ts @@ -24,6 +24,7 @@ export type StandardComponents = | 'NumberField' | 'Page' | 'POSBlock' + | 'POSList' | 'PosBlock' // Case is important in 2025-10 | 'Route' | 'Router' diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/pos-list-template.ts b/packages/ui-extensions/src/surfaces/point-of-sale/pos-list-template.ts new file mode 100644 index 0000000000..1e46bc7ade --- /dev/null +++ b/packages/ui-extensions/src/surfaces/point-of-sale/pos-list-template.ts @@ -0,0 +1,358 @@ +import htm from 'htm'; + +import type { + POSListItemTemplate, + POSListTemplateNode, + POSListTemplateProp, + POSListTemplateSegment, + POSListTemplates, +} from './components/POSList'; + +export type { + POSListItemTemplate, + POSListTemplateNode, + POSListTemplateProp, + POSListTemplateSegment, + POSListTemplates, +}; + +/** + * The tagged template that compiles `` markup into the + * `itemTemplates` value `` accepts. Templates are static: the + * result contains no functions. Compilation and validation happen when the + * helper executes, not during the extension build. Define templates at module + * scope to compile once per module execution. + * Invalid templates throw synchronously and return no partial collection. + * An uncaught module-scope exception aborts module evaluation; catch the helper + * invocation to recover explicitly. There is no automatic list-only fallback. + * + * @publicDocs + */ +export type POSListTemplateTag = ( + strings: TemplateStringsArray, + ...values: never[] +) => POSListTemplates; + +/** + * The API version this package compiles templates for. POS renders templates only for an + * extension declaring the same API version, so a mismatch between the bundled package and + * the extension's `api_version` is reported instead of rendering unexpectedly. + */ +const API_VERSION = '2026-10'; + +const ITEM_TAG = 's-pos-list-item'; +const LIST_TAG = 's-pos-list'; +const PATH_PATTERN = /^[\w.]+$/; +const EVENT_PROP_PATTERN = /^on[A-Z]/; +const BIND_PREFIX = 'bind:'; +/** `{{#if path}}`, `{{/if}}`, or `{{path}}`; anything else inside `{{ }}` is unsupported. */ +const EXPRESSION_PATTERN = /\{\{\s*(?:#if\s+([\w.]+)|(\/if)|([\w.]+))\s*\}\}/g; +const ANY_EXPRESSION_PATTERN = /\{\{([\s\S]*?)\}\}/g; + +interface RawElement { + tag: string; + props: Record; + children: unknown[]; +} + +type Token = + | {kind: 'text'; value: string} + | {kind: 'path'; path: string} + | {kind: 'if'; path: string} + | {kind: 'endif'} + | {kind: 'element'; element: RawElement}; + +function fail(message: string): never { + throw new Error(`posListTemplate: ${message}`); +} + +function isRawElement(value: unknown): value is RawElement { + return ( + typeof value === 'object' && + value !== null && + 'tag' in value && + 'props' in value && + 'children' in value + ); +} + +function createRawElement( + type: unknown, + props: Record | null, + ...children: unknown[] +): RawElement { + if (typeof type !== 'string') { + fail('interpolated values are not supported; templates must be static'); + } + return {tag: type, props: props ?? {}, children}; +} + +const parse = htm.bind(createRawElement); + +/** + * Splits a string into literal and `{{path}}` segments. Used for attribute + * values, where block expressions have no meaning. + */ +function parseSegments(value: string): POSListTemplateSegment[] { + const segments: POSListTemplateSegment[] = []; + let lastIndex = 0; + for (const match of value.matchAll(ANY_EXPRESSION_PATTERN)) { + const expression = match[1]!.trim(); + if (!PATH_PATTERN.test(expression)) { + if (expression.startsWith('#if') || expression === '/if') { + fail( + `{{#if}} is not supported inside an attribute value: "${match[0]}"`, + ); + } + fail(`unsupported template expression "${match[0]}"`); + } + const index = match.index ?? 0; + if (index > lastIndex) { + segments.push(value.slice(lastIndex, index)); + } + segments.push({path: expression}); + lastIndex = index + match[0].length; + } + if (lastIndex < value.length) { + segments.push(value.slice(lastIndex)); + } + return segments; +} + +function tokenizeText(value: string, tokens: Token[]): void { + let lastIndex = 0; + for (const match of value.matchAll(ANY_EXPRESSION_PATTERN)) { + const index = match.index ?? 0; + if (index > lastIndex) { + tokens.push({kind: 'text', value: value.slice(lastIndex, index)}); + } + EXPRESSION_PATTERN.lastIndex = 0; + const expression = EXPRESSION_PATTERN.exec(match[0]); + if (expression === null || expression[0].length !== match[0].length) { + fail(`unsupported template expression "${match[0]}"`); + } + const [, ifPath, endIf, path] = expression; + if (ifPath !== undefined) { + tokens.push({kind: 'if', path: ifPath}); + } else if (endIf !== undefined) { + tokens.push({kind: 'endif'}); + } else if (path !== undefined) { + tokens.push({kind: 'path', path}); + } + lastIndex = index + match[0].length; + } + if (lastIndex < value.length) { + tokens.push({kind: 'text', value: value.slice(lastIndex)}); + } +} + +function tokenize(rawChildren: unknown[]): Token[] { + const tokens: Token[] = []; + for (const child of rawChildren.flat()) { + if (typeof child === 'string') { + if (child.trim().length > 0) { + tokenizeText(child, tokens); + } + } else if (isRawElement(child)) { + tokens.push({kind: 'element', element: child}); + } else if (child !== null && child !== undefined && child !== false) { + fail('interpolated values are not supported; templates must be static'); + } + } + return tokens; +} + +function compileProp( + name: string, + value: unknown, + props: Record, +): void { + const isBinding = name.startsWith(BIND_PREFIX); + const propName = isBinding ? name.slice(BIND_PREFIX.length) : name; + if (EVENT_PROP_PATTERN.test(propName)) { + fail( + `event handlers are not supported in templates; use onRowClick on <${LIST_TAG}>`, + ); + } + if (isBinding) { + if (typeof value !== 'string' || !PATH_PATTERN.test(value)) { + fail(`${name} must name a row field path`); + } + if (propName in props) { + fail(`"${propName}" is set both as an attribute and through ${name}`); + } + props[propName] = {kind: 'field', path: value}; + return; + } + if (typeof value === 'string') { + props[name] = value.includes('{{') + ? {kind: 'segments', segments: parseSegments(value)} + : {kind: 'literal', value}; + return; + } + if (typeof value === 'boolean') { + props[name] = {kind: 'literal', value}; + return; + } + fail('interpolated values are not supported; templates must be static'); +} + +function compileElement( + element: RawElement, + parentIfPath?: string, +): POSListTemplateNode { + if (element.tag === ITEM_TAG || element.tag === LIST_TAG) { + fail(`<${element.tag}> can only appear as a template root`); + } + const props: Record = {}; + // Plain attributes first so `bind:` can detect a collision with one. + const entries = Object.entries(element.props); + for (const [name, value] of entries) { + if (!name.startsWith(BIND_PREFIX)) { + compileProp(name, value, props); + } + } + for (const [name, value] of entries) { + if (name.startsWith(BIND_PREFIX)) { + compileProp(name, value, props); + } + } + const node: POSListTemplateNode = {kind: 'element', tag: element.tag, props}; + const children = compileChildren(element.children, false, parentIfPath); + if (children.length > 0) { + node.children = children; + } + return node; +} + +function compileChildren( + rawChildren: unknown[], + atRoot: boolean, + parentIfPath?: string, +): POSListTemplateNode[] { + const nodes: POSListTemplateNode[] = []; + let pendingText: POSListTemplateSegment[] = []; + let openIf: {path: string; children: POSListTemplateNode[]} | undefined; + + const target = () => (openIf ? openIf.children : nodes); + const flushText = () => { + if (pendingText.length === 0) { + return; + } + if (atRoot) { + fail('text must be inside a component such as '); + } + target().push({kind: 'text', segments: pendingText}); + pendingText = []; + }; + + for (const token of tokenize(rawChildren)) { + switch (token.kind) { + case 'text': + pendingText.push(token.value); + break; + case 'path': + pendingText.push({path: token.path}); + break; + case 'if': { + flushText(); + const enclosingIfPath = openIf?.path ?? parentIfPath; + if (enclosingIfPath !== undefined) { + fail( + `{{#if}} cannot be nested: {{#if ${token.path}}} inside {{#if ${enclosingIfPath}}}`, + ); + } + openIf = {path: token.path, children: []}; + break; + } + case 'endif': + flushText(); + if (!openIf) { + fail('{{/if}} without a matching {{#if}}'); + } + nodes.push({kind: 'if', path: openIf.path, children: openIf.children}); + openIf = undefined; + break; + case 'element': + flushText(); + target().push( + compileElement(token.element, openIf?.path ?? parentIfPath), + ); + break; + } + } + flushText(); + if (openIf) { + fail(`{{#if ${openIf.path}}} is missing its {{/if}}`); + } + return nodes; +} + +function compileRoot(root: unknown, seen: Set): POSListItemTemplate { + if (!isRawElement(root) || root.tag !== ITEM_TAG) { + fail(`every template root must be an <${ITEM_TAG} templateId="…"> element`); + } + let templateId: string | undefined; + let type: POSListItemTemplate['type'] = 'button'; + for (const [name, value] of Object.entries(root.props)) { + if (name === 'templateId') { + if (typeof value !== 'string' || value.length === 0) { + fail(`<${ITEM_TAG}> requires a literal, non-empty templateId`); + } + templateId = value; + } else if (name === 'type') { + if (value !== 'button' && value !== 'text') { + fail( + `<${ITEM_TAG}> type must be "button" or "text", got ${JSON.stringify( + value, + )}`, + ); + } + type = value; + } else { + fail( + `<${ITEM_TAG}> does not accept a "${name}" attribute; only templateId and type are allowed`, + ); + } + } + if (templateId === undefined) { + fail(`<${ITEM_TAG}> requires a literal, non-empty templateId`); + } + if (seen.has(templateId)) { + fail(`duplicate templateId "${templateId}"`); + } + seen.add(templateId); + return {templateId, type, children: compileChildren(root.children, true)}; +} + +/** + * Compiles `` markup into the `itemTemplates` value for + * ``. + * + * Compilation and validation happen when this helper executes, not during the + * extension build. Define templates at module scope to compile once per module + * execution. + * Invalid templates throw synchronously and return no partial collection. + * An uncaught module-scope exception aborts module evaluation; catch the helper + * invocation to recover explicitly. There is no automatic list-only fallback. + * + * Inside a template, `{{path}}` interpolates a row field as text, `bind:prop="path"` + * passes a row field to a component prop with its own type, and + * `{{#if path}}…{{/if}}` renders its content only when the field is truthy. + * Event handlers, interpolated values, and any other `{{…}}` expression are + * rejected when the template is compiled. + * + * @publicDocs + */ +export const posListTemplate: POSListTemplateTag = (strings, ...values) => { + if (values.length > 0) { + fail('interpolated values are not supported; templates must be static'); + } + const parsed: unknown = parse(strings); + const roots = Array.isArray(parsed) ? parsed : [parsed]; + const seen = new Set(); + const templates = roots + .filter((root) => !(typeof root === 'string' && root.trim().length === 0)) + .map((root) => compileRoot(root, seen)); + return {version: API_VERSION, templates}; +}; diff --git a/packages/ui-extensions/src/surfaces/point-of-sale/tests/pos-list-template.test.ts b/packages/ui-extensions/src/surfaces/point-of-sale/tests/pos-list-template.test.ts new file mode 100644 index 0000000000..bd38a1c0b3 --- /dev/null +++ b/packages/ui-extensions/src/surfaces/point-of-sale/tests/pos-list-template.test.ts @@ -0,0 +1,304 @@ +import {posListTemplate} from '../pos-list-template'; +import type {POSListTemplateNode} from '../pos-list-template'; + +function item(markup: string, attributes = 'templateId="p"') { + return `${markup}`; +} + +function compileItem(markup: string, attributes?: string) { + return posListTemplate( + Object.assign([item(markup, attributes)], { + raw: [item(markup, attributes)], + }), + ); +} + +function firstChild(markup: string): POSListTemplateNode { + const [template] = compileItem(markup).templates; + const [child] = template!.children; + return child!; +} + +describe('posListTemplate', () => { + describe('roots', () => { + it('compiles text with a path placeholder into text segments', () => { + const result = posListTemplate`Hi {{name}}`; + + expect(result).toStrictEqual({ + version: '2026-10', + templates: [ + { + templateId: 'p', + type: 'button', + children: [ + { + kind: 'element', + tag: 's-text', + props: {}, + children: [{kind: 'text', segments: ['Hi ', {path: 'name'}]}], + }, + ], + }, + ], + }); + }); + + it('compiles several roots and honours type="text"', () => { + const result = posListTemplate` + {{title}} + {{name}} + `; + + expect( + result.templates.map(({templateId, type}) => ({templateId, type})), + ).toStrictEqual([ + {templateId: 'header', type: 'text'}, + {templateId: 'product', type: 'button'}, + ]); + }); + + it('rejects an unknown type', () => { + expect(() => + compileItem('x', 'templateId="p" type="link"'), + ).toThrow( + 'posListTemplate: type must be "button" or "text", got "link"', + ); + }); + + it('rejects a missing, empty, or duplicate templateId', () => { + expect(() => compileItem('x', 'type="text"')).toThrow( + 'posListTemplate: requires a literal, non-empty templateId', + ); + expect(() => compileItem('x', 'templateId=""')).toThrow( + 'posListTemplate: requires a literal, non-empty templateId', + ); + expect( + () => posListTemplate` + a + b + `, + ).toThrow('posListTemplate: duplicate templateId "p"'); + }); + + it('rejects other root attributes, non-item roots, and nested items', () => { + expect(() => + compileItem('x', 'templateId="p" id="x"'), + ).toThrow( + 'posListTemplate: does not accept a "id" attribute; only templateId and type are allowed', + ); + expect(() => posListTemplate`loose`).toThrow( + 'posListTemplate: every template root must be an element', + ); + expect(() => + compileItem( + 'x', + ), + ).toThrow( + 'posListTemplate: can only appear as a template root', + ); + expect(() => compileItem('')).toThrow( + 'posListTemplate: can only appear as a template root', + ); + }); + + it('rejects text directly under the item root', () => { + expect(() => compileItem('{{label}}')).toThrow( + 'posListTemplate: text must be inside a component such as ', + ); + expect(() => compileItem('Plain text')).toThrow( + 'posListTemplate: text must be inside a component such as ', + ); + expect(() => compileItem('{{#if a}}{{label}}{{/if}}')).toThrow( + 'posListTemplate: text must be inside a component such as ', + ); + }); + + it('rejects interpolated values of any kind', () => { + // The tag's type already forbids interpolation; this exercises the runtime check JS callers hit. + const compileDynamic = posListTemplate as unknown as ( + strings: TemplateStringsArray, + ...values: unknown[] + ) => unknown; + const dynamic = () => {}; + const tag = 's-text'; + expect( + () => + compileDynamic`x`, + ).toThrow( + 'posListTemplate: interpolated values are not supported; templates must be static', + ); + expect( + () => + compileDynamic`<${tag}>x`, + ).toThrow( + 'posListTemplate: interpolated values are not supported; templates must be static', + ); + }); + }); + + describe('conditionals', () => { + it('compiles {{#if}} blocks into if nodes wrapping the sibling elements between the markers', () => { + const stack = firstChild( + '{{#if onSale}}Sale{{/if}}', + ); + + expect(stack).toStrictEqual({ + kind: 'element', + tag: 's-stack', + props: {}, + children: [ + { + kind: 'if', + path: 'onSale', + children: [ + { + kind: 'element', + tag: 's-badge', + props: {tone: {kind: 'literal', value: 'success'}}, + children: [{kind: 'text', segments: ['Sale']}], + }, + ], + }, + ], + }); + }); + + it('keeps text inside an if within a component', () => { + const text = firstChild( + '{{#if a}}Yes {{label}}{{/if}} always', + ); + + expect(text).toStrictEqual({ + kind: 'element', + tag: 's-text', + props: {}, + children: [ + { + kind: 'if', + path: 'a', + children: [{kind: 'text', segments: ['Yes ', {path: 'label'}]}], + }, + {kind: 'text', segments: [' always']}, + ], + }); + }); + + it('rejects a condition nested through component children', () => { + expect(() => + compileItem( + '{{#if outer}}{{#if inner}}Visible{{/if}}{{/if}}', + ), + ).toThrow(/cannot be nested/); + }); + + it('allows a separate condition after an enclosing condition closes', () => { + const result = compileItem( + '{{#if first}}First{{/if}}{{#if second}}Second{{/if}}', + ); + + expect(result.templates[0]?.children).toMatchObject([ + { + kind: 'if', + path: 'first', + children: [{kind: 'element', tag: 's-box'}], + }, + { + kind: 'element', + tag: 's-stack', + children: [{kind: 'if', path: 'second'}], + }, + ]); + }); + + it('rejects nested, unopened, unclosed, and unsupported block expressions', () => { + expect(() => + compileItem( + '{{#if a}}{{#if b}}x{{/if}}{{/if}}', + ), + ).toThrow( + 'posListTemplate: {{#if}} cannot be nested: {{#if b}} inside {{#if a}}', + ); + expect(() => compileItem('{{/if}}')).toThrow( + 'posListTemplate: {{/if}} without a matching {{#if}}', + ); + expect(() => + compileItem('{{#if a}}x'), + ).toThrow('posListTemplate: {{#if a}} is missing its {{/if}}'); + expect(() => + compileItem( + '{{#each x}}x{{/each}}', + ), + ).toThrow( + 'posListTemplate: unsupported template expression "{{#each x}}"', + ); + expect(() => compileItem('{{a + b}}')).toThrow( + 'posListTemplate: unsupported template expression "{{a + b}}"', + ); + }); + }); + + describe('props', () => { + it('compiles bind: attributes into typed field bindings', () => { + expect(firstChild('')).toStrictEqual({ + kind: 'element', + tag: 's-switch', + props: {checked: {kind: 'field', path: 'active'}}, + }); + }); + + it('compiles placeholders inside attributes into string segments', () => { + expect( + firstChild(''), + ).toStrictEqual({ + kind: 'element', + tag: 's-image', + props: { + src: {kind: 'segments', segments: [{path: 'image.src'}]}, + alt: {kind: 'segments', segments: [{path: 'label'}, ' image']}, + }, + }); + }); + + it('keeps literal strings and valueless attributes as literals', () => { + expect(firstChild('')).toStrictEqual({ + kind: 'element', + tag: 's-switch', + props: { + checked: {kind: 'literal', value: true}, + label: {kind: 'literal', value: 'Wifi'}, + }, + }); + }); + + it('rejects event handler attributes', () => { + expect(() => compileItem('Go')).toThrow( + 'posListTemplate: event handlers are not supported in templates; use onRowClick on ', + ); + }); + + it('rejects event handlers supplied through bind:', () => { + expect(() => + compileItem('Go'), + ).toThrow(/event handlers are not supported/); + }); + + it('rejects a bind: attribute that collides with a plain attribute or names an invalid path', () => { + expect(() => + compileItem(''), + ).toThrow( + 'posListTemplate: "checked" is set both as an attribute and through bind:checked', + ); + expect(() => compileItem('')).toThrow( + 'posListTemplate: bind:checked must name a row field path', + ); + }); + + it('rejects block expressions inside attribute values', () => { + expect(() => + compileItem('x'), + ).toThrow( + 'posListTemplate: {{#if}} is not supported inside an attribute value: "{{#if a}}"', + ); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index 1153f26d17..0b031d9356 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,38 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@andrewbranch/untar.js@^1.0.3": + version "1.0.4" + resolved "https://registry.npmjs.org/@andrewbranch/untar.js/-/untar.js-1.0.4.tgz#ad1c96bbaf2a30051104a18ca998ff578162f0c2" + integrity sha512-pVXSwPsLuw8IGLo2Di0EaOfsk+ntVvpkk942J/sHYIkwvtKUakEcPh7HBgZ6tuimgzKSEHgCvO4XgQ05DEbwDw== + +"@arethetypeswrong/cli@^0.18.5": + version "0.18.5" + resolved "https://registry.npmjs.org/@arethetypeswrong/cli/-/cli-0.18.5.tgz#f3b373203886c8cf773b24e20c4dc7ad4d020a2f" + integrity sha512-gM+8vRsQOD/Uc7EnBedUhkG5OCsDWE4uoak5QvomGpMpaky0Eh41p04nIMgrWb8EOmqZUJGc6zz9hsP6E56R7g== + dependencies: + "@arethetypeswrong/core" "0.18.5" + chalk "^4.1.2" + cli-table3 "^0.6.3" + commander "^10.0.1" + marked "^9.1.2" + marked-terminal "^7.1.0" + semver "^7.5.4" + +"@arethetypeswrong/core@0.18.5": + version "0.18.5" + resolved "https://registry.npmjs.org/@arethetypeswrong/core/-/core-0.18.5.tgz#bb5abf083dd9d718a5790febc3a2e142eb2e3846" + integrity sha512-9ytjzGwxjm9Uz7I9avfbt5vlQt6uk9uRRESzJjqrznl6WKvI6dwYTo+vJ3U02Wrq/mR3iql/PzhvHhKdJIAjDQ== + dependencies: + "@andrewbranch/untar.js" "^1.0.3" + "@loaderkit/resolve" "^1.0.2" + cjs-module-lexer "^1.2.3" + fflate "^0.8.3" + lru-cache "^11.0.1" + semver "^7.5.4" + typescript "5.6.1-rc" + validate-npm-package-name "^5.0.0" + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz" @@ -1171,6 +1203,11 @@ resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@braidai/lang@^1.0.0": + version "1.1.2" + resolved "https://registry.npmjs.org/@braidai/lang/-/lang-1.1.2.tgz#65bc2bc1db6d00e153b95ac7006f4573e289e9be" + integrity sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA== + "@changesets/apply-release-plan@^7.0.13": version "7.0.13" resolved "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.13.tgz" @@ -1384,6 +1421,11 @@ human-id "^4.1.1" prettier "^2.7.1" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -1711,6 +1753,13 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@loaderkit/resolve@^1.0.2": + version "1.0.6" + resolved "https://registry.npmjs.org/@loaderkit/resolve/-/resolve-1.0.6.tgz#8d45341e688faecc25b3ae919c0f45d94c4e26c9" + integrity sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg== + dependencies: + "@braidai/lang" "^1.0.0" + "@manypkg/find-root@^1.1.0": version "1.1.0" resolved "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz" @@ -1773,6 +1822,13 @@ dependencies: "@preact/signals-core" "^1.12.0" +"@publint/pack@^0.1.7": + version "0.1.7" + resolved "https://registry.npmjs.org/@publint/pack/-/pack-0.1.7.tgz#f9db093808ccfd45f4b110bd5dd5a3c8a15655f6" + integrity sha512-4EDEmvxWtgsCnnVeBvtFIFZtUhPPt1+bA9JrSwU4Sa//6oKtzCSlGGXYJr44OD9aGISymbieJ4mCKHUygUDU+g== + dependencies: + tinyexec "^1.3.0" + "@quilted/preact-testing@^0.1.8": version "0.1.8" resolved "https://registry.npmjs.org/@quilted/preact-testing/-/preact-testing-0.1.8.tgz" @@ -2030,6 +2086,11 @@ resolved "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== +"@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + "@sinonjs/commons@^1.7.0": version "1.8.6" resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" @@ -2394,6 +2455,13 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: dependencies: type-fest "^0.21.3" +ansi-escapes@^7.0.0: + version "7.3.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz#5395bb74b2150a4a1d6e3c2565f4aeca78d28627" + integrity sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== + dependencies: + environment "^1.0.0" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -2404,6 +2472,11 @@ ansi-regex@^6.0.1: resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-regex@^6.1.0: + version "6.3.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz#247c8e7b70a1a43b10ce14c0226fcbf58e8815d5" + integrity sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" @@ -2423,6 +2496,11 @@ ansi-styles@^5.0.0: resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" @@ -2824,7 +2902,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2832,6 +2910,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.4.1: + version "5.6.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== + change-case@^4.1.0, change-case@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz" @@ -2890,6 +2973,32 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz" integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== +cjs-module-lexer@^1.2.3: + version "1.4.3" + resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== + +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cli-table3@^0.6.3, cli-table3@^0.6.5: + version "0.6.5" + resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" @@ -2963,6 +3072,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + commander@^6.2.0: version "6.2.1" resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" @@ -3248,6 +3362,11 @@ emoji-regex@^9.2.2: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +emojilib@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e" + integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw== + end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" @@ -3263,6 +3382,11 @@ enquirer@^2.4.1: ansi-colors "^4.1.1" strip-ansi "^6.0.1" +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz#8e86c66b180f363c7ab311787e0259665f45a9f1" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" @@ -3820,6 +3944,11 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fflate@^0.8.3: + version "0.8.3" + resolved "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz#bc27d8eb30343d4d512abb03480202ce65d825fc" + integrity sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -4130,6 +4259,11 @@ header-case@^2.0.4: capital-case "^1.0.4" tslib "^2.0.3" +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" @@ -4137,6 +4271,11 @@ homedir-polyfill@^1.0.1: dependencies: parse-passwd "^1.0.0" +htm@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78" + integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" @@ -5249,6 +5388,11 @@ lower-case@^2.0.2: dependencies: tslib "^2.0.3" +lru-cache@^11.0.1: + version "11.5.2" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz#00e16665c90c620fba14a3c368732a976493f760" + integrity sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" @@ -5292,6 +5436,24 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +marked-terminal@^7.1.0: + version "7.3.0" + resolved "https://registry.npmjs.org/marked-terminal/-/marked-terminal-7.3.0.tgz#7a86236565f3dd530f465ffce9c3f8b62ef270e8" + integrity sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw== + dependencies: + ansi-escapes "^7.0.0" + ansi-regex "^6.1.0" + chalk "^5.4.1" + cli-highlight "^2.1.11" + cli-table3 "^0.6.5" + node-emoji "^2.2.0" + supports-hyperlinks "^3.1.0" + +marked@^9.1.2: + version "9.1.6" + resolved "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz#5d2a3f8180abfbc5d62e3258a38a1c19c0381695" + integrity sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" @@ -5354,7 +5516,7 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mri@^1.2.0: +mri@^1.1.0, mri@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== @@ -5364,6 +5526,15 @@ ms@2.1.2, ms@^2.1.1: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" @@ -5382,6 +5553,16 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz#1d000e3c76e462577895be1b436f4aa2d6760eb0" + integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== + dependencies: + "@sindresorhus/is" "^4.6.0" + char-regex "^1.0.2" + emojilib "^2.4.0" + skin-tone "^2.0.0" + node-environment-flags@^1.0.5: version "1.0.6" resolved "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz" @@ -5440,7 +5621,7 @@ nwsapi@^2.2.0: resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.10.tgz" integrity sha512-QK0sRs7MKv0tKe1+5uZIQk/C8XGza4DAnztJG8iD+TpJIORARrCxczA738awHrZoHeTjSSoHqao2teO0dC/gFQ== -object-assign@^4.1.1: +object-assign@^4.0.1, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -5614,6 +5795,11 @@ package-manager-detector@^0.2.0: dependencies: quansync "^0.2.7" +package-manager-detector@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz#70c9a2c4bd1a513dcd6cad006a9fcebec22a1253" + integrity sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A== + param-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" @@ -5644,11 +5830,23 @@ parse-passwd@^1.0.0: resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== -parse5@6.0.1: +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" @@ -5705,7 +5903,7 @@ picocolors@^1.0.0, picocolors@^1.0.1: resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz" integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== -picocolors@^1.1.0: +picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -5824,6 +6022,16 @@ pstree.remy@^1.1.8: resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== +publint@^0.3.23: + version "0.3.24" + resolved "https://registry.npmjs.org/publint/-/publint-0.3.24.tgz#ccff1f5bfedc03f47fef8a47c2c0974eabffd048" + integrity sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw== + dependencies: + "@publint/pack" "^0.1.7" + package-manager-detector "^1.8.0" + picocolors "^1.1.1" + sade "^1.8.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" @@ -6038,6 +6246,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +sade@^1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-array-concat@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz" @@ -6084,6 +6299,11 @@ semver@^7.3.2, semver@^7.3.7, semver@^7.5.3: resolved "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz" integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== +semver@^7.5.4: + version "7.8.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + semver@~7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" @@ -6171,6 +6391,13 @@ sisteransi@^1.0.5: resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +skin-tone@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz#4e3933ab45c0d4f4f781745d64b9f4c208e41237" + integrity sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA== + dependencies: + unicode-emoji-modifier-base "^1.0.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" @@ -6366,6 +6593,14 @@ supports-hyperlinks@^2.0.0, supports-hyperlinks@^2.1.0: has-flag "^4.0.0" supports-color "^7.0.0" +supports-hyperlinks@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz#b8e485b179681dea496a1e7abdf8985bd3145461" + integrity sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" @@ -6403,11 +6638,30 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + throat@^6.0.1: version "6.0.2" resolved "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz" integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== +tinyexec@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.1.tgz#16a2e3c6e23fafce72640e678e651db36145b9c6" + integrity sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz" @@ -6560,6 +6814,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript@5.6.1-rc: + version "5.6.1-rc" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.6.1-rc.tgz#d5e4d7d8170174fed607b74cc32aba3d77018e02" + integrity sha512-E3b2+1zEFu84jB0YQi9BORDjz9+jGbwwy1Zi3G0LUNw7a7cePUrHMRNy8aPh53nXpkFGVHSxIZo5vKTfYaFiBQ== + typescript@^4.3.5, typescript@^4.9.0: version "4.9.5" resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" @@ -6595,6 +6854,11 @@ unicode-canonical-property-names-ecmascript@^2.0.0: resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== +unicode-emoji-modifier-base@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz#dbbd5b54ba30f287e2a8d5a249da6c0cef369459" + integrity sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g== + unicode-match-property-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" @@ -6681,6 +6945,11 @@ v8flags@^3.1.1: dependencies: homedir-polyfill "^1.0.1" +validate-npm-package-name@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" @@ -6867,6 +7136,19 @@ yargs-parser@^21.1.1: resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@^16.0.0: + version "16.2.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.2.tgz#c56731dca0d2788ae0866dd3c83907d6bab85f7d" + integrity sha512-Nt9ZJjXTv5R8MHbqby/wXQ6Gi0Bb3TcYZkR1bzuL4yB2OxWPkXknz513gEF0GoA6tn00UpbPvERW8rzCuWCA6w== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz"