@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,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Sidenav>` — the responsive layout shell: a `__drawer` beside a `__content`, in one of
|
|
3
|
+
* three modes:
|
|
4
|
+
*
|
|
5
|
+
* - **`side`** — the drawer is in flow and pushes the content (always-visible on wide screens).
|
|
6
|
+
* - **`over`** — the drawer floats over the content with a dimming backdrop; it becomes a focus
|
|
7
|
+
* context (focus-trap in, Esc + backdrop-click close). This is the off-canvas mobile drawer.
|
|
8
|
+
* - **`push`** — the drawer floats but also shifts the content over by its width (both slide).
|
|
9
|
+
*
|
|
10
|
+
* **Responsive:** omit `mode` and the Sidenav consumes the CDK `breakpointSignal` — below the
|
|
11
|
+
* Weave `Narrow` breakpoint (900px) it auto-switches to `over` + closed; above, `side` + open.
|
|
12
|
+
* This fulfils the off-canvas drawer deferred from the U2 Toolbar (a Toolbar hamburger toggles it).
|
|
13
|
+
*
|
|
14
|
+
* **Open state** is the Weave convention: controlled `opened` (getter) + `onOpenedChange`, OR
|
|
15
|
+
* uncontrolled `defaultOpened`. Imperative `open()`/`close()`/`toggle()` are exposed via the
|
|
16
|
+
* `api` ref callback (like Input's `onInputRef`).
|
|
17
|
+
*
|
|
18
|
+
* import Sidenav from '@weave-framework/ui/sidenav';
|
|
19
|
+
* <Sidenav opened={{ nav() }} onOpenedChange={{ nav.set }}>
|
|
20
|
+
* <nav slot="drawer">…links…</nav>
|
|
21
|
+
* <main>…page…</main>
|
|
22
|
+
* </Sidenav>
|
|
23
|
+
*/
|
|
24
|
+
import { signal, effect, onMount, onDispose } from '@weave-framework/runtime';
|
|
25
|
+
import { breakpointSignal, matchesBreakpoint, Breakpoints, focusTrap } from '../cdk/index.js';
|
|
26
|
+
export const template = '<div class={{ rootClass() }} ref={{ root }} on:keydown={{ onKeydown }}>' +
|
|
27
|
+
'<aside class="weave-sidenav__drawer" ref={{ drawer }} aria-modal={{ drawerModal() }}><slot name="drawer"></slot></aside>' +
|
|
28
|
+
'<div class="weave-sidenav__backdrop" aria-hidden="true" on:click={{ onBackdropClick }}></div>' +
|
|
29
|
+
'<div class="weave-sidenav__content"><slot></slot></div>' +
|
|
30
|
+
'</div>';
|
|
31
|
+
export function setup(props) {
|
|
32
|
+
const root = signal(null);
|
|
33
|
+
const drawer = signal(null);
|
|
34
|
+
const bp = props.breakpoint ?? Breakpoints.Narrow;
|
|
35
|
+
const narrow = breakpointSignal(bp);
|
|
36
|
+
const autoMode = () => props.mode === undefined;
|
|
37
|
+
const effectiveMode = () => props.mode ?? (narrow() ? 'over' : 'side');
|
|
38
|
+
const controlled = () => props.opened !== undefined;
|
|
39
|
+
// Uncontrolled state — seeded correctly so the first paint doesn't flash (auto mode reads
|
|
40
|
+
// the breakpoint now; explicit mode honours `defaultOpened`).
|
|
41
|
+
const openState = signal(autoMode() ? !matchesBreakpoint(bp) : props.defaultOpened ?? true);
|
|
42
|
+
const opened = () => (controlled() ? !!props.opened : openState());
|
|
43
|
+
const setOpened = (next) => {
|
|
44
|
+
if (!controlled())
|
|
45
|
+
openState.set(next);
|
|
46
|
+
props.onOpenedChange?.(next);
|
|
47
|
+
};
|
|
48
|
+
// Responsive auto open/close — only in auto mode + uncontrolled, and only reacts to an
|
|
49
|
+
// actual breakpoint crossing (the effect re-runs when `narrow()` flips, not on manual toggles).
|
|
50
|
+
effect(() => {
|
|
51
|
+
const isNarrow = narrow();
|
|
52
|
+
if (!autoMode() || controlled())
|
|
53
|
+
return;
|
|
54
|
+
openState.set(!isNarrow);
|
|
55
|
+
});
|
|
56
|
+
const backdropActive = () => props.backdrop ?? effectiveMode() === 'over';
|
|
57
|
+
// In `over` mode the open drawer is a modal focus context: trap focus, restore on close.
|
|
58
|
+
// Gated on `mounted` so the first activation happens AFTER the root is in the document
|
|
59
|
+
// (focusing a detached element is a no-op that would wrongly latch trapOn).
|
|
60
|
+
const mounted = signal(false);
|
|
61
|
+
let trap = null;
|
|
62
|
+
let trapOn = false;
|
|
63
|
+
effect(() => {
|
|
64
|
+
const d = drawer();
|
|
65
|
+
const shouldTrap = mounted() && !!d && effectiveMode() === 'over' && opened();
|
|
66
|
+
if (shouldTrap && !trapOn) {
|
|
67
|
+
// Over-mode drawer is modal: shield the content/background, but keep the backdrop
|
|
68
|
+
// clickable (it closes the drawer). The backdrop is the drawer's sibling in the root.
|
|
69
|
+
trap ??= focusTrap(d, {
|
|
70
|
+
restoreFocus: true,
|
|
71
|
+
inertBackground: true,
|
|
72
|
+
inertIgnore: d.nextElementSibling,
|
|
73
|
+
});
|
|
74
|
+
trap.activate();
|
|
75
|
+
trapOn = true;
|
|
76
|
+
}
|
|
77
|
+
else if (!shouldTrap && trapOn) {
|
|
78
|
+
trap?.deactivate();
|
|
79
|
+
trapOn = false;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
onDispose(() => trap?.deactivate());
|
|
83
|
+
const onKeydown = (event) => {
|
|
84
|
+
if (event.key === 'Escape' && effectiveMode() === 'over' && opened()) {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
setOpened(false);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const onBackdropClick = () => setOpened(false);
|
|
90
|
+
onMount(() => {
|
|
91
|
+
mounted.set(true);
|
|
92
|
+
props.api?.({
|
|
93
|
+
open: () => setOpened(true),
|
|
94
|
+
close: () => setOpened(false),
|
|
95
|
+
toggle: () => setOpened(!opened()),
|
|
96
|
+
opened,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
return {
|
|
100
|
+
root,
|
|
101
|
+
drawer,
|
|
102
|
+
rootClass: () => {
|
|
103
|
+
const parts = ['weave-sidenav', `weave-sidenav--${effectiveMode()}`];
|
|
104
|
+
if (opened())
|
|
105
|
+
parts.push('weave-sidenav--opened');
|
|
106
|
+
if (props.position === 'end')
|
|
107
|
+
parts.push('weave-sidenav--end');
|
|
108
|
+
if (backdropActive() && opened())
|
|
109
|
+
parts.push('weave-sidenav--backdrop');
|
|
110
|
+
if (props.class)
|
|
111
|
+
parts.push(props.class);
|
|
112
|
+
return parts.join(' ');
|
|
113
|
+
},
|
|
114
|
+
// Declare modality to AT while the over-mode drawer is open (it already traps focus + Esc-closes).
|
|
115
|
+
drawerModal: () => (effectiveMode() === 'over' && opened() ? 'true' : undefined),
|
|
116
|
+
onKeydown,
|
|
117
|
+
onBackdropClick,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=sidenav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidenav.js","sourceRoot":"","sources":["../../src/sidenav/sidenav.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<SlideToggle>` — a real `<input type=checkbox>` presented as an on/off switch
|
|
3
|
+
* (`role=switch`; Weave: a 42×24 track, `field`→accent, with an 18px knob that slides
|
|
4
|
+
* `.16s`). Same lean DOM + form-control convention as Checkbox — the native input
|
|
5
|
+
* (visually hidden, overlaying the label) carries semantics/keyboard/focus while the
|
|
6
|
+
* `__track` (+ its `::after` knob) paints from `:checked` / `:focus-visible` / `:disabled`.
|
|
7
|
+
*
|
|
8
|
+
* Binding = the Weave form-control convention (boolean value):
|
|
9
|
+
* - **Signal**: `checked` (a getter) + `onChange`.
|
|
10
|
+
* - **Forms**: `control` — a structural `Field<boolean>` (a real `@weave-framework/forms`
|
|
11
|
+
* Field satisfies it). `control` wins; it drives value two-way, marks `touched` on
|
|
12
|
+
* blur, and reflects `aria-invalid` while touched **and** invalid.
|
|
13
|
+
*
|
|
14
|
+
* import SlideToggle from '@weave-framework/ui/slide-toggle';
|
|
15
|
+
* <SlideToggle checked={{ on() }} onChange={{ setOn }} label={{ 'Notifications' }} />
|
|
16
|
+
* <SlideToggle control={{ form.controls.subscribe }} label={{ 'Subscribe' }} />
|
|
17
|
+
*/
|
|
18
|
+
import { type Signal } from '@weave-framework/runtime';
|
|
19
|
+
/** The subset of a `@weave-framework/forms` `Field<boolean>` a toggle binds to. */
|
|
20
|
+
export interface SlideToggleControl {
|
|
21
|
+
value: Signal<boolean>;
|
|
22
|
+
touched?: Signal<boolean>;
|
|
23
|
+
error?: () => string | null;
|
|
24
|
+
}
|
|
25
|
+
export interface SlideToggleProps {
|
|
26
|
+
/** Controlled on/off state (a getter). Ignored when `control` is set. */
|
|
27
|
+
checked?: boolean;
|
|
28
|
+
/** Called with the next state on toggle. Ignored when `control` is set. */
|
|
29
|
+
onChange?: (checked: boolean) => void;
|
|
30
|
+
/** A forms `Field<boolean>` — two-way value + touched-on-blur + aria-invalid. */
|
|
31
|
+
control?: SlideToggleControl;
|
|
32
|
+
/** Disable the control. */
|
|
33
|
+
disabled?: boolean;
|
|
34
|
+
/** Mark the native input required. */
|
|
35
|
+
required?: boolean;
|
|
36
|
+
/** Visible label text (also the accessible name via the wrapping `<label>`). */
|
|
37
|
+
label?: string;
|
|
38
|
+
/** Native `name` (form submission). */
|
|
39
|
+
name?: string;
|
|
40
|
+
/** Extra classes, forwarded onto the `<label>` root. */
|
|
41
|
+
class?: string;
|
|
42
|
+
}
|
|
43
|
+
export declare const template: string;
|
|
44
|
+
export interface SlideToggleContext {
|
|
45
|
+
input: Signal<HTMLInputElement | null>;
|
|
46
|
+
rootClass: () => string;
|
|
47
|
+
isChecked: () => boolean;
|
|
48
|
+
isDisabled: () => boolean;
|
|
49
|
+
isRequired: () => boolean;
|
|
50
|
+
name: () => string | undefined;
|
|
51
|
+
label: () => string | undefined;
|
|
52
|
+
onNativeChange: (event: Event) => void;
|
|
53
|
+
onBlur: () => void;
|
|
54
|
+
}
|
|
55
|
+
export declare function setup(props: SlideToggleProps): SlideToggleContext;
|
|
56
|
+
//# sourceMappingURL=slide-toggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide-toggle.d.ts","sourceRoot":"","sources":["../../src/slide-toggle/slide-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAkB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEvE,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,iFAAiF;IACjF,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAOX,CAAC;AAEb,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,IAAI,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,CAmCjE"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<SlideToggle>` — a real `<input type=checkbox>` presented as an on/off switch
|
|
3
|
+
* (`role=switch`; Weave: a 42×24 track, `field`→accent, with an 18px knob that slides
|
|
4
|
+
* `.16s`). Same lean DOM + form-control convention as Checkbox — the native input
|
|
5
|
+
* (visually hidden, overlaying the label) carries semantics/keyboard/focus while the
|
|
6
|
+
* `__track` (+ its `::after` knob) paints from `:checked` / `:focus-visible` / `:disabled`.
|
|
7
|
+
*
|
|
8
|
+
* Binding = the Weave form-control convention (boolean value):
|
|
9
|
+
* - **Signal**: `checked` (a getter) + `onChange`.
|
|
10
|
+
* - **Forms**: `control` — a structural `Field<boolean>` (a real `@weave-framework/forms`
|
|
11
|
+
* Field satisfies it). `control` wins; it drives value two-way, marks `touched` on
|
|
12
|
+
* blur, and reflects `aria-invalid` while touched **and** invalid.
|
|
13
|
+
*
|
|
14
|
+
* import SlideToggle from '@weave-framework/ui/slide-toggle';
|
|
15
|
+
* <SlideToggle checked={{ on() }} onChange={{ setOn }} label={{ 'Notifications' }} />
|
|
16
|
+
* <SlideToggle control={{ form.controls.subscribe }} label={{ 'Subscribe' }} />
|
|
17
|
+
*/
|
|
18
|
+
import { signal, effect } from '@weave-framework/runtime';
|
|
19
|
+
export const template = '<label class={{ rootClass() }}>' +
|
|
20
|
+
'<input type="checkbox" role="switch" class="weave-slide-toggle__input" ref={{ input }}' +
|
|
21
|
+
' .checked={{ isChecked() }} disabled={{ isDisabled() }} required={{ isRequired() }} name={{ name() }}' +
|
|
22
|
+
' on:change={{ onNativeChange }} on:blur={{ onBlur }} />' +
|
|
23
|
+
'<span class="weave-slide-toggle__track" aria-hidden="true"></span>' +
|
|
24
|
+
'@if (label()) {<span class="weave-slide-toggle__label">{{ label() }}</span>}' +
|
|
25
|
+
'</label>';
|
|
26
|
+
export function setup(props) {
|
|
27
|
+
const input = signal(null);
|
|
28
|
+
const isChecked = () => (props.control ? !!props.control.value() : !!props.checked);
|
|
29
|
+
// Forms validity → aria-invalid (touched AND invalid), the marker submit() focuses.
|
|
30
|
+
effect(() => {
|
|
31
|
+
const el = input();
|
|
32
|
+
if (!el)
|
|
33
|
+
return;
|
|
34
|
+
const c = props.control;
|
|
35
|
+
if (c && c.touched?.() && c.error?.())
|
|
36
|
+
el.setAttribute('aria-invalid', 'true');
|
|
37
|
+
else
|
|
38
|
+
el.removeAttribute('aria-invalid');
|
|
39
|
+
});
|
|
40
|
+
const onNativeChange = (event) => {
|
|
41
|
+
const next = event.target.checked;
|
|
42
|
+
if (props.control)
|
|
43
|
+
props.control.value.set(next);
|
|
44
|
+
else
|
|
45
|
+
props.onChange?.(next);
|
|
46
|
+
};
|
|
47
|
+
const onBlur = () => {
|
|
48
|
+
props.control?.touched?.set(true);
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
input,
|
|
52
|
+
rootClass: () => (props.class ? `weave-slide-toggle ${props.class}` : 'weave-slide-toggle'),
|
|
53
|
+
isChecked,
|
|
54
|
+
isDisabled: () => !!props.disabled,
|
|
55
|
+
isRequired: () => !!props.required,
|
|
56
|
+
name: () => props.name,
|
|
57
|
+
label: () => props.label,
|
|
58
|
+
onNativeChange,
|
|
59
|
+
onBlur,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=slide-toggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slide-toggle.js","sourceRoot":"","sources":["../../src/slide-toggle/slide-toggle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAe,MAAM,0BAA0B,CAAC;AA4BvE,MAAM,CAAC,MAAM,QAAQ,GACnB,iCAAiC;IACjC,wFAAwF;IACxF,uGAAuG;IACvG,yDAAyD;IACzD,oEAAoE;IACpE,8EAA8E;IAC9E,UAAU,CAAC;AAcb,MAAM,UAAU,KAAK,CAAC,KAAuB;IAC3C,MAAM,KAAK,GAAoC,MAAM,CAA0B,IAAI,CAAC,CAAC;IAErF,MAAM,SAAS,GAAG,GAAY,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE7F,oFAAoF;IACpF,MAAM,CAAC,GAAG,EAAE;QACV,MAAM,EAAE,GAA4B,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,CAAC,GAAmC,KAAK,CAAC,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAAE,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;;YAC1E,EAAE,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC5C,MAAM,IAAI,GAAa,KAAK,CAAC,MAA2B,CAAC,OAAO,CAAC;QACjE,IAAI,KAAK,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;YAC5C,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC;IAEF,OAAO;QACL,KAAK;QACL,SAAS,EAAE,GAAW,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,sBAAsB,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;QACnG,SAAS;QACT,UAAU,EAAE,GAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;QAC3C,UAAU,EAAE,GAAY,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ;QAC3C,IAAI,EAAE,GAAuB,EAAE,CAAC,KAAK,CAAC,IAAI;QAC1C,KAAK,EAAE,GAAuB,EAAE,CAAC,KAAK,CAAC,KAAK;QAC5C,cAAc;QACd,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Slider>` — a value over a range (WAI-ARIA slider pattern).
|
|
3
|
+
*
|
|
4
|
+
* A 2px track with an accent fill to the value and a distinctive thumb (a 3×18 ink bar
|
|
5
|
+
* with a 5px accent cap, per the Weave design). It's a **custom `role=slider`** rather
|
|
6
|
+
* than a native `<input type=range>` because the design's thumb + fill can't be reached
|
|
7
|
+
* with native pseudo-elements; keyboard, focus, ARIA and form participation are all
|
|
8
|
+
* provided here so it stays indistinguishable from native.
|
|
9
|
+
*
|
|
10
|
+
* Drag with a pointer (pointer-capture on the track); or focus + Arrow / Home / End /
|
|
11
|
+
* PageUp / PageDown. Value is a `number`; binding follows the Checkbox convention:
|
|
12
|
+
* `value` (a getter) + `onChange`, or a structural `control` (a forms `Field<number>` —
|
|
13
|
+
* two-way value + touched-on-release + `aria-invalid`); `control` wins.
|
|
14
|
+
*
|
|
15
|
+
* import Slider from '@weave-framework/ui/slider';
|
|
16
|
+
* <Slider min={{ 0 }} max={{ 100 }} value={{ vol() }} onChange={{ setVol }} label={{ 'Volume' }} />
|
|
17
|
+
* <Slider control={{ form.controls.level }} step={{ 5 }} />
|
|
18
|
+
*/
|
|
19
|
+
import { type Signal } from '@weave-framework/runtime';
|
|
20
|
+
/** The subset of a `@weave-framework/forms` `Field<number>` a control binds to. */
|
|
21
|
+
export interface SliderControl {
|
|
22
|
+
value: Signal<number>;
|
|
23
|
+
touched?: Signal<boolean>;
|
|
24
|
+
error?: () => string | null;
|
|
25
|
+
}
|
|
26
|
+
export interface SliderProps {
|
|
27
|
+
/** Range bounds. Defaults 0 / 100. */
|
|
28
|
+
min?: number;
|
|
29
|
+
max?: number;
|
|
30
|
+
/** Step increment. Default 1. */
|
|
31
|
+
step?: number;
|
|
32
|
+
/** Controlled value (a getter). Ignored when `control` is set. */
|
|
33
|
+
value?: number;
|
|
34
|
+
/** Called with the next value on change. Ignored when `control` is set. */
|
|
35
|
+
onChange?: (value: number) => void;
|
|
36
|
+
/** Uncontrolled initial value (ignored when `value`/`control` is set). */
|
|
37
|
+
defaultValue?: number;
|
|
38
|
+
/** A forms `Field<number>` — two-way value + touched-on-release + aria-invalid. */
|
|
39
|
+
control?: SliderControl;
|
|
40
|
+
/** Disable the slider. */
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
/** Accessible name. */
|
|
43
|
+
label?: string;
|
|
44
|
+
/** Formats the value for `aria-valuetext` (default: the plain number). */
|
|
45
|
+
format?: (value: number) => string;
|
|
46
|
+
/** Extra classes, forwarded onto the container. */
|
|
47
|
+
class?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare const template: string;
|
|
50
|
+
export interface SliderContext {
|
|
51
|
+
host: Signal<Element | null>;
|
|
52
|
+
rootClass: () => string;
|
|
53
|
+
tabindex: () => number;
|
|
54
|
+
min: () => number;
|
|
55
|
+
max: () => number;
|
|
56
|
+
value: () => number;
|
|
57
|
+
valueText: () => string;
|
|
58
|
+
label: () => string | undefined;
|
|
59
|
+
disabledAttr: () => string | undefined;
|
|
60
|
+
invalidAttr: () => string | undefined;
|
|
61
|
+
fillStyle: () => string;
|
|
62
|
+
thumbStyle: () => string;
|
|
63
|
+
onPointerdown: (event: PointerEvent) => void;
|
|
64
|
+
onPointermove: (event: PointerEvent) => void;
|
|
65
|
+
onPointerup: (event: PointerEvent) => void;
|
|
66
|
+
onKeydown: (event: KeyboardEvent) => void;
|
|
67
|
+
}
|
|
68
|
+
export declare function setup(props: SliderProps): SliderContext;
|
|
69
|
+
//# sourceMappingURL=slider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../src/slider/slider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAU,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAE/D,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MASb,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACvC,WAAW,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC7C,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,WAAW,GAAG,aAAa,CAwJvD"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Slider>` — a value over a range (WAI-ARIA slider pattern).
|
|
3
|
+
*
|
|
4
|
+
* A 2px track with an accent fill to the value and a distinctive thumb (a 3×18 ink bar
|
|
5
|
+
* with a 5px accent cap, per the Weave design). It's a **custom `role=slider`** rather
|
|
6
|
+
* than a native `<input type=range>` because the design's thumb + fill can't be reached
|
|
7
|
+
* with native pseudo-elements; keyboard, focus, ARIA and form participation are all
|
|
8
|
+
* provided here so it stays indistinguishable from native.
|
|
9
|
+
*
|
|
10
|
+
* Drag with a pointer (pointer-capture on the track); or focus + Arrow / Home / End /
|
|
11
|
+
* PageUp / PageDown. Value is a `number`; binding follows the Checkbox convention:
|
|
12
|
+
* `value` (a getter) + `onChange`, or a structural `control` (a forms `Field<number>` —
|
|
13
|
+
* two-way value + touched-on-release + `aria-invalid`); `control` wins.
|
|
14
|
+
*
|
|
15
|
+
* import Slider from '@weave-framework/ui/slider';
|
|
16
|
+
* <Slider min={{ 0 }} max={{ 100 }} value={{ vol() }} onChange={{ setVol }} label={{ 'Volume' }} />
|
|
17
|
+
* <Slider control={{ form.controls.level }} step={{ 5 }} />
|
|
18
|
+
*/
|
|
19
|
+
import { signal } from '@weave-framework/runtime';
|
|
20
|
+
export const template = '<div class={{ rootClass() }} ref={{ host }} role="slider" tabindex={{ tabindex() }}' +
|
|
21
|
+
' aria-valuemin={{ min() }} aria-valuemax={{ max() }} aria-valuenow={{ value() }}' +
|
|
22
|
+
' aria-valuetext={{ valueText() }} aria-orientation="horizontal" aria-label={{ label() }}' +
|
|
23
|
+
' aria-disabled={{ disabledAttr() }} aria-invalid={{ invalidAttr() }}' +
|
|
24
|
+
' on:pointerdown={{ onPointerdown }} on:pointermove={{ onPointermove }}' +
|
|
25
|
+
' on:pointerup={{ onPointerup }} on:keydown={{ onKeydown }}>' +
|
|
26
|
+
'<div class="weave-slider__track"><div class="weave-slider__fill" style={{ fillStyle() }}></div></div>' +
|
|
27
|
+
'<div class="weave-slider__thumb" style={{ thumbStyle() }}></div>' +
|
|
28
|
+
'</div>';
|
|
29
|
+
export function setup(props) {
|
|
30
|
+
const host = signal(null);
|
|
31
|
+
const internal = signal(props.defaultValue ?? props.min ?? 0);
|
|
32
|
+
let dragging = false;
|
|
33
|
+
const min = () => props.min ?? 0;
|
|
34
|
+
const max = () => props.max ?? 100;
|
|
35
|
+
const step = () => props.step ?? 1;
|
|
36
|
+
const disabled = () => !!props.disabled;
|
|
37
|
+
// Snap to the step grid (measured from min) and clamp to the range.
|
|
38
|
+
const clampSnap = (v) => {
|
|
39
|
+
if (!Number.isFinite(v))
|
|
40
|
+
return min();
|
|
41
|
+
const s = step() > 0 ? step() : 1;
|
|
42
|
+
const snapped = min() + Math.round((v - min()) / s) * s;
|
|
43
|
+
return Math.min(max(), Math.max(min(), snapped));
|
|
44
|
+
};
|
|
45
|
+
const rawValue = () => {
|
|
46
|
+
if (props.control)
|
|
47
|
+
return props.control.value();
|
|
48
|
+
if (props.value !== undefined)
|
|
49
|
+
return props.value;
|
|
50
|
+
return internal();
|
|
51
|
+
};
|
|
52
|
+
const value = () => clampSnap(rawValue());
|
|
53
|
+
const percent = () => (max() === min() ? 0 : ((value() - min()) / (max() - min())) * 100);
|
|
54
|
+
const invalid = () => {
|
|
55
|
+
const c = props.control;
|
|
56
|
+
return !!(c && c.touched?.() && c.error?.());
|
|
57
|
+
};
|
|
58
|
+
const markTouched = () => {
|
|
59
|
+
props.control?.touched?.set(true);
|
|
60
|
+
};
|
|
61
|
+
const commit = (v) => {
|
|
62
|
+
const next = clampSnap(v);
|
|
63
|
+
if (next === value())
|
|
64
|
+
return;
|
|
65
|
+
if (props.control)
|
|
66
|
+
props.control.value.set(next);
|
|
67
|
+
else if (props.value === undefined)
|
|
68
|
+
internal.set(next);
|
|
69
|
+
props.onChange?.(next);
|
|
70
|
+
};
|
|
71
|
+
const trackRect = () => {
|
|
72
|
+
const el = host();
|
|
73
|
+
const track = el?.querySelector('.weave-slider__track');
|
|
74
|
+
return track ? track.getBoundingClientRect() : null;
|
|
75
|
+
};
|
|
76
|
+
const valueFromClientX = (clientX) => {
|
|
77
|
+
const rect = trackRect();
|
|
78
|
+
if (!rect || rect.width === 0)
|
|
79
|
+
return;
|
|
80
|
+
const ratio = Math.min(1, Math.max(0, (clientX - rect.left) / rect.width));
|
|
81
|
+
commit(min() + ratio * (max() - min()));
|
|
82
|
+
};
|
|
83
|
+
// Pointer capture keeps the drag alive outside the element; guard it since a synthetic
|
|
84
|
+
// event (tests) has no active pointer id and would throw.
|
|
85
|
+
const capture = (id) => {
|
|
86
|
+
try {
|
|
87
|
+
host()?.setPointerCapture(id);
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
/* no active pointer (synthetic event) */
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const release = (id) => {
|
|
94
|
+
try {
|
|
95
|
+
host()?.releasePointerCapture(id);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
/* already released */
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const onPointerdown = (event) => {
|
|
102
|
+
if (disabled())
|
|
103
|
+
return;
|
|
104
|
+
dragging = true;
|
|
105
|
+
capture(event.pointerId);
|
|
106
|
+
host()?.focus();
|
|
107
|
+
valueFromClientX(event.clientX);
|
|
108
|
+
event.preventDefault();
|
|
109
|
+
};
|
|
110
|
+
const onPointermove = (event) => {
|
|
111
|
+
if (!dragging)
|
|
112
|
+
return;
|
|
113
|
+
valueFromClientX(event.clientX);
|
|
114
|
+
};
|
|
115
|
+
const onPointerup = (event) => {
|
|
116
|
+
if (!dragging)
|
|
117
|
+
return;
|
|
118
|
+
dragging = false;
|
|
119
|
+
release(event.pointerId);
|
|
120
|
+
markTouched();
|
|
121
|
+
};
|
|
122
|
+
const onKeydown = (event) => {
|
|
123
|
+
if (disabled())
|
|
124
|
+
return;
|
|
125
|
+
const s = step() > 0 ? step() : 1;
|
|
126
|
+
const big = Math.max(s, (max() - min()) / 10);
|
|
127
|
+
let next = value();
|
|
128
|
+
switch (event.key) {
|
|
129
|
+
case 'ArrowRight':
|
|
130
|
+
case 'ArrowUp':
|
|
131
|
+
next += s;
|
|
132
|
+
break;
|
|
133
|
+
case 'ArrowLeft':
|
|
134
|
+
case 'ArrowDown':
|
|
135
|
+
next -= s;
|
|
136
|
+
break;
|
|
137
|
+
case 'PageUp':
|
|
138
|
+
next += big;
|
|
139
|
+
break;
|
|
140
|
+
case 'PageDown':
|
|
141
|
+
next -= big;
|
|
142
|
+
break;
|
|
143
|
+
case 'Home':
|
|
144
|
+
next = min();
|
|
145
|
+
break;
|
|
146
|
+
case 'End':
|
|
147
|
+
next = max();
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
commit(next);
|
|
153
|
+
markTouched();
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
};
|
|
156
|
+
return {
|
|
157
|
+
host,
|
|
158
|
+
rootClass: () => {
|
|
159
|
+
const parts = ['weave-slider'];
|
|
160
|
+
if (disabled())
|
|
161
|
+
parts.push('weave-slider--disabled');
|
|
162
|
+
if (invalid())
|
|
163
|
+
parts.push('weave-slider--invalid');
|
|
164
|
+
if (props.class)
|
|
165
|
+
parts.push(props.class);
|
|
166
|
+
return parts.join(' ');
|
|
167
|
+
},
|
|
168
|
+
tabindex: () => (disabled() ? -1 : 0),
|
|
169
|
+
min,
|
|
170
|
+
max,
|
|
171
|
+
value,
|
|
172
|
+
valueText: () => (props.format ? props.format(value()) : String(value())),
|
|
173
|
+
label: () => props.label,
|
|
174
|
+
disabledAttr: () => (disabled() ? 'true' : undefined),
|
|
175
|
+
invalidAttr: () => (invalid() ? 'true' : undefined),
|
|
176
|
+
fillStyle: () => `width: ${percent()}%`,
|
|
177
|
+
thumbStyle: () => `left: ${percent()}%`,
|
|
178
|
+
onPointerdown,
|
|
179
|
+
onPointermove,
|
|
180
|
+
onPointerup,
|
|
181
|
+
onKeydown,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=slider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slider.js","sourceRoot":"","sources":["../../src/slider/slider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface SnackbarAction {
|
|
2
|
+
label: string;
|
|
3
|
+
onAction?: () => void;
|
|
4
|
+
}
|
|
5
|
+
export interface SnackbarOptions {
|
|
6
|
+
/** An action button — `{ label, onAction }` or just a label string. */
|
|
7
|
+
action?: SnackbarAction | string;
|
|
8
|
+
/** Auto-dismiss delay (ms). Default 4000. `0` = stays until dismissed. */
|
|
9
|
+
duration?: number;
|
|
10
|
+
/** Screen-reader urgency. Default `'polite'`. */
|
|
11
|
+
politeness?: 'polite' | 'assertive';
|
|
12
|
+
/** Horizontal placement along the bottom edge. Default `'center'`. */
|
|
13
|
+
position?: 'center' | 'start' | 'end';
|
|
14
|
+
}
|
|
15
|
+
export interface SnackbarRef {
|
|
16
|
+
/** The bar element (exists as soon as `snackbar()` returns, even while queued). */
|
|
17
|
+
readonly element: HTMLElement;
|
|
18
|
+
/** Dismiss now (also removes it from the queue if not yet shown). */
|
|
19
|
+
dismiss(): void;
|
|
20
|
+
/** Resolves once this snackbar has been dismissed. */
|
|
21
|
+
afterDismissed(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/** Show a snackbar. Returns a {@link SnackbarRef}. */
|
|
24
|
+
export declare function snackbar(message: string, options?: SnackbarOptions): SnackbarRef;
|
|
25
|
+
//# sourceMappingURL=snackbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snackbar.d.ts","sourceRoot":"","sources":["../../src/snackbar/snackbar.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,MAAM,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,qEAAqE;IACrE,OAAO,IAAI,IAAI,CAAC;IAChB,sDAAsD;IACtD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AA8GD,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,WAAW,CAyBpF"}
|