@bccampus/ui-components 0.4.1 → 0.4.2

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.
Files changed (29) hide show
  1. package/dist/AbstractFocusProvider-CxvlcEki.js +29 -0
  2. package/dist/AbstractSelectionProvider-BtaROstC.js +30 -0
  3. package/dist/CompositeDataItem-DuHOHCWy.js +158 -0
  4. package/dist/ListboxFocusProvider.d.ts +149 -0
  5. package/dist/ListboxFocusProvider.js +53 -0
  6. package/dist/MultipleSelectionProvider.d.ts +141 -0
  7. package/dist/MultipleSelectionProvider.js +19 -0
  8. package/dist/SingleSelectionProvider.d.ts +141 -0
  9. package/dist/SingleSelectionProvider.js +23 -0
  10. package/dist/composite-component-DSUbd1XS.js +122 -0
  11. package/dist/composite.d.ts +108 -51
  12. package/dist/composite.js +57 -447
  13. package/dist/listbox.d.ts +171 -0
  14. package/dist/listbox.js +76 -0
  15. package/package.json +5 -1
  16. package/src/components/ui/composite/CompositeData.ts +22 -114
  17. package/src/components/ui/composite/FocusProvider/AbstractFocusProvider.ts +83 -0
  18. package/src/components/ui/composite/FocusProvider/ListboxFocusProvider.ts +74 -0
  19. package/src/components/ui/composite/SelectionProvider/AbstractSelectionProvider.ts +45 -0
  20. package/src/components/ui/composite/SelectionProvider/MultipleSelectionProvider.ts +28 -0
  21. package/src/components/ui/composite/SelectionProvider/SingleSelectionProvider.ts +37 -0
  22. package/src/components/ui/composite/composite-component-item.tsx +12 -10
  23. package/src/components/ui/composite/composite-component.tsx +39 -68
  24. package/src/components/ui/composite/index.ts +4 -1
  25. package/src/components/ui/composite/listbox.tsx +61 -0
  26. package/src/components/ui/composite/types.ts +51 -30
  27. package/src/hooks/use-keyboard-event.ts +31 -42
  28. package/vite.config.ts +4 -0
  29. package/src/components/ui/composite/composite-data-context.tsx +0 -31
