@orderlyshop/web-components 0.1.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 (70) 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 +495 -0
  11. package/dist/browser/orderly-web-components.define.global.js +3085 -0
  12. package/dist/browser/orderly-web-components.define.global.js.map +1 -0
  13. package/dist/browser/orderly-web-components.global.js +3085 -0
  14. package/dist/browser/orderly-web-components.global.js.map +1 -0
  15. package/dist/default-shop-DWdB_MRd.d.ts +220 -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-IAQk8OmQ.d.ts +9 -0
  20. package/dist/define.d.ts +2 -0
  21. package/dist/define.js +10266 -0
  22. package/dist/define.js.map +1 -0
  23. package/dist/index.d.ts +683 -0
  24. package/dist/index.js +10589 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/navigation.d.ts +51 -0
  27. package/dist/navigation.js +818 -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-BnT1C6kG.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 +10359 -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-CCQDd6Nd.d.ts +95 -0
  47. package/docs/components/README.md +610 -0
  48. package/docs/components/product-grid.md +176 -0
  49. package/docs/components/product-rail.md +174 -0
  50. package/examples/shop/README.md +71 -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 +80 -0
  55. package/examples/shop/src/includes/body-end.html +1 -0
  56. package/examples/shop/src/includes/body-start.html +2 -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/shop-footer.html +76 -0
  62. package/examples/shop/tsconfig.json +32 -0
  63. package/examples/shop/vite.config.mjs +184 -0
  64. package/html-custom-data.json +262 -0
  65. package/package.json +118 -0
  66. package/server/README.md +111 -0
  67. package/server/apache/.htaccess +18 -0
  68. package/server/nginx/orderly-products.conf +24 -0
  69. package/server/node/product-snapshot-server.mjs +133 -0
  70. package/server/php/orderly-product.php +204 -0
