@ariakit/react-core 0.4.3 → 0.4.5

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 (235) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/cjs/__chunks/{7DQ2LBH2.cjs → 3HMQOCLF.cjs} +23 -5
  3. package/cjs/__chunks/{AJF5DT5A.cjs → AY5J25V7.cjs} +2 -2
  4. package/cjs/__chunks/{HFNM6QV4.cjs → DAOFDKV2.cjs} +1 -1
  5. package/cjs/__chunks/{GYHP7IYG.cjs → DFXPO2ED.cjs} +2 -2
  6. package/cjs/__chunks/{3C4RFBCG.cjs → EYZZO5IT.cjs} +1 -1
  7. package/cjs/__chunks/{3MKOUH5M.cjs → GZ2NNSLV.cjs} +4 -4
  8. package/cjs/__chunks/ISJGSS4S.cjs +16 -0
  9. package/cjs/__chunks/{A356CGND.cjs → JDCTLYQ4.cjs} +1 -1
  10. package/cjs/__chunks/{T5BWR4CB.cjs → KDTFHBKU.cjs} +2 -2
  11. package/cjs/__chunks/{NZSB7HSZ.cjs → LY4LCJM6.cjs} +2 -2
  12. package/cjs/__chunks/{DCTXNU2X.cjs → N43E53E6.cjs} +3 -3
  13. package/cjs/__chunks/{IHFGURUM.cjs → NRPEUNJB.cjs} +2 -2
  14. package/cjs/__chunks/PVLZGFP6.cjs +34 -0
  15. package/cjs/__chunks/{CWS5RZSU.cjs → QJDA4LG6.cjs} +28 -17
  16. package/cjs/__chunks/{NDVZ37O3.cjs → RG6U7KAS.cjs} +22 -4
  17. package/cjs/__chunks/YWAHOWYE.cjs +25 -0
  18. package/cjs/__chunks/{3XXW4Y4D.cjs → Z2VL7JHX.cjs} +2 -2
  19. package/cjs/checkbox/checkbox-check.cjs +2 -2
  20. package/cjs/collection/collection-renderer.d.cts +0 -2
  21. package/cjs/collection/collection-renderer.d.ts +0 -2
  22. package/cjs/combobox/combobox-cancel.cjs +4 -4
  23. package/cjs/combobox/combobox-disclosure.cjs +4 -4
  24. package/cjs/combobox/combobox-item-check.cjs +2 -2
  25. package/cjs/combobox/combobox-item.cjs +19 -9
  26. package/cjs/combobox/combobox-item.d.cts +22 -12
  27. package/cjs/combobox/combobox-item.d.ts +22 -12
  28. package/cjs/combobox/combobox-popover.cjs +41 -16
  29. package/cjs/combobox/combobox-provider.cjs +3 -2
  30. package/cjs/combobox/combobox-store.cjs +6 -2
  31. package/cjs/combobox/combobox-store.d.cts +12 -4
  32. package/cjs/combobox/combobox-store.d.ts +12 -4
  33. package/cjs/combobox/combobox-value.cjs +32 -0
  34. package/cjs/combobox/combobox-value.d.cts +41 -0
  35. package/cjs/combobox/combobox-value.d.ts +41 -0
  36. package/cjs/combobox/combobox.cjs +79 -32
  37. package/cjs/combobox/combobox.d.cts +20 -0
  38. package/cjs/combobox/combobox.d.ts +20 -0
  39. package/cjs/composite/composite-input.cjs +91 -6
  40. package/cjs/composite/composite-input.d.cts +2 -0
  41. package/cjs/composite/composite-input.d.ts +2 -0
  42. package/cjs/composite/composite-item.cjs +3 -3
  43. package/cjs/composite/composite-overflow-disclosure.cjs +3 -3
  44. package/cjs/composite/composite-overflow.cjs +12 -12
  45. package/cjs/composite/composite-renderer.d.cts +0 -2
  46. package/cjs/composite/composite-renderer.d.ts +0 -2
  47. package/cjs/dialog/dialog-backdrop.cjs +3 -3
  48. package/cjs/dialog/dialog-dismiss.cjs +2 -2
  49. package/cjs/dialog/dialog.cjs +11 -11
  50. package/cjs/dialog/dialog.d.cts +4 -0
  51. package/cjs/dialog/dialog.d.ts +4 -0
  52. package/cjs/dialog/utils/disable-tree.cjs +3 -3
  53. package/cjs/dialog/utils/use-prevent-body-scroll.cjs +3 -3
  54. package/cjs/form/form-checkbox.cjs +1 -1
  55. package/cjs/form/form-push.cjs +1 -1
  56. package/cjs/form/form-radio.cjs +4 -4
  57. package/cjs/hovercard/hovercard-disclosure.cjs +1 -1
  58. package/cjs/hovercard/hovercard-dismiss.cjs +4 -4
  59. package/cjs/hovercard/hovercard.cjs +13 -13
  60. package/cjs/menu/menu-button-arrow.cjs +2 -2
  61. package/cjs/menu/menu-dismiss.cjs +4 -4
  62. package/cjs/menu/menu-item-check.cjs +2 -2
  63. package/cjs/menu/menu-item-checkbox.cjs +4 -4
  64. package/cjs/menu/menu-item-radio.cjs +7 -7
  65. package/cjs/menu/menu-item.cjs +4 -4
  66. package/cjs/menu/menu.cjs +14 -14
  67. package/cjs/popover/popover-disclosure-arrow.cjs +2 -2
  68. package/cjs/popover/popover-dismiss.cjs +3 -3
  69. package/cjs/popover/popover.cjs +12 -12
  70. package/cjs/radio/radio.cjs +4 -4
  71. package/cjs/select/select-arrow.cjs +3 -3
  72. package/cjs/select/select-item-check.cjs +2 -2
  73. package/cjs/select/select-item.cjs +4 -4
  74. package/cjs/select/select-popover.cjs +13 -13
  75. package/cjs/select/select-value.d.cts +8 -7
  76. package/cjs/select/select-value.d.ts +8 -7
  77. package/cjs/select/select.cjs +4 -4
  78. package/cjs/tab/tab-panel.cjs +2 -2
  79. package/cjs/tab/tab.cjs +7 -7
  80. package/cjs/tag/tag-context.cjs +25 -0
  81. package/cjs/tag/tag-context.d.cts +21 -0
  82. package/cjs/tag/tag-context.d.ts +21 -0
  83. package/cjs/tag/tag-input.cjs +191 -0
  84. package/cjs/tag/tag-input.d.cts +122 -0
  85. package/cjs/tag/tag-input.d.ts +122 -0
  86. package/cjs/tag/tag-list-label.cjs +56 -0
  87. package/cjs/tag/tag-list-label.d.cts +55 -0
  88. package/cjs/tag/tag-list-label.d.ts +55 -0
  89. package/cjs/tag/tag-list.cjs +141 -0
  90. package/cjs/tag/tag-list.d.cts +58 -0
  91. package/cjs/tag/tag-list.d.ts +58 -0
  92. package/cjs/tag/tag-provider.cjs +26 -0
  93. package/cjs/tag/tag-provider.d.cts +29 -0
  94. package/cjs/tag/tag-provider.d.ts +29 -0
  95. package/cjs/tag/tag-remove.cjs +119 -0
  96. package/cjs/tag/tag-remove.d.cts +67 -0
  97. package/cjs/tag/tag-remove.d.ts +67 -0
  98. package/cjs/tag/tag-store.cjs +15 -0
  99. package/cjs/tag/tag-store.d.cts +49 -0
  100. package/cjs/tag/tag-store.d.ts +49 -0
  101. package/cjs/tag/tag-value.cjs +29 -0
  102. package/cjs/tag/tag-value.d.cts +41 -0
  103. package/cjs/tag/tag-value.d.ts +41 -0
  104. package/cjs/tag/tag-values.cjs +29 -0
  105. package/cjs/tag/tag-values.d.cts +52 -0
  106. package/cjs/tag/tag-values.d.ts +52 -0
  107. package/cjs/tag/tag.cjs +130 -0
  108. package/cjs/tag/tag.d.cts +74 -0
  109. package/cjs/tag/tag.d.ts +74 -0
  110. package/cjs/tag/utils.cjs +8 -0
  111. package/cjs/tag/utils.d.cts +1 -0
  112. package/cjs/tag/utils.d.ts +1 -0
  113. package/cjs/toolbar/toolbar-container.cjs +4 -4
  114. package/cjs/toolbar/toolbar-input.cjs +4 -8
  115. package/cjs/toolbar/toolbar-input.d.cts +3 -2
  116. package/cjs/toolbar/toolbar-input.d.ts +3 -2
  117. package/cjs/toolbar/toolbar-item.cjs +4 -4
  118. package/cjs/tooltip/tooltip.cjs +14 -14
  119. package/combobox/combobox-value/package.json +8 -0
  120. package/esm/__chunks/{LABIXQLW.js → 44PDY2W5.js} +1 -1
  121. package/esm/__chunks/{FYNSL2D5.js → 5H3YXAUC.js} +1 -1
  122. package/esm/__chunks/{6VDNHSLX.js → 65LF6MEO.js} +2 -2
  123. package/esm/__chunks/{X3V2DT2U.js → 6YVAEELE.js} +1 -1
  124. package/esm/__chunks/{JCOBPKEI.js → BY6P32UK.js} +1 -1
  125. package/esm/__chunks/{ZFEEEZVE.js → DLLQM6DZ.js} +22 -4
  126. package/esm/__chunks/{NN4HLGKS.js → F2RFUFO2.js} +1 -1
  127. package/esm/__chunks/{NQ4PTILT.js → FGHVVLPU.js} +29 -18
  128. package/esm/__chunks/{2VWKZYYT.js → H5N72W37.js} +1 -1
  129. package/esm/__chunks/L7IM35RU.js +16 -0
  130. package/esm/__chunks/{HW63KLP5.js → M354SEUF.js} +1 -1
  131. package/esm/__chunks/{RAKW656I.js → Q4PZFBSW.js} +1 -1
  132. package/esm/__chunks/QNNHZL3W.js +25 -0
  133. package/esm/__chunks/{C5HA76JU.js → QZJOXZKA.js} +1 -1
  134. package/esm/__chunks/{XK6CE2M5.js → UKDZLPKH.js} +1 -1
  135. package/esm/__chunks/{ONUY4D7O.js → VGORKDMQ.js} +26 -8
  136. package/esm/__chunks/WYDDZRWN.js +34 -0
  137. package/esm/checkbox/checkbox-check.js +1 -1
  138. package/esm/collection/collection-renderer.d.ts +0 -2
  139. package/esm/combobox/combobox-cancel.js +4 -4
  140. package/esm/combobox/combobox-disclosure.js +4 -4
  141. package/esm/combobox/combobox-item-check.js +1 -1
  142. package/esm/combobox/combobox-item.d.ts +22 -12
  143. package/esm/combobox/combobox-item.js +19 -9
  144. package/esm/combobox/combobox-popover.js +40 -15
  145. package/esm/combobox/combobox-provider.js +2 -1
  146. package/esm/combobox/combobox-store.d.ts +12 -4
  147. package/esm/combobox/combobox-store.js +5 -1
  148. package/esm/combobox/combobox-value.d.ts +41 -0
  149. package/esm/combobox/combobox-value.js +32 -0
  150. package/esm/combobox/combobox.d.ts +20 -0
  151. package/esm/combobox/combobox.js +80 -33
  152. package/esm/composite/composite-input.d.ts +2 -0
  153. package/esm/composite/composite-input.js +92 -7
  154. package/esm/composite/composite-item.js +2 -2
  155. package/esm/composite/composite-overflow-disclosure.js +2 -2
  156. package/esm/composite/composite-overflow.js +11 -11
  157. package/esm/composite/composite-renderer.d.ts +0 -2
  158. package/esm/dialog/dialog-backdrop.js +2 -2
  159. package/esm/dialog/dialog-dismiss.js +1 -1
  160. package/esm/dialog/dialog.d.ts +4 -0
  161. package/esm/dialog/dialog.js +10 -10
  162. package/esm/dialog/utils/disable-tree.js +2 -2
  163. package/esm/dialog/utils/use-prevent-body-scroll.js +2 -2
  164. package/esm/form/form-checkbox.js +1 -1
  165. package/esm/form/form-push.js +1 -1
  166. package/esm/form/form-radio.js +3 -3
  167. package/esm/hovercard/hovercard-disclosure.js +1 -1
  168. package/esm/hovercard/hovercard-dismiss.js +3 -3
  169. package/esm/hovercard/hovercard.js +12 -12
  170. package/esm/menu/menu-button-arrow.js +1 -1
  171. package/esm/menu/menu-dismiss.js +3 -3
  172. package/esm/menu/menu-item-check.js +1 -1
  173. package/esm/menu/menu-item-checkbox.js +3 -3
  174. package/esm/menu/menu-item-radio.js +5 -5
  175. package/esm/menu/menu-item.js +3 -3
  176. package/esm/menu/menu.js +12 -12
  177. package/esm/popover/popover-disclosure-arrow.js +1 -1
  178. package/esm/popover/popover-dismiss.js +2 -2
  179. package/esm/popover/popover.js +11 -11
  180. package/esm/radio/radio.js +3 -3
  181. package/esm/select/select-arrow.js +2 -2
  182. package/esm/select/select-item-check.js +1 -1
  183. package/esm/select/select-item.js +4 -4
  184. package/esm/select/select-popover.js +11 -11
  185. package/esm/select/select-value.d.ts +8 -7
  186. package/esm/select/select.js +3 -3
  187. package/esm/tab/tab-panel.js +3 -3
  188. package/esm/tab/tab.js +5 -5
  189. package/esm/tag/tag-context.d.ts +21 -0
  190. package/esm/tag/tag-context.js +25 -0
  191. package/esm/tag/tag-input.d.ts +122 -0
  192. package/esm/tag/tag-input.js +191 -0
  193. package/esm/tag/tag-list-label.d.ts +55 -0
  194. package/esm/tag/tag-list-label.js +56 -0
  195. package/esm/tag/tag-list.d.ts +58 -0
  196. package/esm/tag/tag-list.js +141 -0
  197. package/esm/tag/tag-provider.d.ts +29 -0
  198. package/esm/tag/tag-provider.js +26 -0
  199. package/esm/tag/tag-remove.d.ts +67 -0
  200. package/esm/tag/tag-remove.js +119 -0
  201. package/esm/tag/tag-store.d.ts +49 -0
  202. package/esm/tag/tag-store.js +15 -0
  203. package/esm/tag/tag-value.d.ts +41 -0
  204. package/esm/tag/tag-value.js +29 -0
  205. package/esm/tag/tag-values.d.ts +52 -0
  206. package/esm/tag/tag-values.js +29 -0
  207. package/esm/tag/tag.d.ts +74 -0
  208. package/esm/tag/tag.js +130 -0
  209. package/esm/tag/utils.d.ts +1 -0
  210. package/esm/tag/utils.js +8 -0
  211. package/esm/toolbar/toolbar-container.js +3 -3
  212. package/esm/toolbar/toolbar-input.d.ts +3 -2
  213. package/esm/toolbar/toolbar-input.js +3 -7
  214. package/esm/toolbar/toolbar-item.js +3 -3
  215. package/esm/tooltip/tooltip.js +12 -12
  216. package/package.json +86 -2
  217. package/tag/tag/package.json +8 -0
  218. package/tag/tag-context/package.json +8 -0
  219. package/tag/tag-input/package.json +8 -0
  220. package/tag/tag-list/package.json +8 -0
  221. package/tag/tag-list-label/package.json +8 -0
  222. package/tag/tag-provider/package.json +8 -0
  223. package/tag/tag-remove/package.json +8 -0
  224. package/tag/tag-store/package.json +8 -0
  225. package/tag/tag-value/package.json +8 -0
  226. package/tag/tag-values/package.json +8 -0
  227. package/tag/utils/package.json +8 -0
  228. package/cjs/__chunks/WGZQRLXV.cjs +0 -84
  229. package/esm/__chunks/RPGNBKKU.js +0 -84
  230. package/cjs/__chunks/{37BRXQN7.cjs → BX2QEIBH.cjs} +3 -3
  231. package/cjs/__chunks/{PVYTX5U5.cjs → SL55T4ZB.cjs} +2 -2
  232. package/cjs/__chunks/{TSEXNK3K.cjs → VR6GCLOV.cjs} +2 -2
  233. package/esm/__chunks/{PTPUIM7N.js → 3TEK3C5Q.js} +3 -3
  234. package/esm/__chunks/{U2L67A6K.js → BC72XE6E.js} +3 -3
  235. package/esm/__chunks/{GOXKZAQI.js → CMFBAHKI.js} +3 -3
