@livenetworks/ashlar 2.0.7 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE +641 -641
  2. package/components/COMPONENTS.md +1116 -1116
  3. package/components/index.js +81 -81
  4. package/components/ln-accordion/ln-accordion-dev.scss +8 -8
  5. package/components/ln-accordion/ln-accordion.js +1 -1
  6. package/components/ln-accordion/ln-accordion.schema.json +30 -30
  7. package/components/ln-ajax/ln-ajax-dev.scss +8 -8
  8. package/components/ln-ajax/ln-ajax.js +1 -1
  9. package/components/ln-ajax/ln-ajax.schema.json +30 -30
  10. package/components/ln-api-connector/ln-api-connector.js +1 -1
  11. package/components/ln-api-connector/ln-api-connector.schema.json +96 -96
  12. package/components/ln-api-connector/src/ln-api-connector.js +1 -0
  13. package/components/ln-api-queue/ln-api-queue.js +1 -1
  14. package/components/ln-api-queue/ln-api-queue.schema.json +34 -34
  15. package/components/ln-api-queue/src/ln-api-queue.js +3 -13
  16. package/components/ln-autoresize/ln-autoresize-dev.scss +8 -8
  17. package/components/ln-autoresize/ln-autoresize.js +1 -1
  18. package/components/ln-autoresize/ln-autoresize.schema.json +22 -22
  19. package/components/ln-autosave/ln-autosave-dev.scss +13 -13
  20. package/components/ln-autosave/ln-autosave.js +1 -1
  21. package/components/ln-autosave/ln-autosave.schema.json +48 -48
  22. package/components/ln-autosave/src/autosave-model.js +34 -34
  23. package/components/ln-chart/ln-chart.js +1 -1
  24. package/components/ln-chart/ln-chart.schema.json +146 -146
  25. package/components/ln-chart/src/chart-model.js +154 -154
  26. package/components/ln-circular-progress/ln-circular-progress.js +1 -1
  27. package/components/ln-circular-progress/ln-circular-progress.schema.json +42 -42
  28. package/components/ln-confirm/ln-confirm-dev.scss +24 -24
  29. package/components/ln-confirm/ln-confirm.js +1 -1
  30. package/components/ln-confirm/ln-confirm.schema.json +66 -66
  31. package/components/ln-confirm/src/ln-confirm.js +178 -178
  32. package/components/ln-core/crypto.js +286 -265
  33. package/components/ln-core/dom.js +115 -115
  34. package/components/ln-core/form.js +136 -136
  35. package/components/ln-core/helpers.js +33 -33
  36. package/components/ln-core/http.js +48 -48
  37. package/components/ln-core/index.js +1 -1
  38. package/components/ln-core/ln-core.schema.json +109 -109
  39. package/components/ln-core/locale.js +55 -55
  40. package/components/ln-core/matching.js +78 -78
  41. package/components/ln-core/number.js +125 -125
  42. package/components/ln-core/template.js +206 -206
  43. package/components/ln-couchdb-connector/ln-couchdb-connector.js +1 -1
  44. package/components/ln-couchdb-connector/ln-couchdb-connector.schema.json +50 -50
  45. package/components/ln-couchdb-connector/src/ln-couchdb-connector.js +1 -0
  46. package/components/ln-data-coordinator/README.md +9 -38
  47. package/components/ln-data-coordinator/ln-data-coordinator-dev.scss +8 -8
  48. package/components/ln-data-coordinator/ln-data-coordinator.js +1 -1
  49. package/components/ln-data-coordinator/ln-data-coordinator.schema.json +16 -16
  50. package/components/ln-data-coordinator/src/data-read-policy.js +0 -7
  51. package/components/ln-data-coordinator/src/ln-data-coordinator.js +428 -1308
  52. package/components/ln-data-store/ln-data-store-dev.scss +13 -13
  53. package/components/ln-data-store/ln-data-store.js +1 -1
  54. package/components/ln-data-store/ln-data-store.schema.json +84 -84
  55. package/components/ln-data-store/src/data-store-model.js +184 -184
  56. package/components/ln-data-store/src/ln-data-store.js +1 -1
  57. package/components/ln-date/ln-date.js +1 -1
  58. package/components/ln-date/ln-date.schema.json +92 -92
  59. package/components/ln-date/src/date-model.js +186 -186
  60. package/components/ln-debug/ln-debug.js +1 -1
  61. package/components/ln-debug/ln-debug.schema.json +28 -28
  62. package/components/ln-debug/src/console-sink.js +19 -19
  63. package/components/ln-debug/src/gate.js +95 -95
  64. package/components/ln-debug/src/generated-attributes.js +2 -2
  65. package/components/ln-dropdown/ln-dropdown-dev.scss +13 -13
  66. package/components/ln-dropdown/ln-dropdown.js +1 -1
  67. package/components/ln-dropdown/ln-dropdown.schema.json +90 -90
  68. package/components/ln-editor/ln-editor.js +1 -1
  69. package/components/ln-editor/ln-editor.schema.json +58 -58
  70. package/components/ln-external-links/ln-external-links.js +1 -1
  71. package/components/ln-external-links/ln-external-links.schema.json +18 -18
  72. package/components/ln-fill/ln-fill.js +1 -1
  73. package/components/ln-fill/ln-fill.schema.json +23 -23
  74. package/components/ln-filter/ln-filter.js +1 -1
  75. package/components/ln-filter/ln-filter.schema.json +153 -153
  76. package/components/ln-filter/src/filter-model.js +185 -185
  77. package/components/ln-form/ln-form-dev.scss +8 -8
  78. package/components/ln-form/ln-form.js +1 -1
  79. package/components/ln-form/ln-form.schema.json +45 -45
  80. package/components/ln-http/ln-http.js +1 -1
  81. package/components/ln-http/ln-http.schema.json +6 -6
  82. package/components/ln-icon/ln-icon.schema.json +6 -6
  83. package/components/ln-include/ln-include.js +1 -1
  84. package/components/ln-include/ln-include.schema.json +23 -23
  85. package/components/ln-key/ln-key-dev.scss +18 -18
  86. package/components/ln-key/ln-key.js +1 -1
  87. package/components/ln-key/ln-key.schema.json +56 -56
  88. package/components/ln-key/src/ln-key.js +10 -10
  89. package/components/ln-link/ln-link-dev.scss +8 -8
  90. package/components/ln-link/ln-link.js +1 -1
  91. package/components/ln-link/ln-link.schema.json +22 -22
  92. package/components/ln-list/README.md +152 -152
  93. package/components/ln-list/ln-list-dev.scss +8 -8
  94. package/components/ln-list/ln-list.js +1 -1
  95. package/components/ln-list/ln-list.schema.json +166 -166
  96. package/components/ln-modal/ln-modal.js +1 -1
  97. package/components/ln-modal/ln-modal.schema.json +65 -65
  98. package/components/ln-nav/ln-nav.js +1 -1
  99. package/components/ln-nav/ln-nav.schema.json +25 -25
  100. package/components/ln-number/ln-number.js +1 -1
  101. package/components/ln-number/ln-number.schema.json +63 -63
  102. package/components/ln-number/src/number-model.js +31 -31
  103. package/components/ln-obfuscator/README.md +60 -60
  104. package/components/ln-obfuscator/ln-obfuscator.js +1 -1
  105. package/components/ln-obfuscator/ln-obfuscator.schema.json +49 -49
  106. package/components/ln-obfuscator/src/ln-obfuscator.js +159 -159
  107. package/components/ln-obfuscator/src/obfuscator-model.js +250 -250
  108. package/components/ln-options/ln-options.js +1 -1
  109. package/components/ln-options/ln-options.schema.json +41 -41
  110. package/components/ln-persist/README.md +151 -151
  111. package/components/ln-persist/ln-persist.js +1 -1
  112. package/components/ln-persist/ln-persist.schema.json +28 -28
  113. package/components/ln-persist/src/ln-persist.js +83 -83
  114. package/components/ln-picklist/README.md +230 -230
  115. package/components/ln-picklist/ln-picklist-dev.scss +22 -22
  116. package/components/ln-picklist/ln-picklist.js +1 -1
  117. package/components/ln-picklist/ln-picklist.schema.json +49 -49
  118. package/components/ln-picklist/src/ln-picklist.js +228 -228
  119. package/components/ln-popover/ln-popover-dev.scss +13 -13
  120. package/components/ln-popover/ln-popover.js +1 -1
  121. package/components/ln-popover/ln-popover.schema.json +82 -82
  122. package/components/ln-progress/ln-progress-dev.scss +8 -8
  123. package/components/ln-progress/ln-progress.js +1 -1
  124. package/components/ln-progress/ln-progress.schema.json +40 -40
  125. package/components/ln-router/ln-router.js +1 -1
  126. package/components/ln-router/ln-router.schema.json +76 -76
  127. package/components/ln-scroll/README.md +45 -45
  128. package/components/ln-scroll/ln-scroll.js +1 -1
  129. package/components/ln-scroll/ln-scroll.schema.json +85 -85
  130. package/components/ln-scroll/src/ln-scroll.js +150 -150
  131. package/components/ln-search/README.md +188 -188
  132. package/components/ln-search/ln-search.js +1 -1
  133. package/components/ln-search/ln-search.schema.json +103 -103
  134. package/components/ln-slug/ln-slug.js +1 -1
  135. package/components/ln-slug/ln-slug.schema.json +23 -23
  136. package/components/ln-sort/ln-sort.js +1 -1
  137. package/components/ln-sort/ln-sort.schema.json +104 -104
  138. package/components/ln-sort/src/ln-sort.js +321 -321
  139. package/components/ln-sort/src/sort-model.js +117 -117
  140. package/components/ln-sortable/ln-sortable-dev.scss +13 -13
  141. package/components/ln-sortable/ln-sortable.js +1 -1
  142. package/components/ln-sortable/ln-sortable.schema.json +36 -36
  143. package/components/ln-stat/ln-stat-dev.scss +8 -8
  144. package/components/ln-stat/ln-stat.js +1 -1
  145. package/components/ln-stat/ln-stat.schema.json +32 -32
  146. package/components/ln-stat/src/stat-model.js +28 -28
  147. package/components/ln-table/ln-table.js +1 -1
  148. package/components/ln-table/ln-table.schema.json +211 -211
  149. package/components/ln-table/src/table-model.js +98 -98
  150. package/components/ln-table-coordinator/ln-table-coordinator.js +1 -1
  151. package/components/ln-table-coordinator/ln-table-coordinator.schema.json +93 -93
  152. package/components/ln-tabs/ln-tabs.js +1 -1
  153. package/components/ln-tabs/ln-tabs.schema.json +75 -75
  154. package/components/ln-tabs/src/ln-tabs.js +208 -208
  155. package/components/ln-tabs/src/tabs-model.js +82 -82
  156. package/components/ln-time/ln-time-dev.scss +13 -13
  157. package/components/ln-time/ln-time.js +1 -1
  158. package/components/ln-time/ln-time.schema.json +38 -38
  159. package/components/ln-toast/ln-toast.js +1 -1
  160. package/components/ln-toast/ln-toast.schema.json +65 -65
  161. package/components/ln-toggle/ln-toggle.js +1 -1
  162. package/components/ln-toggle/ln-toggle.schema.json +52 -52
  163. package/components/ln-tooltip/ln-tooltip.js +1 -1
  164. package/components/ln-tooltip/ln-tooltip.schema.json +86 -86
  165. package/components/ln-translations/ln-translations.js +1 -1
  166. package/components/ln-translations/ln-translations.schema.json +120 -120
  167. package/components/ln-ui-coordinator/README.md +62 -62
  168. package/components/ln-ui-coordinator/ln-ui-coordinator.js +1 -1
  169. package/components/ln-ui-coordinator/ln-ui-coordinator.schema.json +28 -28
  170. package/components/ln-ui-coordinator/src/ln-ui-coordinator.js +140 -140
  171. package/components/ln-upload/ln-upload.js +1 -1
  172. package/components/ln-upload/ln-upload.schema.json +193 -193
  173. package/components/ln-upload/src/upload-model.js +78 -78
  174. package/components/ln-validate/ln-validate.js +1 -1
  175. package/components/ln-validate/ln-validate.schema.json +50 -50
  176. package/components/ln-validate/src/validate-model.js +64 -64
  177. package/components/ln-websocket-connector/README.md +166 -166
  178. package/components/ln-websocket-connector/ln-websocket-connector.js +1 -1
  179. package/components/ln-websocket-connector/ln-websocket-connector.schema.json +29 -29
  180. package/components/ln-websocket-connector/src/ln-websocket-connector.js +283 -279
  181. package/ln-ashlar.html-data.json +7 -8
  182. package/package.json +84 -84
  183. package/theme/brand.css +73 -73
  184. package/theme/components/_confirm.scss +6 -6
  185. package/theme/components/_picklist.scss +3 -3
  186. package/theme/config/_palette.scss +274 -274
  187. package/theme/config/_theme.scss +292 -292
  188. package/theme/config/_tokens.scss +285 -285
  189. package/theme/config/mixins/_index.scss +62 -62
  190. package/theme/config/mixins/_picklist.scss +66 -66
  191. package/theme/ln-ashlar-dev.scss +66 -66
  192. package/theme/ln-ashlar-landing.scss +56 -56
  193. package/theme/ln-ashlar-theme.scss +63 -63
  194. package/theme/presentation/_bento.scss +151 -151
  195. package/theme/presentation/_cta.scss +111 -111
  196. package/theme/presentation/_effects.scss +216 -216
  197. package/theme/presentation/_features.scss +108 -108
  198. package/theme/presentation/_footer.scss +129 -129
  199. package/theme/presentation/_hero.scss +158 -158
  200. package/theme/presentation/_layout.scss +170 -170
  201. package/theme/presentation/_navbar.scss +140 -140
  202. package/theme/presentation/_pricing.scss +262 -262
  203. package/theme/presentation/_stats.scss +87 -87
  204. package/theme/presentation/_testimonials.scss +124 -124
  205. package/theme/presentation/_tokens.scss +39 -39
  206. package/theme/presentation/_typography.scss +163 -163
  207. package/web-types.json +12 -12
