@mitcsutt/kiln-ui 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,12 +6,25 @@ var t = {
6
6
  jsx: "jsx",
7
7
  ts: "typescript",
8
8
  typescript: "typescript",
9
- tsx: "tsx"
9
+ tsx: "tsx",
10
+ bash: "shellscript",
11
+ sh: "shellscript",
12
+ shell: "shellscript",
13
+ shellscript: "shellscript",
14
+ zsh: "shellscript",
15
+ json: "json",
16
+ yaml: "yaml",
17
+ yml: "yaml",
18
+ diff: "diff"
10
19
  }, n = {
11
20
  javascript: () => import("shiki/langs/javascript.mjs"),
12
21
  jsx: () => import("shiki/langs/jsx.mjs"),
13
22
  typescript: () => import("shiki/langs/typescript.mjs"),
14
- tsx: () => import("shiki/langs/tsx.mjs")
23
+ tsx: () => import("shiki/langs/tsx.mjs"),
24
+ shellscript: () => import("shiki/langs/shellscript.mjs"),
25
+ json: () => import("shiki/langs/json.mjs"),
26
+ yaml: () => import("shiki/langs/yaml.mjs"),
27
+ diff: () => import("shiki/langs/diff.mjs")
15
28
  }, r = [
16
29
  "keyword",
17
30
  "string",
@@ -35,6 +48,7 @@ var t = {
35
48
  "constant.numeric",
36
49
  "constant.language",
37
50
  "constant.character",
51
+ "constant.other.option",
38
52
  "variable.language"
39
53
  ], "constant"],
