@djangocfg/ui-tools 2.1.418 → 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 (304) hide show
  1. package/dist/file-icon/index.cjs +3 -3
  2. package/dist/file-icon/index.cjs.map +1 -1
  3. package/dist/file-icon/index.mjs +3 -3
  4. package/dist/file-icon/index.mjs.map +1 -1
  5. package/package.json +93 -28
  6. package/src/common/FloatingToolbar/actions/CopyAction.tsx +31 -0
  7. package/src/{components → common}/FloatingToolbar/actions/DownloadAction.tsx +15 -10
  8. package/src/common/FloatingToolbar/actions/ExpandAction.tsx +33 -0
  9. package/src/common/FloatingToolbar/actions/FullscreenAction.tsx +38 -0
  10. package/src/{components → common}/FloatingToolbar/index.tsx +39 -0
  11. package/src/lib/http.ts +64 -0
  12. package/src/tools/chat/index.ts +1 -1
  13. package/src/tools/chat/launcher/ChatFAB.tsx +66 -74
  14. package/src/tools/chat/launcher/header/ChatHeaderActionButton.tsx +2 -3
  15. package/src/tools/chat/lazy.tsx +1 -1
  16. package/src/tools/chat/messages/MessageBubble.tsx +1 -1
  17. package/src/tools/chat/messages/blocks/builtin.tsx +1 -1
  18. package/src/tools/chat/messages/blocks/renderers/CodeBlock.tsx +2 -2
  19. package/src/tools/chat/messages/blocks/renderers/JsonBlock.tsx +12 -1
  20. package/src/tools/data/DataGrid/lazy.tsx +1 -1
  21. package/src/tools/data/DataTable/lazy.tsx +1 -1
  22. package/src/tools/data/JsonTree/JsonViewer.tsx +720 -0
  23. package/src/tools/data/JsonTree/README.md +126 -73
  24. package/src/tools/data/JsonTree/index.tsx +3 -95
  25. package/src/tools/data/JsonTree/lazy.tsx +10 -50
  26. package/src/tools/data/JsonTree/types.ts +82 -63
  27. package/src/tools/data/Kanban/lazy.tsx +1 -1
  28. package/src/tools/data/Listbox/lazy.tsx +1 -1
  29. package/src/tools/data/Masonry/lazy.tsx +1 -1
  30. package/src/tools/data/Timeline/lazy.tsx +1 -1
  31. package/src/tools/data/Tree/lazy.tsx +1 -1
  32. package/src/tools/dev/Map/lazy.tsx +1 -1
  33. package/src/tools/dev/Mermaid/Mermaid.client.tsx +2 -2
  34. package/src/tools/dev/Mermaid/lazy.tsx +1 -1
  35. package/src/tools/dev/api/ApiRefTable/ApiRefTable.tsx +65 -0
  36. package/src/tools/dev/api/ApiRefTable/README.md +31 -0
  37. package/src/tools/dev/api/ApiRefTable/components/Row.tsx +96 -0
  38. package/src/tools/dev/api/ApiRefTable/components/TypeDisplay.tsx +44 -0
  39. package/src/tools/dev/api/ApiRefTable/index.ts +6 -0
  40. package/src/tools/dev/api/ApiRefTable/lazy.tsx +21 -0
  41. package/src/tools/dev/api/ApiRefTable/types.ts +82 -0
  42. package/src/tools/dev/api/ApiRefTable/utils.ts +42 -0
  43. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/ApiIntroSection.tsx +1 -1
  44. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/index.tsx +1 -1
  45. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/index.tsx +1 -1
  46. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/ResponseBody.tsx +7 -21
  47. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/RequestPanel.tsx +1 -1
  48. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/PrettyView.tsx +13 -19
  49. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/types.ts +1 -1
  50. package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/lazy.tsx +1 -1
  51. package/src/tools/dev/api/RequestViewer/README.md +33 -0
  52. package/src/tools/dev/api/RequestViewer/RequestViewer.tsx +121 -0
  53. package/src/tools/dev/api/RequestViewer/components/BodyTab.tsx +44 -0
  54. package/src/tools/dev/api/RequestViewer/components/EmptyState.tsx +13 -0
  55. package/src/tools/dev/api/RequestViewer/components/HeadersTab.tsx +78 -0
  56. package/src/tools/dev/api/RequestViewer/components/TimingTab.tsx +113 -0
  57. package/src/tools/dev/api/RequestViewer/components/utils.ts +31 -0
  58. package/src/tools/dev/api/RequestViewer/index.ts +16 -0
  59. package/src/tools/dev/api/RequestViewer/lazy.tsx +30 -0
  60. package/src/tools/dev/api/RequestViewer/types.ts +81 -0
  61. package/src/tools/dev/code/DiffViewer/DiffViewer.tsx +144 -0
  62. package/src/tools/dev/code/DiffViewer/README.md +33 -0
  63. package/src/tools/dev/code/DiffViewer/components/CopyButton.tsx +49 -0
  64. package/src/tools/dev/code/DiffViewer/components/DiffLineContent.tsx +48 -0
  65. package/src/tools/dev/code/DiffViewer/components/SplitView.tsx +220 -0
  66. package/src/tools/dev/code/DiffViewer/components/UnifiedView.tsx +154 -0
  67. package/src/tools/dev/code/DiffViewer/hooks/useDiff.ts +47 -0
  68. package/src/tools/dev/code/DiffViewer/hooks/useHighlighter.ts +54 -0
  69. package/src/tools/dev/code/DiffViewer/index.ts +22 -0
  70. package/src/tools/dev/code/DiffViewer/lazy.tsx +22 -0
  71. package/src/tools/dev/code/DiffViewer/types.ts +109 -0
  72. package/src/tools/dev/code/DiffViewer/utils/computeDiff.ts +159 -0
  73. package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/CollapseToggle.tsx +1 -1
  74. package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/MarkdownMessage.tsx +1 -1
  75. package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/components.tsx +2 -2
  76. package/src/tools/dev/{PrettyCode → code/PrettyCode}/PrettyCode.client.tsx +2 -2
  77. package/src/tools/dev/{PrettyCode → code/PrettyCode}/lazy.tsx +1 -1
  78. package/src/tools/dev/ops/EnvTable/EnvTable.tsx +228 -0
  79. package/src/tools/dev/ops/EnvTable/README.md +29 -0
  80. package/src/tools/dev/ops/EnvTable/hooks/useEnvMask.ts +121 -0
  81. package/src/tools/dev/ops/EnvTable/index.ts +12 -0
  82. package/src/tools/dev/ops/EnvTable/lazy.tsx +21 -0
  83. package/src/tools/dev/ops/EnvTable/types.ts +76 -0
  84. package/src/tools/dev/ops/LogViewer/LogViewer.tsx +194 -0
  85. package/src/tools/dev/ops/LogViewer/README.md +30 -0
  86. package/src/tools/dev/ops/LogViewer/components/LogRow.tsx +151 -0
  87. package/src/tools/dev/ops/LogViewer/components/Toolbar.tsx +199 -0
  88. package/src/tools/dev/ops/LogViewer/hooks/useAutoScroll.ts +68 -0
  89. package/src/tools/dev/ops/LogViewer/hooks/useLogFilter.ts +58 -0
  90. package/src/tools/dev/ops/LogViewer/index.ts +18 -0
  91. package/src/tools/dev/ops/LogViewer/lazy.tsx +25 -0
  92. package/src/tools/dev/ops/LogViewer/types.ts +142 -0
  93. package/src/tools/dev/ops/LogViewer/utils/ansi.ts +231 -0
  94. package/src/tools/forms/CodeEditor/hooks/useEditorTheme.ts +13 -73
  95. package/src/tools/forms/CodeEditor/lazy.tsx +1 -1
  96. package/src/tools/forms/FileUpload/lazy.tsx +1 -1
  97. package/src/tools/forms/JsonEditor/JsonEditor.tsx +115 -0
  98. package/src/tools/forms/JsonEditor/index.ts +1 -0
  99. package/src/tools/forms/JsonEditor/lazy.tsx +24 -0
  100. package/src/tools/forms/JsonForm/index.ts +1 -1
  101. package/src/tools/forms/JsonForm/lazy.tsx +1 -1
  102. package/src/tools/forms/MarkdownEditor/lazy.tsx +1 -1
  103. package/src/tools/forms/NotionEditor/README.md +237 -0
  104. package/src/tools/forms/NotionEditor/lazy.tsx +1 -1
  105. package/src/tools/index.ts +153 -13
  106. package/src/tools/input/Combobox/lazy.tsx +1 -1
  107. package/src/tools/input/CronScheduler/components/CronPreview.README.md +28 -0
  108. package/src/tools/input/CronScheduler/components/CronPreview.tsx +136 -0
  109. package/src/tools/input/CronScheduler/components/index.ts +3 -0
  110. package/src/tools/input/CronScheduler/index.tsx +5 -1
  111. package/src/tools/input/CronScheduler/lazy.tsx +5 -1
  112. package/src/tools/input/CronScheduler/utils/cron-next-runs.ts +122 -0
  113. package/src/tools/input/CronScheduler/utils/index.ts +1 -0
  114. package/src/tools/input/Scroller/lazy.tsx +1 -1
  115. package/src/tools/input/Sortable/lazy.tsx +1 -1
  116. package/src/tools/input/SpeechRecognition/lazy.tsx +1 -1
  117. package/src/tools/input/SpeechRecognition/widgets/VoiceComposerSlot.tsx +41 -36
  118. package/src/tools/media/ImageViewer/components/ImageToolbar.tsx +58 -47
  119. package/src/tools/media/ImageViewer/components/ImageViewer.tsx +27 -19
  120. package/src/tools/media/ImageViewer/lazy.tsx +1 -1
  121. package/src/tools/media/LottiePlayer/lazy.tsx +1 -1
  122. package/src/tools/media/VideoPlayer/VideoPlayer.tsx +28 -1
  123. package/src/tools/media/VideoPlayer/parts/fullscreen.tsx +21 -4
  124. package/src/tools/media/VideoPlayer/parts/pip.tsx +21 -4
  125. package/src/tools/media/VideoPlayer/parts/play-button.tsx +21 -4
  126. package/src/tools/media/VideoPlayer/parts/playback-rate.tsx +19 -3
  127. package/src/tools/media/VideoPlayer/parts/volume.tsx +237 -18
  128. package/src/tools/media/VideoPlayer/styles/video-player.css +87 -7
  129. package/src/tools/overlay/ResponsiveDialog/lazy.tsx +1 -1
  130. package/src/tools/overlay/ScrollSpy/lazy.tsx +1 -1
  131. package/src/tools/overlay/SelectionToolbar/lazy.tsx +1 -1
  132. package/src/tools/overlay/Tour/lazy.tsx +1 -1
  133. package/src/tools/visual/Marquee/lazy.tsx +1 -1
  134. package/src/tools/visual/QRCode/lazy.tsx +1 -1
  135. package/src/tools/visual/charts/ActivityGraph/ActivityGraph.tsx +195 -0
  136. package/src/tools/visual/charts/ActivityGraph/README.md +28 -0
  137. package/src/tools/visual/charts/ActivityGraph/index.ts +8 -0
  138. package/src/tools/visual/charts/ActivityGraph/lazy.tsx +21 -0
  139. package/src/tools/visual/charts/ActivityGraph/types.ts +59 -0
  140. package/src/tools/visual/charts/ActivityGraph/utils.ts +88 -0
  141. package/src/tools/visual/charts/CommitGraph/CommitGraph.tsx +80 -0
  142. package/src/tools/visual/charts/CommitGraph/README.md +28 -0
  143. package/src/tools/visual/charts/CommitGraph/components/CommitDetail.tsx +107 -0
  144. package/src/tools/visual/charts/CommitGraph/components/CommitRow.tsx +122 -0
  145. package/src/tools/visual/charts/CommitGraph/components/Rails.tsx +171 -0
  146. package/src/tools/visual/charts/CommitGraph/hooks/useGraphLayout.ts +169 -0
  147. package/src/tools/visual/charts/CommitGraph/hooks/useLaneColors.ts +45 -0
  148. package/src/tools/visual/charts/CommitGraph/index.ts +14 -0
  149. package/src/tools/visual/charts/CommitGraph/lazy.tsx +25 -0
  150. package/src/tools/visual/charts/CommitGraph/types.ts +85 -0
  151. package/src/tools/visual/charts/CommitGraph/utils.ts +53 -0
  152. package/src/tools/visual/{Gauge → charts/Gauge}/lazy.tsx +1 -1
  153. package/src/tools/visual/charts/Sparkline/README.md +29 -0
  154. package/src/tools/visual/charts/Sparkline/Sparkline.tsx +217 -0
  155. package/src/tools/visual/charts/Sparkline/index.ts +9 -0
  156. package/src/tools/visual/charts/Sparkline/lazy.tsx +26 -0
  157. package/src/tools/visual/charts/Sparkline/types.ts +58 -0
  158. package/src/tools/visual/design/ColorPalette/ColorPalette.tsx +129 -0
  159. package/src/tools/visual/design/ColorPalette/README.md +34 -0
  160. package/src/tools/visual/design/ColorPalette/components/Swatch.tsx +102 -0
  161. package/src/tools/visual/design/ColorPalette/hooks/useCopyToClipboard.ts +41 -0
  162. package/src/tools/visual/design/ColorPalette/index.ts +12 -0
  163. package/src/tools/visual/design/ColorPalette/lazy.tsx +21 -0
  164. package/src/tools/visual/design/ColorPalette/types.ts +63 -0
  165. package/src/tools/visual/design/ColorPalette/utils.ts +83 -0
  166. package/src/tools/visual/{ColorPicker → design/ColorPicker}/lazy.tsx +1 -1
  167. package/src/tools/visual/{FileIcon → design/FileIcon}/treeAdapter.tsx +1 -1
  168. package/src/tools/visual/{Fps → indicators/Fps}/lazy.tsx +1 -1
  169. package/src/tools/visual/{Rating → indicators/Rating}/lazy.tsx +1 -1
  170. package/src/tools/visual/indicators/StatusIndicator/README.md +28 -0
  171. package/src/tools/visual/indicators/StatusIndicator/StatusIndicator.tsx +83 -0
  172. package/src/tools/visual/indicators/StatusIndicator/index.ts +14 -0
  173. package/src/tools/visual/indicators/StatusIndicator/lazy.tsx +21 -0
  174. package/src/tools/visual/indicators/StatusIndicator/types.ts +133 -0
  175. package/src/components/FloatingToolbar/actions/CopyAction.tsx +0 -22
  176. package/src/components/FloatingToolbar/actions/ExpandAction.tsx +0 -25
  177. package/src/components/FloatingToolbar/actions/FullscreenAction.tsx +0 -30
  178. package/src/tools/data/JsonTree/components/JsonContent.tsx +0 -197
  179. package/src/tools/data/JsonTree/hooks/useJsonExpand.ts +0 -50
  180. /package/src/{components → common}/FloatingToolbar/FloatingToolbar.css +0 -0
  181. /package/src/{components → common}/FloatingToolbar/actions/index.ts +0 -0
  182. /package/src/{components → common}/FloatingToolbar/hooks/useElementCorner.ts +0 -0
  183. /package/src/{components → common}/FloatingToolbar/hooks/useScrollIsolation.ts +0 -0
  184. /package/src/{components → common}/index.ts +0 -0
  185. /package/src/{components → common}/lazy-wrapper.tsx +0 -0
  186. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/README.md +0 -0
  187. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/DocsView.tsx +0 -0
  188. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/LanguageTabs.tsx +0 -0
  189. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/CodeSamples/useCodeSnippet.ts +0 -0
  190. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/MetaActions.tsx +0 -0
  191. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/MethodBadge.tsx +0 -0
  192. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Header/PathDisplay.tsx +0 -0
  193. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/ParamGroup.tsx +0 -0
  194. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/ParamRow.tsx +0 -0
  195. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Parameters/index.tsx +0 -0
  196. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/RequestBody/index.tsx +0 -0
  197. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/ResponseRow.tsx +0 -0
  198. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/StatusTag.tsx +0 -0
  199. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Responses/index.tsx +0 -0
  200. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/FieldRow.tsx +0 -0
  201. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/buildTree.ts +0 -0
  202. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/index.tsx +0 -0
  203. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/SchemaFields/types.ts +0 -0
  204. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/SectionHeader.tsx +0 -0
  205. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/defaults.ts +0 -0
  206. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/Section/index.tsx +0 -0
  207. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/context.tsx +0 -0
  208. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/hooks/useSectionHash.ts +0 -0
  209. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/index.tsx +0 -0
  210. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/store/index.ts +0 -0
  211. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/store/selectors.ts +0 -0
  212. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/EndpointDoc/types.ts +0 -0
  213. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/SchemaCopyMenu.tsx +0 -0
  214. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/BrandHeader.tsx +0 -0
  215. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/CategoryBlock.tsx +0 -0
  216. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/EndpointRow.tsx +0 -0
  217. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/SchemaSection.tsx +0 -0
  218. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/SearchInput.tsx +0 -0
  219. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/SidebarBody.tsx +0 -0
  220. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/Toolbar.tsx +0 -0
  221. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/buildVM.ts +0 -0
  222. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/index.tsx +0 -0
  223. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/types.ts +0 -0
  224. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/Sidebar/useDebouncedValue.ts +0 -0
  225. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/SlideInPlayground.tsx +0 -0
  226. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/TryItSheet.tsx +0 -0
  227. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/anchor.ts +0 -0
  228. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/grouping.ts +0 -0
  229. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/index.tsx +0 -0
  230. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/DocsLayout/sidebarLabel.ts +0 -0
  231. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/index.ts +0 -0
  232. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/BodyFormEditor.tsx +0 -0
  233. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/EndpointDraftSync.tsx +0 -0
  234. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/EndpointResetButton.tsx +0 -0
  235. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/PreviewView.tsx +0 -0
  236. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/RawView.tsx +0 -0
  237. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/StatusBar.tsx +0 -0
  238. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/ViewTabs.tsx +0 -0
  239. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/detectContent.ts +0 -0
  240. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/index.tsx +0 -0
  241. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ResponsePanel/useResponseView.ts +0 -0
  242. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/SendButton.tsx +0 -0
  243. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/components/shared/ui.tsx +0 -0
  244. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/constants.ts +0 -0
  245. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/context/PlaygroundContext.tsx +0 -0
  246. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/index.ts +0 -0
  247. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useDocsUrlSync.ts +0 -0
  248. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useEndpointDraft.ts +0 -0
  249. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useMobile.ts +0 -0
  250. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/hooks/useOpenApiSchema.ts +0 -0
  251. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/index.tsx +0 -0
  252. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/types.ts +0 -0
  253. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/apiKeyManager.ts +0 -0
  254. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/codeSamples.ts +0 -0
  255. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/formatters.ts +0 -0
  256. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/index.ts +0 -0
  257. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/operationToHar.ts +0 -0
  258. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/sampler.ts +0 -0
  259. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/schemaExport.ts +0 -0
  260. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/scrollParent.ts +0 -0
  261. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/url.ts +0 -0
  262. /package/src/tools/dev/{OpenapiViewer → api/OpenapiViewer}/utils/versionManager.ts +0 -0
  263. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/ActionRow.tsx +0 -0
  264. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/ChatMessageRow.tsx +0 -0
  265. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/CodeBlock.tsx +0 -0
  266. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/README.md +0 -0
  267. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/index.ts +0 -0
  268. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/linkRules.ts +0 -0
  269. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/plainText.ts +0 -0
  270. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/sanitize.ts +0 -0
  271. /package/src/tools/dev/{MarkdownMessage → code/MarkdownMessage}/types.ts +0 -0
  272. /package/src/tools/dev/{PrettyCode → code/PrettyCode}/README.md +0 -0
  273. /package/src/tools/dev/{PrettyCode → code/PrettyCode}/index.tsx +0 -0
  274. /package/src/tools/dev/{PrettyCode → code/PrettyCode}/registerPrismLanguages.ts +0 -0
  275. /package/src/tools/visual/{Gauge → charts/Gauge}/Gauge.tsx +0 -0
  276. /package/src/tools/visual/{Gauge → charts/Gauge}/index.ts +0 -0
  277. /package/src/tools/visual/{Gauge → charts/Gauge}/types.ts +0 -0
  278. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/ColorPicker.tsx +0 -0
  279. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/context/ColorPickerContext.tsx +0 -0
  280. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/context/ColorPickerStore.tsx +0 -0
  281. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/context/index.ts +0 -0
  282. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/index.ts +0 -0
  283. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/lib/color-utils.ts +0 -0
  284. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerAlphaSlider.tsx +0 -0
  285. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerArea.tsx +0 -0
  286. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerEyeDropper.tsx +0 -0
  287. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerFormatSelect.tsx +0 -0
  288. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerHueSlider.tsx +0 -0
  289. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerInput.tsx +0 -0
  290. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/ColorPickerSwatch.tsx +0 -0
  291. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/parts/index.ts +0 -0
  292. /package/src/tools/visual/{ColorPicker → design/ColorPicker}/types.ts +0 -0
  293. /package/src/tools/visual/{FileIcon → design/FileIcon}/FileIcon.tsx +0 -0
  294. /package/src/tools/visual/{FileIcon → design/FileIcon}/get-file-icon.ts +0 -0
  295. /package/src/tools/visual/{FileIcon → design/FileIcon}/icons/icon-data.ts +0 -0
  296. /package/src/tools/visual/{FileIcon → design/FileIcon}/index.ts +0 -0
  297. /package/src/tools/visual/{FileIcon → design/FileIcon}/loader.ts +0 -0
  298. /package/src/tools/visual/{FileIcon → design/FileIcon}/specialFolders.ts +0 -0
  299. /package/src/tools/visual/{Fps → indicators/Fps}/Fps.tsx +0 -0
  300. /package/src/tools/visual/{Fps → indicators/Fps}/index.ts +0 -0
  301. /package/src/tools/visual/{Fps → indicators/Fps}/types.ts +0 -0
  302. /package/src/tools/visual/{Rating → indicators/Rating}/Rating.tsx +0 -0
  303. /package/src/tools/visual/{Rating → indicators/Rating}/index.ts +0 -0
  304. /package/src/tools/visual/{Rating → indicators/Rating}/types.ts +0 -0
