@mattermost/compass-ui 0.1.0-alpha.4 → 0.1.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/dist/compass-ui-standalone.css +10 -0
  2. package/dist/compass-ui.css +2 -0
  3. package/dist/components/action-button/ActionButton.cjs +1 -1
  4. package/dist/components/action-button/ActionButton.cjs.map +1 -1
  5. package/dist/components/action-button/ActionButton.d.ts +2 -1
  6. package/dist/components/action-button/ActionButton.d.ts.map +1 -1
  7. package/dist/components/action-button/ActionButton.js +22 -12
  8. package/dist/components/action-button/ActionButton.js.map +1 -1
  9. package/dist/components/action-button/ActionButton.module.css +1 -1
  10. package/dist/components/action-button/ActionButton.module.scss.cjs +1 -1
  11. package/dist/components/action-button/ActionButton.module.scss.js +5 -5
  12. package/dist/components/attachment-card/AttachmentCard.cjs +1 -1
  13. package/dist/components/attachment-card/AttachmentCard.cjs.map +1 -1
  14. package/dist/components/attachment-card/AttachmentCard.d.ts +3 -1
  15. package/dist/components/attachment-card/AttachmentCard.d.ts.map +1 -1
  16. package/dist/components/attachment-card/AttachmentCard.js +92 -82
  17. package/dist/components/attachment-card/AttachmentCard.js.map +1 -1
  18. package/dist/components/attachment-card/AttachmentCard.module.css +1 -1
  19. package/dist/components/attachment-card/AttachmentCard.module.scss.cjs +1 -1
  20. package/dist/components/attachment-card/AttachmentCard.module.scss.js +19 -18
  21. package/dist/components/attachment-card/AttachmentCard.module.scss.js.map +1 -1
  22. package/dist/components/button/Button.module.css +1 -1
  23. package/dist/components/button/Button.module.scss.cjs +1 -1
  24. package/dist/components/button/Button.module.scss.js +15 -15
  25. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs +1 -1
  26. package/dist/components/channel-sidebar-item/ChannelSidebarItem.cjs.map +1 -1
  27. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts +4 -1
  28. package/dist/components/channel-sidebar-item/ChannelSidebarItem.d.ts.map +1 -1
  29. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js +112 -92
  30. package/dist/components/channel-sidebar-item/ChannelSidebarItem.js.map +1 -1
  31. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.css +1 -1
  32. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.cjs +1 -1
  33. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js +22 -20
  34. package/dist/components/channel-sidebar-item/ChannelSidebarItem.module.scss.js.map +1 -1
  35. package/dist/components/checkbox/Checkbox.cjs +1 -1
  36. package/dist/components/checkbox/Checkbox.cjs.map +1 -1
  37. package/dist/components/checkbox/Checkbox.d.ts +3 -3
  38. package/dist/components/checkbox/Checkbox.d.ts.map +1 -1
  39. package/dist/components/checkbox/Checkbox.js +21 -20
  40. package/dist/components/checkbox/Checkbox.js.map +1 -1
  41. package/dist/components/checkbox/Checkbox.module.css +1 -1
  42. package/dist/components/checkbox/Checkbox.module.scss.cjs +1 -1
  43. package/dist/components/checkbox/Checkbox.module.scss.js +7 -7
  44. package/dist/components/chip/Chip.cjs +1 -1
  45. package/dist/components/chip/Chip.cjs.map +1 -1
  46. package/dist/components/chip/Chip.d.ts +3 -5
  47. package/dist/components/chip/Chip.d.ts.map +1 -1
  48. package/dist/components/chip/Chip.js +90 -48
  49. package/dist/components/chip/Chip.js.map +1 -1
  50. package/dist/components/chip/Chip.module.css +1 -1
  51. package/dist/components/chip/Chip.module.scss.cjs +1 -1
  52. package/dist/components/chip/Chip.module.scss.js +9 -9
  53. package/dist/components/chip/ChipGroup.cjs +2 -0
  54. package/dist/components/chip/ChipGroup.cjs.map +1 -0
  55. package/dist/components/chip/ChipGroup.d.ts +16 -0
  56. package/dist/components/chip/ChipGroup.d.ts.map +1 -0
  57. package/dist/components/chip/ChipGroup.js +112 -0
  58. package/dist/components/chip/ChipGroup.js.map +1 -0
  59. package/dist/components/chip/ChipGroup.module.css +1 -0
  60. package/dist/components/chip/ChipGroup.module.scss.cjs +2 -0
  61. package/dist/components/chip/ChipGroup.module.scss.cjs.map +1 -0
  62. package/dist/components/chip/ChipGroup.module.scss.js +7 -0
  63. package/dist/components/chip/ChipGroup.module.scss.js.map +1 -0
  64. package/dist/components/chip/index.cjs +1 -1
  65. package/dist/components/chip/index.d.ts +2 -0
  66. package/dist/components/chip/index.d.ts.map +1 -1
  67. package/dist/components/chip/index.js +4 -2
  68. package/dist/components/chip/index.js.map +1 -1
  69. package/dist/components/combobox/Combobox.cjs +1 -1
  70. package/dist/components/combobox/Combobox.cjs.map +1 -1
  71. package/dist/components/combobox/Combobox.d.ts.map +1 -1
  72. package/dist/components/combobox/Combobox.js +115 -109
  73. package/dist/components/combobox/Combobox.js.map +1 -1
  74. package/dist/components/combobox/Combobox.module.css +1 -1
  75. package/dist/components/combobox/Combobox.module.scss.cjs +1 -1
  76. package/dist/components/combobox/Combobox.module.scss.js +27 -29
  77. package/dist/components/date-range-picker/DateRangePicker.cjs +1 -1
  78. package/dist/components/date-range-picker/DateRangePicker.cjs.map +1 -1
  79. package/dist/components/date-range-picker/DateRangePicker.js +154 -154
  80. package/dist/components/date-range-picker/DateRangePicker.js.map +1 -1
  81. package/dist/components/date-range-picker/DateRangePicker.module.css +1 -1
  82. package/dist/components/date-range-picker/DateRangePicker.module.scss.cjs +1 -1
  83. package/dist/components/date-range-picker/DateRangePicker.module.scss.js +28 -45
  84. package/dist/components/dropdown/Dropdown.cjs +1 -1
  85. package/dist/components/dropdown/Dropdown.cjs.map +1 -1
  86. package/dist/components/dropdown/Dropdown.js +1 -1
  87. package/dist/components/dropdown/Dropdown.js.map +1 -1
  88. package/dist/components/dropdown/Dropdown.module.css +1 -1
  89. package/dist/components/dropdown/Dropdown.module.scss.cjs +1 -1
  90. package/dist/components/dropdown/Dropdown.module.scss.js +15 -16
  91. package/dist/components/global-banner/GlobalBanner.module.css +1 -1
  92. package/dist/components/global-banner/GlobalBanner.module.scss.cjs +1 -1
  93. package/dist/components/global-banner/GlobalBanner.module.scss.js +10 -10
  94. package/dist/components/icon-button/IconButton.cjs +1 -1
  95. package/dist/components/icon-button/IconButton.cjs.map +1 -1
  96. package/dist/components/icon-button/IconButton.d.ts +1 -1
  97. package/dist/components/icon-button/IconButton.d.ts.map +1 -1
  98. package/dist/components/icon-button/IconButton.js +14 -14
  99. package/dist/components/icon-button/IconButton.js.map +1 -1
  100. package/dist/components/icon-button/IconButton.module.css +1 -1
  101. package/dist/components/icon-button/IconButton.module.scss.cjs +1 -1
  102. package/dist/components/icon-button/IconButton.module.scss.js +15 -15
  103. package/dist/components/image-preview/ImagePreview.cjs +1 -1
  104. package/dist/components/image-preview/ImagePreview.cjs.map +1 -1
  105. package/dist/components/image-preview/ImagePreview.d.ts +2 -1
  106. package/dist/components/image-preview/ImagePreview.d.ts.map +1 -1
  107. package/dist/components/image-preview/ImagePreview.js +70 -52
  108. package/dist/components/image-preview/ImagePreview.js.map +1 -1
  109. package/dist/components/image-preview/ImagePreview.module.css +1 -1
  110. package/dist/components/image-preview/ImagePreview.module.scss.cjs +1 -1
  111. package/dist/components/image-preview/ImagePreview.module.scss.js +15 -15
  112. package/dist/components/menu-item/MenuItem.cjs +1 -1
  113. package/dist/components/menu-item/MenuItem.cjs.map +1 -1
  114. package/dist/components/menu-item/MenuItem.js +11 -11
  115. package/dist/components/menu-item/MenuItem.js.map +1 -1
  116. package/dist/components/menu-item/MenuItem.module.css +1 -1
  117. package/dist/components/menu-item/MenuItem.module.scss.cjs +1 -1
  118. package/dist/components/menu-item/MenuItem.module.scss.js +16 -16
  119. package/dist/components/message/Message.module.css +1 -1
  120. package/dist/components/message/Message.module.scss.cjs +1 -1
  121. package/dist/components/message/Message.module.scss.js +20 -20
  122. package/dist/components/message-reactions/MessageReactions.module.css +1 -1
  123. package/dist/components/message-reactions/MessageReactions.module.scss.cjs +1 -1
  124. package/dist/components/message-reactions/MessageReactions.module.scss.js +12 -12
  125. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.css +1 -1
  126. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.cjs +1 -1
  127. package/dist/components/more-unreads-banner/MoreUnreadsBanner.module.scss.js +5 -5
  128. package/dist/components/pagination-dots/PaginationDots.module.css +1 -1
  129. package/dist/components/pagination-dots/PaginationDots.module.scss.cjs +1 -1
  130. package/dist/components/pagination-dots/PaginationDots.module.scss.js +8 -8
  131. package/dist/components/radio/Radio.cjs +1 -1
  132. package/dist/components/radio/Radio.cjs.map +1 -1
  133. package/dist/components/radio/Radio.d.ts +3 -3
  134. package/dist/components/radio/Radio.d.ts.map +1 -1
  135. package/dist/components/radio/Radio.js +11 -11
  136. package/dist/components/radio/Radio.js.map +1 -1
  137. package/dist/components/radio/Radio.module.css +1 -1
  138. package/dist/components/radio/Radio.module.scss.cjs +1 -1
  139. package/dist/components/radio/Radio.module.scss.js +11 -11
  140. package/dist/components/search-input/SearchInput.cjs +1 -1
  141. package/dist/components/search-input/SearchInput.cjs.map +1 -1
  142. package/dist/components/search-input/SearchInput.d.ts +2 -0
  143. package/dist/components/search-input/SearchInput.d.ts.map +1 -1
  144. package/dist/components/search-input/SearchInput.js +78 -64
  145. package/dist/components/search-input/SearchInput.js.map +1 -1
  146. package/dist/components/search-input/SearchInput.module.css +1 -1
  147. package/dist/components/search-input/SearchInput.module.scss.cjs +1 -1
  148. package/dist/components/search-input/SearchInput.module.scss.js +16 -23
  149. package/dist/components/search-input/SearchInput.module.scss.js.map +1 -1
  150. package/dist/components/select/Select.cjs +1 -1
  151. package/dist/components/select/Select.cjs.map +1 -1
  152. package/dist/components/select/Select.d.ts.map +1 -1
  153. package/dist/components/select/Select.js +64 -64
  154. package/dist/components/select/Select.js.map +1 -1
  155. package/dist/components/select/Select.module.css +1 -1
  156. package/dist/components/select/Select.module.scss.cjs +1 -1
  157. package/dist/components/select/Select.module.scss.js +24 -26
  158. package/dist/components/switch/Switch.cjs +1 -1
  159. package/dist/components/switch/Switch.cjs.map +1 -1
  160. package/dist/components/switch/Switch.d.ts.map +1 -1
  161. package/dist/components/switch/Switch.js +2 -2
  162. package/dist/components/switch/Switch.js.map +1 -1
  163. package/dist/components/switch/Switch.module.css +1 -1
  164. package/dist/components/switch/Switch.module.scss.cjs +1 -1
  165. package/dist/components/switch/Switch.module.scss.js +15 -15
  166. package/dist/components/tabs/Tabs.cjs +1 -1
  167. package/dist/components/tabs/Tabs.cjs.map +1 -1
  168. package/dist/components/tabs/Tabs.d.ts +4 -0
  169. package/dist/components/tabs/Tabs.d.ts.map +1 -1
  170. package/dist/components/tabs/Tabs.js +47 -31
  171. package/dist/components/tabs/Tabs.js.map +1 -1
  172. package/dist/components/tabs/Tabs.module.css +1 -1
  173. package/dist/components/tabs/Tabs.module.scss.cjs +1 -1
  174. package/dist/components/tabs/Tabs.module.scss.js +8 -7
  175. package/dist/components/tabs/Tabs.module.scss.js.map +1 -1
  176. package/dist/components/tag/Tag.module.css +1 -1
  177. package/dist/components/tag/Tag.module.scss.cjs +1 -1
  178. package/dist/components/tag/Tag.module.scss.js +15 -15
  179. package/dist/components/text-area/TextArea.cjs +1 -1
  180. package/dist/components/text-area/TextArea.cjs.map +1 -1
  181. package/dist/components/text-area/TextArea.d.ts.map +1 -1
  182. package/dist/components/text-area/TextArea.js +57 -56
  183. package/dist/components/text-area/TextArea.js.map +1 -1
  184. package/dist/components/text-area/TextArea.module.css +1 -1
  185. package/dist/components/text-area/TextArea.module.scss.cjs +1 -1
  186. package/dist/components/text-area/TextArea.module.scss.js +12 -17
  187. package/dist/components/text-input/TextInput.cjs +1 -1
  188. package/dist/components/text-input/TextInput.cjs.map +1 -1
  189. package/dist/components/text-input/TextInput.d.ts.map +1 -1
  190. package/dist/components/text-input/TextInput.js +59 -58
  191. package/dist/components/text-input/TextInput.js.map +1 -1
  192. package/dist/components/text-input/TextInput.module.css +1 -1
  193. package/dist/components/text-input/TextInput.module.scss.cjs +1 -1
  194. package/dist/components/text-input/TextInput.module.scss.js +16 -24
  195. package/dist/components/thread-footer/ThreadFooter.cjs +1 -1
  196. package/dist/components/thread-footer/ThreadFooter.cjs.map +1 -1
  197. package/dist/components/thread-footer/ThreadFooter.d.ts +7 -8
  198. package/dist/components/thread-footer/ThreadFooter.d.ts.map +1 -1
  199. package/dist/components/thread-footer/ThreadFooter.js +59 -62
  200. package/dist/components/thread-footer/ThreadFooter.js.map +1 -1
  201. package/dist/components/thread-footer/ThreadFooter.module.css +1 -1
  202. package/dist/components/thread-footer/ThreadFooter.module.scss.cjs +1 -1
  203. package/dist/components/thread-footer/ThreadFooter.module.scss.js +17 -17
  204. package/dist/components/thread-footer/index.d.ts +7 -1
  205. package/dist/components/thread-footer/index.d.ts.map +1 -1
  206. package/dist/components/thread-list-item/ThreadListItem.cjs +1 -1
  207. package/dist/components/thread-list-item/ThreadListItem.cjs.map +1 -1
  208. package/dist/components/thread-list-item/ThreadListItem.d.ts +1 -1
  209. package/dist/components/thread-list-item/ThreadListItem.d.ts.map +1 -1
  210. package/dist/components/thread-list-item/ThreadListItem.js +102 -87
  211. package/dist/components/thread-list-item/ThreadListItem.js.map +1 -1
  212. package/dist/components/thread-list-item/ThreadListItem.module.css +1 -1
  213. package/dist/components/thread-list-item/ThreadListItem.module.scss.cjs +1 -1
  214. package/dist/components/thread-list-item/ThreadListItem.module.scss.js +26 -23
  215. package/dist/components/thread-list-item/ThreadListItem.module.scss.js.map +1 -1
  216. package/dist/components/toast/Toast.module.css +1 -1
  217. package/dist/components/toast/Toast.module.scss.cjs +1 -1
  218. package/dist/components/toast/Toast.module.scss.js +6 -6
  219. package/dist/components/tour-point/TourPoint.module.css +1 -1
  220. package/dist/components/tour-point/TourPoint.module.scss.cjs +1 -1
  221. package/dist/components/tour-point/TourPoint.module.scss.js +28 -28
  222. package/dist/index.cjs +1 -1
  223. package/dist/index.css +31 -29
  224. package/dist/index.js +156 -154
  225. package/dist/index.js.map +1 -1
  226. package/package.json +1 -1