40
54
  [[
@@ -59,7 +73,16 @@ var t = {
59
73
  "keyword.operator"
60
74
  ], "punctuation"],
61
75
  [["punctuation.definition.string.template.begin", "punctuation.definition.string.template.end"], "string"],
62
- [["punctuation.definition.template-expression"], "punctuation"]
76
+ [["punctuation.definition.template-expression"], "punctuation"],
77
+ [["punctuation.support.type.property-name", "entity.name.tag.yaml"], "type"],
78
+ [[
79
+ "meta.diff.header",
80
+ "punctuation.definition.from-file",
81
+ "punctuation.definition.to-file"
82
+ ], "keyword"],
83
+ [["meta.diff.range", "punctuation.definition.range"], "function"],
84
+ [["markup.inserted", "punctuation.definition.inserted"], "string"],
85
+ [["markup.deleted", "punctuation.definition.deleted"], "constant"]
63
86
  ].map(([e, t]) => ({
64
87
  scope: e,
65
88
  settings: { foreground: t ? i(t) : o }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["GRAMMARS","LOADERS","TYPES","colourOf","type","typeOf","PLAIN","THEME","scope","highlighter","loaded","load","createHighlighterCore","createJavaScriptRegexEngine","language","grammar","core","module","isHighlightLanguage","highlight","id","trimTrailingNewlines","code","tokens","line","color","previous","content"],"sources":["../../src/highlight/index.ts"],"sourcesContent":["/*\n * @mitcsutt/kiln-ui/highlight: syntax highlighting for CodeBlock, kept out of the main entry.\n * It runs Shiki (an optional peer dependency) with its JavaScript regex engine, and loads Shiki\n * and each grammar only when the first block in that language is highlighted.\n */\nimport type { CodeToken, CodeTokenType } from '#components/display/CodeBlock'\nimport { trimTrailingNewlines } from '#utils/newlines'\nimport type { HighlighterCore, LanguageRegistration, ThemeRegistration } from 'shiki/core'\n\n/** The languages `highlight` understands, with their usual aliases. */\nexport type HighlightLanguage = 'js' | 'javascript' | 'jsx' | 'ts' | 'typescript' | 'tsx'\n\ntype Grammar = 'javascript' | 'jsx' | 'typescript' | 'tsx'\n\nconst GRAMMARS: Record<HighlightLanguage, Grammar> = {\n js: 'javascript',\n javascript: 'javascript',\n jsx: 'jsx',\n ts: 'typescript',\n typescript: 'typescript',\n tsx: 'tsx',\n}\n\nconst LOADERS: Record<Grammar, () => Promise<{ default: LanguageRegistration[] }>> = {\n javascript: () => import('shiki/langs/javascript.mjs'),\n jsx: () => import('shiki/langs/jsx.mjs'),\n typescript: () => import('shiki/langs/typescript.mjs'),\n tsx: () => import('shiki/langs/tsx.mjs'),\n}\n\nconst TYPES: CodeTokenType[] = [\n 'keyword',\n 'string',\n 'comment',\n 'constant',\n 'function',\n 'type',\n 'tag',\n 'attribute',\n 'punctuation',\n]\n\n/** Each token type gets a stand-in colour, which `highlight` reads back as the type. */\nconst colourOf = (type: CodeTokenType) =>\n `#0000${(TYPES.indexOf(type) + 1).toString(16).padStart(2, '0')}`\nconst typeOf = new Map(TYPES.map((type) => [colourOf(type), type]))\nconst PLAIN = '#000000'\n\n/** TextMate scopes → token types. A deeper or longer scope wins, so the exceptions follow. */\nconst RULES: [string[], CodeTokenType | null][] = [\n [['comment', 'punctuation.definition.comment'], 'comment'],\n [['string', 'punctuation.definition.string'], 'string'],\n [['meta.template.expression'], null],\n [\n ['constant.numeric', 'constant.language', 'constant.character', 'variable.language'],\n 'constant',\n ],\n [['keyword', 'storage', 'keyword.operator.new', 'keyword.operator.expression'], 'keyword'],\n [['entity.name.function', 'support.function'], 'function'],\n [\n [\n 'entity.name.type',\n 'entity.name.class',\n 'entity.other.inherited-class',\n 'support.type',\n 'support.class',\n ],\n 'type',\n ],\n [['entity.name.tag'], 'tag'],\n [['entity.other.attribute-name'], 'attribute'],\n [['punctuation', 'meta.brace', 'keyword.operator'], 'punctuation'],\n [\n ['punctuation.definition.string.template.begin', 'punctuation.definition.string.template.end'],\n 'string',\n ],\n [['punctuation.definition.template-expression'], 'punctuation'],\n]\n\nconst THEME: ThemeRegistration = {\n name: 'kiln',\n type: 'light',\n fg: PLAIN,\n bg: '#ffffff',\n settings: RULES.map(([scope, type]) => ({\n scope,\n settings: { foreground: type ? colourOf(type) : PLAIN },\n })),\n}\n\nlet highlighter: Promise<HighlighterCore> | undefined\nconst loaded = new Map<Grammar, Promise<void>>()\n\nfunction load(grammar: Grammar): Promise<HighlighterCore> {\n highlighter ??= Promise.all([import('shiki/core'), import('shiki/engine/javascript')]).then(\n ([{ createHighlighterCore }, { createJavaScriptRegexEngine }]) =>\n createHighlighterCore({ themes: [THEME], langs: [], engine: createJavaScriptRegexEngine() }),\n )\n return highlighter.then(async (core) => {\n let language = loaded.get(grammar)\n if (!language) {\n language = LOADERS[grammar]().then((module) => core.loadLanguage(module.default))\n loaded.set(grammar, language)\n }\n await language\n return core\n })\n}\n\nfunction isHighlightLanguage(language: string): language is HighlightLanguage {\n return Object.hasOwn(GRAMMARS, language)\n}\n\n/**\n * Tokens for `CodeBlock`'s `tokens` prop: one array per line of `code`, each token tagged with\n * what it is (keyword, string, comment…) so the theme colours it. Resolves to `undefined` for a\n * language it doesn't know, which `CodeBlock` shows as plain code.\n *\n * @remarks\n * Install `shiki` alongside kiln-ui to use it. Call it wherever your code is ready: in a server\n * component or at build time, so the browser downloads no highlighter, or in the browser, where\n * Shiki and the grammar load on the first call.\n *\n * @example\n * const tokens = await highlight(source, 'tsx')\n * return <CodeBlock code={source} language=\"TSX\" tokens={tokens} />\n */\nexport async function highlight(\n code: string,\n language: string,\n): Promise<CodeToken[][] | undefined> {\n const id = language.toLowerCase()\n if (!isHighlightLanguage(id)) return undefined\n const grammar = GRAMMARS[id]\n const core = await load(grammar)\n const lines = core.codeToTokensBase(trimTrailingNewlines(code), { lang: grammar, theme: 'kiln' })\n return lines.map((line) => {\n const tokens: CodeToken[] = []\n for (const { content, color } of line) {\n const type = color ? typeOf.get(color.toLowerCase()) : undefined\n const previous = tokens.at(-1)\n if (previous && previous.type === type) previous.content += content\n else tokens.push(type ? { content, type } : { content })\n }\n return tokens\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["GRAMMARS","LOADERS","TYPES","colourOf","type","typeOf","PLAIN","THEME","scope","highlighter","loaded","load","createHighlighterCore","createJavaScriptRegexEngine","language","grammar","core","module","isHighlightLanguage","highlight","id","trimTrailingNewlines","code","tokens","line","color","previous","content"],"sources":["../../src/highlight/index.ts"],"sourcesContent":["/*\n * @mitcsutt/kiln-ui/highlight: syntax highlighting for CodeBlock, kept out of the main entry.\n * It runs Shiki (an optional peer dependency) with its JavaScript regex engine, and loads Shiki\n * and each grammar only when the first block in that language is highlighted.\n */\nimport type { CodeToken, CodeTokenType } from '#components/display/CodeBlock'\nimport { trimTrailingNewlines } from '#utils/newlines'\nimport type { HighlighterCore, LanguageRegistration, ThemeRegistration } from 'shiki/core'\n\n/** The languages `highlight` understands, with their usual aliases. */\nexport type HighlightLanguage =\n | 'js'\n | 'javascript'\n | 'jsx'\n | 'ts'\n | 'typescript'\n | 'tsx'\n | 'bash'\n | 'sh'\n | 'shell'\n | 'shellscript'\n | 'zsh'\n | 'json'\n | 'yaml'\n | 'yml'\n | 'diff'\n\ntype Grammar =\n 'javascript' | 'jsx' | 'typescript' | 'tsx' | 'shellscript' | 'json' | 'yaml' | 'diff'\n\nconst GRAMMARS: Record<HighlightLanguage, Grammar> = {\n js: 'javascript',\n javascript: 'javascript',\n jsx: 'jsx',\n ts: 'typescript',\n typescript: 'typescript',\n tsx: 'tsx',\n bash: 'shellscript',\n sh: 'shellscript',\n shell: 'shellscript',\n shellscript: 'shellscript',\n zsh: 'shellscript',\n json: 'json',\n yaml: 'yaml',\n yml: 'yaml',\n diff: 'diff',\n}\n\nconst LOADERS: Record<Grammar, () => Promise<{ default: LanguageRegistration[] }>> = {\n javascript: () => import('shiki/langs/javascript.mjs'),\n jsx: () => import('shiki/langs/jsx.mjs'),\n typescript: () => import('shiki/langs/typescript.mjs'),\n tsx: () => import('shiki/langs/tsx.mjs'),\n shellscript: () => import('shiki/langs/shellscript.mjs'),\n json: () => import('shiki/langs/json.mjs'),\n yaml: () => import('shiki/langs/yaml.mjs'),\n diff: () => import('shiki/langs/diff.mjs'),\n}\n\nconst TYPES: CodeTokenType[] = [\n 'keyword',\n 'string',\n 'comment',\n 'constant',\n 'function',\n 'type',\n 'tag',\n 'attribute',\n 'punctuation',\n]\n\n/** Each token type gets a stand-in colour, which `highlight` reads back as the type. */\nconst colourOf = (type: CodeTokenType) =>\n `#0000${(TYPES.indexOf(type) + 1).toString(16).padStart(2, '0')}`\nconst typeOf = new Map(TYPES.map((type) => [colourOf(type), type]))\nconst PLAIN = '#000000'\n\n/** TextMate scopes → token types. A deeper or longer scope wins, so the exceptions follow. */\nconst RULES: [string[], CodeTokenType | null][] = [\n [['comment', 'punctuation.definition.comment'], 'comment'],\n [['string', 'punctuation.definition.string'], 'string'],\n [['meta.template.expression'], null],\n [\n [\n 'constant.numeric',\n 'constant.language',\n 'constant.character',\n 'constant.other.option',\n 'variable.language',\n ],\n 'constant',\n ],\n [['keyword', 'storage', 'keyword.operator.new', 'keyword.operator.expression'], 'keyword'],\n [['entity.name.function', 'support.function'], 'function'],\n [\n [\n 'entity.name.type',\n 'entity.name.class',\n 'entity.other.inherited-class',\n 'support.type',\n 'support.class',\n ],\n 'type',\n ],\n [['entity.name.tag'], 'tag'],\n [['entity.other.attribute-name'], 'attribute'],\n [['punctuation', 'meta.brace', 'keyword.operator'], 'punctuation'],\n [\n ['punctuation.definition.string.template.begin', 'punctuation.definition.string.template.end'],\n 'string',\n ],\n [['punctuation.definition.template-expression'], 'punctuation'],\n // Keys are types in JSON and YAML alike, quotes included.\n [['punctuation.support.type.property-name', 'entity.name.tag.yaml'], 'type'],\n // A diff's headers, hunk ranges, and added and removed lines, each with its marker.\n [\n ['meta.diff.header', 'punctuation.definition.from-file', 'punctuation.definition.to-file'],\n 'keyword',\n ],\n [['meta.diff.range', 'punctuation.definition.range'], 'function'],\n [['markup.inserted', 'punctuation.definition.inserted'], 'string'],\n [['markup.deleted', 'punctuation.definition.deleted'], 'constant'],\n]\n\nconst THEME: ThemeRegistration = {\n name: 'kiln',\n type: 'light',\n fg: PLAIN,\n bg: '#ffffff',\n settings: RULES.map(([scope, type]) => ({\n scope,\n settings: { foreground: type ? colourOf(type) : PLAIN },\n })),\n}\n\nlet highlighter: Promise<HighlighterCore> | undefined\nconst loaded = new Map<Grammar, Promise<void>>()\n\nfunction load(grammar: Grammar): Promise<HighlighterCore> {\n highlighter ??= Promise.all([import('shiki/core'), import('shiki/engine/javascript')]).then(\n ([{ createHighlighterCore }, { createJavaScriptRegexEngine }]) =>\n createHighlighterCore({ themes: [THEME], langs: [], engine: createJavaScriptRegexEngine() }),\n )\n return highlighter.then(async (core) => {\n let language = loaded.get(grammar)\n if (!language) {\n language = LOADERS[grammar]().then((module) => core.loadLanguage(module.default))\n loaded.set(grammar, language)\n }\n await language\n return core\n })\n}\n\nfunction isHighlightLanguage(language: string): language is HighlightLanguage {\n return Object.hasOwn(GRAMMARS, language)\n}\n\n/**\n * Tokens for `CodeBlock`'s `tokens` prop: one array per line of `code`, each token tagged with\n * what it is (keyword, string, comment…) so the theme colours it. Resolves to `undefined` for a\n * language it doesn't know, which `CodeBlock` shows as plain code.\n *\n * @remarks\n * Install `shiki` alongside kiln-ui to use it. Call it wherever your code is ready: in a server\n * component or at build time, so the browser downloads no highlighter, or in the browser, where\n * Shiki and the grammar load on the first call.\n *\n * @example\n * const tokens = await highlight(source, 'tsx')\n * return <CodeBlock code={source} language=\"TSX\" tokens={tokens} />\n */\nexport async function highlight(\n code: string,\n language: string,\n): Promise<CodeToken[][] | undefined> {\n const id = language.toLowerCase()\n if (!isHighlightLanguage(id)) return undefined\n const grammar = GRAMMARS[id]\n const core = await load(grammar)\n const lines = core.codeToTokensBase(trimTrailingNewlines(code), {\n lang: grammar,\n theme: 'kiln',\n })\n return lines.map((line) => {\n const tokens: CodeToken[] = []\n for (const { content, color } of line) {\n const type = color ? typeOf.get(color.toLowerCase()) : undefined\n const previous = tokens.at(-1)\n if (previous && previous.type === type) previous.content += content\n else tokens.push(type ? { content, type } : { content })\n }\n return tokens\n })\n}\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -197,6 +197,8 @@ export type { DataListProps, DataListItemProps, DataListOrientation, } from './c
197
197
  export { List } from './components/display/List/index.js';
198
198
  export type { ListProps, ListItemProps, ListDensity, ListElement, ListSurface, } from './components/display/List/index.js';
199
199
  export { Table } from './components/display/Table/index.js';
200
+ export { TreeTable } from './components/display/TreeTable/index.js';
201
+ export type { TreeTableProps, TreeTableColumn } from './components/display/TreeTable/index.js';
200
202
  export type { TableProps, TableDensity, TableVariant, TableSurface, TableAlign, TableVerticalAlign, TableSort, TableRowProps, TableHeaderCellProps, TableCellProps, TableColumnWidth, } from './components/display/Table/index.js';
201
203
  export { Media } from './components/display/Media/index.js';
202
204
  export type { MediaProps, MediaRatio, MediaFit, MediaRadius, MediaSize, } from './components/display/Media/index.js';
package/dist/index.js CHANGED
@@ -111,33 +111,34 @@ import { Stat as Xt } from "./components/display/Stat/Stat.js";
111
111
  import { DataList as Zt } from "./components/display/DataList/DataList.js";
112
112
  import { List as Qt } from "./components/display/List/List.js";
113
113
  import { Table as $t } from "./components/display/Table/Table.js";
114
- import { Media as en } from "./components/display/Media/Media.js";
115
- import { Marquee as tn } from "./components/display/Marquee/Marquee.js";
116
- import { CodeBlock as nn } from "./components/display/CodeBlock/CodeBlock.js";
117
- import { Stamp as rn } from "./components/display/Stamp/Stamp.js";
118
- import { Progress as an } from "./components/display/Progress/Progress.js";
119
- import { meterTone as on } from "./components/display/Meter/meterTone.js";
120
- import { Meter as sn } from "./components/display/Meter/Meter.js";
121
- import { Skeleton as cn } from "./components/display/Skeleton/Skeleton.js";
122
- import { EmptyState as ln } from "./components/display/EmptyState/EmptyState.js";
123
- import { Tabs as un } from "./components/navigation/Tabs/Tabs.js";
124
- import { NavLinks as dn } from "./components/navigation/NavLinks/NavLinks.js";
125
- import { NavLinksGroup as fn } from "./components/navigation/NavLinks/NavLinksGroup.js";
126
- import { BottomNav as pn } from "./components/navigation/BottomNav/BottomNav.js";
127
- import { Accordion as mn } from "./components/navigation/Accordion/Accordion.js";
128
- import { Collapsible as hn } from "./components/navigation/Collapsible/Collapsible.js";
129
- import { Stepper as gn } from "./components/navigation/Stepper/Stepper.js";
130
- import { Alert as _n } from "./components/feedback/Alert/Alert.js";
131
- import { toast as vn } from "./components/feedback/Toaster/toast.js";
132
- import { Toaster as yn } from "./components/feedback/Toaster/Toaster.js";
133
- import { LiveIndicator as bn } from "./components/feedback/LiveIndicator/LiveIndicator.js";
134
- import { Flash as xn } from "./components/feedback/Flash/Flash.js";
135
- import { StatusDot as Sn } from "./components/feedback/StatusDot/StatusDot.js";
136
- import { Indicator as Cn } from "./components/feedback/Indicator/Indicator.js";
137
- import { formatAbsoluteTime as wn, formatRelativeTime as Tn } from "./components/feedback/RelativeTime/format.js";
138
- import { RelativeTime as En } from "./components/feedback/RelativeTime/RelativeTime.js";
139
- import { Dialog as Dn } from "./components/overlays/Dialog/Dialog.js";
140
- import { Sheet as On } from "./components/overlays/Sheet/Sheet.js";
141
- import { DropdownMenu as kn } from "./components/overlays/DropdownMenu/DropdownMenu.js";
142
- import { CommandPalette as An } from "./components/overlays/CommandPalette/CommandPalette.js";
143
- export { mn as Accordion, oe as ActionBar, _n as Alert, Se as Amount, et as AmountField, $e as AmountInput, ie as AppShell, u as ArrowLeftIcon, d as ArrowRightIcon, f as ArrowUpRightIcon, ne as AspectRatio, qt as Avatar, Jt as AvatarGroup, Wt as Badge, pn as BottomNav, X as Box, Te as Button, ct as Calendar, p as CalendarIcon, Ut as Card, m as CheckIcon, Ve as Checkbox, Je as CheckboxField, gt as CheckboxGroup, _t as CheckboxGroupField, h as ChevronDownIcon, g as ChevronLeftIcon, _ as ChevronRightIcon, v as ChevronUpIcon, Pe as ChipGroup, bt as ChipGroupField, xt as ChoiceCards, St as ChoiceCardsField, y as CircleCheckIcon, b as ClockIcon, x as CloseIcon, me as Code, nn as CodeBlock, se as Collapse, hn as Collapsible, it as ColorField, rt as ColorInput, jt as Combobox, Mt as ComboboxField, An as CommandPalette, $ as Container, Ae as CopyButton, S as CopyIcon, ue as DEFAULT_HEADING_SIZE, e as DEFAULT_THEME, Zt as DataList, pt as DateField, lt as DateInput, ot as DateRangeField, ft as DateRangePickerField, ht as DateTimeField, dt as DateTimeInput, Yt as Delta, Dn as Dialog, te as Divider, kn as DropdownMenu, ln as EmptyState, C as ErrorIcon, w as EyeIcon, T as EyeOffIcon, Le as Field, We as Fieldset, Ft as FileDrop, It as FileField, xn as Flash, Z as Grid, de as Heading, E as HelpIcon, Ee as IconButton, Cn as Indicator, D as InfoIcon, Y as Inline, Re as Input, Vt as JsonField, zt as JsonInput, he as Kbd, pe as Link, Qt as List, bn as LiveIndicator, t as MODES, tn as Marquee, en as Media, O as MenuIcon, k as MessageIcon, sn as Meter, A as MinusIcon, Ie as ModeToggle, j as MoonIcon, M as MoreIcon, dn as NavLinks, fn as NavLinksGroup, Qe as NumberField, Ze as NumberInput, xe as Numeral, nt as OneTimeCodeField, tt as OneTimeCodeInput, Xe as PasswordField, Ye as PasswordInput, N as PlusIcon, st as Popover, an as Progress, ge as Prose, _e as Quote, He as RadioGroup, vt as RadioGroupField, P as RadioIcon, Tt as RangeSlider, Et as RangeSliderField, Dt as Rating, Ot as RatingField, En as RelativeTime, ae as ScrollArea, F as SearchIcon, ee as Section, Ce as SectionHeader, Fe as SegmentedControl, yt as SegmentedField, Be as Select, qe as SelectField, On as Sheet, I as ShieldIcon, le as ShowMore, cn as Skeleton, Ct as Slider, wt as SliderField, we as Spinner, Q as Split, J as Stack, rn as Stamp, L as StarIcon, Xt as Stat, Sn as StatusDot, gn as Stepper, R as SunIcon, je as Swatch, Ue as Switch, at as SwitchField, z as SwordsIcon, B as SystemIcon, n as THEMES, r as THEME_META, $t as Table, un as Tabs, kt as Tag, At as TagList, Pt as TagsField, Nt as TagsInput, V as TargetIcon, fe as Text, Ge as TextField, ze as Textarea, Ke as TextareaField, o as ThemeProvider, s as ThemeScope, mt as TimeField, ut as TimeInput, yn as Toaster, Me as ToggleChip, De as Tooltip, Oe as TooltipProvider, ce as Transition, H as TrendingUpIcon, U as TrophyIcon, W as UploadIcon, G as UsersIcon, re as VisuallyHidden, K as WarningIcon, q as ZapIcon, Gt as avatarColor, l as createIcon, c as cx, Ht as describeJsonError, wn as formatAbsoluteTime, Lt as formatJson, ve as formatNumeral, ye as formatNumeralParts, Tn as formatRelativeTime, Kt as getInitials, on as meterTone, Rt as minifyJson, be as signOf, a as themeScript, vn as toast, ke as useClipboard, Ne as useFieldControl, i as useTheme, Bt as validateJson };
114
+ import { TreeTable as en } from "./components/display/TreeTable/TreeTable.js";
115
+ import { Media as tn } from "./components/display/Media/Media.js";
116
+ import { Marquee as nn } from "./components/display/Marquee/Marquee.js";
117
+ import { CodeBlock as rn } from "./components/display/CodeBlock/CodeBlock.js";
118
+ import { Stamp as an } from "./components/display/Stamp/Stamp.js";
119
+ import { Progress as on } from "./components/display/Progress/Progress.js";
120
+ import { meterTone as sn } from "./components/display/Meter/meterTone.js";
121
+ import { Meter as cn } from "./components/display/Meter/Meter.js";
122
+ import { Skeleton as ln } from "./components/display/Skeleton/Skeleton.js";
123
+ import { EmptyState as un } from "./components/display/EmptyState/EmptyState.js";
124
+ import { Tabs as dn } from "./components/navigation/Tabs/Tabs.js";
125
+ import { NavLinks as fn } from "./components/navigation/NavLinks/NavLinks.js";
126
+ import { NavLinksGroup as pn } from "./components/navigation/NavLinks/NavLinksGroup.js";
127
+ import { BottomNav as mn } from "./components/navigation/BottomNav/BottomNav.js";
128
+ import { Accordion as hn } from "./components/navigation/Accordion/Accordion.js";
129
+ import { Collapsible as gn } from "./components/navigation/Collapsible/Collapsible.js";
130
+ import { Stepper as _n } from "./components/navigation/Stepper/Stepper.js";
131
+ import { Alert as vn } from "./components/feedback/Alert/Alert.js";
132
+ import { toast as yn } from "./components/feedback/Toaster/toast.js";
133
+ import { Toaster as bn } from "./components/feedback/Toaster/Toaster.js";
134
+ import { LiveIndicator as xn } from "./components/feedback/LiveIndicator/LiveIndicator.js";
135
+ import { Flash as Sn } from "./components/feedback/Flash/Flash.js";
136
+ import { StatusDot as Cn } from "./components/feedback/StatusDot/StatusDot.js";
137
+ import { Indicator as wn } from "./components/feedback/Indicator/Indicator.js";
138
+ import { formatAbsoluteTime as Tn, formatRelativeTime as En } from "./components/feedback/RelativeTime/format.js";
139
+ import { RelativeTime as Dn } from "./components/feedback/RelativeTime/RelativeTime.js";
140
+ import { Dialog as On } from "./components/overlays/Dialog/Dialog.js";
141
+ import { Sheet as kn } from "./components/overlays/Sheet/Sheet.js";
142
+ import { DropdownMenu as An } from "./components/overlays/DropdownMenu/DropdownMenu.js";
143
+ import { CommandPalette as jn } from "./components/overlays/CommandPalette/CommandPalette.js";
144
+ export { hn as Accordion, oe as ActionBar, vn as Alert, Se as Amount, et as AmountField, $e as AmountInput, ie as AppShell, u as ArrowLeftIcon, d as ArrowRightIcon, f as ArrowUpRightIcon, ne as AspectRatio, qt as Avatar, Jt as AvatarGroup, Wt as Badge, mn as BottomNav, X as Box, Te as Button, ct as Calendar, p as CalendarIcon, Ut as Card, m as CheckIcon, Ve as Checkbox, Je as CheckboxField, gt as CheckboxGroup, _t as CheckboxGroupField, h as ChevronDownIcon, g as ChevronLeftIcon, _ as ChevronRightIcon, v as ChevronUpIcon, Pe as ChipGroup, bt as ChipGroupField, xt as ChoiceCards, St as ChoiceCardsField, y as CircleCheckIcon, b as ClockIcon, x as CloseIcon, me as Code, rn as CodeBlock, se as Collapse, gn as Collapsible, it as ColorField, rt as ColorInput, jt as Combobox, Mt as ComboboxField, jn as CommandPalette, $ as Container, Ae as CopyButton, S as CopyIcon, ue as DEFAULT_HEADING_SIZE, e as DEFAULT_THEME, Zt as DataList, pt as DateField, lt as DateInput, ot as DateRangeField, ft as DateRangePickerField, ht as DateTimeField, dt as DateTimeInput, Yt as Delta, On as Dialog, te as Divider, An as DropdownMenu, un as EmptyState, C as ErrorIcon, w as EyeIcon, T as EyeOffIcon, Le as Field, We as Fieldset, Ft as FileDrop, It as FileField, Sn as Flash, Z as Grid, de as Heading, E as HelpIcon, Ee as IconButton, wn as Indicator, D as InfoIcon, Y as Inline, Re as Input, Vt as JsonField, zt as JsonInput, he as Kbd, pe as Link, Qt as List, xn as LiveIndicator, t as MODES, nn as Marquee, tn as Media, O as MenuIcon, k as MessageIcon, cn as Meter, A as MinusIcon, Ie as ModeToggle, j as MoonIcon, M as MoreIcon, fn as NavLinks, pn as NavLinksGroup, Qe as NumberField, Ze as NumberInput, xe as Numeral, nt as OneTimeCodeField, tt as OneTimeCodeInput, Xe as PasswordField, Ye as PasswordInput, N as PlusIcon, st as Popover, on as Progress, ge as Prose, _e as Quote, He as RadioGroup, vt as RadioGroupField, P as RadioIcon, Tt as RangeSlider, Et as RangeSliderField, Dt as Rating, Ot as RatingField, Dn as RelativeTime, ae as ScrollArea, F as SearchIcon, ee as Section, Ce as SectionHeader, Fe as SegmentedControl, yt as SegmentedField, Be as Select, qe as SelectField, kn as Sheet, I as ShieldIcon, le as ShowMore, ln as Skeleton, Ct as Slider, wt as SliderField, we as Spinner, Q as Split, J as Stack, an as Stamp, L as StarIcon, Xt as Stat, Cn as StatusDot, _n as Stepper, R as SunIcon, je as Swatch, Ue as Switch, at as SwitchField, z as SwordsIcon, B as SystemIcon, n as THEMES, r as THEME_META, $t as Table, dn as Tabs, kt as Tag, At as TagList, Pt as TagsField, Nt as TagsInput, V as TargetIcon, fe as Text, Ge as TextField, ze as Textarea, Ke as TextareaField, o as ThemeProvider, s as ThemeScope, mt as TimeField, ut as TimeInput, bn as Toaster, Me as ToggleChip, De as Tooltip, Oe as TooltipProvider, ce as Transition, en as TreeTable, H as TrendingUpIcon, U as TrophyIcon, W as UploadIcon, G as UsersIcon, re as VisuallyHidden, K as WarningIcon, q as ZapIcon, Gt as avatarColor, l as createIcon, c as cx, Ht as describeJsonError, Tn as formatAbsoluteTime, Lt as formatJson, ve as formatNumeral, ye as formatNumeralParts, En as formatRelativeTime, Kt as getInitials, sn as meterTone, Rt as minifyJson, be as signOf, a as themeScript, yn as toast, ke as useClipboard, Ne as useFieldControl, i as useTheme, Bt as validateJson };