@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
package/js/ln-core/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { cloneTemplate, cloneTemplateScoped, dispatch, dispatchCancelable, requestData, fill, lnFill, fillTemplate, renderList, buildDict, guardBody, findElements, isVisible, serializeForm, populateForm, resolveFormMethod, getLocale, readValue, detectValueType, compareValues, registerComponent, shouldInterceptLink, buildUrl, getHeaders, parseHeaders, registerDataMapper, getDataMapper, interceptValueProperty, registerLocaleFallback, getLocaleFallback } from './helpers.js';
|
|
2
|
-
export { reactiveState, deepReactive, createBatcher } from './reactive.js';
|
|
3
|
-
export { createWindowCache } from './window-cache.js';
|
|
4
|
-
export { persistGet, persistSet, persistRemove, persistClear } from './persist.js';
|
|
5
|
-
export { hashParse, hashGet, hashSet, hashLinkClick } from './hash.js';
|
|
6
|
-
export { computePlacement, measureHidden } from './positioning.js';
|
|
7
|
-
export { setCryptoKey, getCryptoKey, encryptData, decryptData } from './crypto.js';
|
package/js/ln-core/persist.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
// ─── Persist (localStorage) ───────────────────────────────
|
|
2
|
-
//
|
|
3
|
-
// Key format: ln:{component}:{pathname}:{elementId}
|
|
4
|
-
// Example: ln:filter:/admin/users:status-filter
|
|
5
|
-
//
|
|
6
|
-
// Each component passes its own name ("filter", "sort", "toggle", "tabs"),
|
|
7
|
-
// so keys are namespaced per component — no cross-component collision risk.
|
|
8
|
-
// Element ID comes from data-ln-persist="key" or el.id.
|
|
9
|
-
//
|
|
10
|
-
// Note: ln-autosave uses its own separate prefix ("ln-autosave:") and does NOT
|
|
11
|
-
// go through this module. No collision between the two systems.
|
|
12
|
-
|
|
13
|
-
const PREFIX = 'ln:';
|
|
14
|
-
|
|
15
|
-
let _isStorageAvailable = null;
|
|
16
|
-
function _checkStorage() {
|
|
17
|
-
if (_isStorageAvailable !== null) return _isStorageAvailable;
|
|
18
|
-
try {
|
|
19
|
-
if (typeof localStorage === 'undefined') {
|
|
20
|
-
_isStorageAvailable = false;
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
const testKey = '__ln_test__';
|
|
24
|
-
localStorage.setItem(testKey, testKey);
|
|
25
|
-
localStorage.removeItem(testKey);
|
|
26
|
-
_isStorageAvailable = true;
|
|
27
|
-
} catch (e) {
|
|
28
|
-
_isStorageAvailable = false;
|
|
29
|
-
}
|
|
30
|
-
return _isStorageAvailable;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function _pageKey() {
|
|
34
|
-
const path = location.pathname.replace(/\/+$/, '').toLowerCase();
|
|
35
|
-
return path || '/';
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function _resolveKey(component, el) {
|
|
39
|
-
const persist = el.getAttribute('data-ln-persist');
|
|
40
|
-
const id = (persist !== null && persist !== '') ? persist : el.id;
|
|
41
|
-
if (!id) {
|
|
42
|
-
console.warn('[ln-persist] Element requires id or data-ln-persist="key"', el);
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
return PREFIX + component + ':' + _pageKey() + ':' + id;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export function persistGet(component, el) {
|
|
49
|
-
if (!_checkStorage()) return null;
|
|
50
|
-
const key = _resolveKey(component, el);
|
|
51
|
-
if (!key) return null;
|
|
52
|
-
try {
|
|
53
|
-
const raw = localStorage.getItem(key);
|
|
54
|
-
return raw !== null ? JSON.parse(raw) : null;
|
|
55
|
-
} catch (e) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function persistSet(component, el, value) {
|
|
61
|
-
if (!_checkStorage()) return;
|
|
62
|
-
const key = _resolveKey(component, el);
|
|
63
|
-
if (!key) return;
|
|
64
|
-
try {
|
|
65
|
-
if (value === null || value === undefined) {
|
|
66
|
-
localStorage.removeItem(key);
|
|
67
|
-
} else {
|
|
68
|
-
localStorage.setItem(key, JSON.stringify(value));
|
|
69
|
-
}
|
|
70
|
-
} catch (e) {
|
|
71
|
-
// localStorage full — silent
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export function persistRemove(component, el) {
|
|
76
|
-
if (!_checkStorage()) return;
|
|
77
|
-
const key = _resolveKey(component, el);
|
|
78
|
-
if (!key) return;
|
|
79
|
-
try {
|
|
80
|
-
localStorage.removeItem(key);
|
|
81
|
-
} catch (e) {}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export function persistClear(component) {
|
|
85
|
-
if (!_checkStorage()) return;
|
|
86
|
-
try {
|
|
87
|
-
const prefix = PREFIX + component + ':';
|
|
88
|
-
const toRemove = [];
|
|
89
|
-
for (let i = 0; i < localStorage.length; i++) {
|
|
90
|
-
const k = localStorage.key(i);
|
|
91
|
-
if (k && k.indexOf(prefix) === 0) toRemove.push(k);
|
|
92
|
-
}
|
|
93
|
-
for (let i = 0; i < toRemove.length; i++) {
|
|
94
|
-
localStorage.removeItem(toRemove[i]);
|
|
95
|
-
}
|
|
96
|
-
} catch (e) {}
|
|
97
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const t=console.warn;console.warn=function(...n){typeof n[0]=="string"&&(n[0].startsWith("[ln-")||n[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||t.apply(console,n)}}const L={};function M(t,n){L[t]||(L[t]=document.querySelector('[data-ln-template="'+t+'"]'));const c=L[t];return c?c.content.cloneNode(!0):(console.warn("["+(n||"ln-core")+'] Template "'+t+'" not found'),null)}function v(t,n,c){t.dispatchEvent(new CustomEvent(n,{bubbles:!0,detail:c||{}}))}function j(t,n){if(!t||!n)return t;const c=t.querySelectorAll("[data-ln-field]");for(let d=0;d<c.length;d++){const a=c[d],l=a.getAttribute("data-ln-field");n[l]!=null&&(a.textContent=n[l])}const g=t.querySelectorAll("[data-ln-attr]");for(let d=0;d<g.length;d++){const a=g[d],l=a.getAttribute("data-ln-attr").split(",");for(let p=0;p<l.length;p++){const b=l[p].trim().split(":");if(b.length!==2)continue;const y=b[0].trim(),e=b[1].trim();n[e]!=null&&a.setAttribute(y,n[e])}}const m=t.querySelectorAll("[data-ln-show]");for(let d=0;d<m.length;d++){const a=m[d],l=a.getAttribute("data-ln-show");l in n&&a.classList.toggle("hidden",!n[l])}const h=t.querySelectorAll("[data-ln-class]");for(let d=0;d<h.length;d++){const a=h[d],l=a.getAttribute("data-ln-class").split(",");for(let p=0;p<l.length;p++){const b=l[p].trim().split(":");if(b.length!==2)continue;const y=b[0].trim(),e=b[1].trim();e in n&&a.classList.toggle(y,!!n[e])}}return t}function R(t,n){t.matches&&t.matches("[data-ln-form], [data-ln-fillable]")&&t.dispatchEvent(new CustomEvent("ln-fill",{detail:n??null,bubbles:!0}));const c=t.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let g=0;g<c.length;g++)c[g].dispatchEvent(new CustomEvent("ln-fill",{detail:n??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)j(t.target,t.detail);else{const n=t.target.querySelectorAll("[data-ln-field]");for(let c=0;c<n.length;c++)n[c].textContent=""}})));function D(t,n){if(!t||!n)return t;const c=document.createTreeWalker(t,NodeFilter.SHOW_TEXT);for(;c.nextNode();){const h=c.currentNode;h.textContent.indexOf("{{")!==-1&&(h.textContent=h.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(d,a){return n[a]!==void 0?n[a]:""}))}const g=function(h,d){return n[d]!==void 0?n[d]:""},m=Array.from(t.querySelectorAll("*"));t.nodeType===1&&m.push(t);for(let h=0;h<m.length;h++){const d=m[h],a=d.attributes;for(let l=0;l<a.length;l++){const p=a[l];p.value.indexOf("{{")!==-1&&d.setAttribute(p.name,p.value.replace(/\{\{\s*(\w+)\s*\}\}/g,g))}}return t}function B(t,n,c,g,m,h){const d={};for(let l=0;l<t.children.length;l++){const p=t.children[l],b=p.getAttribute("data-ln-key");b&&(d[b]=p)}const a=document.createDocumentFragment();for(let l=0;l<n.length;l++){const p=n[l],b=String(g(p));let y=d[b];if(y)m(y,p,l);else{const e=M(c,h);if(!e||(D(e,p),y=e.firstElementChild,!y))continue;y.setAttribute("data-ln-key",b),m(y,p,l)}a.appendChild(y)}t.textContent="",t.appendChild(a)}function q(t,n){if(!document.body){document.addEventListener("DOMContentLoaded",function(){q(t,n)}),console.warn("["+n+'] Script loaded before <body> — add "defer" to your <script> tag');return}t()}function O(t,n,c,g){if(t.nodeType!==1)return;const h=n.indexOf("[")!==-1||n.indexOf(".")!==-1||n.indexOf("#")!==-1?n:"["+n+"]",d=Array.from(t.querySelectorAll(h));t.matches&&t.matches(h)&&d.push(t);for(const a of d)a[c]||(a[c]=new g(a))}function U(t,n,c,g,m={}){const h=m.extraAttributes||[],d=m.onAttributeChange||null,a=m.onInit||null;function l(p){const b=p||document.body;O(b,t,n,c),a&&a(b)}return q(function(){const p=new MutationObserver(function(y){for(let e=0;e<y.length;e++){const i=y[e];if(i.type==="childList"){for(let r=0;r<i.addedNodes.length;r++){const o=i.addedNodes[r];o.nodeType===1&&(O(o,t,n,c),a&&a(o))}for(let r=0;r<i.removedNodes.length;r++){const o=i.removedNodes[r];if(o.nodeType===1){const f=t.indexOf("[")!==-1||t.indexOf(".")!==-1||t.indexOf("#")!==-1?t:"["+t+"]",u=Array.from(o.querySelectorAll(f));o.matches&&o.matches(f)&&u.push(o);for(let w=0;w<u.length;w++){const C=u[w];if(!document.contains(C)){const A=C[n];A&&typeof A.destroy=="function"&&A.destroy()}}}}}else i.type==="attributes"&&(d&&i.target[n]?d(i.target,i.attributeName):(O(i.target,t,n,c),a&&a(i.target)))}});let b=[];if(t.indexOf("[")!==-1){const y=/\[([\w-]+)/g;let e;for(;(e=y.exec(t))!==null;)b.push(e[1])}else b.push(t);p.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:b.concat(h)})},g),window[n]=l,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){l(document.body)}):l(document.body),l}function _(...t){return t.filter(n=>n!=null&&n!=="").map((n,c)=>c===0?n.replace(/\/+$/,""):n.replace(/^\/+/,"").replace(/\/+$/,"")).filter(Boolean).join("/")}function k(t,n){return Object.assign({"Content-Type":"application/json",Accept:"application/json"},t,n?{Authorization:n}:null)}function W(t,n="ln-core"){try{return t?JSON.parse(t):{}}catch(c){return console.error(`[${n}] Invalid headers JSON:`,c),{}}}const P={};function K(t,n){P[t]=n}function G(t){return P[t]||{ingress:n=>n,egress:n=>n}}const I={};function N(t,n){if(!t||typeof n!="object")return;const c=t.toLowerCase().split("-")[0];I[c]=n}function F(t){if(!t)return null;const n=t.toLowerCase().split("-")[0];return I[n]||null}N("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=K,window.lnCore.getDataMapper=G,window.lnCore.registerLocaleFallback=N,window.lnCore.getLocaleFallback=F,window.lnCore.fillTemplate=D,window.lnCore.fill=j,window.lnCore.lnFill=R,window.lnCore.renderList=B);function H(t){return(t||"").replace(/^#/,"")}function S(t){const n=t===void 0?location.hash:t,c={},g=H(n);if(!g)return c;const m=g.split("&");for(let h=0;h<m.length;h++){const d=m[h];if(!d)continue;const a=d.indexOf(":"),l=a>-1?d.slice(0,a):d,p=a>-1?d.slice(a+1):"";if(l)try{c[l]=decodeURIComponent(p)}catch{c[l]=p}}return c}function J(t){if(!t)return null;const n=S();return t in n?n[t]:null}function z(t,n){if(!t)return;const c=S();n==null?delete c[t]:c[t]=String(n);const m=Object.keys(c).map(function(h){const d=c[h];return d===""?h:h+":"+encodeURIComponent(d)}).join("&");H(location.hash)!==m&&(location.hash=m)}function $(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=S,window.lnCore.hashGet=J,window.lnCore.hashSet=z,window.lnCore.hashLinkClick=$),(function(){const t="data-ln-couchdb-connector",n="lnCouchDbConnector",c="lnConnector";if(window[n]!==void 0)return;function g(e){const i=e&&e.content!==void 0?e.content:e,r=e&&e.message?e.message:null;return{content:i,message:r}}function m(e){return this.dom=e,e[n]=this,e[c]=this,this.refreshConfig(),this._handlers=null,b(this),this}m.prototype.refreshConfig=function(){const e=this.dom;this.url=e.getAttribute("data-ln-couchdb-url")||"",this.db=e.getAttribute("data-ln-couchdb-db")||"",this.auth=e.getAttribute("data-ln-couchdb-auth")||"",this.credentials="same-origin";const i=e.getAttribute("data-ln-couchdb-headers")||"";this.headers=W(i,"ln-couchdb-connector"),this.auth&&console.warn("[ln-couchdb-connector] Security Warning: Sensitive authorization credentials detected in data-ln-couchdb-auth attribute. Storing basic authentication credentials in HTML DOM attributes is highly discouraged and vulnerable to XSS credential extraction. Please use HttpOnly session cookies or a Backend Proxy Gateway instead."),i.toLowerCase().includes("authorization")&&console.warn("[ln-couchdb-connector] Security Warning: Sensitive authorization credentials detected in data-ln-couchdb-headers attribute. Please use HttpOnly session cookies or a Backend Proxy Gateway instead."),v(e,"ln-couchdb-connector:config-changed",{url:this.url,db:this.db,auth:this.auth?"[REDACTED]":"",headers:this.headers})};function h(e,i,r){const o=Object.assign({},k(e.headers,e.auth),r||{});return i&&(o["Idempotency-Key"]=i),o}m.prototype.fetchDelta=function(e){const i=this,r=["include_docs=true","feed=normal"];e&&r.push("since="+encodeURIComponent(e));const o=_(i.url,i.db,"_changes")+"?"+r.join("&");return window.fetch(o,{method:"GET",headers:k(i.headers,i.auth),credentials:i.credentials}).then(s=>{if(!s.ok)throw new Error("HTTP "+s.status+": "+s.statusText);return s.json()}).then(s=>{const f=s.results||[];return{data:f.filter(u=>!u.deleted&&u.doc).map(u=>Object.assign({},u.doc,{id:u.doc._id})),deleted:f.filter(u=>u.deleted).map(u=>u.id),synced_at:s.last_seq||e||""}})};function d(e,i,r){const o=Object.assign({_id:i.id},i);return o._id||delete o._id,window.fetch(_(e.url,e.db),{method:"POST",headers:h(e,r),credentials:e.credentials,body:JSON.stringify(o)}).then(s=>{if(!s.ok)throw new Error("HTTP "+s.status+": "+s.statusText);return s.json()}).then(s=>{const f=g(s),u=f.content;return{record:Object.assign({},o,{id:u.id,_id:u.id,_rev:u.rev}),message:f.message}})}m.prototype.create=function(e,i){return d(this,e,i).then(r=>r.record)};function a(e,i,r,o){const s=Object.assign({id:String(i),_id:String(i)},r),f=s._rev||s.rev;return(f?Promise.resolve(f):window.fetch(_(e.url,e.db,null,i),{method:"GET",headers:k(e.headers,e.auth),credentials:e.credentials}).then(w=>{if(!w.ok)throw new Error("Could not retrieve document for revision mapping");return w.json().then(C=>C._rev)})).then(w=>{const C=Object.assign({},s,{_rev:w});delete C.rev;const A=h(e,o,{"If-Match":w});return window.fetch(_(e.url,e.db,null,i),{method:"PUT",headers:A,credentials:e.credentials,body:JSON.stringify(C)}).then(E=>{if(E.ok)return E.json().then(x=>{const T=g(x);return{record:Object.assign({},C,{_rev:T.content.rev}),message:T.message}});if(E.status===409)return E.json().then(x=>{const T=new Error("Conflict");throw T.status=409,T.data=x,T});throw new Error("HTTP "+E.status+": "+E.statusText)})})}m.prototype.update=function(e,i,r){return a(this,e,i,r).then(o=>o.record)};function l(e,i,r,o){return(r?Promise.resolve(r):window.fetch(_(e.url,e.db,null,i),{method:"GET",headers:k(e.headers,e.auth),credentials:e.credentials}).then(f=>{if(!f.ok)throw new Error("Could not retrieve document for revision delete");return f.json().then(u=>u._rev)})).then(f=>{const u=_(e.url,e.db,null,i)+"?rev="+encodeURIComponent(f);return window.fetch(u,{method:"DELETE",headers:h(e,o),credentials:e.credentials}).then(w=>{if(!w.ok)throw new Error("HTTP "+w.status+": "+w.statusText);return w.json()}).then(w=>{const C=g(w);return{response:C.content,message:C.message}})})}m.prototype.delete=function(e,i,r){return l(this,e,i,r).then(o=>o.response)};function p(e,i,r){return!i||i.length===0?Promise.resolve({response:{ok:!0,deletedCount:0},message:null}):window.fetch(_(e.url,e.db,"_all_docs"),{method:"POST",headers:k(e.headers,e.auth),credentials:e.credentials,body:JSON.stringify({keys:i})}).then(o=>{if(!o.ok)throw new Error("HTTP "+o.status+": "+o.statusText);return o.json()}).then(o=>{const f=(o.rows||[]).filter(u=>!u.error&&u.value&&u.value.rev).map(u=>({_id:u.id,_rev:u.value.rev,_deleted:!0}));return f.length===0?{response:{ok:!0,deletedCount:0},message:null}:window.fetch(_(e.url,e.db,"_bulk_docs"),{method:"POST",headers:h(e,r),credentials:e.credentials,body:JSON.stringify({docs:f})}).then(u=>{if(!u.ok)throw new Error("HTTP "+u.status+": "+u.statusText);return u.json()}).then(u=>{const w=g(u);return{response:{ok:!0,results:w.content,deletedCount:f.length},message:w.message}})})}m.prototype.bulkDelete=function(e,i){return p(this,e,i).then(r=>r.response)};function b(e){e._handlers={sync:function(r){const o=r.detail||{};e.fetchDelta(o.since).then(function(s){v(e.dom,"ln-couchdb-connector:fetched",{data:s,since:o.since,meta:o.meta||null})}).catch(function(s){v(e.dom,"ln-couchdb-connector:error",{action:"sync",error:s.message,status:s.status||0,since:o.since,meta:o.meta||null})})},create:function(r){const o=r.detail||{};d(e,o.data,o.idempotencyKey).then(function(s){v(e.dom,"ln-couchdb-connector:created",{record:s.record,tempId:o.tempId,message:s.message,meta:o.meta||null})}).catch(function(s){v(e.dom,"ln-couchdb-connector:error",{action:"create",error:s.message,status:s.status||0,tempId:o.tempId,meta:o.meta||null})})},update:function(r){const o=r.detail||{},s=Object.assign({},o.data);o.expected_version!==void 0&&(s._rev=o.expected_version),a(e,o.id,s,o.idempotencyKey).then(function(f){v(e.dom,"ln-couchdb-connector:updated",{record:f.record,id:o.id,message:f.message,meta:o.meta||null})}).catch(function(f){v(e.dom,"ln-couchdb-connector:error",{action:"update",error:f.message,status:f.status||0,id:o.id,data:f.status===409?f.data:null,conflictData:f.status===409?f.data:null,meta:o.meta||null})})},delete:function(r){const o=r.detail||{};l(e,o.id,o.rev,o.idempotencyKey).then(function(s){v(e.dom,"ln-couchdb-connector:deleted",{response:s.response,id:o.id,message:s.message,meta:o.meta||null})}).catch(function(s){v(e.dom,"ln-couchdb-connector:error",{action:"delete",error:s.message,status:s.status||0,id:o.id,meta:o.meta||null})})},bulkDelete:function(r){const o=r.detail||{};p(e,o.ids,o.idempotencyKey).then(function(s){v(e.dom,"ln-couchdb-connector:bulk-deleted",{response:s.response,ids:o.ids,message:s.message,meta:o.meta||null})}).catch(function(s){v(e.dom,"ln-couchdb-connector:error",{action:"bulk-delete",error:s.message,status:s.status||0,ids:o.ids,meta:o.meta||null})})}},["ln-couchdb-connector","ln-api-connector","ln-rest-connector"].forEach(function(r){e.dom.addEventListener(r+":request-sync",e._handlers.sync),e.dom.addEventListener(r+":request-fetch",e._handlers.sync),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)})}m.prototype.destroy=function(){if(!this.dom[n])return;const e=this;e._handlers&&(["ln-couchdb-connector","ln-api-connector","ln-rest-connector"].forEach(function(r){e.dom.removeEventListener(r+":request-sync",e._handlers.sync),e.dom.removeEventListener(r+":request-fetch",e._handlers.sync),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),v(this.dom,"ln-couchdb-connector:destroyed",{target:this.dom}),delete this.dom[n],delete this.dom[c]};function y(e){const i=e[n];i&&i.refreshConfig()}U(t,n,m,"ln-couchdb-connector",{extraAttributes:["data-ln-couchdb-url","data-ln-couchdb-db","data-ln-couchdb-auth","data-ln-couchdb-headers"],onAttributeChange:y})})()})();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const r=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"))||r.apply(console,i)}}const I={};function K(r,i){I[r]||(I[r]=document.querySelector('[data-ln-template="'+r+'"]'));const s=I[r];return s?s.content.cloneNode(!0):(console.warn("["+(i||"ln-core")+'] Template "'+r+'" not found'),null)}function c(r,i,s){r.dispatchEvent(new CustomEvent(i,{bubbles:!0,detail:s||{}}))}function T(r,i){if(!r||!i)return r;const s=r.querySelectorAll("[data-ln-field]");for(let f=0;f<s.length;f++){const p=s[f],y=p.getAttribute("data-ln-field");i[y]!=null&&(p.textContent=i[y])}const h=r.querySelectorAll("[data-ln-attr]");for(let f=0;f<h.length;f++){const p=h[f],y=p.getAttribute("data-ln-attr").split(",");for(let E=0;E<y.length;E++){const v=y[E].trim().split(":");if(v.length!==2)continue;const w=v[0].trim(),S=v[1].trim();i[S]!=null&&p.setAttribute(w,i[S])}}const m=r.querySelectorAll("[data-ln-show]");for(let f=0;f<m.length;f++){const p=m[f],y=p.getAttribute("data-ln-show");y in i&&p.classList.toggle("hidden",!i[y])}const d=r.querySelectorAll("[data-ln-class]");for(let f=0;f<d.length;f++){const p=d[f],y=p.getAttribute("data-ln-class").split(",");for(let E=0;E<y.length;E++){const v=y[E].trim().split(":");if(v.length!==2)continue;const w=v[0].trim(),S=v[1].trim();S in i&&p.classList.toggle(w,!!i[S])}}return r}function N(r,i){r.matches&&r.matches("[data-ln-form], [data-ln-fillable]")&&r.dispatchEvent(new CustomEvent("ln-fill",{detail:i??null,bubbles:!0}));const s=r.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let h=0;h<s.length;h++)s[h].dispatchEvent(new CustomEvent("ln-fill",{detail:i??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)T(r.target,r.detail);else{const i=r.target.querySelectorAll("[data-ln-field]");for(let s=0;s<i.length;s++)i[s].textContent=""}})));function F(r,i){if(!r||!i)return r;const s=document.createTreeWalker(r,NodeFilter.SHOW_TEXT);for(;s.nextNode();){const d=s.currentNode;d.textContent.indexOf("{{")!==-1&&(d.textContent=d.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(f,p){return i[p]!==void 0?i[p]:""}))}const h=function(d,f){return i[f]!==void 0?i[f]:""},m=Array.from(r.querySelectorAll("*"));r.nodeType===1&&m.push(r);for(let d=0;d<m.length;d++){const f=m[d],p=f.attributes;for(let y=0;y<p.length;y++){const E=p[y];E.value.indexOf("{{")!==-1&&f.setAttribute(E.name,E.value.replace(/\{\{\s*(\w+)\s*\}\}/g,h))}}return r}function B(r,i,s,h,m,d){const f={};for(let y=0;y<r.children.length;y++){const E=r.children[y],v=E.getAttribute("data-ln-key");v&&(f[v]=E)}const p=document.createDocumentFragment();for(let y=0;y<i.length;y++){const E=i[y],v=String(h(E));let w=f[v];if(w)m(w,E,y);else{const S=K(s,d);if(!S||(F(S,E),w=S.firstElementChild,!w))continue;w.setAttribute("data-ln-key",v),m(w,E,y)}p.appendChild(w)}r.textContent="",r.appendChild(p)}function j(r,i){if(!document.body){document.addEventListener("DOMContentLoaded",function(){j(r,i)}),console.warn("["+i+'] Script loaded before <body> — add "defer" to your <script> tag');return}r()}function W(r,i){const s={},h=r.querySelectorAll("["+i+"]");for(let m=0;m<h.length;m++)s[h[m].getAttribute(i)]=h[m].textContent,h[m].remove();return s}function O(r,i,s,h){if(r.nodeType!==1)return;const d=i.indexOf("[")!==-1||i.indexOf(".")!==-1||i.indexOf("#")!==-1?i:"["+i+"]",f=Array.from(r.querySelectorAll(d));r.matches&&r.matches(d)&&f.push(r);for(const p of f)p[s]||(p[s]=new h(p))}function Q(r){const i=r.querySelector('input[name="_method"]');return((i&&i.value!==""?i.value:r.method)||"").toUpperCase()}function H(r,i){const s={},h=r.elements;for(let m=0;m<h.length;m++){const d=h[m];if(!(!d.name||d.disabled||d.type==="file"||d.type==="submit"||d.type==="button"))if(d.type==="checkbox")s[d.name]||(s[d.name]=[]),d.checked&&s[d.name].push(d.value);else if(d.type==="radio")d.checked&&(s[d.name]=d.value);else if(d.type==="select-multiple"){s[d.name]=[];for(let f=0;f<d.options.length;f++)d.options[f].selected&&s[d.name].push(d.options[f].value)}else s[d.name]=d.value}return s}function V(r,i,s,h,m={}){const d=m.extraAttributes||[],f=m.onAttributeChange||null,p=m.onInit||null;function y(E){const v=E||document.body;O(v,r,i,s),p&&p(v)}return j(function(){const E=new MutationObserver(function(w){for(let S=0;S<w.length;S++){const _=w[S];if(_.type==="childList"){for(let x=0;x<_.addedNodes.length;x++){const k=_.addedNodes[x];k.nodeType===1&&(O(k,r,i,s),p&&p(k))}for(let x=0;x<_.removedNodes.length;x++){const k=_.removedNodes[x];if(k.nodeType===1){const t=r.indexOf("[")!==-1||r.indexOf(".")!==-1||r.indexOf("#")!==-1?r:"["+r+"]",n=Array.from(k.querySelectorAll(t));k.matches&&k.matches(t)&&n.push(k);for(let o=0;o<n.length;o++){const a=n[o];if(!document.contains(a)){const l=a[i];l&&typeof l.destroy=="function"&&l.destroy()}}}}}else _.type==="attributes"&&(f&&_.target[i]?f(_.target,_.attributeName):(O(_.target,r,i,s),p&&p(_.target)))}});let v=[];if(r.indexOf("[")!==-1){const w=/\[([\w-]+)/g;let S;for(;(S=w.exec(r))!==null;)v.push(S[1])}else v.push(r);E.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:v.concat(d)})},h),window[i]=y,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){y(document.body)}):y(document.body),y}const z={};function X(r,i){z[r]=i}function $(r){return z[r]||{ingress:i=>i,egress:i=>i}}const P={};function U(r,i){if(!r||typeof i!="object")return;const s=r.toLowerCase().split("-")[0];P[s]=i}function J(r){if(!r)return null;const i=r.toLowerCase().split("-")[0];return P[i]||null}U("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=X,window.lnCore.getDataMapper=$,window.lnCore.registerLocaleFallback=U,window.lnCore.getLocaleFallback=J,window.lnCore.fillTemplate=F,window.lnCore.fill=T,window.lnCore.lnFill=N,window.lnCore.renderList=B);function G(r){return(r||"").replace(/^#/,"")}function M(r){const i=r===void 0?location.hash:r,s={},h=G(i);if(!h)return s;const m=h.split("&");for(let d=0;d<m.length;d++){const f=m[d];if(!f)continue;const p=f.indexOf(":"),y=p>-1?f.slice(0,p):f,E=p>-1?f.slice(p+1):"";if(y)try{s[y]=decodeURIComponent(E)}catch{s[y]=E}}return s}function Y(r){if(!r)return null;const i=M();return r in i?i[r]:null}function Z(r,i){if(!r)return;const s=M();i==null?delete s[r]:s[r]=String(i);const m=Object.keys(s).map(function(d){const f=s[d];return f===""?d:d+":"+encodeURIComponent(f)}).join("&");G(location.hash)!==m&&(location.hash=m)}function ee(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=M,window.lnCore.hashGet=Y,window.lnCore.hashSet=Z,window.lnCore.hashLinkClick=ee);function te(r){return r=r||{},{sort:r.sort,filters:r.filters,search:r.search,offset:r.offset,limit:r.limit,queryGen:r.queryGen}}function R(r,i,s){const h=!r||!!r.initializationError;return i&&(s||h||!r.isLoaded)?"remote":r&&!r.initializationError?"store":"none"}class ne{constructor(){this._pending=new Map}wait(i){return i?this._pending.has(i)?Promise.reject(new Error(`Duplicate mutation requestId: ${i}`)):new Promise((s,h)=>{this._pending.set(i,{resolve:s,reject:h})}):Promise.reject(new Error("Mutation requestId is required"))}resolve(i){return this._settle(i,!1)}reject(i){return this._settle(i,!0)}close(i){const s=i||new Error("Mutation receipt registry closed");for(const h of this._pending.values())h.reject(s);this._pending.clear()}_settle(i,s){const h=i&&i.requestId;if(!h)return!1;const m=this._pending.get(h);return m?(this._pending.delete(h),s?m.reject(i.error||new Error("Store mutation failed")):m.resolve(i),!0):!1}}(function(){const r="data-ln-data-coordinator",i="lnDataCoordinator",s="lnCoordinator",h="data-ln-form-scope";if(window[i]!==void 0)return;const m=new Set;let d=!1,f=null,p=null,y=null;function E(){d||(d=!0,f=function(){c(document,"ln-data-store:online",{}),m.forEach(function(e){e._maybeSync()})},p=function(){c(document,"ln-data-store:offline",{})},y=function(){document.visibilityState==="visible"&&m.forEach(function(e){const t=e.findChildren(),n=t.store;n&&t.connector&&n.isInitialized&&!n.initializationError&&!n.isSyncing&&!e._noAutosync&&(!n.hasCache||e._isStale())&&n.forceSync()})},window.addEventListener("online",f),window.addEventListener("offline",p),document.addEventListener("visibilitychange",y))}function v(){d&&(m.size>0||(window.removeEventListener("online",f),window.removeEventListener("offline",p),document.removeEventListener("visibilitychange",y),f=null,p=null,y=null,d=!1))}function w(){try{return crypto.randomUUID()}catch{return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{const n=Math.random()*16|0;return(t==="x"?n:n&3|8).toString(16)})}}const S=["ln-api-connector","ln-couchdb-connector"];function _(e){return this.dom=e,this._name=e.getAttribute(r),e[i]=this,e[s]=this,this.mapper=null,this._handlers=null,this._boundQueries=new WeakMap,this._boundDelivered=new WeakMap,this._mutationReceipts=new ne,this._dict=W(e,"data-ln-data-coordinator-dict"),this._parseStaleAttributes(),this.refreshMapper(),x(this),m.add(this),E(),this._checkInitialSync(),this}_.prototype._parseStaleAttributes=function(){const t=this.findChildren().storeEl,n=this.dom.getAttribute("data-ln-data-coordinator-stale")||(t?t.getAttribute("data-ln-data-store-stale"):null),o=parseInt(n,10);this._staleThreshold=n==="never"||n==="-1"?-1:isNaN(o)?300:o;const a=this.dom.hasAttribute("data-ln-data-coordinator-no-autosync")||(t?t.hasAttribute("data-ln-data-store-no-autosync"):!1);this._noAutosync=!!a},_.prototype._isStale=function(){if(this._staleThreshold===-1)return!1;const t=this.findChildren().store;return!t||!t.lastSyncedAt?!0:Date.now()/1e3-t.lastSyncedAt>this._staleThreshold},_.prototype._maybeSync=function(){const e=this.findChildren(),t=e.store;!t||t.initializationError||!e.connector||this._noAutosync||!t.isInitialized||t.isSyncing||(!t.hasCache||this._isStale())&&t.forceSync()},_.prototype._checkInitialSync=function(){const e=this,n=this.findChildren().store;n&&Promise.resolve(n.ready).then(function(){const o=e.findChildren(),a=o.store;if(a&&a.initializationError){e._reportReconciliationError("store-initialize",a.initializationError,null);return}!a||!o.connector||e._noAutosync||a.isSyncing||(!a.hasCache||e._isStale())&&a.forceSync()}).catch(function(o){e._reportReconciliationError("store-initialize",o,null)})},_.prototype.refreshMapper=function(){this.mapper=null,this.dom.querySelector("script[data-ln-mapper]")&&console.error("[ln-data-coordinator] Security Error: Inline script mappers using <script data-ln-mapper> are deprecated and disabled due to XSS vulnerability risks (unsafe-eval). Please register your mappers securely via window.lnCore.registerDataMapper() instead.");const t=this.dom.getAttribute("data-ln-data-mapper")||this.dom.getAttribute("data-ln-data-coordinator");t&&window.lnCore&&typeof window.lnCore.getDataMapper=="function"&&(this.mapper=window.lnCore.getDataMapper(t)),this.mapper||(this.mapper={}),typeof this.mapper.ingress!="function"&&(this.mapper.ingress=function(n){return n}),typeof this.mapper.egress!="function"&&(this.mapper.egress=function(n){return n})},_.prototype.findChildren=function(){const e=this.dom.querySelector("[data-ln-data-store]"),t=this.dom.querySelector("[data-ln-api-connector], [data-ln-couchdb-connector], [data-ln-websocket-connector], [data-ln-rest-connector]"),n=this.dom.querySelector("[data-ln-api-queue]");return{storeEl:e,connectorEl:t,queueEl:n,store:e?e.lnDataStore||e.lnStore:null,connector:t?t.lnConnector||t.lnApiConnector||t.lnCouchDbConnector:null,queue:n?n.lnApiQueue:null}},_.prototype._handleSubmitRecord=function(e){const t=this.findChildren();if(!t.storeEl){console.warn('[ln-data-coordinator] form submit claimed but no [data-ln-data-store] child found in "'+(this._name||"")+'"');return}const n=e.data||{},o=n.id,a=n.expected_version,l=Object.assign({},n);delete l.id,delete l.expected_version;const u=e.method.toUpperCase();u==="POST"?this._fanOutCreate(t,l,e.action):(u==="PUT"||u==="PATCH")&&this._fanOutUpdate(t,o,l,a,e.action)},_.prototype._fanOutCreate=function(e,t,n){this.refreshMapper();const o="_temp_"+w();c(e.storeEl,"ln-data-store:request-create",{tempId:o,data:t}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:o,op:"create",targetId:null,payload:this.mapper.egress(t),expectedVersion:null,meta:{tempId:o,action:n}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-create",{data:this.mapper.egress(t),url:n,meta:{entryId:w(),queued:!1,op:"create",tempId:o}})},_.prototype._fanOutUpdate=function(e,t,n,o,a){this.refreshMapper(),c(e.storeEl,"ln-data-store:request-update",{id:t,data:n}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:t,op:"update",targetId:t,payload:this.mapper.egress(n),expectedVersion:o,meta:{id:t,action:a}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-update",{id:t,data:this.mapper.egress(n),expected_version:o,url:a,meta:{entryId:w(),queued:!1,op:"update",id:t}})},_.prototype._fanOutDelete=function(e,t){this.refreshMapper(),c(e.storeEl,"ln-data-store:request-delete",{id:t}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:t,op:"delete",targetId:t,payload:null,expectedVersion:null,meta:{id:t}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-delete",{id:t,meta:{entryId:w(),queued:!1,op:"delete",id:t}})},_.prototype._fanOutBulkDelete=function(e,t){this.refreshMapper();const n=t.join(",");c(e.storeEl,"ln-data-store:request-bulk-delete",{ids:t}),e.queue?c(e.queueEl,"ln-api-queue:request-enqueue",{chainKey:n,op:"bulk-delete",targetId:null,payload:{ids:t},expectedVersion:null,meta:{bulkKey:n,ids:t}}):e.connector&&c(e.connectorEl,"ln-api-connector:request-bulk-delete",{ids:t,meta:{entryId:w(),queued:!1,op:"bulk-delete",bulkKey:n}})},_.prototype._toastFromMessage=function(e){e&&window.dispatchEvent(new CustomEvent("ln-toast:enqueue",{detail:{type:e.type||"success",title:e.title||"",message:e.body||""}}))},_.prototype._toastFromDict=function(e){const t=this._dict[e];t&&window.dispatchEvent(new CustomEvent("ln-toast:enqueue",{detail:{type:"error",title:"",message:t}}))},_.prototype._requestStoreMutation=function(e,t,n){const o=e.storeEl;if(!o)return Promise.reject(new Error("Store element not found"));const a=w(),l=this._mutationReceipts.wait(a);try{c(o,"ln-data-store:request-"+t,Object.assign({},n,{requestId:a}))}catch(u){this._mutationReceipts.reject({requestId:a,error:u})}return l},_.prototype._reportReconciliationError=function(e,t,n){c(this.dom,"ln-data-coordinator:error",{operation:e,error:t,meta:n||null})};function x(e){e._handlers={sync:function(t){e.refreshMapper();const n=e.findChildren();if(!n.store||!n.connector){console.warn("[ln-data-coordinator] Cannot sync: store or connector not found in subtree");return}c(n.connectorEl,"ln-api-connector:request-sync",{since:t.detail.since,meta:{op:"sync"}})},reqCreate:function(t){const n=e.findChildren();n.storeEl&&e._fanOutCreate(n,t.detail.data||{},t.detail.action)},reqUpdate:function(t){const n=e.findChildren();n.storeEl&&e._fanOutUpdate(n,t.detail.id,t.detail.data||{},t.detail.expected_version,t.detail.action)},reqDelete:function(t){const n=e.findChildren();n.storeEl&&e._fanOutDelete(n,t.detail.id)},reqBulkDelete:function(t){const n=e.findChildren();n.storeEl&&e._fanOutBulkDelete(n,t.detail.ids||[])},queueFailed:function(){e._toastFromDict("network")},queueSend:function(t){e.refreshMapper();const n=e.findChildren();if(!n.store||!n.connector||!n.queue)return;const o=t.detail||{},a=o.entryId,l=o.op,u=o.targetId,b=o.payload,g=o.expectedVersion,q=o.meta||{},C=q.action||null,A=o.idempotencyKey||a;l==="create"?c(n.connectorEl,"ln-api-connector:request-create",{data:b,url:C,idempotencyKey:A,meta:{entryId:a,queued:!0,op:"create",tempId:q.tempId}}):l==="update"?c(n.connectorEl,"ln-api-connector:request-update",{id:u,data:b,expected_version:g,url:C,idempotencyKey:A,meta:{entryId:a,queued:!0,op:"update",id:u}}):l==="delete"?c(n.connectorEl,"ln-api-connector:request-delete",{id:u,idempotencyKey:A,meta:{entryId:a,queued:!0,op:"delete",id:u}}):l==="bulk-delete"?c(n.connectorEl,"ln-api-connector:request-bulk-delete",{ids:b&&b.ids?b.ids:[],idempotencyKey:A,meta:{entryId:a,queued:!0,op:"bulk-delete",bulkKey:q.bulkKey}}):console.warn("[ln-data-coordinator] Unknown queue op:",l)},formSubmit:function(t){const n=t.target;if(t.defaultPrevented)return;const o=n.hasAttribute(h)?n.getAttribute(h):null;if(o===null)return;let a;if(o?a=o===e._name:a=n.closest("[data-ln-data-coordinator]")===e.dom,!a)return;const l=Q(n);if(l!=="POST"&&l!=="PUT"&&l!=="PATCH")return;t.preventDefault();const u=H(n);delete u._method,delete u._token,e._handleSubmitRecord({data:u,method:l,action:n.getAttribute("action")||""})},connFetched:function(t){const n=t.detail.meta||{},o=e.findChildren();e.refreshMapper();const a=t.detail.data;let l=[],u=[],b=null;Array.isArray(a)?(l=a,b=Math.floor(Date.now()/1e3)):a&&(l=Array.isArray(a.data)?a.data:[],u=Array.isArray(a.deleted)?a.deleted:[],b=a.synced_at!==void 0?a.synced_at:a.since!==void 0?a.since:null);const g=l.map(q=>e.mapper.ingress(q));if(o.store&&!o.store.initializationError)n.kind?n.kind==="table"||n.kind==="list"?o.store.applyQuery(g,{total:t.detail.total}).then(function(q){c(n.targetEl,"ln-"+n.kind+":set-loading",{loading:!1}),c(n.targetEl,"ln-"+n.kind+":set-data",{data:q,total:t.detail.total!==void 0?t.detail.total:q.length,filtered:t.detail.filtered!==void 0?t.detail.filtered:q.length,offset:t.detail.offset,queryGen:t.detail.queryGen}),e._boundDelivered.set(n.targetEl,!0)}):n.kind==="options"?o.store.applyQuery(g,{total:t.detail.total}).then(function(){return o.store.getAll({})}).then(function(q){c(n.targetEl,"ln-options:set-data",{data:q.data})}):n.kind==="stat"&&o.store.applyQuery(g,{total:t.detail.total}).then(function(){const q=t.detail.filtered!==void 0?t.detail.filtered:t.detail.total!==void 0?t.detail.total:g.length;c(n.targetEl,"ln-stat:set-count",{count:q})}):o.store.applySync(g,u,b||Math.floor(Date.now()/1e3),{total:t.detail.total,filtered:t.detail.filtered,offset:t.detail.offset,queryGen:t.detail.queryGen,targetEl:n.targetEl});else if(n.targetEl&&n.kind){if(n.kind==="table"||n.kind==="list")c(n.targetEl,"ln-"+n.kind+":set-loading",{loading:!1}),c(n.targetEl,"ln-"+n.kind+":set-data",{data:g,total:t.detail.total!==void 0?t.detail.total:g.length,filtered:t.detail.filtered!==void 0?t.detail.filtered:g.length,offset:t.detail.offset,queryGen:t.detail.queryGen}),e._boundDelivered.set(n.targetEl,!0);else if(n.kind==="options")c(n.targetEl,"ln-options:set-data",{data:g});else if(n.kind==="stat"){const q=t.detail.filtered!==void 0?t.detail.filtered:t.detail.total!==void 0?t.detail.total:g.length;c(n.targetEl,"ln-stat:set-count",{count:q})}}},connCreated:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{},a=e.mapper.ingress(t.detail.record);e._requestStoreMutation(n,"update",{id:o.tempId,data:a}).then(function(){e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:resolve-create",{entryId:o.entryId,oldKey:o.tempId,newId:a.id})}).catch(function(l){e._reportReconciliationError("create-reconcile",l,o)})},connUpdated:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{},a=e.mapper.ingress(t.detail.record);e._requestStoreMutation(n,"update",{id:o.id,data:a}).then(function(){e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:ack",{entryId:o.entryId})}).catch(function(l){e._reportReconciliationError("update-reconcile",l,o)})},connDeleted:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{};e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:ack",{entryId:o.entryId})},connBulkDeleted:function(t){const n=e.findChildren();if(!n.storeEl)return;const o=t.detail.meta||{};e._toastFromMessage(t.detail.message),o.queued&&n.queue&&c(n.queueEl,"ln-api-queue:ack",{entryId:o.entryId})},connError:function(t){const n=t.detail||{},o=n.meta||{},a=o.op||n.action,l=n.status||0,u=e.findChildren();if(a==="sync"){u.storeEl&&c(u.storeEl,"ln-data-store:request-sync-failed",{error:n.error,status:l}),console.error("[ln-data-coordinator] Sync failed:",n.error);return}if(a==="query"){o.targetEl&&o.kind&&(c(o.targetEl,"ln-"+o.kind+":set-loading",{loading:!1}),(o.kind==="table"||o.kind==="list")&&c(o.targetEl,"ln-"+o.kind+":page-failed",{offset:o.offset})),e._reportReconciliationError("query",n.error||n,o);return}if(!u.storeEl)return;const b=l===401||l===419,g=l===0||l>=500,q=l===409;if(b){e._toastFromDict("auth"),o.queued&&u.queue&&c(u.queueEl,"ln-api-queue:nack",{entryId:o.entryId,reason:"auth"});return}if(g){o.queued&&u.queue?c(u.queueEl,"ln-api-queue:nack",{entryId:o.entryId,reason:"retry"}):e._toastFromDict("network");return}let C=Promise.resolve();if(q&&a==="update"){const A=n.data&&n.data.remote?e.mapper.ingress(n.data.remote):null;A&&(C=e._requestStoreMutation(u,"update",{id:o.id,data:A})),e._toastFromDict("conflict")}else a==="create"&&(C=e._requestStoreMutation(u,"delete",{id:o.tempId})),e._toastFromDict("rejected");o.queued&&u.queue?C.then(function(){c(u.queueEl,"ln-api-queue:nack",{entryId:o.entryId,reason:"drop"})}).catch(function(A){e._reportReconciliationError("deterministic-reconcile",A,o)}):C.catch(function(A){e._reportReconciliationError("deterministic-reconcile",A,o)})},storeInitialized:function(t){const n=e.findChildren(),o=n.store;if(!o||o.initializationError||!n.connector||e._noAutosync||o.isSyncing)return;(t.detail||{}).hasCache?e._isStale()&&o.forceSync():o.forceSync()},reqTableData:function(t){e._serveData(t,"table")},reqListData:function(t){e._serveData(t,"list")},reqOptions:function(t){e._serveOptions(t)},reqStat:function(t){e._serveStat(t)},refresh:function(t){e._mutationReceipts.resolve(t.detail),e._refreshAll()},mutationError:function(t){e._mutationReceipts.reject(t.detail)},refreshSynced:function(t){t.detail&&t.detail.changed&&e._refreshAll(t.detail.meta)}},e.dom.addEventListener("ln-data-store:request-remote-sync",e._handlers.sync),e.dom.addEventListener("ln-data-coordinator:request-create",e._handlers.reqCreate),e.dom.addEventListener("ln-data-coordinator:request-update",e._handlers.reqUpdate),e.dom.addEventListener("ln-data-coordinator:request-delete",e._handlers.reqDelete),e.dom.addEventListener("ln-data-coordinator:request-bulk-delete",e._handlers.reqBulkDelete),e.dom.addEventListener("ln-api-queue:send",e._handlers.queueSend),e.dom.addEventListener("ln-api-queue:failed",e._handlers.queueFailed),e.dom.addEventListener("ln-data-store:initialized",e._handlers.storeInitialized),document.addEventListener("submit",e._handlers.formSubmit),S.forEach(function(t){e.dom.addEventListener(t+":fetched",e._handlers.connFetched),e.dom.addEventListener(t+":created",e._handlers.connCreated),e.dom.addEventListener(t+":updated",e._handlers.connUpdated),e.dom.addEventListener(t+":deleted",e._handlers.connDeleted),e.dom.addEventListener(t+":bulk-deleted",e._handlers.connBulkDeleted),e.dom.addEventListener(t+":error",e._handlers.connError)}),document.addEventListener("ln-table:request-data",e._handlers.reqTableData),document.addEventListener("ln-list:request-data",e._handlers.reqListData),document.addEventListener("ln-options:request-data",e._handlers.reqOptions),document.addEventListener("ln-stat:request-count",e._handlers.reqStat),e.dom.addEventListener("ln-data-store:ready",e._handlers.refresh),e.dom.addEventListener("ln-data-store:created",e._handlers.refresh),e.dom.addEventListener("ln-data-store:updated",e._handlers.refresh),e.dom.addEventListener("ln-data-store:deleted",e._handlers.refresh),e.dom.addEventListener("ln-data-store:mutation-error",e._handlers.mutationError),e.dom.addEventListener("ln-data-store:synced",e._handlers.refreshSynced)}_.prototype._ownsStore=function(e){const t=this.findChildren();return!!(t.store&&t.store._name===e&&e||this._name===e&&e)},_.prototype._serveData=function(e,t){const n=e.target,o=t==="table"?"data-ln-table-store":"data-ln-list-store",a=n.getAttribute(o)||n.getAttribute("data-ln-table-source")||n.getAttribute("data-ln-list-source");if(!a||!this._ownsStore(a))return;const l=e.detail||{},u=te(l);this._boundQueries.set(n,u);const b=this.findChildren(),g=this,q=l.offset!=null,C=b.store;return(C&&C.ready?C.ready:Promise.resolve()).then(function(){const L=R(C,b.connector,q);if(L==="remote"){c(n,"ln-"+t+":set-loading",{loading:!0}),c(b.connectorEl,"ln-api-connector:request-query",{query:u,meta:{targetEl:n,kind:t,offset:u.offset,limit:u.limit}});return}if(L!=="store"){c(n,"ln-"+t+":set-loading",{loading:!1});return}return C.getAll(u).then(function(D){const re={data:D.data,total:D.total,filtered:D.filtered,offset:l.offset!==void 0?l.offset:D.offset,queryGen:l.queryGen!==void 0?l.queryGen:D.queryGen};c(n,"ln-"+t+":set-data",re),g._boundDelivered.set(n,!0)})}).catch(function(L){c(n,"ln-"+t+":set-loading",{loading:!1}),c(g.dom,"ln-data-coordinator:error",{operation:"query",kind:t,store:a,target:n,error:L})})},_.prototype._serveOptions=function(e){const t=e.target,n=t.getAttribute("data-ln-options");if(!this._ownsStore(n))return;const o=this.findChildren(),a=o.store,l=a&&a.ready?a.ready:Promise.resolve(),u=this;return l.then(function(){const b=R(a,o.connector,!1);if(b==="remote"){c(o.connectorEl,"ln-api-connector:request-query",{query:{},meta:{targetEl:t,kind:"options"}});return}if(b==="store")return a.getAll({}).then(function(g){c(t,"ln-options:set-data",{data:g.data})})}).catch(function(b){u._reportReconciliationError("options-query",b,{targetEl:t,kind:"options"})})},_.prototype._serveStat=function(e){const t=e.target,n=t.getAttribute("data-ln-stat");if(!this._ownsStore(n))return;const o=e.detail&&e.detail.filters?e.detail.filters:null,a=this.findChildren(),l=a.store,u=l&&l.ready?l.ready:Promise.resolve(),b=this;return u.then(function(){const g=R(l,a.connector,!1);if(g==="remote"){c(a.connectorEl,"ln-api-connector:request-query",{query:{filters:o},meta:{targetEl:t,kind:"stat"}});return}if(g==="store")return l.count(o).then(function(q){c(t,"ln-stat:set-count",{count:q})})}).catch(function(g){b._reportReconciliationError("stat-query",g,{targetEl:t,kind:"stat"})})},_.prototype._refreshAll=function(e){const t=this,n=document.querySelectorAll("[data-ln-table-store],[data-ln-list-store],[data-ln-options],[data-ln-stat]");for(let o=0;o<n.length;o++){const a=n[o];let l,u;if(a.hasAttribute("data-ln-table-store")?(l=a.getAttribute("data-ln-table-store"),u="table"):a.hasAttribute("data-ln-list-store")?(l=a.getAttribute("data-ln-list-store"),u="list"):a.hasAttribute("data-ln-options")?(l=a.getAttribute("data-ln-options"),u="options"):a.hasAttribute("data-ln-stat")&&(l=a.getAttribute("data-ln-stat"),u="stat"),!this._ownsStore(l))continue;const b=this.findChildren().store;if(u==="table"||u==="list"){const g=u==="table"?"data-ln-table-window":"data-ln-list-window";if(a.hasAttribute(g)){c(a,"ln-"+u+":request-revalidate",{});continue}const q=t._boundQueries.get(a)||{sort:null,filters:{},search:""};(function(C,A){b.getAll(q).then(function(L){const D={data:L.data,total:e&&e.total!==void 0?e.total:L.total,filtered:e&&e.filtered!==void 0?e.filtered:L.filtered,offset:e&&e.offset!==void 0?e.offset:q.offset,queryGen:e&&e.queryGen!==void 0?e.queryGen:q.queryGen};c(C,"ln-"+A+":set-loading",{loading:!1}),c(C,"ln-"+A+":set-data",D),t._boundDelivered.set(C,!0)})})(a,u)}else if(u==="options")(function(g){b.getAll({}).then(function(q){c(g,"ln-options:set-data",{data:q.data})})})(a);else if(u==="stat"){const g=a.getAttribute("data-ln-stat-filter");let q=null;if(g){const C=g.indexOf(":");if(C!==-1){const A=g.slice(0,C),L=g.slice(C+1);q={},q[A]=[L]}}(function(C,A){b.count(A).then(function(L){c(C,"ln-stat:set-count",{count:L})})})(a,q)}}},_.prototype.destroy=function(){if(!this.dom[i])return;const e=this;e._handlers&&(e.dom.removeEventListener("ln-data-store:request-remote-sync",e._handlers.sync),e.dom.removeEventListener("ln-data-coordinator:request-create",e._handlers.reqCreate),e.dom.removeEventListener("ln-data-coordinator:request-update",e._handlers.reqUpdate),e.dom.removeEventListener("ln-data-coordinator:request-delete",e._handlers.reqDelete),e.dom.removeEventListener("ln-data-coordinator:request-bulk-delete",e._handlers.reqBulkDelete),e.dom.removeEventListener("ln-api-queue:send",e._handlers.queueSend),e.dom.removeEventListener("ln-api-queue:failed",e._handlers.queueFailed),e.dom.removeEventListener("ln-data-store:initialized",e._handlers.storeInitialized),document.removeEventListener("submit",e._handlers.formSubmit),S.forEach(function(t){e.dom.removeEventListener(t+":fetched",e._handlers.connFetched),e.dom.removeEventListener(t+":created",e._handlers.connCreated),e.dom.removeEventListener(t+":updated",e._handlers.connUpdated),e.dom.removeEventListener(t+":deleted",e._handlers.connDeleted),e.dom.removeEventListener(t+":bulk-deleted",e._handlers.connBulkDeleted),e.dom.removeEventListener(t+":error",e._handlers.connError)}),document.removeEventListener("ln-table:request-data",e._handlers.reqTableData),document.removeEventListener("ln-list:request-data",e._handlers.reqListData),document.removeEventListener("ln-options:request-data",e._handlers.reqOptions),document.removeEventListener("ln-stat:request-count",e._handlers.reqStat),e.dom.removeEventListener("ln-data-store:ready",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:created",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:updated",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:deleted",e._handlers.refresh),e.dom.removeEventListener("ln-data-store:mutation-error",e._handlers.mutationError),e.dom.removeEventListener("ln-data-store:synced",e._handlers.refreshSynced),e._handlers=null),e._boundQueries=null,e._boundDelivered=null,e._mutationReceipts.close(new Error("Data coordinator destroyed")),e._mutationReceipts=null,m.delete(this),v(),delete this.dom[i],delete this.dom[s]};function k(e,t){const n=e[i];n&&t==="data-ln-data-mapper"&&n.refreshMapper()}V(r,i,_,"ln-data-coordinator",{extraAttributes:["data-ln-data-mapper"],onAttributeChange:k})})()})();
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export function normalizeDataQuery(detail) {
|
|
2
|
-
detail = detail || {};
|
|
3
|
-
return {
|
|
4
|
-
sort: detail.sort,
|
|
5
|
-
filters: detail.filters,
|
|
6
|
-
search: detail.search,
|
|
7
|
-
offset: detail.offset,
|
|
8
|
-
limit: detail.limit,
|
|
9
|
-
queryGen: detail.queryGen
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function selectDataSource(store, connector, isWindowed) {
|
|
14
|
-
const storeUnavailable = !store || !!store.initializationError;
|
|
15
|
-
if (connector && (isWindowed || storeUnavailable || !store.isLoaded)) return 'remote';
|
|
16
|
-
if (store && !store.initializationError) return 'store';
|
|
17
|
-
return 'none';
|
|
18
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const n=console.warn;console.warn=function(...o){typeof o[0]=="string"&&(o[0].startsWith("[ln-")||o[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||n.apply(console,o)}}const U={};function at(n,o){U[n]||(U[n]=document.querySelector('[data-ln-template="'+n+'"]'));const l=U[n];return l?l.content.cloneNode(!0):(console.warn("["+(o||"ln-core")+'] Template "'+n+'" not found'),null)}function C(n,o,l){n.dispatchEvent(new CustomEvent(o,{bubbles:!0,detail:l||{}}))}function H(n,o){if(!n||!o)return n;const l=n.querySelectorAll("[data-ln-field]");for(let s=0;s<l.length;s++){const u=l[s],d=u.getAttribute("data-ln-field");o[d]!=null&&(u.textContent=o[d])}const f=n.querySelectorAll("[data-ln-attr]");for(let s=0;s<f.length;s++){const u=f[s],d=u.getAttribute("data-ln-attr").split(",");for(let p=0;p<d.length;p++){const _=d[p].trim().split(":");if(_.length!==2)continue;const b=_[0].trim(),g=_[1].trim();o[g]!=null&&u.setAttribute(b,o[g])}}const m=n.querySelectorAll("[data-ln-show]");for(let s=0;s<m.length;s++){const u=m[s],d=u.getAttribute("data-ln-show");d in o&&u.classList.toggle("hidden",!o[d])}const h=n.querySelectorAll("[data-ln-class]");for(let s=0;s<h.length;s++){const u=h[s],d=u.getAttribute("data-ln-class").split(",");for(let p=0;p<d.length;p++){const _=d[p].trim().split(":");if(_.length!==2)continue;const b=_[0].trim(),g=_[1].trim();g in o&&u.classList.toggle(b,!!o[g])}}return n}function st(n,o){n.matches&&n.matches("[data-ln-form], [data-ln-fillable]")&&n.dispatchEvent(new CustomEvent("ln-fill",{detail:o??null,bubbles:!0}));const l=n.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let f=0;f<l.length;f++)l[f].dispatchEvent(new CustomEvent("ln-fill",{detail:o??null,bubbles:!0}));return n}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore._fillBound||(window.lnCore._fillBound=!0,document.addEventListener("ln-fill",function(n){if(!(!n.target.matches||!n.target.matches("[data-ln-fillable]")))if(n.detail)H(n.target,n.detail);else{const o=n.target.querySelectorAll("[data-ln-field]");for(let l=0;l<o.length;l++)o[l].textContent=""}})));function Q(n,o){if(!n||!o)return n;const l=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;l.nextNode();){const h=l.currentNode;h.textContent.indexOf("{{")!==-1&&(h.textContent=h.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(s,u){return o[u]!==void 0?o[u]:""}))}const f=function(h,s){return o[s]!==void 0?o[s]:""},m=Array.from(n.querySelectorAll("*"));n.nodeType===1&&m.push(n);for(let h=0;h<m.length;h++){const s=m[h],u=s.attributes;for(let d=0;d<u.length;d++){const p=u[d];p.value.indexOf("{{")!==-1&&s.setAttribute(p.name,p.value.replace(/\{\{\s*(\w+)\s*\}\}/g,f))}}return n}function lt(n,o,l,f,m,h){const s={};for(let d=0;d<n.children.length;d++){const p=n.children[d],_=p.getAttribute("data-ln-key");_&&(s[_]=p)}const u=document.createDocumentFragment();for(let d=0;d<o.length;d++){const p=o[d],_=String(f(p));let b=s[_];if(b)m(b,p,d);else{const g=at(l,h);if(!g||(Q(g,p),b=g.firstElementChild,!b))continue;b.setAttribute("data-ln-key",_),m(b,p,d)}u.appendChild(b)}n.textContent="",n.appendChild(u)}function V(n,o){if(!document.body){document.addEventListener("DOMContentLoaded",function(){V(n,o)}),console.warn("["+o+'] Script loaded before <body> — add "defer" to your <script> tag');return}n()}function F(n,o,l,f){if(n.nodeType!==1)return;const h=o.indexOf("[")!==-1||o.indexOf(".")!==-1||o.indexOf("#")!==-1?o:"["+o+"]",s=Array.from(n.querySelectorAll(h));n.matches&&n.matches(h)&&s.push(n);for(const u of s)u[l]||(u[l]=new f(u))}function ct(n,o,l,f,m={}){const h=m.extraAttributes||[],s=m.onAttributeChange||null,u=m.onInit||null;function d(p){const _=p||document.body;F(_,n,o,l),u&&u(_)}return V(function(){const p=new MutationObserver(function(b){for(let g=0;g<b.length;g++){const v=b[g];if(v.type==="childList"){for(let k=0;k<v.addedNodes.length;k++){const S=v.addedNodes[k];S.nodeType===1&&(F(S,n,o,l),u&&u(S))}for(let k=0;k<v.removedNodes.length;k++){const S=v.removedNodes[k];if(S.nodeType===1){const q=n.indexOf("[")!==-1||n.indexOf(".")!==-1||n.indexOf("#")!==-1?n:"["+n+"]",D=Array.from(S.querySelectorAll(q));S.matches&&S.matches(q)&&D.push(S);for(let R=0;R<D.length;R++){const T=D[R];if(!document.contains(T)){const M=T[o];M&&typeof M.destroy=="function"&&M.destroy()}}}}}else v.type==="attributes"&&(s&&v.target[o]?s(v.target,v.attributeName):(F(v.target,n,o,l),u&&u(v.target)))}});let _=[];if(n.indexOf("[")!==-1){const b=/\[([\w-]+)/g;let g;for(;(g=b.exec(n))!==null;)_.push(g[1])}else _.push(n);p.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:_.concat(h)})},f),window[o]=d,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){d(document.body)}):d(document.body),d}const J={};function ut(n,o){J[n]=o}function dt(n){return J[n]||{ingress:o=>o,egress:o=>o}}const X={};function Y(n,o){if(!n||typeof o!="object")return;const l=n.toLowerCase().split("-")[0];X[l]=o}function ht(n){if(!n)return null;const o=n.toLowerCase().split("-")[0];return X[o]||null}Y("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=ut,window.lnCore.getDataMapper=dt,window.lnCore.registerLocaleFallback=Y,window.lnCore.getLocaleFallback=ht,window.lnCore.fillTemplate=Q,window.lnCore.fill=H,window.lnCore.lnFill=st,window.lnCore.renderList=lt);function Z(n){return(n||"").replace(/^#/,"")}function W(n){const o=n===void 0?location.hash:n,l={},f=Z(o);if(!f)return l;const m=f.split("&");for(let h=0;h<m.length;h++){const s=m[h];if(!s)continue;const u=s.indexOf(":"),d=u>-1?s.slice(0,u):s,p=u>-1?s.slice(u+1):"";if(d)try{l[d]=decodeURIComponent(p)}catch{l[d]=p}}return l}function ft(n){if(!n)return null;const o=W();return n in o?o[n]:null}function mt(n,o){if(!n)return;const l=W();o==null?delete l[n]:l[n]=String(o);const m=Object.keys(l).map(function(h){const s=l[h];return s===""?h:h+":"+encodeURIComponent(s)}).join("&");Z(location.hash)!==m&&(location.hash=m)}function pt(n){return n.button===1||n.ctrlKey||n.metaKey||n.shiftKey?!1:(n.preventDefault(),!0)}typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.hashParse=W,window.lnCore.hashGet=ft,window.lnCore.hashSet=mt,window.lnCore.hashLinkClick=pt);let P=null;async function tt(n){if(!n){P=null;return}try{const o=new TextEncoder,l=await crypto.subtle.digest("SHA-256",o.encode(n));P=await crypto.subtle.importKey("raw",l,{name:"AES-GCM"},!1,["encrypt","decrypt"])}catch(o){console.error("[ln-core/crypto] Key derivation failed:",o),P=null}}function B(){return P}async function yt(n,o=P){const l=o||P;if(!l||n===void 0||n===null)return n;try{const f=new TextEncoder,m=crypto.getRandomValues(new Uint8Array(12)),h=typeof n=="string"?n:JSON.stringify(n),s=await crypto.subtle.encrypt({name:"AES-GCM",iv:m},l,f.encode(h)),u=btoa(String.fromCharCode(...m)),d=btoa(String.fromCharCode(...new Uint8Array(s)));return{encrypted:!0,iv:u,data:d}}catch(f){return console.error("[ln-core/crypto] Encryption failed:",f),n}}async function _t(n,o=P){const l=o||P;if(!n||!n.encrypted||!l)return n;try{const f=new TextDecoder,m=Uint8Array.from(atob(n.iv),d=>d.charCodeAt(0)),h=Uint8Array.from(atob(n.data),d=>d.charCodeAt(0)),s=await crypto.subtle.decrypt({name:"AES-GCM",iv:m},l,h),u=f.decode(s);try{return JSON.parse(u)}catch{return u}}catch(f){return console.error("[ln-core/crypto] Decryption failed. Key may be incorrect:",f),{...n,decryptionError:!0}}}(function(){const n="data-ln-data-store",o="lnDataStore";if(window[o]!==void 0)return;const l="ln_app_cache",f="_meta",m="1.0";let h=null,s=null;const u={};function d(t){t&&t.name==="QuotaExceededError"&&C(document,"ln-data-store:quota-exceeded",{error:t})}function p(){const t={};for(const e of document.querySelectorAll(`[${n}]`)){const r=e.getAttribute(n);if(r){const a=e.getAttribute("data-ln-data-store-indexes")||"";t[r]={indexes:a.split(",").map(i=>i.trim()).filter(Boolean)}}}return t}function _(){return s||(s=new Promise(t=>{if(typeof indexedDB>"u")return console.warn("[ln-data-store] IndexedDB not available — falling back to in-memory store"),t(null);const e=p(),r=Object.keys(e),a=indexedDB.open(l);a.onerror=()=>{console.warn("[ln-data-store] IndexedDB open failed — falling back to in-memory store"),t(null)},a.onsuccess=i=>{const c=i.target.result,y=Array.from(c.objectStoreNames);if(!(!y.includes(f)||r.some(N=>!y.includes(N))))return b(c),h=c,t(c);const A=c.version;c.close();const x=indexedDB.open(l,A+1);x.onblocked=()=>{console.warn("[ln-data-store] Database upgrade blocked — waiting for other tabs to close connection")},x.onerror=()=>{console.warn("[ln-data-store] Database upgrade failed"),t(null)},x.onupgradeneeded=N=>{const O=N.target.result;O.objectStoreNames.contains(f)||O.createObjectStore(f,{keyPath:"key"});for(const $ of r)if(!O.objectStoreNames.contains($)){const Bt=O.createObjectStore($,{keyPath:"id"});for(const it of e[$].indexes)Bt.createIndex(it,it,{unique:!1})}},x.onsuccess=N=>{const O=N.target.result;b(O),h=O,t(O)}}}),s)}function b(t){t.onversionchange=()=>{t.close(),h=null,s=null}}function g(){return h?Promise.resolve(h):(s=null,_())}async function v(t){if(!B()||!t)return t;const e={...t},r=e.id,a=await yt(e);return!a||!a.encrypted?t:{id:r,encrypted:!0,iv:a.iv,data:a.data}}async function k(t){return!t||!t.encrypted||!B()?t:_t(t)}const S=(t,e)=>g().then(r=>r?r.transaction(t,e).objectStore(t):null);function L(t){return new Promise((e,r)=>{t.onsuccess=()=>e(t.result),t.onerror=()=>{d(t.error),r(t.error)}})}const q=t=>S(t,"readonly").then(e=>e?L(e.getAll()):[]).then(e=>B()?Promise.all(e.map(r=>k(r))):e),D=(t,e)=>S(t,"readonly").then(r=>r?L(r.get(e)):null).then(r=>r?k(r):null),R=(t,e)=>(B()?v(e):Promise.resolve(e)).then(a=>S(t,"readwrite").then(i=>i?L(i.put(a)):null)),T=(t,e)=>S(t,"readwrite").then(r=>r?L(r.delete(e)):null),M=t=>S(t,"readwrite").then(e=>e?L(e.clear()):null),j=t=>S(t,"readonly").then(e=>e?L(e.count()):0),gt=t=>S(f,"readonly").then(e=>e?L(e.get(t)):null),I=(t,e)=>S(f,"readwrite").then(r=>{if(r)return e.key=t,L(r.put(e))});function E(t){this.dom=t,this._name=t.getAttribute(n);const e=t.getAttribute("data-ln-data-store-stale"),r=parseInt(e,10);this._staleThreshold=e==="never"||e==="-1"?-1:isNaN(r)?300:r;const a=t.getAttribute("data-ln-data-store-search-fields")||"";return this._searchFields=a.split(",").map(i=>i.trim()).filter(Boolean),this._handlers=null,this.isLoaded=!1,this.isInitialized=!1,this.initializationError=null,this.hasCache=!1,this.isSyncing=!1,this.lastSyncedAt=null,this.totalCount=0,this.presenters=null,this._mutationChain=Promise.resolve(),u[this._name]=this,wt(this),this.ready=xt(this),this}function wt(t){t._handlers={create:e=>z(t,"create",e.detail,()=>Ct(t,e.detail)),update:e=>z(t,"update",e.detail,()=>bt(t,e.detail)),delete:e=>z(t,"delete",e.detail,()=>St(t,e.detail)),"bulk-delete":e=>z(t,"bulk-delete",e.detail,()=>At(t,e.detail)),"sync-failed":e=>{t.isSyncing=!1,C(t.dom,"ln-data-store:sync-error",{store:t._name,error:e.detail&&e.detail.error,status:e.detail&&e.detail.status})}};for(const[e,r]of Object.entries(t._handlers))t.dom.addEventListener(`ln-data-store:request-${e}`,r)}function z(t,e,r,a){const i=r&&r.requestId;return t._mutationChain=t._mutationChain.then(()=>t.ready).then(()=>{if(t.initializationError)throw t.initializationError;return a()}).catch(c=>vt(t,e,i,c)),t._mutationChain}function K(t){return j(t._name).then(e=>(t.totalCount=e,t.hasCache=!0,t.isLoaded=!0,I(t._name,{schema_version:m,last_synced_at:t.lastSyncedAt,has_cache:!0,record_count:e})))}function Ct(t,{tempId:e,data:r={},requestId:a}={}){const i={...r,id:e};return R(t._name,i).then(()=>K(t)).then(()=>{C(t.dom,"ln-data-store:created",{store:t._name,record:i,tempId:e,requestId:a})})}function bt(t,{id:e,data:r={},requestId:a}={}){return D(t._name,e).then(i=>{if(!i)throw new Error(`Record not found: ${e}`);const c={...i,...r},y=r.id;return(y!==void 0&&y!==e?Et(t._name,e,c):R(t._name,c)).then(()=>K(t)).then(()=>{C(t.dom,"ln-data-store:updated",{store:t._name,record:c,previous:i,requestId:a})})})}function St(t,{id:e,requestId:r}={}){return D(t._name,e).then(a=>{if(!a){C(t.dom,"ln-data-store:deleted",{store:t._name,id:e,requestId:r,missing:!0});return}return T(t._name,e).then(()=>K(t)).then(()=>{C(t.dom,"ln-data-store:deleted",{store:t._name,id:e,requestId:r})})})}function At(t,{ids:e=[],requestId:r}={}){return e.length?Promise.all(e.map(a=>D(t._name,a))).then(a=>{const i=a.filter(Boolean).map(c=>c.id);return rt(t._name,i).then(()=>K(t)).then(()=>{C(t.dom,"ln-data-store:deleted",{store:t._name,ids:i,requestId:r})})}):(C(t.dom,"ln-data-store:deleted",{store:t._name,ids:[],requestId:r}),Promise.resolve())}function vt(t,e,r,a){console.error("[ln-data-store] "+e+" failed:",a),C(t.dom,"ln-data-store:mutation-error",{store:t._name,action:e,requestId:r,error:a})}function xt(t){return _().then(e=>{if(!e)throw new Error("IndexedDB is unavailable");return gt(t._name)}).then(e=>{if(t.initializationError=null,e&&e.schema_version===m)t.lastSyncedAt=e.last_synced_at||null,t.totalCount=e.record_count||0,t.hasCache=e.has_cache===!0||t.totalCount>0,t.hasCache&&(t.isLoaded=!0,C(t.dom,"ln-data-store:ready",{store:t._name,count:t.totalCount,source:"cache"})),t.isInitialized=!0,C(t.dom,"ln-data-store:initialized",{store:t._name,hasCache:t.hasCache,lastSyncedAt:t.lastSyncedAt,count:t.totalCount});else{if(e&&e.schema_version!==m)return M(t._name).then(()=>I(t._name,{schema_version:m,last_synced_at:null,has_cache:!1,record_count:0})).then(()=>{t.isInitialized=!0,t.hasCache=!1,C(t.dom,"ln-data-store:initialized",{store:t._name,hasCache:!1,lastSyncedAt:null,count:0})});t.isInitialized=!0,t.hasCache=!1,C(t.dom,"ln-data-store:initialized",{store:t._name,hasCache:!1,lastSyncedAt:null,count:0})}}).catch(e=>(t.isInitialized=!0,t.isLoaded=!1,t.hasCache=!1,t.isSyncing=!1,t.initializationError=e,C(t.dom,"ln-data-store:initialization-error",{store:t._name,error:e}),{ok:!1,error:e}))}function et(t){t.isSyncing=!0,C(t.dom,"ln-data-store:request-remote-sync",{since:t.lastSyncedAt})}function nt(t,e){return g().then(r=>r?(B()?Promise.all(e.map(i=>v(i))):Promise.resolve(e)).then(i=>new Promise((c,y)=>{const w=r.transaction(t,"readwrite"),A=w.objectStore(t);i.forEach(x=>A.put(x)),w.oncomplete=()=>c(),w.onerror=()=>{d(w.error),y(w.error)}})):void 0)}function rt(t,e){return g().then(r=>{if(r)return new Promise((a,i)=>{const c=r.transaction(t,"readwrite"),y=c.objectStore(t);e.forEach(w=>y.delete(w)),c.oncomplete=()=>a(),c.onerror=()=>i(c.error)})})}function Et(t,e,r){return(B()?v(r):Promise.resolve(r)).then(i=>g().then(c=>{if(c)return new Promise((y,w)=>{const A=c.transaction(t,"readwrite"),x=A.objectStore(t);x.put(i),x.delete(e),A.oncomplete=()=>y(),A.onerror=()=>{d(A.error),w(A.error)}})}))}const kt=new Intl.Collator(void 0,{numeric:!0,sensitivity:"base"});function Lt(t,e){if(!e||!e.field)return t;const{field:r,direction:a}=e,i=a==="desc";return[...t].sort((c,y)=>{const w=c[r],A=y[r];if(w==null&&A==null)return 0;if(w==null)return i?1:-1;if(A==null)return i?-1:1;const x=typeof w=="string"&&typeof A=="string"?kt.compare(w,A):w<A?-1:w>A?1:0;return i?-x:x})}function ot(t,e){if(!e)return t;const r=Object.keys(e).filter(a=>Array.isArray(e[a])&&e[a].length>0);return r.length?t.filter(a=>r.every(i=>e[i].map(String).includes(String(a[i])))):t}function Pt(t,e,r){if(!e||!r||!r.length)return t;const a=e.toLowerCase();return t.filter(i=>r.some(c=>{const y=i[c];return y!=null&&String(y).toLowerCase().includes(a)}))}function Dt(t,e,r){if(!t.length)return 0;if(r==="count")return t.length;const a=t.map(c=>parseFloat(c[e])).filter(c=>!isNaN(c)),i=a.reduce((c,y)=>c+y,0);return r==="sum"?i:r==="avg"&&a.length?i/a.length:0}function G(t,e){if(!t.presenters||!t.presenters.computed)return e;const r=t.presenters.computed;return e.map(a=>{const i={...a};for(const[c,y]of Object.entries(r))try{i[c]=y(a)}catch(w){console.error(`[ln-data-store] Decorator computed field failed for ${c}`,w)}return i})}E.prototype.getAll=function(t={}){const e=this;return q(e._name).then(r=>{const a=r.length;t.filters&&(r=ot(r,t.filters)),t.search&&(r=Pt(r,t.search,e._searchFields));const i=r.length;if(t.sort&&(r=Lt(r,t.sort)),t.offset||t.limit){const c=t.offset||0,y=t.limit||r.length;r=r.slice(c,c+y)}return{data:G(e,r),total:a,filtered:i}})},E.prototype.getById=function(t){return D(this._name,t).then(e=>e?G(this,[e])[0]:null)},E.prototype.count=function(t){return t?q(this._name).then(e=>ot(e,t).length):j(this._name)},E.prototype.aggregate=function(t,e){return q(this._name).then(r=>Dt(r,t,e))},E.prototype.setPresenters=function(t){this.presenters=t},E.prototype.applySync=function(t,e,r,a){a=a||{};const i=this;let c=Promise.resolve();return t.length>0&&(c=c.then(()=>nt(i._name,t))),e.length>0&&(c=c.then(()=>rt(i._name,e))),c.then(()=>j(i._name)).then(y=>(i.totalCount=a.total!==void 0?a.total:y,i.hasCache=!0,I(i._name,{schema_version:m,last_synced_at:r,has_cache:!0,record_count:i.totalCount}))).then(()=>{const y=!i.isLoaded;i.isLoaded=!0,i.isSyncing=!1,i.lastSyncedAt=r,y?(C(i.dom,"ln-data-store:loaded",{store:i._name,count:i.totalCount,meta:a}),C(i.dom,"ln-data-store:ready",{store:i._name,count:i.totalCount,source:"server",meta:a})):C(i.dom,"ln-data-store:synced",{store:i._name,added:t.length,deleted:e.length,changed:!0,meta:a})}).catch(y=>{i.isSyncing=!1,console.error("[ln-data-store] applySync failed:",y)})},E.prototype.applyQuery=function(t,e){e=e||{};const r=this;let a=Promise.resolve();return t.length>0&&(a=a.then(()=>nt(r._name,t))),a.then(()=>j(r._name)).then(i=>(r.totalCount=e.total!==void 0?e.total:i,G(r,t))).catch(i=>(console.error("[ln-data-store] applyQuery failed:",i),[]))},E.prototype.forceSync=function(){this.isSyncing||et(this)},E.prototype.fullReload=function(){const t=this;return M(t._name).then(()=>I(t._name,{schema_version:m,last_synced_at:null,has_cache:!1,record_count:0})).then(()=>{t.isLoaded=!1,t.hasCache=!1,t.lastSyncedAt=null,t.totalCount=0,et(t)})},E.prototype.destroy=function(){if(this._handlers){for(const[t,e]of Object.entries(this._handlers))this.dom.removeEventListener(`ln-data-store:request-${t}`,e);this._handlers=null}delete u[this._name],delete this.dom[o],C(this.dom,"ln-data-store:destroyed",{store:this._name})};function Ot(){return g().then(t=>{if(!t)return;const e=Array.from(t.objectStoreNames);return new Promise((r,a)=>{const i=t.transaction(e,"readwrite");e.forEach(c=>i.objectStore(c).clear()),i.oncomplete=()=>r(),i.onerror=()=>a(i.error)})}).then(()=>{Object.values(u).forEach(t=>{t.isLoaded=!1,t.isInitialized=!1,t.initializationError=null,t.hasCache=!1,t.isSyncing=!1,t.lastSyncedAt=null,t.totalCount=0})})}ct(n,o,E,"ln-data-store"),window[o].clearAll=Ot,window[o].init=window[o],window[o].setStorageKey=tt,typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.setStorageKey=tt)})()})();
|
package/js/ln-date/ln-date.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(function(){"use strict";if(typeof window<"u"){const e=console.warn;console.warn=function(...n){typeof n[0]=="string"&&(n[0].startsWith("[ln-")||n[0].startsWith("[lnCore"))&&!(document.documentElement.hasAttribute("data-ln-debug")||document.body&&document.body.hasAttribute("data-ln-debug"))||e.apply(console,n)}}const F={};function X(e,n){F[e]||(F[e]=document.querySelector('[data-ln-template="'+e+'"]'));const r=F[e];return r?r.content.cloneNode(!0):(console.warn("["+(n||"ln-core")+'] Template "'+e+'" not found'),null)}function P(e,n,r){e.dispatchEvent(new CustomEvent(n,{bubbles:!0,detail:r||{}}))}function H(e,n){if(!e||!n)return e;const r=e.querySelectorAll("[data-ln-field]");for(let s=0;s<r.length;s++){const c=r[s],u=c.getAttribute("data-ln-field");n[u]!=null&&(c.textContent=n[u])}const a=e.querySelectorAll("[data-ln-attr]");for(let s=0;s<a.length;s++){const c=a[s],u=c.getAttribute("data-ln-attr").split(",");for(let p=0;p<u.length;p++){const y=u[p].trim().split(":");if(y.length!==2)continue;const S=y[0].trim(),w=y[1].trim();n[w]!=null&&c.setAttribute(S,n[w])}}const f=e.querySelectorAll("[data-ln-show]");for(let s=0;s<f.length;s++){const c=f[s],u=c.getAttribute("data-ln-show");u in n&&c.classList.toggle("hidden",!n[u])}const m=e.querySelectorAll("[data-ln-class]");for(let s=0;s<m.length;s++){const c=m[s],u=c.getAttribute("data-ln-class").split(",");for(let p=0;p<u.length;p++){const y=u[p].trim().split(":");if(y.length!==2)continue;const S=y[0].trim(),w=y[1].trim();w in n&&c.classList.toggle(S,!!n[w])}}return e}function $(e,n){e.matches&&e.matches("[data-ln-form], [data-ln-fillable]")&&e.dispatchEvent(new CustomEvent("ln-fill",{detail:n??null,bubbles:!0}));const r=e.querySelectorAll("[data-ln-form], [data-ln-fillable]");for(let a=0;a<r.length;a++)r[a].dispatchEvent(new CustomEvent("ln-fill",{detail:n??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)H(e.target,e.detail);else{const n=e.target.querySelectorAll("[data-ln-field]");for(let r=0;r<n.length;r++)n[r].textContent=""}})));function W(e,n){if(!e||!n)return e;const r=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;r.nextNode();){const m=r.currentNode;m.textContent.indexOf("{{")!==-1&&(m.textContent=m.textContent.replace(/\{\{\s*(\w+)\s*\}\}/g,function(s,c){return n[c]!==void 0?n[c]:""}))}const a=function(m,s){return n[s]!==void 0?n[s]:""},f=Array.from(e.querySelectorAll("*"));e.nodeType===1&&f.push(e);for(let m=0;m<f.length;m++){const s=f[m],c=s.attributes;for(let u=0;u<c.length;u++){const p=c[u];p.value.indexOf("{{")!==-1&&s.setAttribute(p.name,p.value.replace(/\{\{\s*(\w+)\s*\}\}/g,a))}}return e}function z(e,n,r,a,f,m){const s={};for(let u=0;u<e.children.length;u++){const p=e.children[u],y=p.getAttribute("data-ln-key");y&&(s[y]=p)}const c=document.createDocumentFragment();for(let u=0;u<n.length;u++){const p=n[u],y=String(a(p));let S=s[y];if(S)f(S,p,u);else{const w=X(r,m);if(!w||(W(w,p),S=w.firstElementChild,!S))continue;S.setAttribute("data-ln-key",y),f(S,p,u)}c.appendChild(S)}e.textContent="",e.appendChild(c)}function K(e,n){if(!document.body){document.addEventListener("DOMContentLoaded",function(){K(e,n)}),console.warn("["+n+'] Script loaded before <body> — add "defer" to your <script> tag');return}e()}function Q(e,n){const r={},a=e.querySelectorAll("["+n+"]");for(let f=0;f<a.length;f++)r[a[f].getAttribute(n)]=a[f].textContent,a[f].remove();return r}function q(e,n,r,a){if(e.nodeType!==1)return;const m=n.indexOf("[")!==-1||n.indexOf(".")!==-1||n.indexOf("#")!==-1?n:"["+n+"]",s=Array.from(e.querySelectorAll(m));e.matches&&e.matches(m)&&s.push(e);for(const c of s)c[r]||(c[r]=new a(c))}const U={mk:"mk-MK",de:"de-DE",fr:"fr-FR",es:"es-ES",it:"it-IT",nl:"nl-NL",pt:"pt-PT",ru:"ru-RU",bg:"bg-BG",hr:"hr-HR",sr:"sr-RS",sq:"sq-AL",el:"el-GR",en:"en-US"};function N(e){const n=e?e.closest("[lang]"):null,r=(n?n.getAttribute("lang")||n.lang:null)||(document.documentElement?document.documentElement.getAttribute("lang")||document.documentElement.lang:null)||navigator.language;if(!r)return"en-US";const a=r.trim().toLowerCase();return a.indexOf("-")===-1&&U[a]?U[a]:r}function Z(e,n,{get:r,set:a}){Object.defineProperty(e,"value",{get:function(){return r?r.call(this):n.get.call(this)},set:function(f){a?a.call(this,f,m=>n.set.call(this,m)):n.set.call(this,f)},configurable:!0})}function tt(e,n,r,a,f={}){const m=f.extraAttributes||[],s=f.onAttributeChange||null,c=f.onInit||null;function u(p){const y=p||document.body;q(y,e,n,r),c&&c(y)}return K(function(){const p=new MutationObserver(function(S){for(let w=0;w<S.length;w++){const E=S[w];if(E.type==="childList"){for(let k=0;k<E.addedNodes.length;k++){const _=E.addedNodes[k];_.nodeType===1&&(q(_,e,n,r),c&&c(_))}for(let k=0;k<E.removedNodes.length;k++){const _=E.removedNodes[k];if(_.nodeType===1){const D=e.indexOf("[")!==-1||e.indexOf(".")!==-1||e.indexOf("#")!==-1?e:"["+e+"]",t=Array.from(_.querySelectorAll(D));_.matches&&_.matches(D)&&t.push(_);for(let i=0;i<t.length;i++){const o=t[i];if(!document.contains(o)){const l=o[n];l&&typeof l.destroy=="function"&&l.destroy()}}}}}else E.type==="attributes"&&(s&&E.target[n]?s(E.target,E.attributeName):(q(E.target,e,n,r),c&&c(E.target)))}});let y=[];if(e.indexOf("[")!==-1){const S=/\[([\w-]+)/g;let w;for(;(w=S.exec(e))!==null;)y.push(w[1])}else y.push(e);p.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:y.concat(m)})},a),window[n]=u,document.readyState==="loading"?document.addEventListener("DOMContentLoaded",function(){u(document.body)}):u(document.body),u}const Y={};function et(e,n){Y[e]=n}function nt(e){return Y[e]||{ingress:n=>n,egress:n=>n}}const G={};function R(e,n){if(!e||typeof n!="object")return;const r=e.toLowerCase().split("-")[0];G[r]=n}function j(e){if(!e)return null;const n=e.toLowerCase().split("-")[0];return G[n]||null}R("mk",{monthsLong:["јануари","февруари","март","април","мај","јуни","јули","август","септември","октомври","ноември","декември"],monthsShort:["јан","фев","мар","апр","мај","јун","јул","авг","септ","окт","ноем","дек"],daysLong:["недела","понеделник","вторник","среда","четврток","петок","сабота"],daysShort:["нед","пон","вт","ср","чет","пет","саб"]}),typeof window<"u"&&(window.lnCore=window.lnCore||{},window.lnCore.registerDataMapper=et,window.lnCore.getDataMapper=nt,window.lnCore.registerLocaleFallback=R,window.lnCore.getLocaleFallback=j,window.lnCore.fillTemplate=W,window.lnCore.fill=H,window.lnCore.lnFill=$,window.lnCore.renderList=z);function J(e){return(e||"").replace(/^#/,"")}function B(e){const n=e===void 0?location.hash:e,r={},a=J(n);if(!a)return r;const f=a.split("&");for(let m=0;m<f.length;m++){const s=f[m];if(!s)continue;const c=s.indexOf(":"),u=c>-1?s.slice(0,c):s,p=c>-1?s.slice(c+1):"";if(u)try{r[u]=decodeURIComponent(p)}catch{r[u]=p}}return r}function it(e){if(!e)return null;const n=B();return e in n?n[e]:null}function ot(e,n){if(!e)return;const r=B();n==null?delete r[e]:r[e]=String(n);const f=Object.keys(r).map(function(m){const s=r[m];return s===""?m:m+":"+encodeURIComponent(s)}).join("&");J(location.hash)!==f&&(location.hash=f)}function rt(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=B,window.lnCore.hashGet=it,window.lnCore.hashSet=ot,window.lnCore.hashLinkClick=rt),(function(){const e="data-ln-date",n="lnDate";if(window[n]!==void 0)return;const r={},a=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");function f(t,i){const o=t+"|"+JSON.stringify(i);return r[o]||(r[o]=new Intl.DateTimeFormat(t,i)),r[o]}const m=/^(short|medium|long)(\s+datetime)?$/,s={short:{dateStyle:"short"},medium:{dateStyle:"medium"},long:{dateStyle:"long"},"short datetime":{dateStyle:"short",timeStyle:"short"},"medium datetime":{dateStyle:"medium",timeStyle:"short"},"long datetime":{dateStyle:"long",timeStyle:"short"}};function c(t){return!t||t===""?{dateStyle:"medium"}:t.match(m)?s[t]:null}function u(t,i,o){const l=t.getDate(),h=t.getMonth(),b=t.getFullYear(),g=t.getHours(),A=t.getMinutes();let C,O;const d=j(o),x=(o||"").toLowerCase().split("-")[0],L=f(o,{month:"long"}).resolvedOptions().locale.toLowerCase().split("-")[0],T=d&&L!==x;T&&d.monthsLong?C=d.monthsLong[h]:C=f(o,{month:"long"}).format(t),T&&d.monthsShort?O=d.monthsShort[h]:O=f(o,{month:"short"}).format(t);const V={yyyy:String(b),yy:String(b).slice(-2),MMMM:C,MMM:O,MM:String(h+1).padStart(2,"0"),M:String(h+1),dd:String(l).padStart(2,"0"),d:String(l),HH:String(g).padStart(2,"0"),mm:String(A).padStart(2,"0")};return i.replace(/yyyy|yy|MMMM|MMM|MM|M|dd|d|HH|mm/g,function(I){return V[I]})}function p(t,i,o){const l=c(i);if(l){const h=f(o,l),b=(o||"").toLowerCase().split("-")[0],g=h.resolvedOptions().locale.toLowerCase().split("-")[0];return j(o)&&g!==b?u(t,"dd.MM.yyyy",o):h.format(t)}return u(t,i,o)}function y(t){if(!t)return"";const i=t.getFullYear(),o=String(t.getMonth()+1).padStart(2,"0"),l=String(t.getDate()).padStart(2,"0");return i+"-"+o+"-"+l}function S(t,i,o){P(t.dom,"ln-date:change",{value:i,formatted:t.dom.value,date:o}),t.dom.dispatchEvent(new Event("change",{bubbles:!0}))}function w(t,i,o,l){t._setHiddenRaw(i),a.set.call(t._picker,i),t._lastISO=i,l!==void 0?(t._isFormatting=!0,t.dom.value=l,t._isFormatting=!1):o&&t._displayFormatted(o),S(t,i,o)}function E(t){t._setHiddenRaw(""),a.set.call(t._picker,""),t._isFormatting=!0,t.dom.value="",t._isFormatting=!1,t._lastISO="",S(t,"",null)}k.prototype._initTextElement=function(){const t=this.dom;let i=t.getAttribute("data-ln-value"),o=t.getAttribute("data-ln-date"),l=t.getAttribute("datetime"),h=null;i!==null&&i!==""?h=i:l!==null&&l!==""?h=l:o!==null&&o!==""&&o!=="true"&&!m.test(o)?h=o:h=t.textContent.trim();let b=_(h)||M(h);if(!b&&h)if(isNaN(h))b=new Date(h);else{const g=Number(h);b=new Date(g>1e11?g:g*1e3)}if(b&&!isNaN(b.getTime())){const g=y(b);this._rawValue=g,t.hasAttribute("data-ln-value")||t.setAttribute("data-ln-value",g),this._formatTextContent()}else this._rawValue=null},k.prototype._formatTextContent=function(){if(this._rawValue){const t=_(this._rawValue);if(t){let o=this.dom.getAttribute("data-ln-date-format");if(!o){const h=this.dom.getAttribute("data-ln-date");h&&m.test(h)&&(o=h)}const l=N(this.dom);this.dom.textContent=p(t,o||"medium",l)}}};function k(t){if(t[n])return t[n];if(t[n]=this,this.dom=t,t.tagName!=="INPUT")return this.isTextElement=!0,this._initTextElement(),this;this.isTextElement=!1;const i=this,o=t.value,l=t.name,b=(t.closest(".form-element, form")||t.parentNode).querySelectorAll("[data-ln-date-dict]");for(let d=0;d<b.length;d++){const x=b[d].getAttribute("data-ln-date-dict");if(x){const v=Q(b[d],"data-ln-date-dict-key");v["months-long"]&&(v.monthsLong=v["months-long"].split(",").map(L=>L.trim())),v["months-short"]&&(v.monthsShort=v["months-short"].split(",").map(L=>L.trim())),R(x,v)}}const g=document.createElement("span");g.setAttribute("data-ln-date-field",""),t.parentNode.insertBefore(g,t),g.appendChild(t),this._wrapper=g;const A=document.createElement("input");A.type="hidden",A.name=l,t.removeAttribute("name"),t.hasAttribute("data-ln-fill-as")&&A.setAttribute("data-ln-fill-as",t.getAttribute("data-ln-fill-as")),t.insertAdjacentElement("afterend",A),this._hidden=A;const C=document.createElement("input");C.type="date",C.tabIndex=-1,C.style.cssText="position:absolute;opacity:0;width:0;height:0;overflow:hidden;pointer-events:none",A.insertAdjacentElement("afterend",C),this._picker=C,t.type="text";const O=document.createElement("button");if(O.type="button",O.setAttribute("aria-label",t.getAttribute("data-ln-date-label")||"Open date picker"),O.innerHTML='<svg class="ln-icon" aria-hidden="true"><use href="#ln-icon-calendar"></use></svg>',C.insertAdjacentElement("afterend",O),this._btn=O,this._lastISO="",Object.defineProperty(A,"value",{get:function(){return a.get.call(A)},set:function(d){if(a.set.call(A,d),d&&d!==""){const x=_(d);x&&w(i,d,x)}else d===""&&E(i)}}),Z(t,a,{get:function(){return a.get.call(t)},set:function(d,x){if(i._isFormatting){x(d);return}if(!d||d===""){x(""),E(i);return}const v=_(d)||M(d);if(v){const L=y(v),T=t.getAttribute(e)||"",V=N(t),I=p(v,T,V);x(I),w(i,L,v,I)}else x(String(d)),E(i)}}),this._onPickerChange=function(){const d=C.value;if(d){const x=_(d);x&&w(i,d,x)}else E(i)},C.addEventListener("change",this._onPickerChange),this._onBlur=function(){const d=i.dom.value.trim();if(d===""){i._lastISO!==""&&E(i);return}if(i._lastISO){const v=_(i._lastISO);if(v){const L=i.dom.getAttribute(e)||"",T=N(i.dom);if(d===p(v,L,T))return}}const x=M(d);if(x){const v=y(x);w(i,v,x)}else if(i._lastISO){const v=_(i._lastISO);v&&i._displayFormatted(v)}else i.dom.value=""},t.addEventListener("blur",this._onBlur),this._onBtnClick=function(){i._openPicker()},O.addEventListener("click",this._onBtnClick),o&&o!==""){const d=_(o);d&&w(i,o,d)}return this}function _(t){if(!t||typeof t!="string")return null;const i=t.split("T"),o=i[0].split("-");if(o.length<3)return null;const l=parseInt(o[0],10),h=parseInt(o[1],10)-1,b=parseInt(o[2],10);if(isNaN(l)||isNaN(h)||isNaN(b))return null;let g=0,A=0;if(i[1]){const O=i[1].split(":");g=parseInt(O[0],10)||0,A=parseInt(O[1],10)||0}const C=new Date(l,h,b,g,A);return C.getFullYear()!==l||C.getMonth()!==h||C.getDate()!==b?null:C}function M(t){if(!t||typeof t!="string"||(t=t.trim(),t.length<6))return null;let i,o;if(t.indexOf(".")!==-1)i=".",o=t.split(".");else if(t.indexOf("/")!==-1)i="/",o=t.split("/");else if(t.indexOf("-")!==-1)i="-",o=t.split("-");else return null;if(o.length!==3)return null;const l=[];for(let C=0;C<3;C++){const O=parseInt(o[C],10);if(isNaN(O))return null;l.push(O)}let h,b,g;i==="."?(h=l[0],b=l[1],g=l[2]):i==="/"?(b=l[0],h=l[1],g=l[2]):o[0].length===4?(g=l[0],b=l[1],h=l[2]):(h=l[0],b=l[1],g=l[2]),g<100&&(g+=g<50?2e3:1900);const A=new Date(g,b-1,h);return A.getFullYear()!==g||A.getMonth()!==b-1||A.getDate()!==h?null:A}k.prototype._openPicker=function(){if(typeof this._picker.showPicker=="function")try{this._picker.showPicker()}catch{this._picker.click()}else this._picker.click()},k.prototype._setHiddenRaw=function(t){a.set.call(this._hidden,t)},k.prototype._displayFormatted=function(t){const i=this.dom.getAttribute(e)||"",o=N(this.dom);this._isFormatting=!0,this.dom.value=p(t,i,o),this._isFormatting=!1},Object.defineProperty(k.prototype,"value",{get:function(){return this.isTextElement?this._rawValue||"":a.get.call(this._hidden)},set:function(t){if(this.isTextElement){if(!t||t===""){this._rawValue=null,this.dom.removeAttribute("data-ln-value"),this.dom.textContent="";return}const o=_(t)||M(t);if(!o)return;const l=y(o);this._rawValue=l,this.dom.setAttribute("data-ln-value",l),this._formatTextContent();return}if(!t||t===""){E(this);return}const i=_(t);i&&w(this,t,i)}}),Object.defineProperty(k.prototype,"date",{get:function(){const t=this.value;return t?_(t):null},set:function(t){if(!t||!(t instanceof Date)||isNaN(t.getTime())){this.value="";return}this.value=y(t)}}),Object.defineProperty(k.prototype,"formatted",{get:function(){return this.isTextElement?this.dom.textContent:this.dom.value}}),k.prototype.destroy=function(){if(!this.dom[n])return;if(this.isTextElement){P(this.dom,"ln-date:destroyed",{target:this.dom}),delete this.dom[n];return}this._picker.removeEventListener("change",this._onPickerChange),this.dom.removeEventListener("blur",this._onBlur),this._btn.removeEventListener("click",this._onBtnClick);const t=this.value;this._hidden.remove(),this._picker.remove(),this._btn.remove(),this._wrapper&&this._wrapper.parentNode&&(this._wrapper.parentNode.insertBefore(this.dom,this._wrapper),this._wrapper.remove()),delete this.dom.value,this.dom.name=this._hidden.name,this.dom.type="date",t&&(this.dom.value=t),P(this.dom,"ln-date:destroyed",{target:this.dom}),delete this.dom[n]};function D(){new MutationObserver(function(){const t=document.querySelectorAll("["+e+"]");for(let i=0;i<t.length;i++){const o=t[i][n];if(o){if(o.isTextElement)o._formatTextContent();else if(o.value){const l=_(o.value);l&&o._displayFormatted(l)}}}}).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"],subtree:!0})}tt(e,n,k,"ln-date",{extraAttributes:["data-ln-date-format","data-ln-date-locale","data-ln-value","datetime","lang"],onAttributeChange:function(t){const i=t[n];if(i){if(i.isTextElement)i._initTextElement();else if(i.value){const o=_(i.value);o&&i._displayFormatted(o)}}}}),D()})()})();
|