@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
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-toast] {
|
|
4
|
+
@include toast-container;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// The <li> IS the card: structural (item) + visual (card) styling both bind
|
|
8
|
+
// here, contextually — the <li> carries no static class (no-BEM), only the
|
|
9
|
+
// filled/authored type class.
|
|
10
|
+
[data-ln-toast] > li {
|
|
11
|
+
@include toast-item;
|
|
12
|
+
@include toast-card;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
[data-ln-toast] > li.ln-enter {
|
|
16
|
+
@include toast-item-enter;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[data-ln-toast] > li.ln-out {
|
|
20
|
+
@include toast-item-out;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Type → tone. The status→tone map lives here (one place): warn maps to the
|
|
24
|
+
// warning family. SSR authors the class; the dynamic path fills it verbatim.
|
|
25
|
+
[data-ln-toast] > li.success { @include semantic-color(success); }
|
|
26
|
+
[data-ln-toast] > li.error { @include semantic-color(error); }
|
|
27
|
+
[data-ln-toast] > li:is(.warn, .warning) { @include semantic-color(warning); }
|
|
28
|
+
[data-ln-toast] > li.info { @include semantic-color(info); }
|
|
29
|
+
|
|
30
|
+
[data-ln-toast] .icon {
|
|
31
|
+
@include toast-icon;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[data-ln-toast] .icon ul {
|
|
35
|
+
@include toast-icon-list;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
[data-ln-toast] .content {
|
|
39
|
+
@include toast-content;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
[data-ln-toast] .title {
|
|
43
|
+
@include toast-title;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
[data-ln-toast] .body {
|
|
47
|
+
@include toast-body;
|
|
48
|
+
}
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
button[data-ln-toggle-for]:has(> .ln-icon:only-child) {
|
|
92
92
|
--btn-bg: transparent;
|
|
93
93
|
--btn-border: transparent;
|
|
94
|
-
--btn-bg-hover: var(--bg-
|
|
94
|
+
--btn-bg-hover: var(--bg-hover);
|
|
95
95
|
--btn-border-hover: transparent;
|
|
96
96
|
--btn-fg-hover: var(--color-fg);
|
|
97
97
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
@use '../config/mixins' as *;
|
|
2
|
+
|
|
3
|
+
[data-ln-upload] {
|
|
4
|
+
@include upload;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
[data-ln-upload-zone] {
|
|
8
|
+
@include upload-zone;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
[data-ln-upload-zone][data-ln-upload-state="dragover"] {
|
|
12
|
+
@include upload-zone-dragover;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
[data-ln-upload-list] {
|
|
16
|
+
@include upload-list;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[data-ln-upload-item] {
|
|
20
|
+
@include upload-item;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
[data-ln-upload-item] [data-ln-field="name"] {
|
|
24
|
+
@include upload-name;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
[data-ln-upload-item] [data-ln-field="sizeText"] {
|
|
28
|
+
@include upload-size;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[data-ln-upload-item] [data-ln-upload-progress] {
|
|
32
|
+
@include upload-progress;
|
|
33
|
+
|
|
34
|
+
[data-ln-progress] {
|
|
35
|
+
@include upload-progress-bar;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
[data-ln-upload-item][data-ln-upload-state="error"] {
|
|
40
|
+
@include upload-item-error;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
[data-ln-upload-item][data-ln-upload-state="deleting"]::before {
|
|
44
|
+
@include upload-item-deleting-spinner;
|
|
45
|
+
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
// CSS custom properties are also exposed at :root so JS can read via
|
|
15
15
|
// getComputedStyle(document.documentElement).getPropertyValue('--bp-md').
|
|
16
16
|
//
|
|
17
|
-
// See docs/css/breakpoints.md for full usage guide.
|
|
17
|
+
// See docs-mcp/css/breakpoints.md for full usage guide.
|
|
18
18
|
// See docs/ln-ashlar-container-queries.md for container-query doctrine.
|
|
19
19
|
// ==========================================================================
|
|
20
20
|
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
@use 'sass:color';
|
|
2
|
+
@use 'sass:math';
|
|
3
|
+
|
|
4
|
+
// ==========================================================================
|
|
5
|
+
// Contrast solver — ln-ashlar
|
|
6
|
+
// ==========================================================================
|
|
7
|
+
// Pure Sass WCAG 2.x contrast math. No consumer yet — this module is not
|
|
8
|
+
// @use'd anywhere. See .claude/plans/contrast-step1-solver.md.
|
|
9
|
+
//
|
|
10
|
+
// luminance() — WCAG relative luminance of a color
|
|
11
|
+
// contrast() — WCAG contrast ratio between two colors
|
|
12
|
+
// solve-l() — binary search: HSL lightness meeting a target ratio
|
|
13
|
+
// on-color() — pick white/ink foreground meeting a target on a fill
|
|
14
|
+
// ==========================================================================
|
|
15
|
+
|
|
16
|
+
$ln-contrast-text: 7; // text on neutral surfaces — AAA
|
|
17
|
+
$ln-contrast-fill: 7; // text on solid brand fills — AAA
|
|
18
|
+
$ln-contrast-ui: 3; // interactive boundaries (WCAG 1.4.11)
|
|
19
|
+
|
|
20
|
+
// Dark foreground pole for on-color(). Anchored to a polarity-independent
|
|
21
|
+
// literal, NOT to var(--color-neutral-900) or any ramp token — that token
|
|
22
|
+
// is 222 47% 11% in light mode but flips to 221 30% 97% (near-white) in
|
|
23
|
+
// dark mode, so binding to it would silently invert this solve on a dark
|
|
24
|
+
// island. Same precedent as the scrim tokens in _palette.scss:139-141
|
|
25
|
+
// (--color-scrim / --app-scrim-bg anchored to black rather than the ramp,
|
|
26
|
+
// for the identical reason). The value itself is light mode's
|
|
27
|
+
// --color-neutral-900, taken as a fixed Sass literal — not pure black —
|
|
28
|
+
// because it is a color ln-ashlar actually paints (--fg-default resolves
|
|
29
|
+
// to it in light mode), and it reproduces the approved architecture
|
|
30
|
+
// plan's Decision A island percentages within ~1 point; pure black drifts
|
|
31
|
+
// 4-6 points off those numbers. Do not rebind this to the ramp token.
|
|
32
|
+
$_ln-contrast-ink: hsl(222 47% 11%);
|
|
33
|
+
|
|
34
|
+
@function _linearize($channel) {
|
|
35
|
+
$c: math.div($channel, 255);
|
|
36
|
+
@if $c <= 0.03928 {
|
|
37
|
+
@return math.div($c, 12.92);
|
|
38
|
+
}
|
|
39
|
+
@return math.pow(math.div($c + 0.055, 1.055), 2.4);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@function luminance($color) {
|
|
43
|
+
$r: _linearize(color.channel($color, "red", $space: rgb));
|
|
44
|
+
$g: _linearize(color.channel($color, "green", $space: rgb));
|
|
45
|
+
$b: _linearize(color.channel($color, "blue", $space: rgb));
|
|
46
|
+
@return 0.2126 * $r + 0.7152 * $g + 0.0722 * $b;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@function _contrast-l($lum-a, $lum-b) {
|
|
50
|
+
$lighter: math.max($lum-a, $lum-b);
|
|
51
|
+
$darker: math.min($lum-a, $lum-b);
|
|
52
|
+
@return math.div($lighter + 0.05, $darker + 0.05);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@function contrast($a, $b) {
|
|
56
|
+
@return _contrast-l(luminance($a), luminance($b));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Binary search over integer HSL lightness (0–100) for the given hue/sat
|
|
60
|
+
// that meets $target contrast against $against. luminance(L) is monotonic
|
|
61
|
+
// in L for fixed hue/sat, so contrast-vs-a-fixed-pole is monotonic on
|
|
62
|
+
// each side of that pole — direction depends on whether $against is the
|
|
63
|
+
// light or dark pole:
|
|
64
|
+
// - light $against (>=0.5 luminance): search for the MAX L (closest to
|
|
65
|
+
// white) that still passes — i.e. how dark the color must stay.
|
|
66
|
+
// - dark $against (<0.5 luminance): search for the MIN L (closest to
|
|
67
|
+
// black) that still passes — i.e. how light the color must become.
|
|
68
|
+
// Returns null when even the best-case pole (L:0 for the light branch,
|
|
69
|
+
// L:100 for the dark branch) can't reach $target.
|
|
70
|
+
//
|
|
71
|
+
// Domain restriction: each branch assumes "meets target" stays monotonic
|
|
72
|
+
// as the search crosses lightness, which only holds while the searched
|
|
73
|
+
// color's luminance stays on one side of $against's luminance. Callers
|
|
74
|
+
// must keep $against comfortably away from the 0.5 boundary; every
|
|
75
|
+
// surface this system actually solves against sits far from it (darkest
|
|
76
|
+
// planned surface ≈0.014 luminance), so this is not runtime-guarded here.
|
|
77
|
+
@function solve-l($hue, $sat, $target, $against) {
|
|
78
|
+
$against-lum: luminance($against);
|
|
79
|
+
$light-surface: $against-lum >= 0.5;
|
|
80
|
+
|
|
81
|
+
@if $light-surface {
|
|
82
|
+
@if _contrast-l(luminance(hsl($hue, $sat, 0%)), $against-lum) < $target {
|
|
83
|
+
@return null;
|
|
84
|
+
}
|
|
85
|
+
$lo: 0;
|
|
86
|
+
$hi: 100;
|
|
87
|
+
@while $lo < $hi {
|
|
88
|
+
$mid: math.ceil(math.div($lo + $hi, 2));
|
|
89
|
+
@if _contrast-l(luminance(hsl($hue, $sat, $mid * 1%)), $against-lum) >= $target {
|
|
90
|
+
$lo: $mid;
|
|
91
|
+
} @else {
|
|
92
|
+
$hi: $mid - 1;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
@return $lo;
|
|
96
|
+
} @else {
|
|
97
|
+
@if _contrast-l(luminance(hsl($hue, $sat, 100%)), $against-lum) < $target {
|
|
98
|
+
@return null;
|
|
99
|
+
}
|
|
100
|
+
$lo: 0;
|
|
101
|
+
$hi: 100;
|
|
102
|
+
@while $lo < $hi {
|
|
103
|
+
$mid: math.floor(math.div($lo + $hi, 2));
|
|
104
|
+
@if _contrast-l(luminance(hsl($hue, $sat, $mid * 1%)), $against-lum) >= $target {
|
|
105
|
+
$hi: $mid;
|
|
106
|
+
} @else {
|
|
107
|
+
$lo: $mid + 1;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
@return $lo;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Picks whichever of the two foreground poles — white, or the fixed dark
|
|
115
|
+
// ink literal above — reaches $target contrast against $fill. white is
|
|
116
|
+
// tried first (most fills in this system are mid-to-dark brand tones
|
|
117
|
+
// needing a light foreground). Errors loudly if neither pole reaches the
|
|
118
|
+
// target — that fill has no legal foreground at this target and the
|
|
119
|
+
// caller must pick a different target or a different fill upstream.
|
|
120
|
+
@function on-color($fill, $target) {
|
|
121
|
+
@if _contrast-l(luminance($fill), luminance(white)) >= $target {
|
|
122
|
+
@return white;
|
|
123
|
+
}
|
|
124
|
+
@if _contrast-l(luminance($fill), luminance($_ln-contrast-ink)) >= $target {
|
|
125
|
+
@return $_ln-contrast-ink;
|
|
126
|
+
}
|
|
127
|
+
@error "on-color(): no pole (white/#{$_ln-contrast-ink}) reaches contrast #{$target} against #{$fill}.";
|
|
128
|
+
}
|
|
@@ -1,205 +1,191 @@
|
|
|
1
|
-
// ==========================================================================
|
|
2
|
-
// Density — ln-ashlar v2.0
|
|
3
|
-
// ==========================================================================
|
|
4
|
-
// Inverted density system. The :root default is DENSE (DocuFlow scale:
|
|
5
|
-
// 14px body, 52px header, 232px sidebar). Density goes UP via the
|
|
6
|
-
// [data-density] attribute, mirroring how [data-theme] works.
|
|
7
|
-
//
|
|
8
|
-
// Activation:
|
|
9
|
-
// <html> ← default: dense (DocuFlow look)
|
|
10
|
-
// <html data-density="compact"> ← explicit dense handle (same as base)
|
|
11
|
-
// <html data-density="comfortable"> ← pre-v2 default (16px / roomier)
|
|
12
|
-
// <html data-density="spacious"> ← large type, generous padding
|
|
13
|
-
// <main data-density="compact"> ← scope dense within comfortable page
|
|
14
|
-
//
|
|
15
|
-
// Density is an explicit user choice (settings toggle).
|
|
16
|
-
// It is NEVER auto-switched by viewport — viewport breakpoints handle
|
|
17
|
-
// layout, density handles information density inside that layout.
|
|
18
|
-
//
|
|
19
|
-
// What reacts: everything reading --padding-y, --gap, --text-body-*,
|
|
20
|
-
// --text-label-*, --text-title-*, --text-heading-*, --text-display-sm,
|
|
21
|
-
// --lh-*, --app-header-height, --app-sidebar-width, --density-row-h,
|
|
22
|
-
// --btn-padding-y, --input-padding-y.
|
|
23
|
-
//
|
|
24
|
-
// Interactive controls (buttons, inputs, pills): density-reactive UPWARD.
|
|
25
|
-
// Base (~38px) = WCAG AA. Comfortable (≥46px) and Spacious (≥54px) = AAA.
|
|
26
|
-
// Controls rebind --btn-padding-y and --input-padding-y in up-tier scopes.
|
|
27
|
-
// See docs/css/density.md §wcag for the height math.
|
|
28
|
-
//
|
|
29
|
-
// No parallel --density-* token scale. Density overrides existing base
|
|
30
|
-
// tokens at the scope root, exactly like theme color overrides.
|
|
31
|
-
// ==========================================================================
|
|
32
|
-
|
|
33
|
-
:root {
|
|
34
|
-
|
|
35
|
-
// -----------------------------------------------------------------------
|
|
36
|
-
// Density — Row height
|
|
37
|
-
// Minimum row height for table rows and data lists. Kept density-named
|
|
38
|
-
// because it has no analogue in the base token scale.
|
|
39
|
-
// -----------------------------------------------------------------------
|
|
40
|
-
--density-row-h: 2.25rem; // 36px — dense base
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
// [data-density="compact"] — explicit handle for the dense base.
|
|
45
|
-
//
|
|
46
|
-
// Identical to :root. Exists so:
|
|
47
|
-
// (a) a switcher can write a single attribute across all tiers including
|
|
48
|
-
// returning to base (rather than removing the attribute)
|
|
49
|
-
// (b) a region inside a comfortable page can be scoped dense:
|
|
50
|
-
// <table data-density="compact">
|
|
51
|
-
//
|
|
52
|
-
// Rebinds --density-row-h so a compact-scoped region keeps the dense row
|
|
53
|
-
// floor inside a comfortable/spacious page. NOTE: only row-h is restored —
|
|
54
|
-
// full dense region-scoping (type, padding) would re-declare the base
|
|
55
|
-
// surface; deferred. The global switcher returns to base via :root (dense).
|
|
56
|
-
// ---------------------------------------------------------------------------
|
|
57
|
-
[data-density="compact"] {
|
|
58
|
-
--density-row-h: 2.25rem; // 36px — restore dense base in scoped context
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// ---------------------------------------------------------------------------
|
|
62
|
-
// [data-density="comfortable"] — pre-v2 default, now an explicit opt-in.
|
|
63
|
-
//
|
|
64
|
-
// Restores the roomy 16px / lh 1.6 scale that was the :root default before
|
|
65
|
-
// design-v2. WCAG 2.5.5 AAA: buttons 46px, inputs/pills ≥44px.
|
|
66
|
-
//
|
|
67
|
-
// <html data-density="comfortable"> ← global comfortable
|
|
68
|
-
// <aside data-density="comfortable"> ← scoped comfortable sidebar
|
|
69
|
-
// ---------------------------------------------------------------------------
|
|
70
|
-
[data-density="comfortable"] {
|
|
71
|
-
|
|
72
|
-
// -- Logical rhythm --------------------------------------------------
|
|
73
|
-
--padding-y: var(--size-sm); // 8px (was dense 6px)
|
|
74
|
-
--gap: var(--size-sm); // 8px (was dense 6px)
|
|
75
|
-
|
|
76
|
-
// -- Body text (restore 16px / 1.6 scale) ----------------------------
|
|
77
|
-
--text-body-md: 1rem;
|
|
78
|
-
--lh-body-md: 1.6;
|
|
79
|
-
|
|
80
|
-
--text-body-sm: 0.875rem;
|
|
81
|
-
--lh-body-sm: 1.5;
|
|
82
|
-
|
|
83
|
-
// Explicit rebind — form inputs consume --font-size and don't always
|
|
84
|
-
// cascade lazy var(--text-body-md) resolutions under a scope.
|
|
85
|
-
--font-size: var(--text-body-md);
|
|
86
|
-
--line-height: var(--lh-body-md);
|
|
87
|
-
|
|
88
|
-
// -- Labels ----------------------------------------------------------
|
|
89
|
-
--text-label-md: 0.875rem;
|
|
90
|
-
--lh-label-md: 1.4;
|
|
91
|
-
|
|
92
|
-
--text-label-sm: 0.8125rem; // 13px (was dense 12px) — form-label, table th
|
|
93
|
-
--lh-label-sm: 1.4;
|
|
94
|
-
|
|
95
|
-
// -- Caption ---------------------------------------------------------
|
|
96
|
-
--text-caption: 0.8125rem; // 13px — modal subtitle, validation errors
|
|
97
|
-
--lh-caption: 1.4;
|
|
98
|
-
|
|
99
|
-
// -- Titles ----------------------------------------------------------
|
|
100
|
-
--text-title-md: 1.125rem;
|
|
101
|
-
--lh-title-md: 1.4;
|
|
102
|
-
|
|
103
|
-
--text-title-sm: 1rem;
|
|
104
|
-
--lh-title-sm: 1.4;
|
|
105
|
-
|
|
106
|
-
// -- Headings --------------------------------------------------------
|
|
107
|
-
--text-heading-sm: 1.25rem; --lh-heading-sm: 1.3;
|
|
108
|
-
--text-heading-md: 1.5rem; --lh-heading-md: 1.25;
|
|
109
|
-
--text-heading-lg: 1.875rem; --lh-heading-lg: 1.2;
|
|
110
|
-
|
|
111
|
-
// -- Display ---------------------------------------------------------
|
|
112
|
-
--text-display-sm: 2.25rem; --lh-display-sm: 1.15;
|
|
113
|
-
|
|
114
|
-
// -- App shell -------------------------------------------------------
|
|
115
|
-
--app-header-height: 3.5rem; // 56px (was dense 3.25rem)
|
|
116
|
-
--app-sidebar-width: 16rem; // 256px (was dense 14.5rem)
|
|
117
|
-
|
|
118
|
-
// -- Row height ------------------------------------------------------
|
|
119
|
-
--density-row-h: 2.75rem; // 44px (was dense 2.25rem)
|
|
120
|
-
|
|
121
|
-
// -- Interactive controls —
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
--
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
// ---------------------------------------------------------------------------
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
--
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
--
|
|
153
|
-
|
|
154
|
-
--
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
--
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
//
|
|
161
|
-
--
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
--text-
|
|
165
|
-
--lh-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
--
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
--text-
|
|
173
|
-
--lh-
|
|
174
|
-
|
|
175
|
-
--
|
|
176
|
-
--lh-
|
|
177
|
-
|
|
178
|
-
// --
|
|
179
|
-
--
|
|
180
|
-
--
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
//
|
|
187
|
-
|
|
188
|
-
--
|
|
189
|
-
|
|
190
|
-
//
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
// -- Interactive controls — WCAG 2.5.5 AAA ≥48px --------------------
|
|
194
|
-
// btn-padding-y: 2×16px + 20px line-height + 2px borders = 54px
|
|
195
|
-
// input-padding-y: indirection token read by form-input + pill-outline
|
|
196
|
-
--btn-padding-y: var(--size-md); // 16px → buttons 54px
|
|
197
|
-
--btn-padding-x: var(--size-lg); // 24px — spacious width
|
|
198
|
-
--input-padding-y: var(--size-md); // 16px → inputs/pills ≥48px
|
|
199
|
-
|
|
200
|
-
// -- Card and table padding ------------------------------------------
|
|
201
|
-
--card-padding-y: var(--size-lg); // 24px
|
|
202
|
-
--card-padding-x: var(--size-xl); // 32px
|
|
203
|
-
--table-cell-padding-y: var(--size-md); // 16px
|
|
204
|
-
--table-cell-padding-x: var(--size-xl); // 32px
|
|
205
|
-
}
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// Density — ln-ashlar v2.0
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
// Inverted density system. The :root default is DENSE (DocuFlow scale:
|
|
5
|
+
// 14px body, 52px header, 232px sidebar). Density goes UP via the
|
|
6
|
+
// [data-density] attribute, mirroring how [data-mode] / [data-theme] works.
|
|
7
|
+
//
|
|
8
|
+
// Activation:
|
|
9
|
+
// <html> ← default: dense (DocuFlow look)
|
|
10
|
+
// <html data-density="compact"> ← explicit dense handle (same as base)
|
|
11
|
+
// <html data-density="comfortable"> ← pre-v2 default (16px / roomier)
|
|
12
|
+
// <html data-density="spacious"> ← large type, generous padding
|
|
13
|
+
// <main data-density="compact"> ← scope dense within comfortable page
|
|
14
|
+
//
|
|
15
|
+
// Density is an explicit user choice (settings toggle).
|
|
16
|
+
// It is NEVER auto-switched by viewport — viewport breakpoints handle
|
|
17
|
+
// layout, density handles information density inside that layout.
|
|
18
|
+
//
|
|
19
|
+
// What reacts: everything reading --padding-y, --gap, --text-body-*,
|
|
20
|
+
// --text-label-*, --text-title-*, --text-heading-*, --text-display-sm,
|
|
21
|
+
// --lh-*, --app-header-height, --app-sidebar-width, --density-row-h,
|
|
22
|
+
// --btn-padding-y, --input-padding-y.
|
|
23
|
+
//
|
|
24
|
+
// Interactive controls (buttons, inputs, pills): density-reactive UPWARD.
|
|
25
|
+
// Base (~38px) = WCAG AA. Comfortable (≥46px) and Spacious (≥54px) = AAA.
|
|
26
|
+
// Controls rebind --btn-padding-y and --input-padding-y in up-tier scopes.
|
|
27
|
+
// See docs-mcp/css/density.md §wcag for the height math.
|
|
28
|
+
//
|
|
29
|
+
// No parallel --density-* token scale. Density overrides existing base
|
|
30
|
+
// tokens at the scope root, exactly like theme color overrides.
|
|
31
|
+
// ==========================================================================
|
|
32
|
+
|
|
33
|
+
:root {
|
|
34
|
+
|
|
35
|
+
// -----------------------------------------------------------------------
|
|
36
|
+
// Density — Row height
|
|
37
|
+
// Minimum row height for table rows and data lists. Kept density-named
|
|
38
|
+
// because it has no analogue in the base token scale.
|
|
39
|
+
// -----------------------------------------------------------------------
|
|
40
|
+
--density-row-h: 2.25rem; // 36px — dense base
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// [data-density="compact"] — explicit handle for the dense base.
|
|
45
|
+
//
|
|
46
|
+
// Identical to :root. Exists so:
|
|
47
|
+
// (a) a switcher can write a single attribute across all tiers including
|
|
48
|
+
// returning to base (rather than removing the attribute)
|
|
49
|
+
// (b) a region inside a comfortable page can be scoped dense:
|
|
50
|
+
// <table data-density="compact">
|
|
51
|
+
//
|
|
52
|
+
// Rebinds --density-row-h so a compact-scoped region keeps the dense row
|
|
53
|
+
// floor inside a comfortable/spacious page. NOTE: only row-h is restored —
|
|
54
|
+
// full dense region-scoping (type, padding) would re-declare the base
|
|
55
|
+
// surface; deferred. The global switcher returns to base via :root (dense).
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
[data-density="compact"] {
|
|
58
|
+
--density-row-h: 2.25rem; // 36px — restore dense base in scoped context
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
// [data-density="comfortable"] — pre-v2 default, now an explicit opt-in.
|
|
63
|
+
//
|
|
64
|
+
// Restores the roomy 16px / lh 1.6 scale that was the :root default before
|
|
65
|
+
// design-v2. WCAG 2.5.5 AAA: buttons 46px, inputs/pills ≥44px.
|
|
66
|
+
//
|
|
67
|
+
// <html data-density="comfortable"> ← global comfortable
|
|
68
|
+
// <aside data-density="comfortable"> ← scoped comfortable sidebar
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
[data-density="comfortable"] {
|
|
71
|
+
|
|
72
|
+
// -- Logical rhythm --------------------------------------------------
|
|
73
|
+
--padding-y: var(--size-sm); // 8px (was dense 6px)
|
|
74
|
+
--gap: var(--size-sm); // 8px (was dense 6px)
|
|
75
|
+
|
|
76
|
+
// -- Body text (restore 16px / 1.6 scale) ----------------------------
|
|
77
|
+
--text-body-md: 1rem;
|
|
78
|
+
--lh-body-md: 1.6;
|
|
79
|
+
|
|
80
|
+
--text-body-sm: 0.875rem;
|
|
81
|
+
--lh-body-sm: 1.5;
|
|
82
|
+
|
|
83
|
+
// Explicit rebind — form inputs consume --font-size and don't always
|
|
84
|
+
// cascade lazy var(--text-body-md) resolutions under a scope.
|
|
85
|
+
--font-size: var(--text-body-md);
|
|
86
|
+
--line-height: var(--lh-body-md);
|
|
87
|
+
|
|
88
|
+
// -- Labels ----------------------------------------------------------
|
|
89
|
+
--text-label-md: 0.875rem;
|
|
90
|
+
--lh-label-md: 1.4;
|
|
91
|
+
|
|
92
|
+
--text-label-sm: 0.8125rem; // 13px (was dense 12px) — form-label, table th
|
|
93
|
+
--lh-label-sm: 1.4;
|
|
94
|
+
|
|
95
|
+
// -- Caption ---------------------------------------------------------
|
|
96
|
+
--text-caption: 0.8125rem; // 13px — modal subtitle, validation errors
|
|
97
|
+
--lh-caption: 1.4;
|
|
98
|
+
|
|
99
|
+
// -- Titles ----------------------------------------------------------
|
|
100
|
+
--text-title-md: 1.125rem;
|
|
101
|
+
--lh-title-md: 1.4;
|
|
102
|
+
|
|
103
|
+
--text-title-sm: 1rem;
|
|
104
|
+
--lh-title-sm: 1.4;
|
|
105
|
+
|
|
106
|
+
// -- Headings --------------------------------------------------------
|
|
107
|
+
--text-heading-sm: 1.25rem; --lh-heading-sm: 1.3;
|
|
108
|
+
--text-heading-md: 1.5rem; --lh-heading-md: 1.25;
|
|
109
|
+
--text-heading-lg: 1.875rem; --lh-heading-lg: 1.2;
|
|
110
|
+
|
|
111
|
+
// -- Display ---------------------------------------------------------
|
|
112
|
+
--text-display-sm: 2.25rem; --lh-display-sm: 1.15;
|
|
113
|
+
|
|
114
|
+
// -- App shell -------------------------------------------------------
|
|
115
|
+
--app-header-height: 3.5rem; // 56px (was dense 3.25rem)
|
|
116
|
+
--app-sidebar-width: 16rem; // 256px (was dense 14.5rem)
|
|
117
|
+
|
|
118
|
+
// -- Row height ------------------------------------------------------
|
|
119
|
+
--density-row-h: 2.75rem; // 44px (was dense 2.25rem)
|
|
120
|
+
|
|
121
|
+
// -- Interactive controls — Tailwind / shadcn standard (38px height) ---
|
|
122
|
+
--btn-padding-y: var(--size-sm); // 8px → buttons 38px
|
|
123
|
+
--btn-padding-x: var(--size-md); // 16px
|
|
124
|
+
--input-padding-y: var(--size-sm); // 8px → inputs/selects 38px
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// [data-density="spacious"] — NEW tier above comfortable.
|
|
129
|
+
//
|
|
130
|
+
// For low-vision, touch-primary, or presentation contexts.
|
|
131
|
+
// Body 18px, generous padding, larger shell. WCAG 2.5.5 AAA:
|
|
132
|
+
// buttons 54px, inputs/pills ≥48px.
|
|
133
|
+
//
|
|
134
|
+
// <html data-density="spacious">
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
[data-density="spacious"] {
|
|
137
|
+
|
|
138
|
+
// -- Logical rhythm --------------------------------------------------
|
|
139
|
+
--padding-y: var(--size-md); // 16px
|
|
140
|
+
--gap: var(--size-md); // 16px
|
|
141
|
+
|
|
142
|
+
// -- Body text -------------------------------------------------------
|
|
143
|
+
--text-body-md: 1.125rem; // 18px
|
|
144
|
+
--lh-body-md: 1.75;
|
|
145
|
+
|
|
146
|
+
--text-body-sm: 1rem;
|
|
147
|
+
--lh-body-sm: 1.6;
|
|
148
|
+
|
|
149
|
+
--font-size: var(--text-body-md);
|
|
150
|
+
--line-height: var(--lh-body-md);
|
|
151
|
+
|
|
152
|
+
// -- Labels ----------------------------------------------------------
|
|
153
|
+
--text-label-md: 1rem;
|
|
154
|
+
--lh-label-md: 1.5;
|
|
155
|
+
|
|
156
|
+
--text-label-sm: 0.9375rem; // 15px (was dense 12px) — form-label, table th
|
|
157
|
+
--lh-label-sm: 1.45;
|
|
158
|
+
|
|
159
|
+
// -- Caption ---------------------------------------------------------
|
|
160
|
+
--text-caption: 0.9375rem; // 15px — modal subtitle, validation errors
|
|
161
|
+
--lh-caption: 1.45;
|
|
162
|
+
|
|
163
|
+
// -- Titles ----------------------------------------------------------
|
|
164
|
+
--text-title-md: 1.25rem;
|
|
165
|
+
--lh-title-md: 1.5;
|
|
166
|
+
|
|
167
|
+
--text-title-sm: 1.125rem;
|
|
168
|
+
--lh-title-sm: 1.45;
|
|
169
|
+
|
|
170
|
+
// -- Headings --------------------------------------------------------
|
|
171
|
+
--text-heading-sm: 1.5rem; --lh-heading-sm: 1.35;
|
|
172
|
+
--text-heading-md: 1.875rem; --lh-heading-md: 1.3;
|
|
173
|
+
--text-heading-lg: 2.25rem; --lh-heading-lg: 1.25;
|
|
174
|
+
|
|
175
|
+
// -- Display ---------------------------------------------------------
|
|
176
|
+
--text-display-sm: 2.75rem; --lh-display-sm: 1.2;
|
|
177
|
+
|
|
178
|
+
// -- App shell -------------------------------------------------------
|
|
179
|
+
--app-header-height: 4rem; // 64px
|
|
180
|
+
--app-sidebar-width: 17.5rem; // 280px
|
|
181
|
+
|
|
182
|
+
// -- Row height ------------------------------------------------------
|
|
183
|
+
--density-row-h: 3rem; // 48px
|
|
184
|
+
|
|
185
|
+
// -- Interactive controls — WCAG 2.5.5 AAA ≥48px --------------------
|
|
186
|
+
// btn-padding-y: 2×16px + 20px line-height + 2px borders = 54px
|
|
187
|
+
// input-padding-y: indirection token read by form-input + pill-outline
|
|
188
|
+
--btn-padding-y: var(--size-md); // 16px → buttons 54px
|
|
189
|
+
--btn-padding-x: var(--size-lg); // 24px — spacious width
|
|
190
|
+
--input-padding-y: var(--size-md); // 16px → inputs/pills ≥48px
|
|
191
|
+
}
|