@livenetworks/ashlar 1.6.0 → 2.0.0
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 +202 -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/components/ln-confirm/README.md +216 -0
- 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 -167
- 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/README.md +0 -162
- 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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// [data-ln-accordion] { @include accordion; } // library default
|
|
5
5
|
// #my-list { @include accordion; } // custom selector
|
|
6
6
|
//
|
|
7
|
-
// Expected DOM (see docs/css/mixins.md §accordion):
|
|
7
|
+
// Expected DOM (see docs-mcp/css/mixins.md §accordion):
|
|
8
8
|
// <ul data-ln-accordion>
|
|
9
9
|
// <li>
|
|
10
10
|
// <header data-ln-toggle-for="p1">Title</header>
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
padding: var(--padding-y) var(--padding-x);
|
|
32
32
|
border-radius: var(--radius);
|
|
33
33
|
@include text-sm;
|
|
34
|
+
border: var(--border-width) solid color-mix(in srgb, var(--color-accent) 22%, transparent);
|
|
34
35
|
border-left: 3px solid var(--color-accent);
|
|
35
36
|
@include tinted-surface(0.08);
|
|
36
37
|
color: var(--color-fg);
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
@use 'transitions' as *;
|
|
12
12
|
@use 'interaction' as *;
|
|
13
13
|
@use 'sidebar' as *;
|
|
14
|
+
@use 'card' as *;
|
|
14
15
|
|
|
15
16
|
// ─── App Shell ──────────────────────────────────────────────────────────────
|
|
16
17
|
// Mobile-ready application shell: fixed header, sidebar drawer, scrim overlay.
|
|
@@ -63,6 +64,7 @@
|
|
|
63
64
|
background: var(--color-bg);
|
|
64
65
|
border-block-end: var(--border-block-end, var(--border-width) solid var(--color-border));
|
|
65
66
|
box-shadow: var(--shadow);
|
|
67
|
+
@include frosted-glass(0.88, 12px);
|
|
66
68
|
@include flex;
|
|
67
69
|
@include items-center;
|
|
68
70
|
@include justify-between;
|
|
@@ -97,7 +99,7 @@
|
|
|
97
99
|
.menu-toggle {
|
|
98
100
|
@include flex-center;
|
|
99
101
|
@include size(2rem);
|
|
100
|
-
|
|
102
|
+
border-radius: var(--radius);
|
|
101
103
|
}
|
|
102
104
|
|
|
103
105
|
h1 {
|
|
@@ -141,7 +143,7 @@
|
|
|
141
143
|
--btn-padding-x: var(--size-sm-up);
|
|
142
144
|
@include text-xs;
|
|
143
145
|
font-weight: var(--font-medium);
|
|
144
|
-
border-radius: var(--radius
|
|
146
|
+
border-radius: var(--radius);
|
|
145
147
|
|
|
146
148
|
// Label visually-hidden on small viewports — icon remains.
|
|
147
149
|
> span {
|
|
@@ -29,8 +29,10 @@
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
+
@mixin rounded-xs { border-radius: var(--radius-xs); }
|
|
32
33
|
@mixin rounded-sm { border-radius: var(--radius-sm); }
|
|
33
34
|
@mixin rounded-md { border-radius: var(--radius-md); }
|
|
34
35
|
@mixin rounded-lg { border-radius: var(--radius-lg); }
|
|
35
36
|
@mixin rounded-xl { border-radius: var(--radius-xl); }
|
|
37
|
+
@mixin rounded-2xl { border-radius: var(--radius-2xl); }
|
|
36
38
|
@mixin rounded-full { border-radius: var(--radius-full); }
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
@use 'spacing' as *;
|
|
2
|
+
@use 'display' as *;
|
|
3
|
+
@use 'sizing' as *;
|
|
4
|
+
@use 'typography' as *;
|
|
5
|
+
@use 'colors' as *;
|
|
6
|
+
@use 'borders' as *;
|
|
7
|
+
@use 'transitions' as *;
|
|
8
|
+
@use 'interaction' as *;
|
|
9
|
+
@use 'focus' as *;
|
|
10
|
+
@use 'motion' as *;
|
|
11
|
+
|
|
12
|
+
// Buttons
|
|
13
|
+
// button-base — shared neutral chrome (global button + anchor-as-button)
|
|
14
|
+
// btn — accent variant of button-base; rebinds --btn-* to accent colors
|
|
15
|
+
// btn-soft — pastel accent fill with saturated accent text
|
|
16
|
+
// btn-ghost — transparent background, subtle hover surface, zero border
|
|
17
|
+
// btn-outline — transparent background with crisp border and subtle hover
|
|
18
|
+
// btn-link — inline text action with hover underline
|
|
19
|
+
// btn-sm — smaller size modifier
|
|
20
|
+
// btn-lg — larger size modifier
|
|
21
|
+
// btn-group — inline list of peer action buttons (ghost rebind)
|
|
22
|
+
|
|
23
|
+
// ─── button-base ──────────────────────────────────────
|
|
24
|
+
// Neutral chrome shared by <button>, <input type="submit|reset|button">,
|
|
25
|
+
// and anchors used as buttons (e.g. inside form-actions). Reads the
|
|
26
|
+
// six-token --btn-* surface: --btn-bg/fg/border (idle) and
|
|
27
|
+
// --btn-bg-hover/fg-hover/border-hover (hover + active). Both the
|
|
28
|
+
// neutral default and the accent variant are fully token-driven —
|
|
29
|
+
// the difference is which values --btn-* resolves to.
|
|
30
|
+
|
|
31
|
+
@mixin button-base {
|
|
32
|
+
@include inline-flex;
|
|
33
|
+
@include items-center;
|
|
34
|
+
@include justify-center;
|
|
35
|
+
gap: var(--gap, var(--size-xs-up));
|
|
36
|
+
--padding-y: var(--btn-padding-y, var(--size-sm));
|
|
37
|
+
--padding-x: var(--btn-padding-x, var(--size-md));
|
|
38
|
+
padding: var(--padding-y) var(--padding-x);
|
|
39
|
+
@include text-sm;
|
|
40
|
+
@include font-medium;
|
|
41
|
+
border-radius: var(--radius);
|
|
42
|
+
white-space: nowrap;
|
|
43
|
+
border: var(--border-width) solid var(--btn-border);
|
|
44
|
+
outline: none;
|
|
45
|
+
background: var(--btn-bg);
|
|
46
|
+
color: var(--btn-fg);
|
|
47
|
+
text-decoration: none;
|
|
48
|
+
cursor: pointer;
|
|
49
|
+
@include transition-colors;
|
|
50
|
+
|
|
51
|
+
&:hover:not(:disabled),
|
|
52
|
+
&:active:not(:disabled) {
|
|
53
|
+
background: var(--btn-bg-hover);
|
|
54
|
+
color: var(--btn-fg-hover);
|
|
55
|
+
border-color: var(--btn-border-hover);
|
|
56
|
+
text-decoration: none;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
&:focus-visible {
|
|
60
|
+
@include focus-ring;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
&:disabled {
|
|
64
|
+
@include opacity-50;
|
|
65
|
+
@include cursor-not-allowed;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
@mixin btn {
|
|
70
|
+
// Accent variant — rebinds the --btn-* token surface to accent values.
|
|
71
|
+
--color-accent: hsl(var(--color-primary));
|
|
72
|
+
--color-accent-hover: hsl(from var(--color-accent) h s calc(l - 6));
|
|
73
|
+
|
|
74
|
+
--btn-bg: var(--color-accent-bg, var(--color-accent));
|
|
75
|
+
--btn-fg: var(--color-accent-bg-fg, var(--color-accent-fg));
|
|
76
|
+
--btn-border: hsl(from var(--color-accent) h s calc(l - 4));
|
|
77
|
+
--btn-bg-hover: var(--color-accent-bg-hover, var(--color-accent-hover));
|
|
78
|
+
--btn-fg-hover: var(--color-accent-bg-fg, var(--color-accent-fg));
|
|
79
|
+
--btn-border-hover: hsl(from var(--color-accent) h s calc(l - 6));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@mixin btn-soft {
|
|
83
|
+
// Soft/Subtle variant — pastel accent surface with saturated text.
|
|
84
|
+
--color-accent: hsl(var(--color-primary));
|
|
85
|
+
|
|
86
|
+
--btn-bg: color-mix(in srgb, var(--color-accent) 10%, transparent);
|
|
87
|
+
--btn-fg: var(--color-accent);
|
|
88
|
+
--btn-border: color-mix(in srgb, var(--color-accent) 20%, transparent);
|
|
89
|
+
--btn-bg-hover: color-mix(in srgb, var(--color-accent) 18%, transparent);
|
|
90
|
+
--btn-fg-hover: var(--color-accent);
|
|
91
|
+
--btn-border-hover: color-mix(in srgb, var(--color-accent) 25%, transparent);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@mixin btn-ghost {
|
|
95
|
+
// Ghost variant — transparent idle, subtle sunken hover surface.
|
|
96
|
+
--btn-bg: transparent;
|
|
97
|
+
--btn-fg: var(--color-fg);
|
|
98
|
+
--btn-border: transparent;
|
|
99
|
+
--btn-bg-hover: var(--bg-hover);
|
|
100
|
+
--btn-fg-hover: var(--color-fg);
|
|
101
|
+
--btn-border-hover: transparent;
|
|
102
|
+
|
|
103
|
+
&:is(.success, .error, .warning, .info) {
|
|
104
|
+
--color-accent: hsl(var(--color-primary));
|
|
105
|
+
--btn-fg: var(--color-accent);
|
|
106
|
+
--btn-bg-hover: color-mix(in srgb, var(--color-accent) 10%, transparent);
|
|
107
|
+
--btn-fg-hover: var(--color-accent);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@mixin btn-outline {
|
|
112
|
+
// Outline variant — transparent idle with crisp border.
|
|
113
|
+
--btn-bg: transparent;
|
|
114
|
+
--btn-fg: var(--color-fg);
|
|
115
|
+
--btn-border: var(--border-strong);
|
|
116
|
+
--btn-bg-hover: var(--bg-hover);
|
|
117
|
+
--btn-fg-hover: var(--color-fg);
|
|
118
|
+
--btn-border-hover: var(--border-strong);
|
|
119
|
+
|
|
120
|
+
&:is(.success, .error, .warning, .info) {
|
|
121
|
+
--color-accent: hsl(var(--color-primary));
|
|
122
|
+
--btn-fg: var(--color-accent);
|
|
123
|
+
--btn-border: color-mix(in srgb, var(--color-accent) 30%, transparent);
|
|
124
|
+
--btn-bg-hover: color-mix(in srgb, var(--color-accent) 10%, transparent);
|
|
125
|
+
--btn-fg-hover: var(--color-accent);
|
|
126
|
+
--btn-border-hover: color-mix(in srgb, var(--color-accent) 30%, transparent);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
@mixin btn-link {
|
|
131
|
+
// Link variant — text button with hover underline.
|
|
132
|
+
--btn-bg: transparent;
|
|
133
|
+
--btn-fg: var(--color-accent, hsl(var(--color-primary)));
|
|
134
|
+
--btn-border: transparent;
|
|
135
|
+
--btn-bg-hover: transparent;
|
|
136
|
+
--btn-fg-hover: hsl(from var(--btn-fg) h s calc(l - 10));
|
|
137
|
+
--btn-border-hover: transparent;
|
|
138
|
+
--padding-x: 0;
|
|
139
|
+
--padding-y: 0;
|
|
140
|
+
padding: 0;
|
|
141
|
+
text-decoration: none;
|
|
142
|
+
|
|
143
|
+
&:hover:not(:disabled) {
|
|
144
|
+
text-decoration: underline;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@mixin btn-sm {
|
|
149
|
+
--btn-padding-x: var(--size-sm-up);
|
|
150
|
+
--gap: var(--size-xs);
|
|
151
|
+
gap: var(--gap);
|
|
152
|
+
@include text-xs;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@mixin btn-lg {
|
|
156
|
+
--btn-padding-x: var(--size-lg);
|
|
157
|
+
--btn-padding-y: var(--size-md);
|
|
158
|
+
--gap: var(--size-sm-up);
|
|
159
|
+
gap: var(--gap);
|
|
160
|
+
@include text-base;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@mixin btn-group {
|
|
164
|
+
--gap: var(--size-xs);
|
|
165
|
+
@include inline-flex;
|
|
166
|
+
@include items-center;
|
|
167
|
+
gap: var(--gap);
|
|
168
|
+
|
|
169
|
+
button {
|
|
170
|
+
--btn-bg: transparent;
|
|
171
|
+
--btn-border: transparent;
|
|
172
|
+
color: var(--fg-subtle);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
border-radius: var(--radius);
|
|
22
22
|
@include overflow-hidden;
|
|
23
23
|
@include transition;
|
|
24
|
-
box-shadow: var(--shadow);
|
|
24
|
+
box-shadow: var(--shadow), var(--surface-highlight, inset 0 0 0 0 transparent);
|
|
25
25
|
|
|
26
26
|
&:hover {
|
|
27
27
|
--color-border: color-mix(in srgb, var(--color-accent) 35%, transparent);
|
|
@@ -92,7 +92,8 @@
|
|
|
92
92
|
@include flex;
|
|
93
93
|
@include items-center;
|
|
94
94
|
@include justify-between;
|
|
95
|
-
padding: var(--
|
|
95
|
+
padding: var(--size-xs-up) var(--padding-x);
|
|
96
|
+
min-height: 2.5rem;
|
|
96
97
|
@include border-b;
|
|
97
98
|
--color-bg: var(--bg-sunken);
|
|
98
99
|
background: var(--color-bg);
|
|
@@ -106,25 +107,47 @@
|
|
|
106
107
|
margin: 0;
|
|
107
108
|
}
|
|
108
109
|
|
|
109
|
-
// Equalize control chrome inside the header. Geometric height lock
|
|
110
|
-
// matching @mixin app-header-actions: icon-content (1.25rem) + 2 ×
|
|
111
|
-
// rebound --padding-y + 2 × border-width. Buttons inherit --padding-y
|
|
112
|
-
// from this rebind; search-icon labels read it from
|
|
113
|
-
// @mixin form-input-icon-group (same var(--size-xs) value), so the
|
|
114
|
-
// formula resolves identically for both. Descendant selector — these
|
|
115
|
-
// controls are commonly wrapped in <aside>/<nav>/<div> inside the
|
|
116
|
-
// header. panel-header is chrome (no body labels), so descendant
|
|
117
|
-
// `label` here is always a search-icon-group, never a field label.
|
|
118
110
|
label {
|
|
119
111
|
--padding-y: var(--size-xs);
|
|
120
112
|
}
|
|
121
113
|
|
|
122
|
-
button
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
:
|
|
127
|
-
|
|
114
|
+
// Header actions compact to a 28px button. This is a DESCENDANT selector,
|
|
115
|
+
// so it also reaches a button that belongs to a nested field — that button
|
|
116
|
+
// is the field's own chrome, not a header action, and form-field-group
|
|
117
|
+
// stretches it to the field's full height. An explicit height beats
|
|
118
|
+
// `align-self: stretch`, so such a button has to be excluded here; it
|
|
119
|
+
// cannot defend itself by out-weighing this rule.
|
|
120
|
+
//
|
|
121
|
+
// Only ln-date needs the exclusion. Every other composite field clears
|
|
122
|
+
// (0,1,2) on its own, because its binding carries a :has() guard and :has()
|
|
123
|
+
// adopts its argument's specificity:
|
|
124
|
+
// icon-group auto-bind :is(label,div,span,search):has(>.ln-icon):has(>…) > button (0,1,4)
|
|
125
|
+
// search clear search:has(> input[type="search"]) > button (0,1,3)
|
|
126
|
+
// this rule .card > header button (0,1,2)
|
|
127
|
+
// ln-date [data-ln-date-field] > button (0,1,1)
|
|
128
|
+
// ln-date builds its own wrapper in JS, so it has nothing to guard against
|
|
129
|
+
// and its binding is a bare attribute — the one that falls below the line.
|
|
130
|
+
// A new composite field whose wrapper needs no :has() belongs in this list.
|
|
131
|
+
//
|
|
132
|
+
// Both :where()s are load-bearing:
|
|
133
|
+
// inner — keeps the wrapper from lending ITS weight to the exclusion.
|
|
134
|
+
// outer — :not() adopts its argument's specificity, which would lift this
|
|
135
|
+
// rule to (0,1,3) and silently outrank consumers that override it
|
|
136
|
+
// at equal weight by source order.
|
|
137
|
+
// Wrapped, the rule stays exactly (0,1,2); only its match set narrows.
|
|
138
|
+
//
|
|
139
|
+
// NOT written as [class*="group"]: that spelling means "field group" in
|
|
140
|
+
// components/_form.scss only because it is scoped under .form-element there.
|
|
141
|
+
// Unscoped it would also catch .btn-group and stop compacting a segmented
|
|
142
|
+
// group in a header — a regression, and those buttons already outrank this.
|
|
143
|
+
button:where(:not(:where([data-ln-date-field]) > button)) {
|
|
144
|
+
--btn-padding-y: var(--size-2xs);
|
|
145
|
+
--btn-padding-x: var(--size-xs);
|
|
146
|
+
font-size: var(--text-xs);
|
|
147
|
+
height: 1.75rem;
|
|
148
|
+
display: inline-flex;
|
|
149
|
+
align-items: center;
|
|
150
|
+
justify-content: center;
|
|
128
151
|
}
|
|
129
152
|
|
|
130
153
|
// Close/dismiss and toggle buttons inside the header should be tight and flat.
|
|
@@ -134,34 +157,13 @@
|
|
|
134
157
|
--btn-padding-y: var(--size-2xs);
|
|
135
158
|
--btn-padding-x: var(--size-2xs);
|
|
136
159
|
--shadow: none;
|
|
160
|
+
height: 1.75rem;
|
|
161
|
+
width: 1.75rem;
|
|
137
162
|
}
|
|
138
163
|
}
|
|
139
164
|
|
|
140
165
|
@mixin panel-body {
|
|
141
|
-
padding: var(--
|
|
142
|
-
|
|
143
|
-
ul, ol {
|
|
144
|
-
padding-left: 1.5em;
|
|
145
|
-
margin-bottom: var(--size-md);
|
|
146
|
-
|
|
147
|
-
li {
|
|
148
|
-
margin-bottom: var(--size-xs);
|
|
149
|
-
line-height: 1.7;
|
|
150
|
-
list-style: inherit;
|
|
151
|
-
|
|
152
|
-
&:last-child {
|
|
153
|
-
margin-bottom: 0;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
ul {
|
|
159
|
-
list-style-type: disc;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
ol {
|
|
163
|
-
list-style-type: decimal;
|
|
164
|
-
}
|
|
166
|
+
padding: var(--padding-y) var(--padding-x);
|
|
165
167
|
|
|
166
168
|
&:has(> table),
|
|
167
169
|
&:has(> .table-container) {
|
|
@@ -206,7 +208,7 @@
|
|
|
206
208
|
}
|
|
207
209
|
|
|
208
210
|
@mixin panel-footer {
|
|
209
|
-
padding: var(--
|
|
211
|
+
padding: var(--padding-y) var(--padding-x);
|
|
210
212
|
@include border-t;
|
|
211
213
|
--color-bg: var(--bg-sunken);
|
|
212
214
|
background: var(--color-bg);
|
|
@@ -248,13 +250,12 @@
|
|
|
248
250
|
}
|
|
249
251
|
|
|
250
252
|
// ─── Card accents (Tabler-inspired colored lines) ──────
|
|
251
|
-
// Accent reads --color-accent
|
|
252
|
-
// (raw triplet) for alpha hover tints — see plan §0.3.
|
|
253
|
+
// Accent reads --color-accent for borders and hover wash tint (--tint-hover).
|
|
253
254
|
// Usage: #my-card { @include card; @include card-accent-top; }
|
|
254
255
|
|
|
255
256
|
@mixin _card-accent-base {
|
|
256
257
|
&:hover {
|
|
257
|
-
background-color: color-mix(in srgb, var(--color-accent)
|
|
258
|
+
background-color: color-mix(in srgb, var(--color-accent) var(--tint-hover), transparent);
|
|
258
259
|
}
|
|
259
260
|
}
|
|
260
261
|
|
|
@@ -334,6 +335,13 @@
|
|
|
334
335
|
> footer { @include panel-footer; }
|
|
335
336
|
}
|
|
336
337
|
|
|
338
|
+
// ─── Frosted Glass ──────────────────────────────────────
|
|
339
|
+
@mixin frosted-glass($opacity: 0.85, $blur: 12px) {
|
|
340
|
+
background-color: color-mix(in srgb, var(--color-bg) calc(#{$opacity} * 100%), transparent);
|
|
341
|
+
-webkit-backdrop-filter: blur(#{$blur});
|
|
342
|
+
backdrop-filter: blur(#{$blur});
|
|
343
|
+
}
|
|
344
|
+
|
|
337
345
|
// ─── Floating panel ────────────────────────────────────
|
|
338
346
|
// Chrome recipe for floating overlays (popover, dropdown menu, toast).
|
|
339
347
|
// Rebinds --color-bg to elevated surface and --shadow to floating
|
|
@@ -349,7 +357,8 @@
|
|
|
349
357
|
border-inline-start: var(--border-inline-start, var(--border-width) solid var(--color-border));
|
|
350
358
|
border-inline-end: var(--border-inline-end, var(--border-width) solid var(--color-border));
|
|
351
359
|
border-radius: var(--radius);
|
|
352
|
-
box-shadow: var(--shadow);
|
|
360
|
+
box-shadow: var(--shadow), var(--surface-highlight, inset 0 0 0 0 transparent);
|
|
361
|
+
@include frosted-glass(0.92, 10px);
|
|
353
362
|
// z-index is the caller's responsibility: top-layer consumers (dropdown,
|
|
354
363
|
// popover, tooltip portal) don't need one; standalone consumers do —
|
|
355
364
|
// see [data-ln-table] .column-filter-dropdown in components/_filter.scss.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// Responsive SVG dataset chart. Geometry belongs to ln-chart; every visual
|
|
2
|
+
// decision is exposed as a re-bindable CSS custom property.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// .chart { @include chart; }
|
|
6
|
+
|
|
7
|
+
@mixin chart {
|
|
8
|
+
--chart-height: 20rem;
|
|
9
|
+
--chart-gap: 0.75rem;
|
|
10
|
+
--chart-radius: var(--radius-md);
|
|
11
|
+
--chart-line-color: hsl(var(--color-primary));
|
|
12
|
+
--chart-line-width: 2px;
|
|
13
|
+
--chart-area-color: hsl(var(--color-primary) / 0.16);
|
|
14
|
+
--chart-grid-color: var(--border-subtle);
|
|
15
|
+
--chart-grid-column-size: 12.5%;
|
|
16
|
+
--chart-grid-row-size: 25%;
|
|
17
|
+
--chart-label-color: var(--fg-muted);
|
|
18
|
+
|
|
19
|
+
display: grid;
|
|
20
|
+
gap: var(--chart-gap);
|
|
21
|
+
min-inline-size: 0;
|
|
22
|
+
|
|
23
|
+
.chart__plot {
|
|
24
|
+
display: block;
|
|
25
|
+
inline-size: 100%;
|
|
26
|
+
block-size: var(--chart-height);
|
|
27
|
+
border-radius: var(--chart-radius);
|
|
28
|
+
background-image:
|
|
29
|
+
linear-gradient(to right, var(--chart-grid-color) 1px, transparent 1px),
|
|
30
|
+
linear-gradient(to bottom, var(--chart-grid-color) 1px, transparent 1px);
|
|
31
|
+
background-size: var(--chart-grid-column-size) 100%, 100% var(--chart-grid-row-size);
|
|
32
|
+
overflow: visible;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.chart__line {
|
|
36
|
+
fill: none;
|
|
37
|
+
stroke: var(--chart-line-color);
|
|
38
|
+
stroke-width: var(--chart-line-width);
|
|
39
|
+
stroke-linecap: round;
|
|
40
|
+
stroke-linejoin: round;
|
|
41
|
+
vector-effect: non-scaling-stroke;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.chart__area {
|
|
45
|
+
fill: var(--chart-area-color);
|
|
46
|
+
stroke: none;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.chart__labels {
|
|
50
|
+
display: grid;
|
|
51
|
+
grid-auto-flow: column;
|
|
52
|
+
grid-auto-columns: minmax(4rem, 1fr);
|
|
53
|
+
gap: var(--chart-gap);
|
|
54
|
+
margin: 0;
|
|
55
|
+
padding: 0;
|
|
56
|
+
list-style: none;
|
|
57
|
+
color: var(--chart-label-color);
|
|
58
|
+
font-size: 0.75rem;
|
|
59
|
+
line-height: 1.25;
|
|
60
|
+
overflow-x: auto;
|
|
61
|
+
scrollbar-width: thin;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.chart__label {
|
|
65
|
+
min-inline-size: 0;
|
|
66
|
+
text-align: center;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.chart__summary {
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-wrap: wrap;
|
|
72
|
+
gap: var(--chart-gap);
|
|
73
|
+
color: var(--chart-label-color);
|
|
74
|
+
font-size: 0.875rem;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.chart__empty {
|
|
78
|
+
margin: 0;
|
|
79
|
+
color: var(--chart-label-color);
|
|
80
|
+
text-align: center;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -23,24 +23,18 @@
|
|
|
23
23
|
// alert, badge, etc.) picks up the status color through inherited
|
|
24
24
|
// custom-property values — no per-mixin redeclare required.
|
|
25
25
|
@mixin semantic-color($family) {
|
|
26
|
-
// Re-bind the base color
|
|
26
|
+
// Re-bind the base color.
|
|
27
27
|
// --color-primary-hover / -focus are NOT rebound — consumers derive
|
|
28
28
|
// hover/focus from --color-accent locally via CSS relative color
|
|
29
29
|
// syntax. See _btn.scss / _form.scss / _data-table.scss / _global.scss
|
|
30
|
-
// for the derivation pattern.
|
|
31
|
-
|
|
32
|
-
// use near-white tints, dark themes use subtle dark surfaces) and
|
|
33
|
-
// cannot be derived from the base.
|
|
34
|
-
--color-primary: var(--color-#{$family});
|
|
35
|
-
--color-primary-light: var(--color-#{$family}-light);
|
|
36
|
-
--color-primary-lighter: var(--color-#{$family}-lighter);
|
|
30
|
+
// for the derivation pattern.
|
|
31
|
+
--color-primary: var(--color-#{$family});
|
|
37
32
|
|
|
38
33
|
// Re-declare accent vocabulary at this scope so var() resolves
|
|
39
|
-
// here instead of staying frozen at
|
|
40
|
-
// reading --color-accent get
|
|
41
|
-
// semantic class. --color-accent-fg
|
|
42
|
-
// any colored accent surface should stay white.
|
|
34
|
+
// here instead of staying frozen at an ancestor scope. Without this, descendants
|
|
35
|
+
// reading --color-accent get the ancestor's primary blue regardless of the
|
|
36
|
+
// semantic class. --color-accent-fg resolves to white from the derivation chain.
|
|
43
37
|
--color-accent: hsl(var(--color-primary));
|
|
44
|
-
--color-accent-tint: hsl(var(--color-
|
|
45
|
-
--color-accent-tint-strong: hsl(var(--color-
|
|
38
|
+
--color-accent-tint: hsl(var(--color-#{$family}-lighter));
|
|
39
|
+
--color-accent-tint-strong: hsl(var(--color-#{$family}-light));
|
|
46
40
|
}
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
@use 'colors' as *;
|
|
2
|
-
@use 'spacing' as *;
|
|
3
|
-
@use 'position' as *;
|
|
4
|
-
|
|
5
|
-
// ─── DOM Diagnostics & Linter Mixins ───────────────────────────
|
|
6
|
-
// These mixins are for developer-only diagnostic overlays and validations.
|
|
7
|
-
// They should be completely isolated from production bundles.
|
|
8
|
-
|
|
9
|
-
// Generic block element DOM diagnostic error
|
|
10
|
-
// Applies a red dashed border and a prominent warning banner at the top.
|
|
11
|
-
@mixin dev-dom-error($message) {
|
|
12
|
-
outline: 2px dashed hsl(var(--color-error));
|
|
13
|
-
@include relative;
|
|
14
|
-
|
|
15
|
-
&::before {
|
|
16
|
-
content: " ⚠ #{$message}";
|
|
17
|
-
display: block;
|
|
18
|
-
background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
|
|
19
|
-
color: hsl(var(--color-error));
|
|
20
|
-
padding: var(--size-xs) var(--size-sm);
|
|
21
|
-
font-size: var(--text-xs, 0.75rem);
|
|
22
|
-
font-weight: bold;
|
|
23
|
-
border-bottom: 1px solid hsl(var(--color-strong));
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Generic inline/element-level DOM diagnostic warning
|
|
28
|
-
// Appends a red inline text warning adjacent to the targeted element.
|
|
29
|
-
@mixin dev-inline-error($message) {
|
|
30
|
-
&::after {
|
|
31
|
-
content: " ⚠ #{$message}";
|
|
32
|
-
color: hsl(var(--color-error));
|
|
33
|
-
font-weight: normal;
|
|
34
|
-
white-space: nowrap;
|
|
35
|
-
margin-inline-start: var(--size-xs, 0.5rem);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Replaced-element DOM diagnostic error (img, video, iframe, etc.)
|
|
40
|
-
// Replaced elements do NOT render ::before/::after generated content, so this
|
|
41
|
-
// mixin uses a visible outline + translucent wash instead of a text label.
|
|
42
|
-
// The human-readable reason is carried by surrounding copy (e.g. a demo
|
|
43
|
-
// section header), not by a pseudo-element.
|
|
44
|
-
@mixin dev-replaced-error {
|
|
45
|
-
outline: 2px dashed hsl(var(--color-error));
|
|
46
|
-
outline-offset: var(--size-xs);
|
|
47
|
-
background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
|
|
48
|
-
}
|
|
1
|
+
@use 'colors' as *;
|
|
2
|
+
@use 'spacing' as *;
|
|
3
|
+
@use 'position' as *;
|
|
4
|
+
|
|
5
|
+
// ─── DOM Diagnostics & Linter Mixins ───────────────────────────
|
|
6
|
+
// These mixins are for developer-only diagnostic overlays and validations.
|
|
7
|
+
// They should be completely isolated from production bundles.
|
|
8
|
+
|
|
9
|
+
// Generic block element DOM diagnostic error
|
|
10
|
+
// Applies a red dashed border and a prominent warning banner at the top.
|
|
11
|
+
@mixin dev-dom-error($message) {
|
|
12
|
+
outline: 2px dashed hsl(var(--color-error));
|
|
13
|
+
@include relative;
|
|
14
|
+
|
|
15
|
+
&::before {
|
|
16
|
+
content: " ⚠ #{$message}";
|
|
17
|
+
display: block;
|
|
18
|
+
background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
|
|
19
|
+
color: hsl(var(--color-error));
|
|
20
|
+
padding: var(--size-xs) var(--size-sm);
|
|
21
|
+
font-size: var(--text-xs, 0.75rem);
|
|
22
|
+
font-weight: bold;
|
|
23
|
+
border-bottom: 1px solid hsl(var(--color-strong));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Generic inline/element-level DOM diagnostic warning
|
|
28
|
+
// Appends a red inline text warning adjacent to the targeted element.
|
|
29
|
+
@mixin dev-inline-error($message) {
|
|
30
|
+
&::after {
|
|
31
|
+
content: " ⚠ #{$message}";
|
|
32
|
+
color: hsl(var(--color-error));
|
|
33
|
+
font-weight: normal;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
margin-inline-start: var(--size-xs, 0.5rem);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Replaced-element DOM diagnostic error (img, video, iframe, etc.)
|
|
40
|
+
// Replaced elements do NOT render ::before/::after generated content, so this
|
|
41
|
+
// mixin uses a visible outline + translucent wash instead of a text label.
|
|
42
|
+
// The human-readable reason is carried by surrounding copy (e.g. a demo
|
|
43
|
+
// section header), not by a pseudo-element.
|
|
44
|
+
@mixin dev-replaced-error {
|
|
45
|
+
outline: 2px dashed hsl(var(--color-error));
|
|
46
|
+
outline-offset: var(--size-xs);
|
|
47
|
+
background: color-mix(in srgb, hsl(var(--color-error)) 15%, transparent);
|
|
48
|
+
}
|