@jini-ai/ui 0.6.15-rc.1 → 0.6.15
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/dist/browser/useDismissOnOutsideOrEscape.js +1 -1
- package/dist/browser/useGlobalKeydown.js +2 -2
- package/dist/browser/useModalWindowDragGuard.js +1 -1
- package/dist/core/theme/css-name.d.ts +3 -0
- package/dist/core/theme/css-name.js +5 -0
- package/dist/core/theme/stylesheet.js +2 -1
- package/dist/core/theme/validation.js +15 -4
- package/dist/features/about/rules.js +2 -1
- package/dist/features/admin-widgets/components/InfoTip.hooks.js +22 -12
- package/dist/features/admin-widgets/components/Lightbox/Lightbox.hooks.js +1 -1
- package/dist/features/admin-widgets/components/ScrollJump/ScrollJump.hooks.js +1 -1
- package/dist/features/admin-widgets/components/SeeMore/SeeMore.hooks.js +2 -2
- package/dist/features/admin-widgets/components/SeeMore/SeeMore.js +4 -2
- package/dist/features/admin-widgets/components/Select/Select.hooks.js +2 -1
- package/dist/features/admin-widgets/components/Select/Select.js +2 -1
- package/dist/features/admin-widgets/components/SuggestInput/SuggestInput.js +4 -2
- package/dist/features/admin-widgets/components/useDebouncedHtmlPreview.hooks.js +3 -2
- package/dist/features/asset-grid/react/components/AssetGrid.js +8 -3
- package/dist/features/asset-grid/react/hooks/useAssetGridKeyboardShortcuts.js +7 -6
- package/dist/features/asset-grid/react/hooks/useAssetGridLiveUpdates.js +8 -10
- package/dist/features/asset-grid/react/hooks/useRubberBandDrag.js +1 -1
- package/dist/features/asset-tree-browser/react/components/AssetTreeFileRow.js +6 -8
- package/dist/features/asset-tree-browser/react/hooks/useAssetTreeRowMenu.js +1 -1
- package/dist/features/asset-tree-browser/rules.js +1 -3
- package/dist/features/browser-chrome/rules.js +10 -8
- package/dist/features/charts/browser.js +2 -1
- package/dist/features/charts/react.js +3 -1
- package/dist/features/connectors/ConnectorsBrowser.js +3 -1
- package/dist/features/connectors/hooks/useConnectorAuthorization.js +1 -1
- package/dist/features/connectors/hooks/useConnectorCatalog.js +2 -2
- package/dist/features/connectors/rules.js +10 -14
- package/dist/features/execution/react/components/AgentDiagnosticRow.js +2 -0
- package/dist/features/execution/react/components/ByokProviderForm.js +1 -3
- package/dist/features/execution/react/components/LocalCliAgentSettings.js +2 -1
- package/dist/features/execution/react/hooks/use-byok-field-validation.hooks.js +6 -2
- package/dist/features/execution/react/hooks/useExecutionTab.js +9 -5
- package/dist/features/execution/react/hooks/useLocalCliAgentCard.js +3 -6
- package/dist/features/execution/react/hooks/useReasoningControl.js +3 -3
- package/dist/features/execution/rules.js +23 -18
- package/dist/features/external-mcp/react/components/ExternalMcpTab.js +10 -1
- package/dist/features/file-dropzone/rules.js +3 -2
- package/dist/features/html-editor/canvas-embed-placeholders.js +2 -3
- package/dist/features/html-editor/css.js +7 -5
- package/dist/features/html-editor/editor-blocks.js +60 -6
- package/dist/features/html-editor/protected-elements.js +5 -3
- package/dist/features/html-editor/react/hooks/useInteractiveHtmlEditor.js +3 -3
- package/dist/features/html-editor/source-splice.js +6 -4
- package/dist/features/iframe-pool/react/components/IframeKeepAliveProvider.js +5 -5
- package/dist/features/iframe-pool/react/dom-sync.js +2 -2
- package/dist/features/integrations/react/components/IntegrationsTab.js +3 -1
- package/dist/features/integrations/rules.js +6 -4
- package/dist/features/interactive-ui/interactive-ui.css +1 -1
- package/dist/features/interactive-ui/providers/shadcn/button.d.ts +8 -6
- package/dist/features/interactive-ui/providers/shadcn/button.js +5 -6
- package/dist/features/interactive-ui/providers/shadcn/card.d.ts +3 -3
- package/dist/features/interactive-ui/providers/shadcn/card.js +3 -4
- package/dist/features/interactive-ui/providers/shadcn/data-table.js +10 -5
- package/dist/features/interactive-ui/providers/shadcn/select.d.ts +3 -5
- package/dist/features/interactive-ui/providers/shadcn/select.js +3 -7
- package/dist/features/interactive-ui/providers/shadcn/table.d.ts +4 -5
- package/dist/features/interactive-ui/providers/shadcn/table.js +4 -9
- package/dist/features/interactive-ui/table-data.js +1 -1
- package/dist/features/lexical-rich-text-editor/deserialize.js +2 -2
- package/dist/features/lexical-rich-text-editor/mention-parser.js +4 -4
- package/dist/features/lexical-rich-text-editor/react/components/RichTextInput.js +2 -1
- package/dist/features/lexical-rich-text-editor/react/hooks/useCaretFloatingLayerPosition.js +1 -1
- package/dist/features/lexical-rich-text-editor/react/hooks/useMentionColorStamping.js +1 -1
- package/dist/features/lexical-rich-text-editor/serialize.js +13 -10
- package/dist/features/list-detail-panel/react/components/ListDetailPanel.js +1 -1
- package/dist/features/mcp-ui/confirmation-store.js +3 -6
- package/dist/features/mcp-ui/surfaces/confirmation.d.ts +5 -0
- package/dist/features/mcp-ui/surfaces/confirmation.js +1 -0
- package/dist/features/mcp-ui/surfaces/document.d.ts +3 -15
- package/dist/features/mcp-ui/surfaces/document.js +37 -6
- package/dist/features/mcp-ui/surfaces/fields.js +2 -0
- package/dist/features/mcp-ui/surfaces/host-theme.js +2 -1
- package/dist/features/mcp-ui/surfaces/index.d.ts +1 -0
- package/dist/features/mcp-ui/surfaces/index.js +1 -0
- package/dist/features/mcp-ui/surfaces/outcome.js +1 -1
- package/dist/features/mcp-ui/surfaces/select.js +2 -1
- package/dist/features/mcp-ui/surfaces/structured-details.d.ts +40 -0
- package/dist/features/mcp-ui/surfaces/structured-details.js +159 -0
- package/dist/features/mcp-ui/surfaces/text-input.js +1 -1
- package/dist/features/mcp-ui/surfaces/tool-approval.d.ts +21 -0
- package/dist/features/mcp-ui/surfaces/tool-approval.js +41 -0
- package/dist/features/media-providers/react/hooks/useMediaProvidersTab.js +2 -1
- package/dist/features/memory/async-commit-guard.js +4 -1
- package/dist/features/memory/formatters.js +5 -1
- package/dist/features/memory/react/components/MemoryConnectedPanel.js +3 -1
- package/dist/features/memory/react/components/MemoryEntryCard.js +1 -1
- package/dist/features/memory/react/components/MemorySettingsPanel.js +3 -1
- package/dist/features/memory/react/hooks/useMemoryConfig.hooks.js +12 -10
- package/dist/features/memory/react/hooks/useMemoryConnectors.hooks.js +2 -5
- package/dist/features/memory/react/hooks/useMemoryConnectors.rules.js +10 -9
- package/dist/features/memory/react/hooks/useMemoryEntries.hooks.js +4 -2
- package/dist/features/memory/react/hooks/useMemoryFlash.hooks.js +1 -1
- package/dist/features/memory/rules.js +2 -1
- package/dist/features/panel-kit/fetch-query/adapter.react.js +3 -2
- package/dist/features/panel-kit/fetch-query/adapter.tanstack.js +3 -2
- package/dist/features/panel-kit/fetch-query/binding.react.js +2 -1
- package/dist/features/panel-kit/helpers/standing-draft-recovery-message.js +13 -4
- package/dist/features/panel-kit/hooks/use-dirty-guard.hooks.js +1 -1
- package/dist/features/panel-kit/hooks/use-focus-trap.hooks.js +1 -1
- package/dist/features/panel-kit/hooks/use-settings-slice.hooks.js +14 -10
- package/dist/features/panel-kit/hooks/use-standing-draft-autosave.hooks.js +2 -2
- package/dist/features/progress-card/components/ProgressCard.d.ts +1 -1
- package/dist/features/progress-card/reference-adapters.js +23 -13
- package/dist/features/progress-card/rules.d.ts +0 -1
- package/dist/features/progress-card/rules.js +14 -20
- package/dist/features/progress-card/types.d.ts +1 -1
- package/dist/features/project-locations/dependencies.js +6 -1
- package/dist/features/project-locations/react/components/ProjectLocationsTab.js +2 -1
- package/dist/features/project-locations/rules.js +2 -1
- package/dist/features/resource-dashboard/react/components/ResourceBoardToolbar.js +8 -1
- package/dist/features/resource-dashboard/react/components/ResourceBoardView.js +3 -2
- package/dist/features/resource-dashboard/react/components/ResourceBoardViewParts.d.ts +0 -2
- package/dist/features/resource-dashboard/react/components/ResourceBoardViewParts.js +0 -6
- package/dist/features/resource-dashboard/react/components/ResourceCardParts.js +2 -1
- package/dist/features/resource-dashboard/react/components/ResourceRowListItem.js +3 -1
- package/dist/features/resource-dashboard/react/components/ResourceRowListItemParts.js +2 -1
- package/dist/features/resource-dashboard/react/components/ResourceRowListView.js +1 -1
- package/dist/features/resource-dashboard/react/hooks/useResourceBoard.js +1 -1
- package/dist/features/schedule-picker/rules.js +13 -7
- package/dist/features/sketch-editor/constants.d.ts +0 -6
- package/dist/features/sketch-editor/constants.js +17 -15
- package/dist/features/sketch-editor/dom.js +4 -7
- package/dist/features/sketch-editor/react/components/SketchMainMenu.js +2 -1
- package/dist/features/sketch-editor/react/components/SketchSaveStateBadge.js +2 -1
- package/dist/features/sketch-editor/react/hooks/useSketchDomEnhancements.js +1 -1
- package/dist/features/sketch-editor/rules.js +13 -12
- package/dist/features/skills/dependencies.js +9 -4
- package/dist/features/skills/react/components/SkillRow.js +2 -1
- package/dist/features/skills/react/components/SkillsTab.js +2 -1
- package/dist/features/skills/rules.js +3 -3
- package/dist/features/source-config-list/agent-handles.js +4 -3
- package/dist/features/source-config-list/react/components/SourceConfigItemCard.js +3 -1
- package/dist/features/tab-strip/react/components/TabBar.hooks.js +4 -2
- package/dist/features/version-manager/react/components/VersionPreviewFrame.js +4 -1
- package/dist/features/version-manager/react/components/VersionSidebar.js +8 -6
- package/dist/features/version-manager/react/hooks/usePreviewCanvasSize.js +1 -1
- package/dist/features/version-manager/react/hooks/useVersionManager.js +5 -7
- package/dist/features/version-manager/rules.js +3 -5
- package/dist/features/viewer-shell/react/components/CommentSidePanel.js +2 -1
- package/dist/features/viewer-shell/react/components/SegmentedToggle.js +2 -1
- package/dist/features/viewer-shell/react/components/ViewerShell.js +2 -1
- package/dist/features/viewer-shell/rules.js +8 -7
- package/dist/react/components/BrandLogo.js +10 -2
- package/dist/react/components/CustomSelect.js +1 -1
- package/dist/react/components/EditorIcon.js +17 -14
- package/dist/react/components/Loading.js +2 -1
- package/dist/react/components/OnboardingChipField.js +5 -1
- package/dist/react/components/OnboardingDropdown.js +6 -4
- package/dist/react/components/PaletteTweaks.js +7 -6
- package/dist/react/components/PillButton.js +2 -1
- package/dist/react/components/PopoverMenu.js +2 -1
- package/dist/react/components/RemixIcon.js +2 -1
- package/dist/react/components/SecretInput.hooks.d.ts +2 -25
- package/dist/react/components/SecretInput.hooks.js +2 -24
- package/dist/react/components/SecretInput.js +5 -4
- package/dist/react/components/Toast.js +4 -2
- package/dist/react/components/TooltipLayer.js +4 -1
- package/dist/react/components/WorkingDirPicker.js +5 -4
- package/dist/react/components/remixicon-font-recovery.js +9 -1
- package/dist/react/components/select-popover.js +2 -2
- package/dist/react/hooks/useBrandFonts.js +1 -1
- package/dist/react/hooks/useEdgeAutoScroll.js +1 -1
- package/dist/react/hooks/useInView.js +9 -9
- package/dist/react/hooks/useResizableSplitPane.js +12 -20
- package/dist/react/mcp-ui/useHostSurfaceTokens.js +1 -1
- package/dist/renderers/annotation-canvas/react/components/AnnotationCanvas.js +7 -1
- package/dist/renderers/annotation-canvas/react/hooks/useAnnotationCanvas.controller.js +4 -2
- package/dist/renderers/annotation-canvas/react/hooks/useAnnotationCanvas.js +9 -5
- package/dist/renderers/annotation-canvas/rules.js +9 -13
- package/dist/renderers/annotation-canvas/theme.js +5 -2
- package/dist/renderers/renderers/index.js +1 -1
- package/dist/renderers/renderers/markdown.js +4 -6
- package/dist/theme/apply.js +7 -3
- package/dist/utils/class-names.d.ts +3 -0
- package/dist/utils/class-names.js +5 -0
- package/dist/utils/design-md.js +3 -3
- package/dist/utils/ime-composing.d.ts +1 -1
- package/dist/utils/ime-composing.js +1 -2
- package/dist/utils/localized-url.js +2 -11
- package/dist/utils/markdown-scroll-sync.js +1 -1
- package/dist/utils/omit-keys.d.ts +3 -0
- package/dist/utils/omit-keys.js +8 -0
- package/dist/utils/polygon-selection.js +1 -1
- package/dist/utils/sse.js +3 -0
- package/dist/utils/trim-chars.d.ts +13 -0
- package/dist/utils/trim-chars.js +30 -0
- package/dist/utils/unhandled-case.d.ts +10 -0
- package/dist/utils/unhandled-case.js +12 -0
- package/dist/utils/unit-bezier.js +1 -3
- package/dist/utils/zip.js +6 -10
- package/package.json +10 -9
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { unhandledCase } from '../../utils/unhandled-case.js';
|
|
1
2
|
/** Path hint per OS — a Windows user shouldn't see a `~/...` path their
|
|
2
3
|
* shell won't expand, and vice versa. */
|
|
3
4
|
export function homeConfigPath(platform, posix, windows) {
|
|
@@ -36,7 +37,8 @@ export function buildCodexEnvToml(serverName, info) {
|
|
|
36
37
|
const entries = Object.entries(info.env ?? {});
|
|
37
38
|
if (entries.length === 0)
|
|
38
39
|
return '';
|
|
39
|
-
|
|
40
|
+
const lines = entries.map(([key, value]) => `${key} = ${JSON.stringify(value)}`).join('\n');
|
|
41
|
+
return `\n\n[mcp_servers.${serverName}.env]\n${lines}`;
|
|
40
42
|
}
|
|
41
43
|
/** The `{"mcpServers": {"<serverName>": {...}}}` shape shared by Cursor,
|
|
42
44
|
* Antigravity, and Windsurf. */
|
|
@@ -186,8 +188,8 @@ export function snippetForClient(clientId, serverName, info) {
|
|
|
186
188
|
// refactored away rather than kept behind a coverage-suppression comment.
|
|
187
189
|
// TypeScript still catches a missing case if `McpClientId` grows a member
|
|
188
190
|
// and only `methodLabelForClient` gets updated: with every current case
|
|
189
|
-
// returning, `
|
|
190
|
-
//
|
|
191
|
-
|
|
191
|
+
// returning, `unhandledCase`'s `never` parameter makes `tsc` require this
|
|
192
|
+
// switch to be exhaustive too.
|
|
193
|
+
return unhandledCase(clientId);
|
|
192
194
|
}
|
|
193
195
|
//# sourceMappingURL=rules.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}:root,[data-admin-theme],[data-color-scheme=light]{color-scheme:light;--jini-bg:var(--jini-theme-light-bg,#fff);--jini-surface:var(--jini-theme-light-surface,#f5f5f5);--jini-text:var(--jini-theme-light-text,#202020);--jini-muted:var(--jini-theme-light-muted,#666);--jini-border:var(--jini-theme-light-border,#d9d9d9);--jini-primary:var(--jini-theme-light-primary,#363636);--jini-primary-ink:var(--jini-theme-light-primary-ink,#fff);--jini-danger:var(--jini-theme-light-danger,#b42318);--jini-success:var(--jini-theme-light-success,#18763b);--jini-warning:var(--jini-theme-light-warning,#845800)}[data-color-scheme=dark]{color-scheme:dark;--jini-bg:var(--jini-theme-dark-bg,#171717);--jini-surface:var(--jini-theme-dark-surface,#242424);--jini-text:var(--jini-theme-dark-text,#f0f0f0);--jini-muted:var(--jini-theme-dark-muted,#b3b3b3);--jini-border:var(--jini-theme-dark-border,#454545);--jini-primary:var(--jini-theme-dark-primary,#e0e0e0);--jini-primary-ink:var(--jini-theme-dark-primary-ink,#202020);--jini-danger:var(--jini-theme-dark-danger,#ff8b80);--jini-success:var(--jini-theme-dark-success,#79d69b);--jini-warning:var(--jini-theme-dark-warning,#ebc36b)}:root,[data-color-scheme=light],[data-theme=light]{--jini-chart-default-1:oklch(55.29% .1129 43.4);--jini-chart-default-2:oklch(50% .11 240);--jini-chart-default-3:oklch(64% .13 88);--jini-chart-default-4:oklch(58% .15 350);--jini-chart-default-5:oklch(50% .11 155);--jini-chart-default-6:oklch(48% .12 295)}[data-color-scheme=dark],[data-theme=dark]{--jini-chart-default-1:oklch(62% .11 44);--jini-chart-default-2:oklch(64% .11 240);--jini-chart-default-3:oklch(66% .13 88);--jini-chart-default-4:oklch(65% .14 350);--jini-chart-default-5:oklch(56% .12 155);--jini-chart-default-6:oklch(64% .12 295)}:root{--jini-font-body:system-ui, sans-serif;--jini-font-heading:system-ui, sans-serif;--jini-font-mono:ui-monospace, monospace;--jini-radius:8px;--jini-density:1}:root,[data-admin-theme],[data-color-scheme]{--jini-bg-panel:var(--jini-surface);--jini-bg-subtle:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-bg-subtle:color-mix(in srgb, var(--jini-surface) 75%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-bg-elevated:var(--jini-surface);--jini-border-soft:var(--jini-border);--jini-border-strong:var(--jini-border)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-border-strong:color-mix(in srgb, var(--jini-border) 75%, var(--jini-text))}}:root,[data-admin-theme],[data-color-scheme]{--jini-backdrop:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-backdrop:color-mix(in srgb, var(--jini-text) 42%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-text-strong:var(--jini-text);--jini-text-secondary:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-text-secondary:color-mix(in srgb, var(--jini-text) 80%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-text-muted:var(--jini-muted);--jini-text-faint:var(--jini-muted)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-text-faint:color-mix(in srgb, var(--jini-muted) 75%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-text-disabled:var(--jini-muted)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-text-disabled:color-mix(in srgb, var(--jini-muted) 60%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent:var(--jini-primary);--jini-accent-hover:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-hover:color-mix(in srgb, var(--jini-primary) 88%, var(--jini-text))}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent-strong:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-strong:color-mix(in srgb, var(--jini-primary) 85%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent-ink:var(--jini-primary-ink);--jini-accent-soft:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-soft:color-mix(in srgb, var(--jini-primary) 10%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent-ring:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-ring:color-mix(in srgb, var(--jini-primary) 22%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent:var(--jini-text);--jini-neutral-accent-hover:var(--jini-muted);--jini-neutral-accent-ink:var(--jini-bg);--jini-neutral-accent-text:var(--jini-text);--jini-neutral-accent-soft:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent-soft:color-mix(in srgb, var(--jini-text) 7%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent-ring:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent-ring:color-mix(in srgb, var(--jini-text) 16%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-link:var(--jini-primary);--jini-link-ink:var(--jini-primary-ink);--jini-success-bg:var(--jini-success)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-success-bg:color-mix(in srgb, var(--jini-success) 12%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-success-solid:var(--jini-success);--jini-success-solid-ink:var(--jini-bg);--jini-danger-bg:var(--jini-danger)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-danger-bg:color-mix(in srgb, var(--jini-danger) 12%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-warning-bg:var(--jini-warning)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-warning-bg:color-mix(in srgb, var(--jini-warning) 12%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-font-ui:var(--jini-font-body);--jini-font-display:var(--jini-font-heading);--jini-shadow-xs:0 1px 0 var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-xs:0 1px 0 color-mix(in srgb, var(--jini-text) 4%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-sm:0 1px 3px var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-sm:0 1px 3px color-mix(in srgb, var(--jini-text) 10%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-md:0 6px 24px var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-md:0 6px 24px color-mix(in srgb, var(--jini-text) 15%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-lg:0 24px 60px var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-lg:0 24px 60px color-mix(in srgb, var(--jini-text) 22%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-radius-xs:calc(var(--jini-radius) * .5);--jini-radius-sm:calc(var(--jini-radius) * .75);--jini-radius-md:calc(var(--jini-radius) * 1.25);--jini-radius-lg:calc(var(--jini-radius) * 1.5);--jini-radius-pill:999px;--jini-space-1:calc(.25rem * var(--jini-density));--jini-space-2:calc(.5rem * var(--jini-density));--jini-space-3:calc(.75rem * var(--jini-density));--jini-space-4:calc(1rem * var(--jini-density));--jini-space-5:calc(1.25rem * var(--jini-density));--jini-space-6:calc(1.5rem * var(--jini-density));--jini-space-7:calc(2rem * var(--jini-density));--jini-space-8:calc(2.5rem * var(--jini-density));--jini-font-size-2xs:.6875rem;--jini-font-size-xs:.75rem;--jini-font-size-sm:.8125rem;--jini-font-size-base:.875rem;--jini-font-size-md:.95rem;--jini-font-size-lg:1.05rem;--jini-font-size-xl:1.65rem;--jini-font-weight-normal:400;--jini-font-weight-medium:500;--jini-font-weight-semibold:600;--jini-font-weight-bold:700;--jini-line-tight:1.25;--jini-line-normal:1.5;--jini-line-relaxed:1.7;--jini-duration-fast:.12s;--jini-duration-base:.2s;--jini-duration-slow:.32s;--jini-ease-out:cubic-bezier(.23, 1, .32, 1);--jini-ease-in-out:cubic-bezier(.4, 0, .2, 1);--jini-transition-base:var(--jini-duration-base) var(--jini-ease-out);--jini-z-dropdown:100;--jini-z-sticky:200;--jini-z-overlay:300;--jini-z-modal:400;--jini-z-toast:500;--jini-modal-padding:24px;--jini-sidebar-width:240px;--jini-app-bg:var(--jini-theme-app-bg,var(--jini-default-app-bg));--jini-shell-bg:var(--jini-theme-shell-bg,var(--jini-bg));--jini-panel-bg:var(--jini-theme-panel-bg,var(--jini-default-panel-bg));--jini-panel-border:var(--jini-theme-panel-border,var(--jini-default-panel-border));--jini-panel-shadow:var(--jini-theme-panel-shadow,var(--jini-default-panel-shadow));--jini-panel-backdrop:var(--jini-theme-panel-backdrop);--jini-panel-texture:var(--jini-theme-panel-texture);--jini-rail-bg:var(--jini-theme-rail-bg,var(--jini-panel-bg));--jini-rail-border:var(--jini-theme-rail-border,var(--jini-panel-border));--jini-rail-shadow:var(--jini-theme-rail-shadow,none);--jini-rail-backdrop:var(--jini-theme-rail-backdrop,var(--jini-panel-backdrop,none));--jini-overlay-bg:var(--jini-theme-overlay-bg,var(--jini-default-overlay-bg));--jini-overlay-backdrop:var(--jini-theme-overlay-backdrop);--jini-overlay-shadow:var(--jini-theme-overlay-shadow,var(--jini-default-overlay-shadow));--jini-control-preview-backdrop:var(--jini-theme-control-preview-backdrop,blur(6px));--jini-control-bg:var(--jini-theme-control-bg,var(--jini-default-control-bg));--jini-control-border:var(--jini-theme-control-border,var(--jini-default-control-border));--jini-control-shadow:var(--jini-theme-control-shadow);--jini-control-shadow-hover:var(--jini-theme-control-shadow-hover);--jini-control-shadow-pressed:var(--jini-theme-control-shadow-pressed);--jini-control-shadow-inset:var(--jini-theme-control-shadow-inset);--jini-border-width:var(--jini-theme-border-width);--jini-control-chevron-image:var(--jini-theme-control-chevron-image,url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14' fill='none'%3E%3Cpath d='M3.5 5.5 7 9l3.5-3.5' stroke='%23666C75' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"));--jini-overlay-tooltip-bg:var(--jini-theme-overlay-tooltip-bg,#fff);--jini-overlay-tooltip-text:var(--jini-theme-overlay-tooltip-text,#111);--jini-overlay-tooltip-border:var(--jini-theme-overlay-tooltip-border,#0000001a);--jini-overlay-bg-preview:var(--jini-theme-overlay-bg-preview,oklch(0% 0 0/.55));--jini-overlay-bg-navigation:var(--jini-theme-overlay-bg-navigation,oklch(0% 0 0/.4));--jini-code-string:var(--jini-theme-code-string,#4caf7a);--jini-code-number:var(--jini-theme-code-number,#d1975a);--jini-control-thumb-bg:var(--jini-theme-control-thumb-bg,#fff);--jini-control-solid-ink:var(--jini-theme-control-solid-ink,#fff);--jini-overlay-bg-lightbox:var(--jini-theme-overlay-bg-lightbox,oklch(0% 0 0/.6));--jini-lightbox-bg:var(--jini-theme-lightbox-bg,oklch(23% .005 256));--jini-lightbox-ink:var(--jini-theme-lightbox-ink,oklch(97% 0 0));--jini-lightbox-ink-muted:var(--jini-theme-lightbox-ink-muted,oklch(97% 0 0/.58));--jini-lightbox-media-bg:var(--jini-theme-lightbox-media-bg,oklch(0% 0 0/.25));--jini-lightbox-document-bg:var(--jini-theme-lightbox-document-bg,#fff);--jini-lightbox-button-border:var(--jini-theme-lightbox-button-border,oklch(100% 0 0/.16));--jini-lightbox-button-bg:var(--jini-theme-lightbox-button-bg,oklch(100% 0 0/.07));--jini-lightbox-button-bg-hover:var(--jini-theme-lightbox-button-bg-hover,oklch(100% 0 0/.15));--jini-lightbox-button-border-hover:var(--jini-theme-lightbox-button-border-hover,oklch(100% 0 0/.28));--jini-control-media-bg:var(--jini-theme-control-media-bg,oklch(0% 0 0/.55));--jini-control-media-ink:var(--jini-theme-control-media-ink,oklch(100% 0 0));--jini-control-media-border:var(--jini-theme-control-media-border,oklch(100% 0 0/.35));--jini-control-media-bg-hover:var(--jini-theme-control-media-bg-hover,oklch(0% 0 0/.72));--jini-overlay-bg-source:var(--jini-theme-overlay-bg-source,oklch(0% 0 0/.48));--jini-file-icon-folder:var(--jini-theme-file-icon-folder,oklch(72% .12 75));--jini-file-icon-json:var(--jini-theme-file-icon-json,oklch(72% .13 90));--jini-file-icon-markdown:var(--jini-theme-file-icon-markdown,oklch(62% .12 245));--jini-file-icon-javascript:var(--jini-theme-file-icon-javascript,oklch(76% .15 95));--jini-file-icon-typescript:var(--jini-theme-file-icon-typescript,oklch(60% .13 250));--jini-file-icon-config:var(--jini-theme-file-icon-config,oklch(62% .14 20));--jini-file-icon-html:var(--jini-theme-file-icon-html,oklch(64% .17 40));--jini-file-icon-css:var(--jini-theme-file-icon-css,oklch(62% .13 280));--jini-file-icon-image:var(--jini-theme-file-icon-image,oklch(64% .12 160));--jini-file-icon-shell:var(--jini-theme-file-icon-shell,oklch(64% .12 145));--jini-status-complete-ink-fallback:var(--jini-theme-status-complete-ink-fallback,oklch(99% 0 none));--jini-control-preview-ink:var(--jini-theme-control-preview-ink,#fff);--jini-control-preview-bg:var(--jini-theme-control-preview-bg,#1111116b);--jini-control-preview-bg-hover:var(--jini-theme-control-preview-bg-hover,#111111b8);--jini-control-preview-tip-bg:var(--jini-theme-control-preview-tip-bg,#111111e0);--jini-panel-border-muted:var(--jini-theme-panel-border-muted,#d9d9d9);--jini-control-composer-border-focus:var(--jini-theme-control-composer-border-focus,oklch(70% .012 255));--jini-overlay-bg-chat:var(--jini-theme-overlay-bg-chat,#00000073);--jini-control-hover-neutral-bg:var(--jini-theme-control-hover-neutral-bg,#7f7f7f26);--jini-control-recording-bg:var(--jini-theme-control-recording-bg,#dc2626);--jini-control-recording-ink:var(--jini-theme-control-recording-ink,#fff);--jini-control-recording-bg-hover:var(--jini-theme-control-recording-bg-hover,#b91c1c);--jini-control-shadow-focus:var(--jini-theme-control-shadow-focus,0 0 0 3px var(--jini-accent-ring));--jini-overlay-tooltip-shadow:var(--jini-theme-overlay-tooltip-shadow,0 4px 16px #00000040);--jini-control-shadow-focus-subtle:var(--jini-theme-control-shadow-focus-subtle,0 0 0 2px var(--jini-neutral-accent-soft));--jini-overlay-toast-shadow:var(--jini-theme-overlay-toast-shadow,0 8px 24px #00000038);--jini-status-danger-shadow:var(--jini-theme-status-danger-shadow,inset 3px 0 0 var(--jini-danger));--jini-control-thumb-shadow-strong:var(--jini-theme-control-thumb-shadow-strong,0 1px 2px #1c1b1a47);--jini-panel-shadow-divider:var(--jini-theme-panel-shadow-divider,inset 0 -1px 0 var(--jini-border));--jini-control-shadow-focus-accent:var(--jini-theme-control-shadow-focus-accent,0 0 0 3px var(--jini-accent))}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-control-shadow-focus-accent:var(--jini-theme-control-shadow-focus-accent,0 0 0 3px color-mix(in srgb, var(--jini-accent) 18%, transparent))}}:root,[data-admin-theme],[data-color-scheme]{--jini-overlay-menu-shadow-above:var(--jini-theme-overlay-menu-shadow-above,0 -4px 14px #141c2d17, 0 -1px 4px #141c2d0f);--jini-control-shadow-selected:var(--jini-theme-control-shadow-selected,0 0 0 1px var(--jini-accent));--jini-control-shadow-swatch-selected:var(--jini-theme-control-shadow-swatch-selected,0 0 0 2px var(--jini-bg-panel), 0 0 0 4px var(--jini-accent));--jini-control-shadow-segment:var(--jini-theme-control-shadow-segment,0 1px 2px #00000014);--jini-panel-shadow-sticky:var(--jini-theme-panel-shadow-sticky,0 6px 8px -6px #00000024);--jini-overlay-menu-shadow:var(--jini-theme-overlay-menu-shadow,0 12px 32px #0000001f);--jini-control-shadow-segment-raised:var(--jini-theme-control-shadow-segment-raised,0 1px 2px #0000001f);--jini-control-thumb-shadow:var(--jini-theme-control-thumb-shadow,0 1px 2px #00000040);--jini-panel-shadow-banner:var(--jini-theme-panel-shadow-banner,0 2px 8px #0000001f);--jini-status-warning-shadow:var(--jini-theme-status-warning-shadow,inset 2px 0 0 var(--jini-warning));--jini-panel-shadow-flat:var(--jini-theme-panel-shadow-flat,none)}:root{--jini-chat-font-body:var(--jini-theme-chat-font-body,-apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei UI", "Noto Sans", Roboto, "Helvetica Neue", Arial, sans-serif);--jini-chat-font-mono:var(--jini-theme-chat-font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);--jini-chat-popover-shadow:var(--jini-theme-chat-popover-shadow,0 18px 46px #0d0c0a26, 0 2px 8px #0d0c0a0f);--jini-chat-bg:var(--jini-theme-chat-bg);--jini-chat-panel:var(--jini-theme-chat-panel);--jini-chat-text:var(--jini-theme-chat-text);--jini-chat-text-strong:var(--jini-theme-chat-text-strong);--jini-chat-muted:var(--jini-theme-chat-muted);--jini-chat-faint:var(--jini-theme-chat-faint);--jini-chat-border:var(--jini-theme-chat-border);--jini-chat-border-strong:var(--jini-theme-chat-border-strong);--jini-chat-border-soft:var(--jini-theme-chat-border-soft);--jini-chat-subtle:var(--jini-theme-chat-subtle);--jini-chat-accent:var(--jini-theme-chat-accent);--jini-chat-accent-soft:var(--jini-theme-chat-accent-soft);--jini-chat-danger:var(--jini-theme-chat-danger);--jini-chat-radius:var(--jini-theme-chat-radius);--jini-chat-radius-lg:var(--jini-theme-chat-radius-lg);--jini-chat-user-bubble:var(--jini-theme-chat-user-bubble);--jini-chat-user-bubble-ink:var(--jini-theme-chat-user-bubble-ink)}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--radius-sm:.25rem;--radius-md:.375rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base,components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.right-2{right:calc(var(--spacing) * 2)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.my-1{margin-block:var(--spacing)}.mt-4{margin-top:calc(var(--spacing) * 4)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-square{aspect-ratio:1}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-px{height:1px}.max-h-\[--radix-select-content-available-height\]{max-height:--radix-select-content-available-height}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-9{width:calc(var(--spacing) * 9)}.w-full{width:100%}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\[--radix-select-content-transform-origin\]{transform-origin:--radix-select-content-transform-origin}.cursor-default{cursor:default}.flex-col{flex-direction:column}.place-content-center{place-content:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-input{border-color:var(--jini-border)}.border-primary{border-color:var(--jini-primary)}.bg-background{background-color:var(--jini-bg)}.bg-destructive{background-color:var(--jini-danger)}.bg-muted,.bg-muted\/50{background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--jini-surface) 50%, transparent)}}.bg-primary{background-color:var(--jini-primary)}.bg-secondary{background-color:var(--jini-surface)}.bg-transparent{background-color:#0000}.fill-primary{fill:var(--jini-primary)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-0{padding-top:0}.pr-8{padding-right:calc(var(--spacing) * 8)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-left{text-align:left}.align-middle{vertical-align:middle}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-nowrap{white-space:nowrap}.text-current{color:currentColor}.text-destructive-foreground{color:var(--jini-bg)}.text-foreground{color:var(--jini-text)}.text-input{color:var(--jini-border)}.text-muted-foreground{color:var(--jini-muted)}.text-primary{color:var(--jini-primary)}.text-primary-foreground{color:var(--jini-primary-ink)}.text-secondary-foreground{color:var(--jini-text)}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--jini-bg)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--jini-text)}.placeholder\:text-muted-foreground::placeholder{color:var(--jini-muted)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--jini-surface)}.hover\:bg-destructive\/90:hover{background-color:var(--jini-danger)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--jini-danger) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--jini-surface) 50%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--jini-primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--jini-surface) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--jini-text)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--jini-surface)}.focus\:text-accent-foreground:focus{color:var(--jini-text)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--jini-primary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--jini-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab, var(--jini-surface) 50%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--jini-muted)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--jini-primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--jini-primary-ink)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--jini-surface)}@media (min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}.jini-data-table-frame{border:1px solid var(--jini-border);border-radius:var(--jini-radius);background:var(--jini-bg);min-width:0;max-width:100%;color:var(--jini-text);overflow:hidden}.jini-data-table-scroll,.jini-data-table-frame>[data-slot=table-container]{overscroll-behavior-x:contain;width:100%;max-height:28rem;overflow:auto}.jini-data-table{border-collapse:separate;border-spacing:0;width:100%;font-family:var(--jini-font-body);font-size:var(--jini-font-size-sm);line-height:var(--jini-line-normal);font-variant-numeric:tabular-nums}.jini-data-table th,.jini-data-table td{text-align:left;vertical-align:middle;white-space:nowrap;border-bottom:1px solid var(--jini-border);height:2.5rem;padding:.625rem .875rem}.jini-data-table th{z-index:1;background:var(--jini-surface);color:var(--jini-muted);font-size:var(--jini-font-size-xs);font-weight:var(--jini-font-weight-semibold);position:sticky;top:0}.jini-data-table tbody tr:last-child td{border-bottom:0}.jini-data-table tbody tr:nth-child(2n){background:var(--jini-bg-subtle)}.jini-data-table tbody tr:hover,.jini-data-table tbody tr:focus-visible{background:var(--jini-surface)}.jini-data-table tbody tr[role=button]{cursor:pointer}.jini-data-table [data-numeric=true]{text-align:right}.jini-data-table-sort{width:100%;min-height:1.5rem;color:inherit;font:inherit;text-align:inherit;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;gap:.625rem;padding:0;display:inline-flex}.jini-data-table [data-numeric=true] .jini-data-table-sort{justify-content:flex-end}.jini-data-table th[aria-sort=ascending],.jini-data-table th[aria-sort=descending],.jini-data-table-sort:hover{color:var(--jini-text)}.jini-data-table td.jini-data-table-empty{height:8rem;color:var(--jini-muted);text-align:center}.jini-data-table-pagination{border-top:1px solid var(--jini-border);color:var(--jini-muted);font-size:var(--jini-font-size-xs);font-variant-numeric:tabular-nums;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;padding:.625rem .875rem;display:flex}.jini-data-table-pagination-controls{gap:.5rem;display:flex}.jini-data-table-pagination button{border:1px solid var(--jini-border);border-radius:var(--jini-radius-sm);background:var(--jini-bg);min-height:2rem;color:var(--jini-text);font:inherit;cursor:pointer;padding:.375rem .75rem}.jini-data-table-pagination button:hover:not(:disabled){background:var(--jini-surface)}.jini-data-table-pagination button:disabled{opacity:.5;cursor:default}.jini-data-table-sort:focus-visible,.jini-data-table-pagination button:focus-visible,.jini-data-table tr[role=button]:focus-visible{outline:2px solid var(--jini-primary);outline-offset:-2px}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0}}}:root,[data-admin-theme],[data-color-scheme=light]{color-scheme:light;--jini-bg:var(--jini-theme-light-bg,#fff);--jini-surface:var(--jini-theme-light-surface,#f5f5f5);--jini-text:var(--jini-theme-light-text,#202020);--jini-muted:var(--jini-theme-light-muted,#666);--jini-border:var(--jini-theme-light-border,#d9d9d9);--jini-primary:var(--jini-theme-light-primary,#363636);--jini-primary-ink:var(--jini-theme-light-primary-ink,#fff);--jini-danger:var(--jini-theme-light-danger,#b42318);--jini-success:var(--jini-theme-light-success,#18763b);--jini-warning:var(--jini-theme-light-warning,#845800)}[data-color-scheme=dark]{color-scheme:dark;--jini-bg:var(--jini-theme-dark-bg,#171717);--jini-surface:var(--jini-theme-dark-surface,#242424);--jini-text:var(--jini-theme-dark-text,#f0f0f0);--jini-muted:var(--jini-theme-dark-muted,#b3b3b3);--jini-border:var(--jini-theme-dark-border,#454545);--jini-primary:var(--jini-theme-dark-primary,#e0e0e0);--jini-primary-ink:var(--jini-theme-dark-primary-ink,#202020);--jini-danger:var(--jini-theme-dark-danger,#ff8b80);--jini-success:var(--jini-theme-dark-success,#79d69b);--jini-warning:var(--jini-theme-dark-warning,#ebc36b)}:root,[data-color-scheme=light],[data-theme=light]{--jini-chart-default-1:oklch(55.29% .1129 43.4);--jini-chart-default-2:oklch(50% .11 240);--jini-chart-default-3:oklch(64% .13 88);--jini-chart-default-4:oklch(58% .15 350);--jini-chart-default-5:oklch(50% .11 155);--jini-chart-default-6:oklch(48% .12 295)}[data-color-scheme=dark],[data-theme=dark]{--jini-chart-default-1:oklch(62% .11 44);--jini-chart-default-2:oklch(64% .11 240);--jini-chart-default-3:oklch(66% .13 88);--jini-chart-default-4:oklch(65% .14 350);--jini-chart-default-5:oklch(56% .12 155);--jini-chart-default-6:oklch(64% .12 295)}:root{--jini-font-body:system-ui, sans-serif;--jini-font-heading:system-ui, sans-serif;--jini-font-mono:ui-monospace, monospace;--jini-radius:8px;--jini-density:1}:root,[data-admin-theme],[data-color-scheme]{--jini-bg-panel:var(--jini-surface);--jini-bg-subtle:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-bg-subtle:color-mix(in srgb, var(--jini-surface) 75%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-bg-elevated:var(--jini-surface);--jini-border-soft:var(--jini-border);--jini-border-strong:var(--jini-border)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-border-strong:color-mix(in srgb, var(--jini-border) 75%, var(--jini-text))}}:root,[data-admin-theme],[data-color-scheme]{--jini-backdrop:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-backdrop:color-mix(in srgb, var(--jini-text) 42%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-text-strong:var(--jini-text);--jini-text-secondary:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-text-secondary:color-mix(in srgb, var(--jini-text) 80%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-text-muted:var(--jini-muted);--jini-text-faint:var(--jini-muted)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-text-faint:color-mix(in srgb, var(--jini-muted) 75%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-text-disabled:var(--jini-muted)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-text-disabled:color-mix(in srgb, var(--jini-muted) 60%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent:var(--jini-primary);--jini-accent-hover:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-hover:color-mix(in srgb, var(--jini-primary) 88%, var(--jini-text))}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent-strong:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-strong:color-mix(in srgb, var(--jini-primary) 85%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent-ink:var(--jini-primary-ink);--jini-accent-soft:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-soft:color-mix(in srgb, var(--jini-primary) 10%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-accent-ring:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-accent-ring:color-mix(in srgb, var(--jini-primary) 22%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent:var(--jini-text);--jini-neutral-accent-hover:var(--jini-muted);--jini-neutral-accent-ink:var(--jini-bg);--jini-neutral-accent-text:var(--jini-text);--jini-neutral-accent-soft:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent-soft:color-mix(in srgb, var(--jini-text) 7%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent-ring:var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-neutral-accent-ring:color-mix(in srgb, var(--jini-text) 16%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-link:var(--jini-primary);--jini-link-ink:var(--jini-primary-ink);--jini-success-bg:var(--jini-success)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-success-bg:color-mix(in srgb, var(--jini-success) 12%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-success-solid:var(--jini-success);--jini-success-solid-ink:var(--jini-bg);--jini-danger-bg:var(--jini-danger)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-danger-bg:color-mix(in srgb, var(--jini-danger) 12%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-warning-bg:var(--jini-warning)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-warning-bg:color-mix(in srgb, var(--jini-warning) 12%, var(--jini-bg))}}:root,[data-admin-theme],[data-color-scheme]{--jini-font-ui:var(--jini-font-body);--jini-font-display:var(--jini-font-heading);--jini-shadow-xs:0 1px 0 var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-xs:0 1px 0 color-mix(in srgb, var(--jini-text) 4%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-sm:0 1px 3px var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-sm:0 1px 3px color-mix(in srgb, var(--jini-text) 10%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-md:0 6px 24px var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-md:0 6px 24px color-mix(in srgb, var(--jini-text) 15%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-lg:0 24px 60px var(--jini-text)}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-shadow-lg:0 24px 60px color-mix(in srgb, var(--jini-text) 22%, transparent)}}:root,[data-admin-theme],[data-color-scheme]{--jini-radius-xs:calc(var(--jini-radius) * .5);--jini-radius-sm:calc(var(--jini-radius) * .75);--jini-radius-md:calc(var(--jini-radius) * 1.25);--jini-radius-lg:calc(var(--jini-radius) * 1.5);--jini-radius-pill:999px;--jini-space-1:calc(.25rem * var(--jini-density));--jini-space-2:calc(.5rem * var(--jini-density));--jini-space-3:calc(.75rem * var(--jini-density));--jini-space-4:calc(1rem * var(--jini-density));--jini-space-5:calc(1.25rem * var(--jini-density));--jini-space-6:calc(1.5rem * var(--jini-density));--jini-space-7:calc(2rem * var(--jini-density));--jini-space-8:calc(2.5rem * var(--jini-density));--jini-font-size-2xs:.6875rem;--jini-font-size-xs:.75rem;--jini-font-size-sm:.8125rem;--jini-font-size-base:.875rem;--jini-font-size-md:.95rem;--jini-font-size-lg:1.05rem;--jini-font-size-xl:1.65rem;--jini-font-weight-normal:400;--jini-font-weight-medium:500;--jini-font-weight-semibold:600;--jini-font-weight-bold:700;--jini-line-tight:1.25;--jini-line-normal:1.5;--jini-line-relaxed:1.7;--jini-duration-fast:.12s;--jini-duration-base:.2s;--jini-duration-slow:.32s;--jini-ease-out:cubic-bezier(.23, 1, .32, 1);--jini-ease-in-out:cubic-bezier(.4, 0, .2, 1);--jini-transition-base:var(--jini-duration-base) var(--jini-ease-out);--jini-z-dropdown:100;--jini-z-sticky:200;--jini-z-overlay:300;--jini-z-modal:400;--jini-z-toast:500;--jini-modal-padding:24px;--jini-sidebar-width:240px;--jini-app-bg:var(--jini-theme-app-bg,var(--jini-default-app-bg));--jini-shell-bg:var(--jini-theme-shell-bg,var(--jini-bg));--jini-panel-bg:var(--jini-theme-panel-bg,var(--jini-default-panel-bg));--jini-panel-border:var(--jini-theme-panel-border,var(--jini-default-panel-border));--jini-panel-shadow:var(--jini-theme-panel-shadow,var(--jini-default-panel-shadow));--jini-panel-backdrop:var(--jini-theme-panel-backdrop);--jini-panel-texture:var(--jini-theme-panel-texture);--jini-rail-bg:var(--jini-theme-rail-bg,var(--jini-panel-bg));--jini-rail-border:var(--jini-theme-rail-border,var(--jini-panel-border));--jini-rail-shadow:var(--jini-theme-rail-shadow,none);--jini-rail-backdrop:var(--jini-theme-rail-backdrop,var(--jini-panel-backdrop,none));--jini-overlay-bg:var(--jini-theme-overlay-bg,var(--jini-default-overlay-bg));--jini-overlay-backdrop:var(--jini-theme-overlay-backdrop);--jini-overlay-shadow:var(--jini-theme-overlay-shadow,var(--jini-default-overlay-shadow));--jini-control-preview-backdrop:var(--jini-theme-control-preview-backdrop,blur(6px));--jini-control-bg:var(--jini-theme-control-bg,var(--jini-default-control-bg));--jini-control-border:var(--jini-theme-control-border,var(--jini-default-control-border));--jini-control-shadow:var(--jini-theme-control-shadow);--jini-control-shadow-hover:var(--jini-theme-control-shadow-hover);--jini-control-shadow-pressed:var(--jini-theme-control-shadow-pressed);--jini-control-shadow-inset:var(--jini-theme-control-shadow-inset);--jini-border-width:var(--jini-theme-border-width);--jini-control-chevron-image:var(--jini-theme-control-chevron-image,url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 14 14' fill='none'%3E%3Cpath d='M3.5 5.5 7 9l3.5-3.5' stroke='%23666C75' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"));--jini-overlay-tooltip-bg:var(--jini-theme-overlay-tooltip-bg,#fff);--jini-overlay-tooltip-text:var(--jini-theme-overlay-tooltip-text,#111);--jini-overlay-tooltip-border:var(--jini-theme-overlay-tooltip-border,#0000001a);--jini-overlay-bg-preview:var(--jini-theme-overlay-bg-preview,oklch(0% 0 0/.55));--jini-overlay-bg-navigation:var(--jini-theme-overlay-bg-navigation,oklch(0% 0 0/.4));--jini-code-string:var(--jini-theme-code-string,#4caf7a);--jini-code-number:var(--jini-theme-code-number,#d1975a);--jini-control-thumb-bg:var(--jini-theme-control-thumb-bg,#fff);--jini-control-solid-ink:var(--jini-theme-control-solid-ink,#fff);--jini-overlay-bg-lightbox:var(--jini-theme-overlay-bg-lightbox,oklch(0% 0 0/.6));--jini-lightbox-bg:var(--jini-theme-lightbox-bg,oklch(23% .005 256));--jini-lightbox-ink:var(--jini-theme-lightbox-ink,oklch(97% 0 0));--jini-lightbox-ink-muted:var(--jini-theme-lightbox-ink-muted,oklch(97% 0 0/.58));--jini-lightbox-media-bg:var(--jini-theme-lightbox-media-bg,oklch(0% 0 0/.25));--jini-lightbox-document-bg:var(--jini-theme-lightbox-document-bg,#fff);--jini-lightbox-button-border:var(--jini-theme-lightbox-button-border,oklch(100% 0 0/.16));--jini-lightbox-button-bg:var(--jini-theme-lightbox-button-bg,oklch(100% 0 0/.07));--jini-lightbox-button-bg-hover:var(--jini-theme-lightbox-button-bg-hover,oklch(100% 0 0/.15));--jini-lightbox-button-border-hover:var(--jini-theme-lightbox-button-border-hover,oklch(100% 0 0/.28));--jini-control-media-bg:var(--jini-theme-control-media-bg,oklch(0% 0 0/.55));--jini-control-media-ink:var(--jini-theme-control-media-ink,oklch(100% 0 0));--jini-control-media-border:var(--jini-theme-control-media-border,oklch(100% 0 0/.35));--jini-control-media-bg-hover:var(--jini-theme-control-media-bg-hover,oklch(0% 0 0/.72));--jini-overlay-bg-source:var(--jini-theme-overlay-bg-source,oklch(0% 0 0/.48));--jini-file-icon-folder:var(--jini-theme-file-icon-folder,oklch(72% .12 75));--jini-file-icon-json:var(--jini-theme-file-icon-json,oklch(72% .13 90));--jini-file-icon-markdown:var(--jini-theme-file-icon-markdown,oklch(62% .12 245));--jini-file-icon-javascript:var(--jini-theme-file-icon-javascript,oklch(76% .15 95));--jini-file-icon-typescript:var(--jini-theme-file-icon-typescript,oklch(60% .13 250));--jini-file-icon-config:var(--jini-theme-file-icon-config,oklch(62% .14 20));--jini-file-icon-html:var(--jini-theme-file-icon-html,oklch(64% .17 40));--jini-file-icon-css:var(--jini-theme-file-icon-css,oklch(62% .13 280));--jini-file-icon-image:var(--jini-theme-file-icon-image,oklch(64% .12 160));--jini-file-icon-shell:var(--jini-theme-file-icon-shell,oklch(64% .12 145));--jini-status-complete-ink-fallback:var(--jini-theme-status-complete-ink-fallback,oklch(99% 0 none));--jini-control-preview-ink:var(--jini-theme-control-preview-ink,#fff);--jini-control-preview-bg:var(--jini-theme-control-preview-bg,#1111116b);--jini-control-preview-bg-hover:var(--jini-theme-control-preview-bg-hover,#111111b8);--jini-control-preview-tip-bg:var(--jini-theme-control-preview-tip-bg,#111111e0);--jini-panel-border-muted:var(--jini-theme-panel-border-muted,#d9d9d9);--jini-control-composer-border-focus:var(--jini-theme-control-composer-border-focus,oklch(70% .012 255));--jini-overlay-bg-chat:var(--jini-theme-overlay-bg-chat,#00000073);--jini-control-hover-neutral-bg:var(--jini-theme-control-hover-neutral-bg,#7f7f7f26);--jini-control-recording-bg:var(--jini-theme-control-recording-bg,#dc2626);--jini-control-recording-ink:var(--jini-theme-control-recording-ink,#fff);--jini-control-recording-bg-hover:var(--jini-theme-control-recording-bg-hover,#b91c1c);--jini-control-shadow-focus:var(--jini-theme-control-shadow-focus,0 0 0 3px var(--jini-accent-ring));--jini-overlay-tooltip-shadow:var(--jini-theme-overlay-tooltip-shadow,0 4px 16px #00000040);--jini-control-shadow-focus-subtle:var(--jini-theme-control-shadow-focus-subtle,0 0 0 2px var(--jini-neutral-accent-soft));--jini-overlay-toast-shadow:var(--jini-theme-overlay-toast-shadow,0 8px 24px #00000038);--jini-status-danger-shadow:var(--jini-theme-status-danger-shadow,inset 3px 0 0 var(--jini-danger));--jini-control-thumb-shadow-strong:var(--jini-theme-control-thumb-shadow-strong,0 1px 2px #1c1b1a47);--jini-panel-shadow-divider:var(--jini-theme-panel-shadow-divider,inset 0 -1px 0 var(--jini-border));--jini-control-shadow-focus-accent:var(--jini-theme-control-shadow-focus-accent,0 0 0 3px var(--jini-accent))}@supports (color:color-mix(in lab, red, red)){:root,[data-admin-theme],[data-color-scheme]{--jini-control-shadow-focus-accent:var(--jini-theme-control-shadow-focus-accent,0 0 0 3px color-mix(in srgb, var(--jini-accent) 18%, transparent))}}:root,[data-admin-theme],[data-color-scheme]{--jini-overlay-menu-shadow-above:var(--jini-theme-overlay-menu-shadow-above,0 -4px 14px #141c2d17, 0 -1px 4px #141c2d0f);--jini-control-shadow-selected:var(--jini-theme-control-shadow-selected,0 0 0 1px var(--jini-accent));--jini-control-shadow-swatch-selected:var(--jini-theme-control-shadow-swatch-selected,0 0 0 2px var(--jini-bg-panel), 0 0 0 4px var(--jini-accent));--jini-control-shadow-segment:var(--jini-theme-control-shadow-segment,0 1px 2px #00000014);--jini-panel-shadow-sticky:var(--jini-theme-panel-shadow-sticky,0 6px 8px -6px #00000024);--jini-overlay-menu-shadow:var(--jini-theme-overlay-menu-shadow,0 12px 32px #0000001f);--jini-control-shadow-segment-raised:var(--jini-theme-control-shadow-segment-raised,0 1px 2px #0000001f);--jini-control-thumb-shadow:var(--jini-theme-control-thumb-shadow,0 1px 2px #00000040);--jini-panel-shadow-banner:var(--jini-theme-panel-shadow-banner,0 2px 8px #0000001f);--jini-status-warning-shadow:var(--jini-theme-status-warning-shadow,inset 2px 0 0 var(--jini-warning));--jini-panel-shadow-flat:var(--jini-theme-panel-shadow-flat,none)}:root{--jini-chat-font-body:var(--jini-theme-chat-font-body,-apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei UI", "Noto Sans", Roboto, "Helvetica Neue", Arial, sans-serif);--jini-chat-font-mono:var(--jini-theme-chat-font-mono,ui-monospace, SFMono-Regular, Menlo, monospace);--jini-chat-popover-shadow:var(--jini-theme-chat-popover-shadow,0 18px 46px #0d0c0a26, 0 2px 8px #0d0c0a0f);--jini-chat-bg:var(--jini-theme-chat-bg);--jini-chat-panel:var(--jini-theme-chat-panel);--jini-chat-text:var(--jini-theme-chat-text);--jini-chat-text-strong:var(--jini-theme-chat-text-strong);--jini-chat-muted:var(--jini-theme-chat-muted);--jini-chat-faint:var(--jini-theme-chat-faint);--jini-chat-border:var(--jini-theme-chat-border);--jini-chat-border-strong:var(--jini-theme-chat-border-strong);--jini-chat-border-soft:var(--jini-theme-chat-border-soft);--jini-chat-subtle:var(--jini-theme-chat-subtle);--jini-chat-accent:var(--jini-theme-chat-accent);--jini-chat-accent-soft:var(--jini-theme-chat-accent-soft);--jini-chat-danger:var(--jini-theme-chat-danger);--jini-chat-radius:var(--jini-theme-chat-radius);--jini-chat-radius-lg:var(--jini-theme-chat-radius-lg);--jini-chat-user-bubble:var(--jini-theme-chat-user-bubble);--jini-chat-user-bubble-ink:var(--jini-theme-chat-user-bubble-ink)}@layer theme{:root,:host{--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--radius-sm:.25rem;--radius-md:.375rem;--radius-xl:.75rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base,components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.right-2{right:calc(var(--spacing) * 2)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.table{display:table}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-square{aspect-ratio:1}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.max-h-\[--radix-select-content-available-height\]{max-height:--radix-select-content-available-height}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-9{width:calc(var(--spacing) * 9)}.w-full{width:100%}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\[--radix-select-content-transform-origin\]{transform-origin:--radix-select-content-transform-origin}.cursor-default{cursor:default}.flex-col{flex-direction:column}.place-content-center{place-content:center}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-input{border-color:var(--jini-border)}.border-primary{border-color:var(--jini-primary)}.bg-background{background-color:var(--jini-bg)}.bg-destructive{background-color:var(--jini-danger)}.bg-primary{background-color:var(--jini-primary)}.bg-secondary{background-color:var(--jini-surface)}.bg-transparent{background-color:#0000}.fill-primary{fill:var(--jini-primary)}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-6{padding:calc(var(--spacing) * 6)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-0{padding-top:0}.pr-8{padding-right:calc(var(--spacing) * 8)}.pl-2{padding-left:calc(var(--spacing) * 2)}.text-left{text-align:left}.align-middle{vertical-align:middle}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.whitespace-nowrap{white-space:nowrap}.text-current{color:currentColor}.text-destructive-foreground{color:var(--jini-bg)}.text-foreground{color:var(--jini-text)}.text-input{color:var(--jini-border)}.text-muted-foreground{color:var(--jini-muted)}.text-primary{color:var(--jini-primary)}.text-primary-foreground{color:var(--jini-primary-ink)}.text-secondary-foreground{color:var(--jini-text)}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-background{--tw-ring-offset-color:var(--jini-bg)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--jini-text)}.placeholder\:text-muted-foreground::placeholder{color:var(--jini-muted)}@media (hover:hover){.hover\:bg-accent:hover{background-color:var(--jini-surface)}.hover\:bg-destructive\/90:hover{background-color:var(--jini-danger)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--jini-danger) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--jini-surface) 50%, transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--jini-primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--jini-primary) 90%, transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--jini-surface) 80%, transparent)}}.hover\:text-accent-foreground:hover{color:var(--jini-text)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:bg-accent:focus{background-color:var(--jini-surface)}.focus\:text-accent-foreground:focus{color:var(--jini-text)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--jini-primary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:var(--jini-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:var(--jini-surface)}@supports (color:color-mix(in lab, red, red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab, var(--jini-surface) 50%, transparent)}}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--jini-muted)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--jini-primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--jini-primary-ink)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--jini-surface)}@media (min-width:48rem){.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\&\>span\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}}.jini-data-table-frame{border:1px solid var(--jini-border);border-radius:var(--jini-radius);background:var(--jini-bg);min-width:0;max-width:100%;color:var(--jini-text);overflow:hidden}.jini-data-table-scroll,.jini-data-table-frame>[data-slot=table-container]{overscroll-behavior-x:contain;width:100%;max-height:28rem;overflow:auto}.jini-data-table{border-collapse:separate;border-spacing:0;width:100%;font-family:var(--jini-font-body);font-size:var(--jini-font-size-sm);line-height:var(--jini-line-normal);font-variant-numeric:tabular-nums}.jini-data-table th,.jini-data-table td{text-align:left;vertical-align:middle;white-space:nowrap;border-bottom:1px solid var(--jini-border);height:2.5rem;padding:.625rem .875rem}.jini-data-table th{z-index:1;background:var(--jini-surface);color:var(--jini-muted);font-size:var(--jini-font-size-xs);font-weight:var(--jini-font-weight-semibold);position:sticky;top:0}.jini-data-table tbody tr:last-child td{border-bottom:0}.jini-data-table tbody tr:nth-child(2n){background:var(--jini-bg-subtle)}.jini-data-table tbody tr:hover,.jini-data-table tbody tr:focus-visible{background:var(--jini-surface)}.jini-data-table tbody tr[role=button]{cursor:pointer}.jini-data-table [data-numeric=true]{text-align:right}.jini-data-table-sort{width:100%;min-height:1.5rem;color:inherit;font:inherit;text-align:inherit;cursor:pointer;background:0 0;border:0;justify-content:space-between;align-items:center;gap:.625rem;padding:0;display:inline-flex}.jini-data-table [data-numeric=true] .jini-data-table-sort{justify-content:flex-end}.jini-data-table th[aria-sort=ascending],.jini-data-table th[aria-sort=descending],.jini-data-table-sort:hover{color:var(--jini-text)}.jini-data-table td.jini-data-table-empty{height:8rem;color:var(--jini-muted);text-align:center}.jini-data-table-pagination{border-top:1px solid var(--jini-border);color:var(--jini-muted);font-size:var(--jini-font-size-xs);font-variant-numeric:tabular-nums;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;padding:.625rem .875rem;display:flex}.jini-data-table-pagination-controls{gap:.5rem;display:flex}.jini-data-table-pagination button{border:1px solid var(--jini-border);border-radius:var(--jini-radius-sm);background:var(--jini-bg);min-height:2rem;color:var(--jini-text);font:inherit;cursor:pointer;padding:.375rem .75rem}.jini-data-table-pagination button:hover:not(:disabled){background:var(--jini-surface)}.jini-data-table-pagination button:disabled{opacity:.5;cursor:default}.jini-data-table-sort:focus-visible,.jini-data-table-pagination button:focus-visible,.jini-data-table tr[role=button]:focus-visible{outline:2px solid var(--jini-primary);outline-offset:-2px}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ported
|
|
2
|
+
* Ported from shadcn's `new-york` style registry (`ui.shadcn.com/r/styles/new-york/button.json`
|
|
3
3
|
* — the same JSON the CLI's `npx shadcn@latest add button` fetches, 2026-08-18). Only the `cn`
|
|
4
4
|
* import path changed (`@/lib/utils` -> `./lib/utils.js`), same as `table.tsx`; every class name,
|
|
5
|
-
* variant, and
|
|
5
|
+
* variant, and size below is unmodified CLI output.
|
|
6
|
+
* The unused private `asChild` option is omitted: `ActionButton` always renders a button.
|
|
6
7
|
*/
|
|
7
8
|
import * as React from 'react';
|
|
8
9
|
import { type VariantProps } from 'class-variance-authority';
|
|
@@ -10,9 +11,10 @@ declare const buttonVariants: (props?: ({
|
|
|
10
11
|
variant?: "link" | "default" | "ghost" | "outline" | "destructive" | "secondary" | null | undefined;
|
|
11
12
|
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
12
13
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
export type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof buttonVariants>;
|
|
15
|
+
declare const Button: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<(props?: ({
|
|
16
|
+
variant?: "link" | "default" | "ghost" | "outline" | "destructive" | "secondary" | null | undefined;
|
|
17
|
+
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
18
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
|
|
17
19
|
export { Button, buttonVariants };
|
|
18
20
|
//# sourceMappingURL=button.d.ts.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* Ported
|
|
3
|
+
* Ported from shadcn's `new-york` style registry (`ui.shadcn.com/r/styles/new-york/button.json`
|
|
4
4
|
* — the same JSON the CLI's `npx shadcn@latest add button` fetches, 2026-08-18). Only the `cn`
|
|
5
5
|
* import path changed (`@/lib/utils` -> `./lib/utils.js`), same as `table.tsx`; every class name,
|
|
6
|
-
* variant, and
|
|
6
|
+
* variant, and size below is unmodified CLI output.
|
|
7
|
+
* The unused private `asChild` option is omitted: `ActionButton` always renders a button.
|
|
7
8
|
*/
|
|
8
9
|
import * as React from 'react';
|
|
9
|
-
import { Slot } from '@radix-ui/react-slot';
|
|
10
10
|
import { cva } from 'class-variance-authority';
|
|
11
11
|
import { cn } from './lib/utils.js';
|
|
12
12
|
const buttonVariants = cva('inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', {
|
|
@@ -31,9 +31,8 @@ const buttonVariants = cva('inline-flex items-center justify-center gap-2 whites
|
|
|
31
31
|
size: 'default',
|
|
32
32
|
},
|
|
33
33
|
});
|
|
34
|
-
const Button = React.forwardRef(({ className, variant, size,
|
|
35
|
-
|
|
36
|
-
return _jsx(Comp, { className: cn(buttonVariants({ variant, size, className })), ref: ref, ...props });
|
|
34
|
+
const Button = React.forwardRef(({ className, variant, size, ...props }, ref) => {
|
|
35
|
+
return _jsx("button", { className: cn(buttonVariants({ variant, size, className })), ref: ref, ...props });
|
|
37
36
|
});
|
|
38
37
|
Button.displayName = 'Button';
|
|
39
38
|
export { Button, buttonVariants };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ported
|
|
2
|
+
* Ported from shadcn's `new-york` style registry (`ui.shadcn.com/r/styles/new-york/card.json`,
|
|
3
3
|
* 2026-08-18). Only the `cn` import path changed, same as `table.tsx`.
|
|
4
|
+
* The unused private footer primitive is omitted.
|
|
4
5
|
*/
|
|
5
6
|
import * as React from 'react';
|
|
6
7
|
declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -8,6 +9,5 @@ declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<H
|
|
|
8
9
|
declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
9
10
|
declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
10
11
|
declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
11
|
-
|
|
12
|
-
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
|
|
12
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardContent };
|
|
13
13
|
//# sourceMappingURL=card.d.ts.map
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* Ported
|
|
3
|
+
* Ported from shadcn's `new-york` style registry (`ui.shadcn.com/r/styles/new-york/card.json`,
|
|
4
4
|
* 2026-08-18). Only the `cn` import path changed, same as `table.tsx`.
|
|
5
|
+
* The unused private footer primitive is omitted.
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
import { cn } from './lib/utils.js';
|
|
@@ -15,7 +16,5 @@ const CardDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx
|
|
|
15
16
|
CardDescription.displayName = 'CardDescription';
|
|
16
17
|
const CardContent = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, className: cn('p-6 pt-0', className), ...props })));
|
|
17
18
|
CardContent.displayName = 'CardContent';
|
|
18
|
-
|
|
19
|
-
CardFooter.displayName = 'CardFooter';
|
|
20
|
-
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
|
|
19
|
+
export { Card, CardHeader, CardTitle, CardDescription, CardContent };
|
|
21
20
|
//# sourceMappingURL=card.js.map
|
|
@@ -2,6 +2,8 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useMemo, useState } from 'react';
|
|
3
3
|
import { getNumericColumnKeys, sortTableRows } from '../../table-data.js';
|
|
4
4
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './table.js';
|
|
5
|
+
/** Header glyph per column sort state; `none` marks a sortable but unsorted column. */
|
|
6
|
+
const SORT_GLYPHS = { ascending: '↑', descending: '↓', none: '↕' };
|
|
5
7
|
function resolveTablePage({ pageSize, rowCount, requestedPage }, _options = {}) {
|
|
6
8
|
const requestedSize = pageSize !== undefined && Number.isInteger(pageSize) && pageSize > 0 ? pageSize : null;
|
|
7
9
|
const paging = requestedSize !== null;
|
|
@@ -20,11 +22,14 @@ export function DataTable({ columns, rows, onRowClick, sortable = true, pageSize
|
|
|
20
22
|
const sortedRows = useMemo(() => sortTableRows({ rows, sort: activeSort, numericKeys }), [rows, activeSort, numericKeys]);
|
|
21
23
|
const { paging, size, pageCount, page, start } = resolveTablePage({ pageSize, rowCount: rows.length, requestedPage });
|
|
22
24
|
const visibleRows = sortedRows.slice(start, start + size);
|
|
23
|
-
return (_jsxs("div", { className: "jini-data-table-frame", "data-table-provider": "shadcn", children: [_jsxs(Table, { className: "jini-data-table", children: [_jsx(TableHeader, { children: _jsx(TableRow, { children: columns.map((column) =>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
return (_jsxs("div", { className: "jini-data-table-frame", "data-table-provider": "shadcn", children: [_jsxs(Table, { className: "jini-data-table", children: [_jsx(TableHeader, { children: _jsx(TableRow, { children: columns.map((column) => {
|
|
26
|
+
const columnSort = activeSort?.key === column.key ? activeSort.direction : undefined;
|
|
27
|
+
return (_jsx(TableHead, { scope: "col", "data-numeric": numericKeys.has(column.key), "aria-sort": sortable ? (columnSort ?? 'none') : undefined, children: sortable ? (_jsxs("button", { type: "button", className: "jini-data-table-sort", onClick: () => {
|
|
28
|
+
setSort({ key: column.key, direction: activeSort?.key === column.key && activeSort.direction === 'ascending'
|
|
29
|
+
? 'descending' : 'ascending' });
|
|
30
|
+
setPage(0);
|
|
31
|
+
}, children: [_jsx("span", { children: column.label }), _jsx("span", { "aria-hidden": "true", children: SORT_GLYPHS[columnSort ?? 'none'] })] })) : column.label }, column.key));
|
|
32
|
+
}) }) }), _jsxs(TableBody, { children: [rows.length === 0 && _jsx(TableRow, { children: _jsx(TableCell, { className: "jini-data-table-empty", colSpan: columns.length, children: "No results." }) }), visibleRows.map(({ row, index }) => (_jsx(TableRow, { onClick: onRowClick ? () => onRowClick(row, index) : undefined, role: onRowClick ? 'button' : undefined, tabIndex: onRowClick ? 0 : undefined, onKeyDown: onRowClick ? (event) => {
|
|
28
33
|
if (event.target === event.currentTarget && (event.key === 'Enter' || event.key === ' ')) {
|
|
29
34
|
event.preventDefault();
|
|
30
35
|
onRowClick(row, index);
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ported
|
|
2
|
+
* Ported from shadcn's `new-york` style registry (`ui.shadcn.com/r/styles/new-york/select.json`,
|
|
3
3
|
* 2026-08-18). Only the `cn` import path changed, same as `table.tsx`; every class name and
|
|
4
4
|
* `data-*` attribute below is unmodified CLI output.
|
|
5
|
+
* Unused private group, label, and separator primitives are omitted.
|
|
5
6
|
*/
|
|
6
7
|
import * as React from 'react';
|
|
7
8
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
8
9
|
declare const Select: React.FC<SelectPrimitive.SelectProps>;
|
|
9
|
-
declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
10
10
|
declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
|
|
11
11
|
declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
12
12
|
declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
13
|
declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
14
14
|
declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
15
|
-
declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
16
15
|
declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
17
|
-
|
|
18
|
-
export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
|
|
16
|
+
export { Select, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectScrollUpButton, SelectScrollDownButton, };
|
|
19
17
|
//# sourceMappingURL=select.d.ts.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* Ported
|
|
3
|
+
* Ported from shadcn's `new-york` style registry (`ui.shadcn.com/r/styles/new-york/select.json`,
|
|
4
4
|
* 2026-08-18). Only the `cn` import path changed, same as `table.tsx`; every class name and
|
|
5
5
|
* `data-*` attribute below is unmodified CLI output.
|
|
6
|
+
* Unused private group, label, and separator primitives are omitted.
|
|
6
7
|
*/
|
|
7
8
|
import * as React from 'react';
|
|
8
9
|
import * as SelectPrimitive from '@radix-ui/react-select';
|
|
9
10
|
import { Check, ChevronDown, ChevronUp } from './icons.js';
|
|
10
11
|
import { cn } from './lib/utils.js';
|
|
11
12
|
const Select = SelectPrimitive.Root;
|
|
12
|
-
const SelectGroup = SelectPrimitive.Group;
|
|
13
13
|
const SelectValue = SelectPrimitive.Value;
|
|
14
14
|
const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Trigger, { ref: ref, className: cn('flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1', className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })] })));
|
|
15
15
|
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
@@ -20,11 +20,7 @@ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayNam
|
|
|
20
20
|
const SelectContent = React.forwardRef(({ className, children, position = 'popper', ...props }, ref) => (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { ref: ref, className: cn('relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]', position === 'popper' &&
|
|
21
21
|
'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), position: position, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: cn('p-1', position === 'popper' && 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'), children: children }), _jsx(SelectScrollDownButton, {})] }) })));
|
|
22
22
|
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
23
|
-
const SelectLabel = React.forwardRef(({ className, ...props }, ref) => _jsx(SelectPrimitive.Label, { ref: ref, className: cn('px-2 py-1.5 text-sm font-semibold', className), ...props }));
|
|
24
|
-
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
25
23
|
const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Item, { ref: ref, className: cn('relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), ...props, children: [_jsx("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(Check, { className: "h-4 w-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] })));
|
|
26
24
|
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
27
|
-
|
|
28
|
-
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
29
|
-
export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
|
|
25
|
+
export { Select, SelectValue, SelectTrigger, SelectContent, SelectItem, SelectScrollUpButton, SelectScrollDownButton, };
|
|
30
26
|
//# sourceMappingURL=select.js.map
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Ported
|
|
2
|
+
* Ported from `npx shadcn@latest add table` (real CLI run, 2026-08-08, against a
|
|
3
3
|
* scratch Vite+Tailwind v4 project — see source-map.md). Only the `cn` import path changed
|
|
4
4
|
* (`@/lib/utils` -> `./lib/utils.js`, this monorepo's relative-import convention); every
|
|
5
|
-
* class name, `data-slot` attribute, and prop shape below is unmodified CLI output.
|
|
5
|
+
* retained class name, `data-slot` attribute, and prop shape below is unmodified CLI output.
|
|
6
|
+
* Unused private footer and caption primitives are omitted.
|
|
6
7
|
*/
|
|
7
8
|
import * as React from 'react';
|
|
8
9
|
declare function Table({ className, ...props }: React.ComponentProps<'table'>): React.JSX.Element;
|
|
9
10
|
declare function TableHeader({ className, ...props }: React.ComponentProps<'thead'>): React.JSX.Element;
|
|
10
11
|
declare function TableBody({ className, ...props }: React.ComponentProps<'tbody'>): React.JSX.Element;
|
|
11
|
-
declare function TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>): React.JSX.Element;
|
|
12
12
|
declare function TableRow({ className, ...props }: React.ComponentProps<'tr'>): React.JSX.Element;
|
|
13
13
|
declare function TableHead({ className, ...props }: React.ComponentProps<'th'>): React.JSX.Element;
|
|
14
14
|
declare function TableCell({ className, ...props }: React.ComponentProps<'td'>): React.JSX.Element;
|
|
15
|
-
|
|
16
|
-
export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };
|
|
15
|
+
export { Table, TableHeader, TableBody, TableHead, TableRow, TableCell };
|
|
17
16
|
//# sourceMappingURL=table.d.ts.map
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
|
-
* Ported
|
|
3
|
+
* Ported from `npx shadcn@latest add table` (real CLI run, 2026-08-08, against a
|
|
4
4
|
* scratch Vite+Tailwind v4 project — see source-map.md). Only the `cn` import path changed
|
|
5
5
|
* (`@/lib/utils` -> `./lib/utils.js`, this monorepo's relative-import convention); every
|
|
6
|
-
* class name, `data-slot` attribute, and prop shape below is unmodified CLI output.
|
|
6
|
+
* retained class name, `data-slot` attribute, and prop shape below is unmodified CLI output.
|
|
7
|
+
* Unused private footer and caption primitives are omitted.
|
|
7
8
|
*/
|
|
8
9
|
import * as React from 'react';
|
|
9
10
|
import { cn } from './lib/utils.js';
|
|
@@ -16,9 +17,6 @@ function TableHeader({ className, ...props }) {
|
|
|
16
17
|
function TableBody({ className, ...props }) {
|
|
17
18
|
return _jsx("tbody", { "data-slot": "table-body", className: cn('[&_tr:last-child]:border-0', className), ...props });
|
|
18
19
|
}
|
|
19
|
-
function TableFooter({ className, ...props }) {
|
|
20
|
-
return (_jsx("tfoot", { "data-slot": "table-footer", className: cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className), ...props }));
|
|
21
|
-
}
|
|
22
20
|
function TableRow({ className, ...props }) {
|
|
23
21
|
return (_jsx("tr", { "data-slot": "table-row", className: cn('border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted', className), ...props }));
|
|
24
22
|
}
|
|
@@ -28,8 +26,5 @@ function TableHead({ className, ...props }) {
|
|
|
28
26
|
function TableCell({ className, ...props }) {
|
|
29
27
|
return (_jsx("td", { "data-slot": "table-cell", className: cn('p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0', className), ...props }));
|
|
30
28
|
}
|
|
31
|
-
|
|
32
|
-
return _jsx("caption", { "data-slot": "table-caption", className: cn('mt-4 text-sm text-muted-foreground', className), ...props });
|
|
33
|
-
}
|
|
34
|
-
export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };
|
|
29
|
+
export { Table, TableHeader, TableBody, TableHead, TableRow, TableCell };
|
|
35
30
|
//# sourceMappingURL=table.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
function isNumericValue(value) {
|
|
2
2
|
if (typeof value === 'number')
|
|
3
3
|
return Number.isFinite(value);
|
|
4
|
-
return typeof value === 'string' && /^[+-]?(?:\d
|
|
4
|
+
return typeof value === 'string' && /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value.trim())
|
|
5
5
|
&& Number.isFinite(Number(value));
|
|
6
6
|
}
|
|
7
7
|
/** Infer numeric columns once for both providers; empty cells do not turn a numeric column into text.
|
|
@@ -37,10 +37,10 @@ export function setRichTextFromPlainText(editor, text, knownMentions) {
|
|
|
37
37
|
label: part.entity.label,
|
|
38
38
|
title: part.entity.title,
|
|
39
39
|
}));
|
|
40
|
+
continue;
|
|
40
41
|
}
|
|
41
|
-
|
|
42
|
+
if (part.text)
|
|
42
43
|
p.append($createTextNode(part.text));
|
|
43
|
-
}
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
46
|
root.append(p);
|
|
@@ -232,10 +232,10 @@ export function foldPresentMentions(text, present, known) {
|
|
|
232
232
|
if (part.kind !== 'mention' || part.entity.kind === 'unknown')
|
|
233
233
|
continue;
|
|
234
234
|
const key = `${part.entity.kind}:${part.entity.id}`;
|
|
235
|
-
if (seen.has(key))
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
235
|
+
if (!seen.has(key)) {
|
|
236
|
+
seen.add(key);
|
|
237
|
+
result.push(part.entity);
|
|
238
|
+
}
|
|
239
239
|
}
|
|
240
240
|
return result;
|
|
241
241
|
}
|
|
@@ -68,6 +68,7 @@ function EditorSurface(props, ref) {
|
|
|
68
68
|
}, { discrete: true });
|
|
69
69
|
},
|
|
70
70
|
insertMention(insert) {
|
|
71
|
+
const isActiveTrigger = (trigger) => trigger.id === mentionTriggerIdRef.current;
|
|
71
72
|
editor.update(() => {
|
|
72
73
|
let sel = $getSelection();
|
|
73
74
|
if (!$isRangeSelection(sel)) {
|
|
@@ -80,7 +81,7 @@ function EditorSurface(props, ref) {
|
|
|
80
81
|
// The cast documents that instead of an unreachable
|
|
81
82
|
// early-return branch no real document state can trigger.
|
|
82
83
|
const rangeSel = sel;
|
|
83
|
-
const mentionTrigger = triggersRef.current.find(
|
|
84
|
+
const mentionTrigger = triggersRef.current.find(isActiveTrigger) ??
|
|
84
85
|
triggersRef.current[0];
|
|
85
86
|
if (mentionTrigger) {
|
|
86
87
|
deleteActiveTrigger(rangeSel, buildTriggerDeletionRegex(mentionTrigger));
|
|
@@ -23,7 +23,7 @@ export function useMentionColorStamping(resolveMentionColor) {
|
|
|
23
23
|
const [editor] = useLexicalComposerContext();
|
|
24
24
|
useEffect(() => {
|
|
25
25
|
if (!resolveMentionColor)
|
|
26
|
-
return;
|
|
26
|
+
return undefined;
|
|
27
27
|
const stampByKey = (key) => {
|
|
28
28
|
const dom = editor.getElementByKey(key);
|
|
29
29
|
if (!dom)
|
|
@@ -26,17 +26,20 @@ export function serializeRichText(state) {
|
|
|
26
26
|
function serializeParagraph(at) {
|
|
27
27
|
let line = '';
|
|
28
28
|
for (const child of at.paragraph.getChildren()) {
|
|
29
|
-
|
|
30
|
-
line += child.getToken();
|
|
31
|
-
at.mentions.push(child.getEntity());
|
|
32
|
-
}
|
|
33
|
-
else if ($isLineBreakNode(child)) {
|
|
34
|
-
line += '\n';
|
|
35
|
-
}
|
|
36
|
-
else if ($isTextNode(child) || $isElementNode(child)) {
|
|
37
|
-
line += child.getTextContent();
|
|
38
|
-
}
|
|
29
|
+
line += serializedChildText(child, at.mentions);
|
|
39
30
|
}
|
|
40
31
|
return line;
|
|
41
32
|
}
|
|
33
|
+
/** One paragraph child's plain-text contribution; a mention also records its entity. Other node kinds add nothing. */
|
|
34
|
+
function serializedChildText(child, mentions) {
|
|
35
|
+
if ($isMentionNode(child)) {
|
|
36
|
+
mentions.push(child.getEntity());
|
|
37
|
+
return child.getToken();
|
|
38
|
+
}
|
|
39
|
+
if ($isLineBreakNode(child))
|
|
40
|
+
return '\n';
|
|
41
|
+
if ($isTextNode(child) || $isElementNode(child))
|
|
42
|
+
return child.getTextContent();
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
42
45
|
//# sourceMappingURL=serialize.js.map
|
|
@@ -18,6 +18,6 @@ export function ListDetailPanel({ items, selectedId, onSelect, renderItem, rende
|
|
|
18
18
|
const state = { active };
|
|
19
19
|
const resolvedItemClassName = typeof itemClassName === 'function' ? itemClassName(item, state) : itemClassName;
|
|
20
20
|
return (_jsx("button", { type: "button", className: join('jini-list-detail-panel-item', active && 'jini-list-detail-panel-item-active', resolvedItemClassName), "aria-pressed": active, "aria-label": getItemAriaLabel?.(item), "data-active": active, "data-testid": `${testId}-item-${item.id}`, onClick: () => onSelect(item.id), children: renderItem(item, state) }, item.id));
|
|
21
|
-
}) }))] }),
|
|
21
|
+
}) }))] }), _jsxs("section", { className: join('jini-list-detail-panel-detail', detailClassName), "data-testid": `${testId}-detail`, children: [loading ? (_jsx("div", { className: "jini-list-detail-panel-loading-detail", role: "status", "aria-busy": "true", "aria-label": t('Loading'), "data-testid": `${testId}-loading-detail`, children: loadingDetailContent })) : null, !loading && selectedItem ? renderDetail(selectedItem) : null, !loading && !selectedItem ? emptyDetailContent : null] })] }));
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=ListDetailPanel.js.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { trimTrailingChars } from '../../utils/trim-chars.js';
|
|
1
2
|
/**
|
|
2
3
|
* @module features/mcp-ui/confirmation-store
|
|
3
4
|
*
|
|
@@ -66,11 +67,7 @@ function bindingsMatch(minted, presented) {
|
|
|
66
67
|
// does not — the type check below is what keeps those apart, and it is exact on purpose: a
|
|
67
68
|
// binding that silently coerces is a binding that can be satisfied by a value the minter never
|
|
68
69
|
// agreed to.
|
|
69
|
-
if (typeof left !== typeof right)
|
|
70
|
-
matched = false;
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (!constantTimeEquals(String(left), String(right)))
|
|
70
|
+
if (typeof left !== typeof right || !constantTimeEquals(String(left), String(right)))
|
|
74
71
|
matched = false;
|
|
75
72
|
}
|
|
76
73
|
return matched;
|
|
@@ -89,7 +86,7 @@ function defaultRandomToken() {
|
|
|
89
86
|
let binary = '';
|
|
90
87
|
for (const byte of bytes)
|
|
91
88
|
binary += String.fromCharCode(byte);
|
|
92
|
-
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_')
|
|
89
|
+
return trimTrailingChars(btoa(binary).replace(/\+/g, '-').replace(/\//g, '_'), '=');
|
|
93
90
|
}
|
|
94
91
|
/**
|
|
95
92
|
* Creates an in-process confirmation store.
|
|
@@ -67,6 +67,11 @@ export interface ConfirmationSurfaceSpec {
|
|
|
67
67
|
readonly description?: string;
|
|
68
68
|
/** The facts being agreed about. A dialog that says "delete this?" without naming *this* is not consent. */
|
|
69
69
|
readonly details?: readonly SurfaceDetail[];
|
|
70
|
+
/** Technical identifiers and input stay available without crowding out the consent wording. */
|
|
71
|
+
readonly detailDisclosure?: {
|
|
72
|
+
readonly label: string;
|
|
73
|
+
readonly details: readonly SurfaceDetail[];
|
|
74
|
+
};
|
|
70
75
|
/**
|
|
71
76
|
* Optional per-row checkboxes, rendered unchecked between the details and the warning. Ticking one
|
|
72
77
|
* never confirms anything by itself — the same property the module doc opens with, extended to a
|