@djangocfg/ui-tools 2.1.417 → 2.1.419

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 (335) hide show
  1. package/dist/audio-player/index.cjs +1 -2
  2. package/dist/audio-player/index.cjs.map +1 -1
  3. package/dist/audio-player/index.d.cts +3 -11
  4. package/dist/audio-player/index.d.ts +3 -11
  5. package/dist/audio-player/index.mjs +1 -2
  6. package/dist/audio-player/index.mjs.map +1 -1
  7. package/dist/file-icon/index.cjs +3 -3
  8. package/dist/file-icon/index.cjs.map +1 -1
  9. package/dist/file-icon/index.mjs +3 -3
  10. package/dist/file-icon/index.mjs.map +1 -1
  11. package/dist/tree/index.cjs +0 -3
  12. package/dist/tree/index.cjs.map +1 -1
  13. package/dist/tree/index.mjs +0 -3
  14. package/dist/tree/index.mjs.map +1 -1
  15. package/package.json +117 -36
  16. package/src/common/FloatingToolbar/actions/CopyAction.tsx +31 -0
  17. package/src/{components → common}/FloatingToolbar/actions/DownloadAction.tsx +15 -10
  18. package/src/common/FloatingToolbar/actions/ExpandAction.tsx +33 -0
  19. package/src/common/FloatingToolbar/actions/FullscreenAction.tsx +38 -0
  20. package/src/{components → common}/FloatingToolbar/index.tsx +39 -0
  21. package/src/lib/http.ts +64 -0
  22. package/src/tools/chat/index.ts +1 -1
  23. package/src/tools/chat/launcher/ChatFAB.tsx +66 -74
  24. package/src/tools/chat/launcher/header/ChatHeaderActionButton.tsx +2 -3
  25. package/src/tools/chat/lazy.tsx +1 -1
  26. package/src/tools/chat/messages/MessageBubble.tsx +1 -1
  27. package/src/tools/chat/messages/blocks/builtin.tsx +1 -1
  28. package/src/tools/chat/messages/blocks/renderers/CodeBlock.tsx +2 -2
  29. package/src/tools/chat/messages/blocks/renderers/JsonBlock.tsx +12 -1
  30. package/src/tools/data/DataGrid/lazy.tsx +1 -1
  31. package/src/tools/data/DataTable/lazy.tsx +1 -1
  32. package/src/tools/data/JsonTree/JsonViewer.tsx +720 -0
  33. package/src/tools/data/JsonTree/README.md +126 -73
  34. package/src/tools/data/JsonTree/index.tsx +3 -95
  35. package/src/tools/data/JsonTree/lazy.tsx +10 -50
  36. package/src/tools/data/JsonTree/types.ts +82 -63
  37. package/src/tools/data/Kanban/lazy.tsx +1 -1
  38. package/src/tools/data/Listbox/lazy.tsx +1 -1
  39. package/src/tools/data/Masonry/lazy.tsx +1 -1
  40. package/src/tools/data/Timeline/lazy.tsx +1 -1
  41. package/src/tools/data/Tree/components/TreeRow.tsx +0 -11
  42. package/src/tools/data/Tree/lazy.tsx +1 -1
  43. package/src/tools/dev/Map/lazy.tsx +1 -1
  44. package/src/tools/dev/Mermaid/Mermaid.client.tsx +2 -2
  45. package/src/tools/dev/Mermaid/lazy.tsx +1 -1
  46. package/src/tools/dev/api/ApiRefTable/ApiRefTable.tsx +65 -0
  47. package/src/tools/dev/api/ApiRefTable/README.md +31 -0
  48. package/src/tools/dev/api/ApiRefTable/components/Row.tsx +96 -0
  49. package/src/tools/dev/api/ApiRefTable/components/TypeDisplay.tsx +44 -0
  50. package/src/tools/dev/api/ApiRefTable/index.ts +6 -0
  51. package/src/tools/dev/api/ApiRefTable/lazy.tsx +21 -0
  52. package/src/tools/dev/api/ApiRefTable/types.ts +82 -0
  53. package/src/tools/dev/api/ApiRefTable/utils.ts +42 -0
  54. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/ApiIntroSection.tsx +1 -1
  55. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/index.tsx +1 -1
  56. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/index.tsx +1 -1
  57. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/ResponseBody.tsx +7 -21
  58. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/RequestPanel.tsx +1 -1
  59. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/PrettyView.tsx +13 -19
  60. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/types.ts +1 -1
  61. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/lazy.tsx +1 -1
  62. package/src/tools/dev/api/RequestViewer/README.md +33 -0
  63. package/src/tools/dev/api/RequestViewer/RequestViewer.tsx +121 -0
  64. package/src/tools/dev/api/RequestViewer/components/BodyTab.tsx +44 -0
  65. package/src/tools/dev/api/RequestViewer/components/EmptyState.tsx +13 -0
  66. package/src/tools/dev/api/RequestViewer/components/HeadersTab.tsx +78 -0
  67. package/src/tools/dev/api/RequestViewer/components/TimingTab.tsx +113 -0
  68. package/src/tools/dev/api/RequestViewer/components/utils.ts +31 -0
  69. package/src/tools/dev/api/RequestViewer/index.ts +16 -0
  70. package/src/tools/dev/api/RequestViewer/lazy.tsx +30 -0
  71. package/src/tools/dev/api/RequestViewer/types.ts +81 -0
  72. package/src/tools/dev/code/DiffViewer/DiffViewer.tsx +144 -0
  73. package/src/tools/dev/code/DiffViewer/README.md +33 -0
  74. package/src/tools/dev/code/DiffViewer/components/CopyButton.tsx +49 -0
  75. package/src/tools/dev/code/DiffViewer/components/DiffLineContent.tsx +48 -0
  76. package/src/tools/dev/code/DiffViewer/components/SplitView.tsx +220 -0
  77. package/src/tools/dev/code/DiffViewer/components/UnifiedView.tsx +154 -0
  78. package/src/tools/dev/code/DiffViewer/hooks/useDiff.ts +47 -0
  79. package/src/tools/dev/code/DiffViewer/hooks/useHighlighter.ts +54 -0
  80. package/src/tools/dev/code/DiffViewer/index.ts +22 -0
  81. package/src/tools/dev/code/DiffViewer/lazy.tsx +22 -0
  82. package/src/tools/dev/code/DiffViewer/types.ts +109 -0
  83. package/src/tools/dev/code/DiffViewer/utils/computeDiff.ts +159 -0
  84. package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/CollapseToggle.tsx +1 -1
  85. package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/MarkdownMessage.tsx +1 -1
  86. package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/components.tsx +2 -2
  87. package/src/tools/dev/{PrettyCode → code/PrettyCode}/PrettyCode.client.tsx +2 -2
  88. package/src/tools/dev/{PrettyCode → code/PrettyCode}/lazy.tsx +1 -1
  89. package/src/tools/dev/ops/EnvTable/EnvTable.tsx +228 -0
  90. package/src/tools/dev/ops/EnvTable/README.md +29 -0
  91. package/src/tools/dev/ops/EnvTable/hooks/useEnvMask.ts +121 -0
  92. package/src/tools/dev/ops/EnvTable/index.ts +12 -0
  93. package/src/tools/dev/ops/EnvTable/lazy.tsx +21 -0
  94. package/src/tools/dev/ops/EnvTable/types.ts +76 -0
  95. package/src/tools/dev/ops/LogViewer/LogViewer.tsx +194 -0
  96. package/src/tools/dev/ops/LogViewer/README.md +30 -0
  97. package/src/tools/dev/ops/LogViewer/components/LogRow.tsx +151 -0
  98. package/src/tools/dev/ops/LogViewer/components/Toolbar.tsx +199 -0
  99. package/src/tools/dev/ops/LogViewer/hooks/useAutoScroll.ts +68 -0
  100. package/src/tools/dev/ops/LogViewer/hooks/useLogFilter.ts +58 -0
  101. package/src/tools/dev/ops/LogViewer/index.ts +18 -0
  102. package/src/tools/dev/ops/LogViewer/lazy.tsx +25 -0
  103. package/src/tools/dev/ops/LogViewer/types.ts +142 -0
  104. package/src/tools/dev/ops/LogViewer/utils/ansi.ts +231 -0
  105. package/src/tools/forms/CodeEditor/components/Editor.tsx +19 -0
  106. package/src/tools/forms/CodeEditor/hooks/useEditorTheme.ts +13 -73
  107. package/src/tools/forms/CodeEditor/lazy.tsx +1 -1
  108. package/src/tools/forms/CodeEditor/types/index.ts +7 -0
  109. package/src/tools/forms/FileUpload/lazy.tsx +1 -1
  110. package/src/tools/forms/JsonEditor/JsonEditor.tsx +115 -0
  111. package/src/tools/forms/JsonEditor/index.ts +1 -0
  112. package/src/tools/forms/JsonEditor/lazy.tsx +24 -0
  113. package/src/tools/forms/JsonForm/index.ts +1 -1
  114. package/src/tools/forms/JsonForm/lazy.tsx +1 -1
  115. package/src/tools/forms/MarkdownEditor/MarkdownEditor.tsx +40 -0
  116. package/src/tools/forms/MarkdownEditor/lazy.tsx +1 -1
  117. package/src/tools/forms/MarkdownEditor/styles.css +174 -21
  118. package/src/tools/forms/NotionEditor/CustomKeymap.ts +48 -0
  119. package/src/tools/forms/NotionEditor/LinkDialog.tsx +133 -0
  120. package/src/tools/forms/NotionEditor/NotionEditor.tsx +304 -0
  121. package/src/tools/forms/NotionEditor/README.md +237 -0
  122. package/src/tools/forms/NotionEditor/SlashExtension.ts +32 -0
  123. package/src/tools/forms/NotionEditor/SlashList.tsx +136 -0
  124. package/src/tools/forms/NotionEditor/TaskItemView.tsx +41 -0
  125. package/src/tools/forms/NotionEditor/createSlashSuggestion.ts +121 -0
  126. package/src/tools/forms/NotionEditor/extensions.ts +105 -0
  127. package/src/tools/forms/NotionEditor/index.ts +1 -0
  128. package/src/tools/forms/NotionEditor/lazy.tsx +44 -0
  129. package/src/tools/forms/NotionEditor/slashItems.ts +159 -0
  130. package/src/tools/forms/NotionEditor/styles.css +478 -0
  131. package/src/tools/forms/NotionEditor/types.ts +28 -0
  132. package/src/tools/index.ts +153 -13
  133. package/src/tools/input/Combobox/lazy.tsx +1 -1
  134. package/src/tools/input/CronScheduler/components/CronPreview.README.md +28 -0
  135. package/src/tools/input/CronScheduler/components/CronPreview.tsx +136 -0
  136. package/src/tools/input/CronScheduler/components/index.ts +3 -0
  137. package/src/tools/input/CronScheduler/index.tsx +5 -1
  138. package/src/tools/input/CronScheduler/lazy.tsx +5 -1
  139. package/src/tools/input/CronScheduler/utils/cron-next-runs.ts +122 -0
  140. package/src/tools/input/CronScheduler/utils/index.ts +1 -0
  141. package/src/tools/input/Scroller/lazy.tsx +1 -1
  142. package/src/tools/input/Sortable/lazy.tsx +1 -1
  143. package/src/tools/input/SpeechRecognition/lazy.tsx +1 -1
  144. package/src/tools/input/SpeechRecognition/widgets/VoiceComposerSlot.tsx +41 -36
  145. package/src/tools/media/AudioPlayer/PlayerShell.tsx +3 -11
  146. package/src/tools/media/AudioPlayer/types.ts +4 -11
  147. package/src/tools/media/ImageViewer/components/ImageToolbar.tsx +58 -47
  148. package/src/tools/media/ImageViewer/components/ImageViewer.tsx +35 -19
  149. package/src/tools/media/ImageViewer/lazy.tsx +1 -1
  150. package/src/tools/media/ImageViewer/types.ts +4 -0
  151. package/src/tools/media/LottiePlayer/lazy.tsx +1 -1
  152. package/src/tools/media/VideoPlayer/VideoPlayer.tsx +47 -1
  153. package/src/tools/media/VideoPlayer/parts/fullscreen.tsx +21 -4
  154. package/src/tools/media/VideoPlayer/parts/pip.tsx +21 -4
  155. package/src/tools/media/VideoPlayer/parts/play-button.tsx +21 -4
  156. package/src/tools/media/VideoPlayer/parts/playback-rate.tsx +19 -3
  157. package/src/tools/media/VideoPlayer/parts/volume.tsx +237 -18
  158. package/src/tools/media/VideoPlayer/styles/video-player.css +87 -7
  159. package/src/tools/media/VideoPlayer/types.ts +4 -0
  160. package/src/tools/overlay/ResponsiveDialog/lazy.tsx +1 -1
  161. package/src/tools/overlay/ScrollSpy/lazy.tsx +1 -1
  162. package/src/tools/overlay/SelectionToolbar/lazy.tsx +1 -1
  163. package/src/tools/overlay/Tour/lazy.tsx +1 -1
  164. package/src/tools/visual/Marquee/lazy.tsx +1 -1
  165. package/src/tools/visual/QRCode/lazy.tsx +1 -1
  166. package/src/tools/visual/charts/ActivityGraph/ActivityGraph.tsx +195 -0
  167. package/src/tools/visual/charts/ActivityGraph/README.md +28 -0
  168. package/src/tools/visual/charts/ActivityGraph/index.ts +8 -0
  169. package/src/tools/visual/charts/ActivityGraph/lazy.tsx +21 -0
  170. package/src/tools/visual/charts/ActivityGraph/types.ts +59 -0
  171. package/src/tools/visual/charts/ActivityGraph/utils.ts +88 -0
  172. package/src/tools/visual/charts/CommitGraph/CommitGraph.tsx +80 -0
  173. package/src/tools/visual/charts/CommitGraph/README.md +28 -0
  174. package/src/tools/visual/charts/CommitGraph/components/CommitDetail.tsx +107 -0
  175. package/src/tools/visual/charts/CommitGraph/components/CommitRow.tsx +122 -0
  176. package/src/tools/visual/charts/CommitGraph/components/Rails.tsx +171 -0
  177. package/src/tools/visual/charts/CommitGraph/hooks/useGraphLayout.ts +169 -0
  178. package/src/tools/visual/charts/CommitGraph/hooks/useLaneColors.ts +45 -0
  179. package/src/tools/visual/charts/CommitGraph/index.ts +14 -0
  180. package/src/tools/visual/charts/CommitGraph/lazy.tsx +25 -0
  181. package/src/tools/visual/charts/CommitGraph/types.ts +85 -0
  182. package/src/tools/visual/charts/CommitGraph/utils.ts +53 -0
  183. package/src/tools/visual/{Gauge → charts/Gauge}/lazy.tsx +1 -1
  184. package/src/tools/visual/charts/Sparkline/README.md +29 -0
  185. package/src/tools/visual/charts/Sparkline/Sparkline.tsx +217 -0
  186. package/src/tools/visual/charts/Sparkline/index.ts +9 -0
  187. package/src/tools/visual/charts/Sparkline/lazy.tsx +26 -0
  188. package/src/tools/visual/charts/Sparkline/types.ts +58 -0
  189. package/src/tools/visual/design/ColorPalette/ColorPalette.tsx +129 -0
  190. package/src/tools/visual/design/ColorPalette/README.md +34 -0
  191. package/src/tools/visual/design/ColorPalette/components/Swatch.tsx +102 -0
  192. package/src/tools/visual/design/ColorPalette/hooks/useCopyToClipboard.ts +41 -0
  193. package/src/tools/visual/design/ColorPalette/index.ts +12 -0
  194. package/src/tools/visual/design/ColorPalette/lazy.tsx +21 -0
  195. package/src/tools/visual/design/ColorPalette/types.ts +63 -0
  196. package/src/tools/visual/design/ColorPalette/utils.ts +83 -0
  197. package/src/tools/visual/{ColorPicker → design/ColorPicker}/lazy.tsx +1 -1
  198. package/src/tools/visual/{FileIcon → design/FileIcon}/treeAdapter.tsx +1 -1
  199. package/src/tools/visual/{Fps → indicators/Fps}/lazy.tsx +1 -1
  200. package/src/tools/visual/{Rating → indicators/Rating}/lazy.tsx +1 -1
  201. package/src/tools/visual/indicators/StatusIndicator/README.md +28 -0
  202. package/src/tools/visual/indicators/StatusIndicator/StatusIndicator.tsx +83 -0
  203. package/src/tools/visual/indicators/StatusIndicator/index.ts +14 -0
  204. package/src/tools/visual/indicators/StatusIndicator/lazy.tsx +21 -0
  205. package/src/tools/visual/indicators/StatusIndicator/types.ts +133 -0
  206. package/src/components/FloatingToolbar/actions/CopyAction.tsx +0 -22
  207. package/src/components/FloatingToolbar/actions/ExpandAction.tsx +0 -25
  208. package/src/components/FloatingToolbar/actions/FullscreenAction.tsx +0 -30
  209. package/src/tools/data/JsonTree/components/JsonContent.tsx +0 -197
  210. package/src/tools/data/JsonTree/hooks/useJsonExpand.ts +0 -50
  211. /package/src/{components → common}/FloatingToolbar/FloatingToolbar.css +0 -0
  212. /package/src/{components → common}/FloatingToolbar/actions/index.ts +0 -0
  213. /package/src/{components → common}/FloatingToolbar/hooks/useElementCorner.ts +0 -0
  214. /package/src/{components → common}/FloatingToolbar/hooks/useScrollIsolation.ts +0 -0
  215. /package/src/{components → common}/index.ts +0 -0
  216. /package/src/{components → common}/lazy-wrapper.tsx +0 -0
  217. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/README.md +0 -0
  218. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/DocsView.tsx +0 -0
  219. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/LanguageTabs.tsx +0 -0
  220. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/useCodeSnippet.ts +0 -0
  221. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/MetaActions.tsx +0 -0
  222. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/MethodBadge.tsx +0 -0
  223. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/PathDisplay.tsx +0 -0
  224. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/ParamGroup.tsx +0 -0
  225. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/ParamRow.tsx +0 -0
  226. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/index.tsx +0 -0
  227. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/RequestBody/index.tsx +0 -0
  228. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/ResponseRow.tsx +0 -0
  229. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/StatusTag.tsx +0 -0
  230. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/index.tsx +0 -0
  231. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/FieldRow.tsx +0 -0
  232. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/buildTree.ts +0 -0
  233. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/index.tsx +0 -0
  234. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/types.ts +0 -0
  235. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/SectionHeader.tsx +0 -0
  236. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/defaults.ts +0 -0
  237. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/index.tsx +0 -0
  238. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/context.tsx +0 -0
  239. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/hooks/useSectionHash.ts +0 -0
  240. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/index.tsx +0 -0
  241. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/store/index.ts +0 -0
  242. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/store/selectors.ts +0 -0
  243. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/types.ts +0 -0
  244. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/SchemaCopyMenu.tsx +0 -0
  245. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/BrandHeader.tsx +0 -0
  246. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/CategoryBlock.tsx +0 -0
  247. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/EndpointRow.tsx +0 -0
  248. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/SchemaSection.tsx +0 -0
  249. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/SearchInput.tsx +0 -0
  250. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/SidebarBody.tsx +0 -0
  251. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/Toolbar.tsx +0 -0
  252. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/buildVM.ts +0 -0
  253. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/index.tsx +0 -0
  254. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/types.ts +0 -0
  255. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/useDebouncedValue.ts +0 -0
  256. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/SlideInPlayground.tsx +0 -0
  257. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/TryItSheet.tsx +0 -0
  258. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/anchor.ts +0 -0
  259. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/grouping.ts +0 -0
  260. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/index.tsx +0 -0
  261. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/sidebarLabel.ts +0 -0
  262. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/index.ts +0 -0
  263. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/BodyFormEditor.tsx +0 -0
  264. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/EndpointDraftSync.tsx +0 -0
  265. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/EndpointResetButton.tsx +0 -0
  266. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/PreviewView.tsx +0 -0
  267. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/RawView.tsx +0 -0
  268. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/StatusBar.tsx +0 -0
  269. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/ViewTabs.tsx +0 -0
  270. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/detectContent.ts +0 -0
  271. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/index.tsx +0 -0
  272. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/useResponseView.ts +0 -0
  273. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/SendButton.tsx +0 -0
  274. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ui.tsx +0 -0
  275. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/constants.ts +0 -0
  276. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/context/PlaygroundContext.tsx +0 -0
  277. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/index.ts +0 -0
  278. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useDocsUrlSync.ts +0 -0
  279. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useEndpointDraft.ts +0 -0
  280. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useMobile.ts +0 -0
  281. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useOpenApiSchema.ts +0 -0
  282. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/index.tsx +0 -0
  283. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/types.ts +0 -0
  284. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/apiKeyManager.ts +0 -0
  285. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/codeSamples.ts +0 -0
  286. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/formatters.ts +0 -0
  287. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/index.ts +0 -0
  288. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/operationToHar.ts +0 -0
  289. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/sampler.ts +0 -0
  290. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/schemaExport.ts +0 -0
  291. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/scrollParent.ts +0 -0
  292. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/url.ts +0 -0
  293. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/versionManager.ts +0 -0
  294. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/ActionRow.tsx +0 -0
  295. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/ChatMessageRow.tsx +0 -0
  296. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/CodeBlock.tsx +0 -0
  297. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/README.md +0 -0
  298. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/index.ts +0 -0
  299. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/linkRules.ts +0 -0
  300. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/plainText.ts +0 -0
  301. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/sanitize.ts +0 -0
  302. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/types.ts +0 -0
  303. /package/src/tools/dev/{PrettyCode → code/PrettyCode}/README.md +0 -0
  304. /package/src/tools/dev/{PrettyCode → code/PrettyCode}/index.tsx +0 -0
  305. /package/src/tools/dev/{PrettyCode → code/PrettyCode}/registerPrismLanguages.ts +0 -0
  306. /package/src/tools/visual/{Gauge → charts/Gauge}/Gauge.tsx +0 -0
  307. /package/src/tools/visual/{Gauge → charts/Gauge}/index.ts +0 -0
  308. /package/src/tools/visual/{Gauge → charts/Gauge}/types.ts +0 -0
  309. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/ColorPicker.tsx +0 -0
  310. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/context/ColorPickerContext.tsx +0 -0
  311. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/context/ColorPickerStore.tsx +0 -0
  312. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/context/index.ts +0 -0
  313. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/index.ts +0 -0
  314. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/lib/color-utils.ts +0 -0
  315. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerAlphaSlider.tsx +0 -0
  316. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerArea.tsx +0 -0
  317. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerEyeDropper.tsx +0 -0
  318. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerFormatSelect.tsx +0 -0
  319. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerHueSlider.tsx +0 -0
  320. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerInput.tsx +0 -0
  321. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerSwatch.tsx +0 -0
  322. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/index.ts +0 -0
  323. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/types.ts +0 -0
  324. /package/src/tools/visual/{FileIcon → design/FileIcon}/FileIcon.tsx +0 -0
  325. /package/src/tools/visual/{FileIcon → design/FileIcon}/get-file-icon.ts +0 -0
  326. /package/src/tools/visual/{FileIcon → design/FileIcon}/icons/icon-data.ts +0 -0
  327. /package/src/tools/visual/{FileIcon → design/FileIcon}/index.ts +0 -0
  328. /package/src/tools/visual/{FileIcon → design/FileIcon}/loader.ts +0 -0
  329. /package/src/tools/visual/{FileIcon → design/FileIcon}/specialFolders.ts +0 -0
  330. /package/src/tools/visual/{Fps → indicators/Fps}/Fps.tsx +0 -0
  331. /package/src/tools/visual/{Fps → indicators/Fps}/index.ts +0 -0
  332. /package/src/tools/visual/{Fps → indicators/Fps}/types.ts +0 -0
  333. /package/src/tools/visual/{Rating → indicators/Rating}/Rating.tsx +0 -0
  334. /package/src/tools/visual/{Rating → indicators/Rating}/index.ts +0 -0
  335. /package/src/tools/visual/{Rating → indicators/Rating}/types.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@djangocfg/ui-tools",
