@lobehub/ui 6.0.0-beta.1 → 6.0.0-beta.10

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 (1029) hide show
  1. package/README.md +3 -1
  2. package/es/Accordion/Accordion.mjs +3 -3
  3. package/es/Accordion/Accordion.mjs.map +1 -1
  4. package/es/Accordion/atoms.mjs +2 -2
  5. package/es/Accordion/atoms.mjs.map +1 -1
  6. package/es/Accordion/style.d.mts +1 -1
  7. package/es/ActionIcon/ActionIcon.mjs +2 -2
  8. package/es/ActionIcon/ActionIcon.mjs.map +1 -1
  9. package/es/ActionIcon/style.mjs +1 -1
  10. package/es/ActionIcon/style.mjs.map +1 -1
  11. package/es/ActionIcon/type.d.mts +1 -0
  12. package/es/Alert/Alert.mjs +5 -5
  13. package/es/Alert/Alert.mjs.map +1 -1
  14. package/es/Alert/type.d.mts +1 -0
  15. package/es/Anchor/Anchor.mjs +2 -2
  16. package/es/Anchor/Anchor.mjs.map +1 -1
  17. package/es/AutoComplete/AutoComplete.mjs +5 -5
  18. package/es/AutoComplete/AutoComplete.mjs.map +1 -1
  19. package/es/AutoComplete/style.d.mts +1 -0
  20. package/es/AutoComplete/style.mjs +2 -2
  21. package/es/AutoComplete/style.mjs.map +1 -1
  22. package/es/AutoComplete/type.d.mts +1 -0
  23. package/es/Avatar/Avatar.mjs +2 -2
  24. package/es/Avatar/Avatar.mjs.map +1 -1
  25. package/es/Avatar/AvatarGroup/index.mjs +2 -2
  26. package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
  27. package/es/Breadcrumb/Breadcrumb.mjs +2 -2
  28. package/es/Breadcrumb/Breadcrumb.mjs.map +1 -1
  29. package/es/Button/Button.mjs +1 -1
  30. package/es/Button/Button.mjs.map +1 -1
  31. package/es/Button/style.d.mts +8 -1
  32. package/es/Button/style.mjs +41 -18
  33. package/es/Button/style.mjs.map +1 -1
  34. package/es/Button/type.d.mts +1 -0
  35. package/es/Carousel/Carousel.mjs +1 -1
  36. package/es/Carousel/Carousel.mjs.map +1 -1
  37. package/es/Checkbox/Checkbox.mjs +3 -3
  38. package/es/Checkbox/Checkbox.mjs.map +1 -1
  39. package/es/Checkbox/type.d.mts +1 -0
  40. package/es/CodeDiff/CodeDiff.mjs.map +1 -1
  41. package/es/CodeDiff/DiffPanel.mjs +4 -4
  42. package/es/CodeDiff/DiffPanel.mjs.map +1 -1
  43. package/es/CodeDiff/PatchDiff.mjs.map +1 -1
  44. package/es/CodeDiff/theme.mjs.map +1 -1
  45. package/es/CodeDiff/type.d.mts +2 -2
  46. package/es/CodeEditor/CodeEditor.mjs +5 -5
  47. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  48. package/es/ColorPicker/ColorInputs.mjs +136 -0
  49. package/es/ColorPicker/ColorInputs.mjs.map +1 -0
  50. package/es/ColorPicker/ColorPanel.mjs +145 -0
  51. package/es/ColorPicker/ColorPanel.mjs.map +1 -0
  52. package/es/ColorPicker/ColorPicker.mjs +63 -200
  53. package/es/ColorPicker/ColorPicker.mjs.map +1 -1
  54. package/es/ColorPicker/SaturationArea.mjs +2 -1
  55. package/es/ColorPicker/SaturationArea.mjs.map +1 -1
  56. package/es/ColorPicker/Swatch.mjs +24 -0
  57. package/es/ColorPicker/Swatch.mjs.map +1 -0
  58. package/es/ColorPicker/Swatches.mjs +66 -0
  59. package/es/ColorPicker/Swatches.mjs.map +1 -0
  60. package/es/ColorPicker/Trigger.mjs +112 -0
  61. package/es/ColorPicker/Trigger.mjs.map +1 -0
  62. package/es/ColorPicker/color.mjs +25 -1
  63. package/es/ColorPicker/color.mjs.map +1 -1
  64. package/es/ColorPicker/recent.mjs +25 -0
  65. package/es/ColorPicker/recent.mjs.map +1 -0
  66. package/es/ColorPicker/style.mjs +269 -70
  67. package/es/ColorPicker/style.mjs.map +1 -1
  68. package/es/ColorPicker/type.d.mts +15 -0
  69. package/es/ColorSwatches/ColorSwatches.mjs +18 -23
  70. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  71. package/es/ColorSwatches/CustomPicker.mjs +101 -0
  72. package/es/ColorSwatches/CustomPicker.mjs.map +1 -0
  73. package/es/ColorSwatches/index.d.mts +2 -2
  74. package/es/ColorSwatches/marker.stylex.mjs +9 -0
  75. package/es/ColorSwatches/marker.stylex.mjs.map +1 -0
  76. package/es/ColorSwatches/style.mjs +36 -0
  77. package/es/ColorSwatches/style.mjs.map +1 -1
  78. package/es/ColorSwatches/type.d.mts +12 -2
  79. package/es/ConfigProvider/cdnAssets.mjs +6 -0
  80. package/es/ConfigProvider/cdnAssets.mjs.map +1 -0
  81. package/es/ConfigProvider/index.mjs +2 -1
  82. package/es/ConfigProvider/index.mjs.map +1 -1
  83. package/es/ContextMenu/ContextMenuHost.mjs +2 -2
  84. package/es/ContextMenu/ContextMenuHost.mjs.map +1 -1
  85. package/es/ContextMenu/ContextMenuTrigger.mjs +2 -2
  86. package/es/ContextMenu/ContextMenuTrigger.mjs.map +1 -1
  87. package/es/ContextMenu/renderItems.mjs +3 -3
  88. package/es/ContextMenu/renderItems.mjs.map +1 -1
  89. package/es/ContextMenu/store.d.mts +0 -1
  90. package/es/ContextMenu/store.mjs.map +1 -1
  91. package/es/DatePicker/DatePicker.d.mts +9 -2
  92. package/es/DatePicker/DatePicker.mjs +15 -85
  93. package/es/DatePicker/DatePicker.mjs.map +1 -1
  94. package/es/DatePicker/DateRangePicker.d.mts +3 -2
  95. package/es/DatePicker/DateRangePicker.mjs +3 -125
  96. package/es/DatePicker/DateRangePicker.mjs.map +1 -1
  97. package/es/DatePicker/DayjsDatePicker.d.mts +12 -0
  98. package/es/DatePicker/DayjsDatePicker.mjs +19 -0
  99. package/es/DatePicker/DayjsDatePicker.mjs.map +1 -0
  100. package/es/DatePicker/DayjsDateRangePicker.d.mts +7 -0
  101. package/es/DatePicker/DayjsDateRangePicker.mjs +8 -0
  102. package/es/DatePicker/DayjsDateRangePicker.mjs.map +1 -0
  103. package/es/DatePicker/PurePanel.mjs +65 -0
  104. package/es/DatePicker/PurePanel.mjs.map +1 -0
  105. package/es/DatePicker/RangePicker.mjs +121 -0
  106. package/es/DatePicker/RangePicker.mjs.map +1 -0
  107. package/es/DatePicker/SinglePicker.mjs +134 -0
  108. package/es/DatePicker/SinglePicker.mjs.map +1 -0
  109. package/es/DatePicker/core/PickerInput/Popup/Footer.mjs +57 -0
  110. package/es/DatePicker/core/PickerInput/Popup/Footer.mjs.map +1 -0
  111. package/es/DatePicker/core/PickerInput/Popup/PopupPanel.mjs +57 -0
  112. package/es/DatePicker/core/PickerInput/Popup/PopupPanel.mjs.map +1 -0
  113. package/es/DatePicker/core/PickerInput/Popup/PresetPanel.mjs +29 -0
  114. package/es/DatePicker/core/PickerInput/Popup/PresetPanel.mjs.map +1 -0
  115. package/es/DatePicker/core/PickerInput/Popup/index.mjs +133 -0
  116. package/es/DatePicker/core/PickerInput/Popup/index.mjs.map +1 -0
  117. package/es/DatePicker/core/PickerInput/RangePicker.d.mts +51 -0
  118. package/es/DatePicker/core/PickerInput/RangePicker.mjs +343 -0
  119. package/es/DatePicker/core/PickerInput/RangePicker.mjs.map +1 -0
  120. package/es/DatePicker/core/PickerInput/Selector/ClearIcon.mjs +27 -0
  121. package/es/DatePicker/core/PickerInput/Selector/ClearIcon.mjs.map +1 -0
  122. package/es/DatePicker/core/PickerInput/Selector/Icon.mjs +19 -0
  123. package/es/DatePicker/core/PickerInput/Selector/Icon.mjs.map +1 -0
  124. package/es/DatePicker/core/PickerInput/Selector/Input.mjs +237 -0
  125. package/es/DatePicker/core/PickerInput/Selector/Input.mjs.map +1 -0
  126. package/es/DatePicker/core/PickerInput/Selector/MaskFormat.mjs +70 -0
  127. package/es/DatePicker/core/PickerInput/Selector/MaskFormat.mjs.map +1 -0
  128. package/es/DatePicker/core/PickerInput/Selector/RangeSelector.d.mts +8 -0
  129. package/es/DatePicker/core/PickerInput/Selector/RangeSelector.mjs +136 -0
  130. package/es/DatePicker/core/PickerInput/Selector/RangeSelector.mjs.map +1 -0
  131. package/es/DatePicker/core/PickerInput/Selector/SingleSelector/HoverSelector.mjs +28 -0
  132. package/es/DatePicker/core/PickerInput/Selector/SingleSelector/HoverSelector.mjs.map +1 -0
  133. package/es/DatePicker/core/PickerInput/Selector/SingleSelector/MultipleDates.mjs +69 -0
  134. package/es/DatePicker/core/PickerInput/Selector/SingleSelector/MultipleDates.mjs.map +1 -0
  135. package/es/DatePicker/core/PickerInput/Selector/SingleSelector/index.mjs +111 -0
  136. package/es/DatePicker/core/PickerInput/Selector/SingleSelector/index.mjs.map +1 -0
  137. package/es/DatePicker/core/PickerInput/Selector/hooks/useClearIcon.mjs +18 -0
  138. package/es/DatePicker/core/PickerInput/Selector/hooks/useClearIcon.mjs.map +1 -0
  139. package/es/DatePicker/core/PickerInput/Selector/hooks/useInputProps.mjs +108 -0
  140. package/es/DatePicker/core/PickerInput/Selector/hooks/useInputProps.mjs.map +1 -0
  141. package/es/DatePicker/core/PickerInput/Selector/hooks/useRootProps.mjs +11 -0
  142. package/es/DatePicker/core/PickerInput/Selector/hooks/useRootProps.mjs.map +1 -0
  143. package/es/DatePicker/core/PickerInput/Selector/util.mjs +20 -0
  144. package/es/DatePicker/core/PickerInput/Selector/util.mjs.map +1 -0
  145. package/es/DatePicker/core/PickerInput/SinglePicker.d.mts +55 -0
  146. package/es/DatePicker/core/PickerInput/SinglePicker.mjs +318 -0
  147. package/es/DatePicker/core/PickerInput/SinglePicker.mjs.map +1 -0
  148. package/es/DatePicker/core/PickerInput/context.mjs +7 -0
  149. package/es/DatePicker/core/PickerInput/context.mjs.map +1 -0
  150. package/es/DatePicker/core/PickerInput/hooks/useCellRender.mjs +30 -0
  151. package/es/DatePicker/core/PickerInput/hooks/useCellRender.mjs.map +1 -0
  152. package/es/DatePicker/core/PickerInput/hooks/useDelayState.mjs +37 -0
  153. package/es/DatePicker/core/PickerInput/hooks/useDelayState.mjs.map +1 -0
  154. package/es/DatePicker/core/PickerInput/hooks/useDisabledBoundary.mjs +18 -0
  155. package/es/DatePicker/core/PickerInput/hooks/useDisabledBoundary.mjs.map +1 -0
  156. package/es/DatePicker/core/PickerInput/hooks/useFieldFormat.mjs +20 -0
  157. package/es/DatePicker/core/PickerInput/hooks/useFieldFormat.mjs.map +1 -0
  158. package/es/DatePicker/core/PickerInput/hooks/useFieldsInvalidate.mjs +31 -0
  159. package/es/DatePicker/core/PickerInput/hooks/useFieldsInvalidate.mjs.map +1 -0
  160. package/es/DatePicker/core/PickerInput/hooks/useFilledProps.mjs +98 -0
  161. package/es/DatePicker/core/PickerInput/hooks/useFilledProps.mjs.map +1 -0
  162. package/es/DatePicker/core/PickerInput/hooks/useFocusEvents.mjs +41 -0
  163. package/es/DatePicker/core/PickerInput/hooks/useFocusEvents.mjs.map +1 -0
  164. package/es/DatePicker/core/PickerInput/hooks/useFocusLock.mjs +34 -0
  165. package/es/DatePicker/core/PickerInput/hooks/useFocusLock.mjs.map +1 -0
  166. package/es/DatePicker/core/PickerInput/hooks/useHoverStore.mjs +35 -0
  167. package/es/DatePicker/core/PickerInput/hooks/useHoverStore.mjs.map +1 -0
  168. package/es/DatePicker/core/PickerInput/hooks/useInputReadOnly.mjs +9 -0
  169. package/es/DatePicker/core/PickerInput/hooks/useInputReadOnly.mjs.map +1 -0
  170. package/es/DatePicker/core/PickerInput/hooks/useInvalidate.mjs +36 -0
  171. package/es/DatePicker/core/PickerInput/hooks/useInvalidate.mjs.map +1 -0
  172. package/es/DatePicker/core/PickerInput/hooks/useLockEffect.mjs +27 -0
  173. package/es/DatePicker/core/PickerInput/hooks/useLockEffect.mjs.map +1 -0
  174. package/es/DatePicker/core/PickerInput/hooks/useOpen.mjs +18 -0
  175. package/es/DatePicker/core/PickerInput/hooks/useOpen.mjs.map +1 -0
  176. package/es/DatePicker/core/PickerInput/hooks/usePickerRef.mjs +19 -0
  177. package/es/DatePicker/core/PickerInput/hooks/usePickerRef.mjs.map +1 -0
  178. package/es/DatePicker/core/PickerInput/hooks/usePresets.mjs +20 -0
  179. package/es/DatePicker/core/PickerInput/hooks/usePresets.mjs.map +1 -0
  180. package/es/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.mjs +24 -0
  181. package/es/DatePicker/core/PickerInput/hooks/useRangeDisabledDate.mjs.map +1 -0
  182. package/es/DatePicker/core/PickerInput/hooks/useRangePickerValue.mjs +107 -0
  183. package/es/DatePicker/core/PickerInput/hooks/useRangePickerValue.mjs.map +1 -0
  184. package/es/DatePicker/core/PickerInput/hooks/useRangeValue.mjs +144 -0
  185. package/es/DatePicker/core/PickerInput/hooks/useRangeValue.mjs.map +1 -0
  186. package/es/DatePicker/core/PickerInput/hooks/useRangeValueChange.mjs +219 -0
  187. package/es/DatePicker/core/PickerInput/hooks/useRangeValueChange.mjs.map +1 -0
  188. package/es/DatePicker/core/PickerInput/hooks/useShowNow.mjs +11 -0
  189. package/es/DatePicker/core/PickerInput/hooks/useShowNow.mjs.map +1 -0
  190. package/es/DatePicker/core/PickerPanel/DatePanel/index.mjs +131 -0
  191. package/es/DatePicker/core/PickerPanel/DatePanel/index.mjs.map +1 -0
  192. package/es/DatePicker/core/PickerPanel/DateTimePanel/index.mjs +35 -0
  193. package/es/DatePicker/core/PickerPanel/DateTimePanel/index.mjs.map +1 -0
  194. package/es/DatePicker/core/PickerPanel/DecadePanel/index.mjs +84 -0
  195. package/es/DatePicker/core/PickerPanel/DecadePanel/index.mjs.map +1 -0
  196. package/es/DatePicker/core/PickerPanel/MonthPanel/index.mjs +73 -0
  197. package/es/DatePicker/core/PickerPanel/MonthPanel/index.mjs.map +1 -0
  198. package/es/DatePicker/core/PickerPanel/PanelBody.mjs +95 -0
  199. package/es/DatePicker/core/PickerPanel/PanelBody.mjs.map +1 -0
  200. package/es/DatePicker/core/PickerPanel/PanelHeader.mjs +130 -0
  201. package/es/DatePicker/core/PickerPanel/PanelHeader.mjs.map +1 -0
  202. package/es/DatePicker/core/PickerPanel/QuarterPanel/index.mjs +64 -0
  203. package/es/DatePicker/core/PickerPanel/QuarterPanel/index.mjs.map +1 -0
  204. package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/ClockDial.mjs +108 -0
  205. package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/ClockDial.mjs.map +1 -0
  206. package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/geometry.mjs +44 -0
  207. package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/geometry.mjs.map +1 -0
  208. package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/index.mjs +157 -0
  209. package/es/DatePicker/core/PickerPanel/TimePanel/TimeClock/index.mjs.map +1 -0
  210. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/TimeColumn.mjs +100 -0
  211. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/TimeColumn.mjs.map +1 -0
  212. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/index.mjs +71 -0
  213. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/index.mjs.map +1 -0
  214. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useScrollTo.mjs +62 -0
  215. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useScrollTo.mjs.map +1 -0
  216. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useTimeState.mjs +200 -0
  217. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/useTimeState.mjs.map +1 -0
  218. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/util.mjs +25 -0
  219. package/es/DatePicker/core/PickerPanel/TimePanel/TimePanelBody/util.mjs.map +1 -0
  220. package/es/DatePicker/core/PickerPanel/TimePanel/index.mjs +31 -0
  221. package/es/DatePicker/core/PickerPanel/TimePanel/index.mjs.map +1 -0
  222. package/es/DatePicker/core/PickerPanel/WeekPanel/index.mjs +34 -0
  223. package/es/DatePicker/core/PickerPanel/WeekPanel/index.mjs.map +1 -0
  224. package/es/DatePicker/core/PickerPanel/YearPanel/index.mjs +92 -0
  225. package/es/DatePicker/core/PickerPanel/YearPanel/index.mjs.map +1 -0
  226. package/es/DatePicker/core/PickerPanel/context.mjs +48 -0
  227. package/es/DatePicker/core/PickerPanel/context.mjs.map +1 -0
  228. package/es/DatePicker/core/PickerPanel/index.d.mts +1 -0
  229. package/es/DatePicker/core/PickerPanel/index.mjs +175 -0
  230. package/es/DatePicker/core/PickerPanel/index.mjs.map +1 -0
  231. package/es/DatePicker/core/PickerPopup.mjs +118 -0
  232. package/es/DatePicker/core/PickerPopup.mjs.map +1 -0
  233. package/es/DatePicker/core/generate/dayjs.mjs +109 -0
  234. package/es/DatePicker/core/generate/dayjs.mjs.map +1 -0
  235. package/es/DatePicker/core/generate/index.d.mts +40 -0
  236. package/es/DatePicker/core/hooks/react.mjs +58 -0
  237. package/es/DatePicker/core/hooks/react.mjs.map +1 -0
  238. package/es/DatePicker/core/hooks/useLocale.mjs +51 -0
  239. package/es/DatePicker/core/hooks/useLocale.mjs.map +1 -0
  240. package/es/DatePicker/core/hooks/useSemantic.mjs +20 -0
  241. package/es/DatePicker/core/hooks/useSemantic.mjs.map +1 -0
  242. package/es/DatePicker/core/hooks/useSyncState.mjs +25 -0
  243. package/es/DatePicker/core/hooks/useSyncState.mjs.map +1 -0
  244. package/es/DatePicker/core/hooks/useTimeConfig.mjs +173 -0
  245. package/es/DatePicker/core/hooks/useTimeConfig.mjs.map +1 -0
  246. package/es/DatePicker/core/hooks/useTimeInfo.mjs +110 -0
  247. package/es/DatePicker/core/hooks/useTimeInfo.mjs.map +1 -0
  248. package/es/DatePicker/core/hooks/useToggleDates.mjs +21 -0
  249. package/es/DatePicker/core/hooks/useToggleDates.mjs.map +1 -0
  250. package/es/DatePicker/core/index.d.mts +5 -0
  251. package/es/DatePicker/core/index.mjs +9 -0
  252. package/es/DatePicker/core/index.mjs.map +1 -0
  253. package/es/DatePicker/core/interface.d.mts +325 -0
  254. package/es/DatePicker/core/locale/common.mjs +11 -0
  255. package/es/DatePicker/core/locale/common.mjs.map +1 -0
  256. package/es/DatePicker/core/locale/en_US.mjs +39 -0
  257. package/es/DatePicker/core/locale/en_US.mjs.map +1 -0
  258. package/es/DatePicker/core/utils/common.mjs +73 -0
  259. package/es/DatePicker/core/utils/common.mjs.map +1 -0
  260. package/es/DatePicker/core/utils/dateUtil.mjs +106 -0
  261. package/es/DatePicker/core/utils/dateUtil.mjs.map +1 -0
  262. package/es/DatePicker/core/utils/miscUtil.mjs +46 -0
  263. package/es/DatePicker/core/utils/miscUtil.mjs.map +1 -0
  264. package/es/DatePicker/core/utils/uiUtil.mjs +9 -0
  265. package/es/DatePicker/core/utils/uiUtil.mjs.map +1 -0
  266. package/es/DatePicker/dateGenerateConfig.mjs +52 -0
  267. package/es/DatePicker/dateGenerateConfig.mjs.map +1 -0
  268. package/es/DatePicker/generateConfig.mjs +12 -0
  269. package/es/DatePicker/generateConfig.mjs.map +1 -0
  270. package/es/DatePicker/generatePicker.d.mts +12 -0
  271. package/es/DatePicker/generatePicker.mjs +22 -0
  272. package/es/DatePicker/generatePicker.mjs.map +1 -0
  273. package/es/DatePicker/index.d.mts +8 -3
  274. package/es/DatePicker/index.mjs +5 -1
  275. package/es/DatePicker/legacyDate.mjs +58 -0
  276. package/es/DatePicker/legacyDate.mjs.map +1 -0
  277. package/es/DatePicker/locale.d.mts +15 -0
  278. package/es/DatePicker/locale.mjs +143 -0
  279. package/es/DatePicker/locale.mjs.map +1 -0
  280. package/es/DatePicker/semantic.mjs +29 -0
  281. package/es/DatePicker/semantic.mjs.map +1 -0
  282. package/es/DatePicker/style.mjs +3 -155
  283. package/es/DatePicker/style.mjs.map +1 -1
  284. package/es/DatePicker/type.d.mts +294 -27
  285. package/es/DatePicker/usePanelKeyboard.mjs +230 -0
  286. package/es/DatePicker/usePanelKeyboard.mjs.map +1 -0
  287. package/es/DatePicker/usePickerShared.mjs +106 -0
  288. package/es/DatePicker/usePickerShared.mjs.map +1 -0
  289. package/es/DatePicker/usePresetActive.mjs +49 -0
  290. package/es/DatePicker/usePresetActive.mjs.map +1 -0
  291. package/es/DraggablePanel/atoms.mjs +6 -6
  292. package/es/DraggablePanel/atoms.mjs.map +1 -1
  293. package/es/DraggableSideNav/DraggableSideNav.mjs +5 -5
  294. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  295. package/es/Drawer/Drawer.mjs +2 -2
  296. package/es/Drawer/Drawer.mjs.map +1 -1
  297. package/es/Drawer/atoms.d.mts +1 -0
  298. package/es/Drawer/atoms.mjs +7 -7
  299. package/es/Drawer/atoms.mjs.map +1 -1
  300. package/es/Drawer/constants.d.mts +1 -0
  301. package/es/Drawer/style.mjs.map +1 -1
  302. package/es/DropdownMenu/atoms.mjs +23 -23
  303. package/es/DropdownMenu/atoms.mjs.map +1 -1
  304. package/es/DropdownMenu/sharedStyle.mjs +2 -2
  305. package/es/DropdownMenu/sharedStyle.mjs.map +1 -1
  306. package/es/EditableText/ControlInput.mjs +42 -29
  307. package/es/EditableText/ControlInput.mjs.map +1 -1
  308. package/es/EditableText/EditableText.mjs +2 -2
  309. package/es/EditableText/EditableText.mjs.map +1 -1
  310. package/es/EditorSlashMenu/atoms.mjs +12 -12
  311. package/es/EditorSlashMenu/atoms.mjs.map +1 -1
  312. package/es/EmojiPicker/EmojiPicker.mjs +10 -16
  313. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  314. package/es/EmojiPicker/loadEmojiData.mjs +6 -0
  315. package/es/EmojiPicker/loadEmojiData.mjs.map +1 -0
  316. package/es/EmojiPicker/useEmojiMartI18n.mjs +37 -0
  317. package/es/EmojiPicker/useEmojiMartI18n.mjs.map +1 -0
  318. package/es/FileTypeIcon/type.d.mts +1 -0
  319. package/es/FloatingPanel/FloatingPanel.mjs +2 -2
  320. package/es/FloatingPanel/FloatingPanel.mjs.map +1 -1
  321. package/es/FloatingPanel/style.mjs +3 -2
  322. package/es/FloatingPanel/style.mjs.map +1 -1
  323. package/es/Form/type.d.mts +1 -0
  324. package/es/FormKit/List.mjs +2 -2
  325. package/es/FormKit/List.mjs.map +1 -1
  326. package/es/FormKit/engine/tanstack.mjs +1 -1
  327. package/es/FormKit/engine/tanstack.mjs.map +1 -1
  328. package/es/Grid/style.mjs +1 -1
  329. package/es/Grid/style.mjs.map +1 -1
  330. package/es/GroupAvatar/type.d.mts +1 -0
  331. package/es/Highlighter/FullFeatured.mjs +2 -2
  332. package/es/Highlighter/FullFeatured.mjs.map +1 -1
  333. package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs +2 -2
  334. package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
  335. package/es/Highlighter/SyntaxHighlighter/index.mjs +4 -4
  336. package/es/Highlighter/SyntaxHighlighter/index.mjs.map +1 -1
  337. package/es/Highlighter/const.d.mts +1 -0
  338. package/es/Highlighter/style.mjs +2 -2
  339. package/es/Highlighter/style.mjs.map +1 -1
  340. package/es/HotkeyInput/HotkeyInput.mjs +1 -1
  341. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  342. package/es/HtmlPreview/HtmlPreview.mjs +2 -2
  343. package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
  344. package/es/Icon/Icon.mjs +2 -2
  345. package/es/Icon/Icon.mjs.map +1 -1
  346. package/es/Image/type.d.mts +1 -0
  347. package/es/Image/viewer/ImageViewer.mjs +2 -1
  348. package/es/Image/viewer/ImageViewer.mjs.map +1 -1
  349. package/es/Image/viewer/Toolbar.mjs +19 -6
  350. package/es/Image/viewer/Toolbar.mjs.map +1 -1
  351. package/es/Image/viewer/ViewerChrome.mjs.map +1 -1
  352. package/es/ImageSelect/ImageSelect.mjs +1 -1
  353. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  354. package/es/Input/Input.mjs +7 -5
  355. package/es/Input/Input.mjs.map +1 -1
  356. package/es/Input/TextArea.mjs +1 -1
  357. package/es/Input/TextArea.mjs.map +1 -1
  358. package/es/Input/style.d.mts +1 -0
  359. package/es/Input/style.mjs +3 -3
  360. package/es/Input/style.mjs.map +1 -1
  361. package/es/Input/type.d.mts +1 -0
  362. package/es/List/ListRow.mjs +3 -3
  363. package/es/List/ListRow.mjs.map +1 -1
  364. package/es/Markdown/Markdown.mjs +2 -2
  365. package/es/Markdown/Markdown.mjs.map +1 -1
  366. package/es/Markdown/Typography.mjs +2 -2
  367. package/es/Markdown/Typography.mjs.map +1 -1
  368. package/es/Markdown/plugins/remarkColor.d.mts +1 -0
  369. package/es/Markdown/plugins/remarkGfmPlus.d.mts +1 -0
  370. package/es/Markdown/plugins/remarkVideo.d.mts +1 -0
  371. package/es/Mermaid/FullFeatured.mjs +2 -2
  372. package/es/Mermaid/FullFeatured.mjs.map +1 -1
  373. package/es/Mermaid/SyntaxMermaid/index.mjs +4 -4
  374. package/es/Mermaid/SyntaxMermaid/index.mjs.map +1 -1
  375. package/es/Mermaid/const.d.mts +1 -0
  376. package/es/Modal/atoms.d.mts +1 -0
  377. package/es/Modal/atoms.mjs +8 -8
  378. package/es/Modal/atoms.mjs.map +1 -1
  379. package/es/Modal/constants.d.mts +1 -0
  380. package/es/Modal/type.d.mts +1 -0
  381. package/es/Pagination/Pagination.mjs +182 -42
  382. package/es/Pagination/Pagination.mjs.map +1 -1
  383. package/es/Pagination/helpers.mjs +3 -3
  384. package/es/Pagination/helpers.mjs.map +1 -1
  385. package/es/Pagination/index.d.mts +2 -2
  386. package/es/Pagination/marker.stylex.mjs +9 -0
  387. package/es/Pagination/marker.stylex.mjs.map +1 -0
  388. package/es/Pagination/style.mjs +74 -4
  389. package/es/Pagination/style.mjs.map +1 -1
  390. package/es/Pagination/type.d.mts +41 -3
  391. package/es/Popover/PopoverInGroup.mjs +3 -3
  392. package/es/Popover/PopoverInGroup.mjs.map +1 -1
  393. package/es/Popover/atoms.mjs +7 -7
  394. package/es/Popover/atoms.mjs.map +1 -1
  395. package/es/Popover/style.mjs +1 -1
  396. package/es/Popover/style.mjs.map +1 -1
  397. package/es/ProTable/ProTable.d.mts +11 -0
  398. package/es/ProTable/ProTable.mjs +208 -0
  399. package/es/ProTable/ProTable.mjs.map +1 -0
  400. package/es/ProTable/hooks/useColumnRequest.mjs +55 -0
  401. package/es/ProTable/hooks/useColumnRequest.mjs.map +1 -0
  402. package/es/ProTable/hooks/useColumnsState.mjs +37 -0
  403. package/es/ProTable/hooks/useColumnsState.mjs.map +1 -0
  404. package/es/ProTable/hooks/useDelayedFlag.mjs +18 -0
  405. package/es/ProTable/hooks/useDelayedFlag.mjs.map +1 -0
  406. package/es/ProTable/hooks/useDensity.mjs +15 -0
  407. package/es/ProTable/hooks/useDensity.mjs.map +1 -0
  408. package/es/ProTable/hooks/useFetchData.mjs +97 -0
  409. package/es/ProTable/hooks/useFetchData.mjs.map +1 -0
  410. package/es/ProTable/hooks/useFullscreen.mjs +22 -0
  411. package/es/ProTable/hooks/useFullscreen.mjs.map +1 -0
  412. package/es/ProTable/hooks/usePageInfo.mjs +35 -0
  413. package/es/ProTable/hooks/usePageInfo.mjs.map +1 -0
  414. package/es/ProTable/hooks/useProColumns.mjs +123 -0
  415. package/es/ProTable/hooks/useProColumns.mjs.map +1 -0
  416. package/es/ProTable/hooks/useProLoading.mjs +19 -0
  417. package/es/ProTable/hooks/useProLoading.mjs.map +1 -0
  418. package/es/ProTable/hooks/useProLocale.mjs +22 -0
  419. package/es/ProTable/hooks/useProLocale.mjs.map +1 -0
  420. package/es/ProTable/hooks/useProRequest.mjs +137 -0
  421. package/es/ProTable/hooks/useProRequest.mjs.map +1 -0
  422. package/es/ProTable/hooks/useRowCache.mjs +11 -0
  423. package/es/ProTable/hooks/useRowCache.mjs.map +1 -0
  424. package/es/ProTable/hooks/useSearchForm.mjs +141 -0
  425. package/es/ProTable/hooks/useSearchForm.mjs.map +1 -0
  426. package/es/ProTable/hooks/useTableBindings.mjs +39 -0
  427. package/es/ProTable/hooks/useTableBindings.mjs.map +1 -0
  428. package/es/ProTable/hooks/useTableSelection.mjs +14 -0
  429. package/es/ProTable/hooks/useTableSelection.mjs.map +1 -0
  430. package/es/ProTable/index.d.mts +4 -0
  431. package/es/ProTable/index.d.ts +1 -0
  432. package/es/ProTable/index.js +1 -0
  433. package/es/ProTable/index.mjs +3 -0
  434. package/es/ProTable/locale.d.mts +15 -0
  435. package/es/ProTable/locale.mjs +66 -0
  436. package/es/ProTable/locale.mjs.map +1 -0
  437. package/es/ProTable/parts/ColumnSetting.mjs +155 -0
  438. package/es/ProTable/parts/ColumnSetting.mjs.map +1 -0
  439. package/es/ProTable/parts/FieldControl.mjs +117 -0
  440. package/es/ProTable/parts/FieldControl.mjs.map +1 -0
  441. package/es/ProTable/parts/KeywordInput.mjs +19 -0
  442. package/es/ProTable/parts/KeywordInput.mjs.map +1 -0
  443. package/es/ProTable/parts/LightFilter.mjs +70 -0
  444. package/es/ProTable/parts/LightFilter.mjs.map +1 -0
  445. package/es/ProTable/parts/OptionPopover.mjs +17 -0
  446. package/es/ProTable/parts/OptionPopover.mjs.map +1 -0
  447. package/es/ProTable/parts/SearchForm.mjs +180 -0
  448. package/es/ProTable/parts/SearchForm.mjs.map +1 -0
  449. package/es/ProTable/parts/SearchSection.mjs +33 -0
  450. package/es/ProTable/parts/SearchSection.mjs.map +1 -0
  451. package/es/ProTable/parts/TableAlert.mjs +38 -0
  452. package/es/ProTable/parts/TableAlert.mjs.map +1 -0
  453. package/es/ProTable/parts/Toolbar.mjs +50 -0
  454. package/es/ProTable/parts/Toolbar.mjs.map +1 -0
  455. package/es/ProTable/parts/ToolbarOptions.mjs +103 -0
  456. package/es/ProTable/parts/ToolbarOptions.mjs.map +1 -0
  457. package/es/ProTable/parts/renderValue.mjs +118 -0
  458. package/es/ProTable/parts/renderValue.mjs.map +1 -0
  459. package/es/ProTable/style.mjs +278 -0
  460. package/es/ProTable/style.mjs.map +1 -0
  461. package/es/ProTable/type.d.mts +397 -0
  462. package/es/ProTable/utils.mjs +152 -0
  463. package/es/ProTable/utils.mjs.map +1 -0
  464. package/es/Radio/Radio.mjs +3 -3
  465. package/es/Radio/Radio.mjs.map +1 -1
  466. package/es/Radio/type.d.mts +1 -0
  467. package/es/Rate/Rate.mjs +1 -1
  468. package/es/Rate/Rate.mjs.map +1 -1
  469. package/es/ScrollArea/atoms.mjs +4 -4
  470. package/es/ScrollArea/atoms.mjs.map +1 -1
  471. package/es/ScrollShadow/ScrollShadow.mjs +1 -1
  472. package/es/ScrollShadow/ScrollShadow.mjs.map +1 -1
  473. package/es/SearchBar/SearchBar.mjs +31 -25
  474. package/es/SearchBar/SearchBar.mjs.map +1 -1
  475. package/es/Segmented/Segmented.mjs +4 -4
  476. package/es/Segmented/Segmented.mjs.map +1 -1
  477. package/es/Segmented/atoms.d.mts +1 -0
  478. package/es/Segmented/atoms.mjs +2 -2
  479. package/es/Segmented/atoms.mjs.map +1 -1
  480. package/es/Select/Select.mjs +22 -13
  481. package/es/Select/Select.mjs.map +1 -1
  482. package/es/Select/atoms.mjs +5 -5
  483. package/es/Select/atoms.mjs.map +1 -1
  484. package/es/Select/helpers.mjs +8 -1
  485. package/es/Select/helpers.mjs.map +1 -1
  486. package/es/Select/hooks.mjs +8 -4
  487. package/es/Select/hooks.mjs.map +1 -1
  488. package/es/Select/renderOptions.mjs +2 -2
  489. package/es/Select/renderOptions.mjs.map +1 -1
  490. package/es/Select/type.d.mts +7 -0
  491. package/es/Slider/type.d.mts +1 -0
  492. package/es/Switch/Switch.mjs +2 -2
  493. package/es/Switch/Switch.mjs.map +1 -1
  494. package/es/Switch/atoms.d.mts +1 -0
  495. package/es/Switch/atoms.mjs +3 -3
  496. package/es/Switch/atoms.mjs.map +1 -1
  497. package/es/Table/Column.d.mts +8 -0
  498. package/es/Table/Column.mjs +6 -0
  499. package/es/Table/Column.mjs.map +1 -0
  500. package/es/Table/ColumnGroup.d.mts +11 -0
  501. package/es/Table/ColumnGroup.mjs +6 -0
  502. package/es/Table/ColumnGroup.mjs.map +1 -0
  503. package/es/Table/Table.d.mts +16 -2
  504. package/es/Table/Table.mjs +149 -118
  505. package/es/Table/Table.mjs.map +1 -1
  506. package/es/Table/atoms/cells.d.mts +42 -0
  507. package/es/Table/atoms/cells.mjs +72 -0
  508. package/es/Table/atoms/cells.mjs.map +1 -0
  509. package/es/Table/atoms/index.d.mts +3 -0
  510. package/es/Table/atoms/layout.d.mts +44 -0
  511. package/es/Table/atoms/layout.mjs +62 -0
  512. package/es/Table/atoms/layout.mjs.map +1 -0
  513. package/es/Table/constants.mjs +16 -0
  514. package/es/Table/constants.mjs.map +1 -0
  515. package/es/Table/engine/fixed.d.mts +1 -0
  516. package/es/Table/engine/fixed.mjs +53 -0
  517. package/es/Table/engine/fixed.mjs.map +1 -0
  518. package/es/Table/engine/types.d.mts +1 -0
  519. package/es/Table/engine/useTableEngine.mjs +180 -0
  520. package/es/Table/engine/useTableEngine.mjs.map +1 -0
  521. package/es/Table/index.d.mts +7 -2
  522. package/es/Table/index.mjs +4 -1
  523. package/es/Table/internal.d.mts +3 -0
  524. package/es/Table/pipeline/columnUtils.d.mts +5 -0
  525. package/es/Table/pipeline/columnUtils.mjs +58 -0
  526. package/es/Table/pipeline/columnUtils.mjs.map +1 -0
  527. package/es/Table/pipeline/convertChildrenToColumns.mjs +24 -0
  528. package/es/Table/pipeline/convertChildrenToColumns.mjs.map +1 -0
  529. package/es/Table/pipeline/normalizeColumns.mjs +140 -0
  530. package/es/Table/pipeline/normalizeColumns.mjs.map +1 -0
  531. package/es/Table/pipeline/selectionUtils.d.mts +9 -0
  532. package/es/Table/pipeline/selectionUtils.mjs +115 -0
  533. package/es/Table/pipeline/selectionUtils.mjs.map +1 -0
  534. package/es/Table/pipeline/useBreakpoint.mjs +36 -0
  535. package/es/Table/pipeline/useBreakpoint.mjs.map +1 -0
  536. package/es/Table/pipeline/useExpandable.mjs +45 -0
  537. package/es/Table/pipeline/useExpandable.mjs.map +1 -0
  538. package/es/Table/pipeline/useFilter.mjs +52 -0
  539. package/es/Table/pipeline/useFilter.mjs.map +1 -0
  540. package/es/Table/pipeline/useSelection.mjs +302 -0
  541. package/es/Table/pipeline/useSelection.mjs.map +1 -0
  542. package/es/Table/pipeline/useSorter.mjs +146 -0
  543. package/es/Table/pipeline/useSorter.mjs.map +1 -0
  544. package/es/Table/pipeline/useTableLocale.mjs +30 -0
  545. package/es/Table/pipeline/useTableLocale.mjs.map +1 -0
  546. package/es/Table/pipeline/useTableState.mjs +118 -0
  547. package/es/Table/pipeline/useTableState.mjs.map +1 -0
  548. package/es/Table/pipeline/useVirtualLayout.mjs +80 -0
  549. package/es/Table/pipeline/useVirtualLayout.mjs.map +1 -0
  550. package/es/Table/render/Body.mjs +150 -0
  551. package/es/Table/render/Body.mjs.map +1 -0
  552. package/es/Table/render/BodyCell.mjs +87 -0
  553. package/es/Table/render/BodyCell.mjs.map +1 -0
  554. package/es/Table/render/CellShell.mjs +84 -0
  555. package/es/Table/render/CellShell.mjs.map +1 -0
  556. package/es/Table/render/ExpandIcon.mjs +28 -0
  557. package/es/Table/render/ExpandIcon.mjs.map +1 -0
  558. package/es/Table/render/FilterDropdown.mjs +139 -0
  559. package/es/Table/render/FilterDropdown.mjs.map +1 -0
  560. package/es/Table/render/FilterPanel.mjs +152 -0
  561. package/es/Table/render/FilterPanel.mjs.map +1 -0
  562. package/es/Table/render/FixedFrost.mjs +113 -0
  563. package/es/Table/render/FixedFrost.mjs.map +1 -0
  564. package/es/Table/render/FixedHolder.mjs +51 -0
  565. package/es/Table/render/FixedHolder.mjs.map +1 -0
  566. package/es/Table/render/Header.mjs +184 -0
  567. package/es/Table/render/Header.mjs.map +1 -0
  568. package/es/Table/render/LoadingSkeleton.mjs +78 -0
  569. package/es/Table/render/LoadingSkeleton.mjs.map +1 -0
  570. package/es/Table/render/PaginationBar.mjs +71 -0
  571. package/es/Table/render/PaginationBar.mjs.map +1 -0
  572. package/es/Table/render/SelectionCells.mjs +111 -0
  573. package/es/Table/render/SelectionCells.mjs.map +1 -0
  574. package/es/Table/render/StickyScrollBar.mjs +99 -0
  575. package/es/Table/render/StickyScrollBar.mjs.map +1 -0
  576. package/es/Table/render/Summary.d.mts +16 -0
  577. package/es/Table/render/Summary.mjs +58 -0
  578. package/es/Table/render/Summary.mjs.map +1 -0
  579. package/es/Table/render/TableView.mjs +215 -0
  580. package/es/Table/render/TableView.mjs.map +1 -0
  581. package/es/Table/render/VirtualBody.mjs +101 -0
  582. package/es/Table/render/VirtualBody.mjs.map +1 -0
  583. package/es/Table/render/context.mjs +15 -0
  584. package/es/Table/render/context.mjs.map +1 -0
  585. package/es/Table/render/filterUtils.mjs +22 -0
  586. package/es/Table/render/filterUtils.mjs.map +1 -0
  587. package/es/Table/render/tableHelpers.mjs +27 -0
  588. package/es/Table/render/tableHelpers.mjs.map +1 -0
  589. package/es/Table/render/useColGroups.mjs +23 -0
  590. package/es/Table/render/useColGroups.mjs.map +1 -0
  591. package/es/Table/render/useScrollSync.mjs +104 -0
  592. package/es/Table/render/useScrollSync.mjs.map +1 -0
  593. package/es/Table/render/useViewContexts.mjs +134 -0
  594. package/es/Table/render/useViewContexts.mjs.map +1 -0
  595. package/es/Table/semantic.mjs +45 -0
  596. package/es/Table/semantic.mjs.map +1 -0
  597. package/es/Table/store/createTableStore.d.mts +1 -0
  598. package/es/Table/store/createTableStore.mjs +40 -0
  599. package/es/Table/store/createTableStore.mjs.map +1 -0
  600. package/es/Table/store/hooks.mjs +24 -0
  601. package/es/Table/store/hooks.mjs.map +1 -0
  602. package/es/Table/style.mjs +175 -90
  603. package/es/Table/style.mjs.map +1 -1
  604. package/es/Table/type.d.mts +467 -37
  605. package/es/Table/useTableController.mjs +293 -0
  606. package/es/Table/useTableController.mjs.map +1 -0
  607. package/es/Tabs/Tabs.mjs +37 -23
  608. package/es/Tabs/Tabs.mjs.map +1 -1
  609. package/es/Tabs/atoms.mjs +2 -2
  610. package/es/Tabs/atoms.mjs.map +1 -1
  611. package/es/Tag/Tag.mjs +2 -2
  612. package/es/Tag/Tag.mjs.map +1 -1
  613. package/es/Text/Text.mjs +2 -2
  614. package/es/Text/Text.mjs.map +1 -1
  615. package/es/Text/style.d.mts +4 -3
  616. package/es/Text/style.mjs +3 -3
  617. package/es/Text/style.mjs.map +1 -1
  618. package/es/Toast/dodge.mjs +0 -1
  619. package/es/Toast/dodge.mjs.map +1 -1
  620. package/es/Toast/dodge.stylex.mjs +1 -4
  621. package/es/Toast/dodge.stylex.mjs.map +1 -1
  622. package/es/Toast/style.mjs +1 -1
  623. package/es/Toast/style.mjs.map +1 -1
  624. package/es/ToggleGroup/ToggleGroup.mjs +4 -4
  625. package/es/ToggleGroup/ToggleGroup.mjs.map +1 -1
  626. package/es/ToggleGroup/atoms.d.mts +1 -0
  627. package/es/ToggleGroup/atoms.mjs +2 -2
  628. package/es/ToggleGroup/atoms.mjs.map +1 -1
  629. package/es/Tooltip/TooltipGroup.mjs +3 -3
  630. package/es/Tooltip/TooltipGroup.mjs.map +1 -1
  631. package/es/Tooltip/TooltipInGroup.mjs +1 -1
  632. package/es/Tooltip/TooltipInGroup.mjs.map +1 -1
  633. package/es/Tooltip/TooltipStandalone.mjs +4 -4
  634. package/es/Tooltip/TooltipStandalone.mjs.map +1 -1
  635. package/es/Tooltip/style.mjs +2 -2
  636. package/es/Tooltip/style.mjs.map +1 -1
  637. package/es/Tree/Tree.mjs +3 -3
  638. package/es/Tree/Tree.mjs.map +1 -1
  639. package/es/Tree/TreeNode.mjs +2 -2
  640. package/es/Tree/TreeNode.mjs.map +1 -1
  641. package/es/Video/Video.mjs +46 -0
  642. package/es/Video/Video.mjs.map +1 -0
  643. package/es/Video/context.mjs +14 -0
  644. package/es/Video/context.mjs.map +1 -0
  645. package/es/Video/index.d.mts +23 -39
  646. package/es/Video/index.mjs +21 -111
  647. package/es/Video/index.mjs.map +1 -1
  648. package/es/Video/parts/Caption.d.mts +9 -0
  649. package/es/Video/parts/Caption.mjs +37 -0
  650. package/es/Video/parts/Caption.mjs.map +1 -0
  651. package/es/Video/parts/CenterPlay.d.mts +8 -0
  652. package/es/Video/parts/CenterPlay.mjs +34 -0
  653. package/es/Video/parts/CenterPlay.mjs.map +1 -0
  654. package/es/Video/parts/Controls.d.mts +9 -0
  655. package/es/Video/parts/Controls.mjs +128 -0
  656. package/es/Video/parts/Controls.mjs.map +1 -0
  657. package/es/Video/parts/Frame.d.mts +9 -0
  658. package/es/Video/parts/Frame.mjs +101 -0
  659. package/es/Video/parts/Frame.mjs.map +1 -0
  660. package/es/Video/parts/HoverPreview.mjs +93 -0
  661. package/es/Video/parts/HoverPreview.mjs.map +1 -0
  662. package/es/Video/parts/LoadError.d.mts +8 -0
  663. package/es/Video/parts/LoadError.mjs +47 -0
  664. package/es/Video/parts/LoadError.mjs.map +1 -0
  665. package/es/Video/parts/PlayPauseIcon.mjs +48 -0
  666. package/es/Video/parts/PlayPauseIcon.mjs.map +1 -0
  667. package/es/Video/parts/RateMenu.mjs +48 -0
  668. package/es/Video/parts/RateMenu.mjs.map +1 -0
  669. package/es/Video/parts/Root.d.mts +9 -0
  670. package/es/Video/parts/Root.mjs +110 -0
  671. package/es/Video/parts/Root.mjs.map +1 -0
  672. package/es/Video/parts/SectionList.d.mts +9 -0
  673. package/es/Video/parts/SectionList.mjs +32 -0
  674. package/es/Video/parts/SectionList.mjs.map +1 -0
  675. package/es/Video/parts/SectionMenu.mjs +63 -0
  676. package/es/Video/parts/SectionMenu.mjs.map +1 -0
  677. package/es/Video/parts/Timeline.d.mts +9 -0
  678. package/es/Video/parts/Timeline.mjs +169 -0
  679. package/es/Video/parts/Timeline.mjs.map +1 -0
  680. package/es/Video/store.mjs +241 -0
  681. package/es/Video/store.mjs.map +1 -0
  682. package/es/Video/style.mjs +393 -23
  683. package/es/Video/style.mjs.map +1 -1
  684. package/es/Video/time.mjs +60 -0
  685. package/es/Video/time.mjs.map +1 -0
  686. package/es/Video/type.d.mts +125 -0
  687. package/es/Video/useControlsIdle.mjs +39 -0
  688. package/es/Video/useControlsIdle.mjs.map +1 -0
  689. package/es/Video/useFullscreen.mjs +17 -0
  690. package/es/Video/useFullscreen.mjs.map +1 -0
  691. package/es/Video/useKeyboard.mjs +60 -0
  692. package/es/Video/useKeyboard.mjs.map +1 -0
  693. package/es/Video/useVideo.d.mts +9 -0
  694. package/es/Video/useVideo.mjs +17 -0
  695. package/es/Video/useVideo.mjs.map +1 -0
  696. package/es/awesome/Features/FeatureItem.mjs +2 -2
  697. package/es/awesome/Features/FeatureItem.mjs.map +1 -1
  698. package/es/awesome/Giscus/style.mjs +9 -9
  699. package/es/awesome/Giscus/style.mjs.map +1 -1
  700. package/es/awesome/Grainient/Grainient.d.mts +11 -0
  701. package/es/awesome/Grainient/Grainient.mjs +314 -0
  702. package/es/awesome/Grainient/Grainient.mjs.map +1 -0
  703. package/es/awesome/Grainient/index.d.mts +3 -0
  704. package/es/awesome/Grainient/style.mjs +23 -0
  705. package/es/awesome/Grainient/style.mjs.map +1 -0
  706. package/es/awesome/Grainient/type.d.mts +121 -0
  707. package/es/awesome/GridBackground/GridBackground.mjs +1 -1
  708. package/es/awesome/GridBackground/GridBackground.mjs.map +1 -1
  709. package/es/awesome/GridBackground/GridShowcase.mjs +4 -4
  710. package/es/awesome/GridBackground/GridShowcase.mjs.map +1 -1
  711. package/es/awesome/Hero/Hero.mjs +3 -3
  712. package/es/awesome/Hero/Hero.mjs.map +1 -1
  713. package/es/awesome/InstallBanner/InstallBanner.mjs +2 -2
  714. package/es/awesome/InstallBanner/InstallBanner.mjs.map +1 -1
  715. package/es/awesome/LandingHero/LandingHero.mjs +3 -3
  716. package/es/awesome/LandingHero/LandingHero.mjs.map +1 -1
  717. package/es/awesome/LogoMarquee/LogoMarquee.mjs +2 -2
  718. package/es/awesome/LogoMarquee/LogoMarquee.mjs.map +1 -1
  719. package/es/awesome/Spline/ParentSize.mjs +1 -1
  720. package/es/awesome/Spline/ParentSize.mjs.map +1 -1
  721. package/es/awesome/TypewriterEffect/TypewriterEffect.mjs +4 -4
  722. package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
  723. package/es/awesome/index.d.mts +4 -1
  724. package/es/awesome/index.mjs +2 -1
  725. package/es/awesome/landingActions.mjs +2 -2
  726. package/es/awesome/landingActions.mjs.map +1 -1
  727. package/es/chat/BackBottom/BackBottom.mjs +1 -1
  728. package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
  729. package/es/chat/BackBottom/type.d.mts +2 -2
  730. package/es/chat/ChatItem/ChatItem.mjs +2 -2
  731. package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
  732. package/es/chat/EditableMessage/EditableMessage.mjs +4 -4
  733. package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
  734. package/es/chat/EditableMessageList/EditableMessageList.mjs +2 -2
  735. package/es/chat/EditableMessageList/EditableMessageList.mjs.map +1 -1
  736. package/es/chat/EditableMessageList/messageReducer.mjs +30 -23
  737. package/es/chat/EditableMessageList/messageReducer.mjs.map +1 -1
  738. package/es/chat/MessageInput/MessageInput.mjs +3 -3
  739. package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
  740. package/es/chat/MessageModal/MessageModal.mjs +1 -1
  741. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  742. package/es/chat/TokenTag/TokenTag.mjs +2 -3
  743. package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
  744. package/es/color/status/error.mjs +67 -0
  745. package/es/color/status/error.mjs.map +1 -0
  746. package/es/color/status/index.mjs +15 -0
  747. package/es/color/status/index.mjs.map +1 -0
  748. package/es/color/status/info.mjs +67 -0
  749. package/es/color/status/info.mjs.map +1 -0
  750. package/es/color/status/success.mjs +67 -0
  751. package/es/color/status/success.mjs.map +1 -0
  752. package/es/color/status/warning.mjs +67 -0
  753. package/es/color/status/warning.mjs.map +1 -0
  754. package/es/color/types.d.mts +1 -0
  755. package/es/dashboard/AuthLayout/Aside.d.mts +10 -0
  756. package/es/dashboard/AuthLayout/Aside.mjs +31 -0
  757. package/es/dashboard/AuthLayout/Aside.mjs.map +1 -0
  758. package/es/dashboard/AuthLayout/AuthLayout.d.mts +3 -1
  759. package/es/dashboard/AuthLayout/AuthLayout.mjs +97 -37
  760. package/es/dashboard/AuthLayout/AuthLayout.mjs.map +1 -1
  761. package/es/dashboard/AuthLayout/index.d.mts +3 -2
  762. package/es/dashboard/AuthLayout/style.mjs +109 -1
  763. package/es/dashboard/AuthLayout/style.mjs.map +1 -1
  764. package/es/dashboard/AuthLayout/type.d.mts +38 -2
  765. package/es/dashboard/AuthTools/AuthLocaleSwitch.d.mts +10 -0
  766. package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs +33 -0
  767. package/es/dashboard/AuthTools/AuthLocaleSwitch.mjs.map +1 -0
  768. package/es/dashboard/AuthTools/AuthThemeSwitch.d.mts +10 -0
  769. package/es/dashboard/AuthTools/AuthThemeSwitch.mjs +59 -0
  770. package/es/dashboard/AuthTools/AuthThemeSwitch.mjs.map +1 -0
  771. package/es/dashboard/AuthTools/index.d.mts +4 -0
  772. package/es/dashboard/AuthTools/style.mjs +27 -0
  773. package/es/dashboard/AuthTools/style.mjs.map +1 -0
  774. package/es/dashboard/AuthTools/type.d.mts +29 -0
  775. package/es/dashboard/ChartGrid/ChartGrid.d.mts +10 -0
  776. package/es/dashboard/ChartGrid/ChartGrid.mjs +19 -0
  777. package/es/dashboard/ChartGrid/ChartGrid.mjs.map +1 -0
  778. package/es/dashboard/ChartGrid/index.d.mts +3 -0
  779. package/es/dashboard/ChartGrid/style.mjs +18 -0
  780. package/es/dashboard/ChartGrid/style.mjs.map +1 -0
  781. package/es/dashboard/ChartGrid/type.d.mts +8 -0
  782. package/es/dashboard/ConsoleNav/ConsoleNav.mjs +3 -3
  783. package/es/dashboard/ConsoleNav/ConsoleNav.mjs.map +1 -1
  784. package/es/dashboard/ConsoleNav/Skeleton.d.mts +15 -0
  785. package/es/dashboard/ConsoleNav/Skeleton.mjs +82 -0
  786. package/es/dashboard/ConsoleNav/Skeleton.mjs.map +1 -0
  787. package/es/dashboard/ConsoleNav/index.d.mts +3 -2
  788. package/es/dashboard/ConsoleNav/style.mjs +20 -2
  789. package/es/dashboard/ConsoleNav/style.mjs.map +1 -1
  790. package/es/dashboard/ConsoleNav/type.d.mts +13 -0
  791. package/es/dashboard/ConsoleShell/ConsoleShell.d.mts +1 -1
  792. package/es/dashboard/ConsoleShell/ConsoleShell.mjs +26 -6
  793. package/es/dashboard/ConsoleShell/ConsoleShell.mjs.map +1 -1
  794. package/es/dashboard/ConsoleShell/style.mjs +11 -1
  795. package/es/dashboard/ConsoleShell/style.mjs.map +1 -1
  796. package/es/dashboard/ConsoleShell/type.d.mts +11 -0
  797. package/es/dashboard/FilterSidebar/FilterSidebar.mjs +18 -17
  798. package/es/dashboard/FilterSidebar/FilterSidebar.mjs.map +1 -1
  799. package/es/dashboard/FilterSidebar/style.mjs +2 -2
  800. package/es/dashboard/FilterSidebar/style.mjs.map +1 -1
  801. package/es/dashboard/FilterStrip/FilterStrip.d.mts +11 -0
  802. package/es/dashboard/FilterStrip/FilterStrip.mjs +55 -0
  803. package/es/dashboard/FilterStrip/FilterStrip.mjs.map +1 -0
  804. package/es/dashboard/FilterStrip/index.d.mts +3 -0
  805. package/es/dashboard/FilterStrip/style.mjs +78 -0
  806. package/es/dashboard/FilterStrip/style.mjs.map +1 -0
  807. package/es/dashboard/FilterStrip/type.d.mts +25 -0
  808. package/es/dashboard/LabelWithKey/LabelWithKey.d.mts +10 -0
  809. package/es/dashboard/LabelWithKey/LabelWithKey.mjs +18 -0
  810. package/es/dashboard/LabelWithKey/LabelWithKey.mjs.map +1 -0
  811. package/es/dashboard/LabelWithKey/index.d.mts +3 -0
  812. package/es/dashboard/LabelWithKey/type.d.mts +11 -0
  813. package/es/dashboard/MetricStrip/MetricCell.mjs +92 -0
  814. package/es/dashboard/MetricStrip/MetricCell.mjs.map +1 -0
  815. package/es/dashboard/MetricStrip/MetricStrip.d.mts +13 -0
  816. package/es/dashboard/MetricStrip/MetricStrip.mjs +47 -0
  817. package/es/dashboard/MetricStrip/MetricStrip.mjs.map +1 -0
  818. package/es/dashboard/MetricStrip/index.d.mts +3 -0
  819. package/es/dashboard/MetricStrip/style.mjs +169 -0
  820. package/es/dashboard/MetricStrip/style.mjs.map +1 -0
  821. package/es/dashboard/MetricStrip/type.d.mts +38 -0
  822. package/es/dashboard/PageSkeleton/PageSkeleton.mjs +20 -18
  823. package/es/dashboard/PageSkeleton/PageSkeleton.mjs.map +1 -1
  824. package/es/dashboard/PageSkeleton/style.mjs +2 -1
  825. package/es/dashboard/PageSkeleton/style.mjs.map +1 -1
  826. package/es/dashboard/PageToolbar/PageToolbar.d.mts +10 -0
  827. package/es/dashboard/PageToolbar/PageToolbar.mjs +22 -0
  828. package/es/dashboard/PageToolbar/PageToolbar.mjs.map +1 -0
  829. package/es/dashboard/PageToolbar/index.d.mts +3 -0
  830. package/es/dashboard/PageToolbar/style.mjs +36 -0
  831. package/es/dashboard/PageToolbar/style.mjs.map +1 -0
  832. package/es/dashboard/PageToolbar/type.d.mts +11 -0
  833. package/es/dashboard/PanelSurface/PanelSurface.d.mts +10 -0
  834. package/es/dashboard/PanelSurface/PanelSurface.mjs +40 -0
  835. package/es/dashboard/PanelSurface/PanelSurface.mjs.map +1 -0
  836. package/es/dashboard/PanelSurface/index.d.mts +3 -0
  837. package/es/dashboard/PanelSurface/style.mjs +25 -0
  838. package/es/dashboard/PanelSurface/style.mjs.map +1 -0
  839. package/es/dashboard/PanelSurface/type.d.mts +17 -0
  840. package/es/dashboard/Section/Section.d.mts +10 -0
  841. package/es/dashboard/Section/Section.mjs +81 -0
  842. package/es/dashboard/Section/Section.mjs.map +1 -0
  843. package/es/dashboard/Section/index.d.mts +3 -0
  844. package/es/dashboard/Section/style.mjs +31 -0
  845. package/es/dashboard/Section/style.mjs.map +1 -0
  846. package/es/dashboard/Section/type.d.mts +23 -0
  847. package/es/dashboard/StatCard/StatCard.d.mts +2 -1
  848. package/es/dashboard/StatCard/StatCard.mjs +29 -91
  849. package/es/dashboard/StatCard/StatCard.mjs.map +1 -1
  850. package/es/dashboard/StatCard/type.d.mts +18 -5
  851. package/es/dashboard/Surface/Surface.d.mts +4 -3
  852. package/es/dashboard/Surface/Surface.mjs +90 -8
  853. package/es/dashboard/Surface/Surface.mjs.map +1 -1
  854. package/es/dashboard/Surface/index.d.mts +3 -2
  855. package/es/dashboard/Surface/link.d.mts +16 -0
  856. package/es/dashboard/Surface/link.mjs +40 -0
  857. package/es/dashboard/Surface/link.mjs.map +1 -0
  858. package/es/dashboard/Surface/marker.stylex.mjs +9 -0
  859. package/es/dashboard/Surface/marker.stylex.mjs.map +1 -0
  860. package/es/dashboard/Surface/style.d.mts +2 -0
  861. package/es/dashboard/Surface/style.mjs +156 -14
  862. package/es/dashboard/Surface/style.mjs.map +1 -1
  863. package/es/dashboard/Surface/type.d.mts +29 -1
  864. package/es/dashboard/TableIconActions/TableIconActions.d.mts +17 -0
  865. package/es/dashboard/TableIconActions/TableIconActions.mjs +39 -0
  866. package/es/dashboard/TableIconActions/TableIconActions.mjs.map +1 -0
  867. package/es/dashboard/TableIconActions/index.d.mts +3 -0
  868. package/es/dashboard/TableIconActions/type.d.mts +17 -0
  869. package/es/dashboard/TitleWithTips/TitleWithTips.d.mts +10 -0
  870. package/es/dashboard/TitleWithTips/TitleWithTips.mjs +28 -0
  871. package/es/dashboard/TitleWithTips/TitleWithTips.mjs.map +1 -0
  872. package/es/dashboard/TitleWithTips/index.d.mts +3 -0
  873. package/es/dashboard/TitleWithTips/type.d.mts +10 -0
  874. package/es/dashboard/index.d.mts +38 -4
  875. package/es/dashboard/index.mjs +18 -4
  876. package/es/eslint/noBaseUiSubpath.mjs +2 -1
  877. package/es/eslint/noBaseUiSubpath.mjs.map +1 -1
  878. package/es/hooks/useControlledState.mjs +20 -0
  879. package/es/hooks/useControlledState.mjs.map +1 -0
  880. package/es/hooks/useHighlight.mjs +2 -2
  881. package/es/hooks/useHighlight.mjs.map +1 -1
  882. package/es/hooks/useHover.mjs +22 -0
  883. package/es/hooks/useHover.mjs.map +1 -0
  884. package/es/hooks/useMarkdown/utils.d.mts +1 -0
  885. package/es/hooks/useScroll.d.mts +8 -0
  886. package/es/hooks/useScroll.mjs +33 -0
  887. package/es/hooks/useScroll.mjs.map +1 -0
  888. package/es/hooks/useSize.mjs +26 -0
  889. package/es/hooks/useSize.mjs.map +1 -0
  890. package/es/i18n/resources/en/colorPicker.d.mts +5 -0
  891. package/es/i18n/resources/en/colorPicker.mjs +5 -0
  892. package/es/i18n/resources/en/colorPicker.mjs.map +1 -1
  893. package/es/i18n/resources/en/datePicker.d.mts +54 -0
  894. package/es/i18n/resources/en/datePicker.mjs +55 -1
  895. package/es/i18n/resources/en/datePicker.mjs.map +1 -1
  896. package/es/i18n/resources/en/index.d.mts +4 -2
  897. package/es/i18n/resources/en/index.mjs +6 -2
  898. package/es/i18n/resources/en/index.mjs.map +1 -1
  899. package/es/i18n/resources/en/table.d.mts +23 -0
  900. package/es/i18n/resources/en/table.mjs +24 -0
  901. package/es/i18n/resources/en/table.mjs.map +1 -0
  902. package/es/i18n/resources/en/video.d.mts +23 -0
  903. package/es/i18n/resources/en/video.mjs +24 -0
  904. package/es/i18n/resources/en/video.mjs.map +1 -0
  905. package/es/i18n/resources/zhCn/colorPicker.d.mts +5 -0
  906. package/es/i18n/resources/zhCn/colorPicker.mjs +5 -0
  907. package/es/i18n/resources/zhCn/colorPicker.mjs.map +1 -1
  908. package/es/i18n/resources/zhCn/datePicker.d.mts +54 -0
  909. package/es/i18n/resources/zhCn/datePicker.mjs +55 -1
  910. package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -1
  911. package/es/i18n/resources/zhCn/index.d.mts +4 -2
  912. package/es/i18n/resources/zhCn/index.mjs +7 -3
  913. package/es/i18n/resources/zhCn/index.mjs.map +1 -1
  914. package/es/i18n/resources/zhCn/table.d.mts +23 -0
  915. package/es/i18n/resources/zhCn/table.mjs +24 -0
  916. package/es/i18n/resources/zhCn/table.mjs.map +1 -0
  917. package/es/i18n/resources/zhCn/video.d.mts +23 -0
  918. package/es/i18n/resources/zhCn/video.mjs +24 -0
  919. package/es/i18n/resources/zhCn/video.mjs.map +1 -0
  920. package/es/i18n/types.d.mts +4 -1
  921. package/es/index.d.mts +20 -8
  922. package/es/index.mjs +17 -9
  923. package/es/internal/menu/itemInterface.d.mts +1 -0
  924. package/es/internal/menu/renderUtils.d.mts +1 -0
  925. package/es/internal/overflow/OverflowList.mjs +71 -0
  926. package/es/internal/overflow/OverflowList.mjs.map +1 -0
  927. package/es/internal/virtual/VirtualScrollArea.mjs +1 -1
  928. package/es/internal/virtual/VirtualScrollArea.mjs.map +1 -1
  929. package/es/mdx/Callout/index.mjs +2 -2
  930. package/es/mdx/Callout/index.mjs.map +1 -1
  931. package/es/mdx/Cards/Card.mjs +2 -2
  932. package/es/mdx/Cards/Card.mjs.map +1 -1
  933. package/es/mdx/Cards/index.mjs +2 -2
  934. package/es/mdx/Cards/index.mjs.map +1 -1
  935. package/es/mdx/Mdx/index.mjs +2 -2
  936. package/es/mdx/Mdx/index.mjs.map +1 -1
  937. package/es/mdx/Steps/index.mjs +2 -2
  938. package/es/mdx/Steps/index.mjs.map +1 -1
  939. package/es/mdx/mdxComponents/Pre.mjs +5 -5
  940. package/es/mdx/mdxComponents/Pre.mjs.map +1 -1
  941. package/es/mdx/mdxComponents/Video.d.mts +2 -1
  942. package/es/mdx/mdxComponents/Video.mjs +5 -3
  943. package/es/mdx/mdxComponents/Video.mjs.map +1 -1
  944. package/es/mobile/ChatInputArea/ChatInputArea.mjs +1 -1
  945. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  946. package/es/mobile/TabBar/TabBar.mjs +1 -1
  947. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  948. package/es/node_modules/.pnpm/@eslint_core@1.2.1/node_modules/@eslint/core/dist/esm/types.d.mts +2 -46
  949. package/es/node_modules/.pnpm/@eslint_plugin-kit@0.7.3/node_modules/@eslint/plugin-kit/dist/cjs/index.d.mts +1 -1
  950. package/es/node_modules/.pnpm/@types_estree@1.0.9/node_modules/@types/estree/index.d.mts +1 -4
  951. package/es/node_modules/.pnpm/@types_mdx@2.0.14/node_modules/@types/mdx/types.d.mts +1 -0
  952. package/es/node_modules/.pnpm/eslint@10.12.0_jiti@2.6.1_supports-color@10.2.2/node_modules/eslint/lib/types/index.d.mts +2 -1
  953. package/es/storybook/StoryBook/style.mjs +2 -0
  954. package/es/storybook/StoryBook/style.mjs.map +1 -1
  955. package/es/style.css +3534 -978
  956. package/es/styles/createGlobalStyle.d.mts +1 -0
  957. package/es/styles/createGlobalStyle.mjs +1 -1
  958. package/es/styles/index.d.mts +3 -2
  959. package/es/styles/index.mjs +5 -4
  960. package/es/styles/stylex/cssVar.stylex.mjs +3 -0
  961. package/es/styles/stylex/cssVar.stylex.mjs.map +1 -1
  962. package/es/styles/stylex/props.mjs +2 -2
  963. package/es/styles/stylex/props.mjs.map +1 -1
  964. package/es/styles/theme/createLobeToken.d.mts +10 -6
  965. package/es/styles/theme/createLobeToken.mjs.map +1 -1
  966. package/es/styles/theme/customPrimary.d.mts +7 -0
  967. package/es/styles/theme/customPrimary.mjs +66 -0
  968. package/es/styles/theme/customPrimary.mjs.map +1 -0
  969. package/es/styles/theme/generateColorPalette.d.mts +1 -0
  970. package/es/styles/theme/scope.d.mts +5 -3
  971. package/es/styles/theme/scope.mjs +30 -8
  972. package/es/styles/theme/scope.mjs.map +1 -1
  973. package/es/styles/theme/themeCss.d.mts +2 -0
  974. package/es/styles/theme/themeCss.mjs +24 -2
  975. package/es/styles/theme/themeCss.mjs.map +1 -1
  976. package/es/styles/theme/token/legacy.mjs +12 -12
  977. package/es/styles/theme/token/legacy.mjs.map +1 -1
  978. package/es/styles/theme/token/neutral.mjs +17 -9
  979. package/es/styles/theme/token/neutral.mjs.map +1 -1
  980. package/es/styles/theme/token/neutralText.mjs +91 -0
  981. package/es/styles/theme/token/neutralText.mjs.map +1 -0
  982. package/es/styles/theme/token/palette.mjs +16 -41
  983. package/es/styles/theme/token/palette.mjs.map +1 -1
  984. package/es/styles/theme/token/primary.mjs +6 -2
  985. package/es/styles/theme/token/primary.mjs.map +1 -1
  986. package/es/styles/theme/token/static.mjs +3 -0
  987. package/es/styles/theme/token/static.mjs.map +1 -1
  988. package/es/theme.css +301 -290
  989. package/es/types/customToken.d.mts +1 -0
  990. package/es/utils/colorMath.mjs +52 -0
  991. package/es/utils/colorMath.mjs.map +1 -0
  992. package/es/utils/formatNumber.mjs +7 -0
  993. package/es/utils/formatNumber.mjs.map +1 -0
  994. package/es/utils/genCdnUrl.mjs +6 -3
  995. package/es/utils/genCdnUrl.mjs.map +1 -1
  996. package/es/utils/hashString.mjs +19 -0
  997. package/es/utils/hashString.mjs.map +1 -0
  998. package/es/utils/mergeRefs.mjs +20 -0
  999. package/es/utils/mergeRefs.mjs.map +1 -0
  1000. package/es/utils/placement.d.mts +5 -5
  1001. package/es/utils/placement.mjs.map +1 -1
  1002. package/package.json +25 -46
  1003. package/es/DatePicker/CalendarPanel.mjs +0 -189
  1004. package/es/DatePicker/CalendarPanel.mjs.map +0 -1
  1005. package/es/DatePicker/PickerShell.mjs +0 -43
  1006. package/es/DatePicker/PickerShell.mjs.map +0 -1
  1007. package/es/DatePicker/calendar.d.mts +0 -4
  1008. package/es/DatePicker/calendar.mjs +0 -46
  1009. package/es/DatePicker/calendar.mjs.map +0 -1
  1010. package/es/Table/FilterMenu.mjs +0 -45
  1011. package/es/Table/FilterMenu.mjs.map +0 -1
  1012. package/es/Table/TableBody.mjs +0 -67
  1013. package/es/Table/TableBody.mjs.map +0 -1
  1014. package/es/Table/TableHead.mjs +0 -58
  1015. package/es/Table/TableHead.mjs.map +0 -1
  1016. package/es/Table/features.mjs +0 -12
  1017. package/es/Table/features.mjs.map +0 -1
  1018. package/es/Table/fixedOffsets.mjs +0 -29
  1019. package/es/Table/fixedOffsets.mjs.map +0 -1
  1020. package/es/Table/marker.stylex.mjs +0 -9
  1021. package/es/Table/marker.stylex.mjs.map +0 -1
  1022. package/es/Table/toColumnDefs.mjs +0 -26
  1023. package/es/Table/toColumnDefs.mjs.map +0 -1
  1024. package/es/Table/useTableState.mjs +0 -99
  1025. package/es/Table/useTableState.mjs.map +0 -1
  1026. package/es/Video/marker.stylex.mjs +0 -9
  1027. package/es/Video/marker.stylex.mjs.map +0 -1
  1028. package/es/dashboard/StatCard/style.mjs +0 -105
  1029. package/es/dashboard/StatCard/style.mjs.map +0 -1