@@ -0,0 +1,63 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+
3
+ import type * as React from 'react';
4
+
5
+ /**
6
+ * Display format for the copied / rendered color value.
7
+ *
8
+ * - `hex` — `#0989aa` (default). Canvas2D / SVG friendly.
9
+ * - `rgb` — `rgb(9, 137, 170)`.
10
+ * - `hsl` — `hsl(192, 90%, 35%)`.
11
+ */
12
+ export type ColorFormat = 'hex' | 'rgb' | 'hsl';
13
+
14
+ /**
15
+ * A single color entry rendered as one swatch.
16
+ *
17
+ * `value` is always a hex string (`#rrggbb`). Resolve theme tokens
18
+ * to hex via `useThemeColor(...)` before passing them in.
19
+ */
20
+ export interface ColorEntry {
21
+ /** Display name (e.g. "Primary", "Success", "brand-accent"). */
22
+ name: string;
23
+ /** Hex color value, e.g. `#0989aa`. */
24
+ value: string;
25
+ /** Optional usage note. */
26
+ description?: string;
27
+ }
28
+
29
+ /**
30
+ * Source of swatches.
31
+ *
32
+ * - `theme` — semantic tokens from `useThemePalette()` (background,
33
+ * foreground, primary, secondary, muted, accent, destructive, …).
34
+ * - `preset` — status preset family from `useStylePresets()`
35
+ * (primary, success, warning, danger, info, chart3-5).
36
+ * - `custom` — caller-provided `colors` array.
37
+ */
38
+ export type ColorPaletteMode = 'theme' | 'preset' | 'custom';
39
+
40
+ export interface ColorPaletteProps
41
+ extends Omit<React.ComponentProps<'div'>, 'children'> {
42
+ /**
43
+ * Where swatches come from. Defaults to `'custom'` when `colors` is
44
+ * provided, otherwise `'theme'`.
45
+ */
46
+ mode?: ColorPaletteMode;
47
+ /**
48
+ * Explicit list of swatches (required when `mode === 'custom'`).
49
+ * Ignored for `'theme'` / `'preset'`.
50
+ */
51
+ colors?: ColorEntry[];
52
+ /** Grid column count. @default 4 */
53
+ columns?: number;
54
+ /**
55
+ * Format of the copied value AND the rendered value text.
56
+ * @default 'hex'
57
+ */
58
+ copyFormat?: ColorFormat;
59
+ /** Show the color name label below the swatch. @default true */
60
+ showName?: boolean;
61
+ /** Show the color value string below the swatch. @default true */
62
+ showValue?: boolean;
63
+ }
@@ -0,0 +1,83 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+
3
+ import type { ColorFormat } from './types';
4
+
5
+ /**
6
+ * Parse a `#rrggbb` / `#rgb` hex string into `{ r, g, b }` (0–255).
7
+ * Returns `null` for malformed input.
8
+ */
9
+ function parseHex(hex: string): { r: number; g: number; b: number } | null {
10
+ const cleaned = hex.trim().replace(/^#/, '');
11
+ if (cleaned.length === 3) {
12
+ const r = parseInt(cleaned[0] + cleaned[0], 16);
13
+ const g = parseInt(cleaned[1] + cleaned[1], 16);
14
+ const b = parseInt(cleaned[2] + cleaned[2], 16);
15
+ if ([r, g, b].some(Number.isNaN)) return null;
16
+ return { r, g, b };
17
+ }
18
+ if (cleaned.length === 6) {
19
+ const r = parseInt(cleaned.slice(0, 2), 16);
20
+ const g = parseInt(cleaned.slice(2, 4), 16);
21
+ const b = parseInt(cleaned.slice(4, 6), 16);
22
+ if ([r, g, b].some(Number.isNaN)) return null;
23
+ return { r, g, b };
24
+ }
25
+ return null;
26
+ }
27
+
28
+ function rgbToHsl(
29
+ r: number,
30
+ g: number,
31
+ b: number,
32
+ ): { h: number; s: number; l: number } {
33
+ const rn = r / 255;
34
+ const gn = g / 255;
35
+ const bn = b / 255;
36
+ const max = Math.max(rn, gn, bn);
37
+ const min = Math.min(rn, gn, bn);
38
+ const l = (max + min) / 2;
39
+ let h = 0;
40
+ let s = 0;
41
+ if (max !== min) {
42
+ const d = max - min;
43
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
44
+ switch (max) {
45
+ case rn:
46
+ h = (gn - bn) / d + (gn < bn ? 6 : 0);
47
+ break;
48
+ case gn:
49
+ h = (bn - rn) / d + 2;
50
+ break;
51
+ case bn:
52
+ h = (rn - gn) / d + 4;
53
+ break;
54
+ }
55
+ h /= 6;
56
+ }
57
+ return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };
58
+ }
59
+
60
+ /**
61
+ * Format a hex color into the requested {@link ColorFormat}. Falls
62
+ * back to the original string when the hex is unparseable.
63
+ */
64
+ export function formatColor(hex: string, format: ColorFormat): string {
65
+ if (format === 'hex') return hex.toLowerCase();
66
+ const rgb = parseHex(hex);
67
+ if (!rgb) return hex;
68
+ if (format === 'rgb') return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;
69
+ const { h, s, l } = rgbToHsl(rgb.r, rgb.g, rgb.b);
70
+ return `hsl(${h}, ${s}%, ${l}%)`;
71
+ }
72
+
73
+ /**
74
+ * Return `'light'` when the hex color is bright enough that black
75
+ * text reads better against it, otherwise `'dark'`. Uses standard
76
+ * Rec. 601 luminance (`0.299·R + 0.587·G + 0.114·B`).
77
+ */
78
+ export function getReadableContrast(hex: string): 'light' | 'dark' {
79
+ const rgb = parseHex(hex);
80
+ if (!rgb) return 'dark';
81
+ const luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255;
82
+ return luminance > 0.6 ? 'light' : 'dark';
83
+ }
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { createLazyComponent } from '../../../components/lazy-wrapper';
3
+ import { createLazyComponent } from '../../../../common/lazy-wrapper';
4
4
  import type { ColorPickerProps } from './types';
