@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.
Files changed (58) hide show
  1. package/dist/blocks.d.ts +25 -25
  2. package/dist/blocks.js +74 -59
  3. package/dist/blocks.js.map +1 -1
  4. package/dist/{button-B6wQRe7p.d.ts → button-Bj6My68b.d.ts} +2 -1
  5. package/dist/{chunk-JAHTUAQL.js → chunk-2WIIRDHT.js} +5 -4
  6. package/dist/chunk-2WIIRDHT.js.map +1 -0
  7. package/dist/{chunk-KYWA5UYN.js → chunk-4SOQAVUP.js} +5 -5
  8. package/dist/{chunk-KYWA5UYN.js.map → chunk-4SOQAVUP.js.map} +1 -1
  9. package/dist/{chunk-UUTXPPRN.js → chunk-CFDDAFPJ.js} +125 -82
  10. package/dist/chunk-CFDDAFPJ.js.map +1 -0
  11. package/dist/{chunk-LKSM3WLK.js → chunk-FWQFB37J.js} +6 -5
  12. package/dist/chunk-FWQFB37J.js.map +1 -0
  13. package/dist/{chunk-DSD7MVLL.js → chunk-ODYCBCKS.js} +10 -7
  14. package/dist/chunk-ODYCBCKS.js.map +1 -0
  15. package/dist/{chunk-MNGNBEYN.js → chunk-QHZWW55M.js} +245 -156
  16. package/dist/chunk-QHZWW55M.js.map +1 -0
  17. package/dist/{chunk-SA5LM2GD.js → chunk-RPCL7VFQ.js} +41 -20
  18. package/dist/chunk-RPCL7VFQ.js.map +1 -0
  19. package/dist/{chunk-6QM5BA7B.js → chunk-T2INZOCM.js} +40 -23
  20. package/dist/chunk-T2INZOCM.js.map +1 -0
  21. package/dist/{chunk-UUEWFCKT.js → chunk-TGF54WAO.js} +6 -5
  22. package/dist/chunk-TGF54WAO.js.map +1 -0
  23. package/dist/{chunk-6X4TKSF6.js → chunk-XZCC6MTE.js} +11 -6
  24. package/dist/chunk-XZCC6MTE.js.map +1 -0
  25. package/dist/code.d.ts +5 -2
  26. package/dist/code.js +51 -52
  27. package/dist/code.js.map +1 -1
  28. package/dist/{context-VgHq4U98.d.ts → context-YWbxMH0C.d.ts} +26 -27
  29. package/dist/editor.d.ts +8 -6
  30. package/dist/editor.js +32 -18
  31. package/dist/editor.js.map +1 -1
  32. package/dist/index.d.ts +229 -229
  33. package/dist/index.js +431 -325
  34. package/dist/index.js.map +1 -1
  35. package/dist/inertia.d.ts +1 -1
  36. package/dist/inertia.js +5 -5
  37. package/dist/input-Dpi7pXeR.d.ts +6 -0
  38. package/dist/{json-viewer-BTHBACj9.d.ts → json-viewer-BARA2RCW.d.ts} +3 -2
  39. package/dist/locales/pt.d.ts +8 -8
  40. package/dist/{password-input-r39y2pCT.d.ts → password-input-DcXX7SG9.d.ts} +8 -7
  41. package/dist/shells.d.ts +7 -7
  42. package/dist/shells.js +10 -9
  43. package/dist/shells.js.map +1 -1
  44. package/dist/sidebar-DqkFRUxQ.d.ts +81 -0
  45. package/dist/{types-CT0rBsFc.d.ts → types-B-eGPoFD.d.ts} +3 -2
  46. package/dist/{types-B4QS3h5p.d.ts → types-cmBL8zOc.d.ts} +4 -1
  47. package/package.json +3 -3
  48. package/dist/chunk-6QM5BA7B.js.map +0 -1
  49. package/dist/chunk-6X4TKSF6.js.map +0 -1
  50. package/dist/chunk-DSD7MVLL.js.map +0 -1
  51. package/dist/chunk-JAHTUAQL.js.map +0 -1
  52. package/dist/chunk-LKSM3WLK.js.map +0 -1
  53. package/dist/chunk-MNGNBEYN.js.map +0 -1
  54. package/dist/chunk-SA5LM2GD.js.map +0 -1
  55. package/dist/chunk-UUEWFCKT.js.map +0 -1
  56. package/dist/chunk-UUTXPPRN.js.map +0 -1
  57. package/dist/input-4uxAHW6y.d.ts +0 -5
  58. package/dist/sidebar-BhOIlSjt.d.ts +0 -80
package/dist/code.js CHANGED
@@ -1,22 +1,26 @@
1
- import { CopyButton } from './chunk-JAHTUAQL.js';
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-DSD7MVLL.js';
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({ className, ...props }) {
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({ name }) {
445
- return /* @__PURE__ */ jsxs(
446
- "span",
447
- {
448
- "data-slot": "json-viewer-key",
449
- className: "font-medium text-foreground",
450
- children: [
451
- name,
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
- "div",
480
- {
481
- "data-slot": "json-viewer-node",
482
- className: "gap-2 py-0.5 pl-5 flex",
483
- 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
- ]
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": "json-viewer-node", children: [
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, c as LinkComponent, I as IconComponent } from './types-B4QS3h5p.js';
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-BTHBACj9.js';
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({ id, value, options, onChange, placeholder, searchPlaceholder, emptyText, disabled, invalid, }: ComboboxProps): React.JSX.Element;
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
- interface DatePickerProps extends Partial<DatePickerLabels> {
299
- id?: string;
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
- declare function DateRangeFilter({ from, to, onChange, emptyLabel, dateFormat, }: {
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
- } & Partial<DateRangeFilterLabels>): React.JSX.Element;
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 { 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 };
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 };