@kanso-labs/kanso-ui 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/README.md +90 -9
  2. package/dist/button/context.js +7 -0
  3. package/dist/button/context.js.map +1 -0
  4. package/dist/button/group.js +25 -0
  5. package/dist/button/group.js.map +1 -0
  6. package/dist/button/hooks.js +81 -0
  7. package/dist/button/hooks.js.map +1 -0
  8. package/dist/button/index.d.ts +11 -0
  9. package/dist/button/index.js +273 -0
  10. package/dist/button/index.js.map +1 -0
  11. package/dist/button/styles.js +23 -0
  12. package/dist/button/styles.js.map +1 -0
  13. package/dist/calendar/index.js +473 -7
  14. package/dist/calendar/index.js.map +1 -1
  15. package/dist/calendar/styles.js +132 -4
  16. package/dist/calendar/styles.js.map +1 -1
  17. package/dist/chip/index.js +74 -9
  18. package/dist/chip/index.js.map +1 -1
  19. package/dist/chip/styles.js +78 -4
  20. package/dist/chip/styles.js.map +1 -1
  21. package/dist/collection/index.js +12 -9
  22. package/dist/collection/index.js.map +1 -1
  23. package/dist/collection/styles.js +21 -2
  24. package/dist/collection/styles.js.map +1 -1
  25. package/dist/color-scheme.d.ts +29 -0
  26. package/dist/color-scheme.js +32 -0
  27. package/dist/color-scheme.js.map +1 -0
  28. package/dist/components/avatar/index.js +35 -22
  29. package/dist/components/avatar/index.js.map +1 -1
  30. package/dist/components/badge/index.d.ts +40 -0
  31. package/dist/components/badge/index.js +102 -0
  32. package/dist/components/badge/index.js.map +1 -0
  33. package/dist/components/breadcrumbs/index.d.ts +1 -1
  34. package/dist/components/breadcrumbs/index.js +1 -1
  35. package/dist/components/breadcrumbs/index.js.map +1 -1
  36. package/dist/components/button/index.d.ts +58 -14
  37. package/dist/components/button/index.js +400 -147
  38. package/dist/components/button/index.js.map +1 -1
  39. package/dist/components/button-group/index.d.ts +54 -0
  40. package/dist/components/button-group/index.js +272 -0
  41. package/dist/components/button-group/index.js.map +1 -0
  42. package/dist/components/calendar/index.d.ts +9 -1
  43. package/dist/components/calendar/index.js +71 -44
  44. package/dist/components/calendar/index.js.map +1 -1
  45. package/dist/components/card/index.d.ts +1 -1
  46. package/dist/components/card/index.js +4 -4
  47. package/dist/components/card/index.js.map +1 -1
  48. package/dist/components/checkbox/index.js +15 -1
  49. package/dist/components/checkbox/index.js.map +1 -1
  50. package/dist/components/checkbox-group/index.js +1 -0
  51. package/dist/components/checkbox-group/index.js.map +1 -1
  52. package/dist/components/chip/index.d.ts +55 -8
  53. package/dist/components/chip/index.js +174 -63
  54. package/dist/components/chip/index.js.map +1 -1
  55. package/dist/components/chip-group/index.d.ts +16 -7
  56. package/dist/components/chip-group/index.js +58 -35
  57. package/dist/components/chip-group/index.js.map +1 -1
  58. package/dist/components/color-field/index.js +25 -23
  59. package/dist/components/color-field/index.js.map +1 -1
  60. package/dist/components/color-picker/index.js +42 -31
  61. package/dist/components/color-picker/index.js.map +1 -1
  62. package/dist/components/color-swatch-picker/index.d.ts +1 -1
  63. package/dist/components/color-swatch-picker/index.js +17 -13
  64. package/dist/components/color-swatch-picker/index.js.map +1 -1
  65. package/dist/components/combo-box/index.d.ts +5 -3
  66. package/dist/components/combo-box/index.js +63 -58
  67. package/dist/components/combo-box/index.js.map +1 -1
  68. package/dist/components/copy-field/index.d.ts +7 -6
  69. package/dist/components/copy-field/index.js +92 -90
  70. package/dist/components/copy-field/index.js.map +1 -1
  71. package/dist/components/currency/index.d.ts +8 -7
  72. package/dist/components/currency/index.js +43 -65
  73. package/dist/components/currency/index.js.map +1 -1
  74. package/dist/components/date-field/index.js +24 -22
  75. package/dist/components/date-field/index.js.map +1 -1
  76. package/dist/components/date-picker/index.d.ts +10 -2
  77. package/dist/components/date-picker/index.js +76 -69
  78. package/dist/components/date-picker/index.js.map +1 -1
  79. package/dist/components/date-range-picker/index.d.ts +10 -2
  80. package/dist/components/date-range-picker/index.js +93 -86
  81. package/dist/components/date-range-picker/index.js.map +1 -1
  82. package/dist/components/dialog/index.d.ts +1 -1
  83. package/dist/components/dialog/index.js +2 -2
  84. package/dist/components/dialog/index.js.map +1 -1
  85. package/dist/components/disclosure/index.d.ts +1 -1
  86. package/dist/components/disclosure/index.js +6 -6
  87. package/dist/components/disclosure/index.js.map +1 -1
  88. package/dist/components/fab/index.d.ts +72 -0
  89. package/dist/components/fab/index.js +89 -0
  90. package/dist/components/fab/index.js.map +1 -0
  91. package/dist/components/fab-menu/index.d.ts +90 -0
  92. package/dist/components/fab-menu/index.js +297 -0
  93. package/dist/components/fab-menu/index.js.map +1 -0
  94. package/dist/components/feed/index.d.ts +2 -1
  95. package/dist/components/feed/index.js +1 -1
  96. package/dist/components/feed/index.js.map +1 -1
  97. package/dist/components/icon-button/index.d.ts +11 -8
  98. package/dist/components/icon-button/index.js +244 -181
  99. package/dist/components/icon-button/index.js.map +1 -1
  100. package/dist/components/index.d.ts +30 -21
  101. package/dist/components/list/index.d.ts +15 -13
  102. package/dist/components/list/index.js +60 -61
  103. package/dist/components/list/index.js.map +1 -1
  104. package/dist/components/list-box/index.d.ts +3 -2
  105. package/dist/components/list-box/index.js +16 -16
  106. package/dist/components/list-box/index.js.map +1 -1
  107. package/dist/components/list-item/index.js +1 -1
  108. package/dist/components/list-item/index.js.map +1 -1
  109. package/dist/components/menu/index.d.ts +3 -2
  110. package/dist/components/menu/index.js +2 -2
  111. package/dist/components/menu/index.js.map +1 -1
  112. package/dist/components/navigation-bar/index.d.ts +50 -0
  113. package/dist/components/navigation-bar/index.js +129 -0
  114. package/dist/components/navigation-bar/index.js.map +1 -0
  115. package/dist/components/navigation-rail/index.d.ts +59 -0
  116. package/dist/components/navigation-rail/index.js +166 -0
  117. package/dist/components/navigation-rail/index.js.map +1 -0
  118. package/dist/components/navigation-tree/index.d.ts +1 -5
  119. package/dist/components/navigation-tree/index.js +3 -3
  120. package/dist/components/navigation-tree/index.js.map +1 -1
  121. package/dist/components/number-field/index.d.ts +6 -4
  122. package/dist/components/number-field/index.js +84 -84
  123. package/dist/components/number-field/index.js.map +1 -1
  124. package/dist/components/popover/index.d.ts +1 -1
  125. package/dist/components/popover/index.js +1 -1
  126. package/dist/components/popover/index.js.map +1 -1
  127. package/dist/components/radio-group/index.js +22 -11
  128. package/dist/components/radio-group/index.js.map +1 -1
  129. package/dist/components/range-calendar/index.d.ts +7 -1
  130. package/dist/components/range-calendar/index.js +71 -44
  131. package/dist/components/range-calendar/index.js.map +1 -1
  132. package/dist/components/search-field/index.d.ts +2 -1
  133. package/dist/components/search-field/index.js +24 -25
  134. package/dist/components/search-field/index.js.map +1 -1
  135. package/dist/components/search-view/index.d.ts +79 -0
  136. package/dist/components/search-view/index.js +255 -0
  137. package/dist/components/search-view/index.js.map +1 -0
  138. package/dist/components/segmented-button/index.d.ts +2 -2
  139. package/dist/components/segmented-button/index.js +60 -31
  140. package/dist/components/segmented-button/index.js.map +1 -1
  141. package/dist/components/select/index.js +1 -0
  142. package/dist/components/select/index.js.map +1 -1
  143. package/dist/components/sheet/index.d.ts +1 -1
  144. package/dist/components/sheet/index.js +2 -2
  145. package/dist/components/sheet/index.js.map +1 -1
  146. package/dist/components/slider/index.js +1 -1
  147. package/dist/components/slider/index.js.map +1 -1
  148. package/dist/components/snackbar/index.d.ts +2 -2
  149. package/dist/components/snackbar/index.js +28 -13
  150. package/dist/components/snackbar/index.js.map +1 -1
  151. package/dist/components/split-button/index.d.ts +83 -0
  152. package/dist/components/split-button/index.js +341 -0
  153. package/dist/components/split-button/index.js.map +1 -0
  154. package/dist/components/switch/index.js +11 -1
  155. package/dist/components/switch/index.js.map +1 -1
  156. package/dist/components/table/index.d.ts +11 -9
  157. package/dist/components/table/index.js +87 -31
  158. package/dist/components/table/index.js.map +1 -1
  159. package/dist/components/tabs/index.d.ts +35 -4
  160. package/dist/components/tabs/index.js +403 -93
  161. package/dist/components/tabs/index.js.map +1 -1
  162. package/dist/components/tag/index.d.ts +1 -1
  163. package/dist/components/tag/index.js.map +1 -1
  164. package/dist/components/text-area/index.d.ts +7 -5
  165. package/dist/components/text-area/index.js +28 -26
  166. package/dist/components/text-area/index.js.map +1 -1
  167. package/dist/components/text-field/index.d.ts +7 -5
  168. package/dist/components/text-field/index.js +28 -26
  169. package/dist/components/text-field/index.js.map +1 -1
  170. package/dist/components/time-field/index.js +24 -22
  171. package/dist/components/time-field/index.js.map +1 -1
  172. package/dist/components/tree/index.d.ts +7 -9
  173. package/dist/components/tree/index.js +15 -16
  174. package/dist/components/tree/index.js.map +1 -1
  175. package/dist/drag/index.js.map +1 -1
  176. package/dist/drag/styles.js +4 -1
  177. package/dist/drag/styles.js.map +1 -1
  178. package/dist/fab/styles.js +161 -0
  179. package/dist/fab/styles.js.map +1 -0
  180. package/dist/field/index.js +260 -214
  181. package/dist/field/index.js.map +1 -1
  182. package/dist/field/styles.js +10 -2
  183. package/dist/field/styles.js.map +1 -1
  184. package/dist/glyphs/index.js +55 -1
  185. package/dist/glyphs/index.js.map +1 -1
  186. package/dist/hooks/useRipple.js +199 -162
  187. package/dist/hooks/useRipple.js.map +1 -1
  188. package/dist/hooks/useToggleGroupDisabled.js +24 -0
  189. package/dist/hooks/useToggleGroupDisabled.js.map +1 -0
  190. package/dist/i18n/index.js +43 -0
  191. package/dist/i18n/index.js.map +1 -0
  192. package/dist/i18n/messages.js +387 -0
  193. package/dist/i18n/messages.js.map +1 -0
  194. package/dist/index.d.ts +31 -21
  195. package/dist/index.js +25 -16
  196. package/dist/navigation/context.js +7 -0
  197. package/dist/navigation/context.js.map +1 -0
  198. package/dist/navigation/index.d.ts +28 -0
  199. package/dist/navigation/index.js +96 -0
  200. package/dist/navigation/index.js.map +1 -0
  201. package/dist/navigation/styles.js +312 -0
  202. package/dist/navigation/styles.js.map +1 -0
  203. package/dist/react-aria.d.ts +2 -2
  204. package/dist/react-aria.js +2 -2
  205. package/dist/render/useRender.js +0 -1
  206. package/dist/render/useRender.js.map +1 -1
  207. package/dist/row/styles.js +33 -11
  208. package/dist/row/styles.js.map +1 -1
  209. package/dist/styles/focus.js.map +1 -1
  210. package/dist/styles/icon-button.js +9 -1
  211. package/dist/styles/icon-button.js.map +1 -1
  212. package/dist/styles/overlay.js +1 -0
  213. package/dist/styles/overlay.js.map +1 -1
  214. package/dist/styles/picker.js +1 -1
  215. package/dist/styles/picker.js.map +1 -1
  216. package/dist/styles.css +1104 -336
  217. package/dist/tokens/design.tokens.stylex.js +42 -1
  218. package/dist/tokens/design.tokens.stylex.js.map +1 -1
  219. package/dist/tokens.css +166 -53
  220. package/package.json +9 -5
