@brytdesigns/web-component-core 1.1.2 → 1.1.4

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 (32) hide show
  1. package/dist/esm/hooks/index.js +225 -0
  2. package/dist/esm/hooks/index.js.map +1 -0
  3. package/dist/esm/index.js +219 -3
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/utils/index.js +30 -1
  6. package/dist/esm/utils/index.js.map +1 -1
  7. package/dist/main/hooks/index.d.ts +56 -0
  8. package/dist/main/hooks/index.js +6 -0
  9. package/dist/main/hooks/index.js.map +1 -0
  10. package/dist/main/hooks/internal/getValueFromPath.js +14 -0
  11. package/dist/main/hooks/internal/getValueFromPath.js.map +1 -0
  12. package/dist/main/hooks/internal/index.js +3 -0
  13. package/dist/main/hooks/internal/index.js.map +1 -0
  14. package/dist/main/hooks/internal/types.js +3 -0
  15. package/dist/main/hooks/internal/types.js.map +1 -0
  16. package/dist/main/hooks/makePathContextHooks.js +71 -0
  17. package/dist/main/hooks/makePathContextHooks.js.map +1 -0
  18. package/dist/main/hooks/makePathDataArrayComponent.js +70 -0
  19. package/dist/main/hooks/makePathDataArrayComponent.js.map +1 -0
  20. package/dist/main/hooks/makePathDataArrayItemComponent.js +24 -0
  21. package/dist/main/hooks/makePathDataArrayItemComponent.js.map +1 -0
  22. package/dist/main/hooks/makePathDataComponent.js +36 -0
  23. package/dist/main/hooks/makePathDataComponent.js.map +1 -0
  24. package/dist/main/index.d.ts +48 -1
  25. package/dist/main/index.js +1 -0
  26. package/dist/main/utils/formatValue.js +22 -0
  27. package/dist/main/utils/formatValue.js.map +1 -0
  28. package/dist/main/utils/getTemplateContent.js +11 -0
  29. package/dist/main/utils/getTemplateContent.js.map +1 -0
  30. package/dist/main/utils/index.d.ts +3 -0
  31. package/dist/main/utils/index.js +2 -0
  32. package/package.json +6 -2
