@charcoal-ui/react 3.0.0-beta.2 → 3.0.0-beta.4

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 (186) hide show
  1. package/dist/_lib/compat.d.ts +19 -1
  2. package/dist/_lib/compat.d.ts.map +1 -1
  3. package/dist/_lib/index.d.ts +7 -0
  4. package/dist/_lib/index.d.ts.map +1 -1
  5. package/dist/components/Button/index.d.ts +1 -2
  6. package/dist/components/Button/index.d.ts.map +1 -1
  7. package/dist/components/Button/index.story.d.ts +1 -2
  8. package/dist/components/Button/index.story.d.ts.map +1 -1
  9. package/dist/components/Button/index.test.d.ts +4 -0
  10. package/dist/components/Button/index.test.d.ts.map +1 -0
  11. package/dist/components/Checkbox/index.d.ts +2 -1
  12. package/dist/components/Checkbox/index.d.ts.map +1 -1
  13. package/dist/components/Checkbox/index.story.d.ts +2 -2
  14. package/dist/components/Checkbox/index.story.d.ts.map +1 -1
  15. package/dist/components/Clickable/index.d.ts +1 -1
  16. package/dist/components/Clickable/index.d.ts.map +1 -1
  17. package/dist/components/Clickable/index.story.d.ts +1 -2
  18. package/dist/components/Clickable/index.story.d.ts.map +1 -1
  19. package/dist/components/DropdownSelector/Divider.d.ts +3 -0
  20. package/dist/components/DropdownSelector/Divider.d.ts.map +1 -1
  21. package/dist/components/DropdownSelector/DropdownMenuItem.d.ts +7 -0
  22. package/dist/components/DropdownSelector/DropdownMenuItem.d.ts.map +1 -0
  23. package/dist/components/DropdownSelector/DropdownPopover.d.ts +8 -8
  24. package/dist/components/DropdownSelector/DropdownPopover.d.ts.map +1 -1
  25. package/dist/components/DropdownSelector/ListItem/index.d.ts +18 -0
  26. package/dist/components/DropdownSelector/ListItem/index.d.ts.map +1 -0
  27. package/dist/components/DropdownSelector/ListItem/index.story.d.ts +9 -0
  28. package/dist/components/DropdownSelector/ListItem/index.story.d.ts.map +1 -0
  29. package/dist/components/DropdownSelector/MenuItem/index.d.ts +11 -0
  30. package/dist/components/DropdownSelector/MenuItem/index.d.ts.map +1 -0
  31. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.d.ts +9 -0
  32. package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.d.ts.map +1 -0
  33. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.d.ts +10 -0
  34. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.d.ts.map +1 -0
  35. package/dist/components/DropdownSelector/MenuItemGroup/index.d.ts +14 -0
  36. package/dist/components/DropdownSelector/MenuItemGroup/index.d.ts.map +1 -0
  37. package/dist/components/DropdownSelector/MenuList/MenuListContext.d.ts +10 -0
  38. package/dist/components/DropdownSelector/MenuList/MenuListContext.d.ts.map +1 -0
  39. package/dist/components/DropdownSelector/MenuList/index.d.ts +18 -0
  40. package/dist/components/DropdownSelector/MenuList/index.d.ts.map +1 -0
  41. package/dist/components/DropdownSelector/MenuList/index.story.d.ts +11 -0
  42. package/dist/components/DropdownSelector/MenuList/index.story.d.ts.map +1 -0
  43. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.d.ts +11 -0
  44. package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.d.ts.map +1 -0
  45. package/dist/components/DropdownSelector/Popover/index.d.ts +17 -0
  46. package/dist/components/DropdownSelector/Popover/index.d.ts.map +1 -0
  47. package/dist/components/DropdownSelector/Popover/index.story.d.ts +9 -0
  48. package/dist/components/DropdownSelector/Popover/index.story.d.ts.map +1 -0
  49. package/dist/components/DropdownSelector/index.d.ts +3 -10
  50. package/dist/components/DropdownSelector/index.d.ts.map +1 -1
  51. package/dist/components/DropdownSelector/index.story.d.ts +4 -4
  52. package/dist/components/DropdownSelector/index.story.d.ts.map +1 -1
  53. package/dist/components/DropdownSelector/utils/findPreviewRecursive.d.ts +12 -0
  54. package/dist/components/DropdownSelector/utils/findPreviewRecursive.d.ts.map +1 -0
  55. package/dist/components/FieldLabel/index.d.ts +1 -1
  56. package/dist/components/FieldLabel/index.d.ts.map +1 -1
  57. package/dist/components/Icon/index.d.ts +1 -1
  58. package/dist/components/Icon/index.d.ts.map +1 -1
  59. package/dist/components/Icon/index.story.d.ts +2 -3
  60. package/dist/components/Icon/index.story.d.ts.map +1 -1
  61. package/dist/components/IconButton/index.d.ts +1 -2
  62. package/dist/components/IconButton/index.d.ts.map +1 -1
  63. package/dist/components/IconButton/index.story.d.ts +1 -2
  64. package/dist/components/IconButton/index.story.d.ts.map +1 -1
  65. package/dist/components/LoadingSpinner/index.d.ts +9 -8
  66. package/dist/components/LoadingSpinner/index.d.ts.map +1 -1
  67. package/dist/components/LoadingSpinner/index.story.d.ts +1 -2
  68. package/dist/components/LoadingSpinner/index.story.d.ts.map +1 -1
  69. package/dist/components/Modal/ModalPlumbing.d.ts.map +1 -1
  70. package/dist/components/Modal/index.d.ts +18 -27
  71. package/dist/components/Modal/index.d.ts.map +1 -1
  72. package/dist/components/Modal/index.story.d.ts +12 -2
  73. package/dist/components/Modal/index.story.d.ts.map +1 -1
  74. package/dist/components/MultiSelect/context.d.ts +1 -1
  75. package/dist/components/MultiSelect/context.d.ts.map +1 -1
  76. package/dist/components/MultiSelect/index.d.ts +18 -6
  77. package/dist/components/MultiSelect/index.d.ts.map +1 -1
  78. package/dist/components/MultiSelect/index.story.d.ts +21 -16
  79. package/dist/components/MultiSelect/index.story.d.ts.map +1 -1
  80. package/dist/components/Radio/index.d.ts +13 -6
  81. package/dist/components/Radio/index.d.ts.map +1 -1
  82. package/dist/components/Radio/index.story.d.ts +11 -8
  83. package/dist/components/Radio/index.story.d.ts.map +1 -1
  84. package/dist/components/SegmentedControl/RadioGroupContext.d.ts +1 -1
  85. package/dist/components/SegmentedControl/RadioGroupContext.d.ts.map +1 -1
  86. package/dist/components/SegmentedControl/index.d.ts +2 -1
  87. package/dist/components/SegmentedControl/index.d.ts.map +1 -1
  88. package/dist/components/SegmentedControl/index.story.d.ts +1 -2
  89. package/dist/components/SegmentedControl/index.story.d.ts.map +1 -1
  90. package/dist/components/Switch/index.d.ts +3 -2
  91. package/dist/components/Switch/index.d.ts.map +1 -1
  92. package/dist/components/Switch/index.story.d.ts +1 -2
  93. package/dist/components/Switch/index.story.d.ts.map +1 -1
  94. package/dist/components/TagItem/index.d.ts +3 -3
  95. package/dist/components/TagItem/index.d.ts.map +1 -1
  96. package/dist/components/TagItem/index.story.d.ts +2 -3
  97. package/dist/components/TagItem/index.story.d.ts.map +1 -1
  98. package/dist/components/TextArea/TextArea.story.d.ts +28 -0
  99. package/dist/components/TextArea/TextArea.story.d.ts.map +1 -0
  100. package/dist/components/TextArea/index.d.ts +21 -0
  101. package/dist/components/TextArea/index.d.ts.map +1 -0
  102. package/dist/components/TextField/TextField.story.d.ts +28 -0
  103. package/dist/components/TextField/TextField.story.d.ts.map +1 -0
  104. package/dist/components/TextField/index.d.ts +8 -30
  105. package/dist/components/TextField/index.d.ts.map +1 -1
  106. package/dist/core/CharcoalProvider.d.ts +1 -1
  107. package/dist/core/CharcoalProvider.d.ts.map +1 -1
  108. package/dist/core/ComponentAbstraction.d.ts +1 -1
  109. package/dist/core/ComponentAbstraction.d.ts.map +1 -1
  110. package/dist/index.cjs.js +1064 -771
  111. package/dist/index.cjs.js.map +1 -1
  112. package/dist/index.d.ts +5 -3
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.esm.js +1028 -750
  115. package/dist/index.esm.js.map +1 -1
  116. package/dist/styled.d.ts +13 -13
  117. package/package.json +7 -7
  118. package/src/_lib/compat.ts +20 -1
  119. package/src/_lib/index.ts +23 -0
  120. package/src/components/Button/__snapshots__/index.test.tsx.snap +385 -0
  121. package/src/components/Button/index.story.tsx +1 -1
  122. package/src/components/Button/index.test.tsx +24 -0
  123. package/src/components/Button/index.tsx +2 -2
  124. package/src/components/Checkbox/index.story.tsx +1 -1
  125. package/src/components/Checkbox/index.tsx +4 -2
  126. package/src/components/Clickable/index.story.tsx +0 -1
  127. package/src/components/Clickable/index.tsx +1 -1
  128. package/src/components/DropdownSelector/Divider.tsx +3 -0
  129. package/src/components/DropdownSelector/DropdownMenuItem.tsx +40 -0
  130. package/src/components/DropdownSelector/DropdownPopover.tsx +21 -42
  131. package/src/components/DropdownSelector/ListItem/index.story.tsx +51 -0
  132. package/src/components/DropdownSelector/ListItem/index.tsx +58 -0
  133. package/src/components/DropdownSelector/MenuItem/index.tsx +31 -0
  134. package/src/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.tsx +43 -0
  135. package/src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx +55 -0
  136. package/src/components/DropdownSelector/MenuItemGroup/index.tsx +42 -0
  137. package/src/components/DropdownSelector/MenuList/MenuListContext.ts +17 -0
  138. package/src/components/DropdownSelector/MenuList/index.story.tsx +51 -0
  139. package/src/components/DropdownSelector/MenuList/index.tsx +51 -0
  140. package/src/components/DropdownSelector/MenuList/internals/getValuesRecursive.tsx +35 -0
  141. package/src/components/DropdownSelector/Popover/index.story.tsx +65 -0
  142. package/src/components/DropdownSelector/Popover/index.tsx +69 -0
  143. package/src/components/DropdownSelector/index.story.tsx +56 -21
  144. package/src/components/DropdownSelector/index.tsx +19 -60
  145. package/src/components/DropdownSelector/utils/findPreviewRecursive.tsx +39 -0
  146. package/src/components/FieldLabel/index.tsx +1 -1
  147. package/src/components/Icon/index.story.tsx +0 -1
  148. package/src/components/Icon/index.tsx +1 -1
  149. package/src/components/IconButton/index.story.tsx +0 -1
  150. package/src/components/IconButton/index.tsx +2 -2
  151. package/src/components/LoadingSpinner/index.story.tsx +8 -2
  152. package/src/components/LoadingSpinner/index.tsx +44 -29
  153. package/src/components/Modal/ModalPlumbing.tsx +0 -1
  154. package/src/components/Modal/index.story.tsx +0 -1
  155. package/src/components/Modal/index.tsx +19 -12
  156. package/src/components/MultiSelect/context.ts +2 -2
  157. package/src/components/MultiSelect/index.story.tsx +26 -27
  158. package/src/components/MultiSelect/index.test.tsx +5 -23
  159. package/src/components/MultiSelect/index.tsx +83 -78
  160. package/src/components/Radio/index.story.tsx +7 -9
  161. package/src/components/Radio/index.test.tsx +3 -4
  162. package/src/components/Radio/index.tsx +24 -23
  163. package/src/components/SegmentedControl/RadioGroupContext.tsx +2 -1
  164. package/src/components/SegmentedControl/index.story.tsx +0 -1
  165. package/src/components/SegmentedControl/index.tsx +16 -5
  166. package/src/components/Switch/index.story.tsx +1 -1
  167. package/src/components/Switch/index.tsx +38 -32
  168. package/src/components/TagItem/index.story.tsx +0 -1
  169. package/src/components/TagItem/index.tsx +1 -6
  170. package/src/components/TextArea/TextArea.story.tsx +61 -0
  171. package/src/components/TextArea/index.tsx +246 -0
  172. package/src/components/TextField/{index.story.tsx → TextField.story.tsx} +6 -29
  173. package/src/components/TextField/index.tsx +148 -378
  174. package/src/components/a11y.test.tsx +0 -1
  175. package/src/core/CharcoalProvider.tsx +1 -1
  176. package/src/core/ComponentAbstraction.tsx +2 -1
  177. package/src/index.ts +8 -6
  178. package/dist/components/DropdownSelector/OptionItem.d.ts +0 -7
  179. package/dist/components/DropdownSelector/OptionItem.d.ts.map +0 -1
  180. package/dist/components/DropdownSelector/utils/focusIfHTMLLIElement.d.ts +0 -6
  181. package/dist/components/DropdownSelector/utils/focusIfHTMLLIElement.d.ts.map +0 -1
  182. package/dist/components/DropdownSelector/utils/handleFocusByKeyBoard.d.ts +0 -6
  183. package/dist/components/DropdownSelector/utils/handleFocusByKeyBoard.d.ts.map +0 -1
  184. package/src/components/DropdownSelector/OptionItem.tsx +0 -85
  185. package/src/components/DropdownSelector/utils/focusIfHTMLLIElement.tsx +0 -12
  186. package/src/components/DropdownSelector/utils/handleFocusByKeyBoard.tsx +0 -20
package/dist/index.cjs.js CHANGED
@@ -31,49 +31,53 @@ __export(src_exports, {
31
31
  Checkbox: () => Checkbox_default,
32
32
  Clickable: () => Clickable_default,
33
33
  ComponentAbstraction: () => ComponentAbstraction,
34
+ DropdownMenuItem: () => DropdownMenuItem,
34
35
  DropdownSelector: () => DropdownSelector,
35
36
  Icon: () => Icon_default,
36
37
  IconButton: () => IconButton_default,
37
- LoadingSpinner: () => LoadingSpinner,
38
+ LoadingSpinner: () => LoadingSpinner_default,
38
39
  LoadingSpinnerIcon: () => LoadingSpinnerIcon,
39
- Modal: () => Modal,
40
+ MenuItemGroup: () => MenuItemGroup,
41
+ Modal: () => Modal_default,
40
42
  ModalAlign: () => ModalAlign,
41
43
  ModalBody: () => ModalBody,
42
44
  ModalButtons: () => ModalButtons,
43
45
  ModalHeader: () => ModalHeader,
44
- MultiSelect: () => MultiSelect,
46
+ MultiSelect: () => MultiSelect_default,
45
47
  MultiSelectGroup: () => MultiSelectGroup,
46
- OptionItem: () => OptionItem,
47
48
  OverlayProvider: () => import_overlays.OverlayProvider,
48
- Radio: () => Radio,
49
+ Radio: () => Radio_default,
49
50
  RadioGroup: () => RadioGroup,
50
51
  SSRProvider: () => import_ssr.SSRProvider,
51
52
  SegmentedControl: () => SegmentedControl_default,
52
- Switch: () => SwitchCheckbox,
53
+ Switch: () => Switch_default,
53
54
  TagItem: () => TagItem_default,
55
+ TextArea: () => TextArea_default,
54
56
  TextField: () => TextField_default,
55
57
  useComponentAbstraction: () => useComponentAbstraction
56
58
  });
57
59
  module.exports = __toCommonJS(src_exports);
58
60
 
59
61
  // src/core/ComponentAbstraction.tsx
60
- var import_react = __toESM(require("react"));
61
- var DefaultLink = import_react.default.forwardRef(
62
+ var import_react = require("react");
63
+ var React = __toESM(require("react"));
64
+ var import_jsx_runtime = require("react/jsx-runtime");
65
+ var DefaultLink = React.forwardRef(
62
66
  function DefaultLink2({ to, children, ...rest }, ref) {
63
- return /* @__PURE__ */ import_react.default.createElement("a", { href: to, ref, ...rest }, children);
67
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: to, ref, ...rest, children });
64
68
  }
65
69
  );
66
70
  var DefaultValue = {
67
71
  Link: DefaultLink
68
72
  };
69
- var ComponentAbstractionContext = import_react.default.createContext(DefaultValue);
73
+ var ComponentAbstractionContext = React.createContext(DefaultValue);
70
74
  function ComponentAbstraction({ children, components }) {
71
- return /* @__PURE__ */ import_react.default.createElement(
75
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
72
76
  ComponentAbstractionContext.Provider,
73
77
  {
74
- value: { ...DefaultValue, ...components }
75
- },
76
- children
78
+ value: { ...DefaultValue, ...components },
79
+ children
80
+ }
77
81
  );
78
82
  }
