@ariakit/components 0.1.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/CHANGELOG.md +19 -0
- package/dist/checkbox/checkbox-store.d.ts +47 -0
- package/dist/checkbox/checkbox-store.d.ts.map +1 -0
- package/dist/checkbox/checkbox-store.js +16 -0
- package/dist/checkbox/checkbox-store.js.map +1 -0
- package/dist/collection/collection-store.d.ts +2 -0
- package/dist/collection/collection-store.js +132 -0
- package/dist/collection/collection-store.js.map +1 -0
- package/dist/collection-store-yNe83BiS.d.ts +81 -0
- package/dist/collection-store-yNe83BiS.d.ts.map +1 -0
- package/dist/combobox/combobox-store.d.ts +150 -0
- package/dist/combobox/combobox-store.d.ts.map +1 -0
- package/dist/combobox/combobox-store.js +83 -0
- package/dist/combobox/combobox-store.js.map +1 -0
- package/dist/composite/composite-overflow-store.d.ts +16 -0
- package/dist/composite/composite-overflow-store.d.ts.map +1 -0
- package/dist/composite/composite-overflow-store.js +12 -0
- package/dist/composite/composite-overflow-store.js.map +1 -0
- package/dist/composite/composite-store.d.ts +2 -0
- package/dist/composite/composite-store.js +167 -0
- package/dist/composite/composite-store.js.map +1 -0
- package/dist/composite-store-B-iDEtZZ.d.ts +331 -0
- package/dist/composite-store-B-iDEtZZ.d.ts.map +1 -0
- package/dist/dialog/dialog-store.d.ts +2 -0
- package/dist/dialog/dialog-store.js +12 -0
- package/dist/dialog/dialog-store.js.map +1 -0
- package/dist/dialog-store-BOLvw2IX.d.ts +16 -0
- package/dist/dialog-store-BOLvw2IX.d.ts.map +1 -0
- package/dist/disclosure/disclosure-store.d.ts +2 -0
- package/dist/disclosure/disclosure-store.js +47 -0
- package/dist/disclosure/disclosure-store.js.map +1 -0
- package/dist/disclosure-store-xKlQffR0.d.ts +142 -0
- package/dist/disclosure-store-xKlQffR0.d.ts.map +1 -0
- package/dist/form/form-store.d.ts +247 -0
- package/dist/form/form-store.d.ts.map +1 -0
- package/dist/form/form-store.js +211 -0
- package/dist/form/form-store.js.map +1 -0
- package/dist/form/types.d.ts +37 -0
- package/dist/form/types.d.ts.map +1 -0
- package/dist/form/types.js +0 -0
- package/dist/hovercard/hovercard-store.d.ts +65 -0
- package/dist/hovercard/hovercard-store.d.ts.map +1 -0
- package/dist/hovercard/hovercard-store.js +31 -0
- package/dist/hovercard/hovercard-store.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/menu/menu-bar-store.d.ts +16 -0
- package/dist/menu/menu-bar-store.d.ts.map +1 -0
- package/dist/menu/menu-bar-store.js +12 -0
- package/dist/menu/menu-bar-store.js.map +1 -0
- package/dist/menu/menu-store.d.ts +100 -0
- package/dist/menu/menu-store.d.ts.map +1 -0
- package/dist/menu/menu-store.js +74 -0
- package/dist/menu/menu-store.js.map +1 -0
- package/dist/menubar/menubar-store.d.ts +2 -0
- package/dist/menubar/menubar-store.js +24 -0
- package/dist/menubar/menubar-store.js.map +1 -0
- package/dist/menubar-store-CD3YDYfW.d.ts +16 -0
- package/dist/menubar-store-CD3YDYfW.d.ts.map +1 -0
- package/dist/popover/popover-store.d.ts +2 -0
- package/dist/popover/popover-store.js +44 -0
- package/dist/popover/popover-store.js.map +1 -0
- package/dist/popover-store-DoCiTmUQ.d.ts +106 -0
- package/dist/popover-store-DoCiTmUQ.d.ts.map +1 -0
- package/dist/radio/radio-store.d.ts +42 -0
- package/dist/radio/radio-store.d.ts.map +1 -0
- package/dist/radio/radio-store.js +27 -0
- package/dist/radio/radio-store.js.map +1 -0
- package/dist/select/select-store.d.ts +116 -0
- package/dist/select/select-store.d.ts.map +1 -0
- package/dist/select/select-store.js +93 -0
- package/dist/select/select-store.js.map +1 -0
- package/dist/tab/tab-store.d.ts +127 -0
- package/dist/tab/tab-store.d.ts.map +1 -0
- package/dist/tab/tab-store.js +107 -0
- package/dist/tab/tab-store.js.map +1 -0
- package/dist/tag/tag-store.d.ts +2 -0
- package/dist/tag/tag-store.js +60 -0
- package/dist/tag/tag-store.js.map +1 -0
- package/dist/tag-store-D47X5_zA.d.ts +83 -0
- package/dist/tag-store-D47X5_zA.d.ts.map +1 -0
- package/dist/toolbar/toolbar-store.d.ts +21 -0
- package/dist/toolbar/toolbar-store.d.ts.map +1 -0
- package/dist/toolbar/toolbar-store.js +18 -0
- package/dist/toolbar/toolbar-store.js.map +1 -0
- package/dist/tooltip/tooltip-store.d.ts +35 -0
- package/dist/tooltip/tooltip-store.d.ts.map +1 -0
- package/dist/tooltip/tooltip-store.js +29 -0
- package/dist/tooltip/tooltip-store.js.map +1 -0
- package/license +21 -0
- package/package.json +121 -0
- package/readme.md +19 -0
- package/src/checkbox/checkbox-store.ts +93 -0
- package/src/collection/collection-store.ts +301 -0
- package/src/combobox/combobox-store.ts +382 -0
- package/src/composite/composite-overflow-store.ts +30 -0
- package/src/composite/composite-store.ts +711 -0
- package/src/dialog/dialog-store.ts +26 -0
- package/src/disclosure/disclosure-store.ts +226 -0
- package/src/form/form-store.ts +608 -0
- package/src/form/types.ts +44 -0
- package/src/hovercard/hovercard-store.ts +112 -0
- package/src/index.ts +1 -0
- package/src/menu/menu-bar-store.ts +28 -0
- package/src/menu/menu-store.ts +263 -0
- package/src/menubar/menubar-store.ts +51 -0
- package/src/popover/popover-store.ts +170 -0
- package/src/radio/radio-store.ts +80 -0
- package/src/select/select-store.ts +323 -0
- package/src/tab/tab-store.ts +330 -0
- package/src/tag/tag-store.ts +170 -0
- package/src/toolbar/toolbar-store.ts +47 -0
- package/src/tooltip/tooltip-store.ts +93 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Store, StoreProps } from "@ariakit/store";
|
|
2
|
+
import type {
|
|
3
|
+
DisclosureStoreFunctions,
|
|
4
|
+
DisclosureStoreOptions,
|
|
5
|
+
DisclosureStoreState,
|
|
6
|
+
} from "../disclosure/disclosure-store.ts";
|
|
7
|
+
import { createDisclosureStore } from "../disclosure/disclosure-store.ts";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Creates a dialog store.
|
|
11
|
+
*/
|
|
12
|
+
export function createDialogStore(props: DialogStoreProps = {}): DialogStore {
|
|
13
|
+
return createDisclosureStore(props);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface DialogStoreState extends DisclosureStoreState {}
|
|
17
|
+
|
|
18
|
+
export interface DialogStoreFunctions extends DisclosureStoreFunctions {}
|
|
19
|
+
|
|
20
|
+
export interface DialogStoreOptions extends DisclosureStoreOptions {}
|
|
21
|
+
|
|
22
|
+
export interface DialogStoreProps
|
|
23
|
+
extends DialogStoreOptions, StoreProps<DialogStoreState> {}
|
|
24
|
+
|
|
25
|
+
export interface DialogStore
|
|
26
|
+
extends DialogStoreFunctions, Store<DialogStoreState> {}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createStore,
|
|
3
|
+
mergeStore,
|
|
4
|
+
omit,
|
|
5
|
+
setup,
|
|
6
|
+
subscribe,
|
|
7
|
+
sync,
|
|
8
|
+
throwOnConflictingProps,
|
|
9
|
+
} from "@ariakit/store";
|
|
10
|
+
import type { Store, StoreOptions, StoreProps } from "@ariakit/store";
|
|
11
|
+
import { defaultValue } from "@ariakit/utils";
|
|
12
|
+
import type { SetState } from "@ariakit/utils";
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates a disclosure store.
|
|
16
|
+
*/
|
|
17
|
+
export function createDisclosureStore(
|
|
18
|
+
props: DisclosureStoreProps = {},
|
|
19
|
+
): DisclosureStore {
|
|
20
|
+
const store = mergeStore(
|
|
21
|
+
props.store,
|
|
22
|
+
omit(props.disclosure, ["contentElement", "disclosureElement"]),
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
throwOnConflictingProps(props, store);
|
|
26
|
+
|
|
27
|
+
const syncState = store?.getState();
|
|
28
|
+
|
|
29
|
+
const open = defaultValue(
|
|
30
|
+
props.open,
|
|
31
|
+
syncState?.open,
|
|
32
|
+
props.defaultOpen,
|
|
33
|
+
false,
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
const animated = defaultValue(props.animated, syncState?.animated, false);
|
|
37
|
+
|
|
38
|
+
const initialState: DisclosureStoreState = {
|
|
39
|
+
open,
|
|
40
|
+
animated,
|
|
41
|
+
animating: !!animated && open,
|
|
42
|
+
mounted: open,
|
|
43
|
+
contentElement: defaultValue(syncState?.contentElement, null),
|
|
44
|
+
disclosureElement: defaultValue(syncState?.disclosureElement, null),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const disclosure = createStore(initialState, store);
|
|
48
|
+
|
|
49
|
+
setup(disclosure, () =>
|
|
50
|
+
sync(disclosure, ["animated", "animating"], (state) => {
|
|
51
|
+
if (state.animated) return;
|
|
52
|
+
// Reset animating to false when animation is disabled.
|
|
53
|
+
disclosure.setState("animating", false);
|
|
54
|
+
}),
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
setup(disclosure, () =>
|
|
58
|
+
subscribe(disclosure, ["open"], () => {
|
|
59
|
+
if (!disclosure.getState().animated) return;
|
|
60
|
+
disclosure.setState("animating", true);
|
|
61
|
+
}),
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
setup(disclosure, () =>
|
|
65
|
+
sync(disclosure, ["open", "animating"], (state) => {
|
|
66
|
+
disclosure.setState("mounted", state.open || state.animating);
|
|
67
|
+
}),
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
...disclosure,
|
|
72
|
+
disclosure: props.disclosure,
|
|
73
|
+
setOpen: (value) => disclosure.setState("open", value),
|
|
74
|
+
show: () => disclosure.setState("open", true),
|
|
75
|
+
hide: () => disclosure.setState("open", false),
|
|
76
|
+
toggle: () => disclosure.setState("open", (open) => !open),
|
|
77
|
+
stopAnimation: () => disclosure.setState("animating", false),
|
|
78
|
+
setContentElement: (value) => disclosure.setState("contentElement", value),
|
|
79
|
+
setDisclosureElement: (value) =>
|
|
80
|
+
disclosure.setState("disclosureElement", value),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface DisclosureStoreState {
|
|
85
|
+
/**
|
|
86
|
+
* Whether the content is visible.
|
|
87
|
+
*
|
|
88
|
+
* Live examples:
|
|
89
|
+
* - [Combobox with links](https://ariakit.com/examples/combobox-links)
|
|
90
|
+
* - [Dialog with React
|
|
91
|
+
* Router](https://ariakit.com/examples/dialog-react-router)
|
|
92
|
+
* - [Menu with
|
|
93
|
+
* Motion](https://ariakit.com/examples/menu-framer-motion)
|
|
94
|
+
* - [Lazy Popover](https://ariakit.com/examples/popover-lazy)
|
|
95
|
+
* @default false
|
|
96
|
+
*/
|
|
97
|
+
open: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* The mounted state usually matches the
|
|
100
|
+
* [`open`](https://ariakit.com/reference/disclosure-provider#open) value.
|
|
101
|
+
* However, if the content element is animated, it waits for the animation to
|
|
102
|
+
* finish before turning `false`. This ensures the content element doesn't get
|
|
103
|
+
* unmounted during the animation.
|
|
104
|
+
*
|
|
105
|
+
* Live examples:
|
|
106
|
+
* - [Navigation Menubar](https://ariakit.com/examples/menubar-navigation)
|
|
107
|
+
* - [Responsive Popover](https://ariakit.com/examples/popover-responsive)
|
|
108
|
+
*/
|
|
109
|
+
mounted: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Determines whether the content should animate when it is shown or hidden.
|
|
112
|
+
* - If `true`, the `animating` state will be `true` when the content is shown
|
|
113
|
+
* or hidden and it will wait for a CSS animation/transition to end before
|
|
114
|
+
* becoming `false`.
|
|
115
|
+
* - If it's set to a number, the `animating` state will be `true` when the
|
|
116
|
+
* content is shown or hidden and it will wait for the number of
|
|
117
|
+
* milliseconds to pass before becoming `false`.
|
|
118
|
+
*/
|
|
119
|
+
animated: boolean | number;
|
|
120
|
+
/**
|
|
121
|
+
* Whether the content is currently animating.
|
|
122
|
+
*/
|
|
123
|
+
animating: boolean;
|
|
124
|
+
/**
|
|
125
|
+
* The content element that is being shown or hidden.
|
|
126
|
+
*/
|
|
127
|
+
contentElement: HTMLElement | null;
|
|
128
|
+
/**
|
|
129
|
+
* The disclosure button element that toggles the content.
|
|
130
|
+
*/
|
|
131
|
+
disclosureElement: HTMLElement | null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface DisclosureStoreFunctions extends Pick<
|
|
135
|
+
DisclosureStoreOptions,
|
|
136
|
+
"disclosure"
|
|
137
|
+
> {
|
|
138
|
+
/**
|
|
139
|
+
* Sets the [`open`](https://ariakit.com/reference/disclosure-provider#open)
|
|
140
|
+
* state.
|
|
141
|
+
*
|
|
142
|
+
* Live examples:
|
|
143
|
+
* - [Textarea with inline
|
|
144
|
+
* Combobox](https://ariakit.com/examples/combobox-textarea)
|
|
145
|
+
* @example
|
|
146
|
+
* store.setOpen(true);
|
|
147
|
+
* store.setOpen((open) => !open);
|
|
148
|
+
*/
|
|
149
|
+
setOpen: SetState<DisclosureStoreState["open"]>;
|
|
150
|
+
/**
|
|
151
|
+
* Sets the [`open`](https://ariakit.com/reference/disclosure-provider#open)
|
|
152
|
+
* state to `true`.
|
|
153
|
+
*
|
|
154
|
+
* Live examples:
|
|
155
|
+
* - [Textarea with inline
|
|
156
|
+
* Combobox](https://ariakit.com/examples/combobox-textarea)
|
|
157
|
+
* - [Dialog with
|
|
158
|
+
* Motion](https://ariakit.com/examples/dialog-framer-motion)
|
|
159
|
+
* - [Context Menu](https://ariakit.com/examples/menu-context-menu)
|
|
160
|
+
* - [Navigation Menubar](https://ariakit.com/examples/menubar-navigation)
|
|
161
|
+
*/
|
|
162
|
+
show: () => void;
|
|
163
|
+
/**
|
|
164
|
+
* Sets the [`open`](https://ariakit.com/reference/disclosure-provider#open)
|
|
165
|
+
* state to `false`.
|
|
166
|
+
*
|
|
167
|
+
* Live examples:
|
|
168
|
+
* - [Textarea with inline
|
|
169
|
+
* Combobox](https://ariakit.com/examples/combobox-textarea)
|
|
170
|
+
* - [Sliding Menu](https://ariakit.com/examples/menu-slide)
|
|
171
|
+
*/
|
|
172
|
+
hide: () => void;
|
|
173
|
+
/**
|
|
174
|
+
* Toggles the
|
|
175
|
+
* [`open`](https://ariakit.com/reference/disclosure-provider#open) state.
|
|
176
|
+
*/
|
|
177
|
+
toggle: () => void;
|
|
178
|
+
/**
|
|
179
|
+
* Sets the `animating` state to `false`, which will automatically set the
|
|
180
|
+
* `mounted` state to `false` if it was `true`. This means that the content
|
|
181
|
+
* element can be safely unmounted.
|
|
182
|
+
* @deprecated Use `setState("animating", false)` instead.
|
|
183
|
+
*/
|
|
184
|
+
stopAnimation: () => void;
|
|
185
|
+
/**
|
|
186
|
+
* Sets the `contentElement` state.
|
|
187
|
+
*/
|
|
188
|
+
setContentElement: SetState<DisclosureStoreState["contentElement"]>;
|
|
189
|
+
/**
|
|
190
|
+
* Sets the `disclosureElement` state.
|
|
191
|
+
*
|
|
192
|
+
* Live examples:
|
|
193
|
+
* - [Navigation Menubar](https://ariakit.com/examples/menubar-navigation)
|
|
194
|
+
*/
|
|
195
|
+
setDisclosureElement: SetState<DisclosureStoreState["disclosureElement"]>;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export interface DisclosureStoreOptions extends StoreOptions<
|
|
199
|
+
DisclosureStoreState,
|
|
200
|
+
"open" | "animated"
|
|
201
|
+
> {
|
|
202
|
+
/**
|
|
203
|
+
* @deprecated Manually setting the `animated` prop is no longer necessary.
|
|
204
|
+
* This will be removed in a future release.
|
|
205
|
+
*/
|
|
206
|
+
animated?: DisclosureStoreState["animated"];
|
|
207
|
+
/**
|
|
208
|
+
* Whether the content should be visible by default.
|
|
209
|
+
* @default false
|
|
210
|
+
*/
|
|
211
|
+
defaultOpen?: DisclosureStoreState["open"];
|
|
212
|
+
/**
|
|
213
|
+
* A reference to another disclosure store that controls another disclosure
|
|
214
|
+
* component to keep them in sync. Element states like `contentElement` and
|
|
215
|
+
* `disclosureElement` won't be synced. For that, use the
|
|
216
|
+
* [`store`](https://ariakit.com/reference/disclosure-provider#store) prop
|
|
217
|
+
* instead.
|
|
218
|
+
*/
|
|
219
|
+
disclosure?: DisclosureStore | null;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
export interface DisclosureStoreProps
|
|
223
|
+
extends DisclosureStoreOptions, StoreProps<DisclosureStoreState> {}
|
|
224
|
+
|
|
225
|
+
export interface DisclosureStore
|
|
226
|
+
extends DisclosureStoreFunctions, Store<DisclosureStoreState> {}
|