@orderlyshop/web-components 0.1.0-build.7045

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 (71) hide show
  1. package/AGENTS.md +110 -0
  2. package/README.md +685 -0
  3. package/bin/orderly-build-category-pages.mjs +160 -0
  4. package/bin/orderly-generate-category-pages.mjs +308 -0
  5. package/bin/orderly-hydrate-static-pages.mjs +595 -0
  6. package/bin/orderly-init-navigation.mjs +327 -0
  7. package/bin/orderly-init-shop.mjs +876 -0
  8. package/bin/orderly-init-taxonomy.mjs +2 -0
  9. package/bin/orderly-publish-site.mjs +342 -0
  10. package/custom-elements.json +505 -0
  11. package/dist/browser/orderly-web-components.define.global.js +3551 -0
  12. package/dist/browser/orderly-web-components.define.global.js.map +1 -0
  13. package/dist/browser/orderly-web-components.global.js +3551 -0
  14. package/dist/browser/orderly-web-components.global.js.map +1 -0
  15. package/dist/default-shop-DgX6uy10.d.ts +221 -0
  16. package/dist/default-shop.d.ts +6 -0
  17. package/dist/default-shop.js +762 -0
  18. package/dist/default-shop.js.map +1 -0
  19. package/dist/define-BNMhl19n.d.ts +9 -0
  20. package/dist/define.d.ts +2 -0
  21. package/dist/define.js +11094 -0
  22. package/dist/define.js.map +1 -0
  23. package/dist/index.d.ts +683 -0
  24. package/dist/index.js +11417 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/navigation.d.ts +61 -0
  27. package/dist/navigation.js +1125 -0
  28. package/dist/navigation.js.map +1 -0
  29. package/dist/query.d.ts +31 -0
  30. package/dist/query.js +115 -0
  31. package/dist/query.js.map +1 -0
  32. package/dist/registry-CPDecU3g.d.ts +6 -0
  33. package/dist/shop-BgQhGRzS.d.ts +173 -0
  34. package/dist/shop-query.d.ts +8 -0
  35. package/dist/shop-query.js +100 -0
  36. package/dist/shop-query.js.map +1 -0
  37. package/dist/shop.d.ts +8 -0
  38. package/dist/shop.js +11187 -0
  39. package/dist/shop.js.map +1 -0
  40. package/dist/stores.d.ts +46 -0
  41. package/dist/stores.js +145 -0
  42. package/dist/stores.js.map +1 -0
  43. package/dist/taxonomy.d.ts +35 -0
  44. package/dist/taxonomy.js +247 -0
  45. package/dist/taxonomy.js.map +1 -0
  46. package/dist/types-Bjez59Hr.d.ts +96 -0
  47. package/docs/components/README.md +708 -0
  48. package/docs/components/product-grid.md +182 -0
  49. package/docs/components/product-rail.md +174 -0
  50. package/examples/shop/README.md +72 -0
  51. package/examples/shop/package.json +28 -0
  52. package/examples/shop/src/category.html +20 -0
  53. package/examples/shop/src/checkout.html +21 -0
  54. package/examples/shop/src/forretningsbetingelser.html +81 -0
  55. package/examples/shop/src/includes/body-end.html +1 -0
  56. package/examples/shop/src/includes/body-start.html +3 -0
  57. package/examples/shop/src/includes/head.html +32 -0
  58. package/examples/shop/src/index.html +25 -0
  59. package/examples/shop/src/navigation.ts +154 -0
  60. package/examples/shop/src/product.html +24 -0
  61. package/examples/shop/src/templates/page-layouts.html +162 -0
  62. package/examples/shop/src/templates/shop-footer.html +76 -0
  63. package/examples/shop/tsconfig.json +32 -0
  64. package/examples/shop/vite.config.mjs +190 -0
  65. package/html-custom-data.json +279 -0
  66. package/package.json +118 -0
  67. package/server/README.md +111 -0
  68. package/server/apache/.htaccess +18 -0
  69. package/server/nginx/orderly-products.conf +24 -0
  70. package/server/node/product-snapshot-server.mjs +133 -0
  71. package/server/php/orderly-product.php +204 -0