@@ -4,10 +4,10 @@ import { useControllable as v } from "../../hooks/use-controllable.js";
4
4
  import { toKebab as x } from "../../utils/string.js";
5
5
  import a from "./Radio.module.scss.js";
6
6
  function K({
7
- className: t = "",
8
- size: l = "medium",
9
- valid: i = !0,
10
- children: s,
7
+ className: n = "",
8
+ size: t = "medium",
9
+ invalid: s = !1,
10
+ children: i,
11
11
  id: d,
12
12
  checked: r,
13
13
  defaultChecked: e,
@@ -15,14 +15,14 @@ function K({
15
15
  onChange: c,
16
16
  name: p,
17
17
  value: u,
18
- ..._
18
+ ...f
19
19
  }) {
20
- const f = j(), n = d ?? f, [, b] = v(r, e, c), C = a[`radio--size-${x(l)}`], N = i ? "" : a["radio--invalid"], h = [a.radio, C, N, t].filter(Boolean).join(" ");
21
- return /* @__PURE__ */ g("label", { className: h, htmlFor: n, children: [
20
+ const _ = j(), l = d ?? _, [, b] = v(r, e, c), C = a[`radio--size-${x(t)}`], N = s ? a["radio--invalid"] : "", h = [a.radio, C, N, n].filter(Boolean).join(" ");
21
+ return /* @__PURE__ */ g("label", { className: h, htmlFor: l, children: [
22
22
  /* @__PURE__ */ o(
23
23
  "input",
24
24
  {
25
- id: n,
25
+ id: l,
26
26
  type: "radio",
27
27
  name: p,
28
28
  value: u,
@@ -30,13 +30,13 @@ function K({
30
30
  checked: r,
31
31
  defaultChecked: e,
32
32
  disabled: m,
33
- "aria-invalid": i ? void 0 : !0,
33
+ "aria-invalid": s ? !0 : void 0,
34
34
  onChange: b,
35
- ..._
35
+ ...f
36
36
  }
37
37
  ),
38
38
  /* @__PURE__ */ o("span", { className: a.radio__circle, children: /* @__PURE__ */ o("span", { className: a.radio__dot, "aria-hidden": !0 }) }),
39
- s != null && /* @__PURE__ */ o("span", { className: a.radio__label, children: s })
39
+ i != null && /* @__PURE__ */ o("span", { className: a.radio__label, children: i })
40
40
  ] });
41
41
  }
42
42
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Radio.js","sources":["../../../src/components/radio/Radio.tsx"],"sourcesContent":["import type { InputHTMLAttributes } from 'react';\nimport { useId } from 'react';\nimport { useControllable } from '@/hooks/use-controllable';\nimport { toKebab } from '@/utils/string';\nimport styles from './Radio.module.scss';\n\nexport type RadioSize = 'small' | 'medium' | 'large';\n\nexport interface RadioProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Size variant. Figma: Small (12px), Medium (16px), Large (20px). Default: Medium. */\n size?: RadioSize;\n /** When false, uses error/destructive styling (red when checked). Default: true. */\n valid?: boolean;\n /** Label content. Rendered next to the radio. */\n children?: React.ReactNode;\n}\n\n/**\n * Radios let people pick exactly one option from a small, mutually exclusive set — a\n * workspace plan, a notification cadence, a default theme. Use a Radio when the choices are\n * few enough to show at once and the user benefits from seeing every option side-by-side.\n */\nexport default function Radio({\n className = '',\n size = 'medium',\n valid = true,\n children,\n id: idProp,\n checked,\n defaultChecked,\n disabled,\n onChange,\n name,\n value,\n ...rest\n}: RadioProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const [, handleChange] = useControllable(checked, defaultChecked, onChange);\n\n const sizeClass = styles[`radio--size-${toKebab(size)}`];\n const invalidClass = valid ? '' : styles['radio--invalid'];\n\n const rootClass = [styles.radio, sizeClass, invalidClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={rootClass} htmlFor={id}>\n <input\n id={id}\n type=\"radio\"\n name={name}\n value={value}\n className={styles['radio__input']}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={valid ? undefined : true}\n onChange={handleChange}\n {...rest}\n />\n <span className={styles['radio__circle']}>\n <span className={styles['radio__dot']} aria-hidden />\n </span>\n {children != null && (\n <span className={styles['radio__label']}>{children}</span>\n )}\n </label>\n );\n}\n"],"names":["Radio","className","size","valid","children","idProp","checked","defaultChecked","disabled","onChange","name","value","rest","generatedId","useId","id","handleChange","useControllable","sizeClass","styles","toKebab","invalidClass","rootClass","jsxs","jsx"],"mappings":";;;;;AA2BA,SAAwBA,EAAM;AAAA,EAC5B,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,SAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,GAAe;AACb,QAAMC,IAAcC,EAAA,GACdC,IAAKV,KAAUQ,GACf,CAAA,EAAGG,CAAY,IAAIC,EAAgBX,GAASC,GAAgBE,CAAQ,GAEpES,IAAYC,EAAO,eAAeC,EAAQlB,CAAI,CAAC,EAAE,GACjDmB,IAAelB,IAAQ,KAAKgB,EAAO,gBAAgB,GAEnDG,IAAY,CAACH,EAAO,OAAOD,GAAWG,GAAcpB,CAAS,EAChE,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAsB,EAAC,SAAA,EAAM,WAAWD,GAAW,SAASP,GACpC,UAAA;AAAA,IAAA,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAAT;AAAA,QACA,MAAK;AAAA,QACL,MAAAL;AAAA,QACA,OAAAC;AAAA,QACA,WAAWQ,EAAO;AAAA,QAClB,SAAAb;AAAA,QACA,gBAAAC;AAAA,QACA,UAAAC;AAAA,QACA,gBAAcL,IAAQ,SAAY;AAAA,QAClC,UAAUa;AAAA,QACT,GAAGJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEN,gBAAAY,EAAC,QAAA,EAAK,WAAWL,EAAO,eACtB,UAAA,gBAAAK,EAAC,QAAA,EAAK,WAAWL,EAAO,YAAe,eAAW,IAAC,GACrD;AAAA,IACCf,KAAY,QACX,gBAAAoB,EAAC,QAAA,EAAK,WAAWL,EAAO,cAAkB,UAAAf,EAAA,CAAS;AAAA,EAAA,GAEvD;AAEJ;"}
1
+ {"version":3,"file":"Radio.js","sources":["../../../src/components/radio/Radio.tsx"],"sourcesContent":["import type { InputHTMLAttributes } from 'react';\nimport { useId } from 'react';\nimport { useControllable } from '@/hooks/use-controllable';\nimport { toKebab } from '@/utils/string';\nimport styles from './Radio.module.scss';\n\nexport type RadioSize = 'small' | 'medium' | 'large';\n\nexport interface RadioProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Size variant. Figma: Small (12px), Medium (16px), Large (20px). Default: Medium. */\n size?: RadioSize;\n /** When true, uses error/destructive styling (red when checked). */\n invalid?: boolean;\n /** Label content. Rendered next to the radio. */\n children?: React.ReactNode;\n}\n\n/**\n * Radios let people pick exactly one option from a small, mutually exclusive set — a\n * workspace plan, a notification cadence, a default theme. Use a Radio when the choices are\n * few enough to show at once and the user benefits from seeing every option side-by-side.\n */\nexport default function Radio({\n className = '',\n size = 'medium',\n invalid = false,\n children,\n id: idProp,\n checked,\n defaultChecked,\n disabled,\n onChange,\n name,\n value,\n ...rest\n}: RadioProps) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const [, handleChange] = useControllable(checked, defaultChecked, onChange);\n\n const sizeClass = styles[`radio--size-${toKebab(size)}`];\n const invalidClass = invalid ? styles['radio--invalid'] : '';\n\n const rootClass = [styles.radio, sizeClass, invalidClass, className]\n .filter(Boolean)\n .join(' ');\n\n return (\n <label className={rootClass} htmlFor={id}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props -- invalid form contract; radio has no supported invalid ARIA */}\n <input\n id={id}\n type=\"radio\"\n name={name}\n value={value}\n className={styles['radio__input']}\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n aria-invalid={invalid ? true : undefined}\n onChange={handleChange}\n {...rest}\n />\n <span className={styles['radio__circle']}>\n <span className={styles['radio__dot']} aria-hidden />\n </span>\n {children != null && (\n <span className={styles['radio__label']}>{children}</span>\n )}\n </label>\n );\n}\n"],"names":["Radio","className","size","invalid","children","idProp","checked","defaultChecked","disabled","onChange","name","value","rest","generatedId","useId","id","handleChange","useControllable","sizeClass","styles","toKebab","invalidClass","rootClass","jsxs","jsx"],"mappings":";;;;;AA2BA,SAAwBA,EAAM;AAAA,EAC5B,WAAAC,IAAY;AAAA,EACZ,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,UAAAC;AAAA,EACA,IAAIC;AAAA,EACJ,SAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,GAAGC;AACL,GAAe;AACb,QAAMC,IAAcC,EAAA,GACdC,IAAKV,KAAUQ,GACf,CAAA,EAAGG,CAAY,IAAIC,EAAgBX,GAASC,GAAgBE,CAAQ,GAEpES,IAAYC,EAAO,eAAeC,EAAQlB,CAAI,CAAC,EAAE,GACjDmB,IAAelB,IAAUgB,EAAO,gBAAgB,IAAI,IAEpDG,IAAY,CAACH,EAAO,OAAOD,GAAWG,GAAcpB,CAAS,EAChE,OAAO,OAAO,EACd,KAAK,GAAG;AAEX,SACE,gBAAAsB,EAAC,SAAA,EAAM,WAAWD,GAAW,SAASP,GAEpC,UAAA;AAAA,IAAA,gBAAAS;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,IAAAT;AAAA,QACA,MAAK;AAAA,QACL,MAAAL;AAAA,QACA,OAAAC;AAAA,QACA,WAAWQ,EAAO;AAAA,QAClB,SAAAb;AAAA,QACA,gBAAAC;AAAA,QACA,UAAAC;AAAA,QACA,gBAAcL,IAAU,KAAO;AAAA,QAC/B,UAAUa;AAAA,QACT,GAAGJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAEN,gBAAAY,EAAC,QAAA,EAAK,WAAWL,EAAO,eACtB,UAAA,gBAAAK,EAAC,QAAA,EAAK,WAAWL,EAAO,YAAe,eAAW,IAAC,GACrD;AAAA,IACCf,KAAY,QACX,gBAAAoB,EAAC,QAAA,EAAK,WAAWL,EAAO,cAAkB,UAAAf,EAAA,CAAS;AAAA,EAAA,GAEvD;AAEJ;"}
@@ -1 +1 @@
1
- ._radio_1e67f_2{position:relative;display:flex;align-items:center;width:100%;gap:var(--spacing-xs);font-family:var(--font-family-body);color:var(--center-channel-color);cursor:pointer;-webkit-user-select:none;user-select:none}._radio_1e67f_2:has(._radio__input_1e67f_13:disabled){cursor:not-allowed;color:rgba(var(--center-channel-color-rgb),.56)}._radio__input_1e67f_13{position:absolute;left:0;top:50%;transform:translateY(-50%);margin:0;padding:0;opacity:0;overflow:hidden;white-space:nowrap;border:0;cursor:inherit}._radio__input_1e67f_13:focus-visible{outline:none}._radio__circle_1e67f_33{position:relative;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;background-color:var(--center-channel-bg);border:1px solid rgba(var(--center-channel-color-rgb),.24);border-radius:var(--radius-full);transition:background-color var(--duration-quick) var(--ease-transition),border-color var(--duration-quick) var(--ease-transition),border-width var(--duration-quick) var(--ease-transition),box-shadow var(--duration-quick) var(--ease-transition)}._radio__input_1e67f_13:focus-visible~._radio__circle_1e67f_33{box-shadow:0 0 0 4px rgba(var(--button-bg-rgb),.56)}._radio_1e67f_2:has(._radio__input_1e67f_13:not(:disabled)):hover ._radio__circle_1e67f_33{border-color:rgba(var(--center-channel-color-rgb),.32)}._radio__input_1e67f_13:disabled~._radio__circle_1e67f_33{border-color:rgba(var(--center-channel-color-rgb),.16)}._radio__input_1e67f_13:checked~._radio__circle_1e67f_33{background-color:var(--center-channel-bg);border-width:1px;border-color:var(--button-bg)}._radio__input_1e67f_13:checked~._radio__circle_1e67f_33 ._radio__dot_1e67f_59{background-color:var(--button-bg)}._radio_1e67f_2:has(._radio__input_1e67f_13:not(:disabled)):hover ._radio__input_1e67f_13:checked~._radio__circle_1e67f_33{border-color:var(--button-bg)}._radio_1e67f_2:has(._radio__input_1e67f_13:not(:disabled)):hover ._radio__input_1e67f_13:checked~._radio__circle_1e67f_33 ._radio__dot_1e67f_59{background-color:var(--button-bg)}._radio__input_1e67f_13:focus-visible:checked~._radio__circle_1e67f_33{border-color:var(--button-bg);box-shadow:0 0 0 2px rgba(var(--button-bg-rgb),.56)}._radio__input_1e67f_13:disabled:checked~._radio__circle_1e67f_33{background-color:var(--center-channel-bg);border-color:rgba(var(--center-channel-color-rgb),.32);border-width:1px}._radio__input_1e67f_13:disabled:checked~._radio__circle_1e67f_33 ._radio__dot_1e67f_59{background-color:rgba(var(--center-channel-color-rgb),.32)}._radio--invalid_1e67f_80 ._radio__circle_1e67f_33{border-color:var(--error-text, var(--color-danger))}._radio_1e67f_2:has(._radio__input_1e67f_13:not(:disabled)):hover._radio--invalid_1e67f_80 ._radio__input_1e67f_13:not(:checked)~._radio__circle_1e67f_33{border-color:var(--error-text, var(--color-danger))}._radio--invalid_1e67f_80 ._radio__input_1e67f_13:checked~._radio__circle_1e67f_33{background-color:var(--center-channel-bg);border-width:1px;border-color:var(--error-text, var(--color-danger))}._radio--invalid_1e67f_80 ._radio__input_1e67f_13:checked~._radio__circle_1e67f_33 ._radio__dot_1e67f_59{background-color:var(--error-text, var(--color-danger))}._radio_1e67f_2:has(._radio__input_1e67f_13:not(:disabled)):hover._radio--invalid_1e67f_80 ._radio__input_1e67f_13:checked~._radio__circle_1e67f_33{border-color:var(--error-text, var(--color-danger))}._radio_1e67f_2:has(._radio__input_1e67f_13:not(:disabled)):hover._radio--invalid_1e67f_80 ._radio__input_1e67f_13:checked~._radio__circle_1e67f_33 ._radio__dot_1e67f_59{background-color:var(--error-text, var(--color-danger))}._radio--invalid_1e67f_80 ._radio__input_1e67f_13:focus-visible~._radio__circle_1e67f_33{box-shadow:0 0 0 2px rgba(var(--error-text-color-rgb, var(--color-danger-rgb)),.56)}._radio--invalid_1e67f_80 ._radio__input_1e67f_13:focus-visible:checked~._radio__circle_1e67f_33{box-shadow:0 0 0 2px rgba(var(--error-text-color-rgb, var(--color-danger-rgb)),.56)}._radio__dot_1e67f_59{display:block;border-radius:var(--radius-full);pointer-events:none;transform:scale(.5);transition:transform var(--duration-quick) var(--ease-entrance)}._radio__input_1e67f_13:checked~._radio__circle_1e67f_33 ._radio__dot_1e67f_59{transform:scale(1)}._radio__label_1e67f_116{line-height:1}._radio--size-small_1e67f_119{gap:var(--spacing-xs)}._radio--size-small_1e67f_119 ._radio__input_1e67f_13,._radio--size-small_1e67f_119 ._radio__circle_1e67f_33{width:12px;height:12px}._radio--size-small_1e67f_119 ._radio__dot_1e67f_59{width:6px;height:6px}._radio--size-small_1e67f_119 ._radio__label_1e67f_116{font-size:var(--font-size-75);line-height:var(--line-height-75)}._radio--size-medium_1e67f_138{gap:var(--spacing-xs)}._radio--size-medium_1e67f_138 ._radio__input_1e67f_13,._radio--size-medium_1e67f_138 ._radio__circle_1e67f_33{width:16px;height:16px}._radio--size-medium_1e67f_138 ._radio__dot_1e67f_59{width:8px;height:8px}._radio--size-medium_1e67f_138 ._radio__label_1e67f_116{font-size:var(--font-size-100);line-height:var(--line-height-100)}._radio--size-large_1e67f_157{gap:var(--spacing-s)}._radio--size-large_1e67f_157 ._radio__input_1e67f_13,._radio--size-large_1e67f_157 ._radio__circle_1e67f_33{width:20px;height:20px}._radio--size-large_1e67f_157 ._radio__dot_1e67f_59{width:10px;height:10px}._radio--size-large_1e67f_157 ._radio__label_1e67f_116{font-size:var(--font-size-200);line-height:var(--line-height-200)}
1
+ ._radio_difs7_2{position:relative;display:flex;align-items:center;width:100%;gap:var(--spacing-xs);font-family:var(--font-family-body);color:var(--center-channel-color);cursor:pointer;-webkit-user-select:none;user-select:none}._radio_difs7_2:has(._radio__input_difs7_13:disabled){cursor:not-allowed;color:rgba(var(--center-channel-color-rgb),.56)}._radio__input_difs7_13{position:absolute;left:0;top:50%;transform:translateY(-50%);margin:0;padding:0;opacity:0;overflow:hidden;white-space:nowrap;border:0;cursor:inherit}._radio__input_difs7_13:focus-visible{outline:none}._radio__circle_difs7_33{position:relative;flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;background-color:var(--center-channel-bg);border:1px solid rgba(var(--center-channel-color-rgb),.24);border-radius:var(--radius-full);transition:background-color var(--duration-quick) var(--ease-transition),border-color var(--duration-quick) var(--ease-transition),border-width var(--duration-quick) var(--ease-transition),box-shadow var(--duration-quick) var(--ease-transition)}._radio__input_difs7_13:focus-visible~._radio__circle_difs7_33{box-shadow:0 0 0 2px rgba(var(--button-bg-rgb),.56)}._radio_difs7_2:has(._radio__input_difs7_13:not(:disabled)):hover ._radio__circle_difs7_33{border-color:rgba(var(--center-channel-color-rgb),.32)}._radio__input_difs7_13:disabled~._radio__circle_difs7_33{border-color:rgba(var(--center-channel-color-rgb),.16)}._radio__input_difs7_13:checked~._radio__circle_difs7_33{background-color:var(--center-channel-bg);border-width:1px;border-color:var(--button-bg)}._radio__input_difs7_13:checked~._radio__circle_difs7_33 ._radio__dot_difs7_59{background-color:var(--button-bg)}._radio_difs7_2:has(._radio__input_difs7_13:not(:disabled)):hover ._radio__input_difs7_13:checked~._radio__circle_difs7_33{border-color:var(--button-bg)}._radio_difs7_2:has(._radio__input_difs7_13:not(:disabled)):hover ._radio__input_difs7_13:checked~._radio__circle_difs7_33 ._radio__dot_difs7_59{background-color:var(--button-bg)}._radio__input_difs7_13:focus-visible:checked~._radio__circle_difs7_33{border-color:var(--button-bg);box-shadow:0 0 0 2px rgba(var(--button-bg-rgb),.56)}._radio__input_difs7_13:disabled:checked~._radio__circle_difs7_33{background-color:var(--center-channel-bg);border-color:rgba(var(--center-channel-color-rgb),.32);border-width:1px}._radio__input_difs7_13:disabled:checked~._radio__circle_difs7_33 ._radio__dot_difs7_59{background-color:rgba(var(--center-channel-color-rgb),.32)}._radio--invalid_difs7_80 ._radio__circle_difs7_33{border-color:var(--error-text, var(--color-danger))}._radio_difs7_2:has(._radio__input_difs7_13:not(:disabled)):hover._radio--invalid_difs7_80 ._radio__input_difs7_13:not(:checked)~._radio__circle_difs7_33{border-color:var(--error-text, var(--color-danger))}._radio--invalid_difs7_80 ._radio__input_difs7_13:checked~._radio__circle_difs7_33{background-color:var(--center-channel-bg);border-width:1px;border-color:var(--error-text, var(--color-danger))}._radio--invalid_difs7_80 ._radio__input_difs7_13:checked~._radio__circle_difs7_33 ._radio__dot_difs7_59{background-color:var(--error-text, var(--color-danger))}._radio_difs7_2:has(._radio__input_difs7_13:not(:disabled)):hover._radio--invalid_difs7_80 ._radio__input_difs7_13:checked~._radio__circle_difs7_33{border-color:var(--error-text, var(--color-danger))}._radio_difs7_2:has(._radio__input_difs7_13:not(:disabled)):hover._radio--invalid_difs7_80 ._radio__input_difs7_13:checked~._radio__circle_difs7_33 ._radio__dot_difs7_59{background-color:var(--error-text, var(--color-danger))}._radio--invalid_difs7_80 ._radio__input_difs7_13:focus-visible~._radio__circle_difs7_33{box-shadow:0 0 0 2px rgba(var(--error-text-color-rgb, var(--color-danger-rgb)),.56)}._radio--invalid_difs7_80 ._radio__input_difs7_13:focus-visible:checked~._radio__circle_difs7_33{box-shadow:0 0 0 2px rgba(var(--error-text-color-rgb, var(--color-danger-rgb)),.56)}._radio__dot_difs7_59{display:block;border-radius:var(--radius-full);pointer-events:none;transform:scale(.5);transition:transform var(--duration-quick) var(--ease-entrance)}._radio__input_difs7_13:checked~._radio__circle_difs7_33 ._radio__dot_difs7_59{transform:scale(1)}._radio__label_difs7_116{line-height:1}._radio--size-small_difs7_119{gap:var(--spacing-xs)}._radio--size-small_difs7_119 ._radio__input_difs7_13,._radio--size-small_difs7_119 ._radio__circle_difs7_33{width:12px;height:12px}._radio--size-small_difs7_119 ._radio__dot_difs7_59{width:6px;height:6px}._radio--size-small_difs7_119 ._radio__label_difs7_116{font-size:var(--font-size-75);line-height:var(--line-height-75)}._radio--size-medium_difs7_138{gap:var(--spacing-xs)}._radio--size-medium_difs7_138 ._radio__input_difs7_13,._radio--size-medium_difs7_138 ._radio__circle_difs7_33{width:16px;height:16px}._radio--size-medium_difs7_138 ._radio__dot_difs7_59{width:8px;height:8px}._radio--size-medium_difs7_138 ._radio__label_difs7_116{font-size:var(--font-size-100);line-height:var(--line-height-100)}._radio--size-large_difs7_157{gap:var(--spacing-s)}._radio--size-large_difs7_157 ._radio__input_difs7_13,._radio--size-large_difs7_157 ._radio__circle_difs7_33{width:20px;height:20px}._radio--size-large_difs7_157 ._radio__dot_difs7_59{width:10px;height:10px}._radio--size-large_difs7_157 ._radio__label_difs7_116{font-size:var(--font-size-200);line-height:var(--line-height-200)}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Radio.module.css');const _="_radio_1e67f_2",i="_radio__input_1e67f_13",o="_radio__circle_1e67f_33",a="_radio__dot_1e67f_59",e="_radio__label_1e67f_116",d={radio:_,radio__input:i,radio__circle:o,radio__dot:a,"radio--invalid":"_radio--invalid_1e67f_80",radio__label:e,"radio--size-small":"_radio--size-small_1e67f_119","radio--size-medium":"_radio--size-medium_1e67f_138","radio--size-large":"_radio--size-large_1e67f_157"};exports.default=d;exports.radio=_;exports.radio__circle=o;exports.radio__dot=a;exports.radio__input=i;exports.radio__label=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./Radio.module.css');const i="_radio_difs7_2",_="_radio__input_difs7_13",d="_radio__circle_difs7_33",o="_radio__dot_difs7_59",a="_radio__label_difs7_116",r={radio:i,radio__input:_,radio__circle:d,radio__dot:o,"radio--invalid":"_radio--invalid_difs7_80",radio__label:a,"radio--size-small":"_radio--size-small_difs7_119","radio--size-medium":"_radio--size-medium_difs7_138","radio--size-large":"_radio--size-large_difs7_157"};exports.default=r;exports.radio=i;exports.radio__circle=d;exports.radio__dot=o;exports.radio__input=_;exports.radio__label=a;
2
2
  //# sourceMappingURL=Radio.module.scss.cjs.map
@@ -1,20 +1,20 @@
1
- import './Radio.module.css';const _ = "_radio_1e67f_2", i = "_radio__input_1e67f_13", a = "_radio__circle_1e67f_33", o = "_radio__dot_1e67f_59", d = "_radio__label_1e67f_116", r = {
1
+ import './Radio.module.css';const _ = "_radio_difs7_2", i = "_radio__input_difs7_13", d = "_radio__circle_difs7_33", a = "_radio__dot_difs7_59", o = "_radio__label_difs7_116", r = {
2
2
  radio: _,
3
3
  radio__input: i,
4
- radio__circle: a,
5
- radio__dot: o,
6
- "radio--invalid": "_radio--invalid_1e67f_80",
7
- radio__label: d,
8
- "radio--size-small": "_radio--size-small_1e67f_119",
9
- "radio--size-medium": "_radio--size-medium_1e67f_138",
10
- "radio--size-large": "_radio--size-large_1e67f_157"
4
+ radio__circle: d,
5
+ radio__dot: a,
6
+ "radio--invalid": "_radio--invalid_difs7_80",
7
+ radio__label: o,
8
+ "radio--size-small": "_radio--size-small_difs7_119",
9
+ "radio--size-medium": "_radio--size-medium_difs7_138",
10
+ "radio--size-large": "_radio--size-large_difs7_157"
11
11
  };
12
12
  export {
13
13
  r as default,
14
14
  _ as radio,
15
- a as radio__circle,
16
- o as radio__dot,
15
+ d as radio__circle,
16
+ a as radio__dot,
17
17
  i as radio__input,
18
- d as radio__label
18
+ o as radio__label
19
19
  };
20
20
  //# sourceMappingURL=Radio.module.scss.js.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),a=require("react"),$=require("../../utils/string.cjs"),g=require("../icon/Icon.cjs"),__B=require("@mattermost/compass-icons/components/magnify.js"),B=__B?.default??__B,__D=require("@mattermost/compass-icons/components/close-circle.js"),D=__D?.default??__D,s=require("./SearchInput.module.scss.cjs"),G={small:"12",medium:"16",large:"20"},H=a.forwardRef(function({className:q="",size:p="medium",label:o,onClear:d,id:y,value:f,defaultValue:I,placeholder:C,onFocus:n,onBlur:r,onChange:l,disabled:i,...k},u){const R=a.useId(),_=y??R,h=a.useRef(null),c=f!==void 0,[z,m]=a.useState(I??""),j=c?f:z,x=j!=null&&j!=="",[M,b]=a.useState(!1),w=M||x,T=a.useCallback(e=>{b(!0),n==null||n(e)},[n]),V=a.useCallback(e=>{b(!1),r==null||r(e)},[r]),F=a.useCallback(e=>{c||m(e.target.value),l==null||l(e)},[c,l]),O=a.useCallback(e=>{h.current=e,typeof u=="function"?u(e):u&&(u.current=e)},[u]),A=a.useCallback(()=>{var S;if(i)return;if(d){d(),(S=h.current)==null||S.focus();return}const e=h.current;e!=null&&(e.value="",c||m(""),l==null||l({target:e,currentTarget:e}),e.focus())},[i,c,l,d]),v=x&&!i,E=s.default[`searchInput--size-${$.toKebab(p)}`],K=o!=null&&w?s.default["searchInput--label-floated"]:"",L=s.default["searchInput--has-leading-icon"],U=v?s.default["searchInput--has-trailing-icon"]:"",N=G[p],Z=[s.default.searchInput,E,K,L,U,q].filter(Boolean).join(" ");return t.jsx("div",{className:Z,children:t.jsxs("div",{className:s.default.searchInput__wrapper,children:[o!=null&&t.jsx("label",{className:s.default.searchInput__label,htmlFor:_,children:o}),t.jsxs("div",{className:s.default.searchInput__inner,children:[t.jsx("span",{className:s.default.searchInput__leadingIcon,"aria-hidden":!0,children:t.jsx(g.default,{size:N,glyph:t.jsx(B,{})})}),t.jsx("input",{ref:O,id:_,type:"search",className:s.default.searchInput__input,value:c?f:void 0,defaultValue:c?void 0:I,placeholder:C,disabled:i,onFocus:T,onBlur:V,onChange:F,...k}),v&&t.jsx("span",{className:s.default.searchInput__trailingIcon,children:t.jsx("button",{type:"button",className:s.default.searchInput__clearButton,onClick:A,"aria-label":"Clear search",tabIndex:-1,children:t.jsx(g.default,{size:N,glyph:t.jsx(D,{})})})})]})]})})});exports.default=H;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("react/jsx-runtime"),a=require("react"),W=require("../../utils/string.cjs"),k=require("../icon/Icon.cjs"),__X=require("@mattermost/compass-icons/components/magnify.js"),X=__X?.default??__X,__Y=require("@mattermost/compass-icons/components/close-circle.js"),Y=__Y?.default??__Y,t=require("./SearchInput.module.scss.cjs"),B={small:"12",medium:"16",large:"20"},D={small:"12",medium:"16",large:"16"},K=a.forwardRef(function({className:q="",size:f="medium",label:h,invalid:I=!1,onClear:p,id:R,value:_,defaultValue:j,placeholder:y,onFocus:i,onBlur:r,onChange:l,disabled:u,onKeyDown:d,...M},n){const z=a.useId(),x=R??z,m=a.useRef(null),c=_!==void 0,[E,b]=a.useState(j??""),C=c?_:E,o=C!=null&&C!=="",[A,S]=a.useState(!1),O=A||o,T=a.useCallback(e=>{S(!0),i==null||i(e)},[i]),V=a.useCallback(e=>{S(!1),r==null||r(e)},[r]),F=a.useCallback(e=>{c||b(e.target.value),l==null||l(e)},[c,l]),L=a.useCallback(e=>{m.current=e,typeof n=="function"?n(e):n&&(n.current=e)},[n]),v=a.useCallback(()=>{var g;if(u)return;if(p){p(),(g=m.current)==null||g.focus();return}const e=m.current;e!=null&&(e.value="",c||b(""),l==null||l({target:e,currentTarget:e}),e.focus())},[u,c,l,p]),P=a.useCallback(e=>{d==null||d(e),!(e.defaultPrevented||u)&&e.key==="Escape"&&o&&(e.preventDefault(),v())},[u,v,o,d]),N=o&&!u,Z=t.default[`search-input--size-${W.toKebab(f)}`],U=I?t.default["search-input--invalid"]:"",$=h!=null&&O?t.default["search-input--label-floated"]:"",w=t.default["search-input--has-leading-icon"],G=N?t.default["search-input--has-trailing-icon"]:"",H=B[f],J=D[f],Q=[t.default["search-input"],Z,U,$,w,G,q].filter(Boolean).join(" ");return s.jsx("div",{className:Q,children:s.jsxs("div",{className:t.default["search-input__wrapper"],children:[h!=null&&s.jsx("label",{className:t.default["search-input__label"],htmlFor:x,children:h}),s.jsxs("div",{className:t.default["search-input__inner"],children:[s.jsx("span",{className:t.default["search-input__leading-icon"],"aria-hidden":!0,children:s.jsx(k.default,{size:H,glyph:s.jsx(X,{})})}),s.jsx("input",{ref:L,id:x,type:"search",className:t.default["search-input__input"],value:c?_:void 0,defaultValue:c?void 0:j,placeholder:y,disabled:u,onFocus:T,onBlur:V,onChange:F,onKeyDown:P,"aria-invalid":I?!0:void 0,...M}),N&&s.jsx("span",{className:t.default["search-input__trailing-icon"],children:s.jsx("button",{type:"button",className:t.default["search-input__clear-button"],onClick:v,"aria-label":"Clear search",tabIndex:-1,children:s.jsx(k.default,{size:J,glyph:s.jsx(Y,{})})})})]})]})})});exports.default=K;
2
2
  //# sourceMappingURL=SearchInput.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.cjs","sources":["../../../src/components/search-input/SearchInput.tsx"],"sourcesContent":["import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react';\nimport {\n forwardRef,\n useId,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport { toKebab } from '@/utils/string';\nimport type { IconSize } from '@/components/icon/Icon';\nimport Icon from '@/components/icon/Icon';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport styles from './SearchInput.module.scss';\n\nexport type SearchInputSize = 'small' | 'medium' | 'large';\n\nconst ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '20',\n};\n\nexport interface SearchInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Floating label (placeholder-style). Floats above border when filled. */\n label?: ReactNode;\n /** Size variant. Default: Medium. */\n size?: SearchInputSize;\n /** Called when the clear button is pressed. Omit to use built-in clearing. */\n onClear?: () => void;\n}\n\n/**\n * Search Inputs are the entry point to filtering or finding content — global search, channel\n * switcher, member picker, file finder. They look like a text input with a leading magnifier\n * so the affordance is obvious before the user reads a single word.\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n className = '',\n size = 'medium',\n label,\n onClear,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const handleClear = useCallback(() => {\n if (disabled) return;\n\n if (onClear) {\n onClear();\n inputRef.current?.focus();\n return;\n }\n\n const input = inputRef.current;\n if (input == null) return;\n\n input.value = '';\n if (!isControlled) setUncontrolledValue('');\n\n onChange?.({\n target: input,\n currentTarget: input,\n } as ChangeEvent<HTMLInputElement>);\n\n input.focus();\n }, [disabled, isControlled, onChange, onClear]);\n\n const showClearButton = hasValue && !disabled;\n\n const sizeClass = styles[`searchInput--size-${toKebab(size)}`];\n const labelFloatedClass =\n label != null && labelFloated ? styles['searchInput--label-floated'] : '';\n const hasLeadingClass = styles['searchInput--has-leading-icon'];\n const hasTrailingClass = showClearButton\n ? styles['searchInput--has-trailing-icon']\n : '';\n const iconSize = ICON_SIZE_MAP[size];\n\n const rootClass = [\n styles.searchInput,\n sizeClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles.searchInput__wrapper}>\n {label != null && (\n <label className={styles.searchInput__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div className={styles.searchInput__inner}>\n <span className={styles.searchInput__leadingIcon} aria-hidden>\n <Icon size={iconSize} glyph={<MagnifyIcon />} />\n </span>\n <input\n ref={setInputRef}\n id={id}\n type=\"search\"\n className={styles.searchInput__input}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n {...rest}\n />\n {showClearButton && (\n <span className={styles.searchInput__trailingIcon}>\n <button\n type=\"button\"\n className={styles.searchInput__clearButton}\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <Icon size={iconSize} glyph={<CloseCircleIcon />} />\n </button>\n </span>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nexport default SearchInput;\n"],"names":["ICON_SIZE_MAP","SearchInput","forwardRef","className","size","label","onClear","idProp","valueProp","defaultValue","placeholder","onFocus","onBlur","onChange","disabled","rest","ref","generatedId","useId","id","inputRef","useRef","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","hasValue","isFocused","setIsFocused","labelFloated","handleFocus","useCallback","handleBlur","handleChange","setInputRef","node","handleClear","_a","input","showClearButton","sizeClass","styles","toKebab","labelFloatedClass","hasLeadingClass","hasTrailingClass","iconSize","rootClass","jsx","jsxs","Icon","MagnifyIcon","CloseCircleIcon"],"mappings":"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"}
1
+ {"version":3,"file":"SearchInput.cjs","sources":["../../../src/components/search-input/SearchInput.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n InputHTMLAttributes,\n KeyboardEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useId,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport { toKebab } from '@/utils/string';\nimport type { IconSize } from '@/components/icon/Icon';\nimport Icon from '@/components/icon/Icon';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport styles from './SearchInput.module.scss';\n\nexport type SearchInputSize = 'small' | 'medium' | 'large';\n\nconst ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '20',\n};\n\nconst CLEAR_ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '16',\n};\n\nexport interface SearchInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /** Floating label (placeholder-style). Floats above border when filled. */\n label?: ReactNode;\n /** Size variant. Default: Medium. */\n size?: SearchInputSize;\n /** Called when the clear button is pressed. Omit to use built-in clearing. */\n onClear?: () => void;\n}\n\n/**\n * Search Inputs are the entry point to filtering or finding content — global search, channel\n * switcher, member picker, file finder. They look like a text input with a leading magnifier\n * so the affordance is obvious before the user reads a single word.\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n className = '',\n size = 'medium',\n label,\n invalid = false,\n onClear,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n onKeyDown,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const handleClear = useCallback(() => {\n if (disabled) return;\n\n if (onClear) {\n onClear();\n inputRef.current?.focus();\n return;\n }\n\n const input = inputRef.current;\n if (input == null) return;\n\n input.value = '';\n if (!isControlled) setUncontrolledValue('');\n\n onChange?.({\n target: input,\n currentTarget: input,\n } as ChangeEvent<HTMLInputElement>);\n\n input.focus();\n }, [disabled, isControlled, onChange, onClear]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || disabled) return;\n if (e.key === 'Escape' && hasValue) {\n e.preventDefault();\n handleClear();\n }\n },\n [disabled, handleClear, hasValue, onKeyDown],\n );\n\n const showClearButton = hasValue && !disabled;\n\n const sizeClass = styles[`search-input--size-${toKebab(size)}`];\n const invalidClass = invalid ? styles['search-input--invalid'] : '';\n const labelFloatedClass =\n label != null && labelFloated ? styles['search-input--label-floated'] : '';\n const hasLeadingClass = styles['search-input--has-leading-icon'];\n const hasTrailingClass = showClearButton\n ? styles['search-input--has-trailing-icon']\n : '';\n const iconSize = ICON_SIZE_MAP[size];\n const clearIconSize = CLEAR_ICON_SIZE_MAP[size];\n\n const rootClass = [\n styles['search-input'],\n sizeClass,\n invalidClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['search-input__wrapper']}>\n {label != null && (\n <label className={styles['search-input__label']} htmlFor={id}>\n {label}\n </label>\n )}\n <div className={styles['search-input__inner']}>\n <span className={styles['search-input__leading-icon']} aria-hidden>\n <Icon size={iconSize} glyph={<MagnifyIcon />} />\n </span>\n <input\n ref={setInputRef}\n id={id}\n type=\"search\"\n className={styles['search-input__input']}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n aria-invalid={invalid ? true : undefined}\n {...rest}\n />\n {showClearButton && (\n <span className={styles['search-input__trailing-icon']}>\n <button\n type=\"button\"\n className={styles['search-input__clear-button']}\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <Icon size={clearIconSize} glyph={<CloseCircleIcon />} />\n </button>\n </span>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nexport default SearchInput;\n"],"names":["ICON_SIZE_MAP","CLEAR_ICON_SIZE_MAP","SearchInput","forwardRef","className","size","label","invalid","onClear","idProp","valueProp","defaultValue","placeholder","onFocus","onBlur","onChange","disabled","onKeyDown","rest","ref","generatedId","useId","id","inputRef","useRef","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","hasValue","isFocused","setIsFocused","labelFloated","handleFocus","useCallback","handleBlur","handleChange","setInputRef","node","handleClear","_a","input","handleKeyDown","showClearButton","sizeClass","styles","toKebab","invalidClass","labelFloatedClass","hasLeadingClass","hasTrailingClass","iconSize","clearIconSize","rootClass","jsx","jsxs","Icon","MagnifyIcon","CloseCircleIcon"],"mappings":"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"}
@@ -3,6 +3,8 @@ export type SearchInputSize = 'small' | 'medium' | 'large';
3
3
  export interface SearchInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
4
4
  /** Optional CSS class name. */
5
5
  className?: string;
6
+ /** When true, shows invalid/error styling. */
7
+ invalid?: boolean;
6
8
  /** Floating label (placeholder-style). Floats above border when filled. */
7
9
  label?: ReactNode;
8
10
  /** Size variant. Default: Medium. */
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/search-input/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAezE,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAQ3D,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAC5C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,MAAM,CAChB;IACC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qCAAqC;IACrC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,QAAA,MAAM,WAAW,+GA4JhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"SearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/search-input/SearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EAEnB,SAAS,EACV,MAAM,OAAO,CAAC;AAef,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAc3D,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAC5C,mBAAmB,CAAC,gBAAgB,CAAC,EACrC,MAAM,GAAG,MAAM,CAChB;IACC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,qCAAqC;IACrC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;;GAIG;AACH,QAAA,MAAM,WAAW,+GA+KhB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,102 +1,116 @@
1
1
  import { jsx as s, jsxs as x } from "react/jsx-runtime";
2
- import { forwardRef as D, useId as G, useRef as H, useState as z, useCallback as n } from "react";
3
- import { toKebab as J } from "../../utils/string.js";
4
- import R from "../icon/Icon.js";
5
- import __Q from "@mattermost/compass-icons/components/magnify.js";const Q=__Q&&__Q.default?__Q.default:__Q;
6
- import __W from "@mattermost/compass-icons/components/close-circle.js";const W=__W&&__W.default?__W.default:__W;
2
+ import { forwardRef as Y, useId as B, useRef as D, useState as z, useCallback as i } from "react";
3
+ import { toKebab as K } from "../../utils/string.js";
4
+ import E from "../icon/Icon.js";
5
+ import __tt from "@mattermost/compass-icons/components/magnify.js";const tt=__tt&&__tt.default?__tt.default:__tt;
6
+ import __et from "@mattermost/compass-icons/components/close-circle.js";const et=__et&&__et.default?__et.default:__et;
7
7
  import e from "./SearchInput.module.scss.js";
8
- const X = {
8
+ const st = {
9
9
  small: "12",
10
10
  medium: "16",
11
11
  large: "20"
12
- }, nt = D(
12
+ }, at = {
13
+ small: "12",
14
+ medium: "16",
15
+ large: "16"
16
+ }, dt = Y(
13
17
  function({
14
18
  className: j = "",
15
- size: m = "medium",
16
- label: u,
17
- onClear: p,
18
- id: w,
19
- value: d,
20
- defaultValue: f,
21
- placeholder: C,
22
- onFocus: r,
23
- onBlur: i,
19
+ size: d = "medium",
20
+ label: f,
21
+ invalid: v = !1,
22
+ onClear: m,
23
+ id: k,
24
+ value: h,
25
+ defaultValue: N,
26
+ placeholder: A,
27
+ onFocus: n,
28
+ onBlur: u,
24
29
  onChange: a,
25
- disabled: o,
26
- ...V
27
- }, l) {
28
- const k = G(), I = w ?? k, h = H(null), c = d !== void 0, [F, _] = z(
29
- f ?? ""
30
- ), v = c ? d : F, N = v != null && v !== "", [M, b] = z(!1), T = M || N, A = n(
30
+ disabled: l,
31
+ onKeyDown: o,
32
+ ...M
33
+ }, r) {
34
+ const V = B(), S = k ?? V, _ = D(null), c = h !== void 0, [F, b] = z(
35
+ N ?? ""
36
+ ), g = c ? h : F, p = g != null && g !== "", [L, C] = z(!1), O = L || p, T = i(
31
37
  (t) => {
32
- b(!0), r == null || r(t);
38
+ C(!0), n == null || n(t);
33
39
  },
34
- [r]
35
- ), E = n(
40
+ [n]
41
+ ), Z = i(
36
42
  (t) => {
37
- b(!1), i == null || i(t);
43
+ C(!1), u == null || u(t);
38
44
  },
39
- [i]
40
- ), K = n(
45
+ [u]
46
+ ), P = i(
41
47
  (t) => {
42
- c || _(t.target.value), a == null || a(t);
48
+ c || b(t.target.value), a == null || a(t);
43
49
  },
44
50
  [c, a]
45
- ), L = n(
51
+ ), U = i(
46
52
  (t) => {
47
- h.current = t, typeof l == "function" ? l(t) : l && (l.current = t);
53
+ _.current = t, typeof r == "function" ? r(t) : r && (r.current = t);
48
54
  },
49
- [l]
50
- ), O = n(() => {
51
- var S;
52
- if (o) return;
53
- if (p) {
54
- p(), (S = h.current) == null || S.focus();
55
+ [r]
56
+ ), I = i(() => {
57
+ var R;
58
+ if (l) return;
59
+ if (m) {
60
+ m(), (R = _.current) == null || R.focus();
55
61
  return;
56
62
  }
57
- const t = h.current;
58
- t != null && (t.value = "", c || _(""), a == null || a({
63
+ const t = _.current;
64
+ t != null && (t.value = "", c || b(""), a == null || a({
59
65
  target: t,
60
66
  currentTarget: t
61
67
  }), t.focus());
62
- }, [o, c, a, p]), y = N && !o, U = e[`searchInput--size-${J(m)}`], Z = u != null && T ? e["searchInput--label-floated"] : "", $ = e["searchInput--has-leading-icon"], q = y ? e["searchInput--has-trailing-icon"] : "", g = X[m], B = [
63
- e.searchInput,
64
- U,
65
- Z,
66
- $,
68
+ }, [l, c, a, m]), $ = i(
69
+ (t) => {
70
+ o == null || o(t), !(t.defaultPrevented || l) && t.key === "Escape" && p && (t.preventDefault(), I());
71
+ },
72
+ [l, I, p, o]
73
+ ), y = p && !l, q = e[`search-input--size-${K(d)}`], w = v ? e["search-input--invalid"] : "", G = f != null && O ? e["search-input--label-floated"] : "", H = e["search-input--has-leading-icon"], J = y ? e["search-input--has-trailing-icon"] : "", Q = st[d], W = at[d], X = [
74
+ e["search-input"],
67
75
  q,
76
+ w,
77
+ G,
78
+ H,
79
+ J,
68
80
  j
69
81
  ].filter(Boolean).join(" ");
70
- return /* @__PURE__ */ s("div", { className: B, children: /* @__PURE__ */ x("div", { className: e.searchInput__wrapper, children: [
71
- u != null && /* @__PURE__ */ s("label", { className: e.searchInput__label, htmlFor: I, children: u }),
72
- /* @__PURE__ */ x("div", { className: e.searchInput__inner, children: [
73
- /* @__PURE__ */ s("span", { className: e.searchInput__leadingIcon, "aria-hidden": !0, children: /* @__PURE__ */ s(R, { size: g, glyph: /* @__PURE__ */ s(Q, {}) }) }),
82
+ return /* @__PURE__ */ s("div", { className: X, children: /* @__PURE__ */ x("div", { className: e["search-input__wrapper"], children: [
83
+ f != null && /* @__PURE__ */ s("label", { className: e["search-input__label"], htmlFor: S, children: f }),
84
+ /* @__PURE__ */ x("div", { className: e["search-input__inner"], children: [
85
+ /* @__PURE__ */ s("span", { className: e["search-input__leading-icon"], "aria-hidden": !0, children: /* @__PURE__ */ s(E, { size: Q, glyph: /* @__PURE__ */ s(tt, {}) }) }),
74
86
  /* @__PURE__ */ s(
75
87
  "input",
76
88
  {
77
- ref: L,
78
- id: I,
89
+ ref: U,
90
+ id: S,
79
91
  type: "search",
80
- className: e.searchInput__input,
81
- value: c ? d : void 0,
82
- defaultValue: c ? void 0 : f,
83
- placeholder: C,
84
- disabled: o,
85
- onFocus: A,
86
- onBlur: E,
87
- onChange: K,
88
- ...V
92
+ className: e["search-input__input"],
93
+ value: c ? h : void 0,
94
+ defaultValue: c ? void 0 : N,
95
+ placeholder: A,
96
+ disabled: l,
97
+ onFocus: T,
98
+ onBlur: Z,
99
+ onChange: P,
100
+ onKeyDown: $,
101
+ "aria-invalid": v ? !0 : void 0,
102
+ ...M
89
103
  }
90
104
  ),
91
- y && /* @__PURE__ */ s("span", { className: e.searchInput__trailingIcon, children: /* @__PURE__ */ s(
105
+ y && /* @__PURE__ */ s("span", { className: e["search-input__trailing-icon"], children: /* @__PURE__ */ s(
92
106
  "button",
93
107
  {
94
108
  type: "button",
95
- className: e.searchInput__clearButton,
96
- onClick: O,
109
+ className: e["search-input__clear-button"],
110
+ onClick: I,
97
111
  "aria-label": "Clear search",
98
112
  tabIndex: -1,
99
- children: /* @__PURE__ */ s(R, { size: g, glyph: /* @__PURE__ */ s(W, {}) })
113
+ children: /* @__PURE__ */ s(E, { size: W, glyph: /* @__PURE__ */ s(et, {}) })
100
114
  }
101
115
  ) })
102
116
  ] })
@@ -104,6 +118,6 @@ const X = {
104
118
  }
105
119
  );
106
120
  export {
107
- nt as default
121
+ dt as default
108
122
  };
109
123
  //# sourceMappingURL=SearchInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","sources":["../../../src/components/search-input/SearchInput.tsx"],"sourcesContent":["import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react';\nimport {\n forwardRef,\n useId,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport { toKebab } from '@/utils/string';\nimport type { IconSize } from '@/components/icon/Icon';\nimport Icon from '@/components/icon/Icon';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport styles from './SearchInput.module.scss';\n\nexport type SearchInputSize = 'small' | 'medium' | 'large';\n\nconst ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '20',\n};\n\nexport interface SearchInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** Floating label (placeholder-style). Floats above border when filled. */\n label?: ReactNode;\n /** Size variant. Default: Medium. */\n size?: SearchInputSize;\n /** Called when the clear button is pressed. Omit to use built-in clearing. */\n onClear?: () => void;\n}\n\n/**\n * Search Inputs are the entry point to filtering or finding content — global search, channel\n * switcher, member picker, file finder. They look like a text input with a leading magnifier\n * so the affordance is obvious before the user reads a single word.\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n className = '',\n size = 'medium',\n label,\n onClear,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const handleClear = useCallback(() => {\n if (disabled) return;\n\n if (onClear) {\n onClear();\n inputRef.current?.focus();\n return;\n }\n\n const input = inputRef.current;\n if (input == null) return;\n\n input.value = '';\n if (!isControlled) setUncontrolledValue('');\n\n onChange?.({\n target: input,\n currentTarget: input,\n } as ChangeEvent<HTMLInputElement>);\n\n input.focus();\n }, [disabled, isControlled, onChange, onClear]);\n\n const showClearButton = hasValue && !disabled;\n\n const sizeClass = styles[`searchInput--size-${toKebab(size)}`];\n const labelFloatedClass =\n label != null && labelFloated ? styles['searchInput--label-floated'] : '';\n const hasLeadingClass = styles['searchInput--has-leading-icon'];\n const hasTrailingClass = showClearButton\n ? styles['searchInput--has-trailing-icon']\n : '';\n const iconSize = ICON_SIZE_MAP[size];\n\n const rootClass = [\n styles.searchInput,\n sizeClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles.searchInput__wrapper}>\n {label != null && (\n <label className={styles.searchInput__label} htmlFor={id}>\n {label}\n </label>\n )}\n <div className={styles.searchInput__inner}>\n <span className={styles.searchInput__leadingIcon} aria-hidden>\n <Icon size={iconSize} glyph={<MagnifyIcon />} />\n </span>\n <input\n ref={setInputRef}\n id={id}\n type=\"search\"\n className={styles.searchInput__input}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n {...rest}\n />\n {showClearButton && (\n <span className={styles.searchInput__trailingIcon}>\n <button\n type=\"button\"\n className={styles.searchInput__clearButton}\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <Icon size={iconSize} glyph={<CloseCircleIcon />} />\n </button>\n </span>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nexport default SearchInput;\n"],"names":["ICON_SIZE_MAP","SearchInput","forwardRef","className","size","label","onClear","idProp","valueProp","defaultValue","placeholder","onFocus","onBlur","onChange","disabled","rest","ref","generatedId","useId","id","inputRef","useRef","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","hasValue","isFocused","setIsFocused","labelFloated","handleFocus","useCallback","e","handleBlur","handleChange","setInputRef","node","handleClear","_a","input","showClearButton","sizeClass","styles","toKebab","labelFloatedClass","hasLeadingClass","hasTrailingClass","iconSize","rootClass","jsx","jsxs","Icon","MagnifyIcon","CloseCircleIcon"],"mappings":"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"}
1
+ {"version":3,"file":"SearchInput.js","sources":["../../../src/components/search-input/SearchInput.tsx"],"sourcesContent":["import type {\n ChangeEvent,\n InputHTMLAttributes,\n KeyboardEvent,\n ReactNode,\n} from 'react';\nimport {\n forwardRef,\n useId,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport { toKebab } from '@/utils/string';\nimport type { IconSize } from '@/components/icon/Icon';\nimport Icon from '@/components/icon/Icon';\nimport MagnifyIcon from '@mattermost/compass-icons/components/magnify';\nimport CloseCircleIcon from '@mattermost/compass-icons/components/close-circle';\nimport styles from './SearchInput.module.scss';\n\nexport type SearchInputSize = 'small' | 'medium' | 'large';\n\nconst ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '20',\n};\n\nconst CLEAR_ICON_SIZE_MAP: Record<SearchInputSize, IconSize> = {\n small: '12',\n medium: '16',\n large: '16',\n};\n\nexport interface SearchInputProps extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'size' | 'type'\n> {\n /** Optional CSS class name. */\n className?: string;\n /** When true, shows invalid/error styling. */\n invalid?: boolean;\n /** Floating label (placeholder-style). Floats above border when filled. */\n label?: ReactNode;\n /** Size variant. Default: Medium. */\n size?: SearchInputSize;\n /** Called when the clear button is pressed. Omit to use built-in clearing. */\n onClear?: () => void;\n}\n\n/**\n * Search Inputs are the entry point to filtering or finding content — global search, channel\n * switcher, member picker, file finder. They look like a text input with a leading magnifier\n * so the affordance is obvious before the user reads a single word.\n */\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n className = '',\n size = 'medium',\n label,\n invalid = false,\n onClear,\n id: idProp,\n value: valueProp,\n defaultValue,\n placeholder,\n onFocus,\n onBlur,\n onChange,\n disabled,\n onKeyDown,\n ...rest\n },\n ref,\n ) {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const isControlled = valueProp !== undefined;\n const [uncontrolledValue, setUncontrolledValue] = useState(\n defaultValue ?? '',\n );\n const value = isControlled ? (valueProp as string) : uncontrolledValue;\n const hasValue = value != null && value !== '';\n\n const [isFocused, setIsFocused] = useState(false);\n const labelFloated = isFocused || hasValue;\n\n const handleFocus = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n const handleBlur = useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) setUncontrolledValue(e.target.value);\n onChange?.(e);\n },\n [isControlled, onChange],\n );\n\n const setInputRef = useCallback(\n (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n const handleClear = useCallback(() => {\n if (disabled) return;\n\n if (onClear) {\n onClear();\n inputRef.current?.focus();\n return;\n }\n\n const input = inputRef.current;\n if (input == null) return;\n\n input.value = '';\n if (!isControlled) setUncontrolledValue('');\n\n onChange?.({\n target: input,\n currentTarget: input,\n } as ChangeEvent<HTMLInputElement>);\n\n input.focus();\n }, [disabled, isControlled, onChange, onClear]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e);\n if (e.defaultPrevented || disabled) return;\n if (e.key === 'Escape' && hasValue) {\n e.preventDefault();\n handleClear();\n }\n },\n [disabled, handleClear, hasValue, onKeyDown],\n );\n\n const showClearButton = hasValue && !disabled;\n\n const sizeClass = styles[`search-input--size-${toKebab(size)}`];\n const invalidClass = invalid ? styles['search-input--invalid'] : '';\n const labelFloatedClass =\n label != null && labelFloated ? styles['search-input--label-floated'] : '';\n const hasLeadingClass = styles['search-input--has-leading-icon'];\n const hasTrailingClass = showClearButton\n ? styles['search-input--has-trailing-icon']\n : '';\n const iconSize = ICON_SIZE_MAP[size];\n const clearIconSize = CLEAR_ICON_SIZE_MAP[size];\n\n const rootClass = [\n styles['search-input'],\n sizeClass,\n invalidClass,\n labelFloatedClass,\n hasLeadingClass,\n hasTrailingClass,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <div className={rootClass}>\n <div className={styles['search-input__wrapper']}>\n {label != null && (\n <label className={styles['search-input__label']} htmlFor={id}>\n {label}\n </label>\n )}\n <div className={styles['search-input__inner']}>\n <span className={styles['search-input__leading-icon']} aria-hidden>\n <Icon size={iconSize} glyph={<MagnifyIcon />} />\n </span>\n <input\n ref={setInputRef}\n id={id}\n type=\"search\"\n className={styles['search-input__input']}\n value={isControlled ? valueProp : undefined}\n defaultValue={isControlled ? undefined : defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n aria-invalid={invalid ? true : undefined}\n {...rest}\n />\n {showClearButton && (\n <span className={styles['search-input__trailing-icon']}>\n <button\n type=\"button\"\n className={styles['search-input__clear-button']}\n onClick={handleClear}\n aria-label=\"Clear search\"\n tabIndex={-1}\n >\n <Icon size={clearIconSize} glyph={<CloseCircleIcon />} />\n </button>\n </span>\n )}\n </div>\n </div>\n </div>\n );\n },\n);\n\nexport default SearchInput;\n"],"names":["ICON_SIZE_MAP","CLEAR_ICON_SIZE_MAP","SearchInput","forwardRef","className","size","label","invalid","onClear","idProp","valueProp","defaultValue","placeholder","onFocus","onBlur","onChange","disabled","onKeyDown","rest","ref","generatedId","useId","id","inputRef","useRef","isControlled","uncontrolledValue","setUncontrolledValue","useState","value","hasValue","isFocused","setIsFocused","labelFloated","handleFocus","useCallback","e","handleBlur","handleChange","setInputRef","node","handleClear","_a","input","handleKeyDown","showClearButton","sizeClass","styles","toKebab","invalidClass","labelFloatedClass","hasLeadingClass","hasTrailingClass","iconSize","clearIconSize","rootClass","jsx","jsxs","Icon","MagnifyIcon","CloseCircleIcon"],"mappings":"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"}
@@ -1 +1 @@
1
- ._searchInput_1wqgu_2{display:flex;flex-direction:column;width:100%}._searchInput__wrapper_1wqgu_7{position:relative;display:flex;flex-direction:column;min-height:0;background-color:var(--center-channel-bg);border-radius:var(--radius-s);box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.16);transition:box-shadow var(--duration-quick) var(--ease-transition)}._searchInput_1wqgu_2:has(._searchInput__input_1wqgu_17:not(:disabled)):hover:not(:focus-within) ._searchInput__wrapper_1wqgu_7{box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.24)}._searchInput_1wqgu_2:has(._searchInput__input_1wqgu_17:focus-visible) ._searchInput__wrapper_1wqgu_7{box-shadow:inset 0 0 0 1px var(--button-bg),0 0 0 1px var(--button-bg)}._searchInput_1wqgu_2:has(._searchInput__input_1wqgu_17:disabled) ._searchInput__wrapper_1wqgu_7{background-color:var(--center-channel-bg);opacity:.56}._searchInput__label_1wqgu_27{position:absolute;left:var(--spacing-xs);top:50%;padding:0 var(--spacing-xxxs);transform:translateY(-50%);margin:0;font-family:Open Sans,sans-serif;font-size:var(--font-size-75);line-height:var(--line-height-25);font-weight:var(--font-weight-regular);color:rgba(var(--center-channel-color-rgb),.64);background-color:var(--center-channel-bg);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 24px);transition:transform var(--duration-quick) var(--ease-transition),font-size var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition),top var(--duration-quick) var(--ease-transition),left var(--duration-quick) var(--ease-transition)}._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px;color:rgba(var(--center-channel-color-rgb),.64)}._searchInput__inner_1wqgu_54{display:flex;align-items:center;flex:1;min-width:0}._searchInput__input_1wqgu_17{flex:1 1 0;min-width:0;margin:0;padding:0;border:0;background:transparent;font-family:Open Sans,sans-serif;font-size:var(--font-size-75);line-height:var(--line-height-25);font-weight:var(--font-weight-regular);color:var(--center-channel-color)}._searchInput__input_1wqgu_17::-webkit-search-decoration,._searchInput__input_1wqgu_17::-webkit-search-cancel-button{-webkit-appearance:none}._searchInput__input_1wqgu_17:focus{outline:none}._searchInput__input_1wqgu_17::placeholder{color:rgba(var(--center-channel-color-rgb),.64)}._searchInput__input_1wqgu_17:disabled{cursor:not-allowed}._searchInput__leadingIcon_1wqgu_85,._searchInput__trailingIcon_1wqgu_85{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64)}._searchInput__leadingIcon_1wqgu_85{margin-right:var(--spacing-xs);pointer-events:none}._searchInput__trailingIcon_1wqgu_85{margin-left:var(--spacing-xs)}._searchInput__clearButton_1wqgu_99{display:inline-flex;align-items:center;justify-content:center;margin:0;padding:0;border:0;background:transparent;cursor:pointer;color:inherit;transition:color var(--duration-quick) var(--ease-transition)}._searchInput__clearButton_1wqgu_99:hover{color:var(--center-channel-color)}._searchInput--size-small_1wqgu_114 ._searchInput__wrapper_1wqgu_7{min-height:32px}._searchInput--size-small_1wqgu_114 ._searchInput__inner_1wqgu_54{padding:var(--spacing-xs) var(--spacing-m)}._searchInput--size-small_1wqgu_114 ._searchInput__input_1wqgu_17{font-size:var(--font-size-75);line-height:var(--line-height-25)}._searchInput--size-small_1wqgu_114._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._searchInput--size-medium_1wqgu_130 ._searchInput__wrapper_1wqgu_7{min-height:40px}._searchInput--size-medium_1wqgu_130 ._searchInput__inner_1wqgu_54{padding:var(--spacing-s) var(--spacing-l)}._searchInput--size-medium_1wqgu_130 ._searchInput__input_1wqgu_17{font-size:var(--font-size-100);line-height:var(--line-height-100)}._searchInput--size-medium_1wqgu_130 ._searchInput__label_1wqgu_27{font-size:var(--font-size-100);left:var(--spacing-m)}._searchInput--size-medium_1wqgu_130._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._searchInput--size-large_1wqgu_150 ._searchInput__wrapper_1wqgu_7{min-height:48px}._searchInput--size-large_1wqgu_150 ._searchInput__inner_1wqgu_54{padding:var(--spacing-m) var(--spacing-l)}._searchInput--size-large_1wqgu_150 ._searchInput__input_1wqgu_17{font-size:var(--font-size-200);line-height:var(--line-height-200)}._searchInput--size-large_1wqgu_150 ._searchInput__label_1wqgu_27{font-size:var(--font-size-200);line-height:var(--line-height-200);left:var(--spacing-m)}._searchInput--size-large_1wqgu_150._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._searchInput--has-leading-icon_1wqgu_171 ._searchInput__label_1wqgu_27{left:var(--spacing-xxxl)}._searchInput--has-leading-icon_1wqgu_171._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27{left:var(--spacing-xs)}._searchInput--has-leading-icon_1wqgu_171._searchInput--size-medium_1wqgu_130 ._searchInput__label_1wqgu_27,._searchInput--has-leading-icon_1wqgu_171._searchInput--size-large_1wqgu_150 ._searchInput__label_1wqgu_27{left:36px}._searchInput--has-leading-icon_1wqgu_171._searchInput--size-medium_1wqgu_130._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27,._searchInput--has-leading-icon_1wqgu_171._searchInput--size-large_1wqgu_150._searchInput--label-floated_1wqgu_47 ._searchInput__label_1wqgu_27{left:var(--spacing-m)}._searchInput_1wqgu_2:has(._searchInput__input_1wqgu_17:focus-visible) ._searchInput__label_1wqgu_27{color:var(--button-bg)}._searchInput_1wqgu_2:has(._searchInput__label_1wqgu_27):not(._searchInput--label-floated_1wqgu_47) ._searchInput__input_1wqgu_17::placeholder{color:transparent}
1
+ ._search-input_1iq6i_2{display:flex;flex-direction:column;width:100%}._search-input__wrapper_1iq6i_7{position:relative;display:flex;flex-direction:column;min-height:0;background-color:var(--center-channel-bg);border-radius:var(--radius-s);box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.16);transition:box-shadow var(--duration-quick) var(--ease-transition)}._search-input_1iq6i_2:has(._search-input__input_1iq6i_17:not(:disabled)):hover:not(:focus-within) ._search-input__wrapper_1iq6i_7{box-shadow:inset 0 0 0 1px rgba(var(--center-channel-color-rgb),.24)}._search-input_1iq6i_2:has(._search-input__input_1iq6i_17:focus-visible) ._search-input__wrapper_1iq6i_7{box-shadow:inset 0 0 0 1px var(--focus-ring-color),0 0 0 1px var(--focus-ring-color)}._search-input_1iq6i_2:has(._search-input__input_1iq6i_17:disabled) ._search-input__wrapper_1iq6i_7{background-color:var(--center-channel-bg);opacity:.56}._search-input__label_1iq6i_27{position:absolute;left:var(--spacing-xs);top:50%;padding:0 var(--spacing-xxxs);transform:translateY(-50%);margin:0;font-family:Open Sans,sans-serif;font-size:var(--font-size-75);line-height:var(--line-height-25);font-weight:var(--font-weight-regular);color:rgba(var(--center-channel-color-rgb),.64);background-color:var(--center-channel-bg);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - 24px);transition:transform var(--duration-quick) var(--ease-transition),font-size var(--duration-quick) var(--ease-transition),color var(--duration-quick) var(--ease-transition),top var(--duration-quick) var(--ease-transition),left var(--duration-quick) var(--ease-transition)}._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px;color:rgba(var(--center-channel-color-rgb),.64)}._search-input__inner_1iq6i_54{display:flex;align-items:center;flex:1;min-width:0}._search-input__input_1iq6i_17{flex:1 1 0;min-width:0;margin:0;padding:0;border:0;background:transparent;font-family:Open Sans,sans-serif;font-size:var(--font-size-75);line-height:var(--line-height-25);font-weight:var(--font-weight-regular);color:var(--center-channel-color)}._search-input__input_1iq6i_17::-webkit-search-decoration,._search-input__input_1iq6i_17::-webkit-search-cancel-button{-webkit-appearance:none}._search-input__input_1iq6i_17:focus{outline:none}._search-input__input_1iq6i_17::placeholder{color:rgba(var(--center-channel-color-rgb),.64)}._search-input__input_1iq6i_17:disabled{cursor:not-allowed}._search-input__leading-icon_1iq6i_85,._search-input__trailing-icon_1iq6i_85{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:rgba(var(--center-channel-color-rgb),.64)}._search-input__leading-icon_1iq6i_85{margin-right:var(--spacing-xs);pointer-events:none}._search-input__trailing-icon_1iq6i_85{margin-left:var(--spacing-xs)}._search-input__clear-button_1iq6i_99{display:inline-flex;align-items:center;justify-content:center;margin:0;padding:0;border:0;background:transparent;cursor:pointer;color:inherit;transition:color var(--duration-quick) var(--ease-transition)}._search-input__clear-button_1iq6i_99:hover{color:var(--center-channel-color)}._search-input--size-small_1iq6i_114 ._search-input__wrapper_1iq6i_7{min-height:32px}._search-input--size-small_1iq6i_114 ._search-input__inner_1iq6i_54{padding:var(--spacing-xs) var(--spacing-m)}._search-input--size-small_1iq6i_114 ._search-input__input_1iq6i_17{font-size:var(--font-size-75);line-height:var(--line-height-25)}._search-input--size-small_1iq6i_114._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._search-input--size-medium_1iq6i_130 ._search-input__wrapper_1iq6i_7{min-height:40px}._search-input--size-medium_1iq6i_130 ._search-input__inner_1iq6i_54{padding:var(--spacing-s) var(--spacing-l)}._search-input--size-medium_1iq6i_130 ._search-input__input_1iq6i_17{font-size:var(--font-size-100);line-height:var(--line-height-100)}._search-input--size-medium_1iq6i_130 ._search-input__label_1iq6i_27{font-size:var(--font-size-100);left:var(--spacing-m)}._search-input--size-medium_1iq6i_130._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._search-input--size-large_1iq6i_150 ._search-input__wrapper_1iq6i_7{min-height:48px}._search-input--size-large_1iq6i_150 ._search-input__inner_1iq6i_54{padding:var(--spacing-m) var(--spacing-l)}._search-input--size-large_1iq6i_150 ._search-input__input_1iq6i_17{font-size:var(--font-size-200);line-height:var(--line-height-200)}._search-input--size-large_1iq6i_150 ._search-input__label_1iq6i_27{font-size:var(--font-size-200);line-height:var(--line-height-200);left:var(--spacing-m)}._search-input--size-large_1iq6i_150._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27{top:0;transform:translateY(-50%);font-size:var(--font-size-25);line-height:14px}._search-input--has-leading-icon_1iq6i_171 ._search-input__label_1iq6i_27{left:var(--spacing-xxxl)}._search-input--has-leading-icon_1iq6i_171._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27{left:var(--spacing-xs)}._search-input--has-leading-icon_1iq6i_171._search-input--size-medium_1iq6i_130 ._search-input__label_1iq6i_27,._search-input--has-leading-icon_1iq6i_171._search-input--size-large_1iq6i_150 ._search-input__label_1iq6i_27{left:36px}._search-input--has-leading-icon_1iq6i_171._search-input--size-medium_1iq6i_130._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27,._search-input--has-leading-icon_1iq6i_171._search-input--size-large_1iq6i_150._search-input--label-floated_1iq6i_47 ._search-input__label_1iq6i_27{left:var(--spacing-m)}._search-input_1iq6i_2:has(._search-input__input_1iq6i_17:focus-visible) ._search-input__label_1iq6i_27{color:var(--button-bg)}._search-input_1iq6i_2:has(._search-input__label_1iq6i_27):not(._search-input--label-floated_1iq6i_47) ._search-input__input_1iq6i_17::placeholder{color:transparent}._search-input--invalid_1iq6i_189 ._search-input__wrapper_1iq6i_7{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger))}._search-input--invalid_1iq6i_189:has(._search-input__input_1iq6i_17:focus-visible) ._search-input__wrapper_1iq6i_7{box-shadow:inset 0 0 0 1px var(--error-text, var(--color-danger)),0 0 0 1px var(--error-text, var(--color-danger))}._search-input--invalid_1iq6i_189 ._search-input__label_1iq6i_27{color:var(--error-text, var(--color-danger))}._search-input--invalid_1iq6i_189:has(._search-input__input_1iq6i_17:focus-visible) ._search-input__label_1iq6i_27{color:var(--error-text, var(--color-danger))}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./SearchInput.module.css');const _="_searchInput_1wqgu_2",e="_searchInput__wrapper_1wqgu_7",n="_searchInput__input_1wqgu_17",a="_searchInput__label_1wqgu_27",t="_searchInput__inner_1wqgu_54",u="_searchInput__leadingIcon_1wqgu_85",r="_searchInput__trailingIcon_1wqgu_85",c="_searchInput__clearButton_1wqgu_99",s={searchInput:_,searchInput__wrapper:e,searchInput__input:n,searchInput__label:a,"searchInput--label-floated":"_searchInput--label-floated_1wqgu_47",searchInput__inner:t,searchInput__leadingIcon:u,searchInput__trailingIcon:r,searchInput__clearButton:c,"searchInput--size-small":"_searchInput--size-small_1wqgu_114","searchInput--size-medium":"_searchInput--size-medium_1wqgu_130","searchInput--size-large":"_searchInput--size-large_1wqgu_150","searchInput--has-leading-icon":"_searchInput--has-leading-icon_1wqgu_171"};exports.default=s;exports.searchInput=_;exports.searchInput__clearButton=c;exports.searchInput__inner=t;exports.searchInput__input=n;exports.searchInput__label=a;exports.searchInput__leadingIcon=u;exports.searchInput__trailingIcon=r;exports.searchInput__wrapper=e;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('./SearchInput.module.css');const i={"search-input":"_search-input_1iq6i_2","search-input__wrapper":"_search-input__wrapper_1iq6i_7","search-input__input":"_search-input__input_1iq6i_17","search-input__label":"_search-input__label_1iq6i_27","search-input--label-floated":"_search-input--label-floated_1iq6i_47","search-input__inner":"_search-input__inner_1iq6i_54","search-input__leading-icon":"_search-input__leading-icon_1iq6i_85","search-input__trailing-icon":"_search-input__trailing-icon_1iq6i_85","search-input__clear-button":"_search-input__clear-button_1iq6i_99","search-input--size-small":"_search-input--size-small_1iq6i_114","search-input--size-medium":"_search-input--size-medium_1iq6i_130","search-input--size-large":"_search-input--size-large_1iq6i_150","search-input--has-leading-icon":"_search-input--has-leading-icon_1iq6i_171","search-input--invalid":"_search-input--invalid_1iq6i_189"};exports.default=i;
2
2
  //# sourceMappingURL=SearchInput.module.scss.cjs.map
@@ -1,27 +1,20 @@
1
- import './SearchInput.module.css';const _ = "_searchInput_1wqgu_2", n = "_searchInput__wrapper_1wqgu_7", e = "_searchInput__input_1wqgu_17", a = "_searchInput__label_1wqgu_27", t = "_searchInput__inner_1wqgu_54", s = "_searchInput__leadingIcon_1wqgu_85", u = "_searchInput__trailingIcon_1wqgu_85", c = "_searchInput__clearButton_1wqgu_99", r = {
2
- searchInput: _,
3
- searchInput__wrapper: n,
4
- searchInput__input: e,
5
- searchInput__label: a,
6
- "searchInput--label-floated": "_searchInput--label-floated_1wqgu_47",
7
- searchInput__inner: t,
8
- searchInput__leadingIcon: s,
9
- searchInput__trailingIcon: u,
10
- searchInput__clearButton: c,
11
- "searchInput--size-small": "_searchInput--size-small_1wqgu_114",
12
- "searchInput--size-medium": "_searchInput--size-medium_1wqgu_130",
13
- "searchInput--size-large": "_searchInput--size-large_1wqgu_150",
14
- "searchInput--has-leading-icon": "_searchInput--has-leading-icon_1wqgu_171"
1
+ import './SearchInput.module.css';const i = {
2
+ "search-input": "_search-input_1iq6i_2",
3
+ "search-input__wrapper": "_search-input__wrapper_1iq6i_7",
4
+ "search-input__input": "_search-input__input_1iq6i_17",
5
+ "search-input__label": "_search-input__label_1iq6i_27",
6
+ "search-input--label-floated": "_search-input--label-floated_1iq6i_47",
7
+ "search-input__inner": "_search-input__inner_1iq6i_54",
8
+ "search-input__leading-icon": "_search-input__leading-icon_1iq6i_85",
9
+ "search-input__trailing-icon": "_search-input__trailing-icon_1iq6i_85",
10
+ "search-input__clear-button": "_search-input__clear-button_1iq6i_99",
11
+ "search-input--size-small": "_search-input--size-small_1iq6i_114",
12
+ "search-input--size-medium": "_search-input--size-medium_1iq6i_130",
13
+ "search-input--size-large": "_search-input--size-large_1iq6i_150",
14
+ "search-input--has-leading-icon": "_search-input--has-leading-icon_1iq6i_171",
15
+ "search-input--invalid": "_search-input--invalid_1iq6i_189"
15
16
  };
16
17
  export {
17
- r as default,
18
- _ as searchInput,
19
- c as searchInput__clearButton,
20
- t as searchInput__inner,
21
- e as searchInput__input,
22
- a as searchInput__label,
23
- s as searchInput__leadingIcon,
24
- u as searchInput__trailingIcon,
25
- n as searchInput__wrapper
18
+ i as default
26
19
  };
27
20
  //# sourceMappingURL=SearchInput.module.scss.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SearchInput.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}