3
- "version": "2.1.417",
3
+ "version": "2.1.419",
4
4
  "description": "Heavy React tools with lazy loading - for Electron, Vite, CRA, Next.js apps",
5
5
  "keywords": [
6
6
  "ui-tools",
@@ -106,6 +106,11 @@
106
106
  "import": "./src/tools/data/JsonTree/lazy.tsx",
107
107
  "require": "./src/tools/data/JsonTree/lazy.tsx"
108
108
  },
109
+ "./json-editor": {
110
+ "types": "./src/tools/forms/JsonEditor/lazy.tsx",
111
+ "import": "./src/tools/forms/JsonEditor/lazy.tsx",
112
+ "require": "./src/tools/forms/JsonEditor/lazy.tsx"
113
+ },
109
114
  "./lottie-player": {
110
115
  "types": "./src/tools/media/LottiePlayer/lazy.tsx",
111
116
  "import": "./src/tools/media/LottiePlayer/lazy.tsx",
@@ -116,20 +121,40 @@
116
121
  "import": "./src/tools/forms/MarkdownEditor/lazy.tsx",
117
122
  "require": "./src/tools/forms/MarkdownEditor/lazy.tsx"
118
123
  },
124
+ "./notion-editor": {
125
+ "types": "./src/tools/forms/NotionEditor/lazy.tsx",
126
+ "import": "./src/tools/forms/NotionEditor/lazy.tsx",
127
+ "require": "./src/tools/forms/NotionEditor/lazy.tsx"
128
+ },
119
129
  "./markdown-message": {
120
- "types": "./src/tools/dev/MarkdownMessage/index.ts",
121
- "import": "./src/tools/dev/MarkdownMessage/index.ts",
122
- "require": "./src/tools/dev/MarkdownMessage/index.ts"
130
+ "types": "./src/tools/dev/code/MarkdownMessage/index.ts",
131
+ "import": "./src/tools/dev/code/MarkdownMessage/index.ts",
132
+ "require": "./src/tools/dev/code/MarkdownMessage/index.ts"
123
133
  },
