@brytdesigns/shopify-ajax-cart-components 3.3.1 → 3.3.3

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.
@@ -0,0 +1,883 @@
1
+ import { createWithElementContext, customShadowlessElement, correctElementType } from '@brytdesigns/web-component-core/utils';
2
+ import { splitProps, createEffect, Show, createMemo, For, mapArray, on, onCleanup } from 'solid-js';
3
+ import AjaxCart from '@brytdesigns/shopify-ajax-cart';
4
+ import { createContext, provide, consume } from 'component-register';
5
+ import { makeFullPropertyPathContext } from '@brytdesigns/web-component-core';
6
+ import html2 from 'solid-js/html';
7
+ import debounce from 'lodash.debounce';
8
+
9
+ var __defProp = Object.defineProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+
15
+ // src/components/cart-context.ts
16
+ var cart_context_exports = {};
17
+ __export(cart_context_exports, {
18
+ Component: () => Component,
19
+ Name: () => Name
20
+ });
21
+ var AjaxCartContext = createContext(() => () => AjaxCart.data);
22
+ var provideAjaxCartContext = (element) => {
23
+ return provide(AjaxCartContext, {}, element);
24
+ };
25
+ var useAjaxCartContext = (context) => {
26
+ return context;
27
+ };
28
+ var useAjaxCart = (element) => {
29
+ const context = consume(AjaxCartContext, element);
30
+ if (!context) {
31
+ throw console.error(
32
+ "CartContext not found! Please ensure to wrap your custom element with cart-context element."
33
+ );
34
+ }
35
+ return useAjaxCartContext(context);
36
+ };
37
+
38
+ // src/utils/getValueFromPath.ts
39
+ function getValueFromPath(obj, path) {
40
+ return path.split(".").reduce((acc, key) => {
41
+ if (acc === null || acc === void 0) return void 0;
42
+ const isArrayIndex = !isNaN(Number(key)) && key.trim() !== "";
43
+ if (Array.isArray(acc) && isArrayIndex) {
44
+ return acc[Number(key)];
45
+ }
46
+ return acc[key];
47
+ }, obj);
48
+ }
49
+
50
+ // src/utils/formatValue.ts
51
+ function formatValue(format, value) {
52
+ switch (format) {
53
+ case "currency":
54
+ if (typeof value === "number") return window.Shopify.formatMoney(value);
55
+ if (typeof value === "string")
56
+ return window.Shopify.formatMoney(parseFloat(value));
57
+ console.warn("formatValue: Unsupported value type for currency format.");
58
+ return window.Shopify.formatMoney(0);
59
+ case "number":
60
+ return Number(value);
61
+ case "boolean":
62
+ return Boolean(value);
63
+ case "invert_boolean":
64
+ return !Boolean(value);
65
+ default:
66
+ return value;
67
+ }
68
+ }
69
+
70
+ // src/utils/getTemplateContent.ts
71
+ function getTemplateContent(element, state) {
72
+ const tmpl = element.querySelector(
73
+ `template[${state}]`
74
+ );
75
+ if (!tmpl) return null;
76
+ return tmpl.content;
77
+ }
78
+
79
+ // src/utils/getTargetElement.ts
80
+ function getTargetElement(rootElement, target) {
81
+ if (!target) return rootElement;
82
+ const t = rootElement.querySelector(target);
83
+ if (!t) {
84
+ console.error(`target element not found: ${target}`);
85
+ return null;
86
+ }
87
+ return t;
88
+ }
89
+
90
+ // src/utils/parseNestedObject.ts
91
+ function parseNestedObject(data) {
92
+ const result = {};
93
+ for (const key in data) {
94
+ const value = data[key];
95
+ const parts = key.match(/(\w+|\[\d+\])/g);
96
+ if (!parts) continue;
97
+ let current = result;
98
+ for (let i = 0; i < parts.length; i++) {
99
+ let part = parts[i];
100
+ let nextPart = parts[i + 1];
101
+ if (!part) continue;
102
+ if (part.startsWith("[")) {
103
+ part = parseInt(part.slice(1, -1), 10);
104
+ }
105
+ if (i === parts.length - 1) {
106
+ current[part] = value;
107
+ } else {
108
+ if (typeof parts[i + 1] === "number" || nextPart && nextPart.startsWith("[")) {
109
+ current[part] = current[part] || [];
110
+ } else {
111
+ current[part] = current[part] || {};
112
+ }
113
+ current = current[part];
114
+ }
115
+ }
116
+ }
117
+ return result;
118
+ }
119
+
120
+ // src/utils/traverseObject.ts
121
+ function traverseObject(obj, callback, path = []) {
122
+ if (typeof obj !== "object" || obj === null) return;
123
+ if (Array.isArray(obj)) {
124
+ obj.forEach((item, index) => {
125
+ traverseObject(item, callback, [...path, index.toString()]);
126
+ });
127
+ } else {
128
+ for (const key of Object.keys(obj)) {
129
+ const value = obj[key];
130
+ const currentPath = [...path, key];
131
+ traverseObject(value, callback, currentPath);
132
+ }
133
+ }
134
+ }
135
+
136
+ // src/components/cart-context.ts
137
+ var Name = "cart-context";
138
+ var Component = (props, { element }) => {
139
+ const cart = provideAjaxCartContext(element);
140
+ createEffect(() => {
141
+ if (!props.debug) return;
142
+ const c = cart();
143
+ traverseObject(c);
144
+ console.log(`${Name}:updated!`, c);
145
+ });
146
+ };
147
+
148
+ // src/components/cart-data.ts
149
+ var cart_data_exports = {};
150
+ __export(cart_data_exports, {
151
+ Component: () => Component2,
152
+ Name: () => Name2
153
+ });
154
+ function createListenerStatusContext(options) {
155
+ const [privateProps, publicProps] = splitProps(options, ["element"]);
156
+ function setStatus(status) {
157
+ const currentStatus = privateProps.element.getAttribute("status");
158
+ if (currentStatus === status) return;
159
+ privateProps.element.setAttribute("status", status);
160
+ return status;
161
+ }
162
+ return [() => publicProps.status, setStatus];
163
+ }
164
+ var ListenerStatusContext = createContext(createListenerStatusContext);
165
+ var provideListenerStatusContext = (options) => {
166
+ return provide(ListenerStatusContext, options, options.element);
167
+ };
168
+ var useListenerStatusContext = (context) => {
169
+ return context;
170
+ };
171
+ var useListenerStatus = (element) => {
172
+ const context = consume(ListenerStatusContext, element);
173
+ if (!context) {
174
+ throw console.error(
175
+ "CartListenerContext not found! Please ensure to wrap your custom element with cart-data-listener element."
176
+ );
177
+ }
178
+ return useListenerStatusContext(context);
179
+ };
180
+ var withListenerElementStatus = createWithElementContext(ListenerStatusContext);
181
+
182
+ // src/hooks/index.ts
183
+ var hooks = makeFullPropertyPathContext();
184
+ var useCartValue = (options) => {
185
+ const data = useAjaxCart(options.element);
186
+ return hooks.usePathValue({
187
+ ...options,
188
+ data
189
+ });
190
+ };
191
+ var useCartPath = hooks.usePath;
192
+ var useCartFormattedValue = (options) => {
193
+ const data = useAjaxCart(options.element);
194
+ return hooks.useFormattedValue({
195
+ data,
196
+ get format() {
197
+ return options.format;
198
+ },
199
+ path: options.path
200
+ });
201
+ };
202
+ var provideCartPathContext = hooks.provide;
203
+ var Name2 = "cart-data";
204
+ var Component2 = (props, { element }) => {
205
+ if (!props.propertyName)
206
+ return console.warn(`${Name2}: No property-name attribute provided.`);
207
+ const fullPath = useCartPath({
208
+ element,
209
+ path: () => props.propertyName
210
+ });
211
+ const formattedValue = useCartFormattedValue({
212
+ get format() {
213
+ return props.format;
214
+ },
215
+ path: fullPath,
216
+ element
217
+ });
218
+ return html2`
219
+ <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>
220
+ `;
221
+ };
222
+
223
+ // src/components/cart-data-conditions.ts
224
+ var cart_data_conditions_exports = {};
225
+ __export(cart_data_conditions_exports, {
226
+ Component: () => Component3,
227
+ Name: () => Name3
228
+ });
229
+ function getValue(data, value) {
230
+ if (typeof value === "undefined" || !data) return void 0;
231
+ if (value.type === "primitive") {
232
+ return value.value;
233
+ }
234
+ if (value.type === "property" && value.name) {
235
+ return getValueFromPath(data, value.name);
236
+ }
237
+ return null;
238
+ }
239
+ function invertResult(result, invert = false) {
240
+ if (invert) return !result;
241
+ return result;
242
+ }
243
+ function validateConditions(conditions, data) {
244
+ if (!data) return false;
245
+ const result = conditions.every((condition) => {
246
+ let valueA = getValue(data, condition.valueA), valueB = getValue(data, condition.valueB), result2 = false;
247
+ if (typeof valueA === "undefined" && typeof valueB === "undefined")
248
+ return false;
249
+ if (condition.type === "typeof") {
250
+ result2 = typeof valueA === valueB;
251
+ }
252
+ if (condition.type === "includes") {
253
+ result2 = formatValue(condition.format || "", valueA).includes(
254
+ formatValue(condition.format || "", valueB)
255
+ );
256
+ }
257
+ if (condition.type === "includes_property") {
258
+ result2 = valueA.some(
259
+ (v) => v[condition.valueA?.property_name || ""] === valueB
260
+ );
261
+ }
262
+ if (condition.type === "starts_with") {
263
+ result2 = formatValue("string", valueA).startsWith(
264
+ formatValue(condition.format || "", valueB)
265
+ );
266
+ }
267
+ if (condition.type === "equals") {
268
+ result2 = formatValue(condition.format || "", valueA) === formatValue(condition.format || "", valueB);
269
+ }
270
+ if (condition.type === "not_equals") {
271
+ result2 = formatValue(condition.format || "", valueA) !== formatValue(condition.format || "", valueB);
272
+ }
273
+ if (condition.type === "lt") {
274
+ result2 = formatValue(condition.format || "", valueA) < formatValue(condition.format || "", valueB);
275
+ }
276
+ if (condition.type === "lte") {
277
+ result2 = formatValue(condition.format || "", valueA) <= formatValue(condition.format || "", valueB);
278
+ }
279
+ if (condition.type === "gt") {
280
+ result2 = formatValue(condition.format || "", valueA) > formatValue(condition.format || "", valueB);
281
+ }
282
+ if (condition.type === "gte") {
283
+ result2 = formatValue(condition.format || "", valueA) >= formatValue(condition.format || "", valueB);
284
+ }
285
+ return invertResult(result2, condition.invert);
286
+ });
287
+ return result;
288
+ }
289
+ var Name3 = "cart-data-conditions";
290
+ var Component3 = (_, { element }) => {
291
+ const conditionTemplates = Array.from(element.children).filter(
292
+ (child) => child.tagName === "TEMPLATE" && child.hasAttribute("conditions")
293
+ );
294
+ if (!conditionTemplates.length)
295
+ return console.error(
296
+ `${Name3}: no templates found with any conditions attribute!`
297
+ );
298
+ const allConditions = createMemo(
299
+ () => conditionTemplates.map((tmpl) => {
300
+ const conditions = tmpl.getAttribute("conditions");
301
+ if (!conditions)
302
+ console.warn(`${Name3}: conditions attribute is required!`);
303
+ try {
304
+ return JSON.parse(conditions);
305
+ } catch (e) {
306
+ return [];
307
+ }
308
+ })
309
+ );
310
+ const fullPath = useCartPath({ element });
311
+ const data = useCartValue({
312
+ path: fullPath,
313
+ element
314
+ });
315
+ element.replaceChildren(...[]);
316
+ return html2`
317
+ <${For} each=${() => conditionTemplates}>
318
+ ${(tmpl, idx) => {
319
+ const conditions = allConditions()[idx()];
320
+ return html2`
321
+ <${Show} when=${() => validateConditions(conditions, data())}>
322
+ ${() => Array.from(tmpl.content.cloneNode(true).childNodes)}
323
+ <//>
324
+ `;
325
+ }}
326
+ <//>
327
+ `;
328
+ };
329
+
330
+ // src/components/cart-data-array.ts
331
+ var cart_data_array_exports = {};
332
+ __export(cart_data_array_exports, {
333
+ Component: () => Component4,
334
+ Name: () => Name4
335
+ });
336
+ var Name4 = "cart-data-array";
337
+ var Component4 = (props, { element }) => {
338
+ const itemTemplate = getTemplateContent(element, "item");
339
+ if (!itemTemplate)
340
+ return console.warn(
341
+ `${Name4}: No template found with a property of 'item'.`
342
+ );
343
+ if (!props.arrayPath) return console.warn(`${Name4}: No array path provided.`);
344
+ const mergedProps = {
345
+ element,
346
+ path: () => props.arrayPath
347
+ };
348
+ const fullPath = useCartPath(mergedProps);
349
+ provideCartPathContext({
350
+ element,
351
+ path: fullPath
352
+ });
353
+ const value = useCartValue({
354
+ element,
355
+ path: fullPath
356
+ });
357
+ const arrayValue = createMemo(() => {
358
+ const v = value();
359
+ if (!v) {
360
+ console.warn(`${Name4}: value is null or undefined at path ${fullPath()}`);
361
+ return null;
362
+ }
363
+ if (!Array.isArray(v)) {
364
+ console.warn(`${Name4}: value is not an array at path ${fullPath()}`);
365
+ return null;
366
+ }
367
+ if (props.reverse) {
368
+ return v.toReversed();
369
+ }
370
+ return v;
371
+ });
372
+ element.replaceChildren(...[]);
373
+ return html2`
374
+ <${Show} when=${() => arrayValue() && arrayValue().length > 0}>
375
+ <${For} each=${arrayValue}>
376
+ ${(_, idx) => html2`
377
+ <cart-data-array-item item-index=${() => `${idx()}`} class=${() => props.itemClass}>
378
+ ${() => Array.from(itemTemplate.cloneNode(true).childNodes)}
379
+ </cart-data-array-item>
380
+ `}
381
+ <//>
382
+ <//>
383
+ `;
384
+ };
385
+
386
+ // src/components/cart-data-array-injection.ts
387
+ var cart_data_array_injection_exports = {};
388
+ __export(cart_data_array_injection_exports, {
389
+ Component: () => Component5,
390
+ Name: () => Name5
391
+ });
392
+ var Name5 = "cart-data-array-injection";
393
+ var Component5 = (props, { element }) => {
394
+ const itemTemplate = getTemplateContent(element, "item");
395
+ if (!itemTemplate)
396
+ return console.warn(
397
+ `${Name5}: No template found with a property of 'item'.`
398
+ );
399
+ if (!props.arrayPath) return console.warn(`${Name5}: No array path provided.`);
400
+ const mergedProps = {
401
+ element,
402
+ path: () => props.arrayPath
403
+ };
404
+ const fullPath = useCartPath(mergedProps);
405
+ provideCartPathContext({
406
+ element,
407
+ path: fullPath
408
+ });
409
+ const value = useCartValue({
410
+ path: fullPath,
411
+ element
412
+ });
413
+ const arrayValue = createMemo(() => {
414
+ const v = value();
415
+ if (!v) {
416
+ console.warn(`${Name5}: value is null or undefined at path ${fullPath()}`);
417
+ return null;
418
+ }
419
+ if (!Array.isArray(v)) {
420
+ console.warn(`${Name5}: value is not an array at path ${fullPath()}`);
421
+ return null;
422
+ }
423
+ if (props.reverse) {
424
+ return v.toReversed();
425
+ }
426
+ return v;
427
+ });
428
+ const children = createMemo(
429
+ mapArray(arrayValue, (_, idx) => {
430
+ const fragment = itemTemplate.cloneNode(true);
431
+ const container = fragment instanceof DocumentFragment ? fragment : null;
432
+ if (props.wrapInnerChild && container) {
433
+ const firstElement = container.firstElementChild;
434
+ if (!firstElement) return null;
435
+ const children2 = Array.from(firstElement.children);
436
+ const wrapper = html2`
437
+ <cart-data-array-item item-index=${() => `${idx()}`}>
438
+ ${() => Array.from(children2)}
439
+ </cart-data-array-item>
440
+ `;
441
+ firstElement.replaceChildren(
442
+ Array.isArray(wrapper) ? wrapper.at(0) : wrapper
443
+ );
444
+ return firstElement;
445
+ }
446
+ })
447
+ );
448
+ createEffect(
449
+ on(
450
+ () => {
451
+ const rootElement = element;
452
+ return {
453
+ target: getTargetElement(rootElement, props.target),
454
+ children: children()
455
+ };
456
+ },
457
+ ({ children: children2, target }) => {
458
+ if (!target) return;
459
+ const filteredChildren = children2.filter(
460
+ (v) => v !== null && v !== void 0
461
+ );
462
+ target.replaceChildren(...filteredChildren);
463
+ }
464
+ )
465
+ );
466
+ };
467
+
468
+ // src/components/cart-data-array-item.ts
469
+ var cart_data_array_item_exports = {};
470
+ __export(cart_data_array_item_exports, {
471
+ Component: () => Component6,
472
+ Name: () => Name6
473
+ });
474
+ var Name6 = "cart-data-array-item";
475
+ var Component6 = (props, { element }) => {
476
+ if (!props.itemIndex)
477
+ return console.warn(`${Name6}: No path attribute provided.`);
478
+ const mergedProps = {
479
+ element,
480
+ path: () => props.itemIndex
481
+ };
482
+ const fullPath = useCartPath(mergedProps);
483
+ provideCartPathContext({
484
+ element,
485
+ path: fullPath
486
+ });
487
+ };
488
+
489
+ // src/components/cart-data-listener.ts
490
+ var cart_data_listener_exports = {};
491
+ __export(cart_data_listener_exports, {
492
+ Component: () => Component7,
493
+ Name: () => Name7
494
+ });
495
+ var Name7 = "cart-data-listener";
496
+ var Component7 = (props, { element }) => {
497
+ const [_, setStatus] = provideListenerStatusContext({
498
+ element,
499
+ get status() {
500
+ return props.status;
501
+ }
502
+ });
503
+ const path = useCartPath({
504
+ element
505
+ });
506
+ const data = useCartValue({
507
+ element,
508
+ path
509
+ });
510
+ createEffect(
511
+ on(
512
+ () => ({
513
+ method: props.method,
514
+ on: props.on,
515
+ preventDefault: props.preventDefault,
516
+ data: data(),
517
+ debounceDelay: props.debounceDelay,
518
+ resetForm: props.resetForm,
519
+ resetStatusDelay: props.resetStatusDelay
520
+ }),
521
+ ({
522
+ method,
523
+ on: on5,
524
+ preventDefault,
525
+ data: data2,
526
+ debounceDelay,
527
+ resetForm,
528
+ resetStatusDelay
529
+ }) => {
530
+ if (!method)
531
+ return console.error(`${Name7}: method property is required!`);
532
+ if (!on5) return console.error(`${Name7}: on property is required!`);
533
+ let resetStatusId = null;
534
+ function onEvent(e) {
535
+ const cart = AjaxCart;
536
+ if (preventDefault) e.preventDefault();
537
+ async function handleStatus(promise) {
538
+ setStatus("loading");
539
+ return promise.then((data3) => {
540
+ setStatus("success");
541
+ return data3;
542
+ }).catch((error) => {
543
+ setStatus("error");
544
+ return error;
545
+ }).finally(() => {
546
+ if (resetStatusDelay > 0) {
547
+ resetStatusId = setTimeout(() => {
548
+ setStatus("default");
549
+ resetStatusId = null;
550
+ }, resetStatusDelay);
551
+ } else {
552
+ setStatus("default");
553
+ }
554
+ });
555
+ }
556
+ if (on5 === "submit") {
557
+ let reset2 = function() {
558
+ if (resetForm) form.reset();
559
+ };
560
+ const form = e.target;
561
+ const formData = new FormData(form);
562
+ const formObj = parseNestedObject(
563
+ //@ts-ignore
564
+ Object.fromEntries(formData.entries())
565
+ );
566
+ if (method === "replaceItem") {
567
+ return handleStatus(
568
+ cart.replaceItem({
569
+ key: formObj.key,
570
+ id: formObj.id
571
+ })
572
+ ).finally(reset2);
573
+ }
574
+ if (method === "updateItem") {
575
+ return handleStatus(
576
+ cart.updateItem({
577
+ id: formObj.id,
578
+ quantity: formObj?.quantity || void 0,
579
+ properties: formObj?.properties || {},
580
+ selling_plan: formObj?.selling_plan || void 0
581
+ })
582
+ ).finally(reset2);
583
+ }
584
+ if (method === "removeItem") {
585
+ return handleStatus(cart.removeItem(formObj.key)).finally(reset2);
586
+ }
587
+ if (method === "addDiscount") {
588
+ return handleStatus(cart.addDiscount(formObj.code)).finally(
589
+ reset2
590
+ );
591
+ }
592
+ if (method === "removeDiscount") {
593
+ return handleStatus(cart.removeDiscount(formObj.code)).finally(
594
+ reset2
595
+ );
596
+ }
597
+ if (method === "updateNote") {
598
+ return handleStatus(cart.updateNote(formObj.note)).finally(reset2);
599
+ }
600
+ return;
601
+ }
602
+ const input = e.target;
603
+ if (method === "removeItem") {
604
+ return handleStatus(cart.removeItem(data2.key));
605
+ }
606
+ if (method === "updateQuantity") {
607
+ return handleStatus(
608
+ cart.updateItem({
609
+ id: data2.key,
610
+ quantity: input.valueAsNumber
611
+ })
612
+ );
613
+ }
614
+ if (method === "updateItemVariant") {
615
+ return handleStatus(
616
+ cart.replaceItem({
617
+ key: data2.key,
618
+ id: input.value
619
+ })
620
+ );
621
+ }
622
+ if (method === "updateNote") {
623
+ return handleStatus(cart.updateNote(input.value));
624
+ }
625
+ }
626
+ const handleEvent = debounce(onEvent, debounceDelay), controller = new AbortController();
627
+ element.addEventListener(
628
+ on5,
629
+ (e) => {
630
+ if (preventDefault) e.preventDefault();
631
+ handleEvent(e);
632
+ },
633
+ { signal: controller.signal }
634
+ );
635
+ return onCleanup(() => {
636
+ controller.abort();
637
+ if (resetStatusId) clearTimeout(resetStatusId);
638
+ });
639
+ }
640
+ )
641
+ );
642
+ };
643
+
644
+ // src/components/cart-data-listener-status.ts
645
+ var cart_data_listener_status_exports = {};
646
+ __export(cart_data_listener_status_exports, {
647
+ Component: () => Component8,
648
+ Name: () => Name8
649
+ });
650
+ var Name8 = "cart-data-listener-status";
651
+ var Component8 = (_, { element }) => {
652
+ const [status] = useListenerStatus(element);
653
+ if (!status) return console.error(`${Name8}: no listener context provided!`);
654
+ const templates = {
655
+ default: getTemplateContent(element, "default"),
656
+ loading: getTemplateContent(element, "loading"),
657
+ success: getTemplateContent(element, "success"),
658
+ error: getTemplateContent(element, "error")
659
+ };
660
+ let previousState = null;
661
+ const currentStatus = () => {
662
+ const s = status();
663
+ if (!templates[s]) return previousState;
664
+ previousState = s;
665
+ return s;
666
+ };
667
+ element.replaceChildren(...[]);
668
+ return createMemo(() => {
669
+ const state = currentStatus();
670
+ if (!state) return null;
671
+ const template = templates[state];
672
+ if (!template) return null;
673
+ return Array.from(template.cloneNode(true).childNodes);
674
+ });
675
+ };
676
+
677
+ // src/components/cart-data-injection.ts
678
+ var cart_data_injection_exports = {};
679
+ __export(cart_data_injection_exports, {
680
+ Component: () => Component9,
681
+ Name: () => Name9
682
+ });
683
+ var VALID_INJECTION_TYPES = ["attribute", "property", "template"];
684
+ var Name9 = "cart-data-injection";
685
+ var Component9 = (props, { element }) => {
686
+ if (!props.propertyName)
687
+ return console.warn(`${Name9}: No path attribute provided.`);
688
+ if (!props.target) return console.warn(`${Name9}: No target attribute found!`);
689
+ if (!props.attributeName)
690
+ return console.warn(`${Name9}: No attribute-name attribute found!`);
691
+ if (!props.injectionType || props.injectionType && !VALID_INJECTION_TYPES.includes(props.injectionType))
692
+ return console.warn(`${Name9}: Invalid injection-type attribute provided.`);
693
+ const mergedProps = {
694
+ element,
695
+ path: () => props.propertyName
696
+ };
697
+ const fullPath = useCartPath(mergedProps);
698
+ const value = useCartFormattedValue({
699
+ element,
700
+ path: fullPath,
701
+ get format() {
702
+ return props.format;
703
+ }
704
+ });
705
+ createEffect(
706
+ on(
707
+ () => {
708
+ return {
709
+ target: getTargetElement(element, props.target),
710
+ value: value(),
711
+ attributeName: props.attributeName,
712
+ injectionType: props.injectionType,
713
+ propertyName: props.propertyName
714
+ };
715
+ },
716
+ ({ target, value: value2, attributeName, injectionType, propertyName }) => {
717
+ if (!target)
718
+ return console.warn(
719
+ `${Name9}: Unable to find element with selector of: ${props.target}`
720
+ );
721
+ if (injectionType === "attribute" && value2 !== null && value2 !== void 0) {
722
+ target.setAttribute(attributeName, `${value2}`);
723
+ return;
724
+ }
725
+ if (injectionType === "property" && value2 !== null && value2 !== void 0) {
726
+ target[attributeName] = value2;
727
+ return;
728
+ }
729
+ if (injectionType === "template" && value2 !== null && value2 !== void 0) {
730
+ if (attributeName === "style") {
731
+ const styleTmpl = target[attributeName].cssText;
732
+ setTimeout(() => {
733
+ target[attributeName].cssText = styleTmpl.replace(
734
+ //@ts-ignore
735
+ `{${propertyName}}`,
736
+ value2
737
+ );
738
+ });
739
+ return onCleanup(() => {
740
+ target[attributeName].cssText = styleTmpl;
741
+ });
742
+ }
743
+ const tmpValue = target.getAttribute(attributeName);
744
+ if (!tmpValue || !value2)
745
+ return console.warn(
746
+ `${Name9}: Unable to inject value into template`
747
+ );
748
+ setTimeout(() => {
749
+ target.setAttribute(
750
+ attributeName,
751
+ tmpValue.replace(`{${propertyName}}`, `${value2}`)
752
+ );
753
+ });
754
+ return onCleanup(() => {
755
+ target.setAttribute(attributeName, tmpValue);
756
+ });
757
+ }
758
+ }
759
+ )
760
+ );
761
+ };
762
+
763
+ // src/components/cart-loading-state.ts
764
+ var cart_loading_state_exports = {};
765
+ __export(cart_loading_state_exports, {
766
+ Component: () => Component10,
767
+ Name: () => Name10
768
+ });
769
+ var Name10 = "cart-loading-state";
770
+ var Component10 = (props, { element }) => {
771
+ const cart = AjaxCart;
772
+ const templates = {
773
+ pending: getTemplateContent(element, "pending"),
774
+ error: getTemplateContent(element, "error"),
775
+ success: getTemplateContent(element, "success")
776
+ };
777
+ let previousState = null;
778
+ const cartState = createMemo(() => {
779
+ const state = cart?.status;
780
+ if (!templates[state] || props.ignoredStates.includes(state))
781
+ return previousState;
782
+ previousState = state;
783
+ return state;
784
+ });
785
+ element.replaceChildren(...[]);
786
+ return html2`
787
+ <${Show} when=${() => cart}>
788
+ ${() => {
789
+ const state = cartState();
790
+ if (!state) return null;
791
+ if (!templates[state]) return null;
792
+ const children = Array.from(
793
+ templates[state].cloneNode(true).childNodes
794
+ );
795
+ return children;
796
+ }}
797
+ <//>
798
+ `;
799
+ };
800
+
801
+ // src/index.ts
802
+ customShadowlessElement(
803
+ cart_context_exports.Name,
804
+ { debug: false },
805
+ correctElementType(cart_context_exports.Component)
806
+ );
807
+ customShadowlessElement(
808
+ cart_data_array_item_exports.Name,
809
+ { itemIndex: "0" },
810
+ correctElementType(cart_data_array_item_exports.Component)
811
+ );
812
+ customShadowlessElement(
813
+ cart_data_array_exports.Name,
814
+ {
815
+ format: "",
816
+ arrayPath: "items",
817
+ reverse: false,
818
+ itemClass: ""
819
+ },
820
+ correctElementType(cart_data_array_exports.Component)
821
+ );
822
+ customShadowlessElement(
823
+ cart_data_array_injection_exports.Name,
824
+ {
825
+ format: "",
826
+ arrayPath: "items",
827
+ target: "",
828
+ wrapInnerChild: true,
829
+ reverse: false
830
+ },
831
+ correctElementType(cart_data_array_injection_exports.Component)
832
+ );
833
+ customShadowlessElement(
834
+ cart_data_exports.Name,
835
+ {
836
+ format: "",
837
+ propertyName: "item_count"
838
+ },
839
+ correctElementType(cart_data_exports.Component)
840
+ );
841
+ customShadowlessElement(
842
+ cart_data_conditions_exports.Name,
843
+ {},
844
+ correctElementType(cart_data_conditions_exports.Component)
845
+ );
846
+ customShadowlessElement(
847
+ cart_data_injection_exports.Name,
848
+ {
849
+ propertyName: "item_count",
850
+ attributeName: "data-item-count",
851
+ injectionType: "attribute",
852
+ target: "",
853
+ format: ""
854
+ },
855
+ correctElementType(cart_data_injection_exports.Component)
856
+ );
857
+ customShadowlessElement(
858
+ cart_data_listener_exports.Name,
859
+ {
860
+ status: "default",
861
+ on: "submit",
862
+ method: "updateItem",
863
+ resetForm: true,
864
+ debounceDelay: 0,
865
+ resetStatusDelay: 0,
866
+ preventDefault: true
867
+ },
868
+ correctElementType(cart_data_listener_exports.Component)
869
+ );
870
+ customShadowlessElement(
871
+ cart_data_listener_status_exports.Name,
872
+ {},
873
+ correctElementType(cart_data_listener_status_exports.Component)
874
+ );
875
+ customShadowlessElement(
876
+ cart_loading_state_exports.Name,
877
+ { ignoredStates: [] },
878
+ correctElementType(cart_loading_state_exports.Component)
879
+ );
880
+
881
+ export { provideAjaxCartContext, provideCartPathContext, provideListenerStatusContext, useAjaxCart, useAjaxCartContext, useCartFormattedValue, useCartPath, useCartValue, useListenerStatus, useListenerStatusContext, withListenerElementStatus };
882
+ //# sourceMappingURL=index.js.map
883
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/cart-context.ts","../../src/hooks/useAjaxCart.ts","../../src/utils/getValueFromPath.ts","../../src/utils/formatValue.ts","../../src/utils/getTemplateContent.ts","../../src/utils/getTargetElement.ts","../../src/utils/parseNestedObject.ts","../../src/utils/traverseObject.ts","../../src/components/cart-data.ts","../../src/hooks/useListenerStatus.ts","../../src/hooks/index.ts","../../src/components/cart-data-conditions.ts","../../src/components/cart-data-array.ts","../../src/components/cart-data-array-injection.ts","../../src/components/cart-data-array-item.ts","../../src/components/cart-data-listener.ts","../../src/components/cart-data-listener-status.ts","../../src/components/cart-data-injection.ts","../../src/components/cart-loading-state.ts","../../src/index.ts"],"names":["Component","Name","createContext","provide","consume","html","result","Show","createMemo","For","children","createEffect","on","data","AjaxCart","reset","value","onCleanup"],"mappings":"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","file":"index.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { createEffect, on } from \"solid-js\";\nimport { provideAjaxCartContext } from \"../hooks/useAjaxCart.js\";\nimport { traverseObject } from \"../utils/index.js\";\n\nexport type Props = {\n debug?: boolean;\n};\n\nexport const Name = \"cart-context\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n const cart = provideAjaxCartContext(element);\n\n createEffect(() => {\n if (!props.debug) return;\n const c = cart();\n // This will listen to every change within the cart object.\n traverseObject(c);\n console.log(`${Name}:updated!`, c);\n });\n};\n","import AjaxCart, { type CartData } from \"@brytdesigns/shopify-ajax-cart\";\nimport type { PathValue } from \"@brytdesigns/web-component-core\";\nimport {\n createContext,\n consume,\n provide,\n type ICustomElement,\n} from \"component-register\";\n\ntype WalkableNode = Parameters<typeof provide>[2];\n\ntype AjaxCartContextType = () => PathValue<CartData, \"\">;\n\nconst AjaxCartContext = createContext(() => () => AjaxCart.data);\n\nexport const provideAjaxCartContext = (\n element: WalkableNode\n): AjaxCartContextType => {\n return provide(AjaxCartContext, {}, element);\n};\n\nexport const useAjaxCartContext = (context: AjaxCartContextType) => {\n return context;\n};\n\nexport const useAjaxCart = (element: HTMLElement & ICustomElement) => {\n const context = consume(AjaxCartContext, element);\n\n if (!context) {\n throw console.error(\n \"CartContext not found! Please ensure to wrap your custom element with cart-context element.\"\n );\n }\n\n return useAjaxCartContext(context);\n};\n","// 🔥 Recursively Constructs All Possible Paths for an Object or Array\nexport 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\n// 🔥 Correctly Extracts the Value at the Given Path\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 // 🔥 Convert numeric keys for proper array indexing\n const isArrayIndex = !isNaN(Number(key)) && key.trim() !== \"\";\n if (Array.isArray(acc) && isArrayIndex) {\n return acc[Number(key)];\n }\n\n // Normal object property access\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","export function getTargetElement(rootElement: HTMLElement, target: string) {\n if (!target) return rootElement;\n const t = rootElement.querySelector(target);\n if (!t) {\n console.error(`target element not found: ${target}`);\n return null;\n }\n return t;\n}\n","export function parseNestedObject<T extends Record<string, any>>(\n data: T,\n): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (const key in data) {\n const value = data[key];\n const parts = key.match(/(\\w+|\\[\\d+\\])/g);\n\n if (!parts) continue;\n\n let current: any = result;\n for (let i = 0; i < parts.length; i++) {\n let part: string | number | undefined = parts[i];\n let nextPart: string | number | undefined = parts[i + 1];\n\n if (!part) continue;\n\n // Convert array-like keys to numbers\n if (part.startsWith(\"[\")) {\n part = parseInt(part.slice(1, -1), 10);\n }\n\n if (i === parts.length - 1) {\n current[part] = value;\n } else {\n if (\n typeof parts[i + 1] === \"number\" ||\n (nextPart && nextPart.startsWith(\"[\"))\n ) {\n current[part] = current[part] || [];\n } else {\n current[part] = current[part] || {};\n }\n current = current[part];\n }\n }\n }\n\n return result;\n}\n","type TraverseCallback = (key: string, value: any, path: string[]) => void;\n\nexport function traverseObject(\n obj: any,\n callback?: TraverseCallback,\n path: string[] = [],\n) {\n if (typeof obj !== \"object\" || obj === null) return;\n\n if (Array.isArray(obj)) {\n obj.forEach((item, index) => {\n traverseObject(item, callback, [...path, index.toString()]);\n });\n } else {\n for (const key of Object.keys(obj)) {\n const value = obj[key];\n const currentPath = [...path, key];\n if (callback) callback(key, value, currentPath);\n traverseObject(value, callback, currentPath);\n }\n }\n}\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { type Format } from \"../utils/index.js\";\n\nimport { Show } from \"solid-js\";\n\nimport {\n type CartPath,\n useCartPath,\n useCartFormattedValue,\n} from \"../hooks/index.js\";\nimport html from \"solid-js/html\";\n\nexport type Props = {\n propertyName: CartPath;\n format?: Format;\n};\n\nexport const Name = \"cart-data\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (!props.propertyName)\n return console.warn(`${Name}: No property-name attribute provided.`);\n const fullPath = useCartPath({\n element,\n path: () => props.propertyName,\n });\n const formattedValue = useCartFormattedValue({\n get format() {\n return props.format;\n },\n path: fullPath,\n element,\n });\n\n return html`\n <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>\n `;\n};\n","import {\n createContext,\n consume,\n provide,\n type ICustomElement,\n} from \"component-register\";\nimport { splitProps } from \"solid-js\";\nimport { createWithElementContext } from \"@brytdesigns/web-component-core/utils\";\n\ntype WalkableNode = Parameters<typeof provide>[2];\nexport type Status = \"default\" | \"loading\" | \"success\" | \"error\";\n\ntype ListenerStatusContextType = ReturnType<typeof createListenerStatusContext>;\n\ntype Options = {\n element: HTMLElement & ICustomElement;\n status: Status;\n};\n\nfunction createListenerStatusContext(options: Options) {\n const [privateProps, publicProps] = splitProps(options, [\"element\"]);\n\n function setStatus(status: Status) {\n const currentStatus = privateProps.element.getAttribute(\"status\");\n if (currentStatus === status) return;\n privateProps.element.setAttribute(\"status\", status);\n return status;\n }\n\n return [() => publicProps.status, setStatus] as const;\n}\n\nconst ListenerStatusContext = createContext(createListenerStatusContext);\n\nexport const provideListenerStatusContext = (options: {\n element: WalkableNode;\n status: Status;\n}): ListenerStatusContextType => {\n return provide(ListenerStatusContext, options, options.element);\n};\n\nexport const useListenerStatusContext = (\n context: ListenerStatusContextType,\n) => {\n return context;\n};\n\nexport const useListenerStatus = (element: HTMLElement & ICustomElement) => {\n const context = consume(ListenerStatusContext, element);\n\n if (!context) {\n throw console.error(\n \"CartListenerContext not found! Please ensure to wrap your custom element with cart-data-listener element.\",\n );\n }\n\n return useListenerStatusContext(context);\n};\n\nexport const withListenerElementStatus = createWithElementContext<\n typeof ListenerStatusContext,\n ListenerStatusContextType\n>(ListenerStatusContext);\n","import type { CartData } from \"@brytdesigns/shopify-ajax-cart\";\nimport {\n makeFullPropertyPathContext,\n type Path,\n type PathValue,\n} from \"@brytdesigns/web-component-core\";\nimport type { ICustomElement } from \"component-register\";\nimport { useAjaxCart } from \"./useAjaxCart.js\";\n\nconst hooks = makeFullPropertyPathContext<CartData>();\n\nexport type CartPath = Path<CartData>;\nexport type CartPathValue<Path extends CartPath> = PathValue<CartData, Path>;\nexport const useCartValue = (\n options: Omit<Parameters<typeof hooks.usePathValue>[0], \"data\"> & {\n element: HTMLElement & ICustomElement;\n },\n) => {\n const data = useAjaxCart(options.element);\n return hooks.usePathValue({\n ...options,\n data,\n });\n};\nexport const useCartPath = hooks.usePath;\nexport const useCartFormattedValue = (\n options: Omit<Parameters<typeof hooks.useFormattedValue>[0], \"data\"> & {\n element: HTMLElement & ICustomElement;\n },\n) => {\n const data = useAjaxCart(options.element);\n return hooks.useFormattedValue({\n data,\n get format() {\n return options.format;\n },\n path: options.path,\n });\n};\nexport const provideCartPathContext = hooks.provide;\n\nexport * from \"./useAjaxCart.js\";\nexport * from \"./useListenerStatus.js\";\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { Show, createMemo, For, type Accessor } from \"solid-js\";\nimport html from \"solid-js/html\";\n\nimport { useCartPath, useCartValue } from \"../hooks/index.js\";\nimport { getValueFromPath, formatValue, type Format } from \"../utils/index.js\";\n\nexport type Props = {};\n\ntype ConditionValue = {\n type: \"primitive\" | \"property\";\n name?: string;\n value?: string | number | boolean | null;\n property_name?: string;\n};\n\ntype Condition = {\n type:\n | \"typeof\"\n | \"includes\"\n | \"includes_property\"\n | \"equals\"\n | \"not_equals\"\n | \"starts_with\"\n | \"lt\"\n | \"lte\"\n | \"gt\"\n | \"gte\";\n format?: Format;\n invert?: boolean;\n valueA: ConditionValue;\n valueB: ConditionValue;\n};\n\nfunction getValue<T>(data: T, value: ConditionValue): any {\n if (typeof value === \"undefined\" || !data) return undefined;\n\n if (value.type === \"primitive\") {\n return value.value;\n }\n\n if (value.type === \"property\" && value.name) {\n //@ts-ignore\n return getValueFromPath<T>(data, value.name);\n }\n\n return null;\n}\n\nfunction invertResult(result: boolean, invert = false) {\n if (invert) return !result;\n return result;\n}\n\nfunction validateConditions<T>(conditions: Condition[], data: T) {\n if (!data) return false;\n const result = conditions.every((condition) => {\n let valueA = getValue(data, condition.valueA),\n valueB = getValue(data, condition.valueB),\n result = false;\n\n if (typeof valueA === \"undefined\" && typeof valueB === \"undefined\")\n return false;\n\n if (condition.type === \"typeof\") {\n result = typeof valueA === valueB;\n }\n\n if (condition.type === \"includes\") {\n result = formatValue(condition.format || \"\", valueA).includes(\n formatValue(condition.format || \"\", valueB),\n );\n }\n\n if (condition.type === \"includes_property\") {\n result = valueA.some(\n (v: any) => v[condition.valueA?.property_name || \"\"] === valueB,\n );\n }\n\n if (condition.type === \"starts_with\") {\n result = formatValue(\"string\", valueA).startsWith(\n formatValue(condition.format || \"\", valueB),\n );\n }\n\n if (condition.type === \"equals\") {\n result =\n formatValue(condition.format || \"\", valueA) ===\n formatValue(condition.format || \"\", valueB);\n }\n\n if (condition.type === \"not_equals\") {\n result =\n formatValue(condition.format || \"\", valueA) !==\n formatValue(condition.format || \"\", valueB);\n }\n\n if (condition.type === \"lt\") {\n result =\n formatValue(condition.format || \"\", valueA) <\n formatValue(condition.format || \"\", valueB);\n }\n\n if (condition.type === \"lte\") {\n result =\n formatValue(condition.format || \"\", valueA) <=\n formatValue(condition.format || \"\", valueB);\n }\n\n if (condition.type === \"gt\") {\n result =\n formatValue(condition.format || \"\", valueA) >\n formatValue(condition.format || \"\", valueB);\n }\n\n if (condition.type === \"gte\") {\n result =\n formatValue(condition.format || \"\", valueA) >=\n formatValue(condition.format || \"\", valueB);\n }\n\n return invertResult(result, condition.invert);\n });\n\n return result;\n}\n\nexport const Name = \"cart-data-conditions\";\n\nexport const Component: CorrectComponentType<Props> = (_, { element }) => {\n const conditionTemplates = Array.from(element.children).filter(\n (child) => child.tagName === \"TEMPLATE\" && child.hasAttribute(\"conditions\"),\n );\n if (!conditionTemplates.length)\n return console.error(\n `${Name}: no templates found with any conditions attribute!`,\n );\n\n const allConditions = createMemo(() =>\n conditionTemplates.map((tmpl) => {\n const conditions = tmpl.getAttribute(\"conditions\");\n if (!conditions)\n console.warn(`${Name}: conditions attribute is required!`);\n\n try {\n return JSON.parse(conditions!);\n } catch (e) {\n return [];\n }\n }),\n );\n\n const fullPath = useCartPath({ element });\n const data = useCartValue({\n path: fullPath,\n element,\n });\n\n element.replaceChildren(...[]);\n\n return html`\n <${For} each=${() => conditionTemplates}>\n ${(tmpl: HTMLTemplateElement, idx: Accessor<number>) => {\n const conditions = allConditions()[idx()];\n return html`\n <${Show} when=${() => validateConditions(conditions, data())}>\n ${() => Array.from(tmpl.content.cloneNode(true).childNodes)}\n <//>\n `;\n }}\n <//>\n `;\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { getTemplateContent, type Format } from \"../utils/index.js\";\n\nimport { Show, For, type Accessor, createMemo } from \"solid-js\";\n\nimport {\n\ttype CartPath,\n\tuseCartPath,\n\tuseCartValue,\n\tprovideCartPathContext,\n} from \"../hooks/index.js\";\nimport html from \"solid-js/html\";\n\nexport type Props = {\n\tarrayPath: CartPath;\n\tformat?: Format;\n\treverse?: boolean;\n\titemClass?: string;\n};\n\nexport const Name = \"cart-data-array\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n\tconst itemTemplate = getTemplateContent(element, \"item\");\n\tif (!itemTemplate)\n\t\treturn console.warn(\n\t\t\t`${Name}: No template found with a property of 'item'.`,\n\t\t);\n\tif (!props.arrayPath) return console.warn(`${Name}: No array path provided.`);\n\tconst mergedProps = {\n\t\telement,\n\t\tpath: () => props.arrayPath,\n\t};\n\tconst fullPath = useCartPath(mergedProps);\n\tprovideCartPathContext({\n\t\telement,\n\t\tpath: fullPath,\n\t});\n\n\tconst value = useCartValue({\n\t\telement,\n\t\tpath: fullPath,\n\t});\n\n\tconst arrayValue = createMemo(() => {\n\t\tconst v = value();\n\n\t\tif (!v) {\n\t\t\tconsole.warn(`${Name}: value is null or undefined at path ${fullPath()}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tif (!Array.isArray(v)) {\n\t\t\tconsole.warn(`${Name}: value is not an array at path ${fullPath()}`);\n\t\t\treturn null;\n\t\t}\n\n\t\tif (props.reverse) {\n\t\t\treturn v.toReversed();\n\t\t}\n\n\t\treturn v;\n\t});\n\n\telement.replaceChildren(...[]);\n\n\treturn html`\n <${Show} when=${() => arrayValue() && arrayValue()!.length > 0}>\n <${For} each=${arrayValue}>\n ${(_: any, idx: Accessor<number>) => html`\n <cart-data-array-item item-index=${() => `${idx()}`} class=${() => props.itemClass}>\n ${() => Array.from(itemTemplate.cloneNode(true).childNodes)}\n </cart-data-array-item>\n `}\n <//>\n <//>\n `;\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { getTemplateContent, type Format } from \"../utils/index.js\";\n\nimport { createEffect, on, createMemo, mapArray } from \"solid-js\";\n\nimport {\n type CartPath,\n useCartPath,\n useCartValue,\n provideCartPathContext,\n} from \"../hooks/index.js\";\n\nimport { getTargetElement } from \"../utils/index.js\";\n\nimport html from \"solid-js/html\";\n\nexport type Props = {\n arrayPath: CartPath;\n wrapInnerChild: boolean;\n target: string;\n format?: Format;\n reverse?: boolean;\n};\n\nexport const Name = \"cart-data-array-injection\";\n\nexport const Component: CorrectComponentType<Props> = (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 );\n if (!props.arrayPath) return console.warn(`${Name}: No array path provided.`);\n const mergedProps = {\n element,\n path: () => props.arrayPath,\n };\n const fullPath = useCartPath(mergedProps);\n provideCartPathContext({\n element,\n path: fullPath,\n });\n\n const value = useCartValue({\n path: fullPath,\n element,\n });\n\n const arrayValue = createMemo(() => {\n const v = value();\n\n if (!v) {\n console.warn(`${Name}: value is null or undefined at path ${fullPath()}`);\n return null;\n }\n\n if (!Array.isArray(v)) {\n console.warn(`${Name}: value is not an array at path ${fullPath()}`);\n return null;\n }\n\n if (props.reverse) {\n return v.toReversed();\n }\n\n return v;\n });\n\n const children = createMemo(\n mapArray(arrayValue, (_, idx) => {\n const fragment = itemTemplate.cloneNode(true);\n const container = fragment instanceof DocumentFragment ? fragment : null;\n if (props.wrapInnerChild && container) {\n const firstElement = container.firstElementChild;\n if (!firstElement) return null;\n const children = Array.from(firstElement.children);\n\n const wrapper = html`\n <cart-data-array-item item-index=${() => `${idx()}`}>\n ${() => Array.from(children)}\n </cart-data-array-item>\n `;\n firstElement.replaceChildren(\n Array.isArray(wrapper) ? wrapper.at(0)! : wrapper,\n );\n\n return firstElement;\n }\n }),\n );\n\n createEffect(\n on(\n () => {\n const rootElement = element;\n return {\n target: getTargetElement(rootElement, props.target),\n children: children(),\n };\n },\n ({ children, target }) => {\n if (!target) return;\n const filteredChildren = children.filter(\n (v) => v !== null && v !== undefined,\n );\n target.replaceChildren(...filteredChildren);\n },\n ),\n );\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n\tprovideCartPathContext,\n\tuseCartPath,\n\ttype CartPath,\n} from \"../hooks/index.js\";\n\nexport type Props = {\n\titemIndex: string;\n};\n\nexport const Name = \"cart-data-array-item\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n\tif (!props.itemIndex)\n\t\treturn console.warn(`${Name}: No path attribute provided.`);\n\n\tconst mergedProps = {\n\t\telement,\n\t\tpath: () => props.itemIndex,\n\t};\n\n\tconst fullPath = useCartPath(mergedProps as any);\n\tprovideCartPathContext({\n\t\telement,\n\t\tpath: fullPath,\n\t});\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { createEffect, on, onCleanup } from \"solid-js\";\nimport debounce from \"lodash.debounce\";\n\nimport {\n type Status,\n provideListenerStatusContext,\n useCartValue,\n useCartPath,\n} from \"../hooks/index.js\";\nimport AjaxCart from \"@brytdesigns/shopify-ajax-cart\";\nimport { parseNestedObject } from \"../utils/index.js\";\n\nexport type Props = {\n status: Status;\n on: string;\n method: string;\n debounceDelay: number;\n resetForm: boolean;\n resetStatusDelay: number;\n preventDefault: boolean;\n};\n\nexport const Name = \"cart-data-listener\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n const [_, setStatus] = provideListenerStatusContext({\n element,\n get status() {\n return props.status;\n },\n });\n\n const path = useCartPath({\n element,\n });\n const data = useCartValue({\n element,\n path,\n });\n\n // let currentEventId: string | null = null;\n\n createEffect(\n on(\n () => ({\n method: props.method,\n on: props.on,\n preventDefault: props.preventDefault,\n data: data() as any,\n debounceDelay: props.debounceDelay,\n resetForm: props.resetForm,\n resetStatusDelay: props.resetStatusDelay,\n }),\n ({\n method,\n on,\n preventDefault,\n data,\n debounceDelay,\n resetForm,\n resetStatusDelay,\n }) => {\n if (!method)\n return console.error(`${Name}: method property is required!`);\n if (!on) return console.error(`${Name}: on property is required!`);\n\n let resetStatusId: number | null = null;\n // tempEventId: string | null = null;\n\n function onEvent(e: Event) {\n const cart = AjaxCart;\n\n // (currentEventId = createUniqueId()), (tempEventId = currentEventId);\n\n if (preventDefault) e.preventDefault();\n\n async function handleStatus<T>(promise: Promise<T>) {\n setStatus(\"loading\");\n return promise\n .then((data) => {\n setStatus(\"success\");\n return data;\n })\n .catch((error) => {\n setStatus(\"error\");\n return error;\n })\n .finally(() => {\n if (resetStatusDelay > 0) {\n //@ts-ignore\n resetStatusId = setTimeout(() => {\n setStatus(\"default\");\n resetStatusId = null;\n }, resetStatusDelay);\n } else {\n setStatus(\"default\");\n }\n });\n }\n\n if (on === \"submit\") {\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const formObj = parseNestedObject(\n //@ts-ignore\n Object.fromEntries(formData.entries()),\n );\n\n function reset() {\n if (resetForm) form.reset();\n }\n\n if (method === \"replaceItem\") {\n return handleStatus(\n cart.replaceItem({\n key: formObj.key,\n id: formObj.id,\n }),\n ).finally(reset);\n }\n\n if (method === \"updateItem\") {\n return handleStatus(\n cart.updateItem({\n id: formObj.id,\n quantity: formObj?.quantity || undefined,\n properties: formObj?.properties || {},\n selling_plan: formObj?.selling_plan || undefined,\n }),\n ).finally(reset);\n }\n\n if (method === \"removeItem\") {\n return handleStatus(cart.removeItem(formObj.key)).finally(reset);\n }\n\n if (method === \"addDiscount\") {\n return handleStatus(cart.addDiscount(formObj.code)).finally(\n reset,\n );\n }\n\n if (method === \"removeDiscount\") {\n return handleStatus(cart.removeDiscount(formObj.code)).finally(\n reset,\n );\n }\n\n if (method === \"updateNote\") {\n return handleStatus(cart.updateNote(formObj.note)).finally(reset);\n }\n\n return;\n }\n\n const input = e.target as HTMLInputElement;\n\n if (method === \"removeItem\") {\n return handleStatus(cart.removeItem(data.key));\n }\n\n if (method === \"updateQuantity\") {\n return handleStatus(\n cart.updateItem({\n id: data.key,\n quantity: input.valueAsNumber,\n }),\n );\n }\n\n if (method === \"updateItemVariant\") {\n return handleStatus(\n cart.replaceItem({\n key: data.key,\n id: input.value,\n }),\n );\n }\n\n if (method === \"updateNote\") {\n return handleStatus(cart.updateNote(input.value));\n }\n }\n const handleEvent = debounce(onEvent, debounceDelay),\n controller = new AbortController();\n\n element.addEventListener(\n on,\n (e) => {\n if (preventDefault) e.preventDefault();\n handleEvent(e);\n },\n { signal: controller.signal },\n );\n\n return onCleanup(() => {\n controller.abort();\n if (resetStatusId) clearTimeout(resetStatusId);\n });\n },\n ),\n );\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { createMemo } from \"solid-js\";\n\nimport { type Status, useListenerStatus } from \"../hooks/index.js\";\nimport { getTemplateContent } from \"../utils/index.js\";\n\nexport const Name = \"cart-data-listener-status\";\n\nexport const Component: CorrectComponentType<{}> = (_, { element }) => {\n const [status] = useListenerStatus(element);\n if (!status) return console.error(`${Name}: no listener context provided!`);\n\n const templates = {\n default: getTemplateContent(element, \"default\"),\n loading: getTemplateContent(element, \"loading\"),\n success: getTemplateContent(element, \"success\"),\n error: getTemplateContent(element, \"error\"),\n };\n\n let previousState: Status | null = null;\n\n const currentStatus = () => {\n const s = status();\n if (!templates[s]) return previousState;\n previousState = s;\n return s;\n };\n\n element.replaceChildren(...[]);\n\n return createMemo(() => {\n const state = currentStatus();\n if (!state) return null;\n const template = templates[state];\n if (!template) return null;\n return Array.from(template.cloneNode(true).childNodes);\n });\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n type CartPath,\n useCartFormattedValue,\n useCartPath,\n} from \"../hooks/index.js\";\nimport { type Format, getTargetElement } from \"../utils/index.js\";\nimport { createEffect, on, onCleanup } from \"solid-js\";\n\nexport type Props = {\n propertyName: CartPath;\n format?: Format;\n target: string;\n attributeName: string;\n injectionType: \"attribute\" | \"property\" | \"template\";\n};\n\nconst VALID_INJECTION_TYPES = [\"attribute\", \"property\", \"template\"];\n\nexport const Name = \"cart-data-injection\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n if (!props.propertyName)\n return console.warn(`${Name}: No path attribute provided.`);\n if (!props.target) return console.warn(`${Name}: No target attribute found!`);\n if (!props.attributeName)\n return console.warn(`${Name}: No attribute-name attribute found!`);\n\n if (\n !props.injectionType ||\n (props.injectionType &&\n !VALID_INJECTION_TYPES.includes(props.injectionType))\n )\n return console.warn(`${Name}: Invalid injection-type attribute provided.`);\n\n const mergedProps = {\n element,\n path: () => props.propertyName,\n };\n const fullPath = useCartPath(mergedProps);\n const value = useCartFormattedValue({\n element,\n path: fullPath,\n get format() {\n return props.format;\n },\n });\n\n createEffect(\n on(\n () => {\n return {\n target: getTargetElement(element, props.target),\n value: value(),\n attributeName: props.attributeName,\n injectionType: props.injectionType,\n propertyName: props.propertyName,\n };\n },\n ({ target, value, attributeName, injectionType, propertyName }) => {\n if (!target)\n return console.warn(\n `${Name}: Unable to find element with selector of: ${props.target}`,\n );\n\n if (\n injectionType === \"attribute\" &&\n value !== null &&\n value !== undefined\n ) {\n target.setAttribute(attributeName, `${value}`);\n return;\n }\n\n if (\n injectionType === \"property\" &&\n value !== null &&\n value !== undefined\n ) {\n //@ts-ignore\n target[attributeName] = value;\n return;\n }\n\n if (\n injectionType === \"template\" &&\n value !== null &&\n value !== undefined\n ) {\n if (attributeName === \"style\") {\n //@ts-ignore\n const styleTmpl = target[attributeName].cssText;\n setTimeout(() => {\n //@ts-ignore\n target[attributeName].cssText = styleTmpl.replace(\n //@ts-ignore\n `{${propertyName}}`,\n value,\n );\n });\n return onCleanup(() => {\n //@ts-ignore\n target[attributeName].cssText = styleTmpl;\n });\n }\n const tmpValue = target.getAttribute(attributeName);\n if (!tmpValue || !value)\n return console.warn(\n `${Name}: Unable to inject value into template`,\n );\n setTimeout(() => {\n target.setAttribute(\n attributeName,\n\n tmpValue.replace(`{${propertyName}}`, `${value}`),\n );\n });\n return onCleanup(() => {\n target.setAttribute(attributeName, tmpValue);\n });\n }\n },\n ),\n );\n};\n","import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { Show, createMemo } from \"solid-js\";\n\nimport { getTemplateContent } from \"../utils/index.js\";\nimport html from \"solid-js/html\";\n\nimport AjaxCart from \"@brytdesigns/shopify-ajax-cart\";\n\ntype Status = (typeof AjaxCart)[\"status\"];\n\nexport type Props = {\n ignoredStates: Array<Status>;\n};\n\nexport const Name = \"cart-loading-state\";\n\nexport const Component: CorrectComponentType<Props> = (props, { element }) => {\n const cart = AjaxCart;\n\n const templates = {\n pending: getTemplateContent(element, \"pending\"),\n error: getTemplateContent(element, \"error\"),\n success: getTemplateContent(element, \"success\"),\n };\n\n let previousState: Status | null = null;\n\n const cartState = createMemo(() => {\n const state = cart?.status;\n if (!templates[state] || props.ignoredStates.includes(state))\n return previousState;\n previousState = state;\n return state;\n });\n\n element.replaceChildren(...[]);\n\n return html`\n <${Show} when=${() => cart}>\n ${() => {\n const state = cartState();\n if (!state) return null;\n if (!templates[state]) return null;\n const children = Array.from(\n templates[state].cloneNode(true).childNodes,\n );\n return children;\n }}\n <//>\n `;\n};\n","import {\n\tcustomShadowlessElement,\n\tcorrectElementType,\n} from \"@brytdesigns/web-component-core/utils\";\n\nimport {\n\tCartContext,\n\tCartData,\n\tCartDataArray,\n\tCartDataArrayInjection,\n\tCartDataArrayItem,\n\tCartDataConditions,\n\tCartDataInjection,\n\tCartDataListener,\n\tCartDataListenerStatus,\n\tCartLoadingState,\n} from \"./components/index.js\";\n\nexport type CartContextProps = CartContext.Props;\nexport type CartDataProps = CartData.Props;\nexport type CartDataArrayProps = CartDataArray.Props;\nexport type CartDataArrayInjectionProps = CartDataArrayInjection.Props;\nexport type CartDataArrayItemProps = CartDataArrayItem.Props;\nexport type CartDataConditionsProps = CartDataConditions.Props;\nexport type CartDataInjectionProps = CartDataInjection.Props;\nexport type CartDataListenerProps = CartDataListener.Props;\nexport type CartLoadingStateProps = CartLoadingState.Props;\n\ncustomShadowlessElement(\n\tCartContext.Name,\n\t{ debug: false },\n\tcorrectElementType(CartContext.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataArrayItem.Name,\n\t{ itemIndex: \"0\" },\n\tcorrectElementType(CartDataArrayItem.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataArray.Name,\n\t{\n\t\tformat: \"\",\n\t\tarrayPath: \"items\",\n\t\treverse: false,\n\t\titemClass: \"\",\n\t},\n\tcorrectElementType(CartDataArray.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataArrayInjection.Name,\n\t{\n\t\tformat: \"\",\n\t\tarrayPath: \"items\",\n\t\ttarget: \"\",\n\t\twrapInnerChild: true,\n\t\treverse: false,\n\t},\n\tcorrectElementType(CartDataArrayInjection.Component),\n);\n\ncustomShadowlessElement(\n\tCartData.Name,\n\t{\n\t\tformat: \"\",\n\t\tpropertyName: \"item_count\",\n\t},\n\tcorrectElementType(CartData.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataConditions.Name,\n\t{},\n\tcorrectElementType(CartDataConditions.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataInjection.Name,\n\t{\n\t\tpropertyName: \"item_count\",\n\t\tattributeName: \"data-item-count\",\n\t\tinjectionType: \"attribute\",\n\t\ttarget: \"\",\n\t\tformat: \"\",\n\t},\n\tcorrectElementType(CartDataInjection.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataListener.Name,\n\t{\n\t\tstatus: \"default\",\n\t\ton: \"submit\",\n\t\tmethod: \"updateItem\",\n\t\tresetForm: true,\n\t\tdebounceDelay: 0,\n\t\tresetStatusDelay: 0,\n\t\tpreventDefault: true,\n\t},\n\tcorrectElementType(CartDataListener.Component),\n);\n\ncustomShadowlessElement(\n\tCartDataListenerStatus.Name,\n\t{},\n\tcorrectElementType(CartDataListenerStatus.Component),\n);\n\ncustomShadowlessElement(\n\tCartLoadingState.Name,\n\t{ ignoredStates: [] },\n\tcorrectElementType(CartLoadingState.Component),\n);\n\nexport * from \"./hooks/index.js\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brytdesigns/shopify-ajax-cart-components",
3
- "version": "3.3.1",
3
+ "version": "3.3.3",
4
4
  "description": "Headless web components for the Ajax Cart Library",
5
5
  "main": "./dist/main/index.js",
6
6
  "types": "./dist/main/index.d.ts",
@@ -16,9 +16,9 @@
16
16
  ],
17
17
  "keywords": [],
18
18
  "dependencies": {
19
- "@brytdesigns/shopify-ajax-cart": "3.3.1",
20
- "@brytdesigns/shopify-utils": "3.3.1",
21
- "@brytdesigns/web-component-core": "3.3.1",
19
+ "@brytdesigns/shopify-ajax-cart": "3.3.3",
20
+ "@brytdesigns/shopify-utils": "3.3.3",
21
+ "@brytdesigns/web-component-core": "3.3.3",
22
22
  "@solidjs/web": "2.0.0-rc.14",
23
23
  "component-register": "0.8.7",
24
24
  "lodash.debounce": "^4.0.8",