@@ -0,0 +1,683 @@
1
+ import { O as OrderlyElement, B as BasketController, a as BasketLabels, C as CheckoutLabels } from './default-shop-DgX6uy10.js';
2
+ export { b as DEFAULT_SHOP_BASE_URL, c as DEFAULT_SHOP_BRAND_LABEL, d as DEFAULT_SHOP_CATEGORY_DEFINITIONS, e as DEFAULT_SHOP_NAVIGATION_DEFINITIONS, f as DEFAULT_SHOP_SORT_OPTIONS, D as DefaultShopConfig, g as OrderlyCheckoutElement, U as UiLanguage, h as UiTextKey, i as configureDefaultShop, j as configureUiLanguage, k as createBasketController, l as defaultBasketController, m as defaultShopBaseUrl, n as defaultShopBasketLabels, o as defaultShopBrandLabel, p as defaultShopCheckoutHref, q as defaultShopCheckoutLabel, r as defaultShopCheckoutLabels, s as defaultShopCheckoutOrderTitle, t as defaultShopCheckoutPageDescription, u as defaultShopCheckoutPageTitle, v as defaultShopCheckoutTermsHref, w as defaultShopEmptyLabel, x as defaultShopHomeHref, y as defaultShopNavigationError, z as defaultShopNavigationItems, A as defaultShopProductHref, E as defaultShopSearchPlaceholder, F as defaultShopSearchQuery, G as defaultShopSortOptions, H as defaultShopUiLanguage, I as defaultUiLanguage, J as dispatchBasketDraftEvent, K as draftOrderItemCount, L as formatUiText, M as normalizeUiLanguage, N as productToDraftLine, P as resetDefaultShop, Q as uiText, R as unpackServicePointHeaders, S as unpackTransportMethods } from './default-shop-DgX6uy10.js';
3
+ export { O as ORDERLY_DEFAULT_CSS, a as ORDERLY_LAZY_LOAD_CSS, i as installOrderlyDefaultStyles, b as installOrderlyLazyLoadStyles } from './define-BNMhl19n.js';
4
+ import { SearchQuery, Credit, SearchObject, ContinuationToken, PageResult, StoredImage } from '@orderlyshop/core-client';
5
+ import { R as ResolvedNavigationItem, S as SortOption, N as NavigationItem, P as ProductGridPagingMode, g as ProductGridState } from './types-Bjez59Hr.js';
6
+ export { h as BasketChangeEvent, B as BasketChangeReason, d as CategoryDefinition, i as CategoryMetadata, e as CategoryNavigationItem, c as CategoryUrlMode, C as CheckoutProfile, j as CheckoutReadyDetail, b as NavigationDefinition, a as NavigationLayout, f as NavigationMetadata, k as NavigationSelectionDetail, O as OrderCreatedDetail, l as ProductEventDetail, m as SessionDetail, n as StorefrontClient } from './types-Bjez59Hr.js';
7
+ import { S as StoredImageUrlVariant } from './shop-BgQhGRzS.js';
8
+ export { C as CreditFormatOptions, a as CreditFormatParts, D as DEFAULT_IMAGE_BASE_URL, b as DEFAULT_PAGE_LAYOUT_LOGO_SRC, G as GlobalTemplateRegistration, O as OrderlyPageLayoutElement, c as OrderlyShopFooterElement, P as PageLayoutConfig, d as PageLayoutSlot, R as ResponsiveTemplateConfig, e as ShopConfig, f as ShopFooterAddress, g as ShopFooterConfig, h as ShopFooterContact, i as ShopFooterContactItem, j as ShopFooterInformationLink, k as ShopFooterOpeningHour, l as StoredImageUrlConfig, m as StoredImageUrlResolver, T as TemplateViewport, n as clearGlobalTemplates, o as configurePageLayout, p as configureResponsiveTemplates, q as configureShop, r as configureShopFooter, s as configureStoredImageUrls, t as currentTemplateViewport, u as formatCredit, v as formatCreditParts, w as registerGlobalTemplate, x as storedImageUrl } from './shop-BgQhGRzS.js';
9
+ export { NavigationController, OrderlyNavigationElement, OrderlyNavigationMenuElement, navigationItemsFromUIMenu, navigationItemsFromWebsitePages } from './navigation.js';
10
+ export { SearchQueryConfig, SearchQueryInput, createSearchQuery, declarativeQueryAttributes, declarativeSearchQuery, normalizeSearchQuery } from './query.js';
11
+ export { D as DefineOrderlyWebComponentsOptions, d as defineOrderlyWebComponents } from './registry-CPDecU3g.js';
12
+ export { configureShopSearchQuery, createAccountShopQuery, mergeShopSearchQuery, shopSearchQuery } from './shop-query.js';
13
+ export { BasketStore, CheckoutProfileStore, LocalStorageBasketStore, LocalStorageCheckoutProfileStore, MemoryBasketStore, MemoryCheckoutProfileStore, createEmptyDraftOrder, defaultBasketStorageKey, defaultCheckoutProfileStorageKey, sanitizeCheckoutProfile } from './stores.js';
14
+ export { CategoryDescriptionInput, CategoryNavigationOptions, NavigationBuildOptions, NavigationDescriptionInput, NavigationValidationResult, assertValidNavigationDefinitions, categoryFromUrl, categoryPagePath, createCategoryNavigation, defaultCategoryPageRoot, findCategoryById, findCategoryByIdOrSlug, findCategoryBySlug, flattenCategoryNavigation, navigationConfigurationError, resolveCategoryUrlMode, validateNavigationDefinitions } from './taxonomy.js';
15
+ import '@bufbuild/protobuf';
16
+
17
+ declare class OrderlyBasketElement extends OrderlyElement {
18
+ static observedAttributes: string[];
19
+ private controllerValue;
20
+ private verifyInFlight;
21
+ private verifyPending;
22
+ private mutationRevision;
23
+ get basketController(): BasketController;
24
+ set basketController(value: BasketController);
25
+ get checkoutHref(): string;
26
+ set checkoutHref(value: string);
27
+ get checkoutAction(): "show" | "hide";
28
+ set checkoutAction(value: "show" | "hide");
29
+ get checkoutLabel(): string;
30
+ set checkoutLabel(value: string);
31
+ get checkoutDisabledLabel(): string;
32
+ set checkoutDisabledLabel(value: string);
33
+ get clearLabel(): string;
34
+ set clearLabel(value: string);
35
+ get continueLabel(): string;
36
+ set continueLabel(value: string);
37
+ get continueHref(): string;
38
+ set continueHref(value: string);
39
+ get emptyLabel(): string;
40
+ set emptyLabel(value: string);
41
+ get quantityLabel(): string;
42
+ set quantityLabel(value: string);
43
+ get removeLabel(): string;
44
+ set removeLabel(value: string);
45
+ get subtotalLabel(): string;
46
+ set subtotalLabel(value: string);
47
+ get shippingLabel(): string;
48
+ set shippingLabel(value: string);
49
+ get totalLabel(): string;
50
+ set totalLabel(value: string);
51
+ get totalNote(): string;
52
+ set totalNote(value: string);
53
+ get deliveryNote(): string;
54
+ set deliveryNote(value: string);
55
+ attributeChangedCallback(): void;
56
+ connectedCallback(): void;
57
+ disconnectedCallback(): void;
58
+ protected render(): void;
59
+ private renderEmptyState;
60
+ private readonly onChange;
61
+ private requestVerifyDraft;
62
+ private flushVerifyDraft;
63
+ }
64
+
65
+ declare class OrderlyBasketIconElement extends OrderlyElement {
66
+ static observedAttributes: string[];
67
+ private controllerValue;
68
+ get basketController(): BasketController;
69
+ set basketController(value: BasketController);
70
+ get label(): string;
71
+ set label(value: string);
72
+ attributeChangedCallback(): void;
73
+ connectedCallback(): void;
74
+ disconnectedCallback(): void;
75
+ protected render(): void;
76
+ private readonly onChange;
77
+ }
78
+
79
+ declare class OrderlyCategoryPageElement extends OrderlyElement {
80
+ static observedAttributes: string[];
81
+ private currentCategory?;
82
+ private currentNavigationItems?;
83
+ private currentSortOptions?;
84
+ private currentDefaultQuery?;
85
+ private controller?;
86
+ get defaultQuery(): SearchQuery | undefined;
87
+ set defaultQuery(value: SearchQuery | undefined);
88
+ get shopQuery(): SearchQuery | undefined;
89
+ set shopQuery(value: SearchQuery | undefined);
90
+ get category(): ResolvedNavigationItem | undefined;
91
+ set category(value: ResolvedNavigationItem | undefined);
92
+ get navigationItems(): ResolvedNavigationItem[];
93
+ set navigationItems(value: ResolvedNavigationItem[]);
94
+ get sortOptions(): SortOption[];
95
+ set sortOptions(value: SortOption[]);
96
+ get basketController(): BasketController | undefined;
97
+ set basketController(value: BasketController | undefined);
98
+ get slug(): string;
99
+ set slug(value: string);
100
+ get brandLabel(): string;
101
+ set brandLabel(value: string);
102
+ get checkoutHref(): string;
103
+ set checkoutHref(value: string);
104
+ get productHref(): string;
105
+ set productHref(value: string);
106
+ get checkoutLabel(): string;
107
+ set checkoutLabel(value: string);
108
+ get searchPlaceholder(): string;
109
+ set searchPlaceholder(value: string);
110
+ get emptyLabel(): string;
111
+ set emptyLabel(value: string);
112
+ connectedCallback(): void;
113
+ disconnectedCallback(): void;
114
+ attributeChangedCallback(): void;
115
+ protected render(): void;
116
+ private configureChildren;
117
+ private applyText;
118
+ private resolveCategory;
119
+ private clientOrUndefined;
120
+ private resolvedNavigationItems;
121
+ private resolvedSortOptions;
122
+ protected getDefaultBaseUrl(): string | undefined;
123
+ private requiredElement;
124
+ private readonly onProductSelected;
125
+ private readonly onAddToBasket;
126
+ private readonly onHashChange;
127
+ }
128
+
129
+ /**
130
+ * Full checkout page composition for vanilla storefronts.
131
+ *
132
+ * The component wraps page layout, top navigation, checkout form, basket order
133
+ * summary, footer, shared basket state, delivery-option loading, and order
134
+ * creation cleanup. Shops can use it as a complete page with
135
+ * `<orderly-checkout-page>` and customize copy through configureDefaultShop().
136
+ */
137
+ declare class OrderlyCheckoutPageElement extends OrderlyElement {
138
+ static observedAttributes: string[];
139
+ private controller?;
140
+ private currentNavigationItems?;
141
+ private currentBasketLabels?;
142
+ private currentCheckoutLabels?;
143
+ get basketController(): BasketController | undefined;
144
+ set basketController(value: BasketController | undefined);
145
+ get navigationItems(): NavigationItem[];
146
+ set navigationItems(value: NavigationItem[]);
147
+ get basketLabels(): BasketLabels;
148
+ set basketLabels(value: BasketLabels);
149
+ get checkoutLabels(): CheckoutLabels;
150
+ set checkoutLabels(value: CheckoutLabels);
151
+ get brandLabel(): string;
152
+ set brandLabel(value: string);
153
+ get title(): string;
154
+ set title(value: string);
155
+ get description(): string;
156
+ set description(value: string);
157
+ get orderTitle(): string;
158
+ set orderTitle(value: string);
159
+ get termsHref(): string;
160
+ set termsHref(value: string);
161
+ attributeChangedCallback(): void;
162
+ protected render(): void;
163
+ protected getDefaultBaseUrl(): string | undefined;
164
+ private configureChildren;
165
+ private applyText;
166
+ private clientOrUndefined;
167
+ private requiredElement;
168
+ }
169
+
170
+ /**
171
+ * Collection page wrapper for hero content plus a SearchQuery-backed product grid.
172
+ *
173
+ * The page stays headless: it owns data wiring, default query propagation, and
174
+ * template slots, while consuming shops own visual CSS and layout decisions.
175
+ */
176
+ declare class OrderlyCollectionPageElement extends OrderlyElement {
177
+ static observedAttributes: string[];
178
+ private currentQuery?;
179
+ private currentDefaultQuery?;
180
+ private controller?;
181
+ private currentSortOptions;
182
+ /**
183
+ * Optional shop-wide SearchQuery scope passed to the internal product grid.
184
+ */
185
+ get defaultQuery(): SearchQuery | undefined;
186
+ set defaultQuery(value: SearchQuery | undefined);
187
+ /**
188
+ * Backward-compatible alias for defaultQuery.
189
+ */
190
+ get shopQuery(): SearchQuery | undefined;
191
+ set shopQuery(value: SearchQuery | undefined);
192
+ /**
193
+ * Typed Core SearchQuery for the collection grid.
194
+ *
195
+ * When omitted, the page falls back to declarative query markup such as
196
+ * `keywords`, `tags`, `order-by`, or a direct child `<query>` element.
197
+ */
198
+ get query(): SearchQuery | undefined;
199
+ set query(value: SearchQuery | undefined);
200
+ /**
201
+ * Shared basket controller passed to the internal product grid.
202
+ */
203
+ get basketController(): BasketController | undefined;
204
+ set basketController(value: BasketController | undefined);
205
+ /**
206
+ * Sort choices passed to the internal product grid.
207
+ */
208
+ get sortOptions(): SortOption[];
209
+ set sortOptions(value: SortOption[]);
210
+ get title(): string;
211
+ set title(value: string);
212
+ get description(): string;
213
+ set description(value: string);
214
+ get heroImage(): string;
215
+ set heroImage(value: string);
216
+ get ctaLabel(): string;
217
+ set ctaLabel(value: string);
218
+ get ctaHref(): string;
219
+ set ctaHref(value: string);
220
+ attributeChangedCallback(): void;
221
+ protected render(): void;
222
+ private createGrid;
223
+ }
224
+
225
+ declare class OrderlyCreditElement extends OrderlyElement {
226
+ static observedAttributes: string[];
227
+ private currentCredit?;
228
+ get credit(): Credit | undefined;
229
+ set credit(value: Credit | undefined);
230
+ get amount(): number | undefined;
231
+ set amount(value: number | undefined);
232
+ get currency(): string;
233
+ set currency(value: string);
234
+ get locale(): string;
235
+ set locale(value: string);
236
+ get emptyLabel(): string;
237
+ set emptyLabel(value: string);
238
+ attributeChangedCallback(): void;
239
+ protected render(): void;
240
+ private resolvedCredit;
241
+ }
242
+
243
+ /**
244
+ * Default storefront homepage composed from configured category navigation.
245
+ *
246
+ * It renders one horizontal product rail per top-level category and wires shared
247
+ * basket state, basket drawer behavior, and product detail dialog behavior.
248
+ */
249
+ declare class OrderlyHomePageElement extends OrderlyElement {
250
+ static observedAttributes: string[];
251
+ private currentNavigationItems?;
252
+ private currentSortOptions?;
253
+ private currentDefaultQuery?;
254
+ private currentBasketLabels?;
255
+ private controller?;
256
+ get defaultQuery(): SearchQuery | undefined;
257
+ set defaultQuery(value: SearchQuery | undefined);
258
+ get navigationItems(): ResolvedNavigationItem[];
259
+ set navigationItems(value: ResolvedNavigationItem[]);
260
+ get sortOptions(): SortOption[];
261
+ set sortOptions(value: SortOption[]);
262
+ get basketLabels(): BasketLabels;
263
+ set basketLabels(value: BasketLabels);
264
+ get basketController(): BasketController | undefined;
265
+ set basketController(value: BasketController | undefined);
266
+ get brandLabel(): string;
267
+ set brandLabel(value: string);
268
+ get eyebrow(): string;
269
+ set eyebrow(value: string);
270
+ get title(): string;
271
+ set title(value: string);
272
+ get railCtaLabel(): string;
273
+ set railCtaLabel(value: string);
274
+ get emptyLabel(): string;
275
+ set emptyLabel(value: string);
276
+ get checkoutHref(): string;
277
+ set checkoutHref(value: string);
278
+ get productHref(): string;
279
+ set productHref(value: string);
280
+ get checkoutLabel(): string;
281
+ set checkoutLabel(value: string);
282
+ connectedCallback(): void;
283
+ disconnectedCallback(): void;
284
+ attributeChangedCallback(): void;
285
+ protected render(): void;
286
+ protected getDefaultBaseUrl(): string | undefined;
287
+ private configureChildren;
288
+ private createRail;
289
+ private clientOrUndefined;
290
+ private requiredElement;
291
+ private readonly onProductSelected;
292
+ private readonly onAddToBasket;
293
+ }
294
+
295
+ /**
296
+ * Full product detail page composition for vanilla storefronts.
297
+ *
298
+ * The component resolves a SearchObject through SearchService.Search using
299
+ * SearchQuery.ShareUrl, then renders the reusable product detail component inside
300
+ * the default page layout with navigation, basket drawer, and footer.
301
+ */
302
+ declare class OrderlyProductDetailPageElement extends OrderlyElement {
303
+ static observedAttributes: string[];
304
+ private controller?;
305
+ private currentNavigationItems?;
306
+ private currentBasketLabels?;
307
+ private currentDefaultQuery?;
308
+ private currentProduct?;
309
+ private loadedShareUrl?;
310
+ private loading;
311
+ private error;
312
+ private loadRevision;
313
+ get shareUrl(): string;
314
+ set shareUrl(value: string);
315
+ get product(): SearchObject | undefined;
316
+ set product(value: SearchObject | undefined);
317
+ get defaultQuery(): SearchQuery | undefined;
318
+ set defaultQuery(value: SearchQuery | undefined);
319
+ get shopQuery(): SearchQuery | undefined;
320
+ set shopQuery(value: SearchQuery | undefined);
321
+ get basketController(): BasketController | undefined;
322
+ set basketController(value: BasketController | undefined);
323
+ get navigationItems(): NavigationItem[];
324
+ set navigationItems(value: NavigationItem[]);
325
+ get basketLabels(): BasketLabels;
326
+ set basketLabels(value: BasketLabels);
327
+ get brandLabel(): string;
328
+ set brandLabel(value: string);
329
+ get checkoutHref(): string;
330
+ set checkoutHref(value: string);
331
+ get checkoutLabel(): string;
332
+ set checkoutLabel(value: string);
333
+ get addLabel(): string;
334
+ set addLabel(value: string);
335
+ get loadingLabel(): string;
336
+ set loadingLabel(value: string);
337
+ get notFoundLabel(): string;
338
+ set notFoundLabel(value: string);
339
+ get errorLabel(): string;
340
+ set errorLabel(value: string);
341
+ refresh(): void;
342
+ connectedCallback(): void;
343
+ disconnectedCallback(): void;
344
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
345
+ protected render(): void;
346
+ protected getDefaultBaseUrl(): string | undefined;
347
+ private configureChildren;
348
+ private applyText;
349
+ private loadProduct;
350
+ private ensureProductLoaded;
351
+ private resetProductLoad;
352
+ private statusText;
353
+ private resolvedShareUrl;
354
+ private clientOrUndefined;
355
+ private requiredElement;
356
+ private readonly onAddToBasket;
357
+ private readonly onHashChange;
358
+ }
359
+
360
+ /**
361
+ * Search-backed product grid for storefront category and collection pages.
362
+ *
363
+ * The grid accepts typed SearchQuery objects, supports simple declarative query
364
+ * markup, merges a configured default shop query, owns sorting, and handles
365
+ * ContinuationToken paging for button, manual, and dynamic/infinite modes.
366
+ */
367
+ declare class OrderlyProductGridElement extends OrderlyElement {
368
+ static observedAttributes: string[];
369
+ private currentQuery?;
370
+ private currentDefaultQuery?;
371
+ private currentProducts;
372
+ private continuation?;
373
+ private loading;
374
+ private error;
375
+ private observer?;
376
+ private totalCount;
377
+ private estimatedTotalCount?;
378
+ private controller?;
379
+ private currentSortOptions;
380
+ /**
381
+ * Paging behavior for continuation-token results.
382
+ *
383
+ * `button` renders a load-more button, `manual` exposes loadNextPage() only,
384
+ * and `dynamic`/`infinite` load the next page when the sentinel enters view.
385
+ */
386
+ paging: ProductGridPagingMode;
387
+ /**
388
+ * Tag name used when the grid creates default product tile elements.
389
+ */
390
+ productTileTagName: string;
391
+ /**
392
+ * Optional shop-wide SearchQuery scope merged into every grid request.
393
+ */
394
+ get defaultQuery(): SearchQuery | undefined;
395
+ set defaultQuery(value: SearchQuery | undefined);
396
+ /**
397
+ * Backward-compatible alias for defaultQuery.
398
+ */
399
+ get shopQuery(): SearchQuery | undefined;
400
+ set shopQuery(value: SearchQuery | undefined);
401
+ /**
402
+ * Available sort choices rendered by the grid's sort control.
403
+ */
404
+ get sortOptions(): SortOption[];
405
+ set sortOptions(value: SortOption[]);
406
+ get sortLabel(): string;
407
+ set sortLabel(value: string);
408
+ get clearSearchLabel(): string;
409
+ set clearSearchLabel(value: string);
410
+ get errorLabel(): string;
411
+ set errorLabel(value: string);
412
+ get loadingLabel(): string;
413
+ set loadingLabel(value: string);
414
+ get resultsLabel(): string;
415
+ set resultsLabel(value: string);
416
+ get searchingLabel(): string;
417
+ set searchingLabel(value: string);
418
+ /**
419
+ * Shared basket controller assigned to product tiles rendered by this grid.
420
+ */
421
+ get basketController(): BasketController | undefined;
422
+ set basketController(value: BasketController | undefined);
423
+ /**
424
+ * Typed Core SearchQuery for SearchService.Search.
425
+ *
426
+ * When omitted, the grid falls back to declarative query markup such as
427
+ * `keywords`, `tags`, `order-by`, or a direct child `<query>` element.
428
+ */
429
+ get query(): SearchQuery | undefined;
430
+ set query(value: SearchQuery | undefined);
431
+ get products(): SearchObject[];
432
+ get continuationToken(): ContinuationToken | undefined;
433
+ get hasMore(): boolean;
434
+ get state(): ProductGridState;
435
+ connectedCallback(): void;
436
+ disconnectedCallback(): void;
437
+ attributeChangedCallback(name: string): void;
438
+ /**
439
+ * Clears current results and loads the first page for the resolved query.
440
+ */
441
+ refresh(): Promise<void>;
442
+ /**
443
+ * Loads the next continuation-token page when one is available.
444
+ */
445
+ loadNextPage(): Promise<void>;
446
+ /**
447
+ * Applies an OrderBy array to a cloned query and reloads the grid.
448
+ */
449
+ setSort(orderBy: string[]): Promise<void>;
450
+ /**
451
+ * Clears the visible Query text on a cloned query and reloads the grid.
452
+ */
453
+ clearSearch(): Promise<void>;
454
+ protected render(): void;
455
+ private renderProducts;
456
+ private fetchPage;
457
+ private renderProduct;
458
+ private renderSort;
459
+ private renderContext;
460
+ private selectedSortIndex;
461
+ private resolvedQuery;
462
+ private configureSortContainer;
463
+ private configureLoadMore;
464
+ private configureInfiniteScroll;
465
+ }
466
+ declare function hasContinuationToken(token: ContinuationToken | undefined): boolean;
467
+ declare function unpackProducts(result: PageResult): SearchObject[];
468
+
469
+ declare class OrderlyProductPageElement extends OrderlyElement {
470
+ static observedAttributes: string[];
471
+ private currentProduct?;
472
+ private currentImageIndex;
473
+ private imageOverlayOpen;
474
+ basketController?: BasketController;
475
+ get product(): SearchObject | undefined;
476
+ set product(value: SearchObject | undefined);
477
+ get selectedImageIndex(): number;
478
+ set selectedImageIndex(value: number);
479
+ get addLabel(): string;
480
+ set addLabel(value: string);
481
+ attributeChangedCallback(): void;
482
+ disconnectedCallback(): void;
483
+ protected render(): void;
484
+ private selectedImage;
485
+ private normalizedImageIndex;
486
+ private selectImage;
487
+ private configureImageOverlay;
488
+ private openImageOverlay;
489
+ private closeImageOverlay;
490
+ private updateImageOverlayLock;
491
+ private renderThumbnails;
492
+ }
493
+
494
+ /**
495
+ * Horizontal product list for homepages and editorial collection sections.
496
+ *
497
+ * The rail composes an internal ProductGrid, so it supports the same typed
498
+ * SearchQuery model, default query merging, declarative query attributes, basket
499
+ * controller wiring, and template override conventions as the grid.
500
+ */
501
+ declare class OrderlyProductRailElement extends OrderlyElement {
502
+ static observedAttributes: string[];
503
+ private currentQuery?;
504
+ private currentDefaultQuery?;
505
+ private controller?;
506
+ /**
507
+ * Optional shop-wide SearchQuery scope merged into this rail's query.
508
+ *
509
+ * Use this for tenant/account filters or other default restrictions. It is
510
+ * cloned and merged by the internal product grid before SearchService.Search.
511
+ */
512
+ get defaultQuery(): SearchQuery | undefined;
513
+ set defaultQuery(value: SearchQuery | undefined);
514
+ /**
515
+ * Backward-compatible alias for defaultQuery.
516
+ */
517
+ get shopQuery(): SearchQuery | undefined;
518
+ set shopQuery(value: SearchQuery | undefined);
519
+ /**
520
+ * Typed Core SearchQuery for the rail.
521
+ *
522
+ * When omitted, the element falls back to declarative query markup such as
523
+ * `keywords`, `tags`, `order-by`, or a direct child `<query>` element.
524
+ */
525
+ get query(): SearchQuery | undefined;
526
+ set query(value: SearchQuery | undefined);
527
+ /**
528
+ * Shared basket controller passed to rendered product tiles.
529
+ */
530
+ get basketController(): BasketController | undefined;
531
+ set basketController(value: BasketController | undefined);
532
+ get title(): string;
533
+ set title(value: string);
534
+ get ctaLabel(): string;
535
+ set ctaLabel(value: string);
536
+ get ctaHref(): string;
537
+ set ctaHref(value: string);
538
+ get emptyLabel(): string;
539
+ set emptyLabel(value: string);
540
+ get loadingLabel(): string;
541
+ set loadingLabel(value: string);
542
+ get errorLabel(): string;
543
+ set errorLabel(value: string);
544
+ attributeChangedCallback(): void;
545
+ protected render(): void;
546
+ protected getDefaultBaseUrl(): string | undefined;
547
+ private createGrid;
548
+ private configureGrid;
549
+ }
550
+
551
+ declare class OrderlyProductTileElement extends OrderlyElement {
552
+ static observedAttributes: string[];
553
+ private currentProduct?;
554
+ private controller?;
555
+ private readonly onBasketChange;
556
+ get basketController(): BasketController | undefined;
557
+ set basketController(value: BasketController | undefined);
558
+ get product(): SearchObject | undefined;
559
+ set product(value: SearchObject | undefined);
560
+ get addLabel(): string;
561
+ set addLabel(value: string);
562
+ get removeLabel(): string;
563
+ set removeLabel(value: string);
564
+ connectedCallback(): void;
565
+ disconnectedCallback(): void;
566
+ attributeChangedCallback(): void;
567
+ protected render(): void;
568
+ private readonly onHostClick;
569
+ private readonly onHostKeyDown;
570
+ }
571
+ declare function bindProduct(root: ParentNode, product: SearchObject | undefined, options?: {
572
+ inBasket?: boolean;
573
+ }): void;
574
+ declare function productShareUrl(product: SearchObject | undefined): string;
575
+ declare function productShareHref(baseHref: string | null, shareUrl: string): string;
576
+ declare function compactProductShareUrl(shareUrl: string): string;
577
+
578
+ type SearchBoxMode = "textbox" | "icon";
579
+ declare class OrderlySearchBoxElement extends OrderlyElement {
580
+ static observedAttributes: string[];
581
+ grid?: OrderlyProductGridElement;
582
+ private currentQuery?;
583
+ private currentDefaultQuery?;
584
+ private controller?;
585
+ private overlayOpen;
586
+ private inputValue;
587
+ private activeSearchText;
588
+ private debounceTimer?;
589
+ private overlayPortal?;
590
+ get query(): SearchQuery | undefined;
591
+ set query(value: SearchQuery | undefined);
592
+ get defaultQuery(): SearchQuery | undefined;
593
+ set defaultQuery(value: SearchQuery | undefined);
594
+ get shopQuery(): SearchQuery | undefined;
595
+ set shopQuery(value: SearchQuery | undefined);
596
+ get basketController(): BasketController | undefined;
597
+ set basketController(value: BasketController | undefined);
598
+ get mode(): SearchBoxMode;
599
+ set mode(value: SearchBoxMode);
600
+ get placeholder(): string;
601
+ set placeholder(value: string);
602
+ get label(): string;
603
+ set label(value: string);
604
+ get closeLabel(): string;
605
+ set closeLabel(value: string);
606
+ get promptLabel(): string;
607
+ set promptLabel(value: string);
608
+ get loadingLabel(): string;
609
+ set loadingLabel(value: string);
610
+ get errorLabel(): string;
611
+ set errorLabel(value: string);
612
+ get emptyLabel(): string;
613
+ set emptyLabel(value: string);
614
+ get debounceMs(): number;
615
+ set debounceMs(value: number);
616
+ disconnectedCallback(): void;
617
+ attributeChangedCallback(name: string): void;
618
+ protected render(): void;
619
+ protected getDefaultBaseUrl(): string | undefined;
620
+ private configureSearch;
621
+ private portalOverlay;
622
+ private removeOverlayPortal;
623
+ private renderOverlayResults;
624
+ private createOverlayGrid;
625
+ private searchQuery;
626
+ private searchStatusText;
627
+ private scheduleSearch;
628
+ private commitSearch;
629
+ private clearDebounce;
630
+ private applySearch;
631
+ private openOverlay;
632
+ private closeOverlay;
633
+ private updateOverlayLock;
634
+ private focusInput;
635
+ private resolveGrid;
636
+ private forwardProductSelected;
637
+ }
638
+ declare class OrderlySortSelectElement extends OrderlyElement {
639
+ grid?: OrderlyProductGridElement;
640
+ options: SortOption[];
641
+ protected render(): void;
642
+ private resolveGrid;
643
+ }
644
+ declare class OrderlyFilterPanelElement extends OrderlyElement {
645
+ grid?: OrderlyProductGridElement;
646
+ protected render(): void;
647
+ }
648
+ declare class OrderlyLoadMoreElement extends OrderlyElement {
649
+ grid?: OrderlyProductGridElement;
650
+ protected render(): void;
651
+ private resolveGrid;
652
+ }
653
+
654
+ declare class OrderlyStoredImageElement extends OrderlyElement {
655
+ static observedAttributes: string[];
656
+ private currentImage?;
657
+ get image(): StoredImage | undefined;
658
+ set image(value: StoredImage | undefined);
659
+ get alt(): string;
660
+ set alt(value: string);
661
+ get fit(): "cover" | "contain";
662
+ set fit(value: "cover" | "contain");
663
+ get variant(): StoredImageUrlVariant;
664
+ set variant(value: StoredImageUrlVariant);
665
+ attributeChangedCallback(): void;
666
+ protected render(): void;
667
+ }
668
+ interface StoredImagePresentation {
669
+ aspectRatio?: string;
670
+ hasCrop: boolean;
671
+ left: string;
672
+ top: string;
673
+ width: string;
674
+ height: string;
675
+ objectFit: "cover" | "contain" | "fill";
676
+ transform: string;
677
+ transformOrigin: string;
678
+ }
679
+ declare function imagePresentation(image: StoredImage, options?: {
680
+ crop?: boolean;
681
+ }): StoredImagePresentation;
682
+
683
+ export { BasketController, BasketLabels, CheckoutLabels, NavigationItem, OrderlyBasketElement, OrderlyBasketIconElement, OrderlyCategoryPageElement, OrderlyCheckoutPageElement, OrderlyCollectionPageElement, OrderlyCreditElement, OrderlyElement, OrderlyFilterPanelElement, OrderlyHomePageElement, OrderlyLoadMoreElement, OrderlyProductDetailPageElement, OrderlyProductGridElement, OrderlyProductPageElement, OrderlyProductRailElement, OrderlyProductTileElement, OrderlySearchBoxElement, OrderlySortSelectElement, OrderlyStoredImageElement, ProductGridPagingMode, ProductGridState, ResolvedNavigationItem, type SearchBoxMode, SortOption, type StoredImagePresentation, StoredImageUrlVariant, bindProduct, compactProductShareUrl, hasContinuationToken, imagePresentation, productShareHref, productShareUrl, unpackProducts };