@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,128 @@
|
|
|
1
|
+
// expansion — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../helpers' as helpers;
|
|
3
|
+
|
|
4
|
+
@mixin styles() {
|
|
5
|
+
.weave-expansion {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
border: 1px solid var(--weave-expansion-divider);
|
|
9
|
+
border-radius: var(--weave-expansion-radius);
|
|
10
|
+
overflow: hidden; // clip the rounded corners over the panels
|
|
11
|
+
|
|
12
|
+
@content;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Hairline between panels (design: separate surfaces with a 1px line, no shadow).
|
|
16
|
+
.weave-expansion__panel + .weave-expansion__panel {
|
|
17
|
+
border-top: 1px solid var(--weave-expansion-divider);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.weave-expansion__heading {
|
|
21
|
+
margin: 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.weave-expansion__header {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: space-between;
|
|
28
|
+
gap: var(--weave-expansion-header-gap);
|
|
29
|
+
width: 100%;
|
|
30
|
+
min-height: var(--weave-expansion-header-height);
|
|
31
|
+
padding: var(--weave-expansion-padding-y) var(--weave-expansion-padding-x);
|
|
32
|
+
border: 0;
|
|
33
|
+
background: transparent;
|
|
34
|
+
color: var(--weave-expansion-text);
|
|
35
|
+
font-family: inherit;
|
|
36
|
+
font-size: var(--weave-expansion-header-size);
|
|
37
|
+
font-weight: var(--weave-expansion-header-weight);
|
|
38
|
+
text-align: left;
|
|
39
|
+
cursor: pointer;
|
|
40
|
+
transition: background var(--weave-expansion-duration) ease;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.weave-expansion__header:hover {
|
|
44
|
+
background: var(--weave-expansion-header-hover-background);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Open header — the field tint (state via the native ARIA attr, no state class).
|
|
48
|
+
.weave-expansion__header[aria-expanded='true'] {
|
|
49
|
+
background: var(--weave-expansion-header-open-background);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.weave-expansion__header:focus-visible {
|
|
53
|
+
@include helpers.focus-ring;
|
|
54
|
+
outline-offset: -2px; // ring sits inside the header
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.weave-expansion__header[aria-disabled='true'] {
|
|
58
|
+
color: var(--weave-expansion-disabled-text);
|
|
59
|
+
cursor: not-allowed;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.weave-expansion__title {
|
|
63
|
+
flex: 1;
|
|
64
|
+
min-width: 0;
|
|
65
|
+
@include helpers.truncate;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// The +/- marker (design), toggled purely off the header's aria-expanded state.
|
|
69
|
+
.weave-expansion__marker {
|
|
70
|
+
flex: none;
|
|
71
|
+
width: var(--weave-expansion-marker-width);
|
|
72
|
+
color: var(--weave-expansion-marker);
|
|
73
|
+
font-weight: var(--weave-expansion-marker-weight);
|
|
74
|
+
text-align: center;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.weave-expansion__marker::after {
|
|
78
|
+
content: '+';
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.weave-expansion__header[aria-expanded='true'] .weave-expansion__marker::after {
|
|
82
|
+
content: '\2212'; // minus sign (−), not a hyphen
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Collapse via grid-template-rows 0fr→1fr — no JS height measurement. The height
|
|
86
|
+
// change is instant: transitioning `fr` values is unreliable inside a flex column
|
|
87
|
+
// (Chrome resolves an animating `1fr` to 0 in an auto-height container), so the
|
|
88
|
+
// reveal is carried by a keyframe on the content instead (fades/slides in on open).
|
|
89
|
+
.weave-expansion__region {
|
|
90
|
+
display: grid;
|
|
91
|
+
grid-template-rows: 0fr;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.weave-expansion__region[data-open='true'] {
|
|
95
|
+
grid-template-rows: 1fr;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// The clip layer — no padding here, so the grid row collapses fully to 0 when
|
|
99
|
+
// closed (padding on the animating grid child would keep it from reaching 0).
|
|
100
|
+
.weave-expansion__body {
|
|
101
|
+
overflow: hidden;
|
|
102
|
+
min-height: 0;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// The padded content sits inside the clip layer.
|
|
106
|
+
.weave-expansion__content {
|
|
107
|
+
padding: var(--weave-expansion-body-padding-y) var(--weave-expansion-body-padding-x);
|
|
108
|
+
color: var(--weave-expansion-text);
|
|
109
|
+
font-size: var(--weave-expansion-body-size);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// Reveal on open (robust everywhere, unlike an fr transition).
|
|
113
|
+
.weave-expansion__region[data-open='true'] .weave-expansion__content {
|
|
114
|
+
animation: weave-expansion-reveal var(--weave-expansion-duration) ease;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@keyframes weave-expansion-reveal {
|
|
118
|
+
from {
|
|
119
|
+
opacity: 0;
|
|
120
|
+
transform: translateY(-4px);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
to {
|
|
124
|
+
opacity: 1;
|
|
125
|
+
transform: translateY(0);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// expansion — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
text: ref.ref('color.ink'),
|
|
7
|
+
marker: ref.ref('color.sub'),
|
|
8
|
+
divider: ref.ref('color.line'),
|
|
9
|
+
// Open header takes the field tint (design: "open header gets --field bg").
|
|
10
|
+
header-open-background: ref.ref('color.field'),
|
|
11
|
+
// Subtle hover — half-strength field so it reads under the open state.
|
|
12
|
+
header-hover-background: color-mix(in srgb, ref.ref('color.field') 55%, transparent),
|
|
13
|
+
disabled-text: ref.ref('color.sub'),
|
|
14
|
+
),
|
|
15
|
+
size: (
|
|
16
|
+
radius: ref.ref('shape.radius'),
|
|
17
|
+
header-height: 44px,
|
|
18
|
+
header-gap: 12px,
|
|
19
|
+
padding-x: 14px,
|
|
20
|
+
padding-y: 10px,
|
|
21
|
+
body-padding-x: 14px,
|
|
22
|
+
body-padding-y: 12px,
|
|
23
|
+
marker-width: 16px,
|
|
24
|
+
duration: ref.ref('motion.fast'),
|
|
25
|
+
),
|
|
26
|
+
typography: (
|
|
27
|
+
header-size: 13px,
|
|
28
|
+
header-weight: 600,
|
|
29
|
+
body-size: 13px,
|
|
30
|
+
marker-weight: 400,
|
|
31
|
+
),
|
|
32
|
+
);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Form Field — the lean label/hint/error frame around a control. Behavior lives in
|
|
2
|
+
// form-field.ts (auto-wires the slotted control's id/for/aria-describedby/aria-invalid,
|
|
3
|
+
// and derives the error state); this is the visual.
|
|
4
|
+
//
|
|
5
|
+
// A column: `__label` (uppercase 10px) above, `__control` (the slot), and a
|
|
6
|
+
// `__hint`/`__error` line (11px) below. In the error state the `--invalid` root turns the
|
|
7
|
+
// label `error` red; the control's own underline reddens off the aria-invalid this sets.
|
|
8
|
+
//
|
|
9
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
10
|
+
// concern as its own file and @forward it here.
|
|
11
|
+
|
|
12
|
+
@forward 'tokens';
|
|
13
|
+
@forward 'styles';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// form-field — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
|
|
3
|
+
@mixin styles() {
|
|
4
|
+
.weave-form-field {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
gap: var(--weave-form-field-gap);
|
|
8
|
+
|
|
9
|
+
@content;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.weave-form-field__label {
|
|
13
|
+
font-size: var(--weave-form-field-label-size);
|
|
14
|
+
font-weight: var(--weave-form-field-label-weight);
|
|
15
|
+
text-transform: uppercase;
|
|
16
|
+
letter-spacing: var(--weave-form-field-label-tracking);
|
|
17
|
+
color: var(--weave-form-field-label);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.weave-form-field__control {
|
|
21
|
+
display: block;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.weave-form-field__hint {
|
|
25
|
+
font-size: var(--weave-form-field-message-size);
|
|
26
|
+
color: var(--weave-form-field-hint);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.weave-form-field__error {
|
|
30
|
+
font-size: var(--weave-form-field-message-size);
|
|
31
|
+
color: var(--weave-form-field-error);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Error state — the label reddens (the control's underline reddens off the
|
|
35
|
+
aria-invalid this field sets, styled by the control itself). */
|
|
36
|
+
.weave-form-field--invalid .weave-form-field__label {
|
|
37
|
+
color: var(--weave-form-field-error);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// form-field — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
label: ref.ref('color.sub'),
|
|
7
|
+
hint: ref.ref('color.sub'),
|
|
8
|
+
error: ref.ref('color.error'),
|
|
9
|
+
),
|
|
10
|
+
size: (
|
|
11
|
+
gap: 6px,
|
|
12
|
+
label-size: 10px,
|
|
13
|
+
message-size: 11px,
|
|
14
|
+
),
|
|
15
|
+
typography: (
|
|
16
|
+
label-weight: 600,
|
|
17
|
+
label-tracking: 0.14em,
|
|
18
|
+
),
|
|
19
|
+
);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Grid List — a responsive grid of square tiles. Behavior lives in grid-list.ts (a thin
|
|
2
|
+
// container that forwards `class`); this is the visual.
|
|
3
|
+
//
|
|
4
|
+
// `repeat(auto-fill, minmax(min-tile, 1fr))` with 1px gaps that read as hairlines (the
|
|
5
|
+
// container's line background shows through), one `__tile--accent` tile optionally filled.
|
|
6
|
+
// Pure CSS — reflows to the container width with no JS.
|
|
7
|
+
//
|
|
8
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
9
|
+
// concern as its own file and @forward it here.
|
|
10
|
+
|
|
11
|
+
@forward 'tokens';
|
|
12
|
+
@forward 'styles';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// grid-list — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
|
|
3
|
+
@mixin styles() {
|
|
4
|
+
.weave-grid-list {
|
|
5
|
+
display: grid;
|
|
6
|
+
grid-template-columns: repeat(auto-fill, minmax(var(--weave-grid-list-min-tile), 1fr));
|
|
7
|
+
gap: var(--weave-grid-list-gap);
|
|
8
|
+
// The gaps + outer frame are the same 1px line; tiles paint over it, so the grid
|
|
9
|
+
// reads as hairline-separated cells with no drop shadow (the Weave surface style).
|
|
10
|
+
background: var(--weave-grid-list-border);
|
|
11
|
+
border: var(--weave-grid-list-gap) solid var(--weave-grid-list-border);
|
|
12
|
+
border-radius: var(--weave-grid-list-radius);
|
|
13
|
+
overflow: hidden; // clip the tile corners to the container radius
|
|
14
|
+
|
|
15
|
+
@content;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.weave-grid-list__tile {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
justify-content: center;
|
|
22
|
+
aspect-ratio: 1;
|
|
23
|
+
background: var(--weave-grid-list-tile-background);
|
|
24
|
+
color: var(--weave-grid-list-tile-text);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.weave-grid-list__tile--accent {
|
|
28
|
+
background: var(--weave-grid-list-accent-background);
|
|
29
|
+
color: var(--weave-grid-list-accent-text);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// grid-list — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
// The 1px gaps show this through — the container background reads as hairlines.
|
|
7
|
+
border: ref.ref('color.line'),
|
|
8
|
+
tile-background: ref.ref('color.surface'),
|
|
9
|
+
tile-text: ref.ref('color.ink'),
|
|
10
|
+
accent-background: ref.ref('color.accent'),
|
|
11
|
+
accent-text: ref.ref('color.canvas'),
|
|
12
|
+
),
|
|
13
|
+
size: (
|
|
14
|
+
min-tile: 96px,
|
|
15
|
+
gap: 1px,
|
|
16
|
+
radius: ref.ref('shape.radius'),
|
|
17
|
+
),
|
|
18
|
+
);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Icon — inline SVG at Weave scale (18px, 1.4 hairline stroke, currentColor).
|
|
2
|
+
// Behavior lives in icon.ts; this is the token schema + the class contract.
|
|
3
|
+
//
|
|
4
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
5
|
+
// concern as its own file (e.g. _keyframes.scss) and @forward it here.
|
|
6
|
+
|
|
7
|
+
@forward 'tokens';
|
|
8
|
+
@forward 'styles';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// icon — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
|
|
3
|
+
@mixin styles() {
|
|
4
|
+
.weave-icon {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
width: var(--weave-icon-size);
|
|
7
|
+
height: var(--weave-icon-size);
|
|
8
|
+
flex: 0 0 auto;
|
|
9
|
+
line-height: 0;
|
|
10
|
+
color: inherit;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.weave-icon svg {
|
|
14
|
+
width: 100%;
|
|
15
|
+
height: 100%;
|
|
16
|
+
stroke-width: var(--weave-icon-stroke);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Input — a native `<input>`/`<textarea>` as a Weave underline field. Behavior lives in
|
|
2
|
+
// input.ts (value + forms binding, clearable, multiline, prefix/suffix slot collapse);
|
|
3
|
+
// this is the visual.
|
|
4
|
+
//
|
|
5
|
+
// A flex row sharing one `border-bottom`: `__prefix` · `__field` · `__clear` · `__suffix`.
|
|
6
|
+
// Focus → accent underline (inset shadow, no layout shift); `--invalid` → error underline
|
|
7
|
+
// (off the bound control's state). Empty prefix/suffix collapse via `--empty` (JS-set).
|
|
8
|
+
//
|
|
9
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
10
|
+
// concern as its own file and @forward it here.
|
|
11
|
+
|
|
12
|
+
@forward 'tokens';
|
|
13
|
+
@forward 'styles';
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
// input — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../helpers' as helpers;
|
|
3
|
+
|
|
4
|
+
@mixin styles() {
|
|
5
|
+
.weave-input {
|
|
6
|
+
// THE shared Weave field underline (single source; Select uses the same helper).
|
|
7
|
+
@include helpers.field-underline(var(--weave-input-border), var(--weave-input-focus), var(--weave-input-border-width));
|
|
8
|
+
display: inline-flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: var(--weave-input-gap);
|
|
11
|
+
width: 100%;
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
color: var(--weave-input-text);
|
|
14
|
+
|
|
15
|
+
@content;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/* Multiline aligns adornments to the first line, not the vertical centre. */
|
|
19
|
+
.weave-input--multiline {
|
|
20
|
+
align-items: flex-start;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/* Error — red underline (driven by the bound control's touched-and-invalid state). */
|
|
24
|
+
.weave-input--invalid {
|
|
25
|
+
border-bottom-color: var(--weave-input-error);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.weave-input--invalid:focus-within {
|
|
29
|
+
border-bottom-color: var(--weave-input-error);
|
|
30
|
+
box-shadow: inset 0 -1px 0 var(--weave-input-error);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.weave-input__field {
|
|
34
|
+
flex: 1;
|
|
35
|
+
min-width: 0;
|
|
36
|
+
border: 0;
|
|
37
|
+
background: transparent;
|
|
38
|
+
font: inherit;
|
|
39
|
+
font-size: var(--weave-input-font-size);
|
|
40
|
+
color: inherit;
|
|
41
|
+
padding: var(--weave-input-padding-y) 0;
|
|
42
|
+
outline: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.weave-input__field::placeholder {
|
|
46
|
+
color: var(--weave-input-placeholder);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Neutralise the browser autofill tint (blue/yellow box) so the field stays a
|
|
50
|
+
transparent underline. The 100000s transition defers the autofill background
|
|
51
|
+
indefinitely; text/caret keep the field colour. */
|
|
52
|
+
.weave-input__field:-webkit-autofill,
|
|
53
|
+
.weave-input__field:-webkit-autofill:hover,
|
|
54
|
+
.weave-input__field:-webkit-autofill:focus {
|
|
55
|
+
transition: background-color 100000s ease-in-out 0s;
|
|
56
|
+
-webkit-text-fill-color: var(--weave-input-text);
|
|
57
|
+
caret-color: var(--weave-input-text);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* Suppress native adornments Weave replaces or omits: the `type=search` clear (we
|
|
61
|
+
ship our own `__clear`) and the `type=number` spinner buttons. */
|
|
62
|
+
.weave-input__field::-webkit-search-cancel-button,
|
|
63
|
+
.weave-input__field::-webkit-search-decoration {
|
|
64
|
+
appearance: none;
|
|
65
|
+
-webkit-appearance: none;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.weave-input__field::-webkit-outer-spin-button,
|
|
69
|
+
.weave-input__field::-webkit-inner-spin-button {
|
|
70
|
+
margin: 0;
|
|
71
|
+
-webkit-appearance: none;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.weave-input__field[type='number'] {
|
|
75
|
+
appearance: textfield;
|
|
76
|
+
-moz-appearance: textfield;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.weave-input__field:disabled {
|
|
80
|
+
cursor: not-allowed;
|
|
81
|
+
opacity: 0.6;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
textarea.weave-input__field {
|
|
85
|
+
resize: vertical;
|
|
86
|
+
line-height: 1.4;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* Prefix / suffix — adornment text or icon; empty slots collapse (JS adds --empty). */
|
|
90
|
+
.weave-input__prefix,
|
|
91
|
+
.weave-input__suffix {
|
|
92
|
+
display: inline-flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
flex: none;
|
|
95
|
+
color: var(--weave-input-adornment);
|
|
96
|
+
font-size: var(--weave-input-font-size);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.weave-input__prefix--empty,
|
|
100
|
+
.weave-input__suffix--empty {
|
|
101
|
+
display: none;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* Clear × — the shared Weave clear button (same as Select). */
|
|
105
|
+
.weave-input__clear {
|
|
106
|
+
@include helpers.clear-button(var(--weave-input-adornment), var(--weave-input-text));
|
|
107
|
+
flex: none;
|
|
108
|
+
font-size: var(--weave-input-clear-size);
|
|
109
|
+
line-height: 1;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// input — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
border: ref.ref('color.line'),
|
|
7
|
+
focus: ref.ref('color.accent'),
|
|
8
|
+
error: ref.ref('color.error'),
|
|
9
|
+
text: ref.ref('color.ink'),
|
|
10
|
+
placeholder: ref.ref('color.sub'),
|
|
11
|
+
adornment: ref.ref('color.sub'),
|
|
12
|
+
),
|
|
13
|
+
size: (
|
|
14
|
+
padding-y: 6px,
|
|
15
|
+
gap: 8px,
|
|
16
|
+
border-width: 1.5px,
|
|
17
|
+
clear-size: 15px,
|
|
18
|
+
font-size: 13px,
|
|
19
|
+
duration: ref.ref('motion.fast'),
|
|
20
|
+
),
|
|
21
|
+
);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// List — a vertical list of selectable rows. Behavior lives in list.ts (selection +
|
|
2
|
+
// roving tabindex + typeahead via the CDK listKeyManager); this is the visual.
|
|
3
|
+
//
|
|
4
|
+
// Two modes off one class contract: role=listbox (selectable) rows are interactive,
|
|
5
|
+
// role=list rows are plain. Selected state is the NATIVE ARIA attr, not a class:
|
|
6
|
+
// [aria-selected=true] paints the accentSoft tint + a 2px accent left border.
|
|
7
|
+
//
|
|
8
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin). Add another
|
|
9
|
+
// concern as its own file and @forward it here.
|
|
10
|
+
|
|
11
|
+
@forward 'tokens';
|
|
12
|
+
@forward 'styles';
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// list — styles() mixin (class rules). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../helpers' as helpers;
|
|
3
|
+
|
|
4
|
+
@mixin styles() {
|
|
5
|
+
.weave-list {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
|
|
9
|
+
@content;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.weave-list__row {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
gap: var(--weave-list-padding-x);
|
|
16
|
+
min-height: var(--weave-list-row-height);
|
|
17
|
+
padding: var(--weave-list-padding-y) var(--weave-list-padding-x);
|
|
18
|
+
// A 2px accent left border appears only when selected; reserve the space now so
|
|
19
|
+
// selection doesn't shift the row content (transparent placeholder border).
|
|
20
|
+
border-left: var(--weave-list-marker-width) solid transparent;
|
|
21
|
+
color: var(--weave-list-text);
|
|
22
|
+
font-size: var(--weave-list-font-size);
|
|
23
|
+
font-weight: var(--weave-list-weight);
|
|
24
|
+
line-height: var(--weave-list-line-height);
|
|
25
|
+
transition: background var(--weave-list-duration) ease;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Hairline separators between rows (design: separate surfaces with a 1px line, no shadow).
|
|
29
|
+
.weave-list__row + .weave-list__row {
|
|
30
|
+
box-shadow: 0 -1px 0 var(--weave-list-divider);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Only the selectable listbox rows are interactive.
|
|
34
|
+
.weave-list[role='listbox'] .weave-list__row {
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.weave-list[role='listbox'] .weave-list__row:hover {
|
|
39
|
+
background: var(--weave-list-hover);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.weave-list__row:focus-visible {
|
|
43
|
+
@include helpers.focus-ring;
|
|
44
|
+
outline-offset: -2px; // ring sits inside the row
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.weave-list__title {
|
|
48
|
+
flex: 1;
|
|
49
|
+
min-width: 0;
|
|
50
|
+
@include helpers.truncate;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.weave-list__meta {
|
|
54
|
+
flex: none;
|
|
55
|
+
color: var(--weave-list-meta);
|
|
56
|
+
font-size: var(--weave-list-meta-font-size);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Reorder drag handle — only this starts a drag (row clicks still select). touch-action:none
|
|
60
|
+
// so a touch-drag on the grip doesn't scroll the page.
|
|
61
|
+
.weave-list__drag-handle {
|
|
62
|
+
flex: none;
|
|
63
|
+
display: inline-flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
justify-content: center;
|
|
66
|
+
width: var(--weave-list-drag-handle-size);
|
|
67
|
+
color: var(--weave-list-drag-handle);
|
|
68
|
+
cursor: grab;
|
|
69
|
+
touch-action: none;
|
|
70
|
+
user-select: none;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.weave-list__drag-handle:active {
|
|
74
|
+
cursor: grabbing;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/* Selected — accentSoft tint + 2px accent left border (state via native ARIA attr). */
|
|
78
|
+
.weave-list__row[aria-selected='true'] {
|
|
79
|
+
background: var(--weave-list-selected-background);
|
|
80
|
+
border-left-color: var(--weave-list-selected-marker);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.weave-list__row[aria-disabled='true'] {
|
|
84
|
+
color: var(--weave-list-disabled-text);
|
|
85
|
+
cursor: not-allowed;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// list — design tokens (schema). Forwarded by ./_index.scss.
|
|
2
|
+
@use '../../ref' as ref;
|
|
3
|
+
|
|
4
|
+
$tokens: (
|
|
5
|
+
color: (
|
|
6
|
+
text: ref.ref('color.ink'),
|
|
7
|
+
meta: ref.ref('color.sub'),
|
|
8
|
+
hover: ref.ref('color.field'),
|
|
9
|
+
divider: ref.ref('color.line'),
|
|
10
|
+
// accentSoft = accent at ~12% alpha (the selected-row tint from the design).
|
|
11
|
+
selected-background: color-mix(in srgb, ref.ref('color.accent') 12%, transparent),
|
|
12
|
+
selected-marker: ref.ref('color.accent'),
|
|
13
|
+
disabled-text: ref.ref('color.sub'),
|
|
14
|
+
// The reorder drag handle (⠿ grip).
|
|
15
|
+
drag-handle: ref.ref('color.sub'),
|
|
16
|
+
),
|
|
17
|
+
size: (
|
|
18
|
+
row-height: 34px,
|
|
19
|
+
padding-x: 12px,
|
|
20
|
+
padding-y: 7px,
|
|
21
|
+
marker-width: 2px,
|
|
22
|
+
drag-handle-size: 16px,
|
|
23
|
+
duration: ref.ref('motion.fast'),
|
|
24
|
+
),
|
|
25
|
+
typography: (
|
|
26
|
+
font-size: 13px,
|
|
27
|
+
meta-font-size: 11px,
|
|
28
|
+
weight: 500,
|
|
29
|
+
line-height: 1.3,
|
|
30
|
+
),
|
|
31
|
+
);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Menu — a dropdown of action rows anchored under a trigger by the CDK overlay. Behavior
|
|
2
|
+
// lives in menu.ts (the `use:menu` action — open/close, connectedPosition, roving focus via
|
|
3
|
+
// listKeyManager + typeahead, Esc/Tab return focus, transparent click-away backdrop); this
|
|
4
|
+
// is the visual: the shared overlay-panel chrome + lean full-width menuitem rows whose
|
|
5
|
+
// hover/roving-active tint comes from the native :hover/:focus pseudo (no state class).
|
|
6
|
+
//
|
|
7
|
+
// Barrel — forwards the split partials ($tokens + the styles() mixin).
|
|
8
|
+
@forward 'tokens';
|
|
9
|
+
@forward 'styles';
|