@@ -0,0 +1,225 @@
1
+ import { Show, createMemo, For } from 'solid-js';
2
+ import { createContext, provide, consume } from 'component-register';
3
+ import 'solid-js/web';
4
+ import html2 from 'solid-js/html';
5
+
6
+ // src/hooks/makePathContextHooks.ts
7
+
8
+ // src/hooks/internal/getValueFromPath.ts
9
+ function getValueFromPath(obj, path) {
10
+ return path.split(".").reduce((acc, key) => {
11
+ if (acc === null || acc === void 0) return void 0;
12
+ const isArrayIndex = !isNaN(Number(key)) && key.trim() !== "";
13
+ if (Array.isArray(acc) && isArrayIndex) {
14
+ return acc[Number(key)];
15
+ }
16
+ return acc[key];
17
+ }, obj);
18
+ }
19
+
20
+ // src/utils/formatValue.ts
21
+ function formatValue(format, value) {
22
+ switch (format) {
23
+ case "currency":
24
+ if (typeof value === "number") return window.Shopify.formatMoney(value);
25
+ if (typeof value === "string")
26
+ return window.Shopify.formatMoney(parseFloat(value));
27
+ console.warn("formatValue: Unsupported value type for currency format.");
28
+ return window.Shopify.formatMoney(0);
29
+ case "number":
30
+ return Number(value);
31
+ case "boolean":
32
+ return Boolean(value);
33
+ case "invert_boolean":
34
+ return !Boolean(value);
35
+ default:
36
+ return value;
37
+ }
38
+ }
39
+
40
+ // src/utils/getTemplateContent.ts
41
+ function getTemplateContent(element, state) {
42
+ const tmpl = element.querySelector(
43
+ `template[${state}]`
44
+ );
45
+ if (!tmpl) return null;
46
+ return tmpl.content;
47
+ }
48
+
49
+ // src/hooks/makePathContextHooks.ts
50
+ var makeFullPropertyPathContext = () => {
51
+ function createFullPathPropertyContext(options) {
52
+ return options.path;
53
+ }
54
+ const Context = createContext(createFullPathPropertyContext);
55
+ function provide$1({
56
+ element,
57
+ path
58
+ }) {
59
+ return provide(Context, { path }, element);
60
+ }
61
+ function useFullPropertyPathContext(context) {
62
+ return context;
63
+ }
64
+ function usePath(props) {
65
+ const context = consume(Context, props.element);
66
+ const basePath = useFullPropertyPathContext(context);
67
+ return createMemo(() => {
68
+ if (typeof basePath !== "function" && typeof props.path === "function") {
69
+ return props.path();
70
+ } else if (typeof basePath === "function" && typeof props.path !== "function") {
71
+ return basePath();
72
+ } else if (typeof basePath === "function" && typeof props.path === "function") {
73
+ return `${basePath()}.${props.path()}`;
74
+ }
75
+ return "";
76
+ });
77
+ }
78
+ function usePathValue(options) {
79
+ return createMemo(() => {
80
+ const data = options.data();
81
+ if (typeof options.path !== "function") return data;
82
+ const path = options.path();
83
+ if (!path) return data;
84
+ const v = getValueFromPath(data, path);
85
+ if (v === void 0 || v === null) return null;
86
+ return v;
87
+ });
88
+ }
89
+ function useFormattedValue(options) {
90
+ const value = usePathValue({ path: options.path, data: options.data });
91
+ const formattedValue = createMemo(() => {
92
+ const v = value();
93
+ if (v === null) return null;
94
+ if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") {
95
+ return formatValue(options.format || "", v);
96
+ }
97
+ console.warn(
98
+ `useFormattedValue: Unsupported value type. Expected string, number, or boolean. Received: ${typeof v}.`,
99
+ v
100
+ );
101
+ return null;
102
+ });
103
+ return formattedValue;
104
+ }
105
+ return {
106
+ provide: provide$1,
107
+ usePath,
108
+ usePathValue,
109
+ useFormattedValue
110
+ };
111
+ };
112
+ var makePathDataComponent = ({
113
+ useRootData,
114
+ hooks,
115
+ name
116
+ }) => {
117
+ const { usePath, useFormattedValue } = hooks;
118
+ return (props, { element }) => {
119
+ if (!props.propertyName)
120
+ return console.warn(
121
+ `${name}: No property-name attribute provided.`,
122
+ element
123
+ );
124
+ const data = useRootData(element);
125
+ const fullPath = usePath({
126
+ element,
127
+ path: () => props.propertyName
128
+ });
129
+ const formattedValue = useFormattedValue({
130
+ get format() {
131
+ return props.format;
132
+ },
133
+ path: fullPath,
134
+ data
135
+ });
136
+ return html2`
137
+ <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>
138
+ `;
139
+ };
140
+ };
141
+ var makePathDataArrayComponent = ({
142
+ useRootData,
143
+ hooks,
144
+ name,
145
+ arrayItemName
146
+ }) => {
147
+ const { usePath, provide, usePathValue } = hooks;
148
+ return (props, { element }) => {
149
+ const itemTemplate = getTemplateContent(element, "item");
150
+ if (!itemTemplate)
151
+ return console.warn(
152
+ `${name}: No template found with a property of 'item'.`,
153
+ element
154
+ );
155
+ if (!props.arrayPath)
156
+ return console.warn(`${name}: No array path provided.`, element);
157
+ const data = useRootData(element);
158
+ const fullPath = usePath({
159
+ element,
160
+ path: () => props.arrayPath
161
+ });
162
+ provide({
163
+ element,
164
+ path: fullPath
165
+ });
166
+ const value = usePathValue({
167
+ path: fullPath,
168
+ data
169
+ });
170
+ const arrayValue = createMemo(() => {
171
+ const v = value();
172
+ if (!v) {
173
+ console.warn(
174
+ `${name}: value is null or undefined at path ${fullPath()}`,
175
+ element
176
+ );
177
+ return null;
178
+ }
179
+ if (!Array.isArray(v)) {
180
+ console.warn(
181
+ `${name}: value is not an array at path ${fullPath()}`,
182
+ element
183
+ );
184
+ return null;
185
+ }
186
+ return v;
187
+ });
188
+ element.replaceChildren(...[]);
189
+ return html2`
190
+ <${Show} when=${() => arrayValue() && arrayValue().length > 0}>
191
+ <${For} each=${arrayValue}>
192
+ ${(_, idx) => html2`
193
+ <${arrayItemName} item-index=${() => `${idx()}`}>
194
+ ${() => Array.from(itemTemplate.cloneNode(true).childNodes)}
195
+ </${arrayItemName}>
196
+ `}
197
+ <//>
198
+ <//>
199
+ `;
200
+ };
201
+ };
202
+
203
+ // src/hooks/makePathDataArrayItemComponent.ts
204
+ var makePathDataArrayItemComponent = ({
205
+ hooks,
206
+ name
207
+ }) => {
208
+ const { usePath, provide } = hooks;
209
+ return (props, { element }) => {
210
+ if (!props.itemIndex)
211
+ return console.warn(`${name}: No path attribute provided.`);
212
+ const fullPath = usePath({
213
+ path: () => props.itemIndex,
214
+ element
215
+ });
216
+ provide({
217
+ element,
218
+ path: fullPath
219
+ });
220
+ };
221
+ };
222
+
223
+ export { makeFullPropertyPathContext, makePathDataArrayComponent, makePathDataArrayItemComponent, makePathDataComponent };
224
+ //# sourceMappingURL=index.js.map
225
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/internal/getValueFromPath.ts","../../../src/utils/formatValue.ts","../../../src/utils/getTemplateContent.ts","../../../src/hooks/makePathContextHooks.ts","../../../src/hooks/makePathDataComponent.ts","../../../src/hooks/makePathDataArrayComponent.ts","../../../src/hooks/makePathDataArrayItemComponent.ts"],"names":["provide","_provide","_consume","html","createMemo","Show"],"mappings":"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","file":"index.js","sourcesContent":["export type Path<T> = T extends readonly (infer U)[]\n ? `${number}` | `${number}.${Path<U>}` // Allows indexing into readonly arrays\n : T extends object\n ? {\n [K in keyof T & (string | number)]: T[K] extends object | any[]\n ? `${K}` | `${K}.${Path<T[K]>}`\n : `${K}`;\n }[keyof T & (string | number)]\n : never;\n\nexport type PathValue<\n T,\n P extends string,\n> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : Key extends `${number}`\n ? T extends readonly (infer U)[]\n ? PathValue<U, Rest>\n : undefined\n : undefined\n : P extends keyof T\n ? T[P]\n : P extends `${number}`\n ? T extends readonly (infer U)[]\n ? U\n : undefined\n : undefined;\n\nexport function getValueFromPath<T, P extends Path<T>>(\n obj: T,\n path: P\n): PathValue<T, P> {\n return path.split(\".\").reduce<any>((acc, key) => {\n if (acc === null || acc === undefined) return undefined;\n\n const isArrayIndex = !isNaN(Number(key)) && key.trim() !== \"\";\n if (Array.isArray(acc) && isArrayIndex) {\n return acc[Number(key)];\n }\n\n return acc[key];\n }, obj) as PathValue<T, P>;\n}\n","export type Format =\n | \"currency\"\n | \"number\"\n | \"boolean\"\n | \"invert_boolean\"\n | string;\n\nexport function formatValue(format: Format, value: unknown) {\n switch (format) {\n case \"currency\":\n if (typeof value === \"number\") return window.Shopify.formatMoney(value);\n if (typeof value === \"string\")\n return window.Shopify.formatMoney(parseFloat(value));\n console.warn(\"formatValue: Unsupported value type for currency format.\");\n return window.Shopify.formatMoney(0);\n case \"number\":\n return Number(value);\n case \"boolean\":\n return Boolean(value);\n case \"invert_boolean\":\n return !Boolean(value);\n default:\n return value as any;\n }\n}\n\ndeclare global {\n interface Window {\n Shopify: {\n formatMoney(value: number, currency?: string): string;\n };\n }\n}\n","export function getTemplateContent(element: HTMLElement, state: string) {\n const tmpl = element.querySelector(\n `template[${state}]`,\n ) as HTMLTemplateElement;\n if (!tmpl) return null;\n return tmpl.content;\n}\n","import type { Path, PathValue } from \"./internal\";\nimport { createMemo, type Accessor } from \"solid-js\";\nimport {\n createContext,\n consume as _consume,\n provide as _provide,\n type ICustomElement,\n} from \"component-register\";\n\nimport { getValueFromPath } from \"./internal/index.js\";\nimport { formatValue, type Format } from \"../utils/index.js\";\n\ntype WalkableNode = Parameters<typeof _provide>[2];\n\nexport type { Path, PathValue };\n\nexport const makeFullPropertyPathContext = <RootData = any>() => {\n type FullPropertyPathContextType = ReturnType<\n typeof createFullPathPropertyContext\n >;\n\n type Options = {\n path: Accessor<Path<RootData>>;\n element: HTMLElement & ICustomElement;\n };\n function createFullPathPropertyContext(\n options: Options,\n ): Accessor<Path<RootData>> {\n return options.path;\n }\n\n const Context = createContext(createFullPathPropertyContext);\n\n function provide({\n element,\n path,\n }: {\n element: WalkableNode;\n path: Accessor<Path<RootData>>;\n }): FullPropertyPathContextType {\n return _provide(Context, { path }, element);\n }\n\n function useFullPropertyPathContext(context: FullPropertyPathContextType) {\n return context;\n }\n\n function usePath(props: {\n element: HTMLElement & ICustomElement;\n path?: Accessor<Path<RootData>>;\n }): Accessor<Path<RootData>> {\n const context = _consume(Context, props.element);\n const basePath = useFullPropertyPathContext(context);\n return createMemo(() => {\n if (typeof basePath !== \"function\" && typeof props.path === \"function\") {\n return props.path();\n } else if (\n typeof basePath === \"function\" &&\n typeof props.path !== \"function\"\n ) {\n return basePath();\n } else if (\n typeof basePath === \"function\" &&\n typeof props.path === \"function\"\n ) {\n return `${basePath()}.${props.path()}`;\n }\n return \"\";\n }) as Accessor<Path<RootData>>;\n }\n\n type PathValueOptions<P extends Path<RootData>> = {\n path: Accessor<P>;\n data: Accessor<PathValue<RootData, P>>;\n };\n\n function usePathValue<P extends Path<RootData>>(\n options: PathValueOptions<P>,\n ): Accessor<PathValue<RootData, P>> {\n return createMemo(() => {\n const data = options.data();\n if (typeof options.path !== \"function\") return data;\n const path = options.path();\n if (!path) return data;\n const v = getValueFromPath(data, path as any);\n if (v === undefined || v === null) return null;\n return v;\n }) as Accessor<PathValue<RootData, P>>;\n }\n\n type FormmatedValueOptions<P extends Path<RootData>> = {\n path: Accessor<P>;\n format?: Format;\n data: Accessor<PathValue<RootData, P>>;\n };\n\n function useFormattedValue<P extends Path<RootData>>(\n options: FormmatedValueOptions<P>,\n ): Accessor<PathValue<RootData, P>> {\n const value = usePathValue({ path: options.path, data: options.data });\n\n const formattedValue = createMemo(() => {\n const v = value();\n if (v === null) return null;\n if (\n typeof v === \"string\" ||\n typeof v === \"number\" ||\n typeof v === \"boolean\"\n ) {\n return formatValue(options.format || \"\", v);\n }\n console.warn(\n `useFormattedValue: Unsupported value type. Expected string, number, or boolean. Received: ${typeof v}.`,\n v,\n );\n return null;\n });\n\n return formattedValue as Accessor<PathValue<RootData, P>>;\n }\n\n return {\n provide,\n usePath,\n usePathValue,\n useFormattedValue,\n };\n};\n","import type { BaseOptions } from \"./internal/types\";\nimport type { CorrectComponentType, Format } from \"../utils/index\";\nimport type { Path } from \"./internal\";\n\nimport html from \"solid-js/html\";\nimport { Show } from \"solid-js\";\n\nexport const makePathDataComponent = <RootData = any, Props = any>({\n useRootData,\n hooks,\n name,\n}: BaseOptions<RootData>): CorrectComponentType<\n { propertyName: Path<RootData>; format?: Format } & Props\n> => {\n const { usePath, useFormattedValue } = hooks;\n return (props, { element }) => {\n if (!props.propertyName)\n return console.warn(\n `${name}: No property-name attribute provided.`,\n element,\n );\n const data = useRootData(element);\n const fullPath = usePath({\n element,\n path: () => props.propertyName,\n });\n const formattedValue = useFormattedValue({\n get format() {\n return props.format;\n },\n path: fullPath,\n data: data as any,\n });\n return html`\n <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>\n `;\n };\n};\n","import type { CorrectComponentType, Format } from \"../utils/index\";\nimport { type Path } from \"./makePathContextHooks\";\nimport type { BaseOptions } from \"./internal/types\";\n\nimport html from \"solid-js/html\";\nimport { Show, For, createMemo, type Accessor } from \"solid-js\";\nimport { getTemplateContent } from \"../utils/index.js\";\n\nexport const makePathDataArrayComponent = <RootData = any, Props = any>({\n useRootData,\n hooks,\n name,\n arrayItemName,\n}: BaseOptions<RootData> & { arrayItemName: string }): CorrectComponentType<\n {\n arrayPath: Path<RootData>;\n format?: Format;\n } & Props\n> => {\n const { usePath, provide, usePathValue } = hooks;\n return (props, { element }) => {\n const itemTemplate = getTemplateContent(element, \"item\");\n if (!itemTemplate)\n return console.warn(\n `${name}: No template found with a property of 'item'.`,\n element,\n );\n if (!props.arrayPath)\n return console.warn(`${name}: No array path provided.`, element);\n\n const data = useRootData(element);\n\n const fullPath = usePath({\n element,\n path: () => props.arrayPath,\n });\n\n provide({\n element,\n path: fullPath,\n });\n\n const value = usePathValue({\n path: fullPath,\n data: data as any,\n });\n\n const arrayValue = createMemo(() => {\n const v = value();\n\n if (!v) {\n console.warn(\n `${name}: value is null or undefined at path ${fullPath()}`,\n element,\n );\n return null;\n }\n\n if (!Array.isArray(v)) {\n console.warn(\n `${name}: value is not an array at path ${fullPath()}`,\n element,\n );\n return null;\n }\n\n return v;\n });\n element.replaceChildren(...[]);\n\n return html`\n <${Show} when=${() => arrayValue() && arrayValue()!.length > 0}>\n <${For} each=${arrayValue}>\n ${(_: any, idx: Accessor<number>) => html`\n <${arrayItemName} item-index=${() => `${idx()}`}>\n ${() => Array.from(itemTemplate.cloneNode(true).childNodes)}\n </${arrayItemName}>\n `}\n <//>\n <//>\n `;\n };\n};\n","import type { CorrectComponentType } from \"../utils/index\";\nimport { type Path } from \"./makePathContextHooks\";\nimport type { BaseOptions } from \"./internal/types\";\n\nexport const makePathDataArrayItemComponent = <\n RootData = any,\n Props extends { itemIndex: Path<RootData> } = any,\n>({\n hooks,\n name,\n}: BaseOptions<RootData, Props>): CorrectComponentType<Props> => {\n const { usePath, provide } = hooks;\n return (props, { element }) => {\n if (!props.itemIndex)\n return console.warn(`${name}: No path attribute provided.`);\n\n const fullPath = usePath({\n path: () => props.itemIndex,\n element,\n });\n\n provide({\n element,\n path: fullPath,\n });\n };\n};\n"]}
package/dist/esm/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createFocusTrap as createFocusTrap$1 } from 'focus-trap';
2
- import { createMemo, onCleanup, createEffect, on, createRoot, createSignal } from 'solid-js';
3
- import { compose, register, noShadowDOM } from 'component-register';
2
+ import { createMemo, onCleanup, createEffect, on, createRoot, Show, For, createSignal } from 'solid-js';
3
+ import { compose, register, createContext, provide, consume, noShadowDOM } from 'component-register';
4
4
  import { insert } from 'solid-js/web';
