@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,60 @@
|
|
|
1
|
+
// menu — styles() mixin (class rules). The panel reuses the shared overlay-panel chrome
|
|
2
|
+
// (surface + 1px line + radius, no shadow); rows are lean full-width buttons whose
|
|
3
|
+
// hover/roving-active state paints from the native :hover/:focus pseudo (no state class).
|
|
4
|
+
// Forwarded by ./_index.scss.
|
|
5
|
+
@use '../../helpers' as helpers;
|
|
6
|
+
|
|
7
|
+
@mixin styles() {
|
|
8
|
+
.weave-menu {
|
|
9
|
+
@include helpers.overlay-panel;
|
|
10
|
+
min-width: var(--weave-menu-min-width);
|
|
11
|
+
padding: var(--weave-menu-padding-y) 0;
|
|
12
|
+
overflow: hidden; // clip rows to the panel radius
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.weave-menu__item {
|
|
16
|
+
display: flex;
|
|
17
|
+
flex-direction: column;
|
|
18
|
+
justify-content: center;
|
|
19
|
+
gap: var(--weave-menu-item-gap);
|
|
20
|
+
width: 100%;
|
|
21
|
+
min-height: var(--weave-menu-item-height);
|
|
22
|
+
padding: var(--weave-menu-item-padding-y) var(--weave-menu-item-padding-x);
|
|
23
|
+
border: 0;
|
|
24
|
+
background: transparent;
|
|
25
|
+
color: var(--weave-menu-item-text);
|
|
26
|
+
font: inherit;
|
|
27
|
+
font-size: var(--weave-menu-font-size);
|
|
28
|
+
font-weight: var(--weave-menu-weight);
|
|
29
|
+
text-align: left;
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
transition: background var(--weave-menu-duration) ease;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Optional subtext under the label — smaller + lighter (the drop-list row pattern).
|
|
35
|
+
.weave-menu__description {
|
|
36
|
+
font-size: var(--weave-menu-description-size);
|
|
37
|
+
font-weight: var(--weave-menu-description-weight);
|
|
38
|
+
line-height: var(--weave-menu-description-line-height);
|
|
39
|
+
color: var(--weave-menu-item-description);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Hover AND the roving-focused row share the tint (focus is moved programmatically).
|
|
43
|
+
// Disabled rows never tint — exclude them from :hover (they can't be focused anyway).
|
|
44
|
+
.weave-menu__item:not(:disabled):hover,
|
|
45
|
+
.weave-menu__item:focus {
|
|
46
|
+
background: var(--weave-menu-item-hover);
|
|
47
|
+
outline: none;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.weave-menu__item[disabled] {
|
|
51
|
+
color: var(--weave-menu-item-disabled);
|
|
52
|
+
cursor: default;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.weave-menu__divider {
|
|
56
|
+
height: var(--weave-menu-divider-height);
|
|
57
|
+
margin: var(--weave-menu-padding-y) 0;
|
|
58
|
+
background: var(--weave-menu-divider);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// menu — design tokens (schema). A dropdown panel of action rows; the panel chrome comes
|
|
2
|
+
// from the shared overlay republic (helpers.overlay-panel), these are the item tokens.
|
|
3
|
+
// Forwarded by ./_index.scss.
|
|
4
|
+
@use '../../ref' as ref;
|
|
5
|
+
|
|
6
|
+
$tokens: (
|
|
7
|
+
color: (
|
|
8
|
+
item-text: ref.ref('color.ink'),
|
|
9
|
+
// Hover / roving-active row tint.
|
|
10
|
+
item-hover: ref.ref('color.field'),
|
|
11
|
+
item-disabled: ref.ref('color.sub'),
|
|
12
|
+
// Subtext (description) under a row's label — lighter than the label.
|
|
13
|
+
item-description: ref.ref('color.sub'),
|
|
14
|
+
divider: ref.ref('color.line'),
|
|
15
|
+
),
|
|
16
|
+
size: (
|
|
17
|
+
min-width: 180px,
|
|
18
|
+
padding-y: 4px,
|
|
19
|
+
item-height: 32px,
|
|
20
|
+
item-padding-x: 12px,
|
|
21
|
+
item-padding-y: 5px,
|
|
22
|
+
item-gap: 1px,
|
|
23
|
+
divider-height: 1px,
|
|
24
|
+
duration: ref.ref('motion.fast'),
|
|
25
|
+
),
|
|
26
|
+
typography: (
|
|
27
|
+
font-size: 13px,
|
|
28
|
+
weight: 500,
|
|
29
|
+
description-size: 11px,
|
|
30
|
+
description-weight: 400,
|
|
31
|
+
description-line-height: 1.3,
|
|
32
|
+
),
|
|
33
|
+
);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Menubar — an app menu bar (WAI-ARIA menubar). Behavior lives in menubar.ts (a role=menubar
|
|
2
|
+
// of top items, each opening the shared Menu panel via menu-core; roving Left/Right +
|
|
3
|
+
// ArrowDown-opens + Left/Right-switch-while-open + Esc); this is the bar visual only — the
|
|
4
|
+
// dropdown reuses the `.weave-menu` panel.
|
|
5
|
+
//
|
|
6
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin).
|
|
7
|
+
|
|
8
|
+
@forward 'tokens';
|
|
9
|
+
@forward 'styles';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// menubar — styles() mixin (class rules). A horizontal bar of text items; hover + open state
|
|
2
|
+
// ride native/ARIA attrs ([aria-expanded], [aria-disabled]). The dropdown is the shared
|
|
3
|
+
// `.weave-menu` panel (styled by the menu component). Forwarded by ./_index.scss.
|
|
4
|
+
@use '../../helpers' as helpers;
|
|
5
|
+
|
|
6
|
+
@mixin styles() {
|
|
7
|
+
.weave-menubar {
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: var(--weave-menubar-gap);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.weave-menubar__item {
|
|
14
|
+
@include helpers.field-reset;
|
|
15
|
+
padding: var(--weave-menubar-item-padding-y) var(--weave-menubar-item-padding-x);
|
|
16
|
+
border-radius: var(--weave-menubar-radius);
|
|
17
|
+
color: var(--weave-menubar-text);
|
|
18
|
+
font-size: var(--weave-menubar-font-size);
|
|
19
|
+
font-weight: var(--weave-menubar-weight);
|
|
20
|
+
cursor: pointer;
|
|
21
|
+
transition: background var(--weave-menubar-duration) ease;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.weave-menubar__item:not([aria-disabled='true']):hover {
|
|
25
|
+
background: var(--weave-menubar-item-hover);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// The open top item keeps the field tint (matches the dropdown being anchored to it).
|
|
29
|
+
.weave-menubar__item[aria-expanded='true'] {
|
|
30
|
+
background: var(--weave-menubar-item-open);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.weave-menubar__item[aria-disabled='true'] {
|
|
34
|
+
color: var(--weave-menubar-disabled-text);
|
|
35
|
+
cursor: default;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.weave-menubar__item:focus-visible {
|
|
39
|
+
@include helpers.focus-ring;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// menubar — design tokens (schema). The top bar row + text items; the dropdown reuses the
|
|
2
|
+
// shared `.weave-menu` panel (menu-core), so nothing here styles the dropdown. Forwarded by
|
|
3
|
+
// ./_index.scss.
|
|
4
|
+
@use '../../ref' as ref;
|
|
5
|
+
|
|
6
|
+
$tokens: (
|
|
7
|
+
color: (
|
|
8
|
+
text: ref.ref('color.ink'),
|
|
9
|
+
item-hover: ref.ref('color.field'),
|
|
10
|
+
// The open top item gets the same field tint (a subtle pressed state).
|
|
11
|
+
item-open: ref.ref('color.field'),
|
|
12
|
+
disabled-text: ref.ref('color.sub'),
|
|
13
|
+
),
|
|
14
|
+
size: (
|
|
15
|
+
gap: 2px,
|
|
16
|
+
item-padding-x: 10px,
|
|
17
|
+
item-padding-y: 6px,
|
|
18
|
+
radius: ref.ref('shape.radius'),
|
|
19
|
+
duration: ref.ref('motion.fast'),
|
|
20
|
+
),
|
|
21
|
+
typography: (
|
|
22
|
+
font-size: 13px,
|
|
23
|
+
weight: 500,
|
|
24
|
+
),
|
|
25
|
+
);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Overlay — shared chrome for every CDK-overlay panel (a "core republic", master §4.1),
|
|
2
|
+
// consumed by Tooltip / Menu / Select / Autocomplete / Dialog / Bottom Sheet / Snackbar.
|
|
3
|
+
// No behavior (the CDK createOverlay/positioning owns that); this is only the panel +
|
|
4
|
+
// backdrop visual + the --weave-overlay-* tokens shared across those components.
|
|
5
|
+
//
|
|
6
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin).
|
|
7
|
+
@forward 'tokens';
|
|
8
|
+
@forward 'styles';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// overlay — styles() mixin. The CDK stamps `weave-overlay-backdrop` on every backdrop
|
|
2
|
+
// element (createOverlay), so styling that class here dims all modal backdrops centrally;
|
|
3
|
+
// menus/selects pass the --transparent modifier for an invisible click-catcher. The panel
|
|
4
|
+
// chrome is the reusable helpers.overlay-panel mixin, exposed as .weave-overlay-panel for
|
|
5
|
+
// components that opt in (and for bring-your-own-skin). Forwarded by ./_index.scss.
|
|
6
|
+
@use '../../helpers' as helpers;
|
|
7
|
+
|
|
8
|
+
@mixin styles() {
|
|
9
|
+
// Dimming scrim behind modal panels (dialog / bottom-sheet).
|
|
10
|
+
.weave-overlay-backdrop {
|
|
11
|
+
background: var(--weave-overlay-backdrop);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// Invisible click-catcher for anchored panels (menu / select) — captures click-away
|
|
15
|
+
// + scroll without a visible dim.
|
|
16
|
+
.weave-overlay-backdrop--transparent {
|
|
17
|
+
background: transparent;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Hairline panel chrome (no shadow — the Weave design separates surfaces with a 1px line
|
|
21
|
+
// + an opaque surface, never a drop shadow).
|
|
22
|
+
.weave-overlay-panel {
|
|
23
|
+
@include helpers.overlay-panel;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// overlay — shared chrome tokens for every CDK-overlay panel (tooltip / menu / select /
|
|
2
|
+
// autocomplete / dialog / bottom-sheet / snackbar). A "core republic" (master §4.1): its
|
|
3
|
+
// own --weave-overlay-* vars, shared by all overlay components. Forwarded by ./_index.scss.
|
|
4
|
+
@use '../../ref' as ref;
|
|
5
|
+
|
|
6
|
+
$tokens: (
|
|
7
|
+
color: (
|
|
8
|
+
surface: ref.ref('color.surface'),
|
|
9
|
+
text: ref.ref('color.ink'),
|
|
10
|
+
line: ref.ref('color.line'),
|
|
11
|
+
// Modal dimming scrim — a fixed dark tone (a dim reads the same over Light or Dim
|
|
12
|
+
// content); override via overlay-overrides((backdrop: …)) to taste.
|
|
13
|
+
backdrop: rgba(20, 22, 28, 0.32),
|
|
14
|
+
),
|
|
15
|
+
size: (
|
|
16
|
+
radius: ref.ref('shape.radius'),
|
|
17
|
+
min-width: 180px,
|
|
18
|
+
padding-y: 4px,
|
|
19
|
+
duration: ref.ref('motion.fast'),
|
|
20
|
+
),
|
|
21
|
+
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Paginator — page navigation over a total item count. Behavior lives in paginator.ts
|
|
2
|
+
// (windowed page run + prev/next + manual jump + optional page-size menu); this is the
|
|
3
|
+
// visual.
|
|
4
|
+
//
|
|
5
|
+
// Prev/next arrows around a windowed run of page buttons (boundary pages + a sibling
|
|
6
|
+
// window + ellipses); the active page takes the ink fill via the NATIVE ARIA attr
|
|
7
|
+
// [aria-current=page] (not a class). A tabular-nums range label + a jump input + an
|
|
8
|
+
// optional page-size trigger follow.
|
|
9
|
+
//
|
|
10
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
11
|
+
// concern as its own file and @forward it here.
|
|
12
|
+
|
|
13
|
+
@forward 'tokens';
|
|
14
|
+
@forward 'styles';
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// paginator — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../helpers' as helpers;
|
|
3
|
+
|
|
4
|
+
@mixin styles() {
|
|
5
|
+
.weave-paginator {
|
|
6
|
+
display: flex;
|
|
7
|
+
align-items: center;
|
|
8
|
+
gap: var(--weave-paginator-gap);
|
|
9
|
+
flex-wrap: wrap;
|
|
10
|
+
color: var(--weave-paginator-text);
|
|
11
|
+
font-size: var(--weave-paginator-font-size);
|
|
12
|
+
font-weight: var(--weave-paginator-weight);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Page + nav buttons ARE the Button component (active = primary ink fill, others =
|
|
16
|
+
// ghost). The paginator only makes them a compact square hit target — Button owns the
|
|
17
|
+
// colours / hover / focus / disabled / active-fill.
|
|
18
|
+
.weave-paginator__page,
|
|
19
|
+
.weave-paginator__nav {
|
|
20
|
+
min-width: var(--weave-paginator-button);
|
|
21
|
+
height: var(--weave-paginator-button);
|
|
22
|
+
padding: 0 var(--weave-paginator-button-padding-x);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.weave-paginator__nav {
|
|
26
|
+
font-size: var(--weave-paginator-nav-glyph-size); // the ‹ › glyphs read a touch larger
|
|
27
|
+
line-height: 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.weave-paginator__ellipsis {
|
|
31
|
+
display: inline-flex;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
min-width: var(--weave-paginator-button);
|
|
35
|
+
height: var(--weave-paginator-button);
|
|
36
|
+
color: var(--weave-paginator-disabled-text);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.weave-paginator__range {
|
|
40
|
+
margin-inline-start: var(--weave-paginator-section-gap);
|
|
41
|
+
color: var(--weave-paginator-range);
|
|
42
|
+
font-size: var(--weave-paginator-range-size);
|
|
43
|
+
font-variant-numeric: tabular-nums;
|
|
44
|
+
white-space: nowrap;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Manual "go to page" entry — the field IS the Input component; this is only the
|
|
48
|
+
// label + a width for the composed <Input> (layout is the paginator's job).
|
|
49
|
+
.weave-paginator__jump {
|
|
50
|
+
display: inline-flex;
|
|
51
|
+
align-items: center;
|
|
52
|
+
gap: var(--weave-paginator-jump-gap);
|
|
53
|
+
margin-inline-start: var(--weave-paginator-section-gap);
|
|
54
|
+
color: var(--weave-paginator-range);
|
|
55
|
+
font-size: var(--weave-paginator-range-size);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.weave-paginator__jump-field {
|
|
59
|
+
width: var(--weave-paginator-jump-width);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.weave-paginator__jump-field .weave-input__field {
|
|
63
|
+
text-align: center;
|
|
64
|
+
font-variant-numeric: tabular-nums;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Optional page-size picker — the control IS the Select component; this just spaces +
|
|
68
|
+
// widths the composed <Select>.
|
|
69
|
+
.weave-paginator__size {
|
|
70
|
+
margin-inline-start: var(--weave-paginator-section-gap);
|
|
71
|
+
width: var(--weave-paginator-size-width);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.weave-paginator--disabled {
|
|
75
|
+
opacity: var(--weave-paginator-disabled-opacity);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// paginator — design tokens (schema). Page + nav buttons ARE the Button component
|
|
2
|
+
// (colours/hover/active-fill are Button's), so only layout/spacing + the extra parts
|
|
3
|
+
// (range label, jump width, page-size width) are tokenized here. Forwarded by ./_index.scss.
|
|
4
|
+
@use '../../ref' as ref;
|
|
5
|
+
|
|
6
|
+
$tokens: (
|
|
7
|
+
color: (
|
|
8
|
+
text: ref.ref('color.sub'),
|
|
9
|
+
range: ref.ref('color.sub'),
|
|
10
|
+
disabled-text: ref.ref('color.sub'),
|
|
11
|
+
),
|
|
12
|
+
size: (
|
|
13
|
+
button: 28px,
|
|
14
|
+
button-padding-x: 6px,
|
|
15
|
+
gap: 2px,
|
|
16
|
+
section-gap: 16px,
|
|
17
|
+
jump-gap: 6px,
|
|
18
|
+
jump-width: 56px,
|
|
19
|
+
size-width: 116px,
|
|
20
|
+
disabled-opacity: 0.6,
|
|
21
|
+
),
|
|
22
|
+
typography: (
|
|
23
|
+
font-size: 13px,
|
|
24
|
+
weight: 500,
|
|
25
|
+
range-size: 12px,
|
|
26
|
+
nav-glyph-size: 16px,
|
|
27
|
+
),
|
|
28
|
+
);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Popover-edit — inline cell editing. Behavior lives in popover-edit.ts (a `use:popoverEdit`
|
|
2
|
+
// action: click/Enter/F2 opens a non-modal editor popover; Enter/click-away commit, Esc
|
|
3
|
+
// cancels); this is the visual — the overlay-panel chrome + a text field sharing Input's
|
|
4
|
+
// underline.
|
|
5
|
+
//
|
|
6
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin).
|
|
7
|
+
|
|
8
|
+
@forward 'tokens';
|
|
9
|
+
@forward 'styles';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// popover-edit — styles() mixin (class rules). The inline-edit popover: overlay-panel chrome +
|
|
2
|
+
// a text field sharing Input's underline (the shared field-underline helper). Forwarded by
|
|
3
|
+
// ./_index.scss.
|
|
4
|
+
@use '../../helpers' as helpers;
|
|
5
|
+
|
|
6
|
+
@mixin styles() {
|
|
7
|
+
.weave-popover-edit {
|
|
8
|
+
@include helpers.overlay-panel;
|
|
9
|
+
min-width: var(--weave-popover-edit-min-width);
|
|
10
|
+
padding: var(--weave-popover-edit-padding);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.weave-popover-edit__input {
|
|
14
|
+
// field-reset first (strips chrome), then the shared underline wins the bottom border.
|
|
15
|
+
@include helpers.field-reset;
|
|
16
|
+
@include helpers.field-underline(
|
|
17
|
+
var(--weave-popover-edit-border),
|
|
18
|
+
var(--weave-popover-edit-focus),
|
|
19
|
+
var(--weave-popover-edit-border-width)
|
|
20
|
+
);
|
|
21
|
+
display: block;
|
|
22
|
+
width: 100%;
|
|
23
|
+
padding: var(--weave-popover-edit-field-padding-y) 0;
|
|
24
|
+
color: var(--weave-popover-edit-text);
|
|
25
|
+
font-size: var(--weave-popover-edit-font-size);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.weave-popover-edit__input::placeholder {
|
|
29
|
+
color: var(--weave-popover-edit-placeholder);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// popover-edit — design tokens (schema). A small inline-edit popover: the shared overlay-panel
|
|
2
|
+
// chrome + a text field sharing Input's underline. Forwarded by ./_index.scss.
|
|
3
|
+
@use '../../ref' as ref;
|
|
4
|
+
|
|
5
|
+
$tokens: (
|
|
6
|
+
color: (
|
|
7
|
+
text: ref.ref('color.ink'),
|
|
8
|
+
placeholder: ref.ref('color.sub'),
|
|
9
|
+
border: ref.ref('color.line'),
|
|
10
|
+
focus: ref.ref('color.accent'),
|
|
11
|
+
),
|
|
12
|
+
size: (
|
|
13
|
+
padding: 8px,
|
|
14
|
+
min-width: 160px,
|
|
15
|
+
field-padding-y: 4px,
|
|
16
|
+
border-width: 1.5px,
|
|
17
|
+
),
|
|
18
|
+
typography: (
|
|
19
|
+
font-size: 13px,
|
|
20
|
+
),
|
|
21
|
+
);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Progress Bar — a thin horizontal progress indicator. Behavior lives in
|
|
2
|
+
// progress-bar.ts (value clamping + the indeterminate flag + ARIA); this is the visual.
|
|
3
|
+
//
|
|
4
|
+
// A 4px field track with an accent fill: determinate drives the fill width inline
|
|
5
|
+
// (0–100%), indeterminate slides a fixed-width segment via the indet keyframes.
|
|
6
|
+
//
|
|
7
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin, which also
|
|
8
|
+
// carries the @keyframes). Add another concern as its own file and @forward it here.
|
|
9
|
+
|
|
10
|
+
@forward 'tokens';
|
|
11
|
+
@forward 'styles';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// progress-bar — styles() mixin (class rules + keyframes). Forwarded by ./_index.scss.
|
|
2
|
+
|
|
3
|
+
@mixin styles() {
|
|
4
|
+
.weave-progress-bar {
|
|
5
|
+
position: relative;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
width: 100%;
|
|
8
|
+
height: var(--weave-progress-bar-height);
|
|
9
|
+
background: var(--weave-progress-bar-track);
|
|
10
|
+
border-radius: var(--weave-progress-bar-radius);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.weave-progress-bar__fill {
|
|
14
|
+
position: relative;
|
|
15
|
+
left: 0;
|
|
16
|
+
width: 0;
|
|
17
|
+
height: 100%;
|
|
18
|
+
background: var(--weave-progress-bar-fill);
|
|
19
|
+
border-radius: inherit;
|
|
20
|
+
transition: width var(--weave-progress-bar-duration) ease;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Indeterminate — a fixed-width segment slides across; the width is keyframe-driven,
|
|
24
|
+
so no inline width and no transition. */
|
|
25
|
+
.weave-progress-bar--indeterminate .weave-progress-bar__fill {
|
|
26
|
+
width: var(--weave-progress-bar-segment);
|
|
27
|
+
transition: none;
|
|
28
|
+
animation: weave-progress-bar-indet var(--weave-progress-bar-indet-duration) ease-in-out infinite;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@keyframes weave-progress-bar-indet {
|
|
32
|
+
0% {
|
|
33
|
+
left: calc(-1 * var(--weave-progress-bar-segment));
|
|
34
|
+
}
|
|
35
|
+
100% {
|
|
36
|
+
left: 100%;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// progress-bar — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
track: ref.ref('color.field'),
|
|
7
|
+
fill: ref.ref('color.accent'),
|
|
8
|
+
),
|
|
9
|
+
size: (
|
|
10
|
+
height: 4px,
|
|
11
|
+
radius: 2px,
|
|
12
|
+
duration: ref.ref('motion.fast'),
|
|
13
|
+
// The indeterminate sliding segment: its width + travel speed.
|
|
14
|
+
segment: 40%,
|
|
15
|
+
indet-duration: 1.4s,
|
|
16
|
+
),
|
|
17
|
+
);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Progress Spinner — an indeterminate spinning ring. Behavior lives in
|
|
2
|
+
// progress-spinner.ts (the size flag + ARIA); this is the visual.
|
|
3
|
+
//
|
|
4
|
+
// A `field` ring with an accent top arc rotating `spin .8s linear infinite`. Two sizes
|
|
5
|
+
// (default 26px, `--small` 18px). Pure CSS; `role=progressbar` with no aria-valuenow.
|
|
6
|
+
//
|
|
7
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin, which also
|
|
8
|
+
// carries the @keyframes). Add another concern as its own file and @forward it here.
|
|
9
|
+
|
|
10
|
+
@forward 'tokens';
|
|
11
|
+
@forward 'styles';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// progress-spinner — styles() mixin (class rules + keyframes). Forwarded by ./_index.scss.
|
|
2
|
+
|
|
3
|
+
@mixin styles() {
|
|
4
|
+
.weave-progress-spinner {
|
|
5
|
+
box-sizing: border-box;
|
|
6
|
+
display: inline-block;
|
|
7
|
+
width: var(--weave-progress-spinner-diameter);
|
|
8
|
+
height: var(--weave-progress-spinner-diameter);
|
|
9
|
+
border: var(--weave-progress-spinner-thickness) solid var(--weave-progress-spinner-track);
|
|
10
|
+
border-top-color: var(--weave-progress-spinner-indicator);
|
|
11
|
+
border-radius: 50%;
|
|
12
|
+
animation: weave-progress-spinner-spin var(--weave-progress-spinner-duration) linear infinite;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Compact 18px ring. */
|
|
16
|
+
.weave-progress-spinner--small {
|
|
17
|
+
width: var(--weave-progress-spinner-diameter-small);
|
|
18
|
+
height: var(--weave-progress-spinner-diameter-small);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@keyframes weave-progress-spinner-spin {
|
|
22
|
+
to {
|
|
23
|
+
transform: rotate(360deg);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// progress-spinner — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
track: ref.ref('color.field'),
|
|
7
|
+
indicator: ref.ref('color.accent'),
|
|
8
|
+
),
|
|
9
|
+
size: (
|
|
10
|
+
diameter: 26px,
|
|
11
|
+
diameter-small: 18px,
|
|
12
|
+
thickness: 2px,
|
|
13
|
+
duration: 0.8s,
|
|
14
|
+
),
|
|
15
|
+
);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Radio — a single-select group of native `<input type=radio>`. Behavior lives in
|
|
2
|
+
// radio.ts (value + forms binding; native `name` gives arrow-nav + roving for free);
|
|
3
|
+
// this is the visual.
|
|
4
|
+
//
|
|
5
|
+
// Each radio is a 20px circle: off = 1.5px ring, on = accent ring + an 8px accent dot
|
|
6
|
+
// (a scaled `__box::after`). State is the NATIVE input pseudo (`:checked` /
|
|
7
|
+
// `:focus-visible` / `:disabled`), read off the visually-hidden input — no state classes.
|
|
8
|
+
// The container is `.weave-radio-group` (role=radiogroup); each item is `.weave-radio`.
|
|
9
|
+
//
|
|
10
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
11
|
+
// concern as its own file and @forward it here.
|
|
12
|
+
|
|
13
|
+
@forward 'tokens';
|
|
14
|
+
@forward 'styles';
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// radio — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../helpers' as helpers;
|
|
3
|
+
|
|
4
|
+
@mixin styles() {
|
|
5
|
+
.weave-radio-group {
|
|
6
|
+
display: inline-flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: var(--weave-radio-group-gap);
|
|
9
|
+
|
|
10
|
+
@content;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.weave-radio {
|
|
14
|
+
position: relative;
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: var(--weave-radio-gap);
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* The real input overlays the whole label (opacity 0) — keyboard/pointer reachable,
|
|
22
|
+
native radio grouping intact — while the __box carries the visual. */
|
|
23
|
+
.weave-radio__input {
|
|
24
|
+
position: absolute;
|
|
25
|
+
inset: 0;
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
margin: 0;
|
|
29
|
+
opacity: 0;
|
|
30
|
+
cursor: inherit;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.weave-radio__box {
|
|
34
|
+
position: relative;
|
|
35
|
+
flex: none;
|
|
36
|
+
box-sizing: border-box;
|
|
37
|
+
width: var(--weave-radio-size);
|
|
38
|
+
height: var(--weave-radio-size);
|
|
39
|
+
border: var(--weave-radio-border-width) solid var(--weave-radio-border);
|
|
40
|
+
border-radius: 50%;
|
|
41
|
+
background: var(--weave-radio-background);
|
|
42
|
+
transition: border-color var(--weave-radio-duration) ease;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* The dot — scales in when selected. */
|
|
46
|
+
.weave-radio__box::after {
|
|
47
|
+
content: '';
|
|
48
|
+
position: absolute;
|
|
49
|
+
left: 50%;
|
|
50
|
+
top: 50%;
|
|
51
|
+
width: var(--weave-radio-dot-size);
|
|
52
|
+
height: var(--weave-radio-dot-size);
|
|
53
|
+
border-radius: 50%;
|
|
54
|
+
background: var(--weave-radio-dot);
|
|
55
|
+
transform: translate(-50%, -50%) scale(0);
|
|
56
|
+
opacity: 0;
|
|
57
|
+
transition:
|
|
58
|
+
transform var(--weave-radio-duration) ease,
|
|
59
|
+
opacity var(--weave-radio-duration) ease;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.weave-radio__label {
|
|
63
|
+
font-size: var(--weave-radio-label-size);
|
|
64
|
+
color: var(--weave-radio-label-text);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* Selected — accent ring + dot (state via the native :checked pseudo, no class). */
|
|
68
|
+
.weave-radio__input:checked + .weave-radio__box {
|
|
69
|
+
border-color: var(--weave-radio-checked-border);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.weave-radio__input:checked + .weave-radio__box::after {
|
|
73
|
+
transform: translate(-50%, -50%) scale(1);
|
|
74
|
+
opacity: 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.weave-radio__input:focus-visible + .weave-radio__box {
|
|
78
|
+
@include helpers.focus-ring;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.weave-radio__input:disabled {
|
|
82
|
+
cursor: not-allowed;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.weave-radio__input:disabled + .weave-radio__box {
|
|
86
|
+
opacity: 0.5;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.weave-radio__input:disabled ~ .weave-radio__label {
|
|
90
|
+
color: var(--weave-radio-disabled-text);
|
|
91
|
+
}
|
|
92
|
+
}
|