@@ -0,0 +1,220 @@
1
+ import { B as BasketChangeReason, C as CheckoutProfile, a as NavigationDefinition, S as SortOption, b as CategoryUrlMode, R as ResolvedNavigationItem } from './types-CCQDd6Nd.js';
2
+ import { DraftOrder, SearchObject, DraftOrderLine, OrderlyClient, TransportMethod, ServicePointHeader, TransportMethodQuerySchema, ServicePointQuerySchema, PageResult, SearchQuery } from '@orderlyshop/core-client';
3
+ import { MessageInitShape } from '@bufbuild/protobuf';
4
+ import { BasketStore, CheckoutProfileStore } from './stores.js';
5
+
6
+ declare class BasketController extends EventTarget {
7
+ private readonly store;
8
+ private currentDraft;
9
+ constructor(store?: BasketStore);
10
+ get draft(): DraftOrder;
11
+ get count(): number;
12
+ hasProduct(product: SearchObject): boolean;
13
+ productLineIndex(product: SearchObject): number;
14
+ load(): Promise<DraftOrder>;
15
+ setDraft(draft: DraftOrder, reason?: BasketChangeReason): Promise<void>;
16
+ addProduct(product: SearchObject, quantity?: number): Promise<void>;
17
+ setQuantity(index: number, quantity: number): Promise<void>;
18
+ removeLine(index: number): Promise<void>;
19
+ removeProduct(product: SearchObject): Promise<void>;
20
+ clear(): Promise<void>;
21
+ private emitChange;
22
+ }
23
+ declare const defaultBasketController: BasketController;
24
+ declare function createBasketController(options?: {
25
+ store?: BasketStore;
26
+ draft?: DraftOrder;
27
+ }): BasketController;
28
+ declare function draftOrderItemCount(draft: DraftOrder): number;
29
+ declare function dispatchBasketDraftEvent(target: EventTarget, type: string, draft: DraftOrder, reason?: BasketChangeReason, init?: Omit<CustomEventInit<DraftOrder>, "detail">): boolean;
30
+ declare function productToDraftLine(product: SearchObject, quantity?: number): DraftOrderLine;
31
+
32
+ declare abstract class OrderlyElement extends HTMLElement {
33
+ private resolvedClient?;
34
+ private renderQueued;
35
+ private disconnectResponsiveTemplates?;
36
+ get client(): OrderlyClient | undefined;
37
+ set client(value: OrderlyClient | undefined);
38
+ get baseUrl(): string | undefined;
39
+ set baseUrl(value: string | undefined);
40
+ connectedCallback(): void;
41
+ disconnectedCallback(): void;
42
+ protected getClient(): OrderlyClient;
43
+ protected getDefaultBaseUrl(): string | undefined;
44
+ protected requestRender(): void;
45
+ protected abstract render(): void;
46
+ }
47
+
48
+ interface CheckoutLabels {
49
+ customerTitle?: string;
50
+ addressTitle?: string;
51
+ deliveryTitle?: string;
52
+ terms?: string;
53
+ termsLink?: string;
54
+ firstName?: string;
55
+ lastName?: string;
56
+ email?: string;
57
+ phoneCountry?: string;
58
+ phone?: string;
59
+ company?: string;
60
+ street?: string;
61
+ street2?: string;
62
+ zip?: string;
63
+ city?: string;
64
+ country?: string;
65
+ deliveryMethod?: string;
66
+ servicePoint?: string;
67
+ deliveryAddressPrompt?: string;
68
+ noDeliveryMethods?: string;
69
+ servicePointHelp?: string;
70
+ noServicePoints?: string;
71
+ submit?: string;
72
+ submitting?: string;
73
+ error?: string;
74
+ }
75
+ declare class OrderlyCheckoutElement extends OrderlyElement {
76
+ static observedAttributes: string[];
77
+ basketController: BasketController;
78
+ profileStore: CheckoutProfileStore;
79
+ profile?: CheckoutProfile;
80
+ deliveryMethods: TransportMethod[];
81
+ servicePoints: ServicePointHeader[];
82
+ selectedDeliveryMethod?: TransportMethod;
83
+ selectedServicePoint?: ServicePointHeader;
84
+ loading: boolean;
85
+ error?: unknown;
86
+ private labelValues;
87
+ private deliveryMethodsLoading;
88
+ private servicePointsLoading;
89
+ private deliveryRefreshTimer;
90
+ private postalCodeLookupTimer;
91
+ private postalCodeLookupSequence;
92
+ private lastAutoFilledCity;
93
+ private readonly postalCodeCityCache;
94
+ get termsHref(): string;
95
+ set termsHref(value: string);
96
+ get labels(): CheckoutLabels;
97
+ set labels(value: CheckoutLabels);
98
+ attributeChangedCallback(): void;
99
+ connectedCallback(): void;
100
+ loadProfile(): Promise<void>;
101
+ loadDeliveryMethods(query?: MessageInitShape<typeof TransportMethodQuerySchema>): Promise<TransportMethod[]>;
102
+ loadServicePoints(query?: MessageInitShape<typeof ServicePointQuerySchema>): Promise<ServicePointHeader[]>;
103
+ submit(): Promise<void>;
104
+ protected render(): void;
105
+ private resolvedLabels;
106
+ private label;
107
+ private hydrateProfile;
108
+ private renderDeliveryOptions;
109
+ private collectProfile;
110
+ private collectProfileFrom;
111
+ private configureAddressRefresh;
112
+ private schedulePostalCodeLookupIfNeeded;
113
+ private schedulePostalCodeLookup;
114
+ private lookupCityFromPostalCode;
115
+ private resolveDanishPostalCodeCity;
116
+ private scheduleDeliveryRefresh;
117
+ private refreshDeliveryOptions;
118
+ private renderDeliveryMethodCards;
119
+ private renderServicePointCards;
120
+ private selectDeliveryMethod;
121
+ private selectServicePoint;
122
+ private ensureSelectedDeliveryMethod;
123
+ private ensureSelectedServicePoint;
124
+ private selectedDeliveryMethodIndex;
125
+ private selectedServicePointIndex;
126
+ private servicePointQuery;
127
+ private verifySelectedDelivery;
128
+ private transportDetails;
129
+ }
130
+ declare function unpackTransportMethods(result: PageResult): TransportMethod[];
131
+ declare function unpackServicePointHeaders(result: PageResult): ServicePointHeader[];
132
+
133
+ type UiLanguage = "DA" | "EN";
134
+ type UiTextKey = "addressTitle" | "basketCheckoutDisabledLabel" | "basketCheckoutLabel" | "basketEmptyLabel" | "basketLabel" | "basketPanelTitle" | "categoriesLabel" | "categoryConfigurationErrorTitle" | "categoryNoConfigured" | "categoryNoDefinitions" | "categoryNoSlugMatch" | "categoryNoUrlMatch" | "checkoutAddressTitle" | "checkoutCityLabel" | "checkoutCompanyLabel" | "checkoutCountryLabel" | "checkoutCustomerTitle" | "checkoutChooseServicePointLabel" | "checkoutDeliveryMethodLabel" | "checkoutDeliveryAddressPrompt" | "checkoutDeliveryTitle" | "checkoutEmailLabel" | "checkoutErrorLabel" | "checkoutFirstNameLabel" | "checkoutFormTitle" | "checkoutLastNameLabel" | "checkoutOrderTitle" | "checkoutNoDeliveryMethodsLabel" | "checkoutNoServicePointsLabel" | "checkoutPageDescription" | "checkoutPageTitle" | "checkoutPhoneCountryLabel" | "checkoutPhoneLabel" | "checkoutServicePointLabel" | "checkoutServicePointHelpLabel" | "checkoutStreet2Label" | "checkoutStreetLabel" | "checkoutSubmitLabel" | "checkoutSubmittingLabel" | "checkoutTermsLabel" | "checkoutTermsLinkLabel" | "checkoutZipLabel" | "clearBasketLabel" | "clearSearchLabel" | "closeLabel" | "closeMenuLabel" | "collapseLabel" | "contactTitle" | "continueShoppingLabel" | "deliveryFallbackLabel" | "deliveryNote" | "emailLabel" | "emptyLabel" | "expandLabel" | "homeRailCtaLabel" | "homeTitle" | "informationLinksTitle" | "itemFallbackTitle" | "loadMoreLabel" | "loadingLabel" | "mainCategoriesLabel" | "mainNavigationLabel" | "menuLabel" | "navigationItemFallbackLabel" | "openingHoursTitle" | "phoneLabel" | "productAddLabel" | "productDetailColorLabel" | "productDetailConditionLabel" | "productDetailSizeLabel" | "productErrorLabel" | "productFallbackTitle" | "productImageLabel" | "productImageOverlayLabel" | "productLoadingLabel" | "productNotFoundLabel" | "productOpenImageLabel" | "productOpenPageLabel" | "productRemoveLabel" | "productViewLabel" | "productViewWithTitle" | "productsLabel" | "productsLoadError" | "quantityLabel" | "quantityShortLabel" | "removeLabel" | "searchLabel" | "searchPlaceholder" | "searchPromptLabel" | "searchingLabel" | "servicePointFallbackLabel" | "shippingLabel" | "shopBrandLabel" | "shopNowLabel" | "sortLabel" | "subtotalLabel" | "totalLabel" | "totalNote" | "websiteLabel";
135
+ declare function defaultUiLanguage(): UiLanguage;
136
+ declare function configureUiLanguage(language: UiLanguage | string | undefined): UiLanguage;
137
+ declare function normalizeUiLanguage(language: UiLanguage | string | undefined): UiLanguage;
138
+ declare function uiText(key: UiTextKey, language?: UiLanguage): string;
139
+ declare function formatUiText(key: UiTextKey, values: Record<string, string | number | undefined>, language?: UiLanguage): string;
140
+
141
+ declare const DEFAULT_SHOP_BASE_URL = "https://service.orderly.shop";
142
+ declare const DEFAULT_SHOP_BRAND_LABEL: string;
143
+ declare const DEFAULT_SHOP_SORT_OPTIONS: SortOption[];
144
+ declare const DEFAULT_SHOP_NAVIGATION_DEFINITIONS: NavigationDefinition[];
145
+ declare const DEFAULT_SHOP_CATEGORY_DEFINITIONS: NavigationDefinition[];
146
+ interface BasketLabels {
147
+ emptyLabel?: string;
148
+ clearLabel?: string;
149
+ continueLabel?: string;
150
+ quantityLabel?: string;
151
+ removeLabel?: string;
152
+ subtotalLabel?: string;
153
+ shippingLabel?: string;
154
+ totalLabel?: string;
155
+ totalNote?: string;
156
+ deliveryNote?: string;
157
+ }
158
+ interface DefaultShopConfig {
159
+ uiLanguage?: UiLanguage | string;
160
+ baseUrl?: string;
161
+ brandLabel?: string;
162
+ homeHref?: string;
163
+ productHref?: string;
164
+ checkoutHref?: string;
165
+ checkoutLabel?: string;
166
+ checkoutPageTitle?: string;
167
+ checkoutPageDescription?: string;
168
+ checkoutOrderTitle?: string;
169
+ checkoutTermsHref?: string;
170
+ checkoutLabels?: CheckoutLabels;
171
+ basketLabels?: BasketLabels;
172
+ searchPlaceholder?: string;
173
+ emptyLabel?: string;
174
+ /**
175
+ * User-facing navigation/category structure for default storefront pages.
176
+ */
177
+ navigationDefinitions?: NavigationDefinition[];
178
+ /**
179
+ * Backward-compatible alias for navigationDefinitions.
180
+ */
181
+ categoryDefinitions?: NavigationDefinition[];
182
+ categoryPageRoot?: string;
183
+ categoryUrlMode?: CategoryUrlMode;
184
+ /**
185
+ * Core SearchQuery merged into every default storefront search.
186
+ *
187
+ * Use this for shop-wide scope such as tenant/account filters, published-only
188
+ * filters, inventory constraints, or other hidden search restrictions. It is
189
+ * intentionally a generic SearchQuery and not account-id specific.
190
+ */
191
+ defaultQuery?: SearchQuery;
192
+ /**
193
+ * Backward-compatible alias for defaultQuery.
194
+ */
195
+ query?: SearchQuery;
196
+ sortOptions?: SortOption[];
197
+ }
198
+ declare function configureDefaultShop(config?: DefaultShopConfig): void;
199
+ declare function resetDefaultShop(): void;
200
+ declare function defaultShopUiLanguage(): UiLanguage;
201
+ declare function defaultShopBaseUrl(): string;
202
+ declare function defaultShopBrandLabel(): string;
203
+ declare function defaultShopHomeHref(): string;
204
+ declare function defaultShopProductHref(): string;
205
+ declare function defaultShopCheckoutHref(): string;
206
+ declare function defaultShopCheckoutLabel(): string;
207
+ declare function defaultShopCheckoutPageTitle(): string;
208
+ declare function defaultShopCheckoutPageDescription(): string;
209
+ declare function defaultShopCheckoutOrderTitle(): string;
210
+ declare function defaultShopCheckoutTermsHref(): string;
211
+ declare function defaultShopCheckoutLabels(): CheckoutLabels;
212
+ declare function defaultShopBasketLabels(): BasketLabels;
213
+ declare function defaultShopSearchPlaceholder(): string;
214
+ declare function defaultShopEmptyLabel(): string;
215
+ declare function defaultShopSortOptions(): SortOption[];
216
+ declare function defaultShopSearchQuery(): SearchQuery | undefined;
217
+ declare function defaultShopNavigationItems(url?: string | URL | Location): ResolvedNavigationItem[];
218
+ declare function defaultShopNavigationError(): string | undefined;
219
+
220
+ export { defaultShopProductHref as A, BasketController as B, type CheckoutLabels as C, type DefaultShopConfig as D, defaultShopSearchPlaceholder as E, defaultShopSearchQuery as F, defaultShopSortOptions as G, defaultShopUiLanguage as H, defaultUiLanguage as I, dispatchBasketDraftEvent as J, draftOrderItemCount as K, formatUiText as L, normalizeUiLanguage as M, productToDraftLine as N, OrderlyElement as O, resetDefaultShop as P, uiText as Q, unpackServicePointHeaders as R, unpackTransportMethods as S, type UiLanguage as U, type BasketLabels as a, DEFAULT_SHOP_BASE_URL as b, DEFAULT_SHOP_BRAND_LABEL as c, DEFAULT_SHOP_CATEGORY_DEFINITIONS as d, DEFAULT_SHOP_NAVIGATION_DEFINITIONS as e, DEFAULT_SHOP_SORT_OPTIONS as f, OrderlyCheckoutElement as g, type UiTextKey as h, configureDefaultShop as i, configureUiLanguage as j, createBasketController as k, defaultBasketController as l, defaultShopBaseUrl as m, defaultShopBasketLabels as n, defaultShopBrandLabel as o, defaultShopCheckoutHref as p, defaultShopCheckoutLabel as q, defaultShopCheckoutLabels as r, defaultShopCheckoutOrderTitle as s, defaultShopCheckoutPageDescription as t, defaultShopCheckoutPageTitle as u, defaultShopCheckoutTermsHref as v, defaultShopEmptyLabel as w, defaultShopHomeHref as x, defaultShopNavigationError as y, defaultShopNavigationItems as z };
@@ -0,0 +1,6 @@
1
+ import './types-CCQDd6Nd.js';
2
+ import '@orderlyshop/core-client';
3
+ export { a as BasketLabels, 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, i as configureDefaultShop, 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, P as resetDefaultShop } from './default-shop-DWdB_MRd.js';
4
+ import './query.js';
5
+ import '@bufbuild/protobuf';
6
+ import './stores.js';