@spear-ai/spectral 1.16.0 → 1.16.2

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 (269) hide show
  1. package/dist/Accordion.d.ts.map +1 -1
  2. package/dist/Accordion.js +1 -1
  3. package/dist/Accordion.js.map +1 -1
  4. package/dist/Alert/AlertBase.d.ts.map +1 -1
  5. package/dist/Alert/AlertBase.js.map +1 -1
  6. package/dist/Alert.js.map +1 -1
  7. package/dist/Avatar.js.map +1 -1
  8. package/dist/Badge.d.ts.map +1 -1
  9. package/dist/Badge.js.map +1 -1
  10. package/dist/Button.d.ts.map +1 -1
  11. package/dist/Button.js +6 -6
  12. package/dist/Button.js.map +1 -1
  13. package/dist/ButtonGroup/ButtonGroupButton.js.map +1 -1
  14. package/dist/ButtonGroup.d.ts.map +1 -1
  15. package/dist/ButtonGroup.js +1 -1
  16. package/dist/ButtonGroup.js.map +1 -1
  17. package/dist/ButtonIcon.js +1 -1
  18. package/dist/ButtonIcon.js.map +1 -1
  19. package/dist/Checkbox/CheckboxBase.js.map +1 -1
  20. package/dist/Checkbox.js.map +1 -1
  21. package/dist/Combobox.js.map +1 -1
  22. package/dist/ControlGroup/ControlGroupSelect.js.map +1 -1
  23. package/dist/ControlGroup.d.ts.map +1 -1
  24. package/dist/ControlGroup.js +1 -1
  25. package/dist/ControlGroup.js.map +1 -1
  26. package/dist/DataCard/Card.d.ts.map +1 -1
  27. package/dist/DataCard/Card.js.map +1 -1
  28. package/dist/DataCard.js.map +1 -1
  29. package/dist/DateTimePicker/Calendar.js.map +1 -1
  30. package/dist/DateTimePicker/DateTimeDisplayInput.js.map +1 -1
  31. package/dist/DateTimePicker/TimePeriodSelect.js.map +1 -1
  32. package/dist/DateTimePicker/TimePicker.js.map +1 -1
  33. package/dist/DateTimePicker.js.map +1 -1
  34. package/dist/Dialog.d.ts.map +1 -1
  35. package/dist/Dialog.js +2 -2
  36. package/dist/Dialog.js.map +1 -1
  37. package/dist/Drawer.d.ts +2 -0
  38. package/dist/Drawer.d.ts.map +1 -1
  39. package/dist/Drawer.js +5 -5
  40. package/dist/Drawer.js.map +1 -1
  41. package/dist/DropdownMenu.js.map +1 -1
  42. package/dist/FormFieldMessage.d.ts.map +1 -1
  43. package/dist/FormFieldMessage.js.map +1 -1
  44. package/dist/HoverCard.d.ts.map +1 -1
  45. package/dist/HoverCard.js.map +1 -1
  46. package/dist/Icons/AdjustmentsIcon.d.ts.map +1 -1
  47. package/dist/Icons/AdjustmentsIcon.js.map +1 -1
  48. package/dist/Icons/AnalyzeIcon.d.ts.map +1 -1
  49. package/dist/Icons/AnalyzeIcon.js.map +1 -1
  50. package/dist/Icons/AnnotationsIcon.d.ts.map +1 -1
  51. package/dist/Icons/AnnotationsIcon.js.map +1 -1
  52. package/dist/Icons/ApprovedIcon.d.ts.map +1 -1
  53. package/dist/Icons/ApprovedIcon.js.map +1 -1
  54. package/dist/Icons/ArrowDownIcon.d.ts.map +1 -1
  55. package/dist/Icons/ArrowDownIcon.js.map +1 -1
  56. package/dist/Icons/ArrowUpIcon.d.ts.map +1 -1
  57. package/dist/Icons/ArrowUpIcon.js.map +1 -1
  58. package/dist/Icons/BoxToolIcon.d.ts.map +1 -1
  59. package/dist/Icons/BoxToolIcon.js.map +1 -1
  60. package/dist/Icons/CalendarIcon.d.ts.map +1 -1
  61. package/dist/Icons/CalendarIcon.js.map +1 -1
  62. package/dist/Icons/CheckCircleIcon.d.ts.map +1 -1
  63. package/dist/Icons/CheckCircleIcon.js.map +1 -1
  64. package/dist/Icons/CheckSquareIcon.d.ts.map +1 -1
  65. package/dist/Icons/CheckSquareIcon.js.map +1 -1
  66. package/dist/Icons/CheckmarkIcon.d.ts.map +1 -1
  67. package/dist/Icons/CheckmarkIcon.js.map +1 -1
  68. package/dist/Icons/ChevronDownIcon.d.ts.map +1 -1
  69. package/dist/Icons/ChevronDownIcon.js.map +1 -1
  70. package/dist/Icons/ChevronUpIcon.d.ts.map +1 -1
  71. package/dist/Icons/ChevronUpIcon.js.map +1 -1
  72. package/dist/Icons/ClockIcon.d.ts.map +1 -1
  73. package/dist/Icons/ClockIcon.js.map +1 -1
  74. package/dist/Icons/CloseCircleIcon.d.ts.map +1 -1
  75. package/dist/Icons/CloseCircleIcon.js.map +1 -1
  76. package/dist/Icons/CloseIcon.d.ts.map +1 -1
  77. package/dist/Icons/CloseIcon.js.map +1 -1
  78. package/dist/Icons/Crosshairs2Icon.d.ts.map +1 -1
  79. package/dist/Icons/Crosshairs2Icon.js.map +1 -1
  80. package/dist/Icons/CrosshairsIcon.d.ts.map +1 -1
  81. package/dist/Icons/CrosshairsIcon.js.map +1 -1
  82. package/dist/Icons/DashboardIcon.d.ts.map +1 -1
  83. package/dist/Icons/DashboardIcon.js.map +1 -1
  84. package/dist/Icons/DatabaseIcon.d.ts.map +1 -1
  85. package/dist/Icons/DatabaseIcon.js.map +1 -1
  86. package/dist/Icons/DeleteIcon.d.ts.map +1 -1
  87. package/dist/Icons/DeleteIcon.js.map +1 -1
  88. package/dist/Icons/DurationIcon.d.ts.map +1 -1
  89. package/dist/Icons/DurationIcon.js.map +1 -1
  90. package/dist/Icons/EditIcon.d.ts.map +1 -1
  91. package/dist/Icons/EditIcon.js.map +1 -1
  92. package/dist/Icons/EmailIcon.d.ts.map +1 -1
  93. package/dist/Icons/EmailIcon.js.map +1 -1
  94. package/dist/Icons/EraserIcon.d.ts.map +1 -1
  95. package/dist/Icons/EraserIcon.js.map +1 -1
  96. package/dist/Icons/ErrorIcon.d.ts.map +1 -1
  97. package/dist/Icons/ErrorIcon.js.map +1 -1
  98. package/dist/Icons/EyeClosedIcon.d.ts.map +1 -1
  99. package/dist/Icons/EyeClosedIcon.js.map +1 -1
  100. package/dist/Icons/EyeClosedIcon2.d.ts.map +1 -1
  101. package/dist/Icons/EyeClosedIcon2.js.map +1 -1
  102. package/dist/Icons/EyeOpenIcon.d.ts.map +1 -1
  103. package/dist/Icons/EyeOpenIcon.js.map +1 -1
  104. package/dist/Icons/FileDownloadIcon.d.ts.map +1 -1
  105. package/dist/Icons/FileDownloadIcon.js.map +1 -1
  106. package/dist/Icons/GoToFirstIcon.d.ts.map +1 -1
  107. package/dist/Icons/GoToFirstIcon.js.map +1 -1
  108. package/dist/Icons/GoToLastIcon.d.ts.map +1 -1
  109. package/dist/Icons/GoToLastIcon.js.map +1 -1
  110. package/dist/Icons/HarmonicCursorsIcon.d.ts.map +1 -1
  111. package/dist/Icons/HarmonicCursorsIcon.js.map +1 -1
  112. package/dist/Icons/InfoIcon.d.ts.map +1 -1
  113. package/dist/Icons/InfoIcon.js.map +1 -1
  114. package/dist/Icons/KeyboardIcon.d.ts.map +1 -1
  115. package/dist/Icons/KeyboardIcon.js.map +1 -1
  116. package/dist/Icons/LabelIcon.d.ts.map +1 -1
  117. package/dist/Icons/LabelIcon.js.map +1 -1
  118. package/dist/Icons/LassoIcon.d.ts.map +1 -1
  119. package/dist/Icons/LassoIcon.js.map +1 -1
  120. package/dist/Icons/LineToolIcon.d.ts.map +1 -1
  121. package/dist/Icons/LineToolIcon.js.map +1 -1
  122. package/dist/Icons/LiveViewIcon.d.ts.map +1 -1
  123. package/dist/Icons/LiveViewIcon.js.map +1 -1
  124. package/dist/Icons/LoaderIcon.d.ts.map +1 -1
  125. package/dist/Icons/LoaderIcon.js.map +1 -1
  126. package/dist/Icons/LocationIcon.d.ts.map +1 -1
  127. package/dist/Icons/LocationIcon.js.map +1 -1
  128. package/dist/Icons/LogoutIcon.d.ts.map +1 -1
  129. package/dist/Icons/LogoutIcon.js.map +1 -1
  130. package/dist/Icons/MaximizeIcon.d.ts.map +1 -1
  131. package/dist/Icons/MaximizeIcon.js.map +1 -1
  132. package/dist/Icons/MeasureIcon.d.ts.map +1 -1
  133. package/dist/Icons/MeasureIcon.js.map +1 -1
  134. package/dist/Icons/MenuDotsIcon.d.ts.map +1 -1
  135. package/dist/Icons/MenuDotsIcon.js.map +1 -1
  136. package/dist/Icons/MenuIcon.d.ts.map +1 -1
  137. package/dist/Icons/MenuIcon.js.map +1 -1
  138. package/dist/Icons/MessagesIcon.d.ts.map +1 -1
  139. package/dist/Icons/MessagesIcon.js.map +1 -1
  140. package/dist/Icons/MetadataIcon.d.ts.map +1 -1
  141. package/dist/Icons/MetadataIcon.js.map +1 -1
  142. package/dist/Icons/MinimizeIcon.d.ts.map +1 -1
  143. package/dist/Icons/MinimizeIcon.js.map +1 -1
  144. package/dist/Icons/MinusIcon.d.ts.map +1 -1
  145. package/dist/Icons/MinusIcon.js.map +1 -1
  146. package/dist/Icons/OntologyIcon.d.ts.map +1 -1
  147. package/dist/Icons/OntologyIcon.js.map +1 -1
  148. package/dist/Icons/PanelIconClose.d.ts.map +1 -1
  149. package/dist/Icons/PanelIconClose.js.map +1 -1
  150. package/dist/Icons/PanelIconOpen.d.ts.map +1 -1
  151. package/dist/Icons/PanelIconOpen.js.map +1 -1
  152. package/dist/Icons/PauseIcon.d.ts.map +1 -1
  153. package/dist/Icons/PauseIcon.js.map +1 -1
  154. package/dist/Icons/PlayIcon.d.ts.map +1 -1
  155. package/dist/Icons/PlayIcon.js.map +1 -1
  156. package/dist/Icons/PlusIcon.d.ts.map +1 -1
  157. package/dist/Icons/PlusIcon.js.map +1 -1
  158. package/dist/Icons/PolygonIcon.d.ts.map +1 -1
  159. package/dist/Icons/PolygonIcon.js.map +1 -1
  160. package/dist/Icons/PrinterIcon.d.ts.map +1 -1
  161. package/dist/Icons/PrinterIcon.js.map +1 -1
  162. package/dist/Icons/ProgressCheckIcon.d.ts.map +1 -1
  163. package/dist/Icons/ProgressCheckIcon.js.map +1 -1
  164. package/dist/Icons/ResetIcon.d.ts.map +1 -1
  165. package/dist/Icons/ResetIcon.js.map +1 -1
  166. package/dist/Icons/ReviewedIcon.d.ts.map +1 -1
  167. package/dist/Icons/ReviewedIcon.js.map +1 -1
  168. package/dist/Icons/ScissorsIcon.d.ts.map +1 -1
  169. package/dist/Icons/ScissorsIcon.js.map +1 -1
  170. package/dist/Icons/SearchIcon.d.ts.map +1 -1
  171. package/dist/Icons/SearchIcon.js.map +1 -1
  172. package/dist/Icons/SettingsIcon.d.ts.map +1 -1
  173. package/dist/Icons/SettingsIcon.js.map +1 -1
  174. package/dist/Icons/SortAscendingIcon.d.ts.map +1 -1
  175. package/dist/Icons/SortAscendingIcon.js.map +1 -1
  176. package/dist/Icons/SortAtoZIcon.d.ts.map +1 -1
  177. package/dist/Icons/SortAtoZIcon.js.map +1 -1
  178. package/dist/Icons/SortDescendingIcon.d.ts.map +1 -1
  179. package/dist/Icons/SortDescendingIcon.js.map +1 -1
  180. package/dist/Icons/SortZtoAIcon.d.ts.map +1 -1
  181. package/dist/Icons/SortZtoAIcon.js.map +1 -1
  182. package/dist/Icons/SparklesIcon.d.ts.map +1 -1
  183. package/dist/Icons/SparklesIcon.js.map +1 -1
  184. package/dist/Icons/StackIcon.d.ts.map +1 -1
  185. package/dist/Icons/StackIcon.js.map +1 -1
  186. package/dist/Icons/StarIcon.d.ts.map +1 -1
  187. package/dist/Icons/StarIcon.js.map +1 -1
  188. package/dist/Icons/SyncIcon.d.ts.map +1 -1
  189. package/dist/Icons/SyncIcon.js.map +1 -1
  190. package/dist/Icons/SyncOffIcon.d.ts.map +1 -1
  191. package/dist/Icons/SyncOffIcon.js.map +1 -1
  192. package/dist/Icons/TrashIcon.d.ts.map +1 -1
  193. package/dist/Icons/TrashIcon.js.map +1 -1
  194. package/dist/Icons/UndoIcon.d.ts.map +1 -1
  195. package/dist/Icons/UndoIcon.js.map +1 -1
  196. package/dist/Icons/UploadIcon.d.ts.map +1 -1
  197. package/dist/Icons/UploadIcon.js.map +1 -1
  198. package/dist/Icons/User2Icon.d.ts.map +1 -1
  199. package/dist/Icons/User2Icon.js.map +1 -1
  200. package/dist/Icons/UserIcon.d.ts.map +1 -1
  201. package/dist/Icons/UserIcon.js.map +1 -1
  202. package/dist/Icons/WarningIcon.d.ts.map +1 -1
  203. package/dist/Icons/WarningIcon.js.map +1 -1
  204. package/dist/Icons/ZoomAllIcon.d.ts.map +1 -1
  205. package/dist/Icons/ZoomAllIcon.js.map +1 -1
  206. package/dist/Icons/ZoomXIcon.d.ts.map +1 -1
  207. package/dist/Icons/ZoomXIcon.js.map +1 -1
  208. package/dist/Icons/ZoomYIcon.d.ts.map +1 -1
  209. package/dist/Icons/ZoomYIcon.js.map +1 -1
  210. package/dist/IconsAnimated/PanelLeftCloseIcon.js.map +1 -1
  211. package/dist/IconsAnimated/PanelLeftOpenIcon.js.map +1 -1
  212. package/dist/Input.js +1 -1
  213. package/dist/Input.js.map +1 -1
  214. package/dist/InputNumeric.d.ts.map +1 -1
  215. package/dist/InputNumeric.js.map +1 -1
  216. package/dist/InputOTP.d.ts.map +1 -1
  217. package/dist/InputOTP.js.map +1 -1
  218. package/dist/Kbd.d.ts.map +1 -1
  219. package/dist/Kbd.js.map +1 -1
  220. package/dist/Label.js.map +1 -1
  221. package/dist/MultiSelect/MultiSelectBase.js.map +1 -1
  222. package/dist/MultiSelect.js.map +1 -1
  223. package/dist/Popover.d.ts.map +1 -1
  224. package/dist/Popover.js.map +1 -1
  225. package/dist/RadioButton.js +4 -1
  226. package/dist/RadioButton.js.map +1 -1
  227. package/dist/RadioButtonGroup/RadioButtonGroupBase.d.ts.map +1 -1
  228. package/dist/RadioButtonGroup/RadioButtonGroupBase.js +7 -2
  229. package/dist/RadioButtonGroup/RadioButtonGroupBase.js.map +1 -1
  230. package/dist/RadioButtonGroup.d.ts.map +1 -1
  231. package/dist/RadioButtonGroup.js.map +1 -1
  232. package/dist/RadioGroup.d.ts.map +1 -1
  233. package/dist/RadioGroup.js +1 -1
  234. package/dist/RadioGroup.js.map +1 -1
  235. package/dist/Select.js.map +1 -1
  236. package/dist/Skeleton.js.map +1 -1
  237. package/dist/Slider.js.map +1 -1
  238. package/dist/Switch/SwitchBase.d.ts.map +1 -1
  239. package/dist/Switch/SwitchBase.js.map +1 -1
  240. package/dist/Switch.js.map +1 -1
  241. package/dist/Tabs/TabsBase.d.ts.map +1 -1
  242. package/dist/Tabs/TabsBase.js.map +1 -1
  243. package/dist/Tabs.d.ts.map +1 -1
  244. package/dist/Tabs.js.map +1 -1
  245. package/dist/Textarea.js.map +1 -1
  246. package/dist/Toast.d.ts.map +1 -1
  247. package/dist/Toast.js.map +1 -1
  248. package/dist/Toggle/ToggleBase.js.map +1 -1
  249. package/dist/Toggle.d.ts.map +1 -1
  250. package/dist/Toggle.js +6 -2
  251. package/dist/Toggle.js.map +1 -1
  252. package/dist/ToggleGroup/ToggleGroupBase.d.ts.map +1 -1
  253. package/dist/ToggleGroup/ToggleGroupBase.js.map +1 -1
  254. package/dist/ToggleGroup/ToggleGroupItem.js +1 -1
  255. package/dist/ToggleGroup/ToggleGroupItem.js.map +1 -1
  256. package/dist/ToggleGroup/ToggleGroupSplitMenuItem.js +1 -1
  257. package/dist/ToggleGroup/ToggleGroupSplitMenuItem.js.map +1 -1
  258. package/dist/ToggleGroup.js +9 -1
  259. package/dist/ToggleGroup.js.map +1 -1
  260. package/dist/Tooltip.d.ts +1 -0
  261. package/dist/Tooltip.d.ts.map +1 -1
  262. package/dist/Tooltip.js +2 -2
  263. package/dist/Tooltip.js.map +1 -1
  264. package/dist/Tray.d.ts.map +1 -1
  265. package/dist/Tray.js +1 -1
  266. package/dist/Tray.js.map +1 -1
  267. package/dist/styles/horizon/utilities.css +0 -8
  268. package/dist/styles/spectral.css +1 -1
  269. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"StarIcon.js","names":[],"sources":["../../src/components/Icons/StarIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconStar = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M12 3L14.781 8.92429L21 9.88013L16.5 14.489L17.562 21L12 17.9243L6.438 21L7.5 14.489L3 9.88013L9.219 8.92429L12 3Z'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const StarIcon = Object.assign(IconStar, { displayName: 'StarIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,oBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YAEJ,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf;EACO;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
1
+ {"version":3,"file":"StarIcon.js","names":[],"sources":["../../src/components/Icons/StarIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconStar = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path d='M12 3L14.781 8.92429L21 9.88013L16.5 14.489L17.562 21L12 17.9243L6.438 21L7.5 14.489L3 9.88013L9.219 8.92429L12 3Z' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const StarIcon = Object.assign(IconStar, { displayName: 'StarIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,oBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAChG,oBAAC,QAAD;GAAM,GAAE;GAAqH,QAAO;GAAe,aAAY;GAAI,eAAc;GAAQ,gBAAe;GAAU;EACzM;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SyncIcon.d.ts","names":[],"sources":["../../src/components/Icons/SyncIcon.tsx"],"mappings":";;;;;cA+Ba,QAAA;EAAQ,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GA5ByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"SyncIcon.d.ts","names":[],"sources":["../../src/components/Icons/SyncIcon.tsx"],"mappings":";;;;;cAYa,QAAA;EAAQ,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GATyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SyncIcon.js","names":[],"sources":["../../src/components/Icons/SyncIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconSync = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M4 11C4.24456 9.24023 5.06093 7.60967 6.32336 6.35951C7.58579 5.10934 9.22424 4.30893 10.9863 4.08156C12.7484 3.8542 14.5364 4.21249 16.0748 5.10126C17.6132 5.99002 18.8168 7.35995 19.5 9.00001M20 5.00001V9.00001H16'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M20 13C19.7554 14.7598 18.9391 16.3903 17.6766 17.6405C16.4142 18.8907 14.7758 19.6911 13.0137 19.9184C11.2516 20.1458 9.46362 19.7875 7.9252 18.8988C6.38678 18.01 5.18325 16.6401 4.5 15M4 19V15H8'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const SyncIcon = Object.assign(IconSync, { displayName: 'SyncIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YANN,CAQE,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,GACF,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,EACO;;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
1
+ {"version":3,"file":"SyncIcon.js","names":[],"sources":["../../src/components/Icons/SyncIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconSync = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path d='M4 11C4.24456 9.24023 5.06093 7.60967 6.32336 6.35951C7.58579 5.10934 9.22424 4.30893 10.9863 4.08156C12.7484 3.8542 14.5364 4.21249 16.0748 5.10126C17.6132 5.99002 18.8168 7.35995 19.5 9.00001M20 5.00001V9.00001H16' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M20 13C19.7554 14.7598 18.9391 16.3903 17.6766 17.6405C16.4142 18.8907 14.7758 19.6911 13.0137 19.9184C11.2516 20.1458 9.46362 19.7875 7.9252 18.8988C6.38678 18.01 5.18325 16.6401 4.5 15M4 19V15H8' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const SyncIcon = Object.assign(IconSync, { displayName: 'SyncIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAAlG,CACE,oBAAC,QAAD;GAAM,GAAE;GAA0N,QAAO;GAAe,aAAY;GAAI,eAAc;GAAQ,gBAAe;GAAU,GACvT,oBAAC,QAAD;GAAM,GAAE;GAAuM,QAAO;GAAe,aAAY;GAAI,eAAc;GAAQ,gBAAe;GAAU,EAC3R;;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SyncOffIcon.d.ts","names":[],"sources":["../../src/components/Icons/SyncOffIcon.tsx"],"mappings":";;;;;cAsCa,WAAA;EAAW,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAnCyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"SyncOffIcon.d.ts","names":[],"sources":["../../src/components/Icons/SyncOffIcon.tsx"],"mappings":";;;;;cAaa,WAAA;EAAW,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAVyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"SyncOffIcon.js","names":[],"sources":["../../src/components/Icons/SyncOffIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconSyncOff = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M3.91919 10.9901C4.16622 9.2125 4.99084 7.56548 6.26602 6.30268C7.54121 5.03989 9.19621 4.23139 10.9761 4.00173C12.756 3.77207 14.562 4.13398 16.116 5.03172C17.6699 5.92947 18.8856 7.31323 19.5758 8.96986M20.0808 4.92946V8.96986H16.0404'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M20.0808 13.0101C19.8338 14.7877 19.0092 16.4347 17.734 17.6975C16.4588 18.9603 14.8038 19.7688 13.0239 19.9984C11.244 20.2281 9.438 19.8662 7.88404 18.9684C6.33008 18.0707 5.11439 16.6869 4.42424 15.0303M3.91919 19.0707V15.0303H7.9596'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M2.90909 2.90909L21.0909 21.0909'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const SyncOffIcon = Object.assign(IconSyncOff, { displayName: 'SyncOffIcon' })\n"],"mappings":";;;;;AAGA,MAAM,eAAe,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC7F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YANN;GAQE,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACO;;;AAIf,MAAa,cAAc,OAAO,OAAO,aAAa,EAAE,aAAa,eAAe,CAAC"}
1
+ {"version":3,"file":"SyncOffIcon.js","names":[],"sources":["../../src/components/Icons/SyncOffIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconSyncOff = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path d='M3.91919 10.9901C4.16622 9.2125 4.99084 7.56548 6.26602 6.30268C7.54121 5.03989 9.19621 4.23139 10.9761 4.00173C12.756 3.77207 14.562 4.13398 16.116 5.03172C17.6699 5.92947 18.8856 7.31323 19.5758 8.96986M20.0808 4.92946V8.96986H16.0404' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M20.0808 13.0101C19.8338 14.7877 19.0092 16.4347 17.734 17.6975C16.4588 18.9603 14.8038 19.7688 13.0239 19.9984C11.244 20.2281 9.438 19.8662 7.88404 18.9684C6.33008 18.0707 5.11439 16.6869 4.42424 15.0303M3.91919 19.0707V15.0303H7.9596' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M2.90909 2.90909L21.0909 21.0909' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const SyncOffIcon = Object.assign(IconSyncOff, { displayName: 'SyncOffIcon' })\n"],"mappings":";;;;;AAGA,MAAM,eAAe,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC7F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAAlG;GACE,oBAAC,QAAD;IAAM,GAAE;IAA+O,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC5U,oBAAC,QAAD;IAAM,GAAE;IAA8O,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC3U,oBAAC,QAAD;IAAM,GAAE;IAAmC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GACvH;;;AAIf,MAAa,cAAc,OAAO,OAAO,aAAa,EAAE,aAAa,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrashIcon.d.ts","names":[],"sources":["../../src/components/Icons/TrashIcon.tsx"],"mappings":";;;;;cAqBa,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAlByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"TrashIcon.d.ts","names":[],"sources":["../../src/components/Icons/TrashIcon.tsx"],"mappings":";;;;;cAca,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAXyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TrashIcon.js","names":[],"sources":["../../src/components/Icons/TrashIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconTrash = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M3 5C2.44772 5 2 5.44772 2 6C2 6.55228 2.44772 7 3 7V5ZM21 7C21.5523 7 22 6.55228 22 6C22 5.44772 21.5523 5 21 5V7ZM11 11C11 10.4477 10.5523 10 10 10C9.44772 10 9 10.4477 9 11H11ZM9 16C9 16.5523 9.44772 17 10 17C10.5523 17 11 16.5523 11 16H9ZM15 11C15 10.4477 14.5523 10 14 10C13.4477 10 13 10.4477 13 11H15ZM13 16C13 16.5523 13.4477 17 14 17C14.5523 17 15 16.5523 15 16H13ZM14.9056 6.24926C15.0432 6.78411 15.5884 7.1061 16.1233 6.96844C16.6581 6.83078 16.9801 6.28559 16.8424 5.75074L14.9056 6.24926ZM4.00221 6.06652L4.87775 19.1996L6.87332 19.0665L5.99779 5.93348L4.00221 6.06652ZM7.87111 22H16.1289V20H7.87111V22ZM19.1222 19.1996L19.9978 6.06652L18.0022 5.93348L17.1267 19.0665L19.1222 19.1996ZM19 5H5V7H19V5ZM3 7H5V5H3V7ZM19 7H21V5H19V7ZM16.1289 22C17.7083 22 19.0172 20.7754 19.1222 19.1996L17.1267 19.0665C17.0917 19.5918 16.6554 20 16.1289 20V22ZM4.87775 19.1996C4.98281 20.7754 6.29171 22 7.87111 22V20C7.34464 20 6.90834 19.5918 6.87332 19.0665L4.87775 19.1996ZM9 11V16H11V11H9ZM13 11V16H15V11H13ZM12 4C13.3965 4 14.5725 4.95512 14.9056 6.24926L16.8424 5.75074C16.2874 3.59442 14.3312 2 12 2V4ZM9.09447 6.24926C9.42756 4.95512 10.6035 4 12 4V2C9.66885 2 7.7126 3.59442 7.1576 5.75074L9.09447 6.24926Z'\n fill='currentColor'\n />\n </IconBase>\n )\n}\n\nexport const TrashIcon = Object.assign(IconTrash, { displayName: 'TrashIcon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,oBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YAEJ,oBAAC,QAAD;GACE,GAAE;GACF,MAAK;GACL;EACO;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
1
+ {"version":3,"file":"TrashIcon.js","names":[],"sources":["../../src/components/Icons/TrashIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconTrash = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path\n d='M3 5C2.44772 5 2 5.44772 2 6C2 6.55228 2.44772 7 3 7V5ZM21 7C21.5523 7 22 6.55228 22 6C22 5.44772 21.5523 5 21 5V7ZM11 11C11 10.4477 10.5523 10 10 10C9.44772 10 9 10.4477 9 11H11ZM9 16C9 16.5523 9.44772 17 10 17C10.5523 17 11 16.5523 11 16H9ZM15 11C15 10.4477 14.5523 10 14 10C13.4477 10 13 10.4477 13 11H15ZM13 16C13 16.5523 13.4477 17 14 17C14.5523 17 15 16.5523 15 16H13ZM14.9056 6.24926C15.0432 6.78411 15.5884 7.1061 16.1233 6.96844C16.6581 6.83078 16.9801 6.28559 16.8424 5.75074L14.9056 6.24926ZM4.00221 6.06652L4.87775 19.1996L6.87332 19.0665L5.99779 5.93348L4.00221 6.06652ZM7.87111 22H16.1289V20H7.87111V22ZM19.1222 19.1996L19.9978 6.06652L18.0022 5.93348L17.1267 19.0665L19.1222 19.1996ZM19 5H5V7H19V5ZM3 7H5V5H3V7ZM19 7H21V5H19V7ZM16.1289 22C17.7083 22 19.0172 20.7754 19.1222 19.1996L17.1267 19.0665C17.0917 19.5918 16.6554 20 16.1289 20V22ZM4.87775 19.1996C4.98281 20.7754 6.29171 22 7.87111 22V20C7.34464 20 6.90834 19.5918 6.87332 19.0665L4.87775 19.1996ZM9 11V16H11V11H9ZM13 11V16H15V11H13ZM12 4C13.3965 4 14.5725 4.95512 14.9056 6.24926L16.8424 5.75074C16.2874 3.59442 14.3312 2 12 2V4ZM9.09447 6.24926C9.42756 4.95512 10.6035 4 12 4V2C9.66885 2 7.7126 3.59442 7.1576 5.75074L9.09447 6.24926Z'\n fill='currentColor'\n />\n </IconBase>\n )\n}\n\nexport const TrashIcon = Object.assign(IconTrash, { displayName: 'TrashIcon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,oBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAChG,oBAAC,QAAD;GACE,GAAE;GACF,MAAK;GACL;EACO;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UndoIcon.d.ts","names":[],"sources":["../../src/components/Icons/UndoIcon.tsx"],"mappings":";;;;;cAwBa,QAAA;EAAQ,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GArByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"UndoIcon.d.ts","names":[],"sources":["../../src/components/Icons/UndoIcon.tsx"],"mappings":";;;;;cAiBa,QAAA;EAAQ,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAdyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"UndoIcon.js","names":[],"sources":["../../src/components/Icons/UndoIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUndo = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M7.8 9.66667L3 14.3333M3 14.3333L7.8 19M3 14.3333H16.2C17.473 14.3333 18.6939 13.8417 19.5941 12.9665C20.4943 12.0913 21 10.9043 21 9.66667C21 8.42899 20.4943 7.242 19.5941 6.36683C18.6939 5.49167 17.473 5 16.2 5H15'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const UndoIcon = Object.assign(IconUndo, { displayName: 'UndoIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,oBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YAEJ,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf;EACO;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
1
+ {"version":3,"file":"UndoIcon.js","names":[],"sources":["../../src/components/Icons/UndoIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUndo = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path\n d='M7.8 9.66667L3 14.3333M3 14.3333L7.8 19M3 14.3333H16.2C17.473 14.3333 18.6939 13.8417 19.5941 12.9665C20.4943 12.0913 21 10.9043 21 9.66667C21 8.42899 20.4943 7.242 19.5941 6.36683C18.6939 5.49167 17.473 5 16.2 5H15'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const UndoIcon = Object.assign(IconUndo, { displayName: 'UndoIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,oBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAChG,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf;EACO;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadIcon.d.ts","names":[],"sources":["../../src/components/Icons/UploadIcon.tsx"],"mappings":";;;;;cAsCa,UAAA;EAAU,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAnCyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"UploadIcon.d.ts","names":[],"sources":["../../src/components/Icons/UploadIcon.tsx"],"mappings":";;;;;cAmBa,UAAA;EAAU,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAhByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"UploadIcon.js","names":[],"sources":["../../src/components/Icons/UploadIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUpload = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M3.11111 16.4444V18.6667C3.11111 19.256 3.34524 19.8213 3.76199 20.238C4.17874 20.6548 4.74397 20.8889 5.33334 20.8889H18.6667C19.256 20.8889 19.8213 20.6548 20.238 20.238C20.6548 19.8213 20.8889 19.256 20.8889 18.6667V16.4444'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M6.44446 8.66667L12 3.11111L17.5556 8.66667'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M12 3.11111V16.4444'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const UploadIcon = Object.assign(IconUpload, { displayName: 'UploadIcon' })\n"],"mappings":";;;;;AAGA,MAAM,cAAc,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC5F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YANN;GAQE,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACO;;;AAIf,MAAa,aAAa,OAAO,OAAO,YAAY,EAAE,aAAa,cAAc,CAAC"}
1
+ {"version":3,"file":"UploadIcon.js","names":[],"sources":["../../src/components/Icons/UploadIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUpload = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path\n d='M3.11111 16.4444V18.6667C3.11111 19.256 3.34524 19.8213 3.76199 20.238C4.17874 20.6548 4.74397 20.8889 5.33334 20.8889H18.6667C19.256 20.8889 19.8213 20.6548 20.238 20.238C20.6548 19.8213 20.8889 19.256 20.8889 18.6667V16.4444'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path d='M6.44446 8.66667L12 3.11111L17.5556 8.66667' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M12 3.11111V16.4444' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const UploadIcon = Object.assign(IconUpload, { displayName: 'UploadIcon' })\n"],"mappings":";;;;;AAGA,MAAM,cAAc,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC5F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAAlG;GACE,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IAAM,GAAE;IAA8C,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC3I,oBAAC,QAAD;IAAM,GAAE;IAAsB,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC1G;;;AAIf,MAAa,aAAa,OAAO,OAAO,YAAY,EAAE,aAAa,cAAc,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"User2Icon.d.ts","names":[],"sources":["../../src/components/Icons/User2Icon.tsx"],"mappings":";;;;;cA4Ba,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAzByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"User2Icon.d.ts","names":[],"sources":["../../src/components/Icons/User2Icon.tsx"],"mappings":";;;;;cAaa,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAVyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"User2Icon.js","names":[],"sources":["../../src/components/Icons/User2Icon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUser2 = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n ref={ref}\n {...rest}\n >\n <path\n stroke='none'\n d='M0 0h24v24H0z'\n fill='none'\n />\n <path d='M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0' />\n <path d='M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2' />\n </IconBase>\n )\n}\n\nexport const User2Icon = Object.assign(IconUser2, { displayName: 'User2Icon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACb,QAAO;EACP,aAAY;EACZ,eAAc;EACd,gBAAe;EACV;EACL,GAAI;YAVN;GAYE,oBAAC,QAAD;IACE,QAAO;IACP,GAAE;IACF,MAAK;IACL;GACF,oBAAC,QAAD,EAAM,GAAE,qCAAsC;GAC9C,oBAAC,QAAD,EAAM,GAAE,6CAA8C;GAC7C;;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
1
+ {"version":3,"file":"User2Icon.js","names":[],"sources":["../../src/components/Icons/User2Icon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUser2 = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' ref={ref} {...rest}>\n <path stroke='none' d='M0 0h24v24H0z' fill='none' />\n <path d='M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0' />\n <path d='M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2' />\n </IconBase>\n )\n}\n\nexport const User2Icon = Object.assign(IconUser2, { displayName: 'User2Icon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAa,QAAO;EAAe,aAAY;EAAI,eAAc;EAAQ,gBAAe;EAAa;EAAK,GAAI;YAArL;GACE,oBAAC,QAAD;IAAM,QAAO;IAAO,GAAE;IAAgB,MAAK;IAAS;GACpD,oBAAC,QAAD,EAAM,GAAE,qCAAsC;GAC9C,oBAAC,QAAD,EAAM,GAAE,6CAA8C;GAC7C;;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserIcon.d.ts","names":[],"sources":["../../src/components/Icons/UserIcon.tsx"],"mappings":";;;;;cAuBa,QAAA;EAAQ,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GApByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"UserIcon.d.ts","names":[],"sources":["../../src/components/Icons/UserIcon.tsx"],"mappings":";;;;;cAgBa,QAAA;EAAQ,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAbyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"UserIcon.js","names":[],"sources":["../../src/components/Icons/UserIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUser = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M6.11594 18.8103C7.44562 17.0943 9.50054 16 12 16C14.4995 16 16.5544 17.0943 17.8841 18.8103M6.11594 18.8103C7.69368 20.1747 9.75046 21 12 21C14.2495 21 16.3063 20.1747 17.8841 18.8103M6.11594 18.8103C4.20753 17.16 3 14.721 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 14.721 19.7925 17.16 17.8841 18.8103M15 10C15 11.6569 13.6569 13 12 13C10.3431 13 9 11.6569 9 10C9 8.34315 10.3431 7 12 7C13.6569 7 15 8.34315 15 10Z'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const UserIcon = Object.assign(IconUser, { displayName: 'UserIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,oBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YAEJ,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,gBAAe;GACf;EACO;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
1
+ {"version":3,"file":"UserIcon.js","names":[],"sources":["../../src/components/Icons/UserIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconUser = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path\n d='M6.11594 18.8103C7.44562 17.0943 9.50054 16 12 16C14.4995 16 16.5544 17.0943 17.8841 18.8103M6.11594 18.8103C7.69368 20.1747 9.75046 21 12 21C14.2495 21 16.3063 20.1747 17.8841 18.8103M6.11594 18.8103C4.20753 17.16 3 14.721 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 14.721 19.7925 17.16 17.8841 18.8103M15 10C15 11.6569 13.6569 13 12 13C10.3431 13 9 11.6569 9 10C9 8.34315 10.3431 7 12 7C13.6569 7 15 8.34315 15 10Z'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const UserIcon = Object.assign(IconUser, { displayName: 'UserIcon' })\n"],"mappings":";;;;;AAGA,MAAM,YAAY,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC1F,QACE,oBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAChG,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,gBAAe;GACf;EACO;;AAIf,MAAa,WAAW,OAAO,OAAO,UAAU,EAAE,aAAa,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"WarningIcon.d.ts","names":[],"sources":["../../src/components/Icons/WarningIcon.tsx"],"mappings":";;;;;cAuBa,WAAA;EAAW,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GApByD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"WarningIcon.d.ts","names":[],"sources":["../../src/components/Icons/WarningIcon.tsx"],"mappings":";;;;;cAgBa,WAAA;EAAW,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAbyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"WarningIcon.js","names":[],"sources":["../../src/components/Icons/WarningIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconWarning = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M12.1125 9.99443V13.0261M12.1125 16.05H12.1226M10.3675 4.90277L3.27825 17.0605C2.49259 18.4079 3.46409 20.1 5.02334 20.1H19.2016C20.7609 20.1 21.7324 18.4079 20.9468 17.0605L13.8575 4.90275C13.078 3.56578 11.147 3.56578 10.3675 4.90277ZM12.3656 16.05C12.3656 16.1899 12.2523 16.3031 12.1125 16.3031C11.9727 16.3031 11.8594 16.1899 11.8594 16.05C11.8594 15.9102 11.9727 15.7969 12.1125 15.7969C12.2523 15.7969 12.3656 15.9102 12.3656 16.05Z'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n />\n </IconBase>\n )\n}\n\nexport const WarningIcon = Object.assign(IconWarning, { displayName: 'WarningIcon' })\n"],"mappings":";;;;;AAGA,MAAM,eAAe,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC7F,QACE,oBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YAEJ,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd;EACO;;AAIf,MAAa,cAAc,OAAO,OAAO,aAAa,EAAE,aAAa,eAAe,CAAC"}
1
+ {"version":3,"file":"WarningIcon.js","names":[],"sources":["../../src/components/Icons/WarningIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconWarning = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path\n d='M12.1125 9.99443V13.0261M12.1125 16.05H12.1226M10.3675 4.90277L3.27825 17.0605C2.49259 18.4079 3.46409 20.1 5.02334 20.1H19.2016C20.7609 20.1 21.7324 18.4079 20.9468 17.0605L13.8575 4.90275C13.078 3.56578 11.147 3.56578 10.3675 4.90277ZM12.3656 16.05C12.3656 16.1899 12.2523 16.3031 12.1125 16.3031C11.9727 16.3031 11.8594 16.1899 11.8594 16.05C11.8594 15.9102 11.9727 15.7969 12.1125 15.7969C12.2523 15.7969 12.3656 15.9102 12.3656 16.05Z'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n />\n </IconBase>\n )\n}\n\nexport const WarningIcon = Object.assign(IconWarning, { displayName: 'WarningIcon' })\n"],"mappings":";;;;;AAGA,MAAM,eAAe,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC7F,QACE,oBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAChG,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd;EACO;;AAIf,MAAa,cAAc,OAAO,OAAO,aAAa,EAAE,aAAa,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZoomAllIcon.d.ts","names":[],"sources":["../../src/components/Icons/ZoomAllIcon.tsx"],"mappings":";;;;;cAyEa,WAAA;EAAW,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAtEyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ZoomAllIcon.d.ts","names":[],"sources":["../../src/components/Icons/ZoomAllIcon.tsx"],"mappings":";;;;;cAkBa,WAAA;EAAW,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAfyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZoomAllIcon.js","names":[],"sources":["../../src/components/Icons/ZoomAllIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconZoomAll = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M16.0909 3.81818H20.1819V7.90909'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M14.0454 9.95454L20.1818 3.81818'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M7.90915 20.1818H3.81824V16.0909'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M3.81824 20.1818L9.9546 14.0455'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M16.0909 20.1818H20.1819V16.0909'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M14.0454 14.0455L20.1818 20.1818'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M7.90915 3.81818H3.81824V7.9090'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M3.81824 3.81818L9.9546 9.95454'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const ZoomAllIcon = Object.assign(IconZoomAll, { displayName: 'ZoomAllIcon' })\n"],"mappings":";;;;;AAGA,MAAM,eAAe,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC7F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YANN;GAQE,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACO;;;AAIf,MAAa,cAAc,OAAO,OAAO,aAAa,EAAE,aAAa,eAAe,CAAC"}
1
+ {"version":3,"file":"ZoomAllIcon.js","names":[],"sources":["../../src/components/Icons/ZoomAllIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconZoomAll = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path d='M16.0909 3.81818H20.1819V7.90909' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M14.0454 9.95454L20.1818 3.81818' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M7.90915 20.1818H3.81824V16.0909' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M3.81824 20.1818L9.9546 14.0455' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M16.0909 20.1818H20.1819V16.0909' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M14.0454 14.0455L20.1818 20.1818' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M7.90915 3.81818H3.81824V7.9090' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M3.81824 3.81818L9.9546 9.95454' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const ZoomAllIcon = Object.assign(IconZoomAll, { displayName: 'ZoomAllIcon' })\n"],"mappings":";;;;;AAGA,MAAM,eAAe,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC7F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAAlG;GACE,oBAAC,QAAD;IAAM,GAAE;IAAmC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAChI,oBAAC,QAAD;IAAM,GAAE;IAAmC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAChI,oBAAC,QAAD;IAAM,GAAE;IAAmC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAChI,oBAAC,QAAD;IAAM,GAAE;IAAkC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC/H,oBAAC,QAAD;IAAM,GAAE;IAAmC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAChI,oBAAC,QAAD;IAAM,GAAE;IAAmC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAChI,oBAAC,QAAD;IAAM,GAAE;IAAkC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC/H,oBAAC,QAAD;IAAM,GAAE;IAAkC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GACtH;;;AAIf,MAAa,cAAc,OAAO,OAAO,aAAa,EAAE,aAAa,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZoomXIcon.d.ts","names":[],"sources":["../../src/components/Icons/ZoomXIcon.tsx"],"mappings":";;;;;cAsCa,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAnCyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ZoomXIcon.d.ts","names":[],"sources":["../../src/components/Icons/ZoomXIcon.tsx"],"mappings":";;;;;cAaa,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAVyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZoomXIcon.js","names":[],"sources":["../../src/components/Icons/ZoomXIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconZoomX = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M6.65278 7.875L2.375 12L6.65278 16.125'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M17.3472 7.875L21.6249 12L17.3472 16.125'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M2.375 12H21.625'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const ZoomXIcon = Object.assign(IconZoomX, { displayName: 'ZoomXIcon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YANN;GAQE,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACO;;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
1
+ {"version":3,"file":"ZoomXIcon.js","names":[],"sources":["../../src/components/Icons/ZoomXIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconZoomX = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path d='M6.65278 7.875L2.375 12L6.65278 16.125' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M17.3472 7.875L21.6249 12L17.3472 16.125' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M2.375 12H21.625' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const ZoomXIcon = Object.assign(IconZoomX, { displayName: 'ZoomXIcon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAAlG;GACE,oBAAC,QAAD;IAAM,GAAE;IAAyC,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GACtI,oBAAC,QAAD;IAAM,GAAE;IAA2C,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GACxI,oBAAC,QAAD;IAAM,GAAE;IAAmB,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GACvG;;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZoomYIcon.d.ts","names":[],"sources":["../../src/components/Icons/ZoomYIcon.tsx"],"mappings":";;;;;cAsCa,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAnCyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"ZoomYIcon.d.ts","names":[],"sources":["../../src/components/Icons/ZoomYIcon.tsx"],"mappings":";;;;;cAaa,SAAA;EAAS,GAAA;EAAA,SAAA;EAAA,KAAA;EAAA,WAAA;EAAA,IAAA;EAAA,GAAA;AAAA,GAVyD,SAAA,KAAS,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ZoomYIcon.js","names":[],"sources":["../../src/components/Icons/ZoomYIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconZoomY = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase\n size={size}\n className={className}\n title={title}\n description={description}\n ref={ref}\n {...rest}\n >\n <path\n d='M7.90906 6.94952L12 2.90912L16.0909 6.94952'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M7.90906 17.0505L12 21.0909L16.0909 17.0505'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n <path\n d='M12 2.90912V21.0909'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </IconBase>\n )\n}\n\nexport const ZoomYIcon = Object.assign(IconZoomY, { displayName: 'ZoomYIcon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,qBAAC,UAAD;EACQ;EACK;EACJ;EACM;EACR;EACL,GAAI;YANN;GAQE,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACF,oBAAC,QAAD;IACE,GAAE;IACF,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf;GACO;;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
1
+ {"version":3,"file":"ZoomYIcon.js","names":[],"sources":["../../src/components/Icons/ZoomYIcon.tsx"],"sourcesContent":["import { IconBase } from './IconBase'\nimport { type IconProps } from './iconTypes'\n\nconst IconZoomY = ({ ref, className, title, description, size = 24, ...rest }: IconProps) => {\n return (\n <IconBase size={size} className={className} title={title} description={description} ref={ref} {...rest}>\n <path d='M7.90906 6.94952L12 2.90912L16.0909 6.94952' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M7.90906 17.0505L12 21.0909L16.0909 17.0505' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n <path d='M12 2.90912V21.0909' stroke='currentColor' strokeWidth='2' strokeLinecap='round' strokeLinejoin='round' />\n </IconBase>\n )\n}\n\nexport const ZoomYIcon = Object.assign(IconZoomY, { displayName: 'ZoomYIcon' })\n"],"mappings":";;;;;AAGA,MAAM,aAAa,EAAE,KAAK,WAAW,OAAO,aAAa,OAAO,IAAI,GAAG,WAAsB;AAC3F,QACE,qBAAC,UAAD;EAAgB;EAAiB;EAAkB;EAAoB;EAAkB;EAAK,GAAI;YAAlG;GACE,oBAAC,QAAD;IAAM,GAAE;IAA8C,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC3I,oBAAC,QAAD;IAAM,GAAE;IAA8C,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC3I,oBAAC,QAAD;IAAM,GAAE;IAAsB,QAAO;IAAe,aAAY;IAAI,eAAc;IAAQ,gBAAe;IAAU;GAC1G;;;AAIf,MAAa,YAAY,OAAO,OAAO,WAAW,EAAE,aAAa,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelLeftCloseIcon.js","names":[],"sources":["../../src/components/IconsAnimated/PanelLeftCloseIcon.tsx"],"sourcesContent":["import { cn } from '@utils/twUtils'\nimport { motion, useAnimation, type Transition, type Variants } from 'motion/react'\nimport { type MouseEvent, useCallback, useImperativeHandle, useRef } from 'react'\nimport { type AnimatedIconProps } from './iconTypes'\n\nconst DEFAULT_TRANSITION: Transition = {\n times: [0, 0.4, 1],\n duration: 0.5,\n}\n\nconst PATH_VARIANTS: Variants = {\n normal: { x: 0 },\n animate: { x: [0, -1.5, 0] },\n}\n\nexport const PanelLeftCloseIcon = ({ onMouseEnter, onMouseLeave, className, size = 28, ref, ...props }: AnimatedIconProps) => {\n const controls = useAnimation()\n const isControlledRef = useRef(false)\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n }\n })\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e)\n } else {\n controls.start('animate')\n }\n },\n [controls, onMouseEnter],\n )\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e)\n } else {\n controls.start('normal')\n }\n },\n [controls, onMouseLeave],\n )\n\n return (\n <div\n className={cn(className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <rect\n height='18'\n rx='2'\n width='18'\n x='3'\n y='3'\n />\n <path d='M9 3v18' />\n <motion.path\n animate={controls}\n d='m16 15-3-3 3-3'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n </div>\n )\n}\n"],"mappings":";;;;;;;AAKA,MAAM,qBAAiC;CACrC,OAAO;EAAC;EAAG;EAAK;EAAE;CAClB,UAAU;CACX;AAED,MAAM,gBAA0B;CAC9B,QAAQ,EAAE,GAAG,GAAG;CAChB,SAAS,EAAE,GAAG;EAAC;EAAG;EAAM;EAAE,EAAE;CAC7B;AAED,MAAa,sBAAsB,EAAE,cAAc,cAAc,WAAW,OAAO,IAAI,KAAK,GAAG,YAA+B;CAC5H,MAAM,WAAW,cAAc;CAC/B,MAAM,kBAAkB,OAAO,MAAM;AAErC,qBAAoB,WAAW;AAC7B,kBAAgB,UAAU;AAC1B,SAAO;GACL,sBAAsB,SAAS,MAAM,UAAU;GAC/C,qBAAqB,SAAS,MAAM,SAAS;GAC9C;GACD;CAEF,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,UAAU;IAG7B,CAAC,UAAU,aAAa,CACzB;CAED,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,SAAS;IAG5B,CAAC,UAAU,aAAa,CACzB;AAED,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,UAAU;EACxB,cAAc;EACd,cAAc;EACd,GAAI;YAEJ,qBAAC,OAAD;GACE,MAAK;GACL,QAAQ;GACR,QAAO;GACP,eAAc;GACd,gBAAe;GACf,aAAY;GACZ,SAAQ;GACR,OAAO;GACP,OAAM;aATR;IAWE,oBAAC,QAAD;KACE,QAAO;KACP,IAAG;KACH,OAAM;KACN,GAAE;KACF,GAAE;KACF;IACF,oBAAC,QAAD,EAAM,GAAE,WAAY;IACpB,oBAAC,OAAO,MAAR;KACE,SAAS;KACT,GAAE;KACF,YAAY;KACZ,UAAU;KACV;IACE;;EACF"}
1
+ {"version":3,"file":"PanelLeftCloseIcon.js","names":[],"sources":["../../src/components/IconsAnimated/PanelLeftCloseIcon.tsx"],"sourcesContent":["import { cn } from '@utils/twUtils'\nimport { motion, useAnimation, type Transition, type Variants } from 'motion/react'\nimport { type MouseEvent, useCallback, useImperativeHandle, useRef } from 'react'\nimport { type AnimatedIconProps } from './iconTypes'\n\nconst DEFAULT_TRANSITION: Transition = {\n times: [0, 0.4, 1],\n duration: 0.5,\n}\n\nconst PATH_VARIANTS: Variants = {\n normal: { x: 0 },\n animate: { x: [0, -1.5, 0] },\n}\n\nexport const PanelLeftCloseIcon = ({ onMouseEnter, onMouseLeave, className, size = 28, ref, ...props }: AnimatedIconProps) => {\n const controls = useAnimation()\n const isControlledRef = useRef(false)\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n }\n })\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e)\n } else {\n controls.start('animate')\n }\n },\n [controls, onMouseEnter],\n )\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e)\n } else {\n controls.start('normal')\n }\n },\n [controls, onMouseLeave],\n )\n\n return (\n <div className={cn(className)} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} {...props}>\n <svg fill='none' height={size} stroke='currentColor' strokeLinecap='round' strokeLinejoin='round' strokeWidth='2' viewBox='0 0 24 24' width={size} xmlns='http://www.w3.org/2000/svg'>\n <rect height='18' rx='2' width='18' x='3' y='3' />\n <path d='M9 3v18' />\n <motion.path animate={controls} d='m16 15-3-3 3-3' transition={DEFAULT_TRANSITION} variants={PATH_VARIANTS} />\n </svg>\n </div>\n )\n}\n"],"mappings":";;;;;;;AAKA,MAAM,qBAAiC;CACrC,OAAO;EAAC;EAAG;EAAK;EAAE;CAClB,UAAU;CACX;AAED,MAAM,gBAA0B;CAC9B,QAAQ,EAAE,GAAG,GAAG;CAChB,SAAS,EAAE,GAAG;EAAC;EAAG;EAAM;EAAE,EAAE;CAC7B;AAED,MAAa,sBAAsB,EAAE,cAAc,cAAc,WAAW,OAAO,IAAI,KAAK,GAAG,YAA+B;CAC5H,MAAM,WAAW,cAAc;CAC/B,MAAM,kBAAkB,OAAO,MAAM;AAErC,qBAAoB,WAAW;AAC7B,kBAAgB,UAAU;AAC1B,SAAO;GACL,sBAAsB,SAAS,MAAM,UAAU;GAC/C,qBAAqB,SAAS,MAAM,SAAS;GAC9C;GACD;CAEF,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,UAAU;IAG7B,CAAC,UAAU,aAAa,CACzB;CAED,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,SAAS;IAG5B,CAAC,UAAU,aAAa,CACzB;AAED,QACE,oBAAC,OAAD;EAAK,WAAW,GAAG,UAAU;EAAE,cAAc;EAAkB,cAAc;EAAkB,GAAI;YACjG,qBAAC,OAAD;GAAK,MAAK;GAAO,QAAQ;GAAM,QAAO;GAAe,eAAc;GAAQ,gBAAe;GAAQ,aAAY;GAAI,SAAQ;GAAY,OAAO;GAAM,OAAM;aAAzJ;IACE,oBAAC,QAAD;KAAM,QAAO;KAAK,IAAG;KAAI,OAAM;KAAK,GAAE;KAAI,GAAE;KAAM;IAClD,oBAAC,QAAD,EAAM,GAAE,WAAY;IACpB,oBAAC,OAAO,MAAR;KAAa,SAAS;KAAU,GAAE;KAAiB,YAAY;KAAoB,UAAU;KAAiB;IAC1G;;EACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"PanelLeftOpenIcon.js","names":[],"sources":["../../src/components/IconsAnimated/PanelLeftOpenIcon.tsx"],"sourcesContent":["import { cn } from '@utils/twUtils'\nimport { motion, useAnimation, type Transition, type Variants } from 'motion/react'\nimport { type MouseEvent, useCallback, useImperativeHandle, useRef } from 'react'\nimport { type AnimatedIconProps } from './iconTypes'\n\nconst DEFAULT_TRANSITION: Transition = {\n times: [0, 0.4, 1],\n duration: 0.5,\n}\n\nconst PATH_VARIANTS: Variants = {\n normal: { x: 0 },\n animate: { x: [0, 1.5, 0] },\n}\n\nexport const PanelLeftOpenIcon = ({ onMouseEnter, onMouseLeave, className, size = 28, ref, ...props }: AnimatedIconProps) => {\n const controls = useAnimation()\n const isControlledRef = useRef(false)\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n }\n })\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e)\n } else {\n controls.start('animate')\n }\n },\n [controls, onMouseEnter],\n )\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e)\n } else {\n controls.start('normal')\n }\n },\n [controls, onMouseLeave],\n )\n\n return (\n <div\n className={cn(className)}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n {...props}\n >\n <svg\n fill='none'\n height={size}\n stroke='currentColor'\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth='2'\n viewBox='0 0 24 24'\n width={size}\n xmlns='http://www.w3.org/2000/svg'\n >\n <rect\n height='18'\n rx='2'\n width='18'\n x='3'\n y='3'\n />\n <path d='M9 3v18' />\n <motion.path\n animate={controls}\n d='m14 9 3 3-3 3'\n transition={DEFAULT_TRANSITION}\n variants={PATH_VARIANTS}\n />\n </svg>\n </div>\n )\n}\n"],"mappings":";;;;;;;AAKA,MAAM,qBAAiC;CACrC,OAAO;EAAC;EAAG;EAAK;EAAE;CAClB,UAAU;CACX;AAED,MAAM,gBAA0B;CAC9B,QAAQ,EAAE,GAAG,GAAG;CAChB,SAAS,EAAE,GAAG;EAAC;EAAG;EAAK;EAAE,EAAE;CAC5B;AAED,MAAa,qBAAqB,EAAE,cAAc,cAAc,WAAW,OAAO,IAAI,KAAK,GAAG,YAA+B;CAC3H,MAAM,WAAW,cAAc;CAC/B,MAAM,kBAAkB,OAAO,MAAM;AAErC,qBAAoB,WAAW;AAC7B,kBAAgB,UAAU;AAC1B,SAAO;GACL,sBAAsB,SAAS,MAAM,UAAU;GAC/C,qBAAqB,SAAS,MAAM,SAAS;GAC9C;GACD;CAEF,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,UAAU;IAG7B,CAAC,UAAU,aAAa,CACzB;CAED,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,SAAS;IAG5B,CAAC,UAAU,aAAa,CACzB;AAED,QACE,oBAAC,OAAD;EACE,WAAW,GAAG,UAAU;EACxB,cAAc;EACd,cAAc;EACd,GAAI;YAEJ,qBAAC,OAAD;GACE,MAAK;GACL,QAAQ;GACR,QAAO;GACP,eAAc;GACd,gBAAe;GACf,aAAY;GACZ,SAAQ;GACR,OAAO;GACP,OAAM;aATR;IAWE,oBAAC,QAAD;KACE,QAAO;KACP,IAAG;KACH,OAAM;KACN,GAAE;KACF,GAAE;KACF;IACF,oBAAC,QAAD,EAAM,GAAE,WAAY;IACpB,oBAAC,OAAO,MAAR;KACE,SAAS;KACT,GAAE;KACF,YAAY;KACZ,UAAU;KACV;IACE;;EACF"}
1
+ {"version":3,"file":"PanelLeftOpenIcon.js","names":[],"sources":["../../src/components/IconsAnimated/PanelLeftOpenIcon.tsx"],"sourcesContent":["import { cn } from '@utils/twUtils'\nimport { motion, useAnimation, type Transition, type Variants } from 'motion/react'\nimport { type MouseEvent, useCallback, useImperativeHandle, useRef } from 'react'\nimport { type AnimatedIconProps } from './iconTypes'\n\nconst DEFAULT_TRANSITION: Transition = {\n times: [0, 0.4, 1],\n duration: 0.5,\n}\n\nconst PATH_VARIANTS: Variants = {\n normal: { x: 0 },\n animate: { x: [0, 1.5, 0] },\n}\n\nexport const PanelLeftOpenIcon = ({ onMouseEnter, onMouseLeave, className, size = 28, ref, ...props }: AnimatedIconProps) => {\n const controls = useAnimation()\n const isControlledRef = useRef(false)\n\n useImperativeHandle(ref, () => {\n isControlledRef.current = true\n return {\n startAnimation: () => controls.start('animate'),\n stopAnimation: () => controls.start('normal'),\n }\n })\n\n const handleMouseEnter = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseEnter?.(e)\n } else {\n controls.start('animate')\n }\n },\n [controls, onMouseEnter],\n )\n\n const handleMouseLeave = useCallback(\n (e: MouseEvent<HTMLDivElement>) => {\n if (isControlledRef.current) {\n onMouseLeave?.(e)\n } else {\n controls.start('normal')\n }\n },\n [controls, onMouseLeave],\n )\n\n return (\n <div className={cn(className)} onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} {...props}>\n <svg fill='none' height={size} stroke='currentColor' strokeLinecap='round' strokeLinejoin='round' strokeWidth='2' viewBox='0 0 24 24' width={size} xmlns='http://www.w3.org/2000/svg'>\n <rect height='18' rx='2' width='18' x='3' y='3' />\n <path d='M9 3v18' />\n <motion.path animate={controls} d='m14 9 3 3-3 3' transition={DEFAULT_TRANSITION} variants={PATH_VARIANTS} />\n </svg>\n </div>\n )\n}\n"],"mappings":";;;;;;;AAKA,MAAM,qBAAiC;CACrC,OAAO;EAAC;EAAG;EAAK;EAAE;CAClB,UAAU;CACX;AAED,MAAM,gBAA0B;CAC9B,QAAQ,EAAE,GAAG,GAAG;CAChB,SAAS,EAAE,GAAG;EAAC;EAAG;EAAK;EAAE,EAAE;CAC5B;AAED,MAAa,qBAAqB,EAAE,cAAc,cAAc,WAAW,OAAO,IAAI,KAAK,GAAG,YAA+B;CAC3H,MAAM,WAAW,cAAc;CAC/B,MAAM,kBAAkB,OAAO,MAAM;AAErC,qBAAoB,WAAW;AAC7B,kBAAgB,UAAU;AAC1B,SAAO;GACL,sBAAsB,SAAS,MAAM,UAAU;GAC/C,qBAAqB,SAAS,MAAM,SAAS;GAC9C;GACD;CAEF,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,UAAU;IAG7B,CAAC,UAAU,aAAa,CACzB;CAED,MAAM,mBAAmB,aACtB,MAAkC;AACjC,MAAI,gBAAgB,QAClB,gBAAe,EAAE;MAEjB,UAAS,MAAM,SAAS;IAG5B,CAAC,UAAU,aAAa,CACzB;AAED,QACE,oBAAC,OAAD;EAAK,WAAW,GAAG,UAAU;EAAE,cAAc;EAAkB,cAAc;EAAkB,GAAI;YACjG,qBAAC,OAAD;GAAK,MAAK;GAAO,QAAQ;GAAM,QAAO;GAAe,eAAc;GAAQ,gBAAe;GAAQ,aAAY;GAAI,SAAQ;GAAY,OAAO;GAAM,OAAM;aAAzJ;IACE,oBAAC,QAAD;KAAM,QAAO;KAAK,IAAG;KAAI,OAAM;KAAK,GAAE;KAAI,GAAE;KAAM;IAClD,oBAAC,QAAD,EAAM,GAAE,WAAY;IACpB,oBAAC,OAAO,MAAR;KAAa,SAAS;KAAU,GAAE;KAAgB,YAAY;KAAoB,UAAU;KAAiB;IACzG;;EACF"}
package/dist/Input.js CHANGED
@@ -135,7 +135,7 @@ const Input = (allProps) => {
135
135
  const inputClasses = cn(getInputClasses(state, className), "[text-indent:var(--prefix-width)]", showClearButtonNow && "pr-10", usesTabularNumbers && "tabular-nums");
136
136
  const prefixClasses = cn("inset-y-0 left-4 text-base pointer-events-none absolute flex items-center text-input-text-prefix opacity-100 peer-disabled:opacity-50");
137
137
  return /* @__PURE__ */ jsxs("div", {
138
- className: "gap-1.5 flex w-full flex-col",
138
+ className: "flex w-full flex-col gap-1.5",
139
139
  "data-testid": "spectral-input-container",
140
140
  children: [label && /* @__PURE__ */ jsx(Label, {
141
141
  className: cn("mb-2 block", labelClassName, isDisabled && "cursor-not-allowed text-input-text--disabled placeholder:text-input-text-placeholder"),
package/dist/Input.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","names":[],"sources":["../src/components/Input/Input.tsx"],"sourcesContent":["import { CheckCircleIcon, CloseCircleIcon, ErrorIcon, EyeClosedIcon, EyeOpenIcon, LoaderIcon, WarningIcon } from '@components/Icons'\nimport { Label } from '@components/Label/Label'\nimport { useUncontrolledState } from '@hooks/useUncontrolledState'\nimport { ErrorMessage, WarningMessage, getAriaProps, getFormFieldCSSProperties, getInputClasses, useFormFieldId, useFormFieldState, type BaseFormFieldProps } from '@utils/formFieldUtils'\nimport { cn } from '@utils/twUtils'\nimport { useCallback, useRef, type ChangeEvent, type CSSProperties, type FocusEvent, type InputHTMLAttributes, type ReactElement, type Ref } from 'react'\nimport { useClearOnFocus, usePasswordVisibility, usePrefixWidth } from './InputUtils'\n\nexport type InputType = 'text' | 'email' | 'url' | 'tel' | 'password' | 'number' | 'date' | 'datetime-local'\n\nexport type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'onChange'> &\n BaseFormFieldProps & {\n className?: string\n clearOnFocus?: boolean\n endIcon?: ReactElement\n labelClassName?: string\n onBlur?: (e: FocusEvent<HTMLInputElement>) => void\n onChange?: (value: string) => void\n onFocus?: (e: FocusEvent<HTMLInputElement>) => void\n placeholder?: string\n prefix?: string\n showClearButton?: boolean\n showStateIcon?: boolean\n startIcon?: ReactElement\n suppressHydrationWarning?: boolean\n type?: InputType\n value?: string\n warningMessage?: BaseFormFieldProps['errorMessage']\n }\n\nconst mergeRefs = <T,>(...refs: (Ref<T> | undefined)[]): Ref<T> => {\n return (value: T | null) => {\n refs.forEach((ref) => {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(value)\n } else {\n ;(ref as { current: T | null }).current = value\n }\n })\n }\n}\n\nconst getAutoCompleteValue = (type: InputType): string => {\n const autoCompleteMap: Record<InputType, string> = {\n date: 'off',\n email: 'email',\n number: 'off',\n password: 'current-password',\n tel: 'tel',\n text: 'off',\n url: 'url',\n 'datetime-local': 'off',\n }\n return autoCompleteMap[type] || 'off'\n}\n\nexport const Input = (\n allProps: InputProps & {\n ref?: Ref<HTMLInputElement>\n },\n): ReactElement => {\n const {\n className,\n clearOnFocus = false,\n defaultValue,\n disabled,\n endIcon,\n errorMessage,\n id,\n label,\n labelClassName,\n messageReserveLines = 1,\n messageReserveSpace = false,\n name,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n prefix,\n ref,\n required,\n showClearButton = false,\n showStateIcon = true,\n startIcon,\n state = 'default',\n suppressHydrationWarning = true,\n type = 'text',\n value: valueProp,\n warningMessage,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...props\n } = allProps\n const inputId = useFormFieldId(id, name)\n const errorMessageId = `${inputId}-error`\n const warningMessageId = `${inputId}-warning`\n const { isDisabled, isLoading, isInvalid } = useFormFieldState(disabled, state)\n const messageId = state === 'error' ? errorMessageId : state === 'warning' && warningMessage ? warningMessageId : undefined\n const ariaProps = getAriaProps(state, ariaDescribedBy, required, messageId)\n const normalizedDefaultValue = typeof defaultValue === 'string' ? defaultValue : defaultValue !== undefined && defaultValue !== null ? String(defaultValue) : ''\n const [value, setValue] = useUncontrolledState<string>({\n value: valueProp,\n defaultValue: normalizedDefaultValue,\n onChange,\n })\n\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = mergeRefs(ref, internalRef)\n\n const { isVisible, toggleVisibility, inputType } = usePasswordVisibility()\n const { prefixWidth, prefixRef } = usePrefixWidth(prefix)\n const { handleFocus: clearOnFocusHandler } = useClearOnFocus(clearOnFocus, (e: ChangeEvent<HTMLInputElement>) => setValue(e.target.value))\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>): void => {\n onBlur?.(e)\n },\n [onBlur],\n )\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLInputElement>): void => {\n clearOnFocusHandler(e, onFocus)\n },\n [clearOnFocusHandler, onFocus],\n )\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>): void => {\n const newValue = e.target.value\n setValue(newValue)\n },\n [setValue],\n )\n\n const handleClear = useCallback((): void => {\n const element = internalRef.current\n if (element) {\n setValue('')\n element.focus()\n }\n }, [setValue])\n\n const showClearButtonNow = showClearButton && value.length > 0\n\n const getEndIcon = (): ReactElement | null => {\n const iconClasses = 'absolute right-4 top-1/2 -translate-y-1/2 text-input-icon hover:text-input-icon--hover focus:outline-none cursor-pointer'\n\n const iconComponents = {\n password: () => (\n <button\n aria-controls={inputId}\n aria-label={isVisible ? `Hide ${label ?? 'password'}` : `Show ${label ?? 'password'}`}\n aria-pressed={isVisible}\n className={iconClasses}\n data-testid='spectral-input-password-toggle'\n onClick={toggleVisibility}\n type='button'\n >\n {isVisible ? <EyeClosedIcon size={22} /> : <EyeOpenIcon size={22} />}\n </button>\n ),\n clear: () => (\n <button\n aria-label={String(`Clear ${label ?? 'input'}`)}\n className={iconClasses}\n data-testid='spectral-input-clear-button'\n onClick={handleClear}\n type='button'\n >\n <CloseCircleIcon size={24} />\n </button>\n ),\n loading: () => (\n <div\n className='right-4 text-input-icon absolute top-1/2 -translate-y-1/2'\n data-testid='spectral-input-loading-icon'\n >\n <LoaderIcon size={24} />\n </div>\n ),\n error: () => (\n <div\n className='right-4 absolute top-1/2 -translate-y-1/2 text-danger-400'\n data-testid='spectral-input-error-icon'\n >\n <ErrorIcon size={24} />\n </div>\n ),\n success: () => (\n <div\n className='right-4 absolute top-1/2 -translate-y-1/2 text-success-400'\n data-testid='spectral-input-success-icon'\n >\n <CheckCircleIcon size={24} />\n </div>\n ),\n warning: () => (\n <div\n className='right-4 absolute top-1/2 -translate-y-1/2 text-warning-400'\n data-testid='spectral-input-warning-icon'\n >\n <WarningIcon size={24} />\n </div>\n ),\n }\n\n if (endIcon) return <div className='right-4 text-input-icon absolute top-1/2 -translate-y-1/2'>{endIcon}</div>\n if (type === 'password') return iconComponents.password()\n if (showClearButtonNow) return iconComponents.clear()\n if (isLoading) return iconComponents.loading()\n if (!showStateIcon && (state === 'success' || state === 'warning' || state === 'error')) return null\n if (state === 'success') return iconComponents.success()\n if (state === 'warning') return iconComponents.warning()\n if (state === 'error') return iconComponents.error()\n\n return null\n }\n\n const getStartIcon = (): ReactElement | null => {\n if (startIcon) return startIcon\n return null\n }\n\n const usesTabularNumbers = type === 'number' || type === 'date' || type === 'datetime-local'\n const inputClasses = cn(getInputClasses(state, className), '[text-indent:var(--prefix-width)]', showClearButtonNow && 'pr-10', usesTabularNumbers && 'tabular-nums')\n\n const prefixClasses = cn('inset-y-0 left-4 text-base pointer-events-none absolute flex items-center text-input-text-prefix opacity-100 peer-disabled:opacity-50')\n\n return (\n <div\n className='gap-1.5 flex w-full flex-col'\n data-testid='spectral-input-container'\n >\n {label && (\n <Label\n className={cn('mb-2 block', labelClassName, isDisabled && 'cursor-not-allowed text-input-text--disabled placeholder:text-input-text-placeholder')}\n data-testid='spectral-input-label'\n htmlFor={inputId}\n >\n {label}\n </Label>\n )}\n <div\n className='relative'\n data-testid='spectral-input-wrapper'\n >\n <div className='relative'>\n {getStartIcon()}\n {prefix && (\n <span\n ref={prefixRef}\n className={prefixClasses}\n >\n {prefix}\n </span>\n )}\n <input\n aria-label={ariaLabel ?? label}\n autoComplete={getAutoCompleteValue(type)}\n className={inputClasses}\n data-state={state}\n data-testid='spectral-input'\n disabled={isDisabled}\n id={inputId}\n name={name}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n placeholder={placeholder ?? label}\n ref={inputRef}\n required={required}\n style={\n getFormFieldCSSProperties({\n '--prefix-width': prefix ? `${prefixWidth}px` : '0',\n }) as CSSProperties\n }\n suppressHydrationWarning={suppressHydrationWarning}\n type={type === 'password' ? inputType : type}\n value={value}\n {...ariaProps}\n {...props}\n />\n {getEndIcon()}\n </div>\n\n <ErrorMessage\n dataTestId='spectral-input-error-message'\n id={errorMessageId}\n message={isInvalid ? (errorMessage ?? null) : null}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace && state === 'error'}\n />\n <WarningMessage\n dataTestId='spectral-input-warning-message'\n id={warningMessageId}\n message={state === 'warning' ? (warningMessage ?? null) : null}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace && state === 'warning'}\n />\n </div>\n </div>\n )\n}\nInput.displayName = 'Input'\n"],"mappings":"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"}
1
+ {"version":3,"file":"Input.js","names":[],"sources":["../src/components/Input/Input.tsx"],"sourcesContent":["import { CheckCircleIcon, CloseCircleIcon, ErrorIcon, EyeClosedIcon, EyeOpenIcon, LoaderIcon, WarningIcon } from '@components/Icons'\nimport { Label } from '@components/Label/Label'\nimport { useUncontrolledState } from '@hooks/useUncontrolledState'\nimport { ErrorMessage, WarningMessage, getAriaProps, getFormFieldCSSProperties, getInputClasses, useFormFieldId, useFormFieldState, type BaseFormFieldProps } from '@utils/formFieldUtils'\nimport { cn } from '@utils/twUtils'\nimport { useCallback, useRef, type ChangeEvent, type CSSProperties, type FocusEvent, type InputHTMLAttributes, type ReactElement, type Ref } from 'react'\nimport { useClearOnFocus, usePasswordVisibility, usePrefixWidth } from './InputUtils'\n\nexport type InputType = 'text' | 'email' | 'url' | 'tel' | 'password' | 'number' | 'date' | 'datetime-local'\n\nexport type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'id' | 'onChange'> &\n BaseFormFieldProps & {\n className?: string\n clearOnFocus?: boolean\n endIcon?: ReactElement\n labelClassName?: string\n onBlur?: (e: FocusEvent<HTMLInputElement>) => void\n onChange?: (value: string) => void\n onFocus?: (e: FocusEvent<HTMLInputElement>) => void\n placeholder?: string\n prefix?: string\n showClearButton?: boolean\n showStateIcon?: boolean\n startIcon?: ReactElement\n suppressHydrationWarning?: boolean\n type?: InputType\n value?: string\n warningMessage?: BaseFormFieldProps['errorMessage']\n }\n\nconst mergeRefs = <T,>(...refs: (Ref<T> | undefined)[]): Ref<T> => {\n return (value: T | null) => {\n refs.forEach((ref) => {\n if (!ref) return\n if (typeof ref === 'function') {\n ref(value)\n } else {\n ;(ref as { current: T | null }).current = value\n }\n })\n }\n}\n\nconst getAutoCompleteValue = (type: InputType): string => {\n const autoCompleteMap: Record<InputType, string> = {\n date: 'off',\n email: 'email',\n number: 'off',\n password: 'current-password',\n tel: 'tel',\n text: 'off',\n url: 'url',\n 'datetime-local': 'off',\n }\n return autoCompleteMap[type] || 'off'\n}\n\nexport const Input = (\n allProps: InputProps & {\n ref?: Ref<HTMLInputElement>\n },\n): ReactElement => {\n const {\n className,\n clearOnFocus = false,\n defaultValue,\n disabled,\n endIcon,\n errorMessage,\n id,\n label,\n labelClassName,\n messageReserveLines = 1,\n messageReserveSpace = false,\n name,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n prefix,\n ref,\n required,\n showClearButton = false,\n showStateIcon = true,\n startIcon,\n state = 'default',\n suppressHydrationWarning = true,\n type = 'text',\n value: valueProp,\n warningMessage,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedBy,\n ...props\n } = allProps\n const inputId = useFormFieldId(id, name)\n const errorMessageId = `${inputId}-error`\n const warningMessageId = `${inputId}-warning`\n const { isDisabled, isLoading, isInvalid } = useFormFieldState(disabled, state)\n const messageId = state === 'error' ? errorMessageId : state === 'warning' && warningMessage ? warningMessageId : undefined\n const ariaProps = getAriaProps(state, ariaDescribedBy, required, messageId)\n const normalizedDefaultValue = typeof defaultValue === 'string' ? defaultValue : defaultValue !== undefined && defaultValue !== null ? String(defaultValue) : ''\n const [value, setValue] = useUncontrolledState<string>({\n value: valueProp,\n defaultValue: normalizedDefaultValue,\n onChange,\n })\n\n const internalRef = useRef<HTMLInputElement>(null)\n const inputRef = mergeRefs(ref, internalRef)\n\n const { isVisible, toggleVisibility, inputType } = usePasswordVisibility()\n const { prefixWidth, prefixRef } = usePrefixWidth(prefix)\n const { handleFocus: clearOnFocusHandler } = useClearOnFocus(clearOnFocus, (e: ChangeEvent<HTMLInputElement>) => setValue(e.target.value))\n\n const handleBlur = useCallback(\n (e: FocusEvent<HTMLInputElement>): void => {\n onBlur?.(e)\n },\n [onBlur],\n )\n\n const handleFocus = useCallback(\n (e: FocusEvent<HTMLInputElement>): void => {\n clearOnFocusHandler(e, onFocus)\n },\n [clearOnFocusHandler, onFocus],\n )\n\n const handleChange = useCallback(\n (e: ChangeEvent<HTMLInputElement>): void => {\n const newValue = e.target.value\n setValue(newValue)\n },\n [setValue],\n )\n\n const handleClear = useCallback((): void => {\n const element = internalRef.current\n if (element) {\n setValue('')\n element.focus()\n }\n }, [setValue])\n\n const showClearButtonNow = showClearButton && value.length > 0\n\n const getEndIcon = (): ReactElement | null => {\n const iconClasses = 'absolute right-4 top-1/2 -translate-y-1/2 text-input-icon hover:text-input-icon--hover focus:outline-none cursor-pointer'\n\n const iconComponents = {\n password: () => (\n <button aria-controls={inputId} aria-label={isVisible ? `Hide ${label ?? 'password'}` : `Show ${label ?? 'password'}`} aria-pressed={isVisible} className={iconClasses} data-testid='spectral-input-password-toggle' onClick={toggleVisibility} type='button'>\n {isVisible ? <EyeClosedIcon size={22} /> : <EyeOpenIcon size={22} />}\n </button>\n ),\n clear: () => (\n <button aria-label={String(`Clear ${label ?? 'input'}`)} className={iconClasses} data-testid='spectral-input-clear-button' onClick={handleClear} type='button'>\n <CloseCircleIcon size={24} />\n </button>\n ),\n loading: () => (\n <div className='right-4 text-input-icon absolute top-1/2 -translate-y-1/2' data-testid='spectral-input-loading-icon'>\n <LoaderIcon size={24} />\n </div>\n ),\n error: () => (\n <div className='right-4 absolute top-1/2 -translate-y-1/2 text-danger-400' data-testid='spectral-input-error-icon'>\n <ErrorIcon size={24} />\n </div>\n ),\n success: () => (\n <div className='right-4 absolute top-1/2 -translate-y-1/2 text-success-400' data-testid='spectral-input-success-icon'>\n <CheckCircleIcon size={24} />\n </div>\n ),\n warning: () => (\n <div className='right-4 absolute top-1/2 -translate-y-1/2 text-warning-400' data-testid='spectral-input-warning-icon'>\n <WarningIcon size={24} />\n </div>\n ),\n }\n\n if (endIcon) return <div className='right-4 text-input-icon absolute top-1/2 -translate-y-1/2'>{endIcon}</div>\n if (type === 'password') return iconComponents.password()\n if (showClearButtonNow) return iconComponents.clear()\n if (isLoading) return iconComponents.loading()\n if (!showStateIcon && (state === 'success' || state === 'warning' || state === 'error')) return null\n if (state === 'success') return iconComponents.success()\n if (state === 'warning') return iconComponents.warning()\n if (state === 'error') return iconComponents.error()\n\n return null\n }\n\n const getStartIcon = (): ReactElement | null => {\n if (startIcon) return startIcon\n return null\n }\n\n const usesTabularNumbers = type === 'number' || type === 'date' || type === 'datetime-local'\n const inputClasses = cn(getInputClasses(state, className), '[text-indent:var(--prefix-width)]', showClearButtonNow && 'pr-10', usesTabularNumbers && 'tabular-nums')\n\n const prefixClasses = cn('inset-y-0 left-4 text-base pointer-events-none absolute flex items-center text-input-text-prefix opacity-100 peer-disabled:opacity-50')\n\n return (\n <div className='flex w-full flex-col gap-1.5' data-testid='spectral-input-container'>\n {label && (\n <Label className={cn('mb-2 block', labelClassName, isDisabled && 'cursor-not-allowed text-input-text--disabled placeholder:text-input-text-placeholder')} data-testid='spectral-input-label' htmlFor={inputId}>\n {label}\n </Label>\n )}\n <div className='relative' data-testid='spectral-input-wrapper'>\n <div className='relative'>\n {getStartIcon()}\n {prefix && (\n <span ref={prefixRef} className={prefixClasses}>\n {prefix}\n </span>\n )}\n <input\n aria-label={ariaLabel ?? label}\n autoComplete={getAutoCompleteValue(type)}\n className={inputClasses}\n data-state={state}\n data-testid='spectral-input'\n disabled={isDisabled}\n id={inputId}\n name={name}\n onBlur={handleBlur}\n onChange={handleChange}\n onFocus={handleFocus}\n placeholder={placeholder ?? label}\n ref={inputRef}\n required={required}\n style={\n getFormFieldCSSProperties({\n '--prefix-width': prefix ? `${prefixWidth}px` : '0',\n }) as CSSProperties\n }\n suppressHydrationWarning={suppressHydrationWarning}\n type={type === 'password' ? inputType : type}\n value={value}\n {...ariaProps}\n {...props}\n />\n {getEndIcon()}\n </div>\n\n <ErrorMessage\n dataTestId='spectral-input-error-message'\n id={errorMessageId}\n message={isInvalid ? (errorMessage ?? null) : null}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace && state === 'error'}\n />\n <WarningMessage\n dataTestId='spectral-input-warning-message'\n id={warningMessageId}\n message={state === 'warning' ? (warningMessage ?? null) : null}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace && state === 'warning'}\n />\n </div>\n </div>\n )\n}\nInput.displayName = 'Input'\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumeric.d.ts","names":[],"sources":["../src/components/InputNumeric/InputNumeric.tsx"],"mappings":";;;;;KA2FY,iBAAA,GAAoB,IAAA,CAAK,UAAA;EACnC,YAAA;EACA,aAAA;EACA,MAAA;EAEA,mBAAA,WAL8B;EAO9B,mBAAA;EACA,QAAA,IAAY,KAAA;EACZ,KAAA;AAAA;AAAA;EAG6B,YAAA;EAAqB,aAAA;EAAuB,SAAA;EAAW,YAAA;EAAmB,MAAA;EAAQ,GAAA;EAAK,mBAAA;EAAyB,mBAAA;EAA6B,GAAA;EAAK,QAAA;EAAU,SAAA;EAAW,OAAA;EAAS,IAAA;EAAM,KAAA,EAAO,SAAA;EAAA,GAAc;AAAA,GAAS,iBAAA,GAAoB,YAAA;AAAA"}
1
+ {"version":3,"file":"InputNumeric.d.ts","names":[],"sources":["../src/components/InputNumeric/InputNumeric.tsx"],"mappings":";;;;;KA2FY,iBAAA,GAAoB,IAAA,CAAK,UAAA;EACnC,YAAA;EACA,aAAA;EACA,MAAA;EAEA,mBAAA,WAL8B;EAO9B,mBAAA;EACA,QAAA,IAAY,KAAA;EACZ,KAAA;AAAA;AAAA;EAIA,YAAA;EACA,aAAA;EACA,SAAA;EACA,YAAA;EACA,MAAA;EACA,GAAA;EACA,mBAAA;EACA,mBAAA;EACA,GAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA,EAAO,SAAA;EAAA,GACJ;AAAA,GACF,iBAAA,GAAoB,YAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputNumeric.js","names":[],"sources":["../src/components/InputNumeric/InputNumeric.tsx"],"sourcesContent":["import { Input, type InputProps } from '@components/Input/Input'\nimport { useUncontrolledState } from '@hooks/useUncontrolledState'\nimport { cn } from '@utils/twUtils'\nimport { useCallback, type ClipboardEvent, type KeyboardEvent, type ReactElement } from 'react'\n\ntype NumericKeyDownEvent = KeyboardEvent<HTMLInputElement>\ntype NumericPasteEvent = ClipboardEvent<HTMLInputElement>\n\nconst DIGIT_REGEX = /^\\d$/\nconst DISALLOWED_SPECIAL_KEYS = new Set(['e', 'E', '+'])\nconst ALLOWED_CONTROL_KEYS = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'Tab', 'Enter', 'Escape'])\n\nconst getDecimalSeparator = (locale?: string): string => {\n try {\n const formattedNumber = new Intl.NumberFormat(locale).formatToParts(1.1)\n return formattedNumber.find((part) => part.type === 'decimal')?.value ?? '.'\n } catch {\n return '.'\n }\n}\n\nconst normalizeDecimalSeparator = (value: string, decimalSeparator: string): string => {\n if (decimalSeparator === '.') return value\n return value.replaceAll(decimalSeparator, '.')\n}\n\nconst sanitizeNumericValue = (value: string, allowDecimal: boolean, allowNegative: boolean, decimalSeparator: string): string => {\n if (!value) return ''\n\n let sanitized = normalizeDecimalSeparator(value, decimalSeparator).replace(/[^\\d.-]/g, '')\n\n if (!allowNegative) {\n sanitized = sanitized.replace(/-/g, '')\n } else {\n sanitized = sanitized.replace(/(?!^)-/g, '')\n if (sanitized.startsWith('--')) {\n sanitized = `-${sanitized.replace(/-/g, '')}`\n }\n }\n\n if (!allowDecimal) {\n sanitized = sanitized.replace(/\\./g, '')\n } else {\n const firstDecimalIndex = sanitized.indexOf('.')\n if (firstDecimalIndex >= 0) {\n const integerPart = sanitized.slice(0, firstDecimalIndex + 1)\n const fractionalPart = sanitized.slice(firstDecimalIndex + 1).replace(/\\./g, '')\n sanitized = `${integerPart}${fractionalPart}`\n }\n }\n\n return sanitized\n}\n\nconst shouldAllowDecimalInput = (target: HTMLInputElement): boolean => {\n if (target.selectionStart === null || target.selectionEnd === null) {\n return !target.value.includes('.')\n }\n\n const selectedText = target.value.slice(target.selectionStart, target.selectionEnd)\n return !target.value.includes('.') || selectedText.includes('.')\n}\n\nconst shouldAllowNegativeInput = (target: HTMLInputElement): boolean => {\n if (target.selectionStart === null || target.selectionEnd === null) {\n return target.value.length === 0\n }\n\n const isAtStart = target.selectionStart === 0\n const selectedText = target.value.slice(target.selectionStart, target.selectionEnd)\n return isAtStart && (!target.value.includes('-') || selectedText.includes('-'))\n}\n\nconst parseNumericProp = (value: number | string | undefined): number | undefined => {\n if (value === undefined || value === null || value === '') return undefined\n const parsed = typeof value === 'number' ? value : Number.parseFloat(value)\n return Number.isFinite(parsed) ? parsed : undefined\n}\n\nconst getDecimalPlaces = (value: number): number => {\n const valueString = value.toString()\n if (!valueString.includes('.')) return 0\n return valueString.split('.')[1]?.length ?? 0\n}\n\nconst roundToPrecision = (value: number, precision: number): number => {\n if (precision <= 0) return value\n const factor = 10 ** precision\n return Math.round(value * factor) / factor\n}\n\nexport type InputNumericProps = Omit<InputProps, 'inputMode' | 'onChange' | 'pattern' | 'type'> & {\n allowDecimal?: boolean\n allowNegative?: boolean\n locale?: string\n /** Number of message lines to reserve (default: 1). */\n messageReserveLines?: number\n /** Whether to keep message space reserved when hidden (default: false). */\n messageReserveSpace?: boolean\n onChange?: (value: string) => void\n value?: string\n}\n\nexport const InputNumeric = ({ allowDecimal = true, allowNegative = false, className, defaultValue = '', locale, max, messageReserveLines = 1, messageReserveSpace = false, min, onChange, onKeyDown, onPaste, step, value: valueProp, ...props }: InputNumericProps): ReactElement => {\n const normalizedDefaultValue = typeof defaultValue === 'string' ? defaultValue : defaultValue !== undefined && defaultValue !== null ? String(defaultValue) : ''\n const [value, setValue] = useUncontrolledState<string>({\n value: valueProp,\n defaultValue: normalizedDefaultValue,\n onChange,\n })\n const decimalSeparator = getDecimalSeparator(locale)\n const parsedMin = parseNumericProp(min)\n const parsedMax = parseNumericProp(max)\n const parsedStep = parseNumericProp(step)\n const stepValue = parsedStep && parsedStep > 0 ? parsedStep : 1\n const effectiveMin = parsedMin ?? (!allowNegative ? 0 : undefined)\n\n const handleKeyDown = useCallback(\n (event: NumericKeyDownEvent): void => {\n onKeyDown?.(event)\n if (event.defaultPrevented || event.nativeEvent.isComposing) return\n\n if (event.metaKey || event.ctrlKey || event.altKey) return\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault()\n\n const direction = event.key === 'ArrowUp' ? 1 : -1\n const normalizedValue = normalizeDecimalSeparator(value, decimalSeparator)\n const currentValue = Number.parseFloat(normalizedValue)\n const hasCurrentValue = Number.isFinite(currentValue)\n const baseValue = hasCurrentValue ? currentValue : (effectiveMin ?? 0)\n\n let nextValue = baseValue + direction * stepValue\n if (effectiveMin !== undefined) {\n nextValue = Math.max(effectiveMin, nextValue)\n }\n if (parsedMax !== undefined) {\n nextValue = Math.min(parsedMax, nextValue)\n }\n\n if (!allowDecimal) {\n nextValue = Math.trunc(nextValue)\n }\n\n const precision = allowDecimal ? getDecimalPlaces(stepValue) : 0\n const roundedValue = roundToPrecision(nextValue, precision)\n const safeValue = Object.is(roundedValue, -0) ? 0 : roundedValue\n const nextString = precision > 0 ? safeValue.toFixed(precision).replace(/\\.?0+$/, '') : safeValue.toString()\n setValue(sanitizeNumericValue(nextString, allowDecimal, allowNegative, decimalSeparator))\n return\n }\n\n if (ALLOWED_CONTROL_KEYS.has(event.key)) return\n if (DIGIT_REGEX.test(event.key)) return\n\n if (DISALLOWED_SPECIAL_KEYS.has(event.key)) {\n event.preventDefault()\n return\n }\n\n const isDecimalKey = event.key === '.' || event.key === decimalSeparator\n\n if (isDecimalKey) {\n if (!allowDecimal || !shouldAllowDecimalInput(event.currentTarget)) {\n event.preventDefault()\n }\n return\n }\n\n if (event.key === '-') {\n if (!allowNegative || !shouldAllowNegativeInput(event.currentTarget)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n },\n [allowDecimal, allowNegative, decimalSeparator, effectiveMin, onKeyDown, parsedMax, setValue, stepValue, value],\n )\n\n const handlePaste = useCallback(\n (event: NumericPasteEvent): void => {\n onPaste?.(event)\n },\n [onPaste],\n )\n\n const handleChange = useCallback(\n (newValue: string): void => {\n setValue(sanitizeNumericValue(newValue, allowDecimal, allowNegative, decimalSeparator))\n },\n [allowDecimal, allowNegative, decimalSeparator, setValue],\n )\n\n const inputMode = allowDecimal ? 'decimal' : 'numeric'\n const pattern = allowDecimal ? '[0-9]*[.]?[0-9]*' : '[0-9]*'\n\n return (\n <Input\n {...props}\n className={cn('tabular-nums', className)}\n inputMode={inputMode}\n max={max}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace}\n min={min}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n pattern={pattern}\n step={step}\n type='text'\n value={value}\n />\n )\n}\n\nInputNumeric.displayName = 'InputNumeric'\n"],"mappings":"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"}
1
+ {"version":3,"file":"InputNumeric.js","names":[],"sources":["../src/components/InputNumeric/InputNumeric.tsx"],"sourcesContent":["import { Input, type InputProps } from '@components/Input/Input'\nimport { useUncontrolledState } from '@hooks/useUncontrolledState'\nimport { cn } from '@utils/twUtils'\nimport { useCallback, type ClipboardEvent, type KeyboardEvent, type ReactElement } from 'react'\n\ntype NumericKeyDownEvent = KeyboardEvent<HTMLInputElement>\ntype NumericPasteEvent = ClipboardEvent<HTMLInputElement>\n\nconst DIGIT_REGEX = /^\\d$/\nconst DISALLOWED_SPECIAL_KEYS = new Set(['e', 'E', '+'])\nconst ALLOWED_CONTROL_KEYS = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End', 'Tab', 'Enter', 'Escape'])\n\nconst getDecimalSeparator = (locale?: string): string => {\n try {\n const formattedNumber = new Intl.NumberFormat(locale).formatToParts(1.1)\n return formattedNumber.find((part) => part.type === 'decimal')?.value ?? '.'\n } catch {\n return '.'\n }\n}\n\nconst normalizeDecimalSeparator = (value: string, decimalSeparator: string): string => {\n if (decimalSeparator === '.') return value\n return value.replaceAll(decimalSeparator, '.')\n}\n\nconst sanitizeNumericValue = (value: string, allowDecimal: boolean, allowNegative: boolean, decimalSeparator: string): string => {\n if (!value) return ''\n\n let sanitized = normalizeDecimalSeparator(value, decimalSeparator).replace(/[^\\d.-]/g, '')\n\n if (!allowNegative) {\n sanitized = sanitized.replace(/-/g, '')\n } else {\n sanitized = sanitized.replace(/(?!^)-/g, '')\n if (sanitized.startsWith('--')) {\n sanitized = `-${sanitized.replace(/-/g, '')}`\n }\n }\n\n if (!allowDecimal) {\n sanitized = sanitized.replace(/\\./g, '')\n } else {\n const firstDecimalIndex = sanitized.indexOf('.')\n if (firstDecimalIndex >= 0) {\n const integerPart = sanitized.slice(0, firstDecimalIndex + 1)\n const fractionalPart = sanitized.slice(firstDecimalIndex + 1).replace(/\\./g, '')\n sanitized = `${integerPart}${fractionalPart}`\n }\n }\n\n return sanitized\n}\n\nconst shouldAllowDecimalInput = (target: HTMLInputElement): boolean => {\n if (target.selectionStart === null || target.selectionEnd === null) {\n return !target.value.includes('.')\n }\n\n const selectedText = target.value.slice(target.selectionStart, target.selectionEnd)\n return !target.value.includes('.') || selectedText.includes('.')\n}\n\nconst shouldAllowNegativeInput = (target: HTMLInputElement): boolean => {\n if (target.selectionStart === null || target.selectionEnd === null) {\n return target.value.length === 0\n }\n\n const isAtStart = target.selectionStart === 0\n const selectedText = target.value.slice(target.selectionStart, target.selectionEnd)\n return isAtStart && (!target.value.includes('-') || selectedText.includes('-'))\n}\n\nconst parseNumericProp = (value: number | string | undefined): number | undefined => {\n if (value === undefined || value === null || value === '') return undefined\n const parsed = typeof value === 'number' ? value : Number.parseFloat(value)\n return Number.isFinite(parsed) ? parsed : undefined\n}\n\nconst getDecimalPlaces = (value: number): number => {\n const valueString = value.toString()\n if (!valueString.includes('.')) return 0\n return valueString.split('.')[1]?.length ?? 0\n}\n\nconst roundToPrecision = (value: number, precision: number): number => {\n if (precision <= 0) return value\n const factor = 10 ** precision\n return Math.round(value * factor) / factor\n}\n\nexport type InputNumericProps = Omit<InputProps, 'inputMode' | 'onChange' | 'pattern' | 'type'> & {\n allowDecimal?: boolean\n allowNegative?: boolean\n locale?: string\n /** Number of message lines to reserve (default: 1). */\n messageReserveLines?: number\n /** Whether to keep message space reserved when hidden (default: false). */\n messageReserveSpace?: boolean\n onChange?: (value: string) => void\n value?: string\n}\n\nexport const InputNumeric = ({\n allowDecimal = true,\n allowNegative = false,\n className,\n defaultValue = '',\n locale,\n max,\n messageReserveLines = 1,\n messageReserveSpace = false,\n min,\n onChange,\n onKeyDown,\n onPaste,\n step,\n value: valueProp,\n ...props\n}: InputNumericProps): ReactElement => {\n const normalizedDefaultValue = typeof defaultValue === 'string' ? defaultValue : defaultValue !== undefined && defaultValue !== null ? String(defaultValue) : ''\n const [value, setValue] = useUncontrolledState<string>({\n value: valueProp,\n defaultValue: normalizedDefaultValue,\n onChange,\n })\n const decimalSeparator = getDecimalSeparator(locale)\n const parsedMin = parseNumericProp(min)\n const parsedMax = parseNumericProp(max)\n const parsedStep = parseNumericProp(step)\n const stepValue = parsedStep && parsedStep > 0 ? parsedStep : 1\n const effectiveMin = parsedMin ?? (!allowNegative ? 0 : undefined)\n\n const handleKeyDown = useCallback(\n (event: NumericKeyDownEvent): void => {\n onKeyDown?.(event)\n if (event.defaultPrevented || event.nativeEvent.isComposing) return\n\n if (event.metaKey || event.ctrlKey || event.altKey) return\n if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault()\n\n const direction = event.key === 'ArrowUp' ? 1 : -1\n const normalizedValue = normalizeDecimalSeparator(value, decimalSeparator)\n const currentValue = Number.parseFloat(normalizedValue)\n const hasCurrentValue = Number.isFinite(currentValue)\n const baseValue = hasCurrentValue ? currentValue : (effectiveMin ?? 0)\n\n let nextValue = baseValue + direction * stepValue\n if (effectiveMin !== undefined) {\n nextValue = Math.max(effectiveMin, nextValue)\n }\n if (parsedMax !== undefined) {\n nextValue = Math.min(parsedMax, nextValue)\n }\n\n if (!allowDecimal) {\n nextValue = Math.trunc(nextValue)\n }\n\n const precision = allowDecimal ? getDecimalPlaces(stepValue) : 0\n const roundedValue = roundToPrecision(nextValue, precision)\n const safeValue = Object.is(roundedValue, -0) ? 0 : roundedValue\n const nextString = precision > 0 ? safeValue.toFixed(precision).replace(/\\.?0+$/, '') : safeValue.toString()\n setValue(sanitizeNumericValue(nextString, allowDecimal, allowNegative, decimalSeparator))\n return\n }\n\n if (ALLOWED_CONTROL_KEYS.has(event.key)) return\n if (DIGIT_REGEX.test(event.key)) return\n\n if (DISALLOWED_SPECIAL_KEYS.has(event.key)) {\n event.preventDefault()\n return\n }\n\n const isDecimalKey = event.key === '.' || event.key === decimalSeparator\n\n if (isDecimalKey) {\n if (!allowDecimal || !shouldAllowDecimalInput(event.currentTarget)) {\n event.preventDefault()\n }\n return\n }\n\n if (event.key === '-') {\n if (!allowNegative || !shouldAllowNegativeInput(event.currentTarget)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n },\n [allowDecimal, allowNegative, decimalSeparator, effectiveMin, onKeyDown, parsedMax, setValue, stepValue, value],\n )\n\n const handlePaste = useCallback(\n (event: NumericPasteEvent): void => {\n onPaste?.(event)\n },\n [onPaste],\n )\n\n const handleChange = useCallback(\n (newValue: string): void => {\n setValue(sanitizeNumericValue(newValue, allowDecimal, allowNegative, decimalSeparator))\n },\n [allowDecimal, allowNegative, decimalSeparator, setValue],\n )\n\n const inputMode = allowDecimal ? 'decimal' : 'numeric'\n const pattern = allowDecimal ? '[0-9]*[.]?[0-9]*' : '[0-9]*'\n\n return (\n <Input\n {...props}\n className={cn('tabular-nums', className)}\n inputMode={inputMode}\n max={max}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace}\n min={min}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n pattern={pattern}\n step={step}\n type='text'\n value={value}\n />\n )\n}\n\nInputNumeric.displayName = 'InputNumeric'\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputOTP.d.ts","names":[],"sources":["../src/components/InputOTP/InputOTP.tsx"],"mappings":";;;;;;;UAMiB,iBAAA,SAA0B,IAAA,CAAK,aAAA;EAC9C,UAAA,OAAiB,IAAA;EACjB,SAAA;EACA,YAAA;EACA,SAAA;EACA,mBAAA;EACA,mBAAA;EAQQ;;;;;EAFR,OAAA;EACA,SAAA;EACA,KAAA,GAAQ,cAAA;EACR,OAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,iBAAA;EAAuB,KAAA;EAAwB,QAAA,GAAW,QAAA;AAAA;EAAyC,KAAA;EAAe,QAAA;AAAA;AAAA,UAsKpI,UAAA;EACR,SAAA;EACA,KAAA;EACA,KAAA;AAAA;AAAA,cAuEW,QAAA;EAAA;;;;;;;;;;;;;;;;;;;KA3MV,aAAA;IACD,GAAA,GAAM,GAAA,CAAI,YAAA,QAAoB,QAAA;EAAA,IAC/B,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;OA0EE,wBAAA;MACD,GAAA,GAAM,GAAA,CAAI,YAAA;IAAA,IACX,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;;;OAeE,wBAAA;MACD,KAAA;MACA,GAAA,GAAM,GAAA,CAAI,YAAA;IAAA,IACX,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;;OA+D+C,UAAA,GAAU,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;OAsBvD,wBAAA;MACD,GAAA,GAAM,GAAA,CAAI,YAAA;IAAA,IACX,oBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"InputOTP.d.ts","names":[],"sources":["../src/components/InputOTP/InputOTP.tsx"],"mappings":";;;;;;;UAMiB,iBAAA,SAA0B,IAAA,CAAK,aAAA;EAC9C,UAAA,OAAiB,IAAA;EACjB,SAAA;EACA,YAAA;EACA,SAAA;EACA,mBAAA;EACA,mBAAA;EAQQ;;;;;EAFR,OAAA;EACA,SAAA;EACA,KAAA,GAAQ,cAAA;EACR,OAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,iBAAA;EAAuB,KAAA;EAAwB,QAAA,GAAW,QAAA;AAAA;EAAyC,KAAA;EAAe,QAAA;AAAA;AAAA,UA+JpI,UAAA;EACR,SAAA;EACA,KAAA;EACA,KAAA;AAAA;AAAA,cA0DW,QAAA;EAAA;;;;;;;;;;;;;;;;;;;KAvLV,aAAA;IACD,GAAA,GAAM,GAAA,CAAI,YAAA,QAAoB,QAAA;EAAA,IAC/B,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;OA0EE,wBAAA;MACD,GAAA,GAAM,GAAA,CAAI,YAAA;IAAA,IACX,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;;;OAQE,wBAAA;MACD,KAAA;MACA,GAAA,GAAM,GAAA,CAAI,YAAA;IAAA,IACX,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;;OA+D+C,UAAA,GAAU,oBAAA,CAAA,GAAA,CAAA,OAAA;;;;;;;OAkBvD,wBAAA;MACD,GAAA,GAAM,GAAA,CAAI,YAAA;IAAA,IACX,oBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"InputOTP.js","names":[],"sources":["../src/components/InputOTP/InputOTP.tsx"],"sourcesContent":["import { MinusIcon } from '@components/Icons'\nimport { ErrorMessage, getErrorMessageId, useFormFieldId, useFormFieldState, type FormFieldState } from '@utils/formFieldUtils'\nimport { cn } from '@utils/twUtils'\nimport { OTPInput, REGEXP_ONLY_DIGITS, type OTPInputProps } from 'input-otp'\nimport { createContext, useContext, type ClipboardEvent, type ComponentPropsWithoutRef, type ComponentRef, type Ref } from 'react'\n\nexport interface InputOTPBaseProps extends Omit<OTPInputProps, 'textAlign' | 'pushPasswordManagerStrategy' | 'pasteTransformer' | 'noScriptCSSFallback' | 'placeholder' | 'containerClassName' | 'render' | 'pattern'> {\n onComplete?: (...args: unknown[]) => void\n className?: string\n errorMessage?: string | undefined\n inputMode?: 'numeric' | 'text' | 'decimal' | 'tel' | 'search' | 'email' | 'url'\n messageReserveLines?: number\n messageReserveSpace?: boolean\n /**\n * Regex pattern string to restrict allowed characters.\n * When `inputMode=\"numeric\"`, defaults to digits-only pattern.\n * Set to `undefined` to allow any characters.\n */\n pattern?: string | undefined\n separator?: boolean\n state?: FormFieldState\n variant?: 'outlined' | 'filled'\n}\n\nexport type InputOTPProps = InputOTPBaseProps & ({ value: number | string; onChange: (newValue: number | string) => void } | { value?: never; onChange?: never })\n\nconst InputOTPStateContext = createContext<{ isInvalid?: boolean }>({})\n\nconst OTPInputContext = createContext<{\n maxLength?: number\n slots?: { char: string | null; hasFakeCaret: boolean; isActive: boolean }[]\n variant?: 'outlined' | 'filled'\n} | null>(null)\n\nconst useRoot = () => {\n const context = useContext(OTPInputContext)\n if (!context) {\n throw new Error('useRoot must be used within an InputOTP')\n }\n return context\n}\n\nconst Root = ({\n autoFocus = false,\n children,\n className,\n errorMessage,\n id,\n inputMode = 'numeric',\n messageReserveLines = 1,\n messageReserveSpace = false,\n maxLength,\n name,\n onChange,\n onComplete,\n pattern,\n ref,\n state = 'default',\n value,\n variant = 'outlined',\n ...props\n}: InputOTPProps & {\n ref?: Ref<ComponentRef<typeof OTPInput>>\n}) => {\n const inputId = useFormFieldId(id, name)\n const errorMessageId = getErrorMessageId(inputId)\n const { isInvalid } = useFormFieldState(false, state)\n\n // Apply digits-only pattern when inputMode is numeric (unless explicitly overridden)\n const effectivePattern = pattern ?? (inputMode === 'numeric' ? REGEXP_ONLY_DIGITS : undefined)\n\n const handlePaste = (e: ClipboardEvent<HTMLDivElement>): void => {\n let pasteData = e.clipboardData.getData('text/plain').trim().replaceAll('-', '')\n\n // Filter to digits only when in numeric mode\n if (inputMode === 'numeric') {\n pasteData = pasteData.replace(/\\D/g, '')\n }\n\n if (pasteData.length === maxLength && typeof onChange === 'function') {\n onChange(pasteData)\n }\n }\n\n return (\n <InputOTPStateContext.Provider value={{ isInvalid }}>\n <div className='gap-y-1 flex w-max flex-col'>\n <OTPInput\n /* eslint-disable-next-line jsx-a11y/no-autofocus -- intentional: consumers can opt in for OTP-first flows; defaults to false */\n autoFocus={autoFocus}\n containerClassName={cn('gap-2 flex items-center disabled:cursor-not-allowed has-[disabled]:opacity-50', className)}\n data-1p-ignore='true'\n data-dashlane-disabled-on-field='true'\n data-lpignore='true'\n data-protonpass-ignore='true'\n data-testid='spectral-input-otp'\n id={inputId}\n inputMode={inputMode}\n maxLength={maxLength}\n onChange={onChange}\n onComplete={onComplete}\n onPaste={handlePaste}\n pasteTransformer={(pasted) => pasted.replaceAll('-', '')}\n pattern={effectivePattern}\n pushPasswordManagerStrategy='none'\n ref={ref}\n aria-describedby={isInvalid && errorMessage ? errorMessageId : undefined}\n aria-invalid={isInvalid}\n textAlign='center'\n value={value}\n {...props}\n render={({ slots }) => (\n <OTPInputContext.Provider value={{ slots, variant, maxLength }}>\n {children ?? (\n <Group>\n <Slots />\n </Group>\n )}\n </OTPInputContext.Provider>\n )}\n />\n <ErrorMessage\n dataTestId='spectral-input-otp-error-message'\n id={errorMessageId}\n message={isInvalid ? errorMessage : null}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace}\n />\n </div>\n </InputOTPStateContext.Provider>\n )\n}\nRoot.displayName = 'InputOTP'\n\nconst Group = ({\n ref,\n ...props\n}: ComponentPropsWithoutRef<'div'> & {\n ref?: Ref<ComponentRef<'div'>>\n}) => (\n <div\n className='gap-x-2 flex items-center justify-center'\n data-testid='spectral-input-otp-group'\n ref={ref}\n {...props}\n />\n)\nGroup.displayName = 'InputOTP.Group'\n\nconst Slot = ({\n className,\n index,\n ref,\n ...props\n}: ComponentPropsWithoutRef<'div'> & {\n index: number\n ref?: Ref<ComponentRef<'div'>>\n}) => {\n const { variant = 'outlined', slots = [] } = useRoot()\n const { isInvalid } = useContext(InputOTPStateContext)\n const slot = slots[index] || { char: '', hasFakeCaret: true, isActive: false }\n\n return (\n <div\n className={cn(\n 'h-12 w-10 relative z-10 flex items-center justify-center rounded-[8px] border tabular-nums transition duration-200 focus:outline-none',\n variant === 'filled' ? 'border-level-one bg-level-one' : 'border-input-otp-border bg-transparent',\n !isInvalid && 'border',\n isInvalid && 'border-2 border-danger-400',\n slot.isActive && !isInvalid && 'z-10 border-input-otp-border--focus',\n slot.isActive && isInvalid && 'z-10 border-danger-400 focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-danger-400',\n className,\n )}\n data-index={index}\n data-testid='spectral-input-otp-slot'\n data-variant={variant}\n ref={ref}\n {...props}\n >\n {slot.char}\n {slot.hasFakeCaret && (\n <div className='inset-0 pointer-events-none absolute flex items-center justify-center motion-safe:animate-caret-blink'>\n <div className='h-8 w-px bg-input-otp-caret' />\n </div>\n )}\n </div>\n )\n}\nSlot.displayName = 'InputOTP.Slot'\n\ninterface SlotsProps {\n className?: string\n count?: number\n start?: number\n}\n\n/**\n * Helper component that automatically renders multiple InputOTP.Slot components.\n * Uses the maxLength from the parent InputOTP to determine how many slots to render.\n *\n * @example\n * // Render all 6 slots\n * <InputOTP maxLength={6}>\n * <InputOTP.Group>\n * <InputOTP.Slots />\n * </InputOTP.Group>\n * </InputOTP>\n *\n * @example\n * // Render slots in groups with a separator (3-3 split)\n * <InputOTP maxLength={6}>\n * <InputOTP.Group>\n * <InputOTP.Slots count={3} />\n * </InputOTP.Group>\n * <InputOTP.Separator />\n * <InputOTP.Group>\n * <InputOTP.Slots start={3} />\n * </InputOTP.Group>\n * </InputOTP>\n */\nconst Slots = ({ start = 0, count, className }: SlotsProps) => {\n const { maxLength = 0 } = useRoot()\n const end = count !== undefined ? start + count : maxLength\n const indices = Array.from({ length: end - start }, (_, i) => start + i)\n\n return (\n <>\n {indices.map((index) => (\n <Slot\n key={index}\n index={index}\n className={className}\n />\n ))}\n </>\n )\n}\nSlots.displayName = 'InputOTP.Slots'\n\nconst Separator = ({\n ref,\n ...props\n}: ComponentPropsWithoutRef<'div'> & {\n ref?: Ref<ComponentRef<'div'>>\n}) => {\n const { variant = 'outlined' } = useRoot()\n\n return (\n <div\n ref={ref}\n role='separator'\n {...props}\n data-testid='spectral-input-otp-separator'\n data-variant={variant}\n >\n <MinusIcon\n size={24}\n color={variant === 'filled' ? 'var(--color-input-otp-filled-separator)' : 'var(--color-input-otp-border)'}\n />\n </div>\n )\n}\nSeparator.displayName = 'InputOTP.Separator'\n\nexport const InputOTP = Object.assign(Root, {\n Group,\n Slot,\n Slots,\n Separator,\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"InputOTP.js","names":[],"sources":["../src/components/InputOTP/InputOTP.tsx"],"sourcesContent":["import { MinusIcon } from '@components/Icons'\nimport { ErrorMessage, getErrorMessageId, useFormFieldId, useFormFieldState, type FormFieldState } from '@utils/formFieldUtils'\nimport { cn } from '@utils/twUtils'\nimport { OTPInput, REGEXP_ONLY_DIGITS, type OTPInputProps } from 'input-otp'\nimport { createContext, useContext, type ClipboardEvent, type ComponentPropsWithoutRef, type ComponentRef, type Ref } from 'react'\n\nexport interface InputOTPBaseProps extends Omit<OTPInputProps, 'textAlign' | 'pushPasswordManagerStrategy' | 'pasteTransformer' | 'noScriptCSSFallback' | 'placeholder' | 'containerClassName' | 'render' | 'pattern'> {\n onComplete?: (...args: unknown[]) => void\n className?: string\n errorMessage?: string | undefined\n inputMode?: 'numeric' | 'text' | 'decimal' | 'tel' | 'search' | 'email' | 'url'\n messageReserveLines?: number\n messageReserveSpace?: boolean\n /**\n * Regex pattern string to restrict allowed characters.\n * When `inputMode=\"numeric\"`, defaults to digits-only pattern.\n * Set to `undefined` to allow any characters.\n */\n pattern?: string | undefined\n separator?: boolean\n state?: FormFieldState\n variant?: 'outlined' | 'filled'\n}\n\nexport type InputOTPProps = InputOTPBaseProps & ({ value: number | string; onChange: (newValue: number | string) => void } | { value?: never; onChange?: never })\n\nconst InputOTPStateContext = createContext<{ isInvalid?: boolean }>({})\n\nconst OTPInputContext = createContext<{\n maxLength?: number\n slots?: { char: string | null; hasFakeCaret: boolean; isActive: boolean }[]\n variant?: 'outlined' | 'filled'\n} | null>(null)\n\nconst useRoot = () => {\n const context = useContext(OTPInputContext)\n if (!context) {\n throw new Error('useRoot must be used within an InputOTP')\n }\n return context\n}\n\nconst Root = ({\n autoFocus = false,\n children,\n className,\n errorMessage,\n id,\n inputMode = 'numeric',\n messageReserveLines = 1,\n messageReserveSpace = false,\n maxLength,\n name,\n onChange,\n onComplete,\n pattern,\n ref,\n state = 'default',\n value,\n variant = 'outlined',\n ...props\n}: InputOTPProps & {\n ref?: Ref<ComponentRef<typeof OTPInput>>\n}) => {\n const inputId = useFormFieldId(id, name)\n const errorMessageId = getErrorMessageId(inputId)\n const { isInvalid } = useFormFieldState(false, state)\n\n // Apply digits-only pattern when inputMode is numeric (unless explicitly overridden)\n const effectivePattern = pattern ?? (inputMode === 'numeric' ? REGEXP_ONLY_DIGITS : undefined)\n\n const handlePaste = (e: ClipboardEvent<HTMLDivElement>): void => {\n let pasteData = e.clipboardData.getData('text/plain').trim().replaceAll('-', '')\n\n // Filter to digits only when in numeric mode\n if (inputMode === 'numeric') {\n pasteData = pasteData.replace(/\\D/g, '')\n }\n\n if (pasteData.length === maxLength && typeof onChange === 'function') {\n onChange(pasteData)\n }\n }\n\n return (\n <InputOTPStateContext.Provider value={{ isInvalid }}>\n <div className='gap-y-1 flex w-max flex-col'>\n <OTPInput\n /* eslint-disable-next-line jsx-a11y/no-autofocus -- intentional: consumers can opt in for OTP-first flows; defaults to false */\n autoFocus={autoFocus}\n containerClassName={cn('gap-2 flex items-center disabled:cursor-not-allowed has-[disabled]:opacity-50', className)}\n data-1p-ignore='true'\n data-dashlane-disabled-on-field='true'\n data-lpignore='true'\n data-protonpass-ignore='true'\n data-testid='spectral-input-otp'\n id={inputId}\n inputMode={inputMode}\n maxLength={maxLength}\n onChange={onChange}\n onComplete={onComplete}\n onPaste={handlePaste}\n pasteTransformer={(pasted) => pasted.replaceAll('-', '')}\n pattern={effectivePattern}\n pushPasswordManagerStrategy='none'\n ref={ref}\n aria-describedby={isInvalid && errorMessage ? errorMessageId : undefined}\n aria-invalid={isInvalid}\n textAlign='center'\n value={value}\n {...props}\n render={({ slots }) => (\n <OTPInputContext.Provider value={{ slots, variant, maxLength }}>\n {children ?? (\n <Group>\n <Slots />\n </Group>\n )}\n </OTPInputContext.Provider>\n )}\n />\n <ErrorMessage\n dataTestId='spectral-input-otp-error-message'\n id={errorMessageId}\n message={isInvalid ? errorMessage : null}\n messageReserveLines={messageReserveLines}\n messageReserveSpace={messageReserveSpace}\n />\n </div>\n </InputOTPStateContext.Provider>\n )\n}\nRoot.displayName = 'InputOTP'\n\nconst Group = ({\n ref,\n ...props\n}: ComponentPropsWithoutRef<'div'> & {\n ref?: Ref<ComponentRef<'div'>>\n}) => <div className='gap-x-2 flex items-center justify-center' data-testid='spectral-input-otp-group' ref={ref} {...props} />\nGroup.displayName = 'InputOTP.Group'\n\nconst Slot = ({\n className,\n index,\n ref,\n ...props\n}: ComponentPropsWithoutRef<'div'> & {\n index: number\n ref?: Ref<ComponentRef<'div'>>\n}) => {\n const { variant = 'outlined', slots = [] } = useRoot()\n const { isInvalid } = useContext(InputOTPStateContext)\n const slot = slots[index] || { char: '', hasFakeCaret: true, isActive: false }\n\n return (\n <div\n className={cn(\n 'h-12 w-10 relative z-10 flex items-center justify-center rounded-[8px] border tabular-nums transition duration-200 focus:outline-none',\n variant === 'filled' ? 'border-level-one bg-level-one' : 'border-input-otp-border bg-transparent',\n !isInvalid && 'border',\n isInvalid && 'border-2 border-danger-400',\n slot.isActive && !isInvalid && 'z-10 border-input-otp-border--focus',\n slot.isActive && isInvalid && 'z-10 border-danger-400 focus-visible:outline-1 focus-visible:outline-offset-1 focus-visible:outline-danger-400',\n className,\n )}\n data-index={index}\n data-testid='spectral-input-otp-slot'\n data-variant={variant}\n ref={ref}\n {...props}\n >\n {slot.char}\n {slot.hasFakeCaret && (\n <div className='inset-0 pointer-events-none absolute flex items-center justify-center motion-safe:animate-caret-blink'>\n <div className='h-8 w-px bg-input-otp-caret' />\n </div>\n )}\n </div>\n )\n}\nSlot.displayName = 'InputOTP.Slot'\n\ninterface SlotsProps {\n className?: string\n count?: number\n start?: number\n}\n\n/**\n * Helper component that automatically renders multiple InputOTP.Slot components.\n * Uses the maxLength from the parent InputOTP to determine how many slots to render.\n *\n * @example\n * // Render all 6 slots\n * <InputOTP maxLength={6}>\n * <InputOTP.Group>\n * <InputOTP.Slots />\n * </InputOTP.Group>\n * </InputOTP>\n *\n * @example\n * // Render slots in groups with a separator (3-3 split)\n * <InputOTP maxLength={6}>\n * <InputOTP.Group>\n * <InputOTP.Slots count={3} />\n * </InputOTP.Group>\n * <InputOTP.Separator />\n * <InputOTP.Group>\n * <InputOTP.Slots start={3} />\n * </InputOTP.Group>\n * </InputOTP>\n */\nconst Slots = ({ start = 0, count, className }: SlotsProps) => {\n const { maxLength = 0 } = useRoot()\n const end = count !== undefined ? start + count : maxLength\n const indices = Array.from({ length: end - start }, (_, i) => start + i)\n\n return (\n <>\n {indices.map((index) => (\n <Slot key={index} index={index} className={className} />\n ))}\n </>\n )\n}\nSlots.displayName = 'InputOTP.Slots'\n\nconst Separator = ({\n ref,\n ...props\n}: ComponentPropsWithoutRef<'div'> & {\n ref?: Ref<ComponentRef<'div'>>\n}) => {\n const { variant = 'outlined' } = useRoot()\n\n return (\n <div ref={ref} role='separator' {...props} data-testid='spectral-input-otp-separator' data-variant={variant}>\n <MinusIcon size={24} color={variant === 'filled' ? 'var(--color-input-otp-filled-separator)' : 'var(--color-input-otp-border)'} />\n </div>\n )\n}\nSeparator.displayName = 'InputOTP.Separator'\n\nexport const InputOTP = Object.assign(Root, {\n Group,\n Slot,\n Slots,\n Separator,\n})\n"],"mappings":"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"}
package/dist/Kbd.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Kbd.d.ts","names":[],"sources":["../src/components/Kbd/Kbd.tsx"],"mappings":";;;;;KAGY,SAAA;AAAA,UAEK,QAAA;EACf,SAAA;EACA,MAAA,GAAS,SAAA;EACT,cAAA;AAAA;AAAA,UAGe,aAAA;EACf,SAAA;AAAA;AAAA;EA4LoB,SAAA;EAAW,MAAA;EAAQ,cAAA;EAA0B,QAAA;EAAA,GAAa;AAAA,GAAS,QAAA,GAAW,cAAA,UAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA;;;;EA4B9F,SAAA;EAAA,GAAc;AAAA,GAAS,aAAA,GAAgB,cAAA,UAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA"}
1
+ {"version":3,"file":"Kbd.d.ts","names":[],"sources":["../src/components/Kbd/Kbd.tsx"],"mappings":";;;;;KAGY,SAAA;AAAA,UAEK,QAAA;EACf,SAAA;EACA,MAAA,GAAS,SAAA;EACT,cAAA;AAAA;AAAA,UAGe,aAAA;EACf,SAAA;AAAA;AAAA;EA2FoB,SAAA;EAAW,MAAA;EAAQ,cAAA;EAA0B,QAAA;EAAA,GAAa;AAAA,GAAS,QAAA,GAAW,cAAA,UAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA;;;;EA4B9F,SAAA;EAAA,GAAc;AAAA,GAAS,aAAA,GAAgB,cAAA,UAAqB,oBAAA,CAAA,GAAA,CAAA,OAAA;AAAA"}
package/dist/Kbd.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Kbd.js","names":[],"sources":["../src/components/Kbd/Kbd.tsx"],"sourcesContent":["import { cn } from '@utils/twUtils'\nimport { type ComponentProps } from 'react'\n\nexport type KbdSymbol = 'arrowLeft' | 'arrowRight' | 'arrowUp' | 'arrowDown' | 'command' | 'option' | 'shift' | 'control' | 'return' | 'delete'\n\nexport interface KbdProps {\n className?: string\n symbol?: KbdSymbol\n symbolPosition?: 'start' | 'end'\n}\n\nexport interface KbdGroupProps {\n className?: string\n}\n\nconst symbolMap = {\n arrowLeft: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M10 5.75L3.75 12L10 18.25M4.5 12H20.25'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n arrowRight: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M14 5.75L20.25 12L14 18.25M19.5 12H3.75'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n arrowUp: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M5.75 10L12 3.75L18.25 10M12 20.25V4.5'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n arrowDown: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M18 14L12 20L6 14M12 19V4'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n command: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M9.25 9.25V6.5C9.25 4.98122 8.01878 3.75 6.5 3.75C4.98122 3.75 3.75 4.98122 3.75 6.5C3.75 8.01878 4.98122 9.25 6.5 9.25H9.25ZM9.25 9.25H14.75M9.25 9.25V14.75M14.75 9.25V6.5C14.75 4.98122 15.9812 3.75 17.5 3.75C19.0188 3.75 20.25 4.98122 20.25 6.5C20.25 8.01878 19.0188 9.25 17.5 9.25H14.75ZM14.75 9.25V14.75M14.75 14.75H9.25M14.75 14.75V17.5C14.75 19.0188 15.9812 20.25 17.5 20.25C19.0188 20.25 20.25 19.0188 20.25 17.5C20.25 15.9812 19.0188 14.75 17.5 14.75H14.75ZM9.25 14.75V17.5C9.25 19.0188 8.01878 20.25 6.5 20.25C4.98122 20.25 3.75 19.0188 3.75 17.5C3.75 15.9812 4.98122 14.75 6.5 14.75H9.25Z'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='square'\n />\n </svg>\n ),\n option: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M3.75 4.75H7.40962C7.77384 4.75 8.10925 4.94802 8.2852 5.26692L15.7148 18.7331C15.8907 19.052 16.2262 19.25 16.5904 19.25H20.25M15.75 4.75H20.25'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n shift: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M2.91032 11.5511L11.2848 2.98182C11.6771 2.5804 12.3229 2.5804 12.7152 2.98182L21.0897 11.5511C21.7085 12.1843 21.2599 13.25 20.3745 13.25H17.1316V19.25C17.1316 19.8023 16.6839 20.25 16.1316 20.25H7.86842C7.31614 20.25 6.86842 19.8023 6.86842 19.25V13.25H3.62551C2.74013 13.25 2.2915 12.1843 2.91032 11.5511Z'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='square'\n strokeLinejoin='round'\n />\n </svg>\n ),\n control: (\n <svg\n className='-translate-y-0.5'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M8 13.9999L11.6464 10.3535C11.8417 10.1582 12.1583 10.1582 12.3536 10.3535L16 13.9999'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n return: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M20.25 4C19.8358 4 19.5 4.33579 19.5 4.75V14.25C19.5 14.3881 19.3881 14.5 19.25 14.5H5.56066L8.28033 11.7803C8.57322 11.4874 8.57322 11.0126 8.28033 10.7197C7.98744 10.4268 7.51256 10.4268 7.21967 10.7197L3.21967 14.7197C2.92678 15.0126 2.92678 15.4874 3.21967 15.7803L7.21967 19.7803C7.51256 20.0732 7.98744 20.0732 8.28033 19.7803C8.57322 19.4874 8.57322 19.0126 8.28033 18.7197L5.56066 16H19.25C20.2165 16 21 15.2165 21 14.25V4.75C21 4.33579 20.6642 4 20.25 4Z'\n fill='currentColor'\n />\n </svg>\n ),\n delete: (\n <svg\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n >\n <path\n d='M14.9988 9.75L12.7488 12M12.7488 12L10.4988 14.25M12.7488 12L10.4988 9.75M12.7488 12L14.9988 14.25M6.55509 4.75H20.2488C20.8011 4.75 21.2488 5.19772 21.2488 5.75V18.25C21.2488 18.8023 20.8011 19.25 20.2488 19.25H6.55509C6.2092 19.25 5.88786 19.0712 5.70545 18.7774L1.82614 12.5274C1.62566 12.2044 1.62566 11.7956 1.82614 11.4726L5.70545 5.22264C5.88786 4.92875 6.2092 4.75 6.55509 4.75Z'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n} as const\n\nconst symbolLabelMap: Record<KbdSymbol, string> = {\n arrowLeft: 'Left Arrow',\n arrowRight: 'Right Arrow',\n arrowUp: 'Up Arrow',\n arrowDown: 'Down Arrow',\n command: 'Command',\n option: 'Option',\n shift: 'Shift',\n control: 'Control',\n return: 'Return',\n delete: 'Delete',\n}\n\nexport const Kbd = ({ className, symbol, symbolPosition = 'start', children, ...props }: KbdProps & ComponentProps<'kbd'>) => {\n const hasChildren = children !== undefined && children !== null && children !== ''\n const symbolElement = symbol && <span aria-hidden='true'>{symbolMap[symbol]}</span>\n\n // Derive aria-label from symbol when no children are provided, unless explicitly overridden\n const derivedAriaLabel = !hasChildren && symbol ? symbolLabelMap[symbol] : undefined\n const ariaLabel = props['aria-label'] ?? derivedAriaLabel\n\n return (\n <kbd\n className={cn(\n 'h-5 min-w-5 gap-1 rounded-sm px-1 text-xs font-medium pointer-events-none inline-flex w-fit items-center justify-center bg-kbd-bg font-mono! text-kbd-text select-none',\n `[&_svg:not([class*='size-'])]:size-3 in-data-[slot=tooltip-content]:bg-level-three`,\n className,\n )}\n data-slot='kbd'\n data-testid='spectral-kbd'\n {...props}\n aria-label={ariaLabel}\n >\n {symbolPosition === 'start' && symbolElement}\n {children}\n {symbolPosition === 'end' && symbolElement}\n </kbd>\n )\n}\nKbd.displayName = 'Kbd'\n\nexport const KbdGroup = ({ className, ...props }: KbdGroupProps & ComponentProps<'kbd'>) => {\n return (\n <kbd\n className={cn('gap-1 inline-flex items-center', className)}\n data-slot='kbd-group'\n data-testid='spectral-kbd-group'\n {...props}\n />\n )\n}\nKbdGroup.displayName = 'KbdGroup'\n"],"mappings":"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"}
1
+ {"version":3,"file":"Kbd.js","names":[],"sources":["../src/components/Kbd/Kbd.tsx"],"sourcesContent":["import { cn } from '@utils/twUtils'\nimport { type ComponentProps } from 'react'\n\nexport type KbdSymbol = 'arrowLeft' | 'arrowRight' | 'arrowUp' | 'arrowDown' | 'command' | 'option' | 'shift' | 'control' | 'return' | 'delete'\n\nexport interface KbdProps {\n className?: string\n symbol?: KbdSymbol\n symbolPosition?: 'start' | 'end'\n}\n\nexport interface KbdGroupProps {\n className?: string\n}\n\nconst symbolMap = {\n arrowLeft: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path d='M10 5.75L3.75 12L10 18.25M4.5 12H20.25' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n arrowRight: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path d='M14 5.75L20.25 12L14 18.25M19.5 12H3.75' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n arrowUp: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path d='M5.75 10L12 3.75L18.25 10M12 20.25V4.5' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n arrowDown: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path d='M18 14L12 20L6 14M12 19V4' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n command: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M9.25 9.25V6.5C9.25 4.98122 8.01878 3.75 6.5 3.75C4.98122 3.75 3.75 4.98122 3.75 6.5C3.75 8.01878 4.98122 9.25 6.5 9.25H9.25ZM9.25 9.25H14.75M9.25 9.25V14.75M14.75 9.25V6.5C14.75 4.98122 15.9812 3.75 17.5 3.75C19.0188 3.75 20.25 4.98122 20.25 6.5C20.25 8.01878 19.0188 9.25 17.5 9.25H14.75ZM14.75 9.25V14.75M14.75 14.75H9.25M14.75 14.75V17.5C14.75 19.0188 15.9812 20.25 17.5 20.25C19.0188 20.25 20.25 19.0188 20.25 17.5C20.25 15.9812 19.0188 14.75 17.5 14.75H14.75ZM9.25 14.75V17.5C9.25 19.0188 8.01878 20.25 6.5 20.25C4.98122 20.25 3.75 19.0188 3.75 17.5C3.75 15.9812 4.98122 14.75 6.5 14.75H9.25Z'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='square'\n />\n </svg>\n ),\n option: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path d='M3.75 4.75H7.40962C7.77384 4.75 8.10925 4.94802 8.2852 5.26692L15.7148 18.7331C15.8907 19.052 16.2262 19.25 16.5904 19.25H20.25M15.75 4.75H20.25' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n shift: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M2.91032 11.5511L11.2848 2.98182C11.6771 2.5804 12.3229 2.5804 12.7152 2.98182L21.0897 11.5511C21.7085 12.1843 21.2599 13.25 20.3745 13.25H17.1316V19.25C17.1316 19.8023 16.6839 20.25 16.1316 20.25H7.86842C7.31614 20.25 6.86842 19.8023 6.86842 19.25V13.25H3.62551C2.74013 13.25 2.2915 12.1843 2.91032 11.5511Z'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='square'\n strokeLinejoin='round'\n />\n </svg>\n ),\n control: (\n <svg className='-translate-y-0.5' width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path d='M8 13.9999L11.6464 10.3535C11.8417 10.1582 12.1583 10.1582 12.3536 10.3535L16 13.9999' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n return: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M20.25 4C19.8358 4 19.5 4.33579 19.5 4.75V14.25C19.5 14.3881 19.3881 14.5 19.25 14.5H5.56066L8.28033 11.7803C8.57322 11.4874 8.57322 11.0126 8.28033 10.7197C7.98744 10.4268 7.51256 10.4268 7.21967 10.7197L3.21967 14.7197C2.92678 15.0126 2.92678 15.4874 3.21967 15.7803L7.21967 19.7803C7.51256 20.0732 7.98744 20.0732 8.28033 19.7803C8.57322 19.4874 8.57322 19.0126 8.28033 18.7197L5.56066 16H19.25C20.2165 16 21 15.2165 21 14.25V4.75C21 4.33579 20.6642 4 20.25 4Z'\n fill='currentColor'\n />\n </svg>\n ),\n delete: (\n <svg width='14' height='14' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'>\n <path\n d='M14.9988 9.75L12.7488 12M12.7488 12L10.4988 14.25M12.7488 12L10.4988 9.75M12.7488 12L14.9988 14.25M6.55509 4.75H20.2488C20.8011 4.75 21.2488 5.19772 21.2488 5.75V18.25C21.2488 18.8023 20.8011 19.25 20.2488 19.25H6.55509C6.2092 19.25 5.88786 19.0712 5.70545 18.7774L1.82614 12.5274C1.62566 12.2044 1.62566 11.7956 1.82614 11.4726L5.70545 5.22264C5.88786 4.92875 6.2092 4.75 6.55509 4.75Z'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n ),\n} as const\n\nconst symbolLabelMap: Record<KbdSymbol, string> = {\n arrowLeft: 'Left Arrow',\n arrowRight: 'Right Arrow',\n arrowUp: 'Up Arrow',\n arrowDown: 'Down Arrow',\n command: 'Command',\n option: 'Option',\n shift: 'Shift',\n control: 'Control',\n return: 'Return',\n delete: 'Delete',\n}\n\nexport const Kbd = ({ className, symbol, symbolPosition = 'start', children, ...props }: KbdProps & ComponentProps<'kbd'>) => {\n const hasChildren = children !== undefined && children !== null && children !== ''\n const symbolElement = symbol && <span aria-hidden='true'>{symbolMap[symbol]}</span>\n\n // Derive aria-label from symbol when no children are provided, unless explicitly overridden\n const derivedAriaLabel = !hasChildren && symbol ? symbolLabelMap[symbol] : undefined\n const ariaLabel = props['aria-label'] ?? derivedAriaLabel\n\n return (\n <kbd\n className={cn(\n 'h-5 min-w-5 gap-1 rounded-sm px-1 text-xs font-medium pointer-events-none inline-flex w-fit items-center justify-center bg-kbd-bg font-mono! text-kbd-text select-none',\n `[&_svg:not([class*='size-'])]:size-3 in-data-[slot=tooltip-content]:bg-level-three`,\n className,\n )}\n data-slot='kbd'\n data-testid='spectral-kbd'\n {...props}\n aria-label={ariaLabel}\n >\n {symbolPosition === 'start' && symbolElement}\n {children}\n {symbolPosition === 'end' && symbolElement}\n </kbd>\n )\n}\nKbd.displayName = 'Kbd'\n\nexport const KbdGroup = ({ className, ...props }: KbdGroupProps & ComponentProps<'kbd'>) => {\n return <kbd className={cn('gap-1 inline-flex items-center', className)} data-slot='kbd-group' data-testid='spectral-kbd-group' {...props} />\n}\nKbdGroup.displayName = 'KbdGroup'\n"],"mappings":"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"}