@charcoal-ui/react 3.0.0-beta.1 → 3.0.0-beta.3

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