124
134
  "./openapi-viewer": {
125
- "types": "./src/tools/dev/OpenapiViewer/lazy.tsx",
126
- "import": "./src/tools/dev/OpenapiViewer/lazy.tsx",
127
- "require": "./src/tools/dev/OpenapiViewer/lazy.tsx"
135
+ "types": "./src/tools/dev/api/OpenapiViewer/lazy.tsx",
136
+ "import": "./src/tools/dev/api/OpenapiViewer/lazy.tsx",
137
+ "require": "./src/tools/dev/api/OpenapiViewer/lazy.tsx"
138
+ },
139
+ "./request-viewer": {
140
+ "types": "./src/tools/dev/api/RequestViewer/index.ts",
141
+ "import": "./src/tools/dev/api/RequestViewer/index.ts",
142
+ "require": "./src/tools/dev/api/RequestViewer/index.ts"
128
143
  },
129
144
  "./pretty-code": {
130
- "types": "./src/tools/dev/PrettyCode/lazy.tsx",
131
- "import": "./src/tools/dev/PrettyCode/lazy.tsx",
132
- "require": "./src/tools/dev/PrettyCode/lazy.tsx"
145
+ "types": "./src/tools/dev/code/PrettyCode/lazy.tsx",
146
+ "import": "./src/tools/dev/code/PrettyCode/lazy.tsx",
147
+ "require": "./src/tools/dev/code/PrettyCode/lazy.tsx"
148
+ },
149
+ "./diff-viewer": {
150
+ "types": "./src/tools/dev/code/DiffViewer/lazy.tsx",
151
+ "import": "./src/tools/dev/code/DiffViewer/lazy.tsx",
152
+ "require": "./src/tools/dev/code/DiffViewer/lazy.tsx"
153
+ },
154
+ "./diff-viewer/full": {
155
+ "types": "./src/tools/dev/code/DiffViewer/index.ts",
156
+ "import": "./src/tools/dev/code/DiffViewer/index.ts",
157
+ "require": "./src/tools/dev/code/DiffViewer/index.ts"
133
158
  },
