@nymbalhq/web-components 1.1.0 → 1.3.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 (187) hide show
  1. package/astro/NymbalElement.astro +19 -0
  2. package/dist/base-element-CPMgAdyQ.d.ts +91 -0
  3. package/dist/chunk-2TPQNQYO.js +155 -0
  4. package/dist/chunk-2TPQNQYO.js.map +1 -0
  5. package/dist/chunk-2XXBQPDB.js +113 -0
  6. package/dist/chunk-2XXBQPDB.js.map +1 -0
  7. package/dist/chunk-42SSME5H.js +84 -0
  8. package/dist/chunk-42SSME5H.js.map +1 -0
  9. package/dist/chunk-4COVK727.js +204 -0
  10. package/dist/chunk-4COVK727.js.map +1 -0
  11. package/dist/chunk-5G3C53A2.js +666 -0
  12. package/dist/chunk-5G3C53A2.js.map +1 -0
  13. package/dist/chunk-5VWZ2U5K.js +149 -0
  14. package/dist/chunk-5VWZ2U5K.js.map +1 -0
  15. package/dist/chunk-7JAAOVCE.js +114 -0
  16. package/dist/chunk-7JAAOVCE.js.map +1 -0
  17. package/dist/chunk-B73QVSA5.js +206 -0
  18. package/dist/chunk-B73QVSA5.js.map +1 -0
  19. package/dist/chunk-DR5QB5VN.js +17 -0
  20. package/dist/chunk-DR5QB5VN.js.map +1 -0
  21. package/dist/chunk-DXWMNB5F.js +70 -0
  22. package/dist/chunk-DXWMNB5F.js.map +1 -0
  23. package/dist/chunk-EBMA7JGV.js +130 -0
  24. package/dist/chunk-EBMA7JGV.js.map +1 -0
  25. package/dist/chunk-EYDMJNNK.js +176 -0
  26. package/dist/chunk-EYDMJNNK.js.map +1 -0
  27. package/dist/chunk-FIF6GQ6U.js +141 -0
  28. package/dist/chunk-FIF6GQ6U.js.map +1 -0
  29. package/dist/chunk-GHXTJ2CF.js +109 -0
  30. package/dist/chunk-GHXTJ2CF.js.map +1 -0
  31. package/dist/chunk-H3ZBYNHV.js +153 -0
  32. package/dist/chunk-H3ZBYNHV.js.map +1 -0
  33. package/dist/chunk-HPBC3OG7.js +174 -0
  34. package/dist/chunk-HPBC3OG7.js.map +1 -0
  35. package/dist/chunk-IYT7VXFS.js +105 -0
  36. package/dist/chunk-IYT7VXFS.js.map +1 -0
  37. package/dist/chunk-LHYXNQWY.js +105 -0
  38. package/dist/chunk-LHYXNQWY.js.map +1 -0
  39. package/dist/chunk-LO2EW5YP.js +25 -0
  40. package/dist/chunk-LO2EW5YP.js.map +1 -0
  41. package/dist/chunk-LSQPUZK6.js +291 -0
  42. package/dist/chunk-LSQPUZK6.js.map +1 -0
  43. package/dist/chunk-N4Y5DI4X.js +82 -0
  44. package/dist/chunk-N4Y5DI4X.js.map +1 -0
  45. package/dist/chunk-NE6UHTOT.js +148 -0
  46. package/dist/chunk-NE6UHTOT.js.map +1 -0
  47. package/dist/chunk-NW47OJVN.js +138 -0
  48. package/dist/chunk-NW47OJVN.js.map +1 -0
  49. package/dist/chunk-O2YKCDR2.js +77 -0
  50. package/dist/chunk-O2YKCDR2.js.map +1 -0
  51. package/dist/chunk-PN6QKYE4.js +71 -0
  52. package/dist/chunk-PN6QKYE4.js.map +1 -0
  53. package/dist/chunk-RAOGZH3Z.js +188 -0
  54. package/dist/chunk-RAOGZH3Z.js.map +1 -0
  55. package/dist/chunk-RVSKX2RX.js +11 -0
  56. package/dist/chunk-RVSKX2RX.js.map +1 -0
  57. package/dist/chunk-RZVFA3N5.js +154 -0
  58. package/dist/chunk-RZVFA3N5.js.map +1 -0
  59. package/dist/chunk-SM7TASEW.js +135 -0
  60. package/dist/chunk-SM7TASEW.js.map +1 -0
  61. package/dist/chunk-U2PU4CWB.js +124 -0
  62. package/dist/chunk-U2PU4CWB.js.map +1 -0
  63. package/dist/chunk-UCEVCLQ7.js +5 -0
  64. package/dist/chunk-UCEVCLQ7.js.map +1 -0
  65. package/dist/chunk-UYSZOEOA.js +32 -0
  66. package/dist/chunk-UYSZOEOA.js.map +1 -0
  67. package/dist/chunk-V55K2CS5.js +126 -0
  68. package/dist/chunk-V55K2CS5.js.map +1 -0
  69. package/dist/chunk-VTQVGNVC.js +346 -0
  70. package/dist/chunk-VTQVGNVC.js.map +1 -0
  71. package/dist/chunk-W23P7SI4.js +239 -0
  72. package/dist/chunk-W23P7SI4.js.map +1 -0
  73. package/dist/chunk-W7D3STJH.js +279 -0
  74. package/dist/chunk-W7D3STJH.js.map +1 -0
  75. package/dist/chunk-WEEHXWM3.js +172 -0
  76. package/dist/chunk-WEEHXWM3.js.map +1 -0
  77. package/dist/chunk-WTEVTCIL.js +128 -0
  78. package/dist/chunk-WTEVTCIL.js.map +1 -0
  79. package/dist/chunk-XPFGMYBV.js +137 -0
  80. package/dist/chunk-XPFGMYBV.js.map +1 -0
  81. package/dist/elements/nymbal-add-to-cart.d.ts +14 -0
  82. package/dist/elements/nymbal-add-to-cart.js +10 -0
  83. package/dist/elements/nymbal-add-to-cart.js.map +1 -0
  84. package/dist/elements/nymbal-address-book.d.ts +30 -0
  85. package/dist/elements/nymbal-address-book.js +13 -0
  86. package/dist/elements/nymbal-address-book.js.map +1 -0
  87. package/dist/elements/nymbal-address-form.d.ts +29 -0
  88. package/dist/elements/nymbal-address-form.js +12 -0
  89. package/dist/elements/nymbal-address-form.js.map +1 -0
  90. package/dist/elements/nymbal-breadcrumb.d.ts +15 -0
  91. package/dist/elements/nymbal-breadcrumb.js +11 -0
  92. package/dist/elements/nymbal-breadcrumb.js.map +1 -0
  93. package/dist/elements/nymbal-cart-drawer.d.ts +24 -0
  94. package/dist/elements/nymbal-cart-drawer.js +11 -0
  95. package/dist/elements/nymbal-cart-drawer.js.map +1 -0
  96. package/dist/elements/nymbal-cart-page.d.ts +20 -0
  97. package/dist/elements/nymbal-cart-page.js +14 -0
  98. package/dist/elements/nymbal-cart-page.js.map +1 -0
  99. package/dist/elements/nymbal-category-nav.d.ts +15 -0
  100. package/dist/elements/nymbal-category-nav.js +11 -0
  101. package/dist/elements/nymbal-category-nav.js.map +1 -0
  102. package/dist/elements/nymbal-checkout.d.ts +77 -0
  103. package/dist/elements/nymbal-checkout.js +15 -0
  104. package/dist/elements/nymbal-checkout.js.map +1 -0
  105. package/dist/elements/nymbal-image-gallery.d.ts +19 -0
  106. package/dist/elements/nymbal-image-gallery.js +10 -0
  107. package/dist/elements/nymbal-image-gallery.js.map +1 -0
  108. package/dist/elements/nymbal-login-form.d.ts +17 -0
  109. package/dist/elements/nymbal-login-form.js +12 -0
  110. package/dist/elements/nymbal-login-form.js.map +1 -0
  111. package/dist/elements/nymbal-mini-cart.d.ts +17 -0
  112. package/dist/elements/nymbal-mini-cart.js +10 -0
  113. package/dist/elements/nymbal-mini-cart.js.map +1 -0
  114. package/dist/elements/nymbal-order-summary.d.ts +20 -0
  115. package/dist/elements/nymbal-order-summary.js +11 -0
  116. package/dist/elements/nymbal-order-summary.js.map +1 -0
  117. package/dist/elements/nymbal-payment-element.d.ts +4 -0
  118. package/dist/elements/nymbal-payment-element.js +10 -0
  119. package/dist/elements/nymbal-payment-element.js.map +1 -0
  120. package/dist/elements/nymbal-product-card.d.ts +4 -0
  121. package/dist/elements/nymbal-product-card.js +12 -0
  122. package/dist/elements/nymbal-product-card.js.map +1 -0
  123. package/dist/elements/nymbal-product-filter.d.ts +32 -0
  124. package/dist/elements/nymbal-product-filter.js +10 -0
  125. package/dist/elements/nymbal-product-filter.js.map +1 -0
  126. package/dist/elements/nymbal-product-grid.d.ts +24 -0
  127. package/dist/elements/nymbal-product-grid.js +14 -0
  128. package/dist/elements/nymbal-product-grid.js.map +1 -0
  129. package/dist/elements/nymbal-product-price.d.ts +18 -0
  130. package/dist/elements/nymbal-product-price.js +12 -0
  131. package/dist/elements/nymbal-product-price.js.map +1 -0
  132. package/dist/elements/nymbal-profile-form.d.ts +19 -0
  133. package/dist/elements/nymbal-profile-form.js +12 -0
  134. package/dist/elements/nymbal-profile-form.js.map +1 -0
  135. package/dist/elements/nymbal-quantity-selector.d.ts +20 -0
  136. package/dist/elements/nymbal-quantity-selector.js +10 -0
  137. package/dist/elements/nymbal-quantity-selector.js.map +1 -0
  138. package/dist/elements/nymbal-register-form.d.ts +17 -0
  139. package/dist/elements/nymbal-register-form.js +12 -0
  140. package/dist/elements/nymbal-register-form.js.map +1 -0
  141. package/dist/elements/nymbal-review-form.d.ts +17 -0
  142. package/dist/elements/nymbal-review-form.js +12 -0
  143. package/dist/elements/nymbal-review-form.js.map +1 -0
  144. package/dist/elements/nymbal-review-list.d.ts +14 -0
  145. package/dist/elements/nymbal-review-list.js +10 -0
  146. package/dist/elements/nymbal-review-list.js.map +1 -0
  147. package/dist/elements/nymbal-search-bar.d.ts +19 -0
  148. package/dist/elements/nymbal-search-bar.js +10 -0
  149. package/dist/elements/nymbal-search-bar.js.map +1 -0
  150. package/dist/elements/nymbal-search-results.d.ts +29 -0
  151. package/dist/elements/nymbal-search-results.js +14 -0
  152. package/dist/elements/nymbal-search-results.js.map +1 -0
  153. package/dist/elements/nymbal-site-footer.d.ts +15 -0
  154. package/dist/elements/nymbal-site-footer.js +11 -0
  155. package/dist/elements/nymbal-site-footer.js.map +1 -0
  156. package/dist/elements/nymbal-site-header.d.ts +19 -0
  157. package/dist/elements/nymbal-site-header.js +11 -0
  158. package/dist/elements/nymbal-site-header.js.map +1 -0
  159. package/dist/elements/nymbal-sort-dropdown.d.ts +28 -0
  160. package/dist/elements/nymbal-sort-dropdown.js +10 -0
  161. package/dist/elements/nymbal-sort-dropdown.js.map +1 -0
  162. package/dist/elements/nymbal-stock-badge.d.ts +16 -0
  163. package/dist/elements/nymbal-stock-badge.js +11 -0
  164. package/dist/elements/nymbal-stock-badge.js.map +1 -0
  165. package/dist/elements/nymbal-toast.d.ts +18 -0
  166. package/dist/elements/nymbal-toast.js +10 -0
  167. package/dist/elements/nymbal-toast.js.map +1 -0
  168. package/dist/elements/nymbal-variant-selector.d.ts +16 -0
  169. package/dist/elements/nymbal-variant-selector.js +10 -0
  170. package/dist/elements/nymbal-variant-selector.js.map +1 -0
  171. package/dist/form-element-C-qo3gpD.d.ts +25 -0
  172. package/dist/hydrate-support.d.ts +2 -0
  173. package/dist/hydrate-support.js +3 -0
  174. package/dist/hydrate-support.js.map +1 -0
  175. package/dist/index.d.ts +38 -157
  176. package/dist/index.js +127 -1407
  177. package/dist/index.js.map +1 -1
  178. package/dist/nymbal-payment-element-Bt8EF42T.d.ts +51 -0
  179. package/dist/nymbal-product-card-C8HkE_rG.d.ts +47 -0
  180. package/dist/register-components.d.ts +46 -0
  181. package/dist/register-components.js +48 -0
  182. package/dist/register-components.js.map +1 -0
  183. package/dist/selected-variant-Dym0shlJ.d.ts +23 -0
  184. package/dist/ssr/index.d.ts +30 -0
  185. package/dist/ssr/index.js +143 -0
  186. package/dist/ssr/index.js.map +1 -0
  187. package/package.json +33 -6
