@livenetworks/ashlar 1.6.1 → 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/{js → components}/ln-confirm/README.md +69 -18
- package/components/ln-confirm/ln-confirm-dev.scss +24 -0
- package/components/ln-confirm/ln-confirm.js +1 -0
- package/components/ln-confirm/ln-confirm.schema.json +66 -0
- package/components/ln-confirm/ln-confirm.scss +24 -0
- package/{js → components}/ln-confirm/src/ln-confirm.js +180 -171
- package/{js → components}/ln-core/README.md +374 -149
- package/components/ln-core/attrs.js +273 -0
- package/components/ln-core/compare.js +40 -0
- package/components/ln-core/crypto.js +265 -0
- package/components/ln-core/date.js +50 -0
- package/components/ln-core/dom.js +115 -0
- package/components/ln-core/events.js +122 -0
- package/components/ln-core/form.js +136 -0
- package/{js → components}/ln-core/hash.js +149 -92
- package/components/ln-core/helpers.js +33 -0
- package/components/ln-core/http.js +48 -0
- package/components/ln-core/index.js +11 -0
- package/components/ln-core/lifecycle.js +403 -0
- package/components/ln-core/ln-core.schema.json +109 -0
- package/components/ln-core/locale.js +55 -0
- package/components/ln-core/matching.js +78 -0
- package/components/ln-core/number.js +125 -0
- package/components/ln-core/progress.js +30 -0
- package/components/ln-core/template.js +206 -0
- package/{js → components}/ln-core/window-cache.js +247 -213
- package/{js → components}/ln-couchdb-connector/README.md +7 -5
- package/components/ln-couchdb-connector/ln-couchdb-connector.js +1 -0
- package/components/ln-couchdb-connector/ln-couchdb-connector.schema.json +50 -0
- package/{js → components}/ln-couchdb-connector/src/ln-couchdb-connector.js +29 -43
- package/{js → components}/ln-data-coordinator/README.md +109 -73
- package/components/ln-data-coordinator/ln-data-coordinator-dev.scss +8 -0
- package/components/ln-data-coordinator/ln-data-coordinator.js +1 -0
- package/components/ln-data-coordinator/ln-data-coordinator.schema.json +196 -0
- package/components/ln-data-coordinator/src/data-read-policy.js +41 -0
- package/{js → components}/ln-data-coordinator/src/ln-data-coordinator.js +411 -154
- package/{js → components}/ln-data-coordinator/src/mutation-receipts.js +0 -5
- package/{js → components}/ln-data-store/README.md +42 -17
- package/components/ln-data-store/ln-data-store-dev.scss +13 -0
- package/components/ln-data-store/ln-data-store.js +1 -0
- package/components/ln-data-store/ln-data-store.schema.json +84 -0
- package/components/ln-data-store/src/data-store-model.js +155 -0
- package/{js → components}/ln-data-store/src/ln-data-store.js +407 -105
- package/components/ln-data-store/src/window-index.js +119 -0
- package/{js → components}/ln-date/README.md +17 -7
- package/{js → components}/ln-date/ln-date-dev.scss +14 -14
- package/components/ln-date/ln-date.js +1 -0
- package/components/ln-date/ln-date.schema.json +92 -0
- package/components/ln-date/src/date-model.js +186 -0
- package/components/ln-date/src/ln-date.js +486 -0
- package/components/ln-debug/README.md +132 -0
- package/components/ln-debug/ln-debug.js +1 -0
- package/components/ln-debug/ln-debug.schema.json +28 -0
- package/components/ln-debug/src/console-sink.js +19 -0
- package/components/ln-debug/src/debug-verifier.js +331 -0
- package/components/ln-debug/src/gate.js +95 -0
- package/components/ln-debug/src/generated-attributes.js +299 -0
- package/components/ln-debug/src/ln-debug.js +60 -0
- package/{js → components}/ln-dropdown/README.md +150 -140
- package/components/ln-dropdown/ln-dropdown-dev.scss +13 -0
- package/components/ln-dropdown/ln-dropdown.js +1 -0
- package/components/ln-dropdown/ln-dropdown.schema.json +90 -0
- package/components/ln-dropdown/ln-dropdown.scss +18 -0
- package/{js → components}/ln-dropdown/src/ln-dropdown.js +114 -11
- package/{js → components}/ln-editor/README.md +11 -9
- package/components/ln-editor/ln-editor-dev.scss +18 -0
- package/components/ln-editor/ln-editor.js +1 -0
- package/components/ln-editor/ln-editor.schema.json +58 -0
- package/components/ln-editor/ln-editor.scss +13 -0
- package/{js → components}/ln-editor/src/ln-editor.js +59 -11
- package/{js → components}/ln-external-links/README.md +10 -8
- package/components/ln-external-links/ln-external-links.js +1 -0
- package/components/ln-external-links/ln-external-links.schema.json +18 -0
- package/{js → components}/ln-external-links/src/ln-external-links.js +13 -11
- package/{js → components}/ln-fill/README.md +6 -8
- package/components/ln-fill/ln-fill.js +1 -0
- package/components/ln-fill/ln-fill.schema.json +23 -0
- package/{js → components}/ln-fill/src/ln-fill.js +7 -1
- package/components/ln-filter/README.md +131 -0
- package/components/ln-filter/ln-filter-dev.scss +13 -0
- package/components/ln-filter/ln-filter.js +1 -0
- package/components/ln-filter/ln-filter.schema.json +153 -0
- package/components/ln-filter/src/filter-model.js +185 -0
- package/components/ln-filter/src/ln-filter.js +435 -0
- package/{js → components}/ln-form/README.md +260 -264
- package/components/ln-form/ln-form-dev.scss +8 -0
- package/components/ln-form/ln-form.js +1 -0
- package/components/ln-form/ln-form.schema.json +45 -0
- package/{js → components}/ln-form/src/ln-form.js +107 -99
- package/{js → components}/ln-http/README.md +11 -6
- package/components/ln-http/ln-http.js +1 -0
- package/components/ln-http/ln-http.schema.json +6 -0
- package/components/ln-http/src/http-core.js +51 -0
- package/{js → components}/ln-http/src/ln-http.js +28 -33
- package/{js → components}/ln-icon/README.md +16 -9
- package/components/ln-icon/ln-icon.schema.json +6 -0
- package/components/ln-include/README.md +75 -0
- package/components/ln-include/ln-include-dev.scss +13 -0
- package/components/ln-include/ln-include.js +1 -0
- package/components/ln-include/ln-include.schema.json +23 -0
- package/components/ln-include/src/ln-include.js +111 -0
- package/components/ln-key/README.md +130 -0
- package/components/ln-key/ln-key-dev.scss +18 -0
- package/components/ln-key/ln-key.js +1 -0
- package/components/ln-key/ln-key.schema.json +56 -0
- package/components/ln-key/src/key-model.js +146 -0
- package/components/ln-key/src/ln-key.js +201 -0
- package/{js → components}/ln-link/README.md +7 -9
- package/components/ln-link/ln-link-dev.scss +8 -0
- package/components/ln-link/ln-link.js +1 -0
- package/components/ln-link/ln-link.schema.json +22 -0
- package/{js → components}/ln-link/src/ln-link.js +16 -11
- package/components/ln-list/README.md +152 -0
- package/components/ln-list/ln-list-dev.scss +8 -0
- package/components/ln-list/ln-list.js +1 -0
- package/components/ln-list/ln-list.schema.json +166 -0
- package/components/ln-list/ln-list.scss +25 -0
- package/{js → components}/ln-list/src/ln-list.js +1301 -1216
- package/{js → components}/ln-modal/README.md +13 -10
- package/components/ln-modal/ln-modal-dev.scss +18 -0
- package/components/ln-modal/ln-modal.js +1 -0
- package/components/ln-modal/ln-modal.schema.json +54 -0
- package/components/ln-modal/ln-modal.scss +51 -0
- package/{js → components}/ln-modal/src/ln-modal.js +164 -137
- package/{js → components}/ln-nav/README.md +11 -11
- package/components/ln-nav/ln-nav.js +1 -0
- package/components/ln-nav/ln-nav.schema.json +25 -0
- package/{js → components}/ln-nav/src/ln-nav.js +25 -14
- package/components/ln-number/README.md +205 -0
- package/{js → components}/ln-number/ln-number-dev.scss +13 -13
- package/components/ln-number/ln-number.js +1 -0
- package/components/ln-number/ln-number.schema.json +63 -0
- package/components/ln-number/src/ln-number.js +400 -0
- package/components/ln-number/src/number-model.js +31 -0
- package/components/ln-obfuscator/README.md +60 -0
- package/components/ln-obfuscator/ln-obfuscator.js +1 -0
- package/components/ln-obfuscator/ln-obfuscator.schema.json +49 -0
- package/components/ln-obfuscator/src/ln-obfuscator.js +159 -0
- package/components/ln-obfuscator/src/obfuscator-model.js +250 -0
- package/{js → components}/ln-options/README.md +3 -1
- package/components/ln-options/ln-options-dev.scss +13 -0
- package/components/ln-options/ln-options.js +1 -0
- package/components/ln-options/ln-options.schema.json +41 -0
- package/{js → components}/ln-options/src/ln-options.js +13 -5
- package/components/ln-persist/README.md +151 -0
- package/components/ln-persist/ln-persist.js +1 -0
- package/components/ln-persist/ln-persist.schema.json +28 -0
- package/components/ln-persist/src/ln-persist.js +83 -0
- package/components/ln-picklist/README.md +230 -0
- package/components/ln-picklist/ln-picklist-dev.scss +22 -0
- package/components/ln-picklist/ln-picklist.js +1 -0
- package/components/ln-picklist/ln-picklist.schema.json +49 -0
- package/components/ln-picklist/src/ln-picklist.js +228 -0
- package/{js → components}/ln-popover/README.md +164 -162
- package/components/ln-popover/ln-popover-dev.scss +13 -0
- package/components/ln-popover/ln-popover.js +1 -0
- package/components/ln-popover/ln-popover.schema.json +82 -0
- package/components/ln-popover/ln-popover.scss +18 -0
- package/{js → components}/ln-popover/src/ln-popover.js +42 -36
- package/{js → components}/ln-progress/README.md +410 -413
- package/components/ln-progress/ln-progress-dev.scss +8 -0
- package/components/ln-progress/ln-progress.js +1 -0
- package/components/ln-progress/ln-progress.schema.json +40 -0
- package/components/ln-progress/src/ln-progress.js +91 -0
- package/components/ln-progress/src/progress-model.js +20 -0
- package/{js → components}/ln-router/README.md +443 -432
- package/components/ln-router/ln-router-dev.scss +13 -0
- package/components/ln-router/ln-router.js +1 -0
- package/components/ln-router/ln-router.schema.json +68 -0
- package/{js → components}/ln-router/src/ln-router.js +585 -539
- package/components/ln-router/src/router-model.js +50 -0
- package/components/ln-scroll/README.md +45 -0
- package/components/ln-scroll/ln-scroll.js +1 -0
- package/components/ln-scroll/ln-scroll.schema.json +85 -0
- package/components/ln-scroll/src/ln-scroll.js +150 -0
- package/components/ln-search/README.md +188 -0
- package/components/ln-search/ln-search-dev.scss +13 -0
- package/components/ln-search/ln-search.js +1 -0
- package/components/ln-search/ln-search.schema.json +103 -0
- package/components/ln-search/src/ln-search.js +330 -0
- package/{js → components}/ln-slug/README.md +6 -3
- package/components/ln-slug/ln-slug-dev.scss +18 -0
- package/components/ln-slug/ln-slug.js +1 -0
- package/components/ln-slug/ln-slug.schema.json +23 -0
- package/{js → components}/ln-slug/src/ln-slug.js +20 -13
- package/components/ln-slug/src/slug-model.js +21 -0
- package/{js → components}/ln-sort/README.md +178 -170
- package/{js → components}/ln-sort/ln-sort-dev.scss +8 -8
- package/components/ln-sort/ln-sort.js +1 -0
- package/components/ln-sort/ln-sort.schema.json +104 -0
- package/components/ln-sort/src/ln-sort.js +321 -0
- package/components/ln-sort/src/sort-model.js +117 -0
- package/{js → components}/ln-sortable/README.md +7 -11
- package/components/ln-sortable/ln-sortable-dev.scss +13 -0
- package/components/ln-sortable/ln-sortable.js +1 -0
- package/components/ln-sortable/ln-sortable.schema.json +36 -0
- package/{js → components}/ln-sortable/src/ln-sortable.js +8 -13
- package/{js → components}/ln-stat/README.md +3 -1
- package/components/ln-stat/ln-stat-dev.scss +8 -0
- package/components/ln-stat/ln-stat.js +1 -0
- package/components/ln-stat/ln-stat.schema.json +32 -0
- package/{js → components}/ln-stat/src/ln-stat.js +14 -18
- package/components/ln-stat/src/stat-model.js +28 -0
- package/{js → components}/ln-table/README.md +37 -24
- package/{js → components}/ln-table/ln-table-dev.scss +17 -17
- package/components/ln-table/ln-table.js +1 -0
- package/components/ln-table/ln-table.schema.json +211 -0
- package/components/ln-table/ln-table.scss +15 -0
- package/{js → components}/ln-table/src/ln-table.js +1365 -1493
- package/components/ln-table/src/table-model.js +98 -0
- package/components/ln-table-coordinator/README.md +61 -0
- package/components/ln-table-coordinator/ln-table-coordinator.js +1 -0
- package/components/ln-table-coordinator/ln-table-coordinator.schema.json +93 -0
- package/components/ln-table-coordinator/src/ln-table-coordinator.js +193 -0
- package/{js → components}/ln-tabs/README.md +32 -14
- package/components/ln-tabs/ln-tabs-dev.scss +24 -0
- package/components/ln-tabs/ln-tabs.js +1 -0
- package/components/ln-tabs/ln-tabs.schema.json +75 -0
- package/components/ln-tabs/ln-tabs.scss +8 -0
- package/components/ln-tabs/src/ln-tabs.js +207 -0
- package/components/ln-tabs/src/tabs-model.js +82 -0
- package/{js → components}/ln-time/README.md +96 -95
- package/components/ln-time/ln-time-dev.scss +13 -0
- package/components/ln-time/ln-time.js +1 -0
- package/components/ln-time/ln-time.schema.json +38 -0
- package/{js → components}/ln-time/src/ln-time.js +206 -223
- package/components/ln-time/src/time-model.js +64 -0
- package/{js → components}/ln-toast/README.md +23 -5
- package/components/ln-toast/ln-toast-dev.scss +8 -0
- package/components/ln-toast/ln-toast.js +1 -0
- package/components/ln-toast/ln-toast.schema.json +65 -0
- package/components/ln-toast/ln-toast.scss +59 -0
- package/{js → components}/ln-toast/src/ln-toast.js +233 -232
- package/{js → components}/ln-toggle/README.md +198 -196
- package/{js → components}/ln-toggle/ln-toggle-dev.scss +13 -13
- package/components/ln-toggle/ln-toggle.js +1 -0
- package/components/ln-toggle/ln-toggle.schema.json +52 -0
- package/components/ln-toggle/ln-toggle.scss +37 -0
- package/{js → components}/ln-toggle/src/ln-toggle.js +61 -46
- package/{js → components}/ln-tooltip/README.md +6 -6
- package/{js → components}/ln-tooltip/ln-tooltip-dev.scss +9 -9
- package/components/ln-tooltip/ln-tooltip.js +1 -0
- package/components/ln-tooltip/ln-tooltip.schema.json +86 -0
- package/components/ln-tooltip/ln-tooltip.scss +9 -0
- package/{js → components}/ln-tooltip/src/ln-tooltip.js +14 -3
- package/{js → components}/ln-translations/README.md +3 -1
- package/components/ln-translations/ln-translations-dev.scss +13 -0
- package/components/ln-translations/ln-translations.js +1 -0
- package/components/ln-translations/ln-translations.schema.json +120 -0
- package/{js → components}/ln-translations/src/ln-translations.js +25 -10
- package/components/ln-ui-coordinator/README.md +101 -0
- package/components/ln-ui-coordinator/ln-ui-coordinator-dev.scss +8 -0
- package/components/ln-ui-coordinator/ln-ui-coordinator.js +1 -0
- package/components/ln-ui-coordinator/ln-ui-coordinator.schema.json +60 -0
- package/{js/ln-modal-coordinator/src/ln-modal-coordinator.js → components/ln-ui-coordinator/src/ln-ui-coordinator.js} +403 -345
- package/components/ln-upload/README.md +133 -0
- package/components/ln-upload/ln-upload-dev.scss +18 -0
- package/components/ln-upload/ln-upload.js +1 -0
- package/components/ln-upload/ln-upload.schema.json +193 -0
- package/components/ln-upload/ln-upload.scss +20 -0
- package/components/ln-upload/src/ln-upload.js +652 -0
- package/components/ln-upload/src/upload-model.js +78 -0
- package/{js → components}/ln-validate/README.md +182 -180
- package/{js → components}/ln-validate/ln-validate-dev.scss +15 -15
- package/components/ln-validate/ln-validate.js +1 -0
- package/components/ln-validate/ln-validate.schema.json +50 -0
- package/components/ln-validate/ln-validate.scss +7 -0
- package/{js → components}/ln-validate/src/ln-validate.js +23 -45
- package/components/ln-validate/src/validate-model.js +64 -0
- package/components/ln-websocket-connector/README.md +166 -0
- package/components/ln-websocket-connector/ln-websocket-connector.js +1 -0
- package/components/ln-websocket-connector/ln-websocket-connector.schema.json +29 -0
- package/components/ln-websocket-connector/src/ln-websocket-connector.js +279 -0
- package/ln-ashlar.html-data.json +1796 -0
- package/package.json +84 -61
- package/{scss → theme}/base/_global.scss +1 -2
- package/{scss → theme}/base/_reset.scss +1 -1
- package/{scss → theme}/base/_typography.scss +2 -0
- package/theme/brand.css +73 -0
- package/{scss → theme}/components/_app-shell.scss +8 -0
- package/theme/components/_button.scss +24 -0
- package/theme/components/_chart.scss +5 -0
- package/theme/components/_confirm.scss +6 -0
- package/{scss → theme}/components/_date.scss +30 -22
- package/{scss → theme}/components/_dropdown.scss +6 -1
- package/theme/components/_form.scss +140 -0
- package/{scss → theme}/components/_layout.scss +6 -0
- package/{scss → theme}/components/_ln-table.scss +1 -6
- package/theme/components/_picklist.scss +3 -0
- package/{scss → theme}/components/_sort.scss +10 -10
- package/theme/components/_status-badge.scss +6 -0
- package/{scss → theme}/components/_table.scss +16 -0
- package/{scss → theme}/components/_tabs.scss +0 -4
- package/theme/components/_toast.scss +48 -0
- package/{scss → theme}/components/_toggle.scss +1 -1
- package/theme/components/_upload.scss +45 -0
- package/{scss → theme}/config/_breakpoints.scss +1 -1
- package/theme/config/_contrast.scss +128 -0
- package/{scss → theme}/config/_density.scss +191 -205
- package/theme/config/_palette.scss +274 -0
- package/theme/config/_theme.scss +293 -0
- package/{scss → theme}/config/_tokens.scss +285 -441
- package/{scss → theme}/config/mixins/_accordion.scss +1 -1
- package/{scss → theme}/config/mixins/_alert.scss +1 -0
- package/{scss → theme}/config/mixins/_app-shell.scss +4 -2
- package/{scss → theme}/config/mixins/_borders.scss +2 -0
- package/theme/config/mixins/_btn.scss +175 -0
- package/{scss → theme}/config/mixins/_card.scss +55 -46
- package/theme/config/mixins/_chart.scss +82 -0
- package/{scss → theme}/config/mixins/_collapsible.scss +2 -1
- package/{scss → theme}/config/mixins/_colors.scss +8 -14
- package/{scss → theme}/config/mixins/_diagnostics.scss +48 -48
- package/theme/config/mixins/_dropdown.scss +169 -0
- package/{scss → theme}/config/mixins/_editor.scss +0 -7
- package/{scss → theme}/config/mixins/_filter.scss +47 -47
- package/{scss → theme}/config/mixins/_footer.scss +1 -1
- package/{scss → theme}/config/mixins/_form.scss +49 -18
- package/{scss → theme}/config/mixins/_index.scss +62 -61
- package/{scss → theme}/config/mixins/_layout.scss +6 -2
- package/{scss → theme}/config/mixins/_ln-table.scss +31 -10
- package/{scss → theme}/config/mixins/_loader.scss +1 -1
- package/{scss → theme}/config/mixins/_modal.scss +145 -149
- package/{scss → theme}/config/mixins/_motion.scss +13 -0
- package/{scss → theme}/config/mixins/_nav.scss +7 -7
- package/theme/config/mixins/_picklist.scss +66 -0
- package/theme/config/mixins/_popover.scss +96 -0
- package/{scss → theme}/config/mixins/_sidebar.scss +7 -4
- package/{scss → theme}/config/mixins/_sort.scss +43 -42
- package/{scss → theme}/config/mixins/_status-badge.scss +15 -2
- package/{scss → theme}/config/mixins/_table.scss +25 -14
- package/{scss → theme}/config/mixins/_tabs.scss +1 -1
- package/{scss → theme}/config/mixins/_toast.scss +174 -179
- package/{scss → theme}/config/mixins/_tooltip.scss +2 -2
- package/{scss → theme}/config/mixins/_typography.scss +16 -5
- package/{scss → theme}/config/mixins/_upload.scss +8 -6
- package/theme/ln-ashlar-core.scss +24 -0
- package/theme/ln-ashlar-dev.scss +66 -0
- package/theme/ln-ashlar-landing.scss +56 -0
- package/{scss/ln-ashlar.scss → theme/ln-ashlar-theme.scss} +63 -69
- package/theme/ln-ashlar.scss +8 -0
- package/theme/presentation/_bento.scss +151 -0
- package/theme/presentation/_cta.scss +111 -0
- package/theme/presentation/_effects.scss +216 -0
- package/theme/presentation/_features.scss +108 -0
- package/theme/presentation/_footer.scss +129 -0
- package/theme/presentation/_hero.scss +158 -0
- package/theme/presentation/_layout.scss +170 -0
- package/theme/presentation/_navbar.scss +140 -0
- package/theme/presentation/_pricing.scss +262 -0
- package/theme/presentation/_stats.scss +87 -0
- package/theme/presentation/_testimonials.scss +124 -0
- package/theme/presentation/_tokens.scss +39 -0
- package/theme/presentation/_typography.scss +163 -0
- package/{scss → theme}/utilities/_animations.scss +38 -0
- package/{scss → theme}/utilities/_utilities.scss +6 -0
- package/web-types.json +2312 -0
- package/js/ln-accordion/ln-accordion.js +0 -1
- package/js/ln-ajax/ln-ajax.js +0 -1
- package/js/ln-api-connector/ln-api-connector.js +0 -1
- package/js/ln-api-connector/src/ln-api-connector.js +0 -368
- package/js/ln-api-queue/ln-api-queue.js +0 -1
- package/js/ln-autoresize/ln-autoresize.js +0 -1
- package/js/ln-autosave/ln-autosave.js +0 -1
- package/js/ln-circular-progress/ln-circular-progress.js +0 -1
- package/js/ln-confirm/_ln-confirm.scss +0 -24
- package/js/ln-confirm/ln-confirm.js +0 -1
- package/js/ln-core/crypto.js +0 -83
- package/js/ln-core/helpers.js +0 -788
- package/js/ln-core/index.js +0 -7
- package/js/ln-core/persist.js +0 -97
- package/js/ln-couchdb-connector/ln-couchdb-connector.js +0 -1
- package/js/ln-data-coordinator/ln-data-coordinator.js +0 -1
- package/js/ln-data-coordinator/src/data-read-policy.js +0 -18
- package/js/ln-data-store/ln-data-store.js +0 -1
- package/js/ln-date/ln-date.js +0 -1
- package/js/ln-date/src/ln-date.js +0 -603
- package/js/ln-debug/README.md +0 -58
- package/js/ln-debug/ln-debug.js +0 -1
- package/js/ln-debug/src/ln-debug.js +0 -19
- package/js/ln-dropdown/ln-dropdown.js +0 -1
- package/js/ln-dropdown/ln-dropdown.scss +0 -15
- package/js/ln-editor/ln-editor.js +0 -1
- package/js/ln-editor/ln-editor.scss +0 -43
- package/js/ln-external-links/ln-external-links.js +0 -1
- package/js/ln-fill/ln-fill.js +0 -1
- package/js/ln-filter/README.md +0 -189
- package/js/ln-filter/ln-filter-dev.scss +0 -8
- package/js/ln-filter/ln-filter.js +0 -1
- package/js/ln-filter/src/ln-filter.js +0 -419
- package/js/ln-form/ln-form.js +0 -1
- package/js/ln-http/ln-http.js +0 -1
- package/js/ln-link/ln-link.js +0 -1
- package/js/ln-list/README.md +0 -129
- package/js/ln-list/ln-list.js +0 -1
- package/js/ln-list/ln-list.scss +0 -28
- package/js/ln-modal/ln-modal-dev.scss +0 -13
- package/js/ln-modal/ln-modal.js +0 -1
- package/js/ln-modal/ln-modal.scss +0 -35
- package/js/ln-modal-coordinator/README.md +0 -99
- package/js/ln-modal-coordinator/ln-modal-coordinator-dev.scss +0 -8
- package/js/ln-modal-coordinator/ln-modal-coordinator.js +0 -1
- package/js/ln-nav/ln-nav.js +0 -1
- package/js/ln-number/README.md +0 -149
- package/js/ln-number/ln-number.js +0 -1
- package/js/ln-number/src/ln-number.js +0 -443
- package/js/ln-options/ln-options.js +0 -1
- package/js/ln-popover/ln-popover.js +0 -1
- package/js/ln-progress/ln-progress.js +0 -1
- package/js/ln-progress/src/ln-progress.js +0 -98
- package/js/ln-router/ln-router.js +0 -1
- package/js/ln-search/README.md +0 -158
- package/js/ln-search/ln-search-dev.scss +0 -8
- package/js/ln-search/ln-search.js +0 -1
- package/js/ln-search/src/ln-search.js +0 -117
- package/js/ln-slug/ln-slug.js +0 -1
- package/js/ln-sort/ln-sort.js +0 -1
- package/js/ln-sort/src/ln-sort.js +0 -178
- package/js/ln-sortable/ln-sortable.js +0 -1
- package/js/ln-stat/ln-stat.js +0 -1
- package/js/ln-table/ln-table.js +0 -1
- package/js/ln-table/ln-table.scss +0 -11
- package/js/ln-table-coordinator/README.md +0 -73
- package/js/ln-table-coordinator/ln-table-coordinator.js +0 -1
- package/js/ln-table-coordinator/src/ln-table-coordinator.js +0 -160
- package/js/ln-tabs/ln-tabs-dev.scss +0 -18
- package/js/ln-tabs/ln-tabs.js +0 -1
- package/js/ln-tabs/src/ln-tabs.js +0 -188
- package/js/ln-time/ln-time.js +0 -1
- package/js/ln-toast/ln-toast.js +0 -1
- package/js/ln-toggle/ln-toggle.js +0 -1
- package/js/ln-tooltip/ln-tooltip.js +0 -1
- package/js/ln-tooltip/ln-tooltip.scss +0 -9
- package/js/ln-translations/ln-translations.js +0 -1
- package/js/ln-upload/README.md +0 -255
- package/js/ln-upload/ln-upload.js +0 -1
- package/js/ln-upload/ln-upload.scss +0 -20
- package/js/ln-upload/src/ln-upload.js +0 -423
- package/js/ln-validate/ln-validate.js +0 -1
- package/scss/components/_button.scss +0 -20
- package/scss/components/_confirm.scss +0 -5
- package/scss/components/_form.scss +0 -107
- package/scss/components/_status-badge.scss +0 -4
- package/scss/components/_toast.scss +0 -68
- package/scss/components/_upload.scss +0 -51
- package/scss/config/_theme.scss +0 -216
- package/scss/config/mixins/_btn.scss +0 -179
- package/scss/config/mixins/_confirm.scss +0 -31
- package/scss/config/mixins/_dropdown.scss +0 -141
- package/scss/config/mixins/_popover.scss +0 -64
- package/scss/ln-ashlar-dev.scss +0 -39
- /package/{js → components}/ln-core/positioning.js +0 -0
- /package/{js → components}/ln-core/reactive.js +0 -0
- /package/{js → components}/ln-filter/ln-filter.scss +0 -0
- /package/{js → components}/ln-icon/ln-icon.js +0 -0
- /package/{js → components}/ln-icon/src/ln-icon.js +0 -0
- /package/{js → components}/ln-search/ln-search.scss +0 -0
- /package/{js → components}/ln-toast/template.html +0 -0
- /package/{scss → theme}/components/_accordion.scss +0 -0
- /package/{scss → theme}/components/_ajax.scss +0 -0
- /package/{scss → theme}/components/_alert.scss +0 -0
- /package/{scss → theme}/components/_avatar.scss +0 -0
- /package/{scss → theme}/components/_breadcrumbs.scss +0 -0
- /package/{scss → theme}/components/_card.scss +0 -0
- /package/{scss → theme}/components/_chip.scss +0 -0
- /package/{scss → theme}/components/_circular-progress.scss +0 -0
- /package/{scss → theme}/components/_editor.scss +0 -0
- /package/{scss → theme}/components/_empty-state.scss +0 -0
- /package/{scss → theme}/components/_filter.scss +0 -0
- /package/{scss → theme}/components/_link.scss +0 -0
- /package/{scss → theme}/components/_loader.scss +0 -0
- /package/{scss → theme}/components/_modal.scss +0 -0
- /package/{scss → theme}/components/_nav.scss +0 -0
- /package/{scss → theme}/components/_page-header.scss +0 -0
- /package/{scss → theme}/components/_popover.scss +0 -0
- /package/{scss → theme}/components/_progress.scss +0 -0
- /package/{scss → theme}/components/_prose.scss +0 -0
- /package/{scss → theme}/components/_scrollbar.scss +0 -0
- /package/{scss → theme}/components/_sections.scss +0 -0
- /package/{scss → theme}/components/_sidebar.scss +0 -0
- /package/{scss → theme}/components/_stat-card.scss +0 -0
- /package/{scss → theme}/components/_stepper.scss +0 -0
- /package/{scss → theme}/components/_timeline.scss +0 -0
- /package/{scss → theme}/components/_tooltip.scss +0 -0
- /package/{scss → theme}/components/_translations.scss +0 -0
- /package/{scss → theme}/config/_icons.scss +0 -0
- /package/{scss → theme}/config/_mixins.scss +0 -0
- /package/{scss → theme}/config/mixins/_ajax.scss +0 -0
- /package/{scss → theme}/config/mixins/_avatar.scss +0 -0
- /package/{scss → theme}/config/mixins/_breadcrumbs.scss +0 -0
- /package/{scss → theme}/config/mixins/_breakpoints.scss +0 -0
- /package/{scss → theme}/config/mixins/_chip.scss +0 -0
- /package/{scss → theme}/config/mixins/_circular-progress.scss +0 -0
- /package/{scss → theme}/config/mixins/_display.scss +0 -0
- /package/{scss → theme}/config/mixins/_empty-state.scss +0 -0
- /package/{scss → theme}/config/mixins/_focus.scss +0 -0
- /package/{scss → theme}/config/mixins/_interaction.scss +0 -0
- /package/{scss → theme}/config/mixins/_kbd.scss +0 -0
- /package/{scss → theme}/config/mixins/_link.scss +0 -0
- /package/{scss → theme}/config/mixins/_page-header.scss +0 -0
- /package/{scss → theme}/config/mixins/_position.scss +0 -0
- /package/{scss → theme}/config/mixins/_progress.scss +0 -0
- /package/{scss → theme}/config/mixins/_prose.scss +0 -0
- /package/{scss → theme}/config/mixins/_shadows.scss +0 -0
- /package/{scss → theme}/config/mixins/_sizing.scss +0 -0
- /package/{scss → theme}/config/mixins/_spacing.scss +0 -0
- /package/{scss → theme}/config/mixins/_stat-card.scss +0 -0
- /package/{scss → theme}/config/mixins/_stepper.scss +0 -0
- /package/{scss → theme}/config/mixins/_timeline.scss +0 -0
- /package/{scss → theme}/config/mixins/_transitions.scss +0 -0
- /package/{scss → theme}/config/mixins/_translations.scss +0 -0
- /package/{scss → theme}/tabler-icons.txt +0 -0
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
@use '../config/mixins' as *;
|
|
2
|
-
|
|
3
|
-
.ln-upload {
|
|
4
|
-
@include upload;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
.ln-upload__zone {
|
|
8
|
-
@include upload-zone;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.ln-upload__zone--dragover {
|
|
12
|
-
@include upload-zone-dragover;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.ln-upload__list {
|
|
16
|
-
@include upload-list;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.ln-upload__item {
|
|
20
|
-
@include upload-item;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.ln-upload__name {
|
|
24
|
-
@include upload-name;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.ln-upload__size {
|
|
28
|
-
@include upload-size;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.ln-upload__progress {
|
|
32
|
-
@include upload-progress;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.ln-upload__progress-bar {
|
|
36
|
-
@include upload-progress-bar;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.ln-upload__item--error {
|
|
40
|
-
@include upload-item-error;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.ln-upload__item--deleting::before {
|
|
44
|
-
@include upload-item-deleting-spinner;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
@keyframes ln-upload-spin {
|
|
48
|
-
to {
|
|
49
|
-
transform: rotate(360deg);
|
|
50
|
-
}
|
|
51
|
-
}
|
package/scss/config/_theme.scss
DELETED
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
// ==========================================================================
|
|
2
|
-
// Theme — ln-ashlar
|
|
3
|
-
// ==========================================================================
|
|
4
|
-
// Dark-mode overrides. Inverts the neutral scale in place, re-tunes
|
|
5
|
-
// shadows and primary tint layers.
|
|
6
|
-
//
|
|
7
|
-
// Activation (any of the three):
|
|
8
|
-
// <html data-theme="dark"> ← explicit force
|
|
9
|
-
// @media (prefers-color-scheme: dark) ← system preference
|
|
10
|
-
// :root:not([data-theme="light"]) ← opt-out of auto
|
|
11
|
-
//
|
|
12
|
-
// See docs/css/theming.md for the full guide.
|
|
13
|
-
// ==========================================================================
|
|
14
|
-
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
// Shared dark overrides — used by both activation paths.
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
@mixin ln-dark-tokens {
|
|
19
|
-
// Neutral scale — inverted
|
|
20
|
-
--color-neutral-50: 220 20% 8%;
|
|
21
|
-
--color-neutral-100: 220 16% 12%;
|
|
22
|
-
--color-neutral-150: 220 14% 18%;
|
|
23
|
-
--color-neutral-200: 220 13% 24%;
|
|
24
|
-
--color-neutral-300: 220 13% 36%;
|
|
25
|
-
--color-neutral-400: 218 11% 52%;
|
|
26
|
-
--color-neutral-500: 220 9% 60%;
|
|
27
|
-
--color-neutral-600: 220 11% 72%;
|
|
28
|
-
--color-neutral-700: 220 14% 82%;
|
|
29
|
-
--color-neutral-800: 220 20% 90%;
|
|
30
|
-
--color-neutral-900: 221 30% 97%;
|
|
31
|
-
|
|
32
|
-
// Vocabulary — bg
|
|
33
|
-
// Explicit ladder: body (darkest) < base < elevated < sunken (mid).
|
|
34
|
-
// Dark UI convention keeps elevated = lighter; the neutral-scale
|
|
35
|
-
// inversion alone would flip elevation direction, so we restate
|
|
36
|
-
// the four vocabulary entries explicitly.
|
|
37
|
-
--bg-base: hsl(220 16% 13%);
|
|
38
|
-
--bg-elevated: hsl(220 16% 17%);
|
|
39
|
-
--bg-sunken: hsl(220 16% 20%);
|
|
40
|
-
--bg-recessed: hsl(220 16% 9%);
|
|
41
|
-
|
|
42
|
-
// Vocabulary — fg
|
|
43
|
-
--fg-default: hsl(0 0% 95%);
|
|
44
|
-
--fg-muted: hsl(220 9% 60%);
|
|
45
|
-
--fg-subtle: hsl(218 11% 52%);
|
|
46
|
-
|
|
47
|
-
// Vocabulary — border (collapses old --color-border-light bump)
|
|
48
|
-
--border-subtle: hsl(220 14% 20%);
|
|
49
|
-
--border-strong: hsl(220 13% 36%);
|
|
50
|
-
--border-strong-hover: hsl(218 11% 52%);
|
|
51
|
-
|
|
52
|
-
// Scrim — keep dark overlay in dark mode (neutral-900 inverts to
|
|
53
|
-
// near-white, which would produce a LIGHT scrim; explicit override
|
|
54
|
-
// preserves conventional modal-darkening behavior).
|
|
55
|
-
--color-scrim: hsl(0 0% 0% / 0.6);
|
|
56
|
-
|
|
57
|
-
// Primary tint layers — re-tuned for dark surfaces
|
|
58
|
-
--color-primary-light: 232 60% 22%;
|
|
59
|
-
--color-primary-lighter: 232 50% 15%;
|
|
60
|
-
|
|
61
|
-
// Status tint layers — re-tuned for dark surfaces (parallel to primary)
|
|
62
|
-
--color-success-light: 142 50% 18%;
|
|
63
|
-
--color-success-lighter: 142 40% 13%;
|
|
64
|
-
--color-warning-light: 32 55% 20%;
|
|
65
|
-
--color-warning-lighter: 32 45% 14%;
|
|
66
|
-
--color-info-light: 217 55% 22%;
|
|
67
|
-
--color-info-lighter: 217 45% 15%;
|
|
68
|
-
--color-error-light: 0 50% 20%;
|
|
69
|
-
--color-error-lighter: 0 40% 14%;
|
|
70
|
-
|
|
71
|
-
// Secondary tint layers — re-tuned for dark surfaces
|
|
72
|
-
--color-secondary-light: 160 55% 20%;
|
|
73
|
-
--color-secondary-lighter: 160 45% 14%;
|
|
74
|
-
|
|
75
|
-
// Shadows — solid black, boosted alpha, no hue (cool-tint
|
|
76
|
-
// disappears on dark surfaces)
|
|
77
|
-
--shadow-xs:
|
|
78
|
-
0 1px 2px 0 hsl(0 0% 0% / 0.32);
|
|
79
|
-
--shadow-sm:
|
|
80
|
-
0 1px 3px 0 hsl(0 0% 0% / 0.40),
|
|
81
|
-
0 1px 2px -1px hsl(0 0% 0% / 0.30);
|
|
82
|
-
--shadow-md:
|
|
83
|
-
0 4px 12px -2px hsl(0 0% 0% / 0.48),
|
|
84
|
-
0 2px 4px -2px hsl(0 0% 0% / 0.32);
|
|
85
|
-
--shadow-lg:
|
|
86
|
-
0 12px 24px -6px hsl(0 0% 0% / 0.56),
|
|
87
|
-
0 8px 12px -4px hsl(0 0% 0% / 0.40);
|
|
88
|
-
--shadow-xl:
|
|
89
|
-
0 24px 48px -12px hsl(0 0% 0% / 0.64),
|
|
90
|
-
0 12px 24px -6px hsl(0 0% 0% / 0.48);
|
|
91
|
-
--shadow-2xl:
|
|
92
|
-
0 36px 72px -18px hsl(0 0% 0% / 0.72),
|
|
93
|
-
0 18px 36px -9px hsl(0 0% 0% / 0.56);
|
|
94
|
-
--shadow-inner:
|
|
95
|
-
inset 0 2px 4px 0 hsl(0 0% 0% / 0.32);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// ---------------------------------------------------------------------------
|
|
99
|
-
// Explicit attribute activation
|
|
100
|
-
// ---------------------------------------------------------------------------
|
|
101
|
-
[data-theme="dark"] {
|
|
102
|
-
@include ln-dark-tokens;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// ---------------------------------------------------------------------------
|
|
106
|
-
// System preference activation (opt-out via data-theme="light")
|
|
107
|
-
// ---------------------------------------------------------------------------
|
|
108
|
-
@media (prefers-color-scheme: dark) {
|
|
109
|
-
:root:not([data-theme="light"]) {
|
|
110
|
-
@include ln-dark-tokens;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// ---------------------------------------------------------------------------
|
|
115
|
-
// Named presets — demo theme picker. Activation:
|
|
116
|
-
// <html data-theme="ocean"> <html data-theme="sunset"> etc.
|
|
117
|
-
// ---------------------------------------------------------------------------
|
|
118
|
-
|
|
119
|
-
[data-theme="ocean"] {
|
|
120
|
-
--color-primary: 190 80% 35%;
|
|
121
|
-
--color-primary-light: 190 60% 90%;
|
|
122
|
-
--color-primary-lighter: 190 50% 95%;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
[data-theme="sunset"] {
|
|
126
|
-
--color-primary: 10 80% 50%;
|
|
127
|
-
--color-primary-light: 10 70% 92%;
|
|
128
|
-
--color-primary-lighter: 10 60% 96%;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
[data-theme="midnight"] {
|
|
132
|
-
@include ln-dark-tokens;
|
|
133
|
-
--color-primary: 265 70% 60%;
|
|
134
|
-
--color-primary-light: 265 50% 22%;
|
|
135
|
-
--color-primary-lighter: 265 40% 15%;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
[data-theme="glass"] {
|
|
139
|
-
@include ln-dark-tokens;
|
|
140
|
-
|
|
141
|
-
// Electric blue accent — luminescent on dark navy glass
|
|
142
|
-
--color-primary: 218 95% 62%;
|
|
143
|
-
--color-primary-light: 218 55% 24%;
|
|
144
|
-
--color-primary-lighter: 218 50% 16%;
|
|
145
|
-
|
|
146
|
-
// Flat — zero radius everywhere
|
|
147
|
-
--radius-sm: 0;
|
|
148
|
-
--radius-md: 0;
|
|
149
|
-
--radius-lg: 0;
|
|
150
|
-
--radius-xl: 0;
|
|
151
|
-
--radius-full: 0;
|
|
152
|
-
|
|
153
|
-
// Flat — no elevation shadows. --shadow-inner kept for recessed
|
|
154
|
-
// surfaces (code blocks, progress tracks) which read it as a depth
|
|
155
|
-
// affordance rather than elevation.
|
|
156
|
-
--shadow-xs: none;
|
|
157
|
-
--shadow-sm: none;
|
|
158
|
-
--shadow-md: none;
|
|
159
|
-
--shadow-lg: none;
|
|
160
|
-
--shadow-xl: none;
|
|
161
|
-
--shadow-2xl: none;
|
|
162
|
-
|
|
163
|
-
// ── Buttons — neutral chrome via --btn-* rebind, accent variant via
|
|
164
|
-
// cross-cutting --color-accent-bg-* companion tokens. Theme rebinds
|
|
165
|
-
// at :root only; library owns structure. See CLAUDE.md
|
|
166
|
-
// ## Theme Architecture for the contract.
|
|
167
|
-
--btn-bg: var(--bg-elevated);
|
|
168
|
-
--btn-bg-hover: var(--bg-sunken);
|
|
169
|
-
--btn-border: var(--color-accent);
|
|
170
|
-
--btn-border-hover: var(--color-accent-hover);
|
|
171
|
-
|
|
172
|
-
// ── Accent buttons — translucent fill via consumer-scope rebind
|
|
173
|
-
// Rebind --btn-* on the button itself (not at theme :root) so
|
|
174
|
-
// var(--color-primary) inside the values resolves on the button's
|
|
175
|
-
// cascade — letting .success / .error / .warning / .info status
|
|
176
|
-
// overrides reach the fill and text color. Token-only rebinds; no
|
|
177
|
-
// background/color/border-color declarations, no &:hover blocks
|
|
178
|
-
// (button-base already handles state via --btn-*-hover).
|
|
179
|
-
button[type="submit"],
|
|
180
|
-
.btn {
|
|
181
|
-
--btn-bg: hsl(var(--color-primary) / 0.2);
|
|
182
|
-
--btn-fg: hsl(var(--color-primary));
|
|
183
|
-
--btn-bg-hover: hsl(var(--color-primary) / 0.3);
|
|
184
|
-
--btn-fg-hover: hsl(var(--color-primary));
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// ── Nav surface — palette-only rebind ──────────────────────────
|
|
188
|
-
// @mixin nav reads --nav-link-border-color* via fallback (defaults:
|
|
189
|
-
// transparent). Glass rebinds them so hover/active draw an accent
|
|
190
|
-
// ring. --nav-list-bleed shifts the ul to the sidebar's vertical
|
|
191
|
-
// borders so dividers reach edge-to-edge; @mixin nav reads it with
|
|
192
|
-
// `0` fallback so default theme is unaffected.
|
|
193
|
-
--nav-link-border-color-hover: var(--color-accent);
|
|
194
|
-
--nav-link-border-color-active: var(--color-accent);
|
|
195
|
-
--nav-list-bleed: calc(-1 * var(--padding-x));
|
|
196
|
-
|
|
197
|
-
// Active-nav wash — Glass shifts --color-accent-tint one step
|
|
198
|
-
// darker (var(--color-primary-light) instead of -lighter) for
|
|
199
|
-
// stronger contrast on the deep dark surface. Replaces the
|
|
200
|
-
// pre-refactor descendant override on a.active. Side-effect:
|
|
201
|
-
// dropdown active items + upload drop-zone also pick up the
|
|
202
|
-
// slightly darker tint — improvement, not regression.
|
|
203
|
-
--color-accent-tint: hsl(var(--color-primary-light));
|
|
204
|
-
|
|
205
|
-
// ── Dropdown / menu-items dividers ─────────────────────────────
|
|
206
|
-
// @mixin menu-items reads SOFT --border-block-start on `li + li`
|
|
207
|
-
// and `hr` with `none` fallback. Glass rebinds the slot in scope
|
|
208
|
-
// so the divider appears for both. Scoped (not theme :root)
|
|
209
|
-
// because --border-block-start is read by ~10 other mixins
|
|
210
|
-
// (cards, tables, accordions) where the divider should NOT appear.
|
|
211
|
-
[data-ln-dropdown-menu],
|
|
212
|
-
.menu-items {
|
|
213
|
-
--border-block-start: var(--border-width) solid var(--color-border);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
}
|
|
@@ -1,179 +0,0 @@
|
|
|
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
|
-
|
|
11
|
-
// Buttons
|
|
12
|
-
// button-base — shared neutral chrome (global button + anchor-as-button)
|
|
13
|
-
// btn — accent variant of button-base; rebinds --btn-* to accent colors
|
|
14
|
-
// btn-sm — smaller size modifier
|
|
15
|
-
// btn-lg — larger size modifier
|
|
16
|
-
// btn-group — inline list of peer action buttons (ghost rebind)
|
|
17
|
-
|
|
18
|
-
// ─── button-base ──────────────────────────────────────
|
|
19
|
-
// Neutral chrome shared by <button>, <input type="submit|reset|button">,
|
|
20
|
-
// and anchors used as buttons (e.g. inside form-actions). Reads the
|
|
21
|
-
// six-token --btn-* surface: --btn-bg/fg/border (idle) and
|
|
22
|
-
// --btn-bg-hover/fg-hover/border-hover (hover + active). Both the
|
|
23
|
-
// neutral default and the accent variant are fully token-driven —
|
|
24
|
-
// the difference is which values --btn-* resolves to.
|
|
25
|
-
//
|
|
26
|
-
// Neutral default: --btn-* read from :root, where they wire to
|
|
27
|
-
// --color-bg / --color-fg / --border-strong (and --border-strong-hover
|
|
28
|
-
// companions for the hover state). Theme overrides rebind --btn-*
|
|
29
|
-
// (e.g. Glass rebinds --btn-bg to --bg-elevated, --btn-border
|
|
30
|
-
// to --color-accent for an outlined neutral chrome).
|
|
31
|
-
//
|
|
32
|
-
// Accent variant (submit + @mixin btn): rebinds --btn-* on the
|
|
33
|
-
// consumer element to accent values. Because the rebind happens on
|
|
34
|
-
// the button itself (not at :root), and because @mixin btn first
|
|
35
|
-
// re-declares --color-accent: hsl(var(--color-primary)) at the same
|
|
36
|
-
// scope, .success/.error/.warning/.info classes that override
|
|
37
|
-
// --color-primary cascade through --color-accent → --btn-* →
|
|
38
|
-
// background/color/border-color cleanly. var() always resolves at
|
|
39
|
-
// the declaration site, and the declaration site for both the
|
|
40
|
-
// rebind and button-base's reads is the button element.
|
|
41
|
-
//
|
|
42
|
-
// Why cross-cutting --color-accent-bg-* companions, not per-component
|
|
43
|
-
// --btn-accent-* tokens at :root: a per-component surface declared at
|
|
44
|
-
// :root (--btn-accent-bg: var(--color-accent)) would freeze
|
|
45
|
-
// --color-accent at :root scope and break the
|
|
46
|
-
// .success/.error/.warning/.info cascade for descendant overrides.
|
|
47
|
-
// Cross-cutting --color-accent-bg-* companions (read via fallback to
|
|
48
|
-
// --color-accent / --color-accent-fg) sidestep that: the default
|
|
49
|
-
// theme leaves them unset (mixin falls back to solid + white), Glass
|
|
50
|
-
// rebinds them at theme :root to flip the accent button to
|
|
51
|
-
// translucent. Solid-accent consumers (toast-icon, pill-checked,
|
|
52
|
-
// stepper active/complete) read --color-accent / --color-accent-fg
|
|
53
|
-
// directly and are unaffected by Glass's rebind because Glass leaves
|
|
54
|
-
// --color-accent-fg alone. See CLAUDE.md ## Theme Architecture for
|
|
55
|
-
// the full contract.
|
|
56
|
-
|
|
57
|
-
@mixin button-base {
|
|
58
|
-
@include inline-flex;
|
|
59
|
-
@include items-center;
|
|
60
|
-
@include justify-center;
|
|
61
|
-
gap: var(--gap);
|
|
62
|
-
padding: var(--padding-y) var(--padding-x);
|
|
63
|
-
@include text-sm;
|
|
64
|
-
@include font-medium;
|
|
65
|
-
border-radius: var(--radius);
|
|
66
|
-
white-space: nowrap;
|
|
67
|
-
border: var(--border-width) solid var(--btn-border);
|
|
68
|
-
outline: none;
|
|
69
|
-
background: var(--btn-bg);
|
|
70
|
-
color: var(--btn-fg);
|
|
71
|
-
@include transition-colors;
|
|
72
|
-
|
|
73
|
-
&:hover:not(:disabled) {
|
|
74
|
-
background: var(--btn-bg-hover);
|
|
75
|
-
color: var(--btn-fg-hover);
|
|
76
|
-
border-color: var(--btn-border-hover);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
&:active:not(:disabled) {
|
|
80
|
-
background: var(--btn-bg-hover);
|
|
81
|
-
border-color: var(--btn-border-hover);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
&:focus-visible {
|
|
85
|
-
@include focus-ring;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
&:disabled {
|
|
89
|
-
@include opacity-50;
|
|
90
|
-
@include cursor-not-allowed;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
@mixin btn {
|
|
95
|
-
// Accent variant — rebinds the --btn-* token surface to accent
|
|
96
|
-
// values. button-base reads --btn-bg/fg/border (idle) and
|
|
97
|
-
// --btn-bg-hover/fg-hover/border-hover (hover + active), so this
|
|
98
|
-
// mixin only needs to set tokens. No direct background/color/
|
|
99
|
-
// border-color, no &:hover/&:active blocks.
|
|
100
|
-
//
|
|
101
|
-
// Re-declares --color-accent on the consumer element so
|
|
102
|
-
// var(--color-primary) re-resolves at this scope.
|
|
103
|
-
// .success/.error/.warning/.info classes override --color-primary;
|
|
104
|
-
// without these re-declarations, --color-accent stays frozen at
|
|
105
|
-
// :root and semantic colors don't cascade.
|
|
106
|
-
//
|
|
107
|
-
// --color-accent-fg is NOT re-declared — the :root default
|
|
108
|
-
// (hsl(var(--color-white))) already cascades, and re-declaring
|
|
109
|
-
// here would shadow theme companion overrides on solid-only
|
|
110
|
-
// surfaces (which there are none here, but the redundancy is
|
|
111
|
-
// noise either way).
|
|
112
|
-
--color-accent: hsl(var(--color-primary));
|
|
113
|
-
|
|
114
|
-
// Hover state derived from --color-accent at THIS scope via CSS
|
|
115
|
-
// relative color syntax — same hue + saturation, lightness reduced
|
|
116
|
-
// by 8. Computing here (consumer scope) instead of reading a
|
|
117
|
-
// separate :root token means a consumer override (e.g.
|
|
118
|
-
// `style="--color-primary: var(--color-error)"` or a .error
|
|
119
|
-
// ancestor via @mixin semantic-color) cascades to BOTH the idle
|
|
120
|
-
// and hover surfaces — the whole state machine follows from a
|
|
121
|
-
// single token change.
|
|
122
|
-
//
|
|
123
|
-
// IMPORTANT — `calc(l - 8)` not `calc(l - 8%)`. Inside
|
|
124
|
-
// relative color syntax, channel keywords (h/s/l) evaluate to
|
|
125
|
-
// <number> tokens, not <percentage>. `l - 8%` mixes types →
|
|
126
|
-
// invalid color → browser falls back to `transparent` and the
|
|
127
|
-
// hover bg vanishes. The number form is what the spec mandates;
|
|
128
|
-
// hsl(216 95 34) without `%` is valid CSS Color 4 and reads as
|
|
129
|
-
// "lightness 34%" exactly like the legacy hsl(216 95% 34%) form.
|
|
130
|
-
//
|
|
131
|
-
// Pattern shared with @mixin pill, @mixin data-table-row-focused,
|
|
132
|
-
// the anchor hover in _global.scss, and @mixin semantic-color's
|
|
133
|
-
// status-family cascade. -light / -lighter remain explicit tokens
|
|
134
|
-
// (theme-controlled, not derivable from base).
|
|
135
|
-
--color-accent-hover: hsl(from var(--color-accent) h s calc(l - 8));
|
|
136
|
-
|
|
137
|
-
// --btn-bg / --btn-fg read translucent companions via fallback.
|
|
138
|
-
// Default theme: companions unset → falls back to --color-accent
|
|
139
|
-
// / --color-accent-fg (solid + white). Glass theme: companions
|
|
140
|
-
// rebound at :root → translucent fill + accent-colored fg. The
|
|
141
|
-
// var() fallback resolves at the consumer (this button), so the
|
|
142
|
-
// .success/.error/.warning/.info cascade through --color-primary
|
|
143
|
-
// still works in both themes.
|
|
144
|
-
--btn-bg: var(--color-accent-bg, var(--color-accent));
|
|
145
|
-
--btn-fg: var(--color-accent-bg-fg, var(--color-accent-fg));
|
|
146
|
-
--btn-border: var(--color-accent);
|
|
147
|
-
--btn-bg-hover: var(--color-accent-bg-hover, var(--color-accent-hover));
|
|
148
|
-
--btn-fg-hover: var(--color-accent-bg-fg, var(--color-accent-fg));
|
|
149
|
-
--btn-border-hover: var(--color-accent-hover);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
@mixin btn-sm {
|
|
153
|
-
--btn-padding-x: var(--size-sm-up);
|
|
154
|
-
--gap: var(--size-xs);
|
|
155
|
-
gap: var(--gap);
|
|
156
|
-
@include text-xs;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
@mixin btn-lg {
|
|
160
|
-
--btn-padding-x: var(--size-lg);
|
|
161
|
-
--btn-padding-y: var(--size-md);
|
|
162
|
-
--gap: var(--size-sm-up);
|
|
163
|
-
gap: var(--gap);
|
|
164
|
-
@include text-base;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
@mixin btn-group {
|
|
168
|
-
--gap: var(--size-xs);
|
|
169
|
-
@include inline-flex;
|
|
170
|
-
@include items-center;
|
|
171
|
-
gap: var(--gap);
|
|
172
|
-
|
|
173
|
-
button {
|
|
174
|
-
--btn-bg: transparent;
|
|
175
|
-
--btn-border: transparent;
|
|
176
|
-
color: var(--fg-subtle);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
@use 'spacing' as *;
|
|
2
|
-
@use 'typography' as *;
|
|
3
|
-
@use 'shadows' as *;
|
|
4
|
-
@use 'tooltip' as *;
|
|
5
|
-
|
|
6
|
-
// Confirm tooltip — visual tooltip for icon-only confirm buttons.
|
|
7
|
-
//
|
|
8
|
-
// Usage:
|
|
9
|
-
// .ln-confirm-tooltip { @include confirm-tooltip; }
|
|
10
|
-
//
|
|
11
|
-
// JS adds .ln-confirm-tooltip class and data-tooltip-text attribute
|
|
12
|
-
// to icon-only buttons entering confirm state.
|
|
13
|
-
|
|
14
|
-
@mixin confirm-tooltip {
|
|
15
|
-
position: relative;
|
|
16
|
-
overflow: visible !important;
|
|
17
|
-
|
|
18
|
-
// Confirm icon inherits this color
|
|
19
|
-
color: hsl(var(--color-error)) !important;
|
|
20
|
-
|
|
21
|
-
&::after {
|
|
22
|
-
@include tooltip-bubble;
|
|
23
|
-
content: attr(data-tooltip-text);
|
|
24
|
-
position: absolute;
|
|
25
|
-
bottom: 100%;
|
|
26
|
-
left: 50%;
|
|
27
|
-
transform: translateX(-50%);
|
|
28
|
-
--margin-block: var(--size-sm);
|
|
29
|
-
margin-bottom: var(--margin-block);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
@use 'display' as *;
|
|
2
|
-
@use 'spacing' as *;
|
|
3
|
-
@use 'colors' as *;
|
|
4
|
-
@use 'borders' as *;
|
|
5
|
-
@use 'shadows' as *;
|
|
6
|
-
@use 'typography' as *;
|
|
7
|
-
@use 'sizing' as *;
|
|
8
|
-
@use 'position' as *;
|
|
9
|
-
@use 'interaction' as *;
|
|
10
|
-
@use 'transitions' as *;
|
|
11
|
-
@use 'motion' as *;
|
|
12
|
-
@use 'card' as *;
|
|
13
|
-
|
|
14
|
-
// Dropdown menu — floating panel with menu items.
|
|
15
|
-
//
|
|
16
|
-
// Usage:
|
|
17
|
-
// [data-ln-dropdown] { @include dropdown; }
|
|
18
|
-
// [data-ln-dropdown-menu] { @include dropdown-menu; }
|
|
19
|
-
//
|
|
20
|
-
// Open/close state (display:none ↔ display:block + .open) is JS-driven
|
|
21
|
-
// and lives in the co-located JS SCSS, not here.
|
|
22
|
-
|
|
23
|
-
@mixin dropdown {
|
|
24
|
-
@include relative;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// ─── Menu items — shared recipe ────────────────────────
|
|
28
|
-
// The "list of interactive menu items" recipe, without container
|
|
29
|
-
// chrome or positioning. Composes with any floating container
|
|
30
|
-
// (dropdown, popover-with-menu, other future surfaces).
|
|
31
|
-
//
|
|
32
|
-
// Expected HTML:
|
|
33
|
-
// <ul>
|
|
34
|
-
// <li><a>…</a></li>
|
|
35
|
-
// <li><button>…</button></li>
|
|
36
|
-
// <li><button aria-current="true">Active item</button></li>
|
|
37
|
-
// <li><hr></li>
|
|
38
|
-
// <li><form><button type="submit">Logout</button></form></li>
|
|
39
|
-
// </ul>
|
|
40
|
-
//
|
|
41
|
-
// Selection state — `aria-current="true"` (boolean flavor) marks the
|
|
42
|
-
// active item in single-select pickers (theme, language). NOT the
|
|
43
|
-
// `="page"` / `="step"` flavors — those belong to breadcrumbs /
|
|
44
|
-
// stepper and have their own styling in those mixins.
|
|
45
|
-
|
|
46
|
-
@mixin menu-items {
|
|
47
|
-
// ─── Row resets ────────────────────────────────────
|
|
48
|
-
li {
|
|
49
|
-
margin: 0;
|
|
50
|
-
padding: 0;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
form {
|
|
54
|
-
margin: 0;
|
|
55
|
-
padding: 0;
|
|
56
|
-
display: contents;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// ─── Interactive items ─────────────────────────────
|
|
60
|
-
a,
|
|
61
|
-
button,
|
|
62
|
-
input[type="submit"],
|
|
63
|
-
input[type="reset"],
|
|
64
|
-
input[type="button"] {
|
|
65
|
-
@include w-full;
|
|
66
|
-
@include flex;
|
|
67
|
-
@include items-center;
|
|
68
|
-
justify-content: flex-start;
|
|
69
|
-
gap: var(--gap);
|
|
70
|
-
@include text-left;
|
|
71
|
-
@include text-sm;
|
|
72
|
-
@include cursor-pointer;
|
|
73
|
-
@include transition-fast;
|
|
74
|
-
background: none;
|
|
75
|
-
border: none;
|
|
76
|
-
border-radius: 0;
|
|
77
|
-
color: var(--color-fg);
|
|
78
|
-
text-decoration: none;
|
|
79
|
-
|
|
80
|
-
&:hover:not(:disabled),
|
|
81
|
-
&:active:not(:disabled) {
|
|
82
|
-
--color-bg: var(--bg-sunken);
|
|
83
|
-
background: var(--color-bg);
|
|
84
|
-
color: var(--color-fg);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
&:focus {
|
|
88
|
-
box-shadow: none;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Active item — single-select selection state.
|
|
92
|
-
// Scoped to the boolean flavor so we don't collide with
|
|
93
|
-
// breadcrumbs (`="page"`) or stepper (`="step"`).
|
|
94
|
-
&[aria-current="true"] {
|
|
95
|
-
background: var(--color-accent-tint);
|
|
96
|
-
color: var(--color-accent);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
a {
|
|
101
|
-
--padding-y: var(--size-xs);
|
|
102
|
-
--padding-x: var(--size-sm);
|
|
103
|
-
padding: var(--padding-y) var(--padding-x);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
:is(button, input[type="submit"], input[type="reset"], input[type="button"]) {
|
|
107
|
-
--btn-padding-y: var(--size-xs);
|
|
108
|
-
--btn-padding-x: var(--size-sm);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Inter-item divider — SOFT --border-block-start primitive read with
|
|
112
|
-
// `none` fallback. Default theme: no divider. Themes that opt in
|
|
113
|
-
// (Glass) rebind --border-block-start in scope.
|
|
114
|
-
li + li {
|
|
115
|
-
border-block-start: var(--border-block-start, none);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// ─── Separator ─────────────────────────────────────
|
|
119
|
-
hr {
|
|
120
|
-
border: none;
|
|
121
|
-
border-block-start: var(--border-block-start, var(--border-width) solid var(--color-border));
|
|
122
|
-
--margin-block: var(--size-xs);
|
|
123
|
-
margin-block: var(--margin-block);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
// ─── Dropdown menu — floating panel + menu items ───────
|
|
128
|
-
// Dropdown-specific chrome (anchor-positioned absolute panel) plus
|
|
129
|
-
// the shared menu-items recipe.
|
|
130
|
-
|
|
131
|
-
@mixin dropdown-menu {
|
|
132
|
-
@include floating-panel;
|
|
133
|
-
@include fixed;
|
|
134
|
-
inset: auto;
|
|
135
|
-
margin: 0;
|
|
136
|
-
--padding-y: var(--size-xs);
|
|
137
|
-
padding-block: var(--padding-y);
|
|
138
|
-
min-width: 10rem;
|
|
139
|
-
|
|
140
|
-
@include menu-items;
|
|
141
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
@use 'spacing' as *;
|
|
2
|
-
@use 'borders' as *;
|
|
3
|
-
@use 'motion' as *;
|
|
4
|
-
@use 'card' as *;
|
|
5
|
-
@use 'form' as *;
|
|
6
|
-
@use 'focus' as *;
|
|
7
|
-
|
|
8
|
-
@mixin popover {
|
|
9
|
-
@include floating-panel;
|
|
10
|
-
display: none;
|
|
11
|
-
position: fixed;
|
|
12
|
-
inset: auto;
|
|
13
|
-
margin: 0;
|
|
14
|
-
min-width: 14rem;
|
|
15
|
-
max-width: 24rem;
|
|
16
|
-
padding: var(--padding-y) var(--padding-x);
|
|
17
|
-
|
|
18
|
-
&[data-ln-popover="open"] {
|
|
19
|
-
display: block;
|
|
20
|
-
|
|
21
|
-
@include motion-safe {
|
|
22
|
-
animation: ln-popover-fade var(--transition-fast);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
&:focus {
|
|
27
|
-
outline: none;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Filter popover content: optional search + checkbox option list
|
|
31
|
-
> input[type="search"] {
|
|
32
|
-
width: 100%;
|
|
33
|
-
margin-bottom: var(--size-xs);
|
|
34
|
-
box-sizing: border-box;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
> ul {
|
|
38
|
-
list-style: none;
|
|
39
|
-
padding: 0;
|
|
40
|
-
margin: 0;
|
|
41
|
-
max-height: var(--filter-options-max-height, 15rem);
|
|
42
|
-
overflow-y: auto;
|
|
43
|
-
|
|
44
|
-
// Nav-link treatment for filter options (accent-tint wash on checked).
|
|
45
|
-
// Visually-hidden input (below) keeps the checkbox keyboard-focusable.
|
|
46
|
-
@include check-list-nav;
|
|
47
|
-
|
|
48
|
-
> li > label > input {
|
|
49
|
-
// Override pill's display:none — keep in focus order for keyboard nav
|
|
50
|
-
display: revert;
|
|
51
|
-
position: absolute;
|
|
52
|
-
width: 1px;
|
|
53
|
-
height: 1px;
|
|
54
|
-
overflow: hidden;
|
|
55
|
-
clip-path: inset(50%);
|
|
56
|
-
white-space: nowrap;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Focus ring on label when the hidden input receives keyboard focus
|
|
60
|
-
> li > label:has(> input:focus-visible) {
|
|
61
|
-
@include focus-ring;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|