@@ -1,81 +1,81 @@
1
- // ==========================================================================
2
- // ln-ashlar — Master Components Entry (Pure JavaScript)
3
- // ==========================================================================
4
- // All autonomous components are registered here.
5
- // Stylesheets are separate and explicit (dist/ln-ashlar.css, dist/ln-ashlar-core.css).
6
- // ==========================================================================
7
-
8
- // JS Components
9
- import './ln-http/src/ln-http.js';
10
- // ln-include must be the FIRST registerComponent caller: under `defer` the
11
- // readyState is already 'interactive', so every registerComponent takes the
12
- // synchronous boot branch during module evaluation, and ln-include's sweep has
13
- // to raise the boot gate before any other component sweeps. It sits AFTER
14
- // ln-http because its own fetch must go through the wrapped window.fetch.
15
- import './ln-include/src/ln-include.js';
16
- import './ln-form/src/ln-form.js';
17
- // ln-validate must attach its submit listener before ln-ajax's: a <form>
18
- // can carry both data-ln-validate fields and data-ln-ajax, and
19
- // same-target same-event listeners fire in registration order.
20
- // ln-validate's validation gate has to run first so ln-ajax can see
21
- // e.defaultPrevented. ln-data-coordinator's own write-claim listener is
22
- // unaffected by this ordering — it lives on `document` (bubble phase),
23
- // strictly after every listener registered directly on the form itself.
24
- import './ln-validate/src/ln-validate.js';
25
- import './ln-ajax/src/ln-ajax.js';
26
- import './ln-router/src/ln-router.js';
27
- import './ln-modal/src/ln-modal.js';
28
- import './ln-ui-coordinator/src/ln-ui-coordinator.js';
29
- import './ln-number/src/ln-number.js';
30
- import './ln-date/src/ln-date.js';
31
- import './ln-nav/src/ln-nav.js';
32
- // ln-persist installs its restore/save sink (setPersistSink) into
33
- // ln-core's shared findElements hook — see components/ln-persist. It
34
- // must import before any of its five owning components below
35
- // (ln-tabs, ln-toggle, ln-filter, ln-search, ln-sort) so the sink exists
36
- // before their own registerComponent() boot sweeps run. This is a plain
37
- // import-order requirement, not a boot gate — ln-persist does not hold
38
- // or delay any other component's initialization.
39
- import './ln-persist/src/ln-persist.js';
40
- import './ln-tabs/src/ln-tabs.js';
41
- import './ln-toggle/src/ln-toggle.js';
42
- import './ln-accordion/src/ln-accordion.js';
43
- import './ln-dropdown/src/ln-dropdown.js';
44
- import './ln-popover/src/ln-popover.js';
45
- import './ln-tooltip/src/ln-tooltip.js';
46
- import './ln-toast/src/ln-toast.js';
47
- import './ln-upload/src/ln-upload.js';
48
- import './ln-obfuscator/src/ln-obfuscator.js';
49
- import './ln-external-links/src/ln-external-links.js';
50
- import './ln-link/src/ln-link.js';
51
- import './ln-scroll/src/ln-scroll.js';
52
- import './ln-key/src/ln-key.js';
53
- import './ln-progress/src/ln-progress.js';
54
- import './ln-filter/src/ln-filter.js';
55
- import './ln-search/src/ln-search.js';
56
- import './ln-sort/src/ln-sort.js';
57
- import './ln-table/src/ln-table.js';
58
- import './ln-table-coordinator/src/ln-table-coordinator.js';
59
- import './ln-list/src/ln-list.js';
60
- import './ln-circular-progress/src/ln-circular-progress.js';
61
- import './ln-sortable/src/ln-sortable.js';
62
- import './ln-picklist/src/ln-picklist.js';
63
- import './ln-confirm/src/ln-confirm.js';
64
- import './ln-translations/src/ln-translations.js';
65
- import './ln-autosave/src/ln-autosave.js';
66
- import './ln-autoresize/src/ln-autoresize.js';
67
- import './ln-editor/src/ln-editor.js';
68
- import './ln-fill/src/ln-fill.js';
69
- import './ln-slug/src/ln-slug.js';
70
- import './ln-time/src/ln-time.js';
71
- import './ln-data-store/src/ln-data-store.js';
72
- import './ln-api-connector/src/ln-api-connector.js';
73
- import './ln-couchdb-connector/src/ln-couchdb-connector.js';
74
- import './ln-websocket-connector/src/ln-websocket-connector.js';
75
- import './ln-data-coordinator/src/ln-data-coordinator.js';
76
- import './ln-api-queue/src/ln-api-queue.js';
77
- import './ln-chart/src/ln-chart.js';
78
- import './ln-options/src/ln-options.js';
79
- import './ln-stat/src/ln-stat.js';
80
- import './ln-icon/src/ln-icon.js';
81
- import './ln-debug/src/ln-debug.js';
1
+ // ==========================================================================
2
+ // ln-ashlar — Master Components Entry (Pure JavaScript)
3
+ // ==========================================================================
4
+ // All autonomous components are registered here.
5
+ // Stylesheets are separate and explicit (dist/ln-ashlar.css, dist/ln-ashlar-core.css).
6
+ // ==========================================================================
7
+
8
+ // JS Components
9
+ import './ln-http/src/ln-http.js';
10
+ // ln-include must be the FIRST registerComponent caller: under `defer` the
11
+ // readyState is already 'interactive', so every registerComponent takes the
12
+ // synchronous boot branch during module evaluation, and ln-include's sweep has
13
+ // to raise the boot gate before any other component sweeps. It sits AFTER
14
+ // ln-http because its own fetch must go through the wrapped window.fetch.
15
+ import './ln-include/src/ln-include.js';
16
+ import './ln-form/src/ln-form.js';
17
+ // ln-validate must attach its submit listener before ln-ajax's: a <form>
18
+ // can carry both data-ln-validate fields and data-ln-ajax, and
19
+ // same-target same-event listeners fire in registration order.
20
+ // ln-validate's validation gate has to run first so ln-ajax can see
21
+ // e.defaultPrevented. ln-data-coordinator's own write-claim listener is
22
+ // unaffected by this ordering — it lives on `document` (bubble phase),
23
+ // strictly after every listener registered directly on the form itself.
24
+ import './ln-validate/src/ln-validate.js';
25
+ import './ln-ajax/src/ln-ajax.js';
26
+ import './ln-router/src/ln-router.js';
27
+ import './ln-modal/src/ln-modal.js';
28
+ import './ln-ui-coordinator/src/ln-ui-coordinator.js';
29
+ import './ln-number/src/ln-number.js';
30
+ import './ln-date/src/ln-date.js';
31
+ import './ln-nav/src/ln-nav.js';
32
+ // ln-persist installs its restore/save sink (setPersistSink) into
33
+ // ln-core's shared findElements hook — see components/ln-persist. It
34
+ // must import before any of its five owning components below
35
+ // (ln-tabs, ln-toggle, ln-filter, ln-search, ln-sort) so the sink exists
36
+ // before their own registerComponent() boot sweeps run. This is a plain
37
+ // import-order requirement, not a boot gate — ln-persist does not hold
38
+ // or delay any other component's initialization.
39
+ import './ln-persist/src/ln-persist.js';
40
+ import './ln-tabs/src/ln-tabs.js';
41
+ import './ln-toggle/src/ln-toggle.js';
42
+ import './ln-accordion/src/ln-accordion.js';
43
+ import './ln-dropdown/src/ln-dropdown.js';
44
+ import './ln-popover/src/ln-popover.js';
45
+ import './ln-tooltip/src/ln-tooltip.js';
46
+ import './ln-toast/src/ln-toast.js';
47
+ import './ln-upload/src/ln-upload.js';
48
+ import './ln-obfuscator/src/ln-obfuscator.js';
49
+ import './ln-external-links/src/ln-external-links.js';
50
+ import './ln-link/src/ln-link.js';
51
+ import './ln-scroll/src/ln-scroll.js';
52
+ import './ln-key/src/ln-key.js';
53
+ import './ln-progress/src/ln-progress.js';
54
+ import './ln-filter/src/ln-filter.js';
55
+ import './ln-search/src/ln-search.js';
56
+ import './ln-sort/src/ln-sort.js';
57
+ import './ln-table/src/ln-table.js';
58
+ import './ln-table-coordinator/src/ln-table-coordinator.js';
59
+ import './ln-list/src/ln-list.js';
60
+ import './ln-circular-progress/src/ln-circular-progress.js';
61
+ import './ln-sortable/src/ln-sortable.js';
62
+ import './ln-picklist/src/ln-picklist.js';
63
+ import './ln-confirm/src/ln-confirm.js';
64
+ import './ln-translations/src/ln-translations.js';
65
+ import './ln-autosave/src/ln-autosave.js';
66
+ import './ln-autoresize/src/ln-autoresize.js';
67
+ import './ln-editor/src/ln-editor.js';
68
+ import './ln-fill/src/ln-fill.js';
69
+ import './ln-slug/src/ln-slug.js';
70
+ import './ln-time/src/ln-time.js';
71
+ import './ln-data-store/src/ln-data-store.js';
72
+ import './ln-api-connector/src/ln-api-connector.js';
73
+ import './ln-couchdb-connector/src/ln-couchdb-connector.js';
74
+ import './ln-websocket-connector/src/ln-websocket-connector.js';
75
+ import './ln-data-coordinator/src/ln-data-coordinator.js';
76
+ import './ln-api-queue/src/ln-api-queue.js';
77
+ import './ln-chart/src/ln-chart.js';
78
+ import './ln-options/src/ln-options.js';
79
+ import './ln-stat/src/ln-stat.js';
80
+ import './ln-icon/src/ln-icon.js';
81
+ import './ln-debug/src/ln-debug.js';
@@ -1,8 +1,8 @@
1
- @use '../../theme/config/mixins' as *;
2
-
3
- [data-ln-debug] {
4
- // 1. Accordion Content Check: [data-ln-accordion] must wrap child collapsible panels
5
- [data-ln-accordion]:not(:has([data-ln-toggle])) {
6
- @include dev-dom-error("[data-ln-accordion] contains no [data-ln-toggle] collapsible panels.");
7
- }
8
- }
1
+ @use '../../theme/config/mixins' as *;
2
+
3
+ [data-ln-debug] {
4
+ // 1. Accordion Content Check: [data-ln-accordion] must wrap child collapsible panels
5
+ [data-ln-accordion]:not(:has([data-ln-toggle])) {
6
+ @include dev-dom-error("[data-ln-accordion] contains no [data-ln-toggle] collapsible panels.");
7
+ }
8
+ }
@@ -1 +1 @@
1
- (function(){"use strict";function O(){return typeof window>"u"?!1:window.lnDebug===!0||window.lnCore&&window.lnCore._debugSink?!0:typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug")||document.body.querySelector("[data-ln-debug]")!==null:!1}function p(e){if(typeof window>"u")return!1;if(window.lnDebug===!0)return!0;if(window.lnCore&&window.lnCore._debugIsContained)return e?window.lnCore._debugIsContained(e):window.lnCore._debugSink!==null;if(e&&e.closest){const t=e.closest("[data-ln-debug]");return!(!t||typeof document<"u"&&t===document.documentElement)}return typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug"):!1}if(typeof window<"u"&&(window.lnCore=window.lnCore||{},!window.lnCore._warnBound)){window.lnCore._warnBound=!0;const e=console.warn;console.warn=function(...t){if(typeof t[0]=="string"&&(t[0].startsWith("[ln-")||t[0].startsWith("[lnCore"))){let o=null;for(let i=1;i<t.length;i++)if(t[i]&&t[i].nodeType===1){o=t[i];break}if(!p(o))return}e.apply(console,t)}}function x(e,t,n){const o=n||{};window.lnCore._debugSink&&window.lnCore._debugSink("event",t,e,o),e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:o}))}function h(e,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){h(e,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}const E={};function B(e,t){E[e]=t}function W(e){return E[e]||{ingress:t=>t,egress:t=>t}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=B,window.lnCore.getDataMapper=W);function j(){typeof window>"u"||(window.lnCore=window.lnCore||{},!window.lnCore._localeObserverBound&&(window.lnCore._localeObserverBound=!0,h(function(){new MutationObserver(function(){x(document,"ln-core:locale-change",{})}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"],subtree:!0})},"ln-core")))}const L={};function N(e,t){if(!e||typeof t!="object")return;const n=e.toLowerCase().split("-")[0];L[n]=t}function V(e){if(!e)return null;const t=e.toLowerCase().split("-")[0];return L[t]||null}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerLocaleFallback=N,window.lnCore.getLocaleFallback=V,window.lnCore.ensureLocaleObserver=j);const C={};function H(e,t){C[e]||(C[e]=document.querySelector('[data-ln-template="'+e+'"]'));const n=C[e];return n?n.content.cloneNode(!0):(console.warn("["+(t||"ln-core")+'] Template "'+e+'" not found'),null)}function T(e,t){if(!e||!t)return e;const n=e.querySelectorAll("[data-ln-field]");for(let l=0;l<n.length;l++){const c=n[l],s=c.getAttribute("data-ln-field");t[s]!=null&&(c.textContent=t[s])}const o=e.querySelectorAll("[data-ln-attr]");for(let l=0;l<o.length;l++){const c=o[l],s=c.getAttribute("data-ln-attr").split(",");for(let d=0;d<s.length;d++){const a=s[d].trim().split(":");if(a.length!==2)continue;const u=a[0].trim(),f=a[1].trim();t[f]!=null&&c.setAttribute(u,t[f])}}const i=e.querySelectorAll("[data-ln-show]");for(let l=0;l<i.length;l++){const c=i[l],s=c.getAttribute("data-ln-show");s in t&&c.classList.toggle("hidden",!t[s])}const r=e.querySelectorAll("[data-ln-class]");for(let l=0;l<r.length;l++){const c=r[l],s=c.getAttribute("data-ln-class").split(",");for(let d=0;d<s.length;d++){const a=s[d].trim().split(":");if(a.length!==2)continue;const u=a[0].trim(),f=a[1].trim();f in t&&c.classList.toggle(u,!!t[f])}}return e}function U(e,t){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&(window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",e,t??null),e.dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0})));const n=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let o=0;o<n.length;o++)window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",n[o],t??null),n[o].dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));return e}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(e){if(!(!e.target.matches||!e.target.matches("[data-ln-fillable]")))if(e.detail)T(e.target,e.detail);else{const t=e.target.querySelectorAll("[data-ln-field]");for(let n=0;n<t.length;n++)t[n].textContent=""}})));function $(e,t){if(!e||!t)return e;const n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){const r=n.currentNode;r.textContent.indexOf("{{")!==-1&&(r.textContent=r.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(l,c){return t[c]!==void 0?t[c]:""}))}const o=function(r,l){return t[l]!==void 0?t[l]:""},i=Array.from(e.querySelectorAll("*"));e.nodeType===1&&i.push(e);for(let r=0;r<i.length;r++){const l=i[r],c=l.attributes;for(let s=0;s<c.length;s++){const d=c[s];d.value.indexOf("{{")!==-1&&l.setAttribute(d.name,d.value.replace(/\{\{\s*(\w+)\s*\}\}/g,o))}}return e}function Q(e,t,n,o,i,r){const l={};for(let s=0;s<e.children.length;s++){const d=e.children[s],a=d.getAttribute("data-ln-render-key");a&&(l[a]=d)}const c=document.createDocumentFragment();for(let s=0;s<t.length;s++){const d=t[s],a=String(o(d));let u=l[a];if(u)i(u,d,s);else{const f=H(n,r);if(!f||($(f,d),u=f.firstElementChild,!u))continue;u.setAttribute("data-ln-render-key",a),i(u,d,s)}c.appendChild(u)}e.textContent="",e.appendChild(c)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.fillTemplate=$,window.lnCore.fill=T,window.lnCore.lnFill=U,window.lnCore.renderList=Q);function D(e,t,n,o,i){if(!e||t===null)return!0;const r=o||"ln-component",l=e.type;if(l==="trigger"||l==="marker"||l==="string"||l==="list"||!l||t===""&&e.fallback!==void 0)return!0;const c=s=>{i?console.warn(s,i):console.warn(s)};if(l==="boolean"){const s=t.trim().toLowerCase();return s!==""&&s!=="true"&&s!=="false"&&s!=="1"&&s!=="0"?(c(`[${r}] Invalid value "${t}" for boolean attribute "${n}". Allowed: "true", "false", or presence-only.`),!1):!0}if(l==="enum"){const s=e.values||[];return s.includes(t)?!0:(c(`[${r}] Invalid value "${t}" for attribute "${n}". Allowed: ${s.join(", ")}. Fallback: "${e.fallback}".`),!1)}if(l==="integer"){if(!/^-?\d+$/.test(t))return c(`[${r}] Invalid integer "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1;const s=parseInt(t,10);return e.min!==void 0&&s<e.min?(c(`[${r}] Value ${s} for attribute "${n}" is less than min (${e.min}).`),!1):e.max!==void 0&&s>e.max?(c(`[${r}] Value ${s} for attribute "${n}" is greater than max (${e.max}).`),!1):!0}if(l==="float")return isNaN(Number(t))?(c(`[${r}] Invalid float "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1):!0;if(l==="json")try{return JSON.parse(t),!0}catch(s){return c(`[${r}] Invalid JSON for attribute "${n}": ${s.message}. Fallback: ${e.fallback}.`),!1}return!0}function K(e){const t={};for(const n in e){const o=e[n];o&&o.effect&&(t[n]=o.effect)}return Object.keys(t).length?t:null}function G(e){if(e.onAttrChange&&!e.declared)return null;const t=new Set;if(e.effects)for(const n in e.effects)t.add(n);if(e.onAttrChange&&e.declared)for(const n of e.declared)t.add(n);return t}function y(e,t,n,o){if(e.nodeType!==1)return;const r=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",l=Array.from(e.querySelectorAll(r));e.matches&&e.matches(r)&&l.push(e);for(const c of l)if(!c[n]){window.lnCore._persistSink&&c.hasAttribute("data-ln-persist")&&window.lnCore._persistSink(c,t);try{c[n]=new o(c)}catch(s){console.error("["+n+"] init failed",c,s)}}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._bootHolds=window.lnCore._bootHolds||0,window.lnCore._bootQueue=window.lnCore._bootQueue||[]);function J(){return typeof window<"u"&&window.lnCore&&window.lnCore._bootHolds||0}function P(e){typeof window<"u"?(window.lnCore=window.lnCore||{},window.lnCore._bootHolds=window.lnCore._bootHolds||0,window.lnCore._bootQueue=window.lnCore._bootQueue||[],window.lnCore._bootHolds>0?window.lnCore._bootQueue.push(e):setTimeout(e,0)):e()}function I(){window.lnCore=window.lnCore||{};const e=window.lnCore._attrRegistry=window.lnCore._attrRegistry||{byAttr:new Map,reactive:[],persist:[]};return e.byReactive=e.byReactive||new Map,e.reactiveWildcard=e.reactiveWildcard||[],e}function X(e){const t=I(),n=e.observed||[];for(let o=0;o<n.length;o++){const i=n[o];t.byAttr.has(i)||t.byAttr.set(i,[]),t.byAttr.get(i).push(e)}if(t.byDeclaredAttr=t.byDeclaredAttr||new Map,e.attributes)for(const o in e.attributes){t.byDeclaredAttr.has(o)||t.byDeclaredAttr.set(o,[]);const i=t.byDeclaredAttr.get(o);i.some(r=>r.componentTag===e.componentTag)||i.push({spec:e.attributes[o],componentTag:e.componentTag})}if(e.onAttrChange||e.effects){t.reactive.push(e);const o=G(e);if(o===null)t.reactiveWildcard.push(e);else for(const i of o)t.byReactive.has(i)||t.byReactive.set(i,[]),t.byReactive.get(i).push(e)}e.persist&&t.persist.push(e)}function q(e,t,n,o){for(let i=0;i<e.length;i++){const r=e[i];if(!t[r.attribute])continue;const l=r.effects&&r.effects[n];l?l(t,n,o):r.onAttrChange&&(!r.declared||r.declared.has(n))&&r.onAttrChange(t,n,o)}}function z(e){const t=e.target,n=e.attributeName;if(e.oldValue===t.getAttribute(n))return;const o=I(),i=o.byAttr.get(n);if(O()&&o.byDeclaredAttr&&o.byDeclaredAttr.has(n)&&p(t)){const r=o.byDeclaredAttr.get(n),l=t.getAttribute(n);for(let c=0;c<r.length;c++)D(r[c].spec,l,n,r[c].componentTag,t)}if(window.lnCore._debugSink&&(n.indexOf("data-ln-")===0||i)&&window.lnCore._debugSink("attr",n,t,{oldValue:e.oldValue,newValue:t.getAttribute(n)}),n.indexOf("data-ln-")===0){const r=o.byReactive.get(n);r&&q(r,t,n,e.oldValue),o.reactiveWildcard.length&&q(o.reactiveWildcard,t,n,e.oldValue)}if(i)for(let r=0;r<i.length;r++){const l=i[r];if(l.handler){l.handler(t,n,e.oldValue);continue}l.onAttributeChange&&t[l.attribute]?l.onAttributeChange(t,n):(y(t,l.selector,l.attribute,l.ComponentFn),l.onInit&&l.onInit(t))}}function Y(){window.lnCore=window.lnCore||{},!window.lnCore._attrObserverBound&&(window.lnCore._attrObserverBound=!0,h(function(){new MutationObserver(function(t){for(let n=0;n<t.length;n++)try{z(t[n])}catch(o){console.error("[ln-core] mutation handler failed",t[n].target,o)}}).observe(document.body,{attributes:!0,subtree:!0,attributeOldValue:!0})},"ln-core"))}function R(){return window.lnCore=window.lnCore||{},window.lnCore._lifecycleRegistry=window.lnCore._lifecycleRegistry||[]}function Z(e){const t=R();if(t.length){if(e.target)for(let n=0;n<t.length;n++){const o=t[n];if(o.onSubtreeChange){const i=o.query,r=e.target.nodeType===1?e.target.matches(i)?e.target:e.target.closest(i):e.target.parentElement?e.target.parentElement.closest(i):null;r&&o.onSubtreeChange(r,e)}}for(let n=0;n<e.addedNodes.length;n++){const o=e.addedNodes[n];if(o.nodeType===1)for(let i=0;i<t.length;i++){const r=t[i];y(o,r.selector,r.attribute,r.ComponentFn),r.onInit&&r.onInit(o)}}for(let n=0;n<e.removedNodes.length;n++){const o=e.removedNodes[n];if(o.nodeType===1)for(let i=0;i<t.length;i++){const r=t[i],l=r.query,c=Array.from(o.querySelectorAll(l));o.matches&&o.matches(l)&&c.push(o);for(let s=0;s<c.length;s++){const d=c[s];if(!document.contains(d)){const a=d[r.attribute];if(a&&typeof a.destroy=="function")try{a.destroy()}catch(u){console.error("["+r.attribute+"] destroy failed",d,u)}delete d[r.attribute]}}}}}}function ee(){window.lnCore=window.lnCore||{},!window.lnCore._lifecycleObserverBound&&(window.lnCore._lifecycleObserverBound=!0,h(function(){new MutationObserver(function(t){for(let n=0;n<t.length;n++){const o=t[n];if(o.type==="childList")try{Z(o)}catch(i){console.error("[ln-core] lifecycle handler failed",o.target,i)}}}).observe(document.body,{childList:!0,subtree:!0})},"ln-core"))}function te(e,t,n,o,i={}){const r=i.extraAttributes||[],l=i.onAttributeChange||null,c=i.onSubtreeChange||null,s=i.onInit||null,d=i.onAttrChange||null,a=i.effects||null,u=i.attributes||null,f=u?K(u):a,ue=u?new Set(Object.keys(u)):null,ae=i.persist||null;function g(_){const w=_||document.body;if(y(w,e,t,n),u&&O())for(const b in u){const we=u[b],v=Array.from(w.querySelectorAll("["+b+"]"));w.matches&&w.matches("["+b+"]")&&v.push(w);for(let S=0;S<v.length;S++){const k=v[S];p(k)&&D(we,k.getAttribute(b),b,o,k)}}s&&s(w)}const A=[];if(e.indexOf("[")!==-1){const _=/\[([\w-]+)/g;let w;for(;(w=_.exec(e))!==null;)A.push(w[1])}else A.push(e);X({selector:e,attribute:t,componentTag:o,attributes:u,ComponentFn:n,onInit:s,observed:A.concat(r),onAttributeChange:l,onAttrChange:d,effects:f,declared:ue,persist:ae}),Y();const fe=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]";R().push({selector:e,attribute:t,ComponentFn:n,onInit:s,onSubtreeChange:c,query:fe}),ee(),window[t]=g;function M(){J()>0?P(function(){g(document.body)}):g(document.body)}return document.readyState==="loading"?document.addEventListener("DOMContentLoaded",M):M(),g}function F(e){return(e||"").replace(/^#/,"")}function m(e){const t=e===void 0?location.hash:e,n={},o=F(t);if(!o)return n;const i=o.split("&");for(let r=0;r<i.length;r++){const l=i[r];if(!l)continue;const c=l.indexOf(":"),s=c>-1?l.slice(0,c):l,d=c>-1?l.slice(c+1):"";if(s)try{n[s]=decodeURIComponent(d)}catch{n[s]=d}}return n}function ne(e){if(!e)return null;const t=m();return e in t?t[e]:null}function oe(e,t){if(!e)return;const n=m();t==null?delete n[e]:n[e]=String(t);const i=Object.keys(n).map(function(r){const l=n[r];return l===""?r:r+":"+encodeURIComponent(l)}).join("&");F(location.hash)!==i&&(location.hash=i)}function re(e){return e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?!1:(e.preventDefault(),!0)}function ie(e,t){if(!e||!e.hasAttribute("data-ln-hash"))return null;const n=e.getAttribute("data-ln-hash");if(n&&n.trim()!=="")return n.trim();const o=e.getAttribute("data-ln-sort")||e.getAttribute("data-ln-search-for")||e.getAttribute("data-ln-search")||e.getAttribute("data-ln-filter")||e.id;return o?t?o+"-"+t:o:t||null}function le(e,t){return!t||t==="none"||e===null||e===void 0?null:String(e)+"."+t}function se(e){return!e||typeof e!="string"?null:e.endsWith(".asc")?{fieldOrColumn:e.slice(0,-4),direction:"asc"}:e.endsWith(".desc")?{fieldOrColumn:e.slice(0,-5),direction:"desc"}:null}function ce(e,t){return!e||!Array.isArray(t)||t.length===0?null:e+":"+t.map(encodeURIComponent).join(",")}function de(e){if(!e||typeof e!="string")return null;const t=e.indexOf(":");if(t===-1)return null;const n=e.slice(0,t),o=e.slice(t+1),i=o?o.split(",").map(function(r){try{return decodeURIComponent(r)}catch{return r}}).filter(Boolean):[];return{key:n,values:i}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=m,window.lnCore.hashGet=ne,window.lnCore.hashSet=oe,window.lnCore.hashLinkClick=re,window.lnCore.resolveHashNamespace=ie,window.lnCore.hashSortEncode=le,window.lnCore.hashSortDecode=se,window.lnCore.hashFilterEncode=ce,window.lnCore.hashFilterDecode=de),(function(){const e="data-ln-accordion",t="lnAccordion";if(window[t]!==void 0)return;const n={"data-ln-accordion":{type:"marker",description:"Identifies container as an accordion that coordinates single-panel expansion"}};function o(i){return this.dom=i,this._onToggleOpen=function(r){if(!r.detail||!r.detail.target||r.detail.target.closest("[data-ln-accordion]")!==i)return;const l=i.querySelectorAll("[data-ln-toggle]");for(const c of l)c!==r.detail.target&&c.closest("[data-ln-accordion]")===i&&c.getAttribute("data-ln-toggle")==="open"&&c.setAttribute("data-ln-toggle","close");x(i,"ln-accordion:change",{target:r.detail.target})},i.addEventListener("ln-toggle:open",this._onToggleOpen),this}o.prototype.destroy=function(){this.dom[t]&&(this.dom.removeEventListener("ln-toggle:open",this._onToggleOpen),delete this.dom[t])},te(e,t,o,"ln-accordion",{attributes:n})})()})();
1
+ (function(){"use strict";function k(){return typeof window>"u"?!1:window.lnDebug===!0||window.lnCore&&window.lnCore._debugSink?!0:typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug")||document.body.querySelector("[data-ln-debug]")!==null:!1}function p(e){if(typeof window>"u")return!1;if(window.lnDebug===!0)return!0;if(window.lnCore&&window.lnCore._debugIsContained)return e?window.lnCore._debugIsContained(e):window.lnCore._debugSink!==null;if(e&&e.closest){const t=e.closest("[data-ln-debug]");return!(!t||typeof document<"u"&&t===document.documentElement)}return typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug"):!1}if(typeof window<"u"&&(window.lnCore=window.lnCore||{},!window.lnCore._warnBound)){window.lnCore._warnBound=!0;const e=console.warn;console.warn=function(...t){if(typeof t[0]=="string"&&(t[0].startsWith("[ln-")||t[0].startsWith("[lnCore"))){let o=null;for(let i=1;i<t.length;i++)if(t[i]&&t[i].nodeType===1){o=t[i];break}if(!p(o))return}e.apply(console,t)}}function O(e,t,n){const o=n||{};window.lnCore._debugSink&&window.lnCore._debugSink("event",t,e,o),e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:o}))}function h(e,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){h(e,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}const E={};function B(e,t){E[e]=t}function W(e){return E[e]||{ingress:t=>t,egress:t=>t}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=B,window.lnCore.getDataMapper=W);function j(){typeof window>"u"||(window.lnCore=window.lnCore||{},!window.lnCore._localeObserverBound&&(window.lnCore._localeObserverBound=!0,h(function(){new MutationObserver(function(){O(document,"ln-core:locale-change",{})}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"],subtree:!0})},"ln-core")))}const L={};function N(e,t){if(!e||typeof t!="object")return;const n=e.toLowerCase().split("-")[0];L[n]=t}function V(e){if(!e)return null;const t=e.toLowerCase().split("-")[0];return L[t]||null}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerLocaleFallback=N,window.lnCore.getLocaleFallback=V,window.lnCore.ensureLocaleObserver=j);const C={};function U(e,t){C[e]||(C[e]=document.querySelector('[data-ln-template="'+e+'"]'));const n=C[e];return n?n.content.cloneNode(!0):(console.warn("["+(t||"ln-core")+'] Template "'+e+'" not found'),null)}function T(e,t){if(!e||!t)return e;const n=e.querySelectorAll("[data-ln-field]");for(let l=0;l<n.length;l++){const c=n[l],s=c.getAttribute("data-ln-field");t[s]!=null&&(c.textContent=t[s])}const o=e.querySelectorAll("[data-ln-attr]");for(let l=0;l<o.length;l++){const c=o[l],s=c.getAttribute("data-ln-attr").split(",");for(let d=0;d<s.length;d++){const a=s[d].trim().split(":");if(a.length!==2)continue;const u=a[0].trim(),f=a[1].trim();t[f]!=null&&c.setAttribute(u,t[f])}}const i=e.querySelectorAll("[data-ln-show]");for(let l=0;l<i.length;l++){const c=i[l],s=c.getAttribute("data-ln-show");s in t&&c.classList.toggle("hidden",!t[s])}const r=e.querySelectorAll("[data-ln-class]");for(let l=0;l<r.length;l++){const c=r[l],s=c.getAttribute("data-ln-class").split(",");for(let d=0;d<s.length;d++){const a=s[d].trim().split(":");if(a.length!==2)continue;const u=a[0].trim(),f=a[1].trim();f in t&&c.classList.toggle(u,!!t[f])}}return e}function H(e,t){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&(window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",e,t??null),e.dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0})));const n=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let o=0;o<n.length;o++)window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",n[o],t??null),n[o].dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));return e}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(e){if(!(!e.target.matches||!e.target.matches("[data-ln-fillable]")))if(e.detail)T(e.target,e.detail);else{const t=e.target.querySelectorAll("[data-ln-field]");for(let n=0;n<t.length;n++)t[n].textContent=""}})));function $(e,t){if(!e||!t)return e;const n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){const r=n.currentNode;r.textContent.indexOf("{{")!==-1&&(r.textContent=r.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(l,c){return t[c]!==void 0?t[c]:""}))}const o=function(r,l){return t[l]!==void 0?t[l]:""},i=Array.from(e.querySelectorAll("*"));e.nodeType===1&&i.push(e);for(let r=0;r<i.length;r++){const l=i[r],c=l.attributes;for(let s=0;s<c.length;s++){const d=c[s];d.value.indexOf("{{")!==-1&&l.setAttribute(d.name,d.value.replace(/\{\{\s*(\w+)\s*\}\}/g,o))}}return e}function Q(e,t,n,o,i,r){const l={};for(let s=0;s<e.children.length;s++){const d=e.children[s],a=d.getAttribute("data-ln-render-key");a&&(l[a]=d)}const c=document.createDocumentFragment();for(let s=0;s<t.length;s++){const d=t[s],a=String(o(d));let u=l[a];if(u)i(u,d,s);else{const f=U(n,r);if(!f||($(f,d),u=f.firstElementChild,!u))continue;u.setAttribute("data-ln-render-key",a),i(u,d,s)}c.appendChild(u)}e.textContent="",e.appendChild(c)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.fillTemplate=$,window.lnCore.fill=T,window.lnCore.lnFill=H,window.lnCore.renderList=Q);function D(e,t,n,o,i){if(!e||t===null)return!0;const r=o||"ln-component",l=e.type;if(l==="trigger"||l==="marker"||l==="string"||l==="list"||!l||t===""&&e.fallback!==void 0)return!0;const c=s=>{i?console.warn(s,i):console.warn(s)};if(l==="boolean"){const s=t.trim().toLowerCase();return s!==""&&s!=="true"&&s!=="false"&&s!=="1"&&s!=="0"?(c(`[${r}] Invalid value "${t}" for boolean attribute "${n}". Allowed: "true", "false", or presence-only.`),!1):!0}if(l==="enum"){const s=e.values||[];return s.includes(t)?!0:(c(`[${r}] Invalid value "${t}" for attribute "${n}". Allowed: ${s.join(", ")}. Fallback: "${e.fallback}".`),!1)}if(l==="integer"){if(!/^-?\d+$/.test(t))return c(`[${r}] Invalid integer "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1;const s=parseInt(t,10);return e.min!==void 0&&s<e.min?(c(`[${r}] Value ${s} for attribute "${n}" is less than min (${e.min}).`),!1):e.max!==void 0&&s>e.max?(c(`[${r}] Value ${s} for attribute "${n}" is greater than max (${e.max}).`),!1):!0}if(l==="float")return isNaN(Number(t))?(c(`[${r}] Invalid float "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1):!0;if(l==="json")try{return JSON.parse(t),!0}catch(s){return c(`[${r}] Invalid JSON for attribute "${n}": ${s.message}. Fallback: ${e.fallback}.`),!1}return!0}function K(e){const t={};for(const n in e){const o=e[n];o&&o.effect&&(t[n]=o.effect)}return Object.keys(t).length?t:null}function G(e){if(e.onAttrChange&&!e.declared)return null;const t=new Set;if(e.effects)for(const n in e.effects)t.add(n);if(e.onAttrChange&&e.declared)for(const n of e.declared)t.add(n);return t}function y(e,t,n,o){if(e.nodeType!==1)return;const r=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",l=Array.from(e.querySelectorAll(r));e.matches&&e.matches(r)&&l.push(e);for(const c of l)if(!c[n]){window.lnCore._persistSink&&c.hasAttribute("data-ln-persist")&&window.lnCore._persistSink(c,t);try{c[n]=new o(c)}catch(s){console.error("["+n+"] init failed",c,s)}}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._bootHolds=window.lnCore._bootHolds||0,window.lnCore._bootQueue=window.lnCore._bootQueue||[]);function J(){return typeof window<"u"&&window.lnCore&&window.lnCore._bootHolds||0}function P(e){typeof window<"u"?(window.lnCore=window.lnCore||{},window.lnCore._bootHolds=window.lnCore._bootHolds||0,window.lnCore._bootQueue=window.lnCore._bootQueue||[],window.lnCore._bootHolds>0?window.lnCore._bootQueue.push(e):setTimeout(e,0)):e()}function I(){window.lnCore=window.lnCore||{};const e=window.lnCore._attrRegistry=window.lnCore._attrRegistry||{byAttr:new Map,reactive:[],persist:[]};return e.byReactive=e.byReactive||new Map,e.reactiveWildcard=e.reactiveWildcard||[],e}function X(e){const t=I(),n=e.observed||[];for(let o=0;o<n.length;o++){const i=n[o];t.byAttr.has(i)||t.byAttr.set(i,[]),t.byAttr.get(i).push(e)}if(t.byDeclaredAttr=t.byDeclaredAttr||new Map,e.attributes)for(const o in e.attributes){t.byDeclaredAttr.has(o)||t.byDeclaredAttr.set(o,[]);const i=t.byDeclaredAttr.get(o);i.some(r=>r.componentTag===e.componentTag)||i.push({spec:e.attributes[o],componentTag:e.componentTag})}if(e.onAttrChange||e.effects){t.reactive.push(e);const o=G(e);if(o===null)t.reactiveWildcard.push(e);else for(const i of o)t.byReactive.has(i)||t.byReactive.set(i,[]),t.byReactive.get(i).push(e)}e.persist&&t.persist.push(e)}function q(e,t,n,o){for(let i=0;i<e.length;i++){const r=e[i];if(!t[r.attribute])continue;const l=r.effects&&r.effects[n];l?l(t,n,o):r.onAttrChange&&(!r.declared||r.declared.has(n))&&r.onAttrChange(t,n,o)}}function z(e){const t=e.target,n=e.attributeName;if(e.oldValue===t.getAttribute(n))return;const o=I(),i=o.byAttr.get(n);if(k()&&o.byDeclaredAttr&&o.byDeclaredAttr.has(n)&&p(t)){const r=o.byDeclaredAttr.get(n),l=t.getAttribute(n);for(let c=0;c<r.length;c++)D(r[c].spec,l,n,r[c].componentTag,t)}if(window.lnCore._debugSink&&(n.indexOf("data-ln-")===0||i)&&window.lnCore._debugSink("attr",n,t,{oldValue:e.oldValue,newValue:t.getAttribute(n)}),n.indexOf("data-ln-")===0){const r=o.byReactive.get(n);r&&q(r,t,n,e.oldValue),o.reactiveWildcard.length&&q(o.reactiveWildcard,t,n,e.oldValue)}if(i)for(let r=0;r<i.length;r++){const l=i[r];if(l.handler){l.handler(t,n,e.oldValue);continue}l.onAttributeChange&&t[l.attribute]?l.onAttributeChange(t,n):(y(t,l.selector,l.attribute,l.ComponentFn),l.onInit&&l.onInit(t))}}function Y(){window.lnCore=window.lnCore||{},!window.lnCore._attrObserverBound&&(window.lnCore._attrObserverBound=!0,h(function(){new MutationObserver(function(t){for(let n=0;n<t.length;n++)try{z(t[n])}catch(o){console.error("[ln-core] mutation handler failed",t[n].target,o)}}).observe(document.body,{attributes:!0,subtree:!0,attributeOldValue:!0})},"ln-core"))}function R(){return window.lnCore=window.lnCore||{},window.lnCore._lifecycleRegistry=window.lnCore._lifecycleRegistry||[]}function Z(e){const t=R();if(t.length){if(e.target)for(let n=0;n<t.length;n++){const o=t[n];if(o.onSubtreeChange){const i=o.query,r=e.target.nodeType===1?e.target.matches(i)?e.target:e.target.closest(i):e.target.parentElement?e.target.parentElement.closest(i):null;r&&o.onSubtreeChange(r,e)}}for(let n=0;n<e.addedNodes.length;n++){const o=e.addedNodes[n];if(o.nodeType===1)for(let i=0;i<t.length;i++){const r=t[i];y(o,r.selector,r.attribute,r.ComponentFn),r.onInit&&r.onInit(o)}}for(let n=0;n<e.removedNodes.length;n++){const o=e.removedNodes[n];if(o.nodeType===1)for(let i=0;i<t.length;i++){const r=t[i],l=r.query,c=Array.from(o.querySelectorAll(l));o.matches&&o.matches(l)&&c.push(o);for(let s=0;s<c.length;s++){const d=c[s];if(!document.contains(d)){const a=d[r.attribute];if(a&&typeof a.destroy=="function")try{a.destroy()}catch(u){console.error("["+r.attribute+"] destroy failed",d,u)}delete d[r.attribute]}}}}}}function ee(){window.lnCore=window.lnCore||{},!window.lnCore._lifecycleObserverBound&&(window.lnCore._lifecycleObserverBound=!0,h(function(){new MutationObserver(function(t){for(let n=0;n<t.length;n++){const o=t[n];if(o.type==="childList")try{Z(o)}catch(i){console.error("[ln-core] lifecycle handler failed",o.target,i)}}}).observe(document.body,{childList:!0,subtree:!0})},"ln-core"))}function te(e,t,n,o,i={}){const r=i.extraAttributes||[],l=i.onAttributeChange||null,c=i.onSubtreeChange||null,s=i.onInit||null,d=i.onAttrChange||null,a=i.effects||null,u=i.attributes||null,f=u?K(u):a,ae=u?new Set(Object.keys(u)):null,fe=i.persist||null;function g(x){const w=x||document.body;if(y(w,e,t,n),u&&k())for(const b in u){const be=u[b],_=Array.from(w.querySelectorAll("["+b+"]"));w.matches&&w.matches("["+b+"]")&&_.push(w);for(let v=0;v<_.length;v++){const S=_[v];p(S)&&D(be,S.getAttribute(b),b,o,S)}}s&&s(w)}const A=[];if(e.indexOf("[")!==-1){const x=/\[([\w-]+)/g;let w;for(;(w=x.exec(e))!==null;)A.push(w[1])}else A.push(e);X({selector:e,attribute:t,componentTag:o,attributes:u,ComponentFn:n,onInit:s,observed:A.concat(r),onAttributeChange:l,onAttrChange:d,effects:f,declared:ae,persist:fe}),Y();const we=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]";R().push({selector:e,attribute:t,ComponentFn:n,onInit:s,onSubtreeChange:c,query:we}),ee(),window[t]=g;function F(){J()>0?P(function(){g(document.body)}):g(document.body)}return document.readyState==="loading"?document.addEventListener("DOMContentLoaded",F):F(),g}function M(e){return(e||"").replace(/^#/,"")}function m(e){const t=e===void 0?location.hash:e,n={},o=M(t);if(!o)return n;const i=o.split("&");for(let r=0;r<i.length;r++){const l=i[r];if(!l)continue;const c=l.indexOf(":"),s=c>-1?l.slice(0,c):l,d=c>-1?l.slice(c+1):"";if(s)try{n[s]=decodeURIComponent(d)}catch{n[s]=d}}return n}function ne(e){if(!e)return null;const t=m();return e in t?t[e]:null}function oe(e,t){if(!e)return;const n=m();t==null?delete n[e]:n[e]=String(t);const i=Object.keys(n).map(function(r){const l=n[r];return l===""?r:r+":"+encodeURIComponent(l)}).join("&");M(location.hash)!==i&&(location.hash=i)}function re(e){return e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?!1:(e.preventDefault(),!0)}function ie(e,t){if(!e||!e.hasAttribute("data-ln-hash"))return null;const n=e.getAttribute("data-ln-hash");if(n&&n.trim()!=="")return n.trim();const o=e.getAttribute("data-ln-sort")||e.getAttribute("data-ln-search-for")||e.getAttribute("data-ln-search")||e.getAttribute("data-ln-filter")||e.id;return o?t?o+"-"+t:o:t||null}function le(e,t){return!t||t==="none"||e===null||e===void 0?null:String(e)+"."+t}function se(e){return!e||typeof e!="string"?null:e.endsWith(".asc")?{fieldOrColumn:e.slice(0,-4),direction:"asc"}:e.endsWith(".desc")?{fieldOrColumn:e.slice(0,-5),direction:"desc"}:null}function ce(e,t){return!e||!Array.isArray(t)||t.length===0?null:e+":"+t.map(encodeURIComponent).join(",")}function de(e){if(!e||typeof e!="string")return null;const t=e.indexOf(":");if(t===-1)return null;const n=e.slice(0,t),o=e.slice(t+1),i=o?o.split(",").map(function(r){try{return decodeURIComponent(r)}catch{return r}}).filter(Boolean):[];return{key:n,values:i}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=m,window.lnCore.hashGet=ne,window.lnCore.hashSet=oe,window.lnCore.hashLinkClick=re,window.lnCore.resolveHashNamespace=ie,window.lnCore.hashSortEncode=le,window.lnCore.hashSortDecode=se,window.lnCore.hashFilterEncode=ce,window.lnCore.hashFilterDecode=de);function ue(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.uuid=ue),(function(){const e="data-ln-accordion",t="lnAccordion";if(window[t]!==void 0)return;const n={"data-ln-accordion":{type:"marker",description:"Identifies container as an accordion that coordinates single-panel expansion"}};function o(i){return this.dom=i,this._onToggleOpen=function(r){if(!r.detail||!r.detail.target||r.detail.target.closest("[data-ln-accordion]")!==i)return;const l=i.querySelectorAll("[data-ln-toggle]");for(const c of l)c!==r.detail.target&&c.closest("[data-ln-accordion]")===i&&c.getAttribute("data-ln-toggle")==="open"&&c.setAttribute("data-ln-toggle","close");O(i,"ln-accordion:change",{target:r.detail.target})},i.addEventListener("ln-toggle:open",this._onToggleOpen),this}o.prototype.destroy=function(){this.dom[t]&&(this.dom.removeEventListener("ln-toggle:open",this._onToggleOpen),delete this.dom[t])},te(e,t,o,"ln-accordion",{attributes:n})})()})();
@@ -1,30 +1,30 @@
1
- {
2
- "$comment": "This file is partly generated. The $comment, component, generator, and each attribute's direction, sources, type, values, fallback, and description keys are owned by the generator and synchronized from JS source code. All other keys are preserved and safe to hand-author. Regenerate with `npm run sync:ln-schemas`.",
3
- "component": "ln-accordion",
4
- "generator": "scripts/sync-ln-schemas.mjs",
5
- "attributes": {
6
- "data-ln-accordion": {
7
- "direction": "author",
8
- "sources": [
9
- "ln-accordion-dev.scss",
10
- "ln-accordion.scss",
11
- "src/ln-accordion.js"
12
- ],
13
- "type": "marker",
14
- "description": "Identifies container as an accordion that coordinates single-panel expansion"
15
- },
16
- "data-ln-debug": {
17
- "direction": null,
18
- "sources": [
19
- "ln-accordion-dev.scss"
20
- ]
21
- },
22
- "data-ln-toggle": {
23
- "direction": "both",
24
- "sources": [
25
- "ln-accordion-dev.scss",
26
- "src/ln-accordion.js"
27
- ]
28
- }
29
- }
30
- }
1
+ {
2
+ "$comment": "This file is partly generated. The $comment, component, generator, and each attribute's direction, sources, type, values, fallback, and description keys are owned by the generator and synchronized from JS source code. All other keys are preserved and safe to hand-author. Regenerate with `npm run sync:ln-schemas`.",
3
+ "component": "ln-accordion",
4
+ "generator": "scripts/sync-ln-schemas.mjs",
5
+ "attributes": {
6
+ "data-ln-accordion": {
7
+ "direction": "author",
8
+ "sources": [
9
+ "ln-accordion-dev.scss",
10
+ "ln-accordion.scss",
11
+ "src/ln-accordion.js"
12
+ ],
13
+ "type": "marker",
14
+ "description": "Identifies container as an accordion that coordinates single-panel expansion"
15
+ },
16
+ "data-ln-debug": {
17
+ "direction": null,
18
+ "sources": [
19
+ "ln-accordion-dev.scss"
20
+ ]
21
+ },
22
+ "data-ln-toggle": {
23
+ "direction": "both",
24
+ "sources": [
25
+ "ln-accordion-dev.scss",
26
+ "src/ln-accordion.js"
27
+ ]
28
+ }
29
+ }
30
+ }
@@ -1,8 +1,8 @@
1
- @use '../../theme/config/mixins' as *;
2
-
3
- [data-ln-debug] {
4
- // 1. AJAX Form Action Check: forms with data-ln-ajax must declare an action URL
5
- form[data-ln-ajax]:not([action]) {
6
- @include dev-inline-error("form[data-ln-ajax] is missing a required 'action' attribute");
7
- }
8
- }
1
+ @use '../../theme/config/mixins' as *;
2
+
3
+ [data-ln-debug] {
4
+ // 1. AJAX Form Action Check: forms with data-ln-ajax must declare an action URL
5
+ form[data-ln-ajax]:not([action]) {
6
+ @include dev-inline-error("form[data-ln-ajax] is missing a required 'action' attribute");
7
+ }
8
+ }
@@ -1 +1 @@
1
- (function(){"use strict";function U(){return typeof window>"u"?!1:window.lnDebug===!0||window.lnCore&&window.lnCore._debugSink?!0:typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug")||document.body.querySelector("[data-ln-debug]")!==null:!1}function F(e){if(typeof window>"u")return!1;if(window.lnDebug===!0)return!0;if(window.lnCore&&window.lnCore._debugIsContained)return e?window.lnCore._debugIsContained(e):window.lnCore._debugSink!==null;if(e&&e.closest){const t=e.closest("[data-ln-debug]");return!(!t||typeof document<"u"&&t===document.documentElement)}return typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug"):!1}if(typeof window<"u"&&(window.lnCore=window.lnCore||{},!window.lnCore._warnBound)){window.lnCore._warnBound=!0;const e=console.warn;console.warn=function(...t){if(typeof t[0]=="string"&&(t[0].startsWith("[ln-")||t[0].startsWith("[lnCore"))){let r=null;for(let l=1;l<t.length;l++)if(t[l]&&t[l].nodeType===1){r=t[l];break}if(!F(r))return}e.apply(console,t)}}function y(e,t,n){const r=n||{};window.lnCore._debugSink&&window.lnCore._debugSink("event",t,e,r),e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:r}))}function G(e,t,n){const r=n||{};window.lnCore._debugSink&&window.lnCore._debugSink("event",t,e,r);const l=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:r});return e.dispatchEvent(l),l}function E(e,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){E(e,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}function K(e,t){if(e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||e.button!==0||!t)return!1;const n=t.getAttribute("href");return!(!n||t.getAttribute("target")==="_blank"||t.hasAttribute("download")||n.startsWith("mailto:")||n.startsWith("tel:")||n==="#"||n.startsWith("#")||t.hostname&&t.hostname!==window.location.hostname)}const q={};function H(e,t){q[e]=t}function P(e){return q[e]||{ingress:t=>t,egress:t=>t}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=H,window.lnCore.getDataMapper=P);function X(){typeof window>"u"||(window.lnCore=window.lnCore||{},!window.lnCore._localeObserverBound&&(window.lnCore._localeObserverBound=!0,E(function(){new MutationObserver(function(){y(document,"ln-core:locale-change",{})}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"],subtree:!0})},"ln-core")))}const M={};function J(e,t){if(!e||typeof t!="object")return;const n=e.toLowerCase().split("-")[0];M[n]=t}function Q(e){if(!e)return null;const t=e.toLowerCase().split("-")[0];return M[t]||null}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerLocaleFallback=J,window.lnCore.getLocaleFallback=Q,window.lnCore.ensureLocaleObserver=X);const O={};function z(e,t){O[e]||(O[e]=document.querySelector('[data-ln-template="'+e+'"]'));const n=O[e];return n?n.content.cloneNode(!0):(console.warn("["+(t||"ln-core")+'] Template "'+e+'" not found'),null)}function W(e,t){if(!e||!t)return e;const n=e.querySelectorAll("[data-ln-field]");for(let o=0;o<n.length;o++){const u=n[o],s=u.getAttribute("data-ln-field");t[s]!=null&&(u.textContent=t[s])}const r=e.querySelectorAll("[data-ln-attr]");for(let o=0;o<r.length;o++){const u=r[o],s=u.getAttribute("data-ln-attr").split(",");for(let d=0;d<s.length;d++){const h=s[d].trim().split(":");if(h.length!==2)continue;const p=h[0].trim(),a=h[1].trim();t[a]!=null&&u.setAttribute(p,t[a])}}const l=e.querySelectorAll("[data-ln-show]");for(let o=0;o<l.length;o++){const u=l[o],s=u.getAttribute("data-ln-show");s in t&&u.classList.toggle("hidden",!t[s])}const i=e.querySelectorAll("[data-ln-class]");for(let o=0;o<i.length;o++){const u=i[o],s=u.getAttribute("data-ln-class").split(",");for(let d=0;d<s.length;d++){const h=s[d].trim().split(":");if(h.length!==2)continue;const p=h[0].trim(),a=h[1].trim();a in t&&u.classList.toggle(p,!!t[a])}}return e}function Y(e,t){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&(window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",e,t??null),e.dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0})));const n=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let r=0;r<n.length;r++)window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",n[r],t??null),n[r].dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));return e}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(e){if(!(!e.target.matches||!e.target.matches("[data-ln-fillable]")))if(e.detail)W(e.target,e.detail);else{const t=e.target.querySelectorAll("[data-ln-field]");for(let n=0;n<t.length;n++)t[n].textContent=""}})));function I(e,t){if(!e||!t)return e;const n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){const i=n.currentNode;i.textContent.indexOf("{{")!==-1&&(i.textContent=i.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(o,u){return t[u]!==void 0?t[u]:""}))}const r=function(i,o){return t[o]!==void 0?t[o]:""},l=Array.from(e.querySelectorAll("*"));e.nodeType===1&&l.push(e);for(let i=0;i<l.length;i++){const o=l[i],u=o.attributes;for(let s=0;s<u.length;s++){const d=u[s];d.value.indexOf("{{")!==-1&&o.setAttribute(d.name,d.value.replace(/\{\{\s*(\w+)\s*\}\}/g,r))}}return e}function Z(e,t,n,r,l,i){const o={};for(let s=0;s<e.children.length;s++){const d=e.children[s],h=d.getAttribute("data-ln-render-key");h&&(o[h]=d)}const u=document.createDocumentFragment();for(let s=0;s<t.length;s++){const d=t[s],h=String(r(d));let p=o[h];if(p)l(p,d,s);else{const a=z(n,i);if(!a||(I(a,d),p=a.firstElementChild,!p))continue;p.setAttribute("data-ln-render-key",h),l(p,d,s)}u.appendChild(p)}e.textContent="",e.appendChild(u)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.fillTemplate=I,window.lnCore.fill=W,window.lnCore.lnFill=Y,window.lnCore.renderList=Z);function ee(e,t,n,r,l){if(!e||t===null)return!0;const i=r||"ln-component",o=e.type;if(o==="trigger"||o==="marker"||o==="string"||o==="list"||!o||t===""&&e.fallback!==void 0)return!0;const u=s=>{l?console.warn(s,l):console.warn(s)};if(o==="boolean"){const s=t.trim().toLowerCase();return s!==""&&s!=="true"&&s!=="false"&&s!=="1"&&s!=="0"?(u(`[${i}] Invalid value "${t}" for boolean attribute "${n}". Allowed: "true", "false", or presence-only.`),!1):!0}if(o==="enum"){const s=e.values||[];return s.includes(t)?!0:(u(`[${i}] Invalid value "${t}" for attribute "${n}". Allowed: ${s.join(", ")}. Fallback: "${e.fallback}".`),!1)}if(o==="integer"){if(!/^-?\d+$/.test(t))return u(`[${i}] Invalid integer "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1;const s=parseInt(t,10);return e.min!==void 0&&s<e.min?(u(`[${i}] Value ${s} for attribute "${n}" is less than min (${e.min}).`),!1):e.max!==void 0&&s>e.max?(u(`[${i}] Value ${s} for attribute "${n}" is greater than max (${e.max}).`),!1):!0}if(o==="float")return isNaN(Number(t))?(u(`[${i}] Invalid float "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1):!0;if(o==="json")try{return JSON.parse(t),!0}catch(s){return u(`[${i}] Invalid JSON for attribute "${n}": ${s.message}. Fallback: ${e.fallback}.`),!1}return!0}function te(e){if(e.onAttrChange&&!e.declared)return null;const t=new Set;if(e.effects)for(const n in e.effects)t.add(n);if(e.onAttrChange&&e.declared)for(const n of e.declared)t.add(n);return t}function ne(e,t,n,r){if(e.nodeType!==1)return;const i=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",o=Array.from(e.querySelectorAll(i));e.matches&&e.matches(i)&&o.push(e);for(const u of o)if(!u[n]){window.lnCore._persistSink&&u.hasAttribute("data-ln-persist")&&window.lnCore._persistSink(u,t);try{u[n]=new r(u)}catch(s){console.error("["+n+"] init failed",u,s)}}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._bootHolds=window.lnCore._bootHolds||0,window.lnCore._bootQueue=window.lnCore._bootQueue||[]);function N(){window.lnCore=window.lnCore||{};const e=window.lnCore._attrRegistry=window.lnCore._attrRegistry||{byAttr:new Map,reactive:[],persist:[]};return e.byReactive=e.byReactive||new Map,e.reactiveWildcard=e.reactiveWildcard||[],e}function re(e){const t=N(),n=e.observed||[];for(let r=0;r<n.length;r++){const l=n[r];t.byAttr.has(l)||t.byAttr.set(l,[]),t.byAttr.get(l).push(e)}if(t.byDeclaredAttr=t.byDeclaredAttr||new Map,e.attributes)for(const r in e.attributes){t.byDeclaredAttr.has(r)||t.byDeclaredAttr.set(r,[]);const l=t.byDeclaredAttr.get(r);l.some(i=>i.componentTag===e.componentTag)||l.push({spec:e.attributes[r],componentTag:e.componentTag})}if(e.onAttrChange||e.effects){t.reactive.push(e);const r=te(e);if(r===null)t.reactiveWildcard.push(e);else for(const l of r)t.byReactive.has(l)||t.byReactive.set(l,[]),t.byReactive.get(l).push(e)}e.persist&&t.persist.push(e)}function B(e,t,n,r){for(let l=0;l<e.length;l++){const i=e[l];if(!t[i.attribute])continue;const o=i.effects&&i.effects[n];o?o(t,n,r):i.onAttrChange&&(!i.declared||i.declared.has(n))&&i.onAttrChange(t,n,r)}}function oe(e){const t=e.target,n=e.attributeName;if(e.oldValue===t.getAttribute(n))return;const r=N(),l=r.byAttr.get(n);if(U()&&r.byDeclaredAttr&&r.byDeclaredAttr.has(n)&&F(t)){const i=r.byDeclaredAttr.get(n),o=t.getAttribute(n);for(let u=0;u<i.length;u++)ee(i[u].spec,o,n,i[u].componentTag,t)}if(window.lnCore._debugSink&&(n.indexOf("data-ln-")===0||l)&&window.lnCore._debugSink("attr",n,t,{oldValue:e.oldValue,newValue:t.getAttribute(n)}),n.indexOf("data-ln-")===0){const i=r.byReactive.get(n);i&&B(i,t,n,e.oldValue),r.reactiveWildcard.length&&B(r.reactiveWildcard,t,n,e.oldValue)}if(l)for(let i=0;i<l.length;i++){const o=l[i];if(o.handler){o.handler(t,n,e.oldValue);continue}o.onAttributeChange&&t[o.attribute]?o.onAttributeChange(t,n):(ne(t,o.selector,o.attribute,o.ComponentFn),o.onInit&&o.onInit(t))}}function ie(){window.lnCore=window.lnCore||{},!window.lnCore._attrObserverBound&&(window.lnCore._attrObserverBound=!0,E(function(){new MutationObserver(function(t){for(let n=0;n<t.length;n++)try{oe(t[n])}catch(r){console.error("[ln-core] mutation handler failed",t[n].target,r)}}).observe(document.body,{attributes:!0,subtree:!0,attributeOldValue:!0})},"ln-core"))}function le(e,t){re({observed:e,handler:t}),ie()}function R(e){return(e||"").replace(/^#/,"")}function D(e){const t=e===void 0?location.hash:e,n={},r=R(t);if(!r)return n;const l=r.split("&");for(let i=0;i<l.length;i++){const o=l[i];if(!o)continue;const u=o.indexOf(":"),s=u>-1?o.slice(0,u):o,d=u>-1?o.slice(u+1):"";if(s)try{n[s]=decodeURIComponent(d)}catch{n[s]=d}}return n}function se(e){if(!e)return null;const t=D();return e in t?t[e]:null}function ae(e,t){if(!e)return;const n=D();t==null?delete n[e]:n[e]=String(t);const l=Object.keys(n).map(function(i){const o=n[i];return o===""?i:i+":"+encodeURIComponent(o)}).join("&");R(location.hash)!==l&&(location.hash=l)}function ue(e){return e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?!1:(e.preventDefault(),!0)}function ce(e,t){if(!e||!e.hasAttribute("data-ln-hash"))return null;const n=e.getAttribute("data-ln-hash");if(n&&n.trim()!=="")return n.trim();const r=e.getAttribute("data-ln-sort")||e.getAttribute("data-ln-search-for")||e.getAttribute("data-ln-search")||e.getAttribute("data-ln-filter")||e.id;return r?t?r+"-"+t:r:t||null}function fe(e,t){return!t||t==="none"||e===null||e===void 0?null:String(e)+"."+t}function de(e){return!e||typeof e!="string"?null:e.endsWith(".asc")?{fieldOrColumn:e.slice(0,-4),direction:"asc"}:e.endsWith(".desc")?{fieldOrColumn:e.slice(0,-5),direction:"desc"}:null}function we(e,t){return!e||!Array.isArray(t)||t.length===0?null:e+":"+t.map(encodeURIComponent).join(",")}function be(e){if(!e||typeof e!="string")return null;const t=e.indexOf(":");if(t===-1)return null;const n=e.slice(0,t),r=e.slice(t+1),l=r?r.split(",").map(function(i){try{return decodeURIComponent(i)}catch{return i}}).filter(Boolean):[];return{key:n,values:l}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=D,window.lnCore.hashGet=se,window.lnCore.hashSet=ae,window.lnCore.hashLinkClick=ue,window.lnCore.resolveHashNamespace=ce,window.lnCore.hashSortEncode=fe,window.lnCore.hashSortDecode=de,window.lnCore.hashFilterEncode=we,window.lnCore.hashFilterDecode=be),(function(){const e="data-ln-ajax",t="lnAjax",n="data-ln-data-coordinator-scope";if(window[t]!==void 0)return;let r=null;function l(a){if(!a.hasAttribute(e)||a[t])return;a[t]=!0;const c=d(a);i(c.links),o(c.forms)}function i(a){for(const c of a){if(c[t+"Trigger"]||c.hostname&&c.hostname!==window.location.hostname)continue;const w=c.getAttribute("href");if(w&&w.includes("#"))continue;const f=function(m){if(!K(m,c))return;m.preventDefault();const C=c.getAttribute("href");C&&s("GET",C,null,c)};c.addEventListener("click",f),c[t+"Trigger"]=f}}function o(a){for(const c of a){if(c[t+"Trigger"])continue;if(c.hasAttribute(n)){c[t+"ScopeWarned"]||(c[t+"ScopeWarned"]=!0,console.warn("[ln-ajax] Form has data-ln-data-coordinator-scope — the ln-data-coordinator write pipeline takes precedence; skipping ajax interception for this form."));continue}const w=function(f){if(f.defaultPrevented)return;f.preventDefault();const m=c.method.toUpperCase(),C=c.action,T=new FormData(c);for(const v of c.querySelectorAll('button, input[type="submit"]'))v.disabled=!0;s(m,C,T,c,function(){for(const v of c.querySelectorAll('button, input[type="submit"]'))v.disabled=!1})};c.addEventListener("submit",w),c[t+"Trigger"]=w}}function u(a){if(!a[t])return;const c=d(a);for(const w of c.links)w[t+"Trigger"]&&(w.removeEventListener("click",w[t+"Trigger"]),delete w[t+"Trigger"]);for(const w of c.forms)w[t+"Trigger"]&&(w.removeEventListener("submit",w[t+"Trigger"]),delete w[t+"Trigger"]);delete a[t]}function s(a,c,w,f,m){if(G(f,"ln-ajax:before-start",{method:a,url:c}).defaultPrevented)return;a==="GET"&&r&&r(),y(f,"ln-ajax:start",{method:a,url:c}),f.classList.add("ln-ajax--loading");const T=document.createElement("span");T.className="ln-ajax-spinner",f.appendChild(T);function v(){f.classList.remove("ln-ajax--loading");const b=f.querySelector(".ln-ajax-spinner");b&&b.remove(),m&&m()}let A=c;const V=document.querySelector('meta[name="csrf-token"]'),L=V?V.getAttribute("content"):null;w instanceof FormData&&L&&w.append("_token",L);const j={method:a,headers:{"X-Requested-With":"XMLHttpRequest",Accept:"application/json"}};if(L&&(j.headers["X-CSRF-TOKEN"]=L),a==="GET"&&w){const b=new URLSearchParams(w);A=c+(c.includes("?")?"&":"?")+b.toString()}else a!=="GET"&&w&&(j.body=w);let _=null;if(a==="GET"){const b=new AbortController;j.signal=b.signal,_=function(){r=null,b.abort(),v(),y(f,"ln-ajax:aborted",{method:a,url:A})},r=_}fetch(A,j).then(function(b){const $=b.ok,g=b.status;return b.text().then(function(S){let k=null,x=null;if(S&&S.trim())try{k=JSON.parse(S)}catch(he){x=he}return{ok:$,status:g,data:k,parseError:x}})}).then(function(b){_&&r===_&&(r=null);const $=b.status,g=b.data,S=b.parseError;if(b.ok&&!S){if(g&&g.title&&(document.title=g.title),g&&g.content)for(const k in g.content){const x=document.getElementById(k);x&&(x.innerHTML=g.content[k])}if(f.tagName==="A"){const k=f.getAttribute("href");k&&window.history.pushState({ajax:!0},"",k)}else f.tagName==="FORM"&&f.method.toUpperCase()==="GET"&&window.history.pushState({ajax:!0},"",A);y(f,"ln-ajax:success",{method:a,url:A,data:g})}else y(f,"ln-ajax:error",{method:a,url:A,status:$,data:g,error:S||null});v(),y(f,"ln-ajax:complete",{method:a,url:A})}).catch(function(b){b&&b.name==="AbortError"||(_&&r===_&&(r=null),y(f,"ln-ajax:error",{method:a,url:A,status:0,data:null,error:b}),v(),y(f,"ln-ajax:complete",{method:a,url:A}))})}function d(a){const c={links:[],forms:[]};return a.tagName==="A"&&a.getAttribute(e)!=="false"?c.links.push(a):a.tagName==="FORM"&&a.getAttribute(e)!=="false"?c.forms.push(a):(c.links=Array.from(a.querySelectorAll('a:not([data-ln-ajax="false"])')),c.forms=Array.from(a.querySelectorAll('form:not([data-ln-ajax="false"])'))),c}function h(){E(function(){new MutationObserver(function(c){for(const w of c)if(w.type==="childList"){for(const f of w.addedNodes)if(f.nodeType===1&&(l(f),!f.hasAttribute(e))){for(const C of f.querySelectorAll("["+e+"]"))l(C);const m=f.closest&&f.closest("["+e+"]");if(m&&m.getAttribute(e)!=="false"){const C=d(f);i(C.links),o(C.forms)}}}}).observe(document.body,{childList:!0,subtree:!0}),le([e],function(c){l(c)})},"ln-ajax")}function p(){for(const a of document.querySelectorAll("["+e+"]"))l(a)}window[t]=l,window[t].destroy=u,h(),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",p):p()})()})();
1
+ (function(){"use strict";function V(){return typeof window>"u"?!1:window.lnDebug===!0||window.lnCore&&window.lnCore._debugSink?!0:typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug")||document.body.querySelector("[data-ln-debug]")!==null:!1}function F(e){if(typeof window>"u")return!1;if(window.lnDebug===!0)return!0;if(window.lnCore&&window.lnCore._debugIsContained)return e?window.lnCore._debugIsContained(e):window.lnCore._debugSink!==null;if(e&&e.closest){const t=e.closest("[data-ln-debug]");return!(!t||typeof document<"u"&&t===document.documentElement)}return typeof document<"u"&&document.body?document.body.hasAttribute("data-ln-debug"):!1}if(typeof window<"u"&&(window.lnCore=window.lnCore||{},!window.lnCore._warnBound)){window.lnCore._warnBound=!0;const e=console.warn;console.warn=function(...t){if(typeof t[0]=="string"&&(t[0].startsWith("[ln-")||t[0].startsWith("[lnCore"))){let r=null;for(let l=1;l<t.length;l++)if(t[l]&&t[l].nodeType===1){r=t[l];break}if(!F(r))return}e.apply(console,t)}}function A(e,t,n){const r=n||{};window.lnCore._debugSink&&window.lnCore._debugSink("event",t,e,r),e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:r}))}function G(e,t,n){const r=n||{};window.lnCore._debugSink&&window.lnCore._debugSink("event",t,e,r);const l=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:r});return e.dispatchEvent(l),l}function E(e,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){E(e,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}function K(e,t){if(e.ctrlKey||e.metaKey||e.shiftKey||e.altKey||e.button!==0||!t)return!1;const n=t.getAttribute("href");return!(!n||t.getAttribute("target")==="_blank"||t.hasAttribute("download")||n.startsWith("mailto:")||n.startsWith("tel:")||n==="#"||n.startsWith("#")||t.hostname&&t.hostname!==window.location.hostname)}const q={};function H(e,t){q[e]=t}function P(e){return q[e]||{ingress:t=>t,egress:t=>t}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=H,window.lnCore.getDataMapper=P);function X(){typeof window>"u"||(window.lnCore=window.lnCore||{},!window.lnCore._localeObserverBound&&(window.lnCore._localeObserverBound=!0,E(function(){new MutationObserver(function(){A(document,"ln-core:locale-change",{})}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"],subtree:!0})},"ln-core")))}const I={};function J(e,t){if(!e||typeof t!="object")return;const n=e.toLowerCase().split("-")[0];I[n]=t}function Q(e){if(!e)return null;const t=e.toLowerCase().split("-")[0];return I[t]||null}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerLocaleFallback=J,window.lnCore.getLocaleFallback=Q,window.lnCore.ensureLocaleObserver=X);const O={};function z(e,t){O[e]||(O[e]=document.querySelector('[data-ln-template="'+e+'"]'));const n=O[e];return n?n.content.cloneNode(!0):(console.warn("["+(t||"ln-core")+'] Template "'+e+'" not found'),null)}function M(e,t){if(!e||!t)return e;const n=e.querySelectorAll("[data-ln-field]");for(let o=0;o<n.length;o++){const u=n[o],s=u.getAttribute("data-ln-field");t[s]!=null&&(u.textContent=t[s])}const r=e.querySelectorAll("[data-ln-attr]");for(let o=0;o<r.length;o++){const u=r[o],s=u.getAttribute("data-ln-attr").split(",");for(let d=0;d<s.length;d++){const h=s[d].trim().split(":");if(h.length!==2)continue;const p=h[0].trim(),a=h[1].trim();t[a]!=null&&u.setAttribute(p,t[a])}}const l=e.querySelectorAll("[data-ln-show]");for(let o=0;o<l.length;o++){const u=l[o],s=u.getAttribute("data-ln-show");s in t&&u.classList.toggle("hidden",!t[s])}const i=e.querySelectorAll("[data-ln-class]");for(let o=0;o<i.length;o++){const u=i[o],s=u.getAttribute("data-ln-class").split(",");for(let d=0;d<s.length;d++){const h=s[d].trim().split(":");if(h.length!==2)continue;const p=h[0].trim(),a=h[1].trim();a in t&&u.classList.toggle(p,!!t[a])}}return e}function Y(e,t){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&(window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",e,t??null),e.dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0})));const n=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let r=0;r<n.length;r++)window.lnCore._debugSink&&window.lnCore._debugSink("event","ln-fill",n[r],t??null),n[r].dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));return e}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(e){if(!(!e.target.matches||!e.target.matches("[data-ln-fillable]")))if(e.detail)M(e.target,e.detail);else{const t=e.target.querySelectorAll("[data-ln-field]");for(let n=0;n<t.length;n++)t[n].textContent=""}})));function W(e,t){if(!e||!t)return e;const n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){const i=n.currentNode;i.textContent.indexOf("{{")!==-1&&(i.textContent=i.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(o,u){return t[u]!==void 0?t[u]:""}))}const r=function(i,o){return t[o]!==void 0?t[o]:""},l=Array.from(e.querySelectorAll("*"));e.nodeType===1&&l.push(e);for(let i=0;i<l.length;i++){const o=l[i],u=o.attributes;for(let s=0;s<u.length;s++){const d=u[s];d.value.indexOf("{{")!==-1&&o.setAttribute(d.name,d.value.replace(/\{\{\s*(\w+)\s*\}\}/g,r))}}return e}function Z(e,t,n,r,l,i){const o={};for(let s=0;s<e.children.length;s++){const d=e.children[s],h=d.getAttribute("data-ln-render-key");h&&(o[h]=d)}const u=document.createDocumentFragment();for(let s=0;s<t.length;s++){const d=t[s],h=String(r(d));let p=o[h];if(p)l(p,d,s);else{const a=z(n,i);if(!a||(W(a,d),p=a.firstElementChild,!p))continue;p.setAttribute("data-ln-render-key",h),l(p,d,s)}u.appendChild(p)}e.textContent="",e.appendChild(u)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.fillTemplate=W,window.lnCore.fill=M,window.lnCore.lnFill=Y,window.lnCore.renderList=Z);function ee(e,t,n,r,l){if(!e||t===null)return!0;const i=r||"ln-component",o=e.type;if(o==="trigger"||o==="marker"||o==="string"||o==="list"||!o||t===""&&e.fallback!==void 0)return!0;const u=s=>{l?console.warn(s,l):console.warn(s)};if(o==="boolean"){const s=t.trim().toLowerCase();return s!==""&&s!=="true"&&s!=="false"&&s!=="1"&&s!=="0"?(u(`[${i}] Invalid value "${t}" for boolean attribute "${n}". Allowed: "true", "false", or presence-only.`),!1):!0}if(o==="enum"){const s=e.values||[];return s.includes(t)?!0:(u(`[${i}] Invalid value "${t}" for attribute "${n}". Allowed: ${s.join(", ")}. Fallback: "${e.fallback}".`),!1)}if(o==="integer"){if(!/^-?\d+$/.test(t))return u(`[${i}] Invalid integer "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1;const s=parseInt(t,10);return e.min!==void 0&&s<e.min?(u(`[${i}] Value ${s} for attribute "${n}" is less than min (${e.min}).`),!1):e.max!==void 0&&s>e.max?(u(`[${i}] Value ${s} for attribute "${n}" is greater than max (${e.max}).`),!1):!0}if(o==="float")return isNaN(Number(t))?(u(`[${i}] Invalid float "${t}" for attribute "${n}". Fallback: ${e.fallback}.`),!1):!0;if(o==="json")try{return JSON.parse(t),!0}catch(s){return u(`[${i}] Invalid JSON for attribute "${n}": ${s.message}. Fallback: ${e.fallback}.`),!1}return!0}function te(e){if(e.onAttrChange&&!e.declared)return null;const t=new Set;if(e.effects)for(const n in e.effects)t.add(n);if(e.onAttrChange&&e.declared)for(const n of e.declared)t.add(n);return t}function ne(e,t,n,r){if(e.nodeType!==1)return;const i=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",o=Array.from(e.querySelectorAll(i));e.matches&&e.matches(i)&&o.push(e);for(const u of o)if(!u[n]){window.lnCore._persistSink&&u.hasAttribute("data-ln-persist")&&window.lnCore._persistSink(u,t);try{u[n]=new r(u)}catch(s){console.error("["+n+"] init failed",u,s)}}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._bootHolds=window.lnCore._bootHolds||0,window.lnCore._bootQueue=window.lnCore._bootQueue||[]);function N(){window.lnCore=window.lnCore||{};const e=window.lnCore._attrRegistry=window.lnCore._attrRegistry||{byAttr:new Map,reactive:[],persist:[]};return e.byReactive=e.byReactive||new Map,e.reactiveWildcard=e.reactiveWildcard||[],e}function re(e){const t=N(),n=e.observed||[];for(let r=0;r<n.length;r++){const l=n[r];t.byAttr.has(l)||t.byAttr.set(l,[]),t.byAttr.get(l).push(e)}if(t.byDeclaredAttr=t.byDeclaredAttr||new Map,e.attributes)for(const r in e.attributes){t.byDeclaredAttr.has(r)||t.byDeclaredAttr.set(r,[]);const l=t.byDeclaredAttr.get(r);l.some(i=>i.componentTag===e.componentTag)||l.push({spec:e.attributes[r],componentTag:e.componentTag})}if(e.onAttrChange||e.effects){t.reactive.push(e);const r=te(e);if(r===null)t.reactiveWildcard.push(e);else for(const l of r)t.byReactive.has(l)||t.byReactive.set(l,[]),t.byReactive.get(l).push(e)}e.persist&&t.persist.push(e)}function U(e,t,n,r){for(let l=0;l<e.length;l++){const i=e[l];if(!t[i.attribute])continue;const o=i.effects&&i.effects[n];o?o(t,n,r):i.onAttrChange&&(!i.declared||i.declared.has(n))&&i.onAttrChange(t,n,r)}}function oe(e){const t=e.target,n=e.attributeName;if(e.oldValue===t.getAttribute(n))return;const r=N(),l=r.byAttr.get(n);if(V()&&r.byDeclaredAttr&&r.byDeclaredAttr.has(n)&&F(t)){const i=r.byDeclaredAttr.get(n),o=t.getAttribute(n);for(let u=0;u<i.length;u++)ee(i[u].spec,o,n,i[u].componentTag,t)}if(window.lnCore._debugSink&&(n.indexOf("data-ln-")===0||l)&&window.lnCore._debugSink("attr",n,t,{oldValue:e.oldValue,newValue:t.getAttribute(n)}),n.indexOf("data-ln-")===0){const i=r.byReactive.get(n);i&&U(i,t,n,e.oldValue),r.reactiveWildcard.length&&U(r.reactiveWildcard,t,n,e.oldValue)}if(l)for(let i=0;i<l.length;i++){const o=l[i];if(o.handler){o.handler(t,n,e.oldValue);continue}o.onAttributeChange&&t[o.attribute]?o.onAttributeChange(t,n):(ne(t,o.selector,o.attribute,o.ComponentFn),o.onInit&&o.onInit(t))}}function ie(){window.lnCore=window.lnCore||{},!window.lnCore._attrObserverBound&&(window.lnCore._attrObserverBound=!0,E(function(){new MutationObserver(function(t){for(let n=0;n<t.length;n++)try{oe(t[n])}catch(r){console.error("[ln-core] mutation handler failed",t[n].target,r)}}).observe(document.body,{attributes:!0,subtree:!0,attributeOldValue:!0})},"ln-core"))}function le(e,t){re({observed:e,handler:t}),ie()}function B(e){return(e||"").replace(/^#/,"")}function D(e){const t=e===void 0?location.hash:e,n={},r=B(t);if(!r)return n;const l=r.split("&");for(let i=0;i<l.length;i++){const o=l[i];if(!o)continue;const u=o.indexOf(":"),s=u>-1?o.slice(0,u):o,d=u>-1?o.slice(u+1):"";if(s)try{n[s]=decodeURIComponent(d)}catch{n[s]=d}}return n}function se(e){if(!e)return null;const t=D();return e in t?t[e]:null}function ae(e,t){if(!e)return;const n=D();t==null?delete n[e]:n[e]=String(t);const l=Object.keys(n).map(function(i){const o=n[i];return o===""?i:i+":"+encodeURIComponent(o)}).join("&");B(location.hash)!==l&&(location.hash=l)}function ue(e){return e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?!1:(e.preventDefault(),!0)}function ce(e,t){if(!e||!e.hasAttribute("data-ln-hash"))return null;const n=e.getAttribute("data-ln-hash");if(n&&n.trim()!=="")return n.trim();const r=e.getAttribute("data-ln-sort")||e.getAttribute("data-ln-search-for")||e.getAttribute("data-ln-search")||e.getAttribute("data-ln-filter")||e.id;return r?t?r+"-"+t:r:t||null}function fe(e,t){return!t||t==="none"||e===null||e===void 0?null:String(e)+"."+t}function de(e){return!e||typeof e!="string"?null:e.endsWith(".asc")?{fieldOrColumn:e.slice(0,-4),direction:"asc"}:e.endsWith(".desc")?{fieldOrColumn:e.slice(0,-5),direction:"desc"}:null}function we(e,t){return!e||!Array.isArray(t)||t.length===0?null:e+":"+t.map(encodeURIComponent).join(",")}function be(e){if(!e||typeof e!="string")return null;const t=e.indexOf(":");if(t===-1)return null;const n=e.slice(0,t),r=e.slice(t+1),l=r?r.split(",").map(function(i){try{return decodeURIComponent(i)}catch{return i}}).filter(Boolean):[];return{key:n,values:l}}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=D,window.lnCore.hashGet=se,window.lnCore.hashSet=ae,window.lnCore.hashLinkClick=ue,window.lnCore.resolveHashNamespace=ce,window.lnCore.hashSortEncode=fe,window.lnCore.hashSortDecode=de,window.lnCore.hashFilterEncode=we,window.lnCore.hashFilterDecode=be);function he(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.uuid=he),(function(){const e="data-ln-ajax",t="lnAjax",n="data-ln-data-coordinator-scope";if(window[t]!==void 0)return;let r=null;function l(a){if(!a.hasAttribute(e)||a[t])return;a[t]=!0;const c=d(a);i(c.links),o(c.forms)}function i(a){for(const c of a){if(c[t+"Trigger"]||c.hostname&&c.hostname!==window.location.hostname)continue;const w=c.getAttribute("href");if(w&&w.includes("#"))continue;const f=function(m){if(!K(m,c))return;m.preventDefault();const C=c.getAttribute("href");C&&s("GET",C,null,c)};c.addEventListener("click",f),c[t+"Trigger"]=f}}function o(a){for(const c of a){if(c[t+"Trigger"])continue;if(c.hasAttribute(n)){c[t+"ScopeWarned"]||(c[t+"ScopeWarned"]=!0,console.warn("[ln-ajax] Form has data-ln-data-coordinator-scope — the ln-data-coordinator write pipeline takes precedence; skipping ajax interception for this form."));continue}const w=function(f){if(f.defaultPrevented)return;f.preventDefault();const m=c.method.toUpperCase(),C=c.action,T=new FormData(c);for(const k of c.querySelectorAll('button, input[type="submit"]'))k.disabled=!0;s(m,C,T,c,function(){for(const k of c.querySelectorAll('button, input[type="submit"]'))k.disabled=!1})};c.addEventListener("submit",w),c[t+"Trigger"]=w}}function u(a){if(!a[t])return;const c=d(a);for(const w of c.links)w[t+"Trigger"]&&(w.removeEventListener("click",w[t+"Trigger"]),delete w[t+"Trigger"]);for(const w of c.forms)w[t+"Trigger"]&&(w.removeEventListener("submit",w[t+"Trigger"]),delete w[t+"Trigger"]);delete a[t]}function s(a,c,w,f,m){if(G(f,"ln-ajax:before-start",{method:a,url:c}).defaultPrevented)return;a==="GET"&&r&&r(),A(f,"ln-ajax:start",{method:a,url:c}),f.classList.add("ln-ajax--loading");const T=document.createElement("span");T.className="ln-ajax-spinner",f.appendChild(T);function k(){f.classList.remove("ln-ajax--loading");const b=f.querySelector(".ln-ajax-spinner");b&&b.remove(),m&&m()}let y=c;const R=document.querySelector('meta[name="csrf-token"]'),L=R?R.getAttribute("content"):null;w instanceof FormData&&L&&w.append("_token",L);const j={method:a,headers:{"X-Requested-With":"XMLHttpRequest",Accept:"application/json"}};if(L&&(j.headers["X-CSRF-TOKEN"]=L),a==="GET"&&w){const b=new URLSearchParams(w);y=c+(c.includes("?")?"&":"?")+b.toString()}else a!=="GET"&&w&&(j.body=w);let v=null;if(a==="GET"){const b=new AbortController;j.signal=b.signal,v=function(){r=null,b.abort(),k(),A(f,"ln-ajax:aborted",{method:a,url:y})},r=v}fetch(y,j).then(function(b){const $=b.ok,g=b.status;return b.text().then(function(S){let x=null,_=null;if(S&&S.trim())try{x=JSON.parse(S)}catch(pe){_=pe}return{ok:$,status:g,data:x,parseError:_}})}).then(function(b){v&&r===v&&(r=null);const $=b.status,g=b.data,S=b.parseError;if(b.ok&&!S){if(g&&g.title&&(document.title=g.title),g&&g.content)for(const x in g.content){const _=document.getElementById(x);_&&(_.innerHTML=g.content[x])}if(f.tagName==="A"){const x=f.getAttribute("href");x&&window.history.pushState({ajax:!0},"",x)}else f.tagName==="FORM"&&f.method.toUpperCase()==="GET"&&window.history.pushState({ajax:!0},"",y);A(f,"ln-ajax:success",{method:a,url:y,data:g})}else A(f,"ln-ajax:error",{method:a,url:y,status:$,data:g,error:S||null});k(),A(f,"ln-ajax:complete",{method:a,url:y})}).catch(function(b){b&&b.name==="AbortError"||(v&&r===v&&(r=null),A(f,"ln-ajax:error",{method:a,url:y,status:0,data:null,error:b}),k(),A(f,"ln-ajax:complete",{method:a,url:y}))})}function d(a){const c={links:[],forms:[]};return a.tagName==="A"&&a.getAttribute(e)!=="false"?c.links.push(a):a.tagName==="FORM"&&a.getAttribute(e)!=="false"?c.forms.push(a):(c.links=Array.from(a.querySelectorAll('a:not([data-ln-ajax="false"])')),c.forms=Array.from(a.querySelectorAll('form:not([data-ln-ajax="false"])'))),c}function h(){E(function(){new MutationObserver(function(c){for(const w of c)if(w.type==="childList"){for(const f of w.addedNodes)if(f.nodeType===1&&(l(f),!f.hasAttribute(e))){for(const C of f.querySelectorAll("["+e+"]"))l(C);const m=f.closest&&f.closest("["+e+"]");if(m&&m.getAttribute(e)!=="false"){const C=d(f);i(C.links),o(C.forms)}}}}).observe(document.body,{childList:!0,subtree:!0}),le([e],function(c){l(c)})},"ln-ajax")}function p(){for(const a of document.querySelectorAll("["+e+"]"))l(a)}window[t]=l,window[t].destroy=u,h(),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",p):p()})()})();
@@ -1,30 +1,30 @@
1
- {
2
- "$comment": "This file is partly generated. The $comment, component, generator, and each attribute's direction, sources, type, values, fallback, and description keys are owned by the generator and synchronized from JS source code. All other keys are preserved and safe to hand-author. Regenerate with `npm run sync:ln-schemas`.",
3
- "component": "ln-ajax",
4
- "generator": "scripts/sync-ln-schemas.mjs",
5
- "attributes": {
6
- "data-ln-ajax": {
7
- "direction": "author",
8
- "sources": [
9
- "ln-ajax-dev.scss",
10
- "src/ln-ajax.js"
11
- ],
12
- "type": "marker",
13
- "description": "Enables AJAX interception of form submissions and anchor clicks within container"
14
- },
15
- "data-ln-data-coordinator-scope": {
16
- "direction": "author",
17
- "sources": [
18
- "src/ln-ajax.js"
19
- ],
20
- "type": "string",
21
- "description": "Excludes form from ln-ajax interception to let data coordinator handle submission"
22
- },
23
- "data-ln-debug": {
24
- "direction": null,
25
- "sources": [
26
- "ln-ajax-dev.scss"
27
- ]
28
- }
29
- }
30
- }
1
+ {
2
+ "$comment": "This file is partly generated. The $comment, component, generator, and each attribute's direction, sources, type, values, fallback, and description keys are owned by the generator and synchronized from JS source code. All other keys are preserved and safe to hand-author. Regenerate with `npm run sync:ln-schemas`.",
3
+ "component": "ln-ajax",
4
+ "generator": "scripts/sync-ln-schemas.mjs",
5
+ "attributes": {
6
+ "data-ln-ajax": {
7
+ "direction": "author",
8
+ "sources": [
9
+ "ln-ajax-dev.scss",
10
+ "src/ln-ajax.js"
11
+ ],
12
+ "type": "marker",
13
+ "description": "Enables AJAX interception of form submissions and anchor clicks within container"
14
+ },
15
+ "data-ln-data-coordinator-scope": {
16
+ "direction": "author",
17
+ "sources": [
18
+ "src/ln-ajax.js"
19
+ ],
20
+ "type": "string",
21
+ "description": "Excludes form from ln-ajax interception to let data coordinator handle submission"
22
+ },
23
+ "data-ln-debug": {
24
+ "direction": null,
25
+ "sources": [
26
+ "ln-ajax-dev.scss"
27
+ ]
28
+ }
29
+ }
30
+ }