@@ -1,11 +1,12 @@
1
1
  import { props } from "../node_modules/@stylexjs/stylex/lib/es/stylex.js";
2
2
  import { mergeStatefulStyles, mergeStyles } from "../styles/merge.js";
3
+ import { useMessages } from "../i18n/index.js";
3
4
  import { useInsideForm } from "./root.js";
4
5
  import { fieldChromeStyles, groupStyles } from "./styles.js";
5
6
  import { c } from "react/compiler-runtime";
6
7
  import { createContext, useContext } from "react";
7
- import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Button, FieldError, FieldErrorContext, Group, Input, InputContext, Label, SelectStateContext, Text, TextArea, TextAreaContext, TextContext, VisuallyHidden, useSlottedContext } from "react-aria-components";
8
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
9
+ import { Button, FieldError, FieldErrorContext, Group, Input, InputContext, Label, SelectStateContext, Text, TextArea, TextAreaContext, TextContext, VisuallyHidden, useLocale, useSlottedContext } from "react-aria-components";
9
10
  //#region src/field/index.tsx
10
11
  const OUTSIDE_BOX = {
11
12
  label: "none",
@@ -34,10 +35,11 @@ const BOX_CONTROLS = {
34
35
  }
35
36
  };
36
37
  const BoxContext = createContext(OUTSIDE_BOX);