79
83
  function useComponentAbstraction() {
@@ -87,9 +91,9 @@ var import_ssr = require("@react-aria/ssr");
87
91
  var import_overlays = require("@react-aria/overlays");
88
92
 
89
93
  // src/core/CharcoalProvider.tsx
90
- var import_react2 = __toESM(require("react"));
91
94
  var import_styled_components = require("styled-components");
92
95
  var import_styled = require("@charcoal-ui/styled");
96
+ var import_jsx_runtime2 = require("react/jsx-runtime");
93
97
  function CharcoalProvider({
94
98
  themeMap,
95
99
  defaultTheme = themeMap[":root"],
@@ -97,11 +101,14 @@ function CharcoalProvider({
97
101
  injectTokens = true,
98
102
  children
99
103
  }) {
100
- return /* @__PURE__ */ import_react2.default.createElement(import_ssr.SSRProvider, null, /* @__PURE__ */ import_react2.default.createElement(import_styled_components.ThemeProvider, { theme: defaultTheme }, injectTokens && /* @__PURE__ */ import_react2.default.createElement(import_styled.TokenInjector, { theme: themeMap }), /* @__PURE__ */ import_react2.default.createElement(ComponentAbstraction, { components }, /* @__PURE__ */ import_react2.default.createElement(import_overlays.OverlayProvider, null, children))));
104
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_ssr.SSRProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_styled_components.ThemeProvider, { theme: defaultTheme, children: [
105
+ injectTokens && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_styled.TokenInjector, { theme: themeMap }),
106
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ComponentAbstraction, { components, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_overlays.OverlayProvider, { children }) })
107
+ ] }) });
101
108
  }
102
109
 
103
110
  // src/components/Button/index.tsx
104
- var import_react4 = __toESM(require("react"));
111
+ var import_react2 = require("react");
105
112
  var import_styled_components4 = __toESM(require("styled-components"));
106
113
 
107
114
  // src/_lib/index.ts
@@ -110,6 +117,21 @@ function unreachable(value) {
110
117
  arguments.length === 0 ? "unreachable" : `unreachable (${JSON.stringify(value)})`
111
118
  );
112
119
  }
120
+ function mergeRefs(...refs) {
121
+ return (value) => {
122
+ for (const ref of refs) {
123
+ if (typeof ref === "function") {
124
+ ref(value);
125
+ } else if (ref !== null) {
126
+ ;
127
+ ref.current = value;
128
+ }
129
+ }
130
+ };
131
+ }
132
+ function countCodePointsInString(string) {
133
+ return Array.from(string).length;
134
+ }
113
135
 
114
136
  // src/styled.ts
115
137
  var import_styled_components2 = __toESM(require("styled-components"));
@@ -117,15 +139,16 @@ var import_styled2 = require("@charcoal-ui/styled");
117
139
  var theme = (0, import_styled2.createTheme)(import_styled_components2.default);
118
140
 
119
141
  // src/components/Clickable/index.tsx
120
- var import_react3 = __toESM(require("react"));
142
+ var React2 = __toESM(require("react"));
121
143
  var import_styled_components3 = __toESM(require("styled-components"));
122
144
  var import_utils = require("@charcoal-ui/utils");
