@djangocfg/ui-tools 2.1.412 → 2.1.413

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 (812) hide show
  1. package/README.md +2 -1
  2. package/dist/file-icon/index.cjs +3 -3
  3. package/dist/file-icon/index.cjs.map +1 -1
  4. package/dist/file-icon/index.d.cts +1 -1
  5. package/dist/file-icon/index.d.ts +1 -1
  6. package/dist/file-icon/index.mjs +3 -3
  7. package/dist/file-icon/index.mjs.map +1 -1
  8. package/dist/tree/index.cjs +44 -7
  9. package/dist/tree/index.cjs.map +1 -1
  10. package/dist/tree/index.d.cts +2 -2
  11. package/dist/tree/index.d.ts +2 -2
  12. package/dist/tree/index.mjs +44 -7
  13. package/dist/tree/index.mjs.map +1 -1
  14. package/dist/{types-eEu8SeiQ.d.cts → types-j2vhn4Kv.d.cts} +34 -1
  15. package/dist/{types-eEu8SeiQ.d.ts → types-j2vhn4Kv.d.ts} +34 -1
  16. package/package.json +168 -63
  17. package/src/lib/page-snapshot/react/provider.tsx +1 -1
  18. package/src/tools/{Chat → chat}/composer/fileToAttachment.ts +1 -1
  19. package/src/tools/{Chat → chat}/composer/useComposerAttach.tsx +1 -1
  20. package/src/tools/{Chat → chat}/index.ts +1 -1
  21. package/src/tools/{Chat → chat}/launcher/header/ChatHeaderLanguageButton.tsx +2 -2
  22. package/src/tools/{Chat → chat}/messages/MessageBubble.tsx +1 -1
  23. package/src/tools/{Chat → chat}/messages/blocks/builtin.tsx +1 -1
  24. package/src/tools/{Chat → chat}/messages/blocks/renderers/AudioBlock.tsx +1 -1
  25. package/src/tools/{Chat → chat}/messages/blocks/renderers/CodeBlock.tsx +2 -2
  26. package/src/tools/{Chat → chat}/messages/blocks/renderers/GalleryBlock.tsx +2 -2
  27. package/src/tools/{Chat → chat}/messages/blocks/renderers/ImageBlock.tsx +1 -1
  28. package/src/tools/{Chat → chat}/messages/blocks/renderers/JsonBlock.tsx +1 -1
  29. package/src/tools/{Chat → chat}/messages/blocks/renderers/LottieBlock.tsx +1 -1
  30. package/src/tools/{Chat → chat}/messages/blocks/renderers/MapBlock.tsx +2 -2
  31. package/src/tools/{Chat → chat}/messages/blocks/renderers/MermaidBlock.tsx +1 -1
  32. package/src/tools/{Chat → chat}/messages/blocks/renderers/VideoBlock.tsx +2 -2
  33. package/src/tools/data/DataGrid/context/DataGridContext.tsx +441 -0
  34. package/src/tools/data/DataGrid/context/index.ts +4 -0
  35. package/src/tools/data/DataGrid/index.ts +29 -0
  36. package/src/tools/data/DataGrid/lazy.tsx +23 -0
  37. package/src/tools/data/DataGrid/parts/DataGrid.tsx +125 -0
  38. package/src/tools/data/DataGrid/parts/DataGridCell.tsx +30 -0
  39. package/src/tools/data/DataGrid/parts/DataGridHeader.tsx +111 -0
  40. package/src/tools/data/DataGrid/parts/DataGridPagination.tsx +105 -0
  41. package/src/tools/data/DataGrid/parts/DataGridRow.tsx +84 -0
  42. package/src/tools/data/DataGrid/parts/index.ts +7 -0
  43. package/src/tools/data/DataGrid/types.ts +95 -0
  44. package/src/tools/data/DataTable/context/DataTableContext.tsx +433 -0
  45. package/src/tools/data/DataTable/context/index.ts +4 -0
  46. package/src/tools/data/DataTable/index.ts +28 -0
  47. package/src/tools/data/DataTable/lazy.tsx +23 -0
  48. package/src/tools/data/DataTable/parts/DataTable.tsx +132 -0
  49. package/src/tools/data/DataTable/parts/DataTableHeader.tsx +103 -0
  50. package/src/tools/data/DataTable/parts/DataTablePagination.tsx +105 -0
  51. package/src/tools/data/DataTable/parts/DataTableRow.tsx +96 -0
  52. package/src/tools/data/DataTable/parts/index.ts +6 -0
  53. package/src/tools/data/DataTable/types.ts +88 -0
  54. package/src/tools/{JsonTree → data/JsonTree}/index.tsx +2 -2
  55. package/src/tools/{JsonTree → data/JsonTree}/lazy.tsx +1 -1
  56. package/src/tools/data/Kanban/context/KanbanContext.tsx +163 -0
  57. package/src/tools/data/Kanban/context/index.ts +4 -0
  58. package/src/tools/data/Kanban/index.ts +26 -0
  59. package/src/tools/data/Kanban/lazy.tsx +23 -0
  60. package/src/tools/data/Kanban/parts/Kanban.tsx +77 -0
  61. package/src/tools/data/Kanban/parts/KanbanCard.tsx +76 -0
  62. package/src/tools/data/Kanban/parts/KanbanColumn.tsx +79 -0
  63. package/src/tools/data/Kanban/parts/KanbanDragOverlay.tsx +46 -0
  64. package/src/tools/data/Kanban/parts/index.ts +6 -0
  65. package/src/tools/data/Kanban/types.ts +45 -0
  66. package/src/tools/data/Listbox/context/ListboxProvider.tsx +616 -0
  67. package/src/tools/data/Listbox/context/index.ts +8 -0
  68. package/src/tools/data/Listbox/index.ts +23 -0
  69. package/src/tools/data/Listbox/lazy.tsx +31 -0
  70. package/src/tools/data/Listbox/parts/ListboxGroup.tsx +71 -0
  71. package/src/tools/data/Listbox/parts/ListboxItem.tsx +151 -0
  72. package/src/tools/data/Listbox/parts/index.ts +12 -0
  73. package/src/tools/data/Listbox/types.ts +98 -0
  74. package/src/tools/data/Masonry/README.md +79 -0
  75. package/src/tools/data/Masonry/context/MasonryProvider.tsx +1205 -0
  76. package/src/tools/data/Masonry/context/index.ts +8 -0
  77. package/src/tools/data/Masonry/index.ts +13 -0
  78. package/src/tools/data/Masonry/lazy.tsx +20 -0
  79. package/src/tools/data/Masonry/parts/index.ts +2 -0
  80. package/src/tools/data/Masonry/types.ts +44 -0
  81. package/src/tools/data/Timeline/context/TimelineProvider.tsx +474 -0
  82. package/src/tools/data/Timeline/context/index.ts +16 -0
  83. package/src/tools/data/Timeline/index.ts +24 -0
  84. package/src/tools/data/Timeline/lazy.tsx +27 -0
  85. package/src/tools/data/Timeline/parts/index.ts +2 -0
  86. package/src/tools/data/Timeline/types.ts +25 -0
  87. package/src/tools/{Tree → data/Tree}/README.md +66 -2
  88. package/src/tools/{Tree → data/Tree}/TreeRoot.tsx +66 -3
  89. package/src/tools/{Tree → data/Tree}/index.tsx +3 -0
  90. package/src/tools/{Tree → data/Tree}/lazy.tsx +1 -1
  91. package/src/tools/{Tree → data/Tree}/types.ts +36 -0
  92. package/src/tools/{Map → dev/Map}/lazy.tsx +1 -1
  93. package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/CollapseToggle.tsx +1 -1
  94. package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/MarkdownMessage.tsx +1 -1
  95. package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/components.tsx +1 -1
  96. package/src/tools/{Mermaid → dev/Mermaid}/Mermaid.client.tsx +2 -2
  97. package/src/tools/{Mermaid → dev/Mermaid}/lazy.tsx +1 -1
  98. package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/lazy.tsx +1 -1
  99. package/src/tools/{PrettyCode → dev/PrettyCode}/PrettyCode.client.tsx +2 -2
  100. package/src/tools/{PrettyCode → dev/PrettyCode}/lazy.tsx +1 -1
  101. package/src/tools/{CodeEditor → forms/CodeEditor}/lazy.tsx +1 -1
  102. package/src/tools/forms/FileUpload/FileUpload.tsx +1326 -0
  103. package/src/tools/forms/FileUpload/index.ts +21 -0
  104. package/src/tools/forms/FileUpload/lazy.tsx +19 -0
  105. package/src/tools/forms/FileUpload/types.ts +83 -0
  106. package/src/tools/{JsonForm → forms/JsonForm}/lazy.tsx +1 -1
  107. package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/lazy.tsx +1 -1
  108. package/src/tools/index.ts +305 -31
  109. package/src/tools/input/Combobox/context/ComboboxContext.tsx +30 -0
  110. package/src/tools/input/Combobox/context/index.ts +6 -0
  111. package/src/tools/input/Combobox/index.ts +45 -0
  112. package/src/tools/input/Combobox/lazy.tsx +72 -0
  113. package/src/tools/input/Combobox/parts/Combobox.tsx +392 -0
  114. package/src/tools/input/Combobox/parts/index.ts +10 -0
  115. package/src/tools/input/Combobox/types.ts +67 -0
  116. package/src/tools/{CronScheduler → input/CronScheduler}/index.tsx +1 -1
  117. package/src/tools/{CronScheduler → input/CronScheduler}/lazy.tsx +1 -1
  118. package/src/tools/input/Scroller/context/ScrollerContext.tsx +30 -0
  119. package/src/tools/input/Scroller/context/index.ts +6 -0
  120. package/src/tools/input/Scroller/index.ts +34 -0
  121. package/src/tools/input/Scroller/lazy.tsx +32 -0
  122. package/src/tools/input/Scroller/parts/Scroller.tsx +193 -0
  123. package/src/tools/input/Scroller/parts/index.ts +6 -0
  124. package/src/tools/input/Scroller/types.ts +37 -0
  125. package/src/tools/input/Sortable/context/SortableContext.tsx +30 -0
  126. package/src/tools/input/Sortable/context/index.ts +6 -0
  127. package/src/tools/input/Sortable/index.ts +40 -0
  128. package/src/tools/input/Sortable/lazy.tsx +42 -0
  129. package/src/tools/input/Sortable/parts/Sortable.tsx +144 -0
  130. package/src/tools/input/Sortable/parts/index.ts +7 -0
  131. package/src/tools/input/Sortable/types.ts +40 -0
  132. package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/audio/defaults.ts +2 -2
  133. package/src/tools/{SpeechRecognition → input/SpeechRecognition}/lazy.tsx +1 -1
  134. package/src/tools/{SpeechRecognition → input/SpeechRecognition}/widgets/VoiceComposerSlot.tsx +1 -1
  135. package/src/tools/{ImageViewer → media/ImageViewer}/components/ImageInfo.tsx +1 -1
  136. package/src/tools/{ImageViewer → media/ImageViewer}/hooks/useImageLoading.ts +1 -1
  137. package/src/tools/{ImageViewer → media/ImageViewer}/lazy.tsx +1 -1
  138. package/src/tools/{LottiePlayer → media/LottiePlayer}/lazy.tsx +1 -1
  139. package/src/tools/overlay/ResponsiveDialog/context/ResponsiveDialogContext.tsx +30 -0
  140. package/src/tools/overlay/ResponsiveDialog/context/index.ts +6 -0
  141. package/src/tools/overlay/ResponsiveDialog/index.ts +48 -0
  142. package/src/tools/overlay/ResponsiveDialog/lazy.tsx +90 -0
  143. package/src/tools/overlay/ResponsiveDialog/parts/ResponsiveDialog.tsx +87 -0
  144. package/src/tools/overlay/ResponsiveDialog/parts/index.ts +10 -0
  145. package/src/tools/overlay/ResponsiveDialog/types.ts +26 -0
  146. package/src/tools/overlay/ScrollSpy/context/ScrollSpyContext.tsx +30 -0
  147. package/src/tools/overlay/ScrollSpy/context/index.ts +6 -0
  148. package/src/tools/overlay/ScrollSpy/index.ts +40 -0
  149. package/src/tools/overlay/ScrollSpy/lazy.tsx +52 -0
  150. package/src/tools/overlay/ScrollSpy/parts/ScrollSpy.tsx +184 -0
  151. package/src/tools/overlay/ScrollSpy/parts/index.ts +8 -0
  152. package/src/tools/overlay/ScrollSpy/types.ts +41 -0
  153. package/src/tools/overlay/SelectionToolbar/context/SelectionToolbarContext.tsx +30 -0
  154. package/src/tools/overlay/SelectionToolbar/context/index.ts +6 -0
  155. package/src/tools/overlay/SelectionToolbar/index.ts +37 -0
  156. package/src/tools/overlay/SelectionToolbar/lazy.tsx +42 -0
  157. package/src/tools/overlay/SelectionToolbar/parts/SelectionToolbar.tsx +162 -0
  158. package/src/tools/overlay/SelectionToolbar/parts/index.ts +7 -0
  159. package/src/tools/overlay/SelectionToolbar/types.ts +31 -0
  160. package/src/tools/overlay/Tour/context/TourContext.tsx +30 -0
  161. package/src/tools/overlay/Tour/context/index.ts +6 -0
  162. package/src/tools/overlay/Tour/index.ts +40 -0
  163. package/src/tools/overlay/Tour/lazy.tsx +42 -0
  164. package/src/tools/overlay/Tour/parts/Tour.tsx +278 -0
  165. package/src/tools/overlay/Tour/parts/index.ts +8 -0
  166. package/src/tools/overlay/Tour/types.ts +42 -0
  167. package/src/tools/visual/ColorPicker/ColorPicker.tsx +257 -0
  168. package/src/tools/visual/ColorPicker/context/ColorPickerContext.tsx +28 -0
  169. package/src/tools/visual/ColorPicker/context/ColorPickerStore.tsx +166 -0
  170. package/src/tools/visual/ColorPicker/context/index.ts +2 -0
  171. package/src/tools/visual/ColorPicker/index.ts +15 -0
  172. package/src/tools/visual/ColorPicker/lazy.tsx +24 -0
  173. package/src/tools/visual/ColorPicker/lib/color-utils.ts +323 -0
  174. package/src/tools/visual/ColorPicker/parts/ColorPickerAlphaSlider.tsx +72 -0
  175. package/src/tools/visual/ColorPicker/parts/ColorPickerArea.tsx +155 -0
  176. package/src/tools/visual/ColorPicker/parts/ColorPickerEyeDropper.tsx +73 -0
  177. package/src/tools/visual/ColorPicker/parts/ColorPickerFormatSelect.tsx +64 -0
  178. package/src/tools/visual/ColorPicker/parts/ColorPickerHueSlider.tsx +64 -0
  179. package/src/tools/visual/ColorPicker/parts/ColorPickerInput.tsx +512 -0
  180. package/src/tools/visual/ColorPicker/parts/ColorPickerSwatch.tsx +63 -0
  181. package/src/tools/visual/ColorPicker/parts/index.ts +7 -0
  182. package/src/tools/visual/ColorPicker/types.ts +77 -0
  183. package/src/tools/{FileIcon → visual/FileIcon}/treeAdapter.tsx +1 -1
  184. package/src/tools/visual/Fps/Fps.tsx +94 -0
  185. package/src/tools/visual/Fps/index.ts +2 -0
  186. package/src/tools/visual/Fps/lazy.tsx +14 -0
  187. package/src/tools/visual/Fps/types.ts +42 -0
  188. package/src/tools/visual/Gauge/Gauge.tsx +401 -0
  189. package/src/tools/visual/Gauge/index.ts +10 -0
  190. package/src/tools/visual/Gauge/lazy.tsx +14 -0
  191. package/src/tools/visual/Gauge/types.ts +34 -0
  192. package/src/tools/visual/Marquee/Marquee.tsx +637 -0
  193. package/src/tools/visual/Marquee/index.ts +7 -0
  194. package/src/tools/visual/Marquee/lazy.tsx +14 -0
  195. package/src/tools/visual/Marquee/types.ts +40 -0
  196. package/src/tools/visual/QRCode/QRCode.tsx +468 -0
  197. package/src/tools/visual/QRCode/index.ts +10 -0
  198. package/src/tools/visual/QRCode/lazy.tsx +19 -0
  199. package/src/tools/visual/QRCode/types.ts +57 -0
  200. package/src/tools/visual/Rating/Rating.tsx +868 -0
  201. package/src/tools/visual/Rating/index.ts +2 -0
  202. package/src/tools/visual/Rating/lazy.tsx +20 -0
  203. package/src/tools/visual/Rating/types.ts +79 -0
  204. /package/src/tools/{Chat → chat}/README.md +0 -0
  205. /package/src/tools/{Chat → chat}/composer/AttachContext.tsx +0 -0
  206. /package/src/tools/{Chat → chat}/composer/Composer.tsx +0 -0
  207. /package/src/tools/{Chat → chat}/composer/ComposerActionBar.tsx +0 -0
  208. /package/src/tools/{Chat → chat}/composer/ComposerBanner.tsx +0 -0
  209. /package/src/tools/{Chat → chat}/composer/ComposerButton.tsx +0 -0
  210. /package/src/tools/{Chat → chat}/composer/ComposerFooter.tsx +0 -0
  211. /package/src/tools/{Chat → chat}/composer/ComposerMenuButton.tsx +0 -0
  212. /package/src/tools/{Chat → chat}/composer/ComposerModelPicker.tsx +0 -0
  213. /package/src/tools/{Chat → chat}/composer/ComposerRichTextarea.tsx +0 -0
  214. /package/src/tools/{Chat → chat}/composer/ComposerToolPill.tsx +0 -0
  215. /package/src/tools/{Chat → chat}/composer/index.ts +0 -0
  216. /package/src/tools/{Chat → chat}/composer/size-context.tsx +0 -0
  217. /package/src/tools/{Chat → chat}/composer/types.ts +0 -0
  218. /package/src/tools/{Chat → chat}/composer/useComposerActions.tsx +0 -0
  219. /package/src/tools/{Chat → chat}/constants.ts +0 -0
  220. /package/src/tools/{Chat → chat}/context/ChatProvider.tsx +0 -0
  221. /package/src/tools/{Chat → chat}/context/index.ts +0 -0
  222. /package/src/tools/{Chat → chat}/core/__tests__/metadata.test.ts +0 -0
  223. /package/src/tools/{Chat → chat}/core/audio/audioBus.ts +0 -0
  224. /package/src/tools/{Chat → chat}/core/audio/defaults.ts +0 -0
  225. /package/src/tools/{Chat → chat}/core/audio/index.ts +0 -0
  226. /package/src/tools/{Chat → chat}/core/audio/preferences.ts +0 -0
  227. /package/src/tools/{Chat → chat}/core/audio/sounds/error.ts +0 -0
  228. /package/src/tools/{Chat → chat}/core/audio/sounds/mention.ts +0 -0
  229. /package/src/tools/{Chat → chat}/core/audio/sounds/notification.ts +0 -0
  230. /package/src/tools/{Chat → chat}/core/audio/sounds/received.ts +0 -0
  231. /package/src/tools/{Chat → chat}/core/audio/sounds/sent.ts +0 -0
  232. /package/src/tools/{Chat → chat}/core/audio/sounds/start.ts +0 -0
  233. /package/src/tools/{Chat → chat}/core/audio/types.ts +0 -0
  234. /package/src/tools/{Chat → chat}/core/ids.ts +0 -0
  235. /package/src/tools/{Chat → chat}/core/index.ts +0 -0
  236. /package/src/tools/{Chat → chat}/core/logger.ts +0 -0
  237. /package/src/tools/{Chat → chat}/core/markdown.ts +0 -0
  238. /package/src/tools/{Chat → chat}/core/metadata.ts +0 -0
  239. /package/src/tools/{Chat → chat}/core/payload-dispatch.ts +0 -0
  240. /package/src/tools/{Chat → chat}/core/persona.ts +0 -0
  241. /package/src/tools/{Chat → chat}/core/reducer.ts +0 -0
  242. /package/src/tools/{Chat → chat}/core/transport/http.ts +0 -0
  243. /package/src/tools/{Chat → chat}/core/transport/index.ts +0 -0
  244. /package/src/tools/{Chat → chat}/core/transport/mappers/index.ts +0 -0
  245. /package/src/tools/{Chat → chat}/core/transport/mappers/pydantic-ai.ts +0 -0
  246. /package/src/tools/{Chat → chat}/core/transport/mock.ts +0 -0
  247. /package/src/tools/{Chat → chat}/core/transport/pydantic-ai-transport.ts +0 -0
  248. /package/src/tools/{Chat → chat}/core/transport/sse.ts +0 -0
  249. /package/src/tools/{Chat → chat}/core/transport/types.ts +0 -0
  250. /package/src/tools/{Chat → chat}/hooks/index.ts +0 -0
  251. /package/src/tools/{Chat → chat}/hooks/useAutoFocusOnStreamEnd.ts +0 -0
  252. /package/src/tools/{Chat → chat}/hooks/useChat.ts +0 -0
  253. /package/src/tools/{Chat → chat}/hooks/useChatAudio.ts +0 -0
  254. /package/src/tools/{Chat → chat}/hooks/useChatComposer.ts +0 -0
  255. /package/src/tools/{Chat → chat}/hooks/useChatDockPrefs.ts +0 -0
  256. /package/src/tools/{Chat → chat}/hooks/useChatHistory.ts +0 -0
  257. /package/src/tools/{Chat → chat}/hooks/useChatLayout.ts +0 -0
  258. /package/src/tools/{Chat → chat}/hooks/useChatLightbox.ts +0 -0
  259. /package/src/tools/{Chat → chat}/hooks/useChatReset.ts +0 -0
  260. /package/src/tools/{Chat → chat}/hooks/useChatUnread.ts +0 -0
  261. /package/src/tools/{Chat → chat}/hooks/useChatUnreadNotifier.ts +0 -0
  262. /package/src/tools/{Chat → chat}/hooks/useFocusOnEmptyClick.ts +0 -0
  263. /package/src/tools/{Chat → chat}/hooks/useStreamEndFocus.ts +0 -0
  264. /package/src/tools/{Chat → chat}/hooks/useVisitorFingerprint.ts +0 -0
  265. /package/src/tools/{Chat → chat}/launcher/ChatDock.tsx +0 -0
  266. /package/src/tools/{Chat → chat}/launcher/ChatFAB.tsx +0 -0
  267. /package/src/tools/{Chat → chat}/launcher/ChatGreeting.tsx +0 -0
  268. /package/src/tools/{Chat → chat}/launcher/ChatLauncher.tsx +0 -0
  269. /package/src/tools/{Chat → chat}/launcher/ChatUnreadPreview.tsx +0 -0
  270. /package/src/tools/{Chat → chat}/launcher/header/ChatHeader.tsx +0 -0
  271. /package/src/tools/{Chat → chat}/launcher/header/ChatHeaderActionButton.tsx +0 -0
  272. /package/src/tools/{Chat → chat}/launcher/header/ChatHeaderAudioToggle.tsx +0 -0
  273. /package/src/tools/{Chat → chat}/launcher/header/ChatHeaderModeToggle.tsx +0 -0
  274. /package/src/tools/{Chat → chat}/launcher/header/ChatHeaderResetButton.tsx +0 -0
  275. /package/src/tools/{Chat → chat}/launcher/header/HeaderSlots.tsx +0 -0
  276. /package/src/tools/{Chat → chat}/launcher/header/index.ts +0 -0
  277. /package/src/tools/{Chat → chat}/launcher/index.ts +0 -0
  278. /package/src/tools/{Chat → chat}/launcher/types.ts +0 -0
  279. /package/src/tools/{Chat → chat}/launcher/useChatPresence.ts +0 -0
  280. /package/src/tools/{Chat → chat}/lazy.tsx +0 -0
  281. /package/src/tools/{Chat → chat}/messages/Attachments.tsx +0 -0
  282. /package/src/tools/{Chat → chat}/messages/JumpToLatest.tsx +0 -0
  283. /package/src/tools/{Chat → chat}/messages/MessageActions.tsx +0 -0
  284. /package/src/tools/{Chat → chat}/messages/MessageList.tsx +0 -0
  285. /package/src/tools/{Chat → chat}/messages/Sources.tsx +0 -0
  286. /package/src/tools/{Chat → chat}/messages/StreamingIndicator.tsx +0 -0
  287. /package/src/tools/{Chat → chat}/messages/ToolCalls.tsx +0 -0
  288. /package/src/tools/{Chat → chat}/messages/blocks/MessageBlocks.tsx +0 -0
  289. /package/src/tools/{Chat → chat}/messages/blocks/index.ts +0 -0
  290. /package/src/tools/{Chat → chat}/messages/blocks/registry.tsx +0 -0
  291. /package/src/tools/{Chat → chat}/messages/blocks/renderers/types.ts +0 -0
  292. /package/src/tools/{Chat → chat}/messages/index.ts +0 -0
  293. /package/src/tools/{Chat → chat}/notifier/createBrowserNotifier.ts +0 -0
  294. /package/src/tools/{Chat → chat}/notifier/createCrossTabNotifier.ts +0 -0
  295. /package/src/tools/{Chat → chat}/notifier/faviconBadge.ts +0 -0
  296. /package/src/tools/{Chat → chat}/notifier/index.ts +0 -0
  297. /package/src/tools/{Chat → chat}/notifier/titleRotator.ts +0 -0
  298. /package/src/tools/{Chat → chat}/notifier/types.ts +0 -0
  299. /package/src/tools/{Chat → chat}/notifier/visibility.ts +0 -0
  300. /package/src/tools/{Chat → chat}/public.ts +0 -0
  301. /package/src/tools/{Chat → chat}/settings/README.md +0 -0
  302. /package/src/tools/{Chat → chat}/settings/__tests__/useChatSettings.test.tsx +0 -0
  303. /package/src/tools/{Chat → chat}/settings/__tests__/useLocalStorage.test.tsx +0 -0
  304. /package/src/tools/{Chat → chat}/settings/index.ts +0 -0
  305. /package/src/tools/{Chat → chat}/settings/types.ts +0 -0
  306. /package/src/tools/{Chat → chat}/settings/useChatSettings.ts +0 -0
  307. /package/src/tools/{Chat → chat}/shell/ChatRoot.tsx +0 -0
  308. /package/src/tools/{Chat → chat}/shell/EmptyState.tsx +0 -0
  309. /package/src/tools/{Chat → chat}/shell/ErrorBanner.tsx +0 -0
  310. /package/src/tools/{Chat → chat}/shell/index.ts +0 -0
  311. /package/src/tools/{Chat → chat}/styles/bubbleTokens.ts +0 -0
  312. /package/src/tools/{Chat → chat}/styles/index.ts +0 -0
  313. /package/src/tools/{Chat → chat}/styles/useChatStyles.ts +0 -0
  314. /package/src/tools/{Chat → chat}/types/attachment.ts +0 -0
  315. /package/src/tools/{Chat → chat}/types/block.ts +0 -0
  316. /package/src/tools/{Chat → chat}/types/config.ts +0 -0
  317. /package/src/tools/{Chat → chat}/types/events.ts +0 -0
  318. /package/src/tools/{Chat → chat}/types/index.ts +0 -0
  319. /package/src/tools/{Chat → chat}/types/labels.ts +0 -0
  320. /package/src/tools/{Chat → chat}/types/message.ts +0 -0
  321. /package/src/tools/{Chat → chat}/types/persona.ts +0 -0
  322. /package/src/tools/{Chat → chat}/types/session.ts +0 -0
  323. /package/src/tools/{Chat → chat}/types/tool-call.ts +0 -0
  324. /package/src/tools/{Chat → chat}/types/transport.ts +0 -0
  325. /package/src/tools/{Chat → chat}/utils/collectImageAttachments.ts +0 -0
  326. /package/src/tools/{Chat → chat}/utils/index.ts +0 -0
  327. /package/src/tools/{Chat → chat}/utils/sanitizeDraft.ts +0 -0
  328. /package/src/tools/{JsonTree → data/JsonTree}/README.md +0 -0
  329. /package/src/tools/{JsonTree → data/JsonTree}/components/JsonContent.tsx +0 -0
  330. /package/src/tools/{JsonTree → data/JsonTree}/hooks/useJsonExpand.ts +0 -0
  331. /package/src/tools/{JsonTree → data/JsonTree}/types.ts +0 -0
  332. /package/src/tools/{Tree → data/Tree}/components/TreeChevron.tsx +0 -0
  333. /package/src/tools/{Tree → data/Tree}/components/TreeContent.tsx +0 -0
  334. /package/src/tools/{Tree → data/Tree}/components/TreeEmpty.tsx +0 -0
  335. /package/src/tools/{Tree → data/Tree}/components/TreeError.tsx +0 -0
  336. /package/src/tools/{Tree → data/Tree}/components/TreeIcon.tsx +0 -0
  337. /package/src/tools/{Tree → data/Tree}/components/TreeIndentGuides.tsx +0 -0
  338. /package/src/tools/{Tree → data/Tree}/components/TreeLabel.tsx +0 -0
  339. /package/src/tools/{Tree → data/Tree}/components/TreeRow.tsx +0 -0
  340. /package/src/tools/{Tree → data/Tree}/components/TreeSearchInput.tsx +0 -0
  341. /package/src/tools/{Tree → data/Tree}/components/TreeSkeleton.tsx +0 -0
  342. /package/src/tools/{Tree → data/Tree}/components/index.ts +0 -0
  343. /package/src/tools/{Tree → data/Tree}/context/TreeContext.tsx +0 -0
  344. /package/src/tools/{Tree → data/Tree}/context/hooks.ts +0 -0
  345. /package/src/tools/{Tree → data/Tree}/context/index.ts +0 -0
  346. /package/src/tools/{Tree → data/Tree}/data/appearance.ts +0 -0
  347. /package/src/tools/{Tree → data/Tree}/data/childCache.ts +0 -0
  348. /package/src/tools/{Tree → data/Tree}/data/createDemoTree.ts +0 -0
  349. /package/src/tools/{Tree → data/Tree}/data/flatten.ts +0 -0
  350. /package/src/tools/{Tree → data/Tree}/data/index.ts +0 -0
  351. /package/src/tools/{Tree → data/Tree}/data/persist.ts +0 -0
  352. /package/src/tools/{Tree → data/Tree}/hooks/index.ts +0 -0
  353. /package/src/tools/{Tree → data/Tree}/hooks/useTreeKeyboard.ts +0 -0
  354. /package/src/tools/{Tree → data/Tree}/hooks/useTreeTypeAhead.ts +0 -0
  355. /package/src/tools/{Map → dev/Map}/README.md +0 -0
  356. /package/src/tools/{Map → dev/Map}/components/CustomOverlay.tsx +0 -0
  357. /package/src/tools/{Map → dev/Map}/components/DrawControl.tsx +0 -0
  358. /package/src/tools/{Map → dev/Map}/components/GeocoderControl.tsx +0 -0
  359. /package/src/tools/{Map → dev/Map}/components/LayerSwitcher.tsx +0 -0
  360. /package/src/tools/{Map → dev/Map}/components/MapCluster.tsx +0 -0
  361. /package/src/tools/{Map → dev/Map}/components/MapContainer.tsx +0 -0
  362. /package/src/tools/{Map → dev/Map}/components/MapControls.tsx +0 -0
  363. /package/src/tools/{Map → dev/Map}/components/MapLegend.tsx +0 -0
  364. /package/src/tools/{Map → dev/Map}/components/MapMarker.tsx +0 -0
  365. /package/src/tools/{Map → dev/Map}/components/MapPopup.tsx +0 -0
  366. /package/src/tools/{Map → dev/Map}/components/MapSource.tsx +0 -0
  367. /package/src/tools/{Map → dev/Map}/components/index.ts +0 -0
  368. /package/src/tools/{Map → dev/Map}/context/MapContext.tsx +0 -0
  369. /package/src/tools/{Map → dev/Map}/context/index.ts +0 -0
  370. /package/src/tools/{Map → dev/Map}/hooks/index.ts +0 -0
  371. /package/src/tools/{Map → dev/Map}/hooks/useMap.ts +0 -0
  372. /package/src/tools/{Map → dev/Map}/hooks/useMapControl.ts +0 -0
  373. /package/src/tools/{Map → dev/Map}/hooks/useMapEvents.ts +0 -0
  374. /package/src/tools/{Map → dev/Map}/hooks/useMapLayers.ts +0 -0
  375. /package/src/tools/{Map → dev/Map}/hooks/useMapViewport.ts +0 -0
  376. /package/src/tools/{Map → dev/Map}/hooks/useMarkers.ts +0 -0
  377. /package/src/tools/{Map → dev/Map}/hooks/useSpiderfy.ts +0 -0
  378. /package/src/tools/{Map → dev/Map}/index.ts +0 -0
  379. /package/src/tools/{Map → dev/Map}/layers/cluster.ts +0 -0
  380. /package/src/tools/{Map → dev/Map}/layers/index.ts +0 -0
  381. /package/src/tools/{Map → dev/Map}/layers/line.ts +0 -0
  382. /package/src/tools/{Map → dev/Map}/layers/point.ts +0 -0
  383. /package/src/tools/{Map → dev/Map}/layers/polygon.ts +0 -0
  384. /package/src/tools/{Map → dev/Map}/styles/index.ts +0 -0
  385. /package/src/tools/{Map → dev/Map}/types.ts +0 -0
  386. /package/src/tools/{Map → dev/Map}/utils/geo.ts +0 -0
  387. /package/src/tools/{Map → dev/Map}/utils/index.ts +0 -0
  388. /package/src/tools/{Map → dev/Map}/utils/spiderfy.ts +0 -0
  389. /package/src/tools/{Map → dev/Map}/utils/transform.ts +0 -0
  390. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/ActionRow.tsx +0 -0
  391. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/ChatMessageRow.tsx +0 -0
  392. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/CodeBlock.tsx +0 -0
  393. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/README.md +0 -0
  394. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/index.ts +0 -0
  395. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/linkRules.ts +0 -0
  396. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/plainText.ts +0 -0
  397. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/sanitize.ts +0 -0
  398. /package/src/tools/{MarkdownMessage → dev/MarkdownMessage}/types.ts +0 -0
  399. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/FlowDiagram.ts +0 -0
  400. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/functions/getEdges.ts +0 -0
  401. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/functions/getNodes.ts +0 -0
  402. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/functions/getStyles.ts +0 -0
  403. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/functions/index.ts +0 -0
  404. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/index.ts +0 -0
  405. /package/src/tools/{Mermaid → dev/Mermaid}/builders/FlowDiagram/types.ts +0 -0
  406. /package/src/tools/{Mermaid → dev/Mermaid}/builders/JourneyDiagram/JourneyDiagram.ts +0 -0
  407. /package/src/tools/{Mermaid → dev/Mermaid}/builders/JourneyDiagram/index.ts +0 -0
  408. /package/src/tools/{Mermaid → dev/Mermaid}/builders/JourneyDiagram/types.ts +0 -0
  409. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/SequenceDiagram.ts +0 -0
  410. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/functions/getActivations.ts +0 -0
  411. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/functions/getBlocks.ts +0 -0
  412. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/functions/getMessages.ts +0 -0
  413. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/functions/getNotes.ts +0 -0
  414. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/functions/index.ts +0 -0
  415. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/index.ts +0 -0
  416. /package/src/tools/{Mermaid → dev/Mermaid}/builders/SequenceDiagram/types.ts +0 -0
  417. /package/src/tools/{Mermaid → dev/Mermaid}/builders/core/DiagramStore.ts +0 -0
  418. /package/src/tools/{Mermaid → dev/Mermaid}/builders/core/index.ts +0 -0
  419. /package/src/tools/{Mermaid → dev/Mermaid}/builders/core/sanitize.ts +0 -0
  420. /package/src/tools/{Mermaid → dev/Mermaid}/builders/core/theme.ts +0 -0
  421. /package/src/tools/{Mermaid → dev/Mermaid}/builders/core/types.ts +0 -0
  422. /package/src/tools/{Mermaid → dev/Mermaid}/builders/index.ts +0 -0
  423. /package/src/tools/{Mermaid → dev/Mermaid}/components/MermaidCodeViewer.tsx +0 -0
  424. /package/src/tools/{Mermaid → dev/Mermaid}/components/MermaidErrorPanel.tsx +0 -0
  425. /package/src/tools/{Mermaid → dev/Mermaid}/components/MermaidFullscreenModal.tsx +0 -0
  426. /package/src/tools/{Mermaid → dev/Mermaid}/hooks/index.ts +0 -0
  427. /package/src/tools/{Mermaid → dev/Mermaid}/hooks/useMermaidCleanup.ts +0 -0
  428. /package/src/tools/{Mermaid → dev/Mermaid}/hooks/useMermaidFullscreen.ts +0 -0
  429. /package/src/tools/{Mermaid → dev/Mermaid}/hooks/useMermaidRenderer.ts +0 -0
  430. /package/src/tools/{Mermaid → dev/Mermaid}/hooks/useMermaidValidation.ts +0 -0
  431. /package/src/tools/{Mermaid → dev/Mermaid}/index.tsx +0 -0
  432. /package/src/tools/{Mermaid → dev/Mermaid}/utils/mermaid-helpers.ts +0 -0
  433. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/README.md +0 -0
  434. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/ApiIntroSection.tsx +0 -0
  435. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/DocsView.tsx +0 -0
  436. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/LanguageTabs.tsx +0 -0
  437. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/index.tsx +0 -0
  438. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/useCodeSnippet.ts +0 -0
  439. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/MetaActions.tsx +0 -0
  440. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/MethodBadge.tsx +0 -0
  441. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/PathDisplay.tsx +0 -0
  442. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/index.tsx +0 -0
  443. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/ParamGroup.tsx +0 -0
  444. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/ParamRow.tsx +0 -0
  445. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/index.tsx +0 -0
  446. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/RequestBody/index.tsx +0 -0
  447. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/ResponseBody.tsx +0 -0
  448. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/ResponseRow.tsx +0 -0
  449. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/StatusTag.tsx +0 -0
  450. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/index.tsx +0 -0
  451. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/FieldRow.tsx +0 -0
  452. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/buildTree.ts +0 -0
  453. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/index.tsx +0 -0
  454. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/types.ts +0 -0
  455. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/SectionHeader.tsx +0 -0
  456. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/defaults.ts +0 -0
  457. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/index.tsx +0 -0
  458. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/context.tsx +0 -0
  459. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/hooks/useSectionHash.ts +0 -0
  460. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/index.tsx +0 -0
  461. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/store/index.ts +0 -0
  462. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/store/selectors.ts +0 -0
  463. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/EndpointDoc/types.ts +0 -0
  464. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/SchemaCopyMenu.tsx +0 -0
  465. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/BrandHeader.tsx +0 -0
  466. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/CategoryBlock.tsx +0 -0
  467. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/EndpointRow.tsx +0 -0
  468. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/SchemaSection.tsx +0 -0
  469. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/SearchInput.tsx +0 -0
  470. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/SidebarBody.tsx +0 -0
  471. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/Toolbar.tsx +0 -0
  472. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/buildVM.ts +0 -0
  473. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/index.tsx +0 -0
  474. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/types.ts +0 -0
  475. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/Sidebar/useDebouncedValue.ts +0 -0
  476. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/SlideInPlayground.tsx +0 -0
  477. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/TryItSheet.tsx +0 -0
  478. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/anchor.ts +0 -0
  479. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/grouping.ts +0 -0
  480. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/index.tsx +0 -0
  481. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/DocsLayout/sidebarLabel.ts +0 -0
  482. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/index.ts +0 -0
  483. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/BodyFormEditor.tsx +0 -0
  484. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/EndpointDraftSync.tsx +0 -0
  485. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/EndpointResetButton.tsx +0 -0
  486. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/RequestPanel.tsx +0 -0
  487. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/PrettyView.tsx +0 -0
  488. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/PreviewView.tsx +0 -0
  489. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/RawView.tsx +0 -0
  490. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/StatusBar.tsx +0 -0
  491. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/ViewTabs.tsx +0 -0
  492. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/detectContent.ts +0 -0
  493. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/index.tsx +0 -0
  494. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/types.ts +0 -0
  495. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ResponsePanel/useResponseView.ts +0 -0
  496. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/SendButton.tsx +0 -0
  497. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/components/shared/ui.tsx +0 -0
  498. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/constants.ts +0 -0
  499. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/context/PlaygroundContext.tsx +0 -0
  500. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/hooks/index.ts +0 -0
  501. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/hooks/useDocsUrlSync.ts +0 -0
  502. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/hooks/useEndpointDraft.ts +0 -0
  503. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/hooks/useMobile.ts +0 -0
  504. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/hooks/useOpenApiSchema.ts +0 -0
  505. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/index.tsx +0 -0
  506. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/types.ts +0 -0
  507. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/apiKeyManager.ts +0 -0
  508. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/codeSamples.ts +0 -0
  509. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/formatters.ts +0 -0
  510. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/index.ts +0 -0
  511. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/operationToHar.ts +0 -0
  512. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/sampler.ts +0 -0
  513. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/schemaExport.ts +0 -0
  514. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/scrollParent.ts +0 -0
  515. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/url.ts +0 -0
  516. /package/src/tools/{OpenapiViewer → dev/OpenapiViewer}/utils/versionManager.ts +0 -0
  517. /package/src/tools/{PrettyCode → dev/PrettyCode}/README.md +0 -0
  518. /package/src/tools/{PrettyCode → dev/PrettyCode}/index.tsx +0 -0
  519. /package/src/tools/{PrettyCode → dev/PrettyCode}/registerPrismLanguages.ts +0 -0
  520. /package/src/tools/{CodeEditor → forms/CodeEditor}/README.md +0 -0
  521. /package/src/tools/{CodeEditor → forms/CodeEditor}/components/DiffEditor.tsx +0 -0
  522. /package/src/tools/{CodeEditor → forms/CodeEditor}/components/Editor.tsx +0 -0
  523. /package/src/tools/{CodeEditor → forms/CodeEditor}/components/index.ts +0 -0
  524. /package/src/tools/{CodeEditor → forms/CodeEditor}/context/EditorProvider.tsx +0 -0
  525. /package/src/tools/{CodeEditor → forms/CodeEditor}/context/index.ts +0 -0
  526. /package/src/tools/{CodeEditor → forms/CodeEditor}/hooks/index.ts +0 -0
  527. /package/src/tools/{CodeEditor → forms/CodeEditor}/hooks/useEditor.ts +0 -0
  528. /package/src/tools/{CodeEditor → forms/CodeEditor}/hooks/useEditorTheme.ts +0 -0
  529. /package/src/tools/{CodeEditor → forms/CodeEditor}/hooks/useLanguage.ts +0 -0
  530. /package/src/tools/{CodeEditor → forms/CodeEditor}/hooks/useMonaco.ts +0 -0
  531. /package/src/tools/{CodeEditor → forms/CodeEditor}/index.ts +0 -0
  532. /package/src/tools/{CodeEditor → forms/CodeEditor}/lib/index.ts +0 -0
  533. /package/src/tools/{CodeEditor → forms/CodeEditor}/lib/languages.ts +0 -0
  534. /package/src/tools/{CodeEditor → forms/CodeEditor}/lib/themes.ts +0 -0
  535. /package/src/tools/{CodeEditor → forms/CodeEditor}/types/index.ts +0 -0
  536. /package/src/tools/{CodeEditor → forms/CodeEditor}/workers/index.ts +0 -0
  537. /package/src/tools/{CodeEditor → forms/CodeEditor}/workers/setup.ts +0 -0
  538. /package/src/tools/{JsonForm → forms/JsonForm}/JsonSchemaForm.tsx +0 -0
  539. /package/src/tools/{JsonForm → forms/JsonForm}/README.md +0 -0
  540. /package/src/tools/{JsonForm → forms/JsonForm}/examples/BotConfigExample.tsx +0 -0
  541. /package/src/tools/{JsonForm → forms/JsonForm}/examples/RealBotConfigExample.tsx +0 -0
  542. /package/src/tools/{JsonForm → forms/JsonForm}/index.ts +0 -0
  543. /package/src/tools/{JsonForm → forms/JsonForm}/templates/ArrayFieldItemTemplate.tsx +0 -0
  544. /package/src/tools/{JsonForm → forms/JsonForm}/templates/ArrayFieldTemplate.tsx +0 -0
  545. /package/src/tools/{JsonForm → forms/JsonForm}/templates/BaseInputTemplate.tsx +0 -0
  546. /package/src/tools/{JsonForm → forms/JsonForm}/templates/ErrorListTemplate.tsx +0 -0
  547. /package/src/tools/{JsonForm → forms/JsonForm}/templates/FieldTemplate.tsx +0 -0
  548. /package/src/tools/{JsonForm → forms/JsonForm}/templates/ObjectFieldTemplate.tsx +0 -0
  549. /package/src/tools/{JsonForm → forms/JsonForm}/templates/index.ts +0 -0
  550. /package/src/tools/{JsonForm → forms/JsonForm}/types.ts +0 -0
  551. /package/src/tools/{JsonForm → forms/JsonForm}/utils.ts +0 -0
  552. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/CheckboxWidget.tsx +0 -0
  553. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/ColorWidget.tsx +0 -0
  554. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/NumberWidget.tsx +0 -0
  555. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/RadioWidget.tsx +0 -0
  556. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/SelectWidget.tsx +0 -0
  557. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/SliderWidget.tsx +0 -0
  558. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/SwitchWidget.tsx +0 -0
  559. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/TextWidget.tsx +0 -0
  560. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/TextareaWidget.tsx +0 -0
  561. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/_useWidgetEnv.ts +0 -0
  562. /package/src/tools/{JsonForm → forms/JsonForm}/widgets/index.ts +0 -0
  563. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/MarkdownEditor.tsx +0 -0
  564. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/MentionList.tsx +0 -0
  565. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/README.md +0 -0
  566. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/createMentionSuggestion.ts +0 -0
  567. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/index.ts +0 -0
  568. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/mentionPresets.test.ts +0 -0
  569. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/mentionPresets.ts +0 -0
  570. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/styles.css +0 -0
  571. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/submitOnEnter.ts +0 -0
  572. /package/src/tools/{MarkdownEditor → forms/MarkdownEditor}/types.ts +0 -0
  573. /package/src/tools/{Uploader → forms/Uploader}/README.md +0 -0
  574. /package/src/tools/{Uploader → forms/Uploader}/components/UploadAddButton.tsx +0 -0
  575. /package/src/tools/{Uploader → forms/Uploader}/components/UploadDropzone.tsx +0 -0
  576. /package/src/tools/{Uploader → forms/Uploader}/components/UploadPageDropOverlay.tsx +0 -0
  577. /package/src/tools/{Uploader → forms/Uploader}/components/UploadPreviewItem.tsx +0 -0
  578. /package/src/tools/{Uploader → forms/Uploader}/components/UploadPreviewList.tsx +0 -0
  579. /package/src/tools/{Uploader → forms/Uploader}/components/Uploader.tsx +0 -0
  580. /package/src/tools/{Uploader → forms/Uploader}/components/index.ts +0 -0
  581. /package/src/tools/{Uploader → forms/Uploader}/context/UploadProvider.tsx +0 -0
  582. /package/src/tools/{Uploader → forms/Uploader}/context/index.ts +0 -0
  583. /package/src/tools/{Uploader → forms/Uploader}/hooks/index.ts +0 -0
  584. /package/src/tools/{Uploader → forms/Uploader}/hooks/useClipboardPaste.ts +0 -0
  585. /package/src/tools/{Uploader → forms/Uploader}/hooks/useUploadEvents.ts +0 -0
  586. /package/src/tools/{Uploader → forms/Uploader}/hooks/useUploadProvider.ts +0 -0
  587. /package/src/tools/{Uploader → forms/Uploader}/index.ts +0 -0
  588. /package/src/tools/{Uploader → forms/Uploader}/types/index.ts +0 -0
  589. /package/src/tools/{Uploader → forms/Uploader}/utils/assetTypes.ts +0 -0
  590. /package/src/tools/{Uploader → forms/Uploader}/utils/formatters.ts +0 -0
  591. /package/src/tools/{Uploader → forms/Uploader}/utils/index.ts +0 -0
  592. /package/src/tools/{Uploader → forms/Uploader}/utils/logger.ts +0 -0
  593. /package/src/tools/{Uploader → forms/Uploader}/utils/transformers.ts +0 -0
  594. /package/src/tools/{CronScheduler → input/CronScheduler}/CronScheduler.client.tsx +0 -0
  595. /package/src/tools/{CronScheduler → input/CronScheduler}/components/CronCheatsheet.tsx +0 -0
  596. /package/src/tools/{CronScheduler → input/CronScheduler}/components/CustomInput.tsx +0 -0
  597. /package/src/tools/{CronScheduler → input/CronScheduler}/components/DayChips.tsx +0 -0
  598. /package/src/tools/{CronScheduler → input/CronScheduler}/components/MonthDayGrid.tsx +0 -0
  599. /package/src/tools/{CronScheduler → input/CronScheduler}/components/SchedulePreview.tsx +0 -0
  600. /package/src/tools/{CronScheduler → input/CronScheduler}/components/ScheduleTypeSelector.tsx +0 -0
  601. /package/src/tools/{CronScheduler → input/CronScheduler}/components/TimeSelector.tsx +0 -0
  602. /package/src/tools/{CronScheduler → input/CronScheduler}/components/index.ts +0 -0
  603. /package/src/tools/{CronScheduler → input/CronScheduler}/context/CronSchedulerContext.tsx +0 -0
  604. /package/src/tools/{CronScheduler → input/CronScheduler}/context/hooks.ts +0 -0
  605. /package/src/tools/{CronScheduler → input/CronScheduler}/context/index.ts +0 -0
  606. /package/src/tools/{CronScheduler → input/CronScheduler}/types/index.ts +0 -0
  607. /package/src/tools/{CronScheduler → input/CronScheduler}/utils/cron-builder.ts +0 -0
  608. /package/src/tools/{CronScheduler → input/CronScheduler}/utils/cron-humanize.ts +0 -0
  609. /package/src/tools/{CronScheduler → input/CronScheduler}/utils/cron-parser.ts +0 -0
  610. /package/src/tools/{CronScheduler → input/CronScheduler}/utils/index.ts +0 -0
  611. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/README.md +0 -0
  612. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/__tests__/ids.test.ts +0 -0
  613. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/__tests__/language.test.ts +0 -0
  614. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/__tests__/reducer.test.ts +0 -0
  615. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/__tests__/transcript.test.ts +0 -0
  616. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/DevicePicker.tsx +0 -0
  617. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/DictationButton.tsx +0 -0
  618. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/EngineBadge.tsx +0 -0
  619. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/ErrorBanner.tsx +0 -0
  620. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/LanguagePicker.tsx +0 -0
  621. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/MicMeter.tsx +0 -0
  622. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/PushToTalkHint.tsx +0 -0
  623. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/RecordingPulse.tsx +0 -0
  624. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/TranscriptView.tsx +0 -0
  625. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/components/index.ts +0 -0
  626. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/context/SpeechRecognitionProvider.tsx +0 -0
  627. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/context/index.ts +0 -0
  628. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/engine/external.ts +0 -0
  629. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/engine/http.ts +0 -0
  630. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/engine/index.ts +0 -0
  631. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/engine/mediarecorder.ts +0 -0
  632. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/engine/websocket.ts +0 -0
  633. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/engine/webspeech.ts +0 -0
  634. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/ids.ts +0 -0
  635. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/index.ts +0 -0
  636. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/language.ts +0 -0
  637. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/languages-catalog.ts +0 -0
  638. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/logger.ts +0 -0
  639. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/reducer.ts +0 -0
  640. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/core/transcript.ts +0 -0
  641. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/index.ts +0 -0
  642. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useDictation.ts +0 -0
  643. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useEnginePrefs.ts +0 -0
  644. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useMicDevices.ts +0 -0
  645. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useMicLevel.ts +0 -0
  646. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/usePushToTalk.ts +0 -0
  647. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useResolvedLanguage.ts +0 -0
  648. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useSpeechLanguageInfo.ts +0 -0
  649. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useSpeechRecognition.ts +0 -0
  650. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/hooks/useVoiceSupport.ts +0 -0
  651. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/index.ts +0 -0
  652. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/store/index.ts +0 -0
  653. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/store/prefsStore.ts +0 -0
  654. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/types.ts +0 -0
  655. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/widgets/DictationField.tsx +0 -0
  656. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/widgets/VoiceMessageRecorder.tsx +0 -0
  657. /package/src/tools/{SpeechRecognition → input/SpeechRecognition}/widgets/index.ts +0 -0
  658. /package/src/tools/{AudioPlayer → media/AudioPlayer}/Player.tsx +0 -0
  659. /package/src/tools/{AudioPlayer → media/AudioPlayer}/PlayerShell.tsx +0 -0
  660. /package/src/tools/{AudioPlayer → media/AudioPlayer}/README.md +0 -0
  661. /package/src/tools/{AudioPlayer → media/AudioPlayer}/audio/audioContext.ts +0 -0
  662. /package/src/tools/{AudioPlayer → media/AudioPlayer}/audio/decodePeaks.ts +0 -0
  663. /package/src/tools/{AudioPlayer → media/AudioPlayer}/audio/index.ts +0 -0
  664. /package/src/tools/{AudioPlayer → media/AudioPlayer}/audio/mediaElementSourceCache.ts +0 -0
  665. /package/src/tools/{AudioPlayer → media/AudioPlayer}/audio/peaksCache.ts +0 -0
  666. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/AudioRefContext.tsx +0 -0
  667. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/ControlsContext.tsx +0 -0
  668. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/LevelsContext.tsx +0 -0
  669. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/MetaContext.tsx +0 -0
  670. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/PlayerProvider.tsx +0 -0
  671. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/StateContext.tsx +0 -0
  672. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/index.ts +0 -0
  673. /package/src/tools/{AudioPlayer → media/AudioPlayer}/context/selectors.ts +0 -0
  674. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/index.ts +0 -0
  675. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useActivePlayer.ts +0 -0
  676. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useAnalyser.ts +0 -0
  677. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useAudioElementEvents.ts +0 -0
  678. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useKeyboardShortcuts.ts +0 -0
  679. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useMediaSession.ts +0 -0
  680. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/usePeaks.ts +0 -0
  681. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/usePlayerPreferences.ts +0 -0
  682. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/usePlayheadLoop.ts +0 -0
  683. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useResizeObserver.ts +0 -0
  684. /package/src/tools/{AudioPlayer → media/AudioPlayer}/hooks/useThemeWatcher.ts +0 -0
  685. /package/src/tools/{AudioPlayer → media/AudioPlayer}/index.ts +0 -0
  686. /package/src/tools/{AudioPlayer → media/AudioPlayer}/lazy.tsx +0 -0
  687. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/ControlsRow.tsx +0 -0
  688. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/IconButton.tsx +0 -0
  689. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/LoopButton.tsx +0 -0
  690. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/PlayButton.tsx +0 -0
  691. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/SkipButton.tsx +0 -0
  692. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/VolumeControl.tsx +0 -0
  693. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Controls/index.ts +0 -0
  694. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Cover/Cover.tsx +0 -0
  695. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Cover/CoverPlaceholder.tsx +0 -0
  696. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Cover/ReactivePulse.tsx +0 -0
  697. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Cover/index.ts +0 -0
  698. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/ErrorState/ErrorState.tsx +0 -0
  699. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/ErrorState/index.ts +0 -0
  700. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Layout/CompactLayout.tsx +0 -0
  701. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Layout/DefaultLayout.tsx +0 -0
  702. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Layout/index.ts +0 -0
  703. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Meta/Artist.tsx +0 -0
  704. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Meta/TimeDisplay.tsx +0 -0
  705. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Meta/Title.tsx +0 -0
  706. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Meta/index.ts +0 -0
  707. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Skeleton/CoverSkeleton.tsx +0 -0
  708. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Skeleton/MetaSkeleton.tsx +0 -0
  709. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Skeleton/index.ts +0 -0
  710. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/BarsWaveform.tsx +0 -0
  711. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/LiveWaveform.tsx +0 -0
  712. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/PeaksWaveform.tsx +0 -0
  713. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/ProgressBar.tsx +0 -0
  714. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/Waveform.tsx +0 -0
  715. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/WaveformSkeleton.tsx +0 -0
  716. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/index.ts +0 -0
  717. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/waveformInteraction.ts +0 -0
  718. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/Waveform/waveformRenderer.ts +0 -0
  719. /package/src/tools/{AudioPlayer → media/AudioPlayer}/parts/index.ts +0 -0
  720. /package/src/tools/{AudioPlayer → media/AudioPlayer}/store/activePlayerBus.ts +0 -0
  721. /package/src/tools/{AudioPlayer → media/AudioPlayer}/store/createLevelsStore.ts +0 -0
  722. /package/src/tools/{AudioPlayer → media/AudioPlayer}/store/index.ts +0 -0
  723. /package/src/tools/{AudioPlayer → media/AudioPlayer}/store/preferencesStore.ts +0 -0
  724. /package/src/tools/{AudioPlayer → media/AudioPlayer}/styles/webview-safe.css +0 -0
  725. /package/src/tools/{AudioPlayer → media/AudioPlayer}/types.ts +0 -0
  726. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/bucketize.ts +0 -0
  727. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/clamp.ts +0 -0
  728. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/dpr.ts +0 -0
  729. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/formatTime.ts +0 -0
  730. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/index.ts +0 -0
  731. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/readCssVar.ts +0 -0
  732. /package/src/tools/{AudioPlayer → media/AudioPlayer}/utils/resolveCanvasColor.ts +0 -0
  733. /package/src/tools/{Gallery → media/Gallery}/components/Gallery.tsx +0 -0
  734. /package/src/tools/{Gallery → media/Gallery}/components/compact/GalleryCompact.tsx +0 -0
  735. /package/src/tools/{Gallery → media/Gallery}/components/compact/index.ts +0 -0
  736. /package/src/tools/{Gallery → media/Gallery}/components/index.ts +0 -0
  737. /package/src/tools/{Gallery → media/Gallery}/components/lightbox/GalleryLightbox.tsx +0 -0
  738. /package/src/tools/{Gallery → media/Gallery}/components/lightbox/index.ts +0 -0
  739. /package/src/tools/{Gallery → media/Gallery}/components/media/GalleryImage.tsx +0 -0
  740. /package/src/tools/{Gallery → media/Gallery}/components/media/GalleryMedia.tsx +0 -0
  741. /package/src/tools/{Gallery → media/Gallery}/components/media/GalleryVideo.tsx +0 -0
  742. /package/src/tools/{Gallery → media/Gallery}/components/media/index.ts +0 -0
  743. /package/src/tools/{Gallery → media/Gallery}/components/preview/GalleryCarousel.tsx +0 -0
  744. /package/src/tools/{Gallery → media/Gallery}/components/preview/GalleryGrid.tsx +0 -0
  745. /package/src/tools/{Gallery → media/Gallery}/components/preview/index.ts +0 -0
  746. /package/src/tools/{Gallery → media/Gallery}/components/shared/ImageSpinner.tsx +0 -0
  747. /package/src/tools/{Gallery → media/Gallery}/components/shared/index.ts +0 -0
  748. /package/src/tools/{Gallery → media/Gallery}/components/thumbnails/GalleryThumbnails.tsx +0 -0
  749. /package/src/tools/{Gallery → media/Gallery}/components/thumbnails/GalleryThumbnailsVirtual.tsx +0 -0
  750. /package/src/tools/{Gallery → media/Gallery}/components/thumbnails/index.ts +0 -0
  751. /package/src/tools/{Gallery → media/Gallery}/hooks/index.ts +0 -0
  752. /package/src/tools/{Gallery → media/Gallery}/hooks/useGallery.ts +0 -0
  753. /package/src/tools/{Gallery → media/Gallery}/hooks/useImageDimensions.ts +0 -0
  754. /package/src/tools/{Gallery → media/Gallery}/hooks/usePinchZoom.ts +0 -0
  755. /package/src/tools/{Gallery → media/Gallery}/hooks/usePreloadImages.ts +0 -0
  756. /package/src/tools/{Gallery → media/Gallery}/hooks/useSwipe.ts +0 -0
  757. /package/src/tools/{Gallery → media/Gallery}/hooks/useVirtualList.ts +0 -0
  758. /package/src/tools/{Gallery → media/Gallery}/hooks/useZoom.ts +0 -0
  759. /package/src/tools/{Gallery → media/Gallery}/index.ts +0 -0
  760. /package/src/tools/{Gallery → media/Gallery}/types.ts +0 -0
  761. /package/src/tools/{Gallery → media/Gallery}/utils/imageAnalysis.ts +0 -0
  762. /package/src/tools/{Gallery → media/Gallery}/utils/index.ts +0 -0
  763. /package/src/tools/{Gallery → media/Gallery}/utils/normalizeUrl.ts +0 -0
  764. /package/src/tools/{ImageViewer → media/ImageViewer}/README.md +0 -0
  765. /package/src/tools/{ImageViewer → media/ImageViewer}/components/ImageToolbar.tsx +0 -0
  766. /package/src/tools/{ImageViewer → media/ImageViewer}/components/ImageViewer.tsx +0 -0
  767. /package/src/tools/{ImageViewer → media/ImageViewer}/components/index.ts +0 -0
  768. /package/src/tools/{ImageViewer → media/ImageViewer}/hooks/index.ts +0 -0
  769. /package/src/tools/{ImageViewer → media/ImageViewer}/hooks/useImageTransform.ts +0 -0
  770. /package/src/tools/{ImageViewer → media/ImageViewer}/index.ts +0 -0
  771. /package/src/tools/{ImageViewer → media/ImageViewer}/types.ts +0 -0
  772. /package/src/tools/{ImageViewer → media/ImageViewer}/utils/constants.ts +0 -0
  773. /package/src/tools/{ImageViewer → media/ImageViewer}/utils/debug.ts +0 -0
  774. /package/src/tools/{ImageViewer → media/ImageViewer}/utils/index.ts +0 -0
  775. /package/src/tools/{ImageViewer → media/ImageViewer}/utils/lqip.ts +0 -0
  776. /package/src/tools/{LottiePlayer → media/LottiePlayer}/LottiePlayer.client.tsx +0 -0
  777. /package/src/tools/{LottiePlayer → media/LottiePlayer}/index.tsx +0 -0
  778. /package/src/tools/{LottiePlayer → media/LottiePlayer}/types.ts +0 -0
  779. /package/src/tools/{LottiePlayer → media/LottiePlayer}/useLottie.ts +0 -0
  780. /package/src/tools/{LottiePlayer → media/LottiePlayer}/usePrefersReducedMotion.ts +0 -0
  781. /package/src/tools/{VideoPlayer → media/VideoPlayer}/README.md +0 -0
  782. /package/src/tools/{VideoPlayer → media/VideoPlayer}/VideoPlayer.tsx +0 -0
  783. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/canvas-dispatcher.tsx +0 -0
  784. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/hls-canvas.tsx +0 -0
  785. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/iframe-canvas.tsx +0 -0
  786. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/index.ts +0 -0
  787. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/jsx-augmentation.ts +0 -0
  788. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/native-canvas.tsx +0 -0
  789. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/vimeo-canvas.tsx +0 -0
  790. /package/src/tools/{VideoPlayer → media/VideoPlayer}/canvas/youtube-canvas.tsx +0 -0
  791. /package/src/tools/{VideoPlayer → media/VideoPlayer}/index.ts +0 -0
  792. /package/src/tools/{VideoPlayer → media/VideoPlayer}/lazy.tsx +0 -0
  793. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/controls-bar.tsx +0 -0
  794. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/fullscreen.tsx +0 -0
  795. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/index.ts +0 -0
  796. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/pip.tsx +0 -0
  797. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/play-button.tsx +0 -0
  798. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/playback-rate.tsx +0 -0
  799. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/poster.tsx +0 -0
  800. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/seek-bar.tsx +0 -0
  801. /package/src/tools/{VideoPlayer → media/VideoPlayer}/parts/volume.tsx +0 -0
  802. /package/src/tools/{VideoPlayer → media/VideoPlayer}/styles/video-player.css +0 -0
  803. /package/src/tools/{VideoPlayer → media/VideoPlayer}/types.ts +0 -0
  804. /package/src/tools/{VideoPlayer → media/VideoPlayer}/utils/parse-embed-url.ts +0 -0
  805. /package/src/tools/{VideoPlayer → media/VideoPlayer}/utils/vimeo-id.ts +0 -0
  806. /package/src/tools/{VideoPlayer → media/VideoPlayer}/utils/youtube-id.ts +0 -0
  807. /package/src/tools/{FileIcon → visual/FileIcon}/FileIcon.tsx +0 -0
  808. /package/src/tools/{FileIcon → visual/FileIcon}/get-file-icon.ts +0 -0
  809. /package/src/tools/{FileIcon → visual/FileIcon}/icons/icon-data.ts +0 -0
  810. /package/src/tools/{FileIcon → visual/FileIcon}/index.ts +0 -0
  811. /package/src/tools/{FileIcon → visual/FileIcon}/loader.ts +0 -0
  812. /package/src/tools/{FileIcon → visual/FileIcon}/specialFolders.ts +0 -0