134
159
  "./video-player": {
135
160
  "types": "./src/tools/media/VideoPlayer/lazy.tsx",
@@ -177,9 +202,14 @@
177
202
  "require": "./src/tools/input/Combobox/index.ts"
178
203
  },
179
204
  "./color-picker": {
180
- "types": "./src/tools/visual/ColorPicker/index.ts",
181
- "import": "./src/tools/visual/ColorPicker/index.ts",
182
- "require": "./src/tools/visual/ColorPicker/index.ts"
205
+ "types": "./src/tools/visual/design/ColorPicker/index.ts",
206
+ "import": "./src/tools/visual/design/ColorPicker/index.ts",
207
+ "require": "./src/tools/visual/design/ColorPicker/index.ts"
208
+ },
209
+ "./color-palette": {
210
+ "types": "./src/tools/visual/design/ColorPalette/index.ts",
211
+ "import": "./src/tools/visual/design/ColorPalette/index.ts",
212
+ "require": "./src/tools/visual/design/ColorPalette/index.ts"
183
213
  },
184
214
  "./file-upload": {
185
215
  "types": "./src/tools/forms/FileUpload/index.ts",
@@ -187,14 +217,14 @@
187
217
  "require": "./src/tools/forms/FileUpload/index.ts"
188
218
  },
