@weave-framework/ui 0.2.107
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 +21 -0
- package/README.md +17 -0
- package/dist/autocomplete/autocomplete.d.ts +86 -0
- package/dist/autocomplete/autocomplete.d.ts.map +1 -0
- package/dist/autocomplete/autocomplete.js +263 -0
- package/dist/autocomplete/autocomplete.js.map +1 -0
- package/dist/badge/badge.d.ts +39 -0
- package/dist/badge/badge.d.ts.map +1 -0
- package/dist/badge/badge.js +59 -0
- package/dist/badge/badge.js.map +1 -0
- package/dist/bottom-sheet/bottom-sheet.d.ts +21 -0
- package/dist/bottom-sheet/bottom-sheet.d.ts.map +1 -0
- package/dist/bottom-sheet/bottom-sheet.js +82 -0
- package/dist/bottom-sheet/bottom-sheet.js.map +1 -0
- package/dist/button/button.d.ts +47 -0
- package/dist/button/button.d.ts.map +1 -0
- package/dist/button/button.js +47 -0
- package/dist/button/button.js.map +1 -0
- package/dist/button-toggle/button-toggle.d.ts +65 -0
- package/dist/button-toggle/button-toggle.d.ts.map +1 -0
- package/dist/button-toggle/button-toggle.js +127 -0
- package/dist/button-toggle/button-toggle.js.map +1 -0
- package/dist/card/card.d.ts +30 -0
- package/dist/card/card.d.ts.map +1 -0
- package/dist/card/card.js +32 -0
- package/dist/card/card.js.map +1 -0
- package/dist/cdk/bidi.d.ts +19 -0
- package/dist/cdk/bidi.d.ts.map +1 -0
- package/dist/cdk/bidi.js +32 -0
- package/dist/cdk/bidi.js.map +1 -0
- package/dist/cdk/breakpoints.d.ts +21 -0
- package/dist/cdk/breakpoints.d.ts.map +1 -0
- package/dist/cdk/breakpoints.js +39 -0
- package/dist/cdk/breakpoints.js.map +1 -0
- package/dist/cdk/clipboard.d.ts +8 -0
- package/dist/cdk/clipboard.d.ts.map +1 -0
- package/dist/cdk/clipboard.js +38 -0
- package/dist/cdk/clipboard.js.map +1 -0
- package/dist/cdk/data-source.d.ts +41 -0
- package/dist/cdk/data-source.d.ts.map +1 -0
- package/dist/cdk/data-source.js +36 -0
- package/dist/cdk/data-source.js.map +1 -0
- package/dist/cdk/date-adapter.d.ts +63 -0
- package/dist/cdk/date-adapter.d.ts.map +1 -0
- package/dist/cdk/date-adapter.js +155 -0
- package/dist/cdk/date-adapter.js.map +1 -0
- package/dist/cdk/drag-drop.d.ts +77 -0
- package/dist/cdk/drag-drop.d.ts.map +1 -0
- package/dist/cdk/drag-drop.js +268 -0
- package/dist/cdk/drag-drop.js.map +1 -0
- package/dist/cdk/focus-monitor.d.ts +27 -0
- package/dist/cdk/focus-monitor.d.ts.map +1 -0
- package/dist/cdk/focus-monitor.js +66 -0
- package/dist/cdk/focus-monitor.js.map +1 -0
- package/dist/cdk/focus-trap.d.ts +39 -0
- package/dist/cdk/focus-trap.d.ts.map +1 -0
- package/dist/cdk/focus-trap.js +127 -0
- package/dist/cdk/focus-trap.js.map +1 -0
- package/dist/cdk/index.d.ts +29 -0
- package/dist/cdk/index.d.ts.map +1 -0
- package/dist/cdk/index.js +29 -0
- package/dist/cdk/index.js.map +1 -0
- package/dist/cdk/interactivity.d.ts +19 -0
- package/dist/cdk/interactivity.d.ts.map +1 -0
- package/dist/cdk/interactivity.js +70 -0
- package/dist/cdk/interactivity.js.map +1 -0
- package/dist/cdk/key-manager.d.ts +41 -0
- package/dist/cdk/key-manager.d.ts.map +1 -0
- package/dist/cdk/key-manager.js +126 -0
- package/dist/cdk/key-manager.js.map +1 -0
- package/dist/cdk/live-announcer.d.ts +19 -0
- package/dist/cdk/live-announcer.d.ts.map +1 -0
- package/dist/cdk/live-announcer.js +48 -0
- package/dist/cdk/live-announcer.js.map +1 -0
- package/dist/cdk/observers.d.ts +17 -0
- package/dist/cdk/observers.d.ts.map +1 -0
- package/dist/cdk/observers.js +35 -0
- package/dist/cdk/observers.js.map +1 -0
- package/dist/cdk/overlay.d.ts +73 -0
- package/dist/cdk/overlay.d.ts.map +1 -0
- package/dist/cdk/overlay.js +154 -0
- package/dist/cdk/overlay.js.map +1 -0
- package/dist/cdk/platform.d.ts +22 -0
- package/dist/cdk/platform.d.ts.map +1 -0
- package/dist/cdk/platform.js +55 -0
- package/dist/cdk/platform.js.map +1 -0
- package/dist/cdk/portal.d.ts +31 -0
- package/dist/cdk/portal.d.ts.map +1 -0
- package/dist/cdk/portal.js +55 -0
- package/dist/cdk/portal.js.map +1 -0
- package/dist/cdk/positioning.d.ts +53 -0
- package/dist/cdk/positioning.d.ts.map +1 -0
- package/dist/cdk/positioning.js +140 -0
- package/dist/cdk/positioning.js.map +1 -0
- package/dist/cdk/scroll.d.ts +43 -0
- package/dist/cdk/scroll.d.ts.map +1 -0
- package/dist/cdk/scroll.js +97 -0
- package/dist/cdk/scroll.js.map +1 -0
- package/dist/cdk/selection-model.d.ts +50 -0
- package/dist/cdk/selection-model.d.ts.map +1 -0
- package/dist/cdk/selection-model.js +77 -0
- package/dist/cdk/selection-model.js.map +1 -0
- package/dist/cdk/virtual-scroll.d.ts +50 -0
- package/dist/cdk/virtual-scroll.d.ts.map +1 -0
- package/dist/cdk/virtual-scroll.js +92 -0
- package/dist/cdk/virtual-scroll.js.map +1 -0
- package/dist/checkbox/checkbox.d.ts +65 -0
- package/dist/checkbox/checkbox.d.ts.map +1 -0
- package/dist/checkbox/checkbox.js +82 -0
- package/dist/checkbox/checkbox.js.map +1 -0
- package/dist/chips/chips.d.ts +65 -0
- package/dist/chips/chips.d.ts.map +1 -0
- package/dist/chips/chips.js +119 -0
- package/dist/chips/chips.js.map +1 -0
- package/dist/context-menu/context-menu.d.ts +32 -0
- package/dist/context-menu/context-menu.d.ts.map +1 -0
- package/dist/context-menu/context-menu.js +63 -0
- package/dist/context-menu/context-menu.js.map +1 -0
- package/dist/datepicker/datepicker.d.ts +100 -0
- package/dist/datepicker/datepicker.d.ts.map +1 -0
- package/dist/datepicker/datepicker.js +440 -0
- package/dist/datepicker/datepicker.js.map +1 -0
- package/dist/dialog/dialog.d.ts +27 -0
- package/dist/dialog/dialog.d.ts.map +1 -0
- package/dist/dialog/dialog.js +47 -0
- package/dist/dialog/dialog.js.map +1 -0
- package/dist/dialog/modal-core.d.ts +42 -0
- package/dist/dialog/modal-core.d.ts.map +1 -0
- package/dist/dialog/modal-core.js +103 -0
- package/dist/dialog/modal-core.js.map +1 -0
- package/dist/expansion/expansion.d.ts +71 -0
- package/dist/expansion/expansion.d.ts.map +1 -0
- package/dist/expansion/expansion.js +127 -0
- package/dist/expansion/expansion.js.map +1 -0
- package/dist/form-field/form-field.d.ts +48 -0
- package/dist/form-field/form-field.d.ts.map +1 -0
- package/dist/form-field/form-field.js +89 -0
- package/dist/form-field/form-field.js.map +1 -0
- package/dist/grid-list/grid-list.d.ts +25 -0
- package/dist/grid-list/grid-list.d.ts.map +1 -0
- package/dist/grid-list/grid-list.js +22 -0
- package/dist/grid-list/grid-list.js.map +1 -0
- package/dist/icon/icon.d.ts +40 -0
- package/dist/icon/icon.d.ts.map +1 -0
- package/dist/icon/icon.js +99 -0
- package/dist/icon/icon.js.map +1 -0
- package/dist/icon/icons.d.ts +60 -0
- package/dist/icon/icons.d.ts.map +1 -0
- package/dist/icon/icons.js +126 -0
- package/dist/icon/icons.js.map +1 -0
- package/dist/icon/lucide-icons.d.ts +11 -0
- package/dist/icon/lucide-icons.d.ts.map +1 -0
- package/dist/icon/lucide-icons.js +65 -0
- package/dist/icon/lucide-icons.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/input/input.d.ts +90 -0
- package/dist/input/input.d.ts.map +1 -0
- package/dist/input/input.js +138 -0
- package/dist/input/input.js.map +1 -0
- package/dist/internal/compose.d.ts +26 -0
- package/dist/internal/compose.d.ts.map +1 -0
- package/dist/internal/compose.js +32 -0
- package/dist/internal/compose.js.map +1 -0
- package/dist/list/list.d.ts +70 -0
- package/dist/list/list.d.ts.map +1 -0
- package/dist/list/list.js +144 -0
- package/dist/list/list.js.map +1 -0
- package/dist/menu/menu-core.d.ts +56 -0
- package/dist/menu/menu-core.d.ts.map +1 -0
- package/dist/menu/menu-core.js +122 -0
- package/dist/menu/menu-core.js.map +1 -0
- package/dist/menu/menu.d.ts +31 -0
- package/dist/menu/menu.d.ts.map +1 -0
- package/dist/menu/menu.js +68 -0
- package/dist/menu/menu.js.map +1 -0
- package/dist/menubar/menubar.d.ts +49 -0
- package/dist/menubar/menubar.d.ts.map +1 -0
- package/dist/menubar/menubar.js +162 -0
- package/dist/menubar/menubar.js.map +1 -0
- package/dist/paginator/paginator.d.ts +89 -0
- package/dist/paginator/paginator.d.ts.map +1 -0
- package/dist/paginator/paginator.js +159 -0
- package/dist/paginator/paginator.js.map +1 -0
- package/dist/popover-edit/popover-edit.d.ts +33 -0
- package/dist/popover-edit/popover-edit.d.ts.map +1 -0
- package/dist/popover-edit/popover-edit.js +107 -0
- package/dist/popover-edit/popover-edit.js.map +1 -0
- package/dist/progress-bar/progress-bar.d.ts +32 -0
- package/dist/progress-bar/progress-bar.d.ts.map +1 -0
- package/dist/progress-bar/progress-bar.js +42 -0
- package/dist/progress-bar/progress-bar.js.map +1 -0
- package/dist/progress-spinner/progress-spinner.d.ts +25 -0
- package/dist/progress-spinner/progress-spinner.d.ts.map +1 -0
- package/dist/progress-spinner/progress-spinner.js +25 -0
- package/dist/progress-spinner/progress-spinner.js.map +1 -0
- package/dist/radio/radio.d.ts +68 -0
- package/dist/radio/radio.d.ts.map +1 -0
- package/dist/radio/radio.js +81 -0
- package/dist/radio/radio.js.map +1 -0
- package/dist/ripple/ripple.d.ts +20 -0
- package/dist/ripple/ripple.d.ts.map +1 -0
- package/dist/ripple/ripple.js +41 -0
- package/dist/ripple/ripple.js.map +1 -0
- package/dist/select/select.d.ts +83 -0
- package/dist/select/select.d.ts.map +1 -0
- package/dist/select/select.js +320 -0
- package/dist/select/select.js.map +1 -0
- package/dist/shared/options.d.ts +44 -0
- package/dist/shared/options.d.ts.map +1 -0
- package/dist/shared/options.js +59 -0
- package/dist/shared/options.js.map +1 -0
- package/dist/shared/positions.d.ts +20 -0
- package/dist/shared/positions.d.ts.map +1 -0
- package/dist/shared/positions.js +27 -0
- package/dist/shared/positions.js.map +1 -0
- package/dist/sidenav/sidenav.d.ts +65 -0
- package/dist/sidenav/sidenav.d.ts.map +1 -0
- package/dist/sidenav/sidenav.js +120 -0
- package/dist/sidenav/sidenav.js.map +1 -0
- package/dist/slide-toggle/slide-toggle.d.ts +56 -0
- package/dist/slide-toggle/slide-toggle.d.ts.map +1 -0
- package/dist/slide-toggle/slide-toggle.js +62 -0
- package/dist/slide-toggle/slide-toggle.js.map +1 -0
- package/dist/slider/slider.d.ts +69 -0
- package/dist/slider/slider.d.ts.map +1 -0
- package/dist/slider/slider.js +184 -0
- package/dist/slider/slider.js.map +1 -0
- package/dist/snackbar/snackbar.d.ts +25 -0
- package/dist/snackbar/snackbar.d.ts.map +1 -0
- package/dist/snackbar/snackbar.js +135 -0
- package/dist/snackbar/snackbar.js.map +1 -0
- package/dist/stepper/stepper.d.ts +87 -0
- package/dist/stepper/stepper.d.ts.map +1 -0
- package/dist/stepper/stepper.js +142 -0
- package/dist/stepper/stepper.js.map +1 -0
- package/dist/table/table.d.ts +140 -0
- package/dist/table/table.d.ts.map +1 -0
- package/dist/table/table.js +312 -0
- package/dist/table/table.js.map +1 -0
- package/dist/tabs/tabs.d.ts +64 -0
- package/dist/tabs/tabs.d.ts.map +1 -0
- package/dist/tabs/tabs.js +126 -0
- package/dist/tabs/tabs.js.map +1 -0
- package/dist/timepicker/timepicker.d.ts +83 -0
- package/dist/timepicker/timepicker.d.ts.map +1 -0
- package/dist/timepicker/timepicker.js +303 -0
- package/dist/timepicker/timepicker.js.map +1 -0
- package/dist/toolbar/toolbar.d.ts +34 -0
- package/dist/toolbar/toolbar.d.ts.map +1 -0
- package/dist/toolbar/toolbar.js +35 -0
- package/dist/toolbar/toolbar.js.map +1 -0
- package/dist/tooltip/tooltip.d.ts +30 -0
- package/dist/tooltip/tooltip.d.ts.map +1 -0
- package/dist/tooltip/tooltip.js +109 -0
- package/dist/tooltip/tooltip.js.map +1 -0
- package/dist/tree/tree.d.ts +100 -0
- package/dist/tree/tree.d.ts.map +1 -0
- package/dist/tree/tree.js +288 -0
- package/dist/tree/tree.js.map +1 -0
- package/package.json +230 -0
- package/src/styles/_api.scss +384 -0
- package/src/styles/_helpers.scss +101 -0
- package/src/styles/_index.scss +12 -0
- package/src/styles/_ref.scss +20 -0
- package/src/styles/_sass-utils.scss +14 -0
- package/src/styles/_token-utils.scss +24 -0
- package/src/styles/components/autocomplete/_index.scss +10 -0
- package/src/styles/components/autocomplete/_styles.scss +46 -0
- package/src/styles/components/autocomplete/_tokens.scss +28 -0
- package/src/styles/components/badge/_index.scss +12 -0
- package/src/styles/components/badge/_styles.scss +72 -0
- package/src/styles/components/badge/_tokens.scss +27 -0
- package/src/styles/components/bottom-sheet/_index.scss +9 -0
- package/src/styles/components/bottom-sheet/_styles.scss +77 -0
- package/src/styles/components/bottom-sheet/_tokens.scss +33 -0
- package/src/styles/components/button/_index.scss +12 -0
- package/src/styles/components/button/_styles.scss +106 -0
- package/src/styles/components/button/_tokens.scss +36 -0
- package/src/styles/components/button-toggle/_index.scss +12 -0
- package/src/styles/components/button-toggle/_styles.scss +57 -0
- package/src/styles/components/button-toggle/_tokens.scss +25 -0
- package/src/styles/components/card/_index.scss +15 -0
- package/src/styles/components/card/_styles.scss +68 -0
- package/src/styles/components/card/_tokens.scss +26 -0
- package/src/styles/components/checkbox/_index.scss +13 -0
- package/src/styles/components/checkbox/_styles.scss +108 -0
- package/src/styles/components/checkbox/_tokens.scss +25 -0
- package/src/styles/components/chips/_index.scss +12 -0
- package/src/styles/components/chips/_styles.scss +83 -0
- package/src/styles/components/chips/_tokens.scss +28 -0
- package/src/styles/components/datepicker/_index.scss +10 -0
- package/src/styles/components/datepicker/_styles.scss +203 -0
- package/src/styles/components/datepicker/_tokens.scss +50 -0
- package/src/styles/components/dialog/_index.scss +9 -0
- package/src/styles/components/dialog/_styles.scss +54 -0
- package/src/styles/components/dialog/_tokens.scss +29 -0
- package/src/styles/components/divider/_index.scss +8 -0
- package/src/styles/components/divider/_styles.scss +18 -0
- package/src/styles/components/divider/_tokens.scss +12 -0
- package/src/styles/components/expansion/_index.scss +14 -0
- package/src/styles/components/expansion/_styles.scss +128 -0
- package/src/styles/components/expansion/_tokens.scss +32 -0
- package/src/styles/components/form-field/_index.scss +13 -0
- package/src/styles/components/form-field/_styles.scss +39 -0
- package/src/styles/components/form-field/_tokens.scss +19 -0
- package/src/styles/components/grid-list/_index.scss +12 -0
- package/src/styles/components/grid-list/_styles.scss +31 -0
- package/src/styles/components/grid-list/_tokens.scss +18 -0
- package/src/styles/components/icon/_index.scss +8 -0
- package/src/styles/components/icon/_styles.scss +18 -0
- package/src/styles/components/icon/_tokens.scss +8 -0
- package/src/styles/components/input/_index.scss +13 -0
- package/src/styles/components/input/_styles.scss +111 -0
- package/src/styles/components/input/_tokens.scss +21 -0
- package/src/styles/components/list/_index.scss +12 -0
- package/src/styles/components/list/_styles.scss +87 -0
- package/src/styles/components/list/_tokens.scss +31 -0
- package/src/styles/components/menu/_index.scss +9 -0
- package/src/styles/components/menu/_styles.scss +60 -0
- package/src/styles/components/menu/_tokens.scss +33 -0
- package/src/styles/components/menubar/_index.scss +9 -0
- package/src/styles/components/menubar/_styles.scss +41 -0
- package/src/styles/components/menubar/_tokens.scss +25 -0
- package/src/styles/components/overlay/_index.scss +8 -0
- package/src/styles/components/overlay/_styles.scss +25 -0
- package/src/styles/components/overlay/_tokens.scss +21 -0
- package/src/styles/components/paginator/_index.scss +14 -0
- package/src/styles/components/paginator/_styles.scss +77 -0
- package/src/styles/components/paginator/_tokens.scss +28 -0
- package/src/styles/components/popover-edit/_index.scss +9 -0
- package/src/styles/components/popover-edit/_styles.scss +31 -0
- package/src/styles/components/popover-edit/_tokens.scss +21 -0
- package/src/styles/components/progress-bar/_index.scss +11 -0
- package/src/styles/components/progress-bar/_styles.scss +39 -0
- package/src/styles/components/progress-bar/_tokens.scss +17 -0
- package/src/styles/components/progress-spinner/_index.scss +11 -0
- package/src/styles/components/progress-spinner/_styles.scss +26 -0
- package/src/styles/components/progress-spinner/_tokens.scss +15 -0
- package/src/styles/components/radio/_index.scss +14 -0
- package/src/styles/components/radio/_styles.scss +92 -0
- package/src/styles/components/radio/_tokens.scss +24 -0
- package/src/styles/components/ripple/_index.scss +8 -0
- package/src/styles/components/ripple/_styles.scss +20 -0
- package/src/styles/components/ripple/_tokens.scss +12 -0
- package/src/styles/components/select/_index.scss +9 -0
- package/src/styles/components/select/_styles.scss +120 -0
- package/src/styles/components/select/_tokens.scss +35 -0
- package/src/styles/components/sidenav/_index.scss +14 -0
- package/src/styles/components/sidenav/_styles.scss +105 -0
- package/src/styles/components/sidenav/_tokens.scss +24 -0
- package/src/styles/components/slide-toggle/_index.scss +13 -0
- package/src/styles/components/slide-toggle/_styles.scss +86 -0
- package/src/styles/components/slide-toggle/_tokens.scss +24 -0
- package/src/styles/components/slider/_index.scss +13 -0
- package/src/styles/components/slider/_styles.scss +77 -0
- package/src/styles/components/slider/_tokens.scss +21 -0
- package/src/styles/components/snackbar/_index.scss +8 -0
- package/src/styles/components/snackbar/_styles.scss +59 -0
- package/src/styles/components/snackbar/_tokens.scss +28 -0
- package/src/styles/components/stepper/_index.scss +14 -0
- package/src/styles/components/stepper/_styles.scss +129 -0
- package/src/styles/components/stepper/_tokens.scss +44 -0
- package/src/styles/components/table/_index.scss +14 -0
- package/src/styles/components/table/_styles.scss +202 -0
- package/src/styles/components/table/_tokens.scss +47 -0
- package/src/styles/components/tabs/_index.scss +13 -0
- package/src/styles/components/tabs/_styles.scss +76 -0
- package/src/styles/components/tabs/_tokens.scss +28 -0
- package/src/styles/components/timepicker/_index.scss +9 -0
- package/src/styles/components/timepicker/_styles.scss +136 -0
- package/src/styles/components/timepicker/_tokens.scss +46 -0
- package/src/styles/components/toolbar/_index.scss +12 -0
- package/src/styles/components/toolbar/_styles.scss +41 -0
- package/src/styles/components/toolbar/_tokens.scss +17 -0
- package/src/styles/components/tooltip/_index.scss +8 -0
- package/src/styles/components/tooltip/_styles.scss +29 -0
- package/src/styles/components/tooltip/_tokens.scss +22 -0
- package/src/styles/components/tree/_index.scss +13 -0
- package/src/styles/components/tree/_styles.scss +99 -0
- package/src/styles/components/tree/_tokens.scss +38 -0
- package/src/styles/theme/_defaults.scss +50 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use 'sass:list';
|
|
3
|
+
@use 'sass-utils';
|
|
4
|
+
@use 'token-utils';
|
|
5
|
+
@use 'theme/defaults';
|
|
6
|
+
|
|
7
|
+
// Built-in component register. Each entry: name → its grouped token schema.
|
|
8
|
+
// New built-in components add themselves here (this is the "walk all republics" list).
|
|
9
|
+
@use 'components/divider' as divider;
|
|
10
|
+
@use 'components/ripple' as ripple;
|
|
11
|
+
@use 'components/icon' as icon;
|
|
12
|
+
@use 'components/button' as button;
|
|
13
|
+
@use 'components/button-toggle' as button-toggle;
|
|
14
|
+
@use 'components/badge' as badge;
|
|
15
|
+
@use 'components/card' as card;
|
|
16
|
+
@use 'components/toolbar' as toolbar;
|
|
17
|
+
@use 'components/list' as list-cmp;
|
|
18
|
+
@use 'components/grid-list' as grid-list;
|
|
19
|
+
@use 'components/progress-bar' as progress-bar;
|
|
20
|
+
@use 'components/progress-spinner' as progress-spinner;
|
|
21
|
+
@use 'components/checkbox' as checkbox;
|
|
22
|
+
@use 'components/radio' as radio;
|
|
23
|
+
@use 'components/slide-toggle' as slide-toggle;
|
|
24
|
+
@use 'components/form-field' as form-field;
|
|
25
|
+
@use 'components/input' as input;
|
|
26
|
+
@use 'components/chips' as chips;
|
|
27
|
+
// Shared "core republic" (master §4.1): panel/backdrop chrome for every U3 overlay component.
|
|
28
|
+
@use 'components/overlay' as overlay;
|
|
29
|
+
@use 'components/tooltip' as tooltip;
|
|
30
|
+
@use 'components/menu' as menu;
|
|
31
|
+
@use 'components/dialog' as dialog;
|
|
32
|
+
@use 'components/bottom-sheet' as bottom-sheet;
|
|
33
|
+
@use 'components/snackbar' as snackbar;
|
|
34
|
+
@use 'components/select' as select;
|
|
35
|
+
@use 'components/autocomplete' as autocomplete;
|
|
36
|
+
// U4 complex/data components.
|
|
37
|
+
@use 'components/expansion' as expansion;
|
|
38
|
+
@use 'components/tabs' as tabs;
|
|
39
|
+
@use 'components/stepper' as stepper;
|
|
40
|
+
@use 'components/slider' as slider;
|
|
41
|
+
@use 'components/paginator' as paginator;
|
|
42
|
+
@use 'components/sidenav' as sidenav;
|
|
43
|
+
@use 'components/table' as table;
|
|
44
|
+
@use 'components/tree' as tree;
|
|
45
|
+
@use 'components/datepicker' as datepicker;
|
|
46
|
+
@use 'components/timepicker' as timepicker;
|
|
47
|
+
@use 'components/menubar' as menubar;
|
|
48
|
+
@use 'components/popover-edit' as popover-edit;
|
|
49
|
+
|
|
50
|
+
$_builtins: (
|
|
51
|
+
'divider': divider.$tokens,
|
|
52
|
+
'ripple': ripple.$tokens,
|
|
53
|
+
'icon': icon.$tokens,
|
|
54
|
+
'button': button.$tokens,
|
|
55
|
+
'button-toggle': button-toggle.$tokens,
|
|
56
|
+
'badge': badge.$tokens,
|
|
57
|
+
'card': card.$tokens,
|
|
58
|
+
'toolbar': toolbar.$tokens,
|
|
59
|
+
'list': list-cmp.$tokens,
|
|
60
|
+
'grid-list': grid-list.$tokens,
|
|
61
|
+
'progress-bar': progress-bar.$tokens,
|
|
62
|
+
'progress-spinner': progress-spinner.$tokens,
|
|
63
|
+
'checkbox': checkbox.$tokens,
|
|
64
|
+
'radio': radio.$tokens,
|
|
65
|
+
'slide-toggle': slide-toggle.$tokens,
|
|
66
|
+
'form-field': form-field.$tokens,
|
|
67
|
+
'input': input.$tokens,
|
|
68
|
+
'chips': chips.$tokens,
|
|
69
|
+
'overlay': overlay.$tokens,
|
|
70
|
+
'tooltip': tooltip.$tokens,
|
|
71
|
+
'menu': menu.$tokens,
|
|
72
|
+
'dialog': dialog.$tokens,
|
|
73
|
+
'bottom-sheet': bottom-sheet.$tokens,
|
|
74
|
+
'snackbar': snackbar.$tokens,
|
|
75
|
+
'select': select.$tokens,
|
|
76
|
+
'autocomplete': autocomplete.$tokens,
|
|
77
|
+
'expansion': expansion.$tokens,
|
|
78
|
+
'tabs': tabs.$tokens,
|
|
79
|
+
'stepper': stepper.$tokens,
|
|
80
|
+
'slider': slider.$tokens,
|
|
81
|
+
'paginator': paginator.$tokens,
|
|
82
|
+
'sidenav': sidenav.$tokens,
|
|
83
|
+
'table': table.$tokens,
|
|
84
|
+
'tree': tree.$tokens,
|
|
85
|
+
'datepicker': datepicker.$tokens,
|
|
86
|
+
'timepicker': timepicker.$tokens,
|
|
87
|
+
'menubar': menubar.$tokens,
|
|
88
|
+
'popover-edit': popover-edit.$tokens,
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
/* ───────────────────────── internal emit ───────────────────────── */
|
|
92
|
+
|
|
93
|
+
// Emit global theme vars (--weave-<group>-<key>). $groups null = all groups.
|
|
94
|
+
@mixin _globals($theme, $groups) {
|
|
95
|
+
@each $group, $tokens in $theme {
|
|
96
|
+
@if $groups == null or list.index($groups, $group) {
|
|
97
|
+
@each $key, $value in $tokens {
|
|
98
|
+
--weave-#{$group}-#{$key}: #{$value};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Emit every built-in component's vars. $categories null = all categories.
|
|
105
|
+
@mixin _components($categories) {
|
|
106
|
+
@each $name, $grouped in $_builtins {
|
|
107
|
+
@include token-utils.create-token-values($name, token-utils.flatten($grouped, $categories));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* ───────────────────────── public API ───────────────────────── */
|
|
112
|
+
|
|
113
|
+
// One call: set the whole theme. $overrides is a partial map merged over Weave
|
|
114
|
+
// defaults (pass only what you change). Emits all global vars + all component vars.
|
|
115
|
+
@mixin theme($overrides: ()) {
|
|
116
|
+
$t: map.deep-merge(defaults.$light, $overrides);
|
|
117
|
+
@include sass-utils.current-selector-or-root() {
|
|
118
|
+
@include _globals($t, null);
|
|
119
|
+
@include _components(null);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Partial recompile — only that concern's vars (global group + matching component category).
|
|
124
|
+
@mixin colors($overrides: ()) {
|
|
125
|
+
$t: map.deep-merge(defaults.$light, $overrides);
|
|
126
|
+
@include sass-utils.current-selector-or-root() {
|
|
127
|
+
@include _globals($t, ('color'));
|
|
128
|
+
@include _components(('color'));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@mixin sizes($overrides: ()) {
|
|
133
|
+
$t: map.deep-merge(defaults.$light, $overrides);
|
|
134
|
+
@include sass-utils.current-selector-or-root() {
|
|
135
|
+
@include _globals($t, ('shape'));
|
|
136
|
+
@include _components(('size'));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@mixin typography($overrides: ()) {
|
|
141
|
+
$t: map.deep-merge(defaults.$light, $overrides);
|
|
142
|
+
@include sass-utils.current-selector-or-root() {
|
|
143
|
+
@include _globals($t, ('text'));
|
|
144
|
+
@include _components(('typography'));
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Register a component (built-in OR a dev's custom one) → emit its --weave-<name>-* vars.
|
|
149
|
+
// $grouped is a grouped schema; values use ref('group.key') for theme refs, or literals.
|
|
150
|
+
@mixin define($name, $grouped) {
|
|
151
|
+
@include sass-utils.current-selector-or-root() {
|
|
152
|
+
@include token-utils.create-token-values($name, token-utils.flatten($grouped, null));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Override existing tokens + add new ones (one map). At root → global; in a selector → scoped.
|
|
157
|
+
@mixin overrides($name, $map) {
|
|
158
|
+
@include sass-utils.current-selector-or-root() {
|
|
159
|
+
@each $key, $value in $map {
|
|
160
|
+
--weave-#{$name}-#{$key}: #{$value};
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Named per-component override (discoverable, Material-style). Built-ins get one each.
|
|
166
|
+
@mixin divider-overrides($map) {
|
|
167
|
+
@include overrides('divider', $map);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@mixin ripple-overrides($map) {
|
|
171
|
+
@include overrides('ripple', $map);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@mixin icon-overrides($map) {
|
|
175
|
+
@include overrides('icon', $map);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@mixin button-overrides($map) {
|
|
179
|
+
@include overrides('button', $map);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
@mixin button-toggle-overrides($map) {
|
|
183
|
+
@include overrides('button-toggle', $map);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
@mixin badge-overrides($map) {
|
|
187
|
+
@include overrides('badge', $map);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@mixin card-overrides($map) {
|
|
191
|
+
@include overrides('card', $map);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
@mixin toolbar-overrides($map) {
|
|
195
|
+
@include overrides('toolbar', $map);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@mixin list-overrides($map) {
|
|
199
|
+
@include overrides('list', $map);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@mixin grid-list-overrides($map) {
|
|
203
|
+
@include overrides('grid-list', $map);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
@mixin progress-bar-overrides($map) {
|
|
207
|
+
@include overrides('progress-bar', $map);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@mixin progress-spinner-overrides($map) {
|
|
211
|
+
@include overrides('progress-spinner', $map);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
@mixin checkbox-overrides($map) {
|
|
215
|
+
@include overrides('checkbox', $map);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
@mixin radio-overrides($map) {
|
|
219
|
+
@include overrides('radio', $map);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
@mixin slide-toggle-overrides($map) {
|
|
223
|
+
@include overrides('slide-toggle', $map);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
@mixin form-field-overrides($map) {
|
|
227
|
+
@include overrides('form-field', $map);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
@mixin input-overrides($map) {
|
|
231
|
+
@include overrides('input', $map);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
@mixin chips-overrides($map) {
|
|
235
|
+
@include overrides('chips', $map);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
@mixin overlay-overrides($map) {
|
|
239
|
+
@include overrides('overlay', $map);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
@mixin tooltip-overrides($map) {
|
|
243
|
+
@include overrides('tooltip', $map);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
@mixin menu-overrides($map) {
|
|
247
|
+
@include overrides('menu', $map);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
@mixin dialog-overrides($map) {
|
|
251
|
+
@include overrides('dialog', $map);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
@mixin bottom-sheet-overrides($map) {
|
|
255
|
+
@include overrides('bottom-sheet', $map);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
@mixin snackbar-overrides($map) {
|
|
259
|
+
@include overrides('snackbar', $map);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
@mixin select-overrides($map) {
|
|
263
|
+
@include overrides('select', $map);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
@mixin autocomplete-overrides($map) {
|
|
267
|
+
@include overrides('autocomplete', $map);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
@mixin expansion-overrides($map) {
|
|
271
|
+
@include overrides('expansion', $map);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
@mixin tabs-overrides($map) {
|
|
275
|
+
@include overrides('tabs', $map);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
@mixin stepper-overrides($map) {
|
|
279
|
+
@include overrides('stepper', $map);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
@mixin slider-overrides($map) {
|
|
283
|
+
@include overrides('slider', $map);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
@mixin paginator-overrides($map) {
|
|
287
|
+
@include overrides('paginator', $map);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
@mixin sidenav-overrides($map) {
|
|
291
|
+
@include overrides('sidenav', $map);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
@mixin table-overrides($map) {
|
|
295
|
+
@include overrides('table', $map);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
@mixin tree-overrides($map) {
|
|
299
|
+
@include overrides('tree', $map);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
@mixin datepicker-overrides($map) {
|
|
303
|
+
@include overrides('datepicker', $map);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
@mixin timepicker-overrides($map) {
|
|
307
|
+
@include overrides('timepicker', $map);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
@mixin menubar-overrides($map) {
|
|
311
|
+
@include overrides('menubar', $map);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
@mixin popover-edit-overrides($map) {
|
|
315
|
+
@include overrides('popover-edit', $map);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// Honour `prefers-reduced-motion: reduce` for the library's OWN elements. Scoped to
|
|
319
|
+
// `weave-*` classes so it never touches the consumer's markup. Neutralises transitions AND
|
|
320
|
+
// animations (including the infinite progress-bar / spinner loops) by collapsing their
|
|
321
|
+
// duration — using a tiny non-zero duration + a single iteration keeps `animation-fill-mode`
|
|
322
|
+
// end-states intact (safer than `animation: none`, which can strand a reveal at its start).
|
|
323
|
+
// `all-styles()` includes this automatically; include it yourself if you compile per-component.
|
|
324
|
+
@mixin reduced-motion() {
|
|
325
|
+
@media (prefers-reduced-motion: reduce) {
|
|
326
|
+
[class^='weave-'],
|
|
327
|
+
[class*=' weave-'] {
|
|
328
|
+
&,
|
|
329
|
+
&::before,
|
|
330
|
+
&::after {
|
|
331
|
+
animation-duration: 0.001ms !important;
|
|
332
|
+
animation-delay: 0ms !important;
|
|
333
|
+
animation-iteration-count: 1 !important;
|
|
334
|
+
transition-duration: 0.001ms !important;
|
|
335
|
+
transition-delay: 0ms !important;
|
|
336
|
+
scroll-behavior: auto !important;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// Emit the structural CSS (class rules) for every built-in component.
|
|
343
|
+
// Prefer per-component includes to keep CSS small; all-styles() is the convenience.
|
|
344
|
+
@mixin all-styles() {
|
|
345
|
+
@include divider.styles();
|
|
346
|
+
@include ripple.styles();
|
|
347
|
+
@include icon.styles();
|
|
348
|
+
@include button.styles();
|
|
349
|
+
@include button-toggle.styles();
|
|
350
|
+
@include badge.styles();
|
|
351
|
+
@include card.styles();
|
|
352
|
+
@include toolbar.styles();
|
|
353
|
+
@include list-cmp.styles();
|
|
354
|
+
@include grid-list.styles();
|
|
355
|
+
@include progress-bar.styles();
|
|
356
|
+
@include progress-spinner.styles();
|
|
357
|
+
@include checkbox.styles();
|
|
358
|
+
@include radio.styles();
|
|
359
|
+
@include slide-toggle.styles();
|
|
360
|
+
@include form-field.styles();
|
|
361
|
+
@include input.styles();
|
|
362
|
+
@include chips.styles();
|
|
363
|
+
@include overlay.styles();
|
|
364
|
+
@include tooltip.styles();
|
|
365
|
+
@include menu.styles();
|
|
366
|
+
@include dialog.styles();
|
|
367
|
+
@include bottom-sheet.styles();
|
|
368
|
+
@include snackbar.styles();
|
|
369
|
+
@include select.styles();
|
|
370
|
+
@include autocomplete.styles();
|
|
371
|
+
@include expansion.styles();
|
|
372
|
+
@include tabs.styles();
|
|
373
|
+
@include stepper.styles();
|
|
374
|
+
@include slider.styles();
|
|
375
|
+
@include paginator.styles();
|
|
376
|
+
@include sidenav.styles();
|
|
377
|
+
@include table.styles();
|
|
378
|
+
@include tree.styles();
|
|
379
|
+
@include datepicker.styles();
|
|
380
|
+
@include timepicker.styles();
|
|
381
|
+
@include menubar.styles();
|
|
382
|
+
@include popover-edit.styles();
|
|
383
|
+
@include reduced-motion();
|
|
384
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// Reusable style fragments for building your own component base ("bring-your-own-skin").
|
|
2
|
+
// Reach for these instead of re-authoring primitives.
|
|
3
|
+
|
|
4
|
+
@mixin focus-ring($color: var(--weave-color-accent), $width: 2px, $offset: 1px) {
|
|
5
|
+
outline: $width solid #{$color};
|
|
6
|
+
outline-offset: $offset;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Host for a Ripple: the ripple circle is absolutely positioned and must be clipped.
|
|
10
|
+
@mixin ripple-host() {
|
|
11
|
+
position: relative;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@mixin truncate() {
|
|
16
|
+
overflow: hidden;
|
|
17
|
+
white-space: nowrap;
|
|
18
|
+
text-overflow: ellipsis;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@mixin visually-hidden() {
|
|
22
|
+
position: absolute;
|
|
23
|
+
width: 1px;
|
|
24
|
+
height: 1px;
|
|
25
|
+
padding: 0;
|
|
26
|
+
margin: -1px;
|
|
27
|
+
overflow: hidden;
|
|
28
|
+
clip: rect(0 0 0 0);
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
border: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Strip native form-control chrome so a wrapper can carry the visual.
|
|
34
|
+
@mixin field-reset() {
|
|
35
|
+
appearance: none;
|
|
36
|
+
background: transparent;
|
|
37
|
+
border: 0;
|
|
38
|
+
// Suppress the browser's native focus outline — these custom fields show focus via
|
|
39
|
+
// the component's own accent underline (:focus-within), never a native box. Without
|
|
40
|
+
// this, a field built on field-reset (e.g. Autocomplete) shows a stray focus rectangle.
|
|
41
|
+
outline: none;
|
|
42
|
+
font: inherit;
|
|
43
|
+
color: inherit;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// THE Weave field look — a hairline bottom border that swaps to accent on focus (no box,
|
|
47
|
+
// no layout shift). The single source of the underline shared by Input + Select (and thus
|
|
48
|
+
// Autocomplete, which composes Input) — include it, don't re-write it per component.
|
|
49
|
+
@mixin field-underline($border, $focus, $width: 1.5px) {
|
|
50
|
+
border: 0;
|
|
51
|
+
border-bottom: #{$width} solid #{$border};
|
|
52
|
+
background: transparent;
|
|
53
|
+
transition: border-color 0.15s ease, box-shadow 0.15s ease;
|
|
54
|
+
|
|
55
|
+
&:focus,
|
|
56
|
+
&:focus-within {
|
|
57
|
+
outline: none;
|
|
58
|
+
border-bottom-color: #{$focus};
|
|
59
|
+
box-shadow: inset 0 -1px 0 #{$focus};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// THE Weave check ✓ — a rotated border-"L" glyph (pure CSS, no SVG), shared by Checkbox /
|
|
64
|
+
// Select option / Stepper. Set `content` + shape here; the consumer positions + rotates it
|
|
65
|
+
// (translate/rotate differ per use).
|
|
66
|
+
@mixin checkmark($color, $width: 5px, $height: 9px, $thickness: 2px) {
|
|
67
|
+
content: '';
|
|
68
|
+
width: #{$width};
|
|
69
|
+
height: #{$height};
|
|
70
|
+
border: solid #{$color};
|
|
71
|
+
border-width: 0 #{$thickness} #{$thickness} 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// THE Weave inline clear (×) button — the small round reset shared by Input + Select.
|
|
75
|
+
@mixin clear-button($color, $hover, $size: 18px) {
|
|
76
|
+
@include field-reset;
|
|
77
|
+
display: inline-flex;
|
|
78
|
+
align-items: center;
|
|
79
|
+
justify-content: center;
|
|
80
|
+
width: #{$size};
|
|
81
|
+
height: #{$size};
|
|
82
|
+
border-radius: 50%;
|
|
83
|
+
color: #{$color};
|
|
84
|
+
cursor: pointer;
|
|
85
|
+
|
|
86
|
+
&:hover {
|
|
87
|
+
color: #{$hover};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Hairline overlay-panel chrome (menus, dialogs, dropdowns, tooltips): opaque surface +
|
|
92
|
+
// 1px line + radius, NO drop shadow (the Weave design has none — a 1px line + an opaque
|
|
93
|
+
// surface separate the panel from the page). Reuse for bring-your-own-skin panels.
|
|
94
|
+
@mixin overlay-panel() {
|
|
95
|
+
box-sizing: border-box;
|
|
96
|
+
min-width: var(--weave-overlay-min-width);
|
|
97
|
+
background: var(--weave-overlay-surface);
|
|
98
|
+
color: var(--weave-overlay-text);
|
|
99
|
+
border: 1px solid var(--weave-overlay-line);
|
|
100
|
+
border-radius: var(--weave-overlay-radius);
|
|
101
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Public SCSS entry: `@use '@weave-framework/ui' as weave;`
|
|
2
|
+
//
|
|
3
|
+
// @include weave.theme(( color: (accent: #2f9e8f) )); // set theme (partial override)
|
|
4
|
+
// @include weave.all-styles(); // structural CSS for built-ins
|
|
5
|
+
// @include weave.divider-overrides(( thickness: 2px )); // tweak one component
|
|
6
|
+
// @include weave.define('rating', ( ... )); // your own component
|
|
7
|
+
// .btn { @include weave.focus-ring; } // reusable helpers
|
|
8
|
+
// color: weave.ref('color.ink'); // reference a theme var
|
|
9
|
+
|
|
10
|
+
@forward 'api';
|
|
11
|
+
@forward 'ref';
|
|
12
|
+
@forward 'helpers';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
@use 'sass:string';
|
|
2
|
+
|
|
3
|
+
// Internal: replace every occurrence of $search in $str with $replace.
|
|
4
|
+
@function _replace($str, $search, $replace) {
|
|
5
|
+
$index: string.index($str, $search);
|
|
6
|
+
@if $index {
|
|
7
|
+
@return string.slice($str, 1, $index - 1) + $replace +
|
|
8
|
+
_replace(string.slice($str, $index + string.length($search)), $search, $replace);
|
|
9
|
+
}
|
|
10
|
+
@return $str;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// ref('color.ink') → var(--weave-color-ink)
|
|
14
|
+
//
|
|
15
|
+
// A component token whose value is a *theme reference* uses ref() so it points at
|
|
16
|
+
// a global theme var — changing the theme cascades to every component. Literal
|
|
17
|
+
// values (18px, 1px, etc.) are written as-is.
|
|
18
|
+
@function ref($path) {
|
|
19
|
+
@return var(--weave-#{_replace($path, '.', '-')});
|
|
20
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Emit @content under the current selector if there is one, else under :root.
|
|
2
|
+
//
|
|
3
|
+
// This is what makes overrides scope: include a token mixin at the top level and
|
|
4
|
+
// the vars land on :root (global); include it inside a selector and they land on
|
|
5
|
+
// that selector only (scoped override / per-instance).
|
|
6
|
+
@mixin current-selector-or-root() {
|
|
7
|
+
@if & {
|
|
8
|
+
@content;
|
|
9
|
+
} @else {
|
|
10
|
+
:root {
|
|
11
|
+
@content;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use 'sass:list';
|
|
3
|
+
|
|
4
|
+
// Emit `--weave-<prefix>-<name>: <value>;` for every entry in a FLAT token map.
|
|
5
|
+
@mixin create-token-values($prefix, $tokens) {
|
|
6
|
+
@each $name, $value in $tokens {
|
|
7
|
+
--weave-#{$prefix}-#{$name}: #{$value};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Flatten a component's grouped schema — (color: (...), size: (...)) — into a flat
|
|
12
|
+
// (name: value) map. If $categories is a list, keep only those groups (for partial
|
|
13
|
+
// recompile, e.g. colors() → just the 'color' group).
|
|
14
|
+
@function flatten($grouped, $categories: null) {
|
|
15
|
+
$out: ();
|
|
16
|
+
@each $category, $tokens in $grouped {
|
|
17
|
+
@if $categories == null or list.index($categories, $category) {
|
|
18
|
+
@each $name, $value in $tokens {
|
|
19
|
+
$out: map.set($out, $name, $value);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
@return $out;
|
|
24
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Autocomplete — a text field with a suggestion listbox. Behavior lives in autocomplete.ts
|
|
2
|
+
// (a Weave component: native input + CDK-overlay suggestion panel, static or async options
|
|
3
|
+
// with field-mapping accessors + subtext, aria-autocomplete=list + activedescendant, forms
|
|
4
|
+
// binding); this is the visual: an underline text field (like Input, with prefix/suffix/
|
|
5
|
+
// clear) + a suggestion panel of option rows (label + optional lighter description) with an
|
|
6
|
+
// active-highlight, plus an empty-results row.
|
|
7
|
+
//
|
|
8
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin).
|
|
9
|
+
@forward 'tokens';
|
|
10
|
+
@forward 'styles';
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// autocomplete — styles() mixin. The field IS the Input component (composed), so all the
|
|
2
|
+
// field chrome (underline / focus / clear / prefix-suffix / invalid) lives in Input — only
|
|
3
|
+
// the suggestion panel is styled here. The panel reuses the shared overlay-panel chrome;
|
|
4
|
+
// option rows carry a label + optional lighter description with an active-highlight class.
|
|
5
|
+
// Forwarded by ./_index.scss.
|
|
6
|
+
@use '../../helpers' as helpers;
|
|
7
|
+
|
|
8
|
+
@mixin styles() {
|
|
9
|
+
.weave-autocomplete__panel {
|
|
10
|
+
@include helpers.overlay-panel;
|
|
11
|
+
max-height: var(--weave-autocomplete-panel-max-height);
|
|
12
|
+
overflow-y: auto;
|
|
13
|
+
padding: var(--weave-autocomplete-panel-padding-y) 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.weave-autocomplete__option {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
justify-content: center;
|
|
20
|
+
gap: var(--weave-autocomplete-option-gap);
|
|
21
|
+
min-height: var(--weave-autocomplete-option-min-height);
|
|
22
|
+
padding: var(--weave-autocomplete-option-padding-y) var(--weave-autocomplete-option-padding-x);
|
|
23
|
+
color: var(--weave-autocomplete-text);
|
|
24
|
+
font-size: var(--weave-autocomplete-font-size);
|
|
25
|
+
cursor: pointer;
|
|
26
|
+
transition: background var(--weave-autocomplete-duration) ease;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.weave-autocomplete__option--active {
|
|
30
|
+
background: var(--weave-autocomplete-option-hover);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.weave-autocomplete__description {
|
|
34
|
+
font-size: var(--weave-autocomplete-description-size);
|
|
35
|
+
font-weight: var(--weave-autocomplete-description-weight);
|
|
36
|
+
line-height: var(--weave-autocomplete-description-line-height);
|
|
37
|
+
color: var(--weave-autocomplete-description);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Empty-results row — non-interactive, lighter.
|
|
41
|
+
.weave-autocomplete__empty {
|
|
42
|
+
padding: var(--weave-autocomplete-empty-padding-y) var(--weave-autocomplete-option-padding-x);
|
|
43
|
+
color: var(--weave-autocomplete-description);
|
|
44
|
+
font-size: var(--weave-autocomplete-font-size);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// autocomplete — design tokens (schema). The field IS the Input component (composed), so
|
|
2
|
+
// only the suggestion listbox panel is tokenized here (it reuses the shared overlay-panel
|
|
3
|
+
// chrome). Forwarded by ./_index.scss.
|
|
4
|
+
@use '../../ref' as ref;
|
|
5
|
+
|
|
6
|
+
$tokens: (
|
|
7
|
+
color: (
|
|
8
|
+
text: ref.ref('color.ink'),
|
|
9
|
+
option-hover: ref.ref('color.field'),
|
|
10
|
+
description: ref.ref('color.sub'),
|
|
11
|
+
),
|
|
12
|
+
size: (
|
|
13
|
+
panel-max-height: 280px,
|
|
14
|
+
panel-padding-y: 4px,
|
|
15
|
+
option-min-height: 32px,
|
|
16
|
+
option-padding-x: 12px,
|
|
17
|
+
option-padding-y: 5px,
|
|
18
|
+
option-gap: 1px,
|
|
19
|
+
empty-padding-y: 8px,
|
|
20
|
+
duration: ref.ref('motion.fast'),
|
|
21
|
+
),
|
|
22
|
+
typography: (
|
|
23
|
+
font-size: 13px,
|
|
24
|
+
description-size: 11px,
|
|
25
|
+
description-weight: 400,
|
|
26
|
+
description-line-height: 1.3,
|
|
27
|
+
),
|
|
28
|
+
);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Badge — a small status mark. Behavior lives in badge.ts (variant + position + a11y);
|
|
2
|
+
// this is the visual. Three variants:
|
|
3
|
+
// count (default) — an accent pill (min 15px, white text) over the top corner of a host.
|
|
4
|
+
// --dot — a 6px status-red dot over the corner (no text).
|
|
5
|
+
// --tag — a standalone outline label ("New"); not overlaid, no positioned mark.
|
|
6
|
+
// Corner via --bottom / --start modifiers (default top-end).
|
|
7
|
+
//
|
|
8
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
9
|
+
// concern as its own file (e.g. _keyframes.scss) and @forward it here.
|
|
10
|
+
|
|
11
|
+
@forward 'tokens';
|
|
12
|
+
@forward 'styles';
|