@bccampus/ui-components 0.4.0 → 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 (37) 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/icon-generator-tuhuqdpL.js +76 -0
  14. package/dist/icon-generator.d.ts +11 -4
  15. package/dist/icon-generator.js +4 -74
  16. package/dist/listbox.d.ts +171 -0
  17. package/dist/listbox.js +76 -0
  18. package/dist/masked-image-generator.js +7 -7
  19. package/dist/ui-components.js +5 -5
  20. package/package.json +5 -1
  21. package/src/components/ui/composite/CompositeData.ts +22 -114
  22. package/src/components/ui/composite/FocusProvider/AbstractFocusProvider.ts +83 -0
  23. package/src/components/ui/composite/FocusProvider/ListboxFocusProvider.ts +74 -0
  24. package/src/components/ui/composite/SelectionProvider/AbstractSelectionProvider.ts +45 -0
  25. package/src/components/ui/composite/SelectionProvider/MultipleSelectionProvider.ts +28 -0
  26. package/src/components/ui/composite/SelectionProvider/SingleSelectionProvider.ts +37 -0
  27. package/src/components/ui/composite/composite-component-item.tsx +12 -10
  28. package/src/components/ui/composite/composite-component.tsx +39 -68
  29. package/src/components/ui/composite/index.ts +4 -1
  30. package/src/components/ui/composite/listbox.tsx +61 -0
  31. package/src/components/ui/composite/types.ts +51 -30
  32. package/src/components/ui/icon-generator/index.ts +2 -0
  33. package/src/hooks/use-keyboard-event.ts +31 -42
  34. package/vite.config.ts +6 -2
  35. package/src/components/ui/composite/composite-data-context.tsx +0 -31
  36. /package/dist/{igenerate-tiles.d.ts → generate-tiles.d.ts} +0 -0
  37. /package/dist/{igenerate-tiles.js → generate-tiles.js} +0 -0
