@akira-io/ui 1.1.0 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/blocks.d.ts +25 -25
- package/dist/blocks.js +74 -59
- package/dist/blocks.js.map +1 -1
- package/dist/{button-B6wQRe7p.d.ts → button-Bj6My68b.d.ts} +2 -1
- package/dist/{chunk-JAHTUAQL.js → chunk-2WIIRDHT.js} +5 -4
- package/dist/chunk-2WIIRDHT.js.map +1 -0
- package/dist/{chunk-KYWA5UYN.js → chunk-4SOQAVUP.js} +5 -5
- package/dist/{chunk-KYWA5UYN.js.map → chunk-4SOQAVUP.js.map} +1 -1
- package/dist/{chunk-UUTXPPRN.js → chunk-CFDDAFPJ.js} +125 -82
- package/dist/chunk-CFDDAFPJ.js.map +1 -0
- package/dist/{chunk-LKSM3WLK.js → chunk-FWQFB37J.js} +6 -5
- package/dist/chunk-FWQFB37J.js.map +1 -0
- package/dist/{chunk-DSD7MVLL.js → chunk-ODYCBCKS.js} +10 -7
- package/dist/chunk-ODYCBCKS.js.map +1 -0
- package/dist/{chunk-MNGNBEYN.js → chunk-QHZWW55M.js} +245 -156
- package/dist/chunk-QHZWW55M.js.map +1 -0
- package/dist/{chunk-SA5LM2GD.js → chunk-RPCL7VFQ.js} +41 -20
- package/dist/chunk-RPCL7VFQ.js.map +1 -0
- package/dist/{chunk-6QM5BA7B.js → chunk-T2INZOCM.js} +40 -23
- package/dist/chunk-T2INZOCM.js.map +1 -0
- package/dist/{chunk-UUEWFCKT.js → chunk-TGF54WAO.js} +6 -5
- package/dist/chunk-TGF54WAO.js.map +1 -0
- package/dist/{chunk-6X4TKSF6.js → chunk-XZCC6MTE.js} +11 -6
- package/dist/chunk-XZCC6MTE.js.map +1 -0
- package/dist/code.d.ts +5 -2
- package/dist/code.js +51 -52
- package/dist/code.js.map +1 -1
- package/dist/{context-VgHq4U98.d.ts → context-YWbxMH0C.d.ts} +26 -27
- package/dist/editor.d.ts +8 -6
- package/dist/editor.js +32 -18
- package/dist/editor.js.map +1 -1
- package/dist/index.d.ts +229 -229
- package/dist/index.js +431 -325
- package/dist/index.js.map +1 -1
- package/dist/inertia.d.ts +1 -1
- package/dist/inertia.js +5 -5
- package/dist/input-Dpi7pXeR.d.ts +6 -0
- package/dist/{json-viewer-BTHBACj9.d.ts → json-viewer-BARA2RCW.d.ts} +3 -2
- package/dist/locales/pt.d.ts +8 -8
- package/dist/{password-input-r39y2pCT.d.ts → password-input-DcXX7SG9.d.ts} +8 -7
- package/dist/shells.d.ts +7 -7
- package/dist/shells.js +10 -9
- package/dist/shells.js.map +1 -1
- package/dist/sidebar-DqkFRUxQ.d.ts +81 -0
- package/dist/{types-CT0rBsFc.d.ts → types-B-eGPoFD.d.ts} +3 -2
- package/dist/{types-B4QS3h5p.d.ts → types-cmBL8zOc.d.ts} +4 -1
- package/package.json +3 -3
- package/dist/chunk-6QM5BA7B.js.map +0 -1
- package/dist/chunk-6X4TKSF6.js.map +0 -1
- package/dist/chunk-DSD7MVLL.js.map +0 -1
- package/dist/chunk-JAHTUAQL.js.map +0 -1
- package/dist/chunk-LKSM3WLK.js.map +0 -1
- package/dist/chunk-MNGNBEYN.js.map +0 -1
- package/dist/chunk-SA5LM2GD.js.map +0 -1
- package/dist/chunk-UUEWFCKT.js.map +0 -1
- package/dist/chunk-UUTXPPRN.js.map +0 -1
- package/dist/input-4uxAHW6y.d.ts +0 -5
- package/dist/sidebar-BhOIlSjt.d.ts +0 -80
package/dist/code.js
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
import { CopyButton } from './chunk-
|
|
1
|
+
import { CopyButton } from './chunk-2WIIRDHT.js';
|
|
2
2
|
import { useUiLabels } from './chunk-5AJFQ6C4.js';
|
|
3
|
-
import { cn, compactRadius, controlFill, elevatedSurface, nestedSurfaceReset, Button, focusRing } from './chunk-
|
|
3
|
+
import { cn, compactRadius, controlFill, elevatedSurface, nestedSurfaceReset, Button, focusRing } from './chunk-ODYCBCKS.js';
|
|
4
4
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
5
5
|
import * as React2 from 'react';
|
|
6
6
|
import { FileCode, ChevronRight } from 'lucide-react';
|
|
7
7
|
|
|
8
|
-
function Code({
|
|
8
|
+
function Code({
|
|
9
|
+
className,
|
|
10
|
+
slotName = "code",
|
|
11
|
+
...props
|
|
12
|
+
}) {
|
|
9
13
|
return /* @__PURE__ */ jsx(
|
|
10
14
|
"code",
|
|
11
15
|
{
|
|
12
|
-
"data-slot": "code",
|
|
13
16
|
className: cn(
|
|
14
17
|
compactRadius,
|
|
15
18
|
controlFill,
|
|
16
19
|
"px-1.5 py-0.5 font-mono font-medium text-[0.875em] text-foreground",
|
|
17
20
|
className
|
|
18
21
|
),
|
|
19
|
-
...props
|
|
22
|
+
...props,
|
|
23
|
+
"data-slot": slotName
|
|
20
24
|
}
|
|
21
25
|
);
|
|
22
26
|
}
|
|
@@ -25,13 +29,14 @@ function CodeBlockHeader({
|
|
|
25
29
|
language,
|
|
26
30
|
code,
|
|
27
31
|
copyLabel,
|
|
28
|
-
copiedLabel
|
|
32
|
+
copiedLabel,
|
|
33
|
+
slotName = "code-block-header"
|
|
29
34
|
}) {
|
|
30
35
|
return /* @__PURE__ */ jsxs(
|
|
31
36
|
"div",
|
|
32
37
|
{
|
|
33
|
-
"data-slot": "code-block-header",
|
|
34
38
|
className: "gap-2 px-4 py-2 flex items-center border-b border-border",
|
|
39
|
+
"data-slot": slotName,
|
|
35
40
|
children: [
|
|
36
41
|
/* @__PURE__ */ jsx(FileCode, { className: "size-4 shrink-0 text-muted-foreground" }),
|
|
37
42
|
/* @__PURE__ */ jsx(
|
|
@@ -199,6 +204,7 @@ function CodeBlock({
|
|
|
199
204
|
expandLabel,
|
|
200
205
|
collapseLabel,
|
|
201
206
|
className,
|
|
207
|
+
slotName = "code-block",
|
|
202
208
|
...props
|
|
203
209
|
}) {
|
|
204
210
|
const labels = useUiLabels("codeBlock", codeBlockLabels, {
|
|
@@ -230,7 +236,6 @@ function CodeBlock({
|
|
|
230
236
|
return /* @__PURE__ */ jsxs(
|
|
231
237
|
"div",
|
|
232
238
|
{
|
|
233
|
-
"data-slot": "code-block",
|
|
234
239
|
className: cn(
|
|
235
240
|
elevatedSurface,
|
|
236
241
|
nestedSurfaceReset,
|
|
@@ -238,6 +243,7 @@ function CodeBlock({
|
|
|
238
243
|
className
|
|
239
244
|
),
|
|
240
245
|
...props,
|
|
246
|
+
"data-slot": slotName,
|
|
241
247
|
children: [
|
|
242
248
|
filename === void 0 ? /* @__PURE__ */ jsx(
|
|
243
249
|
CopyButton,
|
|
@@ -295,17 +301,18 @@ function CodeBlockLine({
|
|
|
295
301
|
line,
|
|
296
302
|
markup,
|
|
297
303
|
lineNumbers,
|
|
298
|
-
emphasised
|
|
304
|
+
emphasised,
|
|
305
|
+
slotName = "code-block-line"
|
|
299
306
|
}) {
|
|
300
307
|
return /* @__PURE__ */ jsxs(
|
|
301
308
|
"span",
|
|
302
309
|
{
|
|
303
|
-
"data-slot": "code-block-line",
|
|
304
310
|
"data-highlighted": emphasised ? "" : void 0,
|
|
305
311
|
className: cn(
|
|
306
312
|
"min-h-6 px-4 grid w-full data-highlighted:bg-accent",
|
|
307
313
|
lineNumbers ? "grid-cols-[2.5rem_1fr]" : "grid-cols-1"
|
|
308
314
|
),
|
|
315
|
+
"data-slot": slotName,
|
|
309
316
|
children: [
|
|
310
317
|
lineNumbers && /* @__PURE__ */ jsx(
|
|
311
318
|
"span",
|
|
@@ -331,13 +338,14 @@ function CodeBlockExpander({
|
|
|
331
338
|
expanded,
|
|
332
339
|
expandLabel,
|
|
333
340
|
collapseLabel,
|
|
334
|
-
onToggle
|
|
341
|
+
onToggle,
|
|
342
|
+
slotName = "code-block-expander"
|
|
335
343
|
}) {
|
|
336
344
|
return /* @__PURE__ */ jsxs(
|
|
337
345
|
"div",
|
|
338
346
|
{
|
|
339
|
-
"data-slot": "code-block-expander",
|
|
340
347
|
className: "inset-x-0 bottom-0 pt-10 pb-2 absolute flex justify-center",
|
|
348
|
+
"data-slot": slotName,
|
|
341
349
|
children: [
|
|
342
350
|
!expanded && /* @__PURE__ */ jsx(
|
|
343
351
|
"span",
|
|
@@ -441,18 +449,14 @@ function leafText(value, kind) {
|
|
|
441
449
|
}
|
|
442
450
|
return String(value);
|
|
443
451
|
}
|
|
444
|
-
function JsonKey({
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
":"
|
|
453
|
-
]
|
|
454
|
-
}
|
|
455
|
-
);
|
|
452
|
+
function JsonKey({
|
|
453
|
+
name,
|
|
454
|
+
slotName = "json-viewer-key"
|
|
455
|
+
}) {
|
|
456
|
+
return /* @__PURE__ */ jsxs("span", { className: "font-medium text-foreground", "data-slot": slotName, children: [
|
|
457
|
+
name,
|
|
458
|
+
":"
|
|
459
|
+
] });
|
|
456
460
|
}
|
|
457
461
|
function JsonNode({
|
|
458
462
|
name,
|
|
@@ -460,7 +464,8 @@ function JsonNode({
|
|
|
460
464
|
depth,
|
|
461
465
|
initialDepth,
|
|
462
466
|
ancestors,
|
|
463
|
-
labels
|
|
467
|
+
labels,
|
|
468
|
+
slotName = "json-viewer-node"
|
|
464
469
|
}) {
|
|
465
470
|
const kind = jsonKind(value);
|
|
466
471
|
const branch = isBranch(kind);
|
|
@@ -475,34 +480,27 @@ function JsonNode({
|
|
|
475
480
|
[branch, ancestors, value]
|
|
476
481
|
);
|
|
477
482
|
if (!branch || circular) {
|
|
478
|
-
return /* @__PURE__ */ jsxs(
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
"
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
className: cn("break-all", LEAF_CLASS[kind]),
|
|
497
|
-
children: leafText(value, kind)
|
|
498
|
-
}
|
|
499
|
-
)
|
|
500
|
-
]
|
|
501
|
-
}
|
|
502
|
-
);
|
|
483
|
+
return /* @__PURE__ */ jsxs("div", { className: "gap-2 py-0.5 pl-5 flex", "data-slot": slotName, children: [
|
|
484
|
+
name !== void 0 && /* @__PURE__ */ jsx(JsonKey, { name }),
|
|
485
|
+
circular ? /* @__PURE__ */ jsx(
|
|
486
|
+
"span",
|
|
487
|
+
{
|
|
488
|
+
"data-slot": "json-viewer-circular",
|
|
489
|
+
className: "text-muted-foreground italic",
|
|
490
|
+
children: labels.circularLabel
|
|
491
|
+
}
|
|
492
|
+
) : /* @__PURE__ */ jsx(
|
|
493
|
+
"span",
|
|
494
|
+
{
|
|
495
|
+
"data-slot": "json-viewer-value",
|
|
496
|
+
className: cn("break-all", LEAF_CLASS[kind]),
|
|
497
|
+
children: leafText(value, kind)
|
|
498
|
+
}
|
|
499
|
+
)
|
|
500
|
+
] });
|
|
503
501
|
}
|
|
504
502
|
const [opening, closing] = BRACKETS[kind === "array" ? "array" : "object"];
|
|
505
|
-
return /* @__PURE__ */ jsxs("div", { "data-slot":
|
|
503
|
+
return /* @__PURE__ */ jsxs("div", { "data-slot": slotName, children: [
|
|
506
504
|
/* @__PURE__ */ jsxs(
|
|
507
505
|
"button",
|
|
508
506
|
{
|
|
@@ -578,6 +576,7 @@ function JsonViewer({
|
|
|
578
576
|
circularLabel,
|
|
579
577
|
entriesLabel,
|
|
580
578
|
className,
|
|
579
|
+
slotName = "json-viewer",
|
|
581
580
|
...props
|
|
582
581
|
}) {
|
|
583
582
|
const text = useUiLabels("jsonViewer", jsonViewerLabels, {
|
|
@@ -605,7 +604,6 @@ function JsonViewer({
|
|
|
605
604
|
return /* @__PURE__ */ jsxs(
|
|
606
605
|
"div",
|
|
607
606
|
{
|
|
608
|
-
"data-slot": "json-viewer",
|
|
609
607
|
className: cn(
|
|
610
608
|
elevatedSurface,
|
|
611
609
|
nestedSurfaceReset,
|
|
@@ -613,6 +611,7 @@ function JsonViewer({
|
|
|
613
611
|
className
|
|
614
612
|
),
|
|
615
613
|
...props,
|
|
614
|
+
"data-slot": slotName,
|
|
616
615
|
children: [
|
|
617
616
|
/* @__PURE__ */ jsx(
|
|
618
617
|
CopyButton,
|
package/dist/code.js.map
CHANGED
|
@@ -1 +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"]}
|
|
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';\nimport type { SlotNameProps } from '@/types';\n\nfunction Code({\n className,\n slotName = 'code',\n ...props\n}: React.ComponentProps<'code'> & SlotNameProps) {\n return (\n <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 data-slot={slotName}\n />\n );\n}\n\nexport { Code };\n","import { FileCode } from 'lucide-react';\n\nimport { CopyButton, type CopyButtonLabels } from '@/components/ui/copy-button';\nimport type { SlotNameProps } from '@/types';\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 slotName = 'code-block-header',\n}: CodeBlockHeaderProps & SlotNameProps) {\n return (\n <div\n className=\"gap-2 px-4 py-2 flex items-center border-b border-border\"\n data-slot={slotName}\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';\nimport type { SlotNameProps } from '@/types';\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 slotName = 'code-block',\n ...props\n}: CodeBlockProps & SlotNameProps) {\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 className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'relative overflow-hidden bg-card',\n className,\n )}\n {...props}\n data-slot={slotName}\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 slotName = 'code-block-line',\n}: CodeBlockLineProps & SlotNameProps) {\n return (\n <span\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 data-slot={slotName}\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 slotName = 'code-block-expander',\n}: CodeBlockExpanderProps & SlotNameProps) {\n return (\n <div\n className=\"inset-x-0 bottom-0 pt-10 pb-2 absolute flex justify-center\"\n data-slot={slotName}\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';\nimport type { SlotNameProps } from '@/types';\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({\n name,\n slotName = 'json-viewer-key',\n}: { name: string } & SlotNameProps) {\n return (\n <span className=\"font-medium text-foreground\" data-slot={slotName}>\n {name}:\n </span>\n );\n}\n\nfunction JsonNode({\n name,\n value,\n depth,\n initialDepth,\n ancestors,\n labels,\n slotName = 'json-viewer-node',\n}: JsonNodeProps & SlotNameProps) {\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 className=\"gap-2 py-0.5 pl-5 flex\" data-slot={slotName}>\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={slotName}>\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';\nimport type { SlotNameProps } from '@/types';\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 slotName = 'json-viewer',\n ...props\n}: JsonViewerProps & SlotNameProps) {\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 className={cn(\n elevatedSurface,\n nestedSurfaceReset,\n 'relative overflow-hidden bg-card',\n className,\n )}\n {...props}\n data-slot={slotName}\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"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { ReactNode } from 'react';
|
|
2
|
+
import { ReactNode, ComponentProps } from 'react';
|
|
3
3
|
import { LucideIcon } from 'lucide-react';
|
|
4
|
-
import { U as UrlLike,
|
|
4
|
+
import { S as SlotNameProps, U as UrlLike, d as LinkComponent, I as IconComponent } from './types-cmBL8zOc.js';
|
|
5
5
|
import { d as TourLabels } from './types-u1qfmJQi.js';
|
|
6
|
-
import { a as CodeBlockLabels, c as JsonViewerLabels } from './json-viewer-
|
|
6
|
+
import { a as CodeBlockLabels, c as JsonViewerLabels } from './json-viewer-BARA2RCW.js';
|
|
7
|
+
import { b as buttonVariants, a as ButtonProps } from './button-Bj6My68b.js';
|
|
7
8
|
import { VariantProps } from 'class-variance-authority';
|
|
8
|
-
import { b as buttonVariants } from './button-B6wQRe7p.js';
|
|
9
9
|
import { Column, ColumnDef, Row } from '@tanstack/react-table';
|
|
10
10
|
|
|
11
11
|
interface CommandPaletteItem {
|
|
@@ -93,7 +93,7 @@ interface CopyButtonProps extends Omit<React.ComponentProps<'button'>, 'value' |
|
|
|
93
93
|
onCopied?: (value: string) => void;
|
|
94
94
|
onCopyFailed?: (reason: unknown) => void;
|
|
95
95
|
}
|
|
96
|
-
declare function CopyButton({ value, copyLabel, copiedLabel, acknowledgementDuration, onCopied, onCopyFailed, onClick, variant, size, className, ...props }: CopyButtonProps): React.JSX.Element;
|
|
96
|
+
declare function CopyButton({ value, copyLabel, copiedLabel, acknowledgementDuration, onCopied, onCopyFailed, onClick, variant, size, className, slotName, ...props }: CopyButtonProps & SlotNameProps): React.JSX.Element;
|
|
97
97
|
|
|
98
98
|
interface SettingsPageProps {
|
|
99
99
|
title?: string;
|
|
@@ -103,7 +103,7 @@ interface SettingsPageProps {
|
|
|
103
103
|
children: ReactNode;
|
|
104
104
|
className?: string;
|
|
105
105
|
}
|
|
106
|
-
declare function SettingsPage({ title, description, control, linkComponent, children, className, }: SettingsPageProps): React.JSX.Element;
|
|
106
|
+
declare function SettingsPage({ title, description, control, linkComponent, children, className, slotName, }: SettingsPageProps & SlotNameProps): React.JSX.Element;
|
|
107
107
|
interface SettingsLabels {
|
|
108
108
|
back: string;
|
|
109
109
|
}
|
|
@@ -119,14 +119,14 @@ interface SettingsSectionProps {
|
|
|
119
119
|
children: ReactNode;
|
|
120
120
|
className?: string;
|
|
121
121
|
}
|
|
122
|
-
declare function SettingsSection({ title, description, control, backHref, backLabel, wide, linkComponent, children, className, }: SettingsSectionProps): React.JSX.Element;
|
|
122
|
+
declare function SettingsSection({ title, description, control, backHref, backLabel, wide, linkComponent, children, className, slotName, }: SettingsSectionProps & SlotNameProps): React.JSX.Element;
|
|
123
123
|
interface SettingsGroupProps {
|
|
124
124
|
label?: string;
|
|
125
125
|
columns?: 1 | 2;
|
|
126
126
|
children: ReactNode;
|
|
127
127
|
className?: string;
|
|
128
128
|
}
|
|
129
|
-
declare function SettingsGroup({ label, columns, children, className, }: SettingsGroupProps): React.JSX.Element;
|
|
129
|
+
declare function SettingsGroup({ label, columns, children, className, slotName, }: SettingsGroupProps & SlotNameProps): React.JSX.Element;
|
|
130
130
|
interface SettingsEntryProps {
|
|
131
131
|
icon: LucideIcon;
|
|
132
132
|
iconClassName?: string;
|
|
@@ -138,7 +138,7 @@ interface SettingsEntryProps {
|
|
|
138
138
|
linkComponent?: LinkComponent;
|
|
139
139
|
className?: string;
|
|
140
140
|
}
|
|
141
|
-
declare function SettingsEntry({ icon: Icon, iconClassName, title, description, href, badge, disabled, linkComponent, className, }: SettingsEntryProps): React.JSX.Element;
|
|
141
|
+
declare function SettingsEntry({ icon: Icon, iconClassName, title, description, href, badge, disabled, linkComponent, className, slotName, }: SettingsEntryProps & SlotNameProps): React.JSX.Element;
|
|
142
142
|
|
|
143
143
|
interface AppearanceToggleLabels {
|
|
144
144
|
groupLabel: string;
|
|
@@ -151,7 +151,7 @@ interface AppearanceToggleProps extends React.ComponentProps<'div'> {
|
|
|
151
151
|
variant?: 'segmented' | 'menu';
|
|
152
152
|
labels?: Partial<AppearanceToggleLabels>;
|
|
153
153
|
}
|
|
154
|
-
declare function AppearanceToggle({ className, variant, labels: labelOverrides, ...props }: AppearanceToggleProps): React.JSX.Element;
|
|
154
|
+
declare function AppearanceToggle({ className, variant, labels: labelOverrides, slotName, ...props }: AppearanceToggleProps & SlotNameProps): React.JSX.Element;
|
|
155
155
|
|
|
156
156
|
interface ComboboxOption {
|
|
157
157
|
value: string;
|
|
@@ -163,18 +163,17 @@ interface ComboboxLabels {
|
|
|
163
163
|
emptyText: string;
|
|
164
164
|
}
|
|
165
165
|
declare const comboboxDefaultLabels: ComboboxLabels;
|
|
166
|
-
interface ComboboxProps {
|
|
167
|
-
id?: string;
|
|
166
|
+
interface ComboboxProps extends Omit<ButtonProps, 'value' | 'onChange' | 'children' | 'slotName'> {
|
|
168
167
|
value: string;
|
|
169
168
|
options: ComboboxOption[];
|
|
170
169
|
onChange: (value: string) => void;
|
|
171
170
|
placeholder?: ComboboxLabels['placeholder'];
|
|
172
171
|
searchPlaceholder?: ComboboxLabels['searchPlaceholder'];
|
|
173
172
|
emptyText?: ComboboxLabels['emptyText'];
|
|
174
|
-
disabled?: boolean;
|
|
175
173
|
invalid?: boolean;
|
|
174
|
+
required?: boolean;
|
|
176
175
|
}
|
|
177
|
-
declare function Combobox({
|
|
176
|
+
declare function Combobox({ value, options, onChange, placeholder, searchPlaceholder, emptyText, disabled, invalid, required, className, 'aria-invalid': ariaInvalid, slotName, ...trigger }: ComboboxProps & SlotNameProps): React.JSX.Element;
|
|
178
177
|
|
|
179
178
|
interface ConfirmDialogLabels {
|
|
180
179
|
title: string;
|
|
@@ -197,7 +196,7 @@ interface ConfirmDialogProps {
|
|
|
197
196
|
onConfirm: () => void;
|
|
198
197
|
onCancel?: () => void;
|
|
199
198
|
}
|
|
200
|
-
declare function ConfirmDialog({ open, onOpenChange, title, description, confirmText, cancelText, variant, processing, requiredValue, requiredValueLabel, onConfirm, onCancel, }: ConfirmDialogProps): React.JSX.Element;
|
|
199
|
+
declare function ConfirmDialog({ open, onOpenChange, title, description, confirmText, cancelText, variant, processing, requiredValue, requiredValueLabel, onConfirm, onCancel, slotName, }: ConfirmDialogProps & SlotNameProps): React.JSX.Element;
|
|
201
200
|
|
|
202
201
|
interface DataTableFilter {
|
|
203
202
|
columnId: string;
|
|
@@ -237,10 +236,10 @@ interface DataTableRowAction<TData> {
|
|
|
237
236
|
variant?: 'default' | 'destructive';
|
|
238
237
|
onClick: (row: TData) => void;
|
|
239
238
|
}
|
|
240
|
-
declare function RowActionsMenu<TData>({ row, actions, }: {
|
|
239
|
+
declare function RowActionsMenu<TData>({ row, actions, slotName, }: {
|
|
241
240
|
row: TData;
|
|
242
241
|
actions: DataTableRowAction<TData>[];
|
|
243
|
-
}): React.JSX.Element;
|
|
242
|
+
} & SlotNameProps): React.JSX.Element;
|
|
244
243
|
|
|
245
244
|
interface DataTableLabels {
|
|
246
245
|
searchPlaceholder: string;
|
|
@@ -287,7 +286,7 @@ interface DataTableProps<TData, TValue> {
|
|
|
287
286
|
onPageChange?: (pageIndex: number) => void;
|
|
288
287
|
onCreate?: () => void;
|
|
289
288
|
}
|
|
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;
|
|
289
|
+
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, slotName, }: DataTableProps<TData, TValue> & SlotNameProps): React.JSX.Element;
|
|
291
290
|
|
|
292
291
|
interface DatePickerLabels {
|
|
293
292
|
placeholder: string;
|
|
@@ -295,35 +294,35 @@ interface DatePickerLabels {
|
|
|
295
294
|
clearLabel: string;
|
|
296
295
|
}
|
|
297
296
|
declare const datePickerDefaultLabels: DatePickerLabels;
|
|
298
|
-
|
|
299
|
-
|
|
297
|
+
type DatePickerTriggerProps = Omit<ComponentProps<'button'>, 'value' | 'defaultValue' | 'onChange' | 'type' | 'children'>;
|
|
298
|
+
interface DatePickerProps extends Partial<DatePickerLabels>, DatePickerTriggerProps {
|
|
300
299
|
value?: Date;
|
|
301
300
|
defaultValue?: Date;
|
|
302
301
|
onChange?: (value: Date | undefined) => void;
|
|
303
302
|
minDate?: Date;
|
|
304
303
|
maxDate?: Date;
|
|
305
304
|
disabledDays?: (date: Date) => boolean;
|
|
306
|
-
disabled?: boolean;
|
|
307
305
|
clearable?: boolean;
|
|
308
306
|
invalid?: boolean;
|
|
307
|
+
required?: boolean;
|
|
309
308
|
formatDate?: (value: Date) => string;
|
|
310
|
-
className?: string;
|
|
311
309
|
}
|
|
312
|
-
declare function DatePicker(props: DatePickerProps): React.JSX.Element;
|
|
310
|
+
declare function DatePicker(props: DatePickerProps & SlotNameProps): React.JSX.Element;
|
|
313
311
|
|
|
314
312
|
interface DateRangeFilterLabels {
|
|
315
313
|
emptyLabel: string;
|
|
316
314
|
dateFormat: string;
|
|
317
315
|
}
|
|
318
316
|
declare const dateRangeFilterDefaultLabels: DateRangeFilterLabels;
|
|
319
|
-
|
|
317
|
+
interface DateRangeFilterProps extends Partial<DateRangeFilterLabels>, Omit<ButtonProps, 'onChange' | 'children' | 'value' | 'slotName'> {
|
|
320
318
|
from?: string;
|
|
321
319
|
to?: string;
|
|
322
320
|
onChange: (range: {
|
|
323
321
|
from?: string;
|
|
324
322
|
to?: string;
|
|
325
323
|
}) => void;
|
|
326
|
-
}
|
|
324
|
+
}
|
|
325
|
+
declare function DateRangeFilter({ from, to, onChange, emptyLabel, dateFormat, className, slotName, ...trigger }: DateRangeFilterProps & SlotNameProps): React.JSX.Element;
|
|
327
326
|
|
|
328
327
|
interface FloatingSheetLabels {
|
|
329
328
|
backLabel: string;
|
|
@@ -347,7 +346,7 @@ interface SaveStatusProps extends React.ComponentProps<'div'> {
|
|
|
347
346
|
savedDuration?: number;
|
|
348
347
|
labels?: Partial<SaveStatusLabels>;
|
|
349
348
|
}
|
|
350
|
-
declare function SaveStatus({ status, message, showIdle, savedDuration, labels, className, ...props }: SaveStatusProps): React.JSX.Element;
|
|
349
|
+
declare function SaveStatus({ status, message, showIdle, savedDuration, labels, className, slotName, ...props }: SaveStatusProps & SlotNameProps): React.JSX.Element;
|
|
351
350
|
|
|
352
351
|
interface UiLabelSections {
|
|
353
352
|
appearanceToggle: AppearanceToggleLabels;
|
|
@@ -381,4 +380,4 @@ declare function UiLocaleProvider({ labels, children, }: {
|
|
|
381
380
|
declare function useUiLocale(): UiLabels;
|
|
382
381
|
declare function useUiLabels<Section extends keyof UiLabelSections>(section: Section, defaults: UiLabelSections[Section], overrides?: Partial<UiLabelSections[Section]>): UiLabelSections[Section];
|
|
383
382
|
|
|
384
|
-
export {
|
|
383
|
+
export { type DateRangeFilterLabels 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, type ComboboxProps as K, ConfirmDialog as L, type ConfirmDialogLabels as M, CopyButton as N, type CopyButtonProps as O, DataTable as P, type DataTableFacetedFilterLabels as Q, type DataTableFilter as R, SettingsEntry as S, type DataTableLabels as T, type UiLabelSections as U, type DataTableRowAction as V, type DataTableServerFilter as W, DatePicker as X, type DatePickerLabels as Y, type DatePickerProps as Z, DateRangeFilter as _, type DateFilterLabels as a, type DateRangeFilterProps as a0, FacetedFilter as a1, RowActionsMenu as a2, SAVED_DURATION as a3, SaveStatus as a4, type SaveStatusLabels as a5, type SaveStatusProps as a6, type SaveStatusState as a7, ServerFacetedFilter as a8, appearanceToggleDefaultLabels as a9, comboboxDefaultLabels as aa, confirmDialogDefaultLabels as ab, copyButtonLabels as ac, dataTableDefaultLabels as ad, dataTableFacetedFilterDefaultLabels as ae, datePickerDefaultLabels as af, dateRangeFilterDefaultLabels as ag, floatingSheetDefaultLabels as ah, saveStatusLabels as ai, type CommandPaletteLabels as aj, 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 };
|