@akira-io/ui 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -10
- package/dist/blocks.d.ts +159 -6
- package/dist/blocks.js +1388 -29
- package/dist/blocks.js.map +1 -1
- package/dist/button-B6wQRe7p.d.ts +16 -0
- package/dist/chunk-5AJFQ6C4.js +35 -0
- package/dist/chunk-5AJFQ6C4.js.map +1 -0
- package/dist/chunk-6QM5BA7B.js +148 -0
- package/dist/chunk-6QM5BA7B.js.map +1 -0
- package/dist/chunk-6X4TKSF6.js +21 -0
- package/dist/chunk-6X4TKSF6.js.map +1 -0
- package/dist/chunk-DSD7MVLL.js +287 -0
- package/dist/chunk-DSD7MVLL.js.map +1 -0
- package/dist/chunk-IQMRJXEO.js +59 -0
- package/dist/chunk-IQMRJXEO.js.map +1 -0
- package/dist/chunk-JAHTUAQL.js +82 -0
- package/dist/chunk-JAHTUAQL.js.map +1 -0
- package/dist/{chunk-A2SIZOEA.js → chunk-KYWA5UYN.js} +125 -45
- package/dist/chunk-KYWA5UYN.js.map +1 -0
- package/dist/chunk-L2H5GIF7.js +22 -0
- package/dist/chunk-L2H5GIF7.js.map +1 -0
- package/dist/chunk-LKSM3WLK.js +44 -0
- package/dist/chunk-LKSM3WLK.js.map +1 -0
- package/dist/{chunk-5MQWJVM2.js → chunk-MNGNBEYN.js} +168 -200
- package/dist/chunk-MNGNBEYN.js.map +1 -0
- package/dist/chunk-SA5LM2GD.js +102 -0
- package/dist/chunk-SA5LM2GD.js.map +1 -0
- package/dist/chunk-UUEWFCKT.js +28 -0
- package/dist/chunk-UUEWFCKT.js.map +1 -0
- package/dist/{chunk-42BJBH56.js → chunk-UUTXPPRN.js} +521 -107
- package/dist/chunk-UUTXPPRN.js.map +1 -0
- package/dist/{chunk-UXL33CZ4.js → chunk-YOVY3KT6.js} +13 -11
- package/dist/chunk-YOVY3KT6.js.map +1 -0
- package/dist/code.d.ts +6 -0
- package/dist/code.js +651 -0
- package/dist/code.js.map +1 -0
- package/dist/context-VgHq4U98.d.ts +384 -0
- package/dist/editor.d.ts +126 -0
- package/dist/editor.js +436 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +93 -17
- package/dist/index.js +996 -472
- package/dist/index.js.map +1 -1
- package/dist/inertia.d.ts +47 -2
- package/dist/inertia.js +138 -7
- package/dist/inertia.js.map +1 -1
- package/dist/input-4uxAHW6y.d.ts +5 -0
- package/dist/json-viewer-BTHBACj9.d.ts +50 -0
- package/dist/{language-Bft6rBBt.d.ts → language-Dgjr9bm3.d.ts} +1 -1
- package/dist/locales/pt.d.ts +26 -4
- package/dist/locales/pt.js +127 -1
- package/dist/locales/pt.js.map +1 -1
- package/dist/password-input-r39y2pCT.d.ts +50 -0
- package/dist/shells.d.ts +45 -7
- package/dist/shells.js +95 -60
- package/dist/shells.js.map +1 -1
- package/dist/{sidebar-BDhG9SUU.d.ts → sidebar-BhOIlSjt.d.ts} +4 -12
- package/dist/{types-Cno1_Ijx.d.ts → types-B4QS3h5p.d.ts} +9 -1
- package/dist/types-CT0rBsFc.d.ts +110 -0
- package/package.json +170 -130
- package/theme.css +20 -0
- package/themes/nosferry.css +4 -0
- package/dist/chunk-42BJBH56.js.map +0 -1
- package/dist/chunk-5MQWJVM2.js.map +0 -1
- package/dist/chunk-A2SIZOEA.js.map +0 -1
- package/dist/chunk-POE7OYET.js +0 -96
- package/dist/chunk-POE7OYET.js.map +0 -1
- package/dist/chunk-UXL33CZ4.js.map +0 -1
- package/dist/date-range-filter-QEa8fhUM.d.ts +0 -149
- package/dist/types-cOieac8G.d.ts +0 -77
package/dist/code.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/code.tsx","../src/components/ui/code-block-header.tsx","../src/lib/shiki.ts","../src/hooks/use-highlighted-code.ts","../src/lib/code-lines.ts","../src/components/ui/code-block.tsx","../src/lib/json-value.ts","../src/components/ui/json-node.tsx","../src/components/ui/json-viewer.tsx"],"names":["jsx","React","jsxs","React3","React4"],"mappings":"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","file":"code.js","sourcesContent":["import * as React from 'react';\n\nimport { compactRadius, controlFill } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nfunction Code({ className, ...props }: React.ComponentProps<'code'>) {\n return (\n <code\n data-slot=\"code\"\n className={cn(\n compactRadius,\n controlFill,\n 'px-1.5 py-0.5 font-mono font-medium text-[0.875em] text-foreground',\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Code };\n","import { FileCode } from 'lucide-react';\n\nimport { CopyButton, type CopyButtonLabels } from '@/components/ui/copy-button';\n\ninterface CodeBlockHeaderProps {\n filename: string;\n language?: string;\n code: string;\n copyLabel: CopyButtonLabels['copyLabel'];\n copiedLabel: CopyButtonLabels['copiedLabel'];\n}\n\nfunction CodeBlockHeader({\n filename,\n language,\n code,\n copyLabel,\n copiedLabel,\n}: CodeBlockHeaderProps) {\n return (\n <div\n data-slot=\"code-block-header\"\n className=\"gap-2 px-4 py-2 flex items-center border-b border-border\"\n >\n <FileCode className=\"size-4 shrink-0 text-muted-foreground\" />\n <span\n data-slot=\"code-block-filename\"\n className=\"text-sm font-medium truncate text-foreground\"\n >\n {filename}\n </span>\n {language !== undefined && (\n <span\n data-slot=\"code-block-language\"\n className=\"text-xs font-medium tracking-wide text-muted-foreground uppercase\"\n >\n {language}\n </span>\n )}\n <CopyButton\n value={code}\n copyLabel={copyLabel}\n copiedLabel={copiedLabel}\n className=\"ml-auto text-muted-foreground\"\n />\n </div>\n );\n}\n\nexport { CodeBlockHeader };\n","const LIGHT_THEME = 'github-light';\n\nconst DARK_THEME = 'github-dark';\n\ntype CodeToHtml = typeof import('shiki').codeToHtml;\n\nlet pending: Promise<CodeToHtml | null> | null = null;\n\nfunction loadCodeToHtml(): Promise<CodeToHtml | null> {\n pending ??= import('shiki')\n .then((module) => module.codeToHtml)\n .catch(() => null);\n\n return pending;\n}\n\nexport async function highlightCode(\n code: string,\n language: string,\n): Promise<string | null> {\n const codeToHtml = await loadCodeToHtml();\n\n if (!codeToHtml) {\n return null;\n }\n\n try {\n return await codeToHtml(code, {\n lang: language,\n themes: { light: LIGHT_THEME, dark: DARK_THEME },\n defaultColor: false,\n });\n } catch {\n return null;\n }\n}\n","import * as React from 'react';\n\nimport { highlightCode } from '@/lib/shiki';\n\nexport function useHighlightedCode(\n code: string,\n language: string | undefined,\n html: string | undefined,\n): string | null {\n const [highlighted, setHighlighted] = React.useState<string | null>(\n html ?? null,\n );\n\n React.useEffect(() => {\n if (html !== undefined) {\n setHighlighted(html);\n\n return;\n }\n\n if (language === undefined) {\n setHighlighted(null);\n\n return;\n }\n\n let active = true;\n\n highlightCode(code, language).then((result) => {\n if (active) {\n setHighlighted(result);\n }\n });\n\n return () => {\n active = false;\n };\n }, [code, language, html]);\n\n return highlighted;\n}\n","const LINE_OPEN = '<span class=\"line\">';\n\nconst SPAN_CLOSE = '</span>';\n\nexport function splitSourceLines(code: string): string[] {\n return code.replace(/\\n$/, '').split('\\n');\n}\n\nexport function parseLineRanges(\n spec: string | number[] | undefined,\n): Set<number> {\n const lines = new Set<number>();\n\n if (spec === undefined) {\n return lines;\n }\n\n if (Array.isArray(spec)) {\n for (const line of spec) {\n lines.add(line);\n }\n\n return lines;\n }\n\n for (const part of spec.split(',')) {\n const [from, to] = part\n .split('-')\n .map((bound) => Number.parseInt(bound.trim(), 10));\n\n if (Number.isNaN(from)) {\n continue;\n }\n\n const last = to === undefined || Number.isNaN(to) ? from : to;\n\n for (let line = from; line <= last; line += 1) {\n lines.add(line);\n }\n }\n\n return lines;\n}\n\nfunction closingSpan(html: string, from: number): number {\n let depth = 0;\n let cursor = from;\n\n while (cursor < html.length) {\n const open = html.indexOf('<span', cursor);\n const close = html.indexOf(SPAN_CLOSE, cursor);\n\n if (close === -1) {\n return -1;\n }\n\n if (open !== -1 && open < close) {\n depth += 1;\n cursor = open + 5;\n continue;\n }\n\n if (depth === 0) {\n return close;\n }\n\n depth -= 1;\n cursor = close + SPAN_CLOSE.length;\n }\n\n return -1;\n}\n\nexport function splitHighlightedLines(html: string): string[] | null {\n const lines: string[] = [];\n let cursor = html.indexOf(LINE_OPEN);\n\n while (cursor !== -1) {\n const start = cursor + LINE_OPEN.length;\n const end = closingSpan(html, start);\n\n if (end === -1) {\n return null;\n }\n\n lines.push(html.slice(start, end));\n cursor = html.indexOf(LINE_OPEN, end);\n }\n\n return lines.length > 0 ? lines : null;\n}\n","import * as React from 'react';\n\nimport { Button } from '@/components/ui/button';\nimport { CodeBlockHeader } from '@/components/ui/code-block-header';\nimport { CopyButton } from '@/components/ui/copy-button';\nimport { useHighlightedCode } from '@/hooks/use-highlighted-code';\nimport {\n parseLineRanges,\n splitHighlightedLines,\n splitSourceLines,\n} from '@/lib/code-lines';\nimport { elevatedSurface, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels } from '@/locales/context';\n\nexport interface CodeBlockLabels {\n copyLabel: string;\n copiedLabel: string;\n expandLabel: string;\n collapseLabel: string;\n}\n\nexport const codeBlockLabels: CodeBlockLabels = {\n copyLabel: 'Copy',\n copiedLabel: 'Copied',\n expandLabel: 'Expand',\n collapseLabel: 'Collapse',\n};\n\nexport interface CodeBlockProps extends Omit<\n React.ComponentProps<'div'>,\n 'children'\n> {\n code: string;\n language?: string;\n html?: string;\n filename?: string;\n lineNumbers?: boolean;\n highlightLines?: string | number[];\n maxHeight?: number | string;\n copyLabel?: CodeBlockLabels['copyLabel'];\n copiedLabel?: CodeBlockLabels['copiedLabel'];\n expandLabel?: CodeBlockLabels['expandLabel'];\n collapseLabel?: CodeBlockLabels['collapseLabel'];\n}\n\nfunction CodeBlock({\n code,\n language,\n html,\n filename,\n lineNumbers = false,\n highlightLines,\n maxHeight,\n copyLabel,\n copiedLabel,\n expandLabel,\n collapseLabel,\n className,\n ...props\n}: CodeBlockProps) {\n const labels = useUiLabels('codeBlock', codeBlockLabels, {\n copyLabel,\n copiedLabel,\n expandLabel,\n collapseLabel,\n });\n const highlighted = useHighlightedCode(code, language, html);\n const lines = React.useMemo(() => splitSourceLines(code), [code]);\n const markup = React.useMemo(\n () =>\n highlighted === null ? null : splitHighlightedLines(highlighted),\n [highlighted],\n );\n const emphasised = React.useMemo(\n () => parseLineRanges(highlightLines),\n [highlightLines],\n );\n\n const bodyRef = React.useRef<HTMLDivElement>(null);\n const [expanded, setExpanded] = React.useState(false);\n const [clipped, setClipped] = React.useState(false);\n\n React.useEffect(() => {\n const body = bodyRef.current;\n\n if (!body || maxHeight === undefined || expanded) {\n return;\n }\n\n setClipped(body.scrollHeight > body.clientHeight + 1);\n }, [maxHeight, expanded, lines, markup]);\n\n return (\n <div\n data-slot=\"code-block\"\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'relative overflow-hidden bg-card',\n className,\n )}\n {...props}\n >\n {filename === undefined ? (\n <CopyButton\n value={code}\n copyLabel={labels.copyLabel}\n copiedLabel={labels.copiedLabel}\n className=\"top-2 right-2 absolute z-10 text-muted-foreground\"\n />\n ) : (\n <CodeBlockHeader\n filename={filename}\n language={language}\n code={code}\n copyLabel={labels.copyLabel}\n copiedLabel={labels.copiedLabel}\n />\n )}\n <div\n ref={bodyRef}\n data-slot=\"code-block-body\"\n style={{ maxHeight: expanded ? undefined : maxHeight }}\n className=\"py-4 font-mono text-sm leading-6 overflow-auto rounded-[inherit]\"\n >\n <pre className=\"w-max min-w-full\">\n <code data-slot=\"code-block-code\">\n {lines.map((line, index) => (\n <CodeBlockLine\n key={index}\n number={index + 1}\n line={line}\n markup={markup?.[index]}\n lineNumbers={lineNumbers}\n emphasised={emphasised.has(index + 1)}\n />\n ))}\n </code>\n </pre>\n </div>\n {clipped && (\n <CodeBlockExpander\n expanded={expanded}\n expandLabel={labels.expandLabel}\n collapseLabel={labels.collapseLabel}\n onToggle={() => setExpanded((open) => !open)}\n />\n )}\n </div>\n );\n}\n\ninterface CodeBlockLineProps {\n number: number;\n line: string;\n markup: string | undefined;\n lineNumbers: boolean;\n emphasised: boolean;\n}\n\nfunction CodeBlockLine({\n number,\n line,\n markup,\n lineNumbers,\n emphasised,\n}: CodeBlockLineProps) {\n return (\n <span\n data-slot=\"code-block-line\"\n data-highlighted={emphasised ? '' : undefined}\n className={cn(\n 'min-h-6 px-4 grid w-full data-highlighted:bg-accent',\n lineNumbers ? 'grid-cols-[2.5rem_1fr]' : 'grid-cols-1',\n )}\n >\n {lineNumbers && (\n <span\n data-slot=\"code-block-gutter\"\n aria-hidden=\"true\"\n className=\"pr-4 text-right text-muted-foreground select-none\"\n >\n {number}\n </span>\n )}\n {markup === undefined ? (\n <span data-slot=\"code-block-source\">{line}</span>\n ) : (\n <span\n data-slot=\"code-block-source\"\n dangerouslySetInnerHTML={{ __html: markup }}\n />\n )}\n </span>\n );\n}\n\ninterface CodeBlockExpanderProps {\n expanded: boolean;\n expandLabel: string;\n collapseLabel: string;\n onToggle: () => void;\n}\n\nfunction CodeBlockExpander({\n expanded,\n expandLabel,\n collapseLabel,\n onToggle,\n}: CodeBlockExpanderProps) {\n return (\n <div\n data-slot=\"code-block-expander\"\n className=\"inset-x-0 bottom-0 pt-10 pb-2 absolute flex justify-center\"\n >\n {!expanded && (\n <span\n aria-hidden=\"true\"\n className=\"inset-0 pointer-events-none absolute bg-gradient-to-t from-card to-transparent\"\n />\n )}\n <Button\n type=\"button\"\n variant=\"secondary\"\n size=\"sm\"\n onClick={onToggle}\n >\n {expanded ? collapseLabel : expandLabel}\n </Button>\n </div>\n );\n}\n\nexport { CodeBlock };\n","export type JsonKind =\n | 'string'\n | 'number'\n | 'boolean'\n | 'null'\n | 'object'\n | 'array'\n | 'unsupported';\n\nconst CIRCULAR_MARKER = '[Circular]';\n\nexport function jsonKind(value: unknown): JsonKind {\n if (value === null) {\n return 'null';\n }\n\n if (Array.isArray(value)) {\n return 'array';\n }\n\n switch (typeof value) {\n case 'string':\n return 'string';\n case 'number':\n return Number.isFinite(value) ? 'number' : 'unsupported';\n case 'boolean':\n return 'boolean';\n case 'object':\n return 'object';\n default:\n return 'unsupported';\n }\n}\n\nexport function isBranch(kind: JsonKind): boolean {\n return kind === 'object' || kind === 'array';\n}\n\nexport function entriesOf(value: unknown): [string, unknown][] {\n if (Array.isArray(value)) {\n return value.map((item, index) => [String(index), item]);\n }\n\n if (value !== null && typeof value === 'object') {\n return Object.entries(value as Record<string, unknown>);\n }\n\n return [];\n}\n\nfunction serialisable(value: unknown, ancestors: readonly object[]): unknown {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (value === null || typeof value !== 'object') {\n return value;\n }\n\n if (ancestors.includes(value)) {\n return CIRCULAR_MARKER;\n }\n\n const trail = [...ancestors, value];\n\n if (Array.isArray(value)) {\n return value.map((item) => serialisable(item, trail));\n }\n\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, item]) => [\n key,\n serialisable(item, trail),\n ]),\n );\n}\n\nexport function stringifyJson(value: unknown): string {\n return JSON.stringify(serialisable(value, []), null, 2) ?? 'null';\n}\n","import { ChevronRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport { entriesOf, isBranch, jsonKind, type JsonKind } from '@/lib/json-value';\nimport { focusRing } from '@/lib/language';\nimport { cn } from '@/lib/utils';\n\nconst LEAF_CLASS: Record<JsonKind, string> = {\n string: 'text-success',\n number: 'text-primary',\n boolean: 'text-destructive',\n null: 'text-muted-foreground',\n object: 'text-foreground',\n array: 'text-foreground',\n unsupported: 'text-muted-foreground italic',\n};\n\nconst BRACKETS: Record<'object' | 'array', [string, string]> = {\n object: ['{', '}'],\n array: ['[', ']'],\n};\n\nexport interface JsonNodeLabels {\n expandLabel: string;\n collapseLabel: string;\n circularLabel: string;\n entriesLabel: (count: number) => string;\n}\n\ninterface JsonNodeProps {\n name?: string;\n value: unknown;\n depth: number;\n initialDepth: number;\n ancestors: readonly object[];\n labels: JsonNodeLabels;\n}\n\nfunction leafText(value: unknown, kind: JsonKind): string {\n if (kind === 'string') {\n return `\"${String(value)}\"`;\n }\n\n if (kind === 'null') {\n return 'null';\n }\n\n return String(value);\n}\n\nfunction JsonKey({ name }: { name: string }) {\n return (\n <span\n data-slot=\"json-viewer-key\"\n className=\"font-medium text-foreground\"\n >\n {name}:\n </span>\n );\n}\n\nfunction JsonNode({\n name,\n value,\n depth,\n initialDepth,\n ancestors,\n labels,\n}: JsonNodeProps) {\n const kind = jsonKind(value);\n const branch = isBranch(kind);\n const circular = branch && ancestors.includes(value as object);\n const [open, setOpen] = React.useState(depth < initialDepth);\n\n const entries = React.useMemo(\n () => (branch && !circular ? entriesOf(value) : []),\n [branch, circular, value],\n );\n const trail = React.useMemo(\n () => (branch ? [...ancestors, value as object] : ancestors),\n [branch, ancestors, value],\n );\n\n if (!branch || circular) {\n return (\n <div\n data-slot=\"json-viewer-node\"\n className=\"gap-2 py-0.5 pl-5 flex\"\n >\n {name !== undefined && <JsonKey name={name} />}\n {circular ? (\n <span\n data-slot=\"json-viewer-circular\"\n className=\"text-muted-foreground italic\"\n >\n {labels.circularLabel}\n </span>\n ) : (\n <span\n data-slot=\"json-viewer-value\"\n className={cn('break-all', LEAF_CLASS[kind])}\n >\n {leafText(value, kind)}\n </span>\n )}\n </div>\n );\n }\n\n const [opening, closing] = BRACKETS[kind === 'array' ? 'array' : 'object'];\n\n return (\n <div data-slot=\"json-viewer-node\">\n <button\n type=\"button\"\n data-slot=\"json-viewer-toggle\"\n aria-expanded={open}\n aria-label={open ? labels.collapseLabel : labels.expandLabel}\n onClick={() => setOpen((current) => !current)}\n className={cn(\n 'gap-2 rounded-xl py-0.5 flex w-full cursor-pointer items-center text-left hover:bg-accent',\n focusRing,\n )}\n >\n <ChevronRight\n aria-hidden=\"true\"\n className={cn(\n 'size-3.5 shrink-0 text-muted-foreground transition-transform',\n open && 'rotate-90',\n )}\n />\n {name !== undefined && <JsonKey name={name} />}\n <span className=\"text-muted-foreground\">{opening}</span>\n {!open && (\n <>\n <span\n data-slot=\"json-viewer-summary\"\n className=\"text-xs font-medium text-muted-foreground\"\n >\n {labels.entriesLabel(entries.length)}\n </span>\n <span className=\"text-muted-foreground\">{closing}</span>\n </>\n )}\n </button>\n {open && (\n <div className=\"ml-1.5 pl-3 border-l border-border\">\n {entries.map(([key, item]) => (\n <JsonNode\n key={key}\n name={key}\n value={item}\n depth={depth + 1}\n initialDepth={initialDepth}\n ancestors={trail}\n labels={labels}\n />\n ))}\n <div className=\"pl-5 text-muted-foreground\">{closing}</div>\n </div>\n )}\n </div>\n );\n}\n\nexport { JsonNode };\n","import * as React from 'react';\n\nimport { CopyButton } from '@/components/ui/copy-button';\nimport { JsonNode, type JsonNodeLabels } from '@/components/ui/json-node';\nimport { stringifyJson } from '@/lib/json-value';\nimport { elevatedSurface, nestedSurfaceReset } from '@/lib/language';\nimport { cn } from '@/lib/utils';\nimport { useUiLabels } from '@/locales/context';\n\nexport interface JsonViewerLabels extends JsonNodeLabels {\n copyLabel: string;\n copiedLabel: string;\n}\n\nexport const jsonViewerLabels: JsonViewerLabels = {\n copyLabel: 'Copy',\n copiedLabel: 'Copied',\n expandLabel: 'Expand',\n collapseLabel: 'Collapse',\n circularLabel: 'Circular reference',\n entriesLabel: (count) => `${count} ${count === 1 ? 'entry' : 'entries'}`,\n};\n\nexport interface JsonViewerProps extends Omit<\n React.ComponentProps<'div'>,\n 'children'\n> {\n value: unknown;\n initialDepth?: number;\n maxHeight?: number | string;\n copyLabel?: JsonViewerLabels['copyLabel'];\n copiedLabel?: JsonViewerLabels['copiedLabel'];\n expandLabel?: JsonViewerLabels['expandLabel'];\n collapseLabel?: JsonViewerLabels['collapseLabel'];\n circularLabel?: JsonViewerLabels['circularLabel'];\n entriesLabel?: JsonViewerLabels['entriesLabel'];\n}\n\nfunction JsonViewer({\n value,\n initialDepth = 1,\n maxHeight,\n copyLabel,\n copiedLabel,\n expandLabel,\n collapseLabel,\n circularLabel,\n entriesLabel,\n className,\n ...props\n}: JsonViewerProps) {\n const text = useUiLabels('jsonViewer', jsonViewerLabels, {\n copyLabel,\n copiedLabel,\n expandLabel,\n collapseLabel,\n circularLabel,\n entriesLabel,\n });\n const labels = React.useMemo<JsonNodeLabels>(\n () => ({\n expandLabel: text.expandLabel,\n collapseLabel: text.collapseLabel,\n circularLabel: text.circularLabel,\n entriesLabel: text.entriesLabel,\n }),\n [\n text.expandLabel,\n text.collapseLabel,\n text.circularLabel,\n text.entriesLabel,\n ],\n );\n\n return (\n <div\n data-slot=\"json-viewer\"\n className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'relative overflow-hidden bg-card',\n className,\n )}\n {...props}\n >\n <CopyButton\n value={stringifyJson(value)}\n copyLabel={text.copyLabel}\n copiedLabel={text.copiedLabel}\n className=\"top-2 right-2 absolute z-10 text-muted-foreground\"\n />\n <div\n data-slot=\"json-viewer-body\"\n style={{ maxHeight }}\n className=\"p-4 pr-12 font-mono text-sm leading-6 overflow-auto rounded-[inherit]\"\n >\n <JsonNode\n value={value}\n depth={0}\n initialDepth={initialDepth}\n ancestors={[]}\n labels={labels}\n />\n </div>\n </div>\n );\n}\n\nexport { JsonViewer };\n"]}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { LucideIcon } from 'lucide-react';
|
|
4
|
+
import { U as UrlLike, c as LinkComponent, I as IconComponent } from './types-B4QS3h5p.js';
|
|
5
|
+
import { d as TourLabels } from './types-u1qfmJQi.js';
|
|
6
|
+
import { a as CodeBlockLabels, c as JsonViewerLabels } from './json-viewer-BTHBACj9.js';
|
|
7
|
+
import { VariantProps } from 'class-variance-authority';
|
|
8
|
+
import { b as buttonVariants } from './button-B6wQRe7p.js';
|
|
9
|
+
import { Column, ColumnDef, Row } from '@tanstack/react-table';
|
|
10
|
+
|
|
11
|
+
interface CommandPaletteItem {
|
|
12
|
+
id: string;
|
|
13
|
+
label: string;
|
|
14
|
+
icon?: LucideIcon;
|
|
15
|
+
value?: string;
|
|
16
|
+
hint?: string;
|
|
17
|
+
}
|
|
18
|
+
interface CommandPaletteGroup {
|
|
19
|
+
heading: string;
|
|
20
|
+
items: CommandPaletteItem[];
|
|
21
|
+
}
|
|
22
|
+
interface CommandPaletteLabels {
|
|
23
|
+
placeholder: string;
|
|
24
|
+
noResultsLabel: string;
|
|
25
|
+
}
|
|
26
|
+
interface CommandPaletteProps {
|
|
27
|
+
open: boolean;
|
|
28
|
+
onOpenChange: (open: boolean) => void;
|
|
29
|
+
groups: CommandPaletteGroup[];
|
|
30
|
+
onSelect: (item: CommandPaletteItem) => void;
|
|
31
|
+
query?: string;
|
|
32
|
+
onQueryChange?: (query: string) => void;
|
|
33
|
+
placeholder?: CommandPaletteLabels['placeholder'];
|
|
34
|
+
noResultsLabel?: CommandPaletteLabels['noResultsLabel'];
|
|
35
|
+
emptyState?: ReactNode;
|
|
36
|
+
className?: string;
|
|
37
|
+
}
|
|
38
|
+
declare function CommandPalette({ open, onOpenChange, groups, onSelect, query, onQueryChange, placeholder, noResultsLabel, emptyState, className, }: CommandPaletteProps): React.JSX.Element;
|
|
39
|
+
declare function useCommandPalette(initialOpen?: boolean): {
|
|
40
|
+
open: boolean;
|
|
41
|
+
setOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
42
|
+
toggle: () => void;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
type DateFilterMode = 'all' | 'preset' | 'fixed' | 'relative';
|
|
46
|
+
type DateFilterOperator = 'between' | 'before' | 'on' | 'after';
|
|
47
|
+
type DateFilterUnit = 'day' | 'week' | 'month' | 'quarter' | 'year';
|
|
48
|
+
interface DateFilterValue {
|
|
49
|
+
mode: DateFilterMode;
|
|
50
|
+
preset?: string;
|
|
51
|
+
operator?: DateFilterOperator;
|
|
52
|
+
start?: string;
|
|
53
|
+
end?: string;
|
|
54
|
+
unit?: DateFilterUnit;
|
|
55
|
+
amount?: number;
|
|
56
|
+
include_current?: boolean;
|
|
57
|
+
offset_amount?: number;
|
|
58
|
+
offset_unit?: DateFilterUnit;
|
|
59
|
+
}
|
|
60
|
+
interface DateFilterOption {
|
|
61
|
+
value: string;
|
|
62
|
+
label: string;
|
|
63
|
+
}
|
|
64
|
+
interface DateFilterLabels {
|
|
65
|
+
all: string;
|
|
66
|
+
fixed: string;
|
|
67
|
+
relative: string;
|
|
68
|
+
relativeTitle: string;
|
|
69
|
+
apply: string;
|
|
70
|
+
back: string;
|
|
71
|
+
latest: string;
|
|
72
|
+
ago: string;
|
|
73
|
+
includeCurrent: string;
|
|
74
|
+
startingAgo: string;
|
|
75
|
+
removeOffset: string;
|
|
76
|
+
fallback: string;
|
|
77
|
+
}
|
|
78
|
+
declare const DEFAULT_PRESETS: DateFilterOption[];
|
|
79
|
+
declare const DEFAULT_OPERATORS: DateFilterOption[];
|
|
80
|
+
declare const DEFAULT_UNITS: DateFilterOption[];
|
|
81
|
+
declare const DEFAULT_LABELS: DateFilterLabels;
|
|
82
|
+
|
|
83
|
+
interface CopyButtonLabels {
|
|
84
|
+
copyLabel: string;
|
|
85
|
+
copiedLabel: string;
|
|
86
|
+
}
|
|
87
|
+
declare const copyButtonLabels: CopyButtonLabels;
|
|
88
|
+
interface CopyButtonProps extends Omit<React.ComponentProps<'button'>, 'value' | 'onCopy' | 'onError'>, VariantProps<typeof buttonVariants> {
|
|
89
|
+
value: string;
|
|
90
|
+
copyLabel?: CopyButtonLabels['copyLabel'];
|
|
91
|
+
copiedLabel?: CopyButtonLabels['copiedLabel'];
|
|
92
|
+
acknowledgementDuration?: number;
|
|
93
|
+
onCopied?: (value: string) => void;
|
|
94
|
+
onCopyFailed?: (reason: unknown) => void;
|
|
95
|
+
}
|
|
96
|
+
declare function CopyButton({ value, copyLabel, copiedLabel, acknowledgementDuration, onCopied, onCopyFailed, onClick, variant, size, className, ...props }: CopyButtonProps): React.JSX.Element;
|
|
97
|
+
|
|
98
|
+
interface SettingsPageProps {
|
|
99
|
+
title?: string;
|
|
100
|
+
description?: string;
|
|
101
|
+
control?: ReactNode;
|
|
102
|
+
linkComponent?: LinkComponent;
|
|
103
|
+
children: ReactNode;
|
|
104
|
+
className?: string;
|
|
105
|
+
}
|
|
106
|
+
declare function SettingsPage({ title, description, control, linkComponent, children, className, }: SettingsPageProps): React.JSX.Element;
|
|
107
|
+
interface SettingsLabels {
|
|
108
|
+
back: string;
|
|
109
|
+
}
|
|
110
|
+
declare const settingsLabels: SettingsLabels;
|
|
111
|
+
interface SettingsSectionProps {
|
|
112
|
+
title?: string;
|
|
113
|
+
description?: string;
|
|
114
|
+
control?: ReactNode;
|
|
115
|
+
backHref?: UrlLike | null;
|
|
116
|
+
backLabel?: string;
|
|
117
|
+
wide?: boolean;
|
|
118
|
+
linkComponent?: LinkComponent;
|
|
119
|
+
children: ReactNode;
|
|
120
|
+
className?: string;
|
|
121
|
+
}
|
|
122
|
+
declare function SettingsSection({ title, description, control, backHref, backLabel, wide, linkComponent, children, className, }: SettingsSectionProps): React.JSX.Element;
|
|
123
|
+
interface SettingsGroupProps {
|
|
124
|
+
label?: string;
|
|
125
|
+
columns?: 1 | 2;
|
|
126
|
+
children: ReactNode;
|
|
127
|
+
className?: string;
|
|
128
|
+
}
|
|
129
|
+
declare function SettingsGroup({ label, columns, children, className, }: SettingsGroupProps): React.JSX.Element;
|
|
130
|
+
interface SettingsEntryProps {
|
|
131
|
+
icon: LucideIcon;
|
|
132
|
+
iconClassName?: string;
|
|
133
|
+
title: string;
|
|
134
|
+
description?: string;
|
|
135
|
+
href: UrlLike;
|
|
136
|
+
badge?: ReactNode;
|
|
137
|
+
disabled?: boolean;
|
|
138
|
+
linkComponent?: LinkComponent;
|
|
139
|
+
className?: string;
|
|
140
|
+
}
|
|
141
|
+
declare function SettingsEntry({ icon: Icon, iconClassName, title, description, href, badge, disabled, linkComponent, className, }: SettingsEntryProps): React.JSX.Element;
|
|
142
|
+
|
|
143
|
+
interface AppearanceToggleLabels {
|
|
144
|
+
groupLabel: string;
|
|
145
|
+
lightLabel: string;
|
|
146
|
+
darkLabel: string;
|
|
147
|
+
systemLabel: string;
|
|
148
|
+
}
|
|
149
|
+
declare const appearanceToggleDefaultLabels: AppearanceToggleLabels;
|
|
150
|
+
interface AppearanceToggleProps extends React.ComponentProps<'div'> {
|
|
151
|
+
variant?: 'segmented' | 'menu';
|
|
152
|
+
labels?: Partial<AppearanceToggleLabels>;
|
|
153
|
+
}
|
|
154
|
+
declare function AppearanceToggle({ className, variant, labels: labelOverrides, ...props }: AppearanceToggleProps): React.JSX.Element;
|
|
155
|
+
|
|
156
|
+
interface ComboboxOption {
|
|
157
|
+
value: string;
|
|
158
|
+
label: string;
|
|
159
|
+
}
|
|
160
|
+
interface ComboboxLabels {
|
|
161
|
+
placeholder: string;
|
|
162
|
+
searchPlaceholder: string;
|
|
163
|
+
emptyText: string;
|
|
164
|
+
}
|
|
165
|
+
declare const comboboxDefaultLabels: ComboboxLabels;
|
|
166
|
+
interface ComboboxProps {
|
|
167
|
+
id?: string;
|
|
168
|
+
value: string;
|
|
169
|
+
options: ComboboxOption[];
|
|
170
|
+
onChange: (value: string) => void;
|
|
171
|
+
placeholder?: ComboboxLabels['placeholder'];
|
|
172
|
+
searchPlaceholder?: ComboboxLabels['searchPlaceholder'];
|
|
173
|
+
emptyText?: ComboboxLabels['emptyText'];
|
|
174
|
+
disabled?: boolean;
|
|
175
|
+
invalid?: boolean;
|
|
176
|
+
}
|
|
177
|
+
declare function Combobox({ id, value, options, onChange, placeholder, searchPlaceholder, emptyText, disabled, invalid, }: ComboboxProps): React.JSX.Element;
|
|
178
|
+
|
|
179
|
+
interface ConfirmDialogLabels {
|
|
180
|
+
title: string;
|
|
181
|
+
description: string;
|
|
182
|
+
confirmText: string;
|
|
183
|
+
cancelText: string;
|
|
184
|
+
}
|
|
185
|
+
declare const confirmDialogDefaultLabels: ConfirmDialogLabels;
|
|
186
|
+
interface ConfirmDialogProps {
|
|
187
|
+
open: boolean;
|
|
188
|
+
onOpenChange: (open: boolean) => void;
|
|
189
|
+
title?: ConfirmDialogLabels['title'];
|
|
190
|
+
description?: ConfirmDialogLabels['description'] | ReactNode;
|
|
191
|
+
confirmText?: ConfirmDialogLabels['confirmText'];
|
|
192
|
+
cancelText?: ConfirmDialogLabels['cancelText'];
|
|
193
|
+
variant?: 'destructive' | 'default';
|
|
194
|
+
processing?: boolean;
|
|
195
|
+
requiredValue?: string;
|
|
196
|
+
requiredValueLabel?: string;
|
|
197
|
+
onConfirm: () => void;
|
|
198
|
+
onCancel?: () => void;
|
|
199
|
+
}
|
|
200
|
+
declare function ConfirmDialog({ open, onOpenChange, title, description, confirmText, cancelText, variant, processing, requiredValue, requiredValueLabel, onConfirm, onCancel, }: ConfirmDialogProps): React.JSX.Element;
|
|
201
|
+
|
|
202
|
+
interface DataTableFilter {
|
|
203
|
+
columnId: string;
|
|
204
|
+
label: string;
|
|
205
|
+
options: {
|
|
206
|
+
label: string;
|
|
207
|
+
value: string;
|
|
208
|
+
}[];
|
|
209
|
+
}
|
|
210
|
+
interface DataTableServerFilter {
|
|
211
|
+
paramKey: string;
|
|
212
|
+
label: string;
|
|
213
|
+
options: {
|
|
214
|
+
label: string;
|
|
215
|
+
value: string;
|
|
216
|
+
}[];
|
|
217
|
+
}
|
|
218
|
+
interface DataTableFacetedFilterLabels {
|
|
219
|
+
noOptionsLabel: string;
|
|
220
|
+
}
|
|
221
|
+
declare const dataTableFacetedFilterDefaultLabels: DataTableFacetedFilterLabels;
|
|
222
|
+
declare function FacetedFilter<TData>({ column, filter, noOptionsLabel, }: {
|
|
223
|
+
column?: Column<TData, unknown>;
|
|
224
|
+
filter: DataTableFilter;
|
|
225
|
+
noOptionsLabel?: DataTableFacetedFilterLabels['noOptionsLabel'];
|
|
226
|
+
}): React.JSX.Element;
|
|
227
|
+
declare function ServerFacetedFilter({ filter, selected, onChange, noOptionsLabel, }: {
|
|
228
|
+
filter: DataTableServerFilter;
|
|
229
|
+
selected: string[];
|
|
230
|
+
onChange: (values: string[]) => void;
|
|
231
|
+
noOptionsLabel?: DataTableFacetedFilterLabels['noOptionsLabel'];
|
|
232
|
+
}): React.JSX.Element;
|
|
233
|
+
|
|
234
|
+
interface DataTableRowAction<TData> {
|
|
235
|
+
label: string;
|
|
236
|
+
icon?: IconComponent;
|
|
237
|
+
variant?: 'default' | 'destructive';
|
|
238
|
+
onClick: (row: TData) => void;
|
|
239
|
+
}
|
|
240
|
+
declare function RowActionsMenu<TData>({ row, actions, }: {
|
|
241
|
+
row: TData;
|
|
242
|
+
actions: DataTableRowAction<TData>[];
|
|
243
|
+
}): React.JSX.Element;
|
|
244
|
+
|
|
245
|
+
interface DataTableLabels {
|
|
246
|
+
searchPlaceholder: string;
|
|
247
|
+
emptyLabel: string;
|
|
248
|
+
createLabel: string;
|
|
249
|
+
clearFiltersLabel: string;
|
|
250
|
+
paginationLabel: (page: number, pages: number) => string;
|
|
251
|
+
noOptionsLabel: string;
|
|
252
|
+
totalLabel: (total: number) => string;
|
|
253
|
+
}
|
|
254
|
+
declare const dataTableDefaultLabels: DataTableLabels;
|
|
255
|
+
interface DataTableProps<TData, TValue> {
|
|
256
|
+
columns: ColumnDef<TData, TValue>[];
|
|
257
|
+
data: TData[];
|
|
258
|
+
searchPlaceholder?: DataTableLabels['searchPlaceholder'];
|
|
259
|
+
emptyLabel?: DataTableLabels['emptyLabel'];
|
|
260
|
+
createLabel?: DataTableLabels['createLabel'];
|
|
261
|
+
clearFiltersLabel?: DataTableLabels['clearFiltersLabel'];
|
|
262
|
+
paginationLabel?: DataTableLabels['paginationLabel'];
|
|
263
|
+
noOptionsLabel?: DataTableLabels['noOptionsLabel'];
|
|
264
|
+
totalLabel?: DataTableLabels['totalLabel'];
|
|
265
|
+
searchKey?: string;
|
|
266
|
+
pageSize?: number;
|
|
267
|
+
pageSizeOptions?: number[];
|
|
268
|
+
onPageSizeChange?: (size: number) => void;
|
|
269
|
+
filters?: DataTableFilter[];
|
|
270
|
+
serverFilters?: DataTableServerFilter[];
|
|
271
|
+
filterValues?: Record<string, string[]>;
|
|
272
|
+
onFilterChange?: (paramKey: string, values: string[]) => void;
|
|
273
|
+
canClearFilters?: boolean;
|
|
274
|
+
onClearFilters?: () => void;
|
|
275
|
+
toolbarExtra?: ReactNode;
|
|
276
|
+
toolbarAction?: ReactNode;
|
|
277
|
+
renderRow?: (row: Row<TData>) => ReactNode;
|
|
278
|
+
onRowClick?: (row: TData) => void;
|
|
279
|
+
isRowActive?: (row: TData) => boolean;
|
|
280
|
+
rowActions?: DataTableRowAction<TData>[];
|
|
281
|
+
searchValue?: string;
|
|
282
|
+
onSearchChange?: (value: string) => void;
|
|
283
|
+
manualPagination?: boolean;
|
|
284
|
+
pageCount?: number;
|
|
285
|
+
pageIndex?: number;
|
|
286
|
+
total?: number;
|
|
287
|
+
onPageChange?: (pageIndex: number) => void;
|
|
288
|
+
onCreate?: () => void;
|
|
289
|
+
}
|
|
290
|
+
declare function DataTable<TData, TValue>({ columns, data, searchKey, searchPlaceholder, pageSize, pageSizeOptions, onPageSizeChange, filters, serverFilters, filterValues, onFilterChange, canClearFilters, onClearFilters, toolbarExtra, toolbarAction, emptyLabel, clearFiltersLabel, paginationLabel, noOptionsLabel, totalLabel, renderRow, onRowClick, isRowActive, rowActions, searchValue, onSearchChange, manualPagination, pageCount, pageIndex, total, onPageChange, onCreate, createLabel, }: DataTableProps<TData, TValue>): React.JSX.Element;
|
|
291
|
+
|
|
292
|
+
interface DatePickerLabels {
|
|
293
|
+
placeholder: string;
|
|
294
|
+
dateFormat: string;
|
|
295
|
+
clearLabel: string;
|
|
296
|
+
}
|
|
297
|
+
declare const datePickerDefaultLabels: DatePickerLabels;
|
|
298
|
+
interface DatePickerProps extends Partial<DatePickerLabels> {
|
|
299
|
+
id?: string;
|
|
300
|
+
value?: Date;
|
|
301
|
+
defaultValue?: Date;
|
|
302
|
+
onChange?: (value: Date | undefined) => void;
|
|
303
|
+
minDate?: Date;
|
|
304
|
+
maxDate?: Date;
|
|
305
|
+
disabledDays?: (date: Date) => boolean;
|
|
306
|
+
disabled?: boolean;
|
|
307
|
+
clearable?: boolean;
|
|
308
|
+
invalid?: boolean;
|
|
309
|
+
formatDate?: (value: Date) => string;
|
|
310
|
+
className?: string;
|
|
311
|
+
}
|
|
312
|
+
declare function DatePicker(props: DatePickerProps): React.JSX.Element;
|
|
313
|
+
|
|
314
|
+
interface DateRangeFilterLabels {
|
|
315
|
+
emptyLabel: string;
|
|
316
|
+
dateFormat: string;
|
|
317
|
+
}
|
|
318
|
+
declare const dateRangeFilterDefaultLabels: DateRangeFilterLabels;
|
|
319
|
+
declare function DateRangeFilter({ from, to, onChange, emptyLabel, dateFormat, }: {
|
|
320
|
+
from?: string;
|
|
321
|
+
to?: string;
|
|
322
|
+
onChange: (range: {
|
|
323
|
+
from?: string;
|
|
324
|
+
to?: string;
|
|
325
|
+
}) => void;
|
|
326
|
+
} & Partial<DateRangeFilterLabels>): React.JSX.Element;
|
|
327
|
+
|
|
328
|
+
interface FloatingSheetLabels {
|
|
329
|
+
backLabel: string;
|
|
330
|
+
closeLabel: string;
|
|
331
|
+
}
|
|
332
|
+
declare const floatingSheetDefaultLabels: FloatingSheetLabels;
|
|
333
|
+
|
|
334
|
+
type SaveStatusState = 'idle' | 'saving' | 'saved' | 'error';
|
|
335
|
+
interface SaveStatusLabels {
|
|
336
|
+
error: string;
|
|
337
|
+
idle: string;
|
|
338
|
+
saved: string;
|
|
339
|
+
saving: string;
|
|
340
|
+
}
|
|
341
|
+
declare const saveStatusLabels: SaveStatusLabels;
|
|
342
|
+
declare const SAVED_DURATION = 2000;
|
|
343
|
+
interface SaveStatusProps extends React.ComponentProps<'div'> {
|
|
344
|
+
status: SaveStatusState;
|
|
345
|
+
message?: string;
|
|
346
|
+
showIdle?: boolean;
|
|
347
|
+
savedDuration?: number;
|
|
348
|
+
labels?: Partial<SaveStatusLabels>;
|
|
349
|
+
}
|
|
350
|
+
declare function SaveStatus({ status, message, showIdle, savedDuration, labels, className, ...props }: SaveStatusProps): React.JSX.Element;
|
|
351
|
+
|
|
352
|
+
interface UiLabelSections {
|
|
353
|
+
appearanceToggle: AppearanceToggleLabels;
|
|
354
|
+
codeBlock: CodeBlockLabels;
|
|
355
|
+
combobox: ComboboxLabels;
|
|
356
|
+
commandPalette: CommandPaletteLabels;
|
|
357
|
+
confirmDialog: ConfirmDialogLabels;
|
|
358
|
+
copyButton: CopyButtonLabels;
|
|
359
|
+
dataTable: DataTableLabels;
|
|
360
|
+
dataTableFacetedFilter: DataTableFacetedFilterLabels;
|
|
361
|
+
dateFilter: DateFilterLabels;
|
|
362
|
+
datePicker: DatePickerLabels;
|
|
363
|
+
dateRangeFilter: DateRangeFilterLabels;
|
|
364
|
+
floatingSheet: FloatingSheetLabels;
|
|
365
|
+
jsonViewer: JsonViewerLabels;
|
|
366
|
+
saveStatus: SaveStatusLabels;
|
|
367
|
+
settings: SettingsLabels;
|
|
368
|
+
tour: TourLabels;
|
|
369
|
+
}
|
|
370
|
+
type UiLabels = {
|
|
371
|
+
[Section in keyof UiLabelSections]?: Partial<UiLabelSections[Section]>;
|
|
372
|
+
} & {
|
|
373
|
+
dateFilterPresets?: DateFilterOption[];
|
|
374
|
+
dateFilterOperators?: DateFilterOption[];
|
|
375
|
+
dateFilterUnits?: DateFilterOption[];
|
|
376
|
+
};
|
|
377
|
+
declare function UiLocaleProvider({ labels, children, }: {
|
|
378
|
+
labels: UiLabels;
|
|
379
|
+
children: ReactNode;
|
|
380
|
+
}): React.JSX.Element;
|
|
381
|
+
declare function useUiLocale(): UiLabels;
|
|
382
|
+
declare function useUiLabels<Section extends keyof UiLabelSections>(section: Section, defaults: UiLabelSections[Section], overrides?: Partial<UiLabelSections[Section]>): UiLabelSections[Section];
|
|
383
|
+
|
|
384
|
+
export { FacetedFilter as $, useUiLocale as A, AppearanceToggle as B, type CopyButtonLabels as C, type DateFilterValue as D, type AppearanceToggleLabels as E, type FloatingSheetLabels as F, type AppearanceToggleProps as G, Combobox as H, type ComboboxLabels as I, type ComboboxOption as J, ConfirmDialog as K, type ConfirmDialogLabels as L, CopyButton as M, type CopyButtonProps as N, DataTable as O, type DataTableFacetedFilterLabels as P, type DataTableFilter as Q, type DataTableLabels as R, SettingsEntry as S, type DataTableRowAction as T, type UiLabelSections as U, type DataTableServerFilter as V, DatePicker as W, type DatePickerLabels as X, type DatePickerProps as Y, DateRangeFilter as Z, type DateRangeFilterLabels as _, type DateFilterLabels as a, RowActionsMenu as a0, SAVED_DURATION as a1, SaveStatus as a2, type SaveStatusLabels as a3, type SaveStatusProps as a4, type SaveStatusState as a5, ServerFacetedFilter as a6, appearanceToggleDefaultLabels as a7, comboboxDefaultLabels as a8, confirmDialogDefaultLabels as a9, copyButtonLabels as aa, dataTableDefaultLabels as ab, dataTableFacetedFilterDefaultLabels as ac, datePickerDefaultLabels as ad, dateRangeFilterDefaultLabels as ae, floatingSheetDefaultLabels as af, saveStatusLabels as ag, type CommandPaletteLabels as ah, type DateFilterOption as b, type DateFilterUnit as c, CommandPalette as d, type CommandPaletteGroup as e, type CommandPaletteItem as f, type CommandPaletteProps as g, DEFAULT_LABELS as h, DEFAULT_OPERATORS as i, DEFAULT_PRESETS as j, DEFAULT_UNITS as k, type DateFilterMode as l, type DateFilterOperator as m, type SettingsEntryProps as n, SettingsGroup as o, type SettingsGroupProps as p, type SettingsLabels as q, SettingsPage as r, type SettingsPageProps as s, SettingsSection as t, type SettingsSectionProps as u, type UiLabels as v, UiLocaleProvider as w, settingsLabels as x, useCommandPalette as y, useUiLabels as z };
|
package/dist/editor.d.ts
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { Editor as Editor$1, Extensions, JSONContent } from '@tiptap/core';
|
|
4
|
+
import { LucideIcon } from 'lucide-react';
|
|
5
|
+
|
|
6
|
+
interface EditorContentProps {
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
declare function EditorContent({ className }: EditorContentProps): React.JSX.Element;
|
|
10
|
+
|
|
11
|
+
interface EditorLabels {
|
|
12
|
+
toolbarLabel: string;
|
|
13
|
+
boldLabel: string;
|
|
14
|
+
italicLabel: string;
|
|
15
|
+
strikeLabel: string;
|
|
16
|
+
codeLabel: string;
|
|
17
|
+
headingLabel: (level: number) => string;
|
|
18
|
+
bulletListLabel: string;
|
|
19
|
+
orderedListLabel: string;
|
|
20
|
+
blockquoteLabel: string;
|
|
21
|
+
undoLabel: string;
|
|
22
|
+
redoLabel: string;
|
|
23
|
+
linkLabel: string;
|
|
24
|
+
linkDialogTitle: string;
|
|
25
|
+
linkDialogDescription: string;
|
|
26
|
+
linkUrlLabel: string;
|
|
27
|
+
linkUrlPlaceholder: string;
|
|
28
|
+
linkApplyLabel: string;
|
|
29
|
+
linkRemoveLabel: string;
|
|
30
|
+
linkCancelLabel: string;
|
|
31
|
+
}
|
|
32
|
+
declare const editorLabels: EditorLabels;
|
|
33
|
+
|
|
34
|
+
interface EditorContextValue {
|
|
35
|
+
editor: Editor$1;
|
|
36
|
+
labels: EditorLabels;
|
|
37
|
+
editable: boolean;
|
|
38
|
+
placeholder?: string;
|
|
39
|
+
}
|
|
40
|
+
declare function useEditorContext(): EditorContextValue;
|
|
41
|
+
|
|
42
|
+
type EditorMarkName = 'bold' | 'italic' | 'strike' | 'code';
|
|
43
|
+
interface EditorMarkProps {
|
|
44
|
+
mark: EditorMarkName;
|
|
45
|
+
label?: string;
|
|
46
|
+
className?: string;
|
|
47
|
+
}
|
|
48
|
+
declare function EditorMark({ mark, label, className }: EditorMarkProps): React.JSX.Element;
|
|
49
|
+
interface EditorHeadingProps {
|
|
50
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
51
|
+
label?: string;
|
|
52
|
+
className?: string;
|
|
53
|
+
}
|
|
54
|
+
declare function EditorHeading({ level, label, className }: EditorHeadingProps): React.JSX.Element;
|
|
55
|
+
type EditorListVariant = 'bullet' | 'ordered';
|
|
56
|
+
interface EditorListProps {
|
|
57
|
+
variant: EditorListVariant;
|
|
58
|
+
label?: string;
|
|
59
|
+
className?: string;
|
|
60
|
+
}
|
|
61
|
+
declare function EditorList({ variant, label, className }: EditorListProps): React.JSX.Element;
|
|
62
|
+
interface EditorBlockquoteProps {
|
|
63
|
+
label?: string;
|
|
64
|
+
className?: string;
|
|
65
|
+
}
|
|
66
|
+
declare function EditorBlockquote({ label, className }: EditorBlockquoteProps): React.JSX.Element;
|
|
67
|
+
type EditorHistoryAction = 'undo' | 'redo';
|
|
68
|
+
interface EditorHistoryProps {
|
|
69
|
+
action: EditorHistoryAction;
|
|
70
|
+
label?: string;
|
|
71
|
+
className?: string;
|
|
72
|
+
}
|
|
73
|
+
declare function EditorHistory({ action, label, className, }: EditorHistoryProps): React.JSX.Element;
|
|
74
|
+
|
|
75
|
+
type EditorOutput = 'html' | 'json';
|
|
76
|
+
type EditorDocument = string | JSONContent;
|
|
77
|
+
interface EditorSharedProps {
|
|
78
|
+
extensions?: Extensions;
|
|
79
|
+
labels?: EditorLabels;
|
|
80
|
+
placeholder?: string;
|
|
81
|
+
label?: string;
|
|
82
|
+
disabled?: boolean;
|
|
83
|
+
readOnly?: boolean;
|
|
84
|
+
className?: string;
|
|
85
|
+
children: ReactNode;
|
|
86
|
+
}
|
|
87
|
+
type EditorProps = EditorSharedProps & ({
|
|
88
|
+
output?: 'html';
|
|
89
|
+
value: string;
|
|
90
|
+
onChange: (value: string) => void;
|
|
91
|
+
} | {
|
|
92
|
+
output: 'json';
|
|
93
|
+
value: JSONContent;
|
|
94
|
+
onChange: (value: JSONContent) => void;
|
|
95
|
+
});
|
|
96
|
+
declare function Editor({ value, onChange, output, extensions, labels, placeholder, label, disabled, readOnly, className, children, }: EditorProps): React.JSX.Element | null;
|
|
97
|
+
|
|
98
|
+
declare function isSafeEditorUrl(url: string): boolean;
|
|
99
|
+
declare function defaultEditorExtensions(): Extensions;
|
|
100
|
+
|
|
101
|
+
interface EditorLinkProps {
|
|
102
|
+
label?: string;
|
|
103
|
+
className?: string;
|
|
104
|
+
}
|
|
105
|
+
declare function EditorLink({ label, className }: EditorLinkProps): React.JSX.Element;
|
|
106
|
+
|
|
107
|
+
type WithoutChildren<T> = T extends unknown ? Omit<T, 'children'> : never;
|
|
108
|
+
type RichTextEditorProps = WithoutChildren<EditorProps>;
|
|
109
|
+
declare function RichTextEditor(props: RichTextEditorProps): React.JSX.Element;
|
|
110
|
+
|
|
111
|
+
interface EditorToolbarProps {
|
|
112
|
+
children: ReactNode;
|
|
113
|
+
className?: string;
|
|
114
|
+
}
|
|
115
|
+
declare function EditorToolbar({ children, className }: EditorToolbarProps): React.JSX.Element;
|
|
116
|
+
interface EditorControlProps {
|
|
117
|
+
label: string;
|
|
118
|
+
icon: LucideIcon;
|
|
119
|
+
pressed?: boolean;
|
|
120
|
+
disabled?: boolean;
|
|
121
|
+
onActivate: () => void;
|
|
122
|
+
className?: string;
|
|
123
|
+
}
|
|
124
|
+
declare function EditorControl({ label, icon: Icon, pressed, disabled, onActivate, className, }: EditorControlProps): React.JSX.Element;
|
|
125
|
+
|
|
126
|
+
export { Editor, EditorBlockquote, type EditorBlockquoteProps, EditorContent, type EditorContentProps, type EditorContextValue, EditorControl, type EditorControlProps, type EditorDocument, EditorHeading, type EditorHeadingProps, EditorHistory, type EditorHistoryAction, type EditorHistoryProps, type EditorLabels, EditorLink, type EditorLinkProps, EditorList, type EditorListProps, type EditorListVariant, EditorMark, type EditorMarkName, type EditorMarkProps, type EditorOutput, type EditorProps, EditorToolbar, type EditorToolbarProps, RichTextEditor, type RichTextEditorProps, defaultEditorExtensions, editorLabels, isSafeEditorUrl, useEditorContext };
|