@sectile/vue 0.18.2 → 0.19.0
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/README.md +53 -14
- package/dist/accordion.js +1 -1
- package/dist/accordion.js.map +1 -1
- package/dist/carousel.d.ts +20 -0
- package/dist/carousel.js +1 -1
- package/dist/carousel.js.map +1 -1
- package/dist/cascade-list.js +1 -1
- package/dist/cascade-list.js.map +1 -1
- package/dist/cascade-select.js +1 -1
- package/dist/cascade-select.js.map +1 -1
- package/dist/chart.js +1 -1
- package/dist/chart.js.map +1 -1
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.js.map +1 -1
- package/dist/checkbox-tree.d.ts +102 -0
- package/dist/checkbox-tree.js +2 -0
- package/dist/checkbox-tree.js.map +1 -0
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/color-picker.d.ts +24 -0
- package/dist/color-picker.js +1 -1
- package/dist/color-picker.js.map +1 -1
- package/dist/combobox.d.ts +47 -1
- package/dist/combobox.js +1 -1
- package/dist/combobox.js.map +1 -1
- package/dist/component-handle.d.ts +8 -0
- package/dist/component-handle.js +2 -0
- package/dist/component-handle.js.map +1 -0
- package/dist/context-menu.d.ts +1 -0
- package/dist/context-menu.js +2 -0
- package/dist/context-menu.js.map +1 -0
- package/dist/drag-drop.d.ts +23 -0
- package/dist/drag-drop.js +2 -0
- package/dist/drag-drop.js.map +1 -0
- package/dist/editable.d.ts +3 -0
- package/dist/editable.js +1 -1
- package/dist/editable.js.map +1 -1
- package/dist/form/context.d.ts +3 -0
- package/dist/form/context.js +1 -1
- package/dist/form/context.js.map +1 -1
- package/dist/form/contracts.d.ts +1 -0
- package/dist/form/control-inventory.d.ts +20 -0
- package/dist/form/control-inventory.js +1 -1
- package/dist/form/control-inventory.js.map +1 -1
- package/dist/form/control.d.ts +44 -1
- package/dist/form/control.js +1 -1
- package/dist/form/control.js.map +1 -1
- package/dist/form/field.d.ts +10 -0
- package/dist/form/field.js +1 -1
- package/dist/form/field.js.map +1 -1
- package/dist/form/file-input.d.ts +229 -0
- package/dist/form/file-input.js +2 -0
- package/dist/form/file-input.js.map +1 -0
- package/dist/form/file-upload/group.d.ts +28 -0
- package/dist/form/file-upload/group.js +2 -0
- package/dist/form/file-upload/group.js.map +1 -0
- package/dist/form/file-upload.d.ts +26 -0
- package/dist/form/file-upload.js +2 -0
- package/dist/form/file-upload.js.map +1 -0
- package/dist/form/root.js +1 -1
- package/dist/form/root.js.map +1 -1
- package/dist/form-boundary.d.ts +2 -0
- package/dist/form-boundary.js +2 -0
- package/dist/form-boundary.js.map +1 -0
- package/dist/fullscreen.d.ts +16 -0
- package/dist/fullscreen.js +2 -0
- package/dist/fullscreen.js.map +1 -0
- package/dist/host-provider.d.ts +99 -1
- package/dist/host-provider.js +1 -1
- package/dist/host-provider.js.map +1 -1
- package/dist/image.d.ts +24 -0
- package/dist/image.js +2 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +6 -5
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/input/native-field.d.ts +25 -6
- package/dist/input/native-field.js +1 -1
- package/dist/input/native-field.js.map +1 -1
- package/dist/input/native-range-field.d.ts +95 -0
- package/dist/input/native-range-field.js +2 -0
- package/dist/input/native-range-field.js.map +1 -0
- package/dist/internal/cascade-choice.js +1 -1
- package/dist/internal/cascade-choice.js.map +1 -1
- package/dist/internal/connection-lifetime.d.ts +10 -0
- package/dist/internal/connection-lifetime.js +2 -0
- package/dist/internal/connection-lifetime.js.map +1 -0
- package/dist/internal/controlled-state.js +1 -1
- package/dist/internal/controlled-state.js.map +1 -1
- package/dist/internal/popup-presentation.d.ts +32 -0
- package/dist/internal/popup-presentation.js +2 -0
- package/dist/internal/popup-presentation.js.map +1 -0
- package/dist/internal/portal-move.d.ts +11 -0
- package/dist/internal/portal-move.js +2 -0
- package/dist/internal/portal-move.js.map +1 -0
- package/dist/internal/scheduled-task.js +1 -1
- package/dist/internal/scheduled-task.js.map +1 -1
- package/dist/internal/tabs-context.d.ts +11 -0
- package/dist/internal/tabs-context.js +1 -1
- package/dist/internal/tabs-context.js.map +1 -1
- package/dist/internal/tree-parts.d.ts +142 -0
- package/dist/internal/tree-parts.js +2 -0
- package/dist/internal/tree-parts.js.map +1 -0
- package/dist/listbox.d.ts +11 -0
- package/dist/listbox.js +1 -1
- package/dist/listbox.js.map +1 -1
- package/dist/media-gesture.d.ts +20 -0
- package/dist/media-gesture.js +2 -0
- package/dist/media-gesture.js.map +1 -0
- package/dist/menu.d.ts +239 -0
- package/dist/menu.js +1 -1
- package/dist/menu.js.map +1 -1
- package/dist/meter-group.js +1 -1
- package/dist/meter-group.js.map +1 -1
- package/dist/multi-thumb-slider.js +1 -1
- package/dist/multi-thumb-slider.js.map +1 -1
- package/dist/overlay/dialog.d.ts +1 -0
- package/dist/overlay/dialog.js.map +1 -1
- package/dist/overlay/drawer.d.ts +33 -4
- package/dist/overlay/drawer.js +1 -1
- package/dist/overlay/drawer.js.map +1 -1
- package/dist/overlay/popover.d.ts +2 -1
- package/dist/overlay/popover.js.map +1 -1
- package/dist/overlay/popup.d.ts +46 -2
- package/dist/overlay/popup.js +1 -1
- package/dist/overlay/popup.js.map +1 -1
- package/dist/overlay/tooltip.d.ts +37 -3
- package/dist/overlay/tooltip.js +1 -1
- package/dist/overlay/tooltip.js.map +1 -1
- package/dist/pagination.js +1 -1
- package/dist/pagination.js.map +1 -1
- package/dist/pin-input.js +1 -1
- package/dist/pin-input.js.map +1 -1
- package/dist/presence/presence.d.ts +1 -1
- package/dist/presence/presence.js +1 -1
- package/dist/presence/presence.js.map +1 -1
- package/dist/primitive.d.ts +37 -3
- package/dist/primitive.js +1 -1
- package/dist/primitive.js.map +1 -1
- package/dist/quantity-field.js +1 -1
- package/dist/quantity-field.js.map +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.js.map +1 -1
- package/dist/rating.js +1 -1
- package/dist/rating.js.map +1 -1
- package/dist/reorder.d.ts +156 -77
- package/dist/reorder.js +1 -1
- package/dist/reorder.js.map +1 -1
- package/dist/select.d.ts +21 -0
- package/dist/select.js +1 -1
- package/dist/select.js.map +1 -1
- package/dist/slider.js +1 -1
- package/dist/slider.js.map +1 -1
- package/dist/spin-button.d.ts +19 -0
- package/dist/spin-button.js +1 -1
- package/dist/spin-button.js.map +1 -1
- package/dist/stepper.js +1 -1
- package/dist/stepper.js.map +1 -1
- package/dist/switch.js +1 -1
- package/dist/switch.js.map +1 -1
- package/dist/tabs.d.ts +2 -0
- package/dist/tabs.js +1 -1
- package/dist/tabs.js.map +1 -1
- package/dist/tabular/components.d.ts +5 -0
- package/dist/tabular/components.js.map +1 -1
- package/dist/tabular/controller.d.ts +1 -0
- package/dist/tabular/controller.js +1 -1
- package/dist/tabular/controller.js.map +1 -1
- package/dist/tabular/data-grid.d.ts +4 -4
- package/dist/tabular/data-grid.js +1 -1
- package/dist/tabular/data-grid.js.map +1 -1
- package/dist/tabular/data-table.d.ts +4 -4
- package/dist/tabular/data-table.js +1 -1
- package/dist/tabular/data-table.js.map +1 -1
- package/dist/tabular/data-tree-grid.d.ts +4 -4
- package/dist/tabular/data-tree-grid.js +1 -1
- package/dist/tabular/data-tree-grid.js.map +1 -1
- package/dist/tabular/parts.d.ts +11 -1
- package/dist/tabular/parts.js +1 -1
- package/dist/tabular/parts.js.map +1 -1
- package/dist/tabular/source.js +1 -1
- package/dist/tabular/source.js.map +1 -1
- package/dist/tags-input.d.ts +12 -1
- package/dist/tags-input.js +1 -1
- package/dist/tags-input.js.map +1 -1
- package/dist/temporal/calendar.d.ts +27 -123
- package/dist/temporal/calendar.js +1 -1
- package/dist/temporal/calendar.js.map +1 -1
- package/dist/temporal/capabilities/date-picker.js +1 -1
- package/dist/temporal/capabilities/date-picker.js.map +1 -1
- package/dist/temporal/capabilities/date-time-picker.js +1 -1
- package/dist/temporal/capabilities/date-time-picker.js.map +1 -1
- package/dist/temporal/capabilities/date-time-range-picker.js +1 -1
- package/dist/temporal/capabilities/date-time-range-picker.js.map +1 -1
- package/dist/temporal/capability.d.ts +13 -1
- package/dist/temporal/capability.js.map +1 -1
- package/dist/temporal/date-field.d.ts +1 -1
- package/dist/temporal/date-field.js +1 -1
- package/dist/temporal/date-field.js.map +1 -1
- package/dist/temporal/date-picker.d.ts +16 -14
- package/dist/temporal/date-picker.js +1 -1
- package/dist/temporal/date-picker.js.map +1 -1
- package/dist/temporal/date-range-field.d.ts +21 -1
- package/dist/temporal/date-range-field.js +1 -1
- package/dist/temporal/date-range-field.js.map +1 -1
- package/dist/temporal/date-range-picker.d.ts +16 -14
- package/dist/temporal/date-range-picker.js +1 -1
- package/dist/temporal/date-range-picker.js.map +1 -1
- package/dist/temporal/date-time-field.d.ts +4 -1
- package/dist/temporal/date-time-field.js +1 -1
- package/dist/temporal/date-time-field.js.map +1 -1
- package/dist/temporal/date-time-picker.d.ts +16 -14
- package/dist/temporal/date-time-picker.js +1 -1
- package/dist/temporal/date-time-picker.js.map +1 -1
- package/dist/temporal/date-time-range-field.d.ts +158 -0
- package/dist/temporal/date-time-range-field.js +2 -0
- package/dist/temporal/date-time-range-field.js.map +1 -0
- package/dist/temporal/date-time-range-picker.d.ts +16 -14
- package/dist/temporal/date-time-range-picker.js +1 -1
- package/dist/temporal/date-time-range-picker.js.map +1 -1
- package/dist/temporal/internal/time-presentation.d.ts +15 -0
- package/dist/temporal/internal/time-presentation.js +2 -0
- package/dist/temporal/internal/time-presentation.js.map +1 -0
- package/dist/temporal/month-picker.d.ts +9 -7
- package/dist/temporal/month-picker.js +1 -1
- package/dist/temporal/month-picker.js.map +1 -1
- package/dist/temporal/month-range-picker.d.ts +9 -7
- package/dist/temporal/month-range-picker.js +1 -1
- package/dist/temporal/month-range-picker.js.map +1 -1
- package/dist/temporal/picker.d.ts +24 -3
- package/dist/temporal/picker.js +1 -1
- package/dist/temporal/picker.js.map +1 -1
- package/dist/temporal/range-calendar.d.ts +125 -8
- package/dist/temporal/range-calendar.js +1 -1
- package/dist/temporal/range-calendar.js.map +1 -1
- package/dist/temporal/temporal-provider.d.ts +23 -0
- package/dist/temporal/temporal-provider.js +1 -1
- package/dist/temporal/temporal-provider.js.map +1 -1
- package/dist/temporal/time-field.d.ts +4 -1
- package/dist/temporal/time-field.js +1 -1
- package/dist/temporal/time-field.js.map +1 -1
- package/dist/temporal/time-picker.d.ts +112 -0
- package/dist/temporal/time-picker.js +2 -0
- package/dist/temporal/time-picker.js.map +1 -0
- package/dist/temporal/time-range-field.d.ts +33 -2
- package/dist/temporal/time-range-field.js +1 -1
- package/dist/temporal/time-range-field.js.map +1 -1
- package/dist/temporal/year-picker.d.ts +9 -7
- package/dist/temporal/year-picker.js +1 -1
- package/dist/temporal/year-picker.js.map +1 -1
- package/dist/temporal/year-range-picker.d.ts +9 -7
- package/dist/temporal/year-range-picker.js +1 -1
- package/dist/temporal/year-range-picker.js.map +1 -1
- package/dist/text.d.ts +43 -1
- package/dist/text.js +1 -1
- package/dist/text.js.map +1 -1
- package/dist/timer.d.ts +16 -5
- package/dist/timer.js +1 -1
- package/dist/timer.js.map +1 -1
- package/dist/toast.js +1 -1
- package/dist/toast.js.map +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/toggle-group.js.map +1 -1
- package/dist/toolbar.js +1 -1
- package/dist/toolbar.js.map +1 -1
- package/dist/transfer.d.ts +191 -0
- package/dist/transfer.js +2 -0
- package/dist/transfer.js.map +1 -0
- package/dist/tree-grid.d.ts +122 -0
- package/dist/tree-grid.js +1 -1
- package/dist/tree-grid.js.map +1 -1
- package/dist/tree-select.d.ts +186 -0
- package/dist/tree-select.js +2 -0
- package/dist/tree-select.js.map +1 -0
- package/dist/tree-view.js +1 -1
- package/dist/tree-view.js.map +1 -1
- package/dist/virtual/virtual-collection.d.ts +3 -0
- package/dist/virtual/virtual-collection.js +1 -1
- package/dist/virtual/virtual-collection.js.map +1 -1
- package/dist/virtual/virtual-core.d.ts +1 -0
- package/dist/virtual/virtual-core.js +1 -1
- package/dist/virtual/virtual-core.js.map +1 -1
- package/dist/virtual/virtual-grid.d.ts +12 -2
- package/dist/virtual/virtual-grid.js +1 -1
- package/dist/virtual/virtual-grid.js.map +1 -1
- package/dist/virtual/virtual-list.d.ts +12 -3
- package/dist/virtual/virtual-list.js +1 -1
- package/dist/virtual/virtual-list.js.map +1 -1
- package/dist/virtual/virtual-masonry.d.ts +12 -2
- package/dist/virtual/virtual-masonry.js +1 -1
- package/dist/virtual/virtual-masonry.js.map +1 -1
- package/dist/virtual/virtual-spatial.d.ts +12 -2
- package/dist/virtual/virtual-spatial.js +1 -1
- package/dist/virtual/virtual-spatial.js.map +1 -1
- package/dist/window-splitter.js +1 -1
- package/dist/window-splitter.js.map +1 -1
- package/package.json +86 -16
package/dist/reorder.d.ts
CHANGED
|
@@ -1,46 +1,92 @@
|
|
|
1
|
-
import { type PropType, type SlotsType, type VNodeChild } from 'vue';
|
|
2
|
-
import { type ReorderOrientation, type TreeReorderOptions } from '@sectile/dom/reorder';
|
|
1
|
+
import { type DefineSetupFnComponent, type EmitsToProps, type PropType, type PublicProps, type SlotsType, type VNodeChild } from 'vue';
|
|
2
|
+
import { type ReorderOrientation, type TreeReorderOptions, type TreeReorderDropTarget as NativeDropTarget } from '@sectile/dom/reorder';
|
|
3
3
|
import { type PrimitiveAs } from './primitive.js';
|
|
4
|
-
export type TreeReorderNode = TreeReorderOptions<
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
export type TreeReorderNode<ID extends string = string> = Omit<TreeReorderOptions<ID>['nodes'][number], 'parentID'> & {
|
|
5
|
+
readonly parentID: NoInfer<ID> | null;
|
|
6
|
+
};
|
|
7
|
+
export interface SequenceReorderRootProps<ID extends string = string> {
|
|
8
|
+
readonly items: readonly ID[];
|
|
9
|
+
readonly controlled?: boolean;
|
|
10
|
+
readonly handleOnly?: boolean;
|
|
11
|
+
readonly label?: string;
|
|
12
|
+
readonly roleDescription?: string;
|
|
7
13
|
readonly orientation?: ReorderOrientation;
|
|
8
14
|
readonly disabled?: boolean;
|
|
9
15
|
readonly as?: PrimitiveAs;
|
|
10
16
|
readonly asChild?: boolean;
|
|
11
17
|
}
|
|
12
|
-
export interface TreeReorderRootProps {
|
|
13
|
-
readonly nodes: readonly TreeReorderNode[];
|
|
18
|
+
export interface TreeReorderRootProps<ID extends string = string> {
|
|
19
|
+
readonly nodes: readonly TreeReorderNode<ID>[];
|
|
20
|
+
readonly controlled?: boolean;
|
|
21
|
+
readonly handleOnly?: boolean;
|
|
22
|
+
readonly label?: string;
|
|
23
|
+
readonly roleDescription?: string;
|
|
14
24
|
readonly orientation?: ReorderOrientation;
|
|
15
25
|
readonly disabled?: boolean;
|
|
26
|
+
readonly readonly?: boolean;
|
|
27
|
+
readonly layout?: 'tree' | 'columns';
|
|
28
|
+
readonly direction?: 'ltr' | 'rtl';
|
|
29
|
+
readonly policies?: TreeReorderOptions<NoInfer<ID>>['policies'];
|
|
16
30
|
readonly as?: PrimitiveAs;
|
|
17
31
|
readonly asChild?: boolean;
|
|
18
32
|
}
|
|
19
|
-
export interface ReorderRootSlotProps {
|
|
20
|
-
readonly items: readonly
|
|
33
|
+
export interface ReorderRootSlotProps<ID extends string = string> {
|
|
34
|
+
readonly items: readonly ID[];
|
|
21
35
|
readonly disabled: boolean;
|
|
22
36
|
}
|
|
23
|
-
export interface TreeReorderRootSlotProps {
|
|
24
|
-
readonly nodes: readonly TreeReorderNode[];
|
|
37
|
+
export interface TreeReorderRootSlotProps<ID extends string = string> {
|
|
38
|
+
readonly nodes: readonly TreeReorderNode<ID>[];
|
|
25
39
|
readonly disabled: boolean;
|
|
40
|
+
readonly readonly: boolean;
|
|
41
|
+
getChildren(parentID: NoInfer<ID> | null): readonly ID[];
|
|
42
|
+
getParent(id: NoInfer<ID>): ID | null;
|
|
43
|
+
canMove(id: NoInfer<ID>, target: TreeReorderTarget<NoInfer<ID>>): boolean;
|
|
26
44
|
}
|
|
27
|
-
export interface ReorderItemSlotProps {
|
|
28
|
-
readonly value:
|
|
45
|
+
export interface ReorderItemSlotProps<ID extends string = string> {
|
|
46
|
+
readonly value: ID;
|
|
29
47
|
readonly position: number;
|
|
48
|
+
readonly level: number;
|
|
49
|
+
readonly setSize: number;
|
|
30
50
|
}
|
|
31
|
-
export interface ReorderItemProps {
|
|
32
|
-
readonly value:
|
|
51
|
+
export interface ReorderItemProps<ID extends string = string> {
|
|
52
|
+
readonly value: ID;
|
|
33
53
|
readonly as?: PrimitiveAs;
|
|
34
54
|
readonly asChild?: boolean;
|
|
35
55
|
}
|
|
36
|
-
export
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
56
|
+
export type SequenceReorderRootEmits<ID extends string = string> = {
|
|
57
|
+
'update:items': [items: readonly NoInfer<ID>[]];
|
|
58
|
+
};
|
|
59
|
+
export type TreeReorderRootEmits<ID extends string = string> = {
|
|
60
|
+
'update:nodes': [nodes: readonly TreeReorderNode<NoInfer<ID>>[]];
|
|
61
|
+
};
|
|
62
|
+
export interface SequenceReorderRootSlots<ID extends string = string> {
|
|
63
|
+
default?: (state: ReorderRootSlotProps<ID>) => VNodeChild;
|
|
64
|
+
}
|
|
65
|
+
export interface TreeReorderRootSlots<ID extends string = string> {
|
|
66
|
+
default?: (state: TreeReorderRootSlotProps<ID>) => VNodeChild;
|
|
67
|
+
}
|
|
68
|
+
export type TreeReorderTarget<ID extends string = string> = NativeDropTarget<ID>;
|
|
69
|
+
export interface TreeReorderExpose<ID extends string = string> {
|
|
70
|
+
readonly element: HTMLElement | null;
|
|
71
|
+
move(id: NoInfer<ID>, target: TreeReorderTarget<NoInfer<ID>>): boolean;
|
|
72
|
+
canMove(id: NoInfer<ID>, target: TreeReorderTarget<NoInfer<ID>>): boolean;
|
|
73
|
+
focus(id?: NoInfer<ID>): void;
|
|
74
|
+
}
|
|
75
|
+
export interface TreeReorderDropTargetProps<ID extends string = string> extends NativeDropTarget<ID> {
|
|
76
|
+
readonly label?: string;
|
|
77
|
+
readonly as?: PrimitiveAs;
|
|
78
|
+
readonly asChild?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface ReorderHandleProps {
|
|
81
|
+
readonly label: string;
|
|
82
|
+
readonly disabled?: boolean;
|
|
83
|
+
readonly as?: PrimitiveAs;
|
|
84
|
+
readonly asChild?: boolean;
|
|
85
|
+
}
|
|
86
|
+
export declare const SequenceReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
87
|
+
value: {
|
|
88
|
+
type: StringConstructor;
|
|
89
|
+
required: true;
|
|
44
90
|
};
|
|
45
91
|
as: {
|
|
46
92
|
type: PropType<PrimitiveAs>;
|
|
@@ -50,21 +96,11 @@ export declare const SequenceReorderRoot: import("vue").DefineComponent<import("
|
|
|
50
96
|
type: BooleanConstructor;
|
|
51
97
|
default: boolean;
|
|
52
98
|
};
|
|
53
|
-
|
|
54
|
-
|
|
99
|
+
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
100
|
+
value: {
|
|
101
|
+
type: StringConstructor;
|
|
55
102
|
required: true;
|
|
56
103
|
};
|
|
57
|
-
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
58
|
-
'update:items': (_items: readonly string[]) => boolean;
|
|
59
|
-
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
60
|
-
orientation: {
|
|
61
|
-
type: PropType<ReorderOrientation>;
|
|
62
|
-
default: string;
|
|
63
|
-
};
|
|
64
|
-
disabled: {
|
|
65
|
-
type: BooleanConstructor;
|
|
66
|
-
default: boolean;
|
|
67
|
-
};
|
|
68
104
|
as: {
|
|
69
105
|
type: PropType<PrimitiveAs>;
|
|
70
106
|
default: string;
|
|
@@ -73,21 +109,23 @@ export declare const SequenceReorderRoot: import("vue").DefineComponent<import("
|
|
|
73
109
|
type: BooleanConstructor;
|
|
74
110
|
default: boolean;
|
|
75
111
|
};
|
|
76
|
-
|
|
77
|
-
type: PropType<readonly string[]>;
|
|
78
|
-
required: true;
|
|
79
|
-
};
|
|
80
|
-
}>> & Readonly<{
|
|
81
|
-
"onUpdate:items"?: (_items: readonly string[]) => any;
|
|
82
|
-
}>, {
|
|
83
|
-
orientation: ReorderOrientation;
|
|
84
|
-
disabled: boolean;
|
|
112
|
+
}>> & Readonly<{}>, {
|
|
85
113
|
as: PrimitiveAs;
|
|
86
114
|
asChild: boolean;
|
|
87
115
|
}, SlotsType<{
|
|
88
|
-
default: (props:
|
|
116
|
+
default: (props: ReorderItemSlotProps) => VNodeChild;
|
|
89
117
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
90
|
-
|
|
118
|
+
type SequenceProps<ID extends string> = SequenceReorderRootProps<ID> & PublicProps & EmitsToProps<SequenceReorderRootEmits<ID>>;
|
|
119
|
+
type SequenceInstance<ID extends string> = InstanceType<DefineSetupFnComponent<SequenceReorderRootProps<ID>, SequenceReorderRootEmits<ID>, SlotsType<SequenceReorderRootSlots<ID>>>>;
|
|
120
|
+
export declare const SequenceReorderRoot: new <const ID extends string = string>(props: SequenceProps<ID>) => Omit<SequenceInstance<ID>, '$props'> & {
|
|
121
|
+
readonly $props: SequenceProps<ID>;
|
|
122
|
+
};
|
|
123
|
+
type TreeProps<ID extends string> = TreeReorderRootProps<ID> & PublicProps & EmitsToProps<TreeReorderRootEmits<ID>>;
|
|
124
|
+
type TreeInstance<ID extends string> = InstanceType<DefineSetupFnComponent<TreeReorderRootProps<ID>, TreeReorderRootEmits<ID>, SlotsType<TreeReorderRootSlots<ID>>>> & TreeReorderExpose<ID>;
|
|
125
|
+
export declare const TreeReorderRoot: new <const ID extends string = string>(props: TreeProps<ID>) => Omit<TreeInstance<ID>, '$props'> & {
|
|
126
|
+
readonly $props: TreeProps<ID>;
|
|
127
|
+
};
|
|
128
|
+
export declare const TreeReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
91
129
|
value: {
|
|
92
130
|
type: StringConstructor;
|
|
93
131
|
required: true;
|
|
@@ -100,7 +138,7 @@ export declare const SequenceReorderItem: import("vue").DefineComponent<import("
|
|
|
100
138
|
type: BooleanConstructor;
|
|
101
139
|
default: boolean;
|
|
102
140
|
};
|
|
103
|
-
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string,
|
|
141
|
+
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
104
142
|
value: {
|
|
105
143
|
type: StringConstructor;
|
|
106
144
|
required: true;
|
|
@@ -119,15 +157,40 @@ export declare const SequenceReorderItem: import("vue").DefineComponent<import("
|
|
|
119
157
|
}, SlotsType<{
|
|
120
158
|
default: (props: ReorderItemSlotProps) => VNodeChild;
|
|
121
159
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
122
|
-
export declare const
|
|
123
|
-
|
|
124
|
-
type: PropType<
|
|
160
|
+
export declare const TreeReorderDropTarget: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
161
|
+
parentID: {
|
|
162
|
+
type: PropType<string | null>;
|
|
163
|
+
default: null;
|
|
164
|
+
};
|
|
165
|
+
beforeID: {
|
|
166
|
+
type: PropType<string | null>;
|
|
167
|
+
default: undefined;
|
|
168
|
+
};
|
|
169
|
+
label: {
|
|
170
|
+
type: StringConstructor;
|
|
171
|
+
default: undefined;
|
|
172
|
+
};
|
|
173
|
+
as: {
|
|
174
|
+
type: PropType<PrimitiveAs>;
|
|
125
175
|
default: string;
|
|
126
176
|
};
|
|
127
|
-
|
|
177
|
+
asChild: {
|
|
128
178
|
type: BooleanConstructor;
|
|
129
179
|
default: boolean;
|
|
130
180
|
};
|
|
181
|
+
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
182
|
+
parentID: {
|
|
183
|
+
type: PropType<string | null>;
|
|
184
|
+
default: null;
|
|
185
|
+
};
|
|
186
|
+
beforeID: {
|
|
187
|
+
type: PropType<string | null>;
|
|
188
|
+
default: undefined;
|
|
189
|
+
};
|
|
190
|
+
label: {
|
|
191
|
+
type: StringConstructor;
|
|
192
|
+
default: undefined;
|
|
193
|
+
};
|
|
131
194
|
as: {
|
|
132
195
|
type: PropType<PrimitiveAs>;
|
|
133
196
|
default: string;
|
|
@@ -136,17 +199,18 @@ export declare const TreeReorderRoot: import("vue").DefineComponent<import("vue"
|
|
|
136
199
|
type: BooleanConstructor;
|
|
137
200
|
default: boolean;
|
|
138
201
|
};
|
|
139
|
-
|
|
140
|
-
|
|
202
|
+
}>> & Readonly<{}>, {
|
|
203
|
+
parentID: string | null;
|
|
204
|
+
beforeID: string | null;
|
|
205
|
+
label: string;
|
|
206
|
+
as: PrimitiveAs;
|
|
207
|
+
asChild: boolean;
|
|
208
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
209
|
+
export declare const SequenceReorderHandle: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
210
|
+
label: {
|
|
211
|
+
type: StringConstructor;
|
|
141
212
|
required: true;
|
|
142
213
|
};
|
|
143
|
-
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
144
|
-
'update:nodes': (_nodes: readonly TreeReorderNode[]) => boolean;
|
|
145
|
-
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
146
|
-
orientation: {
|
|
147
|
-
type: PropType<ReorderOrientation>;
|
|
148
|
-
default: string;
|
|
149
|
-
};
|
|
150
214
|
disabled: {
|
|
151
215
|
type: BooleanConstructor;
|
|
152
216
|
default: boolean;
|
|
@@ -159,25 +223,37 @@ export declare const TreeReorderRoot: import("vue").DefineComponent<import("vue"
|
|
|
159
223
|
type: BooleanConstructor;
|
|
160
224
|
default: boolean;
|
|
161
225
|
};
|
|
162
|
-
|
|
163
|
-
|
|
226
|
+
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
227
|
+
label: {
|
|
228
|
+
type: StringConstructor;
|
|
164
229
|
required: true;
|
|
165
230
|
};
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
231
|
+
disabled: {
|
|
232
|
+
type: BooleanConstructor;
|
|
233
|
+
default: boolean;
|
|
234
|
+
};
|
|
235
|
+
as: {
|
|
236
|
+
type: PropType<PrimitiveAs>;
|
|
237
|
+
default: string;
|
|
238
|
+
};
|
|
239
|
+
asChild: {
|
|
240
|
+
type: BooleanConstructor;
|
|
241
|
+
default: boolean;
|
|
242
|
+
};
|
|
243
|
+
}>> & Readonly<{}>, {
|
|
170
244
|
disabled: boolean;
|
|
171
245
|
as: PrimitiveAs;
|
|
172
246
|
asChild: boolean;
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
export declare const TreeReorderItem: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
177
|
-
value: {
|
|
247
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
248
|
+
export declare const TreeReorderHandle: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
249
|
+
label: {
|
|
178
250
|
type: StringConstructor;
|
|
179
251
|
required: true;
|
|
180
252
|
};
|
|
253
|
+
disabled: {
|
|
254
|
+
type: BooleanConstructor;
|
|
255
|
+
default: boolean;
|
|
256
|
+
};
|
|
181
257
|
as: {
|
|
182
258
|
type: PropType<PrimitiveAs>;
|
|
183
259
|
default: string;
|
|
@@ -186,11 +262,15 @@ export declare const TreeReorderItem: import("vue").DefineComponent<import("vue"
|
|
|
186
262
|
type: BooleanConstructor;
|
|
187
263
|
default: boolean;
|
|
188
264
|
};
|
|
189
|
-
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string,
|
|
190
|
-
|
|
265
|
+
}>, () => VNodeChild, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
266
|
+
label: {
|
|
191
267
|
type: StringConstructor;
|
|
192
268
|
required: true;
|
|
193
269
|
};
|
|
270
|
+
disabled: {
|
|
271
|
+
type: BooleanConstructor;
|
|
272
|
+
default: boolean;
|
|
273
|
+
};
|
|
194
274
|
as: {
|
|
195
275
|
type: PropType<PrimitiveAs>;
|
|
196
276
|
default: string;
|
|
@@ -200,9 +280,8 @@ export declare const TreeReorderItem: import("vue").DefineComponent<import("vue"
|
|
|
200
280
|
default: boolean;
|
|
201
281
|
};
|
|
202
282
|
}>> & Readonly<{}>, {
|
|
283
|
+
disabled: boolean;
|
|
203
284
|
as: PrimitiveAs;
|
|
204
285
|
asChild: boolean;
|
|
205
|
-
},
|
|
206
|
-
default: (props: ReorderItemSlotProps) => VNodeChild;
|
|
207
|
-
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
286
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
208
287
|
export type { ReorderOrientation };
|
package/dist/reorder.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{createReorder}from"@sectile/dom/reorder";import{Primitive}from"./primitive.js";const sequenceKey=Symbol("SectileSequenceReorderRoot");const treeKey=Symbol("SectileTreeReorderRoot");const rootProps={orientation:{type:String,default:"vertical"},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}};const SequenceReorderRoot=defineComponent({name:"SectileSequenceReorderRoot",inheritAttrs:false,props:{...rootProps,items:{type:Array,required:true}},emits:{"update:items":_items=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(props.items);const registrations=new Map;const connect=()=>{connection.value?.disconnect();if(root.value===void 0)return;connection.value=createReorder({root:root.value,ids:props.items,orientation:props.orientation,disabled:props.disabled,onOrderChange:items2=>{current.value=items2;emit("update:items",items2)}});for(const[id,element]of registrations)connection.value.setItemAttributes(element,id);current.value=connection.value.getSnapshot().state.ids};const items=computed(()=>current.value);provide(sequenceKey,{items,register:(element,id)=>{registrations.set(id,element);connection.value?.setItemAttributes(element,id)}});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.orientation,()=>props.disabled],connect);watch(()=>props.items,items2=>{const result=connection.value?.syncOrder(items2);current.value=result?.ok===true?result.value.state.ids:items2});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element instanceof HTMLElement?element:void 0},"data-scope":"sequence-reorder","data-part":"root","data-orientation":props.orientation}),{default:()=>slots["default"]?.({items:items.value,disabled:props.disabled})})}});const SequenceReorderItem=defineComponent({name:"SectileSequenceReorderItem",inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useSequenceContext("SequenceReorderItem");const position=computed(()=>root.items.value.indexOf(props.value)+1);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{if(element instanceof HTMLElement)root.register(element,props.value)},"data-scope":"sequence-reorder","data-part":"item","data-value":props.value}),{default:()=>slots["default"]?.({value:props.value,position:position.value})})}});const TreeReorderRoot=defineComponent({name:"SectileTreeReorderRoot",inheritAttrs:false,props:{...rootProps,nodes:{type:Array,required:true}},emits:{"update:nodes":_nodes=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(props.nodes);const registrations=new Map;const connect=()=>{connection.value?.disconnect();if(root.value===void 0)return;connection.value=createReorder({root:root.value,nodes:props.nodes,orientation:props.orientation,disabled:props.disabled,onOrderChange:nodes2=>{current.value=nodes2;emit("update:nodes",nodes2)}});for(const[id,element]of registrations)connection.value.setItemAttributes(element,id);current.value=connection.value.getSnapshot().state.nodes};const nodes=computed(()=>current.value);provide(treeKey,{nodes,register:(element,id)=>{registrations.set(id,element);connection.value?.setItemAttributes(element,id)}});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.orientation,()=>props.disabled],connect);watch(()=>props.nodes,nodes2=>{const result=connection.value?.syncOrder(nodes2);current.value=result?.ok===true?result.value.state.nodes:nodes2});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element instanceof HTMLElement?element:void 0},role:"tree","data-scope":"tree-reorder","data-part":"root","data-orientation":props.orientation}),{default:()=>slots["default"]?.({nodes:nodes.value,disabled:props.disabled})})}});const TreeReorderItem=defineComponent({name:"SectileTreeReorderItem",inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useTreeContext("TreeReorderItem");const position=computed(()=>root.nodes.value.findIndex(node=>node.id===props.value)+1);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{if(element instanceof HTMLElement)root.register(element,props.value)},role:"treeitem","data-scope":"tree-reorder","data-part":"item","data-value":props.value}),{default:()=>slots["default"]?.({value:props.value,position:position.value})})}});function useSequenceContext(part){const context=inject(sequenceKey);if(context===void 0)throw new TypeError(`${part} must be used inside SequenceReorderRoot.`);return context}function useTreeContext(part){const context=inject(treeKey);if(context===void 0)throw new TypeError(`${part} must be used inside TreeReorderRoot.`);return context}export{SequenceReorderItem,SequenceReorderRoot,TreeReorderItem,TreeReorderRoot};
|
|
1
|
+
import{computed,defineComponent,h,inject,mergeProps,onBeforeUnmount,onMounted,provide,shallowRef,watch}from'vue';import{createReorder}from'@sectile/dom/reorder';import{createSequenceReorderState,createTreeReorderState,getSequenceReorderOrder,getTreeReorderHierarchy,applyTreeReorderEvent}from'@sectile/core/reorder';import{unwrap}from'@sectile/core/result';import{Primitive}from'./primitive.js';import{useHostActive,useHostDirection}from'./host-provider.js';import{useNextTickTask}from'./internal/scheduled-task.js';const emptyItems=/* @__PURE__ */Object.freeze([]);function treeContextPort(source){let port=source;const value={position:id=>port?.position(id)??0,level:id=>port?.level(id)??0,size:id=>port?.size(id)??0,disabled:()=>port?.disabled()??true,columns:()=>port?.columns()??false,getChildren:parent=>port?.getChildren(parent)??emptyItems,getParent:id=>port?.getParent(id)??null,register:(element,id)=>port?.register(element,id),unregister:(element,id)=>port?.unregister(element,id),registerTarget:(element,target)=>port?.registerTarget(element,target),unregisterTarget:element=>port?.unregisterTarget(element)};return{value,retire:()=>{port=undefined}}}function treeExposure(source){let port=source;const value={get element(){return port?.element??null},move:(id,target)=>port?.move(id,target)??false,canMove:(id,target)=>port?.canMove(id,target)??false,focus:id=>port?.focus(id)};return{value,retire:()=>{port=undefined}}}const sequenceKey=/* @__PURE__ */Symbol('SectileSequenceReorderRoot');const treeKey=/* @__PURE__ */Symbol('SectileTreeReorderRoot');const rootProps={handleOnly:{type:Boolean,default:false},label:{type:String,default:undefined},roleDescription:{type:String,default:undefined},controlled:{type:Boolean,default:false},orientation:{type:String,default:'vertical'},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}};const SequenceRootImplementation=/* @__PURE__ */defineComponent({name:'SectileSequenceReorderRoot',inheritAttrs:false,props:/* @__PURE__ */Object.assign({},rootProps,{items:{type:Array,required:true}}),emits:{'update:items':_items=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(createSequenceReorderState(props.items));const registrations=new Map;const connect=()=>{connection.value?.disconnect();if(root.value===undefined)return;connection.value=createReorder({root:root.value,ids:props.controlled?props.items:current.value.ids,controlled:props.controlled,handleOnly:props.handleOnly,...reorderLabelOptions(props,attrs),orientation:props.orientation,disabled:props.disabled,onOrderChange:items=>{if(!props.controlled)current.value=connection.value.getSnapshot().state;emit('update:items',items)}});for(const[id,element]of registrations)connection.value.setItemAttributes(element,id);current.value=connection.value.getSnapshot().state};const items=computed(()=>current.value.ids);provide(sequenceKey,{position:id=>(getSequenceReorderOrder(current.value).indexOf(id)??-1)+1,level:()=>1,size:()=>current.value.ids.length,disabled:()=>props.disabled,register:(element,id)=>{registrations.set(id,element);connection.value?.setItemAttributes(element,id)},unregister:(element,id)=>{if(registrations.get(id)===element)registrations.delete(id);connection.value?.removeItem(element)}});onMounted(connect);onBeforeUnmount(()=>connection.value?.disconnect());watch([()=>props.orientation,()=>props.disabled,()=>props.controlled,()=>props.handleOnly,()=>props.label,()=>props.roleDescription],connect);watch(()=>props.items,items=>{current.value=connection.value===undefined?createSequenceReorderState(items):unwrap(connection.value.syncOrder(items)).state});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=element instanceof HTMLElement?element:undefined},'data-scope':'sequence-reorder','data-part':'root',role:'list','aria-label':props.label??attrs['aria-label'],'aria-roledescription':props.roleDescription??attrs['aria-roledescription']??'sortable','data-orientation':props.orientation}),{default:()=>slots['default']?.({items:items.value,disabled:props.disabled})})}});export const SequenceReorderItem=/* @__PURE__ */defineComponent({name:'SectileSequenceReorderItem',inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useSequenceContext('SequenceReorderItem');const elementRef=useReorderItemRef(root,()=>props.value);const position=computed(()=>root.position(props.value));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef,'data-scope':'sequence-reorder','data-part':'item','data-value':props.value,role:'listitem','aria-posinset':position.value||undefined,'aria-setsize':root.size(props.value)}),{default:()=>slots['default']?.({value:props.value,position:position.value,level:1,setSize:root.size(props.value)})})}});export const SequenceReorderRoot=SequenceRootImplementation;const TreeRootImplementation=/* @__PURE__ */defineComponent({name:'SectileTreeReorderRoot',inheritAttrs:false,props:/* @__PURE__ */Object.assign({},rootProps,{nodes:{type:Array,required:true},readonly:{type:Boolean,default:false},layout:{type:String,default:'tree'},direction:{type:String,default:undefined},policies:{type:Object,default:undefined}}),emits:{'update:nodes':_nodes=>true},slots:Object,setup(props,{attrs,emit,slots,expose}){const root=shallowRef();const connection=shallowRef();const current=shallowRef(createTreeReorderState(props.nodes,props.layout==='columns'?{maxDepth:1}:undefined));const registrations=new Map;const targets=new Map;const active=useHostActive(),inheritedDirection=useHostDirection();const direction=computed(()=>props.direction??inheritedDirection.value);let alive=true,mounted=false,generation=0;let connectedElement;let pendingFocus;const repairFocus=useNextTickTask(()=>{const pending=pendingFocus;pendingFocus=undefined;if(!alive||!active.value||!pending||!root.value)return;const focused=root.value.ownerDocument.activeElement;if(focused!==pending.previous&&focused!==root.value.ownerDocument.body&&focused!==null)return;const replacement=registrations.get(pending.id);if(replacement&&root.value.contains(replacement)&&getTreeReorderHierarchy(current.value).has(pending.id))replacement.focus();else if(props.layout==='columns')root.value.focus()});const retire=()=>{generation+=1;const previous=connection.value;connection.value=undefined;connectedElement=undefined;previous?.disconnect()};const validTarget=target=>applyTreeReorderEvent(current.value,{type:'move-nodes',ids:[],parentID:target.parentID,beforeID:target.beforeID??null}).ok;const projectTargets=()=>{const native=connection.value;if(!native)return;for(const[element,target]of targets){if(!alive||connection.value!==native)break;if(validTarget(target))native.setDropTarget(element,target);else native.removeDropTarget(element)}};const connect=(force=false)=>{if(!force&&connection.value&&connectedElement===root.value&&active.value)return;retire();if(!alive||!mounted||!active.value||!root.value)return;const expected=generation;const isCurrent=()=>alive&&expected===generation;try{const native=createReorder({root:root.value,nodes:props.controlled?props.nodes:current.value.nodes,controlled:props.controlled,handleOnly:props.handleOnly,...reorderLabelOptions(props,attrs),orientation:props.orientation,disabled:props.disabled,readOnly:props.readonly,layout:props.layout,direction:direction.value,...props.policies===undefined?{}:{policies:props.policies},onOrderChange:nodes=>{if(!isCurrent())return;if(connection.value)current.value=connection.value.getSnapshot().state;emit('update:nodes',nodes)},onUpdate:()=>{if(isCurrent()&&connection.value)current.value=connection.value.getSnapshot().state}});if(!isCurrent()){native.disconnect();return}connection.value=native;connectedElement=root.value;current.value=native.getSnapshot().state;for(const[id,element]of registrations){if(!isCurrent())break;native.setItemAttributes(element,id)}if(isCurrent())projectTargets()}catch(error){try{retire()}catch{}throw error}};const nodes=computed(()=>current.value.nodes);const context=treeContextPort({position:id=>{const tree=getTreeReorderHierarchy(current.value);if(!tree.has(id))return 0;const parentID=tree.parentOf(id);const siblings=parentID===null?tree.roots:tree.childrenOf(parentID);return siblings.indexOf(id)+1},level:id=>(getTreeReorderHierarchy(current.value).depthOf(id)??-1)+1,size:id=>{const tree=getTreeReorderHierarchy(current.value);if(!tree.has(id))return 0;const parentID=tree.parentOf(id);return(parentID===null?tree.roots:tree.childrenOf(parentID)).size},disabled:()=>props.disabled||props.readonly,columns:()=>props.layout==='columns',getChildren:parentID=>{const tree=getTreeReorderHierarchy(current.value);return(parentID===null?tree.roots:tree.childrenOf(parentID))?.ids??emptyItems},getParent:id=>getTreeReorderHierarchy(current.value).parentOf(id)??null,register:(element,id)=>{if(!alive)return;registrations.set(id,element);connection.value?.setItemAttributes(element,id)},unregister:(element,id)=>{if(!alive)return;const focused=element.ownerDocument.activeElement;if(active.value&&focused!==null&&(focused===element||element.contains(focused))){pendingFocus={id,previous:element};repairFocus.schedule()}if(registrations.get(id)===element)registrations.delete(id);connection.value?.removeItem(element)},registerTarget:(element,target)=>{if(!alive)return;const position={parentID:target.parentID,...target.beforeID===undefined?{}:{beforeID:target.beforeID}};if(!alive)return;targets.set(element,position);if(validTarget(position))connection.value?.setDropTarget(element,position);else connection.value?.removeDropTarget(element)},unregisterTarget:element=>{if(!alive)return;targets.delete(element);connection.value?.removeDropTarget(element)}});provide(treeKey,context.value);const canReorder=()=>alive&&active.value&&!props.disabled&&!props.readonly;const exposure=treeExposure({get element(){return root.value??null},move:(id,target)=>canReorder()&&(connection.value?.handleEvent({type:'move-node',id,parentID:target.parentID,beforeID:target.beforeID??null})??false),canMove:(id,target)=>canReorder()&&(connection.value?.canMove(id,target)??false),focus:id=>{if(!alive||!active.value)return;const element=id===undefined?root.value:registrations.get(id);if(element&&root.value?.contains(element))element.focus()}});expose(exposure.value);onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{alive=false;pendingFocus=undefined;repairFocus.cancel();exposure.retire();context.retire();try{retire()}finally{registrations.clear();targets.clear();root.value=undefined}});watch(root,()=>connect(),{flush:'post'});watch(active,()=>{pendingFocus=undefined;repairFocus.cancel();connect()},{flush:'post'});watch([()=>props.orientation,()=>props.disabled,()=>props.readonly,()=>props.controlled,()=>props.handleOnly,()=>props.label,()=>props.roleDescription,()=>props.layout,()=>props.policies,direction],()=>connect(true),{flush:'post'});watch(()=>props.nodes,nodes=>{current.value=connection.value===undefined?createTreeReorderState(nodes,props.layout==='columns'?{maxDepth:1}:undefined):unwrap(connection.value.syncOrder(nodes)).state;projectTargets()});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>{root.value=typeof HTMLElement!=='undefined'&&element instanceof HTMLElement?element:undefined},role:props.layout==='columns'?'list':'tree',tabindex:props.layout==='columns'?-1:undefined,dir:direction.value,'aria-label':props.label??attrs['aria-label'],'aria-roledescription':props.roleDescription??attrs['aria-roledescription']??'sortable','data-scope':'tree-reorder','data-part':'root','data-orientation':props.orientation,'data-layout':props.layout,'data-readonly':props.readonly?'':undefined}),{default:()=>slots['default']?.({nodes:nodes.value,disabled:props.disabled,readonly:props.readonly,getChildren:context.value.getChildren,getParent:context.value.getParent,canMove:exposure.value.canMove})})}});export const TreeReorderRoot=TreeRootImplementation;export const TreeReorderItem=/* @__PURE__ */defineComponent({name:'SectileTreeReorderItem',inheritAttrs:false,props:{value:{type:String,required:true},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useTreeContext('TreeReorderItem');const elementRef=useReorderItemRef(root,()=>props.value);const position=computed(()=>root.position(props.value));const level=computed(()=>root.level(props.value));return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef,role:root.columns()?'listitem':'treeitem','data-scope':'tree-reorder','data-part':'item','data-value':props.value,'data-level':level.value,'aria-level':level.value||undefined,'aria-posinset':position.value||undefined,'aria-setsize':root.size(props.value)}),{default:()=>slots['default']?.({value:props.value,position:position.value,level:level.value,setSize:root.size(props.value)})})}});function reorderLabelOptions(props,attrs){const label=props.label??attrs['aria-label'];const roleDescription=props.roleDescription??attrs['aria-roledescription'];return{...typeof label==='string'?{label}:{},...typeof roleDescription==='string'?{roleDescription}:{}}}function useReorderItemRef(root,value){let current;let registeredID;const release=()=>{if(current!==undefined&®isteredID!==undefined)root.unregister(current,registeredID);current=undefined;registeredID=undefined};onBeforeUnmount(release);watch(value,()=>{if(current===undefined)return;root.unregister(current,registeredID);registeredID=value();root.register(current,registeredID)});return element=>{const next=element instanceof HTMLElement?element:undefined;if(next===current)return;release();current=next;if(current!==undefined){registeredID=value();root.register(current,registeredID)}}}function useSequenceContext(part){const context=inject(sequenceKey);if(context===undefined)throw new TypeError(`${part} must be used inside SequenceReorderRoot.`);return context}function useTreeContext(part){const context=inject(treeKey);if(context===undefined)throw new TypeError(`${part} must be used inside TreeReorderRoot.`);return context}export const TreeReorderDropTarget=/* @__PURE__ */defineComponent({name:'SectileTreeReorderDropTarget',inheritAttrs:false,props:{parentID:{type:String,default:null},beforeID:{type:String,default:undefined},label:{type:String,default:undefined},as:{type:[String,Object,Function],default:'div'},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const root=useTreeContext('TreeReorderDropTarget');let current;const release=()=>{const previous=current;current=undefined;if(previous)root.unregisterTarget(previous)};const register=()=>{if(current)root.registerTarget(current,{parentID:props.parentID,...props.beforeID===undefined?{}:{beforeID:props.beforeID}})};onBeforeUnmount(release);watch([()=>props.parentID,()=>props.beforeID],register,{flush:'post'});const elementRef=element=>{const next=typeof HTMLElement!=='undefined'&&element instanceof HTMLElement?element:undefined;if(next===current)return;release();current=next;register()};return()=>h(Primitive,mergeProps({role:root.columns()?'list':'group'},attrs,{as:props.as,asChild:props.asChild,elementRef,'aria-label':props.label??attrs['aria-label'],'data-scope':'tree-reorder','data-part':'drop-target'}),slots)}});function createReorderHandle(name,scope){return defineComponent({name,inheritAttrs:false,props:{label:{type:String,required:true},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:'button'},asChild:{type:Boolean,default:false}},setup(props,{attrs,slots}){const root=scope==='sequence'?useSequenceContext(name):useTreeContext(name);return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,type:props.as==='button'?'button':undefined,disabled:props.disabled||root.disabled(),'aria-label':props.label,'aria-keyshortcuts':'Alt+ArrowUp Alt+ArrowDown Alt+ArrowLeft Alt+ArrowRight Alt+Home Alt+End','data-sectile-reorder-handle':'','data-scope':scope==='sequence'?'sequence-reorder':'tree-reorder','data-part':'handle'}),slots)}})}export const SequenceReorderHandle=/* @__PURE__ */createReorderHandle('SectileSequenceReorderHandle','sequence');export const TreeReorderHandle=/* @__PURE__ */createReorderHandle('SectileTreeReorderHandle','tree');
|
|
2
2
|
//# sourceMappingURL=reorder.js.map
|
package/dist/reorder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/reorder.ts"],"mappings":"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","names":["items","nodes"],"file":"reorder.js"}
|
|
1
|
+
{"version":3,"file":"reorder.js","names":["computed","defineComponent","h","inject","mergeProps","onBeforeUnmount","onMounted","provide","shallowRef","watch","createReorder","createSequenceReorderState","createTreeReorderState","getSequenceReorderOrder","getTreeReorderHierarchy","applyTreeReorderEvent","unwrap","Primitive","useHostActive","useHostDirection","useNextTickTask","emptyItems","Object","freeze","treeContextPort","source","port","value","position","id","level","size","disabled","columns","getChildren","parent","getParent","register","element","unregister","registerTarget","target","unregisterTarget","retire","undefined","treeExposure","move","canMove","focus","sequenceKey","Symbol","treeKey","rootProps","handleOnly","type","Boolean","default","label","String","roleDescription","controlled","orientation","as","Function","asChild","SequenceRootImplementation","name","inheritAttrs","props","assign","items","Array","required","emits","_items","slots","setup","attrs","emit","root","connection","current","registrations","Map","connect","disconnect","ids","reorderLabelOptions","onOrderChange","getSnapshot","state","setItemAttributes","indexOf","length","set","get","delete","removeItem","syncOrder","elementRef","HTMLElement","role","SequenceReorderItem","useSequenceContext","useReorderItemRef","setSize","SequenceReorderRoot","TreeRootImplementation","nodes","readonly","layout","direction","policies","_nodes","expose","maxDepth","targets","active","inheritedDirection","alive","mounted","generation","connectedElement","pendingFocus","repairFocus","pending","focused","ownerDocument","activeElement","previous","body","replacement","contains","has","validTarget","parentID","beforeID","ok","projectTargets","native","setDropTarget","removeDropTarget","force","expected","isCurrent","readOnly","onUpdate","error","context","tree","parentOf","siblings","roots","childrenOf","depthOf","schedule","canReorder","exposure","handleEvent","cancel","clear","flush","tabindex","dir","TreeReorderRoot","TreeReorderItem","useTreeContext","registeredID","release","next","part","TypeError","TreeReorderDropTarget","createReorderHandle","scope","SequenceReorderHandle","TreeReorderHandle"],"sources":["../src/reorder.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/select.d.ts
CHANGED
|
@@ -16,6 +16,9 @@ export interface SelectRootProps extends Omit<PositionOptions, 'arrowPadding'> {
|
|
|
16
16
|
readonly name?: string;
|
|
17
17
|
readonly form?: string;
|
|
18
18
|
readonly required?: boolean;
|
|
19
|
+
readonly formOptions?: 'all' | 'selected';
|
|
20
|
+
/** Declared mounted IDs; undefined preserves complete-list ARIA publication. */
|
|
21
|
+
readonly renderedItems?: readonly string[] | undefined;
|
|
19
22
|
readonly textValue?: (id: string) => string;
|
|
20
23
|
readonly typeaheadTimeoutMs?: number;
|
|
21
24
|
readonly position?: boolean;
|
|
@@ -104,6 +107,14 @@ export declare const SelectRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
104
107
|
type: BooleanConstructor;
|
|
105
108
|
default: boolean;
|
|
106
109
|
};
|
|
110
|
+
formOptions: {
|
|
111
|
+
type: PropType<'all' | 'selected'>;
|
|
112
|
+
default: string;
|
|
113
|
+
};
|
|
114
|
+
renderedItems: {
|
|
115
|
+
type: PropType<readonly string[] | undefined>;
|
|
116
|
+
default: undefined;
|
|
117
|
+
};
|
|
107
118
|
textValue: {
|
|
108
119
|
type: PropType<SelectTextValueResolver>;
|
|
109
120
|
default: undefined;
|
|
@@ -221,6 +232,14 @@ export declare const SelectRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
221
232
|
type: BooleanConstructor;
|
|
222
233
|
default: boolean;
|
|
223
234
|
};
|
|
235
|
+
formOptions: {
|
|
236
|
+
type: PropType<'all' | 'selected'>;
|
|
237
|
+
default: string;
|
|
238
|
+
};
|
|
239
|
+
renderedItems: {
|
|
240
|
+
type: PropType<readonly string[] | undefined>;
|
|
241
|
+
default: undefined;
|
|
242
|
+
};
|
|
224
243
|
textValue: {
|
|
225
244
|
type: PropType<SelectTextValueResolver>;
|
|
226
245
|
default: undefined;
|
|
@@ -301,6 +320,8 @@ export declare const SelectRoot: import("vue").DefineComponent<import("vue").Ext
|
|
|
301
320
|
name: string;
|
|
302
321
|
form: string;
|
|
303
322
|
required: boolean;
|
|
323
|
+
formOptions: "all" | "selected";
|
|
324
|
+
renderedItems: readonly string[] | undefined;
|
|
304
325
|
textValue: (id: string) => string;
|
|
305
326
|
typeaheadTimeoutMs: number;
|
|
306
327
|
position: boolean;
|
package/dist/select.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Teleport,computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{stableIDElementToken}from"@sectile/dom/identity";import{createSelect}from"@sectile/dom/select";import{Primitive}from"./primitive.js";import{visuallyHiddenInputStyle}from"./input/native-input.js";import{hiddenSelectSubmissionCapabilities,useCompositeFormControl}from"./form/control.js";import{useHostId,useHostPortalTarget}from"./host-provider.js";import{usePresence}from"./presence/presence.js";import{conditionalPresenceProps,useConditionalPresenceRegistry}from"./presence/conditional-presence.js";import{reconcileCollectionState}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";const rootKey=Symbol("SectileSelectRoot");const itemKey=Symbol("SectileSelectItem");const partProps={as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}};const SelectRoot=defineComponent({name:"SectileSelectRoot",inheritAttrs:false,props:{items:{type:Array,required:true},modelValue:{type:String,default:void 0},defaultValue:{type:String,default:null},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:false},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},name:{type:String,default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:false},textValue:{type:Function,default:void 0},typeaheadTimeoutMs:{type:Number,default:700},position:{type:Boolean,default:true},side:{type:String,default:"bottom"},align:{type:String,default:"start"},sideOffset:{type:Number,default:8},collisionPadding:{type:[Number,Object],default:8},collisionBoundary:{type:[String,Object],default:void 0},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:"absolute"},tracking:{type:String,default:"events"},unmountOnExit:{type:Boolean,default:false},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_value=>true,"update:open":_value=>true,highlight:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const root=shallowRef();const trigger=shallowRef();const popup=shallowRef();const submissionElement=shallowRef(null);const participation=useCompositeFormControl({root:()=>root.value??null,focusTarget:()=>trigger.value??root.value??null,submissions:[{element:submissionElement,capabilities:hiddenSelectSubmissionCapabilities}]});const connection=shallowRef();const id=useHostId();const contentID=`sectile-select-${id}-content`;const itemID=value=>`${contentID}-item-${stableIDElementToken(value)}`;const localValue=shallowRef(props.modelValue!==void 0?props.modelValue:props.defaultValue);const localOpen=shallowRef(props.open??props.defaultOpen);const highlighted=shallowRef(localValue.value);const valueControlled=useControlledStateInvariant("SelectRoot","modelValue",()=>props.modelValue);const openControlled=useControlledStateInvariant("SelectRoot","open",()=>props.open);const unmountOnExit=computed(()=>props.unmountOnExit);const position=computed(()=>props.position);const strategy=computed(()=>props.strategy);const state=computed(()=>Object.freeze({value:props.modelValue!==void 0?props.modelValue:localValue.value,highlightedValue:highlighted.value,open:props.open??localOpen.value,disabled:props.disabled,readonly:props.readonly}));const selectedIDSet=computed(()=>{const value=props.modelValue!==void 0?props.modelValue:localValue.value;return value===null?new Set:new Set([value])});const indicatorPresence=useConditionalPresenceRegistry(selectedIDSet);const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot===void 0)return;localValue.value=snapshot.choice.selection.selected[0]??null;highlighted.value=snapshot.choice.cursor.current;localOpen.value=snapshot.open;refreshItems()};const refreshItems=()=>{if(popup.value===void 0||connection.value===void 0)return;popup.value.querySelectorAll("[data-sectile-select-id]").forEach(element=>{const id2=element.dataset["sectileSelectId"];if(id2!==void 0)connection.value?.setItemAttributes(element,id2,props.disabledItems.includes(id2))})};const connect=()=>{connection.value?.disconnect();if(root.value===void 0||trigger.value===void 0||popup.value===void 0)return;const requestedValue=valueControlled?props.modelValue:localValue.value;const reconciled=reconcileCollectionState(props.items,requestedValue===null?[]:[requestedValue],highlighted.value,props.disabledItems,"single",{preserveNullCurrent:true});const value=reconciled.selected[0]??null;localValue.value=value;highlighted.value=reconciled.current;if(valueControlled&&requestedValue!==value)emit("update:modelValue",value);connection.value=createSelect({root:root.value,trigger:trigger.value,popup:popup.value,items:props.items,disabledItems:props.disabledItems,textValue:props.textValue??(value2=>value2),typeaheadTimeoutMs:props.typeaheadTimeoutMs,position:props.position,side:props.side,align:props.align,sideOffset:props.sideOffset,collisionPadding:props.collisionPadding,...props.collisionBoundary===void 0?{}:{collisionBoundary:props.collisionBoundary},avoidCollisions:props.avoidCollisions,hideWhenDetached:props.hideWhenDetached,strategy:props.strategy,tracking:props.tracking,manageVisibility:false,...props.policies===void 0?{}:{policies:props.policies},...valueControlled?{value}:{defaultValue:value},defaultHighlightedValue:reconciled.current,...openControlled?{open:props.open}:{defaultOpen:localOpen.value},disabled:props.disabled,readOnly:props.readonly,...props.label===void 0?{}:{label:props.label},onValueChange:next=>{localValue.value=next;emit("update:modelValue",next)},onHighlightedValueChange:next=>{highlighted.value=next;emit("highlight",next)},onOpenChange:next=>{localOpen.value=next;emit("update:open",next)},onUpdate:refresh});refreshItems();refresh()};let mounted=false;let connectScheduled=false;const scheduleConnect=()=>{if(!mounted||connectScheduled||props.unmountOnExit&&!state.value.open)return;connectScheduled=true;void nextTick(()=>{connectScheduled=false;if(mounted)connect()})};provide(rootKey,{state,unmountOnExit,position,strategy,label:computed(()=>props.label),textValue:computed(()=>props.textValue??(id2=>id2)),contentID,itemID,disabledItems:computed(()=>new Set(props.disabledItems)),indicatorPresence,registerTrigger:element=>{trigger.value=element;if(element===void 0){connection.value?.disconnect();connection.value=void 0}else scheduleConnect()},registerPopup:element=>{popup.value=element;if(element===void 0){connection.value?.disconnect();connection.value=void 0}else scheduleConnect()},registerItem:(element,id2,disabled)=>connection.value?.setItemAttributes(element,id2,disabled),activateTrigger:event=>{if(event?.defaultPrevented===true||connection.value!==void 0||props.disabled||state.value.open)return;if(!openControlled)localOpen.value=true;emit("update:open",true)},refresh:()=>connection.value?.refresh()});onMounted(()=>{mounted=true;connect()});onBeforeUnmount(()=>{mounted=false;connection.value?.disconnect()});watch([()=>props.items,()=>props.disabledItems,()=>props.disabled,()=>props.readonly,()=>props.label,()=>props.textValue,()=>props.typeaheadTimeoutMs,()=>props.position,()=>props.side,()=>props.align,()=>props.sideOffset,()=>props.collisionPadding,()=>props.collisionBoundary,()=>props.avoidCollisions,()=>props.hideWhenDetached,()=>props.strategy,()=>props.tracking,()=>props.policies],connect);watch([()=>props.modelValue,()=>props.open],()=>{if(connection.value===void 0)return;const result=connection.value.syncControlledValues({...valueControlled?{value:props.modelValue}:{},...openControlled?{open:props.open}:{}});if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{const visual=h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{root.value=node instanceof HTMLElement?node:void 0;scheduleConnect()},"data-scope":"select","data-part":"root","data-state":state.value.open?"open":"closed"},participation.controlProps.value),{default:()=>slots["default"]?.(state.value)});if(!participation.participating&&props.name===void 0&&props.form===void 0&&!props.required)return visual;return[visual,h("select",{ref:submissionElement,name:props.name,form:props.form,required:props.required,disabled:props.disabled,value:state.value.value??"",tabindex:-1,"aria-hidden":"true",style:visuallyHiddenInputStyle},[h("option",{value:""}),...props.items.map(id2=>h("option",{value:id2,disabled:props.disabledItems.includes(id2)},props.textValue?.(id2)??id2))])]}}});const SelectTrigger=defineComponent({name:"SectileSelectTrigger",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"button"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectTrigger");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrigger(node instanceof HTMLButtonElement?node:void 0),onClick:root.activateTrigger,type:props.as==="button"?"button":void 0,disabled:root.state.value.disabled,"aria-haspopup":"listbox","aria-expanded":String(root.state.value.open),"aria-controls":root.contentID,"aria-label":root.label.value,"data-scope":"select","data-part":"trigger","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}});const SelectValue=defineComponent({name:"SectileSelectValue",inheritAttrs:false,props:{placeholder:{type:String,default:""},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectValue");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"value","data-placeholder":root.state.value.value===null?"":void 0}),{default:()=>slots["default"]?.(root.state.value)??(root.state.value.value===null?props.placeholder:root.textValue.value(root.state.value.value))})}});const SelectContent=defineComponent({name:"SectileSelectContent",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectContent");const element=shallowRef();const open=computed(()=>root.state.value.open);const present=usePresence(open,element);watch(present,async()=>{await nextTick();root.refresh()},{flush:"post"});return()=>{if(root.unmountOnExit.value&&!present.value)return null;const exiting=!root.state.value.open&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:void 0;element.value=content;root.registerPopup(content)},id:root.contentID,role:"listbox",hidden:!present.value,"aria-label":root.label.value,...exiting?{inert:true,"aria-hidden":"true"}:{},style:root.position.value?{position:root.strategy.value,visibility:element.value===void 0?"hidden":void 0}:void 0,"aria-activedescendant":root.state.value.highlightedValue===null?void 0:root.itemID(root.state.value.highlightedValue),"data-scope":"select","data-part":"content","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}}});const SelectItem=defineComponent({name:"SectileSelectItem",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItem");const state=computed(()=>({value:props.value,selected:root.state.value.value===props.value,highlighted:root.state.value.highlightedValue===props.value,disabled:root.state.value.disabled||props.disabled||root.disabledItems.value.has(props.value)}));provide(itemKey,{state});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{if(node instanceof HTMLElement)root.registerItem(node,props.value,state.value.disabled)},id:root.itemID(props.value),role:"option","aria-selected":String(state.value.selected),"aria-disabled":state.value.disabled?"true":void 0,"data-sectile-select-id":props.value,"data-scope":"select","data-part":"item","data-selected":state.value.selected?"":void 0,"data-highlighted":state.value.highlighted?"":void 0}),{default:()=>slots["default"]?.(state.value)})}});const SelectItemIndicator=defineComponent({name:"SectileSelectItemIndicator",inheritAttrs:false,props:{...partProps,...conditionalPresenceProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItemIndicator");const item=useItem("SelectItemIndicator");return()=>{const state=item.state.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>root.indicatorPresence.register(state.value,element),hidden:!root.indicatorPresence.isPresent(state.value,state.selected,props.forcePresent),"aria-hidden":"true","data-scope":"select","data-part":"item-indicator","data-state":state.selected?"checked":"unchecked"}),{default:()=>slots["default"]?.(state)})}}});const SelectViewport=defineComponent({name:"SectileSelectViewport",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"div"}},setup(props,{attrs,slots}){useRoot("SelectViewport");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"viewport"}),slots)}});const SelectItemText=defineComponent({name:"SectileSelectItemText",inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){useItem("SelectItemText");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"item-text"}),slots)}});const SelectPortal=defineComponent({name:"SectileSelectPortal",inheritAttrs:false,props:{to:{type:[String,Object],default:void 0},disabled:{type:Boolean,default:false},defer:{type:Boolean,default:false}},setup(props,{slots}){useRoot("SelectPortal");const portalTarget=useHostPortalTarget();return()=>h(Teleport,{to:props.to??portalTarget.value??"body",disabled:props.disabled,defer:props.defer},slots["default"]?.())}});function useRoot(part){const root=inject(rootKey);if(root===void 0)throw new TypeError(`${part} must be used inside SelectRoot.`);return root}function useItem(part){const item=inject(itemKey);if(item===void 0)throw new TypeError(`${part} must be used inside SelectItem.`);return item}export{SelectContent,SelectItem,SelectItemIndicator,SelectItemText,SelectPortal,SelectRoot,SelectTrigger,SelectValue,SelectViewport};
|
|
1
|
+
import{computed,defineComponent,h,inject,mergeProps,nextTick,onBeforeUnmount,onMounted,provide,shallowRef,watch}from"vue";import{stableIDElementToken}from"@sectile/dom/identity";import{createSelect}from"@sectile/dom/select";import{Primitive}from"./primitive.js";import{useNextTickTask}from"./internal/scheduled-task.js";import{visuallyHiddenInputStyle}from"./input/native-input.js";import{compositeControlCapabilities,hiddenSelectSubmissionCapabilities,useFormControl,useFormFieldDefaults,useFormMetadataPresence,useFormSubmissionProps,useFormControlFlags}from"./form/control.js";import{HostPortal,provideHostLayerParent,useHostId}from"./host-provider.js";import{usePresence}from"./presence/presence.js";import{conditionalPresenceProps,useConditionalPresenceRegistry}from"./presence/conditional-presence.js";import{reconcileCollectionState}from"./internal/collection.js";import{useControlledStateInvariant}from"./internal/controlled-state.js";import{usePopupPresentation}from"./internal/popup-presentation.js";const rootKey=Symbol("SectileSelectRoot");const itemKey=Symbol("SectileSelectItem");const partProps={as:{type:[String,Object,Function],default:"span"},asChild:{type:Boolean,default:false}};const SelectRoot=defineComponent({__sectileFormLabelMode:"for",name:"SectileSelectRoot",inheritAttrs:false,props:{items:{type:Array,required:true},modelValue:{type:String,default:void 0},defaultValue:{type:String,default:null},open:{type:Boolean,default:void 0},defaultOpen:{type:Boolean,default:false},disabledItems:{type:Array,default:()=>[]},disabled:{type:Boolean,default:false},readonly:{type:Boolean,default:false},label:{type:String,default:void 0},name:{type:String,default:void 0},form:{type:String,default:void 0},required:{type:Boolean,default:false},formOptions:{type:String,default:"all"},renderedItems:{type:Array,default:void 0},textValue:{type:Function,default:void 0},typeaheadTimeoutMs:{type:Number,default:700},position:{type:Boolean,default:true},side:{type:String,default:"bottom"},align:{type:String,default:"start"},sideOffset:{type:Number,default:8},collisionPadding:{type:[Number,Object],default:8},collisionBoundary:{type:[String,Object],default:void 0},avoidCollisions:{type:Boolean,default:true},hideWhenDetached:{type:Boolean,default:false},strategy:{type:String,default:"absolute"},tracking:{type:String,default:"events"},unmountOnExit:{type:Boolean,default:false},policies:{type:Object,default:void 0},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},emits:{"update:modelValue":_value=>true,"update:open":_value=>true,highlight:_value=>true},slots:Object,setup(props,{attrs,emit,slots}){const flags=useFormControlFlags(props);const initialValue=props.defaultValue,initialOpen=props.defaultOpen;let resetPending=false;const resetRevision=shallowRef(0);const root=shallowRef();const trigger=shallowRef();const popup=shallowRef();const submissionElement=shallowRef(null);const fieldDefaults=useFormFieldDefaults();const explicitSubmission=useFormMetadataPresence();const submission={element:submissionElement,capabilities:hiddenSelectSubmissionCapabilities,get explicit(){return explicitSubmission.value}};const submissionProps=useFormSubmissionProps(submission,props);const connection=shallowRef();const id=useHostId();const contentID=`sectile-select-${id}-content`;const itemID=value=>`${contentID}-item-${stableIDElementToken(value)}`;const localValue=shallowRef(props.modelValue!==void 0?props.modelValue:props.defaultValue);const localOpen=shallowRef(props.open??props.defaultOpen);const highlighted=shallowRef(localValue.value);const valueControlled=useControlledStateInvariant("SelectRoot","modelValue",()=>props.modelValue);const openControlled=useControlledStateInvariant("SelectRoot","open",()=>props.open);const unmountOnExit=computed(()=>props.unmountOnExit);const position=computed(()=>props.position);const strategy=computed(()=>props.strategy);const state=computed(()=>Object.freeze({value:props.modelValue!==void 0?props.modelValue:localValue.value,highlightedValue:highlighted.value,open:props.open??localOpen.value,disabled:flags.value.disabled,readonly:flags.value.readonly}));const disabledIDs=computed(()=>new Set(props.disabledItems));const renderedItems=computed(()=>{const ids=props.renderedItems;if(ids===void 0)return void 0;if(!Array.isArray(ids)||ids.some(id2=>typeof id2!=="string"))throw new TypeError("SelectRoot renderedItems requires an array of IDs.");return ids});const selectedFormItems=computed(()=>{const value=props.modelValue!==void 0?props.modelValue:localValue.value;return value===null||!props.items.includes(value)?[]:[value]});const lifecycle=usePopupPresentation({connection,open:computed(()=>state.value.open),connect:()=>connect(),refresh:()=>refresh(),trackLayerHost:true});const{active,presentation,availability}=lifecycle;const formControl={element:()=>root.value??null,semanticControl:()=>trigger.value??null,labelMode:"for",capabilities:compositeControlCapabilities,focusTarget:()=>active.value?trigger.value??root.value??null:null,validationTarget:()=>active.value?root.value??null:null,submissions:[submission],reset:()=>{if(resetPending)return;resetPending=true;queueMicrotask(()=>{resetPending=false;if(!mounted)return;disconnect();const requested=valueControlled?props.modelValue:initialValue;const reconciled=reconcileCollectionState(props.items,requested===null?[]:[requested],requested,props.disabledItems,"single",{preserveNullCurrent:true});localValue.value=reconciled.selected[0]??null;localOpen.value=openControlled?props.open:initialOpen;highlighted.value=reconciled.current;resetRevision.value++;lifecycle.reconnect()})}};const selectedIDSet=computed(()=>{const value=props.modelValue!==void 0?props.modelValue:localValue.value;return value===null?new Set:new Set([value])});const indicatorPresence=useConditionalPresenceRegistry(selectedIDSet);const refresh=()=>{const snapshot=connection.value?.getSnapshot().state;if(snapshot===void 0)return;localValue.value=snapshot.choice.selection.selected[0]??null;highlighted.value=snapshot.choice.cursor.current;localOpen.value=snapshot.open;lifecycle.update();refreshItems()};const refreshItems=()=>{if(popup.value===void 0||connection.value===void 0)return;popup.value.querySelectorAll("[data-sectile-select-id]").forEach(element=>{const id2=element.dataset["sectileSelectId"];if(id2!==void 0)connection.value?.setItemAttributes(element,id2,disabledIDs.value.has(id2))})};const disconnect=()=>{lifecycle.release();try{connection.value?.disconnect()}finally{connection.value=void 0}};const connect=()=>{disconnect();if(root.value===void 0||trigger.value===void 0||popup.value===void 0)return;const requestedValue=valueControlled?props.modelValue:localValue.value;const reconciled=reconcileCollectionState(props.items,requestedValue===null?[]:[requestedValue],highlighted.value,props.disabledItems,"single",{preserveNullCurrent:true});const value=reconciled.selected[0]??null;localValue.value=value;highlighted.value=reconciled.current;if(valueControlled&&requestedValue!==value)emit("update:modelValue",value);connection.value=createSelect({...lifecycle.layerHost.value===void 0?{}:{layerHost:lifecycle.layerHost.value},root:root.value,trigger:trigger.value,popup:popup.value,items:props.items,disabledItems:props.disabledItems,textValue:props.textValue??(value2=>value2),typeaheadTimeoutMs:props.typeaheadTimeoutMs,position:props.position,side:props.side,align:props.align,sideOffset:props.sideOffset,collisionPadding:props.collisionPadding,...props.collisionBoundary===void 0?{}:{collisionBoundary:props.collisionBoundary},avoidCollisions:props.avoidCollisions,hideWhenDetached:props.hideWhenDetached,strategy:props.strategy,tracking:props.tracking,manageVisibility:false,...props.policies===void 0?{}:{policies:props.policies},...valueControlled?{value}:{defaultValue:value},defaultHighlightedValue:reconciled.current,...openControlled?{open:props.open}:{defaultOpen:localOpen.value},disabled:flags.value.disabled,readOnly:flags.value.readonly,...props.label===void 0?{}:{label:props.label},onValueChange:next=>{localValue.value=next;emit("update:modelValue",next)},onHighlightedValueChange:next=>{highlighted.value=next;emit("highlight",next)},onOpenChange:next=>{if(!openControlled)localOpen.value=next;emit("update:open",next)},onUpdate:refresh});refreshItems();refresh()};let mounted=false;let connectScheduled=false;const scheduleConnect=()=>{if(!mounted||!availability.value||connectScheduled||props.unmountOnExit&&!state.value.open)return;connectScheduled=true;void nextTick(()=>{connectScheduled=false;if(mounted&&availability.value)lifecycle.reconnect()})};provide(rootKey,{formControl,resetRevision,state,active,presentation,unmountOnExit,position,strategy,label:computed(()=>props.label),textValue:computed(()=>props.textValue??(id2=>id2)),contentID,itemID,disabledItems:disabledIDs,isItemRendered:id2=>renderedItems.value?.includes(id2)??true,indicatorPresence,registerPresence:lifecycle.registerPresence,registerTrigger:element=>{if(trigger.value===element)return;trigger.value=element;if(!availability.value){lifecycle.invalidate();return}if(element===void 0){disconnect()}else scheduleConnect()},registerPopup:element=>{if(popup.value===element)return;popup.value=element;if(!availability.value){lifecycle.invalidate();return}if(element===void 0){disconnect()}else scheduleConnect()},registerItem:(element,id2,disabled)=>connection.value?.setItemAttributes(element,id2,disabled),activateTrigger:event=>{if(!lifecycle.mayOpen()||event?.defaultPrevented===true||connection.value!==void 0||flags.value.disabled||state.value.open)return;if(!openControlled)localOpen.value=true;emit("update:open",true)},refresh:()=>connection.value?.refresh()});onMounted(()=>{mounted=true;lifecycle.reconnect()});onBeforeUnmount(()=>{mounted=false;disconnect()});watch([()=>props.items,()=>props.disabledItems,()=>flags.value.disabled,()=>flags.value.readonly,()=>props.label,()=>props.textValue,()=>props.typeaheadTimeoutMs,()=>props.position,()=>props.side,()=>props.align,()=>props.sideOffset,()=>props.collisionPadding,()=>props.collisionBoundary,()=>props.avoidCollisions,()=>props.hideWhenDetached,()=>props.strategy,()=>props.tracking,()=>props.policies],lifecycle.reconnect);watch([()=>props.modelValue,()=>props.open],()=>{lifecycle.prepareModelUpdate();if(connection.value===void 0)return;const result=connection.value.syncControlledValues({...valueControlled?{value:props.modelValue}:{},...openControlled?{open:props.open}:{}});if(!result.ok)throw new TypeError(result.error.message);refresh()});return()=>{if(props.formOptions!=="all"&&props.formOptions!=="selected")throw new TypeError("SelectRoot formOptions requires all or selected.");const visual=h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const element=node instanceof HTMLElement?node:void 0;if(root.value===element)return;root.value=element;if(!availability.value)lifecycle.invalidate();else scheduleConnect()},"data-scope":"select","data-part":"root","data-state":state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(state.value)});if(fieldDefaults===void 0&&props.name===void 0&&props.form===void 0&&!props.required)return visual;return[visual,h("select",{ref:submissionElement,...submissionProps.value,value:state.value.value??"",tabindex:-1,"aria-hidden":"true",style:visuallyHiddenInputStyle},[h("option",{value:"",selected:state.value.value===null}),...(props.formOptions==="selected"?selectedFormItems.value:props.items).map(id2=>h("option",{value:id2,selected:state.value.value===id2,disabled:disabledIDs.value.has(id2)},props.textValue?.(id2)??id2))])]}}});const SelectTrigger=defineComponent({name:"SectileSelectTrigger",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"button"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectTrigger");const participation=useFormControl(root.formControl);let baselinePending=false;const valueTask=useNextTickTask(()=>{participation.refreshValue?.(baselinePending?"baseline":"value");baselinePending=false});watch([()=>root.state.value.value,root.resetRevision],(value,previous)=>{baselinePending||=value[1]!==previous[1];valueTask.schedule()},{flush:"post"});return()=>h(Primitive,mergeProps(participation.controlProps.value,attrs,{as:props.as,asChild:props.asChild,elementRef:node=>root.registerTrigger(node instanceof HTMLButtonElement?node:void 0),onClick:root.activateTrigger,type:props.as==="button"?"button":void 0,disabled:root.state.value.disabled,"aria-haspopup":"listbox","aria-expanded":String(root.state.value.open),"aria-controls":root.contentID,"aria-label":root.label.value,"data-scope":"select","data-part":"trigger","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}});const SelectValue=defineComponent({name:"SectileSelectValue",inheritAttrs:false,props:{placeholder:{type:String,default:""},...partProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectValue");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"value","data-placeholder":root.state.value.value===null?"":void 0}),{default:()=>slots["default"]?.(root.state.value)??(root.state.value.value===null?props.placeholder:root.textValue.value(root.state.value.value))})}});const SelectContent=defineComponent({name:"SectileSelectContent",inheritAttrs:false,props:{as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectContent");const element=shallowRef();const open=computed(()=>root.state.value.open);provideHostLayerParent({element,open,presentation:root.presentation,active:root.active});const present=usePresence(open,element,void 0,root.active);onBeforeUnmount(root.registerPresence(present));watch(present,async()=>{await nextTick();root.refresh()},{flush:"post"});return()=>{if(root.unmountOnExit.value&&!present.value)return null;const exiting=!root.state.value.open&&present.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{const content=node instanceof HTMLElement?node:void 0;element.value=content;root.registerPopup(content)},id:root.contentID,role:"listbox",hidden:!root.active.value||!present.value,"aria-label":root.label.value,...exiting||!root.active.value?{inert:true,"aria-hidden":"true"}:{},style:root.position.value?{position:root.strategy.value,visibility:element.value===void 0?"hidden":void 0}:void 0,"aria-activedescendant":root.state.value.highlightedValue===null||!root.isItemRendered(root.state.value.highlightedValue)?void 0:root.itemID(root.state.value.highlightedValue),"data-scope":"select","data-part":"content","data-state":root.state.value.open?"open":"closed"}),{default:()=>slots["default"]?.(root.state.value)})}}});const SelectItem=defineComponent({name:"SectileSelectItem",inheritAttrs:false,props:{value:{type:String,required:true},disabled:{type:Boolean,default:false},as:{type:[String,Object,Function],default:"div"},asChild:{type:Boolean,default:false}},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItem");const state=computed(()=>({value:props.value,selected:root.state.value.value===props.value,highlighted:root.state.value.highlightedValue===props.value,disabled:root.state.value.disabled||props.disabled||root.disabledItems.value.has(props.value)}));provide(itemKey,{state});return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:node=>{if(node instanceof HTMLElement)root.registerItem(node,props.value,state.value.disabled)},id:root.itemID(props.value),role:"option","aria-selected":String(state.value.selected),"aria-disabled":state.value.disabled?"true":void 0,"data-sectile-select-id":props.value,"data-scope":"select","data-part":"item","data-selected":state.value.selected?"":void 0,"data-highlighted":state.value.highlighted?"":void 0}),{default:()=>slots["default"]?.(state.value)})}});const SelectItemIndicator=defineComponent({name:"SectileSelectItemIndicator",inheritAttrs:false,props:{...partProps,...conditionalPresenceProps},slots:Object,setup(props,{attrs,slots}){const root=useRoot("SelectItemIndicator");const item=useItem("SelectItemIndicator");return()=>{const state=item.state.value;return h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,elementRef:element=>root.indicatorPresence.register(state.value,element),hidden:!root.indicatorPresence.isPresent(state.value,state.selected,props.forcePresent),"aria-hidden":"true","data-scope":"select","data-part":"item-indicator","data-state":state.selected?"checked":"unchecked"}),{default:()=>slots["default"]?.(state)})}}});const SelectViewport=defineComponent({name:"SectileSelectViewport",inheritAttrs:false,props:{...partProps,as:{...partProps.as,default:"div"}},setup(props,{attrs,slots}){useRoot("SelectViewport");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"viewport"}),slots)}});const SelectItemText=defineComponent({name:"SectileSelectItemText",inheritAttrs:false,props:partProps,setup(props,{attrs,slots}){useItem("SelectItemText");return()=>h(Primitive,mergeProps(attrs,{as:props.as,asChild:props.asChild,"data-scope":"select","data-part":"item-text"}),slots)}});const SelectPortal=defineComponent({name:"SectileSelectPortal",inheritAttrs:false,props:{to:{type:[String,Object],default:void 0},disabled:{type:Boolean,default:false},defer:{type:Boolean,default:false}},setup(props,{slots}){useRoot("SelectPortal");return()=>h(HostPortal,props,slots)}});function useRoot(part){const root=inject(rootKey);if(root===void 0)throw new TypeError(`${part} must be used inside SelectRoot.`);return root}function useItem(part){const item=inject(itemKey);if(item===void 0)throw new TypeError(`${part} must be used inside SelectItem.`);return item}export{SelectContent,SelectItem,SelectItemIndicator,SelectItemText,SelectPortal,SelectRoot,SelectTrigger,SelectValue,SelectViewport};
|
|
2
2
|
//# sourceMappingURL=select.js.map
|