37
- function boxContent(label, children, floatingLabel, isPopulated, leading, multiline, trailing, trigger, variant) {
38
+ function boxContent(label, children, floatingLabel, isPopulated, isRequired, leading, multiline, trailing, trigger, variant) {
38
39
  return (state) => /* @__PURE__ */ jsx(BoxContent, {
39
40
  floatingLabel,
40
41
  isPopulated,
42
+ isRequired,
41
43
  label,
42
44
  leading,
43
45
  multiline,
@@ -56,96 +58,99 @@ function boxContent(label, children, floatingLabel, isPopulated, leading, multil
56
58
  * for them. See the outlined variant's note above.
57
59
  */
58
60
  function BoxContent(t0) {
59
- const $ = c(40);
60
- const { children, floatingLabel, isPopulated, label, leading, multiline, state, trailing, trigger, variant } = t0;
61
+ const $ = c(42);
62
+ const { children, floatingLabel, isPopulated, isRequired, label, leading, multiline, state, trailing, trigger, variant } = t0;
61
63
  const read = useFieldPopulated();
62
64
  const populated = isPopulated ?? read;
63
65
  const outlined = variant === "outlined";
64
66
  const floated = !floatingLabel || state.isFocusWithin || populated;
65
67
  const t1 = BOX_CONTROLS[variant][floatingLabel ? "floating" : "fixed"];
66
68
  let t2;
67
- if ($[0] !== floated || $[1] !== label || $[2] !== leading || $[3] !== outlined || $[4] !== state.isFocusWithin || $[5] !== trailing) {
69
+ if ($[0] !== floated || $[1] !== isRequired || $[2] !== label || $[3] !== leading || $[4] !== outlined || $[5] !== state.isFocusWithin || $[6] !== trailing) {
68
70
  t2 = outlined ? /* @__PURE__ */ jsx("fieldset", {
69
71
  "aria-hidden": "true",
70
72
  ...props(fieldChromeStyles.outline, leading !== void 0 && fieldChromeStyles.outlineLeading, trailing !== void 0 && fieldChromeStyles.outlineTrailing, state.isFocusWithin && fieldChromeStyles.outlineFocused),
71
73
  children: /* @__PURE__ */ jsx("legend", {
72
74
  ...props(fieldChromeStyles.outlineNotch, floated && fieldChromeStyles.outlineNotchOpen),
73
- children: floated ? label : null
75
+ children: floated ? /* @__PURE__ */ jsxs(Fragment$1, { children: [label, isRequired ? REQUIRED_MARK : null] }) : null
74
76
  })
75
77
  }) : null;
76
78
  $[0] = floated;
77
- $[1] = label;
78
- $[2] = leading;
79
- $[3] = outlined;
80
- $[4] = state.isFocusWithin;
81
- $[5] = trailing;
82
- $[6] = t2;
83
- } else t2 = $[6];
79
+ $[1] = isRequired;
80
+ $[2] = label;
81
+ $[3] = leading;
82
+ $[4] = outlined;
83
+ $[5] = state.isFocusWithin;
84
+ $[6] = trailing;
85
+ $[7] = t2;
86
+ } else t2 = $[7];
84
87
  let t3;
85
- if ($[7] !== leading || $[8] !== multiline || $[9] !== outlined || $[10] !== state.isDisabled) {
88
+ if ($[8] !== leading || $[9] !== multiline || $[10] !== outlined || $[11] !== state.isDisabled) {
86
89
  t3 = leading === void 0 ? null : /* @__PURE__ */ jsx("span", {
87
90
  ...props(fieldChromeStyles.icon, multiline && fieldChromeStyles.iconMultiline, outlined && fieldChromeStyles.iconOutlined, state.isDisabled && fieldChromeStyles.iconDisabled),
88
91
  children: leading
89
92
  });
90
- $[7] = leading;
91
- $[8] = multiline;
92
- $[9] = outlined;
93
- $[10] = state.isDisabled;
94
- $[11] = t3;
95
- } else t3 = $[11];
93
+ $[8] = leading;
94
+ $[9] = multiline;
95
+ $[10] = outlined;
96
+ $[11] = state.isDisabled;
97
+ $[12] = t3;
98
+ } else t3 = $[12];
96
99
  let t4;
97
- if ($[12] !== floatingLabel || $[13] !== state.isDisabled) {
100
+ if ($[13] !== floatingLabel || $[14] !== state.isDisabled) {
98
101
  t4 = props(fieldChromeStyles.column, floatingLabel && fieldChromeStyles.columnFloating, state.isDisabled && (floatingLabel ? fieldChromeStyles.columnDisabledFloating : fieldChromeStyles.columnDisabled));
99
- $[12] = floatingLabel;
100
- $[13] = state.isDisabled;
101
- $[14] = t4;
102
- } else t4 = $[14];
102
+ $[13] = floatingLabel;
103
+ $[14] = state.isDisabled;
104
+ $[15] = t4;
105
+ } else t4 = $[15];
103
106
  let t5;
104
- if ($[15] !== floated || $[16] !== floatingLabel || $[17] !== outlined) {
107
+ if ($[16] !== floated || $[17] !== floatingLabel || $[18] !== outlined) {
105
108
  t5 = props(fieldChromeStyles.boxLabel, floatingLabel && floated && fieldChromeStyles.boxLabelFloated, outlined && fieldChromeStyles.boxLabelOutlined, outlined && floated && fieldChromeStyles.boxLabelOutlinedFloated);
106
- $[15] = floated;
107
- $[16] = floatingLabel;
108
- $[17] = outlined;
109
- $[18] = t5;
110
- } else t5 = $[18];
109
+ $[16] = floated;
110
+ $[17] = floatingLabel;
111
+ $[18] = outlined;
112
+ $[19] = t5;
113
+ } else t5 = $[19];
111
114
  let t6;
112
- if ($[19] !== label || $[20] !== state || $[21] !== t5) {
115
+ if ($[20] !== isRequired || $[21] !== label || $[22] !== state || $[23] !== t5) {
113
116
  t6 = /* @__PURE__ */ jsx(FieldLabel, {
117
+ isRequired,
114
118
  state,
115
119
  ...t5,
116
120
  children: label
117
121
  });
118
- $[19] = label;
119
- $[20] = state;
120
- $[21] = t5;
121
- $[22] = t6;
122
- } else t6 = $[22];
122
+ $[20] = isRequired;
123
+ $[21] = label;
124
+ $[22] = state;
125
+ $[23] = t5;
126
+ $[24] = t6;
127
+ } else t6 = $[24];
123
128
  let t7;
124
- if ($[23] !== children || $[24] !== t4 || $[25] !== t6) {
129
+ if ($[25] !== children || $[26] !== t4 || $[27] !== t6) {
125
130
  t7 = /* @__PURE__ */ jsxs("div", {
126
131
  ...t4,
127
132
  children: [t6, children]
128
133
  });
129
- $[23] = children;
130
- $[24] = t4;
131
- $[25] = t6;
132
- $[26] = t7;
133
- } else t7 = $[26];
134
+ $[25] = children;
135
+ $[26] = t4;
136
+ $[27] = t6;
137
+ $[28] = t7;
138
+ } else t7 = $[28];
134
139
  let t8;
135
- if ($[27] !== multiline || $[28] !== outlined || $[29] !== state.isDisabled || $[30] !== state.isInvalid || $[31] !== trailing) {
140
+ if ($[29] !== multiline || $[30] !== outlined || $[31] !== state.isDisabled || $[32] !== state.isInvalid || $[33] !== trailing) {
136
141
  t8 = trailing === void 0 ? null : /* @__PURE__ */ jsx("span", {
137
142
  ...props(fieldChromeStyles.icon, multiline && fieldChromeStyles.iconMultiline, outlined && fieldChromeStyles.iconOutlined, state.isInvalid && fieldChromeStyles.iconError, state.isDisabled && fieldChromeStyles.iconDisabled),
138
143
  children: trailing
139
144
  });
140
- $[27] = multiline;
141
- $[28] = outlined;
142
- $[29] = state.isDisabled;
143
- $[30] = state.isInvalid;
144
- $[31] = trailing;
145
- $[32] = t8;
146
- } else t8 = $[32];
145
+ $[29] = multiline;
146
+ $[30] = outlined;
147
+ $[31] = state.isDisabled;
148
+ $[32] = state.isInvalid;
149
+ $[33] = trailing;
150
+ $[34] = t8;
151
+ } else t8 = $[34];
147
152
  let t9;
148
- if ($[33] !== t1 || $[34] !== t2 || $[35] !== t3 || $[36] !== t7 || $[37] !== t8 || $[38] !== trigger) {
153
+ if ($[35] !== t1 || $[36] !== t2 || $[37] !== t3 || $[38] !== t7 || $[39] !== t8 || $[40] !== trigger) {
149
154
  t9 = /* @__PURE__ */ jsxs(BoxContext, {
150
155
  value: t1,
151
156
  children: [
@@ -156,19 +161,19 @@ function BoxContent(t0) {
156
161
  t8
157
162
  ]
158
163
  });
159
- $[33] = t1;
160
- $[34] = t2;
161
- $[35] = t3;
162
- $[36] = t7;
163
- $[37] = t8;
164
- $[38] = trigger;
165
- $[39] = t9;
166
- } else t9 = $[39];
164
+ $[35] = t1;
165
+ $[36] = t2;
166
+ $[37] = t3;
167
+ $[38] = t7;
168
+ $[39] = t8;
169
+ $[40] = trigger;
170
+ $[41] = t9;
171
+ } else t9 = $[41];
167
172
  return t9;
168
173
  }
169
174
  function boxStyles(floatingLabel, multiline, leading, trailing, variant) {
170
175
  const outlined = variant === "outlined";
171
- return (state) => props(fieldChromeStyles.box, floatingLabel ? fieldChromeStyles.boxFloating : fieldChromeStyles.boxFixed, multiline && fieldChromeStyles.boxMultiline, leading && fieldChromeStyles.boxLeading, trailing && fieldChromeStyles.boxTrailing, outlined && fieldChromeStyles.boxOutlined, outlined && floatingLabel && fieldChromeStyles.boxOutlinedFloating, outlined && multiline && fieldChromeStyles.boxOutlinedMultiline, state.isInvalid && (outlined ? fieldChromeStyles.boxOutlinedError : fieldChromeStyles.boxError), state.isDisabled && (outlined ? fieldChromeStyles.boxOutlinedDisabled : fieldChromeStyles.boxDisabled));
176
+ return (state) => props(fieldChromeStyles.box, floatingLabel ? fieldChromeStyles.boxFloating : fieldChromeStyles.boxFixed, multiline && fieldChromeStyles.boxMultiline, leading && fieldChromeStyles.boxLeading, trailing && fieldChromeStyles.boxTrailing, outlined && fieldChromeStyles.boxOutlined, outlined && floatingLabel && fieldChromeStyles.boxOutlinedFloating, outlined && multiline && fieldChromeStyles.boxOutlinedMultiline, state.isInvalid && (outlined ? fieldChromeStyles.boxOutlinedError : fieldChromeStyles.boxError), outlined && state.isHovered && (state.isInvalid ? fieldChromeStyles.boxOutlinedErrorHovered : fieldChromeStyles.boxOutlinedHovered), state.isDisabled && (outlined ? fieldChromeStyles.boxOutlinedDisabled : fieldChromeStyles.boxDisabled));
172
177
  }
173
178
  /**
174
179
  * The box a control sits in, filled or outlined, with its label. React
@@ -179,11 +184,12 @@ function boxStyles(floatingLabel, multiline, leading, trailing, variant) {
179
184
  * on a button rather than an input — passes the two states itself.
180
185
  */
181
186
  function FieldBox(t0) {
182
- const $ = c(28);
187
+ const $ = c(30);
183
188
  let T0;
184
189
  let children;
185
190
  let floatingLabel;
186
191
  let isPopulated;
192
+ let isRequired;
187
193
  let label;
188
194
  let leading;
189
195
  let multiline;
@@ -193,16 +199,17 @@ function FieldBox(t0) {
193
199
  let trigger;
194
200
  let variant;
195
201
  if ($[0] !== t0) {
196
- const { children: t3, floatingLabel: t4, isPopulated: t5, label: t6, leading: t7, multiline: t8, trailing: t9, trigger: t10, variant: t11, ...props } = t0;
202
+ const { children: t3, floatingLabel: t4, isPopulated: t5, isRequired: t6, label: t7, leading: t8, multiline: t9, trailing: t10, trigger: t11, variant: t12, ...props } = t0;
197
203
  children = t3;
198
204
  isPopulated = t5;
199
- label = t6;
200
- leading = t7;
201
- trailing = t9;
202
- trigger = t10;
205
+ label = t7;
206
+ leading = t8;
207
+ trailing = t10;
208
+ trigger = t11;
203
209
  floatingLabel = t4 === void 0 ? true : t4;
204
- multiline = t8 === void 0 ? false : t8;
205
- variant = t11 === void 0 ? "filled" : t11;
210
+ isRequired = t6 === void 0 ? false : t6;
211
+ multiline = t9 === void 0 ? false : t9;
212
+ variant = t12 === void 0 ? "filled" : t12;
206
213
  T0 = Group;
207
214
  t1 = props;
208
215
  t2 = mergeStatefulStyles(boxStyles(floatingLabel, multiline, leading !== void 0, trailing !== void 0, variant), props);
@@ -211,55 +218,58 @@ function FieldBox(t0) {
211
218
  $[2] = children;
212
219
  $[3] = floatingLabel;
213
220
  $[4] = isPopulated;
214
- $[5] = label;
215
- $[6] = leading;
216
- $[7] = multiline;
217
- $[8] = t1;
218
- $[9] = t2;
219
- $[10] = trailing;
220
- $[11] = trigger;
221
- $[12] = variant;
221
+ $[5] = isRequired;
222
+ $[6] = label;
223
+ $[7] = leading;
224
+ $[8] = multiline;
225
+ $[9] = t1;
226
+ $[10] = t2;
227
+ $[11] = trailing;
228
+ $[12] = trigger;
229
+ $[13] = variant;
222
230
  } else {
223
231
  T0 = $[1];
224
232
  children = $[2];
225
233
  floatingLabel = $[3];
226
234
  isPopulated = $[4];
227
- label = $[5];
228
- leading = $[6];
229
- multiline = $[7];
230
- t1 = $[8];
231
- t2 = $[9];
232
- trailing = $[10];
233
- trigger = $[11];
234
- variant = $[12];
235
+ isRequired = $[5];
236
+ label = $[6];
237
+ leading = $[7];
238
+ multiline = $[8];
239
+ t1 = $[9];
240
+ t2 = $[10];
241
+ trailing = $[11];
242
+ trigger = $[12];
243
+ variant = $[13];
235
244
  }
236
245
  let t3;
237
- if ($[13] !== children || $[14] !== floatingLabel || $[15] !== isPopulated || $[16] !== label || $[17] !== leading || $[18] !== multiline || $[19] !== trailing || $[20] !== trigger || $[21] !== variant) {
238
- t3 = boxContent(label, children, floatingLabel, isPopulated, leading, multiline, trailing, trigger, variant);
239
- $[13] = children;
240
- $[14] = floatingLabel;
241
- $[15] = isPopulated;
242
- $[16] = label;
243
- $[17] = leading;
244
- $[18] = multiline;
245
- $[19] = trailing;
246
- $[20] = trigger;
247
- $[21] = variant;
248
- $[22] = t3;
249
- } else t3 = $[22];
246
+ if ($[14] !== children || $[15] !== floatingLabel || $[16] !== isPopulated || $[17] !== isRequired || $[18] !== label || $[19] !== leading || $[20] !== multiline || $[21] !== trailing || $[22] !== trigger || $[23] !== variant) {
247
+ t3 = boxContent(label, children, floatingLabel, isPopulated, isRequired, leading, multiline, trailing, trigger, variant);
248
+ $[14] = children;
249
+ $[15] = floatingLabel;
250
+ $[16] = isPopulated;
251
+ $[17] = isRequired;
252
+ $[18] = label;
253
+ $[19] = leading;
254
+ $[20] = multiline;
255
+ $[21] = trailing;
256
+ $[22] = trigger;
257
+ $[23] = variant;
258
+ $[24] = t3;
259
+ } else t3 = $[24];
250
260
  let t4;
251
- if ($[23] !== T0 || $[24] !== t1 || $[25] !== t2 || $[26] !== t3) {
261
+ if ($[25] !== T0 || $[26] !== t1 || $[27] !== t2 || $[28] !== t3) {
252
262
  t4 = /* @__PURE__ */ jsx(T0, {
253
263
  ...t1,
254
264
  ...t2,
255
265
  children: t3
256
266
  });
257
- $[23] = T0;
258
- $[24] = t1;
259
- $[25] = t2;
260
- $[26] = t3;
261
- $[27] = t4;
262
- } else t4 = $[27];
267
+ $[25] = T0;
268
+ $[26] = t1;
269
+ $[27] = t2;
270
+ $[28] = t3;
271
+ $[29] = t4;
272
+ } else t4 = $[29];
263
273
  return t4;
264
274
  }
265
275
  /**
@@ -275,7 +285,7 @@ function FieldBox(t0) {
275
285
  */
276
286
  function FieldInput(t0) {
277
287
  const $ = c(19);
278
- const { numeric: t1, placeholder, prefix, suffix, ...props$1 } = t0;
288
+ const { numeric: t1, placeholder, prefix, suffix, ...props$3 } = t0;
279
289
  const numeric = t1 === void 0 ? false : t1;
280
290
  const box = useContext(BoxContext);
281
291
  const T0 = Input;
@@ -287,16 +297,16 @@ function FieldInput(t0) {
287
297
  $[1] = numeric;
288
298
  $[2] = t3;
289
299
  } else t3 = $[2];
290
- const t4 = mergeStatefulStyles(t3, props$1);
300
+ const t4 = mergeStatefulStyles(t3, props$3);
291
301
  let t5;
292
- if ($[3] !== T0 || $[4] !== props$1 || $[5] !== t2 || $[6] !== t4) {
302
+ if ($[3] !== T0 || $[4] !== props$3 || $[5] !== t2 || $[6] !== t4) {
293
303
  t5 = /* @__PURE__ */ jsx(T0, {
294
304
  placeholder: t2,
295
- ...props$1,
305
+ ...props$3,
296
306
  ...t4
297
307
  });
298
308
  $[3] = T0;
299
- $[4] = props$1;
309
+ $[4] = props$3;
300
310
  $[5] = t2;
301
311
  $[6] = t4;
302
312
  $[7] = t5;
@@ -469,21 +479,21 @@ function FieldTextArea(t0) {
469
479
  * the fill, the underline and the focus indicator, and it lights up while
470
480
  * this has focus because the indicator follows focus within.
471
481
  */
472
- function FieldTrigger(props$4) {
482
+ function FieldTrigger(props$5) {
473
483
  const $ = c(5);
474
484
  let t0;
475
- if ($[0] !== props$4) {
476
- t0 = mergeStatefulStyles(props(fieldChromeStyles.trigger), props$4);
477
- $[0] = props$4;
485
+ if ($[0] !== props$5) {
486
+ t0 = mergeStatefulStyles(props(fieldChromeStyles.trigger), props$5);
487
+ $[0] = props$5;
478
488
  $[1] = t0;
479
489
  } else t0 = $[1];
480
490
  let t1;
481
- if ($[2] !== props$4 || $[3] !== t0) {
491
+ if ($[2] !== props$5 || $[3] !== t0) {
482
492
  t1 = /* @__PURE__ */ jsx(Button, {
483
- ...props$4,
493
+ ...props$5,
484
494
  ...t0
485
495
  });
486
- $[2] = props$4;
496
+ $[2] = props$5;
487
497
  $[3] = t0;
488
498
  $[4] = t1;
489
499
  } else t1 = $[4];
@@ -507,19 +517,19 @@ function FieldTrigger(props$4) {
507
517
  */
508
518
  function FieldValue(t0) {
509
519
  const $ = c(3);
510
- const { isFocused: t1, isPlaceholder: t2, ...props$5 } = t0;
520
+ const { isFocused: t1, isPlaceholder: t2, ...props$1 } = t0;
511
521
  const isFocused = t1 === void 0 ? false : t1;
512
522
  const isPlaceholder = t2 === void 0 ? false : t2;
513
523
  const box = useContext(BoxContext);
514
524
  const hidden = isPlaceholder && box.label === "floating" && !isFocused;
515
- const t3 = mergeStyles(props(fieldChromeStyles.input, fieldChromeStyles.value, box.underLabel && fieldChromeStyles.inputUnderLabel, isPlaceholder && fieldChromeStyles.valuePlaceholder, hidden && fieldChromeStyles.valuePlaceholderHidden), props$5);
525
+ const t3 = mergeStyles(props(fieldChromeStyles.input, fieldChromeStyles.value, box.underLabel && fieldChromeStyles.inputUnderLabel, isPlaceholder && fieldChromeStyles.valuePlaceholder, hidden && fieldChromeStyles.valuePlaceholderHidden), props$1);
516
526
  let t4;
517
- if ($[0] !== props$5 || $[1] !== t3) {
527
+ if ($[0] !== props$1 || $[1] !== t3) {
518
528
  t4 = /* @__PURE__ */ jsx("span", {
519
- ...props$5,
529
+ ...props$1,
520
530
  ...t3
521
531
  });
522
- $[0] = props$5;
532
+ $[0] = props$1;
523
533
  $[1] = t3;
524
534
  $[2] = t4;
525
535
  } else t4 = $[2];
@@ -548,43 +558,59 @@ function useFieldPopulated() {
548
558
  * its control through context.
549
559
  */
550
560
  const NO_STATE = {};
561
+ const REQUIRED_MARK = /* @__PURE__ */ jsx("span", {
562
+ "aria-hidden": "true",
563
+ children: "*"
564
+ });
551
565
  function FieldLabel(t0) {
552
- const $ = c(8);
566
+ const $ = c(12);
553
567
  let T0;
568
+ let children;
569
+ let isRequired;
554
570
  let t1;
555
571
  let t2;
556
572
  if ($[0] !== t0) {
557
- const { state: t3, variant: t4, ...props$3 } = t0;
558
- const state = t3 === void 0 ? NO_STATE : t3;
559
- const variant = t4 === void 0 ? "field" : t4;
560
- const { isDisabled: t5, isFocusWithin: t6, isInvalid: t7 } = state;
561
- const isDisabled = t5 === void 0 ? false : t5;
562
- const isFocusWithin = t6 === void 0 ? false : t6;
563
- const isInvalid = t7 === void 0 ? false : t7;
573
+ const { children: t3, isRequired: t4, state: t5, variant: t6, ...props$4 } = t0;
574
+ children = t3;
575
+ isRequired = t4 === void 0 ? false : t4;
576
+ const state = t5 === void 0 ? NO_STATE : t5;
577
+ const variant = t6 === void 0 ? "field" : t6;
578
+ const { isDisabled: t7, isFocusWithin: t8, isInvalid: t9 } = state;
579
+ const isDisabled = t7 === void 0 ? false : t7;
580
+ const isFocusWithin = t8 === void 0 ? false : t8;
581
+ const isInvalid = t9 === void 0 ? false : t9;
564
582
  T0 = Label;
565
- t1 = props$3;
566
- t2 = mergeStyles(props(fieldChromeStyles.label, variant === "group" && groupStyles.label, isDisabled && fieldChromeStyles.labelDisabled, isInvalid && fieldChromeStyles.labelError, !isDisabled && !isInvalid && isFocusWithin && fieldChromeStyles.labelFocused), props$3);
583
+ t1 = props$4;
584
+ t2 = mergeStyles(props(fieldChromeStyles.label, variant === "group" && groupStyles.label, isDisabled && fieldChromeStyles.labelDisabled, isInvalid && fieldChromeStyles.labelError, !isDisabled && !isInvalid && isFocusWithin && fieldChromeStyles.labelFocused), props$4);
567
585
  $[0] = t0;
568
586
  $[1] = T0;
569
- $[2] = t1;
570
- $[3] = t2;
587
+ $[2] = children;
588
+ $[3] = isRequired;
589
+ $[4] = t1;
590
+ $[5] = t2;
571
591
  } else {
572
592
  T0 = $[1];
573
- t1 = $[2];
574
- t2 = $[3];
593
+ children = $[2];
594
+ isRequired = $[3];
595
+ t1 = $[4];
596
+ t2 = $[5];
575
597
  }
576
- let t3;
577
- if ($[4] !== T0 || $[5] !== t1 || $[6] !== t2) {
578
- t3 = /* @__PURE__ */ jsx(T0, {
598
+ const t3 = isRequired ? REQUIRED_MARK : null;
599
+ let t4;
600
+ if ($[6] !== T0 || $[7] !== children || $[8] !== t1 || $[9] !== t2 || $[10] !== t3) {
601
+ t4 = /* @__PURE__ */ jsxs(T0, {
579
602
  ...t1,
580
- ...t2
603
+ ...t2,
604
+ children: [children, t3]
581
605
  });
582
- $[4] = T0;
583
- $[5] = t1;
584
- $[6] = t2;
585
- $[7] = t3;
586
- } else t3 = $[7];
587
- return t3;
606
+ $[6] = T0;
607
+ $[7] = children;
608
+ $[8] = t1;
609
+ $[9] = t2;
610
+ $[10] = t3;
611
+ $[11] = t4;
612
+ } else t4 = $[11];
613
+ return t4;
588
614
  }
589
615
  /**
590
616
  * The line under a field: the error while there is one, the description
@@ -596,37 +622,47 @@ function FieldLabel(t0) {
596
622
  * the field's validation state is read for.
597
623
  */
598
624
  function FieldMessage(t0) {
599
- const $ = c(27);
625
+ const $ = c(32);
600
626
  const { characterCount: t1, characterLimitLabel, description, error, errorId, inset: t2, maxLength } = t0;
601
627
  const characterCount = t1 === void 0 ? false : t1;
602
628
  const inset = t2 === void 0 ? true : t2;
603
629
  const validation = useContext(FieldErrorContext);
604
630
  const invalid = error !== void 0 || (validation?.isInvalid ?? false);
631
+ const { locale } = useLocale();
632
+ const messages = useMessages();
605
633
  const input = useSlottedContext(InputContext);
606
634
  const textArea = useSlottedContext(TextAreaContext);
607
635
  const insideForm = useInsideForm();
608
636
  const text = useContext(TextContext);
609
- const limit = maxLength === void 0 ? void 0 : characterLimitLabel ?? `Up to ${maxLength} character${maxLength === 1 ? "" : "s"}`;
610
637
  let t3;
611
- if ($[0] !== limit) {
612
- t3 = limit === void 0 ? null : /* @__PURE__ */ jsx(VisuallyHidden, {
638
+ if ($[0] !== characterLimitLabel || $[1] !== maxLength || $[2] !== messages) {
639
+ t3 = maxLength === void 0 ? void 0 : characterLimitLabel ?? messages.characterLimit(maxLength);
640
+ $[0] = characterLimitLabel;
641
+ $[1] = maxLength;
642
+ $[2] = messages;
643
+ $[3] = t3;
644
+ } else t3 = $[3];
645
+ const limit = t3;
646
+ let t4;
647
+ if ($[4] !== limit) {
648
+ t4 = limit === void 0 ? null : /* @__PURE__ */ jsx(VisuallyHidden, {
613
649
  elementType: "span",
614
650
  children: /* @__PURE__ */ jsx(Text, {
615
651
  slot: "description",
616
652
  children: limit
617
653
  })
618
654
  });
619
- $[0] = limit;
620
- $[1] = t3;
621
- } else t3 = $[1];
622
- const hidden = t3;
655
+ $[4] = limit;
656
+ $[5] = t4;
657
+ } else t4 = $[5];
658
+ const hidden = t4;
623
659
  if (!invalid && description === void 0 && !characterCount && !insideForm) return hidden;
624
660
  const value = input?.value ?? textArea?.value ?? "";
625
661
  const length = String(value).length;
626
662
  const hint = invalid ? void 0 : description;
627
- let t4;
628
- if ($[2] !== hidden || $[3] !== hint || $[4] !== limit) {
629
- t4 = hint === void 0 ? hidden : /* @__PURE__ */ jsxs(Text, {
663
+ let t5;
664
+ if ($[6] !== hidden || $[7] !== hint || $[8] !== limit) {
665
+ t5 = hint === void 0 ? hidden : /* @__PURE__ */ jsxs(Text, {
630
666
  slot: "description",
631
667
  ...props(fieldChromeStyles.message),
632
668
  children: [hint, limit === void 0 ? null : /* @__PURE__ */ jsx(VisuallyHidden, {
@@ -634,22 +670,22 @@ function FieldMessage(t0) {
634
670
  children: ` ${limit}`
635
671
  })]
636
672
  });
637
- $[2] = hidden;
638
- $[3] = hint;
639
- $[4] = limit;
640
- $[5] = t4;
641
- } else t4 = $[5];
642
- const described = t4;
673
+ $[6] = hidden;
674
+ $[7] = hint;
675
+ $[8] = limit;
676
+ $[9] = t5;
677
+ } else t5 = $[9];
678
+ const described = t5;
643
679
  const errorSlot = text !== null && typeof text === "object" && "slots" in text && text.slots?.errorMessage !== void 0;
644
- let t5;
645
- if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
646
- t5 = props(fieldChromeStyles.message, fieldChromeStyles.messageError);
647
- $[6] = t5;
648
- } else t5 = $[6];
649
- const messageStyles = t5;
650
680
  let t6;
651
- if ($[7] !== error || $[8] !== errorId || $[9] !== errorSlot) {
652
- t6 = errorSlot ? /* @__PURE__ */ jsx(Text, {
681
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
682
+ t6 = props(fieldChromeStyles.message, fieldChromeStyles.messageError);
683
+ $[10] = t6;
684
+ } else t6 = $[10];
685
+ const messageStyles = t6;
686
+ let t7;
687
+ if ($[11] !== error || $[12] !== errorId || $[13] !== errorSlot) {
688
+ t7 = errorSlot ? /* @__PURE__ */ jsx(Text, {
653
689
  slot: "errorMessage",
654
690
  ...messageStyles,
655
691
  children: error
@@ -658,59 +694,69 @@ function FieldMessage(t0) {
658
694
  ...messageStyles,
659
695
  children: error
660
696
  });
661
- $[7] = error;
662
- $[8] = errorId;
663
- $[9] = errorSlot;
664
- $[10] = t6;
665
- } else t6 = $[10];
666
- const written = t6;
667
- let t7;
668
- if ($[11] !== inset) {
669
- t7 = props(fieldChromeStyles.message, fieldChromeStyles.messageLine, inset && fieldChromeStyles.messageInset);
670
- $[11] = inset;
671
- $[12] = t7;
672
- } else t7 = $[12];
697
+ $[11] = error;
698
+ $[12] = errorId;
699
+ $[13] = errorSlot;
700
+ $[14] = t7;
701
+ } else t7 = $[14];
702
+ const written = t7;
673
703
  let t8;
674
- if ($[13] !== error || $[14] !== validation || $[15] !== written) {
675
- t8 = validation === null && error !== void 0 ? written : /* @__PURE__ */ jsx(FieldError, {
676
- ...props(fieldChromeStyles.message, fieldChromeStyles.messageError),
677
- children: error
678
- });
679
- $[13] = error;
680
- $[14] = validation;
681
- $[15] = written;
704
+ if ($[15] !== inset) {
705
+ t8 = props(fieldChromeStyles.message, fieldChromeStyles.messageLine, inset && fieldChromeStyles.messageInset);
706
+ $[15] = inset;
682
707
  $[16] = t8;
683
708
  } else t8 = $[16];
684
709
  let t9;
685
- if ($[17] !== characterCount || $[18] !== invalid || $[19] !== length || $[20] !== maxLength) {
686
- t9 = characterCount ? /* @__PURE__ */ jsx("span", {
710
+ if ($[17] !== error || $[18] !== validation || $[19] !== written) {
711
+ t9 = validation === null && error !== void 0 ? written : /* @__PURE__ */ jsx(FieldError, {
712
+ ...props(fieldChromeStyles.message, fieldChromeStyles.messageError),
713
+ children: error
714
+ });
715
+ $[17] = error;
716
+ $[18] = validation;
717
+ $[19] = written;
718
+ $[20] = t9;
719
+ } else t9 = $[20];
720
+ let t10;
721
+ if ($[21] !== characterCount || $[22] !== invalid || $[23] !== length || $[24] !== locale || $[25] !== maxLength) {
722
+ t10 = characterCount ? /* @__PURE__ */ jsx("span", {
687
723
  "aria-hidden": "true",
688
724
  ...props(fieldChromeStyles.message, fieldChromeStyles.counter, invalid && fieldChromeStyles.messageError),
689
- children: maxLength === void 0 ? length : `${length}/${maxLength}`
725
+ children: countIn(locale, length, maxLength)
690
726
  }) : null;
691
- $[17] = characterCount;
692
- $[18] = invalid;
693
- $[19] = length;
694
- $[20] = maxLength;
695
- $[21] = t9;
696
- } else t9 = $[21];
697
- let t10;
698
- if ($[22] !== described || $[23] !== t7 || $[24] !== t8 || $[25] !== t9) {
699
- t10 = /* @__PURE__ */ jsxs("div", {
700
- ...t7,
727
+ $[21] = characterCount;
728
+ $[22] = invalid;
729
+ $[23] = length;
730
+ $[24] = locale;
731
+ $[25] = maxLength;
732
+ $[26] = t10;
733
+ } else t10 = $[26];
734
+ let t11;
735
+ if ($[27] !== described || $[28] !== t10 || $[29] !== t8 || $[30] !== t9) {
736
+ t11 = /* @__PURE__ */ jsxs("div", {
737
+ ...t8,
701
738
  children: [
702
- t8,
739
+ t9,
703
740
  described,
704
- t9
741
+ t10
705
742
  ]
706
743
  });
707
- $[22] = described;
708
- $[23] = t7;
709
- $[24] = t8;
710
- $[25] = t9;
711
- $[26] = t10;
712
- } else t10 = $[26];
713
- return t10;
744
+ $[27] = described;
745
+ $[28] = t10;
746
+ $[29] = t8;
747
+ $[30] = t9;
748
+ $[31] = t11;
749
+ } else t11 = $[31];
750
+ return t11;
751
+ }
752
+ const counterFormatters = /* @__PURE__ */ new Map();
753
+ function countIn(locale, length, maxLength) {
754
+ let formatter = counterFormatters.get(locale);
755
+ if (formatter === void 0) {
756
+ formatter = new Intl.NumberFormat(locale);
757
+ counterFormatters.set(locale, formatter);
758
+ }
759
+ return maxLength === void 0 ? formatter.format(length) : `${formatter.format(length)}/${formatter.format(maxLength)}`;
714
760
  }
715
761
  //#endregion
716
762
  export { FieldBox, FieldInput, FieldLabel, FieldMessage, FieldSegments, FieldTextArea, FieldTrigger, FieldValue };