@flanksource/clicky-ui 0.1.0 → 0.2.1
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.
- package/README.md +29 -2
- package/dist/api-explorer.d.ts +5 -0
- package/dist/api-explorer.d.ts.map +1 -0
- package/dist/api-explorer.js +25 -0
- package/dist/api-explorer.js.map +1 -0
- package/dist/clicky.d.ts +2 -0
- package/dist/clicky.d.ts.map +1 -0
- package/dist/clicky.js +5 -0
- package/dist/clicky.js.map +1 -0
- package/dist/components/DatePicker.d.ts +18 -0
- package/dist/components/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker.js +63 -0
- package/dist/components/DatePicker.js.map +1 -0
- package/dist/components/DateTimePicker.d.ts +18 -0
- package/dist/components/DateTimePicker.d.ts.map +1 -0
- package/dist/components/DateTimePicker.js +84 -0
- package/dist/components/DateTimePicker.js.map +1 -0
- package/dist/components/FilterBar.d.ts +180 -0
- package/dist/components/FilterBar.d.ts.map +1 -0
- package/dist/components/FilterBar.js +1685 -0
- package/dist/components/FilterBar.js.map +1 -0
- package/dist/components/MultiSelect.d.ts +19 -0
- package/dist/components/MultiSelect.d.ts.map +1 -0
- package/dist/components/MultiSelect.js +143 -0
- package/dist/components/MultiSelect.js.map +1 -0
- package/dist/components/RangeSlider.d.ts +16 -0
- package/dist/components/RangeSlider.d.ts.map +1 -0
- package/dist/components/RangeSlider.js +92 -0
- package/dist/components/RangeSlider.js.map +1 -0
- package/dist/components/button.d.ts +21 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +126 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/density-switcher.d.ts +7 -0
- package/dist/components/density-switcher.d.ts.map +1 -0
- package/dist/components/density-switcher.js +32 -0
- package/dist/components/density-switcher.js.map +1 -0
- package/dist/components/icon-menu-picker.d.ts +22 -0
- package/dist/components/icon-menu-picker.d.ts.map +1 -0
- package/dist/components/icon-menu-picker.js +181 -0
- package/dist/components/icon-menu-picker.js.map +1 -0
- package/dist/components/select.d.ts +15 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +39 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/theme-switcher.d.ts +7 -0
- package/dist/components/theme-switcher.d.ts.map +1 -0
- package/dist/components/theme-switcher.js +42 -0
- package/dist/components/theme-switcher.js.map +1 -0
- package/dist/components.d.ts +14 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +31 -0
- package/dist/components.js.map +1 -0
- package/dist/data/AnsiHtml.d.ts +7 -0
- package/dist/data/AnsiHtml.d.ts.map +1 -0
- package/dist/data/AnsiHtml.js +71 -0
- package/dist/data/AnsiHtml.js.map +1 -0
- package/dist/data/Avatar.d.ts +32 -0
- package/dist/data/Avatar.d.ts.map +1 -0
- package/dist/data/Avatar.js +201 -0
- package/dist/data/Avatar.js.map +1 -0
- package/dist/data/AvatarBadge.d.ts +26 -0
- package/dist/data/AvatarBadge.d.ts.map +1 -0
- package/dist/data/AvatarBadge.js +104 -0
- package/dist/data/AvatarBadge.js.map +1 -0
- package/dist/data/Badge.d.ts +44 -0
- package/dist/data/Badge.d.ts.map +1 -0
- package/dist/data/Badge.js +667 -0
- package/dist/data/Badge.js.map +1 -0
- package/dist/data/Clicky.d.ts +147 -0
- package/dist/data/Clicky.d.ts.map +1 -0
- package/dist/data/Clicky.fixtures.d.ts +3 -0
- package/dist/data/Clicky.fixtures.d.ts.map +1 -0
- package/dist/data/Clicky.js +1960 -0
- package/dist/data/Clicky.js.map +1 -0
- package/dist/data/DataTable.d.ts +95 -0
- package/dist/data/DataTable.d.ts.map +1 -0
- package/dist/data/DataTable.js +1464 -0
- package/dist/data/DataTable.js.map +1 -0
- package/dist/data/FilterPill.d.ts +29 -0
- package/dist/data/FilterPill.d.ts.map +1 -0
- package/dist/data/FilterPill.js +153 -0
- package/dist/data/FilterPill.js.map +1 -0
- package/dist/data/Gauge.d.ts +15 -0
- package/dist/data/Gauge.d.ts.map +1 -0
- package/dist/data/Gauge.js +63 -0
- package/dist/data/Gauge.js.map +1 -0
- package/dist/data/Icon.d.ts +53 -0
- package/dist/data/Icon.d.ts.map +1 -0
- package/dist/data/Icon.js +115 -0
- package/dist/data/Icon.js.map +1 -0
- package/dist/data/JsonView.d.ts +8 -0
- package/dist/data/JsonView.d.ts.map +1 -0
- package/dist/data/JsonView.js +74 -0
- package/dist/data/JsonView.js.map +1 -0
- package/dist/data/KeyValueList.d.ts +17 -0
- package/dist/data/KeyValueList.d.ts.map +1 -0
- package/dist/data/KeyValueList.js +33 -0
- package/dist/data/KeyValueList.js.map +1 -0
- package/dist/data/LogViewer.d.ts +10 -0
- package/dist/data/LogViewer.d.ts.map +1 -0
- package/dist/data/LogViewer.js +46 -0
- package/dist/data/LogViewer.js.map +1 -0
- package/dist/data/LogsTable.d.ts +27 -0
- package/dist/data/LogsTable.d.ts.map +1 -0
- package/dist/data/LogsTable.js +580 -0
- package/dist/data/LogsTable.js.map +1 -0
- package/dist/data/Markdown.d.ts +6 -0
- package/dist/data/Markdown.d.ts.map +1 -0
- package/dist/data/Markdown.js +59 -0
- package/dist/data/Markdown.js.map +1 -0
- package/dist/data/MatrixTable.d.ts +22 -0
- package/dist/data/MatrixTable.d.ts.map +1 -0
- package/dist/data/MatrixTable.js +164 -0
- package/dist/data/MatrixTable.js.map +1 -0
- package/dist/data/MethodBadge.d.ts +6 -0
- package/dist/data/MethodBadge.d.ts.map +1 -0
- package/dist/data/MethodBadge.js +18 -0
- package/dist/data/MethodBadge.js.map +1 -0
- package/dist/data/ProgressBar.d.ts +13 -0
- package/dist/data/ProgressBar.d.ts.map +1 -0
- package/dist/data/ProgressBar.js +34 -0
- package/dist/data/ProgressBar.js.map +1 -0
- package/dist/data/SortableHeader.d.ts +12 -0
- package/dist/data/SortableHeader.d.ts.map +1 -0
- package/dist/data/SortableHeader.js +33 -0
- package/dist/data/SortableHeader.js.map +1 -0
- package/dist/data/TabButton.d.ts +12 -0
- package/dist/data/TabButton.d.ts.map +1 -0
- package/dist/data/TabButton.js +45 -0
- package/dist/data/TabButton.js.map +1 -0
- package/dist/data/Tree.d.ts +35 -0
- package/dist/data/Tree.d.ts.map +1 -0
- package/dist/data/Tree.js +236 -0
- package/dist/data/Tree.js.map +1 -0
- package/dist/data/TreeGroupHeader.d.ts +11 -0
- package/dist/data/TreeGroupHeader.d.ts.map +1 -0
- package/dist/data/TreeGroupHeader.js +41 -0
- package/dist/data/TreeGroupHeader.js.map +1 -0
- package/dist/data/TreeNode.d.ts +43 -0
- package/dist/data/TreeNode.d.ts.map +1 -0
- package/dist/data/TreeNode.js +100 -0
- package/dist/data/TreeNode.js.map +1 -0
- package/dist/data/cells/StatusDot.d.ts +11 -0
- package/dist/data/cells/StatusDot.d.ts.map +1 -0
- package/dist/data/cells/StatusDot.js +38 -0
- package/dist/data/cells/StatusDot.js.map +1 -0
- package/dist/data/cells/TagList.d.ts +59 -0
- package/dist/data/cells/TagList.d.ts.map +1 -0
- package/dist/data/cells/TagList.js +257 -0
- package/dist/data/cells/TagList.js.map +1 -0
- package/dist/data/cells/Timestamp.d.ts +46 -0
- package/dist/data/cells/Timestamp.d.ts.map +1 -0
- package/dist/data/cells/Timestamp.js +146 -0
- package/dist/data/cells/Timestamp.js.map +1 -0
- package/dist/data/cells/status-mapping.d.ts +8 -0
- package/dist/data/cells/status-mapping.d.ts.map +1 -0
- package/dist/data/cells/status-mapping.js +44 -0
- package/dist/data/cells/status-mapping.js.map +1 -0
- package/dist/data/code-highlight.d.ts +12 -0
- package/dist/data/code-highlight.d.ts.map +1 -0
- package/dist/data/code-highlight.js +28 -0
- package/dist/data/code-highlight.js.map +1 -0
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts +9 -0
- package/dist/data/diagnostics/DiagnosticsDetailPanel.d.ts.map +1 -0
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js +445 -0
- package/dist/data/diagnostics/DiagnosticsDetailPanel.js.map +1 -0
- package/dist/data/diagnostics/DiagnosticsTree.d.ts +9 -0
- package/dist/data/diagnostics/DiagnosticsTree.d.ts.map +1 -0
- package/dist/data/diagnostics/DiagnosticsTree.js +78 -0
- package/dist/data/diagnostics/DiagnosticsTree.js.map +1 -0
- package/dist/data/diagnostics/ErrorDetails.d.ts +20 -0
- package/dist/data/diagnostics/ErrorDetails.d.ts.map +1 -0
- package/dist/data/diagnostics/ErrorDetails.js +157 -0
- package/dist/data/diagnostics/ErrorDetails.js.map +1 -0
- package/dist/data/diagnostics/GoroutineCard.d.ts +10 -0
- package/dist/data/diagnostics/GoroutineCard.d.ts.map +1 -0
- package/dist/data/diagnostics/GoroutineCard.js +75 -0
- package/dist/data/diagnostics/GoroutineCard.js.map +1 -0
- package/dist/data/diagnostics/JvmStackTrace.d.ts +11 -0
- package/dist/data/diagnostics/JvmStackTrace.d.ts.map +1 -0
- package/dist/data/diagnostics/JvmStackTrace.js +26 -0
- package/dist/data/diagnostics/JvmStackTrace.js.map +1 -0
- package/dist/data/diagnostics/RenderedStackTrace.d.ts +18 -0
- package/dist/data/diagnostics/RenderedStackTrace.d.ts.map +1 -0
- package/dist/data/diagnostics/RenderedStackTrace.js +235 -0
- package/dist/data/diagnostics/RenderedStackTrace.js.map +1 -0
- package/dist/data/diagnostics/ThreadCard.d.ts +10 -0
- package/dist/data/diagnostics/ThreadCard.d.ts.map +1 -0
- package/dist/data/diagnostics/ThreadCard.js +78 -0
- package/dist/data/diagnostics/ThreadCard.js.map +1 -0
- package/dist/data/diagnostics/error-diagnostics.d.ts +26 -0
- package/dist/data/diagnostics/error-diagnostics.d.ts.map +1 -0
- package/dist/data/diagnostics/error-diagnostics.js +108 -0
- package/dist/data/diagnostics/error-diagnostics.js.map +1 -0
- package/dist/data/diagnostics/fixtures.d.ts +3 -0
- package/dist/data/diagnostics/fixtures.d.ts.map +1 -0
- package/dist/data/diagnostics/jvm-stacktrace.d.ts +34 -0
- package/dist/data/diagnostics/jvm-stacktrace.d.ts.map +1 -0
- package/dist/data/diagnostics/jvm-stacktrace.js +190 -0
- package/dist/data/diagnostics/jvm-stacktrace.js.map +1 -0
- package/dist/data/diagnostics/stacktrace-parse.d.ts +11 -0
- package/dist/data/diagnostics/stacktrace-parse.d.ts.map +1 -0
- package/dist/data/diagnostics/stacktrace-parse.js +87 -0
- package/dist/data/diagnostics/stacktrace-parse.js.map +1 -0
- package/dist/data/diagnostics/stacktrace.d.ts +38 -0
- package/dist/data/diagnostics/stacktrace.d.ts.map +1 -0
- package/dist/data/diagnostics/stacktrace.js +119 -0
- package/dist/data/diagnostics/stacktrace.js.map +1 -0
- package/dist/data/diagnostics/types.d.ts +30 -0
- package/dist/data/diagnostics/types.d.ts.map +1 -0
- package/dist/data/diagnostics/utils.d.ts +8 -0
- package/dist/data/diagnostics/utils.d.ts.map +1 -0
- package/dist/data/diagnostics/utils.js +59 -0
- package/dist/data/diagnostics/utils.js.map +1 -0
- package/dist/data/har/HarPanel.d.ts +9 -0
- package/dist/data/har/HarPanel.d.ts.map +1 -0
- package/dist/data/har/HarPanel.js +175 -0
- package/dist/data/har/HarPanel.js.map +1 -0
- package/dist/data/har/fixtures.d.ts +3 -0
- package/dist/data/har/fixtures.d.ts.map +1 -0
- package/dist/data/har/types.d.ts +47 -0
- package/dist/data/har/types.d.ts.map +1 -0
- package/dist/data.d.ts +39 -0
- package/dist/data.d.ts.map +1 -0
- package/dist/data.js +109 -0
- package/dist/data.js.map +1 -0
- package/dist/hooks/use-density.d.ts +22 -0
- package/dist/hooks/use-density.d.ts.map +1 -0
- package/dist/hooks/use-density.js +54 -0
- package/dist/hooks/use-density.js.map +1 -0
- package/dist/hooks/use-history-route.d.ts +6 -0
- package/dist/hooks/use-history-route.d.ts.map +1 -0
- package/dist/hooks/use-history-route.js +31 -0
- package/dist/hooks/use-history-route.js.map +1 -0
- package/dist/hooks/use-sort.d.ts +17 -0
- package/dist/hooks/use-sort.d.ts.map +1 -0
- package/dist/hooks/use-sort.js +42 -0
- package/dist/hooks/use-sort.js.map +1 -0
- package/dist/hooks/use-theme.d.ts +17 -0
- package/dist/hooks/use-theme.d.ts.map +1 -0
- package/dist/hooks/use-theme.js +68 -0
- package/dist/hooks/use-theme.js.map +1 -0
- package/dist/hooks.d.ts +5 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +14 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +193 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/Section.d.ts +23 -0
- package/dist/layout/Section.d.ts.map +1 -0
- package/dist/layout/Section.js +73 -0
- package/dist/layout/Section.js.map +1 -0
- package/dist/layout/SplitPane.d.ts +13 -0
- package/dist/layout/SplitPane.d.ts.map +1 -0
- package/dist/layout/SplitPane.js +72 -0
- package/dist/layout/SplitPane.js.map +1 -0
- package/dist/lib/palette.d.ts +4 -0
- package/dist/lib/palette.d.ts.map +1 -0
- package/dist/lib/palette.js +35 -0
- package/dist/lib/palette.js.map +1 -0
- package/dist/lib/size.d.ts +6 -0
- package/dist/lib/size.d.ts.map +1 -0
- package/dist/lib/size.js +14 -0
- package/dist/lib/size.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +9 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/overlay/HoverCard.d.ts +13 -0
- package/dist/overlay/HoverCard.d.ts.map +1 -0
- package/dist/overlay/HoverCard.js +170 -0
- package/dist/overlay/HoverCard.js.map +1 -0
- package/dist/overlay/Modal.d.ts +17 -0
- package/dist/overlay/Modal.d.ts.map +1 -0
- package/dist/overlay/Modal.js +91 -0
- package/dist/overlay/Modal.js.map +1 -0
- package/dist/rpc/AcceptPicker.d.ts +52 -0
- package/dist/rpc/AcceptPicker.d.ts.map +1 -0
- package/dist/rpc/AcceptPicker.js +126 -0
- package/dist/rpc/AcceptPicker.js.map +1 -0
- package/dist/rpc/ApiExplorer.d.ts +11 -0
- package/dist/rpc/ApiExplorer.d.ts.map +1 -0
- package/dist/rpc/ApiExplorer.js +37 -0
- package/dist/rpc/ApiExplorer.js.map +1 -0
- package/dist/rpc/CommandForm.d.ts +15 -0
- package/dist/rpc/CommandForm.d.ts.map +1 -0
- package/dist/rpc/CommandForm.js +356 -0
- package/dist/rpc/CommandForm.js.map +1 -0
- package/dist/rpc/CommandOutput.d.ts +11 -0
- package/dist/rpc/CommandOutput.d.ts.map +1 -0
- package/dist/rpc/CommandOutput.js +195 -0
- package/dist/rpc/CommandOutput.js.map +1 -0
- package/dist/rpc/EndpointList.d.ts +18 -0
- package/dist/rpc/EndpointList.d.ts.map +1 -0
- package/dist/rpc/EndpointList.js +56 -0
- package/dist/rpc/EndpointList.js.map +1 -0
- package/dist/rpc/EntityExplorerApp.d.ts +15 -0
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -0
- package/dist/rpc/EntityExplorerApp.js +282 -0
- package/dist/rpc/EntityExplorerApp.js.map +1 -0
- package/dist/rpc/ExecutionResult.d.ts +14 -0
- package/dist/rpc/ExecutionResult.d.ts.map +1 -0
- package/dist/rpc/ExecutionResult.js +51 -0
- package/dist/rpc/ExecutionResult.js.map +1 -0
- package/dist/rpc/FilterForm.d.ts +22 -0
- package/dist/rpc/FilterForm.d.ts.map +1 -0
- package/dist/rpc/FilterForm.js +392 -0
- package/dist/rpc/FilterForm.js.map +1 -0
- package/dist/rpc/InlineError.d.ts +7 -0
- package/dist/rpc/InlineError.d.ts.map +1 -0
- package/dist/rpc/InlineError.js +54 -0
- package/dist/rpc/InlineError.js.map +1 -0
- package/dist/rpc/OperationActionDialog.d.ts +12 -0
- package/dist/rpc/OperationActionDialog.d.ts.map +1 -0
- package/dist/rpc/OperationActionDialog.js +105 -0
- package/dist/rpc/OperationActionDialog.js.map +1 -0
- package/dist/rpc/OperationCatalog.d.ts +21 -0
- package/dist/rpc/OperationCatalog.d.ts.map +1 -0
- package/dist/rpc/OperationCatalog.js +339 -0
- package/dist/rpc/OperationCatalog.js.map +1 -0
- package/dist/rpc/OperationCommandPage.d.ts +22 -0
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -0
- package/dist/rpc/OperationCommandPage.js +484 -0
- package/dist/rpc/OperationCommandPage.js.map +1 -0
- package/dist/rpc/OperationEntityPage.d.ts +23 -0
- package/dist/rpc/OperationEntityPage.d.ts.map +1 -0
- package/dist/rpc/OperationEntityPage.js +218 -0
- package/dist/rpc/OperationEntityPage.js.map +1 -0
- package/dist/rpc/classify.d.ts +8 -0
- package/dist/rpc/classify.d.ts.map +1 -0
- package/dist/rpc/classify.js +76 -0
- package/dist/rpc/classify.js.map +1 -0
- package/dist/rpc/clickyMetadata.d.ts +12 -0
- package/dist/rpc/clickyMetadata.d.ts.map +1 -0
- package/dist/rpc/clickyMetadata.js +71 -0
- package/dist/rpc/clickyMetadata.js.map +1 -0
- package/dist/rpc/formMetadata.d.ts +27 -0
- package/dist/rpc/formMetadata.d.ts.map +1 -0
- package/dist/rpc/formMetadata.js +250 -0
- package/dist/rpc/formMetadata.js.map +1 -0
- package/dist/rpc/types.d.ts +109 -0
- package/dist/rpc/types.d.ts.map +1 -0
- package/dist/rpc/types.js +8 -0
- package/dist/rpc/types.js.map +1 -0
- package/dist/rpc/useOperations.d.ts +346 -0
- package/dist/rpc/useOperations.d.ts.map +1 -0
- package/dist/rpc/useOperations.js +31 -0
- package/dist/rpc/useOperations.js.map +1 -0
- package/dist/rpc.d.ts +14 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +37 -0
- package/dist/rpc.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/styles.d.ts +1 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +2 -0
- package/dist/styles.js.map +1 -0
- package/dist/tailwind-preset.d.ts +4 -0
- package/dist/tailwind-preset.d.ts.map +1 -0
- package/dist/tailwind-preset.js +69 -0
- package/dist/tailwind-preset.js.map +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +12 -0
- package/dist/utils.js.map +1 -0
- package/package.json +83 -40
- package/dist/index.d.mts +0 -834
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs +0 -2918
- package/dist/index.mjs.map +0 -1
- package/dist/tailwind-preset.d.mts +0 -7
- package/dist/tailwind-preset.d.mts.map +0 -1
- package/dist/tailwind-preset.mjs +0 -64
- package/dist/tailwind-preset.mjs.map +0 -1
- package/src/styles/tokens.css +0 -78
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clicky.js","sources":["../../src/data/Clicky.tsx"],"sourcesContent":["import { QueryClient, QueryClientProvider, useQuery } from \"@tanstack/react-query\";\nimport {\n createContext,\n Fragment,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentProps,\n type CSSProperties,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n} from \"react\";\nimport { FilterForm } from \"../rpc/FilterForm\";\nimport { parseJsonBody } from \"../rpc/classify\";\nimport {\n packParameterValues,\n pruneParameterValues,\n type ParameterValues,\n} from \"../rpc/formMetadata\";\nimport {\n type ExecutionResponse,\n isPositionalParam,\n type OpenAPIParameter,\n type ResolvedOperation,\n} from \"../rpc/types\";\nimport { type OperationsApiClient, useOperations } from \"../rpc/useOperations\";\nimport { cn } from \"../lib/utils\";\nimport { DataTable, type DataTableColumn, type DataTableRowDetailContext } from \"./DataTable\";\nimport { Tree } from \"./Tree\";\nimport { Icon } from \"./Icon\";\nimport { JsonView } from \"./JsonView\";\nimport { highlightCode } from \"./code-highlight\";\nimport { StackTrace } from \"./diagnostics/RenderedStackTrace\";\nimport type { ParsedStackFrame } from \"./diagnostics/stacktrace-parse\";\nimport { Badge, type BadgeShape } from \"./Badge\";\nimport { HoverCard } from \"../overlay/HoverCard\";\nimport { Modal } from \"../overlay/Modal\";\nimport {\n TagActionsProvider,\n TagList,\n normalizeTags,\n type NormalizedTag,\n type TagsValue,\n} from \"./cells/TagList\";\n\nexport type ClickyStyle = {\n className?: string;\n color?: string;\n backgroundColor?: string;\n bold?: boolean;\n faint?: boolean;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n textTransform?: string;\n maxWidth?: number;\n maxLines?: number;\n truncateMode?: \"suffix\" | \"prefix\" | \"headtail\";\n monospace?: boolean;\n};\n\nexport type ClickyField = {\n name: string;\n label?: string;\n value: ClickyNode;\n};\n\nexport type ClickyColumn = {\n name: string;\n label?: string;\n header?: ClickyNode;\n align?: \"left\" | \"right\" | \"center\";\n sortable?: boolean;\n filterable?: boolean;\n grow?: boolean;\n shrink?: boolean;\n kind?: \"timestamp\" | \"tags\" | \"status\";\n};\n\nexport type ClickyRow = {\n cells: Record<string, ClickyNode>;\n detail?: ClickyNode;\n};\n\nexport type ClickyTreeItem = {\n id: string;\n label: ClickyNode;\n children?: ClickyTreeItem[];\n};\n\nexport type ClickyNode = {\n kind:\n | \"text\"\n | \"link\"\n | \"link-command\"\n | \"icon\"\n | \"list\"\n | \"map\"\n | \"table\"\n | \"tree\"\n | \"code\"\n | \"collapsed\"\n | \"stacktrace\"\n | \"button\"\n | \"button-group\"\n | \"html\"\n | \"comment\"\n | \"badge\";\n plain?: string;\n style?: ClickyStyle;\n text?: string;\n children?: ClickyNode[];\n tooltip?: ClickyNode;\n html?: string;\n inline?: boolean;\n ordered?: boolean;\n unstyled?: boolean;\n bullet?: ClickyNode;\n items?: ClickyNode[];\n fields?: ClickyField[];\n columns?: ClickyColumn[];\n rows?: ClickyRow[];\n autoFilter?: boolean;\n roots?: ClickyTreeItem[];\n label?: ClickyNode;\n content?: ClickyNode;\n href?: string;\n target?: ClickyLinkTarget;\n command?: string;\n args?: string[];\n flags?: Record<string, string>;\n autoRun?: boolean;\n id?: string;\n payload?: string;\n variant?: string;\n iconify?: string;\n unicode?: string;\n language?: string;\n source?: string;\n highlightedHtml?: string;\n exceptionClass?: string;\n message?: string;\n causedBy?: string[];\n frames?: ParsedStackFrame[];\n // LabelBadge fields, set when kind === \"badge\".\n badgeLabel?: string;\n badgeValue?: string;\n badgeColor?: string;\n badgeText?: string;\n badgeShape?: string;\n badgeIcon?: string;\n};\n\nexport type ClickyDocument = {\n version: 1;\n node: ClickyNode;\n};\n\nexport type ClickyLinkTarget =\n | \"Dialog\"\n | \"Hover\"\n | \"Expand\"\n | \"_clicky\"\n | \"_self\"\n | \"_window\"\n | \"_tab\";\n\nexport type ClickyCommandRequest = {\n command: string;\n args?: string[];\n flags?: Record<string, string>;\n target?: ClickyLinkTarget;\n autoRun?: boolean;\n};\n\nexport type ClickyResolvedCommand = {\n request: ClickyCommandRequest;\n operation: ResolvedOperation | undefined;\n};\n\nexport type ClickyCommandRuntime = {\n client: OperationsApiClient;\n resolveCommand?: (\n request: ClickyCommandRequest,\n operations: ResolvedOperation[],\n ) => ResolvedOperation | undefined;\n hrefForCommand?: (resolved: ClickyResolvedCommand) => string | undefined;\n onNavigate?: (resolved: ClickyResolvedCommand) => void;\n};\n\nexport type ClickyTableRowClick = (row: ClickyRow) => void;\nexport type ClickyTableRowHref = (row: ClickyRow) => string | undefined;\nexport type ClickyTableRowPredicate = (row: ClickyRow) => boolean;\n\nconst CLICKY_PRIMARY_VIEW_FORMATS = [\"clicky\", \"json\"] as const;\nconst CLICKY_OVERFLOW_VIEW_FORMATS = [\n \"pdf\",\n \"html\",\n \"markdown\",\n \"yaml\",\n \"csv\",\n \"pretty\",\n \"excel\",\n \"slack\",\n] as const;\nconst CLICKY_DOWNLOAD_FORMATS = [\"json\", \"clicky\", ...CLICKY_OVERFLOW_VIEW_FORMATS] as const;\n\nexport type ClickyPrimaryViewFormat = (typeof CLICKY_PRIMARY_VIEW_FORMATS)[number];\nexport type ClickyOverflowViewFormat = (typeof CLICKY_OVERFLOW_VIEW_FORMATS)[number];\nexport type ClickyRemoteFormat = ClickyPrimaryViewFormat | ClickyOverflowViewFormat;\n\nexport type ClickyViewOptions = Partial<Record<ClickyRemoteFormat, boolean>>;\n\nexport type ClickyViewConfig = ClickyViewOptions | ClickyRemoteFormat[];\n\nexport type ClickyDownloadOptions = {\n all?: boolean;\n label?: string;\n};\n\nexport type ClickyProps = {\n data?: ClickyDocument | ClickyNode | string;\n url?: string;\n view?: ClickyViewConfig;\n download?: ClickyDownloadOptions;\n commandRuntime?: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick;\n getTableRowHref?: ClickyTableRowHref;\n isTableRowClickable?: ClickyTableRowPredicate;\n className?: string;\n};\n\ntype ParsedClicky =\n | { ok: true; document: ClickyDocument }\n | { ok: false; message: string; raw: string };\n\ntype ClickyRemoteResponse =\n | { kind: \"text\"; text: string; contentType: string }\n | { kind: \"blob\"; blob: Blob; contentType: string };\n\ntype JsonTreeNode = {\n id: string;\n key: string;\n value: unknown;\n preview: string;\n children?: JsonTreeNode[];\n};\n\ntype ClickyRuntimeContextValue = {\n commandRuntime?: ClickyCommandRuntime | undefined;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n operations: ResolvedOperation[];\n operationsLoading: boolean;\n};\n\nconst clickyRuntimeContextDefault: ClickyRuntimeContextValue = {\n operations: [],\n operationsLoading: false,\n};\n\nconst ClickyRuntimeContext = createContext<ClickyRuntimeContextValue>(clickyRuntimeContextDefault);\n\nexport function Clicky(props: ClickyProps) {\n const [queryClient] = useState(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: {\n staleTime: 30_000,\n retry: 1,\n },\n },\n }),\n );\n\n const content = (\n <ClickyRuntimeProvider\n {...(props.commandRuntime ? { commandRuntime: props.commandRuntime } : {})}\n {...(props.onTableRowClick ? { onTableRowClick: props.onTableRowClick } : {})}\n {...(props.getTableRowHref ? { getTableRowHref: props.getTableRowHref } : {})}\n {...(props.isTableRowClickable ? { isTableRowClickable: props.isTableRowClickable } : {})}\n >\n {props.url ? (\n <ClickyRemoteRenderer {...props} url={props.url} />\n ) : (\n <ClickyContent\n data={props.data}\n {...(props.className ? { className: props.className } : {})}\n />\n )}\n </ClickyRuntimeProvider>\n );\n\n if (props.url || props.commandRuntime) {\n return <QueryClientProvider client={queryClient}>{content}</QueryClientProvider>;\n }\n\n return content;\n}\n\nfunction ClickyRuntimeProvider({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n children,\n}: {\n commandRuntime?: ClickyCommandRuntime | undefined;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n children: ReactNode;\n}) {\n if (!commandRuntime) {\n return (\n <ClickyRuntimeContext.Provider\n value={\n onTableRowClick || getTableRowHref || isTableRowClickable\n ? {\n ...clickyRuntimeContextDefault,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n }\n : clickyRuntimeContextDefault\n }\n >\n {children}\n </ClickyRuntimeContext.Provider>\n );\n }\n\n return (\n <ClickyCommandRuntimeProvider\n commandRuntime={commandRuntime}\n {...(onTableRowClick ? { onTableRowClick } : {})}\n {...(getTableRowHref ? { getTableRowHref } : {})}\n {...(isTableRowClickable ? { isTableRowClickable } : {})}\n >\n {children}\n </ClickyCommandRuntimeProvider>\n );\n}\n\nfunction ClickyCommandRuntimeProvider({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n children,\n}: {\n commandRuntime: ClickyCommandRuntime;\n onTableRowClick?: ClickyTableRowClick | undefined;\n getTableRowHref?: ClickyTableRowHref | undefined;\n isTableRowClickable?: ClickyTableRowPredicate | undefined;\n children: ReactNode;\n}) {\n const { operations, isLoading } = useOperations(commandRuntime.client);\n const value = useMemo(\n () => ({\n commandRuntime,\n onTableRowClick,\n getTableRowHref,\n isTableRowClickable,\n operations,\n operationsLoading: isLoading,\n }),\n [commandRuntime, getTableRowHref, isLoading, isTableRowClickable, onTableRowClick, operations],\n );\n\n return <ClickyRuntimeContext.Provider value={value}>{children}</ClickyRuntimeContext.Provider>;\n}\n\nfunction ClickyContent({\n data,\n className,\n}: {\n data: ClickyProps[\"data\"];\n className?: string | undefined;\n}) {\n if (data === undefined) {\n return (\n <ClickyNotice\n className={className}\n title=\"No Clicky data\"\n message=\"Provide either a local data payload or a URL.\"\n />\n );\n }\n\n const parsed = parseClickyData(data);\n\n if (!parsed.ok) {\n return <ClickyInvalidPayload parsed={parsed} className={className} />;\n }\n\n return (\n <div className={className}>\n <ClickyNodeRenderer node={parsed.document.node} />\n </div>\n );\n}\n\nfunction ClickyRemoteRenderer({\n data,\n url,\n view,\n download,\n className,\n}: ClickyProps & { url: string }) {\n const availableViews = useMemo(() => getAvailableViews({ data, url, view }), [data, url, view]);\n const primaryViews = useMemo(() => availableViews.filter(isPrimaryViewFormat), [availableViews]);\n const overflowViews = useMemo(\n () => availableViews.filter(isOverflowViewFormat),\n [availableViews],\n );\n const downloadFormats = useMemo(() => getDownloadFormats({ url, download }), [download, url]);\n const [activeView, setActiveView] = useState<ClickyRemoteFormat>(\n () => availableViews[0] ?? \"clicky\",\n );\n\n useEffect(() => {\n if (!availableViews.includes(activeView)) {\n setActiveView(availableViews[0] ?? \"clicky\");\n }\n }, [activeView, availableViews]);\n\n const formattedUrl = buildFormatUrl(url, activeView);\n const activeQuery = useQuery({\n queryKey: [\"clicky\", activeView, formattedUrl],\n enabled: shouldFetchRemoteView(activeView),\n queryFn: async () => fetchRemoteFormat(formattedUrl, activeView),\n });\n const effectiveClickyData =\n activeView === \"clicky\" && activeQuery.data?.kind === \"text\" ? activeQuery.data.text : data;\n const fallbackJsonData = useMemo(() => parseJsonValue(data), [data]);\n const effectiveJsonData =\n activeView === \"json\" && activeQuery.data?.kind === \"text\"\n ? parseJsonValue(activeQuery.data.text)\n : fallbackJsonData;\n const activeOverflowView = isOverflowViewFormat(activeView) ? activeView : null;\n const canDownload = downloadFormats.length > 0;\n const loadingMessage = `Fetching ${formattedUrl}`;\n\n return (\n <div className={cn(\"space-y-density-3\", className)}>\n <div className=\"flex flex-wrap items-center gap-2 rounded-md border border-border bg-muted/20 px-density-3 py-density-2\">\n {primaryViews.length > 1 && (\n <div role=\"radiogroup\" aria-label=\"Clicky view mode\" className=\"flex flex-wrap gap-1\">\n {primaryViews.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n role=\"radio\"\n aria-checked={activeView === mode}\n onClick={() => setActiveView(mode)}\n className={cn(\n \"rounded-md border px-2.5 py-1 text-xs font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n activeView === mode\n ? \"border-foreground/20 bg-accent text-foreground\"\n : \"border-transparent text-muted-foreground hover:border-foreground/20 hover:text-foreground\",\n )}\n >\n {formatViewLabel(mode)}\n </button>\n ))}\n </div>\n )}\n\n {overflowViews.length > 0 && (\n <ClickyViewMenu\n activeFormat={activeOverflowView}\n formats={overflowViews}\n onSelect={setActiveView}\n />\n )}\n\n <div className=\"ml-auto flex items-center gap-2\">\n {shouldFetchRemoteView(activeView) && activeQuery.isFetching && (\n <span className=\"text-xs text-muted-foreground\">Refreshing…</span>\n )}\n\n {canDownload && (\n <ClickyDownloadMenu url={url} formats={downloadFormats} label={download?.label} />\n )}\n </div>\n </div>\n\n {activeView === \"pdf\" ? (\n <ClickyPdfPreview src={formattedUrl} />\n ) : activeView === \"html\" ? (\n <ClickyHtmlPreview src={formattedUrl} />\n ) : activeView === \"excel\" ? (\n <ClickyUnsupportedPreview\n title=\"Excel preview\"\n message=\"Excel output is available for download, but not inline preview.\"\n href={formattedUrl}\n />\n ) : activeView === \"clicky\" ? (\n activeQuery.isPending && effectiveClickyData === undefined ? (\n <ClickyNotice title=\"Loading Clicky\" message={loadingMessage} />\n ) : activeQuery.isError && effectiveClickyData === undefined ? (\n <ClickyNotice\n title=\"Clicky request failed\"\n message={\n activeQuery.error instanceof Error ? activeQuery.error.message : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <>\n {activeQuery.isError && data !== undefined && (\n <ClickyNotice\n title=\"Remote refresh failed\"\n message=\"Showing the local fallback payload instead.\"\n tone=\"warning\"\n />\n )}\n <ClickyContent data={effectiveClickyData} />\n </>\n )\n ) : activeView === \"json\" ? (\n activeQuery.isPending && effectiveJsonData === undefined ? (\n <ClickyNotice title=\"Loading JSON\" message={loadingMessage} />\n ) : activeQuery.isError && effectiveJsonData === undefined ? (\n <ClickyNotice\n title=\"JSON request failed\"\n message={\n activeQuery.error instanceof Error ? activeQuery.error.message : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <>\n {activeQuery.isError && fallbackJsonData !== undefined && (\n <ClickyNotice\n title=\"Remote refresh failed\"\n message=\"Showing the local fallback payload instead.\"\n tone=\"warning\"\n />\n )}\n <ClickyJsonTree value={effectiveJsonData} />\n </>\n )\n ) : activeQuery.isPending ? (\n <ClickyNotice title={`Loading ${formatViewLabel(activeView)}`} message={loadingMessage} />\n ) : activeQuery.isError ? (\n <ClickyNotice\n title={`${formatViewLabel(activeView)} request failed`}\n message={\n activeQuery.error instanceof Error ? activeQuery.error.message : \"Request failed\"\n }\n tone=\"destructive\"\n />\n ) : (\n <ClickyRemotePreview format={activeView} response={activeQuery.data} />\n )}\n </div>\n );\n}\n\nfunction ClickyViewMenu({\n activeFormat,\n formats,\n onSelect,\n}: {\n activeFormat: ClickyOverflowViewFormat | null;\n formats: ClickyOverflowViewFormat[];\n onSelect: (format: ClickyRemoteFormat) => void;\n}) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n return (\n <div ref={rootRef} className=\"relative\">\n <button\n ref={triggerRef}\n type=\"button\"\n aria-label=\"Open additional view menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n aria-pressed={activeFormat != null}\n className={cn(\n \"inline-flex h-[34px] w-[34px] items-center justify-center rounded-md border border-input bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n activeFormat && \"border-foreground/20 bg-accent text-foreground\",\n )}\n onClick={() => setOpen((current) => !current)}\n >\n <Icon name=\"codicon:ellipsis\" className=\"text-sm\" />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className=\"absolute left-0 top-[calc(100%+0.375rem)] z-50 min-w-[18rem] rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {formats.map((format) => {\n const active = format === activeFormat;\n const meta = getRemoteFormatMeta(format);\n return (\n <button\n key={format}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n className={cn(\n \"flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\",\n active && \"bg-accent/70\",\n )}\n onClick={() => {\n onSelect(format);\n setOpen(false);\n }}\n >\n <Icon\n name={meta.icon}\n className={cn(\n \"mt-0.5 shrink-0 text-base text-muted-foreground\",\n active && \"text-foreground\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex items-center justify-between gap-3\">\n <span className=\"font-medium\">{meta.label}</span>\n {active && (\n <Icon name=\"codicon:check\" className=\"text-xs text-muted-foreground\" />\n )}\n </span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {meta.description}\n </span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction ClickyDownloadMenu({\n url,\n formats,\n label,\n}: {\n url: string;\n formats: ClickyRemoteFormat[];\n label?: string | undefined;\n}) {\n const rootRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [open, setOpen] = useState(false);\n const primaryFormat: ClickyRemoteFormat = \"json\";\n const primaryMeta = getRemoteFormatMeta(primaryFormat);\n\n useDismissablePopup(open, rootRef, triggerRef, () => setOpen(false));\n\n return (\n <div ref={rootRef} className=\"relative\">\n <div className=\"flex items-center gap-1\">\n <button\n type=\"button\"\n aria-label={\n label ? `Download ${primaryMeta.label} ${label}` : `Download ${primaryMeta.label}`\n }\n className=\"inline-flex items-center gap-2 rounded-md border border-input bg-background px-3 py-1.5 text-xs font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() => submitDownloadRequest(buildFormatUrl(url, primaryFormat))}\n >\n <Icon name=\"codicon:cloud-download\" className=\"text-sm\" />\n <span>{`Download ${primaryMeta.label}`}</span>\n </button>\n <button\n ref={triggerRef}\n type=\"button\"\n aria-label=\"Open download menu\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n className=\"inline-flex h-[34px] w-[34px] items-center justify-center rounded-md border border-input bg-background text-muted-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\"\n onClick={() => setOpen((current) => !current)}\n >\n <Icon name={open ? \"codicon:chevron-up\" : \"codicon:chevron-down\"} className=\"text-sm\" />\n </button>\n </div>\n\n {open && (\n <div\n role=\"menu\"\n className=\"absolute right-0 top-[calc(100%+0.375rem)] z-50 min-w-[18rem] rounded-md border border-border bg-popover p-1.5 text-popover-foreground shadow-lg shadow-black/5\"\n >\n {formats.map((format) => {\n const meta = getRemoteFormatMeta(format);\n return (\n <button\n key={format}\n type=\"button\"\n role=\"menuitem\"\n className={cn(\n \"flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:outline-none\",\n )}\n onClick={() => {\n submitDownloadRequest(buildFormatUrl(url, format));\n setOpen(false);\n }}\n >\n <Icon\n name={meta.icon}\n className=\"mt-0.5 shrink-0 text-base text-muted-foreground\"\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"font-medium\">{meta.label}</span>\n <span className=\"mt-0.5 block text-xs text-muted-foreground\">\n {meta.description}\n </span>\n </span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\nfunction useDismissablePopup(\n open: boolean,\n rootRef: RefObject<HTMLElement | null>,\n triggerRef: RefObject<HTMLElement | null>,\n onClose: () => void,\n) {\n useEffect(() => {\n if (!open) return;\n\n const onPointerDown = (event: MouseEvent) => {\n if (!rootRef.current?.contains(event.target as Node)) {\n onClose();\n }\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n triggerRef.current?.focus();\n }\n };\n\n document.addEventListener(\"mousedown\", onPointerDown);\n document.addEventListener(\"keydown\", onKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", onPointerDown);\n document.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [onClose, open, rootRef, triggerRef]);\n}\n\nexport function parseClickyData(data: ClickyProps[\"data\"]): ParsedClicky {\n if (typeof data === \"string\") {\n try {\n return normalizeClickyDocument(JSON.parse(data) as unknown);\n } catch (error) {\n return {\n ok: false,\n message: error instanceof Error ? error.message : \"Failed to parse JSON\",\n raw: data,\n };\n }\n }\n\n return normalizeClickyDocument(data);\n}\n\nfunction fetchRemoteFormat(url: string, format: ClickyRemoteFormat): Promise<ClickyRemoteResponse> {\n return fetch(url, {\n headers: {\n Accept: getRemoteFormatMeta(format).accept,\n },\n }).then(async (response) => {\n if (!response.ok) {\n throw new Error(`Request failed with ${response.status} ${response.statusText}`.trim());\n }\n\n const contentType = response.headers.get(\"Content-Type\") ?? \"\";\n\n if (format === \"excel\") {\n return {\n kind: \"blob\",\n blob: await response.blob(),\n contentType,\n };\n }\n\n return {\n kind: \"text\",\n text: await response.text(),\n contentType,\n };\n });\n}\n\nfunction ClickyInvalidPayload({\n parsed,\n className,\n}: {\n parsed: Extract<ParsedClicky, { ok: false }>;\n className?: string | undefined;\n}) {\n return (\n <div\n className={cn(\n \"rounded-md border border-destructive/30 bg-destructive/5 p-density-3\",\n className,\n )}\n >\n <div className=\"text-sm font-medium text-destructive\">Invalid Clicky payload</div>\n <pre className=\"mt-2 whitespace-pre-wrap break-all text-xs text-muted-foreground\">\n {parsed.message}\n {parsed.raw ? `\\n\\n${parsed.raw}` : \"\"}\n </pre>\n </div>\n );\n}\n\nfunction ClickyNotice({\n title,\n message,\n tone = \"default\",\n className,\n}: {\n title: string;\n message: ReactNode;\n tone?: \"default\" | \"warning\" | \"destructive\";\n className?: string | undefined;\n}) {\n return (\n <div\n className={cn(\n \"rounded-md border p-density-3\",\n tone === \"destructive\" && \"border-destructive/30 bg-destructive/5\",\n tone === \"warning\" && \"border-yellow-500/30 bg-yellow-500/5\",\n tone === \"default\" && \"border-border bg-muted/30\",\n className,\n )}\n >\n <div\n className={cn(\n \"text-sm font-medium\",\n tone === \"destructive\" && \"text-destructive\",\n tone === \"warning\" && \"text-yellow-700 dark:text-yellow-400\",\n )}\n >\n {title}\n </div>\n <div className=\"mt-1 text-xs text-muted-foreground\">{message}</div>\n </div>\n );\n}\n\nfunction ClickyPdfPreview({ src }: { src: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n <span>PDF preview</span>\n <a href={src} target=\"_blank\" rel=\"noreferrer\" className=\"text-primary hover:underline\">\n Open in new tab\n </a>\n </div>\n <iframe title=\"Clicky PDF preview\" src={src} className=\"h-[720px] w-full bg-white\" />\n </div>\n );\n}\n\nfunction ClickyHtmlPreview({ src }: { src: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2 text-xs text-muted-foreground\">\n <span>HTML preview</span>\n <a href={src} target=\"_blank\" rel=\"noreferrer\" className=\"text-primary hover:underline\">\n Open in new tab\n </a>\n </div>\n <iframe\n title=\"Clicky HTML preview\"\n src={src}\n className=\"h-[720px] w-full bg-white\"\n sandbox=\"allow-same-origin\"\n />\n </div>\n );\n}\n\nfunction ClickyUnsupportedPreview({\n title,\n message,\n href,\n}: {\n title: string;\n message: string;\n href: string;\n}) {\n return (\n <ClickyNotice\n title={title}\n message={\n <>\n <span>{message} </span>\n <a href={href} target=\"_blank\" rel=\"noreferrer\" className=\"text-primary hover:underline\">\n Open format\n </a>\n </>\n }\n />\n );\n}\n\nfunction ClickyRemotePreview({\n format,\n response,\n}: {\n format: ClickyOverflowViewFormat;\n response: ClickyRemoteResponse | undefined;\n}) {\n const meta = getRemoteFormatMeta(format);\n\n if (format === \"slack\") {\n const parsed = response?.kind === \"text\" ? parseJsonValue(response.text) : undefined;\n return <ClickyJsonTree value={parsed} emptyLabel={meta.label} />;\n }\n\n return (\n <ClickyTextPreview\n title={`${meta.label} output`}\n content={response?.kind === \"text\" ? response.text : \"\"}\n />\n );\n}\n\nfunction ClickyTextPreview({ title, content }: { title: string; content: string }) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-background\">\n <div className=\"border-b border-border px-3 py-2 text-xs text-muted-foreground\">{title}</div>\n <pre\n aria-label=\"Clicky text preview\"\n className=\"overflow-auto whitespace-pre-wrap break-words px-3 py-3 font-mono text-xs text-foreground\"\n >\n {content || \"No content\"}\n </pre>\n </div>\n );\n}\n\nfunction ClickyJsonTree({ value, emptyLabel = \"JSON\" }: { value: unknown; emptyLabel?: string }) {\n const roots = useMemo(() => buildJsonTree(value), [value]);\n\n if (value === undefined) {\n return (\n <ClickyNotice\n title={`No ${emptyLabel} payload`}\n message=\"The response did not include a JSON body to inspect.\"\n />\n );\n }\n\n return (\n <div\n aria-label=\"JSON tree\"\n className=\"overflow-hidden rounded-md border border-border bg-background\"\n >\n <Tree<JsonTreeNode>\n roots={roots}\n className=\"min-h-[12rem]\"\n showControls={roots.some((node) => (node.children?.length ?? 0) > 0)}\n getKey={(node) => node.id}\n getChildren={(node) => node.children}\n renderRow={({ node }) => <ClickyJsonTreeRow node={node} />}\n rowClass={() => \"hover:bg-accent\"}\n empty={<div className=\"px-3 py-4 text-sm text-muted-foreground\">No JSON fields.</div>}\n toolbarClassName=\"pl-3\"\n />\n </div>\n );\n}\n\nfunction ClickyJsonTreeRow({ node }: { node: JsonTreeNode }) {\n const primitiveClass =\n typeof node.value === \"string\"\n ? \"text-emerald-700 dark:text-emerald-400\"\n : typeof node.value === \"number\"\n ? \"text-sky-700 dark:text-sky-400\"\n : typeof node.value === \"boolean\" || node.value === null\n ? \"text-violet-700 dark:text-violet-400\"\n : \"text-muted-foreground\";\n\n return (\n <div className=\"flex min-w-0 items-start gap-2 font-mono text-xs\">\n <span className=\"shrink-0 text-foreground\">{node.key}</span>\n <span className=\"shrink-0 text-muted-foreground\">:</span>\n <span className={cn(\"min-w-0 break-words\", primitiveClass)}>{node.preview}</span>\n </div>\n );\n}\n\nfunction getAvailableViews({\n data,\n url,\n view,\n}: {\n data: ClickyProps[\"data\"] | undefined;\n url?: string | undefined;\n view?: ClickyViewConfig | undefined;\n}): ClickyRemoteFormat[] {\n const allowClicky = resolveViewConfigFlag(view, \"clicky\", data, url);\n const allowJson = resolveViewConfigFlag(view, \"json\", data, url);\n const next: ClickyRemoteFormat[] = [];\n\n if (allowClicky && (url || data !== undefined)) {\n next.push(\"clicky\");\n }\n\n if (allowJson && (url || data !== undefined)) {\n next.push(\"json\");\n }\n\n for (const format of CLICKY_OVERFLOW_VIEW_FORMATS) {\n if (resolveViewConfigFlag(view, format, data, url) && url) {\n next.push(format);\n }\n }\n\n if (next.length === 0 && (url || data !== undefined)) {\n next.push(\"clicky\");\n }\n\n return next;\n}\n\nfunction getDownloadFormats({\n url,\n download,\n}: {\n url?: string | undefined;\n download?: ClickyDownloadOptions | undefined;\n}): ClickyRemoteFormat[] {\n const enabled = download ? (download.all ?? true) : !!url;\n\n if (!enabled || !url) {\n return [];\n }\n\n return [...CLICKY_DOWNLOAD_FORMATS];\n}\n\nfunction getRemoteFormatMeta(format: ClickyRemoteFormat) {\n switch (format) {\n case \"clicky\":\n return {\n label: \"Clicky\",\n description: \"Rendered Clicky JSON with the rich Clicky viewer\",\n icon: \"codicon:preview\",\n accept:\n \"application/json+clicky, application/clicky+json;q=0.9, application/json;q=0.8,*/*;q=0.7\",\n };\n case \"json\":\n return {\n label: \"JSON\",\n description: \"Plain JSON for inspecting the raw response body\",\n icon: \"vscode-icons:file-type-json\",\n accept: \"application/json, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"pdf\":\n return {\n label: \"PDF\",\n description: \"Portable document for sharing and printing\",\n icon: \"vscode-icons:file-type-pdf2\",\n accept: \"application/pdf, */*;q=0.7\",\n };\n case \"html\":\n return {\n label: \"HTML\",\n description: \"Browser-ready HTML preview of the formatted output\",\n icon: \"vscode-icons:file-type-html\",\n accept: \"text/html, */*;q=0.7\",\n };\n case \"markdown\":\n return {\n label: \"Markdown\",\n description: \"Markdown formatted for docs, comments, and chat\",\n icon: \"vscode-icons:file-type-markdown\",\n accept: \"text/markdown, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"yaml\":\n return {\n label: \"YAML\",\n description: \"YAML for config-friendly inspection and export\",\n icon: \"vscode-icons:file-type-yaml\",\n accept: \"application/yaml, text/yaml;q=0.9, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"csv\":\n return {\n label: \"CSV\",\n description: \"Comma-separated values for spreadsheets and imports\",\n icon: \"codicon:table\",\n accept: \"text/csv, text/plain;q=0.8,*/*;q=0.7\",\n };\n case \"pretty\":\n return {\n label: \"Pretty\",\n description: \"Human-readable plain text output from the formatter\",\n icon: \"codicon:file-code\",\n accept: \"text/plain, */*;q=0.7\",\n };\n case \"excel\":\n return {\n label: \"Excel\",\n description: \"Spreadsheet workbook for offline analysis\",\n icon: \"codicon:table\",\n accept: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, */*;q=0.7\",\n };\n case \"slack\":\n return {\n label: \"Slack\",\n description: \"Slack Block Kit JSON for chat-native output\",\n icon: \"codicon:comment-discussion\",\n accept: \"application/vnd.slack.block-kit+json, application/json;q=0.8,*/*;q=0.7\",\n };\n }\n}\n\nfunction formatViewLabel(mode: ClickyRemoteFormat) {\n return getRemoteFormatMeta(mode).label;\n}\n\nfunction buildFormatUrl(url: string, format: ClickyRemoteFormat) {\n const base = typeof window === \"undefined\" ? \"http://localhost\" : window.location.origin;\n const resolved = new URL(url, base);\n resolved.searchParams.set(\"format\", format === \"clicky\" ? \"clicky-json\" : format);\n\n if (isAbsoluteUrl(url)) {\n return resolved.toString();\n }\n\n return `${resolved.pathname}${resolved.search}${resolved.hash}`;\n}\n\nfunction shouldFetchRemoteView(format: ClickyRemoteFormat) {\n return format !== \"pdf\" && format !== \"html\" && format !== \"excel\";\n}\n\nfunction isPrimaryViewFormat(format: ClickyRemoteFormat): format is ClickyPrimaryViewFormat {\n return (CLICKY_PRIMARY_VIEW_FORMATS as readonly string[]).includes(format);\n}\n\nfunction isOverflowViewFormat(format: ClickyRemoteFormat): format is ClickyOverflowViewFormat {\n return (CLICKY_OVERFLOW_VIEW_FORMATS as readonly string[]).includes(format);\n}\n\nfunction resolveViewConfigFlag(\n view: ClickyViewConfig | undefined,\n format: ClickyRemoteFormat,\n data: ClickyProps[\"data\"],\n url?: string,\n) {\n const defaultEnabled =\n format === \"clicky\" || format === \"json\" ? url != null || data !== undefined : !!url;\n\n if (view === undefined) {\n return defaultEnabled;\n }\n\n if (Array.isArray(view)) {\n if (view.length === 0) {\n return false;\n }\n\n if (format === \"clicky\") {\n return view.includes(\"clicky\") || view.includes(\"json\");\n }\n\n return view.includes(format);\n }\n\n if (format in view) {\n return Boolean(view[format]);\n }\n\n if (format === \"clicky\" && view.json === true) {\n return true;\n }\n\n return defaultEnabled;\n}\n\nfunction parseJsonValue(data: ClickyProps[\"data\"]): unknown {\n if (data === undefined) {\n return undefined;\n }\n\n if (typeof data !== \"string\") {\n return data;\n }\n\n const trimmed = data.trim();\n if (!trimmed) {\n return \"\";\n }\n\n try {\n return JSON.parse(trimmed) as unknown;\n } catch {\n return data;\n }\n}\n\nfunction buildJsonTree(value: unknown): JsonTreeNode[] {\n if (Array.isArray(value)) {\n return value.map((entry, index) => buildJsonTreeNode(String(index), entry, `$[${index}]`));\n }\n\n if (isPlainObject(value)) {\n return Object.entries(value).map(([key, entry]) => buildJsonTreeNode(key, entry, `$.${key}`));\n }\n\n if (value === undefined) {\n return [];\n }\n\n return [buildJsonTreeNode(\"$\", value, \"$\")];\n}\n\nfunction buildJsonTreeNode(key: string, value: unknown, id: string): JsonTreeNode {\n const children = getJsonChildren(value, id);\n return {\n id,\n key,\n value,\n preview: summarizeJsonValue(value),\n ...(children ? { children } : {}),\n };\n}\n\nfunction getJsonChildren(value: unknown, path: string) {\n if (Array.isArray(value)) {\n return value.map((entry, index) =>\n buildJsonTreeNode(String(index), entry, `${path}[${index}]`),\n );\n }\n\n if (isPlainObject(value)) {\n return Object.entries(value).map(([key, entry]) =>\n buildJsonTreeNode(key, entry, `${path}.${key}`),\n );\n }\n\n return undefined;\n}\n\nfunction summarizeJsonValue(value: unknown) {\n if (Array.isArray(value)) {\n return `[${value.length} item${value.length === 1 ? \"\" : \"s\"}]`;\n }\n\n if (isPlainObject(value)) {\n const count = Object.keys(value).length;\n return `{${count} key${count === 1 ? \"\" : \"s\"}}`;\n }\n\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n\n if (value === undefined) {\n return \"undefined\";\n }\n\n return String(value);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction submitDownloadRequest(url: string) {\n if (typeof document === \"undefined\") return;\n\n const form = document.createElement(\"form\");\n form.method = \"GET\";\n form.action = url;\n form.style.display = \"none\";\n document.body.appendChild(form);\n form.submit();\n document.body.removeChild(form);\n}\n\nfunction isAbsoluteUrl(url: string) {\n return /^[a-z][a-z\\d+\\-.]*:/i.test(url) || url.startsWith(\"//\");\n}\n\nfunction normalizeClickyDocument(data: unknown): ParsedClicky {\n if (!data || typeof data !== \"object\") {\n return {\n ok: false,\n message: \"Payload must be an object\",\n raw: String(data ?? \"\"),\n };\n }\n\n const candidate = data as Partial<ClickyDocument> & Partial<ClickyNode>;\n if (\n \"version\" in candidate &&\n candidate.version === 1 &&\n candidate.node &&\n isClickyNode(candidate.node)\n ) {\n return { ok: true, document: candidate as ClickyDocument };\n }\n\n if (isClickyNode(candidate)) {\n return { ok: true, document: { version: 1, node: candidate } };\n }\n\n return {\n ok: false,\n message: \"Payload is neither a Clicky document nor a Clicky node\",\n raw: JSON.stringify(data, null, 2),\n };\n}\n\nfunction isClickyNode(value: unknown): value is ClickyNode {\n return (\n !!value && typeof value === \"object\" && typeof (value as { kind?: unknown }).kind === \"string\"\n );\n}\n\nfunction ClickyNodeRenderer({ node }: { node: ClickyNode | null | undefined }) {\n if (!node) return null;\n\n switch (node.kind) {\n case \"text\":\n return <ClickyText node={node} />;\n case \"link\":\n return <ClickyLinkNode node={node} />;\n case \"link-command\":\n return <ClickyLinkCommandNode node={node} />;\n case \"icon\":\n return <ClickyIconNode node={node} />;\n case \"list\":\n return <ClickyList node={node} />;\n case \"map\":\n return <ClickyMap node={node} />;\n case \"table\":\n return <ClickyTable node={node} />;\n case \"tree\":\n return <ClickyTreeNode node={node} />;\n case \"code\":\n return <ClickyCodeBlock node={node} />;\n case \"collapsed\":\n return <ClickyCollapsed node={node} />;\n case \"stacktrace\":\n return <ClickyStackTraceNode node={node} />;\n case \"button\":\n return <ClickyButtonNode node={node} />;\n case \"button-group\":\n return <ClickyButtonGroup node={node} />;\n case \"html\":\n return <ClickyHtmlNode node={node} />;\n case \"comment\":\n return <ClickyComment node={node} />;\n case \"badge\":\n return <ClickyBadgeNode node={node} />;\n default:\n return (\n <pre className=\"rounded-md border border-border bg-muted p-density-3 text-xs\">\n {JSON.stringify(node, null, 2)}\n </pre>\n );\n }\n}\n\nfunction ClickyComment({ node }: { node: ClickyNode }) {\n const text = node.text ?? node.plain;\n const content = <ClickyInlineContent node={node} />;\n const maxWidth =\n node.style?.maxWidth && node.style.maxWidth > 0 ? Math.min(node.style.maxWidth, 50) : 50;\n const maxLines =\n node.style?.maxLines && node.style.maxLines > 0 ? Math.min(node.style.maxLines, 3) : 3;\n const inlineStyle = toInlineStyle(\n {\n ...node.style,\n maxWidth,\n maxLines,\n },\n text,\n );\n\n if (!text && !node.children?.length) return null;\n\n return (\n <div\n className={cn(\"mt-1 text-xs leading-snug text-muted-foreground\", node.style?.className)}\n style={inlineStyle}\n title={node.tooltip?.plain ?? text}\n >\n {content}\n </div>\n );\n}\n\nfunction ClickyText({ node }: { node: ClickyNode }) {\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n const content = <ClickyInlineContent node={node} />;\n\n if (!node.style && !node.tooltip) {\n return <>{content}</>;\n }\n\n return (\n <span\n style={inlineStyle}\n title={node.tooltip?.plain}\n className={cn(\n node.style?.className,\n (node.text ?? \"\").includes(\"\\n\") && \"whitespace-pre-wrap\",\n )}\n >\n {content}\n </span>\n );\n}\n\nfunction ClickyInlineContent({ node }: { node: ClickyNode }) {\n return (\n <>\n {node.text}\n {node.children?.map((child, index) => (\n <Fragment key={index}>\n <ClickyNodeRenderer node={child} />\n </Fragment>\n ))}\n </>\n );\n}\n\nfunction ClickyLinkNode({ node }: { node: ClickyNode }) {\n const content = <ClickyInlineContent node={node} />;\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n const target = browserAnchorTarget(node.target);\n const rel = target === \"_blank\" ? \"noopener noreferrer\" : undefined;\n\n if (!node.href) {\n return <span style={inlineStyle}>{content}</span>;\n }\n\n return (\n <a\n href={node.href}\n target={target}\n rel={rel}\n title={node.tooltip?.plain}\n style={inlineStyle}\n className={cn(node.style?.className, \"inline cursor-pointer\")}\n >\n {content}\n </a>\n );\n}\n\nfunction ClickyLinkCommandNode({ node }: { node: ClickyNode }) {\n const runtime = useContext(ClickyRuntimeContext);\n const request = useMemo(() => clickyNodeToCommandRequest(node), [node]);\n const resolved = useMemo(\n () => resolveClickyCommand(request, runtime.commandRuntime, runtime.operations),\n [request, runtime.commandRuntime, runtime.operations],\n );\n const target = request.target ?? \"Dialog\";\n const hasRuntime = runtime.commandRuntime != null;\n const [dialogOpen, setDialogOpen] = useState(false);\n const [expanded, setExpanded] = useState(false);\n\n if (!hasRuntime) {\n return (\n <span title={node.tooltip?.plain} className={cn(node.style?.className)}>\n <ClickyInlineContent node={node} />\n </span>\n );\n }\n\n if (target === \"_self\" || target === \"_window\" || target === \"_tab\") {\n const href =\n runtime.commandRuntime?.hrefForCommand?.(resolved) ?? buildCommandExecutionHref(resolved);\n\n if (!href) {\n return (\n <span title={node.tooltip?.plain} className={cn(node.style?.className)}>\n <ClickyInlineContent node={node} />\n </span>\n );\n }\n\n return (\n <a\n href={href}\n target={browserAnchorTarget(target)}\n rel={target === \"_self\" ? undefined : \"noopener noreferrer\"}\n title={node.tooltip?.plain}\n style={toInlineStyle(node.style, node.text ?? node.plain)}\n className={cn(node.style?.className, \"inline cursor-pointer\")}\n >\n <ClickyInlineContent node={node} />\n </a>\n );\n }\n\n if (target === \"_clicky\") {\n return (\n <ClickyLinkCommandTrigger\n node={node}\n onClick={() => runtime.commandRuntime?.onNavigate?.(resolved)}\n />\n );\n }\n\n if (target === \"Hover\") {\n return (\n <HoverCard\n delay={75}\n cardClassName=\"w-[28rem] max-w-[calc(100vw-2rem)] whitespace-normal p-0\"\n trigger={<ClickyLinkCommandTrigger node={node} />}\n >\n <div className=\"max-h-[26rem] overflow-auto p-density-3\">\n <ClickyAsyncCommandResult resolved={resolved} />\n </div>\n </HoverCard>\n );\n }\n\n if (target === \"Expand\") {\n return (\n <span className=\"inline\">\n <ClickyLinkCommandTrigger\n node={node}\n ariaExpanded={expanded}\n onClick={() => setExpanded((current) => !current)}\n />\n {expanded && (\n <div className=\"mt-2 rounded-md border border-border bg-background p-density-3\">\n <ClickyAsyncCommandResult resolved={resolved} />\n </div>\n )}\n </span>\n );\n }\n\n return (\n <>\n <ClickyLinkCommandTrigger\n node={node}\n ariaExpanded={dialogOpen}\n onClick={() => setDialogOpen(true)}\n />\n <ClickyCommandDialog\n open={dialogOpen}\n onClose={() => setDialogOpen(false)}\n resolved={resolved}\n />\n </>\n );\n}\n\nfunction ClickyLinkCommandTrigger({\n node,\n onClick,\n ariaExpanded,\n}: {\n node: ClickyNode;\n onClick?: () => void;\n ariaExpanded?: boolean;\n}) {\n const inlineStyle = toInlineStyle(node.style, node.text ?? node.plain);\n\n const handleClick = (event: ReactMouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n onClick?.();\n };\n\n return (\n <button\n type=\"button\"\n title={node.tooltip?.plain}\n aria-expanded={ariaExpanded}\n onClick={handleClick}\n style={inlineStyle}\n className={cn(\n \"inline cursor-pointer appearance-none border-0 bg-transparent p-0 text-left align-baseline text-inherit\",\n node.style?.className,\n )}\n >\n <ClickyInlineContent node={node} />\n </button>\n );\n}\n\nfunction ClickyCommandDialog({\n open,\n onClose,\n resolved,\n}: {\n open: boolean;\n onClose: () => void;\n resolved: ClickyResolvedCommand;\n}) {\n const runtime = useContext(ClickyRuntimeContext);\n const operation = resolved.operation;\n const parameters = operation?.operation.parameters ?? [];\n const initialValues = useMemo(\n () => buildCommandParameterValues(parameters, resolved.request),\n [parameters, resolved.request],\n );\n const [result, setResult] = useState<unknown>(null);\n const [error, setError] = useState(\"\");\n const [isExecuting, setIsExecuting] = useState(false);\n const [hasAutoStarted, setHasAutoStarted] = useState(false);\n const shouldAutoRun =\n open &&\n resolved.request.autoRun === true &&\n operation != null &&\n missingRequiredParameters(parameters, initialValues).length === 0;\n\n useEffect(() => {\n if (!open) {\n setHasAutoStarted(false);\n setResult(null);\n setError(\"\");\n }\n }, [open, resolved.request.command]);\n\n async function runCommand(values: ParameterValues) {\n if (!runtime.commandRuntime || !operation) {\n return;\n }\n\n setIsExecuting(true);\n setError(\"\");\n\n try {\n const response = await executeClickyCommand(runtime.commandRuntime.client, operation, values);\n setResult(response);\n } catch (err) {\n setResult(null);\n setError(err instanceof Error ? err.message : String(err ?? \"Unknown error\"));\n } finally {\n setIsExecuting(false);\n }\n }\n\n useEffect(() => {\n if (!shouldAutoRun || hasAutoStarted) {\n return;\n }\n\n setHasAutoStarted(true);\n void runCommand(initialValues);\n }, [hasAutoStarted, initialValues, shouldAutoRun]);\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n title={operation?.operation.summary || resolved.request.command}\n size=\"xl\"\n >\n <div className=\"space-y-4\">\n {operation ? (\n <div className=\"flex flex-wrap items-center gap-3 text-xs text-muted-foreground\">\n <span className=\"rounded-md border border-border bg-muted px-2 py-1 font-medium uppercase\">\n {operation.method}\n </span>\n <code>{operation.path}</code>\n </div>\n ) : runtime.operationsLoading ? (\n <ClickyNotice title=\"Loading commands\" message=\"Resolving the command definition.\" />\n ) : (\n <ClickyNotice\n title=\"Unknown command\"\n message={`No operation matched \"${resolved.request.command}\".`}\n tone=\"destructive\"\n />\n )}\n\n {operation && (\n <div className=\"rounded-md border border-border bg-muted/20 p-density-3\">\n <FilterForm\n client={runtime.commandRuntime!.client}\n path={operation.path}\n method={operation.method}\n parameters={parameters}\n initialValues={initialValues}\n isSubmitting={isExecuting}\n submitLabel=\"Run command\"\n submittingLabel=\"Running…\"\n onSubmit={runCommand}\n />\n </div>\n )}\n\n {error ? (\n <ClickyNotice title=\"Command failed\" message={error} tone=\"destructive\" />\n ) : (\n <ClickyCommandResponse\n response={result}\n pending={isExecuting}\n emptyMessage=\"Run the command to load a Clicky response.\"\n />\n )}\n </div>\n </Modal>\n );\n}\n\nfunction ClickyAsyncCommandResult({ resolved }: { resolved: ClickyResolvedCommand }) {\n const runtime = useContext(ClickyRuntimeContext);\n const operation = resolved.operation;\n const parameters = operation?.operation.parameters ?? [];\n const initialValues = useMemo(\n () => buildCommandParameterValues(parameters, resolved.request),\n [parameters, resolved.request],\n );\n const missing = useMemo(\n () => missingRequiredParameters(parameters, initialValues),\n [initialValues, parameters],\n );\n\n const query = useQuery({\n queryKey: [\n \"clicky-command\",\n resolved.request.command,\n operation?.method,\n operation?.path,\n initialValues,\n ],\n enabled: runtime.commandRuntime != null && operation != null && missing.length === 0,\n retry: 0,\n queryFn: async () =>\n executeClickyCommand(runtime.commandRuntime!.client, operation!, initialValues),\n });\n\n if (!runtime.commandRuntime) {\n return (\n <ClickyNotice\n title=\"Command runtime unavailable\"\n message=\"This Clicky view was rendered without a command runtime.\"\n tone=\"warning\"\n />\n );\n }\n\n if (!operation) {\n if (runtime.operationsLoading) {\n return <ClickyNotice title=\"Loading commands\" message=\"Resolving the command definition.\" />;\n }\n return (\n <ClickyNotice\n title=\"Unknown command\"\n message={`No operation matched \"${resolved.request.command}\".`}\n tone=\"destructive\"\n />\n );\n }\n\n if (missing.length > 0) {\n return (\n <ClickyNotice\n title=\"Missing required parameters\"\n message={`This link is missing: ${missing.map((param) => prettifyName(param.name)).join(\", \")}.`}\n tone=\"warning\"\n />\n );\n }\n\n if (query.isPending) {\n return <ClickyNotice title=\"Running command\" message=\"Loading Clicky response…\" />;\n }\n\n if (query.isError) {\n return (\n <ClickyNotice\n title=\"Command failed\"\n message={query.error instanceof Error ? query.error.message : \"Request failed\"}\n tone=\"destructive\"\n />\n );\n }\n\n return <ClickyCommandResponse response={query.data} emptyMessage=\"No response body returned.\" />;\n}\n\nfunction ClickyCommandResponse({\n response,\n pending = false,\n emptyMessage,\n}: {\n response: unknown;\n pending?: boolean;\n emptyMessage: string;\n}) {\n if (pending) {\n return <ClickyNotice title=\"Running command\" message=\"Loading Clicky response…\" />;\n }\n\n if (!response) {\n return <ClickyNotice title=\"No response\" message={emptyMessage} />;\n }\n\n const parsedPayload = isExecutionResponse(response)\n ? (response.parsed ?? parseJsonBody(response))\n : response;\n const rawText = isExecutionResponse(response)\n ? response.stdout || response.output || response.message || \"\"\n : typeof response === \"string\"\n ? response\n : JSON.stringify(response, null, 2);\n const clickyPayload =\n typeof parsedPayload === \"string\" ||\n (parsedPayload != null && typeof parsedPayload === \"object\")\n ? parsedPayload\n : rawText;\n const parsedClicky =\n clickyPayload === \"\" ? null : parseClickyData(clickyPayload as ClickyProps[\"data\"]);\n\n if (parsedClicky?.ok) {\n return (\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={parsedClicky.document.node} />\n </div>\n );\n }\n\n if (parsedPayload != null && typeof parsedPayload === \"object\") {\n return <ClickyJsonTree value={parsedPayload} />;\n }\n\n return <ClickyTextPreview title=\"Response body\" content={rawText} />;\n}\n\nfunction ClickyIconNode({ node }: { node: ClickyNode }) {\n const inlineStyle = toInlineStyle(node.style, node.plain ?? node.unicode);\n\n return (\n <span style={inlineStyle} title={node.tooltip?.plain} className=\"inline-flex items-center\">\n {node.iconify ? <Icon name={node.iconify} /> : <span>{node.unicode ?? node.plain}</span>}\n </span>\n );\n}\n\nfunction ClickyList({ node }: { node: ClickyNode }) {\n const items = node.items ?? [];\n if (items.length === 0) return null;\n\n if (node.inline) {\n return (\n <span className=\"inline-flex flex-wrap items-start gap-1\">\n {items.map((item, index) => (\n <Fragment key={index}>\n {index > 0 && <span className=\"text-muted-foreground\">,</span>}\n <span className=\"inline-flex items-center gap-1\">\n {!node.ordered && node.bullet && <ClickyNodeRenderer node={node.bullet} />}\n {node.ordered && <span className=\"text-muted-foreground\">{index + 1}.</span>}\n <ClickyNodeRenderer node={item} />\n </span>\n </Fragment>\n ))}\n </span>\n );\n }\n\n if (node.unstyled) {\n return (\n <div className=\"space-y-1\">\n {items.map((item, index) => (\n <div key={index} className=\"flex items-start gap-2\">\n {!node.ordered && node.bullet && <ClickyNodeRenderer node={node.bullet} />}\n {node.ordered && <span className=\"text-muted-foreground\">{index + 1}.</span>}\n <div className=\"min-w-0 flex-1\">\n <ClickyNodeRenderer node={item} />\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n const Tag = node.ordered ? \"ol\" : \"ul\";\n const listClass = node.ordered ? \"list-decimal\" : \"list-disc\";\n\n return (\n <Tag className={cn(\"ml-5 space-y-1 text-sm\", listClass)}>\n {items.map((item, index) => (\n <li key={index}>\n <ClickyNodeRenderer node={item} />\n </li>\n ))}\n </Tag>\n );\n}\n\nfunction ClickyMap({ node }: { node: ClickyNode }) {\n const fields = node.fields ?? [];\n if (fields.length === 0) return null;\n\n const inlineFields = fields.filter((field) => isInlineNode(field.value));\n const blockFields = fields.filter((field) => !isInlineNode(field.value));\n\n return (\n <div className=\"space-y-density-4\">\n {inlineFields.length > 0 && (\n <dl className=\"grid gap-density-3 md:grid-cols-2\">\n {inlineFields.map((field) => (\n <div key={field.name}>\n <dt className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {field.label || prettifyName(field.name)}\n </dt>\n <dd className=\"mt-1 text-sm text-foreground\">\n <ClickyNodeRenderer node={field.value} />\n </dd>\n </div>\n ))}\n </dl>\n )}\n\n {blockFields.map((field) => (\n <section key={field.name} className=\"space-y-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {field.label || prettifyName(field.name)}\n </div>\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={field.value} />\n </div>\n </section>\n ))}\n </div>\n );\n}\n\nfunction ClickyTable({ node }: { node: ClickyNode }) {\n const runtime = useContext(ClickyRuntimeContext);\n const columns = node.columns ?? [];\n const rows = node.rows ?? [];\n\n if (columns.length === 0 || rows.length === 0) {\n return <div className=\"text-sm text-muted-foreground\">No data</div>;\n }\n\n if (shouldRenderRowsAsCollapsedStructs(columns, rows)) {\n return <ClickyCollapsedStructRows columns={columns} rows={rows} />;\n }\n\n const tableColumns: DataTableColumn<ClickyRow>[] = columns.map((column) => {\n const tagColumn = isClickyTagColumn(column);\n const base: DataTableColumn<ClickyRow> = {\n key: `cells.${column.name}`,\n label: column.header ? (\n <ClickyNodeRenderer node={column.header} />\n ) : (\n column.label || prettifyName(column.name)\n ),\n ...(column.align ? { align: column.align } : {}),\n ...(column.sortable !== undefined ? { sortable: column.sortable } : {}),\n ...(column.filterable !== undefined ? { filterable: column.filterable } : {}),\n ...(column.grow !== undefined ? { grow: column.grow } : {}),\n ...(column.shrink !== undefined ? { shrink: column.shrink } : {}),\n };\n\n if (tagColumn) {\n return {\n ...base,\n kind: \"tags\",\n render: (value) => {\n const tags = clickyNodeTags(value as ClickyNode, column);\n return <TagList tags={tags} maxVisible={3} />;\n },\n sortValue: (value) => clickyNodeTags(value as ClickyNode, column).length,\n filterValue: (value) => clickyNodeTags(value as ClickyNode, column).map((tag) => tag.token),\n };\n }\n\n return {\n ...base,\n ...(column.kind ? { kind: column.kind } : {}),\n render: (value) => <ClickyNodeRenderer node={value as ClickyNode} />,\n sortValue: (value) => clickyNodeText(value as ClickyNode),\n filterValue: (value) => clickyNodeText(value as ClickyNode),\n };\n });\n\n const defaultSortColumn = columns.find((column) => column.sortable !== false) ?? columns[0];\n\n return (\n <DataTable<ClickyRow>\n data={rows}\n columns={tableColumns}\n {...(node.autoFilter !== undefined ? { autoFilter: node.autoFilter } : {})}\n {...(defaultSortColumn\n ? { defaultSort: { key: `cells.${defaultSortColumn.name}`, dir: \"asc\" as const } }\n : {})}\n getRowId={(row, index) =>\n `${index}-${columns\n .map((column) => clickyNodeText(row.cells[column.name]))\n .filter(Boolean)\n .join(\"|\")}`\n }\n renderExpandedRow={(row, context) => (\n <ClickyTableRowDetail row={row} columns={columns} context={context} />\n )}\n {...(runtime.onTableRowClick ? { onRowClick: runtime.onTableRowClick } : {})}\n {...(runtime.getTableRowHref ? { getRowHref: runtime.getTableRowHref } : {})}\n {...(runtime.onTableRowClick && (runtime.isTableRowClickable || runtime.getTableRowHref)\n ? {\n isRowClickable:\n runtime.isTableRowClickable ?? ((row) => Boolean(runtime.getTableRowHref?.(row))),\n }\n : {})}\n />\n );\n}\n\nfunction ClickyTableRowDetail({\n row,\n columns,\n context,\n}: {\n row: ClickyRow;\n columns: ClickyColumn[];\n context: DataTableRowDetailContext<ClickyRow>;\n}) {\n const tagFields = columns\n .map((column) => ({\n column,\n tags: clickyNodeTags(row.cells[column.name], column),\n tableKey: `cells.${column.name}`,\n }))\n .filter((field) => field.tags.length > 0);\n\n return (\n <div className=\"space-y-3\">\n {tagFields.length > 0 && (\n <section className=\"space-y-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Tags\n </div>\n <div className=\"grid gap-2\">\n {tagFields.map(({ column, tags, tableKey }) => {\n const tagActions = context.tagActionsByColumn[tableKey];\n const content = <TagList tags={tags} maxVisible={tags.length} actions=\"inline\" />;\n\n return (\n <div\n key={column.name}\n className=\"grid gap-2 rounded-md border border-border bg-background p-2 md:grid-cols-[9rem_minmax(0,1fr)]\"\n >\n <div className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {column.label || prettifyName(column.name)}\n </div>\n <div className=\"min-w-0\">\n {tagActions ? (\n <TagActionsProvider value={tagActions}>{content}</TagActionsProvider>\n ) : (\n content\n )}\n </div>\n </div>\n );\n })}\n </div>\n </section>\n )}\n\n <section className=\"space-y-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Fields\n </div>\n <dl className=\"grid gap-2 md:grid-cols-2\">\n {columns.map((column) => (\n <div key={column.name} className=\"rounded-md border border-border bg-background p-2\">\n <dt className=\"text-xs font-medium uppercase tracking-wide text-muted-foreground\">\n {column.label || prettifyName(column.name)}\n </dt>\n <dd className=\"mt-1 min-w-0 text-sm text-foreground\">\n <ClickyNodeRenderer node={row.cells[column.name]} />\n </dd>\n </div>\n ))}\n </dl>\n </section>\n\n {row.detail && (\n <section className=\"space-y-2\">\n <div className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n Detail\n </div>\n <div className=\"rounded-md border border-border bg-background p-density-3\">\n <ClickyNodeRenderer node={row.detail} />\n </div>\n </section>\n )}\n </div>\n );\n}\n\nfunction ClickyCollapsedStructRows({\n columns,\n rows,\n}: {\n columns: ClickyColumn[];\n rows: ClickyRow[];\n}) {\n return (\n <div className=\"space-y-2\">\n {rows.map((row, index) => {\n const label = rowStructLabel(row, columns, index);\n const content = rowAsMap(row, columns);\n\n return (\n <details\n key={rowStructKey(row, columns, index)}\n className=\"rounded-md border border-border bg-background\"\n >\n <summary className=\"cursor-pointer px-3 py-2 text-sm font-medium text-foreground\">\n {label}\n </summary>\n <div className=\"border-t border-border p-3\">\n <ClickyMap node={content} />\n </div>\n </details>\n );\n })}\n </div>\n );\n}\n\nfunction shouldRenderRowsAsCollapsedStructs(columns: ClickyColumn[], rows: ClickyRow[]) {\n if (rows.length === 0) return false;\n\n return rows.every((row) => {\n const cells = columns.map((column) => row.cells[column.name]).filter(Boolean);\n if (cells.length === 0) return false;\n\n const complexCells = cells.filter(isStructCellNode);\n return complexCells.length > 0 && complexCells.length === cells.length;\n });\n}\n\nfunction isClickyTagColumn(column: ClickyColumn) {\n if (column.kind === \"tags\") return true;\n\n const normalized = column.name.toLowerCase();\n return /(^|[._-])(tags?|labels?|annotations?)$/.test(normalized);\n}\n\nfunction clickyNodeTags(node: ClickyNode | undefined, column: ClickyColumn): NormalizedTag[] {\n if (!isClickyTagColumn(column)) return [];\n\n const value = clickyNodeTagsValue(node);\n return normalizeTags(value);\n}\n\nfunction clickyNodeTagsValue(node: ClickyNode | undefined): TagsValue {\n if (!node) return [];\n\n if (node.kind === \"map\" && node.fields?.length) {\n return Object.fromEntries(\n node.fields\n .map((field) => [field.name, clickyNodeText(field.value)] as const)\n .filter(([, value]) => value.trim() !== \"\"),\n );\n }\n\n if (node.kind === \"list\" && node.items?.length) {\n return node.items.map((item) => clickyNodeText(item)).filter(Boolean);\n }\n\n const text = clickyNodeText(node).trim();\n if (!text) return [];\n\n return text\n .split(/[,\\s]+/)\n .map((value) => value.trim())\n .filter(Boolean);\n}\n\nfunction isStructCellNode(node: ClickyNode | undefined) {\n if (!node) return false;\n if (node.kind === \"map\") return (node.fields ?? []).length > 0;\n if (node.kind === \"table\") return (node.rows ?? []).length > 0;\n if (node.kind !== \"list\") return false;\n\n const items = node.items ?? [];\n return items.length > 0 && items.every(isStructCellNode);\n}\n\nfunction rowAsMap(row: ClickyRow, columns: ClickyColumn[]): ClickyNode {\n return {\n kind: \"map\",\n fields: columns.flatMap((column) => {\n const value = row.cells[column.name];\n if (!value) return [];\n return [\n {\n name: column.name,\n label: clickyNodeText(column.header) || column.label || prettifyName(column.name),\n value,\n },\n ];\n }),\n };\n}\n\nfunction rowStructLabel(row: ClickyRow, columns: ClickyColumn[], index: number) {\n const entityLabel = singularizeLabel(\n columns.find((column) => hasMeaningfulText(row.cells[column.name]))?.label ??\n columns[0]?.label ??\n columns[0]?.name ??\n \"Item\",\n );\n const title = rowTitle(row, columns);\n return title ? `${entityLabel} ${index + 1}: ${title}` : `${entityLabel} ${index + 1}`;\n}\n\nfunction rowStructKey(row: ClickyRow, columns: ClickyColumn[], index: number) {\n const title = rowTitle(row, columns);\n return `${index}-${title || columns.map((column) => clickyNodeText(row.cells[column.name])).join(\"|\")}`;\n}\n\nfunction rowTitle(row: ClickyRow, columns: ClickyColumn[]) {\n const preferredFieldNames = [\n \"name\",\n \"title\",\n \"agreementname\",\n \"companyname\",\n \"customernumber\",\n \"id\",\n \"guid\",\n ];\n\n for (const preferred of preferredFieldNames) {\n for (const column of columns) {\n const candidate = findFieldText(row.cells[column.name], preferred);\n if (candidate) return candidate;\n }\n }\n\n for (const column of columns) {\n const candidate = clickyNodeText(row.cells[column.name]).trim();\n if (candidate) return candidate;\n }\n\n return \"\";\n}\n\nfunction findFieldText(node: ClickyNode | undefined, preferredName: string): string {\n if (!node) return \"\";\n\n if (node.kind === \"map\") {\n for (const field of node.fields ?? []) {\n if (normalizeFieldName(field.name) === preferredName) {\n const text = clickyNodeText(field.value).trim();\n if (text) return text;\n }\n }\n }\n\n for (const field of node.fields ?? []) {\n const text = findFieldText(field.value, preferredName);\n if (text) return text;\n }\n\n for (const item of node.items ?? []) {\n const text = findFieldText(item, preferredName);\n if (text) return text;\n }\n\n return \"\";\n}\n\nfunction hasMeaningfulText(node: ClickyNode | undefined) {\n return Boolean(clickyNodeText(node).trim() || (node?.fields ?? []).length > 0);\n}\n\nfunction normalizeFieldName(name: string) {\n return name.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n}\n\nfunction singularizeLabel(label: string) {\n const normalized = prettifyName(label).trim();\n return normalized.endsWith(\"s\") ? normalized.slice(0, -1) : normalized;\n}\n\nfunction ClickyTreeNode({ node }: { node: ClickyNode }) {\n const roots = node.roots ?? [];\n if (roots.length === 0) return null;\n\n return (\n <Tree<ClickyTreeItem>\n roots={roots}\n getChildren={(item) => item.children}\n getKey={(item) => item.id}\n defaultOpen={(_, depth) => depth < 1}\n renderRow={({ node: item }) => (\n <div className=\"min-w-0 flex-1 truncate\">\n <ClickyNodeRenderer node={item.label} />\n </div>\n )}\n />\n );\n}\n\nfunction ClickyCodeBlock({ node }: { node: ClickyNode }) {\n const language = (node.language ?? \"\").toLowerCase().replace(/^\\.+/, \"\");\n const source = node.source ?? node.plain ?? \"\";\n const chromaHtml = node.highlightedHtml ? sanitizeHtml(node.highlightedHtml) : \"\";\n\n // JSON gets the interactive collapsible viewer instead of raw chroma\n // output — operators read structured payloads (intake XMLData decoded\n // to JSON, OpenAPI responses, etc.) far faster when the viewer lets\n // them fold deep objects rather than scroll through highlighted text.\n // Falls back to the chroma / Shiki path when the source can't be parsed\n // (truncated payload, intentional pretty-printed-with-comments, etc.).\n const parsedJson = useMemo(\n () => (language === \"json\" ? tryParseJson(source) : JSON_PARSE_FAILED),\n [language, source],\n );\n\n // Hooks below must run unconditionally regardless of which render branch\n // wins, so they live above any early returns.\n const [shikiHtml, setShikiHtml] = useState<string | null>(null);\n const wantsClientHighlight = !chromaHtml && !!language && !!source;\n\n useEffect(() => {\n if (!wantsClientHighlight) {\n setShikiHtml(null);\n return;\n }\n let cancelled = false;\n highlightCode(source, { lang: language }).then((out) => {\n if (!cancelled) setShikiHtml(out);\n });\n return () => {\n cancelled = true;\n };\n }, [wantsClientHighlight, language, source]);\n\n if (parsedJson !== JSON_PARSE_FAILED) {\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-muted/40\">\n <div className=\"border-b border-border px-3 py-1.5 text-[11px] uppercase tracking-wide text-muted-foreground\">\n json\n </div>\n <div className=\"overflow-auto p-3 text-xs\">\n <JsonView data={parsedJson} defaultOpenDepth={2} />\n </div>\n </div>\n );\n }\n\n // XML gets a tighter Tailwind ruleset that targets chroma's class names\n // (the chroma html formatter emits .nt for tags, .na for attribute\n // names, .s for strings, .c for comments). Without this, XML renders\n // identically to plain text and operators reading large stacks or\n // walked AsActivity payloads can't visually pick out the structure.\n const xmlClasses =\n language === \"xml\" || language === \"xslt\" || language === \"html\"\n ? \" [&_.chroma_.nt]:text-pink-700 [&_.chroma_.nt]:dark:text-pink-300 [&_.chroma_.nt]:font-semibold\" +\n \" [&_.chroma_.na]:text-amber-700 [&_.chroma_.na]:dark:text-amber-300\" +\n \" [&_.chroma_.s]:text-emerald-700 [&_.chroma_.s]:dark:text-emerald-300\" +\n \" [&_.chroma_.c]:text-slate-500 [&_.chroma_.c]:italic\" +\n \" [&_.chroma_.cp]:text-slate-500 [&_.chroma_.cp]:italic\" +\n \" [&_pre]:leading-relaxed\"\n : \"\";\n\n return (\n <div className=\"overflow-hidden rounded-md border border-border bg-muted/40\">\n <div className=\"border-b border-border px-3 py-1.5 text-[11px] uppercase tracking-wide text-muted-foreground\">\n {node.language || \"text\"}\n </div>\n {chromaHtml ? (\n <div\n className={\n \"overflow-auto p-3 text-xs font-mono [&_.chroma]:bg-transparent [&_pre]:m-0 [&_pre]:whitespace-pre-wrap [&_pre]:bg-transparent\" +\n xmlClasses\n }\n dangerouslySetInnerHTML={{ __html: chromaHtml }}\n />\n ) : shikiHtml ? (\n <div\n className=\"overflow-auto p-3 text-xs font-mono [&_pre]:m-0 [&_pre.shiki]:!bg-transparent [&_pre]:whitespace-pre-wrap\"\n dangerouslySetInnerHTML={{ __html: shikiHtml }}\n />\n ) : (\n <pre className=\"overflow-auto whitespace-pre-wrap break-words p-3 text-xs font-mono text-foreground\">\n {source}\n </pre>\n )}\n </div>\n );\n}\n\n// JSON_PARSE_FAILED is a sentinel distinct from any value that valid\n// JSON can produce (`undefined` is not legal JSON, but a JSON document\n// could legitimately parse to `null`, `false`, `0`, `\"\"`, etc.). Using a\n// fresh object reference lets the caller branch with strict equality.\nconst JSON_PARSE_FAILED: unique symbol = Symbol(\"json-parse-failed\");\n\nfunction tryParseJson(source: string): unknown | typeof JSON_PARSE_FAILED {\n const trimmed = source.trim();\n if (!trimmed) return JSON_PARSE_FAILED;\n try {\n return JSON.parse(trimmed);\n } catch {\n return JSON_PARSE_FAILED;\n }\n}\n\nfunction isBadgeShape(value: string | undefined): value is BadgeShape {\n return value === \"pill\" || value === \"rounded\" || value === \"square\";\n}\n\nfunction ClickyBadgeNode({ node }: { node: ClickyNode }) {\n const props: ComponentProps<typeof Badge> = { variant: \"label\" };\n if (node.badgeLabel !== undefined) props.label = node.badgeLabel;\n if (node.badgeValue !== undefined) props.value = node.badgeValue;\n if (node.badgeColor !== undefined) props.color = node.badgeColor;\n if (node.badgeText !== undefined) props.textColor = node.badgeText;\n if (node.badgeIcon !== undefined) props.icon = node.badgeIcon;\n if (isBadgeShape(node.badgeShape)) props.shape = node.badgeShape;\n return <Badge {...props} />;\n}\n\nfunction ClickyStackTraceNode({ node }: { node: ClickyNode }) {\n const input = {\n causedBy: node.causedBy ?? [],\n frames: node.frames ?? [],\n language: \"java\" as const,\n ...(node.exceptionClass !== undefined ? { exceptionClass: node.exceptionClass } : {}),\n ...(node.message !== undefined ? { message: node.message } : {}),\n };\n\n return <StackTrace input={input} className=\"space-y-1\" />;\n}\n\nfunction ClickyCollapsed({ node }: { node: ClickyNode }) {\n return (\n <details className=\"rounded-md border border-border bg-background\">\n <summary className=\"cursor-pointer px-3 py-2 text-sm font-medium text-foreground\">\n <ClickyNodeRenderer node={node.label} />\n </summary>\n {node.content && (\n <div className=\"border-t border-border px-3 py-3\">\n <ClickyNodeRenderer node={node.content} />\n </div>\n )}\n </details>\n );\n}\n\nfunction ClickyButtonNode({ node }: { node: ClickyNode }) {\n const title = [node.id, node.payload].filter(Boolean).join(\"\\n\") || undefined;\n const content = node.label ? <ClickyNodeRenderer node={node.label} /> : node.text;\n\n if (node.href) {\n return (\n <a\n href={node.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n title={title}\n className=\"inline-flex items-center rounded-md border border-border bg-background px-3 py-1.5 text-sm font-medium text-foreground hover:bg-accent\"\n >\n {content}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n title={title}\n className=\"inline-flex items-center rounded-md border border-border bg-muted px-3 py-1.5 text-sm font-medium text-foreground\"\n >\n {content}\n </button>\n );\n}\n\nfunction ClickyButtonGroup({ node }: { node: ClickyNode }) {\n const items = node.items ?? [];\n if (items.length === 0) return null;\n\n return (\n <div className=\"flex flex-wrap gap-2\">\n {items.map((item, index) => (\n <ClickyNodeRenderer key={index} node={item} />\n ))}\n </div>\n );\n}\n\nfunction ClickyHtmlNode({ node }: { node: ClickyNode }) {\n const sanitized = sanitizeHtml(node.html ?? \"\");\n if (!sanitized) return null;\n\n const Tag = isBlockHtml(sanitized) ? \"div\" : \"span\";\n return <Tag dangerouslySetInnerHTML={{ __html: sanitized }} />;\n}\n\nfunction toInlineStyle(style?: ClickyStyle, text?: string): CSSProperties | undefined {\n if (!style) return text?.includes(\"\\n\") ? { whiteSpace: \"pre-wrap\" } : undefined;\n\n const inlineStyle: CSSProperties = {};\n\n if (style.color) inlineStyle.color = style.color;\n if (style.backgroundColor) inlineStyle.backgroundColor = style.backgroundColor;\n if (style.bold) inlineStyle.fontWeight = 700;\n if (style.faint) inlineStyle.opacity = 0.7;\n if (style.italic) inlineStyle.fontStyle = \"italic\";\n\n const decorations: string[] = [];\n if (style.underline) decorations.push(\"underline\");\n if (style.strikethrough) decorations.push(\"line-through\");\n if (decorations.length > 0) inlineStyle.textDecoration = decorations.join(\" \");\n\n if (\n style.textTransform === \"uppercase\" ||\n style.textTransform === \"lowercase\" ||\n style.textTransform === \"capitalize\"\n ) {\n inlineStyle.textTransform = style.textTransform;\n }\n\n if (style.maxWidth && style.maxWidth > 0) {\n inlineStyle.maxWidth = `${style.maxWidth}ch`;\n }\n\n if (style.maxLines && style.maxLines > 0) {\n inlineStyle.display = \"-webkit-box\";\n inlineStyle.overflow = \"hidden\";\n inlineStyle.WebkitLineClamp = style.maxLines;\n inlineStyle.WebkitBoxOrient = \"vertical\";\n inlineStyle.whiteSpace = \"pre-wrap\";\n }\n\n if (\n style.truncateMode === \"suffix\" &&\n style.maxWidth &&\n (!style.maxLines || style.maxLines <= 1)\n ) {\n inlineStyle.overflow = \"hidden\";\n inlineStyle.textOverflow = \"ellipsis\";\n inlineStyle.whiteSpace = \"nowrap\";\n inlineStyle.display = \"inline-block\";\n inlineStyle.verticalAlign = \"bottom\";\n }\n\n if (style.monospace) {\n inlineStyle.fontFamily =\n 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace';\n }\n\n if (!inlineStyle.whiteSpace && text?.includes(\"\\n\")) {\n inlineStyle.whiteSpace = \"pre-wrap\";\n }\n\n return Object.keys(inlineStyle).length > 0 ? inlineStyle : undefined;\n}\n\nfunction sanitizeHtml(raw: string): string {\n if (!raw) return \"\";\n\n if (typeof DOMParser === \"undefined\") {\n return raw\n .replace(/<script[\\s\\S]*?>[\\s\\S]*?<\\/script>/gi, \"\")\n .replace(/\\son\\w+=\"[^\"]*\"/gi, \"\")\n .replace(/\\son\\w+='[^']*'/gi, \"\");\n }\n\n const doc = new DOMParser().parseFromString(raw, \"text/html\");\n\n doc.querySelectorAll(\"script,iframe,object,embed,form\").forEach((element) => element.remove());\n\n doc.querySelectorAll(\"*\").forEach((element) => {\n Array.from(element.attributes).forEach((attribute) => {\n const name = attribute.name.toLowerCase();\n const value = attribute.value.trim().toLowerCase();\n\n if (name.startsWith(\"on\") || name === \"srcdoc\") {\n element.removeAttribute(attribute.name);\n }\n\n if ((name === \"href\" || name === \"src\") && value.startsWith(\"javascript:\")) {\n element.removeAttribute(attribute.name);\n }\n });\n });\n\n return doc.body.innerHTML;\n}\n\nfunction prettifyName(name: string): string {\n return name\n .replace(/([a-z])([A-Z])/g, \"$1 $2\")\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (value) => value.toUpperCase());\n}\n\nfunction clickyNodeToCommandRequest(node: ClickyNode): ClickyCommandRequest {\n return {\n command: node.command ?? \"\",\n args: node.args ?? [],\n flags: node.flags ?? {},\n target: node.target ?? \"Dialog\",\n autoRun: node.autoRun ?? false,\n };\n}\n\nfunction resolveClickyCommand(\n request: ClickyCommandRequest,\n runtime: ClickyCommandRuntime | undefined,\n operations: ResolvedOperation[],\n): ClickyResolvedCommand {\n const resolved =\n runtime?.resolveCommand?.(request, operations) ??\n defaultResolveClickyCommand(request, operations);\n return { request, operation: resolved };\n}\n\nfunction defaultResolveClickyCommand(\n request: ClickyCommandRequest,\n operations: ResolvedOperation[],\n): ResolvedOperation | undefined {\n const wanted = normalizeCommandPath(request.command);\n if (!wanted) return undefined;\n\n return operations.find((operation) => {\n const metaCommand = normalizeCommandPath(operation.operation[\"x-clicky\"]?.command);\n if (metaCommand && metaCommand === wanted) {\n return true;\n }\n\n const operationId = normalizeCommandPath(operation.operation.operationId?.replaceAll(\"_\", \"/\"));\n return operationId === wanted;\n });\n}\n\nfunction normalizeCommandPath(value: string | undefined) {\n return (value ?? \"\")\n .trim()\n .replace(/^\\//, \"\")\n .replace(/\\s+/g, \"/\")\n .replace(/\\/+/g, \"/\")\n .toLowerCase();\n}\n\nfunction buildCommandParameterValues(\n parameters: OpenAPIParameter[],\n request: ClickyCommandRequest,\n): ParameterValues {\n const values: ParameterValues = { ...request.flags };\n const args = [...(request.args ?? [])];\n const positionalParams = parameters.filter((param) => isPositionalParam(param));\n let argIndex = 0;\n\n for (const param of positionalParams) {\n if (param.name === \"args\") {\n const remaining = args.slice(argIndex);\n if (remaining.length > 0) {\n values.args = remaining.join(\",\");\n }\n argIndex = args.length;\n continue;\n }\n\n if (argIndex < args.length) {\n values[param.name] = args[argIndex] ?? \"\";\n argIndex += 1;\n }\n }\n\n return values;\n}\n\nfunction missingRequiredParameters(parameters: OpenAPIParameter[], values: ParameterValues) {\n return parameters.filter((param) => param.required && (values[param.name] ?? \"\").trim() === \"\");\n}\n\nasync function executeClickyCommand(\n client: OperationsApiClient,\n operation: ResolvedOperation,\n values: ParameterValues,\n) {\n return client.executeCommand(\n operation.path,\n operation.method,\n packParameterValues(pruneParameterValues(values), operation.operation.parameters ?? []),\n { Accept: \"application/json+clicky\" },\n );\n}\n\nfunction buildCommandExecutionHref(resolved: ClickyResolvedCommand): string | undefined {\n const operation = resolved.operation;\n if (!operation) {\n return undefined;\n }\n\n const values = buildCommandParameterValues(\n operation.operation.parameters ?? [],\n resolved.request,\n );\n const params = packParameterValues(\n pruneParameterValues(values),\n operation.operation.parameters ?? [],\n );\n const url = substituteOperationPath(operation.path, params);\n\n if (operation.method.toUpperCase() !== \"GET\") {\n return url;\n }\n\n return url;\n}\n\nfunction substituteOperationPath(path: string, params: Record<string, string>) {\n const url = new URL(path, \"http://localhost\");\n const remaining = { ...params };\n\n for (const [key, value] of Object.entries(params)) {\n if (url.pathname.includes(`{${key}}`)) {\n url.pathname = url.pathname.replace(`{${key}}`, encodeURIComponent(value));\n delete remaining[key];\n }\n }\n\n for (const [key, value] of Object.entries(remaining)) {\n url.searchParams.set(key, value);\n }\n\n return `${url.pathname}${url.search}`;\n}\n\nfunction browserAnchorTarget(target: ClickyLinkTarget | undefined) {\n if (target === \"_self\") {\n return \"_self\";\n }\n\n if (target === \"_window\" || target === \"_tab\") {\n return \"_blank\";\n }\n\n return undefined;\n}\n\nfunction isExecutionResponse(value: unknown): value is ExecutionResponse {\n return (\n value != null &&\n typeof value === \"object\" &&\n (\"stdout\" in value || \"output\" in value || \"message\" in value)\n );\n}\n\nfunction clickyNodeText(node: ClickyNode | null | undefined): string {\n if (!node) return \"\";\n if (node.plain) return node.plain;\n if (node.text) return node.text;\n if (node.kind === \"html\")\n return sanitizeHtml(node.html ?? \"\")\n .replace(/<[^>]+>/g, \" \")\n .trim();\n if (node.kind === \"code\") return node.source ?? \"\";\n if ((node.kind === \"link\" || node.kind === \"link-command\") && node.children?.length) {\n return [node.text, ...node.children.map((child) => clickyNodeText(child))].join(\"\");\n }\n if (node.kind === \"button\" && node.label) return clickyNodeText(node.label);\n if (node.kind === \"button-group\") {\n return (node.items ?? []).map((item) => clickyNodeText(item)).join(\" \");\n }\n if (node.kind === \"text\" && node.children?.length) {\n return [node.text, ...node.children.map((child) => clickyNodeText(child))].join(\"\");\n }\n return \"\";\n}\n\nfunction isInlineNode(node: ClickyNode): boolean {\n return (\n node.kind === \"text\" ||\n node.kind === \"link\" ||\n node.kind === \"link-command\" ||\n node.kind === \"icon\" ||\n node.kind === \"html\" ||\n node.kind === \"button\" ||\n node.kind === \"button-group\"\n );\n}\n\nfunction isBlockHtml(html: string): boolean {\n return /<(div|p|pre|table|ul|ol|li|details|blockquote|h[1-6])/i.test(html);\n}\n"],"names":["Fragment","_b","_a"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SortDir } from '../hooks/use-sort';
|
|
3
|
+
import { Density } from '../hooks/use-density';
|
|
4
|
+
import { FilterBarProps } from '../components/FilterBar';
|
|
5
|
+
import { TimestampOptions } from './cells/Timestamp';
|
|
6
|
+
import { TagActionsContextValue, TagsOptions } from './cells/TagList';
|
|
7
|
+
import { BadgeStatus } from './Badge';
|
|
8
|
+
export type { TimestampOptions, TagsOptions };
|
|
9
|
+
export type DataTableColumnKind = "timestamp" | "tags" | "status";
|
|
10
|
+
export type StatusOptions<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
11
|
+
map?: (raw: unknown, row: T) => BadgeStatus | null;
|
|
12
|
+
showLabel?: boolean;
|
|
13
|
+
title?: (raw: unknown, row: T) => string;
|
|
14
|
+
};
|
|
15
|
+
type FilterValue = string | number | boolean | null | undefined | Array<string | number | boolean>;
|
|
16
|
+
export type DataTableRowDetailContext<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
17
|
+
columns: DataTableColumn<T>[];
|
|
18
|
+
visibleColumns: DataTableColumn<T>[];
|
|
19
|
+
tagActionsByColumn: Record<string, TagActionsContextValue>;
|
|
20
|
+
};
|
|
21
|
+
export type DataTableColumn<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
22
|
+
key: string;
|
|
23
|
+
label: ReactNode;
|
|
24
|
+
sortable?: boolean;
|
|
25
|
+
filterable?: boolean;
|
|
26
|
+
grow?: boolean;
|
|
27
|
+
shrink?: boolean;
|
|
28
|
+
resizable?: boolean;
|
|
29
|
+
hideable?: boolean;
|
|
30
|
+
minWidth?: number;
|
|
31
|
+
maxWidth?: number;
|
|
32
|
+
align?: "left" | "center" | "right";
|
|
33
|
+
render?: (value: unknown, row: T) => ReactNode;
|
|
34
|
+
sortValue?: (value: unknown, row: T) => unknown;
|
|
35
|
+
filterValue?: (value: unknown, row: T) => FilterValue;
|
|
36
|
+
cellClassName?: string;
|
|
37
|
+
headerClassName?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Built-in cell kind. When set, DataTable supplies a default renderer,
|
|
40
|
+
* a default `sortValue` and a default `filterValue` (all overridable).
|
|
41
|
+
* - "timestamp": adaptive format (relative / time / short / iso) chosen
|
|
42
|
+
* from the spread of values in `data`.
|
|
43
|
+
* - "tags": chip list with `+N` overflow; auto-multi-filter on tag tokens.
|
|
44
|
+
* - "status": colored dot with the standard error/warning/success palette
|
|
45
|
+
* (token-mapped — "ERROR", "failed", "fatal" all collapse to "error").
|
|
46
|
+
*/
|
|
47
|
+
kind?: DataTableColumnKind;
|
|
48
|
+
timestamp?: TimestampOptions;
|
|
49
|
+
tags?: TagsOptions;
|
|
50
|
+
status?: StatusOptions<T>;
|
|
51
|
+
};
|
|
52
|
+
export type DataTableColumnInput<T extends Record<string, unknown> = Record<string, unknown>> = DataTableColumn<T> | string;
|
|
53
|
+
export type DataTableProps<T extends Record<string, unknown> = Record<string, unknown>> = {
|
|
54
|
+
data: T[];
|
|
55
|
+
/**
|
|
56
|
+
* Column descriptors. Pass a bare string for a default column —
|
|
57
|
+
* `"foo"` is equivalent to `{ key: "foo", label: "foo" }` — handy for
|
|
58
|
+
* ad-hoc query results where the column metadata is just a list of names.
|
|
59
|
+
* Mix and match strings with full descriptors as needed.
|
|
60
|
+
*/
|
|
61
|
+
columns: Array<DataTableColumnInput<T>>;
|
|
62
|
+
emptyMessage?: string;
|
|
63
|
+
className?: string;
|
|
64
|
+
autoFilter?: boolean;
|
|
65
|
+
showGlobalFilter?: boolean;
|
|
66
|
+
globalFilter?: string;
|
|
67
|
+
onGlobalFilterChange?: (value: string) => void;
|
|
68
|
+
globalFilterPlaceholder?: string;
|
|
69
|
+
defaultSort?: {
|
|
70
|
+
key: string;
|
|
71
|
+
dir?: SortDir;
|
|
72
|
+
};
|
|
73
|
+
filterBarProps?: Omit<FilterBarProps, "search" | "filters">;
|
|
74
|
+
getRowId?: (row: T, index: number) => string;
|
|
75
|
+
onRowClick?: (row: T) => void;
|
|
76
|
+
isRowClickable?: (row: T) => boolean;
|
|
77
|
+
getRowHref?: (row: T) => string | undefined;
|
|
78
|
+
renderExpandedRow?: (row: T, context: DataTableRowDetailContext<T>) => ReactNode;
|
|
79
|
+
resizableColumns?: boolean;
|
|
80
|
+
persistColumnWidths?: boolean;
|
|
81
|
+
columnResizeStorageKey?: string;
|
|
82
|
+
hideableColumns?: boolean;
|
|
83
|
+
persistColumnVisibility?: boolean;
|
|
84
|
+
columnVisibilityStorageKey?: string;
|
|
85
|
+
density?: Density;
|
|
86
|
+
defaultDensity?: Density;
|
|
87
|
+
onDensityChange?: (density: Density | undefined) => void;
|
|
88
|
+
persistDensity?: boolean;
|
|
89
|
+
densityStorageKey?: string;
|
|
90
|
+
showDensityControl?: boolean;
|
|
91
|
+
showHeaderFilters?: boolean;
|
|
92
|
+
};
|
|
93
|
+
export declare function DataTable<T extends Record<string, unknown>>({ data, columns: columnsInput, emptyMessage: _emptyMessage, className, autoFilter, showGlobalFilter, globalFilter, onGlobalFilterChange, globalFilterPlaceholder, defaultSort, filterBarProps, getRowId, onRowClick, isRowClickable, getRowHref, renderExpandedRow, resizableColumns, persistColumnWidths, columnResizeStorageKey, hideableColumns, persistColumnVisibility, columnVisibilityStorageKey, density, defaultDensity, onDensityChange, persistDensity, densityStorageKey, showDensityControl, showHeaderFilters, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
94
|
+
export declare function inferColumns<T extends Record<string, unknown>>(data: T[]): DataTableColumn<T>[];
|
|
95
|
+
//# sourceMappingURL=DataTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataTable.d.ts","sourceRoot":"","sources":["../../src/data/DataTable.tsx"],"names":[],"mappings":"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"}
|