package/es/Icon/Icon.mjs CHANGED
@@ -5,7 +5,7 @@ import { calcSize } from "./components/utils.mjs";
5
5
  import { styles } from "./style.mjs";
6
6
  import { isValidElement, memo, useMemo } from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
- import clsx from "clsx";
8
+ import clsx$1 from "clsx";
9
9
  //#region src/Icon/Icon.tsx
10
10
  const Icon = memo(({ icon, size: iconSize, color, fill = "transparent", className, focusable, spin, fillRule, fillOpacity, ref, ...rest }) => {
11
11
  const { color: colorConfig, fill: fillConfig, fillOpacity: fillOpacityConfig, fillRule: fillRuleConfig, focusable: focusableConfig, className: classNameConfig, size: sizeConfig, ...restConfig } = useIconContext();
@@ -13,7 +13,7 @@ const Icon = memo(({ icon, size: iconSize, color, fill = "transparent", classNam
13
13
  const SvgIcon = icon;
14
14
  return /* @__PURE__ */ jsx("span", {
15
15
  role: "img",
16
- className: styleProps([styles.root, spin && styles.spin], clsx("anticon", classNameConfig, className)).className,
16
+ className: styleProps([styles.root, spin && styles.spin], clsx$1("anticon", classNameConfig, className)).className,
17
17
  ...restConfig,
18
18
  ...rest,
19
19
  children: icon && (isValidElement(icon) ? icon : /* @__PURE__ */ jsx(SvgIcon, {
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.mjs","names":[],"sources":["../../src/Icon/Icon.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport type { LucideIcon } from 'lucide-react';\nimport { isValidElement, memo, useMemo } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { useIconContext } from './components/IconProvider';\nimport { calcSize } from './components/utils';\nimport { styles } from './style';\nimport type { IconProps } from './type';\n\nconst Icon = memo<IconProps>(\n ({\n icon,\n size: iconSize,\n color,\n fill = 'transparent',\n className,\n focusable,\n spin,\n fillRule,\n fillOpacity,\n ref,\n ...rest\n }) => {\n const {\n color: colorConfig,\n fill: fillConfig,\n fillOpacity: fillOpacityConfig,\n fillRule: fillRuleConfig,\n focusable: focusableConfig,\n className: classNameConfig,\n size: sizeConfig,\n ...restConfig\n } = useIconContext();\n\n const { size, strokeWidth } = useMemo(\n () => calcSize(iconSize || sizeConfig),\n [iconSize, sizeConfig],\n );\n\n const SvgIcon = icon as LucideIcon;\n\n return (\n <span\n role=\"img\"\n className={\n styleProps(\n [styles.root, spin && styles.spin],\n clsx('anticon', classNameConfig, className),\n ).className\n }\n {...restConfig}\n {...rest}\n >\n {icon &&\n (isValidElement(icon) ? (\n icon\n ) : (\n <SvgIcon\n color={color || colorConfig}\n fill={fill || fillConfig}\n fillOpacity={fillOpacity || fillOpacityConfig}\n fillRule={fillRule || fillRuleConfig}\n focusable={focusable || focusableConfig}\n height={size}\n ref={ref}\n size={size}\n strokeWidth={strokeWidth}\n width={size}\n />\n ))}\n </span>\n );\n },\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;\n"],"mappings":";;;;;;;;;AAaA,MAAM,OAAO,MACV,EACC,MACA,MAAM,UACN,OACA,OAAO,eACP,WACA,WACA,MACA,UACA,aACA,KACA,GAAG,WACC;CACJ,MAAM,EACJ,OAAO,aACP,MAAM,YACN,aAAa,mBACb,UAAU,gBACV,WAAW,iBACX,WAAW,iBACX,MAAM,YACN,GAAG,eACD,eAAe;CAEnB,MAAM,EAAE,MAAM,gBAAgB,cACtB,SAAS,YAAY,UAAU,GACrC,CAAC,UAAU,UAAU,CACvB;CAEA,MAAM,UAAU;CAEhB,OACE,oBAAC,QAAD;EACE,MAAK;EACL,WACE,WACE,CAAC,OAAO,MAAM,QAAQ,OAAO,IAAI,GACjC,KAAK,WAAW,iBAAiB,SAAS,CAC5C,CAAC,CAAC;EAEJ,GAAI;EACJ,GAAI;EAEH,UAAA,SACE,eAAe,IAAI,IAClB,OAEA,oBAAC,SAAD;GACE,OAAO,SAAS;GAChB,MAAM,QAAQ;GACd,aAAa,eAAe;GAC5B,UAAU,YAAY;GACtB,WAAW,aAAa;GACxB,QAAQ;GACH;GACC;GACO;GACb,OAAO;EACR,CAAA;CAED,CAAA;AAEV,CACF;AAEA,KAAK,cAAc"}
1
+ {"version":3,"file":"Icon.mjs","names":["clsx"],"sources":["../../src/Icon/Icon.tsx"],"sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport type { LucideIcon } from 'lucide-react';\nimport { isValidElement, memo, useMemo } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { useIconContext } from './components/IconProvider';\nimport { calcSize } from './components/utils';\nimport { styles } from './style';\nimport type { IconProps } from './type';\n\nconst Icon = memo<IconProps>(\n ({\n icon,\n size: iconSize,\n color,\n fill = 'transparent',\n className,\n focusable,\n spin,\n fillRule,\n fillOpacity,\n ref,\n ...rest\n }) => {\n const {\n color: colorConfig,\n fill: fillConfig,\n fillOpacity: fillOpacityConfig,\n fillRule: fillRuleConfig,\n focusable: focusableConfig,\n className: classNameConfig,\n size: sizeConfig,\n ...restConfig\n } = useIconContext();\n\n const { size, strokeWidth } = useMemo(\n () => calcSize(iconSize || sizeConfig),\n [iconSize, sizeConfig],\n );\n\n const SvgIcon = icon as LucideIcon;\n\n return (\n <span\n role=\"img\"\n className={\n styleProps(\n [styles.root, spin && styles.spin],\n clsx('anticon', classNameConfig, className),\n ).className\n }\n {...restConfig}\n {...rest}\n >\n {icon &&\n (isValidElement(icon) ? (\n icon\n ) : (\n <SvgIcon\n color={color || colorConfig}\n fill={fill || fillConfig}\n fillOpacity={fillOpacity || fillOpacityConfig}\n fillRule={fillRule || fillRuleConfig}\n focusable={focusable || focusableConfig}\n height={size}\n ref={ref}\n size={size}\n strokeWidth={strokeWidth}\n width={size}\n />\n ))}\n </span>\n );\n },\n);\n\nIcon.displayName = 'Icon';\n\nexport default Icon;\n"],"mappings":";;;;;;;;;AAaA,MAAM,OAAO,MACV,EACC,MACA,MAAM,UACN,OACA,OAAO,eACP,WACA,WACA,MACA,UACA,aACA,KACA,GAAG,WACC;CACJ,MAAM,EACJ,OAAO,aACP,MAAM,YACN,aAAa,mBACb,UAAU,gBACV,WAAW,iBACX,WAAW,iBACX,MAAM,YACN,GAAG,eACD,eAAe;CAEnB,MAAM,EAAE,MAAM,gBAAgB,cACtB,SAAS,YAAY,UAAU,GACrC,CAAC,UAAU,UAAU,CACvB;CAEA,MAAM,UAAU;CAEhB,OACE,oBAAC,QAAD;EACE,MAAK;EACL,WACE,WACE,CAAC,OAAO,MAAM,QAAQ,OAAO,IAAI,GACjCA,OAAK,WAAW,iBAAiB,SAAS,CAC5C,CAAC,CAAC;EAEJ,GAAI;EACJ,GAAI;EAEH,UAAA,SACE,eAAe,IAAI,IAClB,OAEA,oBAAC,SAAD;GACE,OAAO,SAAS;GAChB,MAAM,QAAQ;GACd,aAAa,eAAe;GAC5B,UAAU,YAAY;GACtB,WAAW,aAAa;GACxB,QAAQ;GACH;GACC;GACO;GACb,OAAO;EACR,CAAA;CAED,CAAA;AAEV,CACF;AAEA,KAAK,cAAc"}
@@ -4,6 +4,7 @@ import { CSSProperties, ComponentProps, ReactNode, Ref } from "react";
4
4
  export interface ImagePreviewOptions {
5
5
  autoZoomThreshold?: number;
6
6
  defaultZoom?: ZoomPolicy;
7
+ fetchImage?: (source: string) => Promise<Blob>;
7
8
  maxScale?: number;
8
9
  onDownload?: (source: string) => void | Promise<void>;
9
10
  onOpenChange?: (open: boolean) => void;
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { useAppElement } from "../../ConfigProvider/AppElementContext.mjs";
3
3
  import { styleProps } from "../../styles/stylex/props.mjs";
4
+ import { useMergeRefs } from "../../utils/mergeRefs.mjs";
4
5
  import { useLayerZIndex } from "../../internal/zIndex/useLayerZIndex.mjs";
5
6
  import { ToastHost } from "../../Toast/imperative.mjs";
6
7
  import { styles } from "../style.mjs";
@@ -15,7 +16,6 @@ import { useZoomPan } from "./useZoomPan.mjs";
15
16
  import ViewerChrome from "./ViewerChrome.mjs";
16
17
  import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
17
18
  import { jsx, jsxs } from "react/jsx-runtime";
18
- import { useMergeRefs } from "react-merge-refs";
19
19
  import { Dialog } from "@base-ui/react/dialog";
20
20
  //#region src/Image/viewer/ImageViewer.tsx
21
21
  const readViewport = () => ({
@@ -250,6 +250,7 @@ const ImageViewer = memo(({ entries, index, openerFocusElement, token }) => {
250
250
  canZoomOut,
251
251
  chromeRef,
252
252
  current: currentIndex,
253
+ fetchImage: currentEntry.options.fetchImage,
253
254
  fitRect,
254
255
  flipHorizontal,
255
256
  flipVertical,
@@ -1 +1 @@
1
- {"version":3,"file":"ImageViewer.mjs","names":[],"sources":["../../../src/Image/viewer/ImageViewer.tsx"],"sourcesContent":["'use client';\n\nimport '../style.css';\n\nimport { Dialog, type DialogRootProps } from '@base-ui/react/dialog';\nimport {\n memo,\n type SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useMergeRefs } from 'react-merge-refs';\n\nimport { useAppElement } from '@/ConfigProvider/AppElementContext';\nimport { useLayerZIndex } from '@/internal/zIndex';\nimport { styleProps } from '@/styles/stylex/props';\nimport { ToastHost } from '@/Toast';\n\nimport { styles } from '../style';\nimport { computeFit, type Size, unrotatedRect } from './geometry';\nimport { beginClosePreview, endClosePreview, type PreviewEntry } from './registry';\nimport { useFinalFocus } from './useFinalFocus';\nimport { useFlipTransition } from './useFlipTransition';\nimport { readNatural, useGalleryNav } from './useGalleryNav';\nimport { useRefitTransition } from './useRefitTransition';\nimport { useViewerGestures } from './useViewerGestures';\nimport { useZoomPan } from './useZoomPan';\nimport ViewerChrome from './ViewerChrome';\n\nexport interface ImageViewerProps {\n entries: PreviewEntry[];\n index: number;\n openerFocusElement: HTMLElement | null;\n token: number;\n}\n\nconst readViewport = (): Size => ({ height: window.innerHeight, width: window.innerWidth });\n\nconst prefersReducedMotion = () =>\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n\nconst ImageViewer = memo<ImageViewerProps>(({ entries, index, openerFocusElement, token }) => {\n const openerEntry = entries[index];\n const appElement = useAppElement();\n const [animated] = useState(() => !prefersReducedMotion());\n\n const { ref: layerRef, zIndex } = useLayerZIndex<HTMLDivElement>('modal');\n\n const [currentIndex, setCurrentIndex] = useState(index);\n const currentEntry = entries[currentIndex];\n const currentEntryRef = useRef(currentEntry);\n currentEntryRef.current = currentEntry;\n\n const [source, setSource] = useState(openerEntry.src);\n const [natural, setNatural] = useState<Size>(() => readNatural(openerEntry.element));\n const [viewport, setViewport] = useState<Size>(readViewport);\n\n const closeRef = useRef<(() => void) | null>(null);\n const requestClose = useCallback(() => closeRef.current?.(), []);\n\n // useZoomPan needs to gate its wheel/toolbar entry points on close-in-flight,\n // but that state only exists once useFlipTransition (below) has run — and it\n // needs useZoomPan's own transform values first. Break the cycle with a\n // stable indirection: the ref is repointed at the real isClosing once it's\n // available, written directly during render like the other *Ref fields here.\n const isClosingIndirectRef = useRef<() => boolean>(() => false);\n const isClosingIndirect = useCallback(() => isClosingIndirectRef.current(), []);\n\n const isTransitioningIndirectRef = useRef<() => boolean>(() => true);\n const isTransitioningIndirect = useCallback(() => isTransitioningIndirectRef.current(), []);\n\n const fillViewport = Boolean(\n currentEntry.previewSrc && currentEntry.previewSrc !== currentEntry.src,\n );\n\n const {\n canZoomIn,\n canZoomOut,\n dragBy,\n dragEnd,\n escIntent,\n flipHorizontal,\n flipVertical,\n flipX,\n flipY,\n getInitialScale,\n handleDoubleClick,\n handleWheel,\n isClean,\n isZoomed,\n reset,\n resetCloseTracking,\n rotate,\n rotateLeft,\n rotateRight,\n rotation,\n scale,\n setNatural: syncZoomNatural,\n setViewport: syncZoomViewport,\n toggleActualSize,\n x,\n y,\n zoomIn,\n zoomOut,\n } = useZoomPan({\n autoZoomThreshold: currentEntry.options.autoZoomThreshold,\n defaultZoom: currentEntry.options.defaultZoom,\n fillViewport,\n isClosing: isClosingIndirect,\n isTransitioning: isTransitioningIndirect,\n maxScale: currentEntry.options.maxScale,\n natural,\n onCloseRequest: requestClose,\n viewport,\n });\n\n const fitRect = useMemo(\n () => computeFit(natural, viewport, rotation, fillViewport),\n [natural, viewport, rotation, fillViewport],\n );\n const fitRectRef = useRef(fitRect);\n fitRectRef.current = fitRect;\n const getFitRect = useCallback(() => fitRectRef.current, []);\n\n const imageRect = useMemo(() => unrotatedRect(fitRect, rotation), [fitRect, rotation]);\n\n const viewportRef = useRef(viewport);\n viewportRef.current = viewport;\n const getViewportWidth = useCallback(() => viewportRef.current.width, []);\n\n const getCloseSource = useCallback(() => currentEntryRef.current.element, []);\n\n const transform = useMemo(\n () => ({ flipX, flipY, rotate, scale, x, y }),\n [flipX, flipY, rotate, scale, x, y],\n );\n const handleClosed = useCallback(() => endClosePreview(token), [token]);\n\n const {\n backdropRef,\n chromeRef,\n close,\n imageRef: flipImageRef,\n isClosing,\n isTransitioning,\n switchTo,\n } = useFlipTransition({\n animated,\n getCloseSource,\n getFitRect,\n getInitialScale,\n getViewportWidth,\n onClosed: handleClosed,\n source: openerEntry.element,\n transform,\n });\n isClosingIndirectRef.current = isClosing;\n isTransitioningIndirectRef.current = isTransitioning;\n\n useRefitTransition({\n animated,\n fillViewport,\n isTransitioning,\n natural,\n rotation,\n scale,\n viewport,\n x,\n y,\n });\n const finalFocus = useFinalFocus(openerFocusElement);\n\n const isCleanRef = useRef(isClean);\n isCleanRef.current = isClean;\n\n const handleClose = useCallback(() => {\n beginClosePreview(token);\n close({ fade: !isCleanRef.current });\n }, [close, token]);\n closeRef.current = handleClose;\n\n const handleDialogOpenChange = useCallback<NonNullable<DialogRootProps['onOpenChange']>>(\n (open, eventDetails) => {\n if (open) return;\n // Base UI fires this on every Esc regardless of whether we're already\n // mid-close (our Dialog.Root's open prop never actually flips to\n // false), so without this guard a second Esc during the close window\n // reads escIntent() off the close spring's mid-flight scale, decides\n // 'reset', and cancels the close animation out from under itself.\n if (isClosing()) return;\n if (eventDetails.reason === 'escape-key' && escIntent() === 'reset') {\n eventDetails.cancel();\n reset();\n return;\n }\n handleClose();\n },\n [escIntent, handleClose, isClosing, reset],\n );\n\n const gestures = useViewerGestures({\n dragBy,\n dragEnd,\n handleDoubleClick,\n handleWheel,\n isClean,\n isZoomed,\n onClose: handleClose,\n reset,\n zoomIn,\n zoomOut,\n });\n\n const { hasNext, hasPrev, next, prev } = useGalleryNav({\n cancelPendingClose: gestures.cancelPendingClose,\n currentIndex,\n entries,\n flipX,\n flipY,\n getInitialScale,\n resetCloseTracking,\n rotate,\n scale,\n setCurrentIndex,\n setNatural,\n setSource,\n switchTo,\n syncZoomNatural,\n x,\n y,\n });\n\n const popupNodeRef = useRef<HTMLDivElement | null>(null);\n const popupRef = useMergeRefs<HTMLDivElement>([layerRef, gestures.popupRef, popupNodeRef]);\n const imageRef = useMergeRefs<HTMLImageElement>([flipImageRef, gestures.imageRef]);\n\n const handleLoad = useCallback(\n (event: SyntheticEvent<HTMLImageElement>) => {\n const loaded = event.currentTarget;\n if (!loaded.naturalWidth || !loaded.naturalHeight) return;\n const next = { height: loaded.naturalHeight, width: loaded.naturalWidth };\n setNatural((prev) =>\n prev.width === next.width && prev.height === next.height ? prev : next,\n );\n syncZoomNatural(next);\n },\n [syncZoomNatural],\n );\n\n useEffect(() => {\n const handleResize = () => {\n const next = readViewport();\n setViewport(next);\n syncZoomViewport(next);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [syncZoomViewport]);\n\n useEffect(() => {\n const { previewSrc, src } = currentEntry;\n if (!previewSrc || previewSrc === src) return;\n let cancelled = false;\n const loader = new window.Image();\n const handleLoaded = () => {\n if (!cancelled) setSource(previewSrc);\n };\n loader.addEventListener('load', handleLoaded);\n loader.src = previewSrc;\n return () => {\n cancelled = true;\n loader.removeEventListener('load', handleLoaded);\n };\n }, [currentEntry]);\n\n useEffect(\n () => () => {\n const thumbnailWasRemoved = !openerEntry.element.isConnected;\n if (thumbnailWasRemoved) endClosePreview(token);\n },\n [openerEntry, token],\n );\n\n return (\n <Dialog.Root modal open onOpenChange={handleDialogOpenChange}>\n <Dialog.Portal container={appElement ?? undefined}>\n {/* Base UI drops a nested dialog's backdrop so overlays don't stack. The viewer is\n not an overlay on the surface it opened from — it replaces the screen — so it\n keeps its own scrim, or a viewer opened from a maskless drawer would show the\n page straight through the letterbox around the image. */}\n <Dialog.Backdrop\n forceRender\n {...styleProps(styles.viewerBackdrop, 'lobe-image-viewer-backdrop')}\n ref={backdropRef}\n style={zIndex === undefined ? undefined : { zIndex }}\n onClick={gestures.onSurfaceClick}\n />\n <Dialog.Popup\n aria-label={currentEntry.element.alt || undefined}\n {...styleProps(styles.viewerPopup, 'lobe-image-viewer-popup')}\n finalFocus={finalFocus}\n // Focus the popup itself instead of Base UI's default (the first\n // tabbable — the close button): a focus-visible close button pins\n // the idle auto-hide open forever and pops its tooltip on open.\n initialFocus={popupNodeRef}\n ref={popupRef}\n style={zIndex === undefined ? undefined : { zIndex: zIndex + 1 }}\n tabIndex={-1}\n onClick={gestures.onSurfaceClick}\n onPointerCancel={gestures.onPointerFinish}\n onPointerDown={gestures.onPointerDown}\n onPointerMove={gestures.onPointerMove}\n onPointerUp={gestures.onPointerFinish}\n >\n <img\n alt={currentEntry.element.alt}\n {...styleProps(styles.viewerImage, 'lobe-image-viewer-image')}\n ref={imageRef}\n src={source}\n style={{\n cursor: gestures.cursor,\n height: imageRect.height,\n left: imageRect.x,\n top: imageRect.y,\n width: imageRect.width,\n }}\n onClick={gestures.onImageClick}\n onDoubleClick={gestures.onImageDoubleClick}\n onLoad={handleLoad}\n />\n <ViewerChrome\n canZoomIn={canZoomIn}\n canZoomOut={canZoomOut}\n chromeRef={chromeRef}\n current={currentIndex}\n fitRect={fitRect}\n flipHorizontal={flipHorizontal}\n flipVertical={flipVertical}\n hasNext={hasNext}\n hasPrev={hasPrev}\n natural={natural}\n next={next}\n prev={prev}\n rotateLeft={rotateLeft}\n rotateRight={rotateRight}\n rotation={rotation}\n scale={scale}\n source={source}\n toggleActualSize={toggleActualSize}\n toolbarAddon={currentEntry.options.toolbarAddon}\n total={entries.length}\n zoomIn={zoomIn}\n zoomOut={zoomOut}\n onClose={handleClose}\n onDownload={currentEntry.options.onDownload}\n />\n </Dialog.Popup>\n <ToastHost root={appElement ?? undefined} />\n </Dialog.Portal>\n </Dialog.Root>\n );\n});\n\nImageViewer.displayName = 'ImageViewer';\n\nexport default ImageViewer;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ImageViewer.mjs","names":[],"sources":["../../../src/Image/viewer/ImageViewer.tsx"],"sourcesContent":["'use client';\n\nimport '../style.css';\n\nimport { Dialog, type DialogRootProps } from '@base-ui/react/dialog';\nimport {\n memo,\n type SyntheticEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { useAppElement } from '@/ConfigProvider/AppElementContext';\nimport { useLayerZIndex } from '@/internal/zIndex';\nimport { styleProps } from '@/styles/stylex/props';\nimport { ToastHost } from '@/Toast';\nimport { useMergeRefs } from '@/utils/mergeRefs';\n\nimport { styles } from '../style';\nimport { computeFit, type Size, unrotatedRect } from './geometry';\nimport { beginClosePreview, endClosePreview, type PreviewEntry } from './registry';\nimport { useFinalFocus } from './useFinalFocus';\nimport { useFlipTransition } from './useFlipTransition';\nimport { readNatural, useGalleryNav } from './useGalleryNav';\nimport { useRefitTransition } from './useRefitTransition';\nimport { useViewerGestures } from './useViewerGestures';\nimport { useZoomPan } from './useZoomPan';\nimport ViewerChrome from './ViewerChrome';\n\nexport interface ImageViewerProps {\n entries: PreviewEntry[];\n index: number;\n openerFocusElement: HTMLElement | null;\n token: number;\n}\n\nconst readViewport = (): Size => ({ height: window.innerHeight, width: window.innerWidth });\n\nconst prefersReducedMotion = () =>\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? false;\n\nconst ImageViewer = memo<ImageViewerProps>(({ entries, index, openerFocusElement, token }) => {\n const openerEntry = entries[index];\n const appElement = useAppElement();\n const [animated] = useState(() => !prefersReducedMotion());\n\n const { ref: layerRef, zIndex } = useLayerZIndex<HTMLDivElement>('modal');\n\n const [currentIndex, setCurrentIndex] = useState(index);\n const currentEntry = entries[currentIndex];\n const currentEntryRef = useRef(currentEntry);\n currentEntryRef.current = currentEntry;\n\n const [source, setSource] = useState(openerEntry.src);\n const [natural, setNatural] = useState<Size>(() => readNatural(openerEntry.element));\n const [viewport, setViewport] = useState<Size>(readViewport);\n\n const closeRef = useRef<(() => void) | null>(null);\n const requestClose = useCallback(() => closeRef.current?.(), []);\n\n // useZoomPan needs to gate its wheel/toolbar entry points on close-in-flight,\n // but that state only exists once useFlipTransition (below) has run — and it\n // needs useZoomPan's own transform values first. Break the cycle with a\n // stable indirection: the ref is repointed at the real isClosing once it's\n // available, written directly during render like the other *Ref fields here.\n const isClosingIndirectRef = useRef<() => boolean>(() => false);\n const isClosingIndirect = useCallback(() => isClosingIndirectRef.current(), []);\n\n const isTransitioningIndirectRef = useRef<() => boolean>(() => true);\n const isTransitioningIndirect = useCallback(() => isTransitioningIndirectRef.current(), []);\n\n const fillViewport = Boolean(\n currentEntry.previewSrc && currentEntry.previewSrc !== currentEntry.src,\n );\n\n const {\n canZoomIn,\n canZoomOut,\n dragBy,\n dragEnd,\n escIntent,\n flipHorizontal,\n flipVertical,\n flipX,\n flipY,\n getInitialScale,\n handleDoubleClick,\n handleWheel,\n isClean,\n isZoomed,\n reset,\n resetCloseTracking,\n rotate,\n rotateLeft,\n rotateRight,\n rotation,\n scale,\n setNatural: syncZoomNatural,\n setViewport: syncZoomViewport,\n toggleActualSize,\n x,\n y,\n zoomIn,\n zoomOut,\n } = useZoomPan({\n autoZoomThreshold: currentEntry.options.autoZoomThreshold,\n defaultZoom: currentEntry.options.defaultZoom,\n fillViewport,\n isClosing: isClosingIndirect,\n isTransitioning: isTransitioningIndirect,\n maxScale: currentEntry.options.maxScale,\n natural,\n onCloseRequest: requestClose,\n viewport,\n });\n\n const fitRect = useMemo(\n () => computeFit(natural, viewport, rotation, fillViewport),\n [natural, viewport, rotation, fillViewport],\n );\n const fitRectRef = useRef(fitRect);\n fitRectRef.current = fitRect;\n const getFitRect = useCallback(() => fitRectRef.current, []);\n\n const imageRect = useMemo(() => unrotatedRect(fitRect, rotation), [fitRect, rotation]);\n\n const viewportRef = useRef(viewport);\n viewportRef.current = viewport;\n const getViewportWidth = useCallback(() => viewportRef.current.width, []);\n\n const getCloseSource = useCallback(() => currentEntryRef.current.element, []);\n\n const transform = useMemo(\n () => ({ flipX, flipY, rotate, scale, x, y }),\n [flipX, flipY, rotate, scale, x, y],\n );\n const handleClosed = useCallback(() => endClosePreview(token), [token]);\n\n const {\n backdropRef,\n chromeRef,\n close,\n imageRef: flipImageRef,\n isClosing,\n isTransitioning,\n switchTo,\n } = useFlipTransition({\n animated,\n getCloseSource,\n getFitRect,\n getInitialScale,\n getViewportWidth,\n onClosed: handleClosed,\n source: openerEntry.element,\n transform,\n });\n isClosingIndirectRef.current = isClosing;\n isTransitioningIndirectRef.current = isTransitioning;\n\n useRefitTransition({\n animated,\n fillViewport,\n isTransitioning,\n natural,\n rotation,\n scale,\n viewport,\n x,\n y,\n });\n const finalFocus = useFinalFocus(openerFocusElement);\n\n const isCleanRef = useRef(isClean);\n isCleanRef.current = isClean;\n\n const handleClose = useCallback(() => {\n beginClosePreview(token);\n close({ fade: !isCleanRef.current });\n }, [close, token]);\n closeRef.current = handleClose;\n\n const handleDialogOpenChange = useCallback<NonNullable<DialogRootProps['onOpenChange']>>(\n (open, eventDetails) => {\n if (open) return;\n // Base UI fires this on every Esc regardless of whether we're already\n // mid-close (our Dialog.Root's open prop never actually flips to\n // false), so without this guard a second Esc during the close window\n // reads escIntent() off the close spring's mid-flight scale, decides\n // 'reset', and cancels the close animation out from under itself.\n if (isClosing()) return;\n if (eventDetails.reason === 'escape-key' && escIntent() === 'reset') {\n eventDetails.cancel();\n reset();\n return;\n }\n handleClose();\n },\n [escIntent, handleClose, isClosing, reset],\n );\n\n const gestures = useViewerGestures({\n dragBy,\n dragEnd,\n handleDoubleClick,\n handleWheel,\n isClean,\n isZoomed,\n onClose: handleClose,\n reset,\n zoomIn,\n zoomOut,\n });\n\n const { hasNext, hasPrev, next, prev } = useGalleryNav({\n cancelPendingClose: gestures.cancelPendingClose,\n currentIndex,\n entries,\n flipX,\n flipY,\n getInitialScale,\n resetCloseTracking,\n rotate,\n scale,\n setCurrentIndex,\n setNatural,\n setSource,\n switchTo,\n syncZoomNatural,\n x,\n y,\n });\n\n const popupNodeRef = useRef<HTMLDivElement | null>(null);\n const popupRef = useMergeRefs<HTMLDivElement>([layerRef, gestures.popupRef, popupNodeRef]);\n const imageRef = useMergeRefs<HTMLImageElement>([flipImageRef, gestures.imageRef]);\n\n const handleLoad = useCallback(\n (event: SyntheticEvent<HTMLImageElement>) => {\n const loaded = event.currentTarget;\n if (!loaded.naturalWidth || !loaded.naturalHeight) return;\n const next = { height: loaded.naturalHeight, width: loaded.naturalWidth };\n setNatural((prev) =>\n prev.width === next.width && prev.height === next.height ? prev : next,\n );\n syncZoomNatural(next);\n },\n [syncZoomNatural],\n );\n\n useEffect(() => {\n const handleResize = () => {\n const next = readViewport();\n setViewport(next);\n syncZoomViewport(next);\n };\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [syncZoomViewport]);\n\n useEffect(() => {\n const { previewSrc, src } = currentEntry;\n if (!previewSrc || previewSrc === src) return;\n let cancelled = false;\n const loader = new window.Image();\n const handleLoaded = () => {\n if (!cancelled) setSource(previewSrc);\n };\n loader.addEventListener('load', handleLoaded);\n loader.src = previewSrc;\n return () => {\n cancelled = true;\n loader.removeEventListener('load', handleLoaded);\n };\n }, [currentEntry]);\n\n useEffect(\n () => () => {\n const thumbnailWasRemoved = !openerEntry.element.isConnected;\n if (thumbnailWasRemoved) endClosePreview(token);\n },\n [openerEntry, token],\n );\n\n return (\n <Dialog.Root modal open onOpenChange={handleDialogOpenChange}>\n <Dialog.Portal container={appElement ?? undefined}>\n {/* Base UI drops a nested dialog's backdrop so overlays don't stack. The viewer is\n not an overlay on the surface it opened from — it replaces the screen — so it\n keeps its own scrim, or a viewer opened from a maskless drawer would show the\n page straight through the letterbox around the image. */}\n <Dialog.Backdrop\n forceRender\n {...styleProps(styles.viewerBackdrop, 'lobe-image-viewer-backdrop')}\n ref={backdropRef}\n style={zIndex === undefined ? undefined : { zIndex }}\n onClick={gestures.onSurfaceClick}\n />\n <Dialog.Popup\n aria-label={currentEntry.element.alt || undefined}\n {...styleProps(styles.viewerPopup, 'lobe-image-viewer-popup')}\n finalFocus={finalFocus}\n // Focus the popup itself instead of Base UI's default (the first\n // tabbable — the close button): a focus-visible close button pins\n // the idle auto-hide open forever and pops its tooltip on open.\n initialFocus={popupNodeRef}\n ref={popupRef}\n style={zIndex === undefined ? undefined : { zIndex: zIndex + 1 }}\n tabIndex={-1}\n onClick={gestures.onSurfaceClick}\n onPointerCancel={gestures.onPointerFinish}\n onPointerDown={gestures.onPointerDown}\n onPointerMove={gestures.onPointerMove}\n onPointerUp={gestures.onPointerFinish}\n >\n <img\n alt={currentEntry.element.alt}\n {...styleProps(styles.viewerImage, 'lobe-image-viewer-image')}\n ref={imageRef}\n src={source}\n style={{\n cursor: gestures.cursor,\n height: imageRect.height,\n left: imageRect.x,\n top: imageRect.y,\n width: imageRect.width,\n }}\n onClick={gestures.onImageClick}\n onDoubleClick={gestures.onImageDoubleClick}\n onLoad={handleLoad}\n />\n <ViewerChrome\n canZoomIn={canZoomIn}\n canZoomOut={canZoomOut}\n chromeRef={chromeRef}\n current={currentIndex}\n fetchImage={currentEntry.options.fetchImage}\n fitRect={fitRect}\n flipHorizontal={flipHorizontal}\n flipVertical={flipVertical}\n hasNext={hasNext}\n hasPrev={hasPrev}\n natural={natural}\n next={next}\n prev={prev}\n rotateLeft={rotateLeft}\n rotateRight={rotateRight}\n rotation={rotation}\n scale={scale}\n source={source}\n toggleActualSize={toggleActualSize}\n toolbarAddon={currentEntry.options.toolbarAddon}\n total={entries.length}\n zoomIn={zoomIn}\n zoomOut={zoomOut}\n onClose={handleClose}\n onDownload={currentEntry.options.onDownload}\n />\n </Dialog.Popup>\n <ToastHost root={appElement ?? undefined} />\n </Dialog.Portal>\n </Dialog.Root>\n );\n});\n\nImageViewer.displayName = 'ImageViewer';\n\nexport default ImageViewer;\n"],"mappings":"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"}
@@ -42,7 +42,10 @@ const usePercentage = (scale, matchScale) => {
42
42
  const getSnapshot = useCallback(() => Math.round(scale.get() / matchScale * 100), [matchScale, scale]);
43
43
  return useSyncExternalStore(subscribe, getSnapshot);
44
44
  };
45
- const Toolbar = memo(({ canZoomIn, canZoomOut, fitRect, flipHorizontal, flipVertical, natural, onDownload, onMoreOpenChange, rotateLeft, rotateRight, rotation, scale, source, toggleActualSize, toolbarAddon, zoomIn, zoomOut }) => {
45
+ const defaultFetchImage = async (src) => {
46
+ return (await fetch(src, { mode: "cors" })).blob();
47
+ };
48
+ const Toolbar = memo(({ canZoomIn, canZoomOut, fetchImage, fitRect, flipHorizontal, flipVertical, natural, onDownload, onMoreOpenChange, rotateLeft, rotateRight, rotation, scale, source, toggleActualSize, toolbarAddon, zoomIn, zoomOut }) => {
46
49
  const { t } = useTranslation(image_default);
47
50
  const [containerEl, setContainerEl] = useState(null);
48
51
  const [copyLoading, setCopyLoading] = useState(false);
@@ -51,9 +54,10 @@ const Toolbar = memo(({ canZoomIn, canZoomOut, fitRect, flipHorizontal, flipVert
51
54
  const percentage = usePercentage(scale, matchScale);
52
55
  const canToggleActualSize = Math.abs(matchScale - 1) > .01;
53
56
  const showFitAffordance = canToggleActualSize && percentage === 100;
57
+ const loadImage = fetchImage ?? defaultFetchImage;
54
58
  const defaultDownload = useCallback(async (src) => {
55
59
  try {
56
- const blob = await (await fetch(src, { mode: "cors" })).blob();
60
+ const blob = await loadImage(src);
57
61
  const blobUrl = URL.createObjectURL(blob);
58
62
  let fileName = getFileNameFromUrl(src);
59
63
  const ext = getExtensionFromMimeType(blob.type);
@@ -62,10 +66,15 @@ const Toolbar = memo(({ canZoomIn, canZoomOut, fitRect, flipHorizontal, flipVert
62
66
  await downloadBlob(blobUrl, fileName);
63
67
  URL.revokeObjectURL(blobUrl);
64
68
  toast.success(t("image.downloadSuccess"));
65
- } catch {
69
+ } catch (error) {
70
+ if (fetchImage) throw error;
66
71
  window.open(src, "_blank", "noopener,noreferrer");
67
72
  }
68
- }, [t]);
73
+ }, [
74
+ fetchImage,
75
+ loadImage,
76
+ t
77
+ ]);
69
78
  const handleDownload = useCallback(async () => {
70
79
  setDownloadLoading(true);
71
80
  try {
@@ -84,7 +93,7 @@ const Toolbar = memo(({ canZoomIn, canZoomOut, fitRect, flipHorizontal, flipVert
84
93
  const handleCopy = useCallback(async () => {
85
94
  setCopyLoading(true);
86
95
  try {
87
- const blob = await (await fetch(source, { mode: "cors" })).blob();
96
+ const blob = await loadImage(source);
88
97
  const clipboardBlob = await getClipboardBlob(blob);
89
98
  await navigator.clipboard.write([new ClipboardItem(clipboardBlob)]);
90
99
  toast.success(t("image.copySuccess"));
@@ -93,7 +102,11 @@ const Toolbar = memo(({ canZoomIn, canZoomOut, fitRect, flipHorizontal, flipVert
93
102
  } finally {
94
103
  setCopyLoading(false);
95
104
  }
96
- }, [source, t]);
105
+ }, [
106
+ loadImage,
107
+ source,
108
+ t
109
+ ]);
97
110
  const moreItems = useMemo(() => [
98
111
  {
99
112
  icon: FlipHorizontal,
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.mjs","names":["imageMessages","Flexbox","ActionIcon"],"sources":["../../../src/Image/viewer/Toolbar.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport {\n Copy,\n Download,\n Ellipsis,\n FlipHorizontal,\n FlipVertical,\n RotateCcw,\n RotateCw,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react';\nimport type { MotionValue } from 'motion/react';\nimport { memo, type ReactNode, useCallback, useMemo, useState, useSyncExternalStore } from 'react';\n\nimport { ActionIconImpl as ActionIcon } from '@/ActionIcon/ActionIcon';\nimport DropdownMenu, { type DropdownItem } from '@/DropdownMenu';\nimport { Center, Flexbox } from '@/Flex';\nimport imageMessages from '@/i18n/resources/en/image';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport { styleProps } from '@/styles/stylex/props';\nimport { toast } from '@/Toast';\nimport { TooltipGroup } from '@/Tooltip';\nimport { getClipboardBlob } from '@/utils/blobToPng';\nimport { downloadBlob } from '@/utils/downloadBlob';\n\nimport { actualSizeMarker } from '../marker.stylex';\nimport { styles } from '../style';\nimport ActualSizeIcon from './ActualSizeIcon';\nimport { naturalScale, type Rect, type Rotation, type Size } from './geometry';\n\nconst getFileNameFromUrl = (url: string): string => {\n try {\n const pathname = new URL(url).pathname;\n const match = pathname.match(/\\/([^/]+)$/);\n return match ? decodeURIComponent(match[1]) : 'image';\n } catch {\n return 'image';\n }\n};\n\nconst getExtensionFromMimeType = (mimeType: string): string => {\n const map: Record<string, string> = {\n 'image/svg+xml': 'svg',\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/webp': 'webp',\n 'image/gif': 'gif',\n };\n return map[mimeType?.toLowerCase()] || mimeType?.split('/')[1]?.split('+')[0] || 'png';\n};\n\nconst usePercentage = (scale: MotionValue<number>, matchScale: number): number => {\n const subscribe = useCallback((onChange: () => void) => scale.on('change', onChange), [scale]);\n const getSnapshot = useCallback(\n () => Math.round((scale.get() / matchScale) * 100),\n [matchScale, scale],\n );\n\n return useSyncExternalStore(subscribe, getSnapshot);\n};\n\nexport interface ToolbarProps {\n canZoomIn: boolean;\n canZoomOut: boolean;\n fitRect: Rect;\n flipHorizontal: () => void;\n flipVertical: () => void;\n natural: Size;\n onDownload?: (source: string) => void | Promise<void>;\n onMoreOpenChange?: (open: boolean) => void;\n rotateLeft: () => void;\n rotateRight: () => void;\n rotation: Rotation;\n scale: MotionValue<number>;\n source: string;\n toggleActualSize: () => void;\n toolbarAddon?: ReactNode;\n zoomIn: () => void;\n zoomOut: () => void;\n}\n\nconst Toolbar = memo<ToolbarProps>(\n ({\n canZoomIn,\n canZoomOut,\n fitRect,\n flipHorizontal,\n flipVertical,\n natural,\n onDownload,\n onMoreOpenChange,\n rotateLeft,\n rotateRight,\n rotation,\n scale,\n source,\n toggleActualSize,\n toolbarAddon,\n zoomIn,\n zoomOut,\n }) => {\n const { t } = useTranslation(imageMessages);\n const [containerEl, setContainerEl] = useState<HTMLElement | null>(null);\n const [copyLoading, setCopyLoading] = useState(false);\n const [downloadLoading, setDownloadLoading] = useState(false);\n\n const matchScale = naturalScale(natural, fitRect, rotation);\n const percentage = usePercentage(scale, matchScale);\n // An image small enough that computeFit never scaled it down is already at\n // 100% when fitted, so the two states the toggle switches between are the\n // same state and the control has nothing to do.\n const canToggleActualSize = Math.abs(matchScale - 1) > 0.01;\n // The control reads as \"go to actual size\" by default, and only flips to\n // the fit affordance when it can actually take you back — an image that\n // fits at 100% is at both states at once and would otherwise offer to\n // \"fit to screen\" while already fitted.\n const showFitAffordance = canToggleActualSize && percentage === 100;\n\n const defaultDownload = useCallback(\n async (src: string) => {\n try {\n const response = await fetch(src, { mode: 'cors' });\n const blob = await response.blob();\n const blobUrl = URL.createObjectURL(blob);\n let fileName = getFileNameFromUrl(src);\n const ext = getExtensionFromMimeType(blob.type);\n if (!fileName.includes('.')) {\n fileName = `${fileName}.${ext}`;\n } else if (fileName.endsWith('.svg+xml')) {\n fileName = fileName.replace(/\\.svg\\+xml$/i, '.svg');\n }\n await downloadBlob(blobUrl, fileName);\n URL.revokeObjectURL(blobUrl);\n toast.success(t('image.downloadSuccess'));\n } catch {\n // A cross-origin source without CORS headers (e.g. a presigned URL reached\n // through a redirect, which sends `Origin: null`) can never be read as a\n // blob; opening it lets the browser handle the save instead of failing.\n window.open(src, '_blank', 'noopener,noreferrer');\n }\n },\n [t],\n );\n\n const handleDownload = useCallback(async () => {\n setDownloadLoading(true);\n try {\n await (onDownload ?? defaultDownload)(source);\n } catch {\n toast.error(t('image.downloadFailed'));\n } finally {\n setDownloadLoading(false);\n }\n }, [defaultDownload, onDownload, source, t]);\n\n const handleCopy = useCallback(async () => {\n setCopyLoading(true);\n try {\n const response = await fetch(source, { mode: 'cors' });\n const blob = await response.blob();\n const clipboardBlob = await getClipboardBlob(blob);\n await navigator.clipboard.write([new ClipboardItem(clipboardBlob)]);\n toast.success(t('image.copySuccess'));\n } catch {\n toast.error(t('image.copyFailed'));\n } finally {\n setCopyLoading(false);\n }\n }, [source, t]);\n\n const moreItems = useMemo<DropdownItem[]>(\n () => [\n {\n icon: FlipHorizontal,\n key: 'flip-horizontal',\n label: t('image.flipHorizontal'),\n onClick: flipHorizontal,\n },\n {\n icon: FlipVertical,\n key: 'flip-vertical',\n label: t('image.flipVertical'),\n onClick: flipVertical,\n },\n { icon: RotateCcw, key: 'rotate-left', label: t('image.rotateLeft'), onClick: rotateLeft },\n {\n icon: RotateCw,\n key: 'rotate-right',\n label: t('image.rotateRight'),\n onClick: rotateRight,\n },\n { icon: Copy, key: 'copy', label: t('image.copy'), onClick: handleCopy },\n ],\n [flipHorizontal, flipVertical, handleCopy, rotateLeft, rotateRight, t],\n );\n\n return (\n <TooltipGroup popupContainer={containerEl ?? undefined}>\n <div {...styleProps(styles.toolbar, 'lobe-image-viewer-toolbar')} ref={setContainerEl}>\n <Flexbox horizontal align=\"center\" gap={8} {...stylex.props(styles.toolbarRow)}>\n <ActionIcon\n disabled={!canZoomOut}\n icon={ZoomOut}\n style={{ borderRadius: 999 }}\n title={t('image.zoomOut')}\n onClick={zoomOut}\n />\n <Center horizontal {...stylex.props(styles.toolbarPercentage)}>\n {percentage}%\n </Center>\n <ActionIcon\n disabled={!canZoomIn}\n icon={ZoomIn}\n style={{ borderRadius: 999 }}\n title={t('image.zoomIn')}\n onClick={zoomIn}\n />\n <ActionIcon\n data-actual-size={showFitAffordance ? 'fit' : 'actual'}\n disabled={!canToggleActualSize}\n icon={ActualSizeIcon}\n style={{ borderRadius: 999 }}\n title={showFitAffordance ? t('image.fitToScreen') : t('image.actualSize')}\n xstyle={actualSizeMarker}\n onClick={toggleActualSize}\n />\n <ActionIcon\n icon={Download}\n loading={downloadLoading}\n style={{ borderRadius: 999 }}\n title={t('image.download')}\n onClick={handleDownload}\n />\n <DropdownMenu\n items={moreItems}\n placement=\"top\"\n portalProps={{ container: containerEl ?? undefined }}\n onOpenChange={(open) => onMoreOpenChange?.(open)}\n >\n <ActionIcon\n icon={Ellipsis}\n loading={copyLoading}\n style={{ borderRadius: 999 }}\n title={t('image.more')}\n />\n </DropdownMenu>\n {toolbarAddon}\n </Flexbox>\n </div>\n </TooltipGroup>\n );\n },\n);\n\nToolbar.displayName = 'Toolbar';\n\nexport default Toolbar;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,MAAM,sBAAsB,QAAwB;CAClD,IAAI;EAEF,MAAM,QADW,IAAI,IAAI,GAAG,CAAC,CAAC,SACP,MAAM,YAAY;EACzC,OAAO,QAAQ,mBAAmB,MAAM,EAAE,IAAI;CAChD,QAAQ;EACN,OAAO;CACT;AACF;AACA,MAAM,4BAA4B,aAA6B;CAS7D,OAAO;EAPL,iBAAiB;EACjB,aAAa;EACb,cAAc;EACd,aAAa;EACb,cAAc;EACd,aAAa;CAEN,EAAE,UAAU,YAAY,MAAM,UAAU,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,MAAM;AACnF;AACA,MAAM,iBAAiB,OAA4B,eAA+B;CAChF,MAAM,YAAY,aAAa,aAAyB,MAAM,GAAG,UAAU,QAAQ,GAAG,CAAC,KAAK,CAAC;CAC7F,MAAM,cAAc,kBAAkB,KAAK,MAAM,MAAM,IAAI,IAAI,aAAa,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC;CACrG,OAAO,qBAAqB,WAAW,WAAW;AACpD;AAoBA,MAAM,UAAU,MAAoB,EAClC,WACA,YACA,SACA,gBACA,cACA,SACA,YACA,kBACA,YACA,aACA,UACA,OACA,QACA,kBACA,cACA,QACA,cACI;CACJ,MAAM,EACJ,MACE,eAAeA,aAAa;CAChC,MAAM,CAAC,aAAa,kBAAkB,SAA6B,IAAI;CACvE,MAAM,CAAC,aAAa,kBAAkB,SAAS,KAAK;CACpD,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,KAAK;CAC5D,MAAM,aAAa,aAAa,SAAS,SAAS,QAAQ;CAC1D,MAAM,aAAa,cAAc,OAAO,UAAU;CAIlD,MAAM,sBAAsB,KAAK,IAAI,aAAa,CAAC,IAAI;CAKvD,MAAM,oBAAoB,uBAAuB,eAAe;CAChE,MAAM,kBAAkB,YAAY,OAAO,QAAgB;EACzD,IAAI;GAIF,MAAM,OAAO,OAAM,MAHI,MAAM,KAAK,EAChC,MAAM,OACR,CAAC,EAAA,CAC2B,KAAK;GACjC,MAAM,UAAU,IAAI,gBAAgB,IAAI;GACxC,IAAI,WAAW,mBAAmB,GAAG;GACrC,MAAM,MAAM,yBAAyB,KAAK,IAAI;GAC9C,IAAI,CAAC,SAAS,SAAS,GAAG,GACxB,WAAW,GAAG,SAAS,GAAG;QACrB,IAAI,SAAS,SAAS,UAAU,GACrC,WAAW,SAAS,QAAQ,gBAAgB,MAAM;GAEpD,MAAM,aAAa,SAAS,QAAQ;GACpC,IAAI,gBAAgB,OAAO;GAC3B,MAAM,QAAQ,EAAE,uBAAuB,CAAC;EAC1C,QAAQ;GAIN,OAAO,KAAK,KAAK,UAAU,qBAAqB;EAClD;CACF,GAAG,CAAC,CAAC,CAAC;CACN,MAAM,iBAAiB,YAAY,YAAY;EAC7C,mBAAmB,IAAI;EACvB,IAAI;GACF,OAAO,cAAc,gBAAA,CAAiB,MAAM;EAC9C,QAAQ;GACN,MAAM,MAAM,EAAE,sBAAsB,CAAC;EACvC,UAAU;GACR,mBAAmB,KAAK;EAC1B;CACF,GAAG;EAAC;EAAiB;EAAY;EAAQ;CAAC,CAAC;CAC3C,MAAM,aAAa,YAAY,YAAY;EACzC,eAAe,IAAI;EACnB,IAAI;GAIF,MAAM,OAAO,OAAM,MAHI,MAAM,QAAQ,EACnC,MAAM,OACR,CAAC,EAAA,CAC2B,KAAK;GACjC,MAAM,gBAAgB,MAAM,iBAAiB,IAAI;GACjD,MAAM,UAAU,UAAU,MAAM,CAAC,IAAI,cAAc,aAAa,CAAC,CAAC;GAClE,MAAM,QAAQ,EAAE,mBAAmB,CAAC;EACtC,QAAQ;GACN,MAAM,MAAM,EAAE,kBAAkB,CAAC;EACnC,UAAU;GACR,eAAe,KAAK;EACtB;CACF,GAAG,CAAC,QAAQ,CAAC,CAAC;CACd,MAAM,YAAY,cAA8B;EAAC;GAC/C,MAAM;GACN,KAAK;GACL,OAAO,EAAE,sBAAsB;GAC/B,SAAS;EACX;EAAG;GACD,MAAM;GACN,KAAK;GACL,OAAO,EAAE,oBAAoB;GAC7B,SAAS;EACX;EAAG;GACD,MAAM;GACN,KAAK;GACL,OAAO,EAAE,kBAAkB;GAC3B,SAAS;EACX;EAAG;GACD,MAAM;GACN,KAAK;GACL,OAAO,EAAE,mBAAmB;GAC5B,SAAS;EACX;EAAG;GACD,MAAM;GACN,KAAK;GACL,OAAO,EAAE,YAAY;GACrB,SAAS;EACX;CAAC,GAAG;EAAC;EAAgB;EAAc;EAAY;EAAY;EAAa;CAAC,CAAC;CAC1E,OAAO,oBAAC,cAAD;EAAc,gBAAgB,eAAe,KAAA;EAC9C,UAAA,oBAAC,OAAD;GAAK,GAAI,WAAW,OAAO,SAAS,2BAA2B;GAAG,KAAK;GACrE,UAAA,qBAACC,mBAAD;IAAS,YAAA;IAAW,OAAM;IAAS,KAAK;IAAG,GAAI,OAAO,MAAM,OAAO,UAAU;IAA7E,UAAA;KACE,oBAACC,gBAAD;MAAY,UAAU,CAAC;MAAY,MAAM;MAAS,OAAO,EAC3D,cAAc,IAChB;MAAG,OAAO,EAAE,eAAe;MAAG,SAAS;KAAU,CAAA;KAC7C,qBAAC,QAAD;MAAQ,YAAA;MAAW,GAAI,OAAO,MAAM,OAAO,iBAAiB;MAA5D,UAAA,CACG,YAAW,GACN;;KACR,oBAACA,gBAAD;MAAY,UAAU,CAAC;MAAW,MAAM;MAAQ,OAAO,EACzD,cAAc,IAChB;MAAG,OAAO,EAAE,cAAc;MAAG,SAAS;KAAS,CAAA;KAC3C,oBAACA,gBAAD;MAAY,oBAAkB,oBAAoB,QAAQ;MAAU,UAAU,CAAC;MAAqB,MAAM;MAAgB,OAAO,EACnI,cAAc,IAChB;MAAG,OAAO,oBAAoB,EAAE,mBAAmB,IAAI,EAAE,kBAAkB;MAAG,QAAQ;MAAkB,SAAS;KAAmB,CAAA;KAChI,oBAACA,gBAAD;MAAY,MAAM;MAAU,SAAS;MAAiB,OAAO,EAC/D,cAAc,IAChB;MAAG,OAAO,EAAE,gBAAgB;MAAG,SAAS;KAAiB,CAAA;KACrD,oBAAC,cAAD;MAAc,OAAO;MAAW,WAAU;MAAM,aAAa,EAC/D,WAAW,eAAe,KAAA,EAC5B;MAAG,eAAc,SAAQ,mBAAmB,IAAI;MAC1C,UAAA,oBAACA,gBAAD;OAAY,MAAM;OAAU,SAAS;OAAa,OAAO,EAC3D,cAAc,IAChB;OAAG,OAAO,EAAE,YAAY;MAAI,CAAA;KACZ,CAAA;KACb;IACM;;EACN,CAAA;CACO,CAAA;AACpB,CAAC;AACD,QAAQ,cAAc"}
1
+ {"version":3,"file":"Toolbar.mjs","names":["imageMessages","Flexbox","ActionIcon"],"sources":["../../../src/Image/viewer/Toolbar.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport {\n Copy,\n Download,\n Ellipsis,\n FlipHorizontal,\n FlipVertical,\n RotateCcw,\n RotateCw,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react';\nimport type { MotionValue } from 'motion/react';\nimport { memo, type ReactNode, useCallback, useMemo, useState, useSyncExternalStore } from 'react';\n\nimport { ActionIconImpl as ActionIcon } from '@/ActionIcon/ActionIcon';\nimport DropdownMenu, { type DropdownItem } from '@/DropdownMenu';\nimport { Center, Flexbox } from '@/Flex';\nimport imageMessages from '@/i18n/resources/en/image';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport { styleProps } from '@/styles/stylex/props';\nimport { toast } from '@/Toast';\nimport { TooltipGroup } from '@/Tooltip';\nimport { getClipboardBlob } from '@/utils/blobToPng';\nimport { downloadBlob } from '@/utils/downloadBlob';\n\nimport { actualSizeMarker } from '../marker.stylex';\nimport { styles } from '../style';\nimport ActualSizeIcon from './ActualSizeIcon';\nimport { naturalScale, type Rect, type Rotation, type Size } from './geometry';\n\nconst getFileNameFromUrl = (url: string): string => {\n try {\n const pathname = new URL(url).pathname;\n const match = pathname.match(/\\/([^/]+)$/);\n return match ? decodeURIComponent(match[1]) : 'image';\n } catch {\n return 'image';\n }\n};\n\nconst getExtensionFromMimeType = (mimeType: string): string => {\n const map: Record<string, string> = {\n 'image/svg+xml': 'svg',\n 'image/png': 'png',\n 'image/jpeg': 'jpg',\n 'image/jpg': 'jpg',\n 'image/webp': 'webp',\n 'image/gif': 'gif',\n };\n return map[mimeType?.toLowerCase()] || mimeType?.split('/')[1]?.split('+')[0] || 'png';\n};\n\nconst usePercentage = (scale: MotionValue<number>, matchScale: number): number => {\n const subscribe = useCallback((onChange: () => void) => scale.on('change', onChange), [scale]);\n const getSnapshot = useCallback(\n () => Math.round((scale.get() / matchScale) * 100),\n [matchScale, scale],\n );\n\n return useSyncExternalStore(subscribe, getSnapshot);\n};\n\nconst defaultFetchImage = async (src: string): Promise<Blob> => {\n const response = await fetch(src, { mode: 'cors' });\n return response.blob();\n};\n\nexport interface ToolbarProps {\n canZoomIn: boolean;\n canZoomOut: boolean;\n fetchImage?: (source: string) => Promise<Blob>;\n fitRect: Rect;\n flipHorizontal: () => void;\n flipVertical: () => void;\n natural: Size;\n onDownload?: (source: string) => void | Promise<void>;\n onMoreOpenChange?: (open: boolean) => void;\n rotateLeft: () => void;\n rotateRight: () => void;\n rotation: Rotation;\n scale: MotionValue<number>;\n source: string;\n toggleActualSize: () => void;\n toolbarAddon?: ReactNode;\n zoomIn: () => void;\n zoomOut: () => void;\n}\n\nconst Toolbar = memo<ToolbarProps>(\n ({\n canZoomIn,\n canZoomOut,\n fetchImage,\n fitRect,\n flipHorizontal,\n flipVertical,\n natural,\n onDownload,\n onMoreOpenChange,\n rotateLeft,\n rotateRight,\n rotation,\n scale,\n source,\n toggleActualSize,\n toolbarAddon,\n zoomIn,\n zoomOut,\n }) => {\n const { t } = useTranslation(imageMessages);\n const [containerEl, setContainerEl] = useState<HTMLElement | null>(null);\n const [copyLoading, setCopyLoading] = useState(false);\n const [downloadLoading, setDownloadLoading] = useState(false);\n\n const matchScale = naturalScale(natural, fitRect, rotation);\n const percentage = usePercentage(scale, matchScale);\n // An image small enough that computeFit never scaled it down is already at\n // 100% when fitted, so the two states the toggle switches between are the\n // same state and the control has nothing to do.\n const canToggleActualSize = Math.abs(matchScale - 1) > 0.01;\n // The control reads as \"go to actual size\" by default, and only flips to\n // the fit affordance when it can actually take you back — an image that\n // fits at 100% is at both states at once and would otherwise offer to\n // \"fit to screen\" while already fitted.\n const showFitAffordance = canToggleActualSize && percentage === 100;\n\n const loadImage = fetchImage ?? defaultFetchImage;\n\n const defaultDownload = useCallback(\n async (src: string) => {\n try {\n const blob = await loadImage(src);\n const blobUrl = URL.createObjectURL(blob);\n let fileName = getFileNameFromUrl(src);\n const ext = getExtensionFromMimeType(blob.type);\n if (!fileName.includes('.')) {\n fileName = `${fileName}.${ext}`;\n } else if (fileName.endsWith('.svg+xml')) {\n fileName = fileName.replace(/\\.svg\\+xml$/i, '.svg');\n }\n await downloadBlob(blobUrl, fileName);\n URL.revokeObjectURL(blobUrl);\n toast.success(t('image.downloadSuccess'));\n } catch (error) {\n if (fetchImage) throw error;\n // A cross-origin source without CORS headers (e.g. a presigned URL reached\n // through a redirect, which sends `Origin: null`) can never be read as a\n // blob; opening it lets the browser handle the save instead of failing.\n window.open(src, '_blank', 'noopener,noreferrer');\n }\n },\n [fetchImage, loadImage, t],\n );\n\n const handleDownload = useCallback(async () => {\n setDownloadLoading(true);\n try {\n await (onDownload ?? defaultDownload)(source);\n } catch {\n toast.error(t('image.downloadFailed'));\n } finally {\n setDownloadLoading(false);\n }\n }, [defaultDownload, onDownload, source, t]);\n\n const handleCopy = useCallback(async () => {\n setCopyLoading(true);\n try {\n const blob = await loadImage(source);\n const clipboardBlob = await getClipboardBlob(blob);\n await navigator.clipboard.write([new ClipboardItem(clipboardBlob)]);\n toast.success(t('image.copySuccess'));\n } catch {\n toast.error(t('image.copyFailed'));\n } finally {\n setCopyLoading(false);\n }\n }, [loadImage, source, t]);\n\n const moreItems = useMemo<DropdownItem[]>(\n () => [\n {\n icon: FlipHorizontal,\n key: 'flip-horizontal',\n label: t('image.flipHorizontal'),\n onClick: flipHorizontal,\n },\n {\n icon: FlipVertical,\n key: 'flip-vertical',\n label: t('image.flipVertical'),\n onClick: flipVertical,\n },\n { icon: RotateCcw, key: 'rotate-left', label: t('image.rotateLeft'), onClick: rotateLeft },\n {\n icon: RotateCw,\n key: 'rotate-right',\n label: t('image.rotateRight'),\n onClick: rotateRight,\n },\n { icon: Copy, key: 'copy', label: t('image.copy'), onClick: handleCopy },\n ],\n [flipHorizontal, flipVertical, handleCopy, rotateLeft, rotateRight, t],\n );\n\n return (\n <TooltipGroup popupContainer={containerEl ?? undefined}>\n <div {...styleProps(styles.toolbar, 'lobe-image-viewer-toolbar')} ref={setContainerEl}>\n <Flexbox horizontal align=\"center\" gap={8} {...stylex.props(styles.toolbarRow)}>\n <ActionIcon\n disabled={!canZoomOut}\n icon={ZoomOut}\n style={{ borderRadius: 999 }}\n title={t('image.zoomOut')}\n onClick={zoomOut}\n />\n <Center horizontal {...stylex.props(styles.toolbarPercentage)}>\n {percentage}%\n </Center>\n <ActionIcon\n disabled={!canZoomIn}\n icon={ZoomIn}\n style={{ borderRadius: 999 }}\n title={t('image.zoomIn')}\n onClick={zoomIn}\n />\n <ActionIcon\n data-actual-size={showFitAffordance ? 'fit' : 'actual'}\n disabled={!canToggleActualSize}\n icon={ActualSizeIcon}\n style={{ borderRadius: 999 }}\n title={showFitAffordance ? t('image.fitToScreen') : t('image.actualSize')}\n xstyle={actualSizeMarker}\n onClick={toggleActualSize}\n />\n <ActionIcon\n icon={Download}\n loading={downloadLoading}\n style={{ borderRadius: 999 }}\n title={t('image.download')}\n onClick={handleDownload}\n />\n <DropdownMenu\n items={moreItems}\n placement=\"top\"\n portalProps={{ container: containerEl ?? undefined }}\n onOpenChange={(open) => onMoreOpenChange?.(open)}\n >\n <ActionIcon\n icon={Ellipsis}\n loading={copyLoading}\n style={{ borderRadius: 999 }}\n title={t('image.more')}\n />\n </DropdownMenu>\n {toolbarAddon}\n </Flexbox>\n </div>\n </TooltipGroup>\n );\n },\n);\n\nToolbar.displayName = 'Toolbar';\n\nexport default Toolbar;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewerChrome.mjs","names":["imageMessages","ActionIcon"],"sources":["../../../src/Image/viewer/ViewerChrome.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { X } from 'lucide-react';\nimport type { MotionValue } from 'motion/react';\nimport { memo, type MouseEvent, type ReactNode, useCallback } from 'react';\n\nimport { ActionIconImpl as ActionIcon } from '@/ActionIcon/ActionIcon';\nimport imageMessages from '@/i18n/resources/en/image';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport { styles } from '../style';\nimport GalleryNav from './GalleryNav';\nimport type { Rect, Rotation, Size } from './geometry';\nimport Toolbar from './Toolbar';\nimport { useChromeIdle } from './useChromeIdle';\n\nexport interface ViewerChromeProps {\n canZoomIn: boolean;\n canZoomOut: boolean;\n chromeRef: (node: HTMLElement | null) => void;\n current: number;\n fitRect: Rect;\n flipHorizontal: () => void;\n flipVertical: () => void;\n hasNext: boolean;\n hasPrev: boolean;\n natural: Size;\n next: () => void;\n onClose: () => void;\n onDownload?: (source: string) => void | Promise<void>;\n prev: () => void;\n rotateLeft: () => void;\n rotateRight: () => void;\n rotation: Rotation;\n scale: MotionValue<number>;\n source: string;\n toggleActualSize: () => void;\n toolbarAddon?: ReactNode;\n total: number;\n zoomIn: () => void;\n zoomOut: () => void;\n}\n\nconst ViewerChrome = memo<ViewerChromeProps>(\n ({ chromeRef, current, hasNext, hasPrev, next, onClose, prev, total, ...toolbarProps }) => {\n const { t } = useTranslation(imageMessages);\n const idle = useChromeIdle();\n\n const handleChromeClick = useCallback((event: MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n }, []);\n\n return (\n <div {...stylex.props(styles.viewerChrome)} ref={chromeRef} onClick={handleChromeClick}>\n <div\n {...stylex.props(styles.viewerChromeIdle)}\n data-idle-hidden={idle.hidden ? '' : undefined}\n ref={idle.ref}\n >\n <ActionIcon\n className=\"lobe-image-viewer-close\"\n icon={X}\n title={t('image.close')}\n xstyle={styles.viewerClose}\n onClick={onClose}\n />\n {total > 1 && (\n <GalleryNav\n current={current}\n hasNext={hasNext}\n hasPrev={hasPrev}\n next={next}\n prev={prev}\n total={total}\n />\n )}\n <Toolbar {...toolbarProps} onMoreOpenChange={idle.setHeld} />\n </div>\n </div>\n );\n },\n);\n\nViewerChrome.displayName = 'ViewerChrome';\n\nexport default ViewerChrome;\n"],"mappings":";;;;;;;;;;;;;AAwCA,MAAM,eAAe,MAAyB,EAC5C,WACA,SACA,SACA,SACA,MACA,SACA,MACA,OACA,GAAG,mBACC;CACJ,MAAM,EACJ,MACE,eAAeA,aAAa;CAChC,MAAM,OAAO,cAAc;CAC3B,MAAM,oBAAoB,aAAa,UAAsC;EAC3E,MAAM,gBAAgB;CACxB,GAAG,CAAC,CAAC;CACL,OAAO,oBAAC,OAAD;EAAK,GAAI,OAAO,MAAM,OAAO,YAAY;EAAG,KAAK;EAAW,SAAS;EACtE,UAAA,qBAAC,OAAD;GAAK,GAAI,OAAO,MAAM,OAAO,gBAAgB;GAAG,oBAAkB,KAAK,SAAS,KAAK,KAAA;GAAW,KAAK,KAAK;GAA1G,UAAA;IACE,oBAACC,gBAAD;KAAY,WAAU;KAA0B,MAAM;KAAG,OAAO,EAAE,aAAa;KAAG,QAAQ,OAAO;KAAa,SAAS;IAAU,CAAA;IAChI,QAAQ,KAAK,oBAAC,YAAD;KAAqB;KAAkB;KAAkB;KAAe;KAAY;KAAa;IAAQ,CAAA;IACvH,oBAAC,SAAD;KAAS,GAAI;KAAc,kBAAkB,KAAK;IAAU,CAAA;GACzD;;CACF,CAAA;AACX,CAAC;AACD,aAAa,cAAc"}
1
+ {"version":3,"file":"ViewerChrome.mjs","names":["imageMessages","ActionIcon"],"sources":["../../../src/Image/viewer/ViewerChrome.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { X } from 'lucide-react';\nimport type { MotionValue } from 'motion/react';\nimport { memo, type MouseEvent, type ReactNode, useCallback } from 'react';\n\nimport { ActionIconImpl as ActionIcon } from '@/ActionIcon/ActionIcon';\nimport imageMessages from '@/i18n/resources/en/image';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport { styles } from '../style';\nimport GalleryNav from './GalleryNav';\nimport type { Rect, Rotation, Size } from './geometry';\nimport Toolbar from './Toolbar';\nimport { useChromeIdle } from './useChromeIdle';\n\nexport interface ViewerChromeProps {\n canZoomIn: boolean;\n canZoomOut: boolean;\n chromeRef: (node: HTMLElement | null) => void;\n current: number;\n fetchImage?: (source: string) => Promise<Blob>;\n fitRect: Rect;\n flipHorizontal: () => void;\n flipVertical: () => void;\n hasNext: boolean;\n hasPrev: boolean;\n natural: Size;\n next: () => void;\n onClose: () => void;\n onDownload?: (source: string) => void | Promise<void>;\n prev: () => void;\n rotateLeft: () => void;\n rotateRight: () => void;\n rotation: Rotation;\n scale: MotionValue<number>;\n source: string;\n toggleActualSize: () => void;\n toolbarAddon?: ReactNode;\n total: number;\n zoomIn: () => void;\n zoomOut: () => void;\n}\n\nconst ViewerChrome = memo<ViewerChromeProps>(\n ({ chromeRef, current, hasNext, hasPrev, next, onClose, prev, total, ...toolbarProps }) => {\n const { t } = useTranslation(imageMessages);\n const idle = useChromeIdle();\n\n const handleChromeClick = useCallback((event: MouseEvent<HTMLDivElement>) => {\n event.stopPropagation();\n }, []);\n\n return (\n <div {...stylex.props(styles.viewerChrome)} ref={chromeRef} onClick={handleChromeClick}>\n <div\n {...stylex.props(styles.viewerChromeIdle)}\n data-idle-hidden={idle.hidden ? '' : undefined}\n ref={idle.ref}\n >\n <ActionIcon\n className=\"lobe-image-viewer-close\"\n icon={X}\n title={t('image.close')}\n xstyle={styles.viewerClose}\n onClick={onClose}\n />\n {total > 1 && (\n <GalleryNav\n current={current}\n hasNext={hasNext}\n hasPrev={hasPrev}\n next={next}\n prev={prev}\n total={total}\n />\n )}\n <Toolbar {...toolbarProps} onMoreOpenChange={idle.setHeld} />\n </div>\n </div>\n );\n },\n);\n\nViewerChrome.displayName = 'ViewerChrome';\n\nexport default ViewerChrome;\n"],"mappings":";;;;;;;;;;;;;AAyCA,MAAM,eAAe,MAAyB,EAC5C,WACA,SACA,SACA,SACA,MACA,SACA,MACA,OACA,GAAG,mBACC;CACJ,MAAM,EACJ,MACE,eAAeA,aAAa;CAChC,MAAM,OAAO,cAAc;CAC3B,MAAM,oBAAoB,aAAa,UAAsC;EAC3E,MAAM,gBAAgB;CACxB,GAAG,CAAC,CAAC;CACL,OAAO,oBAAC,OAAD;EAAK,GAAI,OAAO,MAAM,OAAO,YAAY;EAAG,KAAK;EAAW,SAAS;EACtE,UAAA,qBAAC,OAAD;GAAK,GAAI,OAAO,MAAM,OAAO,gBAAgB;GAAG,oBAAkB,KAAK,SAAS,KAAK,KAAA;GAAW,KAAK,KAAK;GAA1G,UAAA;IACE,oBAACC,gBAAD;KAAY,WAAU;KAA0B,MAAM;KAAG,OAAO,EAAE,aAAa;KAAG,QAAQ,OAAO;KAAa,SAAS;IAAU,CAAA;IAChI,QAAQ,KAAK,oBAAC,YAAD;KAAqB;KAAkB;KAAkB;KAAe;KAAY;KAAa;IAAQ,CAAA;IACvH,oBAAC,SAAD;KAAS,GAAI;KAAc,kBAAkB,KAAK;IAAU,CAAA;GACzD;;CACF,CAAA;AACX,CAAC;AACD,aAAa,cAAc"}
@@ -2,12 +2,12 @@
2
2
  import { styleProps } from "../styles/stylex/props.mjs";
3
3
  import Icon from "../Icon/Icon.mjs";
4
4
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
5
+ import { useControlledState } from "../hooks/useControlledState.mjs";
5
6
  import Img from "../Img/index.mjs";
6
7
  import { styles } from "./styles.mjs";
7
8
  import { createElement, memo } from "react";
8
9
  import { jsx, jsxs } from "react/jsx-runtime";
9
10
  import * as stylex from "@stylexjs/stylex";
10
- import useControlledState from "use-merge-value";
11
11
  //#region src/ImageSelect/ImageSelect.tsx
12
12
  const ImageSelect = memo(({ ref, className, style, value, defaultValue, onChange, options, width = 144, height = 86, styles: customStyles, classNames, unoptimized, ...rest }) => {
13
13
  const [currentValue, setCurrentValue] = useControlledState(defaultValue, {
@@ -1 +1 @@
1
- {"version":3,"file":"ImageSelect.mjs","names":["Flexbox"],"sources":["../../src/ImageSelect/ImageSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { memo } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport { Flexbox } from '@/Flex';\nimport Icon from '@/Icon';\nimport Img from '@/Img';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { styles } from './styles';\nimport type { ImageSelectProps } from './type';\n\nconst ImageSelect = memo<ImageSelectProps>(\n ({\n ref,\n className,\n style,\n value,\n defaultValue,\n onChange,\n options,\n width = 144,\n height = 86,\n styles: customStyles,\n classNames,\n unoptimized,\n ...rest\n }) => {\n const [currentValue, setCurrentValue] = useControlledState<string>(defaultValue, {\n defaultValue,\n onChange,\n value,\n });\n\n return (\n <Flexbox horizontal className={className} gap={16} ref={ref} style={style} {...rest}>\n {options?.map((item) => {\n const isActive = item.value === currentValue;\n return (\n <Flexbox\n align={'center'}\n gap={4}\n {...stylex.props(styles.container, isActive && styles.active)}\n key={item.value}\n onClick={() => setCurrentValue(item.value)}\n >\n <Img\n alt={item.alt || item.value}\n height={height}\n src={item.img}\n unoptimized={unoptimized}\n width={width}\n {...styleProps([styles.img, isActive && styles.imgActive], classNames?.img, {\n ...customStyles?.img,\n height,\n width,\n })}\n />\n\n <Flexbox horizontal align={'center'} gap={4}>\n {item.icon && <Icon icon={item.icon} />}\n {item.label}\n </Flexbox>\n </Flexbox>\n );\n })}\n </Flexbox>\n );\n },\n);\n\nImageSelect.displayName = 'ImageSelect';\n\nexport default ImageSelect;\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,cAAc,MAAwB,EAC1C,KACA,WACA,OACA,OACA,cACA,UACA,SACA,QAAQ,KACR,SAAS,IACT,QAAQ,cACR,YACA,aACA,GAAG,WACC;CACJ,MAAM,CAAC,cAAc,mBAAmB,mBAA2B,cAAc;EAC/E;EACA;EACA;CACF,CAAC;CACD,OAAO,oBAACA,mBAAD;EAAS,YAAA;EAAsB;EAAW,KAAK;EAAS;EAAY;EAAO,GAAI;EAC/E,UAAA,SAAS,KAAI,SAAQ;GACxB,MAAM,WAAW,KAAK,UAAU;GAChC,OAAO,8BAACA,mBAAD;IAAS,OAAO;IAAU,KAAK;IAAG,GAAI,OAAO,MAAM,OAAO,WAAW,YAAY,OAAO,MAAM;IAAG,KAAK,KAAK;IAAO,eAAe,gBAAgB,KAAK,KAAK;GAWnJ,GAVP,oBAAC,KAAD;IAAK,KAAK,KAAK,OAAO,KAAK;IAAe;IAAQ,KAAK,KAAK;IAAkB;IAAoB;IAAO,GAAI,WAAW,CAAC,OAAO,KAAK,YAAY,OAAO,SAAS,GAAG,YAAY,KAAK;KACzL,GAAG,cAAc;KACjB;KACA;IACF,CAAC;GAAI,CAAA,GAEC,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,KAAK;IAA1C,UAAA,CACG,KAAK,QAAQ,oBAAC,MAAD,EAAM,MAAM,KAAK,KAAO,CAAA,GACrC,KAAK,KACC;GACF,CAAA,CAAA;EACjB,CAAC;CACU,CAAA;AACf,CAAC;AACD,YAAY,cAAc"}
1
+ {"version":3,"file":"ImageSelect.mjs","names":["Flexbox"],"sources":["../../src/ImageSelect/ImageSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as stylex from '@stylexjs/stylex';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport { useControlledState } from '@/hooks/useControlledState';\nimport Icon from '@/Icon';\nimport Img from '@/Img';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { styles } from './styles';\nimport type { ImageSelectProps } from './type';\n\nconst ImageSelect = memo<ImageSelectProps>(\n ({\n ref,\n className,\n style,\n value,\n defaultValue,\n onChange,\n options,\n width = 144,\n height = 86,\n styles: customStyles,\n classNames,\n unoptimized,\n ...rest\n }) => {\n const [currentValue, setCurrentValue] = useControlledState<string>(defaultValue, {\n defaultValue,\n onChange,\n value,\n });\n\n return (\n <Flexbox horizontal className={className} gap={16} ref={ref} style={style} {...rest}>\n {options?.map((item) => {\n const isActive = item.value === currentValue;\n return (\n <Flexbox\n align={'center'}\n gap={4}\n {...stylex.props(styles.container, isActive && styles.active)}\n key={item.value}\n onClick={() => setCurrentValue(item.value)}\n >\n <Img\n alt={item.alt || item.value}\n height={height}\n src={item.img}\n unoptimized={unoptimized}\n width={width}\n {...styleProps([styles.img, isActive && styles.imgActive], classNames?.img, {\n ...customStyles?.img,\n height,\n width,\n })}\n />\n\n <Flexbox horizontal align={'center'} gap={4}>\n {item.icon && <Icon icon={item.icon} />}\n {item.label}\n </Flexbox>\n </Flexbox>\n );\n })}\n </Flexbox>\n );\n },\n);\n\nImageSelect.displayName = 'ImageSelect';\n\nexport default ImageSelect;\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,cAAc,MAAwB,EAC1C,KACA,WACA,OACA,OACA,cACA,UACA,SACA,QAAQ,KACR,SAAS,IACT,QAAQ,cACR,YACA,aACA,GAAG,WACC;CACJ,MAAM,CAAC,cAAc,mBAAmB,mBAA2B,cAAc;EAC/E;EACA;EACA;CACF,CAAC;CACD,OAAO,oBAACA,mBAAD;EAAS,YAAA;EAAsB;EAAW,KAAK;EAAS;EAAY;EAAO,GAAI;EAC/E,UAAA,SAAS,KAAI,SAAQ;GACxB,MAAM,WAAW,KAAK,UAAU;GAChC,OAAO,8BAACA,mBAAD;IAAS,OAAO;IAAU,KAAK;IAAG,GAAI,OAAO,MAAM,OAAO,WAAW,YAAY,OAAO,MAAM;IAAG,KAAK,KAAK;IAAO,eAAe,gBAAgB,KAAK,KAAK;GAWnJ,GAVP,oBAAC,KAAD;IAAK,KAAK,KAAK,OAAO,KAAK;IAAe;IAAQ,KAAK,KAAK;IAAkB;IAAoB;IAAO,GAAI,WAAW,CAAC,OAAO,KAAK,YAAY,OAAO,SAAS,GAAG,YAAY,KAAK;KACzL,GAAG,cAAc;KACjB;KACA;IACF,CAAC;GAAI,CAAA,GAEC,qBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,KAAK;IAA1C,UAAA,CACG,KAAK,QAAQ,oBAAC,MAAD,EAAM,MAAM,KAAK,KAAO,CAAA,GACrC,KAAK,KACC;GACF,CAAA,CAAA;EACjB,CAAC;CACU,CAAA;AACf,CAAC;AACD,YAAY,cAAc"}
@@ -1,13 +1,14 @@
1
1
  "use client";
2
2
  import { styleProps } from "../styles/stylex/props.mjs";
3
+ import { useMergeRefs } from "../utils/mergeRefs.mjs";
3
4
  import { useThemeMode } from "../styles/theme/scope.mjs";
5
+ import { useEventCallback } from "../hooks/useEventCallback.mjs";
4
6
  import { inputRootStyles, styles } from "./style.mjs";
5
7
  import ClearButton from "./ClearButton.mjs";
6
8
  import { clearNativeValue } from "./clearNativeValue.mjs";
7
9
  import { isPressEnter } from "./pressEnter.mjs";
8
10
  import { memo, useRef, useState } from "react";
9
11
  import { jsx, jsxs } from "react/jsx-runtime";
10
- import { useMergeRefs } from "react-merge-refs";
11
12
  import { Input } from "@base-ui/react/input";
12
13
  //#region src/Input/Input.tsx
13
14
  const hasText = (value) => value !== void 0 && value !== null && String(value).length > 0;
@@ -19,6 +20,10 @@ const Input$1 = memo(({ ref, className, classNames, styles: customStyles, style,
19
20
  const [filled, setFilled] = useState(() => hasText(value ?? defaultValue));
20
21
  const isFilled = value === void 0 ? filled : hasText(value);
21
22
  const showClear = allowClear && isFilled && !disabled && !readOnly;
23
+ const handleClear = useEventCallback(() => {
24
+ clearNativeValue(inputRef.current);
25
+ onClear?.();
26
+ });
22
27
  return /* @__PURE__ */ jsxs("div", {
23
28
  "data-disabled": disabled ? "" : void 0,
24
29
  "data-variant": mergedVariant,
@@ -49,10 +54,7 @@ const Input$1 = memo(({ ref, className, classNames, styles: customStyles, style,
49
54
  },
50
55
  ...rest
51
56
  }),
52
- showClear && /* @__PURE__ */ jsx(ClearButton, { onClear: () => {
53
- clearNativeValue(inputRef.current);
54
- onClear?.();
55
- } }),
57
+ showClear && /* @__PURE__ */ jsx(ClearButton, { onClear: handleClear }),
56
58
  suffix && /* @__PURE__ */ jsx("span", {
57
59
  ...styleProps(styles.slot, classNames?.suffix, customStyles?.suffix),
58
60
  children: suffix
@@ -1 +1 @@
1
- {"version":3,"file":"Input.mjs","names":["Input","BaseInput"],"sources":["../../src/Input/Input.tsx"],"sourcesContent":["'use client';\n\nimport { Input as BaseInput } from '@base-ui/react/input';\nimport { memo, useRef, useState } from 'react';\nimport { useMergeRefs } from 'react-merge-refs';\n\nimport { styleProps } from '@/styles/stylex/props';\nimport { useThemeMode } from '@/styles/theme/scope';\n\nimport ClearButton from './ClearButton';\nimport { clearNativeValue } from './clearNativeValue';\nimport { isPressEnter } from './pressEnter';\nimport { inputRootStyles, styles } from './style';\nimport type { InputProps } from './type';\n\nconst hasText = (value: unknown) =>\n value !== undefined && value !== null && String(value).length > 0;\n\nconst Input = memo<InputProps>(\n ({\n ref,\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n size = 'middle',\n prefix,\n suffix,\n disabled,\n readOnly,\n allowClear,\n onClear,\n onPressEnter,\n onKeyDown,\n onChange,\n value,\n defaultValue,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMergeRefs([ref, inputRef]);\n const [filled, setFilled] = useState(() => hasText(value ?? defaultValue));\n const isFilled = value === undefined ? filled : hasText(value);\n const showClear = allowClear && isFilled && !disabled && !readOnly;\n\n return (\n <div\n data-disabled={disabled ? '' : undefined}\n data-variant={mergedVariant}\n {...styleProps(inputRootStyles({ shadow, size, variant: mergedVariant }), className, style)}\n >\n {prefix && (\n <span {...styleProps(styles.slot, classNames?.prefix, customStyles?.prefix)}>\n {prefix}\n </span>\n )}\n <BaseInput\n defaultValue={defaultValue}\n disabled={disabled}\n readOnly={readOnly}\n ref={mergedRef}\n value={value}\n {...styleProps(styles.input, classNames?.input, customStyles?.input)}\n onChange={(event) => {\n setFilled(event.currentTarget.value.length > 0);\n onChange?.(event);\n }}\n onKeyDown={(event) => {\n if (isPressEnter(event)) onPressEnter?.(event);\n onKeyDown?.(event);\n }}\n {...rest}\n />\n {showClear && (\n <ClearButton\n onClear={() => {\n clearNativeValue(inputRef.current);\n onClear?.();\n }}\n />\n )}\n {suffix && (\n <span {...styleProps(styles.slot, classNames?.suffix, customStyles?.suffix)}>\n {suffix}\n </span>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n\nexport default Object.assign(Input, { formBinding: { emptyValue: '' } as const });\n"],"mappings":";;;;;;;;;;;;AAeA,MAAM,WAAW,UACf,UAAU,KAAA,KAAa,UAAU,QAAQ,OAAO,KAAK,CAAC,CAAC,SAAS;AAElE,MAAMA,UAAQ,MACX,EACC,KACA,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,OAAO,UACP,QACA,QACA,UACA,UACA,YACA,SACA,cACA,WACA,UACA,OACA,cACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAC1D,MAAM,WAAW,OAAyB,IAAI;CAC9C,MAAM,YAAY,aAAa,CAAC,KAAK,QAAQ,CAAC;CAC9C,MAAM,CAAC,QAAQ,aAAa,eAAe,QAAQ,SAAS,YAAY,CAAC;CACzE,MAAM,WAAW,UAAU,KAAA,IAAY,SAAS,QAAQ,KAAK;CAC7D,MAAM,YAAY,cAAc,YAAY,CAAC,YAAY,CAAC;CAE1D,OACE,qBAAC,OAAD;EACE,iBAAe,WAAW,KAAK,KAAA;EAC/B,gBAAc;EACd,GAAI,WAAW,gBAAgB;GAAE;GAAQ;GAAM,SAAS;EAAc,CAAC,GAAG,WAAW,KAAK;EAH5F,UAAA;GAKG,UACC,oBAAC,QAAD;IAAM,GAAI,WAAW,OAAO,MAAM,YAAY,QAAQ,cAAc,MAAM;IACvE,UAAA;GACG,CAAA;GAER,oBAACC,OAAD;IACgB;IACJ;IACA;IACV,KAAK;IACE;IACP,GAAI,WAAW,OAAO,OAAO,YAAY,OAAO,cAAc,KAAK;IACnE,WAAW,UAAU;KACnB,UAAU,MAAM,cAAc,MAAM,SAAS,CAAC;KAC9C,WAAW,KAAK;IAClB;IACA,YAAY,UAAU;KACpB,IAAI,aAAa,KAAK,GAAG,eAAe,KAAK;KAC7C,YAAY,KAAK;IACnB;IACA,GAAI;GACL,CAAA;GACA,aACC,oBAAC,aAAD,EACE,eAAe;IACb,iBAAiB,SAAS,OAAO;IACjC,UAAU;GACZ,EACD,CAAA;GAEF,UACC,oBAAC,QAAD;IAAM,GAAI,WAAW,OAAO,MAAM,YAAY,QAAQ,cAAc,MAAM;IACvE,UAAA;GACG,CAAA;EAEL;;AAET,CACF;AAEA,QAAM,cAAc;AAEpB,IAAA,gBAAe,OAAO,OAAOD,SAAO,EAAE,aAAa,EAAE,YAAY,GAAG,EAAW,CAAC"}
1
+ {"version":3,"file":"Input.mjs","names":["Input","BaseInput"],"sources":["../../src/Input/Input.tsx"],"sourcesContent":["'use client';\n\nimport { Input as BaseInput } from '@base-ui/react/input';\nimport { memo, useRef, useState } from 'react';\n\nimport { useEventCallback } from '@/hooks/useEventCallback';\nimport { styleProps } from '@/styles/stylex/props';\nimport { useThemeMode } from '@/styles/theme/scope';\nimport { useMergeRefs } from '@/utils/mergeRefs';\n\nimport ClearButton from './ClearButton';\nimport { clearNativeValue } from './clearNativeValue';\nimport { isPressEnter } from './pressEnter';\nimport { inputRootStyles, styles } from './style';\nimport type { InputProps } from './type';\n\nconst hasText = (value: unknown) =>\n value !== undefined && value !== null && String(value).length > 0;\n\nconst Input = memo<InputProps>(\n ({\n ref,\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n size = 'middle',\n prefix,\n suffix,\n disabled,\n readOnly,\n allowClear,\n onClear,\n onPressEnter,\n onKeyDown,\n onChange,\n value,\n defaultValue,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n const inputRef = useRef<HTMLInputElement>(null);\n const mergedRef = useMergeRefs([ref, inputRef]);\n const [filled, setFilled] = useState(() => hasText(value ?? defaultValue));\n const isFilled = value === undefined ? filled : hasText(value);\n const showClear = allowClear && isFilled && !disabled && !readOnly;\n\n const handleClear = useEventCallback(() => {\n clearNativeValue(inputRef.current);\n onClear?.();\n });\n\n return (\n <div\n data-disabled={disabled ? '' : undefined}\n data-variant={mergedVariant}\n {...styleProps(inputRootStyles({ shadow, size, variant: mergedVariant }), className, style)}\n >\n {prefix && (\n <span {...styleProps(styles.slot, classNames?.prefix, customStyles?.prefix)}>\n {prefix}\n </span>\n )}\n <BaseInput\n defaultValue={defaultValue}\n disabled={disabled}\n readOnly={readOnly}\n ref={mergedRef}\n value={value}\n {...styleProps(styles.input, classNames?.input, customStyles?.input)}\n onChange={(event) => {\n setFilled(event.currentTarget.value.length > 0);\n onChange?.(event);\n }}\n onKeyDown={(event) => {\n if (isPressEnter(event)) onPressEnter?.(event);\n onKeyDown?.(event);\n }}\n {...rest}\n />\n {showClear && <ClearButton onClear={handleClear} />}\n {suffix && (\n <span {...styleProps(styles.slot, classNames?.suffix, customStyles?.suffix)}>\n {suffix}\n </span>\n )}\n </div>\n );\n },\n);\n\nInput.displayName = 'Input';\n\nexport default Object.assign(Input, { formBinding: { emptyValue: '' } as const });\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,WAAW,UACf,UAAU,KAAA,KAAa,UAAU,QAAQ,OAAO,KAAK,CAAC,CAAC,SAAS;AAElE,MAAMA,UAAQ,MACX,EACC,KACA,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,OAAO,UACP,QACA,QACA,UACA,UACA,YACA,SACA,cACA,WACA,UACA,OACA,cACA,GAAG,WACC;CACJ,MAAM,EAAE,eAAe,aAAa;CACpC,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAC1D,MAAM,WAAW,OAAyB,IAAI;CAC9C,MAAM,YAAY,aAAa,CAAC,KAAK,QAAQ,CAAC;CAC9C,MAAM,CAAC,QAAQ,aAAa,eAAe,QAAQ,SAAS,YAAY,CAAC;CACzE,MAAM,WAAW,UAAU,KAAA,IAAY,SAAS,QAAQ,KAAK;CAC7D,MAAM,YAAY,cAAc,YAAY,CAAC,YAAY,CAAC;CAE1D,MAAM,cAAc,uBAAuB;EACzC,iBAAiB,SAAS,OAAO;EACjC,UAAU;CACZ,CAAC;CAED,OACE,qBAAC,OAAD;EACE,iBAAe,WAAW,KAAK,KAAA;EAC/B,gBAAc;EACd,GAAI,WAAW,gBAAgB;GAAE;GAAQ;GAAM,SAAS;EAAc,CAAC,GAAG,WAAW,KAAK;EAH5F,UAAA;GAKG,UACC,oBAAC,QAAD;IAAM,GAAI,WAAW,OAAO,MAAM,YAAY,QAAQ,cAAc,MAAM;IACvE,UAAA;GACG,CAAA;GAER,oBAACC,OAAD;IACgB;IACJ;IACA;IACV,KAAK;IACE;IACP,GAAI,WAAW,OAAO,OAAO,YAAY,OAAO,cAAc,KAAK;IACnE,WAAW,UAAU;KACnB,UAAU,MAAM,cAAc,MAAM,SAAS,CAAC;KAC9C,WAAW,KAAK;IAClB;IACA,YAAY,UAAU;KACpB,IAAI,aAAa,KAAK,GAAG,eAAe,KAAK;KAC7C,YAAY,KAAK;IACnB;IACA,GAAI;GACL,CAAA;GACA,aAAa,oBAAC,aAAD,EAAa,SAAS,YAAc,CAAA;GACjD,UACC,oBAAC,QAAD;IAAM,GAAI,WAAW,OAAO,MAAM,YAAY,QAAQ,cAAc,MAAM;IACvE,UAAA;GACG,CAAA;EAEL;;AAET,CACF;AAEA,QAAM,cAAc;AAEpB,IAAA,gBAAe,OAAO,OAAOD,SAAO,EAAE,aAAa,EAAE,YAAY,GAAG,EAAW,CAAC"}
@@ -1,5 +1,6 @@
1
1
  "use client";
2
2
  import { styleProps } from "../styles/stylex/props.mjs";
3
+ import { useMergeRefs } from "../utils/mergeRefs.mjs";
3
4
  import { useThemeMode } from "../styles/theme/scope.mjs";
4
5
  import { inputRootStyles, styles } from "./style.mjs";
5
6
  import ClearButton from "./ClearButton.mjs";
@@ -8,7 +9,6 @@ import { isPressEnter } from "./pressEnter.mjs";
8
9
  import { memo, useMemo, useRef, useState } from "react";
9
10
  import { jsx, jsxs } from "react/jsx-runtime";
10
11
  import * as stylex from "@stylexjs/stylex";
11
- import { useMergeRefs } from "react-merge-refs";
12
12
  import { Field } from "@base-ui/react/field";
13
13
  //#region src/Input/TextArea.tsx
14
14
  const textLength = (value) => value === void 0 || value === null ? 0 : Array.from(String(value)).length;
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.mjs","names":[],"sources":["../../src/Input/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport { Field } from '@base-ui/react/field';\nimport * as stylex from '@stylexjs/stylex';\nimport { type CSSProperties, memo, useMemo, useRef, useState } from 'react';\nimport { useMergeRefs } from 'react-merge-refs';\n\nimport { styleProps } from '@/styles/stylex/props';\nimport { useThemeMode } from '@/styles/theme/scope';\n\nimport ClearButton from './ClearButton';\nimport { clearNativeValue } from './clearNativeValue';\nimport { isPressEnter } from './pressEnter';\nimport { inputRootStyles, styles } from './style';\nimport type { TextAreaProps } from './type';\n\nconst textLength = (value: unknown) =>\n value === undefined || value === null ? 0 : Array.from(String(value)).length;\n\nconst TextArea = memo<TextAreaProps>(\n ({\n ref,\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n autoSize,\n resize = false,\n disabled,\n readOnly,\n allowClear,\n onClear,\n onPressEnter,\n onKeyDown,\n onChange,\n showCount,\n maxLength,\n value,\n defaultValue,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const mergedRef = useMergeRefs([ref, textareaRef]);\n const [innerLength, setInnerLength] = useState(() => textLength(value ?? defaultValue));\n const length = value === undefined ? innerLength : textLength(value);\n const showClear = allowClear && length > 0 && !disabled && !readOnly;\n const over = maxLength !== undefined && length > maxLength;\n\n const cssVariables = useMemo<CSSProperties>(() => {\n if (typeof autoSize !== 'object') return {};\n return {\n '--textarea-max-height': autoSize.maxRows ? `calc(1.5em * ${autoSize.maxRows})` : undefined,\n '--textarea-min-rows': autoSize.minRows,\n } as CSSProperties;\n }, [autoSize]);\n\n return (\n <div\n data-disabled={disabled ? '' : undefined}\n data-variant={mergedVariant}\n {...styleProps(\n [\n ...inputRootStyles({ shadow, variant: mergedVariant }),\n styles.textarea,\n showCount && styles.textareaWithCount,\n ],\n className,\n { ...cssVariables, ...style },\n )}\n >\n <Field.Control\n disabled={disabled}\n {...styleProps(\n [\n styles.input,\n styles.textareaControl,\n autoSize && styles.textareaAutoSize,\n resize && styles.textareaResize,\n ],\n classNames?.input,\n customStyles?.input,\n )}\n render={\n <textarea\n defaultValue={defaultValue}\n maxLength={maxLength}\n readOnly={readOnly}\n ref={mergedRef}\n value={value}\n onChange={(event) => {\n setInnerLength(textLength(event.currentTarget.value));\n onChange?.(event);\n }}\n onKeyDown={(event) => {\n if (isPressEnter(event)) onPressEnter?.(event);\n onKeyDown?.(event);\n }}\n {...rest}\n />\n }\n />\n {showClear && (\n <ClearButton\n xstyle={styles.textareaClear}\n onClear={() => {\n clearNativeValue(textareaRef.current);\n onClear?.();\n }}\n />\n )}\n {showCount && (\n <span data-over={over ? '' : undefined} {...stylex.props(styles.count)}>\n {maxLength === undefined ? length : `${length} / ${maxLength}`}\n </span>\n )}\n </div>\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default Object.assign(TextArea, { formBinding: { emptyValue: '' } as const });\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,cAAc,UAAmB,UAAU,KAAA,KAAa,UAAU,OAAO,IAAI,MAAM,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;AAC7G,MAAM,WAAW,MAAqB,EACpC,KACA,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,UACA,SAAS,OACT,UACA,UACA,YACA,SACA,cACA,WACA,UACA,WACA,WACA,OACA,cACA,GAAG,WACC;CACJ,MAAM,EACJ,eACE,aAAa;CACjB,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAC1D,MAAM,cAAc,OAA4B,IAAI;CACpD,MAAM,YAAY,aAAa,CAAC,KAAK,WAAW,CAAC;CACjD,MAAM,CAAC,aAAa,kBAAkB,eAAe,WAAW,SAAS,YAAY,CAAC;CACtF,MAAM,SAAS,UAAU,KAAA,IAAY,cAAc,WAAW,KAAK;CACnE,MAAM,YAAY,cAAc,SAAS,KAAK,CAAC,YAAY,CAAC;CAC5D,MAAM,OAAO,cAAc,KAAA,KAAa,SAAS;CACjD,MAAM,eAAe,cAA6B;EAChD,IAAI,OAAO,aAAa,UAAU,OAAO,CAAC;EAC1C,OAAO;GACL,yBAAyB,SAAS,UAAU,gBAAgB,SAAS,QAAQ,KAAK,KAAA;GAClF,uBAAuB,SAAS;EAClC;CACF,GAAG,CAAC,QAAQ,CAAC;CACb,OAAO,qBAAC,OAAD;EAAK,iBAAe,WAAW,KAAK,KAAA;EAAW,gBAAc;EAAe,GAAI,WAAW;GAAC,GAAG,gBAAgB;IACpH;IACA,SAAS;GACX,CAAC;GAAG,OAAO;GAAU,aAAa,OAAO;EAAiB,GAAG,WAAW;GACtE,GAAG;GACH,GAAG;EACL,CAAC;EANM,UAAA;GAOD,oBAAC,MAAM,SAAP;IAAyB;IAAU,GAAI,WAAW;KAAC,OAAO;KAAO,OAAO;KAAiB,YAAY,OAAO;KAAkB,UAAU,OAAO;IAAc,GAAG,YAAY,OAAO,cAAc,KAAK;IAAG,QAAQ,oBAAC,YAAD;KAAwB;KAAyB;KAAqB;KAAU,KAAK;KAAkB;KAAO,WAAU,UAAS;MACpV,eAAe,WAAW,MAAM,cAAc,KAAK,CAAC;MACpD,WAAW,KAAK;KAClB;KAAG,YAAW,UAAS;MACrB,IAAI,aAAa,KAAK,GAAG,eAAe,KAAK;MAC7C,YAAY,KAAK;KACnB;KAAG,GAAI;IAAO,CAAA;GAAI,CAAA;GACb,aAAa,oBAAC,aAAD;IAAa,QAAQ,OAAO;IAAe,eAAe;KAC1E,iBAAiB,YAAY,OAAO;KACpC,UAAU;IACZ;GAAI,CAAA;GACC,aAAa,oBAAC,QAAD;IAAM,aAAW,OAAO,KAAK,KAAA;IAAW,GAAI,OAAO,MAAM,OAAO,KAAK;IAC9E,UAAA,cAAc,KAAA,IAAY,SAAS,GAAG,OAAO,KAAK;GAC/C,CAAA;EACL;;AACX,CAAC;AACD,SAAS,cAAc;AACvB,IAAA,mBAAe,OAAO,OAAO,UAAU,EACrC,aAAa,EACX,YAAY,GACd,EACF,CAAC"}
1
+ {"version":3,"file":"TextArea.mjs","names":[],"sources":["../../src/Input/TextArea.tsx"],"sourcesContent":["'use client';\n\nimport { Field } from '@base-ui/react/field';\nimport * as stylex from '@stylexjs/stylex';\nimport { type CSSProperties, memo, useMemo, useRef, useState } from 'react';\n\nimport { styleProps } from '@/styles/stylex/props';\nimport { useThemeMode } from '@/styles/theme/scope';\nimport { useMergeRefs } from '@/utils/mergeRefs';\n\nimport ClearButton from './ClearButton';\nimport { clearNativeValue } from './clearNativeValue';\nimport { isPressEnter } from './pressEnter';\nimport { inputRootStyles, styles } from './style';\nimport type { TextAreaProps } from './type';\n\nconst textLength = (value: unknown) =>\n value === undefined || value === null ? 0 : Array.from(String(value)).length;\n\nconst TextArea = memo<TextAreaProps>(\n ({\n ref,\n className,\n classNames,\n styles: customStyles,\n style,\n variant,\n shadow,\n autoSize,\n resize = false,\n disabled,\n readOnly,\n allowClear,\n onClear,\n onPressEnter,\n onKeyDown,\n onChange,\n showCount,\n maxLength,\n value,\n defaultValue,\n ...rest\n }) => {\n const { isDarkMode } = useThemeMode();\n const mergedVariant = variant || (isDarkMode ? 'filled' : 'outlined');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const mergedRef = useMergeRefs([ref, textareaRef]);\n const [innerLength, setInnerLength] = useState(() => textLength(value ?? defaultValue));\n const length = value === undefined ? innerLength : textLength(value);\n const showClear = allowClear && length > 0 && !disabled && !readOnly;\n const over = maxLength !== undefined && length > maxLength;\n\n const cssVariables = useMemo<CSSProperties>(() => {\n if (typeof autoSize !== 'object') return {};\n return {\n '--textarea-max-height': autoSize.maxRows ? `calc(1.5em * ${autoSize.maxRows})` : undefined,\n '--textarea-min-rows': autoSize.minRows,\n } as CSSProperties;\n }, [autoSize]);\n\n return (\n <div\n data-disabled={disabled ? '' : undefined}\n data-variant={mergedVariant}\n {...styleProps(\n [\n ...inputRootStyles({ shadow, variant: mergedVariant }),\n styles.textarea,\n showCount && styles.textareaWithCount,\n ],\n className,\n { ...cssVariables, ...style },\n )}\n >\n <Field.Control\n disabled={disabled}\n {...styleProps(\n [\n styles.input,\n styles.textareaControl,\n autoSize && styles.textareaAutoSize,\n resize && styles.textareaResize,\n ],\n classNames?.input,\n customStyles?.input,\n )}\n render={\n <textarea\n defaultValue={defaultValue}\n maxLength={maxLength}\n readOnly={readOnly}\n ref={mergedRef}\n value={value}\n onChange={(event) => {\n setInnerLength(textLength(event.currentTarget.value));\n onChange?.(event);\n }}\n onKeyDown={(event) => {\n if (isPressEnter(event)) onPressEnter?.(event);\n onKeyDown?.(event);\n }}\n {...rest}\n />\n }\n />\n {showClear && (\n <ClearButton\n xstyle={styles.textareaClear}\n onClear={() => {\n clearNativeValue(textareaRef.current);\n onClear?.();\n }}\n />\n )}\n {showCount && (\n <span data-over={over ? '' : undefined} {...stylex.props(styles.count)}>\n {maxLength === undefined ? length : `${length} / ${maxLength}`}\n </span>\n )}\n </div>\n );\n },\n);\n\nTextArea.displayName = 'TextArea';\n\nexport default Object.assign(TextArea, { formBinding: { emptyValue: '' } as const });\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAM,cAAc,UAAmB,UAAU,KAAA,KAAa,UAAU,OAAO,IAAI,MAAM,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;AAC7G,MAAM,WAAW,MAAqB,EACpC,KACA,WACA,YACA,QAAQ,cACR,OACA,SACA,QACA,UACA,SAAS,OACT,UACA,UACA,YACA,SACA,cACA,WACA,UACA,WACA,WACA,OACA,cACA,GAAG,WACC;CACJ,MAAM,EACJ,eACE,aAAa;CACjB,MAAM,gBAAgB,YAAY,aAAa,WAAW;CAC1D,MAAM,cAAc,OAA4B,IAAI;CACpD,MAAM,YAAY,aAAa,CAAC,KAAK,WAAW,CAAC;CACjD,MAAM,CAAC,aAAa,kBAAkB,eAAe,WAAW,SAAS,YAAY,CAAC;CACtF,MAAM,SAAS,UAAU,KAAA,IAAY,cAAc,WAAW,KAAK;CACnE,MAAM,YAAY,cAAc,SAAS,KAAK,CAAC,YAAY,CAAC;CAC5D,MAAM,OAAO,cAAc,KAAA,KAAa,SAAS;CACjD,MAAM,eAAe,cAA6B;EAChD,IAAI,OAAO,aAAa,UAAU,OAAO,CAAC;EAC1C,OAAO;GACL,yBAAyB,SAAS,UAAU,gBAAgB,SAAS,QAAQ,KAAK,KAAA;GAClF,uBAAuB,SAAS;EAClC;CACF,GAAG,CAAC,QAAQ,CAAC;CACb,OAAO,qBAAC,OAAD;EAAK,iBAAe,WAAW,KAAK,KAAA;EAAW,gBAAc;EAAe,GAAI,WAAW;GAAC,GAAG,gBAAgB;IACpH;IACA,SAAS;GACX,CAAC;GAAG,OAAO;GAAU,aAAa,OAAO;EAAiB,GAAG,WAAW;GACtE,GAAG;GACH,GAAG;EACL,CAAC;EANM,UAAA;GAOD,oBAAC,MAAM,SAAP;IAAyB;IAAU,GAAI,WAAW;KAAC,OAAO;KAAO,OAAO;KAAiB,YAAY,OAAO;KAAkB,UAAU,OAAO;IAAc,GAAG,YAAY,OAAO,cAAc,KAAK;IAAG,QAAQ,oBAAC,YAAD;KAAwB;KAAyB;KAAqB;KAAU,KAAK;KAAkB;KAAO,WAAU,UAAS;MACpV,eAAe,WAAW,MAAM,cAAc,KAAK,CAAC;MACpD,WAAW,KAAK;KAClB;KAAG,YAAW,UAAS;MACrB,IAAI,aAAa,KAAK,GAAG,eAAe,KAAK;MAC7C,YAAY,KAAK;KACnB;KAAG,GAAI;IAAO,CAAA;GAAI,CAAA;GACb,aAAa,oBAAC,aAAD;IAAa,QAAQ,OAAO;IAAe,eAAe;KAC1E,iBAAiB,YAAY,OAAO;KACpC,UAAU;IACZ;GAAI,CAAA;GACC,aAAa,oBAAC,QAAD;IAAM,aAAW,OAAO,KAAK,KAAA;IAAW,GAAI,OAAO,MAAM,OAAO,KAAK;IAC9E,UAAA,cAAc,KAAA,IAAY,SAAS,GAAG,OAAO,KAAK;GAC/C,CAAA;EACL;;AACX,CAAC;AACD,SAAS,cAAc;AACvB,IAAA,mBAAe,OAAO,OAAO,UAAU,EACrC,aAAa,EACX,YAAY,GACd,EACF,CAAC"}
@@ -37,4 +37,5 @@ export declare const inputClassNames: {
37
37
  textareaWithCount: string;
38
38
  };
39
39
  //#endregion
40
+ export {};
40
41
  //# sourceMappingURL=style.d.mts.map
@@ -164,11 +164,11 @@ const styles = {
164
164
  kmkexE: "lbavbupb",
165
165
  kGNEyG: "lb6s0dn4",
166
166
  kB7OPa: "lb9f619",
167
- kMwMTN: "lb66ogz0 lb1pedyqg",
168
- kkrTdU: "lb1ed109x lbzoe6q",
167
+ kMwMTN: "lb66ogz0 lb1k6ehaq",
168
+ kkrTdU: "lb1ed109x lb1btkyy5",
169
169
  k1xSpc: "lb3nfvp2",
170
170
  kGuDYH: "lbif65rj",
171
- kSiTet: "lbb5d7sw",
171
+ kSiTet: "lb1gf9ui9",
172
172
  kzqmXN: "lbh8yej3",
173
173
  $$css: true
174
174
  },
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Input/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { inputMarker } from './marker.stylex';\nimport type { InputSize, InputVariant } from './type';\n\nconst disabled = ':is([data-disabled], :has(:disabled))';\nconst hover = ':hover:not(:focus-within, [data-disabled])';\nconst invalid = \":has([data-invalid], [aria-invalid='true'])\";\nconst invalidIdle =\n \":has([data-invalid], [aria-invalid='true']):is(:focus-within, :not(:hover), [data-disabled])\";\nconst invalidFocus = \":has([data-invalid], [aria-invalid='true']):focus-within\";\nconst validFocus = \":focus-within:not(:has([data-invalid], [aria-invalid='true']))\";\n\nconst lobeShadow = `0 1px 0 -1px ${cssVar.colorBorder}, 0 1px 2px -0.5px ${cssVar.colorBorder}, 0 2px 2px -1px ${cssVar.colorBorderSecondary}, 0 3px 6px -4px ${cssVar.colorBorderSecondary}`;\nconst primaryRing = `0 0 0 2px ${cssVar.colorPrimaryBg}`;\nconst errorRing = `0 0 0 2px ${cssVar.colorErrorBg}`;\n\nexport const styles = stylex.create({\n borderless: {\n borderColor: { default: 'transparent', [invalid]: cssVar.colorError },\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n boxShadow: { default: null, [invalidFocus]: errorRing },\n },\n clear: {\n padding: 0,\n borderColor: 'currentcolor',\n borderRadius: '50%',\n borderStyle: 'none',\n borderWidth: 0,\n flex: 'none',\n alignItems: 'center',\n backgroundColor: {\n 'default': cssVar.colorTextQuaternary,\n ':hover': cssVar.colorTextTertiary,\n },\n color: cssVar.colorBgContainer,\n cursor: 'pointer',\n display: 'inline-flex',\n justifyContent: 'center',\n visibility: {\n default: 'hidden',\n [stylex.when.ancestor(':focus-within', inputMarker)]: 'visible',\n [stylex.when.ancestor(':hover', inputMarker)]: 'visible',\n },\n height: 16,\n width: 16,\n },\n count: {\n borderRadius: 999,\n paddingInline: 8,\n alignItems: 'center',\n backgroundColor: {\n 'default': cssVar.colorFillTertiary,\n ':is([data-over])': cssVar.colorError,\n },\n color: {\n 'default': cssVar.colorTextSecondary,\n ':is([data-over])': cssVar.colorWhite,\n },\n display: 'inline-flex',\n fontSize: 11,\n fontVariantNumeric: 'tabular-nums',\n fontWeight: 600,\n insetBlockEnd: 6,\n insetInlineEnd: 8,\n pointerEvents: 'none',\n position: 'absolute',\n height: 20,\n },\n filled: {\n borderColor: { default: 'transparent', [invalid]: cssVar.colorError },\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: {\n default: cssVar.colorFillTertiary,\n [hover]: cssVar.colorFillSecondary,\n },\n boxShadow: { default: null, [invalidFocus]: errorRing },\n },\n input: {\n 'font': 'inherit',\n 'padding': 0,\n 'borderColor': 'currentcolor',\n 'borderStyle': 'none',\n 'borderWidth': 'medium',\n 'flex': '1',\n 'outline': 'none',\n 'appearance': 'none',\n 'backgroundColor': 'transparent',\n 'color': 'inherit',\n 'minWidth': 0,\n '::placeholder': {\n color: cssVar.colorTextPlaceholder,\n },\n },\n numberControl: {\n margin: 0,\n padding: 0,\n borderColor: 'currentcolor',\n borderRadius: 4,\n borderStyle: 'none',\n borderWidth: 'medium',\n outline: 'none',\n transition: `color 150ms ${cssVar.motionEaseOut}, background 150ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: {\n 'default': 'transparent',\n ':hover:not(:disabled)': cssVar.colorFillSecondary,\n },\n color: {\n 'default': cssVar.colorTextTertiary,\n ':hover:not(:disabled)': cssVar.colorText,\n },\n cursor: { 'default': 'pointer', ':disabled': 'not-allowed' },\n display: 'flex',\n justifyContent: 'center',\n opacity: { 'default': null, ':disabled': 0.3 },\n height: 13,\n width: 20,\n },\n numberControlLarge: {\n height: 15,\n width: 22,\n },\n numberControls: {\n flex: 'none',\n display: 'flex',\n flexDirection: 'column',\n marginInlineEnd: -6,\n },\n numberControlSmall: {\n borderRadius: 3,\n height: 10,\n width: 16,\n },\n numberControlsSmall: {\n marginInlineEnd: -4,\n },\n numberInput: {\n fontVariantNumeric: 'tabular-nums',\n },\n otpCell: {\n flex: 'none',\n paddingInline: 0,\n textAlign: 'center',\n width: 32,\n },\n otpRoot: {\n gap: 8,\n alignItems: 'center',\n display: 'inline-flex',\n },\n outlined: {\n borderColor: {\n default: cssVar.colorBorderSecondary,\n [hover]: cssVar.colorBorder,\n [invalidIdle]: cssVar.colorError,\n [validFocus]: cssVar.colorPrimary,\n },\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: cssVar.colorBgContainer,\n boxShadow: { default: null, [invalidFocus]: errorRing, [validFocus]: primaryRing },\n },\n passwordToggle: {\n margin: 0,\n padding: 0,\n borderColor: 'currentcolor',\n borderStyle: 'none',\n borderWidth: 'medium',\n outline: 'none',\n transition: `color 150ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: 'transparent',\n color: { 'default': cssVar.colorTextTertiary, ':hover': cssVar.colorText },\n cursor: 'pointer',\n display: 'inline-flex',\n justifyContent: 'center',\n },\n root: {\n borderRadius: cssVar.borderRadius,\n gap: 8,\n paddingInline: 12,\n transition: `background 150ms ${cssVar.motionEaseOut}, border-color 150ms ${cssVar.motionEaseOut}, box-shadow 150ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n boxSizing: 'border-box',\n color: { default: cssVar.colorText, [disabled]: cssVar.colorTextQuaternary },\n cursor: { default: 'text', [disabled]: 'not-allowed' },\n display: 'inline-flex',\n fontSize: 14,\n opacity: { default: null, [disabled]: 0.66 },\n width: '100%',\n },\n shadow: {\n boxShadow: { default: lobeShadow, [invalidFocus]: errorRing },\n },\n shadowOutlined: {\n boxShadow: { default: lobeShadow, [invalidFocus]: errorRing, [validFocus]: primaryRing },\n },\n sizeLarge: {\n borderRadius: cssVar.borderRadiusLG,\n fontSize: 16,\n minHeight: 40,\n },\n sizeMiddle: {\n minHeight: 32,\n },\n sizeSmall: {\n borderRadius: cssVar.borderRadiusSM,\n paddingInline: 8,\n fontSize: 12,\n minHeight: 24,\n },\n slot: {\n flex: 'none',\n alignItems: 'center',\n color: cssVar.colorTextTertiary,\n display: 'inline-flex',\n },\n textarea: {\n paddingBlock: 8,\n position: 'relative',\n height: 'auto',\n },\n textareaAutoSize: {\n fieldSizing: 'content',\n },\n textareaClear: {\n insetBlockStart: 10,\n insetInlineEnd: 10,\n position: 'absolute',\n },\n textareaControl: {\n lineHeight: 1.5,\n resize: 'none',\n maxHeight: 'var(--textarea-max-height, none)',\n minHeight: 'calc(1.5em * var(--textarea-min-rows, 2))',\n },\n textareaResize: {\n resize: 'vertical',\n },\n textareaWithCount: {\n paddingBlockEnd: 30,\n },\n});\n\nconst sizeStyles = {\n large: styles.sizeLarge,\n middle: styles.sizeMiddle,\n small: styles.sizeSmall,\n};\n\nconst variantStyles = {\n borderless: styles.borderless,\n filled: styles.filled,\n outlined: styles.outlined,\n};\n\ninterface RootOptions {\n shadow?: boolean | null;\n size?: InputSize | null;\n variant?: InputVariant | null;\n}\n\nexport const inputRootStyles = ({ shadow, size, variant }: RootOptions = {}) => {\n const mergedVariant = variant || 'outlined';\n return [\n inputMarker,\n styles.root,\n sizeStyles[size || 'middle'],\n variantStyles[mergedVariant],\n shadow && (mergedVariant === 'outlined' ? styles.shadowOutlined : styles.shadow),\n ];\n};\n\nexport const rootVariants = (options?: RootOptions) =>\n stylex.props(inputRootStyles(options)).className ?? '';\n\nconst className = (style: Parameters<typeof styleProps>[0]) => styleProps(style).className;\n\nexport const inputClassNames = {\n borderless: className(styles.borderless),\n clear: className(styles.clear),\n count: className(styles.count),\n filled: className(styles.filled),\n input: className(styles.input),\n invalid: '',\n numberControl: className(styles.numberControl),\n numberControlLarge: className(styles.numberControlLarge),\n numberControls: className(styles.numberControls),\n numberControlSmall: className(styles.numberControlSmall),\n numberControlsSmall: className(styles.numberControlsSmall),\n numberInput: className(styles.numberInput),\n otpCell: className(styles.otpCell),\n otpRoot: className(styles.otpRoot),\n outlined: className(styles.outlined),\n passwordToggle: className(styles.passwordToggle),\n root: className([inputMarker, styles.root]),\n shadow: className(styles.shadow),\n sizeLarge: className(styles.sizeLarge),\n sizeMiddle: className(styles.sizeMiddle),\n sizeSmall: className(styles.sizeSmall),\n slot: className(styles.slot),\n textarea: className(styles.textarea),\n textareaAutoSize: className(styles.textareaAutoSize),\n textareaClear: className(styles.textareaClear),\n textareaResize: className(styles.textareaResize),\n textareaWithCount: className(styles.textareaWithCount),\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../src/Input/style.ts"],"sourcesContent":["import * as stylex from '@stylexjs/stylex';\n\nimport { cssVar } from '@/styles/stylex/cssVar.stylex';\nimport { styleProps } from '@/styles/stylex/props';\n\nimport { inputMarker } from './marker.stylex';\nimport type { InputSize, InputVariant } from './type';\n\nexport const disabledControl = 'input:disabled, textarea:disabled';\n\nconst disabled = `:is([data-disabled], :has(${disabledControl}))`;\nconst hover = ':hover:not(:focus-within, [data-disabled])';\nconst invalid = \":has([data-invalid], [aria-invalid='true'])\";\nconst invalidIdle =\n \":has([data-invalid], [aria-invalid='true']):is(:focus-within, :not(:hover), [data-disabled])\";\nconst invalidFocus = \":has([data-invalid], [aria-invalid='true']):focus-within\";\nconst validFocus = \":focus-within:not(:has([data-invalid], [aria-invalid='true']))\";\n\nconst lobeShadow = `0 1px 0 -1px ${cssVar.colorBorder}, 0 1px 2px -0.5px ${cssVar.colorBorder}, 0 2px 2px -1px ${cssVar.colorBorderSecondary}, 0 3px 6px -4px ${cssVar.colorBorderSecondary}`;\nconst primaryRing = `0 0 0 2px ${cssVar.colorPrimaryBg}`;\nconst errorRing = `0 0 0 2px ${cssVar.colorErrorBg}`;\n\nexport const styles = stylex.create({\n borderless: {\n borderColor: { default: 'transparent', [invalid]: cssVar.colorError },\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n boxShadow: { default: null, [invalidFocus]: errorRing },\n },\n clear: {\n padding: 0,\n borderColor: 'currentcolor',\n borderRadius: '50%',\n borderStyle: 'none',\n borderWidth: 0,\n flex: 'none',\n alignItems: 'center',\n backgroundColor: {\n 'default': cssVar.colorTextQuaternary,\n ':hover': cssVar.colorTextTertiary,\n },\n color: cssVar.colorBgContainer,\n cursor: 'pointer',\n display: 'inline-flex',\n justifyContent: 'center',\n visibility: {\n default: 'hidden',\n [stylex.when.ancestor(':focus-within', inputMarker)]: 'visible',\n [stylex.when.ancestor(':hover', inputMarker)]: 'visible',\n },\n height: 16,\n width: 16,\n },\n count: {\n borderRadius: 999,\n paddingInline: 8,\n alignItems: 'center',\n backgroundColor: {\n 'default': cssVar.colorFillTertiary,\n ':is([data-over])': cssVar.colorError,\n },\n color: {\n 'default': cssVar.colorTextSecondary,\n ':is([data-over])': cssVar.colorWhite,\n },\n display: 'inline-flex',\n fontSize: 11,\n fontVariantNumeric: 'tabular-nums',\n fontWeight: 600,\n insetBlockEnd: 6,\n insetInlineEnd: 8,\n pointerEvents: 'none',\n position: 'absolute',\n height: 20,\n },\n filled: {\n borderColor: { default: 'transparent', [invalid]: cssVar.colorError },\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: {\n default: cssVar.colorFillTertiary,\n [hover]: cssVar.colorFillSecondary,\n },\n boxShadow: { default: null, [invalidFocus]: errorRing },\n },\n input: {\n 'font': 'inherit',\n 'padding': 0,\n 'borderColor': 'currentcolor',\n 'borderStyle': 'none',\n 'borderWidth': 'medium',\n 'flex': '1',\n 'outline': 'none',\n 'appearance': 'none',\n 'backgroundColor': 'transparent',\n 'color': 'inherit',\n 'minWidth': 0,\n '::placeholder': {\n color: cssVar.colorTextPlaceholder,\n },\n },\n numberControl: {\n margin: 0,\n padding: 0,\n borderColor: 'currentcolor',\n borderRadius: 4,\n borderStyle: 'none',\n borderWidth: 'medium',\n outline: 'none',\n transition: `color 150ms ${cssVar.motionEaseOut}, background 150ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: {\n 'default': 'transparent',\n ':hover:not(:disabled)': cssVar.colorFillSecondary,\n },\n color: {\n 'default': cssVar.colorTextTertiary,\n ':hover:not(:disabled)': cssVar.colorText,\n },\n cursor: { 'default': 'pointer', ':disabled': 'not-allowed' },\n display: 'flex',\n justifyContent: 'center',\n opacity: { 'default': null, ':disabled': 0.3 },\n height: 13,\n width: 20,\n },\n numberControlLarge: {\n height: 15,\n width: 22,\n },\n numberControls: {\n flex: 'none',\n display: 'flex',\n flexDirection: 'column',\n marginInlineEnd: -6,\n },\n numberControlSmall: {\n borderRadius: 3,\n height: 10,\n width: 16,\n },\n numberControlsSmall: {\n marginInlineEnd: -4,\n },\n numberInput: {\n fontVariantNumeric: 'tabular-nums',\n },\n otpCell: {\n flex: 'none',\n paddingInline: 0,\n textAlign: 'center',\n width: 32,\n },\n otpRoot: {\n gap: 8,\n alignItems: 'center',\n display: 'inline-flex',\n },\n outlined: {\n borderColor: {\n default: cssVar.colorBorderSecondary,\n [hover]: cssVar.colorBorder,\n [invalidIdle]: cssVar.colorError,\n [validFocus]: cssVar.colorPrimary,\n },\n borderStyle: 'solid',\n borderWidth: 1,\n backgroundColor: cssVar.colorBgContainer,\n boxShadow: { default: null, [invalidFocus]: errorRing, [validFocus]: primaryRing },\n },\n passwordToggle: {\n margin: 0,\n padding: 0,\n borderColor: 'currentcolor',\n borderStyle: 'none',\n borderWidth: 'medium',\n outline: 'none',\n transition: `color 150ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n backgroundColor: 'transparent',\n color: { 'default': cssVar.colorTextTertiary, ':hover': cssVar.colorText },\n cursor: 'pointer',\n display: 'inline-flex',\n justifyContent: 'center',\n },\n root: {\n borderRadius: cssVar.borderRadius,\n gap: 8,\n paddingInline: 12,\n transition: `background 150ms ${cssVar.motionEaseOut}, border-color 150ms ${cssVar.motionEaseOut}, box-shadow 150ms ${cssVar.motionEaseOut}`,\n alignItems: 'center',\n boxSizing: 'border-box',\n color: { default: cssVar.colorText, [disabled]: cssVar.colorTextQuaternary },\n cursor: { default: 'text', [disabled]: 'not-allowed' },\n display: 'inline-flex',\n fontSize: 14,\n opacity: { default: null, [disabled]: 0.66 },\n width: '100%',\n },\n shadow: {\n boxShadow: { default: lobeShadow, [invalidFocus]: errorRing },\n },\n shadowOutlined: {\n boxShadow: { default: lobeShadow, [invalidFocus]: errorRing, [validFocus]: primaryRing },\n },\n sizeLarge: {\n borderRadius: cssVar.borderRadiusLG,\n fontSize: 16,\n minHeight: 40,\n },\n sizeMiddle: {\n minHeight: 32,\n },\n sizeSmall: {\n borderRadius: cssVar.borderRadiusSM,\n paddingInline: 8,\n fontSize: 12,\n minHeight: 24,\n },\n slot: {\n flex: 'none',\n alignItems: 'center',\n color: cssVar.colorTextTertiary,\n display: 'inline-flex',\n },\n textarea: {\n paddingBlock: 8,\n position: 'relative',\n height: 'auto',\n },\n textareaAutoSize: {\n fieldSizing: 'content',\n },\n textareaClear: {\n insetBlockStart: 10,\n insetInlineEnd: 10,\n position: 'absolute',\n },\n textareaControl: {\n lineHeight: 1.5,\n resize: 'none',\n maxHeight: 'var(--textarea-max-height, none)',\n minHeight: 'calc(1.5em * var(--textarea-min-rows, 2))',\n },\n textareaResize: {\n resize: 'vertical',\n },\n textareaWithCount: {\n paddingBlockEnd: 30,\n },\n});\n\nconst sizeStyles = {\n large: styles.sizeLarge,\n middle: styles.sizeMiddle,\n small: styles.sizeSmall,\n};\n\nconst variantStyles = {\n borderless: styles.borderless,\n filled: styles.filled,\n outlined: styles.outlined,\n};\n\ninterface RootOptions {\n shadow?: boolean | null;\n size?: InputSize | null;\n variant?: InputVariant | null;\n}\n\nexport const inputRootStyles = ({ shadow, size, variant }: RootOptions = {}) => {\n const mergedVariant = variant || 'outlined';\n return [\n inputMarker,\n styles.root,\n sizeStyles[size || 'middle'],\n variantStyles[mergedVariant],\n shadow && (mergedVariant === 'outlined' ? styles.shadowOutlined : styles.shadow),\n ];\n};\n\nexport const rootVariants = (options?: RootOptions) =>\n stylex.props(inputRootStyles(options)).className ?? '';\n\nconst className = (style: Parameters<typeof styleProps>[0]) => styleProps(style).className;\n\nexport const inputClassNames = {\n borderless: className(styles.borderless),\n clear: className(styles.clear),\n count: className(styles.count),\n filled: className(styles.filled),\n input: className(styles.input),\n invalid: '',\n numberControl: className(styles.numberControl),\n numberControlLarge: className(styles.numberControlLarge),\n numberControls: className(styles.numberControls),\n numberControlSmall: className(styles.numberControlSmall),\n numberControlsSmall: className(styles.numberControlsSmall),\n numberInput: className(styles.numberInput),\n otpCell: className(styles.otpCell),\n otpRoot: className(styles.otpRoot),\n outlined: className(styles.outlined),\n passwordToggle: className(styles.passwordToggle),\n root: className([inputMarker, styles.root]),\n shadow: className(styles.shadow),\n sizeLarge: className(styles.sizeLarge),\n sizeMiddle: className(styles.sizeMiddle),\n sizeSmall: className(styles.sizeSmall),\n slot: className(styles.slot),\n textarea: className(styles.textarea),\n textareaAutoSize: className(styles.textareaAutoSize),\n textareaClear: className(styles.textareaClear),\n textareaResize: className(styles.textareaResize),\n textareaWithCount: className(styles.textareaWithCount),\n};\n"],"mappings":"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"}
@@ -128,4 +128,5 @@ export interface TextAreaProps extends Omit<ComponentProps<'textarea'>, 'prefix'
128
128
  styles?: Pick<InputStyles, 'input'>;
129
129
  }
130
130
  //#endregion
131
+ export {};
131
132
  //# sourceMappingURL=type.d.mts.map
@@ -7,7 +7,7 @@ import { listItemMarker } from "./marker.stylex.mjs";
7
7
  import { styles } from "./style.mjs";
8
8
  import { memo } from "react";
9
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
- import clsx from "clsx";
10
+ import clsx$1 from "clsx";
11
11
  import * as stylex from "@stylexjs/stylex";
12
12
  //#region src/List/ListRow.tsx
13
13
  const ListRow = memo(({ active, classNames, compact, item, onSelect, styles: customStyles, xstyle }) => {
@@ -27,7 +27,7 @@ const ListRow = memo(({ active, classNames, compact, item, onSelect, styles: cus
27
27
  danger && styles.danger,
28
28
  disabled && styles.disabled,
29
29
  xstyle?.(item, active)
30
- ], clsx(classNames?.item, item.className)).className;
30
+ ], clsx$1(classNames?.item, item.className)).className;
31
31
  const rowStyle = {
32
32
  ...customStyles?.item,
33
33
  ...item.style
@@ -40,7 +40,7 @@ const ListRow = memo(({ active, classNames, compact, item, onSelect, styles: cus
40
40
  /* @__PURE__ */ jsxs("span", {
41
41
  ...stylex.props(styles.body),
42
42
  children: [/* @__PURE__ */ jsx("span", {
43
- ...styleProps(styles.label, clsx("lobe-list-label", classNames?.label), customStyles?.label),
43
+ ...styleProps(styles.label, clsx$1("lobe-list-label", classNames?.label), customStyles?.label),
44
44
  children: label
45
45
  }), description != null && /* @__PURE__ */ jsx("span", {
46
46
  ...styleProps(styles.description, classNames?.description, customStyles?.description),