@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.
Files changed (115) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/checkbox/checkbox-store.d.ts +47 -0
  3. package/dist/checkbox/checkbox-store.d.ts.map +1 -0
  4. package/dist/checkbox/checkbox-store.js +16 -0
  5. package/dist/checkbox/checkbox-store.js.map +1 -0
  6. package/dist/collection/collection-store.d.ts +2 -0
  7. package/dist/collection/collection-store.js +132 -0
  8. package/dist/collection/collection-store.js.map +1 -0
  9. package/dist/collection-store-yNe83BiS.d.ts +81 -0
  10. package/dist/collection-store-yNe83BiS.d.ts.map +1 -0
  11. package/dist/combobox/combobox-store.d.ts +150 -0
  12. package/dist/combobox/combobox-store.d.ts.map +1 -0
  13. package/dist/combobox/combobox-store.js +83 -0
  14. package/dist/combobox/combobox-store.js.map +1 -0
  15. package/dist/composite/composite-overflow-store.d.ts +16 -0
  16. package/dist/composite/composite-overflow-store.d.ts.map +1 -0
  17. package/dist/composite/composite-overflow-store.js +12 -0
  18. package/dist/composite/composite-overflow-store.js.map +1 -0
  19. package/dist/composite/composite-store.d.ts +2 -0
  20. package/dist/composite/composite-store.js +167 -0
  21. package/dist/composite/composite-store.js.map +1 -0
  22. package/dist/composite-store-B-iDEtZZ.d.ts +331 -0
  23. package/dist/composite-store-B-iDEtZZ.d.ts.map +1 -0
  24. package/dist/dialog/dialog-store.d.ts +2 -0
  25. package/dist/dialog/dialog-store.js +12 -0
  26. package/dist/dialog/dialog-store.js.map +1 -0
  27. package/dist/dialog-store-BOLvw2IX.d.ts +16 -0
  28. package/dist/dialog-store-BOLvw2IX.d.ts.map +1 -0
  29. package/dist/disclosure/disclosure-store.d.ts +2 -0
  30. package/dist/disclosure/disclosure-store.js +47 -0
  31. package/dist/disclosure/disclosure-store.js.map +1 -0
  32. package/dist/disclosure-store-xKlQffR0.d.ts +142 -0
  33. package/dist/disclosure-store-xKlQffR0.d.ts.map +1 -0
  34. package/dist/form/form-store.d.ts +247 -0
  35. package/dist/form/form-store.d.ts.map +1 -0
  36. package/dist/form/form-store.js +211 -0
  37. package/dist/form/form-store.js.map +1 -0
  38. package/dist/form/types.d.ts +37 -0
  39. package/dist/form/types.d.ts.map +1 -0
  40. package/dist/form/types.js +0 -0
  41. package/dist/hovercard/hovercard-store.d.ts +65 -0
  42. package/dist/hovercard/hovercard-store.d.ts.map +1 -0
  43. package/dist/hovercard/hovercard-store.js +31 -0
  44. package/dist/hovercard/hovercard-store.js.map +1 -0
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +6 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/menu/menu-bar-store.d.ts +16 -0
  50. package/dist/menu/menu-bar-store.d.ts.map +1 -0
  51. package/dist/menu/menu-bar-store.js +12 -0
  52. package/dist/menu/menu-bar-store.js.map +1 -0
  53. package/dist/menu/menu-store.d.ts +100 -0
  54. package/dist/menu/menu-store.d.ts.map +1 -0
  55. package/dist/menu/menu-store.js +74 -0
  56. package/dist/menu/menu-store.js.map +1 -0
  57. package/dist/menubar/menubar-store.d.ts +2 -0
  58. package/dist/menubar/menubar-store.js +24 -0
  59. package/dist/menubar/menubar-store.js.map +1 -0
  60. package/dist/menubar-store-CD3YDYfW.d.ts +16 -0
  61. package/dist/menubar-store-CD3YDYfW.d.ts.map +1 -0
  62. package/dist/popover/popover-store.d.ts +2 -0
  63. package/dist/popover/popover-store.js +44 -0
  64. package/dist/popover/popover-store.js.map +1 -0
  65. package/dist/popover-store-DoCiTmUQ.d.ts +106 -0
  66. package/dist/popover-store-DoCiTmUQ.d.ts.map +1 -0
  67. package/dist/radio/radio-store.d.ts +42 -0
  68. package/dist/radio/radio-store.d.ts.map +1 -0
  69. package/dist/radio/radio-store.js +27 -0
  70. package/dist/radio/radio-store.js.map +1 -0
  71. package/dist/select/select-store.d.ts +116 -0
  72. package/dist/select/select-store.d.ts.map +1 -0
  73. package/dist/select/select-store.js +93 -0
  74. package/dist/select/select-store.js.map +1 -0
  75. package/dist/tab/tab-store.d.ts +127 -0
  76. package/dist/tab/tab-store.d.ts.map +1 -0
  77. package/dist/tab/tab-store.js +107 -0
  78. package/dist/tab/tab-store.js.map +1 -0
  79. package/dist/tag/tag-store.d.ts +2 -0
  80. package/dist/tag/tag-store.js +60 -0
  81. package/dist/tag/tag-store.js.map +1 -0
  82. package/dist/tag-store-D47X5_zA.d.ts +83 -0
  83. package/dist/tag-store-D47X5_zA.d.ts.map +1 -0
  84. package/dist/toolbar/toolbar-store.d.ts +21 -0
  85. package/dist/toolbar/toolbar-store.d.ts.map +1 -0
  86. package/dist/toolbar/toolbar-store.js +18 -0
  87. package/dist/toolbar/toolbar-store.js.map +1 -0
  88. package/dist/tooltip/tooltip-store.d.ts +35 -0
  89. package/dist/tooltip/tooltip-store.d.ts.map +1 -0
  90. package/dist/tooltip/tooltip-store.js +29 -0
  91. package/dist/tooltip/tooltip-store.js.map +1 -0
  92. package/license +21 -0
  93. package/package.json +121 -0
  94. package/readme.md +19 -0
  95. package/src/checkbox/checkbox-store.ts +93 -0
  96. package/src/collection/collection-store.ts +301 -0
  97. package/src/combobox/combobox-store.ts +382 -0
  98. package/src/composite/composite-overflow-store.ts +30 -0
  99. package/src/composite/composite-store.ts +711 -0
  100. package/src/dialog/dialog-store.ts +26 -0
  101. package/src/disclosure/disclosure-store.ts +226 -0
  102. package/src/form/form-store.ts +608 -0
  103. package/src/form/types.ts +44 -0
  104. package/src/hovercard/hovercard-store.ts +112 -0
  105. package/src/index.ts +1 -0
  106. package/src/menu/menu-bar-store.ts +28 -0
  107. package/src/menu/menu-store.ts +263 -0
  108. package/src/menubar/menubar-store.ts +51 -0
  109. package/src/popover/popover-store.ts +170 -0
  110. package/src/radio/radio-store.ts +80 -0
  111. package/src/select/select-store.ts +323 -0
  112. package/src/tab/tab-store.ts +330 -0
  113. package/src/tag/tag-store.ts +170 -0
  114. package/src/toolbar/toolbar-store.ts +47 -0
  115. 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> {}