189
219
  "./fps": {
190
- "types": "./src/tools/visual/Fps/index.ts",
191
- "import": "./src/tools/visual/Fps/index.ts",
192
- "require": "./src/tools/visual/Fps/index.ts"
220
+ "types": "./src/tools/visual/indicators/Fps/index.ts",
221
+ "import": "./src/tools/visual/indicators/Fps/index.ts",
222
+ "require": "./src/tools/visual/indicators/Fps/index.ts"
193
223
  },
194
224
  "./gauge": {
195
- "types": "./src/tools/visual/Gauge/index.ts",
196
- "import": "./src/tools/visual/Gauge/index.ts",
197
- "require": "./src/tools/visual/Gauge/index.ts"
225
+ "types": "./src/tools/visual/charts/Gauge/index.ts",
226
+ "import": "./src/tools/visual/charts/Gauge/index.ts",
227
+ "require": "./src/tools/visual/charts/Gauge/index.ts"
198
228
  },
199
229
  "./marquee": {
200
230
  "types": "./src/tools/visual/Marquee/index.ts",
@@ -206,10 +236,50 @@
206
236
  "import": "./src/tools/visual/QRCode/index.ts",
207
237
  "require": "./src/tools/visual/QRCode/index.ts"
208
238
  },
239
+ "./status-indicator": {
240
+ "types": "./src/tools/visual/indicators/StatusIndicator/index.ts",
241
+ "import": "./src/tools/visual/indicators/StatusIndicator/index.ts",
242
+ "require": "./src/tools/visual/indicators/StatusIndicator/index.ts"
243
+ },
244
+ "./api-ref-table": {
245
+ "types": "./src/tools/dev/api/ApiRefTable/index.ts",
246
+ "import": "./src/tools/dev/api/ApiRefTable/index.ts",
247
+ "require": "./src/tools/dev/api/ApiRefTable/index.ts"
248
+ },
249
+ "./env-table": {
250
+ "types": "./src/tools/dev/ops/EnvTable/index.ts",
251
+ "import": "./src/tools/dev/ops/EnvTable/index.ts",
252
+ "require": "./src/tools/dev/ops/EnvTable/index.ts"
253
+ },
254
+ "./log-viewer": {
255
+ "types": "./src/tools/dev/ops/LogViewer/lazy.tsx",
256
+ "import": "./src/tools/dev/ops/LogViewer/lazy.tsx",
257
+ "require": "./src/tools/dev/ops/LogViewer/lazy.tsx"
258
+ },
259
+ "./log-viewer/full": {
260
+ "types": "./src/tools/dev/ops/LogViewer/index.ts",
261
+ "import": "./src/tools/dev/ops/LogViewer/index.ts",
262
+ "require": "./src/tools/dev/ops/LogViewer/index.ts"
263
+ },
264
+ "./activity-graph": {
265
+ "types": "./src/tools/visual/charts/ActivityGraph/index.ts",
266
+ "import": "./src/tools/visual/charts/ActivityGraph/index.ts",
267
+ "require": "./src/tools/visual/charts/ActivityGraph/index.ts"
268
+ },
269
+ "./commit-graph": {
270
+ "types": "./src/tools/visual/charts/CommitGraph/index.ts",
271
+ "import": "./src/tools/visual/charts/CommitGraph/index.ts",
272
+ "require": "./src/tools/visual/charts/CommitGraph/index.ts"
273
+ },
274
+ "./sparkline": {
275
+ "types": "./src/tools/visual/charts/Sparkline/index.ts",
276
+ "import": "./src/tools/visual/charts/Sparkline/index.ts",
277
+ "require": "./src/tools/visual/charts/Sparkline/index.ts"
278
+ },
209
279
  "./rating": {
210
- "types": "./src/tools/visual/Rating/index.ts",
211
- "import": "./src/tools/visual/Rating/index.ts",
212
- "require": "./src/tools/visual/Rating/index.ts"
280
+ "types": "./src/tools/visual/indicators/Rating/index.ts",
281
+ "import": "./src/tools/visual/indicators/Rating/index.ts",
282
+ "require": "./src/tools/visual/indicators/Rating/index.ts"
213
283
  },