123
- var Clickable = import_react3.default.forwardRef(
145
+ var import_jsx_runtime3 = require("react/jsx-runtime");
146
+ var Clickable = React2.forwardRef(
124
147
  function Clickable2(props, ref) {
125
148
  const { Link } = useComponentAbstraction();
126
149
  if ("to" in props) {
127
150
  const { onClick, disabled = false, ...rest } = props;
128
- return /* @__PURE__ */ import_react3.default.createElement(
151
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
129
152
  A,
130
153
  {
131
154
  ...rest,
@@ -136,7 +159,7 @@ var Clickable = import_react3.default.forwardRef(
136
159
  }
137
160
  );
138
161
  } else {
139
- return /* @__PURE__ */ import_react3.default.createElement(Button, { ...props, ref });
162
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Button, { ...props, ref });
140
163
  }
141
164
  }
142
165
  );
@@ -201,7 +224,8 @@ var A = import_styled_components3.default.span`
201
224
  `;
202
225
 
203
226
  // src/components/Button/index.tsx
204
- var Button2 = import_react4.default.forwardRef(function Button3({
227
+ var import_jsx_runtime4 = require("react/jsx-runtime");
228
+ var Button2 = (0, import_react2.forwardRef)(function Button3({
205
229
  children,
206
230
  variant = "Default",
207
231
  size = "M",
@@ -209,7 +233,7 @@ var Button2 = import_react4.default.forwardRef(function Button3({
209
233
  disabled = false,
210
234
  ...rest
211
235
  }, ref) {
212
- return /* @__PURE__ */ import_react4.default.createElement(
236
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
213
237
  StyledButton,
214
238
  {
215
239
  ...rest,
@@ -217,9 +241,9 @@ var Button2 = import_react4.default.forwardRef(function Button3({
217
241
  variant,
218
242
  size,
219
243
  fullWidth: fixed,
220
- ref
221
- },
222
- children
244
+ ref,
245
+ children
246
+ }
223
247
  );
224
248
  });
225
249
  var Button_default = Button2;
@@ -288,12 +312,13 @@ function sizeToProps(size) {
288
312
  }
289
313
 
290
314
  // src/components/IconButton/index.tsx
291
- var import_react5 = __toESM(require("react"));
315
+ var import_react3 = require("react");
292
316
  var import_styled_components5 = __toESM(require("styled-components"));
293
- var IconButton = import_react5.default.forwardRef(
317
+ var import_jsx_runtime5 = require("react/jsx-runtime");
318
+ var IconButton = (0, import_react3.forwardRef)(
294
319
  function IconButtonInner({ variant = "Default", size = "M", icon, ...rest }, ref) {
295
320
  validateIconSize(size, icon);
296
- return /* @__PURE__ */ import_react5.default.createElement(StyledIconButton, { ...rest, ref, variant, size }, /* @__PURE__ */ import_react5.default.createElement("pixiv-icon", { name: icon }));
321
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(StyledIconButton, { ...rest, ref, variant, size, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("pixiv-icon", { name: icon }) });
297
322
  }
298
323
  );
299
324
  var IconButton_default = IconButton;
@@ -372,24 +397,21 @@ function validateIconSize(size, icon) {
372
397
  }
373
398
 
374
399
  // src/components/Radio/index.tsx
375
- var import_react6 = __toESM(require("react"));
400
+ var import_react4 = require("react");
401
+ var React3 = __toESM(require("react"));
376
402
  var import_styled_components6 = __toESM(require("styled-components"));
377
403
  var import_warning = __toESM(require("warning"));
378
404
  var import_utils2 = require("@charcoal-ui/utils");
379
- function Radio({
380
- value,
381
- forceChecked = false,
382
- disabled = false,
383
- children
384
- }) {
405
+ var import_jsx_runtime6 = require("react/jsx-runtime");
406
+ var Radio = (0, import_react4.forwardRef)(function RadioInner({ value, disabled = false, children, className }, ref) {
385
407
  const {
386
408
  name,
387
409
  selected,
388
410
  disabled: isParentDisabled,
389
411
  readonly,
390
- hasError,
412
+ invalid,
391
413
  onChange
392
- } = (0, import_react6.useContext)(RadioGroupContext);
414
+ } = (0, import_react4.useContext)(RadioGroupContext);
393
415
  (0, import_warning.default)(
394
416
  name !== void 0,
395
417
  `"name" is not Provided for <Radio>. Perhaps you forgot to wrap with <RadioGroup> ?`
@@ -397,28 +419,33 @@ function Radio({
397
419
  const isSelected = value === selected;
398
420
  const isDisabled = disabled || isParentDisabled;
399
421
  const isReadonly = readonly && !isSelected;
400
- const handleChange = (0, import_react6.useCallback)(
422
+ const handleChange = (0, import_react4.useCallback)(
401
423
  (e) => {
402
424
  onChange(e.currentTarget.value);
403
425
  },
404
426
  [onChange]
405
427
  );
406
- return /* @__PURE__ */ import_react6.default.createElement(RadioRoot, { "aria-disabled": isDisabled || isReadonly }, /* @__PURE__ */ import_react6.default.createElement(
407
- RadioInput,
408
- {
409
- name,
410
- value,
411
- checked: forceChecked || isSelected,
412
- hasError,
413
- onChange: handleChange,
414
- disabled: isDisabled || isReadonly
415
- }
416
- ), children != null && /* @__PURE__ */ import_react6.default.createElement(RadioLabel, null, children));
417
- }
428
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(RadioRoot, { "aria-disabled": isDisabled || isReadonly, className, children: [
429
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
430
+ RadioInput,
431
+ {
432
+ name,
433
+ value,
434
+ checked: isSelected,
435
+ invalid,
436
+ onChange: handleChange,
437
+ disabled: isDisabled || isReadonly,
438
+ ref
439
+ }
440
+ ),
441
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(RadioLabel, { children })
442
+ ] });
443
+ });
444
+ var Radio_default = (0, import_react4.memo)(Radio);
418
445
  var RadioRoot = import_styled_components6.default.label`
419
446
  display: grid;
420
447
  grid-template-columns: auto 1fr;
421
- grid-gap: ${({ theme: theme4 }) => (0, import_utils2.px)(theme4.spacing[4])};
448
+ grid-gap: ${({ theme: theme3 }) => (0, import_utils2.px)(theme3.spacing[4])};
422
449
  align-items: center;
423
450
  cursor: pointer;
424
451
 
@@ -436,19 +463,18 @@ var RadioInput = import_styled_components6.default.input.attrs({ type: "radio" }
436
463
 
437
464
  width: 20px;
438
465
  height: 20px;
439
-
440
466
  cursor: pointer;
441
467
 
442
- ${({ hasError = false }) => theme((o) => [
468
+ ${({ invalid = false }) => theme((o) => [
443
469
  o.borderRadius("oval"),
444
470
  o.bg.surface1.hover.press,
445
- hasError && o.outline.assertive
471
+ invalid && o.outline.assertive
446
472
  ])};
447
473
 
448
474
  &:not(:checked) {
449
475
  border-width: 2px;
450
476
  border-style: solid;
451
- border-color: ${({ theme: theme4 }) => theme4.color.text3};
477
+ border-color: ${({ theme: theme3 }) => theme3.color.text3};
452
478
  }
453
479
 
454
480
  &:checked {
@@ -477,14 +503,14 @@ var RadioLabel = import_styled_components6.default.div`
477
503
  var StyledRadioGroup = import_styled_components6.default.div`
478
504
  display: grid;
479
505
  grid-template-columns: 1fr;
480
- grid-gap: ${({ theme: theme4 }) => (0, import_utils2.px)(theme4.spacing[8])};
506
+ grid-gap: ${({ theme: theme3 }) => (0, import_utils2.px)(theme3.spacing[8])};
481
507
  `;
482
- var RadioGroupContext = import_react6.default.createContext({
508
+ var RadioGroupContext = React3.createContext({
483
509
  name: void 0,
484
510
  selected: void 0,
485
511
  disabled: false,
486
512
  readonly: false,
487
- hasError: false,
513
+ invalid: false,
488
514
  onChange() {
489
515
  throw new Error(
490
516
  "Cannot find onChange() handler. Perhaps you forgot to wrap with <RadioGroup> ?"
@@ -499,16 +525,16 @@ function RadioGroup({
499
525
  onChange,
500
526
  disabled,
501
527
  readonly,
502
- hasError,
528
+ invalid,
503
529
  children
504
530
  }) {
505
- const handleChange = (0, import_react6.useCallback)(
531
+ const handleChange = (0, import_react4.useCallback)(
506
532
  (next) => {
507
533
  onChange(next);
508
534
  },
509
535
  [onChange]
510
536
  );
511
- return /* @__PURE__ */ import_react6.default.createElement(
537
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
512
538
  RadioGroupContext.Provider,
513
539
  {
514
540
  value: {
@@ -516,38 +542,38 @@ function RadioGroup({
516
542
  selected: value,
517
543
  disabled: disabled ?? false,
518
544
  readonly: readonly ?? false,
519
- hasError: hasError ?? false,
545
+ invalid: invalid ?? false,
520
546
  onChange: handleChange
521
- }
522
- },
523
- /* @__PURE__ */ import_react6.default.createElement(
524
- StyledRadioGroup,
525
- {
526
- role: "radiogroup",
527
- "aria-orientation": "vertical",
528
- "aria-label": label,
529
- "aria-invalid": hasError,
530
- className
531
547
  },
532
- children
533
- )
548
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
549
+ StyledRadioGroup,
550
+ {
551
+ role: "radiogroup",
552
+ "aria-orientation": "vertical",
553
+ "aria-label": label,
554
+ "aria-invalid": invalid,
555
+ className,
556
+ children
557
+ }
558
+ )
559
+ }
534
560
  );
535
561
  }
536
562
 
537
563
  // src/components/MultiSelect/index.tsx
538
- var import_react8 = __toESM(require("react"));
564
+ var import_react6 = require("react");
539
565
  var import_styled_components7 = __toESM(require("styled-components"));
540
566
  var import_warning2 = __toESM(require("warning"));
541
567
  var import_utils3 = require("@charcoal-ui/utils");
542
568
 
543
569
  // src/components/MultiSelect/context.ts
544
- var import_react7 = require("react");
545
- var MultiSelectGroupContext = (0, import_react7.createContext)({
570
+ var import_react5 = require("react");
571
+ var MultiSelectGroupContext = (0, import_react5.createContext)({
546
572
  name: void 0,
547
573
  selected: [],
548
574
  disabled: false,
549
575
  readonly: false,
550
- hasError: false,
576
+ invalid: false,
551
577
  onChange() {
552
578
  throw new Error(
553
579
  "Cannot find `onChange()` handler. Perhaps you forgot to wrap it with `<MultiSelectGroup />` ?"
@@ -556,63 +582,72 @@ var MultiSelectGroupContext = (0, import_react7.createContext)({
556
582
  });
557
583
 
558
584
  // src/components/MultiSelect/index.tsx
559
- function MultiSelect({
560
- value,
561
- forceChecked = false,
562
- disabled = false,
563
- onChange,
564
- variant = "default",
565
- children
566
- }) {
567
- const {
568
- name,
569
- selected,
570
- disabled: parentDisabled,
571
- readonly,
572
- hasError,
573
- onChange: parentOnChange
574
- } = (0, import_react8.useContext)(MultiSelectGroupContext);
575
- (0, import_warning2.default)(
576
- name !== void 0,
577
- `"name" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`
578
- );
579
- const isSelected = selected.includes(value) || forceChecked;
580
- const isDisabled = disabled || parentDisabled || readonly;
581
- const handleChange = (0, import_react8.useCallback)(
582
- (event) => {
583
- if (!(event.currentTarget instanceof HTMLInputElement)) {
584
- return;
585
- }
586
- if (onChange)
587
- onChange({ value, selected: event.currentTarget.checked });
588
- parentOnChange({ value, selected: event.currentTarget.checked });
589
- },
590
- [onChange, parentOnChange, value]
591
- );
592
- return /* @__PURE__ */ import_react8.default.createElement(MultiSelectRoot, { "aria-disabled": isDisabled }, /* @__PURE__ */ import_react8.default.createElement(
593
- MultiSelectInput,
594
- {
595
- ...{
596
- name,
597
- value,
598
- hasError
585
+ var import_jsx_runtime7 = require("react/jsx-runtime");
586
+ var MultiSelect = (0, import_react6.forwardRef)(
587
+ function MultiSelectInner({
588
+ value,
589
+ disabled = false,
590
+ onChange,
591
+ variant = "default",
592
+ className,
593
+ children
594
+ }, ref) {
595
+ const {
596
+ name,
597
+ selected,
598
+ disabled: parentDisabled,
599
+ readonly,
600
+ invalid,
601
+ onChange: parentOnChange
602
+ } = (0, import_react6.useContext)(MultiSelectGroupContext);
603
+ (0, import_warning2.default)(
604
+ name !== void 0,
605
+ `"name" is not Provided for <MultiSelect>. Perhaps you forgot to wrap with <MultiSelectGroup> ?`
606
+ );
607
+ const isSelected = selected.includes(value);
608
+ const isDisabled = disabled || parentDisabled || readonly;
609
+ const handleChange = (0, import_react6.useCallback)(
610
+ (event) => {
611
+ if (!(event.currentTarget instanceof HTMLInputElement)) {
612
+ return;
613
+ }
614
+ if (onChange)
615
+ onChange({ value, selected: event.currentTarget.checked });
616
+ parentOnChange({ value, selected: event.currentTarget.checked });
599
617
  },
600
- checked: isSelected,
601
- disabled: isDisabled,
602
- onChange: handleChange,
603
- overlay: variant === "overlay",
604
- "aria-invalid": hasError
605
- }
606
- ), /* @__PURE__ */ import_react8.default.createElement(
607
- MultiSelectInputOverlay,
608
- {
609
- overlay: variant === "overlay",
610
- hasError,
611
- "aria-hidden": true
612
- },
613
- /* @__PURE__ */ import_react8.default.createElement("pixiv-icon", { name: "24/Check", "unsafe-non-guideline-scale": 16 / 24 })
614
- ), Boolean(children) && /* @__PURE__ */ import_react8.default.createElement(MultiSelectLabel, null, children));
615
- }
618
+ [onChange, parentOnChange, value]
619
+ );
620
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(MultiSelectRoot, { "aria-disabled": isDisabled, className, children: [
621
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
622
+ MultiSelectInput,
623
+ {
624
+ ...{
625
+ name,
626
+ value,
627
+ invalid
628
+ },
629
+ checked: isSelected,
630
+ disabled: isDisabled,
631
+ onChange: handleChange,
632
+ overlay: variant === "overlay",
633
+ "aria-invalid": invalid,
634
+ ref
635
+ }
636
+ ),
637
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
638
+ MultiSelectInputOverlay,
639
+ {
640
+ overlay: variant === "overlay",
641
+ invalid,
642
+ "aria-hidden": true,
643
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("pixiv-icon", { name: "24/Check", "unsafe-non-guideline-scale": 16 / 24 })
644
+ }
645
+ ),
646
+ Boolean(children) && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(MultiSelectLabel, { children })
647
+ ] });
648
+ }
649
+ );
650
+ var MultiSelect_default = (0, import_react6.memo)(MultiSelect);
616
651
  var MultiSelectRoot = import_styled_components7.default.label`
617
652
  display: grid;
618
653
  grid-template-columns: auto 1fr;
@@ -622,7 +657,7 @@ var MultiSelectRoot = import_styled_components7.default.label`
622
657
  ${import_utils3.disabledSelector} {
623
658
  cursor: default;
624
659
  }
625
- gap: ${({ theme: theme4 }) => (0, import_utils3.px)(theme4.spacing[4])};
660
+ gap: ${({ theme: theme3 }) => (0, import_utils3.px)(theme3.spacing[4])};
626
661
  ${theme((o) => o.disabled)}
627
662
  `;
628
663
  var MultiSelectLabel = import_styled_components7.default.div`
@@ -642,10 +677,10 @@ var MultiSelectInput = import_styled_components7.default.input.attrs({ type: "ch
642
677
  ${theme((o) => o.bg.brand.hover.press)}
643
678
  }
644
679
 
645
- ${({ hasError, overlay }) => theme((o) => [
680
+ ${({ invalid, overlay }) => theme((o) => [
646
681
  o.bg.text3.hover.press,
647
682
  o.borderRadius("oval"),
648
- hasError && !overlay && o.outline.assertive,
683
+ invalid && !overlay && o.outline.assertive,
649
684
  overlay && o.bg.surface4
650
685
  ])};
651
686
  }
@@ -659,16 +694,16 @@ var MultiSelectInputOverlay = import_styled_components7.default.div`
659
694
  align-items: center;
660
695
  justify-content: center;
661
696
 
662
- ${({ hasError, overlay }) => theme((o) => [
697
+ ${({ invalid, overlay }) => theme((o) => [
663
698
  o.width.px(24),
664
699
  o.height.px(24),
665
700
  o.borderRadius("oval"),
666
701
  o.font.text5,
667
- hasError && overlay && o.outline.assertive
702
+ invalid && overlay && o.outline.assertive
668
703
  ])}
669
704
 
670
705
  ${({ overlay }) => overlay && import_styled_components7.css`
671
- border-color: ${({ theme: theme4 }) => theme4.color.text5};
706
+ border-color: ${({ theme: theme3 }) => theme3.color.text5};
672
707
  border-width: 2px;
673
708
  border-style: solid;
674
709
  `}
@@ -676,15 +711,15 @@ var MultiSelectInputOverlay = import_styled_components7.default.div`
676
711
  function MultiSelectGroup({
677
712
  className,
678
713
  name,
679
- ariaLabel,
714
+ label,
680
715
  selected,
681
716
  onChange,
682
717
  disabled = false,
683
718
  readonly = false,
684
- hasError = false,
719
+ invalid = false,
685
720
  children
686
721
  }) {
687
- const handleChange = (0, import_react8.useCallback)(
722
+ const handleChange = (0, import_react6.useCallback)(
688
723
  (payload) => {
689
724
  const index = selected.indexOf(payload.value);
690
725
  if (payload.selected) {
@@ -699,7 +734,7 @@ function MultiSelectGroup({
699
734
  },
700
735
  [onChange, selected]
701
736
  );
702
- return /* @__PURE__ */ import_react8.default.createElement(
737
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
703
738
  MultiSelectGroupContext.Provider,
704
739
  {
705
740
  value: {
@@ -707,46 +742,46 @@ function MultiSelectGroup({
707
742
  selected: Array.from(new Set(selected)),
708
743
  disabled,
709
744
  readonly,
710
- hasError,
745
+ invalid,
711
746
  onChange: handleChange
712
- }
713
- },
714
- /* @__PURE__ */ import_react8.default.createElement(
715
- "div",
716
- {
717
- className,
718
- "aria-label": ariaLabel,
719
- "data-testid": "SelectGroup"
720
747
  },
721
- children
722
- )
748
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className, "aria-label": label, "data-testid": "SelectGroup", children })
749
+ }
723
750
  );
724
751
  }
725
752
 
726
753
  // src/components/Switch/index.tsx
727
754
  var import_switch = require("@react-aria/switch");
728
- var import_react9 = __toESM(require("react"));
755
+ var import_react7 = require("react");
729
756
  var import_react_stately = require("react-stately");
730
757
  var import_styled_components8 = __toESM(require("styled-components"));
731
758
  var import_utils4 = require("@charcoal-ui/utils");
732
- function SwitchCheckbox(props) {
733
- const { disabled, className } = props;
734
- const ariaSwitchProps = (0, import_react9.useMemo)(
735
- () => ({
736
- ...props,
737
- "aria-label": "children" in props ? void 0 : props.label,
738
- isDisabled: props.disabled,
739
- isSelected: props.checked
740
- }),
741
- [props]
742
- );
743
- const state = (0, import_react_stately.useToggleState)(ariaSwitchProps);
744
- const ref = (0, import_react9.useRef)(null);
745
- const {
746
- inputProps: { className: _className, type: _type, ...rest }
747
- } = (0, import_switch.useSwitch)(ariaSwitchProps, state, ref);
748
- return /* @__PURE__ */ import_react9.default.createElement(Label, { className, "aria-disabled": disabled }, /* @__PURE__ */ import_react9.default.createElement(SwitchInput, { ...rest, ref }), "children" in props ? /* @__PURE__ */ import_react9.default.createElement(LabelInner, null, props.children) : void 0);
749
- }
759
+ var import_utils5 = require("@react-aria/utils");
760
+ var import_jsx_runtime8 = require("react/jsx-runtime");
761
+ var SwitchCheckbox = (0, import_react7.forwardRef)(
762
+ function SwitchCheckboxInner(props, external) {
763
+ const { disabled, className } = props;
764
+ const ariaSwitchProps = (0, import_react7.useMemo)(
765
+ () => ({
766
+ ...props,
767
+ "aria-label": "children" in props ? void 0 : props.label,
768
+ isDisabled: props.disabled,
769
+ isSelected: props.checked
770
+ }),
771
+ [props]
772
+ );
773
+ const state = (0, import_react_stately.useToggleState)(ariaSwitchProps);
774
+ const ref = (0, import_utils5.useObjectRef)(external);
775
+ const {
776
+ inputProps: { className: _className, type: _type, ...rest }
777
+ } = (0, import_switch.useSwitch)(ariaSwitchProps, state, ref);
778
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Label, { className, "aria-disabled": disabled, children: [
779
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SwitchInput, { ...rest, ref }),
780
+ "children" in props ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(LabelInner, { children: props.children }) : void 0
781
+ ] });
782
+ }
783
+ );
784
+ var Switch_default = (0, import_react7.memo)(SwitchCheckbox);
750
785
  var Label = import_styled_components8.default.label`
751
786
  display: inline-grid;
752
787
  grid-template-columns: auto 1fr;
@@ -838,14 +873,16 @@ var SwitchInput = import_styled_components8.default.input.attrs({
838
873
  // src/components/TextField/index.tsx
839
874
  var import_textfield = require("@react-aria/textfield");
840
875
  var import_visually_hidden = require("@react-aria/visually-hidden");
841
- var import_react11 = __toESM(require("react"));
876
+ var import_react8 = require("react");
877
+ var React5 = __toESM(require("react"));
842
878
  var import_styled_components10 = __toESM(require("styled-components"));
843
879
 
844
880
  // src/components/FieldLabel/index.tsx
845
- var import_react10 = __toESM(require("react"));
881
+ var React4 = __toESM(require("react"));
846
882
  var import_styled_components9 = __toESM(require("styled-components"));
847
883
  var import_styled8 = require("@charcoal-ui/styled");
848
- var FieldLabel = import_react10.default.forwardRef(
884
+ var import_jsx_runtime9 = require("react/jsx-runtime");
885
+ var FieldLabel = React4.forwardRef(
849
886
  function FieldLabel2({
850
887
  style,
851
888
  className,
@@ -855,7 +892,11 @@ var FieldLabel = import_react10.default.forwardRef(
855
892
  subLabel,
856
893
  ...labelProps
857
894
  }, ref) {
858
- return /* @__PURE__ */ import_react10.default.createElement(FieldLabelWrapper, { style, className }, /* @__PURE__ */ import_react10.default.createElement(Label2, { ref, ...labelProps }, label), required && /* @__PURE__ */ import_react10.default.createElement(RequiredText, null, requiredText), /* @__PURE__ */ import_react10.default.createElement(SubLabelClickable, null, /* @__PURE__ */ import_react10.default.createElement("span", null, subLabel)));
895
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(FieldLabelWrapper, { style, className, children: [
896
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Label2, { ref, ...labelProps, children: label }),
897
+ required && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(RequiredText, { children: requiredText }),
898
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SubLabelClickable, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: subLabel }) })
899
+ ] });
859
900
  }
860
901
  );
861
902
  var FieldLabel_default = FieldLabel;
@@ -887,230 +928,122 @@ var FieldLabelWrapper = import_styled_components9.default.div`
887
928
  `;
888
929
 
889
930
  // src/components/TextField/index.tsx
890
- var import_styled9 = require("@charcoal-ui/styled");
891
- var theme3 = (0, import_styled9.createTheme)(import_styled_components10.default);
892
- function mergeRefs(...refs) {
893
- return (value) => {
894
- for (const ref of refs) {
895
- if (typeof ref === "function") {
896
- ref(value);
897
- } else if (ref !== null) {
898
- ;
899
- ref.current = value;
900
- }
901
- }
902
- };
903
- }
904
- function countCodePointsInString(string) {
905
- return Array.from(string).length;
906
- }
907
- var TextField = import_react11.default.forwardRef(
908
- function TextField2(props, ref) {
909
- return props.multiline !== void 0 && props.multiline ? /* @__PURE__ */ import_react11.default.createElement(MultiLineTextField, { ref, ...props }) : /* @__PURE__ */ import_react11.default.createElement(SingleLineTextField, { ref, ...props });
910
- }
911
- );
912
- var TextField_default = TextField;
913
- var SingleLineTextField = import_react11.default.forwardRef(function SingleLineTextFieldInner({ onChange, ...props }, forwardRef4) {
914
- const {
915
- className,
916
- showLabel = false,
917
- showCount = false,
918
- label,
919
- requiredText,
920
- subLabel,
921
- disabled = false,
922
- required,
923
- invalid = false,
924
- assistiveText,
925
- maxLength,
926
- prefix = null,
927
- suffix = null
928
- } = props;
929
- const { visuallyHiddenProps } = (0, import_visually_hidden.useVisuallyHidden)();
930
- const ariaRef = (0, import_react11.useRef)(null);
931
- const prefixRef = (0, import_react11.useRef)(null);
932
- const suffixRef = (0, import_react11.useRef)(null);
933
- const [count, setCount] = (0, import_react11.useState)(countCodePointsInString(props.value ?? ""));
934
- const [prefixWidth, setPrefixWidth] = (0, import_react11.useState)(0);
935
- const [suffixWidth, setSuffixWidth] = (0, import_react11.useState)(0);
936
- const nonControlled = props.value === void 0;
937
- const handleChange = (0, import_react11.useCallback)(
938
- (value) => {
939
- const count2 = countCodePointsInString(value);
940
- if (maxLength !== void 0 && count2 > maxLength) {
941
- return;
942
- }
943
- if (nonControlled) {
944
- setCount(count2);
945
- }
946
- onChange?.(value);
947
- },
948
- [maxLength, nonControlled, onChange]
949
- );
950
- (0, import_react11.useEffect)(() => {
951
- setCount(countCodePointsInString(props.value ?? ""));
952
- }, [props.value]);
953
- const { inputProps, labelProps, descriptionProps, errorMessageProps } = (0, import_textfield.useTextField)(
954
- {
955
- inputElementType: "input",
956
- isDisabled: disabled,
957
- isRequired: required,
958
- validationState: invalid ? "invalid" : "valid",
959
- description: !invalid && assistiveText,
960
- errorMessage: invalid && assistiveText,
961
- onChange: handleChange,
962
- ...props
963
- },
964
- ariaRef
965
- );
966
- (0, import_react11.useEffect)(() => {
967
- const prefixObserver = new ResizeObserver((entries) => {
968
- setPrefixWidth(entries[0].contentRect.width);
969
- });
970
- const suffixObserver = new ResizeObserver((entries) => {
971
- setSuffixWidth(entries[0].contentRect.width);
972
- });
973
- if (prefixRef.current !== null) {
974
- prefixObserver.observe(prefixRef.current);
975
- }
976
- if (suffixRef.current !== null) {
977
- suffixObserver.observe(suffixRef.current);
978
- }
979
- return () => {
980
- suffixObserver.disconnect();
981
- prefixObserver.disconnect();
982
- };
983
- }, []);
984
- return /* @__PURE__ */ import_react11.default.createElement(TextFieldRoot, { className, isDisabled: disabled }, /* @__PURE__ */ import_react11.default.createElement(
985
- TextFieldLabel,
986
- {
931
+ var import_jsx_runtime10 = require("react/jsx-runtime");
932
+ var TextField = React5.forwardRef(
933
+ function SingleLineTextFieldInner({ onChange, ...props }, forwardRef16) {
934
+ const {
935
+ className,
936
+ showLabel = false,
937
+ showCount = false,
987
938
  label,
988
939
  requiredText,
989
- required,
990
940
  subLabel,
991
- ...labelProps,
992
- ...!showLabel ? visuallyHiddenProps : {}
993
- }
994
- ), /* @__PURE__ */ import_react11.default.createElement(StyledInputContainer, null, /* @__PURE__ */ import_react11.default.createElement(PrefixContainer, { ref: prefixRef }, /* @__PURE__ */ import_react11.default.createElement(Affix, null, prefix)), /* @__PURE__ */ import_react11.default.createElement(
995
- StyledInput,
996
- {
997
- ref: mergeRefs(forwardRef4, ariaRef),
998
- invalid,
999
- extraLeftPadding: prefixWidth,
1000
- extraRightPadding: suffixWidth,
1001
- ...inputProps
1002
- }
1003
- ), /* @__PURE__ */ import_react11.default.createElement(SuffixContainer, { ref: suffixRef }, /* @__PURE__ */ import_react11.default.createElement(Affix, null, suffix), showCount && /* @__PURE__ */ import_react11.default.createElement(SingleLineCounter, null, maxLength !== void 0 ? `${count}/${maxLength}` : count))), assistiveText != null && assistiveText.length !== 0 && /* @__PURE__ */ import_react11.default.createElement(
1004
- AssistiveText,
1005
- {
1006
- invalid,
1007
- ...invalid ? errorMessageProps : descriptionProps
1008
- },
1009
- assistiveText
1010
- ));
1011
- });
1012
- var MultiLineTextField = import_react11.default.forwardRef(function MultiLineTextFieldInner({ onChange, ...props }, forwardRef4) {
1013
- const {
1014
- className,
1015
- showCount = false,
1016
- showLabel = false,
1017
- label,
1018
- requiredText,
1019
- subLabel,
1020
- disabled = false,
1021
- required,
1022
- invalid = false,
1023
- assistiveText,
1024
- maxLength,
1025
- autoHeight = false,
1026
- rows: initialRows = 4
1027
- } = props;
1028
- const { visuallyHiddenProps } = (0, import_visually_hidden.useVisuallyHidden)();
1029
- const textareaRef = (0, import_react11.useRef)(null);
1030
- const ariaRef = (0, import_react11.useRef)(null);
1031
- const [count, setCount] = (0, import_react11.useState)(countCodePointsInString(props.value ?? ""));
1032
- const [rows, setRows] = (0, import_react11.useState)(initialRows);
1033
- const syncHeight = (0, import_react11.useCallback)(
1034
- (textarea) => {
1035
- const rows2 = (`${textarea.value}
1036
- `.match(/\n/gu)?.length ?? 0) || 1;
1037
- setRows(initialRows <= rows2 ? rows2 : initialRows);
1038
- },
1039
- [initialRows]
1040
- );
1041
- const nonControlled = props.value === void 0;
1042
- const handleChange = (0, import_react11.useCallback)(
1043
- (value) => {
1044
- const count2 = countCodePointsInString(value);
1045
- if (maxLength !== void 0 && count2 > maxLength) {
1046
- return;
1047
- }
1048
- if (nonControlled) {
1049
- setCount(count2);
1050
- }
1051
- if (autoHeight && textareaRef.current !== null) {
1052
- syncHeight(textareaRef.current);
1053
- }
1054
- onChange?.(value);
1055
- },
1056
- [autoHeight, maxLength, nonControlled, onChange, syncHeight]
1057
- );
1058
- (0, import_react11.useEffect)(() => {
1059
- setCount(countCodePointsInString(props.value ?? ""));
1060
- }, [props.value]);
1061
- const { inputProps, labelProps, descriptionProps, errorMessageProps } = (0, import_textfield.useTextField)(
1062
- {
1063
- inputElementType: "textarea",
1064
- isDisabled: disabled,
1065
- isRequired: required,
1066
- validationState: invalid ? "invalid" : "valid",
1067
- description: !invalid && assistiveText,
1068
- errorMessage: invalid && assistiveText,
1069
- onChange: handleChange,
1070
- ...props
1071
- },
1072
- ariaRef
1073
- );
1074
- (0, import_react11.useEffect)(() => {
1075
- if (autoHeight && textareaRef.current !== null) {
1076
- syncHeight(textareaRef.current);
1077
- }
1078
- }, [autoHeight, syncHeight]);
1079
- return /* @__PURE__ */ import_react11.default.createElement(TextFieldRoot, { className, isDisabled: disabled }, /* @__PURE__ */ import_react11.default.createElement(
1080
- TextFieldLabel,
1081
- {
1082
- label,
1083
- requiredText,
941
+ disabled = false,
1084
942
  required,
1085
- subLabel,
1086
- ...labelProps,
1087
- ...!showLabel ? visuallyHiddenProps : {}
1088
- }
1089
- ), /* @__PURE__ */ import_react11.default.createElement(
1090
- StyledTextareaContainer,
1091
- {
1092
- invalid,
1093
- rows: showCount ? rows + 1 : rows
1094
- },
1095
- /* @__PURE__ */ import_react11.default.createElement(
1096
- StyledTextarea,
943
+ invalid = false,
944
+ assistiveText,
945
+ maxLength,
946
+ prefix = null,
947
+ suffix = null
948
+ } = props;
949
+ const { visuallyHiddenProps } = (0, import_visually_hidden.useVisuallyHidden)();
950
+ const ariaRef = (0, import_react8.useRef)(null);
951
+ const prefixRef = (0, import_react8.useRef)(null);
952
+ const suffixRef = (0, import_react8.useRef)(null);
953
+ const [count, setCount] = (0, import_react8.useState)(
954
+ countCodePointsInString(props.value ?? "")
955
+ );
956
+ const [prefixWidth, setPrefixWidth] = (0, import_react8.useState)(0);
957
+ const [suffixWidth, setSuffixWidth] = (0, import_react8.useState)(0);
958
+ const nonControlled = props.value === void 0;
959
+ const handleChange = (0, import_react8.useCallback)(
960
+ (value) => {
961
+ const count2 = countCodePointsInString(value);
962
+ if (maxLength !== void 0 && count2 > maxLength) {
963
+ return;
964
+ }
965
+ if (nonControlled) {
966
+ setCount(count2);
967
+ }
968
+ onChange?.(value);
969
+ },
970
+ [maxLength, nonControlled, onChange]
971
+ );
972
+ (0, import_react8.useEffect)(() => {
973
+ setCount(countCodePointsInString(props.value ?? ""));
974
+ }, [props.value]);
975
+ const { inputProps, labelProps, descriptionProps, errorMessageProps } = (0, import_textfield.useTextField)(
1097
976
  {
1098
- ref: mergeRefs(textareaRef, forwardRef4, ariaRef),
1099
- rows,
1100
- noBottomPadding: showCount,
1101
- ...inputProps
977
+ inputElementType: "input",
978
+ isDisabled: disabled,
979
+ isRequired: required,
980
+ validationState: invalid ? "invalid" : "valid",
981
+ description: !invalid && assistiveText,
982
+ errorMessage: invalid && assistiveText,
983
+ onChange: handleChange,
984
+ ...props
985
+ },
986
+ ariaRef
987
+ );
988
+ (0, import_react8.useEffect)(() => {
989
+ const prefixObserver = new ResizeObserver((entries) => {
990
+ setPrefixWidth(entries[0].contentRect.width);
991
+ });
992
+ const suffixObserver = new ResizeObserver((entries) => {
993
+ setSuffixWidth(entries[0].contentRect.width);
994
+ });
995
+ if (prefixRef.current !== null) {
996
+ prefixObserver.observe(prefixRef.current);
1102
997
  }
1103
- ),
1104
- showCount && /* @__PURE__ */ import_react11.default.createElement(MultiLineCounter, null, maxLength !== void 0 ? `${count}/${maxLength}` : count)
1105
- ), assistiveText != null && assistiveText.length !== 0 && /* @__PURE__ */ import_react11.default.createElement(
1106
- AssistiveText,
1107
- {
1108
- invalid,
1109
- ...invalid ? errorMessageProps : descriptionProps
1110
- },
1111
- assistiveText
1112
- ));
1113
- });
998
+ if (suffixRef.current !== null) {
999
+ suffixObserver.observe(suffixRef.current);
1000
+ }
1001
+ return () => {
1002
+ suffixObserver.disconnect();
1003
+ prefixObserver.disconnect();
1004
+ };
1005
+ }, []);
1006
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(TextFieldRoot, { className, isDisabled: disabled, children: [
1007
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1008
+ TextFieldLabel,
1009
+ {
1010
+ label,
1011
+ requiredText,
1012
+ required,
1013
+ subLabel,
1014
+ ...labelProps,
1015
+ ...!showLabel ? visuallyHiddenProps : {}
1016
+ }
1017
+ ),
1018
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(StyledInputContainer, { children: [
1019
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PrefixContainer, { ref: prefixRef, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Affix, { children: prefix }) }),
1020
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1021
+ StyledInput,
1022
+ {
1023
+ ref: mergeRefs(forwardRef16, ariaRef),
1024
+ invalid,
1025
+ extraLeftPadding: prefixWidth,
1026
+ extraRightPadding: suffixWidth,
1027
+ ...inputProps
1028
+ }
1029
+ ),
1030
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(SuffixContainer, { ref: suffixRef, children: [
1031
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Affix, { children: suffix }),
1032
+ showCount && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SingleLineCounter, { children: maxLength !== void 0 ? `${count}/${maxLength}` : count })
1033
+ ] })
1034
+ ] }),
1035
+ assistiveText != null && assistiveText.length !== 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1036
+ AssistiveText,
1037
+ {
1038
+ invalid,
1039
+ ...invalid ? errorMessageProps : descriptionProps,
1040
+ children: assistiveText
1041
+ }
1042
+ )
1043
+ ] });
1044
+ }
1045
+ );
1046
+ var TextField_default = TextField;
1114
1047
  var TextFieldRoot = import_styled_components10.default.div`
1115
1048
  display: flex;
1116
1049
  flex-direction: column;
@@ -1118,7 +1051,7 @@ var TextFieldRoot = import_styled_components10.default.div`
1118
1051
  ${(p) => p.isDisabled && { opacity: p.theme.elementEffect.disabled.opacity }}
1119
1052
  `;
1120
1053
  var TextFieldLabel = (0, import_styled_components10.default)(FieldLabel_default)`
1121
- ${theme3((o) => o.margin.bottom(8))}
1054
+ ${theme((o) => o.margin.bottom(8))}
1122
1055
  `;
1123
1056
  var StyledInputContainer = import_styled_components10.default.div`
1124
1057
  height: 40px;
@@ -1144,7 +1077,7 @@ var SuffixContainer = import_styled_components10.default.span`
1144
1077
  var Affix = import_styled_components10.default.span`
1145
1078
  user-select: none;
1146
1079
 
1147
- ${theme3((o) => [o.typography(14).preserveHalfLeading, o.font.text2])}
1080
+ ${theme((o) => [o.typography(14).preserveHalfLeading, o.font.text2])}
1148
1081
  `;
1149
1082
  var StyledInput = import_styled_components10.default.input`
1150
1083
  border: none;
@@ -1166,7 +1099,7 @@ var StyledInput = import_styled_components10.default.input`
1166
1099
  /* Display box-shadow for iOS Safari */
1167
1100
  appearance: none;
1168
1101
 
1169
- ${(p) => theme3((o) => [
1102
+ ${(p) => theme((o) => [
1170
1103
  o.bg.surface3.hover,
1171
1104
  o.outline.default.focus,
1172
1105
  p.invalid && o.outline.assertive,
@@ -1174,37 +1107,170 @@ var StyledInput = import_styled_components10.default.input`
1174
1107
  ])}
1175
1108
 
1176
1109
  &::placeholder {
1177
- ${theme3((o) => o.font.text3)}
1110
+ ${theme((o) => o.font.text3)}
1111
+ }
1112
+ `;
1113
+ var SingleLineCounter = import_styled_components10.default.span`
1114
+ ${theme((o) => [o.typography(14).preserveHalfLeading, o.font.text3])}
1115
+ `;
1116
+ var AssistiveText = import_styled_components10.default.p`
1117
+ ${(p) => theme((o) => [
1118
+ o.typography(14),
1119
+ o.margin.top(8),
1120
+ o.margin.bottom(0),
1121
+ o.font[p.invalid ? "assertive" : "text1"]
1122
+ ])}
1123
+ `;
1124
+
1125
+ // src/components/TextArea/index.tsx
1126
+ var import_textfield2 = require("@react-aria/textfield");
1127
+ var import_visually_hidden2 = require("@react-aria/visually-hidden");
1128
+ var import_react9 = __toESM(require("react"));
1129
+ var import_styled_components11 = __toESM(require("styled-components"));
1130
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1131
+ var TextArea = import_react9.default.forwardRef(
1132
+ function TextAreaInner({ onChange, ...props }, forwardRef16) {
1133
+ const {
1134
+ className,
1135
+ showCount = false,
1136
+ showLabel = false,
1137
+ label,
1138
+ requiredText,
1139
+ subLabel,
1140
+ disabled = false,
1141
+ required,
1142
+ invalid = false,
1143
+ assistiveText,
1144
+ maxLength,
1145
+ autoHeight = false,
1146
+ rows: initialRows = 4
1147
+ } = props;
1148
+ const { visuallyHiddenProps } = (0, import_visually_hidden2.useVisuallyHidden)();
1149
+ const textareaRef = (0, import_react9.useRef)(null);
1150
+ const ariaRef = (0, import_react9.useRef)(null);
1151
+ const [count, setCount] = (0, import_react9.useState)(
1152
+ countCodePointsInString(props.value ?? "")
1153
+ );
1154
+ const [rows, setRows] = (0, import_react9.useState)(initialRows);
1155
+ const syncHeight = (0, import_react9.useCallback)(
1156
+ (textarea) => {
1157
+ const rows2 = (`${textarea.value}
1158
+ `.match(/\n/gu)?.length ?? 0) || 1;
1159
+ setRows(initialRows <= rows2 ? rows2 : initialRows);
1160
+ },
1161
+ [initialRows]
1162
+ );
1163
+ const nonControlled = props.value === void 0;
1164
+ const handleChange = (0, import_react9.useCallback)(
1165
+ (value) => {
1166
+ const count2 = countCodePointsInString(value);
1167
+ if (maxLength !== void 0 && count2 > maxLength) {
1168
+ return;
1169
+ }
1170
+ if (nonControlled) {
1171
+ setCount(count2);
1172
+ }
1173
+ if (autoHeight && textareaRef.current !== null) {
1174
+ syncHeight(textareaRef.current);
1175
+ }
1176
+ onChange?.(value);
1177
+ },
1178
+ [autoHeight, maxLength, nonControlled, onChange, syncHeight]
1179
+ );
1180
+ (0, import_react9.useEffect)(() => {
1181
+ setCount(countCodePointsInString(props.value ?? ""));
1182
+ }, [props.value]);
1183
+ const { inputProps, labelProps, descriptionProps, errorMessageProps } = (0, import_textfield2.useTextField)(
1184
+ {
1185
+ inputElementType: "textarea",
1186
+ isDisabled: disabled,
1187
+ isRequired: required,
1188
+ validationState: invalid ? "invalid" : "valid",
1189
+ description: !invalid && assistiveText,
1190
+ errorMessage: invalid && assistiveText,
1191
+ onChange: handleChange,
1192
+ ...props
1193
+ },
1194
+ ariaRef
1195
+ );
1196
+ (0, import_react9.useEffect)(() => {
1197
+ if (autoHeight && textareaRef.current !== null) {
1198
+ syncHeight(textareaRef.current);
1199
+ }
1200
+ }, [autoHeight, syncHeight]);
1201
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(TextFieldRoot2, { className, isDisabled: disabled, children: [
1202
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1203
+ TextFieldLabel2,
1204
+ {
1205
+ label,
1206
+ requiredText,
1207
+ required,
1208
+ subLabel,
1209
+ ...labelProps,
1210
+ ...!showLabel ? visuallyHiddenProps : {}
1211
+ }
1212
+ ),
1213
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1214
+ StyledTextareaContainer,
1215
+ {
1216
+ invalid,
1217
+ rows: showCount ? rows + 1 : rows,
1218
+ children: [
1219
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1220
+ StyledTextarea,
1221
+ {
1222
+ ref: mergeRefs(textareaRef, forwardRef16, ariaRef),
1223
+ rows,
1224
+ noBottomPadding: showCount,
1225
+ ...inputProps
1226
+ }
1227
+ ),
1228
+ showCount && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(MultiLineCounter, { children: maxLength !== void 0 ? `${count}/${maxLength}` : count })
1229
+ ]
1230
+ }
1231
+ ),
1232
+ assistiveText != null && assistiveText.length !== 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1233
+ AssistiveText2,
1234
+ {
1235
+ invalid,
1236
+ ...invalid ? errorMessageProps : descriptionProps,
1237
+ children: assistiveText
1238
+ }
1239
+ )
1240
+ ] });
1178
1241
  }
1242
+ );
1243
+ var TextArea_default = TextArea;
1244
+ var TextFieldRoot2 = import_styled_components11.default.div`
1245
+ display: flex;
1246
+ flex-direction: column;
1247
+
1248
+ ${(p) => p.isDisabled && { opacity: p.theme.elementEffect.disabled.opacity }}
1249
+ `;
1250
+ var TextFieldLabel2 = (0, import_styled_components11.default)(FieldLabel_default)`
1251
+ ${theme((o) => o.margin.bottom(8))}
1179
1252
  `;
1180
- var StyledTextareaContainer = import_styled_components10.default.div`
1253
+ var StyledTextareaContainer = import_styled_components11.default.div`
1181
1254
  position: relative;
1182
1255
  overflow: hidden;
1183
1256
  padding: 0 8px;
1184
1257
 
1185
- ${(p) => theme3((o) => [
1258
+ ${(p) => theme((o) => [
1186
1259
  o.bg.surface3.hover,
1187
1260
  p.invalid && o.outline.assertive,
1188
1261
  o.font.text2,
1189
1262
  o.borderRadius(4)
1190
1263
  ])}
1191
1264
 
1192
- /**
1193
- * FIXME: o.outline.default を &:focus-within 内に書いてると、外れるときに transition が効かない
1194
- * 本来 o.outline.default.focus と書けば足してくれるような transition の内容を一旦明示している
1195
- * o.outline.default.focusWithin のようなものがあればこの行は不要になるはず
1196
- */
1197
- transition: box-shadow 0.2s;
1198
-
1199
1265
  &:focus-within {
1200
- ${(p) => theme3((o) => p.invalid ? o.outline.assertive : o.outline.default)}
1266
+ ${(p) => theme((o) => p.invalid ? o.outline.assertive : o.outline.default)}
1201
1267
  }
1202
1268
 
1203
- ${({ rows }) => import_styled_components10.css`
1269
+ ${({ rows }) => import_styled_components11.css`
1204
1270
  height: calc(22px * ${rows} + 18px);
1205
1271
  `};
1206
1272
  `;
1207
- var StyledTextarea = import_styled_components10.default.textarea`
1273
+ var StyledTextarea = import_styled_components11.default.textarea`
1208
1274
  border: none;
1209
1275
  outline: none;
1210
1276
  resize: none;
@@ -1219,7 +1285,7 @@ var StyledTextarea = import_styled_components10.default.textarea`
1219
1285
  line-height: calc(22px / 0.875);
1220
1286
  padding: calc(9px / 0.875) 0 ${(p) => p.noBottomPadding ? 0 : ""};
1221
1287
 
1222
- ${({ rows = 1 }) => import_styled_components10.css`
1288
+ ${({ rows = 1 }) => import_styled_components11.css`
1223
1289
  height: calc(22px / 0.875 * ${rows});
1224
1290
  `};
1225
1291
 
@@ -1229,7 +1295,7 @@ var StyledTextarea = import_styled_components10.default.textarea`
1229
1295
  background: none;
1230
1296
 
1231
1297
  &::placeholder {
1232
- ${theme3((o) => o.font.text3)}
1298
+ ${theme((o) => o.font.text3)}
1233
1299
  }
1234
1300
 
1235
1301
  /* Hide scrollbar for Chrome, Safari and Opera */
@@ -1240,18 +1306,15 @@ var StyledTextarea = import_styled_components10.default.textarea`
1240
1306
  -ms-overflow-style: none; /* IE and Edge */
1241
1307
  scrollbar-width: none; /* Firefox */
1242
1308
  `;
1243
- var SingleLineCounter = import_styled_components10.default.span`
1244
- ${theme3((o) => [o.typography(14).preserveHalfLeading, o.font.text3])}
1245
- `;
1246
- var MultiLineCounter = import_styled_components10.default.span`
1309
+ var MultiLineCounter = import_styled_components11.default.span`
1247
1310
  position: absolute;
1248
1311
  bottom: 9px;
1249
1312
  right: 8px;
1250
1313
 
1251
- ${theme3((o) => [o.typography(14).preserveHalfLeading, o.font.text3])}
1314
+ ${theme((o) => [o.typography(14).preserveHalfLeading, o.font.text3])}
1252
1315
  `;
1253
- var AssistiveText = import_styled_components10.default.p`
1254
- ${(p) => theme3((o) => [
1316
+ var AssistiveText2 = import_styled_components11.default.p`
1317
+ ${(p) => theme((o) => [
1255
1318
  o.typography(14),
1256
1319
  o.margin.top(8),
1257
1320
  o.margin.bottom(0),
@@ -1260,10 +1323,11 @@ var AssistiveText = import_styled_components10.default.p`
1260
1323
  `;
1261
1324
 
1262
1325
  // src/components/Icon/index.tsx
1263
- var import_react12 = __toESM(require("react"));
1326
+ var React7 = __toESM(require("react"));
1264
1327
  var import_icons = require("@charcoal-ui/icons");
1265
- var Icon = import_react12.default.forwardRef(function IconInner({ name, scale, unsafeNonGuidelineScale, className, ...rest }, ref) {
1266
- return /* @__PURE__ */ import_react12.default.createElement(
1328
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1329
+ var Icon = React7.forwardRef(function IconInner({ name, scale, unsafeNonGuidelineScale, className, ...rest }, ref) {
1330
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1267
1331
  "pixiv-icon",
1268
1332
  {
1269
1333
  ref,
@@ -1278,9 +1342,10 @@ var Icon = import_react12.default.forwardRef(function IconInner({ name, scale, u
1278
1342
  var Icon_default = Icon;
1279
1343
 
1280
1344
  // src/components/Modal/index.tsx
1281
- var import_react13 = __toESM(require("react"));
1345
+ var import_react10 = require("react");
1346
+ var React8 = __toESM(require("react"));
1282
1347
  var import_overlays2 = require("@react-aria/overlays");
1283
- var import_styled_components11 = __toESM(require("styled-components"));
1348
+ var import_styled_components12 = __toESM(require("styled-components"));
1284
1349
  var import_focus = require("@react-aria/focus");
1285
1350
  var import_dialog = require("@react-aria/dialog");
1286
1351
 
@@ -1292,25 +1357,23 @@ function columnSystem(span, column, gutter) {
1292
1357
  }
1293
1358
 
1294
1359
  // src/components/Modal/index.tsx
1295
- var import_utils5 = require("@charcoal-ui/utils");
1296
- var import_styled11 = require("@charcoal-ui/styled");
1360
+ var import_utils6 = require("@charcoal-ui/utils");
1361
+ var import_styled12 = require("@charcoal-ui/styled");
1297
1362
  var import_react_spring = require("react-spring");
1363
+ var import_utils7 = require("@react-aria/utils");
1364
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1298
1365
  var DEFAULT_Z_INDEX = 10;
1299
- function Modal({
1300
- children,
1301
- zIndex = DEFAULT_Z_INDEX,
1302
- portalContainer,
1303
- ...props
1304
- }) {
1366
+ var Modal = (0, import_react10.forwardRef)(function ModalInner({ children, zIndex = DEFAULT_Z_INDEX, portalContainer, ...props }, external) {
1305
1367
  const {
1306
1368
  title,
1307
1369
  size = "M",
1308
1370
  bottomSheet = false,
1309
1371
  isDismissable,
1310
1372
  onClose,
1373
+ className,
1311
1374
  isOpen = false
1312
1375
  } = props;
1313
- const ref = (0, import_react13.useRef)(null);
1376
+ const ref = (0, import_utils7.useObjectRef)(external);
1314
1377
  const { overlayProps, underlayProps } = (0, import_overlays2.useOverlay)(props, ref);
1315
1378
  const { modalProps } = (0, import_overlays2.useModalOverlay)(
1316
1379
  props,
@@ -1327,8 +1390,8 @@ function Modal({
1327
1390
  ref
1328
1391
  );
1329
1392
  const { dialogProps, titleProps } = (0, import_dialog.useDialog)(props, ref);
1330
- const theme4 = (0, import_styled_components11.useTheme)();
1331
- const isMobile = (0, import_styled11.useMedia)((0, import_utils5.maxWidth)(theme4.breakpoint.screen1)) ?? false;
1393
+ const theme3 = (0, import_styled_components12.useTheme)();
1394
+ const isMobile = (0, import_styled12.useMedia)((0, import_utils6.maxWidth)(theme3.breakpoint.screen1)) ?? false;
1332
1395
  const transitionEnabled = isMobile && bottomSheet !== false;
1333
1396
  const transition = (0, import_react_spring.useTransition)(isOpen, {
1334
1397
  from: {
@@ -1347,50 +1410,54 @@ function Modal({
1347
1410
  });
1348
1411
  const showDismiss = !isMobile || bottomSheet !== true;
1349
1412
  return transition(
1350
- ({ backgroundColor, transform }, item) => item && /* @__PURE__ */ import_react13.default.createElement(import_overlays2.Overlay, { portalContainer }, /* @__PURE__ */ import_react13.default.createElement(
1413
+ ({ backgroundColor, transform }, item) => item && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_overlays2.Overlay, { portalContainer, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1351
1414
  ModalBackground,
1352
1415
  {
1353
1416
  zIndex,
1354
1417
  ...underlayProps,
1355
- style: transitionEnabled ? { backgroundColor } : {}
1356
- },
1357
- /* @__PURE__ */ import_react13.default.createElement(import_focus.FocusScope, { contain: true, restoreFocus: true, autoFocus: true }, /* @__PURE__ */ import_react13.default.createElement(DialogContainer, { bottomSheet, size }, /* @__PURE__ */ import_react13.default.createElement(
1358
- ModalDialog,
1359
- {
1360
- ref,
1361
- ...overlayProps,
1362
- ...modalProps,
1363
- ...dialogProps,
1364
- style: transitionEnabled ? { transform } : {},
1365
- size,
1366
- bottomSheet
1367
- },
1368
- /* @__PURE__ */ import_react13.default.createElement(
1369
- ModalContext.Provider,
1418
+ style: transitionEnabled ? { backgroundColor } : {},
1419
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_focus.FocusScope, { contain: true, restoreFocus: true, autoFocus: true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogContainer, { bottomSheet, size, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1420
+ ModalDialog,
1370
1421
  {
1371
- value: { titleProps, title, close: onClose, showDismiss }
1372
- },
1373
- children,
1374
- isDismissable === true && /* @__PURE__ */ import_react13.default.createElement(
1375
- ModalCrossButton,
1376
- {
1377
- size: "S",
1378
- icon: "24/Close",
1379
- onClick: onClose
1380
- }
1381
- )
1382
- )
1383
- )))
1384
- ))
1422
+ ref,
1423
+ ...overlayProps,
1424
+ ...modalProps,
1425
+ ...dialogProps,
1426
+ style: transitionEnabled ? { transform } : {},
1427
+ size,
1428
+ bottomSheet,
1429
+ className,
1430
+ children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1431
+ ModalContext.Provider,
1432
+ {
1433
+ value: { titleProps, title, close: onClose, showDismiss },
1434
+ children: [
1435
+ children,
1436
+ isDismissable === true && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1437
+ ModalCrossButton,
1438
+ {
1439
+ size: "S",
1440
+ icon: "24/Close",
1441
+ onClick: onClose
1442
+ }
1443
+ )
1444
+ ]
1445
+ }
1446
+ )
1447
+ }
1448
+ ) }) })
1449
+ }
1450
+ ) })
1385
1451
  );
1386
- }
1387
- var ModalContext = import_react13.default.createContext({
1452
+ });
1453
+ var Modal_default = (0, import_react10.memo)(Modal);
1454
+ var ModalContext = React8.createContext({
1388
1455
  titleProps: {},
1389
1456
  title: "",
1390
1457
  close: void 0,
1391
1458
  showDismiss: true
1392
1459
  });
1393
- var ModalBackground = (0, import_react_spring.animated)(import_styled_components11.default.div`
1460
+ var ModalBackground = (0, import_react_spring.animated)(import_styled_components12.default.div`
1394
1461
  z-index: ${({ zIndex }) => zIndex};
1395
1462
  overflow: scroll;
1396
1463
  display: flex;
@@ -1402,7 +1469,7 @@ var ModalBackground = (0, import_react_spring.animated)(import_styled_components
1402
1469
 
1403
1470
  ${theme((o) => [o.bg.surface4])}
1404
1471
  `);
1405
- var DialogContainer = import_styled_components11.default.div`
1472
+ var DialogContainer = import_styled_components12.default.div`
1406
1473
  position: relative;
1407
1474
  margin: auto;
1408
1475
  padding: 24px 0;
@@ -1423,9 +1490,9 @@ var DialogContainer = import_styled_components11.default.div`
1423
1490
  }
1424
1491
  }}px;
1425
1492
 
1426
- @media ${({ theme: theme4 }) => (0, import_utils5.maxWidth)(theme4.breakpoint.screen1)} {
1493
+ @media ${({ theme: theme3 }) => (0, import_utils6.maxWidth)(theme3.breakpoint.screen1)} {
1427
1494
  width: calc(100% - 48px);
1428
- ${(p) => p.bottomSheet !== false && import_styled_components11.css`
1495
+ ${(p) => p.bottomSheet !== false && import_styled_components12.css`
1429
1496
  margin: 0;
1430
1497
  padding: 0;
1431
1498
  bottom: 0;
@@ -1435,22 +1502,22 @@ var DialogContainer = import_styled_components11.default.div`
1435
1502
  `}
1436
1503
  }
1437
1504
  `;
1438
- var ModalDialog = (0, import_react_spring.animated)(import_styled_components11.default.div`
1505
+ var ModalDialog = (0, import_react_spring.animated)(import_styled_components12.default.div`
1439
1506
  position: relative;
1440
1507
  margin: auto;
1441
1508
  padding: 24px 0;
1442
1509
 
1443
1510
  ${theme((o) => [o.bg.background1, o.borderRadius(24)])}
1444
- @media ${({ theme: theme4 }) => (0, import_utils5.maxWidth)(theme4.breakpoint.screen1)} {
1445
- ${(p) => p.bottomSheet !== false && import_styled_components11.css`
1511
+ @media ${({ theme: theme3 }) => (0, import_utils6.maxWidth)(theme3.breakpoint.screen1)} {
1512
+ ${(p) => p.bottomSheet !== false && import_styled_components12.css`
1446
1513
  border-radius: 0;
1447
- ${p.bottomSheet === "full" && import_styled_components11.css`
1514
+ ${p.bottomSheet === "full" && import_styled_components12.css`
1448
1515
  height: 100%;
1449
1516
  `}
1450
1517
  `}
1451
1518
  }
1452
1519
  `);
1453
- var ModalCrossButton = (0, import_styled_components11.default)(IconButton_default)`
1520
+ var ModalCrossButton = (0, import_styled_components12.default)(IconButton_default)`
1454
1521
  position: absolute;
1455
1522
  top: 8px;
1456
1523
  right: 8px;
@@ -1458,37 +1525,37 @@ var ModalCrossButton = (0, import_styled_components11.default)(IconButton_defaul
1458
1525
  ${theme((o) => [o.font.text3.hover.press])}
1459
1526
  `;
1460
1527
  function ModalTitle(props) {
1461
- const { titleProps, title } = (0, import_react13.useContext)(ModalContext);
1462
- return /* @__PURE__ */ import_react13.default.createElement(ModalHeading, { ...titleProps, ...props }, title);
1528
+ const { titleProps, title } = (0, import_react10.useContext)(ModalContext);
1529
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ModalHeading, { ...titleProps, ...props, children: title });
1463
1530
  }
1464
- var ModalHeading = import_styled_components11.default.h3`
1531
+ var ModalHeading = import_styled_components12.default.h3`
1465
1532
  margin: 0;
1466
1533
  font-weight: inherit;
1467
1534
  font-size: inherit;
1468
1535
  `;
1469
1536
 
1470
1537
  // src/components/Modal/ModalPlumbing.tsx
1471
- var import_react14 = __toESM(require("react"));
1472
- var import_styled_components12 = __toESM(require("styled-components"));
1538
+ var import_styled_components13 = __toESM(require("styled-components"));
1539
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1473
1540
  function ModalHeader() {
1474
- return /* @__PURE__ */ import_react14.default.createElement(ModalHeaderRoot, null, /* @__PURE__ */ import_react14.default.createElement(StyledModalTitle, null));
1541
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ModalHeaderRoot, { children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StyledModalTitle, {}) });
1475
1542
  }
1476
- var ModalHeaderRoot = import_styled_components12.default.div`
1543
+ var ModalHeaderRoot = import_styled_components13.default.div`
1477
1544
  height: 64px;
1478
1545
  display: grid;
1479
1546
  align-content: center;
1480
1547
  justify-content: center;
1481
1548
  `;
1482
- var StyledModalTitle = (0, import_styled_components12.default)(ModalTitle)`
1549
+ var StyledModalTitle = (0, import_styled_components13.default)(ModalTitle)`
1483
1550
  ${theme((o) => [o.font.text1, o.typography(16).bold])}
1484
1551
  `;
1485
- var ModalAlign = import_styled_components12.default.div`
1552
+ var ModalAlign = import_styled_components13.default.div`
1486
1553
  ${theme((o) => [o.padding.horizontal(16)])}
1487
1554
  `;
1488
- var ModalBody = import_styled_components12.default.div`
1555
+ var ModalBody = import_styled_components13.default.div`
1489
1556
  ${theme((o) => [o.padding.bottom(40)])}
1490
1557
  `;
1491
- var ModalButtons = import_styled_components12.default.div`
1558
+ var ModalButtons = import_styled_components13.default.div`
1492
1559
  display: grid;
1493
1560
  grid-auto-flow: row;
1494
1561
  grid-row-gap: 8px;
@@ -1497,16 +1564,26 @@ var ModalButtons = import_styled_components12.default.div`
1497
1564
  `;
1498
1565
 
1499
1566
  // src/components/LoadingSpinner/index.tsx
1500
- var import_react15 = __toESM(require("react"));
1501
- var import_styled_components13 = __toESM(require("styled-components"));
1502
- function LoadingSpinner({
1503
- size = 48,
1504
- padding = 16,
1505
- transparent = false
1506
- }) {
1507
- return /* @__PURE__ */ import_react15.default.createElement(LoadingSpinnerRoot, { size, padding, transparent }, /* @__PURE__ */ import_react15.default.createElement(LoadingSpinnerIcon, null));
1508
- }
1509
- var LoadingSpinnerRoot = import_styled_components13.default.div.attrs({ role: "progressbar" })`
1567
+ var import_react11 = require("react");
1568
+ var import_styled_components14 = __toESM(require("styled-components"));
1569
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1570
+ var LoadingSpinner = (0, import_react11.forwardRef)(
1571
+ function LoadingSpinnerInner({ size = 48, padding = 16, transparent = false, className }, ref) {
1572
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1573
+ LoadingSpinnerRoot,
1574
+ {
1575
+ size,
1576
+ padding,
1577
+ transparent,
1578
+ className,
1579
+ ref,
1580
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(LoadingSpinnerIcon, {})
1581
+ }
1582
+ );
1583
+ }
1584
+ );
1585
+ var LoadingSpinner_default = (0, import_react11.memo)(LoadingSpinner);
1586
+ var LoadingSpinnerRoot = import_styled_components14.default.div.attrs({ role: "progressbar" })`
1510
1587
  box-sizing: content-box;
1511
1588
  margin: auto;
1512
1589
  padding: ${(props) => props.padding}px;
@@ -1520,7 +1597,7 @@ var LoadingSpinnerRoot = import_styled_components13.default.div.attrs({ role: "p
1520
1597
  transparent ? o.bg.transparent : o.bg.background1
1521
1598
  ])}
1522
1599
  `;
1523
- var scaleout = import_styled_components13.keyframes`
1600
+ var scaleout = import_styled_components14.keyframes`
1524
1601
  from {
1525
1602
  transform: scale(0);
1526
1603
  opacity: 1;
@@ -1531,7 +1608,7 @@ var scaleout = import_styled_components13.keyframes`
1531
1608
  opacity: 0;
1532
1609
  }
1533
1610
  `;
1534
- var Icon2 = import_styled_components13.default.div.attrs({ role: "presentation" })`
1611
+ var Icon2 = import_styled_components14.default.div.attrs({ role: "presentation" })`
1535
1612
  width: 1em;
1536
1613
  height: 1em;
1537
1614
  border-radius: 1em;
@@ -1543,52 +1620,90 @@ var Icon2 = import_styled_components13.default.div.attrs({ role: "presentation"
1543
1620
  animation: none;
1544
1621
  }
1545
1622
  `;
1546
- var LoadingSpinnerIcon = import_react15.default.forwardRef(function LoadingSpinnerIcon2({ once = false }, ref) {
1547
- const iconRef = (0, import_react15.useRef)(null);
1548
- (0, import_react15.useImperativeHandle)(ref, () => ({
1549
- restart: () => {
1550
- if (!iconRef.current) {
1551
- return;
1623
+ var LoadingSpinnerIcon = (0, import_react11.forwardRef)(
1624
+ function LoadingSpinnerIcon2({ once = false }, ref) {
1625
+ const iconRef = (0, import_react11.useRef)(null);
1626
+ (0, import_react11.useImperativeHandle)(ref, () => ({
1627
+ restart: () => {
1628
+ if (!iconRef.current) {
1629
+ return;
1630
+ }
1631
+ iconRef.current.dataset.resetAnimation = "true";
1632
+ void iconRef.current.offsetWidth;
1633
+ delete iconRef.current.dataset.resetAnimation;
1552
1634
  }
1553
- iconRef.current.dataset.resetAnimation = "true";
1554
- void iconRef.current.offsetWidth;
1555
- delete iconRef.current.dataset.resetAnimation;
1556
- }
1557
- }));
1558
- return /* @__PURE__ */ import_react15.default.createElement(Icon2, { ref: iconRef, once });
1559
- });
1635
+ }));
1636
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon2, { ref: iconRef, once });
1637
+ }
1638
+ );
1560
1639
 
1561
1640
  // src/components/DropdownSelector/index.tsx
1562
- var import_react17 = __toESM(require("react"));
1563
- var import_styled_components15 = __toESM(require("styled-components"));
1564
- var import_react_stately2 = require("react-stately");
1565
- var import_utils6 = require("@charcoal-ui/utils");
1641
+ var import_react18 = require("react");
1642
+ var import_styled_components17 = __toESM(require("styled-components"));
1643
+ var import_utils8 = require("@charcoal-ui/utils");
1566
1644
 
1567
1645
  // src/components/DropdownSelector/DropdownPopover.tsx
1568
- var import_react16 = __toESM(require("react"));
1646
+ var import_react13 = require("react");
1647
+
1648
+ // src/components/DropdownSelector/Popover/index.tsx
1649
+ var import_react12 = require("react");
1569
1650
  var import_overlays3 = require("@react-aria/overlays");
1570
- var import_styled_components14 = __toESM(require("styled-components"));
1571
- var DropdownPopoverDiv = import_styled_components14.default.div`
1572
- width: 100%;
1573
- ${theme((o) => o.margin.top(4).bottom(4))}
1574
- `;
1575
- function DropdownPopover({ children, state, ...props }) {
1576
- const ref = (0, import_react16.useRef)(null);
1651
+ var import_styled_components15 = __toESM(require("styled-components"));
1652
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1653
+ var _empty = () => null;
1654
+ function Popover(props) {
1655
+ const defaultPopoverRef = (0, import_react12.useRef)(null);
1656
+ const finalPopoverRef = props.popoverRef === void 0 ? defaultPopoverRef : props.popoverRef;
1577
1657
  const { popoverProps, underlayProps } = (0, import_overlays3.usePopover)(
1578
1658
  {
1579
- ...props,
1580
- popoverRef: ref,
1581
- containerPadding: 0
1659
+ triggerRef: props.triggerRef,
1660
+ popoverRef: finalPopoverRef,
1661
+ containerPadding: 16
1582
1662
  },
1583
- state
1663
+ {
1664
+ close: props.onClose,
1665
+ isOpen: props.isOpen,
1666
+ open: _empty,
1667
+ setOpen: _empty,
1668
+ toggle: _empty
1669
+ }
1584
1670
  );
1585
- (0, import_react16.useEffect)(() => {
1586
- if (ref.current && props.triggerRef.current) {
1671
+ if (!props.isOpen)
1672
+ return null;
1673
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_overlays3.Overlay, { portalContainer: document.body, children: [
1674
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { ...underlayProps, style: { position: "fixed", inset: 0 } }),
1675
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(DropdownPopoverDiv, { ...popoverProps, ref: finalPopoverRef, children: [
1676
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_overlays3.DismissButton, { onDismiss: () => props.onClose() }),
1677
+ props.children,
1678
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_overlays3.DismissButton, { onDismiss: () => props.onClose() })
1679
+ ] })
1680
+ ] });
1681
+ }
1682
+ var DropdownPopoverDiv = import_styled_components15.default.div`
1683
+ margin: 4px 0;
1684
+ list-style: none;
1685
+ overflow: auto;
1686
+ max-height: inherit;
1687
+
1688
+ ${theme((o) => [
1689
+ o.bg.background1,
1690
+ o.border.default,
1691
+ o.borderRadius(8),
1692
+ o.padding.vertical(8)
1693
+ ])}
1694
+ `;
1695
+
1696
+ // src/components/DropdownSelector/DropdownPopover.tsx
1697
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1698
+ function DropdownPopover({ children, ...props }) {
1699
+ const ref = (0, import_react13.useRef)(null);
1700
+ (0, import_react13.useEffect)(() => {
1701
+ if (props.isOpen && ref.current && props.triggerRef.current) {
1587
1702
  ref.current.style.width = `${props.triggerRef.current.clientWidth}px`;
1588
1703
  }
1589
- }, [props.triggerRef]);
1590
- (0, import_react16.useEffect)(() => {
1591
- if (state.isOpen && props.value !== void 0) {
1704
+ }, [props.triggerRef, props.isOpen]);
1705
+ (0, import_react13.useEffect)(() => {
1706
+ if (props.isOpen && props.value !== void 0) {
1592
1707
  const windowScrollY = window.scrollY;
1593
1708
  const windowScrollX = window.scrollX;
1594
1709
  const selectedElement = document.querySelector(
@@ -1598,106 +1713,177 @@ function DropdownPopover({ children, state, ...props }) {
1598
1713
  selectedElement?.focus();
1599
1714
  window.scrollTo(windowScrollX, windowScrollY);
1600
1715
  }
1601
- }, [props.value, state.isOpen]);
1602
- return /* @__PURE__ */ import_react16.default.createElement(import_overlays3.Overlay, { portalContainer: document.body }, /* @__PURE__ */ import_react16.default.createElement("div", { ...underlayProps, style: { position: "fixed", inset: 0 } }), /* @__PURE__ */ import_react16.default.createElement(DropdownPopoverDiv, { ...popoverProps, ref }, /* @__PURE__ */ import_react16.default.createElement(import_overlays3.DismissButton, { onDismiss: () => state.close() }), children, /* @__PURE__ */ import_react16.default.createElement(import_overlays3.DismissButton, { onDismiss: () => state.close() })));
1716
+ }, [props.value, props.isOpen]);
1717
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1718
+ Popover,
1719
+ {
1720
+ isOpen: props.isOpen,
1721
+ onClose: props.onClose,
1722
+ popoverRef: ref,
1723
+ triggerRef: props.triggerRef,
1724
+ children
1725
+ }
1726
+ );
1603
1727
  }
1604
1728
 
1605
- // src/components/DropdownSelector/index.tsx
1606
- var DropdownSelectorContext = (0, import_react17.createContext)({
1729
+ // src/components/DropdownSelector/utils/findPreviewRecursive.tsx
1730
+ var import_react14 = __toESM(require("react"));
1731
+ function findPreviewRecursive(children, value) {
1732
+ const childArray = import_react14.default.Children.toArray(children);
1733
+ for (let i = 0; i < childArray.length; i++) {
1734
+ const child = childArray[i];
1735
+ if (import_react14.default.isValidElement(child)) {
1736
+ if ("value" in child.props) {
1737
+ const childValue = child.props.value;
1738
+ if (childValue === value && "children" in child.props) {
1739
+ const children2 = child.props.children;
1740
+ return children2;
1741
+ }
1742
+ }
1743
+ if ("children" in child.props) {
1744
+ const children2 = findPreviewRecursive(
1745
+ child.props.children,
1746
+ value
1747
+ );
1748
+ if (children2 !== void 0) {
1749
+ return children2;
1750
+ }
1751
+ }
1752
+ }
1753
+ }
1754
+ }
1755
+
1756
+ // src/components/DropdownSelector/MenuList/index.tsx
1757
+ var import_react17 = require("react");
1758
+ var import_styled_components16 = __toESM(require("styled-components"));
1759
+
1760
+ // src/components/DropdownSelector/MenuList/MenuListContext.ts
1761
+ var import_react15 = require("react");
1762
+ var MenuListContext = (0, import_react15.createContext)({
1763
+ root: void 0,
1607
1764
  value: "",
1765
+ values: [],
1608
1766
  setValue: (_v) => {
1609
1767
  }
1610
1768
  });
1611
- var defaultRequiredText = "*\u5FC5\u9808";
1612
- function DropdownSelector(props) {
1613
- const triggerRef = (0, import_react17.useRef)(null);
1614
- const state = (0, import_react_stately2.useOverlayTriggerState)({});
1615
- let preview;
1616
- const childArray = import_react17.default.Children.toArray(props.children);
1769
+
1770
+ // src/components/DropdownSelector/MenuList/internals/getValuesRecursive.tsx
1771
+ var import_react16 = __toESM(require("react"));
1772
+ function getValuesRecursive(children, values = []) {
1773
+ const childArray = import_react16.default.Children.toArray(children);
1617
1774
  for (let i = 0; i < childArray.length; i++) {
1618
1775
  const child = childArray[i];
1619
- if (import_react17.default.isValidElement(child) && "value" in child.props) {
1620
- const find = child.props.value === props.value;
1621
- if (find && "children" in child.props) {
1622
- preview = child.props.children;
1623
- break;
1776
+ if (import_react16.default.isValidElement(child)) {
1777
+ const props = child.props;
1778
+ if ("value" in props && typeof props.value === "string") {
1779
+ const childValue = props.value;
1780
+ values.push(childValue);
1781
+ }
1782
+ if ("children" in props && props.children) {
1783
+ getValuesRecursive(props.children, values);
1624
1784
  }
1625
1785
  }
1626
1786
  }
1627
- return /* @__PURE__ */ import_react17.default.createElement(DropdownSelectorRoot, { "aria-disabled": props.disabled }, props.showLabel === true && /* @__PURE__ */ import_react17.default.createElement(
1628
- DropdownFieldLabel,
1629
- {
1630
- label: props.label,
1631
- required: props.required,
1632
- requiredText: props.requiredText ?? defaultRequiredText,
1633
- subLabel: props.subLabel
1634
- }
1635
- ), /* @__PURE__ */ import_react17.default.createElement(
1636
- DropdownButton,
1637
- {
1638
- invalid: props.invalid,
1639
- disabled: props.disabled,
1640
- onClick: () => {
1641
- if (props.disabled === true)
1642
- return;
1643
- state.open();
1644
- },
1645
- ref: triggerRef
1646
- },
1647
- /* @__PURE__ */ import_react17.default.createElement(DropdownButtonText, null, props.placeholder !== void 0 && preview === void 0 ? props.placeholder : preview),
1648
- /* @__PURE__ */ import_react17.default.createElement(DropdownButtonIcon, { name: "16/Menu" })
1649
- ), state.isOpen && /* @__PURE__ */ import_react17.default.createElement(
1650
- DropdownPopover,
1787
+ }
1788
+
1789
+ // src/components/DropdownSelector/MenuList/index.tsx
1790
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1791
+ function MenuList(props) {
1792
+ const root = (0, import_react17.useRef)(null);
1793
+ const values = [];
1794
+ getValuesRecursive(props.children, values);
1795
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(StyledUl, { ref: root, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1796
+ MenuListContext.Provider,
1651
1797
  {
1652
- state,
1653
- triggerRef,
1654
- value: props.value
1655
- },
1656
- /* @__PURE__ */ import_react17.default.createElement(ListboxRoot, null, /* @__PURE__ */ import_react17.default.createElement(
1657
- DropdownSelectorContext.Provider,
1658
- {
1659
- value: {
1660
- value: props.value,
1661
- setValue: (v) => {
1662
- props.onChange(v);
1663
- state.close();
1664
- }
1798
+ value: {
1799
+ value: props.value ?? "",
1800
+ root,
1801
+ values,
1802
+ setValue: (v) => {
1803
+ props.onChange?.(v);
1665
1804
  }
1666
1805
  },
1667
- props.children
1668
- ))
1669
- ), props.assistiveText !== void 0 && /* @__PURE__ */ import_react17.default.createElement(AssertiveText, { invalid: props.invalid }, props.assistiveText));
1806
+ children: props.children
1807
+ }
1808
+ ) });
1670
1809
  }
1671
- var ListboxRoot = import_styled_components15.default.ul`
1672
- padding-left: 0;
1810
+ var StyledUl = import_styled_components16.default.ul`
1811
+ padding: 0;
1673
1812
  margin: 0;
1674
- box-sizing: border-box;
1675
- list-style: none;
1676
- overflow: auto;
1677
- max-height: inherit;
1678
-
1679
- ${theme((o) => [
1680
- o.bg.background1,
1681
- o.border.default,
1682
- o.borderRadius(8),
1683
- o.padding.vertical(8)
1684
- ])}
1685
1813
  `;
1686
- var DropdownSelectorRoot = import_styled_components15.default.div`
1814
+
1815
+ // src/components/DropdownSelector/index.tsx
1816
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1817
+ var defaultRequiredText = "*\u5FC5\u9808";
1818
+ function DropdownSelector(props) {
1819
+ const triggerRef = (0, import_react18.useRef)(null);
1820
+ const [isOpen, setIsOpen] = (0, import_react18.useState)(false);
1821
+ const preview = findPreviewRecursive(props.children, props.value);
1822
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(DropdownSelectorRoot, { "aria-disabled": props.disabled, children: [
1823
+ props.showLabel === true && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1824
+ DropdownFieldLabel,
1825
+ {
1826
+ label: props.label,
1827
+ required: props.required,
1828
+ requiredText: props.requiredText ?? defaultRequiredText,
1829
+ subLabel: props.subLabel
1830
+ }
1831
+ ),
1832
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1833
+ DropdownButton,
1834
+ {
1835
+ invalid: props.invalid,
1836
+ disabled: props.disabled,
1837
+ onClick: () => {
1838
+ if (props.disabled === true)
1839
+ return;
1840
+ setIsOpen(true);
1841
+ },
1842
+ ref: triggerRef,
1843
+ children: [
1844
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DropdownButtonText, { children: props.placeholder !== void 0 && preview === void 0 ? props.placeholder : preview }),
1845
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(DropdownButtonIcon, { name: "16/Menu" })
1846
+ ]
1847
+ }
1848
+ ),
1849
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1850
+ DropdownPopover,
1851
+ {
1852
+ isOpen,
1853
+ onClose: () => setIsOpen(false),
1854
+ triggerRef,
1855
+ value: props.value,
1856
+ children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1857
+ MenuList,
1858
+ {
1859
+ value: props.value,
1860
+ onChange: (v) => {
1861
+ props.onChange(v);
1862
+ setIsOpen(false);
1863
+ },
1864
+ children: props.children
1865
+ }
1866
+ )
1867
+ }
1868
+ ),
1869
+ props.assistiveText !== void 0 && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(AssertiveText, { invalid: props.invalid, children: props.assistiveText })
1870
+ ] });
1871
+ }
1872
+ var DropdownSelectorRoot = import_styled_components17.default.div`
1687
1873
  display: inline-block;
1688
1874
  width: 100%;
1689
1875
 
1690
- ${import_utils6.disabledSelector} {
1876
+ ${import_utils8.disabledSelector} {
1691
1877
  cursor: default;
1692
1878
  ${theme((o) => o.disabled)}
1693
1879
  }
1694
1880
  `;
1695
- var DropdownFieldLabel = (0, import_styled_components15.default)(FieldLabel_default)`
1881
+ var DropdownFieldLabel = (0, import_styled_components17.default)(FieldLabel_default)`
1696
1882
  width: 100%;
1697
1883
 
1698
1884
  ${theme((o) => o.margin.bottom(8))}
1699
1885
  `;
1700
- var DropdownButton = import_styled_components15.default.button`
1886
+ var DropdownButton = import_styled_components17.default.button`
1701
1887
  display: flex;
1702
1888
  justify-content: space-between;
1703
1889
  align-items: center;
@@ -1707,7 +1893,7 @@ var DropdownButton = import_styled_components15.default.button`
1707
1893
  box-sizing: border-box;
1708
1894
  cursor: pointer;
1709
1895
 
1710
- ${import_utils6.disabledSelector} {
1896
+ ${import_utils8.disabledSelector} {
1711
1897
  cursor: default;
1712
1898
  }
1713
1899
 
@@ -1720,15 +1906,15 @@ var DropdownButton = import_styled_components15.default.button`
1720
1906
  invalid === true && o.outline.assertive
1721
1907
  ])}
1722
1908
  `;
1723
- var DropdownButtonText = import_styled_components15.default.span`
1909
+ var DropdownButtonText = import_styled_components17.default.span`
1724
1910
  text-align: left;
1725
1911
 
1726
1912
  ${theme((o) => [o.typography(14), o.font.text2])}
1727
1913
  `;
1728
- var DropdownButtonIcon = (0, import_styled_components15.default)(Icon_default)`
1914
+ var DropdownButtonIcon = (0, import_styled_components17.default)(Icon_default)`
1729
1915
  ${theme((o) => [o.font.text2])}
1730
1916
  `;
1731
- var AssertiveText = import_styled_components15.default.div`
1917
+ var AssertiveText = import_styled_components17.default.div`
1732
1918
  ${({ invalid }) => theme((o) => [
1733
1919
  o.typography(14),
1734
1920
  o.margin.top(8),
@@ -1736,129 +1922,204 @@ var AssertiveText = import_styled_components15.default.div`
1736
1922
  ])}
1737
1923
  `;
1738
1924
 
1739
- // src/components/DropdownSelector/OptionItem.tsx
1740
- var import_react18 = __toESM(require("react"));
1741
- var import_styled_components16 = __toESM(require("styled-components"));
1742
- var import_utils7 = require("@charcoal-ui/utils");
1743
-
1744
- // src/components/DropdownSelector/utils/handleFocusByKeyBoard.tsx
1745
- function handleFocusByKeyBoard(element) {
1746
- const parent = element.parentElement;
1747
- if (!parent)
1748
- return;
1749
- const rect = element.getBoundingClientRect();
1750
- const parentRect = parent.getBoundingClientRect();
1751
- if (rect.bottom > parentRect.bottom) {
1752
- parent.scrollTo({
1753
- top: parent.scrollTop + rect.bottom - parentRect.bottom
1754
- });
1755
- } else if (rect.top < parentRect.top) {
1756
- parent.scrollTo({
1757
- top: parent.scrollTop - (parentRect.top - rect.top)
1758
- });
1759
- }
1925
+ // src/components/DropdownSelector/DropdownMenuItem.tsx
1926
+ var import_styled_components19 = __toESM(require("styled-components"));
1927
+
1928
+ // src/components/DropdownSelector/ListItem/index.tsx
1929
+ var import_styled_components18 = __toESM(require("styled-components"));
1930
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1931
+ function ListItem(props) {
1932
+ const { children, ...rest } = props;
1933
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(StyledLi, { role: "option", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(ItemDiv, { ...rest, children: props.children }) });
1760
1934
  }
1935
+ var StyledLi = import_styled_components18.default.li`
1936
+ list-style: none;
1937
+ `;
1938
+ var ItemDiv = import_styled_components18.default.div`
1939
+ display: flex;
1940
+ align-items: center;
1941
+ min-height: 40px;
1942
+ cursor: pointer;
1943
+ outline: none;
1944
+
1945
+ ${theme((o) => [o.padding.horizontal(16), o.disabled])}
1946
+
1947
+ &[aria-disabled="true"] {
1948
+ cursor: default;
1949
+ }
1761
1950
 
1762
- // src/components/DropdownSelector/utils/focusIfHTMLLIElement.tsx
1763
- function focusIfHTMLLIElement(element) {
1764
- if (element instanceof HTMLLIElement) {
1765
- element.focus({ preventScroll: true });
1766
- handleFocusByKeyBoard(element);
1951
+ :hover,
1952
+ :focus,
1953
+ :focus-within {
1954
+ ${theme((o) => [o.bg.surface3])}
1955
+ }
1956
+ `;
1957
+
1958
+ // src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx
1959
+ var import_react19 = require("react");
1960
+
1961
+ // src/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.tsx
1962
+ function handleFocusByKeyBoard(element, parent) {
1963
+ const isScrollable = parent.scrollHeight > parent.clientHeight;
1964
+ if (isScrollable) {
1965
+ const rect = element.getBoundingClientRect();
1966
+ const parentRect = parent.getBoundingClientRect();
1967
+ if (rect.bottom > parentRect.bottom) {
1968
+ parent.scrollTo({
1969
+ top: parent.scrollTop + rect.bottom - parentRect.bottom
1970
+ });
1971
+ } else if (rect.top < parentRect.top) {
1972
+ parent.scrollTo({
1973
+ top: parent.scrollTop - (parentRect.top - rect.top)
1974
+ });
1975
+ }
1976
+ } else {
1977
+ scrollIfNeeded(element);
1978
+ }
1979
+ }
1980
+ function scrollIfNeeded(element) {
1981
+ const elementRect = element.getBoundingClientRect();
1982
+ const isVisible = elementRect.top >= 0 && elementRect.bottom <= (window.innerHeight || document.documentElement.clientHeight);
1983
+ if (!isVisible) {
1984
+ element.scrollIntoView({
1985
+ block: "nearest"
1986
+ });
1767
1987
  }
1768
1988
  }
1769
1989
 
1770
- // src/components/DropdownSelector/OptionItem.tsx
1771
- function OptionItem(props) {
1772
- const { value, setValue } = (0, import_react18.useContext)(DropdownSelectorContext);
1773
- const isSelected = props.value === value;
1774
- const onSelect = () => {
1775
- setValue(props.value);
1776
- };
1777
- return /* @__PURE__ */ import_react18.default.createElement(
1778
- OptionRoot,
1779
- {
1780
- "data-key": props.value,
1781
- onMouseMove: (e) => {
1782
- e.currentTarget.focus({ preventScroll: true });
1783
- },
1784
- onKeyDown: (e) => {
1785
- if (e.key === "Enter") {
1786
- onSelect();
1787
- } else if (e.key === "ArrowUp") {
1788
- e.preventDefault();
1789
- const prev = e.currentTarget.previousElementSibling;
1790
- if (prev === null) {
1791
- focusIfHTMLLIElement(e.currentTarget.parentElement?.lastChild);
1792
- }
1793
- focusIfHTMLLIElement(prev);
1794
- } else if (e.key === "ArrowDown") {
1795
- e.preventDefault();
1796
- const next = e.currentTarget.nextElementSibling;
1797
- if (next === null) {
1798
- focusIfHTMLLIElement(e.currentTarget.parentElement?.firstChild);
1990
+ // src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx
1991
+ function useMenuItemHandleKeyDown(value) {
1992
+ const { setValue, root, values } = (0, import_react19.useContext)(MenuListContext);
1993
+ const setContextValue = (0, import_react19.useCallback)(() => {
1994
+ if (value !== void 0)
1995
+ setValue(value);
1996
+ }, [value, setValue]);
1997
+ const handleKeyDown = (0, import_react19.useCallback)(
1998
+ (e) => {
1999
+ if (e.key === "Enter") {
2000
+ setContextValue();
2001
+ } else if (e.key === "ArrowUp" || e.key === "ArrowDown") {
2002
+ e.preventDefault();
2003
+ if (!values || value === void 0)
2004
+ return;
2005
+ const index = values.indexOf(value);
2006
+ if (index === -1)
2007
+ return;
2008
+ const focusValue = e.key === "ArrowUp" ? index - 1 < 0 ? values[values.length - 1] : values[index - 1] : index + 1 >= values.length ? values[0] : values[index + 1];
2009
+ const next = root?.current?.querySelector(`[data-key='${focusValue}']`);
2010
+ if (next instanceof HTMLElement) {
2011
+ next.focus({ preventScroll: true });
2012
+ if (root?.current?.parentElement) {
2013
+ handleFocusByKeyBoard(next, root.current.parentElement);
1799
2014
  }
1800
- focusIfHTMLLIElement(next);
1801
- } else if (e.key === " ") {
1802
- e.preventDefault();
1803
2015
  }
1804
- },
1805
- onClick: onSelect,
1806
- tabIndex: -1
2016
+ }
1807
2017
  },
1808
- isSelected && /* @__PURE__ */ import_react18.default.createElement(OptionCheckIcon, { name: "16/Check" }),
1809
- /* @__PURE__ */ import_react18.default.createElement(OptionText, { isSelected }, props.children)
2018
+ [setContextValue, value, root, values]
1810
2019
  );
2020
+ return [handleKeyDown, setContextValue];
1811
2021
  }
1812
- var OptionRoot = import_styled_components16.default.li`
1813
- display: flex;
1814
- align-items: center;
1815
- gap: ${({ theme: theme4 }) => (0, import_utils7.px)(theme4.spacing[4])};
1816
- height: 40px;
1817
- cursor: pointer;
1818
- outline: none;
1819
2022
 
1820
- ${theme((o) => [o.padding.horizontal(8)])}
2023
+ // src/components/DropdownSelector/MenuItem/index.tsx
2024
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2025
+ function MenuItem(props) {
2026
+ const { children, as, ...rest } = props;
2027
+ const [handleKeyDown, setContextValue] = useMenuItemHandleKeyDown(props.value);
2028
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2029
+ ListItem,
2030
+ {
2031
+ ...rest,
2032
+ as,
2033
+ "data-key": props.value,
2034
+ onKeyDown: handleKeyDown,
2035
+ onClick: props.disabled === true ? void 0 : setContextValue,
2036
+ tabIndex: -1,
2037
+ "aria-disabled": props.disabled,
2038
+ children: props.children
2039
+ }
2040
+ );
2041
+ }
1821
2042
 
1822
- :focus {
1823
- ${theme((o) => [o.bg.surface3])}
1824
- }
2043
+ // src/components/DropdownSelector/DropdownMenuItem.tsx
2044
+ var import_react20 = require("react");
2045
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2046
+ function DropdownMenuItem(props) {
2047
+ const { value: ctxValue } = (0, import_react20.useContext)(MenuListContext);
2048
+ const isSelected = props.value === ctxValue;
2049
+ const { children, ...rest } = props;
2050
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(MenuItem, { ...rest, children: [
2051
+ isSelected && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Text2ColorIcon, { name: "16/Check" }),
2052
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(StyledSpan, { isSelected, children: props.children })
2053
+ ] });
2054
+ }
2055
+ var StyledSpan = import_styled_components19.default.span`
2056
+ ${theme((o) => [o.typography(14), o.font.text2])};
2057
+ display: flex;
2058
+ align-items: center;
2059
+ width: 100%;
2060
+ margin-left: ${({ isSelected }) => isSelected === true ? 0 : 20}px;
1825
2061
  `;
1826
- var OptionCheckIcon = (0, import_styled_components16.default)(Icon_default)`
2062
+ var Text2ColorIcon = (0, import_styled_components19.default)(Icon_default)`
1827
2063
  ${theme((o) => [o.font.text2])}
2064
+ padding-right: 4px;
1828
2065
  `;
1829
- var OptionText = import_styled_components16.default.span`
2066
+
2067
+ // src/components/DropdownSelector/MenuItemGroup/index.tsx
2068
+ var import_styled_components20 = __toESM(require("styled-components"));
2069
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2070
+ function MenuItemGroup(props) {
2071
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(StyledLi2, { role: "presentation", children: [
2072
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TextSpan, { children: props.text }),
2073
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StyledUl2, { role: "group", children: props.children })
2074
+ ] });
2075
+ }
2076
+ var TextSpan = import_styled_components20.default.span`
2077
+ display: block;
2078
+ color: ${({ theme: theme3 }) => theme3.color.text3};
2079
+ font-size: 12px;
2080
+ font-weight: bold;
2081
+ padding: 12px 0 8px 16px;
2082
+ `;
2083
+ var StyledUl2 = import_styled_components20.default.ul`
2084
+ padding-left: 0;
2085
+ margin: 0;
2086
+ box-sizing: border-box;
2087
+ list-style: none;
2088
+ overflow: hidden;
2089
+ `;
2090
+ var StyledLi2 = import_styled_components20.default.li`
1830
2091
  display: block;
1831
- ${theme((o) => [o.typography(14), o.font.text2])}
1832
- margin-left: ${({ isSelected }) => isSelected === true ? 0 : 20}px;
1833
2092
  `;
1834
2093
 
1835
2094
  // src/components/SegmentedControl/index.tsx
1836
- var import_react20 = __toESM(require("react"));
1837
- var import_react_stately3 = require("react-stately");
2095
+ var import_react22 = require("react");
2096
+ var import_react_stately2 = require("react-stately");
1838
2097
  var import_radio = require("@react-aria/radio");
1839
- var import_styled_components17 = __toESM(require("styled-components"));
1840
- var import_utils8 = require("@charcoal-ui/utils");
2098
+ var import_styled_components21 = __toESM(require("styled-components"));
2099
+ var import_utils9 = require("@charcoal-ui/utils");
1841
2100
 
1842
2101
  // src/components/SegmentedControl/RadioGroupContext.tsx
1843
- var import_react19 = __toESM(require("react"));
1844
- var RadioContext = (0, import_react19.createContext)(null);
2102
+ var import_react21 = require("react");
2103
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2104
+ var RadioContext = (0, import_react21.createContext)(null);
1845
2105
  var RadioProvider = ({
1846
2106
  value,
1847
2107
  children
1848
2108
  }) => {
1849
- return /* @__PURE__ */ import_react19.default.createElement(RadioContext.Provider, { value }, children);
2109
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(RadioContext.Provider, { value, children });
1850
2110
  };
1851
2111
  var useRadioContext = () => {
1852
- const state = (0, import_react19.useContext)(RadioContext);
2112
+ const state = (0, import_react21.useContext)(RadioContext);
1853
2113
  if (state === null)
1854
2114
  throw new Error("`<RadioProvider>` is not likely mounted.");
1855
2115
  return state;
1856
2116
  };
1857
2117
 
1858
2118
  // src/components/SegmentedControl/index.tsx
1859
- var SegmentedControl = (0, import_react20.forwardRef)(
2119
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2120
+ var SegmentedControl = (0, import_react22.forwardRef)(
1860
2121
  function SegmentedControlInner(props, ref) {
1861
- const ariaRadioGroupProps = (0, import_react20.useMemo)(
2122
+ const ariaRadioGroupProps = (0, import_react22.useMemo)(
1862
2123
  () => ({
1863
2124
  ...props,
1864
2125
  isDisabled: props.disabled,
@@ -1868,30 +2129,42 @@ var SegmentedControl = (0, import_react20.forwardRef)(
1868
2129
  }),
1869
2130
  [props]
1870
2131
  );
1871
- const state = (0, import_react_stately3.useRadioGroupState)(ariaRadioGroupProps);
2132
+ const state = (0, import_react_stately2.useRadioGroupState)(ariaRadioGroupProps);
1872
2133
  const { radioGroupProps } = (0, import_radio.useRadioGroup)(ariaRadioGroupProps, state);
1873
- const segmentedControlItems = (0, import_react20.useMemo)(() => {
2134
+ const segmentedControlItems = (0, import_react22.useMemo)(() => {
1874
2135
  return props.data.map(
1875
2136
  (d) => typeof d === "string" ? { value: d, label: d } : d
1876
2137
  );
1877
2138
  }, [props.data]);
1878
- return /* @__PURE__ */ import_react20.default.createElement(SegmentedControlRoot, { ref, ...radioGroupProps }, /* @__PURE__ */ import_react20.default.createElement(RadioProvider, { value: state }, segmentedControlItems.map((item) => /* @__PURE__ */ import_react20.default.createElement(
1879
- Segmented,
2139
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2140
+ SegmentedControlRoot,
1880
2141
  {
1881
- key: item.value,
1882
- value: item.value,
1883
- disabled: item.disabled
1884
- },
1885
- item.label
1886
- ))));
2142
+ ref,
2143
+ ...radioGroupProps,
2144
+ className: props.className,
2145
+ children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(RadioProvider, { value: state, children: segmentedControlItems.map((item) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2146
+ Segmented,
2147
+ {
2148
+ value: item.value,
2149
+ disabled: item.disabled,
2150
+ children: item.label
2151
+ },
2152
+ item.value
2153
+ )) })
2154
+ }
2155
+ );
1887
2156
  }
1888
2157
  );
1889
- var SegmentedControl_default = (0, import_react20.memo)(SegmentedControl);
1890
- var Segmented = ({ children, ...props }) => {
2158
+ var SegmentedControl_default = (0, import_react22.memo)(SegmentedControl);
2159
+ var Segmented = (props) => {
1891
2160
  const state = useRadioContext();
1892
- const ref = (0, import_react20.useRef)(null);
1893
- const ariaRadioProps = (0, import_react20.useMemo)(
1894
- () => ({ ...props, isDisabled: props.disabled }),
2161
+ const ref = (0, import_react22.useRef)(null);
2162
+ const ariaRadioProps = (0, import_react22.useMemo)(
2163
+ () => ({
2164
+ value: props.value,
2165
+ isDisabled: props.disabled,
2166
+ children: props.children
2167
+ }),
1895
2168
  [props]
1896
2169
  );
1897
2170
  const { inputProps, isDisabled, isSelected } = (0, import_radio.useRadio)(
@@ -1899,30 +2172,32 @@ var Segmented = ({ children, ...props }) => {
1899
2172
  state,
1900
2173
  ref
1901
2174
  );
1902
- return /* @__PURE__ */ import_react20.default.createElement(
2175
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1903
2176
  SegmentedRoot,
1904
2177
  {
1905
2178
  "aria-disabled": isDisabled || state.isReadOnly,
1906
- checked: isSelected
1907
- },
1908
- /* @__PURE__ */ import_react20.default.createElement(SegmentedInput, { ...inputProps, ref }),
1909
- /* @__PURE__ */ import_react20.default.createElement(RadioLabel2, null, /* @__PURE__ */ import_react20.default.createElement(SegmentedLabelInner, null, children))
2179
+ checked: isSelected,
2180
+ children: [
2181
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SegmentedInput, { ...inputProps, ref }),
2182
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(RadioLabel2, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SegmentedLabelInner, { children: props.children }) })
2183
+ ]
2184
+ }
1910
2185
  );
1911
2186
  };
1912
- var SegmentedControlRoot = import_styled_components17.default.div`
2187
+ var SegmentedControlRoot = import_styled_components21.default.div`
1913
2188
  display: inline-flex;
1914
2189
  align-items: center;
1915
2190
 
1916
2191
  ${theme((o) => [o.bg.surface3, o.borderRadius(16)])}
1917
2192
  `;
1918
- var SegmentedRoot = import_styled_components17.default.label`
2193
+ var SegmentedRoot = import_styled_components21.default.label`
1919
2194
  position: relative;
1920
2195
  display: flex;
1921
2196
  align-items: center;
1922
2197
  cursor: pointer;
1923
2198
  height: 32px;
1924
2199
 
1925
- ${import_utils8.disabledSelector} {
2200
+ ${import_utils9.disabledSelector} {
1926
2201
  cursor: default;
1927
2202
  }
1928
2203
 
@@ -1934,7 +2209,7 @@ var SegmentedRoot = import_styled_components17.default.label`
1934
2209
  checked === true ? o.font.text5 : o.font.text2
1935
2210
  ])}
1936
2211
  `;
1937
- var SegmentedInput = import_styled_components17.default.input`
2212
+ var SegmentedInput = import_styled_components21.default.input`
1938
2213
  position: absolute;
1939
2214
 
1940
2215
  height: 0px;
@@ -1948,26 +2223,27 @@ var SegmentedInput = import_styled_components17.default.input`
1948
2223
  white-space: nowrap;
1949
2224
  opacity: 0;
1950
2225
  `;
1951
- var RadioLabel2 = import_styled_components17.default.div`
2226
+ var RadioLabel2 = import_styled_components21.default.div`
1952
2227
  background: transparent;
1953
2228
  display: flex;
1954
2229
  align-items: center;
1955
2230
  height: 22px;
1956
2231
  `;
1957
- var SegmentedLabelInner = import_styled_components17.default.div`
2232
+ var SegmentedLabelInner = import_styled_components21.default.div`
1958
2233
  ${theme((o) => [o.typography(14)])}
1959
2234
  `;
1960
2235
 
1961
2236
  // src/components/Checkbox/index.tsx
1962
- var import_react21 = __toESM(require("react"));
1963
- var import_styled_components18 = __toESM(require("styled-components"));
2237
+ var import_react23 = require("react");
2238
+ var import_styled_components22 = __toESM(require("styled-components"));
1964
2239
  var import_checkbox = require("@react-aria/checkbox");
1965
- var import_utils9 = require("@react-aria/utils");
1966
- var import_react_stately4 = require("react-stately");
1967
- var import_utils10 = require("@charcoal-ui/utils");
1968
- var Checkbox = (0, import_react21.forwardRef)(
2240
+ var import_utils10 = require("@react-aria/utils");
2241
+ var import_react_stately3 = require("react-stately");
2242
+ var import_utils11 = require("@charcoal-ui/utils");
2243
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2244
+ var Checkbox = (0, import_react23.forwardRef)(
1969
2245
  function CheckboxInner(props, ref) {
1970
- const ariaCheckboxProps = (0, import_react21.useMemo)(
2246
+ const ariaCheckboxProps = (0, import_react23.useMemo)(
1971
2247
  () => ({
1972
2248
  ...props,
1973
2249
  isSelected: props.checked,
@@ -1977,33 +2253,39 @@ var Checkbox = (0, import_react21.forwardRef)(
1977
2253
  }),
1978
2254
  [props]
1979
2255
  );
1980
- const state = (0, import_react_stately4.useToggleState)(ariaCheckboxProps);
1981
- const objectRef = (0, import_utils9.useObjectRef)(ref);
2256
+ const state = (0, import_react_stately3.useToggleState)(ariaCheckboxProps);
2257
+ const objectRef = (0, import_utils10.useObjectRef)(ref);
1982
2258
  const { inputProps } = (0, import_checkbox.useCheckbox)(ariaCheckboxProps, state, objectRef);
1983
2259
  const isDisabled = (props.disabled ?? false) || (props.readonly ?? false);
1984
- return /* @__PURE__ */ import_react21.default.createElement(InputRoot, { "aria-disabled": isDisabled }, /* @__PURE__ */ import_react21.default.createElement(CheckboxRoot, null, /* @__PURE__ */ import_react21.default.createElement(CheckboxInput, { type: "checkbox", ...inputProps }), /* @__PURE__ */ import_react21.default.createElement(CheckboxInputOverlay, { "aria-hidden": true, checked: inputProps.checked }, /* @__PURE__ */ import_react21.default.createElement(Icon_default, { name: "24/Check", unsafeNonGuidelineScale: 2 / 3 }))), "children" in props && /* @__PURE__ */ import_react21.default.createElement(InputLabel, null, props.children));
2260
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(InputRoot, { "aria-disabled": isDisabled, className: props.className, children: [
2261
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(CheckboxRoot, { children: [
2262
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CheckboxInput, { type: "checkbox", ...inputProps }),
2263
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(CheckboxInputOverlay, { "aria-hidden": true, checked: inputProps.checked, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon_default, { name: "24/Check", unsafeNonGuidelineScale: 2 / 3 }) })
2264
+ ] }),
2265
+ "children" in props && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(InputLabel, { children: props.children })
2266
+ ] });
1985
2267
  }
1986
2268
  );
1987
- var Checkbox_default = (0, import_react21.memo)(Checkbox);
1988
- var hiddenCss = import_styled_components18.css`
2269
+ var Checkbox_default = (0, import_react23.memo)(Checkbox);
2270
+ var hiddenCss = import_styled_components22.css`
1989
2271
  visibility: hidden;
1990
2272
  `;
1991
- var InputRoot = import_styled_components18.default.label`
2273
+ var InputRoot = import_styled_components22.default.label`
1992
2274
  position: relative;
1993
2275
  display: flex;
1994
2276
 
1995
2277
  cursor: pointer;
1996
- ${import_utils10.disabledSelector} {
2278
+ ${import_utils11.disabledSelector} {
1997
2279
  cursor: default;
1998
2280
  }
1999
2281
 
2000
- gap: ${({ theme: theme4 }) => (0, import_utils10.px)(theme4.spacing[4])};
2282
+ gap: ${({ theme: theme3 }) => (0, import_utils11.px)(theme3.spacing[4])};
2001
2283
  ${theme((o) => [o.disabled])}
2002
2284
  `;
2003
- var CheckboxRoot = import_styled_components18.default.div`
2285
+ var CheckboxRoot = import_styled_components22.default.div`
2004
2286
  position: relative;
2005
2287
  `;
2006
- var CheckboxInput = import_styled_components18.default.input`
2288
+ var CheckboxInput = import_styled_components22.default.input`
2007
2289
  &[type='checkbox'] {
2008
2290
  appearance: none;
2009
2291
  display: block;
@@ -2018,7 +2300,7 @@ var CheckboxInput = import_styled_components18.default.input`
2018
2300
  &:not(:checked) {
2019
2301
  border-width: 2px;
2020
2302
  border-style: solid;
2021
- border-color: ${({ theme: theme4 }) => theme4.color.text4};
2303
+ border-color: ${({ theme: theme3 }) => theme3.color.text4};
2022
2304
  }
2023
2305
  ${theme((o) => [o.outline.default.focus, o.borderRadius(4)])}
2024
2306
 
@@ -2026,7 +2308,7 @@ var CheckboxInput = import_styled_components18.default.input`
2026
2308
  transition: all 0.2s !important;
2027
2309
  }
2028
2310
  `;
2029
- var CheckboxInputOverlay = import_styled_components18.default.div`
2311
+ var CheckboxInputOverlay = import_styled_components22.default.div`
2030
2312
  position: absolute;
2031
2313
  top: -2px;
2032
2314
  left: -2px;
@@ -2039,7 +2321,7 @@ var CheckboxInputOverlay = import_styled_components18.default.div`
2039
2321
 
2040
2322
  ${({ checked }) => checked !== true && hiddenCss};
2041
2323
  `;
2042
- var InputLabel = import_styled_components18.default.div`
2324
+ var InputLabel = import_styled_components22.default.div`
2043
2325
  ${theme((o) => [o.font.text2])}
2044
2326
 
2045
2327
  font-size: 14px;
@@ -2048,16 +2330,17 @@ var InputLabel = import_styled_components18.default.div`
2048
2330
  `;
2049
2331
 
2050
2332
  // src/components/TagItem/index.tsx
2051
- var import_react22 = __toESM(require("react"));
2052
- var import_utils11 = require("@react-aria/utils");
2053
- var import_styled_components19 = __toESM(require("styled-components"));
2054
- var import_utils12 = require("@charcoal-ui/utils");
2333
+ var import_react24 = require("react");
2334
+ var import_utils12 = require("@react-aria/utils");
2335
+ var import_styled_components23 = __toESM(require("styled-components"));
2336
+ var import_utils13 = require("@charcoal-ui/utils");
2055
2337
  var import_button = require("@react-aria/button");
2338
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2056
2339
  var sizeMap = {
2057
2340
  S: 32,
2058
2341
  M: 40
2059
2342
  };
2060
- var TagItem = (0, import_react22.forwardRef)(
2343
+ var TagItem = (0, import_react24.forwardRef)(
2061
2344
  function TagItemInner({
2062
2345
  label,
2063
2346
  translatedLabel,
@@ -2069,8 +2352,8 @@ var TagItem = (0, import_react22.forwardRef)(
2069
2352
  className,
2070
2353
  ...props
2071
2354
  }, _ref) {
2072
- const ref = (0, import_utils11.useObjectRef)(_ref);
2073
- const ariaButtonProps = (0, import_react22.useMemo)(
2355
+ const ref = (0, import_utils12.useObjectRef)(_ref);
2356
+ const ariaButtonProps = (0, import_react24.useMemo)(
2074
2357
  () => ({
2075
2358
  elementType: "a",
2076
2359
  isDisabled: disabled,
@@ -2080,22 +2363,30 @@ var TagItem = (0, import_react22.forwardRef)(
2080
2363
  );
2081
2364
  const { buttonProps } = (0, import_button.useButton)(ariaButtonProps, ref);
2082
2365
  const hasTranslatedLabel = translatedLabel !== void 0 && translatedLabel.length > 0;
2083
- return /* @__PURE__ */ import_react22.default.createElement(
2366
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2084
2367
  TagItemRoot,
2085
2368
  {
2086
2369
  ref,
2087
2370
  size: hasTranslatedLabel ? "M" : size,
2088
2371
  status,
2089
2372
  ...buttonProps,
2090
- className
2091
- },
2092
- /* @__PURE__ */ import_react22.default.createElement(Background, { bgColor, bgImage, status }),
2093
- /* @__PURE__ */ import_react22.default.createElement(Inner, null, /* @__PURE__ */ import_react22.default.createElement(LabelWrapper, { isTranslate: hasTranslatedLabel }, hasTranslatedLabel && /* @__PURE__ */ import_react22.default.createElement(TranslatedLabel, null, /* @__PURE__ */ import_react22.default.createElement(Label3, null, translatedLabel)), /* @__PURE__ */ import_react22.default.createElement(Label3, null, label)), status === "active" && /* @__PURE__ */ import_react22.default.createElement(Icon_default, { name: "16/Remove" }))
2373
+ className,
2374
+ children: [
2375
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Background, { bgColor, bgImage, status }),
2376
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Inner, { children: [
2377
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(LabelWrapper, { isTranslate: hasTranslatedLabel, children: [
2378
+ hasTranslatedLabel && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(TranslatedLabel, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Label3, { children: translatedLabel }) }),
2379
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Label3, { children: label })
2380
+ ] }),
2381
+ status === "active" && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon_default, { name: "16/Remove" })
2382
+ ] })
2383
+ ]
2384
+ }
2094
2385
  );
2095
2386
  }
2096
2387
  );
2097
- var TagItem_default = (0, import_react22.memo)(TagItem);
2098
- var TagItemRoot = import_styled_components19.default.a`
2388
+ var TagItem_default = (0, import_react24.memo)(TagItem);
2389
+ var TagItemRoot = import_styled_components23.default.a`
2099
2390
  isolation: isolate;
2100
2391
  position: relative;
2101
2392
  height: ${({ size }) => sizeMap[size]}px;
@@ -2115,12 +2406,12 @@ var TagItemRoot = import_styled_components19.default.a`
2115
2406
  ...status === "active" ? [o.padding.left(16), o.padding.right(8)] : []
2116
2407
  ])}
2117
2408
 
2118
- ${import_utils12.disabledSelector} {
2409
+ ${import_utils13.disabledSelector} {
2119
2410
  ${theme((o) => [o.disabled])}
2120
2411
  cursor: default;
2121
2412
  }
2122
2413
  `;
2123
- var Background = import_styled_components19.default.div`
2414
+ var Background = import_styled_components23.default.div`
2124
2415
  position: absolute;
2125
2416
  z-index: 1;
2126
2417
  top: 0;
@@ -2131,7 +2422,7 @@ var Background = import_styled_components19.default.div`
2131
2422
  background-color: ${({ bgColor }) => bgColor};
2132
2423
  ${({ status }) => status === "inactive" && theme((o) => o.bg.surface3)}
2133
2424
 
2134
- ${({ bgImage }) => bgImage !== void 0 && import_styled_components19.css`
2425
+ ${({ bgImage }) => bgImage !== void 0 && import_styled_components23.css`
2135
2426
  ${theme((o) => [o.bg.surface4])}
2136
2427
  &::before {
2137
2428
  content: '';
@@ -2147,25 +2438,25 @@ var Background = import_styled_components19.default.div`
2147
2438
  }
2148
2439
  `}
2149
2440
  `;
2150
- var Inner = import_styled_components19.default.div`
2441
+ var Inner = import_styled_components23.default.div`
2151
2442
  display: inline-flex;
2152
- gap: ${({ theme: theme4 }) => (0, import_utils12.px)(theme4.spacing[8])};
2443
+ gap: ${({ theme: theme3 }) => (0, import_utils13.px)(theme3.spacing[8])};
2153
2444
  align-items: center;
2154
2445
  z-index: 2;
2155
2446
  `;
2156
- var labelCSS = import_styled_components19.css`
2447
+ var labelCSS = import_styled_components23.css`
2157
2448
  ${theme((o) => [o.typography(14).bold])}
2158
2449
  `;
2159
- var translateLabelCSS = import_styled_components19.css`
2450
+ var translateLabelCSS = import_styled_components23.css`
2160
2451
  display: flex;
2161
2452
  align-items: center;
2162
2453
  flex-direction: column;
2163
2454
  font-size: 10px;
2164
2455
  `;
2165
- var LabelWrapper = import_styled_components19.default.div`
2456
+ var LabelWrapper = import_styled_components23.default.div`
2166
2457
  ${({ isTranslate }) => isTranslate ?? false ? translateLabelCSS : labelCSS}
2167
2458
  `;
2168
- var Label3 = import_styled_components19.default.span`
2459
+ var Label3 = import_styled_components23.default.span`
2169
2460
  max-width: 152px;
2170
2461
  overflow: hidden;
2171
2462
  text-overflow: ellipsis;
@@ -2174,7 +2465,7 @@ var Label3 = import_styled_components19.default.span`
2174
2465
  color: inherit;
2175
2466
  line-height: inherit;
2176
2467
  `;
2177
- var TranslatedLabel = import_styled_components19.default.div`
2468
+ var TranslatedLabel = import_styled_components23.default.div`
2178
2469
  ${theme((o) => [o.typography(12).bold])}
2179
2470
  `;
2180
2471
  // Annotate the CommonJS export names for ESM import in node:
@@ -2184,11 +2475,13 @@ var TranslatedLabel = import_styled_components19.default.div`
2184
2475
  Checkbox,
2185
2476
  Clickable,
2186
2477
  ComponentAbstraction,
2478
+ DropdownMenuItem,
2187
2479
  DropdownSelector,
2188
2480
  Icon,
2189
2481
  IconButton,
2190
2482
  LoadingSpinner,
2191
2483
  LoadingSpinnerIcon,
2484
+ MenuItemGroup,
2192
2485
  Modal,
2193
2486
  ModalAlign,
2194
2487
  ModalBody,
@@ -2196,7 +2489,6 @@ var TranslatedLabel = import_styled_components19.default.div`
2196
2489
  ModalHeader,
2197
2490
  MultiSelect,
2198
2491
  MultiSelectGroup,
2199
- OptionItem,
2200
2492
  OverlayProvider,
2201
2493
  Radio,
2202
2494
  RadioGroup,
@@ -2204,6 +2496,7 @@ var TranslatedLabel = import_styled_components19.default.div`
2204
2496
  SegmentedControl,
2205
2497
  Switch,
2206
2498
  TagItem,
2499
+ TextArea,
2207
2500
  TextField,
2208
2501
  useComponentAbstraction
2209
2502
  });