@livenetworks/ashlar 1.6.1 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +641 -0
- package/README.md +190 -86
- package/{js → components}/COMPONENTS.md +1116 -1108
- package/{js → components}/index.js +81 -58
- package/{js → components}/ln-accordion/README.md +7 -6
- package/components/ln-accordion/ln-accordion-dev.scss +8 -0
- package/components/ln-accordion/ln-accordion.js +1 -0
- package/components/ln-accordion/ln-accordion.schema.json +30 -0
- package/components/ln-accordion/ln-accordion.scss +8 -0
- package/{js → components}/ln-accordion/src/ln-accordion.js +8 -2
- package/{js → components}/ln-ajax/README.md +171 -160
- package/components/ln-ajax/ln-ajax-dev.scss +8 -0
- package/components/ln-ajax/ln-ajax.js +1 -0
- package/components/ln-ajax/ln-ajax.schema.json +30 -0
- package/{js → components}/ln-ajax/src/ln-ajax.js +65 -30
- package/{js → components}/ln-api-connector/README.md +27 -5
- package/components/ln-api-connector/ln-api-connector.js +1 -0
- package/components/ln-api-connector/ln-api-connector.schema.json +96 -0
- package/components/ln-api-connector/src/connector-core.js +97 -0
- package/components/ln-api-connector/src/ln-api-connector.js +447 -0
- package/{js → components}/ln-api-queue/README.md +12 -9
- package/components/ln-api-queue/ln-api-queue.js +1 -0
- package/components/ln-api-queue/ln-api-queue.schema.json +34 -0
- package/{js → components}/ln-api-queue/src/ln-api-queue.js +33 -14
- package/{js → components}/ln-api-queue/src/queue-storage.js +7 -3
- package/{js → components}/ln-autoresize/README.md +129 -127
- package/components/ln-autoresize/ln-autoresize-dev.scss +8 -0
- package/components/ln-autoresize/ln-autoresize.js +1 -0
- package/components/ln-autoresize/ln-autoresize.schema.json +22 -0
- package/{js → components}/ln-autoresize/src/ln-autoresize.js +8 -1
- package/{js → components}/ln-autosave/README.md +127 -124
- package/components/ln-autosave/ln-autosave-dev.scss +13 -0
- package/components/ln-autosave/ln-autosave.js +1 -0
- package/components/ln-autosave/ln-autosave.schema.json +48 -0
- package/components/ln-autosave/src/autosave-model.js +34 -0
- package/{js → components}/ln-autosave/src/ln-autosave.js +65 -58
- package/components/ln-chart/README.md +145 -0
- package/components/ln-chart/ln-chart-dev.scss +20 -0
- package/components/ln-chart/ln-chart.js +1 -0
- package/components/ln-chart/ln-chart.schema.json +146 -0
- package/components/ln-chart/ln-chart.scss +8 -0
- package/components/ln-chart/src/chart-model.js +154 -0
- package/components/ln-chart/src/ln-chart.js +176 -0
- package/{js → components}/ln-circular-progress/README.md +15 -14
- package/components/ln-circular-progress/ln-circular-progress-dev.scss +8 -0
- package/components/ln-circular-progress/ln-circular-progress.js +1 -0
- package/components/ln-circular-progress/ln-circular-progress.schema.json +42 -0
- package/{js → components}/ln-circular-progress/src/ln-circular-progress.js +32 -50
- package/{js → components}/ln-confirm/README.md +69 -18
- package/components/ln-confirm/ln-confirm-dev.scss +24 -0
- package/components/ln-confirm/ln-confirm.js +1 -0
- package/components/ln-confirm/ln-confirm.schema.json +66 -0
- package/components/ln-confirm/ln-confirm.scss +24 -0
- package/{js → components}/ln-confirm/src/ln-confirm.js +180 -171
- package/{js → components}/ln-core/README.md +374 -149
- package/components/ln-core/attrs.js +273 -0
- package/components/ln-core/compare.js +40 -0
- package/components/ln-core/crypto.js +265 -0
- package/components/ln-core/date.js +50 -0
- package/components/ln-core/dom.js +115 -0
- package/components/ln-core/events.js +122 -0
- package/components/ln-core/form.js +136 -0
- package/{js → components}/ln-core/hash.js +149 -92
- package/components/ln-core/helpers.js +33 -0
- package/components/ln-core/http.js +48 -0
- package/components/ln-core/index.js +11 -0
- package/components/ln-core/lifecycle.js +403 -0
- package/components/ln-core/ln-core.schema.json +109 -0
- package/components/ln-core/locale.js +55 -0
- package/components/ln-core/matching.js +78 -0
- package/components/ln-core/number.js +125 -0
- package/components/ln-core/progress.js +30 -0
- package/components/ln-core/template.js +206 -0
- package/{js → components}/ln-core/window-cache.js +247 -213
- package/{js → components}/ln-couchdb-connector/README.md +7 -5
- package/components/ln-couchdb-connector/ln-couchdb-connector.js +1 -0
- package/components/ln-couchdb-connector/ln-couchdb-connector.schema.json +50 -0
- package/{js → components}/ln-couchdb-connector/src/ln-couchdb-connector.js +29 -43
- package/{js → components}/ln-data-coordinator/README.md +109 -73
- package/components/ln-data-coordinator/ln-data-coordinator-dev.scss +8 -0
- package/components/ln-data-coordinator/ln-data-coordinator.js +1 -0
- package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -0
- package/components/ln-data-coordinator/src/data-read-policy.js +41 -0
- package/{js → components}/ln-data-coordinator/src/ln-data-coordinator.js +411 -154
- package/{js → components}/ln-data-coordinator/src/mutation-receipts.js +0 -5
- package/{js → components}/ln-data-store/README.md +42 -17
- package/components/ln-data-store/ln-data-store-dev.scss +13 -0
- package/components/ln-data-store/ln-data-store.js +1 -0
- package/components/ln-data-store/ln-data-store.schema.json +84 -0
- package/components/ln-data-store/src/data-store-model.js +155 -0
- package/{js → components}/ln-data-store/src/ln-data-store.js +407 -105
- package/components/ln-data-store/src/window-index.js +119 -0
- package/{js → components}/ln-date/README.md +17 -7
- package/{js → components}/ln-date/ln-date-dev.scss +14 -14
- package/components/ln-date/ln-date.js +1 -0
- package/components/ln-date/ln-date.schema.json +92 -0
- package/components/ln-date/src/date-model.js +186 -0
- package/components/ln-date/src/ln-date.js +486 -0
- package/components/ln-debug/README.md +132 -0
- package/components/ln-debug/ln-debug.js +1 -0
- package/components/ln-debug/ln-debug.schema.json +28 -0
- package/components/ln-debug/src/console-sink.js +19 -0
- package/components/ln-debug/src/debug-verifier.js +331 -0
- package/components/ln-debug/src/gate.js +95 -0
- package/components/ln-debug/src/generated-attributes.js +299 -0
- package/components/ln-debug/src/ln-debug.js +60 -0
- package/{js → components}/ln-dropdown/README.md +150 -140
- package/components/ln-dropdown/ln-dropdown-dev.scss +13 -0
- package/components/ln-dropdown/ln-dropdown.js +1 -0
- package/components/ln-dropdown/ln-dropdown.schema.json +90 -0
- package/components/ln-dropdown/ln-dropdown.scss +18 -0
- package/{js → components}/ln-dropdown/src/ln-dropdown.js +114 -11
- package/{js → components}/ln-editor/README.md +11 -9
- package/components/ln-editor/ln-editor-dev.scss +18 -0
- package/components/ln-editor/ln-editor.js +1 -0
- package/components/ln-editor/ln-editor.schema.json +58 -0
- package/components/ln-editor/ln-editor.scss +13 -0
- package/{js → components}/ln-editor/src/ln-editor.js +59 -11
- package/{js → components}/ln-external-links/README.md +10 -8
- package/components/ln-external-links/ln-external-links.js +1 -0
- package/components/ln-external-links/ln-external-links.schema.json +18 -0
- package/{js → components}/ln-external-links/src/ln-external-links.js +13 -11
- package/{js → components}/ln-fill/README.md +6 -8
- package/components/ln-fill/ln-fill.js +1 -0
- package/components/ln-fill/ln-fill.schema.json +23 -0
- package/{js → components}/ln-fill/src/ln-fill.js +7 -1
- package/components/ln-filter/README.md +131 -0
- package/components/ln-filter/ln-filter-dev.scss +13 -0
- package/components/ln-filter/ln-filter.js +1 -0
- package/components/ln-filter/ln-filter.schema.json +153 -0
- package/components/ln-filter/src/filter-model.js +185 -0
- package/components/ln-filter/src/ln-filter.js +435 -0
- package/{js → components}/ln-form/README.md +260 -264
- package/components/ln-form/ln-form-dev.scss +8 -0
- package/components/ln-form/ln-form.js +1 -0
- package/components/ln-form/ln-form.schema.json +45 -0
- package/{js → components}/ln-form/src/ln-form.js +107 -99
- package/{js → components}/ln-http/README.md +11 -6
- package/components/ln-http/ln-http.js +1 -0
- package/components/ln-http/ln-http.schema.json +6 -0
- package/components/ln-http/src/http-core.js +51 -0
- package/{js → components}/ln-http/src/ln-http.js +28 -33
- package/{js → components}/ln-icon/README.md +16 -9
- package/components/ln-icon/ln-icon.schema.json +6 -0
- package/components/ln-include/README.md +75 -0
- package/components/ln-include/ln-include-dev.scss +13 -0
- package/components/ln-include/ln-include.js +1 -0
- package/components/ln-include/ln-include.schema.json +23 -0
- package/components/ln-include/src/ln-include.js +111 -0
- package/components/ln-key/README.md +130 -0
- package/components/ln-key/ln-key-dev.scss +18 -0
- package/components/ln-key/ln-key.js +1 -0
- package/components/ln-key/ln-key.schema.json +56 -0
- package/components/ln-key/src/key-model.js +146 -0
- package/components/ln-key/src/ln-key.js +201 -0
- package/{js → components}/ln-link/README.md +7 -9
- package/components/ln-link/ln-link-dev.scss +8 -0
- package/components/ln-link/ln-link.js +1 -0
- package/components/ln-link/ln-link.schema.json +22 -0
- package/{js → components}/ln-link/src/ln-link.js +16 -11
- package/components/ln-list/README.md +152 -0
- package/components/ln-list/ln-list-dev.scss +8 -0
- package/components/ln-list/ln-list.js +1 -0
- package/components/ln-list/ln-list.schema.json +166 -0
- package/components/ln-list/ln-list.scss +25 -0
- package/{js → components}/ln-list/src/ln-list.js +1301 -1216
- package/{js → components}/ln-modal/README.md +13 -10
- package/components/ln-modal/ln-modal-dev.scss +18 -0
- package/components/ln-modal/ln-modal.js +1 -0
- package/components/ln-modal/ln-modal.schema.json +54 -0
- package/components/ln-modal/ln-modal.scss +51 -0
- package/{js → components}/ln-modal/src/ln-modal.js +164 -137
- package/{js → components}/ln-nav/README.md +11 -11
- package/components/ln-nav/ln-nav.js +1 -0
- package/components/ln-nav/ln-nav.schema.json +25 -0
- package/{js → components}/ln-nav/src/ln-nav.js +25 -14
- package/components/ln-number/README.md +205 -0
- package/{js → components}/ln-number/ln-number-dev.scss +13 -13
- package/components/ln-number/ln-number.js +1 -0
- package/components/ln-number/ln-number.schema.json +63 -0
- package/components/ln-number/src/ln-number.js +400 -0
- package/components/ln-number/src/number-model.js +31 -0
- package/components/ln-obfuscator/README.md +60 -0
- package/components/ln-obfuscator/ln-obfuscator.js +1 -0
- package/components/ln-obfuscator/ln-obfuscator.schema.json +49 -0
- package/components/ln-obfuscator/src/ln-obfuscator.js +159 -0
- package/components/ln-obfuscator/src/obfuscator-model.js +250 -0
- package/{js → components}/ln-options/README.md +3 -1
- package/components/ln-options/ln-options-dev.scss +13 -0
- package/components/ln-options/ln-options.js +1 -0
- package/components/ln-options/ln-options.schema.json +41 -0
- package/{js → components}/ln-options/src/ln-options.js +13 -5
- package/components/ln-persist/README.md +151 -0
- package/components/ln-persist/ln-persist.js +1 -0
- package/components/ln-persist/ln-persist.schema.json +28 -0
- package/components/ln-persist/src/ln-persist.js +83 -0
- package/components/ln-picklist/README.md +230 -0
- package/components/ln-picklist/ln-picklist-dev.scss +22 -0
- package/components/ln-picklist/ln-picklist.js +1 -0
- package/components/ln-picklist/ln-picklist.schema.json +49 -0
- package/components/ln-picklist/src/ln-picklist.js +228 -0
- package/{js → components}/ln-popover/README.md +164 -162
- package/components/ln-popover/ln-popover-dev.scss +13 -0
- package/components/ln-popover/ln-popover.js +1 -0
- package/components/ln-popover/ln-popover.schema.json +82 -0
- package/components/ln-popover/ln-popover.scss +18 -0
- package/{js → components}/ln-popover/src/ln-popover.js +42 -36
- package/{js → components}/ln-progress/README.md +410 -413
- package/components/ln-progress/ln-progress-dev.scss +8 -0
- package/components/ln-progress/ln-progress.js +1 -0
- package/components/ln-progress/ln-progress.schema.json +40 -0
- package/components/ln-progress/src/ln-progress.js +91 -0
- package/components/ln-progress/src/progress-model.js +20 -0
- package/{js → components}/ln-router/README.md +443 -432
- package/components/ln-router/ln-router-dev.scss +13 -0
- package/components/ln-router/ln-router.js +1 -0
- package/components/ln-router/ln-router.schema.json +68 -0
- package/{js → components}/ln-router/src/ln-router.js +585 -539
- package/components/ln-router/src/router-model.js +50 -0
- package/components/ln-scroll/README.md +45 -0
- package/components/ln-scroll/ln-scroll.js +1 -0
- package/components/ln-scroll/ln-scroll.schema.json +85 -0
- package/components/ln-scroll/src/ln-scroll.js +150 -0
- package/components/ln-search/README.md +188 -0
- package/components/ln-search/ln-search-dev.scss +13 -0
- package/components/ln-search/ln-search.js +1 -0
- package/components/ln-search/ln-search.schema.json +103 -0
- package/components/ln-search/src/ln-search.js +330 -0
- package/{js → components}/ln-slug/README.md +6 -3
- package/components/ln-slug/ln-slug-dev.scss +18 -0
- package/components/ln-slug/ln-slug.js +1 -0
- package/components/ln-slug/ln-slug.schema.json +23 -0
- package/{js → components}/ln-slug/src/ln-slug.js +20 -13
- package/components/ln-slug/src/slug-model.js +21 -0
- package/{js → components}/ln-sort/README.md +178 -170
- package/{js → components}/ln-sort/ln-sort-dev.scss +8 -8
- package/components/ln-sort/ln-sort.js +1 -0
- package/components/ln-sort/ln-sort.schema.json +104 -0
- package/components/ln-sort/src/ln-sort.js +321 -0
- package/components/ln-sort/src/sort-model.js +117 -0
- package/{js → components}/ln-sortable/README.md +7 -11
- package/components/ln-sortable/ln-sortable-dev.scss +13 -0
- package/components/ln-sortable/ln-sortable.js +1 -0
- package/components/ln-sortable/ln-sortable.schema.json +36 -0
- package/{js → components}/ln-sortable/src/ln-sortable.js +8 -13
- package/{js → components}/ln-stat/README.md +3 -1
- package/components/ln-stat/ln-stat-dev.scss +8 -0
- package/components/ln-stat/ln-stat.js +1 -0
- package/components/ln-stat/ln-stat.schema.json +32 -0
- package/{js → components}/ln-stat/src/ln-stat.js +14 -18
- package/components/ln-stat/src/stat-model.js +28 -0
- package/{js → components}/ln-table/README.md +37 -24
- package/{js → components}/ln-table/ln-table-dev.scss +17 -17
- package/components/ln-table/ln-table.js +1 -0
- package/components/ln-table/ln-table.schema.json +211 -0
- package/components/ln-table/ln-table.scss +15 -0
- package/{js → components}/ln-table/src/ln-table.js +1365 -1493
- package/components/ln-table/src/table-model.js +98 -0
- package/components/ln-table-coordinator/README.md +61 -0
- package/components/ln-table-coordinator/ln-table-coordinator.js +1 -0
- package/components/ln-table-coordinator/ln-table-coordinator.schema.json +93 -0
- package/components/ln-table-coordinator/src/ln-table-coordinator.js +193 -0
- package/{js → components}/ln-tabs/README.md +32 -14
- package/components/ln-tabs/ln-tabs-dev.scss +24 -0
- package/components/ln-tabs/ln-tabs.js +1 -0
- package/components/ln-tabs/ln-tabs.schema.json +75 -0
- package/components/ln-tabs/ln-tabs.scss +8 -0
- package/components/ln-tabs/src/ln-tabs.js +207 -0
- package/components/ln-tabs/src/tabs-model.js +82 -0
- package/{js → components}/ln-time/README.md +96 -95
- package/components/ln-time/ln-time-dev.scss +13 -0
- package/components/ln-time/ln-time.js +1 -0
- package/components/ln-time/ln-time.schema.json +38 -0
- package/{js → components}/ln-time/src/ln-time.js +206 -223
- package/components/ln-time/src/time-model.js +64 -0
- package/{js → components}/ln-toast/README.md +23 -5
- package/components/ln-toast/ln-toast-dev.scss +8 -0
- package/components/ln-toast/ln-toast.js +1 -0
- package/components/ln-toast/ln-toast.schema.json +65 -0
- package/components/ln-toast/ln-toast.scss +59 -0
- package/{js → components}/ln-toast/src/ln-toast.js +233 -232
- package/{js → components}/ln-toggle/README.md +198 -196
- package/{js → components}/ln-toggle/ln-toggle-dev.scss +13 -13
- package/components/ln-toggle/ln-toggle.js +1 -0
- package/components/ln-toggle/ln-toggle.schema.json +52 -0
- package/components/ln-toggle/ln-toggle.scss +37 -0
- package/{js → components}/ln-toggle/src/ln-toggle.js +61 -46
- package/{js → components}/ln-tooltip/README.md +6 -6
- package/{js → components}/ln-tooltip/ln-tooltip-dev.scss +9 -9
- package/components/ln-tooltip/ln-tooltip.js +1 -0
- package/components/ln-tooltip/ln-tooltip.schema.json +86 -0
- package/components/ln-tooltip/ln-tooltip.scss +9 -0
- package/{js → components}/ln-tooltip/src/ln-tooltip.js +14 -3
- package/{js → components}/ln-translations/README.md +3 -1
- package/components/ln-translations/ln-translations-dev.scss +13 -0
- package/components/ln-translations/ln-translations.js +1 -0
- package/components/ln-translations/ln-translations.schema.json +120 -0
- package/{js → components}/ln-translations/src/ln-translations.js +25 -10
- package/components/ln-ui-coordinator/README.md +101 -0
- package/components/ln-ui-coordinator/ln-ui-coordinator-dev.scss +8 -0
- package/components/ln-ui-coordinator/ln-ui-coordinator.js +1 -0
- package/components/ln-ui-coordinator/ln-ui-coordinator.schema.json +60 -0
- package/{js/ln-modal-coordinator/src/ln-modal-coordinator.js → components/ln-ui-coordinator/src/ln-ui-coordinator.js} +403 -345
- package/components/ln-upload/README.md +133 -0
- package/components/ln-upload/ln-upload-dev.scss +18 -0
- package/components/ln-upload/ln-upload.js +1 -0
- package/components/ln-upload/ln-upload.schema.json +193 -0
- package/components/ln-upload/ln-upload.scss +20 -0
- package/components/ln-upload/src/ln-upload.js +652 -0
- package/components/ln-upload/src/upload-model.js +78 -0
- package/{js → components}/ln-validate/README.md +182 -180
- package/{js → components}/ln-validate/ln-validate-dev.scss +15 -15
- package/components/ln-validate/ln-validate.js +1 -0
- package/components/ln-validate/ln-validate.schema.json +50 -0
- package/components/ln-validate/ln-validate.scss +7 -0
- package/{js → components}/ln-validate/src/ln-validate.js +23 -45
- package/components/ln-validate/src/validate-model.js +64 -0
- package/components/ln-websocket-connector/README.md +166 -0
- package/components/ln-websocket-connector/ln-websocket-connector.js +1 -0
- package/components/ln-websocket-connector/ln-websocket-connector.schema.json +29 -0
- package/components/ln-websocket-connector/src/ln-websocket-connector.js +279 -0
- package/ln-ashlar.html-data.json +1796 -0
- package/package.json +84 -61
- package/{scss → theme}/base/_global.scss +1 -2
- package/{scss → theme}/base/_reset.scss +1 -1
- package/{scss → theme}/base/_typography.scss +2 -0
- package/theme/brand.css +73 -0
- package/{scss → theme}/components/_app-shell.scss +8 -0
- package/theme/components/_button.scss +24 -0
- package/theme/components/_chart.scss +5 -0
- package/theme/components/_confirm.scss +6 -0
- package/{scss → theme}/components/_date.scss +30 -22
- package/{scss → theme}/components/_dropdown.scss +6 -1
- package/theme/components/_form.scss +140 -0
- package/{scss → theme}/components/_layout.scss +6 -0
- package/{scss → theme}/components/_ln-table.scss +1 -6
- package/theme/components/_picklist.scss +3 -0
- package/{scss → theme}/components/_sort.scss +10 -10
- package/theme/components/_status-badge.scss +6 -0
- package/{scss → theme}/components/_table.scss +16 -0
- package/{scss → theme}/components/_tabs.scss +0 -4
- package/theme/components/_toast.scss +48 -0
- package/{scss → theme}/components/_toggle.scss +1 -1
- package/theme/components/_upload.scss +45 -0
- package/{scss → theme}/config/_breakpoints.scss +1 -1
- package/theme/config/_contrast.scss +128 -0
- package/{scss → theme}/config/_density.scss +191 -205
- package/theme/config/_palette.scss +274 -0
- package/theme/config/_theme.scss +293 -0
- package/{scss → theme}/config/_tokens.scss +285 -441
- package/{scss → theme}/config/mixins/_accordion.scss +1 -1
- package/{scss → theme}/config/mixins/_alert.scss +1 -0
- package/{scss → theme}/config/mixins/_app-shell.scss +4 -2
- package/{scss → theme}/config/mixins/_borders.scss +2 -0
- package/theme/config/mixins/_btn.scss +175 -0
- package/{scss → theme}/config/mixins/_card.scss +55 -46
- package/theme/config/mixins/_chart.scss +82 -0
- package/{scss → theme}/config/mixins/_collapsible.scss +2 -1
- package/{scss → theme}/config/mixins/_colors.scss +8 -14
- package/{scss → theme}/config/mixins/_diagnostics.scss +48 -48
- package/theme/config/mixins/_dropdown.scss +169 -0
- package/{scss → theme}/config/mixins/_editor.scss +0 -7
- package/{scss → theme}/config/mixins/_filter.scss +47 -47
- package/{scss → theme}/config/mixins/_footer.scss +1 -1
- package/{scss → theme}/config/mixins/_form.scss +49 -18
- package/{scss → theme}/config/mixins/_index.scss +62 -61
- package/{scss → theme}/config/mixins/_layout.scss +6 -2
- package/{scss → theme}/config/mixins/_ln-table.scss +31 -10
- package/{scss → theme}/config/mixins/_loader.scss +1 -1
- package/{scss → theme}/config/mixins/_modal.scss +145 -149
- package/{scss → theme}/config/mixins/_motion.scss +13 -0
- package/{scss → theme}/config/mixins/_nav.scss +7 -7
- package/theme/config/mixins/_picklist.scss +66 -0
- package/theme/config/mixins/_popover.scss +96 -0
- package/{scss → theme}/config/mixins/_sidebar.scss +7 -4
- package/{scss → theme}/config/mixins/_sort.scss +43 -42
- package/{scss → theme}/config/mixins/_status-badge.scss +15 -2
- package/{scss → theme}/config/mixins/_table.scss +25 -14
- package/{scss → theme}/config/mixins/_tabs.scss +1 -1
- package/{scss → theme}/config/mixins/_toast.scss +174 -179
- package/{scss → theme}/config/mixins/_tooltip.scss +2 -2
- package/{scss → theme}/config/mixins/_typography.scss +16 -5
- package/{scss → theme}/config/mixins/_upload.scss +8 -6
- package/theme/ln-ashlar-core.scss +24 -0
- package/theme/ln-ashlar-dev.scss +66 -0
- package/theme/ln-ashlar-landing.scss +56 -0
- package/{scss/ln-ashlar.scss → theme/ln-ashlar-theme.scss} +63 -69
- package/theme/ln-ashlar.scss +8 -0
- package/theme/presentation/_bento.scss +151 -0
- package/theme/presentation/_cta.scss +111 -0
- package/theme/presentation/_effects.scss +216 -0
- package/theme/presentation/_features.scss +108 -0
- package/theme/presentation/_footer.scss +129 -0
- package/theme/presentation/_hero.scss +158 -0
- package/theme/presentation/_layout.scss +170 -0
- package/theme/presentation/_navbar.scss +140 -0
- package/theme/presentation/_pricing.scss +262 -0
- package/theme/presentation/_stats.scss +87 -0
- package/theme/presentation/_testimonials.scss +124 -0
- package/theme/presentation/_tokens.scss +39 -0
- package/theme/presentation/_typography.scss +163 -0
- package/{scss → theme}/utilities/_animations.scss +38 -0
- package/{scss → theme}/utilities/_utilities.scss +6 -0
- package/web-types.json +2312 -0
- package/js/ln-accordion/ln-accordion.js +0 -1
- package/js/ln-ajax/ln-ajax.js +0 -1
- package/js/ln-api-connector/ln-api-connector.js +0 -1
- package/js/ln-api-connector/src/ln-api-connector.js +0 -368
- package/js/ln-api-queue/ln-api-queue.js +0 -1
- package/js/ln-autoresize/ln-autoresize.js +0 -1
- package/js/ln-autosave/ln-autosave.js +0 -1
- package/js/ln-circular-progress/ln-circular-progress.js +0 -1
- package/js/ln-confirm/_ln-confirm.scss +0 -24
- package/js/ln-confirm/ln-confirm.js +0 -1
- package/js/ln-core/crypto.js +0 -83
- package/js/ln-core/helpers.js +0 -788
- package/js/ln-core/index.js +0 -7
- package/js/ln-core/persist.js +0 -97
- package/js/ln-couchdb-connector/ln-couchdb-connector.js +0 -1
- package/js/ln-data-coordinator/ln-data-coordinator.js +0 -1
- package/js/ln-data-coordinator/src/data-read-policy.js +0 -18
- package/js/ln-data-store/ln-data-store.js +0 -1
- package/js/ln-date/ln-date.js +0 -1
- package/js/ln-date/src/ln-date.js +0 -603
- package/js/ln-debug/README.md +0 -58
- package/js/ln-debug/ln-debug.js +0 -1
- package/js/ln-debug/src/ln-debug.js +0 -19
- package/js/ln-dropdown/ln-dropdown.js +0 -1
- package/js/ln-dropdown/ln-dropdown.scss +0 -15
- package/js/ln-editor/ln-editor.js +0 -1
- package/js/ln-editor/ln-editor.scss +0 -43
- package/js/ln-external-links/ln-external-links.js +0 -1
- package/js/ln-fill/ln-fill.js +0 -1
- package/js/ln-filter/README.md +0 -189
- package/js/ln-filter/ln-filter-dev.scss +0 -8
- package/js/ln-filter/ln-filter.js +0 -1
- package/js/ln-filter/src/ln-filter.js +0 -419
- package/js/ln-form/ln-form.js +0 -1
- package/js/ln-http/ln-http.js +0 -1
- package/js/ln-link/ln-link.js +0 -1
- package/js/ln-list/README.md +0 -129
- package/js/ln-list/ln-list.js +0 -1
- package/js/ln-list/ln-list.scss +0 -28
- package/js/ln-modal/ln-modal-dev.scss +0 -13
- package/js/ln-modal/ln-modal.js +0 -1
- package/js/ln-modal/ln-modal.scss +0 -35
- package/js/ln-modal-coordinator/README.md +0 -99
- package/js/ln-modal-coordinator/ln-modal-coordinator-dev.scss +0 -8
- package/js/ln-modal-coordinator/ln-modal-coordinator.js +0 -1
- package/js/ln-nav/ln-nav.js +0 -1
- package/js/ln-number/README.md +0 -149
- package/js/ln-number/ln-number.js +0 -1
- package/js/ln-number/src/ln-number.js +0 -443
- package/js/ln-options/ln-options.js +0 -1
- package/js/ln-popover/ln-popover.js +0 -1
- package/js/ln-progress/ln-progress.js +0 -1
- package/js/ln-progress/src/ln-progress.js +0 -98
- package/js/ln-router/ln-router.js +0 -1
- package/js/ln-search/README.md +0 -158
- package/js/ln-search/ln-search-dev.scss +0 -8
- package/js/ln-search/ln-search.js +0 -1
- package/js/ln-search/src/ln-search.js +0 -117
- package/js/ln-slug/ln-slug.js +0 -1
- package/js/ln-sort/ln-sort.js +0 -1
- package/js/ln-sort/src/ln-sort.js +0 -178
- package/js/ln-sortable/ln-sortable.js +0 -1
- package/js/ln-stat/ln-stat.js +0 -1
- package/js/ln-table/ln-table.js +0 -1
- package/js/ln-table/ln-table.scss +0 -11
- package/js/ln-table-coordinator/README.md +0 -73
- package/js/ln-table-coordinator/ln-table-coordinator.js +0 -1
- package/js/ln-table-coordinator/src/ln-table-coordinator.js +0 -160
- package/js/ln-tabs/ln-tabs-dev.scss +0 -18
- package/js/ln-tabs/ln-tabs.js +0 -1
- package/js/ln-tabs/src/ln-tabs.js +0 -188
- package/js/ln-time/ln-time.js +0 -1
- package/js/ln-toast/ln-toast.js +0 -1
- package/js/ln-toggle/ln-toggle.js +0 -1
- package/js/ln-tooltip/ln-tooltip.js +0 -1
- package/js/ln-tooltip/ln-tooltip.scss +0 -9
- package/js/ln-translations/ln-translations.js +0 -1
- package/js/ln-upload/README.md +0 -255
- package/js/ln-upload/ln-upload.js +0 -1
- package/js/ln-upload/ln-upload.scss +0 -20
- package/js/ln-upload/src/ln-upload.js +0 -423
- package/js/ln-validate/ln-validate.js +0 -1
- package/scss/components/_button.scss +0 -20
- package/scss/components/_confirm.scss +0 -5
- package/scss/components/_form.scss +0 -107
- package/scss/components/_status-badge.scss +0 -4
- package/scss/components/_toast.scss +0 -68
- package/scss/components/_upload.scss +0 -51
- package/scss/config/_theme.scss +0 -216
- package/scss/config/mixins/_btn.scss +0 -179
- package/scss/config/mixins/_confirm.scss +0 -31
- package/scss/config/mixins/_dropdown.scss +0 -141
- package/scss/config/mixins/_popover.scss +0 -64
- package/scss/ln-ashlar-dev.scss +0 -39
- /package/{js → components}/ln-core/positioning.js +0 -0
- /package/{js → components}/ln-core/reactive.js +0 -0
- /package/{js → components}/ln-filter/ln-filter.scss +0 -0
- /package/{js → components}/ln-icon/ln-icon.js +0 -0
- /package/{js → components}/ln-icon/src/ln-icon.js +0 -0
- /package/{js → components}/ln-search/ln-search.scss +0 -0
- /package/{js → components}/ln-toast/template.html +0 -0
- /package/{scss → theme}/components/_accordion.scss +0 -0
- /package/{scss → theme}/components/_ajax.scss +0 -0
- /package/{scss → theme}/components/_alert.scss +0 -0
- /package/{scss → theme}/components/_avatar.scss +0 -0
- /package/{scss → theme}/components/_breadcrumbs.scss +0 -0
- /package/{scss → theme}/components/_card.scss +0 -0
- /package/{scss → theme}/components/_chip.scss +0 -0
- /package/{scss → theme}/components/_circular-progress.scss +0 -0
- /package/{scss → theme}/components/_editor.scss +0 -0
- /package/{scss → theme}/components/_empty-state.scss +0 -0
- /package/{scss → theme}/components/_filter.scss +0 -0
- /package/{scss → theme}/components/_link.scss +0 -0
- /package/{scss → theme}/components/_loader.scss +0 -0
- /package/{scss → theme}/components/_modal.scss +0 -0
- /package/{scss → theme}/components/_nav.scss +0 -0
- /package/{scss → theme}/components/_page-header.scss +0 -0
- /package/{scss → theme}/components/_popover.scss +0 -0
- /package/{scss → theme}/components/_progress.scss +0 -0
- /package/{scss → theme}/components/_prose.scss +0 -0
- /package/{scss → theme}/components/_scrollbar.scss +0 -0
- /package/{scss → theme}/components/_sections.scss +0 -0
- /package/{scss → theme}/components/_sidebar.scss +0 -0
- /package/{scss → theme}/components/_stat-card.scss +0 -0
- /package/{scss → theme}/components/_stepper.scss +0 -0
- /package/{scss → theme}/components/_timeline.scss +0 -0
- /package/{scss → theme}/components/_tooltip.scss +0 -0
- /package/{scss → theme}/components/_translations.scss +0 -0
- /package/{scss → theme}/config/_icons.scss +0 -0
- /package/{scss → theme}/config/_mixins.scss +0 -0
- /package/{scss → theme}/config/mixins/_ajax.scss +0 -0
- /package/{scss → theme}/config/mixins/_avatar.scss +0 -0
- /package/{scss → theme}/config/mixins/_breadcrumbs.scss +0 -0
- /package/{scss → theme}/config/mixins/_breakpoints.scss +0 -0
- /package/{scss → theme}/config/mixins/_chip.scss +0 -0
- /package/{scss → theme}/config/mixins/_circular-progress.scss +0 -0
- /package/{scss → theme}/config/mixins/_display.scss +0 -0
- /package/{scss → theme}/config/mixins/_empty-state.scss +0 -0
- /package/{scss → theme}/config/mixins/_focus.scss +0 -0
- /package/{scss → theme}/config/mixins/_interaction.scss +0 -0
- /package/{scss → theme}/config/mixins/_kbd.scss +0 -0
- /package/{scss → theme}/config/mixins/_link.scss +0 -0
- /package/{scss → theme}/config/mixins/_page-header.scss +0 -0
- /package/{scss → theme}/config/mixins/_position.scss +0 -0
- /package/{scss → theme}/config/mixins/_progress.scss +0 -0
- /package/{scss → theme}/config/mixins/_prose.scss +0 -0
- /package/{scss → theme}/config/mixins/_shadows.scss +0 -0
- /package/{scss → theme}/config/mixins/_sizing.scss +0 -0
- /package/{scss → theme}/config/mixins/_spacing.scss +0 -0
- /package/{scss → theme}/config/mixins/_stat-card.scss +0 -0
- /package/{scss → theme}/config/mixins/_stepper.scss +0 -0
- /package/{scss → theme}/config/mixins/_timeline.scss +0 -0
- /package/{scss → theme}/config/mixins/_transitions.scss +0 -0
- /package/{scss → theme}/config/mixins/_translations.scss +0 -0
- /package/{scss → theme}/tabler-icons.txt +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...e){typeof e[0]=="string"&&(e[0].startsWith("[ln-")||e[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,e)}}const w={};function D(t,e){w[t]||(w[t]=document.querySelector('[data-ln-template="'+t+'"]'));const o=w[t];return o?o.content.cloneNode(!0):(console.warn("["+(e||"ln-core")+'] Template "'+t+'" not found'),null)}function x(t,e,o){t.dispatchEvent(new CustomEvent(e,{bubbles:!0,detail:o||{}}))}function L(t,e){if(!t||!e)return t;const o=t.querySelectorAll("[data-ln-field]");for(let n=0;n<o.length;n++){const i=o[n],l=i.getAttribute("data-ln-field");e[l]!=null&&(i.textContent=e[l])}const s=t.querySelectorAll("[data-ln-attr]");for(let n=0;n<s.length;n++){const i=s[n],l=i.getAttribute("data-ln-attr").split(",");for(let c=0;c<l.length;c++){const a=l[c].trim().split(":");if(a.length!==2)continue;const u=a[0].trim(),f=a[1].trim();e[f]!=null&&i.setAttribute(u,e[f])}}const d=t.querySelectorAll("[data-ln-show]");for(let n=0;n<d.length;n++){const i=d[n],l=i.getAttribute("data-ln-show");l in e&&i.classList.toggle("hidden",!e[l])}const r=t.querySelectorAll("[data-ln-class]");for(let n=0;n<r.length;n++){const i=r[n],l=i.getAttribute("data-ln-class").split(",");for(let c=0;c<l.length;c++){const a=l[c].trim().split(":");if(a.length!==2)continue;const u=a[0].trim(),f=a[1].trim();f in e&&i.classList.toggle(u,!!e[f])}}return t}function M(t,e){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));const o=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let s=0;s<o.length;s++)o[s].dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));return t}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(t){if(!(!t.target.matches||!t.target.matches("[data-ln-fillable]")))if(t.detail)L(t.target,t.detail);else{const e=t.target.querySelectorAll("[data-ln-field]");for(let o=0;o<e.length;o++)e[o].textContent=""}})));function v(t,e){if(!t||!e)return t;const o=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;o.nextNode();){const r=o.currentNode;r.textContent.indexOf("{{")!==-1&&(r.textContent=r.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(n,i){return e[i]!==void 0?e[i]:""}))}const s=function(r,n){return e[n]!==void 0?e[n]:""},d=Array.from(t.querySelectorAll("*"));t.nodeType===1&&d.push(t);for(let r=0;r<d.length;r++){const n=d[r],i=n.attributes;for(let l=0;l<i.length;l++){const c=i[l];c.value.indexOf("{{")!==-1&&n.setAttribute(c.name,c.value.replace(/\{\{\s*(\w+)\s*\}\}/g,s))}}return t}function N(t,e,o,s,d,r){const n={};for(let l=0;l<t.children.length;l++){const c=t.children[l],a=c.getAttribute("data-ln-key");a&&(n[a]=c)}const i=document.createDocumentFragment();for(let l=0;l<e.length;l++){const c=e[l],a=String(s(c));let u=n[a];if(u)d(u,c,l);else{const f=D(o,r);if(!f||(v(f,c),u=f.firstElementChild,!u))continue;u.setAttribute("data-ln-key",a),d(u,c,l)}i.appendChild(u)}t.textContent="",t.appendChild(i)}function O(t,e){if(!document.body){document.addEventListener("DOMContentLoaded",function(){O(t,e)}),console.warn("["+e+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function m(t,e,o,s){if(t.nodeType!==1)return;const r=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",n=Array.from(t.querySelectorAll(r));t.matches&&t.matches(r)&&n.push(t);for(const i of n)i[o]||(i[o]=new s(i))}function j(t,e,o,s,d={}){const r=d.extraAttributes||[],n=d.onAttributeChange||null,i=d.onInit||null;function l(c){const a=c||document.body;m(a,t,e,o),i&&i(a)}return O(function(){const c=new MutationObserver(function(u){for(let f=0;f<u.length;f++){const h=u[f];if(h.type==="childList"){for(let g=0;g<h.addedNodes.length;g++){const p=h.addedNodes[g];p.nodeType===1&&(m(p,t,e,o),i&&i(p))}for(let g=0;g<h.removedNodes.length;g++){const p=h.removedNodes[g];if(p.nodeType===1){const _=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",b=Array.from(p.querySelectorAll(_));p.matches&&p.matches(_)&&b.push(p);for(let C=0;C<b.length;C++){const q=b[C];if(!document.contains(q)){const A=q[e];A&&typeof A.destroy=="function"&&A.destroy()}}}}}else h.type==="attributes"&&(n&&h.target[e]?n(h.target,h.attributeName):(m(h.target,t,e,o),i&&i(h.target)))}});let a=[];if(t.indexOf("[")!==-1){const u=/\[([\w-]+)/g;let f;for(;(f=u.exec(t))!==null;)a.push(f[1])}else a.push(t);c.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:a.concat(r)})},s),window[e]=l,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){l(document.body)}):l(document.body),l}const S={};function W(t,e){S[t]=e}function F(t){return S[t]||{ingress:e=>e,egress:e=>e}}const E={};function T(t,e){if(!t||typeof e!="object")return;const o=t.toLowerCase().split("-")[0];E[o]=e}function B(t){if(!t)return null;const e=t.toLowerCase().split("-")[0];return E[e]||null}T("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=W,window.lnCore.getDataMapper=F,window.lnCore.registerLocaleFallback=T,window.lnCore.getLocaleFallback=B,window.lnCore.fillTemplate=v,window.lnCore.fill=L,window.lnCore.lnFill=M,window.lnCore.renderList=N);function k(t){return(t||"").replace(/^#/,"")}function y(t){const e=t===void 0?location.hash:t,o={},s=k(e);if(!s)return o;const d=s.split("&");for(let r=0;r<d.length;r++){const n=d[r];if(!n)continue;const i=n.indexOf(":"),l=i>-1?n.slice(0,i):n,c=i>-1?n.slice(i+1):"";if(l)try{o[l]=decodeURIComponent(c)}catch{o[l]=c}}return o}function I(t){if(!t)return null;const e=y();return t in e?e[t]:null}function K(t,e){if(!t)return;const o=y();e==null?delete o[t]:o[t]=String(e);const d=Object.keys(o).map(function(r){const n=o[r];return n===""?r:r+":"+encodeURIComponent(n)}).join("&");k(location.hash)!==d&&(location.hash=d)}function R(t){return t.button===1||t.ctrlKey||t.metaKey||t.shiftKey?!1:(t.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=y,window.lnCore.hashGet=I,window.lnCore.hashSet=K,window.lnCore.hashLinkClick=R),(function(){const t="data-ln-accordion",e="lnAccordion";if(window[e]!==void 0)return;function o(s){return this.dom=s,this._onToggleOpen=function(d){if(d.detail.target.closest("[data-ln-accordion]")!==s)return;const r=s.querySelectorAll("[data-ln-toggle]");for(const n of r)n!==d.detail.target&&n.closest("[data-ln-accordion]")===s&&n.getAttribute("data-ln-toggle")==="open"&&n.setAttribute("data-ln-toggle","close");x(s,"ln-accordion:change",{target:d.detail.target})},s.addEventListener("ln-toggle:open",this._onToggleOpen),this}o.prototype.destroy=function(){this.dom[e]&&(this.dom.removeEventListener("ln-toggle:open",this._onToggleOpen),x(this.dom,"ln-accordion:destroyed",{target:this.dom}),delete this.dom[e])},j(t,e,o,"ln-accordion")})()})();
|
package/js/ln-ajax/ln-ajax.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...e){typeof e[0]=="string"&&(e[0].startsWith("[ln-")||e[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,e)}}const S={};function N(t,e){S[t]||(S[t]=document.querySelector('[data-ln-template="'+t+'"]'));const o=S[t];return o?o.content.cloneNode(!0):(console.warn("["+(e||"ln-core")+'] Template "'+t+'" not found'),null)}function A(t,e,o){t.dispatchEvent(new CustomEvent(e,{bubbles:!0,detail:o||{}}))}function K(t,e,o){const u=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:o||{}});return t.dispatchEvent(u),u}function T(t,e){if(!t||!e)return t;const o=t.querySelectorAll("[data-ln-field]");for(let i=0;i<o.length;i++){const a=o[i],s=a.getAttribute("data-ln-field");e[s]!=null&&(a.textContent=e[s])}const u=t.querySelectorAll("[data-ln-attr]");for(let i=0;i<u.length;i++){const a=u[i],s=a.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 r=h[0].trim(),n=h[1].trim();e[n]!=null&&a.setAttribute(r,e[n])}}const p=t.querySelectorAll("[data-ln-show]");for(let i=0;i<p.length;i++){const a=p[i],s=a.getAttribute("data-ln-show");s in e&&a.classList.toggle("hidden",!e[s])}const f=t.querySelectorAll("[data-ln-class]");for(let i=0;i<f.length;i++){const a=f[i],s=a.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 r=h[0].trim(),n=h[1].trim();n in e&&a.classList.toggle(r,!!e[n])}}return t}function U(t,e){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));const o=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let u=0;u<o.length;u++)o[u].dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));return t}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(t){if(!(!t.target.matches||!t.target.matches("[data-ln-fillable]")))if(t.detail)T(t.target,t.detail);else{const e=t.target.querySelectorAll("[data-ln-field]");for(let o=0;o<e.length;o++)e[o].textContent=""}})));function v(t,e){if(!t||!e)return t;const o=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;o.nextNode();){const f=o.currentNode;f.textContent.indexOf("{{")!==-1&&(f.textContent=f.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(i,a){return e[a]!==void 0?e[a]:""}))}const u=function(f,i){return e[i]!==void 0?e[i]:""},p=Array.from(t.querySelectorAll("*"));t.nodeType===1&&p.push(t);for(let f=0;f<p.length;f++){const i=p[f],a=i.attributes;for(let s=0;s<a.length;s++){const d=a[s];d.value.indexOf("{{")!==-1&&i.setAttribute(d.name,d.value.replace(/\{\{\s*(\w+)\s*\}\}/g,u))}}return t}function B(t,e,o,u,p,f){const i={};for(let s=0;s<t.children.length;s++){const d=t.children[s],h=d.getAttribute("data-ln-key");h&&(i[h]=d)}const a=document.createDocumentFragment();for(let s=0;s<e.length;s++){const d=e[s],h=String(u(d));let r=i[h];if(r)p(r,d,s);else{const n=N(o,f);if(!n||(v(n,d),r=n.firstElementChild,!r))continue;r.setAttribute("data-ln-key",h),p(r,d,s)}a.appendChild(r)}t.textContent="",t.appendChild(a)}function _(t,e){if(!document.body){document.addEventListener("DOMContentLoaded",function(){_(t,e)}),console.warn("["+e+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function G(t,e){if(t.ctrlKey||t.metaKey||t.shiftKey||t.altKey||t.button!==0||!e)return!1;const o=e.getAttribute("href");return!(!o||e.getAttribute("target")==="_blank"||e.hasAttribute("download")||o.startsWith("mailto:")||o.startsWith("tel:")||o==="#"||o.startsWith("#")||e.hostname&&e.hostname!==window.location.hostname)}const q={};function I(t,e){q[t]=e}function P(t){return q[t]||{ingress:e=>e,egress:e=>e}}const D={};function O(t,e){if(!t||typeof e!="object")return;const o=t.toLowerCase().split("-")[0];D[o]=e}function X(t){if(!t)return null;const e=t.toLowerCase().split("-")[0];return D[e]||null}O("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=I,window.lnCore.getDataMapper=P,window.lnCore.registerLocaleFallback=O,window.lnCore.getLocaleFallback=X,window.lnCore.fillTemplate=v,window.lnCore.fill=T,window.lnCore.lnFill=U,window.lnCore.renderList=B);function F(t){return(t||"").replace(/^#/,"")}function E(t){const e=t===void 0?location.hash:t,o={},u=F(e);if(!u)return o;const p=u.split("&");for(let f=0;f<p.length;f++){const i=p[f];if(!i)continue;const a=i.indexOf(":"),s=a>-1?i.slice(0,a):i,d=a>-1?i.slice(a+1):"";if(s)try{o[s]=decodeURIComponent(d)}catch{o[s]=d}}return o}function H(t){if(!t)return null;const e=E();return t in e?e[t]:null}function z(t,e){if(!t)return;const o=E();e==null?delete o[t]:o[t]=String(e);const p=Object.keys(o).map(function(f){const i=o[f];return i===""?f:f+":"+encodeURIComponent(i)}).join("&");F(location.hash)!==p&&(location.hash=p)}function R(t){return t.button===1||t.ctrlKey||t.metaKey||t.shiftKey?!1:(t.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=E,window.lnCore.hashGet=H,window.lnCore.hashSet=z,window.lnCore.hashLinkClick=R),(function(){const t="data-ln-ajax",e="lnAjax",o="data-ln-form-scope";if(window[e]!==void 0)return;function u(r){if(!r.hasAttribute(t)||r[e])return;r[e]=!0;const n=s(r);p(n.links),f(n.forms)}function p(r){for(const n of r){if(n[e+"Trigger"]||n.hostname&&n.hostname!==window.location.hostname)continue;const c=n.getAttribute("href");if(c&&c.includes("#"))continue;const l=function(b){if(!G(b,n))return;b.preventDefault();const y=n.getAttribute("href");y&&a("GET",y,null,n)};n.addEventListener("click",l),n[e+"Trigger"]=l}}function f(r){for(const n of r){if(n[e+"Trigger"])continue;if(n.hasAttribute(o)){n[e+"ScopeWarned"]||(n[e+"ScopeWarned"]=!0,console.warn("[ln-ajax] Form has data-ln-form-scope — the ln-data-coordinator write pipeline takes precedence; skipping ajax interception for this form."));continue}const c=function(l){if(l.defaultPrevented)return;l.preventDefault();const b=n.method.toUpperCase(),y=n.action,x=new FormData(n);for(const k of n.querySelectorAll('button, input[type="submit"]'))k.disabled=!0;a(b,y,x,n,function(){for(const k of n.querySelectorAll('button, input[type="submit"]'))k.disabled=!1})};n.addEventListener("submit",c),n[e+"Trigger"]=c}}function i(r){if(!r[e])return;const n=s(r);for(const c of n.links)c[e+"Trigger"]&&(c.removeEventListener("click",c[e+"Trigger"]),delete c[e+"Trigger"]);for(const c of n.forms)c[e+"Trigger"]&&(c.removeEventListener("submit",c[e+"Trigger"]),delete c[e+"Trigger"]);delete r[e]}function a(r,n,c,l,b){if(K(l,"ln-ajax:before-start",{method:r,url:n}).defaultPrevented)return;A(l,"ln-ajax:start",{method:r,url:n}),l.classList.add("ln-ajax--loading");const x=document.createElement("span");x.className="ln-ajax-spinner",l.appendChild(x);function k(){l.classList.remove("ln-ajax--loading");const g=l.querySelector(".ln-ajax-spinner");g&&g.remove(),b&&b()}let C=n;const M=document.querySelector('meta[name="csrf-token"]'),L=M?M.getAttribute("content"):null;c instanceof FormData&&L&&c.append("_token",L);const j={method:r,headers:{"X-Requested-With":"XMLHttpRequest",Accept:"application/json"}};if(L&&(j.headers["X-CSRF-TOKEN"]=L),r==="GET"&&c){const g=new URLSearchParams(c);C=n+(n.includes("?")?"&":"?")+g.toString()}else r!=="GET"&&c&&(j.body=c);fetch(C,j).then(function(g){const m=g.ok;return g.json().then(function(w){return{ok:m,status:g.status,data:w}})}).then(function(g){const m=g.data;if(g.ok){if(m.title&&(document.title=m.title),m.content)for(const w in m.content){const W=document.getElementById(w);W&&(W.innerHTML=m.content[w])}if(l.tagName==="A"){const w=l.getAttribute("href");w&&window.history.pushState({ajax:!0},"",w)}else l.tagName==="FORM"&&l.method.toUpperCase()==="GET"&&window.history.pushState({ajax:!0},"",C);A(l,"ln-ajax:success",{method:r,url:C,data:m})}else A(l,"ln-ajax:error",{method:r,url:C,status:g.status,data:m});if(m.message){const w=m.message;window.dispatchEvent(new CustomEvent("ln-toast:enqueue",{detail:{type:w.type||(g.ok?"success":"error"),title:w.title||"",message:w.body||""}}))}A(l,"ln-ajax:complete",{method:r,url:C}),k()}).catch(function(g){A(l,"ln-ajax:error",{method:r,url:C,error:g}),A(l,"ln-ajax:complete",{method:r,url:C}),k()})}function s(r){const n={links:[],forms:[]};return r.tagName==="A"&&r.getAttribute(t)!=="false"?n.links.push(r):r.tagName==="FORM"&&r.getAttribute(t)!=="false"?n.forms.push(r):(n.links=Array.from(r.querySelectorAll('a:not([data-ln-ajax="false"])')),n.forms=Array.from(r.querySelectorAll('form:not([data-ln-ajax="false"])'))),n}function d(){_(function(){new MutationObserver(function(n){for(const c of n)if(c.type==="childList"){for(const l of c.addedNodes)if(l.nodeType===1&&(u(l),!l.hasAttribute(t))){for(const y of l.querySelectorAll("["+t+"]"))u(y);const b=l.closest&&l.closest("["+t+"]");if(b&&b.getAttribute(t)!=="false"){const y=s(l);p(y.links),f(y.forms)}}}else c.type==="attributes"&&u(c.target)}).observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[t]})},"ln-ajax")}function h(){for(const r of document.querySelectorAll("["+t+"]"))u(r)}window[e]=u,window[e].destroy=i,d(),document.readyState==="loading"?document.addEventListener("DOMContentLoaded",h):h()})()})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...i){typeof i[0]=="string"&&(i[0].startsWith("[ln-")||i[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,i)}}const b={};function j(t,i){b[t]||(b[t]=document.querySelector('[data-ln-template="'+t+'"]'));const s=b[t];return s?s.content.cloneNode(!0):(console.warn("["+(i||"ln-core")+'] Template "'+t+'" not found'),null)}function p(t,i,s){t.dispatchEvent(new CustomEvent(i,{bubbles:!0,detail:s||{}}))}function L(t,i){if(!t||!i)return t;const s=t.querySelectorAll("[data-ln-field]");for(let l=0;l<s.length;l++){const e=s[l],a=e.getAttribute("data-ln-field");i[a]!=null&&(e.textContent=i[a])}const f=t.querySelectorAll("[data-ln-attr]");for(let l=0;l<f.length;l++){const e=f[l],a=e.getAttribute("data-ln-attr").split(",");for(let r=0;r<a.length;r++){const n=a[r].trim().split(":");if(n.length!==2)continue;const o=n[0].trim(),c=n[1].trim();i[c]!=null&&e.setAttribute(o,i[c])}}const d=t.querySelectorAll("[data-ln-show]");for(let l=0;l<d.length;l++){const e=d[l],a=e.getAttribute("data-ln-show");a in i&&e.classList.toggle("hidden",!i[a])}const u=t.querySelectorAll("[data-ln-class]");for(let l=0;l<u.length;l++){const e=u[l],a=e.getAttribute("data-ln-class").split(",");for(let r=0;r<a.length;r++){const n=a[r].trim().split(":");if(n.length!==2)continue;const o=n[0].trim(),c=n[1].trim();c in i&&e.classList.toggle(o,!!i[c])}}return t}function U(t,i){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:i??null,bubbles:!0}));const s=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let f=0;f<s.length;f++)s[f].dispatchEvent(new CustomEvent("ln-fill",{detail:i??null,bubbles:!0}));return t}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(t){if(!(!t.target.matches||!t.target.matches("[data-ln-fillable]")))if(t.detail)L(t.target,t.detail);else{const i=t.target.querySelectorAll("[data-ln-field]");for(let s=0;s<i.length;s++)i[s].textContent=""}})));function E(t,i){if(!t||!i)return t;const s=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;s.nextNode();){const u=s.currentNode;u.textContent.indexOf("{{")!==-1&&(u.textContent=u.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(l,e){return i[e]!==void 0?i[e]:""}))}const f=function(u,l){return i[l]!==void 0?i[l]:""},d=Array.from(t.querySelectorAll("*"));t.nodeType===1&&d.push(t);for(let u=0;u<d.length;u++){const l=d[u],e=l.attributes;for(let a=0;a<e.length;a++){const r=e[a];r.value.indexOf("{{")!==-1&&l.setAttribute(r.name,r.value.replace(/\{\{\s*(\w+)\s*\}\}/g,f))}}return t}function N(t,i,s,f,d,u){const l={};for(let a=0;a<t.children.length;a++){const r=t.children[a],n=r.getAttribute("data-ln-key");n&&(l[n]=r)}const e=document.createDocumentFragment();for(let a=0;a<i.length;a++){const r=i[a],n=String(f(r));let o=l[n];if(o)d(o,r,a);else{const c=j(s,u);if(!c||(E(c,r),o=c.firstElementChild,!o))continue;o.setAttribute("data-ln-key",n),d(o,r,a)}e.appendChild(o)}t.textContent="",t.appendChild(e)}function S(t,i){if(!document.body){document.addEventListener("DOMContentLoaded",function(){S(t,i)}),console.warn("["+i+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function y(t,i,s,f){if(t.nodeType!==1)return;const u=i.indexOf("[")!==-1||i.indexOf(".")!==-1||i.indexOf("#")!==-1?i:"["+i+"]",l=Array.from(t.querySelectorAll(u));t.matches&&t.matches(u)&&l.push(t);for(const e of l)e[s]||(e[s]=new f(e))}function H(t,i,s,f,d={}){const u=d.extraAttributes||[],l=d.onAttributeChange||null,e=d.onInit||null;function a(r){const n=r||document.body;y(n,t,i,s),e&&e(n)}return S(function(){const r=new MutationObserver(function(o){for(let c=0;c<o.length;c++){const h=o[c];if(h.type==="childList"){for(let m=0;m<h.addedNodes.length;m++){const g=h.addedNodes[m];g.nodeType===1&&(y(g,t,i,s),e&&e(g))}for(let m=0;m<h.removedNodes.length;m++){const g=h.removedNodes[m];if(g.nodeType===1){const D=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",_=Array.from(g.querySelectorAll(D));g.matches&&g.matches(D)&&_.push(g);for(let v=0;v<_.length;v++){const T=_[v];if(!document.contains(T)){const A=T[i];A&&typeof A.destroy=="function"&&A.destroy()}}}}}else h.type==="attributes"&&(l&&h.target[i]?l(h.target,h.attributeName):(y(h.target,t,i,s),e&&e(h.target)))}});let n=[];if(t.indexOf("[")!==-1){const o=/\[([\w-]+)/g;let c;for(;(c=o.exec(t))!==null;)n.push(c[1])}else n.push(t);r.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:n.concat(u)})},f),window[i]=a,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){a(document.body)}):a(document.body),a}function w(...t){return t.filter(i=>i!=null&&i!=="").map((i,s)=>s===0?i.replace(/\/+$/,""):i.replace(/^\/+/,"").replace(/\/+$/,"")).filter(Boolean).join("/")}function I(t,i){return Object.assign({"Content-Type":"application/json",Accept:"application/json"},t,null)}function M(t,i="ln-core"){try{return t?JSON.parse(t):{}}catch(s){return console.error(`[${i}] Invalid headers JSON:`,s),{}}}const O={};function K(t,i){O[t]=i}function F(t){return O[t]||{ingress:i=>i,egress:i=>i}}const q={};function k(t,i){if(!t||typeof i!="object")return;const s=t.toLowerCase().split("-")[0];q[s]=i}function W(t){if(!t)return null;const i=t.toLowerCase().split("-")[0];return q[i]||null}k("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=K,window.lnCore.getDataMapper=F,window.lnCore.registerLocaleFallback=k,window.lnCore.getLocaleFallback=W,window.lnCore.fillTemplate=E,window.lnCore.fill=L,window.lnCore.lnFill=U,window.lnCore.renderList=N);function x(t){return(t||"").replace(/^#/,"")}function C(t){const i=t===void 0?location.hash:t,s={},f=x(i);if(!f)return s;const d=f.split("&");for(let u=0;u<d.length;u++){const l=d[u];if(!l)continue;const e=l.indexOf(":"),a=e>-1?l.slice(0,e):l,r=e>-1?l.slice(e+1):"";if(a)try{s[a]=decodeURIComponent(r)}catch{s[a]=r}}return s}function B(t){if(!t)return null;const i=C();return t in i?i[t]:null}function G(t,i){if(!t)return;const s=C();i==null?delete s[t]:s[t]=String(i);const d=Object.keys(s).map(function(u){const l=s[u];return l===""?u:u+":"+encodeURIComponent(l)}).join("&");x(location.hash)!==d&&(location.hash=d)}function R(t){return t.button===1||t.ctrlKey||t.metaKey||t.shiftKey?!1:(t.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=C,window.lnCore.hashGet=B,window.lnCore.hashSet=G,window.lnCore.hashLinkClick=R),(function(){const t="data-ln-api-connector",i="lnApiConnector",s="lnConnector";if(window[i]!==void 0)return;function f(e){return e.ok?e.status===204?null:e.json():e.json().catch(()=>null).then(a=>{const r=new Error("HTTP "+e.status+": "+e.statusText);throw r.status=e.status,r.data=a,r})}function d(e){return this.dom=e,e[i]=this,e[s]=this,this.refreshConfig(),this._handlers=null,u(this),this}d.prototype.refreshConfig=function(){const e=this.dom;this.baseUrl=e.getAttribute("data-ln-api-base-url")||"",this.path=e.getAttribute("data-ln-api-path")||"",this.credentials="same-origin",this.paramKeys={offset:e.getAttribute("data-ln-api-param-offset")||"offset",limit:e.getAttribute("data-ln-api-param-limit")||"limit",search:e.getAttribute("data-ln-api-param-search")||"search",sortField:e.getAttribute("data-ln-api-param-sort-field")||"sort_field",sortDir:e.getAttribute("data-ln-api-param-sort-dir")||"sort_dir"};const a=e.getAttribute("data-ln-api-headers")||"";this.headers=M(a,"ln-api-connector"),(a.toLowerCase().includes("authorization")||a.toLowerCase().includes("bearer")||a.toLowerCase().includes("basic"))&&console.warn("[ln-api-connector] Security Warning: Sensitive authorization credentials detected in data-ln-api-headers attribute. Storing secrets in HTML DOM attributes is highly discouraged and vulnerable to XSS credential extraction. Please use HttpOnly session cookies or a Backend Proxy Gateway instead."),p(e,"ln-api-connector:config-changed",{baseUrl:this.baseUrl,path:this.path,headers:this.headers,paramKeys:this.paramKeys})},d.prototype._reqHeaders=function(e){const a=Object.assign({},I(this.headers),{"X-LN-Response":"data"});return e&&(a["Idempotency-Key"]=e),a},d.prototype.fetchDelta=function(e){const a=this;let r=w(a.baseUrl,a.path);return e!=null&&e!==""&&(r+=(r.indexOf("?")!==-1?"&":"?")+"since="+encodeURIComponent(e)),window.fetch(r,{method:"GET",headers:a._reqHeaders(),credentials:a.credentials}).then(f)},d.prototype.query=function(e){const a=this;e=e||{};let r=w(a.baseUrl,a.path);const n=a.paramKeys||{offset:"offset",limit:"limit",search:"search",sortField:"sort_field",sortDir:"sort_dir"},o=new URLSearchParams;e.search&&o.append(n.search,e.search),e.offset!=null&&o.append(n.offset,e.offset),e.limit!=null&&o.append(n.limit,e.limit),e.sort&&e.sort.field&&e.sort.direction&&(o.append(n.sortField,e.sort.field),o.append(n.sortDir,e.sort.direction)),e.filters&&typeof e.filters=="object"&&Object.keys(e.filters).forEach(h=>{const m=e.filters[h];Array.isArray(m)&&m.length>0&&o.append(h,m.join(","))});const c=o.toString();return c&&(r+=(r.indexOf("?")!==-1?"&":"?")+c),window.fetch(r,{method:"GET",headers:a._reqHeaders(),credentials:a.credentials}).then(f)},d.prototype.create=function(e,a,r){const n=this;return window.fetch(w(n.baseUrl,a||n.path),{method:"POST",headers:n._reqHeaders(r),credentials:n.credentials,body:JSON.stringify(e)}).then(f)},d.prototype.update=function(e,a,r,n,o){const c=this;r!=null&&(a=Object.assign({},a,{expected_version:r}));const h=n?w(c.baseUrl,n):w(c.baseUrl,c.path,e);return window.fetch(h,{method:"PUT",headers:c._reqHeaders(o),credentials:c.credentials,body:JSON.stringify(a)}).then(f)},d.prototype.delete=function(e,a,r){const n=this;return window.fetch(w(n.baseUrl,a||n.path,e),{method:"DELETE",headers:n._reqHeaders(r),credentials:n.credentials}).then(f)},d.prototype.bulkDelete=function(e,a,r){const n=this;return window.fetch(w(n.baseUrl,a||n.path)+"/bulk-delete",{method:"DELETE",headers:n._reqHeaders(r),credentials:n.credentials,body:JSON.stringify({ids:e})}).then(f)};function u(e){e._handlers={sync:function(r){const n=r.detail||{};e.fetchDelta(n.since).then(function(o){p(e.dom,"ln-api-connector:fetched",{data:o,since:n.since,meta:n.meta||null})}).catch(function(o){p(e.dom,"ln-api-connector:error",{action:"sync",error:o.message,status:o.status||0,data:o.data||null,since:n.since,meta:n.meta||null})})},query:function(r){const n=r.detail||{},o=n.query||n;e.query(o).then(function(c){const h=c||{};p(e.dom,"ln-api-connector:fetched",{data:h.data||(Array.isArray(h)?h:[]),total:h.total,filtered:h.filtered,offset:o.offset,queryGen:o.queryGen,meta:n.meta||null})}).catch(function(c){p(e.dom,"ln-api-connector:error",{action:"query",error:c.message,status:c.status||0,data:c.data||null,meta:n.meta||null})})},create:function(r){const n=r.detail||{};e.create(n.data,n.url,n.idempotencyKey).then(function(o){const c=o&&o.content!==void 0?o.content:o,h=o&&o.message?o.message:null;p(e.dom,"ln-api-connector:created",{record:c,tempId:n.tempId,message:h,meta:n.meta||null})}).catch(function(o){p(e.dom,"ln-api-connector:error",{action:"create",error:o.message,status:o.status||0,data:o.data||null,tempId:n.tempId,meta:n.meta||null})})},update:function(r){const n=r.detail||{};e.update(n.id,n.data,n.expected_version,n.url,n.idempotencyKey).then(function(o){const c=o&&o.content!==void 0?o.content:o,h=o&&o.message?o.message:null;p(e.dom,"ln-api-connector:updated",{record:c,id:n.id,message:h,meta:n.meta||null})}).catch(function(o){p(e.dom,"ln-api-connector:error",{action:"update",error:o.message,status:o.status||0,data:o.data||null,id:n.id,conflictData:o.status===409?o.data:null,meta:n.meta||null})})},delete:function(r){const n=r.detail||{};e.delete(n.id,n.url,n.idempotencyKey).then(function(o){const c=o&&o.message?o.message:null;p(e.dom,"ln-api-connector:deleted",{response:o,id:n.id,message:c,meta:n.meta||null})}).catch(function(o){p(e.dom,"ln-api-connector:error",{action:"delete",error:o.message,status:o.status||0,data:o.data||null,id:n.id,meta:n.meta||null})})},bulkDelete:function(r){const n=r.detail||{};e.bulkDelete(n.ids,n.url,n.idempotencyKey).then(function(o){const c=o&&o.message?o.message:null;p(e.dom,"ln-api-connector:bulk-deleted",{response:o,ids:n.ids,message:c,meta:n.meta||null})}).catch(function(o){p(e.dom,"ln-api-connector:error",{action:"bulk-delete",error:o.message,status:o.status||0,data:o.data||null,ids:n.ids,meta:n.meta||null})})}},["ln-api-connector","ln-rest-connector"].forEach(function(r){e.dom.addEventListener(r+":request-sync",e._handlers.sync),e.dom.addEventListener(r+":request-query",e._handlers.query),e.dom.addEventListener(r+":request-fetch",e._handlers.query),e.dom.addEventListener(r+":request-create",e._handlers.create),e.dom.addEventListener(r+":request-update",e._handlers.update),e.dom.addEventListener(r+":request-delete",e._handlers.delete),e.dom.addEventListener(r+":request-bulk-delete",e._handlers.bulkDelete)})}d.prototype.destroy=function(){if(!this.dom[i])return;const e=this;e._handlers&&(["ln-api-connector","ln-rest-connector"].forEach(function(r){e.dom.removeEventListener(r+":request-sync",e._handlers.sync),e.dom.removeEventListener(r+":request-query",e._handlers.query),e.dom.removeEventListener(r+":request-fetch",e._handlers.query),e.dom.removeEventListener(r+":request-create",e._handlers.create),e.dom.removeEventListener(r+":request-update",e._handlers.update),e.dom.removeEventListener(r+":request-delete",e._handlers.delete),e.dom.removeEventListener(r+":request-bulk-delete",e._handlers.bulkDelete)}),e._handlers=null),p(this.dom,"ln-api-connector:destroyed",{target:this.dom}),delete this.dom[i],delete this.dom[s]};function l(e){const a=e[i];a&&a.refreshConfig()}H(t,i,d,"ln-api-connector",{extraAttributes:["data-ln-api-base-url","data-ln-api-path","data-ln-api-headers","data-ln-api-param-offset","data-ln-api-param-limit","data-ln-api-param-search","data-ln-api-param-sort-field","data-ln-api-param-sort-dir"],onAttributeChange:l})})()})();
|
|
@@ -1,368 +0,0 @@
|
|
|
1
|
-
import { registerComponent, dispatch, buildUrl, getHeaders, parseHeaders } from '../../ln-core';
|
|
2
|
-
|
|
3
|
-
(function () {
|
|
4
|
-
const DOM_SELECTOR = 'data-ln-api-connector';
|
|
5
|
-
const DOM_ATTRIBUTE = 'lnApiConnector';
|
|
6
|
-
const DOM_ALIAS = 'lnConnector';
|
|
7
|
-
|
|
8
|
-
if (window[DOM_ATTRIBUTE] !== undefined) return;
|
|
9
|
-
|
|
10
|
-
// ─── Response Resolver ──────────────────────────────────
|
|
11
|
-
|
|
12
|
-
function _resolve(res) {
|
|
13
|
-
if (res.ok) return res.status === 204 ? null : res.json();
|
|
14
|
-
return res.json().catch(() => null).then(body => {
|
|
15
|
-
const err = new Error('HTTP ' + res.status + ': ' + res.statusText);
|
|
16
|
-
err.status = res.status;
|
|
17
|
-
err.data = body;
|
|
18
|
-
throw err;
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// ─── Component Constructor ─────────────────────────────
|
|
23
|
-
|
|
24
|
-
function _component(dom) {
|
|
25
|
-
this.dom = dom;
|
|
26
|
-
dom[DOM_ATTRIBUTE] = this;
|
|
27
|
-
dom[DOM_ALIAS] = this; // Set alias for compatibility
|
|
28
|
-
|
|
29
|
-
this.refreshConfig();
|
|
30
|
-
this._handlers = null;
|
|
31
|
-
_bindEvents(this);
|
|
32
|
-
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// ─── Refresh Config from DOM Attributes ─────────────────
|
|
37
|
-
|
|
38
|
-
_component.prototype.refreshConfig = function () {
|
|
39
|
-
const dom = this.dom;
|
|
40
|
-
|
|
41
|
-
this.baseUrl = dom.getAttribute('data-ln-api-base-url') || '';
|
|
42
|
-
this.path = dom.getAttribute('data-ln-api-path') || '';
|
|
43
|
-
this.credentials = 'same-origin';
|
|
44
|
-
|
|
45
|
-
this.paramKeys = {
|
|
46
|
-
offset: dom.getAttribute('data-ln-api-param-offset') || 'offset',
|
|
47
|
-
limit: dom.getAttribute('data-ln-api-param-limit') || 'limit',
|
|
48
|
-
search: dom.getAttribute('data-ln-api-param-search') || 'search',
|
|
49
|
-
sortField: dom.getAttribute('data-ln-api-param-sort-field') || 'sort_field',
|
|
50
|
-
sortDir: dom.getAttribute('data-ln-api-param-sort-dir') || 'sort_dir'
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
const rawHeaders = dom.getAttribute('data-ln-api-headers') || '';
|
|
54
|
-
this.headers = parseHeaders(rawHeaders, 'ln-api-connector');
|
|
55
|
-
|
|
56
|
-
if (rawHeaders.toLowerCase().includes('authorization') || rawHeaders.toLowerCase().includes('bearer') || rawHeaders.toLowerCase().includes('basic')) {
|
|
57
|
-
console.warn('[ln-api-connector] Security Warning: Sensitive authorization credentials detected in data-ln-api-headers attribute. Storing secrets in HTML DOM attributes is highly discouraged and vulnerable to XSS credential extraction. Please use HttpOnly session cookies or a Backend Proxy Gateway instead.');
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
dispatch(dom, 'ln-api-connector:config-changed', {
|
|
61
|
-
baseUrl: this.baseUrl,
|
|
62
|
-
path: this.path,
|
|
63
|
-
headers: this.headers,
|
|
64
|
-
paramKeys: this.paramKeys
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
// ─── Request Headers (forces X-LN-Response) ─────────────
|
|
69
|
-
|
|
70
|
-
_component.prototype._reqHeaders = function (idempotencyKey) {
|
|
71
|
-
const headers = Object.assign({}, getHeaders(this.headers), { 'X-LN-Response': 'data' });
|
|
72
|
-
if (idempotencyKey) headers['Idempotency-Key'] = idempotencyKey;
|
|
73
|
-
return headers;
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
// ─── JS API Methods (Promises) ──────────────────────────
|
|
77
|
-
|
|
78
|
-
_component.prototype.fetchDelta = function (since) {
|
|
79
|
-
const self = this;
|
|
80
|
-
let url = buildUrl(self.baseUrl, self.path);
|
|
81
|
-
|
|
82
|
-
if (since !== undefined && since !== null && since !== '') {
|
|
83
|
-
url += (url.indexOf('?') !== -1 ? '&' : '?') + 'since=' + encodeURIComponent(since);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return window.fetch(url, { method: 'GET', headers: self._reqHeaders(), credentials: self.credentials })
|
|
87
|
-
.then(_resolve);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
_component.prototype.query = function (queryParams) {
|
|
91
|
-
const self = this;
|
|
92
|
-
queryParams = queryParams || {};
|
|
93
|
-
let url = buildUrl(self.baseUrl, self.path);
|
|
94
|
-
|
|
95
|
-
const keys = self.paramKeys || {
|
|
96
|
-
offset: 'offset',
|
|
97
|
-
limit: 'limit',
|
|
98
|
-
search: 'search',
|
|
99
|
-
sortField: 'sort_field',
|
|
100
|
-
sortDir: 'sort_dir'
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
const searchParams = new URLSearchParams();
|
|
104
|
-
if (queryParams.search) {
|
|
105
|
-
searchParams.append(keys.search, queryParams.search);
|
|
106
|
-
}
|
|
107
|
-
if (queryParams.offset != null) {
|
|
108
|
-
searchParams.append(keys.offset, queryParams.offset);
|
|
109
|
-
}
|
|
110
|
-
if (queryParams.limit != null) {
|
|
111
|
-
searchParams.append(keys.limit, queryParams.limit);
|
|
112
|
-
}
|
|
113
|
-
if (queryParams.sort && queryParams.sort.field && queryParams.sort.direction) {
|
|
114
|
-
searchParams.append(keys.sortField, queryParams.sort.field);
|
|
115
|
-
searchParams.append(keys.sortDir, queryParams.sort.direction);
|
|
116
|
-
}
|
|
117
|
-
if (queryParams.filters && typeof queryParams.filters === 'object') {
|
|
118
|
-
Object.keys(queryParams.filters).forEach(key => {
|
|
119
|
-
const vals = queryParams.filters[key];
|
|
120
|
-
if (Array.isArray(vals) && vals.length > 0) {
|
|
121
|
-
searchParams.append(key, vals.join(','));
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
const qs = searchParams.toString();
|
|
127
|
-
if (qs) {
|
|
128
|
-
url += (url.indexOf('?') !== -1 ? '&' : '?') + qs;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return window.fetch(url, { method: 'GET', headers: self._reqHeaders(), credentials: self.credentials })
|
|
132
|
-
.then(_resolve);
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
_component.prototype.create = function (payload, url, idempotencyKey) {
|
|
136
|
-
const self = this;
|
|
137
|
-
return window.fetch(buildUrl(self.baseUrl, url || self.path), {
|
|
138
|
-
method: 'POST',
|
|
139
|
-
headers: self._reqHeaders(idempotencyKey),
|
|
140
|
-
credentials: self.credentials,
|
|
141
|
-
body: JSON.stringify(payload)
|
|
142
|
-
})
|
|
143
|
-
.then(_resolve);
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
_component.prototype.update = function (id, payload, expectedVersion, url, idempotencyKey) {
|
|
147
|
-
const self = this;
|
|
148
|
-
if (expectedVersion !== undefined && expectedVersion !== null) {
|
|
149
|
-
payload = Object.assign({}, payload, { expected_version: expectedVersion });
|
|
150
|
-
}
|
|
151
|
-
// An explicit `url` is the COMPLETE resource URL — it already carries the
|
|
152
|
-
// id (e.g. the form's resolved action `/documents/42`). Do NOT re-append
|
|
153
|
-
// id, symmetric with create(). Only the path fallback needs id appended.
|
|
154
|
-
const target = url ? buildUrl(self.baseUrl, url) : buildUrl(self.baseUrl, self.path, id);
|
|
155
|
-
return window.fetch(target, {
|
|
156
|
-
method: 'PUT',
|
|
157
|
-
headers: self._reqHeaders(idempotencyKey),
|
|
158
|
-
credentials: self.credentials,
|
|
159
|
-
body: JSON.stringify(payload)
|
|
160
|
-
})
|
|
161
|
-
.then(_resolve);
|
|
162
|
-
};
|
|
163
|
-
|
|
164
|
-
_component.prototype.delete = function (id, url, idempotencyKey) {
|
|
165
|
-
const self = this;
|
|
166
|
-
return window.fetch(buildUrl(self.baseUrl, url || self.path, id), {
|
|
167
|
-
method: 'DELETE',
|
|
168
|
-
headers: self._reqHeaders(idempotencyKey),
|
|
169
|
-
credentials: self.credentials
|
|
170
|
-
})
|
|
171
|
-
.then(_resolve);
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
_component.prototype.bulkDelete = function (ids, url, idempotencyKey) {
|
|
175
|
-
const self = this;
|
|
176
|
-
return window.fetch(buildUrl(self.baseUrl, url || self.path) + '/bulk-delete', {
|
|
177
|
-
method: 'DELETE',
|
|
178
|
-
headers: self._reqHeaders(idempotencyKey),
|
|
179
|
-
credentials: self.credentials,
|
|
180
|
-
body: JSON.stringify({ ids: ids })
|
|
181
|
-
})
|
|
182
|
-
.then(_resolve);
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
// ─── DOM Event Routing ────────────────────────────────────
|
|
186
|
-
|
|
187
|
-
function _bindEvents(self) {
|
|
188
|
-
self._handlers = {
|
|
189
|
-
sync: function (e) {
|
|
190
|
-
const detail = e.detail || {};
|
|
191
|
-
self.fetchDelta(detail.since)
|
|
192
|
-
.then(function (data) {
|
|
193
|
-
dispatch(self.dom, 'ln-api-connector:fetched', { data: data, since: detail.since, meta: detail.meta || null });
|
|
194
|
-
})
|
|
195
|
-
.catch(function (err) {
|
|
196
|
-
dispatch(self.dom, 'ln-api-connector:error', {
|
|
197
|
-
action: 'sync',
|
|
198
|
-
error: err.message,
|
|
199
|
-
status: err.status || 0,
|
|
200
|
-
data: err.data || null,
|
|
201
|
-
since: detail.since,
|
|
202
|
-
meta: detail.meta || null
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
},
|
|
206
|
-
query: function (e) {
|
|
207
|
-
const detail = e.detail || {};
|
|
208
|
-
const queryParams = detail.query || detail;
|
|
209
|
-
self.query(queryParams)
|
|
210
|
-
.then(function (res) {
|
|
211
|
-
const payload = res || {};
|
|
212
|
-
dispatch(self.dom, 'ln-api-connector:fetched', {
|
|
213
|
-
data: payload.data || (Array.isArray(payload) ? payload : []),
|
|
214
|
-
total: payload.total,
|
|
215
|
-
filtered: payload.filtered,
|
|
216
|
-
offset: queryParams.offset,
|
|
217
|
-
queryGen: queryParams.queryGen,
|
|
218
|
-
meta: detail.meta || null
|
|
219
|
-
});
|
|
220
|
-
})
|
|
221
|
-
.catch(function (err) {
|
|
222
|
-
dispatch(self.dom, 'ln-api-connector:error', {
|
|
223
|
-
action: 'query',
|
|
224
|
-
error: err.message,
|
|
225
|
-
status: err.status || 0,
|
|
226
|
-
data: err.data || null,
|
|
227
|
-
meta: detail.meta || null
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
},
|
|
231
|
-
create: function (e) {
|
|
232
|
-
const detail = e.detail || {};
|
|
233
|
-
self.create(detail.data, detail.url, detail.idempotencyKey)
|
|
234
|
-
.then(function (body) {
|
|
235
|
-
const record = (body && body.content !== undefined) ? body.content : body;
|
|
236
|
-
const message = (body && body.message) ? body.message : null;
|
|
237
|
-
dispatch(self.dom, 'ln-api-connector:created', { record: record, tempId: detail.tempId, message: message, meta: detail.meta || null });
|
|
238
|
-
})
|
|
239
|
-
.catch(function (err) {
|
|
240
|
-
dispatch(self.dom, 'ln-api-connector:error', {
|
|
241
|
-
action: 'create',
|
|
242
|
-
error: err.message,
|
|
243
|
-
status: err.status || 0,
|
|
244
|
-
data: err.data || null,
|
|
245
|
-
tempId: detail.tempId,
|
|
246
|
-
meta: detail.meta || null
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
},
|
|
250
|
-
update: function (e) {
|
|
251
|
-
const detail = e.detail || {};
|
|
252
|
-
self.update(detail.id, detail.data, detail.expected_version, detail.url, detail.idempotencyKey)
|
|
253
|
-
.then(function (body) {
|
|
254
|
-
const record = (body && body.content !== undefined) ? body.content : body;
|
|
255
|
-
const message = (body && body.message) ? body.message : null;
|
|
256
|
-
dispatch(self.dom, 'ln-api-connector:updated', { record: record, id: detail.id, message: message, meta: detail.meta || null });
|
|
257
|
-
})
|
|
258
|
-
.catch(function (err) {
|
|
259
|
-
dispatch(self.dom, 'ln-api-connector:error', {
|
|
260
|
-
action: 'update',
|
|
261
|
-
error: err.message,
|
|
262
|
-
status: err.status || 0,
|
|
263
|
-
data: err.data || null,
|
|
264
|
-
id: detail.id,
|
|
265
|
-
conflictData: err.status === 409 ? err.data : null,
|
|
266
|
-
meta: detail.meta || null
|
|
267
|
-
});
|
|
268
|
-
});
|
|
269
|
-
},
|
|
270
|
-
delete: function (e) {
|
|
271
|
-
const detail = e.detail || {};
|
|
272
|
-
self.delete(detail.id, detail.url, detail.idempotencyKey)
|
|
273
|
-
.then(function (body) {
|
|
274
|
-
const message = (body && body.message) ? body.message : null;
|
|
275
|
-
dispatch(self.dom, 'ln-api-connector:deleted', { response: body, id: detail.id, message: message, meta: detail.meta || null });
|
|
276
|
-
})
|
|
277
|
-
.catch(function (err) {
|
|
278
|
-
dispatch(self.dom, 'ln-api-connector:error', {
|
|
279
|
-
action: 'delete',
|
|
280
|
-
error: err.message,
|
|
281
|
-
status: err.status || 0,
|
|
282
|
-
data: err.data || null,
|
|
283
|
-
id: detail.id,
|
|
284
|
-
meta: detail.meta || null
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
},
|
|
288
|
-
bulkDelete: function (e) {
|
|
289
|
-
const detail = e.detail || {};
|
|
290
|
-
self.bulkDelete(detail.ids, detail.url, detail.idempotencyKey)
|
|
291
|
-
.then(function (body) {
|
|
292
|
-
const message = (body && body.message) ? body.message : null;
|
|
293
|
-
dispatch(self.dom, 'ln-api-connector:bulk-deleted', { response: body, ids: detail.ids, message: message, meta: detail.meta || null });
|
|
294
|
-
})
|
|
295
|
-
.catch(function (err) {
|
|
296
|
-
dispatch(self.dom, 'ln-api-connector:error', {
|
|
297
|
-
action: 'bulk-delete',
|
|
298
|
-
error: err.message,
|
|
299
|
-
status: err.status || 0,
|
|
300
|
-
data: err.data || null,
|
|
301
|
-
ids: detail.ids,
|
|
302
|
-
meta: detail.meta || null
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
}
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
// Support both general and REST namespaces for incoming requests
|
|
309
|
-
const namespaces = ['ln-api-connector', 'ln-rest-connector'];
|
|
310
|
-
namespaces.forEach(function (ns) {
|
|
311
|
-
self.dom.addEventListener(ns + ':request-sync', self._handlers.sync);
|
|
312
|
-
self.dom.addEventListener(ns + ':request-query', self._handlers.query);
|
|
313
|
-
self.dom.addEventListener(ns + ':request-fetch', self._handlers.query);
|
|
314
|
-
self.dom.addEventListener(ns + ':request-create', self._handlers.create);
|
|
315
|
-
self.dom.addEventListener(ns + ':request-update', self._handlers.update);
|
|
316
|
-
self.dom.addEventListener(ns + ':request-delete', self._handlers.delete);
|
|
317
|
-
self.dom.addEventListener(ns + ':request-bulk-delete', self._handlers.bulkDelete);
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
_component.prototype.destroy = function () {
|
|
322
|
-
if (!this.dom[DOM_ATTRIBUTE]) return;
|
|
323
|
-
|
|
324
|
-
const self = this;
|
|
325
|
-
if (self._handlers) {
|
|
326
|
-
const namespaces = ['ln-api-connector', 'ln-rest-connector'];
|
|
327
|
-
namespaces.forEach(function (ns) {
|
|
328
|
-
self.dom.removeEventListener(ns + ':request-sync', self._handlers.sync);
|
|
329
|
-
self.dom.removeEventListener(ns + ':request-query', self._handlers.query);
|
|
330
|
-
self.dom.removeEventListener(ns + ':request-fetch', self._handlers.query);
|
|
331
|
-
self.dom.removeEventListener(ns + ':request-create', self._handlers.create);
|
|
332
|
-
self.dom.removeEventListener(ns + ':request-update', self._handlers.update);
|
|
333
|
-
self.dom.removeEventListener(ns + ':request-delete', self._handlers.delete);
|
|
334
|
-
self.dom.removeEventListener(ns + ':request-bulk-delete', self._handlers.bulkDelete);
|
|
335
|
-
});
|
|
336
|
-
self._handlers = null;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
dispatch(this.dom, 'ln-api-connector:destroyed', { target: this.dom });
|
|
340
|
-
|
|
341
|
-
delete this.dom[DOM_ATTRIBUTE];
|
|
342
|
-
delete this.dom[DOM_ALIAS];
|
|
343
|
-
};
|
|
344
|
-
|
|
345
|
-
// ─── Attribute Sync ────────────────────────────────────────
|
|
346
|
-
|
|
347
|
-
function _syncAttribute(el) {
|
|
348
|
-
const instance = el[DOM_ATTRIBUTE];
|
|
349
|
-
if (!instance) return;
|
|
350
|
-
instance.refreshConfig();
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
// ─── Registration ──────────────────────────────────────
|
|
354
|
-
|
|
355
|
-
registerComponent(DOM_SELECTOR, DOM_ATTRIBUTE, _component, 'ln-api-connector', {
|
|
356
|
-
extraAttributes: [
|
|
357
|
-
'data-ln-api-base-url',
|
|
358
|
-
'data-ln-api-path',
|
|
359
|
-
'data-ln-api-headers',
|
|
360
|
-
'data-ln-api-param-offset',
|
|
361
|
-
'data-ln-api-param-limit',
|
|
362
|
-
'data-ln-api-param-search',
|
|
363
|
-
'data-ln-api-param-sort-field',
|
|
364
|
-
'data-ln-api-param-sort-dir'
|
|
365
|
-
],
|
|
366
|
-
onAttributeChange: _syncAttribute
|
|
367
|
-
});
|
|
368
|
-
})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const r=console.warn;console.warn=function(...t){typeof t[0]=="string"&&(t[0].startsWith("[ln-")||t[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||r.apply(console,t)}}const E={};function N(r,t){E[r]||(E[r]=document.querySelector('[data-ln-template="'+r+'"]'));const s=E[r];return s?s.content.cloneNode(!0):(console.warn("["+(t||"ln-core")+'] Template "'+r+'" not found'),null)}function y(r,t,s){r.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:s||{}}))}function S(r,t){if(!r||!t)return r;const s=r.querySelectorAll("[data-ln-field]");for(let o=0;o<s.length;o++){const i=s[o],d=i.getAttribute("data-ln-field");t[d]!=null&&(i.textContent=t[d])}const l=r.querySelectorAll("[data-ln-attr]");for(let o=0;o<l.length;o++){const i=l[o],d=i.getAttribute("data-ln-attr").split(",");for(let e=0;e<d.length;e++){const n=d[e].trim().split(":");if(n.length!==2)continue;const a=n[0].trim(),f=n[1].trim();t[f]!=null&&i.setAttribute(a,t[f])}}const c=r.querySelectorAll("[data-ln-show]");for(let o=0;o<c.length;o++){const i=c[o],d=i.getAttribute("data-ln-show");d in t&&i.classList.toggle("hidden",!t[d])}const u=r.querySelectorAll("[data-ln-class]");for(let o=0;o<u.length;o++){const i=u[o],d=i.getAttribute("data-ln-class").split(",");for(let e=0;e<d.length;e++){const n=d[e].trim().split(":");if(n.length!==2)continue;const a=n[0].trim(),f=n[1].trim();f in t&&i.classList.toggle(a,!!t[f])}}return r}function U(r,t){r.matches&&r.matches("[data-ln-form], [data-ln-fillable]")&&r.dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));const s=r.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let l=0;l<s.length;l++)s[l].dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));return r}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(r){if(!(!r.target.matches||!r.target.matches("[data-ln-fillable]")))if(r.detail)S(r.target,r.detail);else{const t=r.target.querySelectorAll("[data-ln-field]");for(let s=0;s<t.length;s++)t[s].textContent=""}})));function D(r,t){if(!r||!t)return r;const s=document.createTreeWalker(r,NodeFilter.SHOW_TEXT);for(;s.nextNode();){const u=s.currentNode;u.textContent.indexOf("{{")!==-1&&(u.textContent=u.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(o,i){return t[i]!==void 0?t[i]:""}))}const l=function(u,o){return t[o]!==void 0?t[o]:""},c=Array.from(r.querySelectorAll("*"));r.nodeType===1&&c.push(r);for(let u=0;u<c.length;u++){const o=c[u],i=o.attributes;for(let d=0;d<i.length;d++){const e=i[d];e.value.indexOf("{{")!==-1&&o.setAttribute(e.name,e.value.replace(/\{\{\s*(\w+)\s*\}\}/g,l))}}return r}function F(r,t,s,l,c,u){const o={};for(let d=0;d<r.children.length;d++){const e=r.children[d],n=e.getAttribute("data-ln-key");n&&(o[n]=e)}const i=document.createDocumentFragment();for(let d=0;d<t.length;d++){const e=t[d],n=String(l(e));let a=o[n];if(a)c(a,e,d);else{const f=N(s,u);if(!f||(D(f,e),a=f.firstElementChild,!a))continue;a.setAttribute("data-ln-key",n),c(a,e,d)}i.appendChild(a)}r.textContent="",r.appendChild(i)}function P(r,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){P(r,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}r()}function v(r,t,s,l){if(r.nodeType!==1)return;const u=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",o=Array.from(r.querySelectorAll(u));r.matches&&r.matches(u)&&o.push(r);for(const i of o)i[s]||(i[s]=new l(i))}function j(r,t,s,l,c={}){const u=c.extraAttributes||[],o=c.onAttributeChange||null,i=c.onInit||null;function d(e){const n=e||document.body;v(n,r,t,s),i&&i(n)}return P(function(){const e=new MutationObserver(function(a){for(let f=0;f<a.length;f++){const h=a[f];if(h.type==="childList"){for(let m=0;m<h.addedNodes.length;m++){const p=h.addedNodes[m];p.nodeType===1&&(v(p,r,t,s),i&&i(p))}for(let m=0;m<h.removedNodes.length;m++){const p=h.removedNodes[m];if(p.nodeType===1){const A=r.indexOf("[")!==-1||r.indexOf(".")!==-1||r.indexOf("#")!==-1?r:"["+r+"]",C=Array.from(p.querySelectorAll(A));p.matches&&p.matches(A)&&C.push(p);for(let I=0;I<C.length;I++){const M=C[I];if(!document.contains(M)){const L=M[t];L&&typeof L.destroy=="function"&&L.destroy()}}}}}else h.type==="attributes"&&(o&&h.target[t]?o(h.target,h.attributeName):(v(h.target,r,t,s),i&&i(h.target)))}});let n=[];if(r.indexOf("[")!==-1){const a=/\[([\w-]+)/g;let f;for(;(f=a.exec(r))!==null;)n.push(f[1])}else n.push(r);e.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:n.concat(u)})},l),window[t]=d,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){d(document.body)}):d(document.body),d}const T={};function W(r,t){T[r]=t}function V(r){return T[r]||{ingress:t=>t,egress:t=>t}}const Q={};function O(r,t){if(!r||typeof t!="object")return;const s=r.toLowerCase().split("-")[0];Q[s]=t}function H(r){if(!r)return null;const t=r.toLowerCase().split("-")[0];return Q[t]||null}O("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=W,window.lnCore.getDataMapper=V,window.lnCore.registerLocaleFallback=O,window.lnCore.getLocaleFallback=H,window.lnCore.fillTemplate=D,window.lnCore.fill=S,window.lnCore.lnFill=U,window.lnCore.renderList=F);function R(r){return(r||"").replace(/^#/,"")}function k(r){const t=r===void 0?location.hash:r,s={},l=R(t);if(!l)return s;const c=l.split("&");for(let u=0;u<c.length;u++){const o=c[u];if(!o)continue;const i=o.indexOf(":"),d=i>-1?o.slice(0,i):o,e=i>-1?o.slice(i+1):"";if(d)try{s[d]=decodeURIComponent(e)}catch{s[d]=e}}return s}function X(r){if(!r)return null;const t=k();return r in t?t[r]:null}function z(r,t){if(!r)return;const s=k();t==null?delete s[r]:s[r]=String(t);const c=Object.keys(s).map(function(u){const o=s[u];return o===""?u:u+":"+encodeURIComponent(o)}).join("&");R(location.hash)!==c&&(location.hash=c)}function G(r){return r.button===1||r.ctrlKey||r.metaKey||r.shiftKey?!1:(r.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=k,window.lnCore.hashGet=X,window.lnCore.hashSet=z,window.lnCore.hashLinkClick=G);const J="ln_api_queue",Y=2,_="outbox",w="_queue_meta";function g(r,t){return r.error||new Error(t)}function b(r,t){return r.bound([t,-1/0],[t,1/0])}function K(r){return"seq:"+r}function q(r){return"paused:"+r}function B(r){r.leaseOwner=null,r.leaseUntil=0}function Z(r,t,s){return typeof r!="string"||r.indexOf(t)===-1?r:r.split(t).join(s)}function $(r,t,s,l){const c=new Map,u=[],o=[];for(const i of r||[])c.has(i.chainKey)||c.set(i.chainKey,[]),c.get(i.chainKey).push(i);return c.forEach((i,d)=>{i.sort((n,a)=>n.seq-a.seq);const e=i[0];if(!(!e||e.status==="failed")){if(e.status==="inflight"&&(e.leaseUntil||0)>l){o.push({chainKey:d,at:e.leaseUntil});return}if((e.nextAttemptAt||0)>l){o.push({chainKey:d,at:e.nextAttemptAt});return}e.status="inflight",e.leaseOwner=t,e.leaseUntil=l+s,e.updatedAt=l,u.push(e)}}),{entries:u,wakeups:o}}function ee(r,t,s,l,c){const u=[],o=[];for(const i of r||[]){if(i.entryId===t){o.push(i.entryId);continue}i.chainKey===s&&(i.chainKey=l,i.targetId===s&&(i.targetId=l),i.meta&&i.meta.id===s&&(i.meta.id=l),i.meta&&typeof i.meta.action=="string"&&(i.meta.action=Z(i.meta.action,s,l)),i.updatedAt=c,u.push(i))}return{changed:u,deleted:o}}class te{constructor(t){t=t||{},this.indexedDB=t.indexedDB||globalThis.indexedDB,this.keyRange=t.IDBKeyRange||globalThis.IDBKeyRange,this.dbName=t.dbName||J,this.now=t.now||(()=>Date.now()),this.uuid=t.uuid||(()=>crypto.randomUUID()),this._db=null,this._ready=null}open(){return this._ready?this._ready:!this.indexedDB||!this.keyRange?Promise.resolve(null):(this._ready=new Promise((t,s)=>{const l=this.indexedDB.open(this.dbName,Y);l.onupgradeneeded=c=>{const u=c.target.result;let o;u.objectStoreNames.contains(_)?o=c.target.transaction.objectStore(_):o=u.createObjectStore(_,{keyPath:"entryId"}),o.indexNames.contains("by_scope_chain")||o.createIndex("by_scope_chain",["scope","chainKey"],{unique:!1}),o.indexNames.contains("by_scope_seq")||o.createIndex("by_scope_seq",["scope","seq"],{unique:!1}),u.objectStoreNames.contains(w)||u.createObjectStore(w,{keyPath:"key"})},l.onerror=()=>s(g(l,"Queue database open failed")),l.onsuccess=c=>{this._db=c.target.result,this._db.onversionchange=()=>this.close(),t(this._db)}}),this._ready)}close(){this._db&&this._db.close(),this._db=null,this._ready=null}deleteDatabase(){return this.close(),this.indexedDB?new Promise((t,s)=>{const l=this.indexedDB.deleteDatabase(this.dbName);l.onsuccess=()=>t(),l.onerror=()=>s(g(l,"Queue database delete failed")),l.onblocked=()=>s(new Error("Queue database delete blocked"))}):Promise.resolve()}allForScope(t){return this.open().then(s=>s?new Promise((l,c)=>{const o=s.transaction(_,"readonly").objectStore(_).index("by_scope_seq").getAll(b(this.keyRange,t));o.onsuccess=()=>l(o.result||[]),o.onerror=()=>c(g(o,"Queue scope read failed"))}):[])}enqueue(t,s){return s=s||{},this.open().then(l=>l?new Promise((c,u)=>{const o=l.transaction([w,_],"readwrite"),i=o.objectStore(w),d=o.objectStore(_),e=K(t);let n=null;const a=h=>{const m=h+1;n={entryId:this.uuid(),scope:t,chainKey:s.chainKey,seq:m,op:s.op,targetId:s.targetId!==void 0?s.targetId:null,payload:s.payload,expectedVersion:s.expectedVersion!==void 0?s.expectedVersion:null,meta:s.meta||{},attempts:0,nextAttemptAt:0,status:"pending",leaseOwner:null,leaseUntil:0,createdAt:this.now(),updatedAt:this.now()},i.put({key:e,value:m}),d.put(n)},f=i.get(e);f.onerror=()=>u(g(f,"Queue sequence read failed")),f.onsuccess=()=>{const h=f.result;if(h&&typeof h.value=="number"){a(h.value);return}const m=d.index("by_scope_seq").getAll(b(this.keyRange,t));m.onerror=()=>u(g(m,"Queue sequence migration failed")),m.onsuccess=()=>{const p=(m.result||[]).reduce((x,A)=>Math.max(x,A.seq||0),0);a(p)}},o.oncomplete=()=>c(n),o.onerror=()=>u(o.error||new Error("Queue enqueue transaction failed")),o.onabort=()=>u(o.error||new Error("Queue enqueue transaction aborted"))}):null)}claimReady(t,s,l){return this.open().then(c=>c?new Promise((u,o)=>{const i=c.transaction(_,"readwrite"),d=i.objectStore(_),e=d.index("by_scope_seq").getAll(b(this.keyRange,t)),n=this.now();let a={entries:[],wakeups:[]};e.onerror=()=>o(g(e,"Queue claim read failed")),e.onsuccess=()=>{a=$(e.result||[],s,l,n);for(const f of a.entries)d.put(f)},i.oncomplete=()=>u(a),i.onerror=()=>o(i.error||new Error("Queue claim transaction failed")),i.onabort=()=>o(i.error||new Error("Queue claim transaction aborted"))}):{entries:[],wakeups:[]})}ack(t,s){return this._updateEntry(t,s,(l,c)=>(c.delete(l.entryId),{status:"acked",entry:l}))}nack(t,s,l,c){c=c||{};const u=c.maxAttempts||8,o=c.backoff||[2e3,5e3,15e3,6e4,3e5];return this.open().then(i=>i?new Promise((d,e)=>{const n=i.transaction([_,w],"readwrite"),a=n.objectStore(_),f=n.objectStore(w),h=a.get(s);let m=null;h.onerror=()=>e(g(h,"Queue nack read failed")),h.onsuccess=()=>{const p=h.result;if(!(!p||p.scope!==t)){if(l==="drop"){a.delete(p.entryId),m={status:"dropped",entry:p};return}if(B(p),p.updatedAt=this.now(),l==="auth"){p.status="pending",a.put(p),f.put({key:q(t),value:!0}),m={status:"auth",entry:p};return}if(l==="retry"){if(p.attempts=(p.attempts||0)+1,p.attempts>=u){p.status="failed",p.nextAttemptAt=0,a.put(p),m={status:"failed",entry:p};return}const x=o[Math.min(p.attempts-1,o.length-1)];p.status="pending",p.nextAttemptAt=this.now()+x,a.put(p),m={status:"retry",entry:p,delay:x}}}},n.oncomplete=()=>d(m),n.onerror=()=>e(n.error||new Error("Queue nack transaction failed")),n.onabort=()=>e(n.error||new Error("Queue nack transaction aborted"))}):null)}remap(t,s,l){return this._remapTransaction(t,null,s,l)}resolveCreate(t,s,l,c){return this._remapTransaction(t,s,l,c)}_remapTransaction(t,s,l,c){return this.open().then(u=>u?new Promise((o,i)=>{const d=u.transaction(_,"readwrite"),e=d.objectStore(_),n=e.index("by_scope_seq").getAll(b(this.keyRange,t));let a={changed:[],deleted:[]};n.onerror=()=>i(g(n,"Queue remap read failed")),n.onsuccess=()=>{a=ee(n.result||[],s,l,c,this.now());for(const f of a.deleted)e.delete(f);for(const f of a.changed)e.put(f)},d.oncomplete=()=>o(a.changed),d.onerror=()=>i(d.error||new Error("Queue remap transaction failed")),d.onabort=()=>i(d.error||new Error("Queue remap transaction aborted"))}):[])}resetFailed(t){return this.open().then(s=>s?new Promise((l,c)=>{const u=s.transaction(_,"readwrite"),o=u.objectStore(_),i=o.index("by_scope_seq").getAll(b(this.keyRange,t));let d=0;i.onerror=()=>c(g(i,"Queue failed-entry read failed")),i.onsuccess=()=>{for(const e of i.result||[])e.status==="failed"&&(e.status="pending",e.attempts=0,e.nextAttemptAt=0,e.updatedAt=this.now(),B(e),o.put(e),d++)},u.oncomplete=()=>l(d),u.onerror=()=>c(u.error||new Error("Queue failed-entry reset failed")),u.onabort=()=>c(u.error||new Error("Queue failed-entry reset aborted"))}):0)}getPaused(t){return this.open().then(s=>s?new Promise((l,c)=>{const o=s.transaction(w,"readonly").objectStore(w).get(q(t));o.onsuccess=()=>l(!!(o.result&&o.result.value)),o.onerror=()=>c(g(o,"Queue pause-state read failed"))}):!1)}setPaused(t,s){return this.open().then(l=>{if(l)return new Promise((c,u)=>{const o=l.transaction(w,"readwrite");o.objectStore(w).put({key:q(t),value:!!s}),o.oncomplete=()=>c(),o.onerror=()=>u(o.error||new Error("Queue pause-state write failed")),o.onabort=()=>u(o.error||new Error("Queue pause-state write aborted"))})})}clear(t){return this.open().then(s=>{if(s)return new Promise((l,c)=>{const u=s.transaction([_,w],"readwrite"),i=u.objectStore(_).index("by_scope_seq").openCursor(b(this.keyRange,t));i.onsuccess=d=>{const e=d.target.result;e&&(e.delete(),e.continue())},i.onerror=()=>c(g(i,"Queue clear failed")),u.objectStore(w).delete(K(t)),u.objectStore(w).delete(q(t)),u.oncomplete=()=>l(),u.onerror=()=>c(u.error||new Error("Queue clear transaction failed")),u.onabort=()=>c(u.error||new Error("Queue clear transaction aborted"))})})}_updateEntry(t,s,l){return this.open().then(c=>c?new Promise((u,o)=>{const i=c.transaction(_,"readwrite"),d=i.objectStore(_),e=d.get(s);let n=null;e.onerror=()=>o(g(e,"Queue entry read failed")),e.onsuccess=()=>{const a=e.result;!a||a.scope!==t||(n=l(a,d))},i.oncomplete=()=>u(n),i.onerror=()=>o(i.error||new Error("Queue entry transaction failed")),i.onabort=()=>o(i.error||new Error("Queue entry transaction aborted"))}):null)}}(function(){const r="data-ln-api-queue",t="lnApiQueue",s=[2e3,5e3,15e3,6e4,3e5],l=8,c=6e4;if(window[t]!==void 0)return;function u(){try{return crypto.randomUUID()}catch{return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,n=>{const a=Math.random()*16|0;return(n==="x"?a:a&3|8).toString(16)})}}const o=new te({indexedDB:window.indexedDB,IDBKeyRange:window.IDBKeyRange,uuid:u});function i(e){this.dom=e,e[t]=this;const n=e.closest("[data-ln-data-coordinator]");this.scope=e.getAttribute(r)||(n?n.getAttribute("data-ln-data-coordinator"):null)||"default",this._paused=!1,this._timers=new Map,this._workerId=u(),this._drainPromise=null,this._onlineHandler=()=>this._drain(),this._bindEvents(),window.addEventListener("online",this._onlineHandler);const a=this;return o.open().then(f=>f?o.getPaused(a.scope):(console.warn("[ln-api-queue] IndexedDB not available — queue disabled"),!1)).then(f=>(a._paused=!!f,a._paused&&y(a.dom,"ln-api-queue:paused",{reason:"auth",restored:!0}),a._emitPendingCount())).then(()=>a._drain()).catch(f=>{console.error("[ln-api-queue] Initialization failed:",f),y(a.dom,"ln-api-queue:error",{operation:"initialize",error:f})}),this}i.prototype._isOnline=function(){const e=this.dom.getAttribute("data-ln-api-queue-online");return e==="true"?!0:e==="false"?!1:navigator.onLine},i.prototype._emitPendingCount=function(){const e=this;return o.allForScope(e.scope).then(n=>(y(e.dom,"ln-api-queue:pending-count",{count:n.length,scope:e.scope}),n.length===0&&y(e.dom,"ln-api-queue:drained",{scope:e.scope}),n))},i.prototype._clearTimer=function(e){const n=this._timers.get(e);n&&(clearTimeout(n),this._timers.delete(e))},i.prototype._scheduleTimer=function(e,n){const a=Math.max(0,n),f=this._timers.get(e);f&&clearTimeout(f);const h=this,m=setTimeout(()=>{h._timers.delete(e),h._drain()},a);this._timers.set(e,m)},i.prototype._drain=function(){const e=this;return e._paused||!e._isOnline()?Promise.resolve():(e._drainPromise||(e._drainPromise=o.claimReady(e.scope,e._workerId,c).then(n=>{for(const a of n.wakeups)e._scheduleTimer(a.chainKey,a.at-Date.now());for(const a of n.entries)e._clearTimer(a.chainKey),y(e.dom,"ln-api-queue:send",{entryId:a.entryId,chainKey:a.chainKey,op:a.op,targetId:a.targetId,payload:a.payload,expectedVersion:a.expectedVersion,idempotencyKey:a.entryId,meta:a.meta})}).catch(n=>{console.error("[ln-api-queue] Drain failed:",n),y(e.dom,"ln-api-queue:error",{operation:"drain",error:n})}).finally(()=>{e._drainPromise=null})),e._drainPromise)},i.prototype._onEnqueue=function(e){const n=this;return o.enqueue(n.scope,e.detail||{}).then(a=>{if(a)return n._emitPendingCount().then(f=>(y(n.dom,"ln-api-queue:enqueued",{entryId:a.entryId,chainKey:a.chainKey,count:f.length}),n._drain()))}).catch(a=>{y(n.dom,"ln-api-queue:error",{operation:"enqueue",error:a})})},i.prototype._onAck=function(e){const n=this,a=e.detail||{};return o.ack(n.scope,a.entryId).then(()=>n._emitPendingCount()).then(()=>n._drain()).catch(f=>{y(n.dom,"ln-api-queue:error",{operation:"ack",entryId:a.entryId,error:f})})},i.prototype._onNack=function(e){const n=this,a=e.detail||{};return o.nack(n.scope,a.entryId,a.reason,{maxAttempts:l,backoff:s}).then(f=>{if(f)return f.status==="failed"?y(n.dom,"ln-api-queue:failed",{entryId:f.entry.entryId,chainKey:f.entry.chainKey,attempts:f.entry.attempts}):f.status==="retry"?n._scheduleTimer(f.entry.chainKey,f.delay):f.status==="auth"&&(n._paused=!0,y(n.dom,"ln-api-queue:paused",{reason:"auth"}),y(n.dom,"ln-api-queue:auth-required",{entryId:f.entry.entryId,chainKey:f.entry.chainKey})),n._emitPendingCount().then(()=>{if(f.status==="dropped")return n._drain()})}).catch(f=>{y(n.dom,"ln-api-queue:error",{operation:"nack",entryId:a.entryId,error:f})})},i.prototype._onRemap=function(e){const n=this,a=e.detail||{};return o.remap(n.scope,a.oldKey,a.newId).catch(f=>{y(n.dom,"ln-api-queue:error",{operation:"remap",error:f})})},i.prototype._onResolveCreate=function(e){const n=this,a=e.detail||{};return o.resolveCreate(n.scope,a.entryId,a.oldKey,a.newId).then(()=>n._emitPendingCount()).then(()=>n._drain()).catch(f=>{y(n.dom,"ln-api-queue:error",{operation:"resolve-create",entryId:a.entryId,error:f})})},i.prototype._onResume=function(){const e=this;return o.setPaused(e.scope,!1).then(()=>(e._paused=!1,y(e.dom,"ln-api-queue:resumed",{}),e._drain())).catch(n=>{y(e.dom,"ln-api-queue:error",{operation:"resume",error:n})})},i.prototype._onDrain=function(){const e=this;return o.resetFailed(e.scope).then(()=>{const n=e._drainPromise;return n?n.then(()=>e._drain()):e._drain()}).catch(n=>{y(e.dom,"ln-api-queue:error",{operation:"manual-drain",error:n})})},i.prototype._onClear=function(){const e=this;return e._timers.forEach(n=>clearTimeout(n)),e._timers.clear(),o.clear(e.scope).then(()=>{e._paused=!1,y(e.dom,"ln-api-queue:pending-count",{count:0,scope:e.scope}),y(e.dom,"ln-api-queue:drained",{scope:e.scope})}).catch(n=>{y(e.dom,"ln-api-queue:error",{operation:"clear",error:n})})},i.prototype._bindEvents=function(){const e=this;e._handlers={enqueue:n=>e._onEnqueue(n),ack:n=>e._onAck(n),nack:n=>e._onNack(n),remap:n=>e._onRemap(n),resolveCreate:n=>e._onResolveCreate(n),resume:()=>e._onResume(),drain:()=>e._onDrain(),clear:()=>e._onClear()},e.dom.addEventListener("ln-api-queue:request-enqueue",e._handlers.enqueue),e.dom.addEventListener("ln-api-queue:ack",e._handlers.ack),e.dom.addEventListener("ln-api-queue:nack",e._handlers.nack),e.dom.addEventListener("ln-api-queue:request-remap",e._handlers.remap),e.dom.addEventListener("ln-api-queue:resolve-create",e._handlers.resolveCreate),e.dom.addEventListener("ln-api-queue:request-resume",e._handlers.resume),e.dom.addEventListener("ln-api-queue:request-drain",e._handlers.drain),e.dom.addEventListener("ln-api-queue:request-clear",e._handlers.clear)},i.prototype.destroy=function(){if(!this.dom[t])return;const e=this;e.dom.removeEventListener("ln-api-queue:request-enqueue",e._handlers.enqueue),e.dom.removeEventListener("ln-api-queue:ack",e._handlers.ack),e.dom.removeEventListener("ln-api-queue:nack",e._handlers.nack),e.dom.removeEventListener("ln-api-queue:request-remap",e._handlers.remap),e.dom.removeEventListener("ln-api-queue:resolve-create",e._handlers.resolveCreate),e.dom.removeEventListener("ln-api-queue:request-resume",e._handlers.resume),e.dom.removeEventListener("ln-api-queue:request-drain",e._handlers.drain),e.dom.removeEventListener("ln-api-queue:request-clear",e._handlers.clear),window.removeEventListener("online",e._onlineHandler),e._timers.forEach(n=>clearTimeout(n)),e._timers.clear(),y(e.dom,"ln-api-queue:destroyed",{scope:e.scope}),delete e.dom[t]};function d(e){const n=e[t];n&&n._drain()}j(r,t,i,"ln-api-queue",{extraAttributes:["data-ln-api-queue-online"],onAttributeChange:d})})()})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...e){typeof e[0]=="string"&&(e[0].startsWith("[ln-")||e[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,e)}}const w={};function q(t,e){w[t]||(w[t]=document.querySelector('[data-ln-template="'+t+'"]'));const n=w[t];return n?n.content.cloneNode(!0):(console.warn("["+(e||"ln-core")+'] Template "'+t+'" not found'),null)}function x(t,e){if(!t||!e)return t;const n=t.querySelectorAll("[data-ln-field]");for(let o=0;o<n.length;o++){const i=n[o],l=i.getAttribute("data-ln-field");e[l]!=null&&(i.textContent=e[l])}const c=t.querySelectorAll("[data-ln-attr]");for(let o=0;o<c.length;o++){const i=c[o],l=i.getAttribute("data-ln-attr").split(",");for(let s=0;s<l.length;s++){const d=l[s].trim().split(":");if(d.length!==2)continue;const a=d[0].trim(),f=d[1].trim();e[f]!=null&&i.setAttribute(a,e[f])}}const u=t.querySelectorAll("[data-ln-show]");for(let o=0;o<u.length;o++){const i=u[o],l=i.getAttribute("data-ln-show");l in e&&i.classList.toggle("hidden",!e[l])}const r=t.querySelectorAll("[data-ln-class]");for(let o=0;o<r.length;o++){const i=r[o],l=i.getAttribute("data-ln-class").split(",");for(let s=0;s<l.length;s++){const d=l[s].trim().split(":");if(d.length!==2)continue;const a=d[0].trim(),f=d[1].trim();f in e&&i.classList.toggle(a,!!e[f])}}return t}function D(t,e){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));const n=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let c=0;c<n.length;c++)n[c].dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));return t}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(t){if(!(!t.target.matches||!t.target.matches("[data-ln-fillable]")))if(t.detail)x(t.target,t.detail);else{const e=t.target.querySelectorAll("[data-ln-field]");for(let n=0;n<e.length;n++)e[n].textContent=""}})));function L(t,e){if(!t||!e)return t;const n=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;n.nextNode();){const r=n.currentNode;r.textContent.indexOf("{{")!==-1&&(r.textContent=r.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(o,i){return e[i]!==void 0?e[i]:""}))}const c=function(r,o){return e[o]!==void 0?e[o]:""},u=Array.from(t.querySelectorAll("*"));t.nodeType===1&&u.push(t);for(let r=0;r<u.length;r++){const o=u[r],i=o.attributes;for(let l=0;l<i.length;l++){const s=i[l];s.value.indexOf("{{")!==-1&&o.setAttribute(s.name,s.value.replace(/\{\{\s*(\w+)\s*\}\}/g,c))}}return t}function N(t,e,n,c,u,r){const o={};for(let l=0;l<t.children.length;l++){const s=t.children[l],d=s.getAttribute("data-ln-key");d&&(o[d]=s)}const i=document.createDocumentFragment();for(let l=0;l<e.length;l++){const s=e[l],d=String(c(s));let a=o[d];if(a)u(a,s,l);else{const f=q(n,r);if(!f||(L(f,s),a=f.firstElementChild,!a))continue;a.setAttribute("data-ln-key",d),u(a,s,l)}i.appendChild(a)}t.textContent="",t.appendChild(i)}function S(t,e){if(!document.body){document.addEventListener("DOMContentLoaded",function(){S(t,e)}),console.warn("["+e+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function g(t,e,n,c){if(t.nodeType!==1)return;const r=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",o=Array.from(t.querySelectorAll(r));t.matches&&t.matches(r)&&o.push(t);for(const i of o)i[n]||(i[n]=new c(i))}function M(t,e,n,c,u={}){const r=u.extraAttributes||[],o=u.onAttributeChange||null,i=u.onInit||null;function l(s){const d=s||document.body;g(d,t,e,n),i&&i(d)}return S(function(){const s=new MutationObserver(function(a){for(let f=0;f<a.length;f++){const h=a[f];if(h.type==="childList"){for(let m=0;m<h.addedNodes.length;m++){const p=h.addedNodes[m];p.nodeType===1&&(g(p,t,e,n),i&&i(p))}for(let m=0;m<h.removedNodes.length;m++){const p=h.removedNodes[m];if(p.nodeType===1){const k=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",b=Array.from(p.querySelectorAll(k));p.matches&&p.matches(k)&&b.push(p);for(let C=0;C<b.length;C++){const T=b[C];if(!document.contains(T)){const A=T[e];A&&typeof A.destroy=="function"&&A.destroy()}}}}}else h.type==="attributes"&&(o&&h.target[e]?o(h.target,h.attributeName):(g(h.target,t,e,n),i&&i(h.target)))}});let d=[];if(t.indexOf("[")!==-1){const a=/\[([\w-]+)/g;let f;for(;(f=a.exec(t))!==null;)d.push(f[1])}else d.push(t);s.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:d.concat(r)})},c),window[e]=l,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){l(document.body)}):l(document.body),l}const v={};function j(t,e){v[t]=e}function I(t){return v[t]||{ingress:e=>e,egress:e=>e}}const _={};function E(t,e){if(!t||typeof e!="object")return;const n=t.toLowerCase().split("-")[0];_[n]=e}function z(t){if(!t)return null;const e=t.toLowerCase().split("-")[0];return _[e]||null}E("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=j,window.lnCore.getDataMapper=I,window.lnCore.registerLocaleFallback=E,window.lnCore.getLocaleFallback=z,window.lnCore.fillTemplate=L,window.lnCore.fill=x,window.lnCore.lnFill=D,window.lnCore.renderList=N);function O(t){return(t||"").replace(/^#/,"")}function y(t){const e=t===void 0?location.hash:t,n={},c=O(e);if(!c)return n;const u=c.split("&");for(let r=0;r<u.length;r++){const o=u[r];if(!o)continue;const i=o.indexOf(":"),l=i>-1?o.slice(0,i):o,s=i>-1?o.slice(i+1):"";if(l)try{n[l]=decodeURIComponent(s)}catch{n[l]=s}}return n}function W(t){if(!t)return null;const e=y();return t in e?e[t]:null}function F(t,e){if(!t)return;const n=y();e==null?delete n[t]:n[t]=String(e);const u=Object.keys(n).map(function(r){const o=n[r];return o===""?r:r+":"+encodeURIComponent(o)}).join("&");O(location.hash)!==u&&(location.hash=u)}function B(t){return t.button===1||t.ctrlKey||t.metaKey||t.shiftKey?!1:(t.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=y,window.lnCore.hashGet=W,window.lnCore.hashSet=F,window.lnCore.hashLinkClick=B),(function(){const t="data-ln-autoresize",e="lnAutoresize";if(window[e]!==void 0)return;function n(c){if(c.tagName!=="TEXTAREA")return console.warn("[ln-autoresize] Can only be applied to <textarea>, got:",c.tagName),this;this.dom=c;const u=this;return this._onInput=function(){u._resize()},c.addEventListener("input",this._onInput),this._resize(),this}n.prototype._resize=function(){this.dom.style.height="auto",this.dom.style.height=this.dom.scrollHeight+"px"},n.prototype.destroy=function(){this.dom[e]&&(this.dom.removeEventListener("input",this._onInput),this.dom.style.height="",delete this.dom[e])},M(t,e,n,"ln-autoresize")})()})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const e=console.warn;console.warn=function(...t){typeof t[0]=="string"&&(t[0].startsWith("[ln-")||t[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||e.apply(console,t)}}const E={};function F(e,t){E[e]||(E[e]=document.querySelector('[data-ln-template="'+e+'"]'));const s=E[e];return s?s.content.cloneNode(!0):(console.warn("["+(t||"ln-core")+'] Template "'+e+'" not found'),null)}function w(e,t,s){e.dispatchEvent(new CustomEvent(t,{bubbles:!0,detail:s||{}}))}function I(e,t,s){const u=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:s||{}});return e.dispatchEvent(u),u}function x(e,t){if(!e||!t)return e;const s=e.querySelectorAll("[data-ln-field]");for(let i=0;i<s.length;i++){const l=s[i],n=l.getAttribute("data-ln-field");t[n]!=null&&(l.textContent=t[n])}const u=e.querySelectorAll("[data-ln-attr]");for(let i=0;i<u.length;i++){const l=u[i],n=l.getAttribute("data-ln-attr").split(",");for(let r=0;r<n.length;r++){const o=n[r].trim().split(":");if(o.length!==2)continue;const d=o[0].trim(),f=o[1].trim();t[f]!=null&&l.setAttribute(d,t[f])}}const c=e.querySelectorAll("[data-ln-show]");for(let i=0;i<c.length;i++){const l=c[i],n=l.getAttribute("data-ln-show");n in t&&l.classList.toggle("hidden",!t[n])}const a=e.querySelectorAll("[data-ln-class]");for(let i=0;i<a.length;i++){const l=a[i],n=l.getAttribute("data-ln-class").split(",");for(let r=0;r<n.length;r++){const o=n[r].trim().split(":");if(o.length!==2)continue;const d=o[0].trim(),f=o[1].trim();f in t&&l.classList.toggle(d,!!t[f])}}return e}function M(e,t){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&e.dispatchEvent(new CustomEvent("ln-fill",{detail:t??null,bubbles:!0}));const s=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let u=0;u<s.length;u++)s[u].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)x(e.target,e.detail);else{const t=e.target.querySelectorAll("[data-ln-field]");for(let s=0;s<t.length;s++)t[s].textContent=""}})));function k(e,t){if(!e||!t)return e;const s=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;s.nextNode();){const a=s.currentNode;a.textContent.indexOf("{{")!==-1&&(a.textContent=a.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(i,l){return t[l]!==void 0?t[l]:""}))}const u=function(a,i){return t[i]!==void 0?t[i]:""},c=Array.from(e.querySelectorAll("*"));e.nodeType===1&&c.push(e);for(let a=0;a<c.length;a++){const i=c[a],l=i.attributes;for(let n=0;n<l.length;n++){const r=l[n];r.value.indexOf("{{")!==-1&&i.setAttribute(r.name,r.value.replace(/\{\{\s*(\w+)\s*\}\}/g,u))}}return e}function R(e,t,s,u,c,a){const i={};for(let n=0;n<e.children.length;n++){const r=e.children[n],o=r.getAttribute("data-ln-key");o&&(i[o]=r)}const l=document.createDocumentFragment();for(let n=0;n<t.length;n++){const r=t[n],o=String(u(r));let d=i[o];if(d)c(d,r,n);else{const f=F(s,a);if(!f||(k(f,r),d=f.firstElementChild,!d))continue;d.setAttribute("data-ln-key",o),c(d,r,n)}l.appendChild(d)}e.textContent="",e.appendChild(l)}function S(e,t){if(!document.body){document.addEventListener("DOMContentLoaded",function(){S(e,t)}),console.warn("["+t+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}function _(e,t,s,u){if(e.nodeType!==1)return;const a=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",i=Array.from(e.querySelectorAll(a));e.matches&&e.matches(a)&&i.push(e);for(const l of i)l[s]||(l[s]=new u(l))}function q(e,t){const s=!!(t&&t.typed),u=t&&t.exclude,c={},a=e.elements,i={};if(s)for(let l=0;l<a.length;l++){const n=a[l];n.name&&n.type==="checkbox"&&!n.disabled&&(i[n.name]=(i[n.name]||0)+1)}for(let l=0;l<a.length;l++){const n=a[l];if(!(!n.name||n.disabled||n.type==="file"||n.type==="submit"||n.type==="button")&&!(u&&n.matches&&n.matches(u)))if(n.type==="checkbox")s&&i[n.name]===1?c[n.name]=n.checked:(c[n.name]||(c[n.name]=[]),n.checked&&c[n.name].push(n.value));else if(n.type==="radio")n.checked&&(c[n.name]=n.value);else if(n.type==="select-multiple"){c[n.name]=[];for(let r=0;r<n.options.length;r++)n.options[r].selected&&c[n.name].push(n.options[r].value)}else if(s&&n.type==="hidden")c[n.name]=n.value;else if(s&&(n.type==="number"||n.type==="range")){const r=Number(n.value);c[n.name]=n.value===""||isNaN(r)?null:r}else c[n.name]=n.value}return c}function U(e){if(typeof e!="string")return!!e;const t=e.trim().toLowerCase();return t!=="false"&&t!=="0"&&t!==""&&t!=="off"&&t!=="no"}function j(e,t){const s=e.elements,u=[],c={};for(let a=0;a<s.length;a++){const i=s[a];i.name&&i.type==="checkbox"&&(c[i.name]=(c[i.name]||0)+1)}for(let a=0;a<s.length;a++){const i=s[a];if(i.type==="file"||i.type==="submit"||i.type==="button")continue;const l=i.getAttribute("data-ln-fill-as")||i.name;if(!l||!(l in t))continue;const n=t[l];if(i.type==="checkbox"){if(Array.isArray(n))i.checked=n.indexOf(i.value)!==-1;else if(c[i.name]>1){const r=String(n).split(",").map(function(o){return o.trim()});i.checked=r.indexOf(i.value)!==-1}else i.checked=U(n);u.push(i)}else if(i.type==="radio")i.checked=i.value===String(n),u.push(i);else if(i.type==="select-multiple"){if(Array.isArray(n))for(let r=0;r<i.options.length;r++)i.options[r].selected=n.indexOf(i.options[r].value)!==-1;u.push(i)}else i.value=n,u.push(i)}return u}function B(e,t,s,u,c={}){const a=c.extraAttributes||[],i=c.onAttributeChange||null,l=c.onInit||null;function n(r){const o=r||document.body;_(o,e,t,s),l&&l(o)}return S(function(){const r=new MutationObserver(function(d){for(let f=0;f<d.length;f++){const m=d[f];if(m.type==="childList"){for(let y=0;y<m.addedNodes.length;y++){const g=m.addedNodes[y];g.nodeType===1&&(_(g,e,t,s),l&&l(g))}for(let y=0;y<m.removedNodes.length;y++){const g=m.removedNodes[y];if(g.nodeType===1){const p=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",h=Array.from(g.querySelectorAll(p));g.matches&&g.matches(p)&&h.push(g);for(let C=0;C<h.length;C++){const v=h[C];if(!document.contains(v)){const b=v[t];b&&typeof b.destroy=="function"&&b.destroy()}}}}}else m.type==="attributes"&&(i&&m.target[t]?i(m.target,m.attributeName):(_(m.target,e,t,s),l&&l(m.target)))}});let o=[];if(e.indexOf("[")!==-1){const d=/\[([\w-]+)/g;let f;for(;(f=d.exec(e))!==null;)o.push(f[1])}else o.push(e);r.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:o.concat(a)})},u),window[t]=n,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){n(document.body)}):n(document.body),n}const T={};function W(e,t){T[e]=t}function K(e){return T[e]||{ingress:t=>t,egress:t=>t}}const O={};function N(e,t){if(!e||typeof t!="object")return;const s=e.toLowerCase().split("-")[0];O[s]=t}function P(e){if(!e)return null;const t=e.toLowerCase().split("-")[0];return O[t]||null}N("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=W,window.lnCore.getDataMapper=K,window.lnCore.registerLocaleFallback=N,window.lnCore.getLocaleFallback=P,window.lnCore.fillTemplate=k,window.lnCore.fill=x,window.lnCore.lnFill=M,window.lnCore.renderList=R);function D(e){return(e||"").replace(/^#/,"")}function A(e){const t=e===void 0?location.hash:e,s={},u=D(t);if(!u)return s;const c=u.split("&");for(let a=0;a<c.length;a++){const i=c[a];if(!i)continue;const l=i.indexOf(":"),n=l>-1?i.slice(0,l):i,r=l>-1?i.slice(l+1):"";if(n)try{s[n]=decodeURIComponent(r)}catch{s[n]=r}}return s}function G(e){if(!e)return null;const t=A();return e in t?t[e]:null}function X(e,t){if(!e)return;const s=A();t==null?delete s[e]:s[e]=String(t);const c=Object.keys(s).map(function(a){const i=s[a];return i===""?a:a+":"+encodeURIComponent(i)}).join("&");D(location.hash)!==c&&(location.hash=c)}function J(e){return e.button===1||e.ctrlKey||e.metaKey||e.shiftKey?!1:(e.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=A,window.lnCore.hashGet=G,window.lnCore.hashSet=X,window.lnCore.hashLinkClick=J),(function(){const e="data-ln-autosave",t="lnAutosave",s="data-ln-autosave-clear",u="data-ln-autosave-debounce-input",c="ln-autosave:";if(window[t]!==void 0)return;function i(o){const d=l(o);if(!d){console.warn("ln-autosave: form needs an id or data-ln-autosave value",o);return}this.dom=o,this.key=d;let f=null;function m(){const p=q(o,{exclude:"[data-ln-autosave-exclude]"});try{localStorage.setItem(d,JSON.stringify(p))}catch{return}w(o,"ln-autosave:saved",{target:o,data:p})}function y(){let p;try{p=localStorage.getItem(d)}catch{return}if(!p)return;let h;try{h=JSON.parse(p)}catch{return}if(I(o,"ln-autosave:before-restore",{target:o,data:h}).defaultPrevented)return;const v=j(o,h);for(let b=0;b<v.length;b++)v[b].dispatchEvent(new Event("input",{bubbles:!0})),v[b].dispatchEvent(new Event("change",{bubbles:!0}));w(o,"ln-autosave:restored",{target:o,data:h})}function g(){try{localStorage.removeItem(d)}catch{return}w(o,"ln-autosave:cleared",{target:o})}this._onFocusout=function(p){const h=p.target;n(h)&&h.name&&!h.hasAttribute("data-ln-autosave-exclude")&&m()},this._onChange=function(p){const h=p.target;n(h)&&h.name&&!h.hasAttribute("data-ln-autosave-exclude")&&m()},this._onSubmit=function(){g()},this._onReset=function(){g()},this._onClearClick=function(p){p.target.closest("["+s+"]")&&g()},o.addEventListener("focusout",this._onFocusout),o.addEventListener("change",this._onChange),o.addEventListener("submit",this._onSubmit),o.addEventListener("reset",this._onReset),o.addEventListener("click",this._onClearClick);const L=r(o);return L>0&&(this._onInput=function(p){const h=p.target;!n(h)||!h.name||h.hasAttribute("data-ln-autosave-exclude")||(f!==null&&clearTimeout(f),f=setTimeout(m,L))},o.addEventListener("input",this._onInput)),this._getInputTimer=function(){return f},y(),this}i.prototype.destroy=function(){if(this.dom[t]){if(this.dom.removeEventListener("focusout",this._onFocusout),this.dom.removeEventListener("change",this._onChange),this.dom.removeEventListener("submit",this._onSubmit),this.dom.removeEventListener("reset",this._onReset),this.dom.removeEventListener("click",this._onClearClick),this._onInput){this.dom.removeEventListener("input",this._onInput);const o=this._getInputTimer();o!==null&&clearTimeout(o)}w(this.dom,"ln-autosave:destroyed",{target:this.dom}),delete this.dom[t]}};function l(o){const f=o.getAttribute(e)||o.id;return f?c+window.location.pathname+":"+f:null}function n(o){const d=o.tagName;return d==="INPUT"||d==="TEXTAREA"||d==="SELECT"}function r(o){if(!o.hasAttribute(u))return 0;const d=o.getAttribute(u);if(d===""||d===null)return 1e3;const f=parseInt(d,10);return isNaN(f)||f<0?(console.warn("ln-autosave: invalid debounce value, using default",o),1e3):f}B(e,t,i,"ln-autosave")})()})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...e){typeof e[0]=="string"&&(e[0].startsWith("[ln-")||e[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,e)}}const b={};function N(t,e){b[t]||(b[t]=document.querySelector('[data-ln-template="'+t+'"]'));const r=b[t];return r?r.content.cloneNode(!0):(console.warn("["+(e||"ln-core")+'] Template "'+t+'" not found'),null)}function D(t,e,r){t.dispatchEvent(new CustomEvent(e,{bubbles:!0,detail:r||{}}))}function E(t,e){if(!t||!e)return t;const r=t.querySelectorAll("[data-ln-field]");for(let n=0;n<r.length;n++){const i=r[n],l=i.getAttribute("data-ln-field");e[l]!=null&&(i.textContent=e[l])}const s=t.querySelectorAll("[data-ln-attr]");for(let n=0;n<s.length;n++){const i=s[n],l=i.getAttribute("data-ln-attr").split(",");for(let a=0;a<l.length;a++){const f=l[a].trim().split(":");if(f.length!==2)continue;const u=f[0].trim(),c=f[1].trim();e[c]!=null&&i.setAttribute(u,e[c])}}const d=t.querySelectorAll("[data-ln-show]");for(let n=0;n<d.length;n++){const i=d[n],l=i.getAttribute("data-ln-show");l in e&&i.classList.toggle("hidden",!e[l])}const o=t.querySelectorAll("[data-ln-class]");for(let n=0;n<o.length;n++){const i=o[n],l=i.getAttribute("data-ln-class").split(",");for(let a=0;a<l.length;a++){const f=l[a].trim().split(":");if(f.length!==2)continue;const u=f[0].trim(),c=f[1].trim();c in e&&i.classList.toggle(u,!!e[c])}}return t}function q(t,e){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));const r=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let s=0;s<r.length;s++)r[s].dispatchEvent(new CustomEvent("ln-fill",{detail:e??null,bubbles:!0}));return t}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(t){if(!(!t.target.matches||!t.target.matches("[data-ln-fillable]")))if(t.detail)E(t.target,t.detail);else{const e=t.target.querySelectorAll("[data-ln-field]");for(let r=0;r<e.length;r++)e[r].textContent=""}})));function k(t,e){if(!t||!e)return t;const r=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;r.nextNode();){const o=r.currentNode;o.textContent.indexOf("{{")!==-1&&(o.textContent=o.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(n,i){return e[i]!==void 0?e[i]:""}))}const s=function(o,n){return e[n]!==void 0?e[n]:""},d=Array.from(t.querySelectorAll("*"));t.nodeType===1&&d.push(t);for(let o=0;o<d.length;o++){const n=d[o],i=n.attributes;for(let l=0;l<i.length;l++){const a=i[l];a.value.indexOf("{{")!==-1&&n.setAttribute(a.name,a.value.replace(/\{\{\s*(\w+)\s*\}\}/g,s))}}return t}function F(t,e,r,s,d,o){const n={};for(let l=0;l<t.children.length;l++){const a=t.children[l],f=a.getAttribute("data-ln-key");f&&(n[f]=a)}const i=document.createDocumentFragment();for(let l=0;l<e.length;l++){const a=e[l],f=String(s(a));let u=n[f];if(u)d(u,a,l);else{const c=N(r,o);if(!c||(k(c,a),u=c.firstElementChild,!u))continue;u.setAttribute("data-ln-key",f),d(u,a,l)}i.appendChild(u)}t.textContent="",t.appendChild(i)}function S(t,e){if(!document.body){document.addEventListener("DOMContentLoaded",function(){S(t,e)}),console.warn("["+e+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function w(t,e,r,s){if(t.nodeType!==1)return;const o=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",n=Array.from(t.querySelectorAll(o));t.matches&&t.matches(o)&&n.push(t);for(const i of n)i[r]||(i[r]=new s(i))}function I(t,e,r,s,d={}){const o=d.extraAttributes||[],n=d.onAttributeChange||null,i=d.onInit||null;function l(a){const f=a||document.body;w(f,t,e,r),i&&i(f)}return S(function(){const a=new MutationObserver(function(u){for(let c=0;c<u.length;c++){const h=u[c];if(h.type==="childList"){for(let p=0;p<h.addedNodes.length;p++){const m=h.addedNodes[p];m.nodeType===1&&(w(m,t,e,r),i&&i(m))}for(let p=0;p<h.removedNodes.length;p++){const m=h.removedNodes[p];if(m.nodeType===1){const g=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",v=Array.from(m.querySelectorAll(g));m.matches&&m.matches(g)&&v.push(m);for(let A=0;A<v.length;A++){const T=v[A];if(!document.contains(T)){const x=T[e];x&&typeof x.destroy=="function"&&x.destroy()}}}}}else h.type==="attributes"&&(n&&h.target[e]?n(h.target,h.attributeName):(w(h.target,t,e,r),i&&i(h.target)))}});let f=[];if(t.indexOf("[")!==-1){const u=/\[([\w-]+)/g;let c;for(;(c=u.exec(t))!==null;)f.push(c[1])}else f.push(t);a.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:f.concat(o)})},s),window[e]=l,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){l(document.body)}):l(document.body),l}const _={};function j(t,e){_[t]=e}function W(t){return _[t]||{ingress:e=>e,egress:e=>e}}const L={};function O(t,e){if(!t||typeof e!="object")return;const r=t.toLowerCase().split("-")[0];L[r]=e}function R(t){if(!t)return null;const e=t.toLowerCase().split("-")[0];return L[e]||null}O("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=j,window.lnCore.getDataMapper=W,window.lnCore.registerLocaleFallback=O,window.lnCore.getLocaleFallback=R,window.lnCore.fillTemplate=k,window.lnCore.fill=E,window.lnCore.lnFill=q,window.lnCore.renderList=F);function M(t){return(t||"").replace(/^#/,"")}function C(t){const e=t===void 0?location.hash:t,r={},s=M(e);if(!s)return r;const d=s.split("&");for(let o=0;o<d.length;o++){const n=d[o];if(!n)continue;const i=n.indexOf(":"),l=i>-1?n.slice(0,i):n,a=i>-1?n.slice(i+1):"";if(l)try{r[l]=decodeURIComponent(a)}catch{r[l]=a}}return r}function B(t){if(!t)return null;const e=C();return t in e?e[t]:null}function U(t,e){if(!t)return;const r=C();e==null?delete r[t]:r[t]=String(e);const d=Object.keys(r).map(function(o){const n=r[o];return n===""?o:o+":"+encodeURIComponent(n)}).join("&");M(location.hash)!==d&&(location.hash=d)}function K(t){return t.button===1||t.ctrlKey||t.metaKey||t.shiftKey?!1:(t.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=C,window.lnCore.hashGet=B,window.lnCore.hashSet=U,window.lnCore.hashLinkClick=K),(function(){const t="data-ln-circular-progress",e="lnCircularProgress";if(window[e]!==void 0)return;const r="http://www.w3.org/2000/svg",s=36,d=16,o=2*Math.PI*d;function n(u){return this.dom=u,this.svg=null,this.trackCircle=null,this.progressCircle=null,this.labelEl=null,this._attrObserver=null,l.call(this),f.call(this),a.call(this),this}n.prototype.destroy=function(){this.dom[e]&&(this._attrObserver&&this._attrObserver.disconnect(),this.svg&&this.svg.remove(),this.labelEl&&this.labelEl.remove(),this.dom.removeAttribute("role"),this.dom.removeAttribute("aria-valuemin"),this.dom.removeAttribute("aria-valuemax"),this.dom.removeAttribute("aria-valuenow"),this.dom.removeAttribute("aria-valuetext"),delete this.dom[e])};function i(u,c){const h=document.createElementNS(r,u);for(const p in c)h.setAttribute(p,c[p]);return h}function l(){this.svg=i("svg",{viewBox:"0 0 "+s+" "+s,"aria-hidden":"true"}),this.trackCircle=i("circle",{cx:s/2,cy:s/2,r:d,fill:"none","stroke-width":"3"}),this.trackCircle.classList.add("ln-circular-progress__track"),this.progressCircle=i("circle",{cx:s/2,cy:s/2,r:d,fill:"none","stroke-width":"3","stroke-linecap":"round","stroke-dasharray":o,"stroke-dashoffset":o,transform:"rotate(-90 "+s/2+" "+s/2+")"}),this.progressCircle.classList.add("ln-circular-progress__fill"),this.svg.appendChild(this.trackCircle),this.svg.appendChild(this.progressCircle),this.labelEl=document.createElement("strong"),this.labelEl.classList.add("ln-circular-progress__label"),this.dom.appendChild(this.svg),this.dom.appendChild(this.labelEl)}function a(){const u=this,c=new MutationObserver(function(h){for(const p of h)(p.attributeName==="data-ln-circular-progress"||p.attributeName==="data-ln-circular-progress-max"||p.attributeName==="data-ln-circular-progress-label")&&f.call(u)});c.observe(this.dom,{attributes:!0,attributeFilter:["data-ln-circular-progress","data-ln-circular-progress-max","data-ln-circular-progress-label"]}),this._attrObserver=c}function f(){const u=parseFloat(this.dom.getAttribute("data-ln-circular-progress"))||0,c=parseFloat(this.dom.getAttribute("data-ln-circular-progress-max"))||100;let h=c>0?u/c*100:0;h<0&&(h=0),h>100&&(h=100);const p=o-h/100*o;this.progressCircle.setAttribute("stroke-dashoffset",p);const m=this.dom.getAttribute("data-ln-circular-progress-label"),y=m!==null?m:Math.round(h)+"%";this.labelEl.textContent=y,this.dom.setAttribute("role","progressbar"),this.dom.setAttribute("aria-valuemin","0"),this.dom.setAttribute("aria-valuemax",String(c));const g=Math.max(0,Math.min(u,c));this.dom.setAttribute("aria-valuenow",String(g)),this.dom.setAttribute("aria-valuetext",y),D(this.dom,"ln-circular-progress:change",{target:this.dom,value:u,max:c,percentage:h})}I(t,e,n,"ln-circular-progress")})()})();
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
// ── JS state: confirm mode color override ──
|
|
2
|
-
// When data-confirming is set (by JS), override --color-primary to error
|
|
3
|
-
// so the button turns red. Tooltip-mode buttons handle color differently.
|
|
4
|
-
[data-confirming]:not(.ln-confirm-tooltip) {
|
|
5
|
-
--color-primary: var(--color-error);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// ── Overflow escape: tooltip inside clipped containers ──
|
|
9
|
-
// [data-ln-table] uses overflow:clip which clips the ::after tooltip.
|
|
10
|
-
// Temporarily allow overflow when a confirm is active inside.
|
|
11
|
-
[data-ln-table]:has([data-confirming]) {
|
|
12
|
-
overflow: visible;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// ── Show/hide for two-element mode ──
|
|
16
|
-
[data-ln-confirm] {
|
|
17
|
-
&:not([data-confirming="true"]) [data-ln-confirm-active] {
|
|
18
|
-
display: none !important;
|
|
19
|
-
}
|
|
20
|
-
&[data-confirming="true"] [data-ln-confirm-idle] {
|
|
21
|
-
display: none !important;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|