5
+ import html2 from 'solid-js/html';
5
6
 
6
7
  // src/focusTrap/index.ts
7
8
  var trapStack = [];
@@ -308,6 +309,221 @@ function createWithElementContext(context) {
308
309
  };
309
310
  }
310
311
 
311
- export { abortablePromise, awaitAllAnimations, checkLoaded, controlsToPromise, correctElementType, createFocusTrap, createWithElementContext, customElement, customShadowlessElement, getContextFromProvider, getTransitionConfig, invokeOnLoaded, isCustomElement, toHyphenated };
312
+ // src/utils/formatValue.ts
313
+ function formatValue(format, value) {
314
+ switch (format) {
315
+ case "currency":
316
+ if (typeof value === "number") return window.Shopify.formatMoney(value);
317
+ if (typeof value === "string")
318
+ return window.Shopify.formatMoney(parseFloat(value));
319
+ console.warn("formatValue: Unsupported value type for currency format.");
320
+ return window.Shopify.formatMoney(0);
321
+ case "number":
322
+ return Number(value);
323
+ case "boolean":
324
+ return Boolean(value);
325
+ case "invert_boolean":
326
+ return !Boolean(value);
327
+ default:
328
+ return value;
329
+ }
330
+ }
331
+
332
+ // src/utils/getTemplateContent.ts
333
+ function getTemplateContent(element, state) {
334
+ const tmpl = element.querySelector(
335
+ `template[${state}]`
336
+ );
337
+ if (!tmpl) return null;
338
+ return tmpl.content;
339
+ }
340
+
341
+ // src/hooks/internal/getValueFromPath.ts
342
+ function getValueFromPath(obj, path) {
343
+ return path.split(".").reduce((acc, key) => {
344
+ if (acc === null || acc === void 0) return void 0;
345
+ const isArrayIndex = !isNaN(Number(key)) && key.trim() !== "";
346
+ if (Array.isArray(acc) && isArrayIndex) {
347
+ return acc[Number(key)];
348
+ }
349
+ return acc[key];
350
+ }, obj);
351
+ }
352
+
353
+ // src/hooks/makePathContextHooks.ts
354
+ var makeFullPropertyPathContext = () => {
355
+ function createFullPathPropertyContext(options) {
356
+ return options.path;
357
+ }
358
+ const Context = createContext(createFullPathPropertyContext);
359
+ function provide$1({
360
+ element,
361
+ path
362
+ }) {
363
+ return provide(Context, { path }, element);
364
+ }
365
+ function useFullPropertyPathContext(context) {
366
+ return context;
367
+ }
368
+ function usePath(props) {
369
+ const context = consume(Context, props.element);
370
+ const basePath = useFullPropertyPathContext(context);
371
+ return createMemo(() => {
372
+ if (typeof basePath !== "function" && typeof props.path === "function") {
373
+ return props.path();
374
+ } else if (typeof basePath === "function" && typeof props.path !== "function") {
375
+ return basePath();
376
+ } else if (typeof basePath === "function" && typeof props.path === "function") {
377
+ return `${basePath()}.${props.path()}`;
378
+ }
379
+ return "";
380
+ });
381
+ }
382
+ function usePathValue(options) {
383
+ return createMemo(() => {
384
+ const data = options.data();
385
+ if (typeof options.path !== "function") return data;
386
+ const path = options.path();
387
+ if (!path) return data;
388
+ const v = getValueFromPath(data, path);
389
+ if (v === void 0 || v === null) return null;
390
+ return v;
391
+ });
392
+ }
393
+ function useFormattedValue(options) {
394
+ const value = usePathValue({ path: options.path, data: options.data });
395
+ const formattedValue = createMemo(() => {
396
+ const v = value();
397
+ if (v === null) return null;
398
+ if (typeof v === "string" || typeof v === "number" || typeof v === "boolean") {
399
+ return formatValue(options.format || "", v);
400
+ }
401
+ console.warn(
402
+ `useFormattedValue: Unsupported value type. Expected string, number, or boolean. Received: ${typeof v}.`,
403
+ v
404
+ );
405
+ return null;
406
+ });
407
+ return formattedValue;
408
+ }
409
+ return {
410
+ provide: provide$1,
411
+ usePath,
412
+ usePathValue,
413
+ useFormattedValue
414
+ };
415
+ };
416
+ var makePathDataComponent = ({
417
+ useRootData,
418
+ hooks,
419
+ name
420
+ }) => {
421
+ const { usePath, useFormattedValue } = hooks;
422
+ return (props, { element }) => {
423
+ if (!props.propertyName)
424
+ return console.warn(
425
+ `${name}: No property-name attribute provided.`,
426
+ element
427
+ );
428
+ const data = useRootData(element);
429
+ const fullPath = usePath({
430
+ element,
431
+ path: () => props.propertyName
432
+ });
433
+ const formattedValue = useFormattedValue({
434
+ get format() {
435
+ return props.format;
436
+ },
437
+ path: fullPath,
438
+ data
439
+ });
440
+ return html2`
441
+ <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>
442
+ `;
443
+ };
444
+ };
445
+ var makePathDataArrayComponent = ({
446
+ useRootData,
447
+ hooks,
448
+ name,
449
+ arrayItemName
450
+ }) => {
451
+ const { usePath, provide, usePathValue } = hooks;
452
+ return (props, { element }) => {
453
+ const itemTemplate = getTemplateContent(element, "item");
454
+ if (!itemTemplate)
455
+ return console.warn(
456
+ `${name}: No template found with a property of 'item'.`,
457
+ element
458
+ );
459
+ if (!props.arrayPath)
460
+ return console.warn(`${name}: No array path provided.`, element);
461
+ const data = useRootData(element);
462
+ const fullPath = usePath({
463
+ element,
464
+ path: () => props.arrayPath
465
+ });
466
+ provide({
467
+ element,
468
+ path: fullPath
469
+ });
470
+ const value = usePathValue({
471
+ path: fullPath,
472
+ data
473
+ });
474
+ const arrayValue = createMemo(() => {
475
+ const v = value();
476
+ if (!v) {
477
+ console.warn(
478
+ `${name}: value is null or undefined at path ${fullPath()}`,
479
+ element
480
+ );
481
+ return null;
482
+ }
483
+ if (!Array.isArray(v)) {
484
+ console.warn(
485
+ `${name}: value is not an array at path ${fullPath()}`,
486
+ element
487
+ );
488
+ return null;
489
+ }
490
+ return v;
491
+ });
492
+ element.replaceChildren(...[]);
493
+ return html2`
494
+ <${Show} when=${() => arrayValue() && arrayValue().length > 0}>
495
+ <${For} each=${arrayValue}>
496
+ ${(_, idx) => html2`
497
+ <${arrayItemName} item-index=${() => `${idx()}`}>
498
+ ${() => Array.from(itemTemplate.cloneNode(true).childNodes)}
499
+ </${arrayItemName}>
500
+ `}
501
+ <//>
502
+ <//>
503
+ `;
504
+ };
505
+ };
506
+
507
+ // src/hooks/makePathDataArrayItemComponent.ts
508
+ var makePathDataArrayItemComponent = ({
509
+ hooks,
510
+ name
511
+ }) => {
512
+ const { usePath, provide } = hooks;
513
+ return (props, { element }) => {
514
+ if (!props.itemIndex)
515
+ return console.warn(`${name}: No path attribute provided.`);
516
+ const fullPath = usePath({
517
+ path: () => props.itemIndex,
518
+ element
519
+ });
520
+ provide({
521
+ element,
522
+ path: fullPath
523
+ });
524
+ };
525
+ };
526
+
527
+ export { abortablePromise, awaitAllAnimations, checkLoaded, controlsToPromise, correctElementType, createFocusTrap, createWithElementContext, customElement, customShadowlessElement, formatValue, getContextFromProvider, getTemplateContent, getTransitionConfig, invokeOnLoaded, isCustomElement, makeFullPropertyPathContext, makePathDataArrayComponent, makePathDataArrayItemComponent, makePathDataComponent, toHyphenated };
312
528
  //# sourceMappingURL=index.js.map