214
284
  "./listbox": {
215
285
  "types": "./src/tools/data/Listbox/index.ts",
@@ -259,8 +329,8 @@
259
329
  "test:watch": "vitest"
260
330
  },
261
331
  "peerDependencies": {
262
- "@djangocfg/i18n": "^2.1.417",
263
- "@djangocfg/ui-core": "^2.1.417",
332
+ "@djangocfg/i18n": "^2.1.419",
333
+ "@djangocfg/ui-core": "^2.1.419",
264
334
  "consola": "^3.4.2",
265
335
  "lodash-es": "^4.18.1",
266
336
  "lucide-react": "^0.545.0",
@@ -279,14 +349,25 @@
279
349
  "@rjsf/utils": "^6.1.2",
280
350
  "@rjsf/validator-ajv8": "^6.1.2",
281
351
  "@rpldy/uploady": "^1.8.5",
282
- "@tiptap/core": "^3.20.1",
283
- "@tiptap/extension-mention": "^3.20.1",
284
- "@tiptap/extension-placeholder": "^3.20.1",
285
- "@tiptap/markdown": "^3.20.1",
286
- "@tiptap/pm": "^3.20.1",
287
- "@tiptap/react": "^3.20.1",
288
- "@tiptap/starter-kit": "^3.20.1",
289
- "@tiptap/suggestion": "^3.20.1",
352
+ "@tiptap/core": "^3.23.0",
353
+ "@tiptap/extension-bubble-menu": "^3.23.0",
354
+ "@tiptap/extension-code-block-lowlight": "^3.23.0",
355
+ "@tiptap/extension-highlight": "^3.23.0",
356
+ "@tiptap/extension-mention": "^3.23.0",
357
+ "@tiptap/extension-placeholder": "^3.23.0",
358
+ "@tiptap/extension-table": "^3.23.0",
359
+ "@tiptap/extension-table-cell": "^3.23.0",
360
+ "@tiptap/extension-table-header": "^3.23.0",
361
+ "@tiptap/extension-table-row": "^3.23.0",
362
+ "@tiptap/extension-task-item": "^3.23.0",
363
+ "@tiptap/extension-task-list": "^3.23.0",
364
+ "@tiptap/markdown": "^3.23.0",
365
+ "@tiptap/pm": "^3.23.0",
366
+ "@tiptap/react": "^3.23.0",
367
+ "@tiptap/starter-kit": "^3.23.0",
368
+ "@tiptap/suggestion": "^3.23.0",
369
+ "lowlight": "^3.3.0",
370
+ "tiptap-extension-global-drag-handle": "^0.1.18",
290
371
  "@wavesurfer/react": "^1.0.12",
291
372
  "@radix-ui/react-slot": "^1.2.4",
292
373
  "@radix-ui/react-direction": "^1.1.1",
@@ -300,7 +381,7 @@
300
381
  "openapi-sampler": "^1.7.2",
301
382
  "prism-react-renderer": "^2.4.1",
302
383
  "prismjs": "^1.30.0",
303
- "react-json-tree": "^0.20.0",
384
+ "json-edit-react": "^1.30.1",
304
385
  "react-lottie-player": "^2.1.0",
305
386
  "react-map-gl": "^8.1.0",
306
387
  "react-markdown": "10.1.0",
@@ -324,9 +405,9 @@
324
405
  "@maplibre/maplibre-gl-geocoder": "^1.7.0"
325
406
  },