@@ -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,23 @@
1
+ import { C as c } from "./CompositeDataItem-DuHOHCWy.js";
2
+ import { A as d, d as i } from "./AbstractSelectionProvider-BtaROstC.js";
3
+ class u extends d {
4
+ select(e, r = !1) {
5
+ const t = e ? e instanceof c ? e : this.data.lookup.get(e) : this.data.focusProvider.focusedItem.get();
6
+ if (!t) return;
7
+ this.selectedKeys.get().forEach((a) => {
8
+ const o = this.data.lookup.get(a);
9
+ o && o.deselect(!1);
10
+ });
11
+ const s = t.select(!1);
12
+ this.selectedKeys.set(new Set(s));
13
+ }
14
+ deselect(e, r = !1) {
15
+ const t = e ? e instanceof c ? e : this.data.lookup.get(e) : this.data.focusProvider.focusedItem.get();
16
+ if (!t) return;
17
+ const s = t.deselect(!1);
18
+ this.selectedKeys.set(i(this.selectedKeys.get(), s));
19
+ }
20
+ }
21
+ export {
22
+ u as SingleSelectionProvider
23
+ };
@@ -0,0 +1,122 @@
1
+ import { jsxs as h, jsx as b } from "react/jsx-runtime";
2
+ import { useRef as S, useCallback as $, useSyncExternalStore as C, useMemo as g, useId as P, useImperativeHandle as m } from "react";
3
+ function w(o, r, e) {
4
+ let t = new Set(r).add(void 0);
5
+ return o.listen((s, l, n) => {
6
+ t.has(n) && e(s, l, n);
7
+ });
8
+ }
9
+ let f = (o, r) => (e) => {
10
+ o.current !== e && (o.current = e, r());
11
+ };
12
+ function R(o, { keys: r, deps: e = [o, r] } = {}) {
13
+ let t = S();
14
+ t.current = o.get();
15
+ let s = $((n) => (f(t, n)(o.value), r?.length > 0 ? w(o, r, f(t, n)) : o.listen(f(t, n))), e), l = () => t.current;
16
+ return C(s, l, l);
17
+ }
18
+ function v({
19
+ id: o,
20
+ className: r,
21
+ item: e,
22
+ role: t,
23
+ itemMouseEventHandler: s,
24
+ itemKeyboardEventHandler: l,
25
+ render: n
26
+ }) {
27
+ const i = R(e.data), u = R(e.state), c = g(() => u.disabled ? {} : {
28
+ mouseEventHandler: () => s?.(e),
29
+ keyboardEventHandler: () => l?.(e)
30
+ }, [u.disabled, e, l, s]);
31
+ return /* @__PURE__ */ h(
32
+ "div",
33
+ {
34
+ id: o,
35
+ role: t,
36
+ "aria-disabled": u.disabled,
37
+ "data-key": e.key,
38
+ tabIndex: u.disabled ? void 0 : u.focused ? 0 : -1,
39
+ className: r,
40
+ children: [
41
+ n({ data: i, key: e.key, level: e.level }, u, c),
42
+ e.children && e.children.length > 0 && [...e.children].map((d) => /* @__PURE__ */ b(
43
+ v,
44
+ {
45
+ id: `${o}-${e.key}`,
46
+ role: t,
47
+ item: d,
48
+ render: n,
49
+ className: r,
50
+ itemMouseEventHandler: s,
51
+ itemKeyboardEventHandler: l
52
+ },
53
+ d.key
54
+ ))
55
+ ]
56
+ }
57
+ );
58
+ }
59
+ function j(o) {
60
+ return o ?? P();
61
+ }
62
+ const q = {
63
+ listbox: {
64
+ rootRole: "listbox",
65
+ groupRole: "group",
66
+ itemRole: "option"
67
+ },
68
+ grid: {
69
+ rootRole: "grid",
70
+ groupRole: "rowgroup",
71
+ itemRole: "row"
72
+ },
73
+ custom: void 0
74
+ };
75
+ function B({
76
+ data: o,
77
+ variant: r,
78
+ rootRole: e,
79
+ itemRole: t,
80
+ groupRole: s,
81
+ renderItem: l,
82
+ className: n,
83
+ itemClassName: i,
84
+ ref: u,
85
+ handleRef: c,
86
+ id: d,
87
+ itemMouseEventHandler: x,
88
+ itemKeyboardEventHandler: y,
89
+ ...I
90
+ }) {
91
+ const k = j(d);
92
+ m(
93
+ c,
94
+ () => ({
95
+ focusProvider: o.focusProvider,
96
+ selectionProvider: o.selectionProvider
97
+ }),
98
+ [o]
99
+ );
100
+ const a = g(
101
+ () => q[r] ?? { rootRole: e, groupRole: s, itemRole: t },
102
+ [s, t, e, r]
103
+ );
104
+ return /* @__PURE__ */ b("div", { ref: u, id: k, className: n, tabIndex: -1, role: a.rootRole, ...I, children: [...o].map((p) => /* @__PURE__ */ b(
105
+ v,
106
+ {
107
+ className: i,
108
+ id: `${k}-${p.key}`,
109
+ role: a.itemRole,
110
+ groupRole: a.groupRole,
111
+ item: p,
112
+ render: l,
113
+ itemMouseEventHandler: x,
114
+ itemKeyboardEventHandler: y
115
+ },
116
+ p.key
117
+ )) });
118
+ }
119
+ export {
120
+ B as C,
121
+ v as a
122
+ };
@@ -1,3 +1,4 @@
1
+ import { AriaRole } from 'react';
1
2
  import { JSX } from 'react/jsx-runtime';
2
3
  import { KeyboardEventHandler } from 'react';
3
4
  import { MouseEventHandler } from 'react';
@@ -5,50 +6,76 @@ import { PreinitializedMapStore } from 'nanostores';
5
6
  import { PreinitializedWritableAtom } from 'nanostores';
6
7
  import { ReactNode } from 'react';
7
8
 