313
529
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/focusTrap/index.ts","../../src/promise/abortablePromise.ts","../../src/animation/controlsToPromise.ts","../../src/animation/awaitAllAnimations.ts","../../src/animation/getTransitionConfig.ts","../../src/utils/toHyphenated.ts","../../src/utils/solid-element.ts","../../src/utils/isCustomElement.ts","../../src/utils/getContextFromProvider.ts","../../src/utils/checkLoaded.ts","../../src/utils/invokeOnLoaded.ts","../../src/utils/createWithElementContext.ts"],"names":["_createFocusTrap","dependencies","target","createRoot","onCleanup"],"mappings":"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","file":"index.js","sourcesContent":["import {\n createFocusTrap as _createFocusTrap,\n type Options,\n type FocusTrap,\n} from \"focus-trap\";\nimport { createMemo, type Accessor } from \"solid-js\";\n\nconst trapStack: Array<FocusTrap> = [];\n\nexport const createFocusTrap = (\n element: HTMLElement,\n options?: Accessor<Options>,\n) =>\n createMemo(() => {\n const o = options?.() || {\n trapStack,\n };\n if (!o.trapStack) {\n o.trapStack = trapStack;\n }\n return _createFocusTrap(element, o);\n });\n","export function abortablePromise(promise: Promise<any>, signal: AbortSignal) {\n if (signal.aborted) {\n return new Promise((_, rej) => rej(signal.reason));\n }\n\n return new Promise(async (res, rej) => {\n signal.addEventListener(\n \"abort\",\n () => {\n rej(signal.reason);\n },\n { once: true },\n );\n promise.then(res);\n });\n}\n","import type { AnimationPlaybackControlsWithThen } from \"motion\";\n\nexport async function controlsToPromise(\n controls: AnimationPlaybackControlsWithThen,\n) {\n return new Promise((resolve) => {\n controls.then(() => resolve(null));\n });\n}\n","import type { AnimationPlaybackControlsWithThen } from \"motion\";\n\nexport function awaitAllAnimations(\n promises: AnimationPlaybackControlsWithThen[],\n) {\n return new Promise((resolve, _) => {\n const results: any[] = [];\n let remaining = promises.length;\n if (remaining === 0) {\n resolve([]); // zero‐length edge case\n return;\n }\n\n function updateResults<T>(value: T, index: number) {\n results[index] = value;\n remaining -= 1;\n if (remaining === 0) {\n resolve(results);\n }\n }\n\n promises.forEach((p, i) => {\n try {\n if (p?.state === \"idle\") {\n updateResults(null, i);\n } else {\n p.then(() => {\n updateResults(null, i);\n });\n }\n } catch (e) {\n p.then(() => {\n updateResults(null, i);\n });\n }\n });\n });\n}\n","import type {\n Easing,\n Transition,\n AnimationGeneratorType,\n RepeatType,\n} from \"motion\";\n\nexport function getTransitionConfig(style: CSSStyleDeclaration) {\n const properties = {\n bounce: style.getPropertyValue(\"--motion--bounce\"),\n bounceDamping: style.getPropertyValue(\"--motion--bounce-damping\"),\n bounceStiffness: style.getPropertyValue(\"--motion--bounce-stiffness\"),\n duration: style.getPropertyValue(\"--motion--duration\"),\n damping: style.getPropertyValue(\"--motion--damping\"),\n delay: style.getPropertyValue(\"--motion--delay\"),\n ease: style.getPropertyValue(\"--motion--ease\"),\n elapsed: style.getPropertyValue(\"--motion--elapsed\"),\n mass: style.getPropertyValue(\"--motion--mass\"),\n max: style.getPropertyValue(\"--motion--max\"),\n min: style.getPropertyValue(\"--motion--min\"),\n power: style.getPropertyValue(\"--motion--power\"),\n repeat: style.getPropertyValue(\"--motion--repeat\"),\n repeatDelay: style.getPropertyValue(\"--motion--repeat-delay\"),\n repeatType: style.getPropertyValue(\"--motion--repeat-type\"),\n restDelta: style.getPropertyValue(\"--motion--rest-delta\"),\n restSpeed: style.getPropertyValue(\"--motion--rest-speed\"),\n startTime: style.getPropertyValue(\"--motion--start-time\"),\n timeConstant: style.getPropertyValue(\"--motion--time-constant\"),\n times: style.getPropertyValue(\"--motion--times\"),\n type: style.getPropertyValue(\"--motion--type\"),\n velocity: style.getPropertyValue(\"--motion--velocity\"),\n visualDuration: style.getPropertyValue(\"--motion--visual-duration\"),\n };\n return {\n bounce: properties.bounce ? parseFloat(properties.bounce) : undefined,\n bounceDamping: properties.bounceDamping\n ? parseFloat(properties.bounceDamping)\n : undefined,\n bounceStiffness: properties.bounceStiffness\n ? parseFloat(properties.bounceStiffness)\n : undefined,\n duration: properties.duration ? parseFloat(properties.duration) : undefined,\n damping: properties.damping ? parseFloat(properties.damping) : undefined,\n delay: properties.delay ? parseFloat(properties.delay) : undefined,\n ease: (properties.ease ? properties.ease : undefined) as Easing,\n elapsed: properties.elapsed ? parseFloat(properties.elapsed) : undefined,\n mass: properties.mass ? parseFloat(properties.mass) : undefined,\n max: properties.max ? parseFloat(properties.max) : undefined,\n min: properties.min ? parseFloat(properties.min) : undefined,\n power: properties.power ? parseFloat(properties.power) : undefined,\n repeat: properties.repeat ? parseInt(properties.repeat) : undefined,\n repeatDelay: properties.repeatDelay\n ? parseFloat(properties.repeatDelay)\n : undefined,\n repeatType: (properties.repeatType\n ? properties.repeatType\n : undefined) as RepeatType,\n restDelta: properties.restDelta\n ? parseFloat(properties.restDelta)\n : undefined,\n restSpeed: properties.restSpeed\n ? parseFloat(properties.restSpeed)\n : undefined,\n startTime: properties.startTime\n ? parseFloat(properties.startTime)\n : undefined,\n timeConstant: properties.timeConstant\n ? parseFloat(properties.timeConstant)\n : undefined,\n type: (properties.type\n ? properties.type\n : undefined) as AnimationGeneratorType,\n velocity: properties.velocity ? parseFloat(properties.velocity) : undefined,\n visualDuration: properties.visualDuration\n ? parseFloat(properties.visualDuration)\n : undefined,\n } satisfies Transition;\n}\n","export function toHyphenated(str: string): string {\n return str\n .replace(/([A-Z])/g, \"-$1\") // Insert hyphen before uppercase letters\n .toLowerCase(); // Convert the entire string to lowercase\n}\n","import {\n register,\n type ComponentType as mComponentType,\n type ICustomElement,\n type FunctionComponent,\n type ComponentOptions,\n noShadowDOM,\n compose,\n} from \"component-register\";\nimport { createRoot, createSignal, onCleanup } from \"solid-js\";\nimport { insert } from \"solid-js/web\";\n\nexport type ComponentType<T> = mComponentType<T>;\n\ntype CorrectComponentOptions = { element: HTMLElement & ICustomElement };\n\nexport type CorrectComponentType<T> = (\n props: T,\n options: CorrectComponentOptions,\n) => unknown;\n\nfunction createProps<T extends object>(raw: T) {\n const keys = Object.keys(raw) as (keyof T)[];\n const props = {};\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (typeof key === \"undefined\") continue;\n const [get, set] = createSignal(Reflect.get(raw, key));\n Object.defineProperty(props, key, {\n get,\n set(v) {\n set(() => v);\n },\n });\n }\n return props as T;\n}\n\nfunction lookupContext(el: ICustomElement & { _$owner?: any }) {\n if (el.assignedSlot && el.assignedSlot._$owner)\n return el.assignedSlot._$owner;\n let next: Element & { _$owner?: any } = el.parentNode;\n while (\n next &&\n !next._$owner &&\n !(\n next.assignedSlot &&\n (next.assignedSlot as Element & { _$owner?: any })._$owner\n )\n )\n next = next.parentNode as Element;\n return next && next.assignedSlot\n ? (next.assignedSlot as Element & { _$owner?: any })._$owner\n : el._$owner;\n}\n\nfunction withSolid<T extends object>(\n ComponentType: ComponentType<T>,\n): ComponentType<T> {\n return (rawProps: T, options: ComponentOptions) => {\n const { element } = options as {\n element: ICustomElement & { _$owner?: any };\n };\n return createRoot((dispose: Function) => {\n const props = createProps<T>(rawProps);\n\n element.addPropertyChangedCallback(\n (key: string, val: any) => (props[key as keyof T] = val),\n );\n element.addReleaseCallback(() => {\n element.renderRoot.textContent = \"\";\n dispose();\n });\n\n const comp = (ComponentType as FunctionComponent<T>)(props as T, options);\n return insert(element.renderRoot, comp);\n }, lookupContext(element));\n };\n}\n\nfunction withNoShadowDOM<T extends object>(\n Component: ComponentType<T> = () => {},\n) {\n return (props: T, options: ComponentOptions) => {\n noShadowDOM();\n const comp = (Component as FunctionComponent<T>)(props, options);\n return comp;\n };\n}\n\nexport function customElement<T extends object>(\n tagName: string,\n props: T,\n Component: ComponentType<T> = () => {},\n ...rest: ((C: ComponentType<T>) => ComponentType<T>)[]\n) {\n return compose(register(tagName, props), withSolid, ...rest)(Component);\n}\n\nfunction isConstructable(fn: unknown): fn is new (...args: any[]) => any {\n if (typeof fn !== \"function\") return false;\n\n try {\n Reflect.construct(String, [], fn as Function);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function customShadowlessElement<T extends object>(\n tagName: string,\n props: T,\n Component: ComponentType<T> = () => {},\n ...rest: ((C: ComponentType<T>) => ComponentType<T>)[]\n) {\n return compose(\n register(tagName, props),\n withNoShadowDOM,\n withSolid,\n ...rest,\n )((...args) => {\n onCleanup(() => {\n const [_, { element }] = args;\n element.dispatchEvent(new CustomEvent(\"bryt-designs:element-destroyed\"));\n });\n if (isConstructable(Component)) {\n return new Component(...args);\n }\n return Component(...args);\n });\n}\n\nexport const correctElementType = <T>(\n component: CorrectComponentType<T>,\n): ComponentType<T> => {\n return (props: T, options) => {\n return component(props, options as CorrectComponentOptions);\n };\n};\n","import type { ICustomElement } from \"component-register\";\nexport function isCustomElement(\n element: any,\n): element is ICustomElement & HTMLElement {\n return Reflect.has(element, \"__initialized\");\n}\n","import type { createContext } from \"component-register\";\n\nexport function getContextFromProvider<T>(\n context: ReturnType<typeof createContext>,\n element: Element,\n) {\n const ctxSymbol = Object.getOwnPropertySymbols(element).find(\n (s) => s.description === \"element-context\",\n );\n if (!ctxSymbol) {\n throw new Error(\"No context provider found for the provided element\");\n }\n // @ts-ignore\n const contexts = element[ctxSymbol];\n return contexts[context.id] as T;\n}\n","export function checkLoaded() {\n return (\n document.readyState === \"complete\" ||\n //@ts-ignore\n document.readyState === \"loaded\" ||\n document.readyState === \"interactive\"\n );\n}\n","import { checkLoaded } from \"./checkLoaded.js\";\n\nexport function invokeOnLoaded(\n fn: () => void,\n { signal }: { signal?: AbortSignal },\n) {\n if (checkLoaded()) {\n const id = setTimeout(() => fn());\n signal?.addEventListener(\"abort\", () => clearTimeout(id), {\n once: true,\n });\n return;\n }\n window.addEventListener(\"DOMContentLoaded\", fn, { signal, once: true });\n return;\n}\n","import type { createContext } from \"component-register\";\nimport { getContextFromProvider } from \"./getContextFromProvider.js\";\nimport { invokeOnLoaded } from \"./invokeOnLoaded.js\";\nimport {\n type Accessor,\n createEffect,\n createRoot,\n on,\n onCleanup,\n} from \"solid-js\";\n\n/**\n * Creates a HOF to ensure that a given callback is invoked only after the context for the element is ready.\n * */\n\nexport function createWithElementContext<\n Context extends ReturnType<typeof createContext>,\n ContextState = null,\n>(context: Context) {\n return function <D extends any>(\n target: string | Accessor<string> | Accessor<() => Element>,\n dependencies: Accessor<D> = () => null as D,\n cb: (context: ContextState, dependencies: D) => void | (() => void),\n ) {\n createEffect(\n on(\n () => {\n const t = typeof target === \"string\" ? target : target();\n return {\n target: t,\n dependencies: dependencies(),\n };\n },\n ({ target: _target, dependencies }) => {\n const controller = new AbortController();\n invokeOnLoaded(\n () => {\n let target: Element | null =\n _target instanceof Element ? _target : null;\n try {\n if (typeof _target === \"string\")\n target = document.querySelector(_target);\n else if (typeof _target === \"function\") target = _target();\n } catch (e) {\n e;\n }\n if (!target && typeof _target === \"string\")\n return console.warn(`Target element not found!`, {\n target: _target,\n });\n else if (!target)\n return console.warn(`Target element not found!`);\n\n target.addEventListener(\n \"bryt-designs:element-destroyed\",\n () => {\n controller.abort(\"Context element destroyed\");\n },\n { once: true },\n );\n\n createRoot((dispose) => {\n const c = getContextFromProvider(context, target);\n\n const unsub = cb(c as ContextState, dependencies);\n\n onCleanup(() => {\n if (typeof unsub === \"function\") unsub();\n });\n\n controller.signal.addEventListener(\"abort\", dispose, {\n once: true,\n });\n });\n },\n { signal: controller.signal },\n );\n\n // abort controller when dependencies change\n onCleanup(() => {\n controller.abort(\"Dependencies changed!\");\n });\n },\n ),\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["../../src/focusTrap/index.ts","../../src/promise/abortablePromise.ts","../../src/animation/controlsToPromise.ts","../../src/animation/awaitAllAnimations.ts","../../src/animation/getTransitionConfig.ts","../../src/utils/toHyphenated.ts","../../src/utils/solid-element.ts","../../src/utils/isCustomElement.ts","../../src/utils/getContextFromProvider.ts","../../src/utils/checkLoaded.ts","../../src/utils/invokeOnLoaded.ts","../../src/utils/createWithElementContext.ts","../../src/utils/formatValue.ts","../../src/utils/getTemplateContent.ts","../../src/hooks/internal/getValueFromPath.ts","../../src/hooks/makePathContextHooks.ts","../../src/hooks/makePathDataComponent.ts","../../src/hooks/makePathDataArrayComponent.ts","../../src/hooks/makePathDataArrayItemComponent.ts"],"names":["_createFocusTrap","dependencies","target","createRoot","onCleanup","provide","_provide","_consume","createMemo","html","Show"],"mappings":"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","file":"index.js","sourcesContent":["import {\n createFocusTrap as _createFocusTrap,\n type Options,\n type FocusTrap,\n} from \"focus-trap\";\nimport { createMemo, type Accessor } from \"solid-js\";\n\nconst trapStack: Array<FocusTrap> = [];\n\nexport const createFocusTrap = (\n element: HTMLElement,\n options?: Accessor<Options>,\n) =>\n createMemo(() => {\n const o = options?.() || {\n trapStack,\n };\n if (!o.trapStack) {\n o.trapStack = trapStack;\n }\n return _createFocusTrap(element, o);\n });\n","export function abortablePromise(promise: Promise<any>, signal: AbortSignal) {\n if (signal.aborted) {\n return new Promise((_, rej) => rej(signal.reason));\n }\n\n return new Promise(async (res, rej) => {\n signal.addEventListener(\n \"abort\",\n () => {\n rej(signal.reason);\n },\n { once: true },\n );\n promise.then(res);\n });\n}\n","import type { AnimationPlaybackControlsWithThen } from \"motion\";\n\nexport async function controlsToPromise(\n controls: AnimationPlaybackControlsWithThen,\n) {\n return new Promise((resolve) => {\n controls.then(() => resolve(null));\n });\n}\n","import type { AnimationPlaybackControlsWithThen } from \"motion\";\n\nexport function awaitAllAnimations(\n promises: AnimationPlaybackControlsWithThen[],\n) {\n return new Promise((resolve, _) => {\n const results: any[] = [];\n let remaining = promises.length;\n if (remaining === 0) {\n resolve([]); // zero‐length edge case\n return;\n }\n\n function updateResults<T>(value: T, index: number) {\n results[index] = value;\n remaining -= 1;\n if (remaining === 0) {\n resolve(results);\n }\n }\n\n promises.forEach((p, i) => {\n try {\n if (p?.state === \"idle\") {\n updateResults(null, i);\n } else {\n p.then(() => {\n updateResults(null, i);\n });\n }\n } catch (e) {\n p.then(() => {\n updateResults(null, i);\n });\n }\n });\n });\n}\n","import type {\n Easing,\n Transition,\n AnimationGeneratorType,\n RepeatType,\n} from \"motion\";\n\nexport function getTransitionConfig(style: CSSStyleDeclaration) {\n const properties = {\n bounce: style.getPropertyValue(\"--motion--bounce\"),\n bounceDamping: style.getPropertyValue(\"--motion--bounce-damping\"),\n bounceStiffness: style.getPropertyValue(\"--motion--bounce-stiffness\"),\n duration: style.getPropertyValue(\"--motion--duration\"),\n damping: style.getPropertyValue(\"--motion--damping\"),\n delay: style.getPropertyValue(\"--motion--delay\"),\n ease: style.getPropertyValue(\"--motion--ease\"),\n elapsed: style.getPropertyValue(\"--motion--elapsed\"),\n mass: style.getPropertyValue(\"--motion--mass\"),\n max: style.getPropertyValue(\"--motion--max\"),\n min: style.getPropertyValue(\"--motion--min\"),\n power: style.getPropertyValue(\"--motion--power\"),\n repeat: style.getPropertyValue(\"--motion--repeat\"),\n repeatDelay: style.getPropertyValue(\"--motion--repeat-delay\"),\n repeatType: style.getPropertyValue(\"--motion--repeat-type\"),\n restDelta: style.getPropertyValue(\"--motion--rest-delta\"),\n restSpeed: style.getPropertyValue(\"--motion--rest-speed\"),\n startTime: style.getPropertyValue(\"--motion--start-time\"),\n timeConstant: style.getPropertyValue(\"--motion--time-constant\"),\n times: style.getPropertyValue(\"--motion--times\"),\n type: style.getPropertyValue(\"--motion--type\"),\n velocity: style.getPropertyValue(\"--motion--velocity\"),\n visualDuration: style.getPropertyValue(\"--motion--visual-duration\"),\n };\n return {\n bounce: properties.bounce ? parseFloat(properties.bounce) : undefined,\n bounceDamping: properties.bounceDamping\n ? parseFloat(properties.bounceDamping)\n : undefined,\n bounceStiffness: properties.bounceStiffness\n ? parseFloat(properties.bounceStiffness)\n : undefined,\n duration: properties.duration ? parseFloat(properties.duration) : undefined,\n damping: properties.damping ? parseFloat(properties.damping) : undefined,\n delay: properties.delay ? parseFloat(properties.delay) : undefined,\n ease: (properties.ease ? properties.ease : undefined) as Easing,\n elapsed: properties.elapsed ? parseFloat(properties.elapsed) : undefined,\n mass: properties.mass ? parseFloat(properties.mass) : undefined,\n max: properties.max ? parseFloat(properties.max) : undefined,\n min: properties.min ? parseFloat(properties.min) : undefined,\n power: properties.power ? parseFloat(properties.power) : undefined,\n repeat: properties.repeat ? parseInt(properties.repeat) : undefined,\n repeatDelay: properties.repeatDelay\n ? parseFloat(properties.repeatDelay)\n : undefined,\n repeatType: (properties.repeatType\n ? properties.repeatType\n : undefined) as RepeatType,\n restDelta: properties.restDelta\n ? parseFloat(properties.restDelta)\n : undefined,\n restSpeed: properties.restSpeed\n ? parseFloat(properties.restSpeed)\n : undefined,\n startTime: properties.startTime\n ? parseFloat(properties.startTime)\n : undefined,\n timeConstant: properties.timeConstant\n ? parseFloat(properties.timeConstant)\n : undefined,\n type: (properties.type\n ? properties.type\n : undefined) as AnimationGeneratorType,\n velocity: properties.velocity ? parseFloat(properties.velocity) : undefined,\n visualDuration: properties.visualDuration\n ? parseFloat(properties.visualDuration)\n : undefined,\n } satisfies Transition;\n}\n","export function toHyphenated(str: string): string {\n return str\n .replace(/([A-Z])/g, \"-$1\") // Insert hyphen before uppercase letters\n .toLowerCase(); // Convert the entire string to lowercase\n}\n","import {\n register,\n type ComponentType as mComponentType,\n type ICustomElement,\n type FunctionComponent,\n type ComponentOptions,\n noShadowDOM,\n compose,\n} from \"component-register\";\nimport { createRoot, createSignal, onCleanup } from \"solid-js\";\nimport { insert } from \"solid-js/web\";\n\nexport type ComponentType<T> = mComponentType<T>;\n\ntype CorrectComponentOptions = { element: HTMLElement & ICustomElement };\n\nexport type CorrectComponentType<T> = (\n props: T,\n options: CorrectComponentOptions,\n) => unknown;\n\nfunction createProps<T extends object>(raw: T) {\n const keys = Object.keys(raw) as (keyof T)[];\n const props = {};\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (typeof key === \"undefined\") continue;\n const [get, set] = createSignal(Reflect.get(raw, key));\n Object.defineProperty(props, key, {\n get,\n set(v) {\n set(() => v);\n },\n });\n }\n return props as T;\n}\n\nfunction lookupContext(el: ICustomElement & { _$owner?: any }) {\n if (el.assignedSlot && el.assignedSlot._$owner)\n return el.assignedSlot._$owner;\n let next: Element & { _$owner?: any } = el.parentNode;\n while (\n next &&\n !next._$owner &&\n !(\n next.assignedSlot &&\n (next.assignedSlot as Element & { _$owner?: any })._$owner\n )\n )\n next = next.parentNode as Element;\n return next && next.assignedSlot\n ? (next.assignedSlot as Element & { _$owner?: any })._$owner\n : el._$owner;\n}\n\nfunction withSolid<T extends object>(\n ComponentType: ComponentType<T>,\n): ComponentType<T> {\n return (rawProps: T, options: ComponentOptions) => {\n const { element } = options as {\n element: ICustomElement & { _$owner?: any };\n };\n return createRoot((dispose: Function) => {\n const props = createProps<T>(rawProps);\n\n element.addPropertyChangedCallback(\n (key: string, val: any) => (props[key as keyof T] = val),\n );\n element.addReleaseCallback(() => {\n element.renderRoot.textContent = \"\";\n dispose();\n });\n\n const comp = (ComponentType as FunctionComponent<T>)(props as T, options);\n return insert(element.renderRoot, comp);\n }, lookupContext(element));\n };\n}\n\nfunction withNoShadowDOM<T extends object>(\n Component: ComponentType<T> = () => {},\n) {\n return (props: T, options: ComponentOptions) => {\n noShadowDOM();\n const comp = (Component as FunctionComponent<T>)(props, options);\n return comp;\n };\n}\n\nexport function customElement<T extends object>(\n tagName: string,\n props: T,\n Component: ComponentType<T> = () => {},\n ...rest: ((C: ComponentType<T>) => ComponentType<T>)[]\n) {\n return compose(register(tagName, props), withSolid, ...rest)(Component);\n}\n\nfunction isConstructable(fn: unknown): fn is new (...args: any[]) => any {\n if (typeof fn !== \"function\") return false;\n\n try {\n Reflect.construct(String, [], fn as Function);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function customShadowlessElement<T extends object>(\n tagName: string,\n props: T,\n Component: ComponentType<T> = () => {},\n ...rest: ((C: ComponentType<T>) => ComponentType<T>)[]\n) {\n return compose(\n register(tagName, props),\n withNoShadowDOM,\n withSolid,\n ...rest,\n )((...args) => {\n onCleanup(() => {\n const [_, { element }] = args;\n element.dispatchEvent(new CustomEvent(\"bryt-designs:element-destroyed\"));\n });\n if (isConstructable(Component)) {\n return new Component(...args);\n }\n return Component(...args);\n });\n}\n\nexport const correctElementType = <T>(\n component: CorrectComponentType<T>,\n): ComponentType<T> => {\n return (props: T, options) => {\n return component(props, options as CorrectComponentOptions);\n };\n};\n","import type { ICustomElement } from \"component-register\";\nexport function isCustomElement(\n element: any,\n): element is ICustomElement & HTMLElement {\n return Reflect.has(element, \"__initialized\");\n}\n","import type { createContext } from \"component-register\";\n\nexport function getContextFromProvider<T>(\n context: ReturnType<typeof createContext>,\n element: Element,\n) {\n const ctxSymbol = Object.getOwnPropertySymbols(element).find(\n (s) => s.description === \"element-context\",\n );\n if (!ctxSymbol) {\n throw new Error(\"No context provider found for the provided element\");\n }\n // @ts-ignore\n const contexts = element[ctxSymbol];\n return contexts[context.id] as T;\n}\n","export function checkLoaded() {\n return (\n document.readyState === \"complete\" ||\n //@ts-ignore\n document.readyState === \"loaded\" ||\n document.readyState === \"interactive\"\n );\n}\n","import { checkLoaded } from \"./checkLoaded.js\";\n\nexport function invokeOnLoaded(\n fn: () => void,\n { signal }: { signal?: AbortSignal },\n) {\n if (checkLoaded()) {\n const id = setTimeout(() => fn());\n signal?.addEventListener(\"abort\", () => clearTimeout(id), {\n once: true,\n });\n return;\n }\n window.addEventListener(\"DOMContentLoaded\", fn, { signal, once: true });\n return;\n}\n","import type { createContext } from \"component-register\";\nimport { getContextFromProvider } from \"./getContextFromProvider.js\";\nimport { invokeOnLoaded } from \"./invokeOnLoaded.js\";\nimport {\n type Accessor,\n createEffect,\n createRoot,\n on,\n onCleanup,\n} from \"solid-js\";\n\n/**\n * Creates a HOF to ensure that a given callback is invoked only after the context for the element is ready.\n * */\n\nexport function createWithElementContext<\n Context extends ReturnType<typeof createContext>,\n ContextState = null,\n>(context: Context) {\n return function <D extends any>(\n target: string | Accessor<string> | Accessor<() => Element>,\n dependencies: Accessor<D> = () => null as D,\n cb: (context: ContextState, dependencies: D) => void | (() => void),\n ) {\n createEffect(\n on(\n () => {\n const t = typeof target === \"string\" ? target : target();\n return {\n target: t,\n dependencies: dependencies(),\n };\n },\n ({ target: _target, dependencies }) => {\n const controller = new AbortController();\n invokeOnLoaded(\n () => {\n let target: Element | null =\n _target instanceof Element ? _target : null;\n try {\n if (typeof _target === \"string\")\n target = document.querySelector(_target);\n else if (typeof _target === \"function\") target = _target();\n } catch (e) {\n e;\n }\n if (!target && typeof _target === \"string\")\n return console.warn(`Target element not found!`, {\n target: _target,\n });\n else if (!target)\n return console.warn(`Target element not found!`);\n\n target.addEventListener(\n \"bryt-designs:element-destroyed\",\n () => {\n controller.abort(\"Context element destroyed\");\n },\n { once: true },\n );\n\n createRoot((dispose) => {\n const c = getContextFromProvider(context, target);\n\n const unsub = cb(c as ContextState, dependencies);\n\n onCleanup(() => {\n if (typeof unsub === \"function\") unsub();\n });\n\n controller.signal.addEventListener(\"abort\", dispose, {\n once: true,\n });\n });\n },\n { signal: controller.signal },\n );\n\n // abort controller when dependencies change\n onCleanup(() => {\n controller.abort(\"Dependencies changed!\");\n });\n },\n ),\n );\n };\n}\n","export type Format =\n | \"currency\"\n | \"number\"\n | \"boolean\"\n | \"invert_boolean\"\n | string;\n\nexport function formatValue(format: Format, value: unknown) {\n switch (format) {\n case \"currency\":\n if (typeof value === \"number\") return window.Shopify.formatMoney(value);\n if (typeof value === \"string\")\n return window.Shopify.formatMoney(parseFloat(value));\n console.warn(\"formatValue: Unsupported value type for currency format.\");\n return window.Shopify.formatMoney(0);\n case \"number\":\n return Number(value);\n case \"boolean\":\n return Boolean(value);\n case \"invert_boolean\":\n return !Boolean(value);\n default:\n return value as any;\n }\n}\n\ndeclare global {\n interface Window {\n Shopify: {\n formatMoney(value: number, currency?: string): string;\n };\n }\n}\n","export function getTemplateContent(element: HTMLElement, state: string) {\n const tmpl = element.querySelector(\n `template[${state}]`,\n ) as HTMLTemplateElement;\n if (!tmpl) return null;\n return tmpl.content;\n}\n","export type Path<T> = T extends readonly (infer U)[]\n ? `${number}` | `${number}.${Path<U>}` // Allows indexing into readonly arrays\n : T extends object\n ? {\n [K in keyof T & (string | number)]: T[K] extends object | any[]\n ? `${K}` | `${K}.${Path<T[K]>}`\n : `${K}`;\n }[keyof T & (string | number)]\n : never;\n\nexport type PathValue<\n T,\n P extends string,\n> = P extends `${infer Key}.${infer Rest}`\n ? Key extends keyof T\n ? PathValue<T[Key], Rest>\n : Key extends `${number}`\n ? T extends readonly (infer U)[]\n ? PathValue<U, Rest>\n : undefined\n : undefined\n : P extends keyof T\n ? T[P]\n : P extends `${number}`\n ? T extends readonly (infer U)[]\n ? U\n : undefined\n : undefined;\n\nexport function getValueFromPath<T, P extends Path<T>>(\n obj: T,\n path: P\n): PathValue<T, P> {\n return path.split(\".\").reduce<any>((acc, key) => {\n if (acc === null || acc === undefined) return undefined;\n\n const isArrayIndex = !isNaN(Number(key)) && key.trim() !== \"\";\n if (Array.isArray(acc) && isArrayIndex) {\n return acc[Number(key)];\n }\n\n return acc[key];\n }, obj) as PathValue<T, P>;\n}\n","import type { Path, PathValue } from \"./internal\";\nimport { createMemo, type Accessor } from \"solid-js\";\nimport {\n createContext,\n consume as _consume,\n provide as _provide,\n type ICustomElement,\n} from \"component-register\";\n\nimport { getValueFromPath } from \"./internal/index.js\";\nimport { formatValue, type Format } from \"../utils/index.js\";\n\ntype WalkableNode = Parameters<typeof _provide>[2];\n\nexport type { Path, PathValue };\n\nexport const makeFullPropertyPathContext = <RootData = any>() => {\n type FullPropertyPathContextType = ReturnType<\n typeof createFullPathPropertyContext\n >;\n\n type Options = {\n path: Accessor<Path<RootData>>;\n element: HTMLElement & ICustomElement;\n };\n function createFullPathPropertyContext(\n options: Options,\n ): Accessor<Path<RootData>> {\n return options.path;\n }\n\n const Context = createContext(createFullPathPropertyContext);\n\n function provide({\n element,\n path,\n }: {\n element: WalkableNode;\n path: Accessor<Path<RootData>>;\n }): FullPropertyPathContextType {\n return _provide(Context, { path }, element);\n }\n\n function useFullPropertyPathContext(context: FullPropertyPathContextType) {\n return context;\n }\n\n function usePath(props: {\n element: HTMLElement & ICustomElement;\n path?: Accessor<Path<RootData>>;\n }): Accessor<Path<RootData>> {\n const context = _consume(Context, props.element);\n const basePath = useFullPropertyPathContext(context);\n return createMemo(() => {\n if (typeof basePath !== \"function\" && typeof props.path === \"function\") {\n return props.path();\n } else if (\n typeof basePath === \"function\" &&\n typeof props.path !== \"function\"\n ) {\n return basePath();\n } else if (\n typeof basePath === \"function\" &&\n typeof props.path === \"function\"\n ) {\n return `${basePath()}.${props.path()}`;\n }\n return \"\";\n }) as Accessor<Path<RootData>>;\n }\n\n type PathValueOptions<P extends Path<RootData>> = {\n path: Accessor<P>;\n data: Accessor<PathValue<RootData, P>>;\n };\n\n function usePathValue<P extends Path<RootData>>(\n options: PathValueOptions<P>,\n ): Accessor<PathValue<RootData, P>> {\n return createMemo(() => {\n const data = options.data();\n if (typeof options.path !== \"function\") return data;\n const path = options.path();\n if (!path) return data;\n const v = getValueFromPath(data, path as any);\n if (v === undefined || v === null) return null;\n return v;\n }) as Accessor<PathValue<RootData, P>>;\n }\n\n type FormmatedValueOptions<P extends Path<RootData>> = {\n path: Accessor<P>;\n format?: Format;\n data: Accessor<PathValue<RootData, P>>;\n };\n\n function useFormattedValue<P extends Path<RootData>>(\n options: FormmatedValueOptions<P>,\n ): Accessor<PathValue<RootData, P>> {\n const value = usePathValue({ path: options.path, data: options.data });\n\n const formattedValue = createMemo(() => {\n const v = value();\n if (v === null) return null;\n if (\n typeof v === \"string\" ||\n typeof v === \"number\" ||\n typeof v === \"boolean\"\n ) {\n return formatValue(options.format || \"\", v);\n }\n console.warn(\n `useFormattedValue: Unsupported value type. Expected string, number, or boolean. Received: ${typeof v}.`,\n v,\n );\n return null;\n });\n\n return formattedValue as Accessor<PathValue<RootData, P>>;\n }\n\n return {\n provide,\n usePath,\n usePathValue,\n useFormattedValue,\n };\n};\n","import type { BaseOptions } from \"./internal/types\";\nimport type { CorrectComponentType, Format } from \"../utils/index\";\nimport type { Path } from \"./internal\";\n\nimport html from \"solid-js/html\";\nimport { Show } from \"solid-js\";\n\nexport const makePathDataComponent = <RootData = any, Props = any>({\n useRootData,\n hooks,\n name,\n}: BaseOptions<RootData>): CorrectComponentType<\n { propertyName: Path<RootData>; format?: Format } & Props\n> => {\n const { usePath, useFormattedValue } = hooks;\n return (props, { element }) => {\n if (!props.propertyName)\n return console.warn(\n `${name}: No property-name attribute provided.`,\n element,\n );\n const data = useRootData(element);\n const fullPath = usePath({\n element,\n path: () => props.propertyName,\n });\n const formattedValue = useFormattedValue({\n get format() {\n return props.format;\n },\n path: fullPath,\n data: data as any,\n });\n return html`\n <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>\n `;\n };\n};\n","import type { CorrectComponentType, Format } from \"../utils/index\";\nimport { type Path } from \"./makePathContextHooks\";\nimport type { BaseOptions } from \"./internal/types\";\n\nimport html from \"solid-js/html\";\nimport { Show, For, createMemo, type Accessor } from \"solid-js\";\nimport { getTemplateContent } from \"../utils/index.js\";\n\nexport const makePathDataArrayComponent = <RootData = any, Props = any>({\n useRootData,\n hooks,\n name,\n arrayItemName,\n}: BaseOptions<RootData> & { arrayItemName: string }): CorrectComponentType<\n {\n arrayPath: Path<RootData>;\n format?: Format;\n } & Props\n> => {\n const { usePath, provide, usePathValue } = hooks;\n return (props, { element }) => {\n const itemTemplate = getTemplateContent(element, \"item\");\n if (!itemTemplate)\n return console.warn(\n `${name}: No template found with a property of 'item'.`,\n element,\n );\n if (!props.arrayPath)\n return console.warn(`${name}: No array path provided.`, element);\n\n const data = useRootData(element);\n\n const fullPath = usePath({\n element,\n path: () => props.arrayPath,\n });\n\n provide({\n element,\n path: fullPath,\n });\n\n const value = usePathValue({\n path: fullPath,\n data: data as any,\n });\n\n const arrayValue = createMemo(() => {\n const v = value();\n\n if (!v) {\n console.warn(\n `${name}: value is null or undefined at path ${fullPath()}`,\n element,\n );\n return null;\n }\n\n if (!Array.isArray(v)) {\n console.warn(\n `${name}: value is not an array at path ${fullPath()}`,\n element,\n );\n return null;\n }\n\n return v;\n });\n element.replaceChildren(...[]);\n\n return html`\n <${Show} when=${() => arrayValue() && arrayValue()!.length > 0}>\n <${For} each=${arrayValue}>\n ${(_: any, idx: Accessor<number>) => html`\n <${arrayItemName} item-index=${() => `${idx()}`}>\n ${() => Array.from(itemTemplate.cloneNode(true).childNodes)}\n </${arrayItemName}>\n `}\n <//>\n <//>\n `;\n };\n};\n","import type { CorrectComponentType } from \"../utils/index\";\nimport { type Path } from \"./makePathContextHooks\";\nimport type { BaseOptions } from \"./internal/types\";\n\nexport const makePathDataArrayItemComponent = <\n RootData = any,\n Props extends { itemIndex: Path<RootData> } = any,\n>({\n hooks,\n name,\n}: BaseOptions<RootData, Props>): CorrectComponentType<Props> => {\n const { usePath, provide } = hooks;\n return (props, { element }) => {\n if (!props.itemIndex)\n return console.warn(`${name}: No path attribute provided.`);\n\n const fullPath = usePath({\n path: () => props.itemIndex,\n element,\n });\n\n provide({\n element,\n path: fullPath,\n });\n };\n};\n"]}