@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,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DataSource — the collection-viewer contract a Table/Tree consumes so paging, sorting,
|
|
3
|
+
* filtering and virtualization can be swapped underneath without the component knowing.
|
|
4
|
+
* A component calls `connect()` to get a **read-only signal of the rows to render** and
|
|
5
|
+
* `disconnect()` to release resources; the concrete source (a static array, a signal, a
|
|
6
|
+
* paged fetcher…) lives behind the interface. Signal-native — our streams are signals,
|
|
7
|
+
* not RxJS. Zero-dep.
|
|
8
|
+
*
|
|
9
|
+
* const ds = new ArrayDataSource(rows); // rows: T[] | Signal<T[]>
|
|
10
|
+
* const view = ds.connect(); // () => T[] (reactive, read-only)
|
|
11
|
+
* effect(() => render(view()));
|
|
12
|
+
* // …later: ds.disconnect();
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* The trivial concrete DataSource — wraps a static array OR a signal/getter of rows. When
|
|
16
|
+
* given a signal, reactive updates propagate straight through `connect()`.
|
|
17
|
+
*/
|
|
18
|
+
export class ArrayDataSource {
|
|
19
|
+
view;
|
|
20
|
+
constructor(source) {
|
|
21
|
+
this.view = typeof source === 'function' ? source : () => source;
|
|
22
|
+
}
|
|
23
|
+
connect() {
|
|
24
|
+
return this.view;
|
|
25
|
+
}
|
|
26
|
+
disconnect() {
|
|
27
|
+
// No resources held — the source is either a plain array or a caller-owned signal.
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** True when `value` implements the DataSource contract (vs a plain array/signal). */
|
|
31
|
+
export function isDataSource(value) {
|
|
32
|
+
return (value != null &&
|
|
33
|
+
typeof value.connect === 'function' &&
|
|
34
|
+
typeof value.disconnect === 'function');
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source.js","sourceRoot":"","sources":["../../src/cdk/data-source.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAiBH;;;GAGG;AACH,MAAM,OAAO,eAAe;IACT,IAAI,CAAgB;IAErC,YAAY,MAAyC;QACnD,IAAI,CAAC,IAAI,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAQ,EAAE,CAAC,MAAM,CAAC;IACxE,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,UAAU;QACR,mFAAmF;IACrF,CAAC;CACF;AAED,sFAAsF;AACtF,MAAM,UAAU,YAAY,CAAI,KAAc;IAC5C,OAAO,CACL,KAAK,IAAI,IAAI;QACb,OAAQ,KAAuB,CAAC,OAAO,KAAK,UAAU;QACtD,OAAQ,KAAuB,CAAC,UAAU,KAAK,UAAU,CAC1D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Date adapter — the zero-dep date model under the Datepicker calendar + the Timepicker.
|
|
3
|
+
* Native `Date` + `Intl` only (rule #1 — no date library, ever). The neutral value type is a
|
|
4
|
+
* plain **local-midnight `Date`** (forms-friendly, comparable); every calendar/picker does its
|
|
5
|
+
* arithmetic through this, never raw date math.
|
|
6
|
+
*
|
|
7
|
+
* Covers: create/clone/today, add days/months/years (overflow-clamped, DST-safe via the Date
|
|
8
|
+
* constructor), start/end of month + days-in-month, day-of-week, compare/same-day, min/max
|
|
9
|
+
* clamp, `Intl` format, locale-aware parse (ISO fast-path + the locale's numeric field order),
|
|
10
|
+
* and the calendar-grid helpers (locale first-day-of-week + weekday/month names).
|
|
11
|
+
*
|
|
12
|
+
* const adapter = createDateAdapter({ locale: 'lt' });
|
|
13
|
+
* adapter.format(adapter.today(), { dateStyle: 'medium' }); // "2026 m. liepos 2 d."
|
|
14
|
+
*/
|
|
15
|
+
/** The headless date model. All dates are local-midnight `Date`s. */
|
|
16
|
+
export interface DateAdapter {
|
|
17
|
+
/** Today at local midnight. */
|
|
18
|
+
today(): Date;
|
|
19
|
+
/** A local-midnight date (month is 0-based, JS convention). */
|
|
20
|
+
create(year: number, month: number, day: number): Date;
|
|
21
|
+
/** Copy a date. */
|
|
22
|
+
clone(date: Date): Date;
|
|
23
|
+
getYear(date: Date): number;
|
|
24
|
+
/** 0-based month (0 = January). */
|
|
25
|
+
getMonth(date: Date): number;
|
|
26
|
+
/** Day of the month, 1-31. */
|
|
27
|
+
getDate(date: Date): number;
|
|
28
|
+
/** Day of the week, 0-6 (0 = Sunday, JS convention). */
|
|
29
|
+
getDayOfWeek(date: Date): number;
|
|
30
|
+
addYears(date: Date, years: number): Date;
|
|
31
|
+
addMonths(date: Date, months: number): Date;
|
|
32
|
+
addDays(date: Date, days: number): Date;
|
|
33
|
+
startOfMonth(date: Date): Date;
|
|
34
|
+
endOfMonth(date: Date): Date;
|
|
35
|
+
getDaysInMonth(date: Date): number;
|
|
36
|
+
/** Same calendar day (ignores time). */
|
|
37
|
+
isSameDay(a: Date, b: Date): boolean;
|
|
38
|
+
/** -1 / 0 / 1 by calendar day. */
|
|
39
|
+
compare(a: Date, b: Date): number;
|
|
40
|
+
/** Clamp a date into `[min, max]` (either bound optional). */
|
|
41
|
+
clamp(date: Date, min?: Date | null, max?: Date | null): Date;
|
|
42
|
+
/** A real, non-`Invalid` Date. */
|
|
43
|
+
isValid(date: unknown): date is Date;
|
|
44
|
+
/** Parse user text → a date, or null. ISO `yyyy-mm-dd` fast-path, else the locale's numeric order. */
|
|
45
|
+
parse(value: string): Date | null;
|
|
46
|
+
/** Format via `Intl.DateTimeFormat` (defaults to a medium date). */
|
|
47
|
+
format(date: Date, options?: Intl.DateTimeFormatOptions): string;
|
|
48
|
+
/** Locale-aware first day of the week, 0-6 (0 = Sunday). */
|
|
49
|
+
firstDayOfWeek(): number;
|
|
50
|
+
/** Weekday names in JS order (index 0 = Sunday). */
|
|
51
|
+
getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];
|
|
52
|
+
/** The 12 month names (index 0 = January). */
|
|
53
|
+
getMonthNames(style: 'long' | 'short' | 'narrow'): string[];
|
|
54
|
+
}
|
|
55
|
+
export interface DateAdapterOptions {
|
|
56
|
+
/** BCP-47 locale for format/parse/names/first-day (default: the runtime default). */
|
|
57
|
+
locale?: string;
|
|
58
|
+
/** Override the locale's first day of the week (0 = Sunday … 6 = Saturday). */
|
|
59
|
+
firstDayOfWeek?: number;
|
|
60
|
+
}
|
|
61
|
+
/** Create a native `Date`+`Intl` date adapter. Zero-dep. */
|
|
62
|
+
export declare function createDateAdapter(options?: DateAdapterOptions): DateAdapter;
|
|
63
|
+
//# sourceMappingURL=date-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-adapter.d.ts","sourceRoot":"","sources":["../../src/cdk/date-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,qEAAqE;AACrE,MAAM,WAAW,WAAW;IAC1B,+BAA+B;IAC/B,KAAK,IAAI,IAAI,CAAC;IACd,+DAA+D;IAC/D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,mBAAmB;IACnB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAExB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B,mCAAmC;IACnC,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B,wDAAwD;IACxD,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAEjC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAExC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC;IAEnC,wCAAwC;IACxC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC;IACrC,kCAAkC;IAClC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAClC,8DAA8D;IAC9D,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC9D,kCAAkC;IAClC,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC;IAErC,sGAAsG;IACtG,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAClC,oEAAoE;IACpE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC;IAEjE,4DAA4D;IAC5D,cAAc,IAAI,MAAM,CAAC;IACzB,oDAAoD;IACpD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;IAChE,8CAA8C;IAC9C,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,kBAAkB;IACjC,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAQD,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAiI/E"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Date adapter — the zero-dep date model under the Datepicker calendar + the Timepicker.
|
|
3
|
+
* Native `Date` + `Intl` only (rule #1 — no date library, ever). The neutral value type is a
|
|
4
|
+
* plain **local-midnight `Date`** (forms-friendly, comparable); every calendar/picker does its
|
|
5
|
+
* arithmetic through this, never raw date math.
|
|
6
|
+
*
|
|
7
|
+
* Covers: create/clone/today, add days/months/years (overflow-clamped, DST-safe via the Date
|
|
8
|
+
* constructor), start/end of month + days-in-month, day-of-week, compare/same-day, min/max
|
|
9
|
+
* clamp, `Intl` format, locale-aware parse (ISO fast-path + the locale's numeric field order),
|
|
10
|
+
* and the calendar-grid helpers (locale first-day-of-week + weekday/month names).
|
|
11
|
+
*
|
|
12
|
+
* const adapter = createDateAdapter({ locale: 'lt' });
|
|
13
|
+
* adapter.format(adapter.today(), { dateStyle: 'medium' }); // "2026 m. liepos 2 d."
|
|
14
|
+
*/
|
|
15
|
+
// A reference date with month/day/year all distinct and day > 12 — so `formatToParts`
|
|
16
|
+
// field detection is unambiguous. (Wed 22 Nov 2017.)
|
|
17
|
+
const REF_ORDER = new Date(2017, 10, 22);
|
|
18
|
+
// A known Sunday (1 Jan 2017, UTC) to enumerate weekday names in JS order.
|
|
19
|
+
const REF_SUNDAY_UTC = Date.UTC(2017, 0, 1);
|
|
20
|
+
/** Create a native `Date`+`Intl` date adapter. Zero-dep. */
|
|
21
|
+
export function createDateAdapter(options = {}) {
|
|
22
|
+
const locale = options.locale;
|
|
23
|
+
const create = (year, month, day) => new Date(year, month, day);
|
|
24
|
+
const getYear = (date) => date.getFullYear();
|
|
25
|
+
const getMonth = (date) => date.getMonth();
|
|
26
|
+
const getDate = (date) => date.getDate();
|
|
27
|
+
const isValid = (date) => date instanceof Date && !Number.isNaN(date.getTime());
|
|
28
|
+
const getDaysInMonth = (date) => new Date(getYear(date), getMonth(date) + 1, 0).getDate();
|
|
29
|
+
const compare = (a, b) => {
|
|
30
|
+
const da = create(getYear(a), getMonth(a), getDate(a)).getTime();
|
|
31
|
+
const db = create(getYear(b), getMonth(b), getDate(b)).getTime();
|
|
32
|
+
return da < db ? -1 : da > db ? 1 : 0;
|
|
33
|
+
};
|
|
34
|
+
// The locale's numeric field order (e.g. ['month','day','year'] for en-US), from Intl parts.
|
|
35
|
+
const numericFieldOrder = () => {
|
|
36
|
+
try {
|
|
37
|
+
const parts = new Intl.DateTimeFormat(locale, {
|
|
38
|
+
year: 'numeric',
|
|
39
|
+
month: '2-digit',
|
|
40
|
+
day: '2-digit',
|
|
41
|
+
}).formatToParts(REF_ORDER);
|
|
42
|
+
const order = [];
|
|
43
|
+
for (const p of parts)
|
|
44
|
+
if (p.type === 'year' || p.type === 'month' || p.type === 'day')
|
|
45
|
+
order.push(p.type);
|
|
46
|
+
return order.length === 3 ? order : ['year', 'month', 'day'];
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return ['year', 'month', 'day'];
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const adapter = {
|
|
53
|
+
today: () => {
|
|
54
|
+
const now = new Date();
|
|
55
|
+
return create(now.getFullYear(), now.getMonth(), now.getDate());
|
|
56
|
+
},
|
|
57
|
+
create,
|
|
58
|
+
clone: (date) => new Date(date.getTime()),
|
|
59
|
+
getYear,
|
|
60
|
+
getMonth,
|
|
61
|
+
getDate,
|
|
62
|
+
getDayOfWeek: (date) => date.getDay(),
|
|
63
|
+
// The Date constructor normalises overflow, which is DST-safe for date-only values.
|
|
64
|
+
addDays: (date, days) => create(getYear(date), getMonth(date), getDate(date) + days),
|
|
65
|
+
addMonths: (date, months) => {
|
|
66
|
+
const target = create(getYear(date), getMonth(date) + months, 1);
|
|
67
|
+
const day = Math.min(getDate(date), getDaysInMonth(target));
|
|
68
|
+
return create(getYear(target), getMonth(target), day);
|
|
69
|
+
},
|
|
70
|
+
addYears: (date, years) => {
|
|
71
|
+
const target = create(getYear(date) + years, getMonth(date), 1);
|
|
72
|
+
const day = Math.min(getDate(date), getDaysInMonth(target));
|
|
73
|
+
return create(getYear(target), getMonth(target), day);
|
|
74
|
+
},
|
|
75
|
+
startOfMonth: (date) => create(getYear(date), getMonth(date), 1),
|
|
76
|
+
endOfMonth: (date) => create(getYear(date), getMonth(date), getDaysInMonth(date)),
|
|
77
|
+
getDaysInMonth,
|
|
78
|
+
isSameDay: (a, b) => compare(a, b) === 0,
|
|
79
|
+
compare,
|
|
80
|
+
clamp: (date, min, max) => {
|
|
81
|
+
if (min && compare(date, min) < 0)
|
|
82
|
+
return new Date(min.getTime());
|
|
83
|
+
if (max && compare(date, max) > 0)
|
|
84
|
+
return new Date(max.getTime());
|
|
85
|
+
return date;
|
|
86
|
+
},
|
|
87
|
+
isValid,
|
|
88
|
+
parse: (value) => {
|
|
89
|
+
const s = value.trim();
|
|
90
|
+
if (!s)
|
|
91
|
+
return null;
|
|
92
|
+
const iso = /^(\d{4})-(\d{1,2})-(\d{1,2})$/.exec(s);
|
|
93
|
+
let year;
|
|
94
|
+
let month; // 1-based here
|
|
95
|
+
let day;
|
|
96
|
+
if (iso) {
|
|
97
|
+
year = +iso[1];
|
|
98
|
+
month = +iso[2];
|
|
99
|
+
day = +iso[3];
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const nums = s.match(/\d+/g);
|
|
103
|
+
if (!nums || nums.length < 3)
|
|
104
|
+
return null;
|
|
105
|
+
const order = numericFieldOrder();
|
|
106
|
+
year = 0;
|
|
107
|
+
month = 0;
|
|
108
|
+
day = 0;
|
|
109
|
+
order.forEach((field, i) => {
|
|
110
|
+
const n = parseInt(nums[i], 10);
|
|
111
|
+
if (field === 'year')
|
|
112
|
+
year = n;
|
|
113
|
+
else if (field === 'month')
|
|
114
|
+
month = n;
|
|
115
|
+
else
|
|
116
|
+
day = n;
|
|
117
|
+
});
|
|
118
|
+
if (year < 100)
|
|
119
|
+
year += 2000; // 2-digit year
|
|
120
|
+
}
|
|
121
|
+
const date = create(year, month - 1, day);
|
|
122
|
+
// Reject overflow (e.g. Feb 30 → Mar 2): the components must round-trip.
|
|
123
|
+
if (!isValid(date) || getMonth(date) !== month - 1 || getDate(date) !== day)
|
|
124
|
+
return null;
|
|
125
|
+
return date;
|
|
126
|
+
},
|
|
127
|
+
format: (date, opts) => new Intl.DateTimeFormat(locale, opts ?? { dateStyle: 'medium' }).format(date),
|
|
128
|
+
firstDayOfWeek: () => {
|
|
129
|
+
if (options.firstDayOfWeek !== undefined)
|
|
130
|
+
return options.firstDayOfWeek;
|
|
131
|
+
try {
|
|
132
|
+
const loc = new Intl.Locale(locale ?? 'en');
|
|
133
|
+
// `weekInfo` (getter) or `getWeekInfo()` per engine; firstDay is 1=Mon … 7=Sun.
|
|
134
|
+
const info = loc.weekInfo ??
|
|
135
|
+
loc.getWeekInfo?.();
|
|
136
|
+
if (info?.firstDay)
|
|
137
|
+
return info.firstDay % 7; // 7(Sun)→0, 1(Mon)→1 … 6(Sat)→6
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
/* engine without weekInfo */
|
|
141
|
+
}
|
|
142
|
+
return 0;
|
|
143
|
+
},
|
|
144
|
+
getDayOfWeekNames: (style) => {
|
|
145
|
+
const fmt = new Intl.DateTimeFormat(locale, { weekday: style, timeZone: 'UTC' });
|
|
146
|
+
return Array.from({ length: 7 }, (_, i) => fmt.format(new Date(REF_SUNDAY_UTC + i * 86400000)));
|
|
147
|
+
},
|
|
148
|
+
getMonthNames: (style) => {
|
|
149
|
+
const fmt = new Intl.DateTimeFormat(locale, { month: style, timeZone: 'UTC' });
|
|
150
|
+
return Array.from({ length: 12 }, (_, m) => fmt.format(new Date(Date.UTC(2017, m, 1))));
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
return adapter;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=date-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-adapter.js","sourceRoot":"","sources":["../../src/cdk/date-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** Which axis a drag / list runs along. */
|
|
2
|
+
export type DragOrientation = 'vertical' | 'horizontal';
|
|
3
|
+
/** A pointer offset. */
|
|
4
|
+
export interface DragPoint {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
}
|
|
8
|
+
/** A move event during a free-drag: the offset from the drag start + the live pointer position. */
|
|
9
|
+
export interface DragMove {
|
|
10
|
+
/** Offset from drag start along x (0 when `axis: 'y'`). */
|
|
11
|
+
dx: number;
|
|
12
|
+
/** Offset from drag start along y (0 when `axis: 'x'`). */
|
|
13
|
+
dy: number;
|
|
14
|
+
/** Live pointer clientX. */
|
|
15
|
+
x: number;
|
|
16
|
+
/** Live pointer clientY. */
|
|
17
|
+
y: number;
|
|
18
|
+
event: PointerEvent;
|
|
19
|
+
}
|
|
20
|
+
export interface DraggableOptions {
|
|
21
|
+
/** Restrict drag-start to this element (or a selector within `el`). Default: the whole element. */
|
|
22
|
+
handle?: HTMLElement | string;
|
|
23
|
+
/** Disable dragging (boolean or a reactive getter). */
|
|
24
|
+
disabled?: boolean | (() => boolean);
|
|
25
|
+
/** Constrain movement to one axis. Default `both`. */
|
|
26
|
+
axis?: 'x' | 'y' | 'both';
|
|
27
|
+
/** Pixels the pointer must move before a drag starts (a click-vs-drag guard). Default 0. */
|
|
28
|
+
threshold?: number;
|
|
29
|
+
onStart?: (event: PointerEvent) => void;
|
|
30
|
+
onMove?: (move: DragMove) => void;
|
|
31
|
+
onEnd?: (move: DragMove) => void;
|
|
32
|
+
}
|
|
33
|
+
export interface DraggableRef {
|
|
34
|
+
/** Whether a drag is currently in progress. Reactive. */
|
|
35
|
+
dragging(): boolean;
|
|
36
|
+
/** The current offset from the drag start (reset to 0 on release). Reactive. */
|
|
37
|
+
offset(): DragPoint;
|
|
38
|
+
/** Detach listeners (also runs on owner disposal). */
|
|
39
|
+
destroy(): void;
|
|
40
|
+
}
|
|
41
|
+
/** Make `el` free-draggable via pointer events. Headless — the consumer moves the element. */
|
|
42
|
+
export declare function draggable(el: HTMLElement, options?: DraggableOptions): DraggableRef;
|
|
43
|
+
/** The reorder result — apply with `moveItemInArray(data, previousIndex, currentIndex)`. */
|
|
44
|
+
export interface DropEvent {
|
|
45
|
+
previousIndex: number;
|
|
46
|
+
currentIndex: number;
|
|
47
|
+
}
|
|
48
|
+
export interface DropListOptions {
|
|
49
|
+
/** Selector for the draggable items (default: the container's direct element children). */
|
|
50
|
+
itemSelector?: string;
|
|
51
|
+
/** Selector (within an item) for a drag handle — only a pointerdown on it starts a drag. */
|
|
52
|
+
handle?: string;
|
|
53
|
+
/** List axis. Default `vertical`. */
|
|
54
|
+
orientation?: DragOrientation;
|
|
55
|
+
/** Disable reordering (boolean or a reactive getter). */
|
|
56
|
+
disabled?: boolean | (() => boolean);
|
|
57
|
+
/** Keyboard DnD (Space lift → Arrows → Space drop). Default true — set false when the host
|
|
58
|
+
* already binds Space/Arrows (e.g. a listbox/tree that selects on Space). */
|
|
59
|
+
keyboard?: boolean;
|
|
60
|
+
/** Called on a committed reorder. */
|
|
61
|
+
onDrop: (event: DropEvent) => void;
|
|
62
|
+
}
|
|
63
|
+
export interface DropListRef {
|
|
64
|
+
/** Whether a drag is in progress. Reactive. */
|
|
65
|
+
dragging(): boolean;
|
|
66
|
+
/** The index of the item being dragged, or -1. Reactive. */
|
|
67
|
+
activeIndex(): number;
|
|
68
|
+
/** The live insertion index (where the item would drop), or -1. Reactive. */
|
|
69
|
+
overIndex(): number;
|
|
70
|
+
/** Detach listeners (also runs on owner disposal). */
|
|
71
|
+
destroy(): void;
|
|
72
|
+
}
|
|
73
|
+
/** Move an item within an array (immutably) — the standard `onDrop` applier. */
|
|
74
|
+
export declare function moveItemInArray<T>(array: T[], from: number, to: number): T[];
|
|
75
|
+
/** Make `container`'s children a reorderable drop list (pointer + keyboard). Headless. */
|
|
76
|
+
export declare function dropList(container: HTMLElement, options: DropListOptions): DropListRef;
|
|
77
|
+
//# sourceMappingURL=drag-drop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-drop.d.ts","sourceRoot":"","sources":["../../src/cdk/drag-drop.ts"],"names":[],"mappings":"AAuBA,2CAA2C;AAC3C,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,YAAY,CAAC;AACxD,wBAAwB;AACxB,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAQD,mGAAmG;AACnG,MAAM,WAAW,QAAQ;IACvB,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,EAAE,EAAE,MAAM,CAAC;IACX,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,4BAA4B;IAC5B,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,mGAAmG;IACnG,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;IAC9B,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACrC,sDAAsD;IACtD,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,QAAQ,IAAI,OAAO,CAAC;IACpB,gFAAgF;IAChF,MAAM,IAAI,SAAS,CAAC;IACpB,sDAAsD;IACtD,OAAO,IAAI,IAAI,CAAC;CACjB;AAOD,8FAA8F;AAC9F,wBAAgB,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,OAAO,GAAE,gBAAqB,GAAG,YAAY,CAgFvF;AAID,4FAA4F;AAC5F,MAAM,WAAW,SAAS;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,2FAA2F;IAC3F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACrC;kFAC8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,QAAQ,IAAI,OAAO,CAAC;IACpB,4DAA4D;IAC5D,WAAW,IAAI,MAAM,CAAC;IACtB,6EAA6E;IAC7E,SAAS,IAAI,MAAM,CAAC;IACpB,sDAAsD;IACtD,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,CAO5E;AAED,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,GAAG,WAAW,CAwItF"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drag & Drop — the headless pointer-drag + reorder engine under reorderable Lists,
|
|
3
|
+
* Table rows, Tree nodes, and single-axis drag gestures (the Bottom Sheet's drag-to-
|
|
4
|
+
* dismiss). Zero styling: it tracks the live pointer drag and exposes state as signals +
|
|
5
|
+
* callbacks; the consumer paints the dragged element, the preview, and the placeholder.
|
|
6
|
+
*
|
|
7
|
+
* Two primitives:
|
|
8
|
+
* - **`draggable(el, opts)`** — a standalone free-drag: pointer (or a `handle`) drag →
|
|
9
|
+
* an `offset()` signal (constrainable to one `axis`) + `onStart`/`onMove`/`onEnd`. The
|
|
10
|
+
* single-gesture case (drag a sheet down, release past a threshold to dismiss).
|
|
11
|
+
* - **`dropList(container, opts)`** — a reorderable list: on a drag it computes the
|
|
12
|
+
* **insertion index** by counting the sibling midpoints the pointer has crossed, exposes
|
|
13
|
+
* `dragging()`/`activeIndex()`/`overIndex()` signals, and fires `onDrop({previousIndex,
|
|
14
|
+
* currentIndex})` on release. Full **keyboard DnD** (Space lift → Arrows move → Space
|
|
15
|
+
* drop, Escape cancel) for a11y. `moveItemInArray` applies the result.
|
|
16
|
+
*
|
|
17
|
+
* Built on native pointer events + pointer capture (no window listeners to leak). Zero-dep.
|
|
18
|
+
*
|
|
19
|
+
* const list = dropList(ul, { onDrop: ({ previousIndex, currentIndex }) =>
|
|
20
|
+
* rows.set(moveItemInArray(rows(), previousIndex, currentIndex)) });
|
|
21
|
+
*/
|
|
22
|
+
import { signal, onDispose } from '@weave-framework/runtime';
|
|
23
|
+
function disabledOf(d) {
|
|
24
|
+
return typeof d === 'function' ? d() : !!d;
|
|
25
|
+
}
|
|
26
|
+
function resolveHandle(el, handle) {
|
|
27
|
+
if (!handle)
|
|
28
|
+
return el;
|
|
29
|
+
return typeof handle === 'string' ? el.querySelector(handle) : handle;
|
|
30
|
+
}
|
|
31
|
+
/** Make `el` free-draggable via pointer events. Headless — the consumer moves the element. */
|
|
32
|
+
export function draggable(el, options = {}) {
|
|
33
|
+
const axis = options.axis ?? 'both';
|
|
34
|
+
const threshold = options.threshold ?? 0;
|
|
35
|
+
const dragging = signal(false);
|
|
36
|
+
const offset = signal({ x: 0, y: 0 });
|
|
37
|
+
let active = false;
|
|
38
|
+
let started = false;
|
|
39
|
+
let pointerId = -1;
|
|
40
|
+
let startX = 0;
|
|
41
|
+
let startY = 0;
|
|
42
|
+
const constrain = (dx, dy) => ({ x: axis === 'y' ? 0 : dx, y: axis === 'x' ? 0 : dy });
|
|
43
|
+
const onPointerDown = (event) => {
|
|
44
|
+
if (disabledOf(options.disabled) || event.button !== 0)
|
|
45
|
+
return;
|
|
46
|
+
const handle = resolveHandle(el, options.handle);
|
|
47
|
+
if (!handle || !handle.contains(event.target))
|
|
48
|
+
return;
|
|
49
|
+
active = true;
|
|
50
|
+
started = threshold === 0;
|
|
51
|
+
pointerId = event.pointerId;
|
|
52
|
+
startX = event.clientX;
|
|
53
|
+
startY = event.clientY;
|
|
54
|
+
try {
|
|
55
|
+
el.setPointerCapture(pointerId);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
/* synthetic test events have no active pointer id */
|
|
59
|
+
}
|
|
60
|
+
if (started) {
|
|
61
|
+
dragging.set(true);
|
|
62
|
+
options.onStart?.(event);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const onPointerMove = (event) => {
|
|
66
|
+
if (!active)
|
|
67
|
+
return;
|
|
68
|
+
const rawDx = event.clientX - startX;
|
|
69
|
+
const rawDy = event.clientY - startY;
|
|
70
|
+
if (!started) {
|
|
71
|
+
if (Math.hypot(rawDx, rawDy) < threshold)
|
|
72
|
+
return;
|
|
73
|
+
started = true;
|
|
74
|
+
dragging.set(true);
|
|
75
|
+
options.onStart?.(event);
|
|
76
|
+
}
|
|
77
|
+
const point = constrain(rawDx, rawDy);
|
|
78
|
+
offset.set(point);
|
|
79
|
+
options.onMove?.({ dx: point.x, dy: point.y, x: event.clientX, y: event.clientY, event });
|
|
80
|
+
};
|
|
81
|
+
const onPointerUp = (event) => {
|
|
82
|
+
if (!active)
|
|
83
|
+
return;
|
|
84
|
+
active = false;
|
|
85
|
+
try {
|
|
86
|
+
el.releasePointerCapture(pointerId);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* ignore */
|
|
90
|
+
}
|
|
91
|
+
if (started) {
|
|
92
|
+
const point = constrain(event.clientX - startX, event.clientY - startY);
|
|
93
|
+
options.onEnd?.({ dx: point.x, dy: point.y, x: event.clientX, y: event.clientY, event });
|
|
94
|
+
}
|
|
95
|
+
started = false;
|
|
96
|
+
dragging.set(false);
|
|
97
|
+
offset.set({ x: 0, y: 0 });
|
|
98
|
+
};
|
|
99
|
+
el.addEventListener('pointerdown', onPointerDown);
|
|
100
|
+
el.addEventListener('pointermove', onPointerMove);
|
|
101
|
+
el.addEventListener('pointerup', onPointerUp);
|
|
102
|
+
el.addEventListener('pointercancel', onPointerUp);
|
|
103
|
+
const destroy = () => {
|
|
104
|
+
el.removeEventListener('pointerdown', onPointerDown);
|
|
105
|
+
el.removeEventListener('pointermove', onPointerMove);
|
|
106
|
+
el.removeEventListener('pointerup', onPointerUp);
|
|
107
|
+
el.removeEventListener('pointercancel', onPointerUp);
|
|
108
|
+
};
|
|
109
|
+
onDispose(destroy);
|
|
110
|
+
return { dragging: () => dragging(), offset: () => offset(), destroy };
|
|
111
|
+
}
|
|
112
|
+
/** Move an item within an array (immutably) — the standard `onDrop` applier. */
|
|
113
|
+
export function moveItemInArray(array, from, to) {
|
|
114
|
+
const copy = array.slice();
|
|
115
|
+
if (from < 0 || from >= copy.length)
|
|
116
|
+
return copy;
|
|
117
|
+
const clampedTo = Math.max(0, Math.min(to, copy.length - 1));
|
|
118
|
+
const [item] = copy.splice(from, 1);
|
|
119
|
+
copy.splice(clampedTo, 0, item);
|
|
120
|
+
return copy;
|
|
121
|
+
}
|
|
122
|
+
/** Make `container`'s children a reorderable drop list (pointer + keyboard). Headless. */
|
|
123
|
+
export function dropList(container, options) {
|
|
124
|
+
const orientation = options.orientation ?? 'vertical';
|
|
125
|
+
const dragging = signal(false);
|
|
126
|
+
const activeIndex = signal(-1);
|
|
127
|
+
const overIndex = signal(-1);
|
|
128
|
+
let pointerId = -1;
|
|
129
|
+
let keyboardLifted = false;
|
|
130
|
+
const items = () => options.itemSelector
|
|
131
|
+
? Array.from(container.querySelectorAll(options.itemSelector))
|
|
132
|
+
: (Array.from(container.children).filter((c) => c instanceof HTMLElement));
|
|
133
|
+
const itemFrom = (target) => {
|
|
134
|
+
const els = items();
|
|
135
|
+
let node = target;
|
|
136
|
+
while (node && node !== container) {
|
|
137
|
+
if (node instanceof HTMLElement && els.includes(node))
|
|
138
|
+
return node;
|
|
139
|
+
node = node.parentNode;
|
|
140
|
+
}
|
|
141
|
+
return null;
|
|
142
|
+
};
|
|
143
|
+
const midpoint = (rect) => orientation === 'horizontal' ? rect.left + rect.width / 2 : rect.top + rect.height / 2;
|
|
144
|
+
// The insertion index = how many non-dragged items' midpoints the pointer has passed.
|
|
145
|
+
const computeOver = (from, coord) => {
|
|
146
|
+
const els = items();
|
|
147
|
+
let idx = 0;
|
|
148
|
+
for (let i = 0; i < els.length; i++) {
|
|
149
|
+
if (i === from)
|
|
150
|
+
continue;
|
|
151
|
+
if (coord > midpoint(els[i].getBoundingClientRect()))
|
|
152
|
+
idx++;
|
|
153
|
+
}
|
|
154
|
+
return idx;
|
|
155
|
+
};
|
|
156
|
+
const startDrag = (from) => {
|
|
157
|
+
activeIndex.set(from);
|
|
158
|
+
overIndex.set(from);
|
|
159
|
+
dragging.set(true);
|
|
160
|
+
};
|
|
161
|
+
const endDrag = (commit) => {
|
|
162
|
+
const from = activeIndex();
|
|
163
|
+
const to = overIndex();
|
|
164
|
+
dragging.set(false);
|
|
165
|
+
activeIndex.set(-1);
|
|
166
|
+
overIndex.set(-1);
|
|
167
|
+
keyboardLifted = false;
|
|
168
|
+
if (commit && from >= 0 && to >= 0 && from !== to)
|
|
169
|
+
options.onDrop({ previousIndex: from, currentIndex: to });
|
|
170
|
+
};
|
|
171
|
+
/* pointer */
|
|
172
|
+
const onPointerDown = (event) => {
|
|
173
|
+
if (disabledOf(options.disabled) || event.button !== 0)
|
|
174
|
+
return;
|
|
175
|
+
const item = itemFrom(event.target);
|
|
176
|
+
if (!item)
|
|
177
|
+
return;
|
|
178
|
+
if (options.handle && !event.target.closest(options.handle))
|
|
179
|
+
return;
|
|
180
|
+
const from = items().indexOf(item);
|
|
181
|
+
if (from < 0)
|
|
182
|
+
return;
|
|
183
|
+
pointerId = event.pointerId;
|
|
184
|
+
try {
|
|
185
|
+
container.setPointerCapture(pointerId);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
/* synthetic events */
|
|
189
|
+
}
|
|
190
|
+
startDrag(from);
|
|
191
|
+
event.preventDefault();
|
|
192
|
+
};
|
|
193
|
+
const onPointerMove = (event) => {
|
|
194
|
+
if (!dragging() || keyboardLifted)
|
|
195
|
+
return;
|
|
196
|
+
overIndex.set(computeOver(activeIndex(), orientation === 'horizontal' ? event.clientX : event.clientY));
|
|
197
|
+
};
|
|
198
|
+
const onPointerUp = () => {
|
|
199
|
+
if (!dragging() || keyboardLifted)
|
|
200
|
+
return;
|
|
201
|
+
try {
|
|
202
|
+
container.releasePointerCapture(pointerId);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
/* ignore */
|
|
206
|
+
}
|
|
207
|
+
endDrag(true);
|
|
208
|
+
};
|
|
209
|
+
/* keyboard DnD: Space lift/drop, Arrows move, Escape cancel */
|
|
210
|
+
const onKeyDown = (event) => {
|
|
211
|
+
if (disabledOf(options.disabled))
|
|
212
|
+
return;
|
|
213
|
+
if (event.key === ' ' || event.key === 'Spacebar') {
|
|
214
|
+
if (!keyboardLifted) {
|
|
215
|
+
const item = itemFrom(event.target);
|
|
216
|
+
const from = item ? items().indexOf(item) : -1;
|
|
217
|
+
if (from < 0)
|
|
218
|
+
return;
|
|
219
|
+
keyboardLifted = true;
|
|
220
|
+
startDrag(from);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
endDrag(true);
|
|
224
|
+
}
|
|
225
|
+
event.preventDefault();
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (!dragging() || !keyboardLifted)
|
|
229
|
+
return;
|
|
230
|
+
const vertical = orientation === 'vertical';
|
|
231
|
+
const n = items().length;
|
|
232
|
+
if ((vertical && event.key === 'ArrowDown') || (!vertical && event.key === 'ArrowRight')) {
|
|
233
|
+
overIndex.set(Math.min(n - 1, overIndex() + 1));
|
|
234
|
+
event.preventDefault();
|
|
235
|
+
}
|
|
236
|
+
else if ((vertical && event.key === 'ArrowUp') || (!vertical && event.key === 'ArrowLeft')) {
|
|
237
|
+
overIndex.set(Math.max(0, overIndex() - 1));
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
}
|
|
240
|
+
else if (event.key === 'Escape') {
|
|
241
|
+
endDrag(false);
|
|
242
|
+
event.preventDefault();
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
const useKeyboard = options.keyboard !== false;
|
|
246
|
+
container.addEventListener('pointerdown', onPointerDown);
|
|
247
|
+
container.addEventListener('pointermove', onPointerMove);
|
|
248
|
+
container.addEventListener('pointerup', onPointerUp);
|
|
249
|
+
container.addEventListener('pointercancel', onPointerUp);
|
|
250
|
+
if (useKeyboard)
|
|
251
|
+
container.addEventListener('keydown', onKeyDown);
|
|
252
|
+
const destroy = () => {
|
|
253
|
+
container.removeEventListener('pointerdown', onPointerDown);
|
|
254
|
+
container.removeEventListener('pointermove', onPointerMove);
|
|
255
|
+
container.removeEventListener('pointerup', onPointerUp);
|
|
256
|
+
container.removeEventListener('pointercancel', onPointerUp);
|
|
257
|
+
if (useKeyboard)
|
|
258
|
+
container.removeEventListener('keydown', onKeyDown);
|
|
259
|
+
};
|
|
260
|
+
onDispose(destroy);
|
|
261
|
+
return {
|
|
262
|
+
dragging: () => dragging(),
|
|
263
|
+
activeIndex: () => activeIndex(),
|
|
264
|
+
overIndex: () => overIndex(),
|
|
265
|
+
destroy,
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=drag-drop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drag-drop.js","sourceRoot":"","sources":["../../src/cdk/drag-drop.ts"],"names":[],"mappings":"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"}
|