5
5
 
6
6
  export const LazyColorPicker = createLazyComponent<ColorPickerProps>(
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import type { TreeNode, TreeRowSlot } from '../../data/Tree/types';
3
+ import type { TreeNode, TreeRowSlot } from '../../../data/Tree/types';
4
4
  import { FileIcon, type FileIconSize } from './FileIcon';
5
5
  import type { FolderIconOverrides } from './specialFolders';
6
6
 
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { createLazyComponent } from '../../../components/lazy-wrapper';
3
+ import { createLazyComponent } from '../../../../common/lazy-wrapper';
4
4
  import type { FpsProps } from './types';
5
5
 
6
6
  export const LazyFps = createLazyComponent<FpsProps>(
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { createLazyComponent } from '../../../components/lazy-wrapper';
3
+ import { createLazyComponent } from '../../../../common/lazy-wrapper';
4
4
  import type { RatingProps } from './types';
5
5
 
6
6
  export const LazyRating = createLazyComponent<RatingProps>(
@@ -0,0 +1,28 @@
1
+ # StatusIndicator
2
+
3
+ Compact operational-status pill (dot + label). Maps `Status` → semantic `StatusTone` (success / warning / destructive / info / muted) via `STATUS_CONFIG`.
4
+
5
+ This component is the **golden sample** for the jalcoui port — it demonstrates all CONTRACT rules (semantic tokens, CVA variants, no nested providers, attribution).
6
+
7
+ ```tsx
8
+ import { StatusIndicator } from '@djangocfg/ui-tools/status-indicator';
9
+
10
+ <StatusIndicator status="operational" />
11
+ <StatusIndicator status="degraded" size="lg" />
12
+ <StatusIndicator status="incident" label="Custom label" />
13
+ ```
14
+
15
+ ## Props
16
+
17
+ | Prop | Type | Default | Description |
18
+ |---|---|---|---|
19
+ | `status` | `Status` | — | `'operational' \| 'degraded' \| 'partial-outage' \| 'major-outage' \| 'maintenance' \| 'incident' \| 'unknown'`. |
20
+ | `tone` | `StatusTone` | from `STATUS_CONFIG` | Override the semantic tone. |
21
+ | `label` | `string` | from `STATUS_CONFIG` | Override the visible label. |
22
+ | `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | Pill scale. |
23
+
24
+ Storybook: `apps/storybook/stories/ui-tools/visual/StatusIndicator.stories.tsx`
25
+
26
+ ---
27
+
28
+ Adapted from jalcoui (MIT).
@@ -0,0 +1,83 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+ //
3
+ // Operational status badge with colored dot and label for dashboards,
4
+ // status pages, and header bars.
5
+ //
6
+ // Golden sample — see CONTRACT.md. Demonstrates:
7
+ // - semantic tokens only (no raw color scales)
8
+ // - Tailwind `animate-ping` for pulse (no framer-motion)
9
+ // - attribution header
10
+ // - no nested providers
11
+ // - decomposed types in `./types`, lazy in `./lazy`
12
+
13
+ 'use client';
14
+
15
+ import * as React from 'react';
16
+ import { cn } from '@djangocfg/ui-core/lib';
17
+ import {
18
+ STATUS_CONFIG,
19
+ TONE_CLASSES,
20
+ statusIndicatorVariants,
21
+ type StatusIndicatorProps,
22
+ type StatusTone,
23
+ } from './types';
24
+
25
+ const LIVE_STATUSES = new Set<string>([
26
+ 'incident',
27
+ 'major-outage',
28
+ 'partial-outage',
29
+ 'degraded',
30
+ ]);
31
+
32
+ export function StatusIndicator({
33
+ status,
34
+ label,
35
+ tone: toneProp,
36
+ pulse: pulseProp,
37
+ size,
38
+ className,
39
+ ...props
40
+ }: StatusIndicatorProps) {
41
+ const config = STATUS_CONFIG[status];
42
+ const tone: StatusTone = toneProp ?? config.tone;
43
+ const displayLabel = label ?? config.label;
44
+ const pulse = pulseProp ?? LIVE_STATUSES.has(status);
45
+
46
+ const toneClasses = TONE_CLASSES[tone];
47
+
48
+ return (
49
+ <span
50
+ data-slot="status-indicator"
51
+ data-status={status}
52
+ data-tone={tone}
53
+ role="status"
54
+ aria-label={displayLabel}
55
+ className={cn(
56
+ statusIndicatorVariants({ size }),
57
+ 'border-border/60 shadow-xs',
58
+ toneClasses.pill,
59
+ className,
60
+ )}
61
+ {...props}
62
+ >
63
+ <span
64
+ data-slot="status-dot"
65
+ className={cn('relative shrink-0 rounded-full', toneClasses.dot)}
66
+ aria-hidden="true"
67
+ >
68
+ {pulse && (
69
+ <span
70
+ data-slot="status-dot-pulse"
71
+ className={cn(
72
+ 'absolute inset-0 rounded-full opacity-60 animate-ping',
73
+ toneClasses.dot,
74
+ )}
75
+ />
76
+ )}
77
+ </span>
78
+ <span className={cn('whitespace-nowrap', toneClasses.text)}>
79
+ {displayLabel}
80
+ </span>
81
+ </span>
82
+ );
83
+ }
@@ -0,0 +1,14 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+
3
+ export { StatusIndicator } from './StatusIndicator';
4
+ export {
5
+ STATUS_CONFIG,
6
+ TONE_CLASSES,
7
+ statusIndicatorVariants,
8
+ } from './types';
9
+ export type {
10
+ Status,
11
+ StatusTone,
12
+ StatusIndicatorSize,
13
+ StatusIndicatorProps,
14
+ } from './types';
@@ -0,0 +1,21 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+
3
+ 'use client';
4
+
5
+ import { createLazyComponent } from '../../../../common/lazy-wrapper';
6
+ import type { StatusIndicatorProps } from './types';
7
+
8
+ export const LazyStatusIndicator = createLazyComponent<StatusIndicatorProps>(
9
+ () => import('./StatusIndicator').then((mod) => ({ default: mod.StatusIndicator })),
10
+ {
11
+ displayName: 'LazyStatusIndicator',
12
+ fallback: (
13
+ <span
14
+ data-slot="status-indicator-skeleton"
15
+ className="inline-flex h-7 w-24 animate-pulse rounded-full bg-muted"
16
+ />
17
+ ),
18
+ },
19
+ );
20
+
21
+ export type { StatusIndicatorProps } from './types';
@@ -0,0 +1,133 @@
1
+ // Adapted from jalcoui (MIT) — github.com/jal-co/ui
2
+
3
+ import type * as React from 'react';
4
+ import { cva, type VariantProps } from 'class-variance-authority';
5
+
6
+ /**
7
+ * Operational status of a service or component.
8
+ *
9
+ * Each value maps to a semantic tone defined in {@link STATUS_TONE}. Custom
10
+ * statuses can be passed by extending {@link STATUS_TONE} at the call site
11
+ * (see `<StatusIndicator tone="..." />` escape hatch).
12
+ */
13
+ export type Status =
14
+ | 'operational'
15
+ | 'degraded'
16
+ | 'partial-outage'
17
+ | 'major-outage'
18
+ | 'maintenance'
19
+ | 'incident'
20
+ | 'unknown';
21
+
22
+ /**
23
+ * Semantic tone used to colorize the dot and label.
24
+ *
25
+ * Maps 1:1 to status-surface tokens in `ui-core/styles` (success / warning /
26
+ * destructive / info / muted). Themes / presets override these tokens —
27
+ * never reference raw scales like `emerald-500`.
28
+ */
29
+ export type StatusTone = 'success' | 'warning' | 'destructive' | 'info' | 'muted';
30
+
31
+ /**
32
+ * Default Status → tone + label mapping. Override per-instance via the
33
+ * `tone` and `label` props.
34
+ */
35
+ export const STATUS_CONFIG: Record<Status, { label: string; tone: StatusTone }> = {
36
+ operational: { label: 'Operational', tone: 'success' },
37
+ degraded: { label: 'Degraded', tone: 'warning' },
38
+ 'partial-outage': { label: 'Partial Outage', tone: 'warning' },
39
+ 'major-outage': { label: 'Major Outage', tone: 'destructive' },
40
+ maintenance: { label: 'Maintenance', tone: 'info' },
41
+ incident: { label: 'Incident', tone: 'destructive' },
42
+ unknown: { label: 'Unknown', tone: 'muted' },
43
+ };
44
+
45
+ /**
46
+ * Tailwind classes per tone. All classes resolve to semantic tokens; no raw
47
+ * color scales.
48
+ *
49
+ * The whole pill (background) uses the status-surface `bg-*-background`
50
+ * token paired with the readable `text-*-foreground` token — that pair
51
+ * is the one `ui-core/styles` specifically tunes for banner/pill use
52
+ * (low-saturation surface + dark accent text). Stacking a red-on-pale-red
53
+ * label over a `bg-card` pill, as the previous version did, dropped
54
+ * contrast under 3:1 on light theme.
55
+ *
56
+ * The dot stays at the saturated accent color (`bg-*`) so it visually
57
+ * pops against the muted surface.
58
+ *
59
+ * `destructive` has no `--destructive-foreground` tuned for surface use
60
+ * (the existing token is the white-on-red filled-button text), so we use
61
+ * the accent color itself — dark red on the pale-red surface still meets
62
+ * AA contrast in both light and dark themes.
63
+ */
64
+ export const TONE_CLASSES: Record<
65
+ StatusTone,
66
+ { dot: string; text: string; pill: string }
67
+ > = {
68
+ success: {
69
+ dot: 'bg-success',
70
+ text: 'text-success-foreground',
71
+ pill: 'bg-success-background',
72
+ },
73
+ warning: {
74
+ dot: 'bg-warning',
75
+ text: 'text-warning-foreground',
76
+ pill: 'bg-warning-background',
77
+ },
78
+ destructive: {
79
+ dot: 'bg-destructive',
80
+ text: 'text-destructive',
81
+ pill: 'bg-destructive-background',
82
+ },
83
+ info: {
84
+ dot: 'bg-info',
85
+ text: 'text-info-foreground',
86
+ pill: 'bg-info-background',
87
+ },
88
+ muted: {
89
+ dot: 'bg-muted-foreground/60',
90
+ text: 'text-muted-foreground',
91
+ pill: 'bg-muted',
92
+ },
93
+ };
94
+
95
+ export const statusIndicatorVariants = cva(
96
+ 'inline-flex items-center gap-2 rounded-full border font-medium',
97
+ {
98
+ variants: {
99
+ size: {
100
+ sm: 'h-6 px-2.5 text-[11px] [&>[data-slot=status-dot]]:size-1.5',
101
+ md: 'h-7 px-3 text-xs [&>[data-slot=status-dot]]:size-2',
102
+ lg: 'h-8 px-3.5 text-sm [&>[data-slot=status-dot]]:size-2.5',
103
+ },
104
+ },
105
+ defaultVariants: {
106
+ size: 'md',
107
+ },
108
+ },
109
+ );
110
+
111
+ export type StatusIndicatorSize = NonNullable<
112
+ VariantProps<typeof statusIndicatorVariants>['size']
113
+ >;
114
+
115
+ export interface StatusIndicatorProps
116
+ extends Omit<React.ComponentProps<'span'>, 'children'>,
117
+ VariantProps<typeof statusIndicatorVariants> {
118
+ /** Current operational status. */
119
+ status: Status;
120
+ /** Custom label text. Auto-generated from status when omitted. */
121
+ label?: string;
122
+ /**
123
+ * Override the tone (semantic color) used for dot + label. Defaults to
124
+ * {@link STATUS_CONFIG}`[status].tone`.
125
+ */
126
+ tone?: StatusTone;
127
+ /**
128
+ * Enable the pulsing halo around the dot. Defaults to `true` for live
129
+ * statuses (`incident`, `major-outage`, `partial-outage`, `degraded`)
130
+ * and `false` for steady states.
131
+ */
132
+ pulse?: boolean;
133
+ }
@@ -1,22 +0,0 @@
1
- 'use client';
2
-
3
- import React from 'react';
4
- import { CopyButton } from '@djangocfg/ui-core/components';
5
-
6
- interface CopyActionProps {
7
- value: string;
8
- title?: string;
9
- }
10
-
11
- const BUTTON_CLASS = 'h-6 w-6 rounded-sm bg-muted/80 hover:bg-muted border border-border/50 backdrop-blur-sm';
12
-
13
- export const CopyAction: React.FC<CopyActionProps> = ({ value, title = 'Copy' }) => (
14
- <CopyButton
15
- value={value}
16
- variant="ghost"
17
- size="icon"
18
- className={BUTTON_CLASS}
19
- iconClassName="h-3 w-3"
20
- title={title}
21
- />
22
- );
@@ -1,25 +0,0 @@
1
- 'use client';
2
-
3
- import { ChevronDown, ChevronUp } from 'lucide-react';
4
- import React from 'react';
5
-
6
- import { Button } 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
- <Button
17
- variant="ghost"
18
- size="icon"
19
- onClick={onToggle}
20
- className={BUTTON_CLASS}
21
- title={isExpanded ? 'Collapse All' : 'Expand All'}
22
- >
23
- {isExpanded ? <ChevronUp className="h-3 w-3" /> : <ChevronDown className="h-3 w-3" />}
24
- </Button>
25
- );
@@ -1,30 +0,0 @@
1
- 'use client';
2
-
3
- import { Maximize2, Minimize2 } from 'lucide-react';
4
- import React from 'react';
5
-
6
- import { Button } 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
- <Button
22
- variant="ghost"
23
- size="icon"
24
- onClick={onToggle}
25
- className={BUTTON_CLASS}
26
- title={title ?? (isFullscreen ? 'Exit fullscreen' : 'Fullscreen')}
27
- >
28
- {isFullscreen ? <Minimize2 className="h-3 w-3" /> : <Maximize2 className="h-3 w-3" />}
29
- </Button>
30
- );