8
- export declare function CompositeComponent<T extends object>({ renderItem, className, itemClassName, ref, id, ...props }: CompositeProps<T>): JSX.Element;
9
+ export declare abstract class AbstractFocusProvider<T extends object> implements FocusProvider {
10
+ protected data: CompositeData<T>;
11
+ protected dataOptions: CompositeDataOptions<T>;
12
+ firstFocusableItem: CompositeDataItem<T> | null;
13
+ lastFocusableItem: CompositeDataItem<T> | null;
14
+ focusedItem: PreinitializedWritableAtom<CompositeDataItem<T> | null>;
15
+ init(data: CompositeData<T>, dataOptions: CompositeDataOptions<T>): void;
16
+ isFocusable(itemAtom: CompositeDataItem<T>): boolean;
17
+ focus(itemKey: CompositeItemKey): void;
18
+ focus(item: CompositeDataItem<T>): void;
19
+ abstract setFocusPointers(): readonly [first: CompositeDataItem<T> | null, last: CompositeDataItem<T> | null];
20
+ abstract focusUp(): void;
21
+ abstract focusDown(): void;
22
+ abstract focusLeft(): void;
23
+ abstract focusRight(): void;
24
+ abstract focusPageUp(): void;
25
+ abstract focesPageDown(): void;
26
+ abstract focusToFirst(): void;
27
+ abstract focusToLast(): void;
28
+ abstract focusToFirstInRow(): void;
29
+ abstract focusToLastInRow(): void;
30
+ abstract focusToTypeAheadMatch(): void;
31
+ }
9
32
 
10
- export declare function CompositeComponentContext<T extends object>({ data, children, ...compositeOptions }: CompositeComponentContextProps<T>): JSX.Element;
33
+ export declare abstract class AbstractSelectionProvider<T extends object> {
34
+ protected data: CompositeData<T>;
35
+ protected dataOptions: CompositeDataOptions<T>;
36
+ selectedKeys: PreinitializedWritableAtom<Set<CompositeItemKey>>;
37
+ init(data: CompositeData<T>, dataOptions: CompositeDataOptions<T>): void;
38
+ abstract select(itemKey?: CompositeItemKey, recursive?: boolean): void;
39
+ abstract select(item: CompositeDataItem<T>, recursive?: boolean): void;
40
+ abstract select(item?: CompositeDataItem<T> | CompositeItemKey, recursive?: boolean): void;
41
+ abstract deselect(itemKey?: CompositeItemKey, recursive?: boolean): void;
42
+ abstract deselect(item: CompositeDataItem<T>, recursive?: boolean): void;
43
+ abstract deselect(item?: CompositeDataItem<T> | CompositeItemKey, recursive?: boolean): void;
44
+ toggleSelect(itemKey?: CompositeItemKey, recursive?: boolean): void;
45
+ toggleSelect(item: CompositeDataItem<T>, recursive?: boolean): void;
46
+ }
11
47
 