326
407
  "devDependencies": {
327
- "@djangocfg/i18n": "^2.1.417",
328
- "@djangocfg/typescript-config": "^2.1.417",
329
- "@djangocfg/ui-core": "^2.1.417",
408
+ "@djangocfg/i18n": "^2.1.419",
409
+ "@djangocfg/typescript-config": "^2.1.419",
410
+ "@djangocfg/ui-core": "^2.1.419",
330
411
  "@types/lodash-es": "^4.17.12",
331
412
  "@types/mapbox__mapbox-gl-draw": "^1.4.8",
332
413
  "@types/node": "^25.2.3",
@@ -0,0 +1,31 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+ import {
5
+ CopyButton,
6
+ Tooltip,
7
+ TooltipContent,
8
+ TooltipTrigger,
9
+ } from '@djangocfg/ui-core/components';
10
+
11
+ interface CopyActionProps {
12
+ value: string;
13
+ title?: string;
14
+ }
15
+
16
+ const BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';
17
+
18
+ export const CopyAction: React.FC<CopyActionProps> = ({ value, title = 'Copy' }) => (
19
+ <Tooltip>
20
+ <TooltipTrigger asChild>
21
+ <CopyButton
22
+ value={value}
23
+ variant="ghost"
24
+ size="icon"
25
+ className={BUTTON_CLASS}
26
+ iconClassName="h-3 w-3"
27
+ />
28
+ </TooltipTrigger>
29
+ <TooltipContent side="top">{title}</TooltipContent>
30
+ </Tooltip>
31
+ );
@@ -3,7 +3,7 @@
3
3
  import { Download } from 'lucide-react';
4
4
  import React from 'react';
5
5
 
6
- import { Button } from '@djangocfg/ui-core/components';
6
+ import { Button, Tooltip, TooltipContent, TooltipTrigger } from '@djangocfg/ui-core/components';
7
7
 
8
8
  interface DownloadActionProps {
9
9
  value: string;
@@ -33,14 +33,19 @@ export const DownloadAction: React.FC<DownloadActionProps> = ({
33
33
  };
34
34
 
35
35
  return (
36
- <Button
37
- variant="ghost"
38
- size="icon"
39
- onClick={handleDownload}
40
- className={BUTTON_CLASS}
41
- title={title}
42
- >
43
- <Download className="h-3 w-3" />
44
- </Button>
36
+ <Tooltip>
37
+ <TooltipTrigger asChild>
38
+ <Button
39
+ variant="ghost"
40
+ size="icon"
41
+ onClick={handleDownload}
42
+ aria-label={title}
43
+ className={BUTTON_CLASS}
44
+ >
45
+ <Download className="h-3 w-3" />
46
+ </Button>
47
+ </TooltipTrigger>
48
+ <TooltipContent side="top">{title}</TooltipContent>
49
+ </Tooltip>
45
50
  );
46
51
  };
@@ -0,0 +1,33 @@
1
+ 'use client';
2
+
3
+ import { ChevronDown, ChevronUp } from 'lucide-react';
4
+ import React from 'react';
5
+
6
+ import { Button, Tooltip, TooltipContent, TooltipTrigger } from '@djangocfg/ui-core/components';
7
+
8
+ interface ExpandActionProps {
9
+ isExpanded: boolean;
10
+ onToggle: () => void;
11
+ }
12
+
13
+ const BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';
14
+
15
+ export const ExpandAction: React.FC<ExpandActionProps> = ({ isExpanded, onToggle }) => {
16
+ const label = isExpanded ? 'Collapse All' : 'Expand All';
17
+ return (
18
+ <Tooltip>
19
+ <TooltipTrigger asChild>
20
+ <Button
21
+ variant="ghost"
22
+ size="icon"
23
+ onClick={onToggle}
24
+ aria-label={label}
25
+ className={BUTTON_CLASS}
26
+ >
27
+ {isExpanded ? <ChevronUp className="h-3 w-3" /> : <ChevronDown className="h-3 w-3" />}
28
+ </Button>
29
+ </TooltipTrigger>
30
+ <TooltipContent side="top">{label}</TooltipContent>
31
+ </Tooltip>
32
+ );
33
+ };
@@ -0,0 +1,38 @@
1
+ 'use client';
2
+
3
+ import { Maximize2, Minimize2 } from 'lucide-react';
4
+ import React from 'react';
5
+
6
+ import { Button, Tooltip, TooltipContent, TooltipTrigger } from '@djangocfg/ui-core/components';
7
+
8
+ interface FullscreenActionProps {
9
+ isFullscreen?: boolean;
10
+ onToggle: () => void;
11
+ title?: string;
12
+ }
13
+
14
+ const BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';
15
+
16
+ export const FullscreenAction: React.FC<FullscreenActionProps> = ({
17
+ isFullscreen = false,
18
+ onToggle,
19
+ title,
20
+ }) => {
21
+ const label = title ?? (isFullscreen ? 'Exit fullscreen' : 'Fullscreen');
22
+ return (
23
+ <Tooltip>
24
+ <TooltipTrigger asChild>
25
+ <Button
26
+ variant="ghost"
27
+ size="icon"
28
+ onClick={onToggle}
29
+ aria-label={label}
30
+ className={BUTTON_CLASS}
31
+ >
32
+ {isFullscreen ? <Minimize2 className="h-3 w-3" /> : <Maximize2 className="h-3 w-3" />}
33
+ </Button>
34
+ </TooltipTrigger>
35
+ <TooltipContent side="top">{label}</TooltipContent>
36
+ </Tooltip>
37
+ );
38
+ };
@@ -53,6 +53,13 @@ export interface FloatingToolbarProps {
53
53
  * @default true
54
54
  */
55
55
  scrollIsolation?: boolean;
56
+ /**
57
+ * Hide the toolbar until the user hovers the container. ChatGPT /
58
+ * GitHub-style: chrome stays out of the way, appears on demand.
59
+ * Keyboard focus inside the container also reveals it (a11y).
60
+ * @default false (always visible — back-compat)
61
+ */
62
+ autoHide?: boolean;
56
63
  }
57
64
 
58
65
  /**
@@ -67,6 +74,7 @@ export const FloatingToolbar: React.FC<FloatingToolbarProps> = ({
67
74
  offset = 8,
68
75
  zIndex = 30,
69
76
  scrollIsolation = true,
77
+ autoHide = false,
70
78
  }) => {
71
79
  // Isolation only engages when the container can actually scroll —
72
80
  // a block that fully fits never shows the "Click to scroll" overlay.
@@ -76,6 +84,29 @@ export const FloatingToolbar: React.FC<FloatingToolbarProps> = ({
76
84
  const { locked, unlock } = useScrollIsolation(containerRef, isolationActive);
77
85
  const [overlayHovered, setOverlayHovered] = useState(false);
78
86
 
87
+ // Track container hover + focus for ChatGPT-style auto-hide. We watch
88
+ // `mouseenter/leave` and `focusin/out` on the container so keyboard
89
+ // users still see the toolbar — `:hover` alone would hide it from
90
+ // them entirely.
91
+ const [containerActive, setContainerActive] = useState(false);
92
+ useEffect(() => {
93
+ if (!autoHide) return;
94
+ const el = containerRef.current;
95
+ if (!el) return;
96
+ const enter = () => setContainerActive(true);
97
+ const leave = () => setContainerActive(false);
98
+ el.addEventListener('mouseenter', enter);
99
+ el.addEventListener('mouseleave', leave);
100
+ el.addEventListener('focusin', enter);
101
+ el.addEventListener('focusout', leave);
102
+ return () => {
103
+ el.removeEventListener('mouseenter', enter);
104
+ el.removeEventListener('mouseleave', leave);
105
+ el.removeEventListener('focusin', enter);
106
+ el.removeEventListener('focusout', leave);
107
+ };
108
+ }, [autoHide, containerRef]);
109
+
79
110
  const overlay =
80
111
  isolationActive && locked ? (
81
112
  <div
@@ -117,6 +148,11 @@ export const FloatingToolbar: React.FC<FloatingToolbarProps> = ({
117
148
  ? { bottom: offset, right: offset }
118
149
  : { top: offset, right: offset };
119
150
 
151
+ // Auto-hide: invisible until the container is hovered or has keyboard
152
+ // focus inside. Opacity transition keeps the reveal smooth instead of
153
+ // popping. `pointer-events: none` while hidden so the toolbar doesn't
154
+ // intercept clicks on whatever sits behind it.
155
+ const hidden = autoHide && !containerActive;
120
156
  const toolbar = (
121
157
  <div
122
158
  className="flex items-center gap-1"
@@ -124,6 +160,9 @@ export const FloatingToolbar: React.FC<FloatingToolbarProps> = ({
124
160
  position: 'absolute',
125
161
  ...positionStyle,
126
162
  zIndex,
163
+ opacity: hidden ? 0 : 1,
164
+ pointerEvents: hidden ? 'none' : undefined,
165
+ transition: 'opacity 120ms ease-out',
127
166
  }}
128
167
  >
129
168
  {label && (
@@ -0,0 +1,64 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+ //
3
+ // HTTP semantic-token helpers shared between RequestViewer, OpenapiViewer,
4
+ // LogViewer, and any other tool that visualizes HTTP traffic.
5
+ //
6
+ // IMPORTANT: these helpers return semantic token *names*, not Tailwind
7
+ // classes or hex colors. Consumers map the token to their own surface
8
+ // (e.g. `bg-success/15 text-success` vs `border-success-border`). This
9
+ // keeps the mapping consistent across tools and theme presets.
10
+ //
11
+ // Source pattern: request-viewer.tsx:70-92.
12
+
13
+ export type HttpStatusTone =
14
+ | 'success' // 2xx
15
+ | 'info' // 3xx
16
+ | 'warning' // 4xx
17
+ | 'destructive' // 5xx
18
+ | 'muted'; // unknown / 1xx
19
+
20
+ export type HttpMethodTone =
21
+ | 'success' // GET
22
+ | 'info' // POST
23
+ | 'warning' // PUT / PATCH
24
+ | 'destructive' // DELETE
25
+ | 'muted'; // OPTIONS / HEAD / unknown
26
+
27
+ /**
28
+ * Map an HTTP status code to a semantic token name.
29
+ *
30
+ * @example
31
+ * statusColor(204) // 'success'
32
+ * statusColor(404) // 'warning'
33
+ * statusColor(503) // 'destructive'
34
+ */
35
+ export function statusColor(status: number): HttpStatusTone {
36
+ if (status >= 200 && status < 300) return 'success';
37
+ if (status >= 300 && status < 400) return 'info';
38
+ if (status >= 400 && status < 500) return 'warning';
39
+ if (status >= 500) return 'destructive';
40
+ return 'muted';
41
+ }
42
+
43
+ /**
44
+ * Map an HTTP method to a semantic token name. Case-insensitive.
45
+ *
46
+ * @example
47
+ * methodColor('GET') // 'success'
48
+ * methodColor('delete') // 'destructive'
49
+ */
50
+ export function methodColor(method: string): HttpMethodTone {
51
+ switch (method.toUpperCase()) {
52
+ case 'GET':
53
+ return 'success';
54
+ case 'POST':
55
+ return 'info';
56
+ case 'PUT':
57
+ case 'PATCH':
58
+ return 'warning';
59
+ case 'DELETE':
60
+ return 'destructive';
61
+ default:
62
+ return 'muted';
63
+ }
64
+ }
@@ -115,4 +115,4 @@ export {
115
115
  extractTextFromChildren,
116
116
  type MarkdownMessageProps,
117
117
  type LinkRule,
118
- } from '../dev/MarkdownMessage';
118
+ } from '../dev/code/MarkdownMessage';