@brytdesigns/web-component-core 1.1.3 → 1.1.5
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.
- package/dist/esm/hooks/index.js +122 -3
- package/dist/esm/hooks/index.js.map +1 -1
- package/dist/esm/index.js +122 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/index.js +10 -1
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/main/hooks/index.d.ts +24 -1
- package/dist/main/hooks/index.js +3 -0
- package/dist/main/hooks/internal/types.js +3 -0
- package/dist/main/hooks/internal/types.js.map +1 -0
- package/dist/main/hooks/makePathContextHooks.js +0 -1
- package/dist/main/hooks/makePathContextHooks.js.map +1 -1
- package/dist/main/hooks/makePathDataArrayComponent.js +70 -0
- package/dist/main/hooks/makePathDataArrayComponent.js.map +1 -0
- package/dist/main/hooks/makePathDataArrayItemComponent.js +24 -0
- package/dist/main/hooks/makePathDataArrayItemComponent.js.map +1 -0
- package/dist/main/hooks/makePathDataComponent.js +36 -0
- package/dist/main/hooks/makePathDataComponent.js.map +1 -0
- package/dist/main/index.d.ts +21 -1
- package/dist/main/utils/getTemplateContent.js +11 -0
- package/dist/main/utils/getTemplateContent.js.map +1 -0
- package/dist/main/utils/index.d.ts +1 -0
- package/dist/main/utils/index.js +1 -0
- package/package.json +2 -2
package/dist/esm/hooks/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createMemo } from 'solid-js';
|
|
1
|
+
import { Show, createMemo, For } from 'solid-js';
|
|
2
2
|
import { createContext, provide, consume } from 'component-register';
|
|
3
3
|
import 'solid-js/web';
|
|
4
|
+
import html2 from 'solid-js/html';
|
|
4
5
|
|
|
5
6
|
// src/hooks/makePathContextHooks.ts
|
|
6
7
|
|
|
@@ -36,6 +37,15 @@ function formatValue(format, value) {
|
|
|
36
37
|
}
|
|
37
38
|
}
|
|
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
|
+
|
|
39
49
|
// src/hooks/makePathContextHooks.ts
|
|
40
50
|
var makeFullPropertyPathContext = () => {
|
|
41
51
|
function createFullPathPropertyContext(options) {
|
|
@@ -85,7 +95,6 @@ var makeFullPropertyPathContext = () => {
|
|
|
85
95
|
return formatValue(options.format || "", v);
|
|
86
96
|
}
|
|
87
97
|
console.warn(
|
|
88
|
-
options.element,
|
|
89
98
|
`useFormattedValue: Unsupported value type. Expected string, number, or boolean. Received: ${typeof v}.`,
|
|
90
99
|
v
|
|
91
100
|
);
|
|
@@ -100,7 +109,117 @@ var makeFullPropertyPathContext = () => {
|
|
|
100
109
|
useFormattedValue
|
|
101
110
|
};
|
|
102
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
|
+
};
|
|
103
222
|
|
|
104
|
-
export { makeFullPropertyPathContext };
|
|
223
|
+
export { makeFullPropertyPathContext, makePathDataArrayComponent, makePathDataArrayItemComponent, makePathDataComponent };
|
|
105
224
|
//# sourceMappingURL=index.js.map
|
|
106
225
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/internal/getValueFromPath.ts","../../../src/utils/formatValue.ts","../../../src/hooks/makePathContextHooks.ts"],"names":["provide","_provide","_consume"],"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","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 element: HTMLElement & ICustomElement;\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 options.element,\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"]}
|
|
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';
|
|
2
|
+
import { createMemo, onCleanup, createEffect, on, createRoot, Show, For, createSignal } from 'solid-js';
|
|
3
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 = [];
|
|
@@ -328,6 +329,15 @@ function formatValue(format, value) {
|
|
|
328
329
|
}
|
|
329
330
|
}
|
|
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
|
+
|
|
331
341
|
// src/hooks/internal/getValueFromPath.ts
|
|
332
342
|
function getValueFromPath(obj, path) {
|
|
333
343
|
return path.split(".").reduce((acc, key) => {
|
|
@@ -389,7 +399,6 @@ var makeFullPropertyPathContext = () => {
|
|
|
389
399
|
return formatValue(options.format || "", v);
|
|
390
400
|
}
|
|
391
401
|
console.warn(
|
|
392
|
-
options.element,
|
|
393
402
|
`useFormattedValue: Unsupported value type. Expected string, number, or boolean. Received: ${typeof v}.`,
|
|
394
403
|
v
|
|
395
404
|
);
|
|
@@ -404,7 +413,117 @@ var makeFullPropertyPathContext = () => {
|
|
|
404
413
|
useFormattedValue
|
|
405
414
|
};
|
|
406
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
|
+
};
|
|
407
526
|
|
|
408
|
-
export { abortablePromise, awaitAllAnimations, checkLoaded, controlsToPromise, correctElementType, createFocusTrap, createWithElementContext, customElement, customShadowlessElement, formatValue, getContextFromProvider, getTransitionConfig, invokeOnLoaded, isCustomElement, makeFullPropertyPathContext, toHyphenated };
|
|
527
|
+
export { abortablePromise, awaitAllAnimations, checkLoaded, controlsToPromise, correctElementType, createFocusTrap, createWithElementContext, customElement, customShadowlessElement, formatValue, getContextFromProvider, getTemplateContent, getTransitionConfig, invokeOnLoaded, isCustomElement, makeFullPropertyPathContext, makePathDataArrayComponent, makePathDataArrayItemComponent, makePathDataComponent, toHyphenated };
|
|
409
528
|
//# sourceMappingURL=index.js.map
|
|
410
529
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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","../../src/utils/formatValue.ts","../../src/hooks/internal/getValueFromPath.ts","../../src/hooks/makePathContextHooks.ts"],"names":["_createFocusTrap","dependencies","target","createRoot","onCleanup","provide","_provide","_consume","createMemo"],"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 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 element: HTMLElement & ICustomElement;\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 options.element,\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"]}
|
|
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"]}
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -204,6 +204,15 @@ function formatValue(format, value) {
|
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
-
|
|
207
|
+
// src/utils/getTemplateContent.ts
|
|
208
|
+
function getTemplateContent(element, state) {
|
|
209
|
+
const tmpl = element.querySelector(
|
|
210
|
+
`template[${state}]`
|
|
211
|
+
);
|
|
212
|
+
if (!tmpl) return null;
|
|
213
|
+
return tmpl.content;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
export { checkLoaded, correctElementType, createWithElementContext, customElement, customShadowlessElement, formatValue, getContextFromProvider, getTemplateContent, invokeOnLoaded, isCustomElement, toHyphenated };
|
|
208
217
|
//# sourceMappingURL=index.js.map
|
|
209
218
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../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"],"names":["dependencies","target","createRoot","onCleanup"],"mappings":"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","file":"index.js","sourcesContent":["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"]}
|
|
1
|
+
{"version":3,"sources":["../../../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"],"names":["dependencies","target","createRoot","onCleanup"],"mappings":"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","file":"index.js","sourcesContent":["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"]}
|
|
@@ -7,6 +7,10 @@ export type Path<T> = T extends readonly (infer U)[] ? `${number}` | `${number}.
|
|
|
7
7
|
[K in keyof T & (string | number)]: T[K] extends object | any[] ? `${K}` | `${K}.${Path<T[K]>}` : `${K}`;
|
|
8
8
|
}[keyof T & (string | number)] : never;
|
|
9
9
|
export type PathValue<T, P extends string> = P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? PathValue<T[Key], Rest> : Key extends `${number}` ? T extends readonly (infer U)[] ? PathValue<U, Rest> : undefined : undefined : P extends keyof T ? T[P] : P extends `${number}` ? T extends readonly (infer U)[] ? U : undefined : undefined;
|
|
10
|
+
export type CorrectComponentOptions = {
|
|
11
|
+
element: HTMLElement & ICustomElement;
|
|
12
|
+
};
|
|
13
|
+
export type CorrectComponentType<T> = (props: T, options: CorrectComponentOptions) => unknown;
|
|
10
14
|
export type Format = "currency" | "number" | "boolean" | "invert_boolean" | string;
|
|
11
15
|
export type WalkableNode = Parameters<typeof _provide>[2];
|
|
12
16
|
export declare const makeFullPropertyPathContext: <RootData = any>() => {
|
|
@@ -25,9 +29,28 @@ export declare const makeFullPropertyPathContext: <RootData = any>() => {
|
|
|
25
29
|
useFormattedValue: <P extends Path<RootData>>(options: {
|
|
26
30
|
path: Accessor<P>;
|
|
27
31
|
format?: Format;
|
|
28
|
-
element: HTMLElement & ICustomElement;
|
|
29
32
|
data: Accessor<PathValue<RootData, P>>;
|
|
30
33
|
}) => Accessor<PathValue<RootData, P>>;
|
|
31
34
|
};
|
|
35
|
+
export type ContextHooks<RootData = any> = ReturnType<typeof makeFullPropertyPathContext<RootData>>;
|
|
36
|
+
export type BaseOptions<RootData = any, Props = any> = {
|
|
37
|
+
useRootData: (element: ICustomElement & HTMLElement) => Accessor<PathValue<RootData, any>>;
|
|
38
|
+
hooks: ContextHooks<RootData>;
|
|
39
|
+
name: string;
|
|
40
|
+
Component?: CorrectComponentType<Props>;
|
|
41
|
+
};
|
|
42
|
+
export declare const makePathDataComponent: <RootData = any, Props = any>({ useRootData, hooks, name, }: BaseOptions<RootData>) => CorrectComponentType<{
|
|
43
|
+
propertyName: Path<RootData>;
|
|
44
|
+
format?: Format;
|
|
45
|
+
} & Props>;
|
|
46
|
+
export declare const makePathDataArrayComponent: <RootData = any, Props = any>({ useRootData, hooks, name, arrayItemName, }: BaseOptions<RootData> & {
|
|
47
|
+
arrayItemName: string;
|
|
48
|
+
}) => CorrectComponentType<{
|
|
49
|
+
arrayPath: Path<RootData>;
|
|
50
|
+
format?: Format;
|
|
51
|
+
} & Props>;
|
|
52
|
+
export declare const makePathDataArrayItemComponent: <RootData = any, Props extends {
|
|
53
|
+
itemIndex: Path<RootData>;
|
|
54
|
+
} = any>({ hooks, name, }: BaseOptions<RootData, Props>) => CorrectComponentType<Props>;
|
|
32
55
|
|
|
33
56
|
export {};
|
package/dist/main/hooks/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"types.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/makePathContextHooks.ts"],"names":["provide","_provide","_consume"],"mappings":";;;;;AAgBO,MAAM,8BAA8B,MAAsB;AAS/D,EAAA,SAAS,8BACP,OAC0B,EAAA;AAC1B,IAAA,OAAO,OAAQ,CAAA,IAAA;AAAA;AAGjB,EAAM,MAAA,OAAA,GAAU,cAAc,6BAA6B,CAAA;AAE3D,EAAA,SAASA,SAAQ,CAAA;AAAA,IACf,OAAA;AAAA,IACA;AAAA,GAI8B,EAAA;AAC9B,IAAA,OAAOC,OAAS,CAAA,OAAA,EAAS,EAAE,IAAA,IAAQ,OAAO,CAAA;AAAA;AAG5C,EAAA,SAAS,2BAA2B,OAAsC,EAAA;AACxE,IAAO,OAAA,OAAA;AAAA;AAGT,EAAA,SAAS,QAAQ,KAGY,EAAA;AAC3B,IAAA,MAAM,OAAU,GAAAC,OAAA,CAAS,OAAS,EAAA,KAAA,CAAM,OAAO,CAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,2BAA2B,OAAO,CAAA;AACnD,IAAA,OAAO,WAAW,MAAM;AACtB,MAAA,IAAI,OAAO,QAAa,KAAA,UAAA,IAAc,OAAO,KAAA,CAAM,SAAS,UAAY,EAAA;AACtE,QAAA,OAAO,MAAM,IAAK,EAAA;AAAA,iBAElB,OAAO,QAAA,KAAa,cACpB,OAAO,KAAA,CAAM,SAAS,UACtB,EAAA;AACA,QAAA,OAAO,QAAS,EAAA;AAAA,iBAEhB,OAAO,QAAA,KAAa,cACpB,OAAO,KAAA,CAAM,SAAS,UACtB,EAAA;AACA,QAAA,OAAO,GAAG,QAAS,EAAC,CAAI,CAAA,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAAA;AAEtC,MAAO,OAAA,EAAA;AAAA,KACR,CAAA;AAAA;AAQH,EAAA,SAAS,aACP,OACkC,EAAA;AAClC,IAAA,OAAO,WAAW,MAAM;AACtB,MAAM,MAAA,IAAA,GAAO,QAAQ,IAAK,EAAA;AAC1B,MAAA,IAAI,OAAO,OAAA,CAAQ,IAAS,KAAA,UAAA,EAAmB,OAAA,IAAA;AAC/C,MAAM,MAAA,IAAA,GAAO,QAAQ,IAAK,EAAA;AAC1B,MAAI,IAAA,CAAC,MAAa,OAAA,IAAA;AAClB,MAAM,MAAA,CAAA,GAAI,gBAAiB,CAAA,IAAA,EAAM,IAAW,CAAA;AAC5C,MAAA,IAAI,CAAM,KAAA,MAAA,IAAa,CAAM,KAAA,IAAA,EAAa,OAAA,IAAA;AAC1C,MAAO,OAAA,CAAA;AAAA,KACR,CAAA;AAAA;
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/makePathContextHooks.ts"],"names":["provide","_provide","_consume"],"mappings":";;;;;AAgBO,MAAM,8BAA8B,MAAsB;AAS/D,EAAA,SAAS,8BACP,OAC0B,EAAA;AAC1B,IAAA,OAAO,OAAQ,CAAA,IAAA;AAAA;AAGjB,EAAM,MAAA,OAAA,GAAU,cAAc,6BAA6B,CAAA;AAE3D,EAAA,SAASA,SAAQ,CAAA;AAAA,IACf,OAAA;AAAA,IACA;AAAA,GAI8B,EAAA;AAC9B,IAAA,OAAOC,OAAS,CAAA,OAAA,EAAS,EAAE,IAAA,IAAQ,OAAO,CAAA;AAAA;AAG5C,EAAA,SAAS,2BAA2B,OAAsC,EAAA;AACxE,IAAO,OAAA,OAAA;AAAA;AAGT,EAAA,SAAS,QAAQ,KAGY,EAAA;AAC3B,IAAA,MAAM,OAAU,GAAAC,OAAA,CAAS,OAAS,EAAA,KAAA,CAAM,OAAO,CAAA;AAC/C,IAAM,MAAA,QAAA,GAAW,2BAA2B,OAAO,CAAA;AACnD,IAAA,OAAO,WAAW,MAAM;AACtB,MAAA,IAAI,OAAO,QAAa,KAAA,UAAA,IAAc,OAAO,KAAA,CAAM,SAAS,UAAY,EAAA;AACtE,QAAA,OAAO,MAAM,IAAK,EAAA;AAAA,iBAElB,OAAO,QAAA,KAAa,cACpB,OAAO,KAAA,CAAM,SAAS,UACtB,EAAA;AACA,QAAA,OAAO,QAAS,EAAA;AAAA,iBAEhB,OAAO,QAAA,KAAa,cACpB,OAAO,KAAA,CAAM,SAAS,UACtB,EAAA;AACA,QAAA,OAAO,GAAG,QAAS,EAAC,CAAI,CAAA,EAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAAA;AAEtC,MAAO,OAAA,EAAA;AAAA,KACR,CAAA;AAAA;AAQH,EAAA,SAAS,aACP,OACkC,EAAA;AAClC,IAAA,OAAO,WAAW,MAAM;AACtB,MAAM,MAAA,IAAA,GAAO,QAAQ,IAAK,EAAA;AAC1B,MAAA,IAAI,OAAO,OAAA,CAAQ,IAAS,KAAA,UAAA,EAAmB,OAAA,IAAA;AAC/C,MAAM,MAAA,IAAA,GAAO,QAAQ,IAAK,EAAA;AAC1B,MAAI,IAAA,CAAC,MAAa,OAAA,IAAA;AAClB,MAAM,MAAA,CAAA,GAAI,gBAAiB,CAAA,IAAA,EAAM,IAAW,CAAA;AAC5C,MAAA,IAAI,CAAM,KAAA,MAAA,IAAa,CAAM,KAAA,IAAA,EAAa,OAAA,IAAA;AAC1C,MAAO,OAAA,CAAA;AAAA,KACR,CAAA;AAAA;AASH,EAAA,SAAS,kBACP,OACkC,EAAA;AAClC,IAAM,MAAA,KAAA,GAAQ,aAAa,EAAE,IAAA,EAAM,QAAQ,IAAM,EAAA,IAAA,EAAM,OAAQ,CAAA,IAAA,EAAM,CAAA;AAErE,IAAM,MAAA,cAAA,GAAiB,WAAW,MAAM;AACtC,MAAA,MAAM,IAAI,KAAM,EAAA;AAChB,MAAI,IAAA,CAAA,KAAM,MAAa,OAAA,IAAA;AACvB,MACE,IAAA,OAAO,MAAM,QACb,IAAA,OAAO,MAAM,QACb,IAAA,OAAO,MAAM,SACb,EAAA;AACA,QAAA,OAAO,WAAY,CAAA,OAAA,CAAQ,MAAU,IAAA,EAAA,EAAI,CAAC,CAAA;AAAA;AAE5C,MAAQ,OAAA,CAAA,IAAA;AAAA,QACN,CAAA,0FAAA,EAA6F,OAAO,CAAC,CAAA,CAAA,CAAA;AAAA,QACrG;AAAA,OACF;AACA,MAAO,OAAA,IAAA;AAAA,KACR,CAAA;AAED,IAAO,OAAA,cAAA;AAAA;AAGT,EAAO,OAAA;AAAA,aACLF,SAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF","file":"makePathContextHooks.js","sourcesContent":["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"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import './makePathContextHooks';
|
|
2
|
+
import html from 'solid-js/html';
|
|
3
|
+
import { createMemo, Show, For } from 'solid-js';
|
|
4
|
+
import { getTemplateContent } from '../utils/index.js';
|
|
5
|
+
|
|
6
|
+
const makePathDataArrayComponent = ({
|
|
7
|
+
useRootData,
|
|
8
|
+
hooks,
|
|
9
|
+
name,
|
|
10
|
+
arrayItemName
|
|
11
|
+
}) => {
|
|
12
|
+
const { usePath, provide, usePathValue } = hooks;
|
|
13
|
+
return (props, { element }) => {
|
|
14
|
+
const itemTemplate = getTemplateContent(element, "item");
|
|
15
|
+
if (!itemTemplate)
|
|
16
|
+
return console.warn(
|
|
17
|
+
`${name}: No template found with a property of 'item'.`,
|
|
18
|
+
element
|
|
19
|
+
);
|
|
20
|
+
if (!props.arrayPath)
|
|
21
|
+
return console.warn(`${name}: No array path provided.`, element);
|
|
22
|
+
const data = useRootData(element);
|
|
23
|
+
const fullPath = usePath({
|
|
24
|
+
element,
|
|
25
|
+
path: () => props.arrayPath
|
|
26
|
+
});
|
|
27
|
+
provide({
|
|
28
|
+
element,
|
|
29
|
+
path: fullPath
|
|
30
|
+
});
|
|
31
|
+
const value = usePathValue({
|
|
32
|
+
path: fullPath,
|
|
33
|
+
data
|
|
34
|
+
});
|
|
35
|
+
const arrayValue = createMemo(() => {
|
|
36
|
+
const v = value();
|
|
37
|
+
if (!v) {
|
|
38
|
+
console.warn(
|
|
39
|
+
`${name}: value is null or undefined at path ${fullPath()}`,
|
|
40
|
+
element
|
|
41
|
+
);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (!Array.isArray(v)) {
|
|
45
|
+
console.warn(
|
|
46
|
+
`${name}: value is not an array at path ${fullPath()}`,
|
|
47
|
+
element
|
|
48
|
+
);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return v;
|
|
52
|
+
});
|
|
53
|
+
element.replaceChildren(...[]);
|
|
54
|
+
return html`
|
|
55
|
+
<${Show} when=${() => arrayValue() && arrayValue().length > 0}>
|
|
56
|
+
<${For} each=${arrayValue}>
|
|
57
|
+
${(_, idx) => html`
|
|
58
|
+
<${arrayItemName} item-index=${() => `${idx()}`}>
|
|
59
|
+
${() => Array.from(itemTemplate.cloneNode(true).childNodes)}
|
|
60
|
+
</${arrayItemName}>
|
|
61
|
+
`}
|
|
62
|
+
<//>
|
|
63
|
+
<//>
|
|
64
|
+
`;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export { makePathDataArrayComponent };
|
|
69
|
+
//# sourceMappingURL=makePathDataArrayComponent.js.map
|
|
70
|
+
//# sourceMappingURL=makePathDataArrayComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/makePathDataArrayComponent.ts"],"names":[],"mappings":";;;;;AAQO,MAAM,6BAA6B,CAA8B;AAAA,EACtE,WAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAKK,KAAA;AACH,EAAA,MAAM,EAAE,OAAA,EAAS,OAAS,EAAA,YAAA,EAAiB,GAAA,KAAA;AAC3C,EAAA,OAAO,CAAC,KAAA,EAAO,EAAE,OAAA,EAAc,KAAA;AAC7B,IAAM,MAAA,YAAA,GAAe,kBAAmB,CAAA,OAAA,EAAS,MAAM,CAAA;AACvD,IAAA,IAAI,CAAC,YAAA;AACH,MAAA,OAAO,OAAQ,CAAA,IAAA;AAAA,QACb,GAAG,IAAI,CAAA,8CAAA,CAAA;AAAA,QACP;AAAA,OACF;AACF,IAAA,IAAI,CAAC,KAAM,CAAA,SAAA;AACT,MAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,CAAG,EAAA,IAAI,6BAA6B,OAAO,CAAA;AAEjE,IAAM,MAAA,IAAA,GAAO,YAAY,OAAO,CAAA;AAEhC,IAAA,MAAM,WAAW,OAAQ,CAAA;AAAA,MACvB,OAAA;AAAA,MACA,IAAA,EAAM,MAAM,KAAM,CAAA;AAAA,KACnB,CAAA;AAED,IAAQ,OAAA,CAAA;AAAA,MACN,OAAA;AAAA,MACA,IAAM,EAAA;AAAA,KACP,CAAA;AAED,IAAA,MAAM,QAAQ,YAAa,CAAA;AAAA,MACzB,IAAM,EAAA,QAAA;AAAA,MACN;AAAA,KACD,CAAA;AAED,IAAM,MAAA,UAAA,GAAa,WAAW,MAAM;AAClC,MAAA,MAAM,IAAI,KAAM,EAAA;AAEhB,MAAA,IAAI,CAAC,CAAG,EAAA;AACN,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,CAAG,EAAA,IAAI,CAAwC,qCAAA,EAAA,QAAA,EAAU,CAAA,CAAA;AAAA,UACzD;AAAA,SACF;AACA,QAAO,OAAA,IAAA;AAAA;AAGT,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,CAAC,CAAG,EAAA;AACrB,QAAQ,OAAA,CAAA,IAAA;AAAA,UACN,CAAG,EAAA,IAAI,CAAmC,gCAAA,EAAA,QAAA,EAAU,CAAA,CAAA;AAAA,UACpD;AAAA,SACF;AACA,QAAO,OAAA,IAAA;AAAA;AAGT,MAAO,OAAA,CAAA;AAAA,KACR,CAAA;AACD,IAAQ,OAAA,CAAA,eAAA,CAAgB,GAAG,EAAE,CAAA;AAE7B,IAAO,OAAA,IAAA;AAAA,OACF,EAAA,IAAI,SAAS,MAAM,UAAA,MAAgB,UAAW,EAAA,CAAG,SAAS,CAAC,CAAA;AAAA,SACzD,EAAA,GAAG,SAAS,UAAU,CAAA;AAAA,UACrB,EAAA,CAAC,GAAQ,GAA0B,KAAA,IAAA;AAAA,aAAA,EAChC,aAAa,CAAe,YAAA,EAAA,MAAM,CAAG,EAAA,GAAA,EAAK,CAAE,CAAA,CAAA;AAAA,cAC3C,EAAA,MAAM,MAAM,IAAK,CAAA,YAAA,CAAa,UAAU,IAAI,CAAA,CAAE,UAAU,CAAC;AAAA,cAAA,EACzD,aAAa,CAAA;AAAA,UAClB,CAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,GAIT;AACF","file":"makePathDataArrayComponent.js","sourcesContent":["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"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import './makePathContextHooks';
|
|
2
|
+
|
|
3
|
+
const makePathDataArrayItemComponent = ({
|
|
4
|
+
hooks,
|
|
5
|
+
name
|
|
6
|
+
}) => {
|
|
7
|
+
const { usePath, provide } = hooks;
|
|
8
|
+
return (props, { element }) => {
|
|
9
|
+
if (!props.itemIndex)
|
|
10
|
+
return console.warn(`${name}: No path attribute provided.`);
|
|
11
|
+
const fullPath = usePath({
|
|
12
|
+
path: () => props.itemIndex,
|
|
13
|
+
element
|
|
14
|
+
});
|
|
15
|
+
provide({
|
|
16
|
+
element,
|
|
17
|
+
path: fullPath
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { makePathDataArrayItemComponent };
|
|
23
|
+
//# sourceMappingURL=makePathDataArrayItemComponent.js.map
|
|
24
|
+
//# sourceMappingURL=makePathDataArrayItemComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/makePathDataArrayItemComponent.ts"],"names":[],"mappings":";;AAIO,MAAM,iCAAiC,CAG5C;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAiE,KAAA;AAC/D,EAAM,MAAA,EAAE,OAAS,EAAA,OAAA,EAAY,GAAA,KAAA;AAC7B,EAAA,OAAO,CAAC,KAAA,EAAO,EAAE,OAAA,EAAc,KAAA;AAC7B,IAAA,IAAI,CAAC,KAAM,CAAA,SAAA;AACT,MAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,CAAG,EAAA,IAAI,CAA+B,6BAAA,CAAA,CAAA;AAE5D,IAAA,MAAM,WAAW,OAAQ,CAAA;AAAA,MACvB,IAAA,EAAM,MAAM,KAAM,CAAA,SAAA;AAAA,MAClB;AAAA,KACD,CAAA;AAED,IAAQ,OAAA,CAAA;AAAA,MACN,OAAA;AAAA,MACA,IAAM,EAAA;AAAA,KACP,CAAA;AAAA,GACH;AACF","file":"makePathDataArrayItemComponent.js","sourcesContent":["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"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import html from 'solid-js/html';
|
|
2
|
+
import { Show } from 'solid-js';
|
|
3
|
+
|
|
4
|
+
const makePathDataComponent = ({
|
|
5
|
+
useRootData,
|
|
6
|
+
hooks,
|
|
7
|
+
name
|
|
8
|
+
}) => {
|
|
9
|
+
const { usePath, useFormattedValue } = hooks;
|
|
10
|
+
return (props, { element }) => {
|
|
11
|
+
if (!props.propertyName)
|
|
12
|
+
return console.warn(
|
|
13
|
+
`${name}: No property-name attribute provided.`,
|
|
14
|
+
element
|
|
15
|
+
);
|
|
16
|
+
const data = useRootData(element);
|
|
17
|
+
const fullPath = usePath({
|
|
18
|
+
element,
|
|
19
|
+
path: () => props.propertyName
|
|
20
|
+
});
|
|
21
|
+
const formattedValue = useFormattedValue({
|
|
22
|
+
get format() {
|
|
23
|
+
return props.format;
|
|
24
|
+
},
|
|
25
|
+
path: fullPath,
|
|
26
|
+
data
|
|
27
|
+
});
|
|
28
|
+
return html`
|
|
29
|
+
<${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>
|
|
30
|
+
`;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export { makePathDataComponent };
|
|
35
|
+
//# sourceMappingURL=makePathDataComponent.js.map
|
|
36
|
+
//# sourceMappingURL=makePathDataComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/makePathDataComponent.ts"],"names":[],"mappings":";;;AAOO,MAAM,wBAAwB,CAA8B;AAAA,EACjE,WAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAEK,KAAA;AACH,EAAM,MAAA,EAAE,OAAS,EAAA,iBAAA,EAAsB,GAAA,KAAA;AACvC,EAAA,OAAO,CAAC,KAAA,EAAO,EAAE,OAAA,EAAc,KAAA;AAC7B,IAAA,IAAI,CAAC,KAAM,CAAA,YAAA;AACT,MAAA,OAAO,OAAQ,CAAA,IAAA;AAAA,QACb,GAAG,IAAI,CAAA,sCAAA,CAAA;AAAA,QACP;AAAA,OACF;AACF,IAAM,MAAA,IAAA,GAAO,YAAY,OAAO,CAAA;AAChC,IAAA,MAAM,WAAW,OAAQ,CAAA;AAAA,MACvB,OAAA;AAAA,MACA,IAAA,EAAM,MAAM,KAAM,CAAA;AAAA,KACnB,CAAA;AACD,IAAA,MAAM,iBAAiB,iBAAkB,CAAA;AAAA,MACvC,IAAI,MAAS,GAAA;AACX,QAAA,OAAO,KAAM,CAAA,MAAA;AAAA,OACf;AAAA,MACA,IAAM,EAAA,QAAA;AAAA,MACN;AAAA,KACD,CAAA;AACD,IAAO,OAAA,IAAA;AAAA,OAAA,EACF,IAAI,CAAS,MAAA,EAAA,MAAM,gBAAqB,KAAA,IAAI,KAAK,cAAc,CAAA;AAAA,IAAA,CAAA;AAAA,GAEtE;AACF","file":"makePathDataComponent.js","sourcesContent":["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"]}
|
package/dist/main/index.d.ts
CHANGED
|
@@ -54,6 +54,7 @@ export declare function invokeOnLoaded(fn: () => void, { signal }: {
|
|
|
54
54
|
export declare function createWithElementContext<Context extends ReturnType<typeof createContext>, ContextState = null>(context: Context): <D extends any>(target: string | Accessor<string> | Accessor<() => Element>, dependencies: Accessor<D> | undefined, cb: (context: ContextState, dependencies: D) => void | (() => void)) => void;
|
|
55
55
|
export type Format = "currency" | "number" | "boolean" | "invert_boolean" | string;
|
|
56
56
|
export declare function formatValue(format: Format, value: unknown): any;
|
|
57
|
+
export declare function getTemplateContent(element: HTMLElement, state: string): DocumentFragment | null;
|
|
57
58
|
export type Path<T> = T extends readonly (infer U)[] ? `${number}` | `${number}.${Path<U>}` : T extends object ? {
|
|
58
59
|
[K in keyof T & (string | number)]: T[K] extends object | any[] ? `${K}` | `${K}.${Path<T[K]>}` : `${K}`;
|
|
59
60
|
}[keyof T & (string | number)] : never;
|
|
@@ -75,9 +76,28 @@ export declare const makeFullPropertyPathContext: <RootData = any>() => {
|
|
|
75
76
|
useFormattedValue: <P extends Path<RootData>>(options: {
|
|
76
77
|
path: Accessor<P>;
|
|
77
78
|
format?: Format;
|
|
78
|
-
element: HTMLElement & ICustomElement;
|
|
79
79
|
data: Accessor<PathValue<RootData, P>>;
|
|
80
80
|
}) => Accessor<PathValue<RootData, P>>;
|
|
81
81
|
};
|
|
82
|
+
export type ContextHooks<RootData = any> = ReturnType<typeof makeFullPropertyPathContext<RootData>>;
|
|
83
|
+
export type BaseOptions<RootData = any, Props = any> = {
|
|
84
|
+
useRootData: (element: ICustomElement & HTMLElement) => Accessor<PathValue<RootData, any>>;
|
|
85
|
+
hooks: ContextHooks<RootData>;
|
|
86
|
+
name: string;
|
|
87
|
+
Component?: CorrectComponentType<Props>;
|
|
88
|
+
};
|
|
89
|
+
export declare const makePathDataComponent: <RootData = any, Props = any>({ useRootData, hooks, name, }: BaseOptions<RootData>) => CorrectComponentType<{
|
|
90
|
+
propertyName: Path<RootData>;
|
|
91
|
+
format?: Format;
|
|
92
|
+
} & Props>;
|
|
93
|
+
export declare const makePathDataArrayComponent: <RootData = any, Props = any>({ useRootData, hooks, name, arrayItemName, }: BaseOptions<RootData> & {
|
|
94
|
+
arrayItemName: string;
|
|
95
|
+
}) => CorrectComponentType<{
|
|
96
|
+
arrayPath: Path<RootData>;
|
|
97
|
+
format?: Format;
|
|
98
|
+
} & Props>;
|
|
99
|
+
export declare const makePathDataArrayItemComponent: <RootData = any, Props extends {
|
|
100
|
+
itemIndex: Path<RootData>;
|
|
101
|
+
} = any>({ hooks, name, }: BaseOptions<RootData, Props>) => CorrectComponentType<Props>;
|
|
82
102
|
|
|
83
103
|
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
function getTemplateContent(element, state) {
|
|
2
|
+
const tmpl = element.querySelector(
|
|
3
|
+
`template[${state}]`
|
|
4
|
+
);
|
|
5
|
+
if (!tmpl) return null;
|
|
6
|
+
return tmpl.content;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { getTemplateContent };
|
|
10
|
+
//# sourceMappingURL=getTemplateContent.js.map
|
|
11
|
+
//# sourceMappingURL=getTemplateContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/utils/getTemplateContent.ts"],"names":[],"mappings":"AAAO,SAAS,kBAAA,CAAmB,SAAsB,KAAe,EAAA;AACtE,EAAA,MAAM,OAAO,OAAQ,CAAA,aAAA;AAAA,IACnB,YAAY,KAAK,CAAA,CAAA;AAAA,GACnB;AACA,EAAI,IAAA,CAAC,MAAa,OAAA,IAAA;AAClB,EAAA,OAAO,IAAK,CAAA,OAAA;AACd","file":"getTemplateContent.js","sourcesContent":["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"]}
|
|
@@ -24,5 +24,6 @@ export declare function invokeOnLoaded(fn: () => void, { signal }: {
|
|
|
24
24
|
export declare function createWithElementContext<Context extends ReturnType<typeof createContext>, ContextState = null>(context: Context): <D extends any>(target: string | Accessor<string> | Accessor<() => Element>, dependencies: Accessor<D> | undefined, cb: (context: ContextState, dependencies: D) => void | (() => void)) => void;
|
|
25
25
|
export type Format = "currency" | "number" | "boolean" | "invert_boolean" | string;
|
|
26
26
|
export declare function formatValue(format: Format, value: unknown): any;
|
|
27
|
+
export declare function getTemplateContent(element: HTMLElement, state: string): DocumentFragment | null;
|
|
27
28
|
|
|
28
29
|
export {};
|
package/dist/main/utils/index.js
CHANGED
|
@@ -6,5 +6,6 @@ export * from './checkLoaded.js';
|
|
|
6
6
|
export * from './invokeOnLoaded.js';
|
|
7
7
|
export * from './createWithElementContext.js';
|
|
8
8
|
export * from './formatValue.js';
|
|
9
|
+
export * from './getTemplateContent.js';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
10
11
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brytdesigns/web-component-core",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"description": "Web component core utilities for building solid based web components",
|
|
5
5
|
"main": "./dist/main/index.js",
|
|
6
6
|
"module": "./dist/main/index.js",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"author": "Bryt Designs",
|
|
40
40
|
"license": "ISC",
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"component-register": "
|
|
42
|
+
"component-register": "0.8.7",
|
|
43
43
|
"focus-trap": "^7.6.4",
|
|
44
44
|
"motion": "^12.18.1",
|
|
45
45
|
"solid-js": "^1.9.9"
|