12
- declare interface CompositeComponentContextProps<T extends object> extends CompositeOptions {
13
- data: T[];
14
- children: React.ReactNode;
48
+ export declare interface BaseCompositeProps<T extends object> extends React.ComponentPropsWithoutRef<"div"> {
49
+ data: CompositeData<T>;
50
+ className?: string;
51
+ ref?: React.Ref<HTMLDivElement>;
52
+ handleRef?: React.Ref<CompositeHandle>;
53
+ renderItem: CompositeItemRenderFn<T>;
54
+ itemClassName?: string;
15
55
  }
16
56
 
17
- export declare function CompositeComponentItem<T extends object>({ id, className, item, mouseEventHandler, keyboardEventHandler, render, }: CompositeItemProps<T>): JSX.Element;
57
+ export declare function CompositeComponent<T extends object>({ data, variant, rootRole, itemRole, groupRole, renderItem, className, itemClassName, ref, handleRef, id, itemMouseEventHandler, itemKeyboardEventHandler, ...props }: CompositeProps<T>): JSX.Element;
58
+
59
+ export declare function CompositeComponentItem<T extends object>({ id, className, item, role, itemMouseEventHandler, itemKeyboardEventHandler, render, }: CompositeItemProps<T>): JSX.Element;
18
60
 
19
- declare class CompositeData<T extends object> implements Iterable<CompositeDataItem<T>> {
61
+ export declare class CompositeData<T extends object> implements Iterable<CompositeDataItem<T>> {
20
62
  #private;
21
63
  lookup: Map<CompositeItemKey, CompositeDataItem<T>>;
22
- firstFocusableItem: CompositeDataItem<T> | null;
23
- focusedItem: PreinitializedWritableAtom<CompositeDataItem<T> | null>;
24
- disabledKeys: PreinitializedWritableAtom<Set<CompositeItemKey>>;
25
- selectedKeys: PreinitializedWritableAtom<Set<CompositeItemKey>>;
64
+ focusProvider: AbstractFocusProvider<T>;
65
+ selectionProvider?: AbstractSelectionProvider<T>;
66
+ disabledKeys: Set<CompositeItemKey>;
26
67
  root: CompositeDataItem<T>;
27
- constructor(items: T[], options?: CompositeOptions);
68
+ constructor(items: T[], providerOptions: CompositeProviderOptions<T>, options?: CompositeOptions);
28
69
  [Symbol.iterator](): Iterator<CompositeDataItem<T>>;
29
70
  toJSON(): T[];
30
71
  init(items: T[]): void;
31
- isFocusable(itemAtom: CompositeDataItem<T>): boolean;
32
- getFirstFocusableItem(): CompositeDataItem<T> | undefined;
33
72
  item(key: CompositeItemKey): CompositeDataItem<T> | undefined;
34
73
  descendants(itemKey: CompositeItemKey): CompositeDataItem<T>[] | undefined;
35
74
  ancestors(itemKey: CompositeItemKey): CompositeDataItem<T>[] | undefined;
36
- focus(itemKey: CompositeItemKey): void;
37
- focus(item: CompositeDataItem<T>): void;
38
- toggleSelect(itemKey: CompositeItemKey, recursive?: boolean): void;
39
- toggleSelect(item: CompositeDataItem<T>, recursive?: boolean): void;
40
- select(itemKey: CompositeItemKey, recursive?: boolean): void;
41
- select(item: CompositeDataItem<T>, recursive?: boolean): void;
42
- deselect(itemKey: CompositeItemKey, recursive?: boolean): void;
43
- deselect(item: CompositeDataItem<T>, recursive?: boolean): void;
44
- disable(itemKey: CompositeItemKey, recursive?: boolean): void;
45
- disable(item: CompositeDataItem<T>, recursive?: boolean): void;
46
- enable(itemKey: CompositeItemKey, recursive?: boolean): void;
47
- enable(item: CompositeDataItem<T>, recursive?: boolean): void;
48
75
  updateItem(key: CompositeItemKey, data: Partial<T> | ((item: T) => Partial<T>)): void;
49
76
  }
50
77
 
51
- declare class CompositeDataItem<T extends object> implements Iterable<CompositeDataItem<T>> {
78
+ export declare class CompositeDataItem<T extends object> implements Iterable<CompositeDataItem<T>> {
52
79
  #private;
53
80
  parent: CompositeDataItem<T> | null;
54
81
  children?: CompositeDataItem<T>[];
@@ -93,35 +120,29 @@ declare interface CompositeDataPropGetters<T> {
93
120
  getItemChildren: (item: T) => T[] | undefined;
94
121
  }
95
122
 
96
- export declare interface CompositeFocusProvider {
97
- setPointers: () => void;
98
- goFirst: () => void;
99
- goLast: () => void;
100
- goUp: () => void;
101
- goDown: () => void;
102
- goLeft: () => void;
103
- goRight: () => void;
123
+ export declare interface CompositeEventHandlers {
124
+ mouseEventHandler?: MouseEventHandler<HTMLElement>;
125
+ keyboardEventHandler?: KeyboardEventHandler<HTMLElement>;
104
126
  }
105
127
 
106
128
  export declare interface CompositeHandle {
107
- focusUp: () => void;
108
- focusDown: () => void;
109
- select: () => void;
129
+ focusProvider: FocusProvider;
130
+ selectionProvider?: SelectionProvider;
110
131
  }
111
132
 
112
- export declare interface CompositeItemEventHandlers {
113
- mouseEventHandler?: MouseEventHandler<HTMLElement>;
114
- keyboardEventHandler?: KeyboardEventHandler<HTMLElement>;
133
+ export declare interface CompositeItemEventHandlerFunctions<T extends object> {
134
+ itemMouseEventHandler?: (itemAtom: CompositeDataItem<T>) => void;
135
+ itemKeyboardEventHandler?: (itemAtom: CompositeDataItem<T>) => void;
115
136
  }
116
137
 
117
138
  export declare type CompositeItemKey = string | number;
118
139
 
119
- export declare interface CompositeItemProps<T extends object> {
140
+ export declare interface CompositeItemProps<T extends object> extends CompositeItemEventHandlerFunctions<T> {
120
141
  id: string;
121
142
  className?: string;
143
+ role?: AriaRole;
144
+ groupRole?: AriaRole;
122
145
  item: CompositeDataItem<T>;
123
- mouseEventHandler?: (itemAtom: CompositeDataItem<T>) => void;
124
- keyboardEventHandler?: (itemAtom: CompositeDataItem<T>) => void;
125
146
  remove?: () => void;
126
147
  render: CompositeItemRenderFn<T>;
127
148
  }
@@ -130,7 +151,7 @@ export declare type CompositeItemRenderFn<T extends object> = (item: {
130
151
  data: T;
131
152
  level: number;
132
153
  key: CompositeItemKey;
133
- }, state: CompositeDataItemState, eventHandlers: CompositeItemEventHandlers) => ReactNode;
154
+ }, state: CompositeDataItemState, eventHandlers: CompositeEventHandlers) => ReactNode;
134
155
 
135
156
  export declare interface CompositeOptions {
136
157
  disabledKeys?: CompositeItemKey[];
@@ -139,13 +160,49 @@ export declare interface CompositeOptions {
139
160
  itemChildrenProp?: string;
140
161
  }
141
162
 
142
- export declare interface CompositeProps<T extends object> extends React.ComponentPropsWithoutRef<"div"> {
143
- renderItem: CompositeItemRenderFn<T>;
144
- className?: string;
145
- itemClassName?: string;
146
- ref?: React.Ref<CompositeHandle>;
163
+ export declare type CompositeProps<T extends object> = BaseCompositeProps<T> & CompositeItemEventHandlerFunctions<T> & CompositeRoles;
164
+
165
+ export declare interface CompositeProviderOptions<T extends object> {
166
+ focusProvider: AbstractFocusProvider<T>;
167
+ selectionProvider?: AbstractSelectionProvider<T>;
168
+ }
169
+
170
+ export declare type CompositeRoles = {
171
+ variant: 'listbox';
172
+ rootRole?: never;
173
+ itemRole?: never;
174
+ groupRole?: never;
175
+ } | {
176
+ variant: 'grid';
177
+ rootRole?: never;
178
+ itemRole?: never;
179
+ groupRole?: never;
180
+ } | {
181
+ variant: 'custom';
182
+ rootRole: AriaRole;
183
+ itemRole: AriaRole;
184
+ groupRole: AriaRole;
185
+ };
186
+
187
+ export declare interface FocusProvider {
188
+ focus(itemKey: CompositeItemKey): void;
189
+ focusUp(): void;
190
+ focusDown(): void;
191
+ focusLeft(): void;
192
+ focusRight(): void;
193
+ focusPageUp(): void;
194
+ focesPageDown(): void;
195
+ focusToFirst(): void;
196
+ focusToLast(): void;
197
+ focusToFirstInRow(): void;
198
+ focusToLastInRow(): void;
199
+ focusToTypeAheadMatch(): void;
147
200
  }
148
201
 
149
- export declare function useCompositeContext<T extends object>(): CompositeData<T>;
202
+ export declare interface SelectionProvider {
203
+ select(itemKey?: CompositeItemKey, recursive?: boolean): void;
204
+ deselect(itemKey?: CompositeItemKey, recursive?: boolean): void;
205
+ toggleSelect(itemKey?: CompositeItemKey, recursive?: boolean): void;
206
+ }
150
207
 
151
208
  export { }