@@ -0,0 +1,172 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalElement,
4
+ baseStyles,
5
+ parsedJson,
6
+ propertiesOf
7
+ } from "./chunk-EYDMJNNK.js";
8
+
9
+ // src/components/product-filter.ts
10
+ import { css, html, nothing } from "lit";
11
+ var SCHEMA = {
12
+ tag: "nymbal-product-filter",
13
+ reactName: "ProductFilter",
14
+ attributes: [
15
+ { name: "facets", prop: "facets", type: "json" },
16
+ { name: "source", prop: "source", type: "string" }
17
+ ],
18
+ events: [
19
+ {
20
+ name: "nymbal:filter:changed",
21
+ prop: "onFilterChange",
22
+ detail: "{ name: string; value: string }"
23
+ }
24
+ ],
25
+ parts: ["group", "label", "option", "checkbox", "option-label", "count"],
26
+ slots: [],
27
+ children: false
28
+ };
29
+ var NymbalProductFilter = class extends NymbalElement {
30
+ static schema = SCHEMA;
31
+ static properties = propertiesOf(SCHEMA);
32
+ static styles = [
33
+ baseStyles,
34
+ css`
35
+ :host {
36
+ display: block;
37
+ font-family: var(--nymbal-font-family, system-ui, -apple-system, sans-serif);
38
+ }
39
+ [part~='group'] {
40
+ margin-bottom: var(--nymbal-spacing-lg, 1.5rem);
41
+ }
42
+ [part~='label'] {
43
+ display: block;
44
+ font-size: var(--nymbal-font-size-sm, 0.875rem);
45
+ font-weight: var(--nymbal-font-weight-bold, 700);
46
+ margin-bottom: var(--nymbal-spacing-sm, 0.5rem);
47
+ color: var(--nymbal-color-text, #18181b);
48
+ text-transform: uppercase;
49
+ letter-spacing: 0.05em;
50
+ }
51
+ [part~='option'] {
52
+ display: flex;
53
+ align-items: center;
54
+ gap: var(--nymbal-spacing-sm, 0.5rem);
55
+ padding: var(--nymbal-spacing-xs, 0.25rem) 0;
56
+ cursor: pointer;
57
+ font-size: var(--nymbal-font-size-sm, 0.875rem);
58
+ color: var(--nymbal-color-text, #18181b);
59
+ }
60
+ [part~='checkbox'] {
61
+ margin: 0;
62
+ accent-color: var(--nymbal-color-primary, #18181b);
63
+ }
64
+ [part~='count'] {
65
+ color: var(--nymbal-color-text-muted, #71717a);
66
+ font-size: var(--nymbal-font-size-xs, 0.75rem);
67
+ }
68
+ `
69
+ ];
70
+ /** Both: a wrapper may set `source` after the element has connected. */
71
+ stores() {
72
+ return [this.client.productList, this.client.search];
73
+ }
74
+ /** With `source="search"` the `facets` a server read stand until the search settles; a listing's always show. */
75
+ storeSettled(store) {
76
+ if (store === this.client.search && this.getAttribute("source") === "search") {
77
+ this.facets = void 0;
78
+ }
79
+ }
80
+ /** The facets this render shows, and whether each value is checked. */
81
+ shown() {
82
+ if (this.getAttribute("source") === "search") {
83
+ const given = parsedJson(this, "facets", this.facets);
84
+ const { facets, category } = given === void 0 && this.readsStores ? this.client.search.getState() : { facets: given ?? [], category: null };
85
+ return {
86
+ facets: facets.filter((f) => f.field === "category"),
87
+ checked: (_field, value) => value === category
88
+ };
89
+ }
90
+ const filters = this.readsStores ? this.client.productList.getState().filters : {};
91
+ return {
92
+ facets: this.facetsAttribute(),
93
+ checked: (field, value) => {
94
+ const active = filters[field];
95
+ return Array.isArray(active) ? active.includes(value) : active === value;
96
+ }
97
+ };
98
+ }
99
+ _shown = { facets: [], checked: () => false };
100
+ willUpdate(_changed) {
101
+ this._shown = this.shown();
102
+ this.toggleAttribute("empty", this._shown.facets.length === 0);
103
+ }
104
+ render() {
105
+ const { facets, checked } = this._shown;
106
+ return facets.map(
107
+ (facet) => html`
108
+ <div part="group" data-testid="filter-group-${facet.field}">
109
+ <span part="label">${facet.label}</span>
110
+ ${facet.values.map(
111
+ (v) => html`
112
+ <label part="option" data-testid="filter-option-${v.value}">
113
+ <input
114
+ part="checkbox"
115
+ type="checkbox"
116
+ data-filter-name=${facet.field}
117
+ data-filter-value=${v.value}
118
+ .checked=${checked(facet.field, v.value)}
119
+ @change=${this.handleChange}
120
+ />
121
+ <span part="option-label">${v.label ?? v.value}</span>
122
+ ${v.count !== void 0 ? html`<span part="count" class="nymbal-filter-count">(${v.count})</span>` : nothing}
123
+ </label>
124
+ `
125
+ )}
126
+ </div>
127
+ `
128
+ );
129
+ }
130
+ handleChange = (e) => {
131
+ const input = e.target;
132
+ const value = input.dataset["filterValue"];
133
+ if (this.getAttribute("source") === "search") {
134
+ void this.client.search.setCategory(input.checked ? value : null);
135
+ this.emit("category", input.checked ? value : "");
136
+ return;
137
+ }
138
+ const name = input.dataset["filterName"];
139
+ const current = this.client.productList.getState().filters[name];
140
+ if (input.checked) {
141
+ const values = Array.isArray(current) ? [...current, value] : current ? [current, value] : value;
142
+ void this.client.productList.applyFilter(name, values);
143
+ } else if (Array.isArray(current)) {
144
+ const remaining = current.filter((v) => v !== value);
145
+ if (remaining.length > 0) {
146
+ void this.client.productList.applyFilter(name, remaining);
147
+ } else {
148
+ void this.client.productList.removeFilter(name);
149
+ }
150
+ } else {
151
+ void this.client.productList.removeFilter(name);
152
+ }
153
+ this.emit(name, value);
154
+ };
155
+ emit(name, value) {
156
+ this.dispatchEvent(
157
+ new CustomEvent("nymbal:filter:changed", {
158
+ bubbles: true,
159
+ composed: true,
160
+ detail: { name, value }
161
+ })
162
+ );
163
+ }
164
+ facetsAttribute() {
165
+ return parsedJson(this, "facets", this.facets) ?? [];
166
+ }
167
+ };
168
+
169
+ export {
170
+ NymbalProductFilter
171
+ };
172
+ //# sourceMappingURL=chunk-WEEHXWM3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/product-filter.ts"],"sourcesContent":["import { css, html, nothing, type PropertyValues } from 'lit'\nimport type { Facet } from '@nymbalhq/types'\nimport {\n baseStyles,\n NymbalElement,\n parsedJson,\n propertiesOf,\n type ElementSchema,\n type Subscribable,\n} from '../base-element.js'\n\nconst SCHEMA: ElementSchema = {\n tag: 'nymbal-product-filter',\n reactName: 'ProductFilter',\n attributes: [\n { name: 'facets', prop: 'facets', type: 'json' },\n { name: 'source', prop: 'source', type: 'string' },\n ],\n events: [\n {\n name: 'nymbal:filter:changed',\n prop: 'onFilterChange',\n detail: '{ name: string; value: string }',\n },\n ],\n parts: ['group', 'label', 'option', 'checkbox', 'option-label', 'count'],\n slots: [],\n children: false,\n}\n\n/**\n * The facet filter. By default it reads the `facets` attribute and filters the product list. With `source=\"search\"`\n * it renders the search's own facets and narrows the search to one category: choosing an option selects it, choosing\n * the selected option again clears it. The host carries `empty` while it renders no facet, so a page can lay out\n * around it (its light DOM is always empty).\n */\nexport class NymbalProductFilter extends NymbalElement {\n static override schema = SCHEMA\n static override properties = propertiesOf(SCHEMA)\n\n static override styles = [\n baseStyles,\n css`\n :host {\n display: block;\n font-family: var(--nymbal-font-family, system-ui, -apple-system, sans-serif);\n }\n [part~='group'] {\n margin-bottom: var(--nymbal-spacing-lg, 1.5rem);\n }\n [part~='label'] {\n display: block;\n font-size: var(--nymbal-font-size-sm, 0.875rem);\n font-weight: var(--nymbal-font-weight-bold, 700);\n margin-bottom: var(--nymbal-spacing-sm, 0.5rem);\n color: var(--nymbal-color-text, #18181b);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n }\n [part~='option'] {\n display: flex;\n align-items: center;\n gap: var(--nymbal-spacing-sm, 0.5rem);\n padding: var(--nymbal-spacing-xs, 0.25rem) 0;\n cursor: pointer;\n font-size: var(--nymbal-font-size-sm, 0.875rem);\n color: var(--nymbal-color-text, #18181b);\n }\n [part~='checkbox'] {\n margin: 0;\n accent-color: var(--nymbal-color-primary, #18181b);\n }\n [part~='count'] {\n color: var(--nymbal-color-text-muted, #71717a);\n font-size: var(--nymbal-font-size-xs, 0.75rem);\n }\n `,\n ]\n\n declare facets: unknown\n\n /** Both: a wrapper may set `source` after the element has connected. */\n protected override stores() {\n return [this.client.productList, this.client.search]\n }\n\n /** With `source=\"search\"` the `facets` a server read stand until the search settles; a listing's always show. */\n protected override storeSettled(store: Subscribable): void {\n if (store === this.client.search && this.getAttribute('source') === 'search') {\n this.facets = undefined\n }\n }\n\n /** The facets this render shows, and whether each value is checked. */\n private shown(): { facets: Facet[]; checked: (field: string, value: string) => boolean } {\n if (this.getAttribute('source') === 'search') {\n const given = parsedJson<Facet[]>(this, 'facets', this.facets)\n const { facets, category } =\n given === undefined && this.readsStores\n ? this.client.search.getState()\n : { facets: given ?? [], category: null }\n return {\n facets: facets.filter((f) => f.field === 'category'),\n checked: (_field, value) => value === category,\n }\n }\n const filters = this.readsStores ? this.client.productList.getState().filters : {}\n return {\n facets: this.facetsAttribute(),\n checked: (field, value) => {\n const active = filters[field]\n return Array.isArray(active) ? active.includes(value) : active === value\n },\n }\n }\n\n private _shown: ReturnType<NymbalProductFilter['shown']> = { facets: [], checked: () => false }\n\n protected override willUpdate(_changed: PropertyValues): void {\n this._shown = this.shown()\n this.toggleAttribute('empty', this._shown.facets.length === 0)\n }\n\n protected override render() {\n const { facets, checked } = this._shown\n return facets.map(\n (facet) => html`\n <div part=\"group\" data-testid=\"filter-group-${facet.field}\">\n <span part=\"label\">${facet.label}</span>\n ${facet.values.map(\n (v) => html`\n <label part=\"option\" data-testid=\"filter-option-${v.value}\">\n <input\n part=\"checkbox\"\n type=\"checkbox\"\n data-filter-name=${facet.field}\n data-filter-value=${v.value}\n .checked=${checked(facet.field, v.value)}\n @change=${this.handleChange}\n />\n <span part=\"option-label\">${v.label ?? v.value}</span>\n ${v.count !== undefined ? html`<span part=\"count\" class=\"nymbal-filter-count\">(${v.count})</span>` : nothing}\n </label>\n `,\n )}\n </div>\n `,\n )\n }\n\n private handleChange = (e: Event): void => {\n const input = e.target as HTMLInputElement\n const value = input.dataset['filterValue']!\n if (this.getAttribute('source') === 'search') {\n void this.client.search.setCategory(input.checked ? value : null)\n this.emit('category', input.checked ? value : '')\n return\n }\n const name = input.dataset['filterName']!\n const current = this.client.productList.getState().filters[name]\n if (input.checked) {\n const values = Array.isArray(current)\n ? [...current, value]\n : current\n ? [current, value]\n : value\n void this.client.productList.applyFilter(name, values)\n } else if (Array.isArray(current)) {\n const remaining = current.filter((v) => v !== value)\n if (remaining.length > 0) {\n void this.client.productList.applyFilter(name, remaining)\n } else {\n void this.client.productList.removeFilter(name)\n }\n } else {\n void this.client.productList.removeFilter(name)\n }\n this.emit(name, value)\n }\n\n private emit(name: string, value: string): void {\n this.dispatchEvent(\n new CustomEvent('nymbal:filter:changed', {\n bubbles: true,\n composed: true,\n detail: { name, value },\n }),\n )\n }\n\n private facetsAttribute(): Facet[] {\n return parsedJson<Facet[]>(this, 'facets', this.facets) ?? []\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,128 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalFormElement,
4
+ renderField
5
+ } from "./chunk-PN6QKYE4.js";
6
+ import {
7
+ buttonStyles,
8
+ fieldStyles
9
+ } from "./chunk-GHXTJ2CF.js";
10
+ import {
11
+ baseStyles,
12
+ parsedJson,
13
+ propertiesOf
14
+ } from "./chunk-EYDMJNNK.js";
15
+
16
+ // src/components/profile-form.ts
17
+ import { css, html, nothing } from "lit";
18
+ var SCHEMA = {
19
+ tag: "nymbal-profile-form",
20
+ reactName: "ProfileForm",
21
+ // The customer a server read, shown until the auth store settles.
22
+ attributes: [{ name: "customer", prop: "customer", type: "json" }],
23
+ events: [
24
+ {
25
+ name: "nymbal:profile:saved",
26
+ prop: "onSaved",
27
+ detail: "{ customer: unknown }"
28
+ }
29
+ ],
30
+ parts: ["form", "row", "field", "label", "input", "actions", "submit", "error", "message"],
31
+ slots: ["submit-label"],
32
+ children: false
33
+ };
34
+ var NymbalProfileForm = class extends NymbalFormElement {
35
+ static schema = SCHEMA;
36
+ static properties = propertiesOf(SCHEMA);
37
+ static styles = [
38
+ baseStyles,
39
+ buttonStyles,
40
+ fieldStyles,
41
+ css`
42
+ [part~='row'] {
43
+ display: grid;
44
+ grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
45
+ gap: 0 var(--nymbal-spacing-md, 1rem);
46
+ }
47
+ [part~='submit'] {
48
+ width: auto;
49
+ }
50
+ `
51
+ ];
52
+ stores() {
53
+ return [this.client.auth];
54
+ }
55
+ storeSettled() {
56
+ this.customer = void 0;
57
+ }
58
+ async send() {
59
+ await this.client.auth.updateProfile({
60
+ firstName: this.value("firstName"),
61
+ lastName: this.value("lastName"),
62
+ phone: this.value("phone")
63
+ });
64
+ this.notice = "Profile updated successfully.";
65
+ this.emit("nymbal:profile:saved", { customer: this.client.auth.getState().customer });
66
+ }
67
+ failureText(err) {
68
+ return err instanceof Error && err.message !== "" ? err.message : "Failed to update profile.";
69
+ }
70
+ render() {
71
+ const customer = parsedJson(this, "customer", this.customer) ?? (this.readsStores ? this.client.auth.getState().customer : null);
72
+ return html`
73
+ ${this.renderError()}
74
+ <form part="form" data-testid="profile-form" @submit=${this.onSubmit}>
75
+ <div part="row">
76
+ ${renderField({
77
+ id: "profile-firstName",
78
+ name: "firstName",
79
+ label: "First Name",
80
+ autocomplete: "given-name",
81
+ value: customer?.firstName ?? ""
82
+ })}
83
+ ${renderField({
84
+ id: "profile-lastName",
85
+ name: "lastName",
86
+ label: "Last Name",
87
+ autocomplete: "family-name",
88
+ value: customer?.lastName ?? ""
89
+ })}
90
+ </div>
91
+ ${renderField({
92
+ id: "profile-email",
93
+ name: "email",
94
+ label: "Email",
95
+ type: "email",
96
+ autocomplete: "email",
97
+ disabled: true,
98
+ value: customer?.email ?? ""
99
+ })}
100
+ ${renderField({
101
+ id: "profile-phone",
102
+ name: "phone",
103
+ label: "Phone",
104
+ type: "tel",
105
+ autocomplete: "tel",
106
+ value: customer?.phone ?? ""
107
+ })}
108
+ <div part="actions">
109
+ <button
110
+ type="submit"
111
+ part="submit"
112
+ class="btn btn-primary"
113
+ data-testid="profile-save"
114
+ ?disabled=${this.pending}
115
+ >
116
+ ${this.pending ? "Saving..." : html`<slot name="submit-label">Save Changes</slot>`}
117
+ </button>
118
+ </div>
119
+ ${this.notice === null ? nothing : html`<p part="message" role="status">${this.notice}</p>`}
120
+ </form>
121
+ `;
122
+ }
123
+ };
124
+
125
+ export {
126
+ NymbalProfileForm
127
+ };
128
+ //# sourceMappingURL=chunk-WTEVTCIL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/profile-form.ts"],"sourcesContent":["import { css, html, nothing } from 'lit'\nimport type { Customer } from '@nymbalhq/types'\nimport { baseStyles, parsedJson, propertiesOf, type ElementSchema } from '../base-element.js'\nimport { NymbalFormElement, renderField } from '../form-element.js'\nimport { buttonStyles, fieldStyles } from '../view-styles.js'\n\nconst SCHEMA: ElementSchema = {\n tag: 'nymbal-profile-form',\n reactName: 'ProfileForm',\n // The customer a server read, shown until the auth store settles.\n attributes: [{ name: 'customer', prop: 'customer', type: 'json' }],\n events: [\n {\n name: 'nymbal:profile:saved',\n prop: 'onSaved',\n detail: '{ customer: unknown }',\n },\n ],\n parts: ['form', 'row', 'field', 'label', 'input', 'actions', 'submit', 'error', 'message'],\n slots: ['submit-label'],\n children: false,\n}\n\n/** The signed-in customer's name and phone, filled from the auth store and saved through it. */\nexport class NymbalProfileForm extends NymbalFormElement {\n static override schema = SCHEMA\n static override properties = propertiesOf(SCHEMA)\n static override styles = [\n baseStyles,\n buttonStyles,\n fieldStyles,\n css`\n [part~='row'] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));\n gap: 0 var(--nymbal-spacing-md, 1rem);\n }\n [part~='submit'] {\n width: auto;\n }\n `,\n ]\n\n declare customer: unknown\n\n protected override stores() {\n return [this.client.auth]\n }\n\n protected override storeSettled(): void {\n this.customer = undefined\n }\n\n protected override async send(): Promise<void> {\n await this.client.auth.updateProfile({\n firstName: this.value('firstName'),\n lastName: this.value('lastName'),\n phone: this.value('phone'),\n })\n this.notice = 'Profile updated successfully.'\n this.emit('nymbal:profile:saved', { customer: this.client.auth.getState().customer })\n }\n\n protected override failureText(err: unknown): string {\n return err instanceof Error && err.message !== '' ? err.message : 'Failed to update profile.'\n }\n\n protected override render() {\n const customer =\n parsedJson<Customer>(this, 'customer', this.customer) ??\n (this.readsStores ? this.client.auth.getState().customer : null)\n return html`\n ${this.renderError()}\n <form part=\"form\" data-testid=\"profile-form\" @submit=${this.onSubmit}>\n <div part=\"row\">\n ${renderField({\n id: 'profile-firstName',\n name: 'firstName',\n label: 'First Name',\n autocomplete: 'given-name',\n value: customer?.firstName ?? '',\n })}\n ${renderField({\n id: 'profile-lastName',\n name: 'lastName',\n label: 'Last Name',\n autocomplete: 'family-name',\n value: customer?.lastName ?? '',\n })}\n </div>\n ${renderField({\n id: 'profile-email',\n name: 'email',\n label: 'Email',\n type: 'email',\n autocomplete: 'email',\n disabled: true,\n value: customer?.email ?? '',\n })}\n ${renderField({\n id: 'profile-phone',\n name: 'phone',\n label: 'Phone',\n type: 'tel',\n autocomplete: 'tel',\n value: customer?.phone ?? '',\n })}\n <div part=\"actions\">\n <button\n type=\"submit\"\n part=\"submit\"\n class=\"btn btn-primary\"\n data-testid=\"profile-save\"\n ?disabled=${this.pending}\n >\n ${this.pending ? 'Saving...' : html`<slot name=\"submit-label\">Save Changes</slot>`}\n </button>\n </div>\n ${this.notice === null\n ? nothing\n : html`<p part=\"message\" role=\"status\">${this.notice}</p>`}\n </form>\n `\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA,SAAS,KAAK,MAAM,eAAe;AAMnC,IAAM,SAAwB;AAAA,EAC5B,KAAK;AAAA,EACL,WAAW;AAAA;AAAA,EAEX,YAAY,CAAC,EAAE,MAAM,YAAY,MAAM,YAAY,MAAM,OAAO,CAAC;AAAA,EACjE,QAAQ;AAAA,IACN;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,OAAO,CAAC,QAAQ,OAAO,SAAS,SAAS,SAAS,WAAW,UAAU,SAAS,SAAS;AAAA,EACzF,OAAO,CAAC,cAAc;AAAA,EACtB,UAAU;AACZ;AAGO,IAAM,oBAAN,cAAgC,kBAAkB;AAAA,EACvD,OAAgB,SAAS;AAAA,EACzB,OAAgB,aAAa,aAAa,MAAM;AAAA,EAChD,OAAgB,SAAS;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUF;AAAA,EAImB,SAAS;AAC1B,WAAO,CAAC,KAAK,OAAO,IAAI;AAAA,EAC1B;AAAA,EAEmB,eAAqB;AACtC,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAyB,OAAsB;AAC7C,UAAM,KAAK,OAAO,KAAK,cAAc;AAAA,MACnC,WAAW,KAAK,MAAM,WAAW;AAAA,MACjC,UAAU,KAAK,MAAM,UAAU;AAAA,MAC/B,OAAO,KAAK,MAAM,OAAO;AAAA,IAC3B,CAAC;AACD,SAAK,SAAS;AACd,SAAK,KAAK,wBAAwB,EAAE,UAAU,KAAK,OAAO,KAAK,SAAS,EAAE,SAAS,CAAC;AAAA,EACtF;AAAA,EAEmB,YAAY,KAAsB;AACnD,WAAO,eAAe,SAAS,IAAI,YAAY,KAAK,IAAI,UAAU;AAAA,EACpE;AAAA,EAEmB,SAAS;AAC1B,UAAM,WACJ,WAAqB,MAAM,YAAY,KAAK,QAAQ,MACnD,KAAK,cAAc,KAAK,OAAO,KAAK,SAAS,EAAE,WAAW;AAC7D,WAAO;AAAA,QACH,KAAK,YAAY,CAAC;AAAA,6DACmC,KAAK,QAAQ;AAAA;AAAA,YAE9D,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc;AAAA,MACd,OAAO,UAAU,aAAa;AAAA,IAChC,CAAC,CAAC;AAAA,YACA,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,cAAc;AAAA,MACd,OAAO,UAAU,YAAY;AAAA,IAC/B,CAAC,CAAC;AAAA;AAAA,UAEF,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,UAAU;AAAA,MACV,OAAO,UAAU,SAAS;AAAA,IAC5B,CAAC,CAAC;AAAA,UACA,YAAY;AAAA,MACZ,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,OAAO,UAAU,SAAS;AAAA,IAC5B,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAOc,KAAK,OAAO;AAAA;AAAA,cAEtB,KAAK,UAAU,cAAc,mDAAmD;AAAA;AAAA;AAAA,UAGpF,KAAK,WAAW,OACd,UACA,uCAAuC,KAAK,MAAM,MAAM;AAAA;AAAA;AAAA,EAGlE;AACF;","names":[]}
@@ -0,0 +1,137 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalVariantSelector
4
+ } from "./chunk-H3ZBYNHV.js";
5
+ import {
6
+ NymbalReviewList
7
+ } from "./chunk-7JAAOVCE.js";
8
+ import {
9
+ NymbalSearchBar
10
+ } from "./chunk-4COVK727.js";
11
+ import {
12
+ NymbalSearchResults
13
+ } from "./chunk-RAOGZH3Z.js";
14
+ import {
15
+ NymbalSiteFooter
16
+ } from "./chunk-FIF6GQ6U.js";
17
+ import {
18
+ NymbalSiteHeader
19
+ } from "./chunk-W23P7SI4.js";
20
+ import {
21
+ NymbalSortDropdown
22
+ } from "./chunk-EBMA7JGV.js";
23
+ import {
24
+ NymbalStockBadge
25
+ } from "./chunk-O2YKCDR2.js";
26
+ import {
27
+ NymbalToast
28
+ } from "./chunk-2TPQNQYO.js";
29
+ import {
30
+ NymbalProductFilter
31
+ } from "./chunk-WEEHXWM3.js";
32
+ import {
33
+ NymbalProductGrid
34
+ } from "./chunk-5VWZ2U5K.js";
35
+ import {
36
+ NymbalProductCard
37
+ } from "./chunk-RZVFA3N5.js";
38
+ import {
39
+ NymbalProductPrice
40
+ } from "./chunk-DXWMNB5F.js";
41
+ import {
42
+ NymbalProfileForm
43
+ } from "./chunk-WTEVTCIL.js";
44
+ import {
45
+ NymbalRegisterForm
46
+ } from "./chunk-NW47OJVN.js";
47
+ import {
48
+ NymbalReviewForm
49
+ } from "./chunk-NE6UHTOT.js";
50
+ import {
51
+ NymbalCartPage
52
+ } from "./chunk-VTQVGNVC.js";
53
+ import {
54
+ NymbalQuantitySelector
55
+ } from "./chunk-HPBC3OG7.js";
56
+ import {
57
+ NymbalCategoryNav
58
+ } from "./chunk-IYT7VXFS.js";
59
+ import {
60
+ NymbalCheckout
61
+ } from "./chunk-5G3C53A2.js";
62
+ import {
63
+ NymbalImageGallery
64
+ } from "./chunk-U2PU4CWB.js";
65
+ import {
66
+ NymbalLoginForm
67
+ } from "./chunk-42SSME5H.js";
68
+ import {
69
+ NymbalMiniCart
70
+ } from "./chunk-2XXBQPDB.js";
71
+ import {
72
+ NymbalOrderSummary
73
+ } from "./chunk-SM7TASEW.js";
74
+ import {
75
+ NymbalPaymentElement
76
+ } from "./chunk-W7D3STJH.js";
77
+ import {
78
+ NymbalAddToCart
79
+ } from "./chunk-LHYXNQWY.js";
80
+ import {
81
+ NymbalAddressBook
82
+ } from "./chunk-B73QVSA5.js";
83
+ import {
84
+ NymbalAddressForm
85
+ } from "./chunk-V55K2CS5.js";
86
+ import {
87
+ NymbalBreadcrumb
88
+ } from "./chunk-N4Y5DI4X.js";
89
+ import {
90
+ NymbalCartDrawer
91
+ } from "./chunk-LSQPUZK6.js";
92
+ import {
93
+ define
94
+ } from "./chunk-EYDMJNNK.js";
95
+
96
+ // src/register-components.ts
97
+ var ELEMENTS = [
98
+ NymbalAddToCart,
99
+ NymbalCartDrawer,
100
+ NymbalMiniCart,
101
+ NymbalVariantSelector,
102
+ NymbalQuantitySelector,
103
+ NymbalSearchBar,
104
+ NymbalProductFilter,
105
+ NymbalToast,
106
+ NymbalPaymentElement,
107
+ NymbalSortDropdown,
108
+ NymbalCartPage,
109
+ NymbalProductCard,
110
+ NymbalSearchResults,
111
+ NymbalLoginForm,
112
+ NymbalRegisterForm,
113
+ NymbalProfileForm,
114
+ NymbalAddressForm,
115
+ NymbalAddressBook,
116
+ NymbalCheckout,
117
+ NymbalProductGrid,
118
+ NymbalProductPrice,
119
+ NymbalStockBadge,
120
+ NymbalBreadcrumb,
121
+ NymbalImageGallery,
122
+ NymbalSiteHeader,
123
+ NymbalSiteFooter,
124
+ NymbalCategoryNav,
125
+ NymbalReviewList,
126
+ NymbalReviewForm,
127
+ NymbalOrderSummary
128
+ ];
129
+ function registerComponents() {
130
+ define(...ELEMENTS);
131
+ }
132
+
133
+ export {
134
+ ELEMENTS,
135
+ registerComponents
136
+ };
137
+ //# sourceMappingURL=chunk-XPFGMYBV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/register-components.ts"],"sourcesContent":["import './hydrate-support.js'\nimport { define } from './define.js'\nimport { NymbalAddToCart } from './components/add-to-cart.js'\nimport { NymbalCartDrawer } from './components/cart-drawer.js'\nimport { NymbalMiniCart } from './components/mini-cart.js'\nimport { NymbalVariantSelector } from './components/variant-selector.js'\nimport { NymbalQuantitySelector } from './components/quantity-selector.js'\nimport { NymbalSearchBar } from './components/search-bar.js'\nimport { NymbalProductFilter } from './components/product-filter.js'\nimport { NymbalToast } from './components/toast.js'\nimport { NymbalPaymentElement } from './components/payment-element.js'\nimport { NymbalSortDropdown } from './components/sort-dropdown.js'\nimport { NymbalCartPage } from './components/cart-page.js'\nimport { NymbalProductCard } from './components/product-card.js'\nimport { NymbalSearchResults } from './components/search-results.js'\nimport { NymbalLoginForm } from './components/login-form.js'\nimport { NymbalRegisterForm } from './components/register-form.js'\nimport { NymbalProfileForm } from './components/profile-form.js'\nimport { NymbalAddressForm } from './components/address-form.js'\nimport { NymbalAddressBook } from './components/address-book.js'\nimport { NymbalCheckout } from './components/checkout.js'\nimport { NymbalProductGrid } from './components/product-grid.js'\nimport { NymbalProductPrice } from './components/product-price.js'\nimport { NymbalStockBadge } from './components/stock-badge.js'\nimport { NymbalBreadcrumb } from './components/breadcrumb.js'\nimport { NymbalImageGallery } from './components/image-gallery.js'\nimport { NymbalSiteHeader } from './components/site-header.js'\nimport { NymbalSiteFooter } from './components/site-footer.js'\nimport { NymbalCategoryNav } from './components/category-nav.js'\nimport { NymbalReviewList } from './components/review-list.js'\nimport { NymbalReviewForm } from './components/review-form.js'\nimport { NymbalOrderSummary } from './components/order-summary.js'\n\n/** Every element the package defines. */\nexport const ELEMENTS = [\n NymbalAddToCart,\n NymbalCartDrawer,\n NymbalMiniCart,\n NymbalVariantSelector,\n NymbalQuantitySelector,\n NymbalSearchBar,\n NymbalProductFilter,\n NymbalToast,\n NymbalPaymentElement,\n NymbalSortDropdown,\n NymbalCartPage,\n NymbalProductCard,\n NymbalSearchResults,\n NymbalLoginForm,\n NymbalRegisterForm,\n NymbalProfileForm,\n NymbalAddressForm,\n NymbalAddressBook,\n NymbalCheckout,\n NymbalProductGrid,\n NymbalProductPrice,\n NymbalStockBadge,\n NymbalBreadcrumb,\n NymbalImageGallery,\n NymbalSiteHeader,\n NymbalSiteFooter,\n NymbalCategoryNav,\n NymbalReviewList,\n NymbalReviewForm,\n NymbalOrderSummary,\n]\n\n/**\n * Defines every element, and registers the built-in payment drivers, except a tag or driver name the project has\n * already defined: the project's wins. A page that renders a few elements passes those to `define` instead.\n */\nexport function registerComponents(): void {\n define(...ELEMENTS)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,IAAM,WAAW;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMO,SAAS,qBAA2B;AACzC,SAAO,GAAG,QAAQ;AACpB;","names":[]}
@@ -0,0 +1,14 @@
1
+ import * as _nymbalhq_sdk from '@nymbalhq/sdk';
2
+ import * as lit from 'lit';
3
+ import { NymbalElement, ElementSchema } from '../index.js';
4
+
5
+ declare class NymbalAddToCart extends NymbalElement {
6
+ static schema: ElementSchema;
7
+ static properties: lit.PropertyDeclarations;
8
+ static styles: lit.CSSResult[];
9
+ protected stores(): _nymbalhq_sdk.CartStore[];
10
+ protected render(): lit.TemplateResult<1>;
11
+ private handleClick;
12
+ }
13
+
14
+ export { NymbalAddToCart };
@@ -0,0 +1,10 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalAddToCart
4
+ } from "../chunk-LHYXNQWY.js";
5
+ import "../chunk-EYDMJNNK.js";
6
+ import "../chunk-UCEVCLQ7.js";
7
+ export {
8
+ NymbalAddToCart
9
+ };
10
+ //# sourceMappingURL=nymbal-add-to-cart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,30 @@
1
+ import * as lit from 'lit';
2
+ import { ElementSchema } from '../index.js';
3
+ import { N as NymbalFormElement } from '../form-element-C-qo3gpD.js';
4
+ import { NymbalAddressForm } from './nymbal-address-form.js';
5
+ import '@nymbalhq/sdk';
6
+ import '@nymbalhq/types';
7
+
8
+ /** The signed-in customer's saved addresses, and the form that adds one. */
9
+ declare class NymbalAddressBook extends NymbalFormElement {
10
+ static schema: ElementSchema;
11
+ static uses: (typeof NymbalAddressForm)[];
12
+ static properties: lit.PropertyDeclarations;
13
+ static styles: lit.CSSResult[];
14
+ addresses: unknown;
15
+ /** null until the first list answers. */
16
+ private listed;
17
+ private loadFailed;
18
+ connectedCallback(): void;
19
+ /** The list's answer settles the book: the addresses a server gave give way to it. */
20
+ private load;
21
+ private get addressForm();
22
+ protected send(): Promise<void>;
23
+ protected failureText(): string;
24
+ private readonly onAddSubmit;
25
+ private renderAddress;
26
+ private renderList;
27
+ protected render(): lit.TemplateResult<1>;
28
+ }
29
+
30
+ export { NymbalAddressBook };
@@ -0,0 +1,13 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalAddressBook
4
+ } from "../chunk-B73QVSA5.js";
5
+ import "../chunk-V55K2CS5.js";
6
+ import "../chunk-PN6QKYE4.js";
7
+ import "../chunk-GHXTJ2CF.js";
8
+ import "../chunk-EYDMJNNK.js";
9
+ import "../chunk-UCEVCLQ7.js";
10
+ export {
11
+ NymbalAddressBook
12
+ };
13
+ //# sourceMappingURL=nymbal-address-book.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,29 @@
1
+ import * as lit from 'lit';
2
+ import { Address } from '@nymbalhq/types';
3
+ import { NymbalElement, ElementSchema } from '../index.js';
4
+ import '@nymbalhq/sdk';
5
+
6
+ /**
7
+ * The address fields, with ids and test ids `<id-prefix>-<field>`. It renders no `<form>`: the view that holds it owns
8
+ * the submit (Enter in a field submits it) and reads `value`.
9
+ */
10
+ declare class NymbalAddressForm extends NymbalElement {
11
+ static schema: ElementSchema;
12
+ static properties: lit.PropertyDeclarations;
13
+ static styles: lit.CSSResult[];
14
+ idPrefix: string | undefined;
15
+ private input;
16
+ /** The address as typed, trimmed; an empty second line is left out. */
17
+ get value(): Address;
18
+ /** Shows the browser's message on the first field that is not valid, as a native form would. */
19
+ reportValidity(): boolean;
20
+ reset(): void;
21
+ /**
22
+ * The inputs sit in this shadow root, so they have no form owner and Enter in one submits nothing natively. Enter
23
+ * submits the form that holds this element instead, as it would if the fields were its own.
24
+ */
25
+ private readonly onKeydown;
26
+ protected render(): lit.TemplateResult<1>;
27
+ }
28
+
29
+ export { NymbalAddressForm };
@@ -0,0 +1,12 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalAddressForm
4
+ } from "../chunk-V55K2CS5.js";
5
+ import "../chunk-PN6QKYE4.js";
6
+ import "../chunk-GHXTJ2CF.js";
7
+ import "../chunk-EYDMJNNK.js";
8
+ import "../chunk-UCEVCLQ7.js";
9
+ export {
10
+ NymbalAddressForm
11
+ };
12
+ //# sourceMappingURL=nymbal-address-form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,15 @@
1
+ import * as lit from 'lit';
2
+ import { nothing } from 'lit';
3
+ import { NymbalElement, ElementSchema } from '../index.js';
4
+ import '@nymbalhq/sdk';
5
+
6
+ /** Where the page sits: each crumb a link, the last the page itself (`aria-current="page"`). */
7
+ declare class NymbalBreadcrumb extends NymbalElement {
8
+ static schema: ElementSchema;
9
+ static properties: lit.PropertyDeclarations;
10
+ static styles: lit.CSSResult[];
11
+ items: unknown;
12
+ protected render(): typeof nothing | lit.TemplateResult<1>;
13
+ }
14
+
15
+ export { NymbalBreadcrumb };
@@ -0,0 +1,11 @@
1
+ import '@lit-labs/ssr-client/lit-element-hydrate-support.js'
2
+ import {
3
+ NymbalBreadcrumb
4
+ } from "../chunk-N4Y5DI4X.js";
5
+ import "../chunk-LO2EW5YP.js";
6
+ import "../chunk-EYDMJNNK.js";
7
+ import "../chunk-UCEVCLQ7.js";
8
+ export {
9
+ NymbalBreadcrumb
10
+ };
11
+ //# sourceMappingURL=nymbal-breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,24 @@
1
+ import * as _nymbalhq_sdk from '@nymbalhq/sdk';
2
+ import * as lit from 'lit';
3
+ import { NymbalElement, ElementSchema } from '../index.js';
4
+
5
+ declare class NymbalCartDrawer extends NymbalElement {
6
+ static schema: ElementSchema;
7
+ static properties: lit.PropertyDeclarations;
8
+ static styles: lit.CSSResult[];
9
+ private readonly handleItemAdded;
10
+ private readonly handleMiniCartClicked;
11
+ cart: unknown;
12
+ protected stores(): _nymbalhq_sdk.CartStore[];
13
+ protected storeSettled(): void;
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ /** Opens the drawer (the `open` attribute and property say whether it is). */
17
+ show(): void;
18
+ hide(): void;
19
+ toggle(): void;
20
+ protected render(): lit.TemplateResult<1>;
21
+ private handleCheckout;
22
+ }
23
+
24
+ export { NymbalCartDrawer };