@@ -0,0 +1,868 @@
1
+ 'use client';
2
+
3
+ import { Star } from 'lucide-react';
4
+ import { Slot as SlotPrimitive } from '@radix-ui/react-slot';
5
+ import { useDirection as useDirectionPrimitive } from '@radix-ui/react-direction';
6
+ import * as React from 'react';
7
+ import { useComposedRefs } from '@djangocfg/ui-core/lib';
8
+ import { cn } from '@djangocfg/ui-core/lib';
9
+ import { VisuallyHiddenInput } from '@djangocfg/ui-core/components';
10
+ import type {
11
+ RatingProps,
12
+ RatingItemProps,
13
+ StoreState,
14
+ Store,
15
+ RatingContextValue,
16
+ FocusContextValue,
17
+ ItemData,
18
+ Direction,
19
+ Orientation,
20
+ FocusIntent,
21
+ DataState,
22
+ } from './types';
23
+
24
+ const ROOT_NAME = 'Rating';
25
+ const ITEM_NAME = 'RatingItem';
26
+
27
+ const ENTRY_FOCUS = 'ratingFocusGroup.onEntryFocus';
28
+ const EVENT_OPTIONS = { bubbles: false, cancelable: true };
29
+
30
+ function getItemId(id: string, value: number) {
31
+ return `${id}-item-${value}`;
32
+ }
33
+
34
+ function getPartialFillGradientId(id: string, step: number) {
35
+ return `partial-fill-gradient-${id}-${step}`;
36
+ }
37
+
38
+ const MAP_KEY_TO_FOCUS_INTENT: Record<string, FocusIntent> = {
39
+ ArrowLeft: 'prev',
40
+ ArrowUp: 'prev',
41
+ ArrowRight: 'next',
42
+ ArrowDown: 'next',
43
+ Home: 'first',
44
+ End: 'last',
45
+ };
46
+
47
+ function getDirectionAwareKey(key: string, dir?: Direction) {
48
+ if (dir !== 'rtl') return key;
49
+ return key === 'ArrowLeft'
50
+ ? 'ArrowRight'
51
+ : key === 'ArrowRight'
52
+ ? 'ArrowLeft'
53
+ : key;
54
+ }
55
+
56
+ function getFocusIntent(
57
+ event: React.KeyboardEvent<HTMLButtonElement>,
58
+ dir?: Direction,
59
+ orientation?: Orientation,
60
+ ) {
61
+ const key = getDirectionAwareKey(event.key, dir);
62
+ if (orientation === 'horizontal' && ['ArrowUp', 'ArrowDown'].includes(key))
63
+ return undefined;
64
+ if (orientation === 'vertical' && ['ArrowLeft', 'ArrowRight'].includes(key))
65
+ return undefined;
66
+ return MAP_KEY_TO_FOCUS_INTENT[key];
67
+ }
68
+
69
+ function focusFirst(
70
+ candidates: React.RefObject<HTMLButtonElement | null>[],
71
+ preventScroll = false,
72
+ ) {
73
+ const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
74
+ for (const candidateRef of candidates) {
75
+ const candidate = candidateRef.current;
76
+ if (!candidate) continue;
77
+ if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
78
+ candidate.focus({ preventScroll });
79
+ if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
80
+ }
81
+ }
82
+
83
+ function useLazyRef<T>(init: () => T): React.RefObject<T> {
84
+ const ref = React.useRef<T | null>(null);
85
+ if (ref.current === null) {
86
+ ref.current = init();
87
+ }
88
+ return ref as React.RefObject<T>;
89
+ }
90
+
91
+ function useAsRef<T>(value: T) {
92
+ const ref = React.useRef(value);
93
+ React.useEffect(() => {
94
+ ref.current = value;
95
+ });
96
+ return ref;
97
+ }
98
+
99
+ const StoreContext = React.createContext<Store | null>(null);
100
+
101
+ function useStoreContext(consumerName: string) {
102
+ const context = React.useContext(StoreContext);
103
+ if (!context) {
104
+ throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
105
+ }
106
+ return context;
107
+ }
108
+
109
+ function useStore<T>(
110
+ selector: (state: StoreState) => T,
111
+ ogStore?: Store | null,
112
+ ): T {
113
+ const contextStore = React.useContext(StoreContext);
114
+ const store = ogStore ?? contextStore;
115
+
116
+ if (!store) {
117
+ throw new Error(`\`useStore\` must be used within \`${ROOT_NAME}\``);
118
+ }
119
+
120
+ const getSnapshot = React.useCallback(
121
+ () => selector(store.getState()),
122
+ [store, selector],
123
+ );
124
+
125
+ return React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
126
+ }
127
+
128
+ const RatingContext = React.createContext<RatingContextValue | null>(null);
129
+
130
+ function useRatingContext(consumerName: string) {
131
+ const context = React.useContext(RatingContext);
132
+ if (!context) {
133
+ throw new Error(`\`${consumerName}\` must be used within \`${ROOT_NAME}\``);
134
+ }
135
+ return context;
136
+ }
137
+
138
+ const FocusContext = React.createContext<FocusContextValue | null>(null);
139
+
140
+ function useFocusContext(consumerName: string) {
141
+ const context = React.useContext(FocusContext);
142
+ if (!context) {
143
+ throw new Error(
144
+ `\`${consumerName}\` must be used within \`FocusProvider\``,
145
+ );
146
+ }
147
+ return context;
148
+ }
149
+
150
+ export function Rating(props: RatingProps) {
151
+ const {
152
+ value: valueProp,
153
+ defaultValue = 0,
154
+ onValueChange,
155
+ onHover,
156
+ onFocus: onFocusProp,
157
+ onMouseDown: onMouseDownProp,
158
+ dir: dirProp,
159
+ orientation = 'horizontal',
160
+ activationMode = 'automatic',
161
+ size = 'default',
162
+ max = 5,
163
+ step = 1,
164
+ clearable = false,
165
+ asChild,
166
+ disabled = false,
167
+ readOnly = false,
168
+ required = false,
169
+ className,
170
+ id,
171
+ name,
172
+ ref,
173
+ ...rootProps
174
+ } = props;
175
+
176
+ const dir = useDirectionPrimitive(dirProp);
177
+ const instanceId = React.useId();
178
+ const rootId = id ?? instanceId;
179
+
180
+ const listenersRef = useLazyRef(() => new Set<() => void>());
181
+ const stateRef = useLazyRef<StoreState>(() => ({
182
+ value: valueProp ?? defaultValue,
183
+ hoveredValue: null,
184
+ }));
185
+
186
+ const propsRef = useAsRef({
187
+ onValueChange,
188
+ onHover,
189
+ onFocus: onFocusProp,
190
+ onMouseDown: onMouseDownProp,
191
+ step,
192
+ });
193
+
194
+ const store = React.useMemo<Store>(() => {
195
+ return {
196
+ subscribe: (cb) => {
197
+ listenersRef.current.add(cb);
198
+ return () => listenersRef.current.delete(cb);
199
+ },
200
+ getState: () => stateRef.current,
201
+ setState: (key, value) => {
202
+ if (Object.is(stateRef.current[key], value)) return;
203
+
204
+ if (key === 'value' && typeof value === 'number') {
205
+ stateRef.current.value = value;
206
+ propsRef.current.onValueChange?.(value);
207
+ } else if (key === 'hoveredValue') {
208
+ stateRef.current.hoveredValue = value as number | null;
209
+ propsRef.current.onHover?.(value as number | null);
210
+ } else {
211
+ stateRef.current[key] = value;
212
+ }
213
+
214
+ store.notify();
215
+ },
216
+ notify: () => {
217
+ for (const cb of listenersRef.current) {
218
+ cb();
219
+ }
220
+ },
221
+ };
222
+ }, [listenersRef, stateRef, propsRef]);
223
+
224
+ React.useLayoutEffect(() => {
225
+ if (valueProp !== undefined) {
226
+ store.setState('value', valueProp);
227
+ }
228
+ }, [valueProp, store]);
229
+
230
+ const value = useStore((state) => state.value, store);
231
+
232
+ const [formTrigger, setFormTrigger] = React.useState<HTMLDivElement | null>(null);
233
+ const composedRef = useComposedRefs(ref, (node: HTMLDivElement | null) => setFormTrigger(node));
234
+ const isFormControl = formTrigger ? !!formTrigger.closest('form') : true;
235
+
236
+ const [tabStopId, setTabStopId] = React.useState<string | null>(null);
237
+ const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);
238
+ const [focusableItemCount, setFocusableItemCount] = React.useState(0);
239
+ const isClickFocusRef = React.useRef(false);
240
+ const itemsRef = React.useRef<Map<string, ItemData>>(new Map());
241
+
242
+ const autoIndexMapRef = React.useRef(new Map<string, number>());
243
+ const nextAutoIndexRef = React.useRef(0);
244
+
245
+ const getAutoIndex = React.useCallback((instanceId: string) => {
246
+ const existingIndex = autoIndexMapRef.current.get(instanceId);
247
+ if (existingIndex !== undefined) {
248
+ return existingIndex;
249
+ }
250
+
251
+ const newIndex = nextAutoIndexRef.current++;
252
+ autoIndexMapRef.current.set(instanceId, newIndex);
253
+ return newIndex;
254
+ }, []);
255
+
256
+ const onItemFocus = React.useCallback((tabStopId: string) => {
257
+ setTabStopId(tabStopId);
258
+ }, []);
259
+
260
+ const onItemShiftTab = React.useCallback(() => {
261
+ setIsTabbingBackOut(true);
262
+ }, []);
263
+
264
+ const onFocusableItemAdd = React.useCallback(() => {
265
+ setFocusableItemCount((prevCount) => prevCount + 1);
266
+ }, []);
267
+
268
+ const onFocusableItemRemove = React.useCallback(() => {
269
+ setFocusableItemCount((prevCount) => prevCount - 1);
270
+ }, []);
271
+
272
+ const onItemRegister = React.useCallback((item: ItemData) => {
273
+ itemsRef.current.set(item.id, item);
274
+ }, []);
275
+
276
+ const onItemUnregister = React.useCallback((id: string) => {
277
+ itemsRef.current.delete(id);
278
+ }, []);
279
+
280
+ const getItems = React.useCallback(() => {
281
+ return Array.from(itemsRef.current.values())
282
+ .filter((item) => item.ref.current)
283
+ .sort((a, b) => {
284
+ const elementA = a.ref.current;
285
+ const elementB = b.ref.current;
286
+ if (!elementA || !elementB) return 0;
287
+ const position = elementA.compareDocumentPosition(elementB);
288
+ if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
289
+ return -1;
290
+ }
291
+ if (position & Node.DOCUMENT_POSITION_PRECEDING) {
292
+ return 1;
293
+ }
294
+ return 0;
295
+ });
296
+ }, []);
297
+
298
+ const onBlur = React.useCallback(
299
+ (event: React.FocusEvent<HTMLDivElement>) => {
300
+ rootProps.onBlur?.(event);
301
+ if (event.defaultPrevented) return;
302
+
303
+ setIsTabbingBackOut(false);
304
+ },
305
+ [rootProps.onBlur],
306
+ );
307
+
308
+ const onFocus = React.useCallback(
309
+ (event: React.FocusEvent<HTMLDivElement>) => {
310
+ propsRef.current.onFocus?.(event);
311
+ if (event.defaultPrevented) return;
312
+
313
+ const isKeyboardFocus = !isClickFocusRef.current;
314
+ if (
315
+ event.target === event.currentTarget &&
316
+ isKeyboardFocus &&
317
+ !isTabbingBackOut
318
+ ) {
319
+ const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);
320
+ event.currentTarget.dispatchEvent(entryFocusEvent);
321
+
322
+ if (!entryFocusEvent.defaultPrevented) {
323
+ const items = Array.from(itemsRef.current.values()).filter(
324
+ (item) => !item.disabled,
325
+ );
326
+ const selectedItem =
327
+ propsRef.current.step < 1
328
+ ? items.find((item) => item.value === Math.ceil(value))
329
+ : items.find((item) => item.value === value);
330
+ const currentItem = items.find((item) => item.id === tabStopId);
331
+
332
+ const candidateItems = [selectedItem, currentItem, ...items].filter(
333
+ Boolean,
334
+ ) as ItemData[];
335
+ const candidateRefs = candidateItems.map((item) => item.ref);
336
+ focusFirst(candidateRefs, false);
337
+ }
338
+ }
339
+ isClickFocusRef.current = false;
340
+ },
341
+ [propsRef, isTabbingBackOut, value, tabStopId],
342
+ );
343
+
344
+ const onMouseDown = React.useCallback(
345
+ (event: React.MouseEvent<HTMLDivElement>) => {
346
+ propsRef.current.onMouseDown?.(event);
347
+
348
+ if (event.defaultPrevented) return;
349
+
350
+ isClickFocusRef.current = true;
351
+ },
352
+ [propsRef],
353
+ );
354
+
355
+ const contextValue = React.useMemo<RatingContextValue>(
356
+ () => ({
357
+ rootId,
358
+ dir,
359
+ orientation,
360
+ activationMode,
361
+ disabled,
362
+ readOnly,
363
+ size,
364
+ max,
365
+ step,
366
+ clearable,
367
+ getAutoIndex,
368
+ }),
369
+ [
370
+ rootId,
371
+ dir,
372
+ orientation,
373
+ activationMode,
374
+ disabled,
375
+ readOnly,
376
+ size,
377
+ max,
378
+ step,
379
+ clearable,
380
+ getAutoIndex,
381
+ ],
382
+ );
383
+
384
+ const focusContextValue = React.useMemo<FocusContextValue>(
385
+ () => ({
386
+ tabStopId,
387
+ onItemFocus,
388
+ onItemShiftTab,
389
+ onFocusableItemAdd,
390
+ onFocusableItemRemove,
391
+ onItemRegister,
392
+ onItemUnregister,
393
+ getItems,
394
+ }),
395
+ [
396
+ tabStopId,
397
+ onItemFocus,
398
+ onItemShiftTab,
399
+ onFocusableItemAdd,
400
+ onFocusableItemRemove,
401
+ onItemRegister,
402
+ onItemUnregister,
403
+ getItems,
404
+ ],
405
+ );
406
+
407
+ const RootPrimitive = asChild ? SlotPrimitive : 'div';
408
+
409
+ return (
410
+ <StoreContext.Provider value={store}>
411
+ <RatingContext.Provider value={contextValue}>
412
+ <FocusContext.Provider value={focusContextValue}>
413
+ <RootPrimitive
414
+ id={rootId}
415
+ role="radiogroup"
416
+ aria-orientation={orientation}
417
+ data-disabled={disabled ? '' : undefined}
418
+ data-readonly={readOnly ? '' : undefined}
419
+ data-orientation={orientation}
420
+ data-slot="rating"
421
+ dir={dir}
422
+ tabIndex={isTabbingBackOut || focusableItemCount === 0 ? -1 : 0}
423
+ {...rootProps}
424
+ ref={composedRef}
425
+ className={cn(
426
+ 'flex gap-1 text-primary outline-none',
427
+ orientation === 'horizontal'
428
+ ? 'flex-row items-center'
429
+ : 'flex-col items-start',
430
+ className,
431
+ )}
432
+ onBlur={onBlur}
433
+ onFocus={onFocus}
434
+ onMouseDown={onMouseDown}
435
+ />
436
+ <svg width="0" height="0" style={{ position: 'absolute' }}>
437
+ <defs>
438
+ <linearGradient id={getPartialFillGradientId(rootId, step)}>
439
+ {dir === 'rtl' ? (
440
+ <>
441
+ <stop offset="50%" stopColor="transparent" />
442
+ <stop offset="50%" stopColor="currentColor" />
443
+ </>
444
+ ) : (
445
+ <>
446
+ <stop offset="50%" stopColor="currentColor" />
447
+ <stop offset="50%" stopColor="transparent" />
448
+ </>
449
+ )}
450
+ </linearGradient>
451
+ </defs>
452
+ </svg>
453
+ {isFormControl && (
454
+ <VisuallyHiddenInput
455
+ type="hidden"
456
+ control={formTrigger}
457
+ name={name}
458
+ value={value}
459
+ disabled={disabled}
460
+ readOnly={readOnly}
461
+ required={required}
462
+ />
463
+ )}
464
+ </FocusContext.Provider>
465
+ </RatingContext.Provider>
466
+ </StoreContext.Provider>
467
+ );
468
+ }
469
+
470
+ Rating.displayName = ROOT_NAME;
471
+
472
+ export function RatingItem(props: RatingItemProps) {
473
+ const {
474
+ index,
475
+ asChild,
476
+ onClick: onClickProp,
477
+ onFocus: onFocusProp,
478
+ onKeyDown: onKeyDownProp,
479
+ onMouseDown: onMouseDownProp,
480
+ onMouseEnter: onMouseEnterProp,
481
+ onMouseMove: onMouseMoveProp,
482
+ onMouseLeave: onMouseLeaveProp,
483
+ disabled,
484
+ className,
485
+ children,
486
+ ref,
487
+ ...itemProps
488
+ } = props;
489
+
490
+ const itemRef = React.useRef<HTMLButtonElement>(null);
491
+ const composedRef = useComposedRefs(ref, itemRef);
492
+
493
+ const context = useRatingContext(ITEM_NAME);
494
+
495
+ const instanceId = React.useId();
496
+
497
+ const actualIndex = React.useMemo(() => {
498
+ if (index !== undefined) {
499
+ return index;
500
+ }
501
+
502
+ return context.getAutoIndex(instanceId);
503
+ }, [index, context, instanceId]);
504
+
505
+ const itemValue = actualIndex + 1;
506
+ const store = useStoreContext(ITEM_NAME);
507
+ const focusContext = useFocusContext(ITEM_NAME);
508
+ const value = useStore((state) => state.value);
509
+ const hoveredValue = useStore((state) => state.hoveredValue);
510
+ const clearable = context.clearable;
511
+ const step = context.step;
512
+ const activationMode = context.activationMode;
513
+
514
+ const itemId = getItemId(context.rootId, itemValue);
515
+ const isDisabled = context.disabled || disabled;
516
+ const isReadOnly = context.readOnly;
517
+ const isTabStop = focusContext.tabStopId === itemId;
518
+
519
+ const displayValue = hoveredValue ?? value;
520
+ const isFilled = displayValue >= itemValue;
521
+ const isPartiallyFilled =
522
+ step < 1 && displayValue >= itemValue - step && displayValue < itemValue;
523
+ const isHovered = hoveredValue !== null && hoveredValue < itemValue;
524
+
525
+ const isMouseClickRef = React.useRef(false);
526
+
527
+ const propsRef = useAsRef({
528
+ onClick: onClickProp,
529
+ onFocus: onFocusProp,
530
+ onKeyDown: onKeyDownProp,
531
+ onMouseDown: onMouseDownProp,
532
+ onMouseEnter: onMouseEnterProp,
533
+ onMouseMove: onMouseMoveProp,
534
+ onMouseLeave: onMouseLeaveProp,
535
+ });
536
+
537
+ React.useLayoutEffect(() => {
538
+ focusContext.onItemRegister({
539
+ id: itemId,
540
+ ref: itemRef,
541
+ value: itemValue,
542
+ disabled: !!isDisabled,
543
+ });
544
+
545
+ if (!isDisabled) {
546
+ focusContext.onFocusableItemAdd();
547
+ }
548
+
549
+ return () => {
550
+ focusContext.onItemUnregister(itemId);
551
+ if (!isDisabled) {
552
+ focusContext.onFocusableItemRemove();
553
+ }
554
+ };
555
+ }, [focusContext, itemId, itemValue, isDisabled]);
556
+
557
+ const onClick = React.useCallback(
558
+ (event: React.MouseEvent<HTMLButtonElement>) => {
559
+ propsRef.current.onClick?.(event);
560
+ if (event.defaultPrevented) return;
561
+
562
+ if (!isDisabled && !isReadOnly) {
563
+ let newValue = itemValue;
564
+
565
+ if (step < 1) {
566
+ const rect = event.currentTarget.getBoundingClientRect();
567
+ const clickX = event.clientX - rect.left;
568
+ const isLeftHalf = clickX < rect.width / 2;
569
+
570
+ if (context.dir === 'rtl') {
571
+ if (!isLeftHalf) {
572
+ newValue = itemValue - step;
573
+ }
574
+ } else {
575
+ if (isLeftHalf) {
576
+ newValue = itemValue - step;
577
+ }
578
+ }
579
+ }
580
+
581
+ if (clearable && value === newValue) {
582
+ newValue = 0;
583
+ }
584
+
585
+ store.setState('value', newValue);
586
+ }
587
+ },
588
+ [
589
+ isDisabled,
590
+ isReadOnly,
591
+ clearable,
592
+ step,
593
+ value,
594
+ itemValue,
595
+ store,
596
+ context.dir,
597
+ propsRef,
598
+ ],
599
+ );
600
+
601
+ const onFocus = React.useCallback(
602
+ (event: React.FocusEvent<HTMLButtonElement>) => {
603
+ propsRef.current.onFocus?.(event);
604
+ if (event.defaultPrevented) return;
605
+
606
+ focusContext.onItemFocus(itemId);
607
+
608
+ const isKeyboardFocus = !isMouseClickRef.current;
609
+
610
+ if (
611
+ !isDisabled &&
612
+ !isReadOnly &&
613
+ activationMode !== 'manual' &&
614
+ isKeyboardFocus
615
+ ) {
616
+ const isHalfStepValue = step < 1 && value === itemValue - step;
617
+
618
+ if (!isHalfStepValue) {
619
+ const newValue = clearable && value === itemValue ? 0 : itemValue;
620
+ store.setState('value', newValue);
621
+ }
622
+ }
623
+
624
+ isMouseClickRef.current = false;
625
+ },
626
+ [
627
+ focusContext,
628
+ itemId,
629
+ activationMode,
630
+ isDisabled,
631
+ isReadOnly,
632
+ clearable,
633
+ value,
634
+ itemValue,
635
+ step,
636
+ store,
637
+ propsRef,
638
+ ],
639
+ );
640
+
641
+ const onKeyDown = React.useCallback(
642
+ (event: React.KeyboardEvent<HTMLButtonElement>) => {
643
+ propsRef.current.onKeyDown?.(event);
644
+ if (event.defaultPrevented) return;
645
+
646
+ if (
647
+ (event.key === 'Enter' || event.key === ' ') &&
648
+ activationMode === 'manual'
649
+ ) {
650
+ event.preventDefault();
651
+ if (!isDisabled && !isReadOnly && itemRef.current) {
652
+ itemRef.current.click();
653
+ }
654
+ return;
655
+ }
656
+
657
+ if (event.key === 'Tab' && event.shiftKey) {
658
+ focusContext.onItemShiftTab();
659
+ return;
660
+ }
661
+
662
+ if (event.target !== event.currentTarget) return;
663
+
664
+ const focusIntent = getFocusIntent(
665
+ event,
666
+ context.dir,
667
+ context.orientation,
668
+ );
669
+
670
+ if (focusIntent !== undefined) {
671
+ if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey)
672
+ return;
673
+ event.preventDefault();
674
+
675
+ if (step < 1 && (focusIntent === 'prev' || focusIntent === 'next')) {
676
+ if (!isDisabled && !isReadOnly) {
677
+ let newValue = value;
678
+
679
+ if (focusIntent === 'next') {
680
+ newValue = Math.min(value + step, context.max);
681
+ } else {
682
+ newValue = Math.max(value - step, 0);
683
+ }
684
+
685
+ store.setState('value', newValue);
686
+
687
+ const items = focusContext
688
+ .getItems()
689
+ .filter((item) => !item.disabled);
690
+ const targetItem = items.find(
691
+ (item) => item.value === Math.ceil(newValue),
692
+ );
693
+ if (targetItem?.ref.current) {
694
+ queueMicrotask(() => targetItem.ref.current?.focus());
695
+ }
696
+ }
697
+ return;
698
+ }
699
+
700
+ const items = focusContext.getItems().filter((item) => !item.disabled);
701
+ let candidateRefs = items.map((item) => item.ref);
702
+
703
+ if (focusIntent === 'last') {
704
+ candidateRefs.reverse();
705
+ } else if (focusIntent === 'prev' || focusIntent === 'next') {
706
+ if (focusIntent === 'prev') candidateRefs.reverse();
707
+ const currentIndex = candidateRefs.findIndex(
708
+ (ref) => ref.current === event.currentTarget,
709
+ );
710
+ candidateRefs = candidateRefs.slice(currentIndex + 1);
711
+ }
712
+
713
+ queueMicrotask(() => focusFirst(candidateRefs));
714
+ }
715
+ },
716
+ [
717
+ focusContext,
718
+ context.dir,
719
+ context.orientation,
720
+ activationMode,
721
+ isDisabled,
722
+ isReadOnly,
723
+ step,
724
+ value,
725
+ context.max,
726
+ store,
727
+ propsRef,
728
+ ],
729
+ );
730
+
731
+ const onMouseDown = React.useCallback(
732
+ (event: React.MouseEvent<HTMLButtonElement>) => {
733
+ propsRef.current.onMouseDown?.(event);
734
+ if (event.defaultPrevented) return;
735
+
736
+ isMouseClickRef.current = true;
737
+
738
+ if (isDisabled) {
739
+ event.preventDefault();
740
+ } else {
741
+ focusContext.onItemFocus(itemId);
742
+ }
743
+ },
744
+ [focusContext, itemId, isDisabled, propsRef],
745
+ );
746
+
747
+ const onMouseEnter = React.useCallback(
748
+ (event: React.MouseEvent<HTMLButtonElement>) => {
749
+ propsRef.current.onMouseEnter?.(event);
750
+ if (event.defaultPrevented) return;
751
+
752
+ if (!isDisabled && !isReadOnly) {
753
+ let hoverValue = itemValue;
754
+
755
+ if (step < 1) {
756
+ const rect = event.currentTarget.getBoundingClientRect();
757
+ const mouseX = event.clientX - rect.left;
758
+ const isLeftHalf = mouseX < rect.width / 2;
759
+
760
+ if (context.dir === 'rtl') {
761
+ if (!isLeftHalf) {
762
+ hoverValue = itemValue - step;
763
+ }
764
+ } else {
765
+ if (isLeftHalf) {
766
+ hoverValue = itemValue - step;
767
+ }
768
+ }
769
+ }
770
+
771
+ store.setState('hoveredValue', hoverValue);
772
+ }
773
+ },
774
+ [isDisabled, isReadOnly, step, itemValue, store, context.dir, propsRef],
775
+ );
776
+
777
+ const onMouseLeave = React.useCallback(
778
+ (event: React.MouseEvent<HTMLButtonElement>) => {
779
+ propsRef.current.onMouseLeave?.(event);
780
+ if (event.defaultPrevented) return;
781
+
782
+ if (!isDisabled && !isReadOnly) {
783
+ store.setState('hoveredValue', null);
784
+ }
785
+ },
786
+ [isDisabled, isReadOnly, store, propsRef],
787
+ );
788
+
789
+ const onMouseMove = React.useCallback(
790
+ (event: React.MouseEvent<HTMLButtonElement>) => {
791
+ propsRef.current.onMouseMove?.(event);
792
+ if (event.defaultPrevented) return;
793
+
794
+ if (!isDisabled && !isReadOnly && step < 1) {
795
+ const rect = event.currentTarget.getBoundingClientRect();
796
+ const mouseX = event.clientX - rect.left;
797
+ const isLeftHalf = mouseX < rect.width / 2;
798
+
799
+ let hoverValue = itemValue;
800
+ if (context.dir === 'rtl') {
801
+ hoverValue = !isLeftHalf ? itemValue - step : itemValue;
802
+ } else {
803
+ hoverValue = isLeftHalf ? itemValue - step : itemValue;
804
+ }
805
+
806
+ store.setState('hoveredValue', hoverValue);
807
+ }
808
+ },
809
+ [isDisabled, isReadOnly, step, itemValue, store, context.dir, propsRef],
810
+ );
811
+
812
+ const dataState: DataState = isFilled
813
+ ? 'full'
814
+ : isPartiallyFilled
815
+ ? 'partial'
816
+ : 'empty';
817
+
818
+ const ItemPrimitive = asChild ? SlotPrimitive : 'button';
819
+
820
+ return (
821
+ <ItemPrimitive
822
+ role="radio"
823
+ type="button"
824
+ id={itemId}
825
+ aria-checked={isFilled}
826
+ aria-posinset={itemValue}
827
+ aria-setsize={context.max}
828
+ data-disabled={isDisabled ? '' : undefined}
829
+ data-readonly={isReadOnly ? '' : undefined}
830
+ data-state={isFilled ? 'full' : isPartiallyFilled ? 'partial' : 'empty'}
831
+ data-hovered={isHovered ? '' : undefined}
832
+ data-slot="rating-item"
833
+ disabled={isDisabled}
834
+ tabIndex={isTabStop ? 0 : -1}
835
+ {...itemProps}
836
+ ref={composedRef}
837
+ style={{
838
+ ...itemProps.style,
839
+ ...(isPartiallyFilled && {
840
+ '--partial-fill': `url(#${getPartialFillGradientId(context.rootId, step)})`,
841
+ }),
842
+ }}
843
+ className={cn(
844
+ 'inline-flex items-center justify-center rounded transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50',
845
+ "[&_svg:not([class*='size-'])]:size-full [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:transition-colors [&_svg]:duration-200 data-[state=empty]:[&_svg]:fill-transparent data-[state=full]:[&_svg]:fill-current data-[state=partial]:[&_svg]:fill-(--partial-fill)",
846
+ context.size === 'sm'
847
+ ? 'size-4'
848
+ : context.size === 'lg'
849
+ ? 'size-6'
850
+ : 'size-5',
851
+ className,
852
+ )}
853
+ onClick={onClick}
854
+ onFocus={onFocus}
855
+ onKeyDown={onKeyDown}
856
+ onMouseDown={onMouseDown}
857
+ onMouseEnter={onMouseEnter}
858
+ onMouseMove={onMouseMove}
859
+ onMouseLeave={onMouseLeave}
860
+ >
861
+ {typeof children === 'function'
862
+ ? children(dataState)
863
+ : (children ?? <Star />)}
864
+ </ItemPrimitive>
865
+ );
866
+ }
867
+
868
+ RatingItem.displayName = ITEM_NAME;