@shipengine/elements 2.24.1 → 2.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/README.md +187 -6
  2. package/dist/cjs/components/field/credit-card-input/credit-card-input.cjs +46 -29
  3. package/dist/cjs/components/field/rate-select/rate-card/rate-card.cjs +29 -5
  4. package/dist/cjs/components/field/rate-select/rate-card/rate-card.styles.cjs +8 -3
  5. package/dist/cjs/components/field/rate-select/rate-select.cjs +26 -5
  6. package/dist/cjs/components/forms/address-form/address-form-schema.cjs +3 -3
  7. package/dist/cjs/components/forms/edit-billing-form/edit-billing-form.cjs +57 -4
  8. package/dist/cjs/components/service-card/service-card.cjs +4 -4
  9. package/dist/cjs/components/service-card/service-card.styles.cjs +5 -2
  10. package/dist/cjs/components/service-point-display/service-point-display.cjs +1 -36
  11. package/dist/cjs/components/service-point-display/service-point-display.styles.cjs +0 -12
  12. package/dist/cjs/components/shipment-not-found-error/index.cjs +7 -0
  13. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.cjs +40 -0
  14. package/dist/cjs/components/shipment-not-found-error/shipment-not-found-error.styles.cjs +24 -0
  15. package/dist/cjs/components/suspend-purchase/suspend-purchase.cjs +11 -3
  16. package/dist/cjs/elements/purchase-label/components/rate-form/rate-form.cjs +13 -3
  17. package/dist/cjs/elements/purchase-label/components/rate-form/rate-schema.cjs +7 -2
  18. package/dist/cjs/elements/purchase-label/components/rate-form/rate-view.cjs +2 -0
  19. package/dist/cjs/elements/purchase-label/hooks/use-rate-options.cjs +31 -2
  20. package/dist/cjs/elements/purchase-label/hooks/use-rates-form.cjs +14 -18
  21. package/dist/cjs/elements/purchase-label/hooks/use-request-rates.cjs +20 -20
  22. package/dist/cjs/elements/purchase-label/purchase-label.cjs +4 -1
  23. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.cjs +16 -31
  24. package/dist/cjs/elements/shipment-summary/components/label-display/label-card.styles.cjs +0 -19
  25. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.cjs +54 -0
  26. package/dist/cjs/elements/shipment-summary/components/label-display/paperless-label-display.styles.cjs +27 -0
  27. package/dist/cjs/features/payment-method-settings/payment-method-settings.cjs +56 -18
  28. package/dist/cjs/hooks/use-configure-shipment.cjs +32 -11
  29. package/dist/cjs/hooks/use-helpers.cjs +4 -1
  30. package/dist/cjs/index.cjs +15 -12
  31. package/dist/cjs/locales/en/account-settings.json.cjs +6 -0
  32. package/dist/cjs/locales/en/common.json.cjs +2 -0
  33. package/dist/cjs/locales/en/purchase-label.json.cjs +5 -3
  34. package/dist/cjs/package.json.cjs +1 -1
  35. package/dist/cjs/utilities/address.cjs +29 -0
  36. package/dist/cjs/utilities/index.cjs +3 -0
  37. package/dist/cjs/utilities/money.cjs +14 -0
  38. package/dist/cjs/utilities/rate-warning-messages.cjs +25 -0
  39. package/dist/cjs/utilities/shipengine/warehouses.cjs +2 -1
  40. package/dist/cjs/workflows/connect-external-carrier/connect-external-carrier.cjs +7 -3
  41. package/dist/cjs/workflows/label-workflow/label-workflow.cjs +11 -3
  42. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.cjs +1 -1
  43. package/dist/cjs/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.cjs +17 -1
  44. package/dist/cjs/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.cjs +4 -1
  45. package/dist/cjs/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.cjs +4 -1
  46. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.cjs +14 -3
  47. package/dist/cjs/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.cjs +12 -12
  48. package/dist/esm/components/field/credit-card-input/credit-card-input.js +47 -30
  49. package/dist/esm/components/field/rate-select/rate-card/rate-card.js +30 -6
  50. package/dist/esm/components/field/rate-select/rate-card/rate-card.styles.js +8 -3
  51. package/dist/esm/components/field/rate-select/rate-select.js +26 -5
  52. package/dist/esm/components/forms/address-form/address-form-schema.js +3 -3
  53. package/dist/esm/components/forms/edit-billing-form/edit-billing-form.js +58 -5
  54. package/dist/esm/components/service-card/service-card.js +4 -4
  55. package/dist/esm/components/service-card/service-card.styles.js +5 -2
  56. package/dist/esm/components/service-point-display/service-point-display.js +2 -37
  57. package/dist/esm/components/service-point-display/service-point-display.styles.js +0 -12
  58. package/dist/esm/components/shipment-not-found-error/index.js +1 -0
  59. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.js +38 -0
  60. package/dist/esm/components/shipment-not-found-error/shipment-not-found-error.styles.js +22 -0
  61. package/dist/esm/components/suspend-purchase/suspend-purchase.js +11 -3
  62. package/dist/esm/elements/purchase-label/components/rate-form/rate-form.js +14 -4
  63. package/dist/esm/elements/purchase-label/components/rate-form/rate-schema.js +7 -2
  64. package/dist/esm/elements/purchase-label/components/rate-form/rate-view.js +2 -0
  65. package/dist/esm/elements/purchase-label/hooks/use-rate-options.js +31 -2
  66. package/dist/esm/elements/purchase-label/hooks/use-rates-form.js +14 -18
  67. package/dist/esm/elements/purchase-label/hooks/use-request-rates.js +20 -20
  68. package/dist/esm/elements/purchase-label/purchase-label.js +4 -1
  69. package/dist/esm/elements/shipment-summary/components/label-display/label-card.js +18 -33
  70. package/dist/esm/elements/shipment-summary/components/label-display/label-card.styles.js +0 -19
  71. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.js +52 -0
  72. package/dist/esm/elements/shipment-summary/components/label-display/paperless-label-display.styles.js +25 -0
  73. package/dist/esm/features/payment-method-settings/payment-method-settings.js +57 -19
  74. package/dist/esm/hooks/use-configure-shipment.js +33 -12
  75. package/dist/esm/hooks/use-helpers.js +4 -1
  76. package/dist/esm/index.js +1 -0
  77. package/dist/esm/locales/en/account-settings.json.js +6 -0
  78. package/dist/esm/locales/en/common.json.js +2 -0
  79. package/dist/esm/locales/en/purchase-label.json.js +5 -3
  80. package/dist/esm/package.json.js +1 -1
  81. package/dist/esm/utilities/address.js +26 -0
  82. package/dist/esm/utilities/index.js +1 -0
  83. package/dist/esm/utilities/money.js +14 -1
  84. package/dist/esm/utilities/rate-warning-messages.js +23 -0
  85. package/dist/esm/utilities/shipengine/warehouses.js +2 -1
  86. package/dist/esm/workflows/connect-external-carrier/connect-external-carrier.js +7 -3
  87. package/dist/esm/workflows/label-workflow/label-workflow.js +11 -3
  88. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/confirmation-and-submission-step.js +1 -1
  89. package/dist/esm/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.js +17 -1
  90. package/dist/esm/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.js +4 -1
  91. package/dist/esm/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.js +4 -1
  92. package/dist/esm/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.js +14 -3
  93. package/dist/esm/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.js +12 -12
  94. package/dist/types/components/field/credit-card-input/credit-card-input.d.ts.map +1 -1
  95. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts +4 -2
  96. package/dist/types/components/field/rate-select/rate-card/rate-card.d.ts.map +1 -1
  97. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts +7 -2
  98. package/dist/types/components/field/rate-select/rate-card/rate-card.styles.d.ts.map +1 -1
  99. package/dist/types/components/field/rate-select/rate-select.d.ts +1 -0
  100. package/dist/types/components/field/rate-select/rate-select.d.ts.map +1 -1
  101. package/dist/types/components/forms/address-form/address-form-schema.d.ts.map +1 -1
  102. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts +2 -1
  103. package/dist/types/components/forms/edit-billing-form/edit-billing-form.d.ts.map +1 -1
  104. package/dist/types/components/service-card/service-card.d.ts +1 -1
  105. package/dist/types/components/service-card/service-card.d.ts.map +1 -1
  106. package/dist/types/components/service-card/service-card.styles.d.ts +4 -1
  107. package/dist/types/components/service-card/service-card.styles.d.ts.map +1 -1
  108. package/dist/types/components/service-point-display/service-point-display.d.ts.map +1 -1
  109. package/dist/types/components/service-point-display/service-point-display.styles.d.ts +0 -12
  110. package/dist/types/components/service-point-display/service-point-display.styles.d.ts.map +1 -1
  111. package/dist/types/components/shipment-not-found-error/index.d.ts +2 -0
  112. package/dist/types/components/shipment-not-found-error/index.d.ts.map +1 -0
  113. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts +6 -0
  114. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.d.ts.map +1 -0
  115. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts +19 -0
  116. package/dist/types/components/shipment-not-found-error/shipment-not-found-error.styles.d.ts.map +1 -0
  117. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts +4 -2
  118. package/dist/types/components/suspend-purchase/suspend-purchase.d.ts.map +1 -1
  119. package/dist/types/elements/labels-grid/labels-grid.d.ts +11 -1
  120. package/dist/types/elements/labels-grid/labels-grid.d.ts.map +1 -1
  121. package/dist/types/elements/manage-carriers/manage-carriers.d.ts +11 -1
  122. package/dist/types/elements/manage-carriers/manage-carriers.d.ts.map +1 -1
  123. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts +11 -1
  124. package/dist/types/elements/manage-external-carriers/manage-external-carriers.d.ts.map +1 -1
  125. package/dist/types/elements/manage-funding/manage-funding-element.d.ts +11 -1
  126. package/dist/types/elements/manage-funding/manage-funding-element.d.ts.map +1 -1
  127. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts +11 -1
  128. package/dist/types/elements/manage-warehouses/manage-warehouses.d.ts.map +1 -1
  129. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts +11 -1
  130. package/dist/types/elements/payment-method-settings/payment-method-settings-element.d.ts.map +1 -1
  131. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts +1 -1
  132. package/dist/types/elements/purchase-label/components/rate-form/rate-form.d.ts.map +1 -1
  133. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts +10 -1
  134. package/dist/types/elements/purchase-label/components/rate-form/rate-schema.d.ts.map +1 -1
  135. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts +2 -1
  136. package/dist/types/elements/purchase-label/components/rate-form/rate-view.d.ts.map +1 -1
  137. package/dist/types/elements/purchase-label/hooks/use-rate-options.d.ts.map +1 -1
  138. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts +2 -2
  139. package/dist/types/elements/purchase-label/hooks/use-rates-form.d.ts.map +1 -1
  140. package/dist/types/elements/purchase-label/hooks/use-request-rates.d.ts.map +1 -1
  141. package/dist/types/elements/purchase-label/purchase-label.d.ts +11 -1
  142. package/dist/types/elements/purchase-label/purchase-label.d.ts.map +1 -1
  143. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts +11 -1
  144. package/dist/types/elements/select-label-layout/select-label-layout-element.d.ts.map +1 -1
  145. package/dist/types/elements/shipment-summary/components/label-display/label-card.d.ts.map +1 -1
  146. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts +0 -19
  147. package/dist/types/elements/shipment-summary/components/label-display/label-card.styles.d.ts.map +1 -1
  148. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts +8 -0
  149. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.d.ts.map +1 -0
  150. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts +22 -0
  151. package/dist/types/elements/shipment-summary/components/label-display/paperless-label-display.styles.d.ts.map +1 -0
  152. package/dist/types/elements/shipment-summary/shipment-summary.d.ts +11 -1
  153. package/dist/types/elements/shipment-summary/shipment-summary.d.ts.map +1 -1
  154. package/dist/types/elements/shipments-grid/hooks/use-shipments-grid.d.ts.map +1 -1
  155. package/dist/types/elements/shipments-grid/shipments-grid.d.ts +11 -1
  156. package/dist/types/elements/shipments-grid/shipments-grid.d.ts.map +1 -1
  157. package/dist/types/elements/theme-creator/theme-creator.d.ts +11 -1
  158. package/dist/types/elements/theme-creator/theme-creator.d.ts.map +1 -1
  159. package/dist/types/elements/transaction-history/transaction-history-element.d.ts +11 -1
  160. package/dist/types/elements/transaction-history/transaction-history-element.d.ts.map +1 -1
  161. package/dist/types/elements/unit-settings/unit-settings-element.d.ts +11 -1
  162. package/dist/types/elements/unit-settings/unit-settings-element.d.ts.map +1 -1
  163. package/dist/types/elements/vat-settings/vat-settings-element.d.ts +11 -1
  164. package/dist/types/elements/vat-settings/vat-settings-element.d.ts.map +1 -1
  165. package/dist/types/elements/void-label/void-label.d.ts +11 -1
  166. package/dist/types/elements/void-label/void-label.d.ts.map +1 -1
  167. package/dist/types/features/payment-method-settings/payment-method-settings.d.ts.map +1 -1
  168. package/dist/types/hooks/use-configure-shipment.d.ts +1 -0
  169. package/dist/types/hooks/use-configure-shipment.d.ts.map +1 -1
  170. package/dist/types/hooks/use-helpers.d.ts +2 -0
  171. package/dist/types/hooks/use-helpers.d.ts.map +1 -1
  172. package/dist/types/index.d.ts +1 -1
  173. package/dist/types/index.d.ts.map +1 -1
  174. package/dist/types/locales/en/index.d.ts +11 -1
  175. package/dist/types/locales/en/index.d.ts.map +1 -1
  176. package/dist/types/types/rates.d.ts +1 -0
  177. package/dist/types/types/rates.d.ts.map +1 -1
  178. package/dist/types/utilities/address.d.ts +21 -0
  179. package/dist/types/utilities/address.d.ts.map +1 -0
  180. package/dist/types/utilities/feature-flags/types.d.ts +1 -1
  181. package/dist/types/utilities/feature-flags/types.d.ts.map +1 -1
  182. package/dist/types/utilities/index.d.ts +1 -0
  183. package/dist/types/utilities/index.d.ts.map +1 -1
  184. package/dist/types/utilities/money.d.ts +6 -0
  185. package/dist/types/utilities/money.d.ts.map +1 -1
  186. package/dist/types/utilities/rate-warning-messages.d.ts +15 -0
  187. package/dist/types/utilities/rate-warning-messages.d.ts.map +1 -0
  188. package/dist/types/workflows/account-settings/account-settings.d.ts +11 -1
  189. package/dist/types/workflows/account-settings/account-settings.d.ts.map +1 -1
  190. package/dist/types/workflows/carrier-services/carrier-services.d.ts +11 -1
  191. package/dist/types/workflows/carrier-services/carrier-services.d.ts.map +1 -1
  192. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts +11 -1
  193. package/dist/types/workflows/connect-external-carrier/connect-external-carrier.d.ts.map +1 -1
  194. package/dist/types/workflows/label-workflow/label-workflow.d.ts +11 -1
  195. package/dist/types/workflows/label-workflow/label-workflow.d.ts.map +1 -1
  196. package/dist/types/workflows/onboarding/components/confirmation-and-submission-step/use-confirmation-and-submission-step.d.ts.map +1 -1
  197. package/dist/types/workflows/onboarding/components/onboarding-wizard/onboarding-wizard.d.ts.map +1 -1
  198. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts +2 -1
  199. package/dist/types/workflows/onboarding/components/terms-agreement-form/terms-agreement-form.d.ts.map +1 -1
  200. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts +3 -1
  201. package/dist/types/workflows/onboarding/components/terms-agreement-step/terms-agreement-step.d.ts.map +1 -1
  202. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts +1 -0
  203. package/dist/types/workflows/onboarding/components/terms-agreement-step/use-terms-agreement-step.d.ts.map +1 -1
  204. package/dist/types/workflows/onboarding/onboarding.d.ts +11 -1
  205. package/dist/types/workflows/onboarding/onboarding.d.ts.map +1 -1
  206. package/package.json +3 -3