@@ -0,0 +1,29 @@
1
+ import { a as o, C as i } from "./CompositeDataItem-DuHOHCWy.js";
2
+ class f {
3
+ data;
4
+ dataOptions;
5
+ firstFocusableItem;
6
+ lastFocusableItem;
7
+ focusedItem = o(null);
8
+ init(t, s) {
9
+ this.data = t, this.dataOptions = s;
10
+ const [e, a] = this.setFocusPointers();
11
+ this.firstFocusableItem = e, this.firstFocusableItem && (this.firstFocusableItem.state.setKey("focused", !0), this.focusedItem.set(this.firstFocusableItem)), this.lastFocusableItem = a;
12
+ }
13
+ isFocusable(t) {
14
+ return !t.state.get().disabled;
15
+ }
16
+ focus(t) {
17
+ const s = t instanceof i ? t : this.data.lookup.get(t);
18
+ if (s) {
19
+ if (this.focusedItem.get()) {
20
+ if (s.key === this.focusedItem.get()?.key) return;
21
+ this.focusedItem.get().state.setKey("focused", !1);
22
+ }
23
+ s.state.setKey("focused", !0), this.focusedItem.set(s);
24
+ }
25
+ }
26
+ }
27
+ export {
28
+ f as A
29
+ };
@@ -0,0 +1,30 @@
1
+ import { a, C as n } from "./CompositeDataItem-DuHOHCWy.js";
2
+ function c(o, e) {
3
+ const t = new Set(o);
4
+ for (const s of e)
5
+ t.add(s);
6
+ return t;
7
+ }
8
+ function d(o, e) {
9
+ const t = new Set(o);
10
+ for (const s of e)
11
+ t.delete(s);
12
+ return t;
13
+ }
14
+ class f {
15
+ data;
16
+ dataOptions;
17
+ selectedKeys = a(/* @__PURE__ */ new Set());
18
+ init(e, t) {
19
+ this.data = e, this.dataOptions = t, this.dataOptions.selectedKeys.forEach((s) => this.select(s));
20
+ }
21
+ toggleSelect(e, t = !1) {
22
+ const s = e ? e instanceof n ? e : this.data.lookup.get(e) : this.data.focusProvider.focusedItem.get();
23
+ s && (s.state.get().selected ? this.deselect(s, t) : this.select(s, t));
24
+ }
25
+ }
26
+ export {
27
+ f as A,
28
+ d,
29
+ c as u
30
+ };
@@ -0,0 +1,158 @@
1
+ let p = Symbol("clean"), n = [], r = 0;
2
+ const c = 4;
3
+ let y = (a) => {
4
+ let t = [], e = {
5
+ get() {
6
+ return e.lc || e.listen(() => {
7
+ })(), e.value;
8
+ },
9
+ lc: 0,
10
+ listen(s) {
11
+ return e.lc = t.push(s), () => {
12
+ for (let i = r + c; i < n.length; )
13
+ n[i] === s ? n.splice(i, c) : i += c;
14
+ let l = t.indexOf(s);
15
+ ~l && (t.splice(l, 1), --e.lc || e.off());
16
+ };
17
+ },
18
+ notify(s, l) {
19
+ let i = !n.length;
20
+ for (let h of t)
21
+ n.push(h, e.value, s, l);
22
+ if (i) {
23
+ for (r = 0; r < n.length; r += c)
24
+ n[r](
25
+ n[r + 1],
26
+ n[r + 2],
27
+ n[r + 3]
28
+ );
29
+ n.length = 0;
30
+ }
31
+ },
32
+ /* It will be called on last listener unsubscribing.
33
+ We will redefine it in onMount and onStop. */
34
+ off() {
35
+ },
36
+ set(s) {
37
+ let l = e.value;
38
+ l !== s && (e.value = s, e.notify(l));
39
+ },
40
+ subscribe(s) {
41
+ let l = e.listen(s);
42
+ return s(e.value), l;
43
+ },
44
+ value: a
45
+ };
46
+ return process.env.NODE_ENV !== "production" && (e[p] = () => {
47
+ t = [], e.lc = 0, e.off();
48
+ }), e;
49
+ }, o = (a = {}) => {
50
+ let t = y(a);
51
+ return t.setKey = function(e, s) {
52
+ let l = t.value;
53
+ typeof s > "u" && e in t.value ? (t.value = { ...t.value }, delete t.value[e], t.notify(l, e)) : t.value[e] !== s && (t.value = {
54
+ ...t.value,
55
+ [e]: s
56
+ }, t.notify(l, e));
57
+ }, t;
58
+ };
59
+ const m = (a, t) => {
60
+ const e = { ...a };
61
+ return t.forEach((s) => {
62
+ const l = s.split("."), i = l.pop();
63
+ if (i) {
64
+ const h = l.reduce((d, f) => d && f in d ? d[f] : void 0, e);
65
+ h && i in h && delete h[i];
66
+ }
67
+ }), e;
68
+ };
69
+ class u {
70
+ #e;
71
+ parent = null;
72
+ children;
73
+ level;
74
+ data;
75
+ state;
76
+ pointers;
77
+ childrenProp;
78
+ constructor(t, e, s) {
79
+ this.#e = e.getItemKey(t), this.data = o(m(t, [e.itemChildrenProp])), this.state = o({
80
+ focused: !1,
81
+ selected: !1,
82
+ disabled: !1,
83
+ ...e.initialState
84
+ }), this.pointers = {}, this.parent = s, this.level = s ? s.level + 1 : 0, this.childrenProp = e.itemChildrenProp;
85
+ const l = e.getItemChildren(t);
86
+ l && (this.children = l.map((i) => new u(i, e, this)));
87
+ }
88
+ get key() {
89
+ return this.#e;
90
+ }
91
+ *[Symbol.iterator]() {
92
+ if (this.key !== "ALL" && (yield this), this.children)
93
+ for (const t of this.children)
94
+ for (const e of t) yield e;
95
+ }
96
+ toJSON() {
97
+ const t = { ...this.data.get() };
98
+ if (this.children) {
99
+ t[this.childrenProp] = [];
100
+ for (const e of this.children)
101
+ t[this.childrenProp].push(e.toJSON());
102
+ }
103
+ return t;
104
+ }
105
+ descendants() {
106
+ if (!this.children) return [];
107
+ const t = [];
108
+ return this.children.forEach(
109
+ (e) => {
110
+ t.push(e);
111
+ const s = e.descendants();
112
+ s && t.push(...s);
113
+ }
114
+ ), t;
115
+ }
116
+ ancestors() {
117
+ const t = [];
118
+ let e = this.parent;
119
+ for (; e; )
120
+ t.push(e), e = e.parent;
121
+ return t;
122
+ }
123
+ toggleSelect(t = !1) {
124
+ this.state.get().selected ? this.deselect(t) : this.select(t);
125
+ }
126
+ select(t = !1) {
127
+ if (this.state.setKey("selected", !0), t && this.children) {
128
+ const e = this.children.map((s) => s.select(!0)).flat();
129
+ return [this.key, ...e];
130
+ }
131
+ return [this.key];
132
+ }
133
+ deselect(t = !1) {
134
+ if (this.state.setKey("selected", !1), t && this.children) {
135
+ const e = this.children.map((s) => s.deselect(!0)).flat();
136
+ return [this.key, ...e];
137
+ }
138
+ return [this.key];
139
+ }
140
+ disable(t = !1) {
141
+ if (this.state.setKey("disabled", !0), t && this.children) {
142
+ const e = this.children.map((s) => s.disable(!0)).flat();
143
+ return [this.key, ...e];
144
+ }
145
+ return [this.key];
146
+ }
147
+ enable(t = !1) {
148
+ if (this.state.setKey("disabled", !1), t && this.children) {
149
+ const e = this.children.map((s) => s.enable(!0)).flat();
150
+ return [this.key, ...e];
151
+ }
152
+ return [this.key];
153
+ }
154
+ }
155
+ export {
156
+ u as C,
157
+ y as a
158
+ };
@@ -0,0 +1,149 @@
1
+ import { PreinitializedMapStore } from 'nanostores';
2
+ import { PreinitializedWritableAtom } from 'nanostores';
3
+
4
+ declare abstract class AbstractFocusProvider<T extends object> implements FocusProvider {
5
+ protected data: CompositeData<T>;
6
+ protected dataOptions: CompositeDataOptions<T>;
7
+ firstFocusableItem: CompositeDataItem<T> | null;
8
+ lastFocusableItem: CompositeDataItem<T> | null;
9
+ focusedItem: PreinitializedWritableAtom<CompositeDataItem<T> | null>;
10
+ init(data: CompositeData<T>, dataOptions: CompositeDataOptions<T>): void;
11
+ isFocusable(itemAtom: CompositeDataItem<T>): boolean;
12
+ focus(itemKey: CompositeItemKey): void;
13
+ focus(item: CompositeDataItem<T>): void;
14
+ abstract setFocusPointers(): readonly [first: CompositeDataItem<T> | null, last: CompositeDataItem<T> | null];
15
+ abstract focusUp(): void;
16
+ abstract focusDown(): void;
17
+ abstract focusLeft(): void;
18
+ abstract focusRight(): void;
19
+ abstract focusPageUp(): void;
20
+ abstract focesPageDown(): void;
21
+ abstract focusToFirst(): void;
22
+ abstract focusToLast(): void;
23
+ abstract focusToFirstInRow(): void;
24
+ abstract focusToLastInRow(): void;
25
+ abstract focusToTypeAheadMatch(): void;
26
+ }
27
+
28
+ declare abstract class AbstractSelectionProvider<T extends object> {
29
+ protected data: CompositeData<T>;
30
+ protected dataOptions: CompositeDataOptions<T>;
31
+ selectedKeys: PreinitializedWritableAtom<Set<CompositeItemKey>>;
32
+ init(data: CompositeData<T>, dataOptions: CompositeDataOptions<T>): void;
33
+ abstract select(itemKey?: CompositeItemKey, recursive?: boolean): void;
34
+ abstract select(item: CompositeDataItem<T>, recursive?: boolean): void;
35
+ abstract select(item?: CompositeDataItem<T> | CompositeItemKey, recursive?: boolean): void;
36
+ abstract deselect(itemKey?: CompositeItemKey, recursive?: boolean): void;
37
+ abstract deselect(item: CompositeDataItem<T>, recursive?: boolean): void;
38
+ abstract deselect(item?: CompositeDataItem<T> | CompositeItemKey, recursive?: boolean): void;
39
+ toggleSelect(itemKey?: CompositeItemKey, recursive?: boolean): void;
40
+ toggleSelect(item: CompositeDataItem<T>, recursive?: boolean): void;
41
+ }
42
+
43
+ declare class CompositeData<T extends object> implements Iterable<CompositeDataItem<T>> {
44
+ #private;
45
+ lookup: Map<CompositeItemKey, CompositeDataItem<T>>;
46
+ focusProvider: AbstractFocusProvider<T>;
47
+ selectionProvider?: AbstractSelectionProvider<T>;
48
+ disabledKeys: Set<CompositeItemKey>;
49
+ root: CompositeDataItem<T>;
50
+ constructor(items: T[], providerOptions: CompositeProviderOptions<T>, options?: CompositeOptions);
51
+ [Symbol.iterator](): Iterator<CompositeDataItem<T>>;
52
+ toJSON(): T[];
53
+ init(items: T[]): void;
54
+ item(key: CompositeItemKey): CompositeDataItem<T> | undefined;
55
+ descendants(itemKey: CompositeItemKey): CompositeDataItem<T>[] | undefined;
56
+ ancestors(itemKey: CompositeItemKey): CompositeDataItem<T>[] | undefined;
57
+ updateItem(key: CompositeItemKey, data: Partial<T> | ((item: T) => Partial<T>)): void;
58
+ }
59
+
60
+ declare class CompositeDataItem<T extends object> implements Iterable<CompositeDataItem<T>> {
61
+ #private;
62
+ parent: CompositeDataItem<T> | null;
63
+ children?: CompositeDataItem<T>[];
64
+ level: number;
65
+ data: PreinitializedMapStore<T>;
66
+ state: PreinitializedMapStore<CompositeDataItemState>;
67
+ pointers: {
68
+ left?: CompositeItemKey;
69
+ right?: CompositeItemKey;
70
+ up?: CompositeItemKey;
71
+ down?: CompositeItemKey;
72
+ };
73
+ childrenProp: string;
74
+ constructor(item: T, options: CompositeDataItemOptions<T>, parent: CompositeDataItem<T> | null);
75
+ get key(): CompositeItemKey;
76
+ [Symbol.iterator](): Iterator<CompositeDataItem<T>>;
77
+ toJSON(): T;
78
+ descendants(): CompositeDataItem<T>[];
79
+ ancestors(): CompositeDataItem<T>[];
80
+ toggleSelect(recursive?: boolean): void;
81
+ select(recursive?: boolean): CompositeItemKey[];
82
+ deselect(recursive?: boolean): CompositeItemKey[];
83
+ disable(recursive?: boolean): CompositeItemKey[];
84
+ enable(recursive?: boolean): CompositeItemKey[];
85
+ }
86
+
87
+ declare type CompositeDataItemOptions<T> = CompositeDataPropGetters<T> & {
88
+ initialState?: CompositeDataItemState;
89
+ itemChildrenProp: string;
90
+ };
91
+
92
+ declare interface CompositeDataItemState {
93
+ focused: boolean;
94
+ selected: boolean;
95
+ disabled: boolean;
96
+ }
97
+
98
+ declare type CompositeDataOptions<T> = Required<CompositeOptions> & CompositeDataPropGetters<T>;
99
+
100
+ declare interface CompositeDataPropGetters<T> {
101
+ getItemKey: (item: T) => CompositeItemKey;
102
+ getItemChildren: (item: T) => T[] | undefined;
103
+ }
104
+
105
+ declare type CompositeItemKey = string | number;
106
+
107
+ declare interface CompositeOptions {
108
+ disabledKeys?: CompositeItemKey[];
109
+ selectedKeys?: CompositeItemKey[];
110
+ itemKeyProp?: string;
111
+ itemChildrenProp?: string;
112
+ }
113
+
114
+ declare interface CompositeProviderOptions<T extends object> {
115
+ focusProvider: AbstractFocusProvider<T>;
116
+ selectionProvider?: AbstractSelectionProvider<T>;
117
+ }
118
+
119
+ declare interface FocusProvider {
120
+ focus(itemKey: CompositeItemKey): void;
121
+ focusUp(): void;
122
+ focusDown(): void;
123
+ focusLeft(): void;
124
+ focusRight(): void;
125
+ focusPageUp(): void;
126
+ focesPageDown(): void;
127
+ focusToFirst(): void;
128
+ focusToLast(): void;
129
+ focusToFirstInRow(): void;
130
+ focusToLastInRow(): void;
131
+ focusToTypeAheadMatch(): void;
132
+ }
133
+
134
+ export declare class ListboxFocusProvider<T extends object> extends AbstractFocusProvider<T> {
135
+ setFocusPointers(): readonly [CompositeDataItem<T> | null, CompositeDataItem<T> | null];
136
+ focusUp(): void;
137
+ focusDown(): void;
138
+ focusLeft(): void;
139
+ focusRight(): void;
140
+ focusPageUp(): void;
141
+ focesPageDown(): void;
142
+ focusToFirst(): void;
143
+ focusToLast(): void;
144
+ focusToFirstInRow(): void;
145
+ focusToLastInRow(): void;
146
+ focusToTypeAheadMatch(): void;
147
+ }
148
+
149
+ export { }
@@ -0,0 +1,53 @@
1
+ import { A as h } from "./AbstractFocusProvider-CxvlcEki.js";
2
+ class l extends h {
3
+ setFocusPointers() {
4
+ let i = null, n = null;
5
+ const t = [...this.data.lookup];
6
+ for (let e = 0; e < t.length; e++) {
7
+ const [r, s] = t[e];
8
+ if (this.isFocusable(s) && (i || (i = s), n = s, e < t.length - 1)) {
9
+ let o = e === t.length - 1 ? 0 : e + 1;
10
+ for (; o < t.length && !this.isFocusable(t[o][1]); )
11
+ o = (o + 1) % t.length;
12
+ s.pointers.down = t[o][0], t[o][1].pointers.up = r;
13
+ }
14
+ }
15
+ return [i, n];
16
+ }
17
+ focusUp() {
18
+ this.focusedItem.get()?.pointers.up && this.focus(this.focusedItem.get().pointers.up);
19
+ }
20
+ focusDown() {
21
+ this.focusedItem.get()?.pointers.down && this.focus(this.focusedItem.get().pointers.down);
22
+ }
23
+ focusLeft() {
24
+ throw new Error("Method not implemented.");
25
+ }
26
+ focusRight() {
27
+ throw new Error("Method not implemented.");
28
+ }
29
+ focusPageUp() {
30
+ throw new Error("Method not implemented.");
31
+ }
32
+ focesPageDown() {
33
+ throw new Error("Method not implemented.");
34
+ }
35
+ focusToFirst() {
36
+ this.firstFocusableItem && this.focus(this.firstFocusableItem);
37
+ }
38
+ focusToLast() {
39
+ this.lastFocusableItem && this.focus(this.lastFocusableItem);
40
+ }
41
+ focusToFirstInRow() {
42
+ throw new Error("Method not implemented.");
43
+ }
44
+ focusToLastInRow() {
45
+ throw new Error("Method not implemented.");
46
+ }
47
+ focusToTypeAheadMatch() {
48
+ throw new Error("Method not implemented.");
49
+ }
50
+ }
51
+ export {
52
+ l as ListboxFocusProvider
53
+ };
@@ -0,0 +1,141 @@
1
+ import { PreinitializedMapStore } from 'nanostores';
2
+ import { PreinitializedWritableAtom } from 'nanostores';
3
+
4
+ declare abstract class AbstractFocusProvider<T extends object> implements FocusProvider {
5
+ protected data: CompositeData<T>;
6
+ protected dataOptions: CompositeDataOptions<T>;
7
+ firstFocusableItem: CompositeDataItem<T> | null;
8
+ lastFocusableItem: CompositeDataItem<T> | null;
9
+ focusedItem: PreinitializedWritableAtom<CompositeDataItem<T> | null>;
10
+ init(data: CompositeData<T>, dataOptions: CompositeDataOptions<T>): void;
11
+ isFocusable(itemAtom: CompositeDataItem<T>): boolean;
12
+ focus(itemKey: CompositeItemKey): void;
13
+ focus(item: CompositeDataItem<T>): void;
14
+ abstract setFocusPointers(): readonly [first: CompositeDataItem<T> | null, last: CompositeDataItem<T> | null];
15
+ abstract focusUp(): void;
16
+ abstract focusDown(): void;
17
+ abstract focusLeft(): void;
18
+ abstract focusRight(): void;
19
+ abstract focusPageUp(): void;
20
+ abstract focesPageDown(): void;
21
+ abstract focusToFirst(): void;
22
+ abstract focusToLast(): void;
23
+ abstract focusToFirstInRow(): void;
24
+ abstract focusToLastInRow(): void;
25
+ abstract focusToTypeAheadMatch(): void;
26
+ }
27
+
28
+ declare abstract class AbstractSelectionProvider<T extends object> {
29
+ protected data: CompositeData<T>;
30
+ protected dataOptions: CompositeDataOptions<T>;
31
+ selectedKeys: PreinitializedWritableAtom<Set<CompositeItemKey>>;
32
+ init(data: CompositeData<T>, dataOptions: CompositeDataOptions<T>): void;
33
+ abstract select(itemKey?: CompositeItemKey, recursive?: boolean): void;
34
+ abstract select(item: CompositeDataItem<T>, recursive?: boolean): void;
35
+ abstract select(item?: CompositeDataItem<T> | CompositeItemKey, recursive?: boolean): void;
36
+ abstract deselect(itemKey?: CompositeItemKey, recursive?: boolean): void;
37
+ abstract deselect(item: CompositeDataItem<T>, recursive?: boolean): void;
38
+ abstract deselect(item?: CompositeDataItem<T> | CompositeItemKey, recursive?: boolean): void;
39
+ toggleSelect(itemKey?: CompositeItemKey, recursive?: boolean): void;
40
+ toggleSelect(item: CompositeDataItem<T>, recursive?: boolean): void;
41
+ }
42
+
43
+ declare class CompositeData<T extends object> implements Iterable<CompositeDataItem<T>> {
44
+ #private;
45
+ lookup: Map<CompositeItemKey, CompositeDataItem<T>>;
46
+ focusProvider: AbstractFocusProvider<T>;
47
+ selectionProvider?: AbstractSelectionProvider<T>;
48
+ disabledKeys: Set<CompositeItemKey>;
49
+ root: CompositeDataItem<T>;
50
+ constructor(items: T[], providerOptions: CompositeProviderOptions<T>, options?: CompositeOptions);
51
+ [Symbol.iterator](): Iterator<CompositeDataItem<T>>;
52
+ toJSON(): T[];
53
+ init(items: T[]): void;
54
+ item(key: CompositeItemKey): CompositeDataItem<T> | undefined;
55
+ descendants(itemKey: CompositeItemKey): CompositeDataItem<T>[] | undefined;
56
+ ancestors(itemKey: CompositeItemKey): CompositeDataItem<T>[] | undefined;
57
+ updateItem(key: CompositeItemKey, data: Partial<T> | ((item: T) => Partial<T>)): void;
58
+ }
59
+
60
+ declare class CompositeDataItem<T extends object> implements Iterable<CompositeDataItem<T>> {
61
+ #private;
62
+ parent: CompositeDataItem<T> | null;
63
+ children?: CompositeDataItem<T>[];
64
+ level: number;
65
+ data: PreinitializedMapStore<T>;
66
+ state: PreinitializedMapStore<CompositeDataItemState>;
67
+ pointers: {
68
+ left?: CompositeItemKey;
69
+ right?: CompositeItemKey;
70
+ up?: CompositeItemKey;
71
+ down?: CompositeItemKey;
72
+ };
73
+ childrenProp: string;
74
+ constructor(item: T, options: CompositeDataItemOptions<T>, parent: CompositeDataItem<T> | null);
75
+ get key(): CompositeItemKey;
76
+ [Symbol.iterator](): Iterator<CompositeDataItem<T>>;
77
+ toJSON(): T;
78
+ descendants(): CompositeDataItem<T>[];
79
+ ancestors(): CompositeDataItem<T>[];
80
+ toggleSelect(recursive?: boolean): void;
81
+ select(recursive?: boolean): CompositeItemKey[];
82
+ deselect(recursive?: boolean): CompositeItemKey[];
83
+ disable(recursive?: boolean): CompositeItemKey[];
84
+ enable(recursive?: boolean): CompositeItemKey[];
85
+ }
86
+
87
+ declare type CompositeDataItemOptions<T> = CompositeDataPropGetters<T> & {
88
+ initialState?: CompositeDataItemState;
89
+ itemChildrenProp: string;
90
+ };
91
+
92
+ declare interface CompositeDataItemState {
93
+ focused: boolean;
94
+ selected: boolean;
95
+ disabled: boolean;
96
+ }
97
+
98
+ declare type CompositeDataOptions<T> = Required<CompositeOptions> & CompositeDataPropGetters<T>;
99
+
100
+ declare interface CompositeDataPropGetters<T> {
101
+ getItemKey: (item: T) => CompositeItemKey;
102
+ getItemChildren: (item: T) => T[] | undefined;
103
+ }
104
+
105
+ declare type CompositeItemKey = string | number;
106
+
107
+ declare interface CompositeOptions {
108
+ disabledKeys?: CompositeItemKey[];
109
+ selectedKeys?: CompositeItemKey[];
110
+ itemKeyProp?: string;
111
+ itemChildrenProp?: string;
112
+ }
113
+
114
+ declare interface CompositeProviderOptions<T extends object> {
115
+ focusProvider: AbstractFocusProvider<T>;
116
+ selectionProvider?: AbstractSelectionProvider<T>;
117
+ }
118
+
119
+ declare interface FocusProvider {
120
+ focus(itemKey: CompositeItemKey): void;
121
+ focusUp(): void;
122
+ focusDown(): void;
123
+ focusLeft(): void;
124
+ focusRight(): void;
125
+ focusPageUp(): void;
126
+ focesPageDown(): void;
127
+ focusToFirst(): void;
128
+ focusToLast(): void;
129
+ focusToFirstInRow(): void;
130
+ focusToLastInRow(): void;
131
+ focusToTypeAheadMatch(): void;
132
+ }
133
+
134
+ export declare class SingleSelectionProvider<T extends object> extends AbstractSelectionProvider<T> {
135
+ select(itemKey: CompositeItemKey, recursive?: boolean): void;
136
+ select(item: CompositeDataItem<T>, recursive?: boolean): void;
137
+ deselect(itemKey: CompositeItemKey, recursive?: boolean): void;
138
+ deselect(item: CompositeDataItem<T>, recursive?: boolean): void;
139
+ }
140
+
141
+ export { }
@@ -0,0 +1,19 @@
1
+ import { C as c } from "./CompositeDataItem-DuHOHCWy.js";
2
+ import { A as i, u as l, d as n } from "./AbstractSelectionProvider-BtaROstC.js";
3
+ class f extends i {
4
+ select(e, t = !1) {
5
+ const s = e instanceof c ? e : this.data.lookup.get(e);
6
+ if (!s) return;
7
+ const o = s.select(t);
8
+ this.selectedKeys.set(l(this.selectedKeys.get(), o));
9
+ }
10
+ deselect(e, t = !1) {
11
+ const s = e instanceof c ? e : this.data.lookup.get(e);
12
+ if (!s) return;
13
+ const o = s.deselect(t);
14
+ this.selectedKeys.set(n(this.selectedKeys.get(), o));
15
+ }
16
+ }
17
+ export {
18
+ f as SingleSelectionProvider
19
+ };