@@ -0,0 +1,191 @@
1
+ "use client";
2
+ import {
3
+ useCompositeItem
4
+ } from "../__chunks/VGORKDMQ.js";
5
+ import "../__chunks/IFMAUEA7.js";
6
+ import "../__chunks/PJ7ERAIM.js";
7
+ import {
8
+ useTagContext
9
+ } from "../__chunks/WYDDZRWN.js";
10
+ import "../__chunks/3IEDWLST.js";
11
+ import "../__chunks/QFI3MCMR.js";
12
+ import "../__chunks/6LTHW2TQ.js";
13
+ import "../__chunks/7JCFLN3D.js";
14
+ import "../__chunks/SHA3WOPI.js";
15
+ import {
16
+ createElement,
17
+ createHook,
18
+ forwardRef
19
+ } from "../__chunks/GUCZNEAD.js";
20
+ import "../__chunks/PWUXK5IM.js";
21
+ import {
22
+ useBooleanEvent,
23
+ useEvent,
24
+ useMergeRefs
25
+ } from "../__chunks/WOWUAP42.js";
26
+ import "../__chunks/XM66DUTO.js";
27
+ import {
28
+ __objRest,
29
+ __spreadProps,
30
+ __spreadValues
31
+ } from "../__chunks/4R3V3JGP.js";
32
+
33
+ // src/tag/tag-input.tsx
34
+ import { toArray } from "@ariakit/core/utils/array";
35
+ import {
36
+ getTextboxSelection,
37
+ setSelectionRange
38
+ } from "@ariakit/core/utils/dom";
39
+ import { getInputType } from "@ariakit/core/utils/events";
40
+ import { invariant } from "@ariakit/core/utils/misc";
41
+ import { UndoManager } from "@ariakit/core/utils/undo";
42
+ var TagName = "input";
43
+ var DEFAULT_DELIMITER = ["\n", ";", ",", /\s/];
44
+ function getDelimiters(delimiter, defaultDelimiter = DEFAULT_DELIMITER) {
45
+ const finalDelimiter = delimiter === void 0 ? defaultDelimiter : delimiter;
46
+ if (!finalDelimiter)
47
+ return [];
48
+ return toArray(finalDelimiter);
49
+ }
50
+ function splitValueByDelimiter(value, delimiters) {
51
+ for (const delimiter of delimiters) {
52
+ let match = value.match(delimiter);
53
+ while ((match == null ? void 0 : match.index) === 0) {
54
+ value = value.slice(match[0].length);
55
+ match = value.match(delimiter);
56
+ }
57
+ if (!match)
58
+ continue;
59
+ return value.split(delimiter);
60
+ }
61
+ return [];
62
+ }
63
+ var useTagInput = createHook(
64
+ function useTagInput2(_a) {
65
+ var _b = _a, {
66
+ store,
67
+ tabbable = true,
68
+ delimiter,
69
+ addValueOnPaste = true,
70
+ addValueOnChange = true,
71
+ setValueOnChange = true,
72
+ removeOnBackspace = true
73
+ } = _b, props = __objRest(_b, [
74
+ "store",
75
+ "tabbable",
76
+ "delimiter",
77
+ "addValueOnPaste",
78
+ "addValueOnChange",
79
+ "setValueOnChange",
80
+ "removeOnBackspace"
81
+ ]);
82
+ const context = useTagContext();
83
+ store = store || context;
84
+ invariant(
85
+ store,
86
+ process.env.NODE_ENV !== "production" && "TagInput must receive a `store` prop or be wrapped in a TagProvider component."
87
+ );
88
+ const value = store.useState("value");
89
+ const onPasteProp = props.onPaste;
90
+ const addValueOnPasteProp = useBooleanEvent(addValueOnPaste);
91
+ const onPaste = useEvent((event) => {
92
+ onPasteProp == null ? void 0 : onPasteProp(event);
93
+ if (event.defaultPrevented)
94
+ return;
95
+ const text = event.clipboardData.getData("text");
96
+ const delimiters = getDelimiters(delimiter);
97
+ const values = splitValueByDelimiter(text, delimiters).map((value2) => value2.trim()).filter((value2) => value2 !== "");
98
+ const eventWithValues = Object.assign(event, { values });
99
+ if (!addValueOnPasteProp(eventWithValues))
100
+ return;
101
+ if (!values.length)
102
+ return;
103
+ event.preventDefault();
104
+ for (const tagValue of values) {
105
+ store.addValue(tagValue);
106
+ }
107
+ });
108
+ const onChangeProp = props.onChange;
109
+ const setValueOnChangeProp = useBooleanEvent(setValueOnChange);
110
+ const addValueOnChangeProp = useBooleanEvent(addValueOnChange);
111
+ const onChange = useEvent((event) => {
112
+ onChangeProp == null ? void 0 : onChangeProp(event);
113
+ if (event.defaultPrevented)
114
+ return;
115
+ if (!store)
116
+ return;
117
+ const { value: prevValue } = store.getState();
118
+ const inputType = getInputType(event);
119
+ const currentTarget = event.currentTarget;
120
+ const { start, end } = getTextboxSelection(currentTarget);
121
+ const { value: value2 } = currentTarget;
122
+ if (setValueOnChangeProp(event)) {
123
+ UndoManager.execute(() => {
124
+ store.setValue(value2);
125
+ queueMicrotask(() => {
126
+ setSelectionRange(currentTarget, start, end);
127
+ });
128
+ if (value2 === prevValue)
129
+ return;
130
+ return () => store.setValue(prevValue);
131
+ }, inputType);
132
+ }
133
+ const isTrailingCaret = start === end && start === value2.length;
134
+ if (isTrailingCaret) {
135
+ const delimiters = getDelimiters(delimiter);
136
+ let values = splitValueByDelimiter(value2, delimiters);
137
+ const trailingvalue = values.pop() || "";
138
+ values = values.map((value3) => value3.trim()).filter((value3) => value3 !== "");
139
+ const eventWithValues = Object.assign(event, { values });
140
+ if (values.length && addValueOnChangeProp(eventWithValues)) {
141
+ event.preventDefault();
142
+ for (const tagValue of values) {
143
+ store.addValue(tagValue);
144
+ }
145
+ UndoManager.execute(() => {
146
+ store.setValue(trailingvalue);
147
+ if (trailingvalue === prevValue)
148
+ return;
149
+ return () => store.setValue(prevValue);
150
+ }, inputType);
151
+ }
152
+ }
153
+ });
154
+ const onKeyDownProp = props.onKeyDown;
155
+ const removeOnBackspaceProp = useBooleanEvent(removeOnBackspace);
156
+ const onKeyDown = useEvent((event) => {
157
+ onKeyDownProp == null ? void 0 : onKeyDownProp(event);
158
+ if (event.defaultPrevented)
159
+ return;
160
+ if (event.key === "Backspace" && removeOnBackspaceProp(event)) {
161
+ const { start, end } = getTextboxSelection(event.currentTarget);
162
+ const isLeadingCaret = start === end && start === 0;
163
+ if (!isLeadingCaret)
164
+ return;
165
+ store.setValues((values) => {
166
+ if (!values.length)
167
+ return values;
168
+ return values.slice(0, -1);
169
+ });
170
+ }
171
+ });
172
+ props = __spreadProps(__spreadValues({
173
+ value
174
+ }, props), {
175
+ ref: useMergeRefs(store.setInputElement, props.ref),
176
+ onPaste,
177
+ onChange,
178
+ onKeyDown
179
+ });
180
+ props = useCompositeItem(__spreadValues({ store, tabbable }, props));
181
+ return props;
182
+ }
183
+ );
184
+ var TagInput = forwardRef(function TagInput2(props) {
185
+ const htmlProps = useTagInput(props);
186
+ return createElement(TagName, htmlProps);
187
+ });
188
+ export {
189
+ TagInput,
190
+ useTagInput
191
+ };
@@ -0,0 +1,55 @@
1
+ import type { ElementType } from "react";
2
+ import type { CompositeOptions } from "../composite/composite.jsx";
3
+ import type { Props } from "../utils/types.js";
4
+ import type { TagStore } from "./tag-store.js";
5
+ declare const TagName = "label";
6
+ type TagName = typeof TagName;
7
+ /**
8
+ * Returns props to create a `TagListLabel` component.
9
+ * @see https://ariakit.org/components/tag
10
+ * @example
11
+ * ```jsx
12
+ * const props = useTagListLabel();
13
+ * <Role.label {...props} />
14
+ * ```
15
+ */
16
+ export declare const useTagListLabel: import("../utils/types.js").Hook<"label", TagListLabelOptions<"label">>;
17
+ /**
18
+ * Renders a label element for the
19
+ * [`TagInput`](https://ariakit.org/reference/tag-input) and also acts as the
20
+ * accessible name for the listbox element rendered by
21
+ * [`TagList`](https://ariakit.org/reference/tag-list).
22
+ * @see https://ariakit.org/components/tag
23
+ * @example
24
+ * ```jsx {2}
25
+ * <TagProvider>
26
+ * <TagListLabel>Invitees</TagListLabel>
27
+ * <TagList>
28
+ * <TagValues>
29
+ * {(values) =>
30
+ * values.map((value) => (
31
+ * <Tag key={value} value={value}>
32
+ * {value}
33
+ * <TagRemove />
34
+ * </Tag>
35
+ * ))
36
+ * }
37
+ * </TagValues>
38
+ * <TagInput />
39
+ * </TagList>
40
+ * </TagProvider>
41
+ * ```
42
+ */
43
+ export declare const TagListLabel: (props: TagListLabelProps) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
44
+ export interface TagListLabelOptions<T extends ElementType = TagName> extends CompositeOptions<T> {
45
+ /**
46
+ * Object returned by the
47
+ * [`useTagStore`](https://ariakit.org/reference/use-tag-store) hook. If not
48
+ * provided, the closest
49
+ * [`TagProvider`](https://ariakit.org/reference/tag-provider) component's
50
+ * context will be used.
51
+ */
52
+ store?: TagStore;
53
+ }
54
+ export type TagListLabelProps<T extends ElementType = TagName> = Props<T, TagListLabelOptions<T>>;
55
+ export {};
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import {
3
+ useTagContext
4
+ } from "../__chunks/WYDDZRWN.js";
5
+ import "../__chunks/QFI3MCMR.js";
6
+ import "../__chunks/6LTHW2TQ.js";
7
+ import {
8
+ createElement,
9
+ createHook,
10
+ forwardRef
11
+ } from "../__chunks/GUCZNEAD.js";
12
+ import {
13
+ useId,
14
+ useMergeRefs
15
+ } from "../__chunks/WOWUAP42.js";
16
+ import "../__chunks/XM66DUTO.js";
17
+ import {
18
+ __objRest,
19
+ __spreadProps,
20
+ __spreadValues
21
+ } from "../__chunks/4R3V3JGP.js";
22
+
23
+ // src/tag/tag-list-label.tsx
24
+ import { invariant } from "@ariakit/core/utils/misc";
25
+ var TagName = "label";
26
+ var useTagListLabel = createHook(
27
+ function useTagListLabel2(_a) {
28
+ var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
29
+ const context = useTagContext();
30
+ store = store || context;
31
+ invariant(
32
+ store,
33
+ process.env.NODE_ENV !== "production" && "TagListLabel must receive a `store` prop or be wrapped in a TagProvider component."
34
+ );
35
+ const id = useId(props.id);
36
+ const htmlFor = store.useState((state) => {
37
+ var _a2;
38
+ return (_a2 = state.inputElement) == null ? void 0 : _a2.id;
39
+ });
40
+ props = __spreadProps(__spreadValues({
41
+ id,
42
+ htmlFor
43
+ }, props), {
44
+ ref: useMergeRefs(store.setLabelElement, props.ref)
45
+ });
46
+ return props;
47
+ }
48
+ );
49
+ var TagListLabel = forwardRef(function TagListLabel2(props) {
50
+ const htmlProps = useTagListLabel(props);
51
+ return createElement(TagName, htmlProps);
52
+ });
53
+ export {
54
+ TagListLabel,
55
+ useTagListLabel
56
+ };
@@ -0,0 +1,58 @@
1
+ import type { ElementType } from "react";
2
+ import type { CompositeOptions } from "../composite/composite.js";
3
+ import type { Props } from "../utils/types.js";
4
+ import type { TagStore } from "./tag-store.js";
5
+ declare const TagName = "div";
6
+ type TagName = typeof TagName;
7
+ /**
8
+ * Returns props to create a `TagList` component.
9
+ * @see https://ariakit.org/components/tag
10
+ * @example
11
+ * ```jsx
12
+ * const props = useTagList();
13
+ * <Role.div {...props} />
14
+ * ```
15
+ */
16
+ export declare const useTagList: import("../utils/types.js").Hook<"div", TagListOptions<"div">>;
17
+ /**
18
+ * Renders a wrapper for [`Tag`](https://ariakit.org/reference/tag) and
19
+ * [`TagInput`](https://ariakit.org/reference/tag-input) components. This
20
+ * component is typically styled as an input field.
21
+ *
22
+ * The [`TagListLabel`](https://ariakit.org/reference/tag-list-label) component
23
+ * can be used to provide an accessible name for the listbox element that owns
24
+ * the tags.
25
+ * @see https://ariakit.org/components/tag
26
+ * @example
27
+ * ```jsx {3-15}
28
+ * <TagProvider>
29
+ * <TagListLabel>Invitees</TagListLabel>
30
+ * <TagList>
31
+ * <TagValues>
32
+ * {(values) =>
33
+ * values.map((value) => (
34
+ * <Tag key={value} value={value}>
35
+ * {value}
36
+ * <TagRemove />
37
+ * </Tag>
38
+ * ))
39
+ * }
40
+ * </TagValues>
41
+ * <TagInput />
42
+ * </TagList>
43
+ * </TagProvider>
44
+ * ```
45
+ */
46
+ export declare const TagList: (props: TagListProps) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
47
+ export interface TagListOptions<T extends ElementType = TagName> extends CompositeOptions<T> {
48
+ /**
49
+ * Object returned by the
50
+ * [`useTagStore`](https://ariakit.org/reference/use-tag-store) hook. If not
51
+ * provided, the closest
52
+ * [`TagProvider`](https://ariakit.org/reference/tag-provider) component's
53
+ * context will be used.
54
+ */
55
+ store?: TagStore;
56
+ }
57
+ export type TagListProps<T extends ElementType = TagName> = Props<T, TagListOptions<T>>;
58
+ export {};
@@ -0,0 +1,141 @@
1
+ "use client";
2
+ import {
3
+ useTouchDevice
4
+ } from "../__chunks/L7IM35RU.js";
5
+ import {
6
+ TagScopedContextProvider,
7
+ useTagProviderContext
8
+ } from "../__chunks/WYDDZRWN.js";
9
+ import {
10
+ useComposite
11
+ } from "../__chunks/CDZXDIC7.js";
12
+ import "../__chunks/3IEDWLST.js";
13
+ import "../__chunks/QFI3MCMR.js";
14
+ import "../__chunks/6LTHW2TQ.js";
15
+ import "../__chunks/7JCFLN3D.js";
16
+ import "../__chunks/SHA3WOPI.js";
17
+ import {
18
+ createElement,
19
+ createHook,
20
+ forwardRef
21
+ } from "../__chunks/GUCZNEAD.js";
22
+ import {
23
+ useEvent,
24
+ useWrapElement
25
+ } from "../__chunks/WOWUAP42.js";
26
+ import "../__chunks/XM66DUTO.js";
27
+ import {
28
+ __objRest,
29
+ __spreadProps,
30
+ __spreadValues
31
+ } from "../__chunks/4R3V3JGP.js";
32
+
33
+ // src/tag/tag-list.tsx
34
+ import { queueBeforeEvent } from "@ariakit/core/utils/events";
35
+ import { getClosestFocusable } from "@ariakit/core/utils/focus";
36
+ import { invariant } from "@ariakit/core/utils/misc";
37
+ import { isApple } from "@ariakit/core/utils/platform";
38
+ import { UndoManager } from "@ariakit/core/utils/undo";
39
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
40
+ var TagName = "div";
41
+ var useTagList = createHook(
42
+ function useTagList2(_a) {
43
+ var _b = _a, { store } = _b, props = __objRest(_b, ["store"]);
44
+ const context = useTagProviderContext();
45
+ store = store || context;
46
+ invariant(
47
+ store,
48
+ process.env.NODE_ENV !== "production" && "TagList must receive a `store` prop or be wrapped in a TagProvider component."
49
+ );
50
+ const onMouseDownProp = props.onMouseDown;
51
+ const onMouseDown = useEvent((event) => {
52
+ onMouseDownProp == null ? void 0 : onMouseDownProp(event);
53
+ if (event.defaultPrevented)
54
+ return;
55
+ const target = event.target;
56
+ const currentTarget = event.currentTarget;
57
+ const focusableTarget = getClosestFocusable(target);
58
+ const isSelfFocusable = focusableTarget === currentTarget;
59
+ if (!isSelfFocusable && currentTarget.contains(focusableTarget))
60
+ return;
61
+ const { inputElement } = store.getState();
62
+ queueBeforeEvent(event.currentTarget, "mouseup", () => {
63
+ inputElement == null ? void 0 : inputElement.focus();
64
+ });
65
+ });
66
+ const onKeyDownProp = props.onKeyDown;
67
+ const onKeyDown = useEvent((event) => {
68
+ onKeyDownProp == null ? void 0 : onKeyDownProp(event);
69
+ if (event.defaultPrevented)
70
+ return;
71
+ const pc = !isApple();
72
+ const z = event.key === "z" || event.key === "Z";
73
+ const mod = pc ? event.ctrlKey : event.metaKey;
74
+ const shiftZ = event.shiftKey && z || pc && event.key === "y";
75
+ if (mod && shiftZ) {
76
+ event.preventDefault();
77
+ UndoManager.redo();
78
+ } else if (mod && z) {
79
+ event.preventDefault();
80
+ UndoManager.undo();
81
+ }
82
+ });
83
+ props = useWrapElement(
84
+ props,
85
+ (element) => /* @__PURE__ */ jsx(TagScopedContextProvider, { value: store, children: element }),
86
+ [store]
87
+ );
88
+ props = __spreadProps(__spreadValues({}, props), {
89
+ onMouseDown,
90
+ onKeyDown
91
+ });
92
+ props = useComposite(__spreadValues({ store }, props));
93
+ const orientation = store.useState(
94
+ (state) => state.orientation === "both" ? void 0 : state.orientation
95
+ );
96
+ const items = store.useState((state) => state.renderedItems);
97
+ const itemIds = items.filter((item) => !!item.value).map((item) => item.id);
98
+ const labelId = store.useState((state) => {
99
+ var _a2;
100
+ return (_a2 = state.labelElement) == null ? void 0 : _a2.id;
101
+ });
102
+ const listboxProps = {};
103
+ for (const key in props) {
104
+ if (key === "role" || key.startsWith("aria-")) {
105
+ const prop = key;
106
+ listboxProps[prop] = props[prop];
107
+ delete props[prop];
108
+ }
109
+ }
110
+ const touchDevice = useTouchDevice();
111
+ const children = /* @__PURE__ */ jsxs(Fragment, { children: [
112
+ /* @__PURE__ */ jsx(
113
+ "div",
114
+ __spreadProps(__spreadValues({
115
+ role: touchDevice ? "list" : "listbox",
116
+ "aria-live": "polite",
117
+ "aria-relevant": "all",
118
+ "aria-atomic": true,
119
+ "aria-labelledby": labelId,
120
+ "aria-orientation": orientation,
121
+ "aria-owns": itemIds.join(" ")
122
+ }, listboxProps), {
123
+ style: { position: "fixed" }
124
+ })
125
+ ),
126
+ props.children
127
+ ] });
128
+ props = __spreadProps(__spreadValues({}, props), {
129
+ children
130
+ });
131
+ return props;
132
+ }
133
+ );
134
+ var TagList = forwardRef(function TagList2(props) {
135
+ const htmlProps = useTagList(props);
136
+ return createElement(TagName, htmlProps);
137
+ });
138
+ export {
139
+ TagList,
140
+ useTagList
141
+ };
@@ -0,0 +1,29 @@
1
+ import type { ReactNode } from "react";
2
+ import type { TagStoreProps } from "./tag-store.js";
3
+ /**
4
+ * Provides a tag store to [Tag](https://ariakit.org/components/tag) components.
5
+ * @see https://ariakit.org/components/tag
6
+ * @example
7
+ * ```jsx
8
+ * <TagProvider>
9
+ * <TagListLabel>Invitees</TagListLabel>
10
+ * <TagList>
11
+ * <TagValues>
12
+ * {(values) =>
13
+ * values.map((value) => (
14
+ * <Tag key={value} value={value}>
15
+ * {value}
16
+ * <TagRemove />
17
+ * </Tag>
18
+ * ))
19
+ * }
20
+ * </TagValues>
21
+ * <TagInput />
22
+ * </TagList>
23
+ * </TagProvider>
24
+ * ```
25
+ */
26
+ export declare function TagProvider(props?: TagProviderProps): import("react/jsx-runtime").JSX.Element;
27
+ export interface TagProviderProps extends TagStoreProps {
28
+ children?: ReactNode;
29
+ }
@@ -0,0 +1,26 @@
1
+ "use client";
2
+ import {
3
+ useTagStore
4
+ } from "../__chunks/QNNHZL3W.js";
5
+ import {
6
+ TagContextProvider
7
+ } from "../__chunks/WYDDZRWN.js";
8
+ import "../__chunks/ZR5N62ZV.js";
9
+ import "../__chunks/LGWSZOP2.js";
10
+ import "../__chunks/QFI3MCMR.js";
11
+ import "../__chunks/6LTHW2TQ.js";
12
+ import "../__chunks/GUCZNEAD.js";
13
+ import "../__chunks/PWUXK5IM.js";
14
+ import "../__chunks/WOWUAP42.js";
15
+ import "../__chunks/XM66DUTO.js";
16
+ import "../__chunks/4R3V3JGP.js";
17
+
18
+ // src/tag/tag-provider.tsx
19
+ import { jsx } from "react/jsx-runtime";
20
+ function TagProvider(props = {}) {
21
+ const store = useTagStore(props);
22
+ return /* @__PURE__ */ jsx(TagContextProvider, { value: store, children: props.children });
23
+ }
24
+ export {
25
+ TagProvider
26
+ };
@@ -0,0 +1,67 @@
1
+ import type { ElementType, MouseEvent } from "react";
2
+ import type { BooleanOrCallback } from "@ariakit/core/utils/types";
3
+ import type { Options, Props } from "../utils/types.js";
4
+ import type { TagStore } from "./tag-store.js";
5
+ declare const TagName = "button";
6
+ type TagName = typeof TagName;
7
+ type HTMLType = HTMLElementTagNameMap[TagName];
8
+ /**
9
+ * Returns props to create a `TagRemove` component.
10
+ * @see https://ariakit.org/components/tag
11
+ * @example
12
+ * ```jsx
13
+ * const props = useTagRemove();
14
+ * <Role.button {...props} />
15
+ * ```
16
+ */
17
+ export declare const useTagRemove: import("../utils/types.js").Hook<"button", TagRemoveOptions<"button">>;
18
+ /**
19
+ * Renders a `Backspace` icon inside a
20
+ * [`Tag`](https://ariakit.org/reference/tag) component that removes the tag
21
+ * when clicked with a mouse.
22
+ * @see https://ariakit.org/components/tag
23
+ * @example
24
+ * ```jsx {9}
25
+ * <TagProvider>
26
+ * <TagListLabel>Invitees</TagListLabel>
27
+ * <TagList>
28
+ * <TagValues>
29
+ * {(values) =>
30
+ * values.map((value) => (
31
+ * <Tag key={value} value={value}>
32
+ * {value}
33
+ * <TagRemove />
34
+ * </Tag>
35
+ * ))
36
+ * }
37
+ * </TagValues>
38
+ * <TagInput />
39
+ * </TagList>
40
+ * </TagProvider>
41
+ * ```
42
+ */
43
+ export declare const TagRemove: (props: TagRemoveProps) => import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>>;
44
+ export interface TagRemoveOptions<_T extends ElementType = TagName> extends Options {
45
+ /**
46
+ * Object returned by the
47
+ * [`useTagStore`](https://ariakit.org/reference/use-tag-store) hook. If not
48
+ * provided, the closest
49
+ * [`TagProvider`](https://ariakit.org/reference/tag-provider) component's
50
+ * context will be used.
51
+ */
52
+ store?: TagStore;
53
+ /**
54
+ * The value of the tag to remove. If not provided, the value will be inferred
55
+ * from the parent [`Tag`](https://ariakit.org/reference/tag) component.
56
+ */
57
+ value?: string;
58
+ /**
59
+ * Determines if the tag should be removed when clicked with a mouse. If a
60
+ * function is provided, it will be called with the click event and should
61
+ * return a boolean.
62
+ * @default true
63
+ */
64
+ removeOnClick?: BooleanOrCallback<MouseEvent<HTMLType>>;
65
+ }
66
+ export type TagRemoveProps<T extends ElementType = TagName> = Props<T, TagRemoveOptions<T>>;
67
+ export {};