@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,303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Timepicker>` — a time field + spinner popover (the design's h : m + AM/PM columns). A
|
|
3
|
+
* Select-style trigger field (shares Input's chrome via the `field-underline` helper) shows
|
|
4
|
+
* the formatted time + a clock icon; clicking (or ↓/Enter/Space) opens a CDK-overlay panel of
|
|
5
|
+
* **spinbutton columns** — hour ▲/▼, minute ▲/▼ (by `step`), and an AM/PM toggle (12-hour
|
|
6
|
+
* locales). 12h vs 24h is derived from the locale (override with `use24`).
|
|
7
|
+
*
|
|
8
|
+
* - **Value** — a neutral `{ hours, minutes }` (24-hour internally). Binding follows the Weave
|
|
9
|
+
* form convention: `value` + `onChange`, OR a structural `control` (a forms `Field`).
|
|
10
|
+
* - **Bounds** — `min`/`max` clamp the committed time; `step` (minutes, default 5) sets the
|
|
11
|
+
* minute increment.
|
|
12
|
+
* - **Keyboard** — each column is a `role=spinbutton`: Arrow Up/Down inc/dec, with
|
|
13
|
+
* `aria-valuenow`/`-valuetext`. Non-modal popover (click-away + Esc).
|
|
14
|
+
*
|
|
15
|
+
* import Timepicker from '@weave-framework/ui/timepicker';
|
|
16
|
+
* <Timepicker control={{ form.controls.start }} step={{ 15 }} />
|
|
17
|
+
*/
|
|
18
|
+
import { signal, effect, onDispose } from '@weave-framework/runtime';
|
|
19
|
+
import { createOverlay, connectedPosition } from '../cdk/index.js';
|
|
20
|
+
import { buildPositions } from '../shared/positions.js';
|
|
21
|
+
export const template = '<div class={{ rootClass() }} ref={{ root }}>' +
|
|
22
|
+
'<div class="weave-timepicker__field" ref={{ trigger }} role="combobox" tabindex={{ tabindex() }}' +
|
|
23
|
+
' aria-haspopup="dialog" aria-expanded="false" aria-label={{ label() }} aria-required={{ ariaRequired() }}' +
|
|
24
|
+
' aria-disabled={{ ariaDisabled() }} on:click={{ onFieldClick }} on:keydown={{ onTriggerKeydown }}>' +
|
|
25
|
+
'<span class={{ valueClass() }}>{{ displayText() }}</span>' +
|
|
26
|
+
'<span class="weave-timepicker__spacer"></span>' +
|
|
27
|
+
'@if (showClear()) {' +
|
|
28
|
+
'<button type="button" class="weave-timepicker__clear" tabindex="-1" aria-label={{ clearLabel() }} on:click={{ onClearClick }}>×</button>' +
|
|
29
|
+
'}' +
|
|
30
|
+
'<span class="weave-timepicker__icon" aria-hidden="true"></span>' +
|
|
31
|
+
'</div>' +
|
|
32
|
+
'</div>';
|
|
33
|
+
const mm = (t) => t.hours * 60 + t.minutes;
|
|
34
|
+
let _seq = 0;
|
|
35
|
+
export function setup(props) {
|
|
36
|
+
const id = ++_seq;
|
|
37
|
+
const root = signal(null);
|
|
38
|
+
const trigger = signal(null);
|
|
39
|
+
const open = signal(false);
|
|
40
|
+
const step = props.step ?? 5;
|
|
41
|
+
const resolved = new Intl.DateTimeFormat(props.locale, { hour: 'numeric' }).resolvedOptions();
|
|
42
|
+
const use24 = props.use24 ?? !resolved.hour12;
|
|
43
|
+
let overlay = null;
|
|
44
|
+
let panel = null;
|
|
45
|
+
let hourValueEl = null;
|
|
46
|
+
let minuteValueEl = null;
|
|
47
|
+
let hourCol = null;
|
|
48
|
+
let minuteCol = null;
|
|
49
|
+
let ampmButton = null;
|
|
50
|
+
let seed = { hours: 12, minutes: 0 };
|
|
51
|
+
const isDisabled = () => !!props.disabled;
|
|
52
|
+
const rawValue = () => {
|
|
53
|
+
const v = props.control ? props.control.value() : props.value;
|
|
54
|
+
return v ?? null;
|
|
55
|
+
};
|
|
56
|
+
const workingTime = () => rawValue() ?? seed;
|
|
57
|
+
const clampTime = (t) => {
|
|
58
|
+
if (props.min && mm(t) < mm(props.min))
|
|
59
|
+
return { ...props.min };
|
|
60
|
+
if (props.max && mm(t) > mm(props.max))
|
|
61
|
+
return { ...props.max };
|
|
62
|
+
return t;
|
|
63
|
+
};
|
|
64
|
+
const commit = (next) => {
|
|
65
|
+
const v = next ? clampTime(next) : null;
|
|
66
|
+
if (props.control)
|
|
67
|
+
props.control.value.set(v);
|
|
68
|
+
else
|
|
69
|
+
props.onChange?.(v);
|
|
70
|
+
};
|
|
71
|
+
const displayHour = (t) => (use24 ? t.hours : (t.hours % 12) || 12);
|
|
72
|
+
const ampm = (t) => (t.hours < 12 ? 'AM' : 'PM');
|
|
73
|
+
const to24 = (dh, ap) => (dh % 12) + (ap === 'PM' ? 12 : 0);
|
|
74
|
+
const formatTime = (t) => {
|
|
75
|
+
const d = new Date(2000, 0, 1, t.hours, t.minutes);
|
|
76
|
+
return new Intl.DateTimeFormat(props.locale, { hour: 'numeric', minute: '2-digit', hour12: !use24 }).format(d);
|
|
77
|
+
};
|
|
78
|
+
const two = (n) => String(n).padStart(2, '0');
|
|
79
|
+
/* ── spinner operations ── */
|
|
80
|
+
const setTime = (next) => commit(next);
|
|
81
|
+
const incHour = () => {
|
|
82
|
+
const t = workingTime();
|
|
83
|
+
if (use24)
|
|
84
|
+
setTime({ hours: (t.hours + 1) % 24, minutes: t.minutes });
|
|
85
|
+
else
|
|
86
|
+
setTime({ hours: to24((displayHour(t) % 12) + 1, ampm(t)), minutes: t.minutes });
|
|
87
|
+
};
|
|
88
|
+
const decHour = () => {
|
|
89
|
+
const t = workingTime();
|
|
90
|
+
if (use24)
|
|
91
|
+
setTime({ hours: (t.hours + 23) % 24, minutes: t.minutes });
|
|
92
|
+
else
|
|
93
|
+
setTime({ hours: to24(((displayHour(t) + 10) % 12) + 1, ampm(t)), minutes: t.minutes });
|
|
94
|
+
};
|
|
95
|
+
const incMinute = () => {
|
|
96
|
+
const t = workingTime();
|
|
97
|
+
setTime({ hours: t.hours, minutes: (Math.floor(t.minutes / step) * step + step) % 60 });
|
|
98
|
+
};
|
|
99
|
+
const decMinute = () => {
|
|
100
|
+
const t = workingTime();
|
|
101
|
+
setTime({ hours: t.hours, minutes: (Math.ceil(t.minutes / step) * step - step + 60) % 60 });
|
|
102
|
+
};
|
|
103
|
+
const toggleAmPm = () => {
|
|
104
|
+
const t = workingTime();
|
|
105
|
+
setTime({ hours: (t.hours + 12) % 24, minutes: t.minutes });
|
|
106
|
+
};
|
|
107
|
+
/* ── panel ── */
|
|
108
|
+
function spinButton(glyph, label, onClick) {
|
|
109
|
+
const b = document.createElement('button');
|
|
110
|
+
b.type = 'button';
|
|
111
|
+
b.className = 'weave-timepicker__spin';
|
|
112
|
+
b.setAttribute('aria-label', label);
|
|
113
|
+
b.textContent = glyph;
|
|
114
|
+
b.addEventListener('click', onClick);
|
|
115
|
+
return b;
|
|
116
|
+
}
|
|
117
|
+
function buildColumn(kind, inc, dec) {
|
|
118
|
+
const col = document.createElement('div');
|
|
119
|
+
col.className = 'weave-timepicker__col';
|
|
120
|
+
col.setAttribute('role', 'spinbutton');
|
|
121
|
+
col.tabIndex = 0;
|
|
122
|
+
col.setAttribute('aria-label', kind === 'hour' ? 'Hour' : 'Minute');
|
|
123
|
+
// APG spinbutton requires the value bounds. Hour range depends on 12/24h; minute is 0–59.
|
|
124
|
+
if (kind === 'hour') {
|
|
125
|
+
col.setAttribute('aria-valuemin', use24 ? '0' : '1');
|
|
126
|
+
col.setAttribute('aria-valuemax', use24 ? '23' : '12');
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
col.setAttribute('aria-valuemin', '0');
|
|
130
|
+
col.setAttribute('aria-valuemax', '59');
|
|
131
|
+
}
|
|
132
|
+
const up = spinButton('▲', `Increment ${kind}`, inc);
|
|
133
|
+
const value = document.createElement('span');
|
|
134
|
+
value.className = 'weave-timepicker__col-value';
|
|
135
|
+
const down = spinButton('▼', `Decrement ${kind}`, dec);
|
|
136
|
+
col.append(up, value, down);
|
|
137
|
+
col.addEventListener('keydown', (e) => {
|
|
138
|
+
if (e.key === 'ArrowUp') {
|
|
139
|
+
inc();
|
|
140
|
+
e.preventDefault();
|
|
141
|
+
}
|
|
142
|
+
else if (e.key === 'ArrowDown') {
|
|
143
|
+
dec();
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
}
|
|
146
|
+
else if (e.key === 'Escape') {
|
|
147
|
+
closePanel(true);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
return { col, value };
|
|
151
|
+
}
|
|
152
|
+
function buildPanel() {
|
|
153
|
+
const box = document.createElement('div');
|
|
154
|
+
box.className = 'weave-timepicker__panel';
|
|
155
|
+
box.setAttribute('role', 'dialog');
|
|
156
|
+
box.setAttribute('aria-modal', 'false');
|
|
157
|
+
box.setAttribute('aria-label', 'Choose time');
|
|
158
|
+
box.id = `weave-timepicker-${id}-panel`;
|
|
159
|
+
const hour = buildColumn('hour', incHour, decHour);
|
|
160
|
+
hourCol = hour.col;
|
|
161
|
+
hourValueEl = hour.value;
|
|
162
|
+
const colon = document.createElement('span');
|
|
163
|
+
colon.className = 'weave-timepicker__colon';
|
|
164
|
+
colon.textContent = ':';
|
|
165
|
+
colon.setAttribute('aria-hidden', 'true');
|
|
166
|
+
const minute = buildColumn('minute', incMinute, decMinute);
|
|
167
|
+
minuteCol = minute.col;
|
|
168
|
+
minuteValueEl = minute.value;
|
|
169
|
+
box.append(hourCol, colon, minuteCol);
|
|
170
|
+
if (!use24) {
|
|
171
|
+
ampmButton = document.createElement('button');
|
|
172
|
+
ampmButton.type = 'button';
|
|
173
|
+
ampmButton.className = 'weave-timepicker__ampm';
|
|
174
|
+
ampmButton.addEventListener('click', toggleAmPm);
|
|
175
|
+
box.append(ampmButton);
|
|
176
|
+
}
|
|
177
|
+
return box;
|
|
178
|
+
}
|
|
179
|
+
function renderPanel() {
|
|
180
|
+
const t = workingTime();
|
|
181
|
+
if (hourValueEl)
|
|
182
|
+
hourValueEl.textContent = use24 ? two(displayHour(t)) : String(displayHour(t));
|
|
183
|
+
if (minuteValueEl)
|
|
184
|
+
minuteValueEl.textContent = two(t.minutes);
|
|
185
|
+
if (hourCol) {
|
|
186
|
+
hourCol.setAttribute('aria-valuenow', String(displayHour(t)));
|
|
187
|
+
hourCol.setAttribute('aria-valuetext', `${displayHour(t)} hours`);
|
|
188
|
+
}
|
|
189
|
+
if (minuteCol) {
|
|
190
|
+
minuteCol.setAttribute('aria-valuenow', String(t.minutes));
|
|
191
|
+
minuteCol.setAttribute('aria-valuetext', `${t.minutes} minutes`);
|
|
192
|
+
}
|
|
193
|
+
if (ampmButton) {
|
|
194
|
+
ampmButton.textContent = ampm(t);
|
|
195
|
+
ampmButton.setAttribute('aria-label', `Toggle AM/PM (currently ${ampm(t)})`);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function nowSeed() {
|
|
199
|
+
const n = new Date();
|
|
200
|
+
return clampTime({ hours: n.getHours(), minutes: Math.round(n.getMinutes() / step) * step % 60 });
|
|
201
|
+
}
|
|
202
|
+
function openPanel() {
|
|
203
|
+
if (open() || isDisabled())
|
|
204
|
+
return;
|
|
205
|
+
const t = trigger();
|
|
206
|
+
seed = rawValue() ?? nowSeed();
|
|
207
|
+
if (!panel)
|
|
208
|
+
panel = buildPanel();
|
|
209
|
+
overlay = createOverlay({
|
|
210
|
+
hasBackdrop: true,
|
|
211
|
+
backdropClass: 'weave-overlay-backdrop--transparent',
|
|
212
|
+
positionStrategy: connectedPosition(t, { positions: buildPositions(props.position, 'bottom-start'), offset: 4 }),
|
|
213
|
+
});
|
|
214
|
+
overlay.onBackdropClick(() => closePanel(false));
|
|
215
|
+
overlay.attach(panel);
|
|
216
|
+
t.setAttribute('aria-expanded', 'true');
|
|
217
|
+
open.set(true);
|
|
218
|
+
renderPanel();
|
|
219
|
+
hourCol?.focus();
|
|
220
|
+
}
|
|
221
|
+
function closePanel(returnFocus) {
|
|
222
|
+
if (!open())
|
|
223
|
+
return;
|
|
224
|
+
overlay?.detach();
|
|
225
|
+
overlay = null;
|
|
226
|
+
trigger()?.setAttribute('aria-expanded', 'false');
|
|
227
|
+
open.set(false);
|
|
228
|
+
props.control?.touched?.set(true);
|
|
229
|
+
if (returnFocus)
|
|
230
|
+
trigger()?.focus();
|
|
231
|
+
}
|
|
232
|
+
const onFieldClick = () => {
|
|
233
|
+
if (open())
|
|
234
|
+
closePanel(true);
|
|
235
|
+
else
|
|
236
|
+
openPanel();
|
|
237
|
+
};
|
|
238
|
+
const onTriggerKeydown = (event) => {
|
|
239
|
+
if (isDisabled() || open())
|
|
240
|
+
return;
|
|
241
|
+
if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {
|
|
242
|
+
event.preventDefault();
|
|
243
|
+
openPanel();
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
const onClearClick = (event) => {
|
|
247
|
+
event.stopPropagation();
|
|
248
|
+
commit(null);
|
|
249
|
+
};
|
|
250
|
+
// Re-render the open panel when the value changes (spinner ops commit → value → here).
|
|
251
|
+
effect(() => {
|
|
252
|
+
rawValue();
|
|
253
|
+
if (open())
|
|
254
|
+
renderPanel();
|
|
255
|
+
});
|
|
256
|
+
effect(() => {
|
|
257
|
+
const t = trigger();
|
|
258
|
+
if (!t)
|
|
259
|
+
return;
|
|
260
|
+
const c = props.control;
|
|
261
|
+
if (c && c.touched?.() && c.error?.())
|
|
262
|
+
t.setAttribute('aria-invalid', 'true');
|
|
263
|
+
else
|
|
264
|
+
t.removeAttribute('aria-invalid');
|
|
265
|
+
});
|
|
266
|
+
onDispose(() => {
|
|
267
|
+
overlay?.dispose();
|
|
268
|
+
overlay = null;
|
|
269
|
+
});
|
|
270
|
+
const invalidNow = () => {
|
|
271
|
+
const c = props.control;
|
|
272
|
+
return !!(c && c.touched?.() && c.error?.());
|
|
273
|
+
};
|
|
274
|
+
return {
|
|
275
|
+
root,
|
|
276
|
+
trigger,
|
|
277
|
+
rootClass: () => {
|
|
278
|
+
const parts = ['weave-timepicker'];
|
|
279
|
+
if (isDisabled())
|
|
280
|
+
parts.push('weave-timepicker--disabled');
|
|
281
|
+
if (invalidNow())
|
|
282
|
+
parts.push('weave-timepicker--invalid');
|
|
283
|
+
if (props.class)
|
|
284
|
+
parts.push(props.class);
|
|
285
|
+
return parts.join(' ');
|
|
286
|
+
},
|
|
287
|
+
valueClass: () => rawValue() == null ? 'weave-timepicker__value weave-timepicker__value--placeholder' : 'weave-timepicker__value',
|
|
288
|
+
displayText: () => {
|
|
289
|
+
const v = rawValue();
|
|
290
|
+
return v ? formatTime(v) : props.placeholder ?? '';
|
|
291
|
+
},
|
|
292
|
+
tabindex: () => (isDisabled() ? -1 : 0),
|
|
293
|
+
label: () => props.label,
|
|
294
|
+
ariaRequired: () => (props.required ? 'true' : undefined),
|
|
295
|
+
ariaDisabled: () => (isDisabled() ? 'true' : undefined),
|
|
296
|
+
showClear: () => !!props.clearable && !isDisabled() && rawValue() != null,
|
|
297
|
+
clearLabel: () => props.clearLabel ?? 'Clear',
|
|
298
|
+
onFieldClick,
|
|
299
|
+
onTriggerKeydown,
|
|
300
|
+
onClearClick,
|
|
301
|
+
};
|
|
302
|
+
}
|
|
303
|
+
//# sourceMappingURL=timepicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timepicker.js","sourceRoot":"","sources":["../../src/timepicker/timepicker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Toolbar>` — a horizontal app bar (Keyline: 52px, surface bg, 1px bottom rule, no
|
|
3
|
+
* shadow). Pure layout — a flex row you compose from the part classes:
|
|
4
|
+
*
|
|
5
|
+
* <Toolbar sticky>
|
|
6
|
+
* <div class="weave-toolbar__start">
|
|
7
|
+
* <Button variant={{ 'icon' }} label={{ 'Menu' }}><Icon name={{ 'menu' }} /></Button>
|
|
8
|
+
* <strong>Weave UI</strong>
|
|
9
|
+
* </div>
|
|
10
|
+
* <span class="weave-toolbar__spacer"></span>
|
|
11
|
+
* <div class="weave-toolbar__end">
|
|
12
|
+
* <ButtonToggle options={{ modes }} value={{ mode() }} onChange={{ setMode }} />
|
|
13
|
+
* </div>
|
|
14
|
+
* </Toolbar>
|
|
15
|
+
*
|
|
16
|
+
* No behavior beyond forwarding `class`. `variant="ink"` inverts to an ink bar;
|
|
17
|
+
* `sticky` pins it to the top. Set a semantic role (`banner`/`toolbar`) on it yourself
|
|
18
|
+
* if the context calls for one — the component stays an unopinionated layout container.
|
|
19
|
+
*/
|
|
20
|
+
export type ToolbarVariant = 'ink';
|
|
21
|
+
export interface ToolbarProps {
|
|
22
|
+
/** Invert to an ink bar. Default = surface. */
|
|
23
|
+
variant?: ToolbarVariant;
|
|
24
|
+
/** Pin to the top (`position: sticky`). */
|
|
25
|
+
sticky?: boolean;
|
|
26
|
+
/** Extra classes, forwarded onto the container. */
|
|
27
|
+
class?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare const template: string;
|
|
30
|
+
export interface ToolbarContext {
|
|
31
|
+
toolbarClass: () => string;
|
|
32
|
+
}
|
|
33
|
+
export declare function setup(props: ToolbarProps): ToolbarContext;
|
|
34
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../src/toolbar/toolbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,cAAc,GAAG,KAAK,CAAC;AAEnC,MAAM,WAAW,YAAY;IAC3B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAA8D,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,MAAM,CAAC;CAC5B;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CAUzD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Toolbar>` — a horizontal app bar (Keyline: 52px, surface bg, 1px bottom rule, no
|
|
3
|
+
* shadow). Pure layout — a flex row you compose from the part classes:
|
|
4
|
+
*
|
|
5
|
+
* <Toolbar sticky>
|
|
6
|
+
* <div class="weave-toolbar__start">
|
|
7
|
+
* <Button variant={{ 'icon' }} label={{ 'Menu' }}><Icon name={{ 'menu' }} /></Button>
|
|
8
|
+
* <strong>Weave UI</strong>
|
|
9
|
+
* </div>
|
|
10
|
+
* <span class="weave-toolbar__spacer"></span>
|
|
11
|
+
* <div class="weave-toolbar__end">
|
|
12
|
+
* <ButtonToggle options={{ modes }} value={{ mode() }} onChange={{ setMode }} />
|
|
13
|
+
* </div>
|
|
14
|
+
* </Toolbar>
|
|
15
|
+
*
|
|
16
|
+
* No behavior beyond forwarding `class`. `variant="ink"` inverts to an ink bar;
|
|
17
|
+
* `sticky` pins it to the top. Set a semantic role (`banner`/`toolbar`) on it yourself
|
|
18
|
+
* if the context calls for one — the component stays an unopinionated layout container.
|
|
19
|
+
*/
|
|
20
|
+
export const template = '<div class={{ toolbarClass() }}><slot></slot></div>';
|
|
21
|
+
export function setup(props) {
|
|
22
|
+
return {
|
|
23
|
+
toolbarClass: () => {
|
|
24
|
+
const parts = ['weave-toolbar'];
|
|
25
|
+
if (props.variant)
|
|
26
|
+
parts.push(`weave-toolbar--${props.variant}`);
|
|
27
|
+
if (props.sticky)
|
|
28
|
+
parts.push('weave-toolbar--sticky');
|
|
29
|
+
if (props.class)
|
|
30
|
+
parts.push(props.class);
|
|
31
|
+
return parts.join(' ');
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/toolbar/toolbar.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAaH,MAAM,CAAC,MAAM,QAAQ,GAAW,qDAAqD,CAAC;AAMtF,MAAM,UAAU,KAAK,CAAC,KAAmB;IACvC,OAAO;QACL,YAAY,EAAE,GAAW,EAAE;YACzB,MAAM,KAAK,GAAa,CAAC,eAAe,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,IAAI,KAAK,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tooltip — a hint bubble, applied as a Weave `use:` action to any host:
|
|
3
|
+
*
|
|
4
|
+
* <button use:tooltip={{ 'Save changes' }}>Save</button>
|
|
5
|
+
* <span use:tooltip={{ { text: 'Copied', position: 'bottom' } }}>…</span>
|
|
6
|
+
*
|
|
7
|
+
* Opens on hover (after a short delay) AND on keyboard focus (immediately, so it's
|
|
8
|
+
* accessible), closes on leave / blur / Escape. The panel is a CDK overlay positioned
|
|
9
|
+
* against the host with `connectedPosition` (preferred side, flips on overflow); no
|
|
10
|
+
* backdrop, no focus management (a tooltip is never focused). Follows the WAI-ARIA
|
|
11
|
+
* tooltip pattern: the panel is `role=tooltip` and the host gets `aria-describedby`
|
|
12
|
+
* pointing at it while shown, so the description flows to the trigger. Zero-dep.
|
|
13
|
+
*
|
|
14
|
+
* The visual is driven by `tooltip.styles()` (its own `--weave-tooltip-*` republic);
|
|
15
|
+
* this file is only the behavior. Rich/interactive tooltips (a Popover) are out of scope.
|
|
16
|
+
*/
|
|
17
|
+
import { type PositionName } from '../cdk/index.js';
|
|
18
|
+
export interface TooltipOptions {
|
|
19
|
+
/** The hint text (plain string — a tooltip is non-interactive). */
|
|
20
|
+
text: string;
|
|
21
|
+
/** Preferred side; flips to the opposite on overflow. Default `'top'`. */
|
|
22
|
+
position?: PositionName;
|
|
23
|
+
/** Delay (ms) before a hover shows the tooltip. Focus shows with no delay. Default 150. */
|
|
24
|
+
delay?: number;
|
|
25
|
+
/** Suppress the tooltip without detaching the action. */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** Weave `use:` action: `(el, text | options) => cleanup`. */
|
|
29
|
+
export declare function tooltip(host: HTMLElement, options: string | TooltipOptions): () => void;
|
|
30
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../src/tooltip/tooltip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAqD,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEvG,MAAM,WAAW,cAAc;IAC7B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,2FAA2F;IAC3F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAID,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,MAAM,IAAI,CAwEvF"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tooltip — a hint bubble, applied as a Weave `use:` action to any host:
|
|
3
|
+
*
|
|
4
|
+
* <button use:tooltip={{ 'Save changes' }}>Save</button>
|
|
5
|
+
* <span use:tooltip={{ { text: 'Copied', position: 'bottom' } }}>…</span>
|
|
6
|
+
*
|
|
7
|
+
* Opens on hover (after a short delay) AND on keyboard focus (immediately, so it's
|
|
8
|
+
* accessible), closes on leave / blur / Escape. The panel is a CDK overlay positioned
|
|
9
|
+
* against the host with `connectedPosition` (preferred side, flips on overflow); no
|
|
10
|
+
* backdrop, no focus management (a tooltip is never focused). Follows the WAI-ARIA
|
|
11
|
+
* tooltip pattern: the panel is `role=tooltip` and the host gets `aria-describedby`
|
|
12
|
+
* pointing at it while shown, so the description flows to the trigger. Zero-dep.
|
|
13
|
+
*
|
|
14
|
+
* The visual is driven by `tooltip.styles()` (its own `--weave-tooltip-*` republic);
|
|
15
|
+
* this file is only the behavior. Rich/interactive tooltips (a Popover) are out of scope.
|
|
16
|
+
*/
|
|
17
|
+
import { createOverlay, connectedPosition } from '../cdk/index.js';
|
|
18
|
+
let _idSeq = 0;
|
|
19
|
+
/** Weave `use:` action: `(el, text | options) => cleanup`. */
|
|
20
|
+
export function tooltip(host, options) {
|
|
21
|
+
const opts = typeof options === 'string' ? { text: options } : options;
|
|
22
|
+
const id = `weave-tooltip-${++_idSeq}`;
|
|
23
|
+
let ref = null;
|
|
24
|
+
let showTimer = null;
|
|
25
|
+
let shown = false;
|
|
26
|
+
function ensureRef() {
|
|
27
|
+
if (ref)
|
|
28
|
+
return ref;
|
|
29
|
+
ref = createOverlay({
|
|
30
|
+
positionStrategy: connectedPosition(host, { positions: fallbacks(opts.position ?? 'top'), offset: 6 }),
|
|
31
|
+
});
|
|
32
|
+
// A tooltip never captures the pointer (it must not block hover on the host).
|
|
33
|
+
ref.overlayElement.style.pointerEvents = 'none';
|
|
34
|
+
return ref;
|
|
35
|
+
}
|
|
36
|
+
function show() {
|
|
37
|
+
if (opts.disabled || shown || !opts.text)
|
|
38
|
+
return;
|
|
39
|
+
const panel = document.createElement('div');
|
|
40
|
+
panel.className = 'weave-tooltip';
|
|
41
|
+
panel.setAttribute('role', 'tooltip');
|
|
42
|
+
panel.id = id;
|
|
43
|
+
panel.textContent = opts.text;
|
|
44
|
+
ensureRef().attach(panel);
|
|
45
|
+
host.setAttribute('aria-describedby', id);
|
|
46
|
+
shown = true;
|
|
47
|
+
}
|
|
48
|
+
function hide() {
|
|
49
|
+
if (showTimer !== null) {
|
|
50
|
+
clearTimeout(showTimer);
|
|
51
|
+
showTimer = null;
|
|
52
|
+
}
|
|
53
|
+
if (!shown)
|
|
54
|
+
return;
|
|
55
|
+
ref?.detach();
|
|
56
|
+
host.removeAttribute('aria-describedby');
|
|
57
|
+
shown = false;
|
|
58
|
+
}
|
|
59
|
+
function scheduleShow() {
|
|
60
|
+
if (showTimer !== null)
|
|
61
|
+
clearTimeout(showTimer);
|
|
62
|
+
showTimer = setTimeout(() => {
|
|
63
|
+
showTimer = null;
|
|
64
|
+
show();
|
|
65
|
+
}, opts.delay ?? 150);
|
|
66
|
+
}
|
|
67
|
+
const onEnter = () => scheduleShow();
|
|
68
|
+
const onLeave = () => hide();
|
|
69
|
+
const onFocusIn = () => show(); // keyboard focus: show immediately (no hover delay)
|
|
70
|
+
const onFocusOut = () => hide();
|
|
71
|
+
const onKeydown = (event) => {
|
|
72
|
+
if (event.key === 'Escape')
|
|
73
|
+
hide();
|
|
74
|
+
};
|
|
75
|
+
host.addEventListener('mouseenter', onEnter);
|
|
76
|
+
host.addEventListener('mouseleave', onLeave);
|
|
77
|
+
host.addEventListener('focusin', onFocusIn);
|
|
78
|
+
host.addEventListener('focusout', onFocusOut);
|
|
79
|
+
host.addEventListener('keydown', onKeydown);
|
|
80
|
+
return () => {
|
|
81
|
+
hide();
|
|
82
|
+
host.removeEventListener('mouseenter', onEnter);
|
|
83
|
+
host.removeEventListener('mouseleave', onLeave);
|
|
84
|
+
host.removeEventListener('focusin', onFocusIn);
|
|
85
|
+
host.removeEventListener('focusout', onFocusOut);
|
|
86
|
+
host.removeEventListener('keydown', onKeydown);
|
|
87
|
+
ref?.dispose();
|
|
88
|
+
ref = null;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Preferred side + its opposite as the flip fallback (the CDK positioner does the rest).
|
|
92
|
+
function fallbacks(preferred) {
|
|
93
|
+
const opposite = {
|
|
94
|
+
top: 'bottom',
|
|
95
|
+
bottom: 'top',
|
|
96
|
+
left: 'right',
|
|
97
|
+
right: 'left',
|
|
98
|
+
'top-start': 'bottom-start',
|
|
99
|
+
'bottom-start': 'top-start',
|
|
100
|
+
'top-end': 'bottom-end',
|
|
101
|
+
'bottom-end': 'top-end',
|
|
102
|
+
'left-start': 'right-start',
|
|
103
|
+
'right-start': 'left-start',
|
|
104
|
+
'left-end': 'right-end',
|
|
105
|
+
'right-end': 'left-end',
|
|
106
|
+
};
|
|
107
|
+
return [preferred, opposite[preferred]];
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../src/tooltip/tooltip.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<Tree>` — a hierarchical disclosure surface (WAI-ARIA tree pattern). Expandable
|
|
3
|
+
* folders (▸/▾) over file leaves, indented by depth, authored as a Weave template so the
|
|
4
|
+
* body is a keyed `@for` over the **visible flattened nodes** and arbitrary `Node` content
|
|
5
|
+
* mounts via `@render`. Styled by the Weave design (hairline hover, compact rows,
|
|
6
|
+
* accent-as-a-mark selection — accentSoft tint + 2px accent left border, like the List).
|
|
7
|
+
*
|
|
8
|
+
* Two data models, one FlatNode shape:
|
|
9
|
+
* - **nested** (default): `nodes` are roots; a `children` accessor (default `node.children`)
|
|
10
|
+
* is recursed and a node's descendants appear only while it is expanded;
|
|
11
|
+
* - **flat**: pass `getLevel` (0-based depth) and the tree flattens by scanning the
|
|
12
|
+
* DFS-ordered array, hiding descendants of collapsed nodes.
|
|
13
|
+
*
|
|
14
|
+
* Expansion + selection ride the CDK `SelectionModel`; keyboard is the CDK `listKeyManager`
|
|
15
|
+
* (vertical, typeahead) over the visible list plus Right/Left for expand/collapse/parent.
|
|
16
|
+
* `role=tree` / `role=treeitem` with `aria-level`/`-setsize`/`-posinset`/`-expanded`/
|
|
17
|
+
* `-selected`; a single roving tab stop.
|
|
18
|
+
*
|
|
19
|
+
* import Tree from '@weave-framework/ui/tree';
|
|
20
|
+
* <Tree nodes={{ roots }} selectable defaultExpanded={{ [roots[0]] }} />
|
|
21
|
+
*/
|
|
22
|
+
import { type Signal } from '@weave-framework/runtime';
|
|
23
|
+
import { type SelectionModel, type DropEvent } from '../cdk/index.js';
|
|
24
|
+
/** A node's rendered content: a factory over the node + its 1-based level. */
|
|
25
|
+
export type TreeNodeContent<N> = (node: N, level: number) => Node | string;
|
|
26
|
+
export interface TreeProps<N = unknown> {
|
|
27
|
+
/** Root nodes (nested model) or the full DFS-ordered array (flat model). */
|
|
28
|
+
nodes: N[];
|
|
29
|
+
/** Get a node's children (default `node.children`). */
|
|
30
|
+
children?: (node: N) => N[] | undefined;
|
|
31
|
+
/** A node's 0-based depth. Its presence selects the flat model. */
|
|
32
|
+
getLevel?: (node: N) => number;
|
|
33
|
+
/** Whether a node can expand. Default: nested → has children; flat → next node is deeper. */
|
|
34
|
+
isExpandable?: (node: N) => boolean;
|
|
35
|
+
/** Node label text accessor (default `node.label`). */
|
|
36
|
+
label?: (node: N) => string;
|
|
37
|
+
/** Full node-content override — a factory returning a node/string (wins over `label`). */
|
|
38
|
+
node?: TreeNodeContent<N>;
|
|
39
|
+
/** Stable node identity (default: object identity) — row keys + selection/expansion. */
|
|
40
|
+
trackBy?: (node: N) => string | number;
|
|
41
|
+
/** Controlled expanded set — when provided, it is the source of truth (pair with `onExpandedChange`). */
|
|
42
|
+
expanded?: N[];
|
|
43
|
+
/** Uncontrolled initial expanded set (ignored when `expanded` is provided). */
|
|
44
|
+
defaultExpanded?: N[];
|
|
45
|
+
/** Called with the next expanded set after every expand/collapse. */
|
|
46
|
+
onExpandedChange?: (expanded: N[]) => void;
|
|
47
|
+
/** Enable node selection (click / Enter / Space). */
|
|
48
|
+
selectable?: boolean;
|
|
49
|
+
/** Selection cardinality. Default `single`. */
|
|
50
|
+
selectionMode?: 'single' | 'multiple';
|
|
51
|
+
/** Bring your own selection model (else one is created). */
|
|
52
|
+
selection?: SelectionModel<N>;
|
|
53
|
+
/** Called with the selected nodes on change. */
|
|
54
|
+
onSelectionChange?: (selected: N[]) => void;
|
|
55
|
+
/** Identity comparator for selection + expansion (default `===`). */
|
|
56
|
+
compareWith?: (a: N, b: N) => boolean;
|
|
57
|
+
/** Show a per-node drag handle and let nodes be reordered by dragging it. */
|
|
58
|
+
reorderable?: boolean;
|
|
59
|
+
/** Called on a committed reorder — indices are over the **visible** node order
|
|
60
|
+
* (`visible()[i].node`); the consumer applies it to its model. */
|
|
61
|
+
onReorder?: (event: DropEvent) => void;
|
|
62
|
+
/** Accessible name for the tree. */
|
|
63
|
+
ariaLabel?: string;
|
|
64
|
+
/** Extra classes, forwarded onto the container. */
|
|
65
|
+
class?: string;
|
|
66
|
+
}
|
|
67
|
+
/** A visible node, flattened from the model against the current expansion state. */
|
|
68
|
+
interface FlatNode<N> {
|
|
69
|
+
node: N;
|
|
70
|
+
/** 0-based depth (drives indentation). */
|
|
71
|
+
depth: number;
|
|
72
|
+
/** 1-based level (`aria-level`). */
|
|
73
|
+
level: number;
|
|
74
|
+
key: unknown;
|
|
75
|
+
expandable: boolean;
|
|
76
|
+
posInSet: number;
|
|
77
|
+
setSize: number;
|
|
78
|
+
/** Index into the visible list — filled after flattening. */
|
|
79
|
+
vindex: number;
|
|
80
|
+
}
|
|
81
|
+
export declare const template: string;
|
|
82
|
+
export interface TreeContext<N> {
|
|
83
|
+
host: Signal<HTMLElement | null>;
|
|
84
|
+
rootClass: () => string;
|
|
85
|
+
ariaLabel: () => string | undefined;
|
|
86
|
+
reorderable: () => boolean;
|
|
87
|
+
visible: () => FlatNode<N>[];
|
|
88
|
+
expandedAttr: (n: FlatNode<N>) => 'true' | 'false' | undefined;
|
|
89
|
+
selectedAttr: (n: FlatNode<N>) => 'true' | 'false' | undefined;
|
|
90
|
+
tabindexFor: (n: FlatNode<N>) => number;
|
|
91
|
+
indentStyle: (n: FlatNode<N>) => string;
|
|
92
|
+
toggleClass: (n: FlatNode<N>) => string;
|
|
93
|
+
contentNode: (n: FlatNode<N>) => Node;
|
|
94
|
+
onActivate: (n: FlatNode<N>) => void;
|
|
95
|
+
onToggle: (n: FlatNode<N>, event: Event) => void;
|
|
96
|
+
onKeydown: (event: KeyboardEvent) => void;
|
|
97
|
+
}
|
|
98
|
+
export declare function setup<N = unknown>(props: TreeProps<N>): TreeContext<N>;
|
|
99
|
+
export {};
|
|
100
|
+
//# sourceMappingURL=tree.d.ts.map
|