package/README.md CHANGED
@@ -1,15 +1,196 @@
1
1
  <!-- README for NPM; the one for GitHub is in .github directory. -->
2
2
 
3
- ## Usage
3
+ ## Creating a New Element
4
4
 
5
- Visit [our documentation page](https://www.shipengine.com/docs/elements/elements-guide/) to learn how to get started with ShipEngine Elements.
5
+ ShipEngine Elements is a collection of React components that provide shipping functionality through a standardized interface.
6
+ This guide provides the essential steps for creating new elements in the ShipEngine Elements library.
6
7
 
7
- ## Installation
8
+ ## Element Architecture
8
9
 
9
- ```bash
10
- npm install @shipengine/elements
10
+ Each element is composed of:
11
+
12
+ - **Component**: Your main React component logic
13
+ - **createElement Wrapper**: Provides error boundaries, i18n, and styling
14
+ - **Element Provider**: Manages global state and configuration
15
+
16
+ ## File Structure
17
+
18
+ ```
19
+ libs/elements/src/elements/new-element/
20
+ ├── index.ts # Export file
21
+ ├── new-element.tsx # Main element file
22
+ ├── __stories__/ # Storybook stories
23
+ │ └── new-element.stories.tsx
24
+ └── __tests__/ # Jest tests
25
+ └── new-element.test.tsx
11
26
  ```
12
27
 
28
+ ## Step-by-Step Guide
29
+
30
+ ### 1. Create the Directory Structure
31
+
13
32
  ```bash
14
- yarn add @shipengine/elements
33
+ mkdir -p libs/elements/src/elements/new-element/{__stories__,__tests__}
34
+ ```
35
+
36
+ ### 2. Create the Main Element File
37
+
38
+ **`libs/elements/src/elements/new-element/new-element.tsx`**
39
+
40
+ ```tsx
41
+ import { ErrorFallback } from "@components/error-fallback";
42
+ import { Button, Typography } from "@shipengine/giger";
43
+ import { useTranslation } from "react-i18next";
44
+
45
+ import { createElement } from "../../create-element";
46
+ import { en } from "../../locales";
47
+
48
+ /**
49
+ * Props for the NewElement component
50
+ */
51
+ export type NewElementProps = {
52
+ /**
53
+ * Optional title to display
54
+ */
55
+ title?: string;
56
+
57
+ /**
58
+ * Callback function when action is performed
59
+ */
60
+ onClick?: (value: any) => void;
61
+ };
62
+
63
+ /**
64
+ * # NewElement Component
65
+ *
66
+ * Brief description of what this element does and its purpose.
67
+ */
68
+ export const Component = ({ title = "New Element Title", onClick }: NewElementProps) => {
69
+ const { t } = useTranslation();
70
+
71
+ const handleOnClick = () => {
72
+ const value = { name: "ShipEngine Elements" };
73
+ onClick?.(value);
74
+ };
75
+
76
+ return (
77
+ <div>
78
+ <Typography variant="h2">{title}</Typography>
79
+
80
+ <Typography variant="body1">{t("description")}</Typography>
81
+
82
+ <Button onClick={handleOnClick}>{t("actionButton")}</Button>
83
+ </div>
84
+ );
85
+ };
86
+
87
+ /**
88
+ * # NewElement Element
89
+ *
90
+ * The registered element that can be used directly in applications.
91
+ */
92
+ export const Element = createElement(Component, ErrorFallback, {
93
+ css: {
94
+ height: "100%",
95
+ maxWidth: "800px",
96
+ minWidth: "440px",
97
+ width: "100%",
98
+ },
99
+ resources: { en },
100
+ });
101
+
102
+ export type ElementProps = React.ComponentProps<typeof Element>;
103
+ ```
104
+
105
+ ### 3. Create the Index File
106
+
107
+ **`libs/elements/src/elements/new-element/index.ts`**
108
+
109
+ ```ts
110
+ export * as NewElement from "./new-element";
111
+ export type { NewElementProps } from "./new-element";
112
+ ```
113
+
114
+ ### 4. Add Localization Resources
115
+
116
+ **`libs/elements/src/locales/en/new-element.json`**
117
+
118
+ ```json
119
+ {
120
+ "description": "This is a new Element!",
121
+ "actionButton": "Continue"
122
+ }
123
+ ```
124
+
125
+ ### 5. Create Storybook Stories
126
+
127
+ **`libs/elements/src/elements/new-element/__stories__/new-element.stories.tsx`**
128
+
129
+ ```tsx
130
+ import type { Meta, StoryObj } from "@storybook/react";
131
+
132
+ import { NewElement } from "../new-element";
133
+
134
+ const meta: Meta<typeof NewElement.Element> = {
135
+ title: "Elements/NewElement",
136
+ component: NewElement.Element,
137
+ parameters: {
138
+ layout: "centered",
139
+ },
140
+ tags: ["autodocs"],
141
+ };
142
+
143
+ export default meta;
144
+ type Story = StoryObj<typeof meta>;
145
+
146
+ export const Default: Story = {
147
+ args: {
148
+ title: "Default Example",
149
+ },
150
+ };
151
+
152
+ export const CustomTitle: Story = {
153
+ args: {
154
+ title: "Custom Element Title",
155
+ },
156
+ };
157
+ ```
158
+
159
+ ### 7. Update Package Exports
160
+
161
+ Add your new element to **`libs/elements/package.json`** exports:
162
+
163
+ ```json
164
+ {
165
+ "exports": {
166
+ "./new-element": {
167
+ "source": "./src/elements/new-element/index.ts",
168
+ "import": {
169
+ "types": "./dist/types/elements/new-element/index.d.ts",
170
+ "default": "./dist/esm/elements/new-element/index.js"
171
+ },
172
+ "require": {
173
+ "types": "./dist/types/elements/new-element/index.d.ts",
174
+ "default": "./dist/cjs/elements/new-element/index.cjs"
175
+ }
176
+ }
177
+ }
178
+ }
15
179
  ```
180
+
181
+ ### 8. Update Main Index File
182
+
183
+ Add your element to **`libs/elements/src/index.ts`**:
184
+
185
+ ```ts
186
+ export * from "./elements/new-element";
187
+ ```
188
+
189
+ ## Best Practices
190
+
191
+ - Use TypeScript with proper type definitions
192
+ - Include JSDoc comments where appropriate
193
+ - Write unit tests for functionality
194
+ - Use i18 translation strings for all user-facing text
195
+ - Follow existing code patterns for consistency
196
+ - Test with Storybook during development
@@ -4,41 +4,58 @@ var _tslib = require('../../../_virtual/_tslib.cjs');
4
4
  var jsxRuntime = require('@emotion/react/jsx-runtime');
5
5
  var giger = require('@shipengine/giger');
6
6
  var money = require('../../../utilities/money.cjs');
7
+ var React = require('react');
7
8
  var createFieldController = require('../create-field-controller.cjs');
8
9
  var field_styles = require('../field.styles.cjs');
9
10
 
10
11
  const CreditCardInputController = createFieldController.createFieldController();
11
12
  const transform = {
12
- in: v => v ? money.formatCreditCardNumber(v) : "",
13
+ in: (v, isFocused) => {
14
+ if (!v) return "";
15
+ return isFocused ? money.formatCreditCardNumber(v) : money.maskCreditCardNumber(v);
16
+ },
13
17
  out: event => event.target.value === "" ? null : event.target.value.replace(/\s/g, "")
14
18
  };
15
- const CreditCardInput = fieldProps => jsxRuntime.jsx(CreditCardInputController, Object.assign({}, fieldProps, {
16
- children: _a => {
17
- var {
18
- onChange,
19
- value
20
- } = _a,
21
- creditCardInputProps = _tslib.__rest(_a, ["onChange", "value"]);
22
- return jsxRuntime.jsx("div", {
23
- css: field_styles.styles.overrideStyles,
24
- children: jsxRuntime.jsx(giger.Input, Object.assign({}, creditCardInputProps, {
25
- onChange: e => {
26
- // Amex allows 15 digits, all others allow 16
27
- if (e.target.value.replace(/\s/g, "").length > 16) {
28
- e.preventDefault();
29
- } else {
30
- onChange(transform.out(e));
31
- }
32
- },
33
- onKeyDown: e => {
34
- // Prevent non-numeric characters
35
- if (!/^([0-9]|Backspace|Delete|Enter|Tab)$/i.test(e.key)) e.preventDefault();
36
- },
37
- type: "text",
38
- value: transform.in(value)
39
- }))
40
- });
41
- }
42
- }));
19
+ const CreditCardInput = fieldProps => {
20
+ const [isFocused, setIsFocused] = React.useState(false);
21
+ return jsxRuntime.jsx(CreditCardInputController, Object.assign({}, fieldProps, {
22
+ children: _a => {
23
+ var {
24
+ onChange,
25
+ value
26
+ } = _a,
27
+ creditCardInputProps = _tslib.__rest(_a, ["onChange", "value"]);
28
+ return jsxRuntime.jsx("div", {
29
+ css: field_styles.styles.overrideStyles,
30
+ children: jsxRuntime.jsx(giger.Input, Object.assign({}, creditCardInputProps, {
31
+ onBlur: () => {
32
+ var _a;
33
+ setIsFocused(false);
34
+ (_a = creditCardInputProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(creditCardInputProps);
35
+ },
36
+ onChange: e => {
37
+ // Amex allows 15 digits, all others allow 16
38
+ if (e.target.value.replace(/\s/g, "").length > 16) {
39
+ e.preventDefault();
40
+ } else {
41
+ onChange(transform.out(e));
42
+ }
43
+ },
44
+ onFocus: e => {
45
+ var _a;
46
+ setIsFocused(true);
47
+ (_a = creditCardInputProps.onFocus) === null || _a === void 0 ? void 0 : _a.call(creditCardInputProps, e);
48
+ },
49
+ onKeyDown: e => {
50
+ // Prevent non-numeric characters
51
+ if (!/^([0-9]|Backspace|Delete|Enter|Tab)$/i.test(e.key)) e.preventDefault();
52
+ },
53
+ type: "text",
54
+ value: transform.in(value, isFocused)
55
+ }))
56
+ });
57
+ }
58
+ }));
59
+ };
43
60
 
44
61
  exports.CreditCardInput = CreditCardInput;
@@ -84,6 +84,7 @@ const RateCard = ({
84
84
  messages,
85
85
  onClick,
86
86
  onClickAcknowledgement,
87
+ onPaperlessAcknowledgementChange,
87
88
  onSelectServicePoint,
88
89
  otherAmount,
89
90
  rateId,
@@ -101,7 +102,9 @@ const RateCard = ({
101
102
  selectedRateCost,
102
103
  servicePoints: servicePoints$1,
103
104
  mapViewEnabled,
104
- rateDetails
105
+ rateDetails,
106
+ paperlessDisplaySchemes,
107
+ paperlessLabelChecked = false
105
108
  }) => {
106
109
  /* TODO: ENGINE-7366: TODO Remove showVatSettings flag once this is fully in production */
107
110
  const showRateDetails = showVatFeatures && rateDetails && rateDetails.length > 0;
@@ -145,7 +148,8 @@ const RateCard = ({
145
148
  return undefined;
146
149
  }
147
150
  }, [confirmationAmount, insuranceAmount, isPreferredRate, otherAmount, selectedRateCost, shippingAmount, taxAmount]);
148
- const hasFooterData = !!(rateMessages === null || rateMessages === void 0 ? void 0 : rateMessages.length) || requiresAcknowledgement;
151
+ const requiresPaperlessAcknowledgement = paperlessDisplaySchemes === null || paperlessDisplaySchemes === void 0 ? void 0 : paperlessDisplaySchemes.includes("qr_code");
152
+ const hasFooterData = !!(rateMessages === null || rateMessages === void 0 ? void 0 : rateMessages.length) || requiresAcknowledgement || requiresPaperlessAcknowledgement;
149
153
  const costBreakdownCommonProps = {
150
154
  confirmationAmount,
151
155
  insuranceAmount,
@@ -186,6 +190,17 @@ const RateCard = ({
186
190
  serviceInfo: {
187
191
  line1: carrierNickname,
188
192
  line2: getDeliveryDaysLabel(deliveryDays),
193
+ line3: paperlessDisplaySchemes && paperlessDisplaySchemes.length > 0 ? jsxRuntime.jsxs("div", {
194
+ "aria-label": t("purchase-label:paperlessAvailable"),
195
+ css: rateCard_styles.styles.paperlessText,
196
+ children: [jsxRuntime.jsx(giger.Icon, {
197
+ name: gigerTheme.IconNames.SCAN_QR,
198
+ size: giger.IconSize.SIZE_MEDIUM
199
+ }), jsxRuntime.jsx(giger.Typography, {
200
+ variant: "small",
201
+ children: t("purchase-label:paperlessAvailable")
202
+ })]
203
+ }) : undefined,
189
204
  type: serviceType
190
205
  }
191
206
  }), servicePoints$1 && jsxRuntime.jsxs(jsxRuntime.Fragment, {
@@ -200,16 +215,25 @@ const RateCard = ({
200
215
  rateSelected: selected,
201
216
  servicePoints: servicePoints$1
202
217
  })]
203
- }), selected && hasFooterData && jsxRuntime.jsx(serviceCard.ServiceCardFooter, {
218
+ }), selected && hasFooterData && jsxRuntime.jsxs(serviceCard.ServiceCardFooter, {
204
219
  messages: rateMessages,
205
- children: requiresAcknowledgement && onClickAcknowledgement && jsxRuntime.jsx(giger.Checkbox, {
220
+ children: [requiresAcknowledgement && onClickAcknowledgement && jsxRuntime.jsx(giger.Checkbox, {
206
221
  "aria-required": true,
207
222
  checked: isAcknowledged,
208
223
  css: rateCard_styles.styles.acknowledgment,
209
224
  "data-testid": "rate-acknowledgement",
210
225
  label: rateAcknowledgementMessage ? getPreferredRateAcknowledgementLabel(rateAcknowledgementMessage) : getAcknowledgementLabel(serviceCode, packageType),
211
226
  onChange: e => onClickAcknowledgement(e.target.checked)
212
- })
227
+ }), requiresPaperlessAcknowledgement && jsxRuntime.jsx(giger.Checkbox, {
228
+ "aria-required": true,
229
+ checked: paperlessLabelChecked,
230
+ css: rateCard_styles.styles.acknowledgment,
231
+ "data-testid": "paperless-acknowledgement",
232
+ label: t("purchase-label:usePaperlessLabel"),
233
+ onChange: e => {
234
+ onPaperlessAcknowledgementChange === null || onPaperlessAcknowledgementChange === void 0 ? void 0 : onPaperlessAcknowledgementChange(e.target.checked, "qr_code");
235
+ }
236
+ })]
213
237
  })]
214
238
  });
215
239
  };
@@ -5,10 +5,8 @@ var styles$1 = require('../../../../utilities/styles.cjs');
5
5
  const getRateCardFirstLineSize = theme => `${styles$1.scopeTheme(theme).spacing(3.25)}px`;
6
6
  const styles = styles$1.createStyles({
7
7
  acknowledgment: theme => ({
8
- alignItems: "center",
9
8
  color: styles$1.scopeTheme(theme).palette.gray.main,
10
- display: "flex",
11
- paddingTop: styles$1.scopeTheme(theme).spacing(1.5)
9
+ display: "flex"
12
10
  }),
13
11
  divider: theme => ({
14
12
  borderColor: styles$1.scopeTheme(theme).palette.primary.main,
@@ -29,6 +27,13 @@ const styles = styles$1.createStyles({
29
27
  position: "absolute",
30
28
  right: 0,
31
29
  top: 0
30
+ }),
31
+ paperlessText: theme => ({
32
+ display: "flex",
33
+ gap: styles$1.scopeTheme(theme).spacing(0.25),
34
+ paddingTop: styles$1.scopeTheme(theme).spacing(0.5),
35
+ color: styles$1.scopeTheme(theme).palette.gray[600],
36
+ alignItems: "center"
32
37
  })
33
38
  });
34
39
 
@@ -22,12 +22,13 @@ const RateSelect = _a => {
22
22
  nicknameFeature,
23
23
  preferredServiceCodes,
24
24
  onClick,
25
+ onPaperlessAcknowledgementChange,
25
26
  onSelectServicePoint,
26
27
  isLoading,
27
28
  mapViewEnabled,
28
29
  showVatFeatures
29
30
  } = _a,
30
- fieldProps = _tslib.__rest(_a, ["nicknameFeature", "preferredServiceCodes", "onClick", "onSelectServicePoint", "isLoading", "mapViewEnabled", "showVatFeatures"]);
31
+ fieldProps = _tslib.__rest(_a, ["nicknameFeature", "preferredServiceCodes", "onClick", "onPaperlessAcknowledgementChange", "onSelectServicePoint", "isLoading", "mapViewEnabled", "showVatFeatures"]);
31
32
  // The calculated cost of the selected rate
32
33
  const [selectedRateCost, setSelectedRateCost] = React.useState();
33
34
  return jsxRuntime.jsx(RateSelectController, Object.assign({}, fieldProps, {
@@ -50,17 +51,37 @@ const RateSelect = _a => {
50
51
  isPreferredRate: preferredServiceCodes && preferredServiceCodes.includes(option.serviceCode),
51
52
  key: option.rateId,
52
53
  onClick: rateId => {
54
+ var _a;
53
55
  onClick === null || onClick === void 0 ? void 0 : onClick(rateId);
54
- field.onChange({
55
- isAcknowledged: !option.requiresAcknowledgement,
56
- rateId
57
- });
56
+ // if the rate supports "label_and_paperless" display scheme, use it by default
57
+ if ((_a = option.paperlessDisplaySchemes) === null || _a === void 0 ? void 0 : _a.includes("label_and_paperless")) {
58
+ field.onChange({
59
+ usePaperlessLabel: true,
60
+ labelDisplayScheme: "label_and_paperless",
61
+ isAcknowledged: !option.requiresAcknowledgement,
62
+ rateId
63
+ });
64
+ } else {
65
+ field.onChange({
66
+ isAcknowledged: !option.requiresAcknowledgement,
67
+ rateId
68
+ });
69
+ }
58
70
  setSelectedRateCost(rates.getTotalRateAmount(option));
59
71
  },
60
72
  onClickAcknowledgement: isAcknowledged => field.onChange(Object.assign(Object.assign({}, field.value), {
61
73
  isAcknowledged
62
74
  })),
75
+ onPaperlessAcknowledgementChange: (usePaperless, labelDisplayScheme) => {
76
+ field.onChange(Object.assign(Object.assign({}, field.value), {
77
+ usePaperlessLabel: usePaperless,
78
+ labelDisplayScheme
79
+ }));
80
+ onPaperlessAcknowledgementChange === null || onPaperlessAcknowledgementChange === void 0 ? void 0 : onPaperlessAcknowledgementChange(usePaperless, labelDisplayScheme);
81
+ },
63
82
  onSelectServicePoint: onSelectServicePoint,
83
+ paperlessDisplaySchemes: option.paperlessDisplaySchemes,
84
+ paperlessLabelChecked: field.value.usePaperlessLabel,
64
85
  rateDetails: option.rateDetails,
65
86
  selected: option.rateId === field.value.rateId,
66
87
  selectedRateCost: selectedRateCost,
@@ -6,12 +6,12 @@ var address = require('../../../constants/shipengine/address.cjs');
6
6
  var zod = require('../../../extensions/zod.cjs');
7
7
 
8
8
  zod.extendZod();
9
- const refineName = n => n.match(/^[a-zA-Z']/);
10
9
  const refineNameStrict = n => n.match(address.addressNameRegex);
11
10
  const shipToAddressSchema = addressSchema.addressSchema.refine(schema => {
12
- return refineName(schema.name);
11
+ // KEEP THIS STRICT, USPS REQUIRES 2 CHARACTERS FOR FIRST AND LAST NAME
12
+ return refineNameStrict(schema.name);
13
13
  }, {
14
- message: "schemaErrors.invalidAddressName",
14
+ message: "schemaErrors.invalidAddressNameStrict",
15
15
  path: ["name"]
16
16
  }).refine(schema => !schema.phone || min.isValidPhoneNumber(schema.phone, schema.countryCode), {
17
17
  message: "schemaErrors.notAValidPhoneNumber",
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var jsxRuntime = require('@emotion/react/jsx-runtime');
4
+ var useToggle = require('../../../hooks/use-toggle.cjs');
4
5
  var giger = require('@shipengine/giger');
5
6
  var formLogger = require('../../../utilities/form-logger.cjs');
6
7
  var validation = require('../../../utilities/validation.cjs');
@@ -10,19 +11,38 @@ var billingFields = require('../wallet-form/billing-fields.cjs');
10
11
  var editBillingForm_styles = require('./edit-billing-form.styles.cjs');
11
12
  var walletSchema = require('../wallet-form/wallet-schema.cjs');
12
13
  var addressFields = require('../address-form/address-fields.cjs');
14
+ var addressDisplay = require('../../address-display/address-display.cjs');
15
+ var linkAction = require('../../link-action/link-action.cjs');
13
16
  var buttonGroup = require('../../button-group/button-group.cjs');
14
17
  var submitButton = require('../../field/submit-button/submit-button.cjs');
15
18
 
16
19
  const EditBillingForm = ({
17
20
  onCancel,
18
21
  onSubmit,
19
- isLoading
22
+ isLoading,
23
+ billingInfo
20
24
  }) => {
25
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
21
26
  const {
22
27
  t
23
28
  } = reactI18next.useTranslation();
29
+ const [editBillingInfo, toggleEditBillingInfo] = useToggle.useToggle(false);
24
30
  const form = reactHookForm.useForm({
25
- resolver: validation.validationResolver(walletSchema.getWalletSchema("emailRequired", "blackboxOptional"), ["creditCard"])
31
+ resolver: validation.validationResolver(walletSchema.getWalletSchema("emailRequired", "blackboxOptional"), ["creditCard"]),
32
+ defaultValues: {
33
+ address: {
34
+ name: (_a = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.fullName) !== null && _a !== void 0 ? _a : "",
35
+ companyName: (_b = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.company) !== null && _b !== void 0 ? _b : "",
36
+ addressLine1: (_c = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.addressLine1) !== null && _c !== void 0 ? _c : "",
37
+ addressLine2: (_d = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.addressLine2) !== null && _d !== void 0 ? _d : "",
38
+ cityLocality: (_e = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.cityLocality) !== null && _e !== void 0 ? _e : "",
39
+ stateProvince: (_f = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.stateProvince) !== null && _f !== void 0 ? _f : "",
40
+ postalCode: (_g = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.postalCode) !== null && _g !== void 0 ? _g : "",
41
+ countryCode: billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.countryCode,
42
+ email: (_h = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.email) !== null && _h !== void 0 ? _h : "",
43
+ phone: (_j = billingInfo === null || billingInfo === void 0 ? void 0 : billingInfo.phone) !== null && _j !== void 0 ? _j : ""
44
+ }
45
+ }
26
46
  });
27
47
  const handleSubmit = form.handleSubmit(values => {
28
48
  const {
@@ -59,14 +79,47 @@ const EditBillingForm = ({
59
79
  variant: "subtitle1",
60
80
  children: t("register-wallet:settings.billing.subtitleBilling")
61
81
  })
62
- }), jsxRuntime.jsx(giger.GridChild, {
82
+ }), billingInfo && !editBillingInfo && jsxRuntime.jsxs(jsxRuntime.Fragment, {
83
+ children: [jsxRuntime.jsx(giger.GridChild, {
84
+ colSpan: 9,
85
+ children: jsxRuntime.jsx(addressDisplay.AddressDisplay, {
86
+ address: Object.assign(Object.assign({}, billingInfo), {
87
+ name: billingInfo.fullName,
88
+ companyName: billingInfo.company
89
+ })
90
+ })
91
+ }), jsxRuntime.jsx(giger.GridChild, {
92
+ colSpan: 3,
93
+ css: {
94
+ textAlign: "right"
95
+ },
96
+ children: jsxRuntime.jsx(linkAction.LinkAction, {
97
+ css: {
98
+ alignSelf: "end"
99
+ },
100
+ onClick: () => {
101
+ toggleEditBillingInfo(true);
102
+ form.reset({
103
+ address: Object.assign(Object.assign({}, billingInfo), {
104
+ name: billingInfo.fullName,
105
+ companyName: billingInfo.company,
106
+ countryCode: billingInfo.countryCode
107
+ })
108
+ }, {
109
+ keepDirtyValues: true
110
+ });
111
+ },
112
+ title: t("actions.edit")
113
+ })
114
+ })]
115
+ }), !billingInfo || editBillingInfo ? jsxRuntime.jsx(giger.GridChild, {
63
116
  colSpan: 12,
64
117
  children: jsxRuntime.jsx(addressFields.AddressFields, {
65
118
  form: form,
66
119
  formatFieldName: fieldName => `address.${fieldName}`,
67
120
  optionalFields: ["addressLine2"]
68
121
  })
69
- }), jsxRuntime.jsx(giger.GridChild, {
122
+ }) : null, jsxRuntime.jsx(giger.GridChild, {
70
123
  colSpan: 12,
71
124
  children: jsxRuntime.jsxs(buttonGroup.ButtonGroup, {
72
125
  justify: "end",
@@ -66,7 +66,7 @@ const ServiceCardHeader = ({
66
66
  children: line1
67
67
  }), line2 && jsxRuntime.jsx(giger.Typography, {
68
68
  children: line2
69
- }), line3 && jsxRuntime.jsx(giger.Typography, {
69
+ }), line3 && jsxRuntime.jsx("div", {
70
70
  children: line3
71
71
  })]
72
72
  }), jsxRuntime.jsx("div", {
@@ -81,15 +81,15 @@ const ServiceCardHeader = ({
81
81
  };
82
82
  const ServiceCardFooter = ({
83
83
  children,
84
- messages
84
+ messages = []
85
85
  }) => {
86
86
  return jsxRuntime.jsxs("div", {
87
87
  "data-testid": "service-card-footer",
88
88
  children: [jsxRuntime.jsx(giger.Divider, {
89
89
  css: serviceCard_styles.styles.divider
90
90
  }), jsxRuntime.jsxs("section", {
91
- css: serviceCard_styles.styles.footer,
92
- children: [messages && jsxRuntime.jsx("ul", {
91
+ css: serviceCard_styles.styles.footerStyles,
92
+ children: [messages.length > 0 && jsxRuntime.jsx("ul", {
93
93
  css: [serviceCard_styles.styles.footerList, messages.length > 1 && serviceCard_styles.styles.footerListWithMultipleMessages],
94
94
  children: messages.map((m, index) => jsxRuntime.jsxs("li", {
95
95
  css: serviceCard_styles.styles.footerListItem,
@@ -16,8 +16,11 @@ const styles = styles$1.createStyles({
16
16
  opacity: 0.3,
17
17
  width: `calc(100% - ${styles$1.scopeTheme(theme).spacing(4)}px)`
18
18
  }),
19
- footer: theme => ({
20
- padding: styles$1.scopeTheme(theme).spacing(2)
19
+ footerStyles: theme => ({
20
+ padding: styles$1.scopeTheme(theme).spacing(2),
21
+ display: "flex",
22
+ flexDirection: "column",
23
+ gap: styles$1.scopeTheme(theme).spacing(2)
21
24
  }),
22
25
  footerList: {
23
26
  listStyle: "none"
@@ -2,18 +2,10 @@
2
2
 
3
3
  var jsxRuntime = require('@emotion/react/jsx-runtime');
4
4
  var giger = require('@shipengine/giger');
5
- var gigerTheme = require('@shipengine/giger-theme');
6
- var React = require('react');
7
5
  var reactI18next = require('react-i18next');
8
6
  var operatingHours = require('./operating-hours.cjs');
9
7
  var servicePointDisplay_styles = require('./service-point-display.styles.cjs');
10
8
 
11
- /* https://auctane.atlassian.net/browse/ENGINE-7329
12
- * For iteration one we would hardcode services for which it will be available (in the future this data will be in the registry. We will change hardcoding then)
13
- * carriersWithPaperless and servicesWithPaperless are hardcoded for iteration one
14
- */
15
- const carriersWithPaperless = "hermes";
16
- const servicesWithPaperless = ["hermes_domestic_parcelshop_dropoff", "hermes_domestic_parcelshop_dropoff_next_day", "hermes_postable", "hermes_postable_next_day"];
17
9
  const formatDistance = meters => {
18
10
  return meters < 1000 ? "< 1 km" : `${parseFloat((meters / 1000).toFixed(1))} km`;
19
11
  };
@@ -27,36 +19,9 @@ const ServicePointDisplay = ({
27
19
  const {
28
20
  t
29
21
  } = reactI18next.useTranslation("purchase-label");
30
- const [isFilteredServicesWithPaperless, setIsFilteredServicesWithPaperless] = React.useState(false);
31
- /* https://auctane.atlassian.net/browse/ENGINE-7329
32
- * For iteration one we would hardcode services for which it will be available (in the future this data will be in the registry. We will change hardcoding then)
33
- */
34
- React.useEffect(() => {
35
- if (carriersWithPaperless === servicePoint.carrierCode) {
36
- const filteredServicesWithPaperless = servicePoint.serviceCodes.map(serviceCode => {
37
- return servicesWithPaperless.filter(service => service === serviceCode);
38
- }).length > 0;
39
- setIsFilteredServicesWithPaperless(filteredServicesWithPaperless);
40
- }
41
- }, [servicePoint.carrierCode, servicePoint.serviceCodes]);
42
22
  return jsxRuntime.jsxs("div", {
43
23
  css: servicePointDisplay_styles.styles.container,
44
- children: [isFilteredServicesWithPaperless && jsxRuntime.jsxs("section", {
45
- css: servicePointDisplay_styles.styles.paperlessWrapper,
46
- children: [jsxRuntime.jsx(giger.Icon, {
47
- css: servicePointDisplay_styles.styles.paperlessIcon,
48
- name: gigerTheme.IconNames.PRINTER,
49
- size: giger.IconSize.SIZE_MEDIUM
50
- }), jsxRuntime.jsx(giger.Icon, {
51
- css: servicePointDisplay_styles.styles.paperlessIcon,
52
- name: gigerTheme.IconNames.SCAN_QR,
53
- size: giger.IconSize.SIZE_MEDIUM
54
- }), jsxRuntime.jsx(giger.Typography, {
55
- css: servicePointDisplay_styles.styles.paperlessText,
56
- variant: "small",
57
- children: t("servicePoints.paperless")
58
- })]
59
- }), jsxRuntime.jsx("div", {
24
+ children: [jsxRuntime.jsx("div", {
60
25
  css: servicePointDisplay_styles.styles.getSelectedStyles(),
61
26
  children: jsxRuntime.jsx(giger.Typography, {
62
27
  bold: true,