@kungal/ui-core 2.46.0 → 2.47.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/CHANGELOG.md +12 -0
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/locale/en.cjs +9 -0
- package/dist/locale/en.cjs.map +1 -1
- package/dist/locale/en.d.cts +1 -1
- package/dist/locale/en.d.ts +1 -1
- package/dist/locale/en.js +9 -0
- package/dist/locale/en.js.map +1 -1
- package/dist/{types-BCckudNz.d.cts → types-DWC4cjoO.d.cts} +11 -0
- package/dist/{types-BCckudNz.d.ts → types-DWC4cjoO.d.ts} +11 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @kungal/ui-core
|
|
2
2
|
|
|
3
|
+
## 2.47.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 6dc80fb: `KunScrollShadow` is now portable in the Flutter contract (`contracts/component-contracts.json`). Nothing changes on the web. The contract used to call it a pure-CSS answer to web scrollbars. The Flutter port now needs what it adds on top of a scroller: edge fades that show only while there is more content on that side, a vertical mouse wheel that scrolls a horizontal strip (`wheel`, with `'contain'` keeping the page still), and grab-to-scroll with a mouse (`draggable`). Flutter's `Scrollable` does none of these by default, and a Flutter app with horizontal shelves could not scroll them with a plain mouse wheel. Only `className` and `contentClass` stay web-only, as class pass-throughs do everywhere.
|
|
8
|
+
|
|
9
|
+
## 2.47.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- cefb4b0: Seven new locale strings under `textSelection`: `copy`, `cut`, `paste`, `selectAll`, `share`, `lookUp` and `searchWeb`. They label the menu a text field shows over its selection, and only the Flutter port draws that menu: on the web the browser draws its own, so no web component renders them and nothing on a page changes. They are in the shared catalogs because `kun_ui_messages` is generated from the same source, and a string that exists on one platform only is what that pipeline exists to prevent. If you supply a full catalog of your own for another language, add the group; the wording follows Flutter's own `WidgetsLocalizations` for both built-in languages.
|
|
14
|
+
|
|
3
15
|
## 2.46.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -427,6 +427,15 @@ var zh_CN_default = {
|
|
|
427
427
|
tag: "标签 {tag}",
|
|
428
428
|
removeTag: "移除标签 {tag}"
|
|
429
429
|
},
|
|
430
|
+
textSelection: {
|
|
431
|
+
copy: "复制",
|
|
432
|
+
cut: "剪切",
|
|
433
|
+
paste: "粘贴",
|
|
434
|
+
selectAll: "全选",
|
|
435
|
+
share: "分享",
|
|
436
|
+
lookUp: "查询",
|
|
437
|
+
searchWeb: "搜索"
|
|
438
|
+
},
|
|
430
439
|
upload: {
|
|
431
440
|
imageAlt: "上传图片",
|
|
432
441
|
cropTitle: "裁剪图片",
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/twScales.generated.ts","../src/cn.ts","../src/variants.ts","../src/rounded.ts","../src/controlSize.ts","../src/motionPhysics.generated.ts","../src/locale/translate.ts","../src/locale/zh-CN.json","../src/locale/zh-CN.ts","../src/random.ts","../src/decodeIfEncoded.ts","../src/avatarFallbackImage.ts","../src/avatarFallback.ts","../src/icons-data.ts","../src/icons.ts"],"names":["extendTailwindMerge","clsx"],"mappings":"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","file":"index.cjs","sourcesContent":["// AUTO-GENERATED by scripts/gen-tw-scales.mjs from @kungal/ui-tokens — do not edit.\n//\n// The Tailwind scale names KunUI mints itself. `cn()` feeds them to\n// tailwind-merge, which otherwise cannot parse them and silently keeps two\n// conflicting classes.\nexport const KUN_TW_SCALES = {\n radius: ['kun-full', 'kun-lg', 'kun-md', 'kun-none', 'kun-sm'],\n shadow: ['kun-lg', 'kun-md', 'kun-sm'],\n ease: ['kun-emphasized', 'kun-in', 'kun-out', 'kun-standard'],\n animate: ['bounce', 'bounceInDown', 'bounceInRight', 'fadeInUp', 'fadeOutDown', 'shake', 'swing', 'tada'],\n z: ['kun-alert', 'kun-message', 'kun-modal', 'kun-popover', 'kun-sticky'],\n duration: ['kun-base', 'kun-exit', 'kun-fast', 'kun-slow'],\n} as const\n","import { clsx, type ClassValue } from 'clsx'\nimport { extendTailwindMerge } from 'tailwind-merge'\nimport { KUN_TW_SCALES } from './twScales.generated'\n\n// tailwind-merge only ships Tailwind's OWN scales, so every name KunUI mints in\n// `@theme` / `@utility` was invisible to it and got passed through untouched:\n// `cn('rounded-kun-md', 'rounded-full')` returned both classes and left CSS\n// source order to pick the winner. Measured, a consumer passing\n// `classNames.trigger: 'rounded-full'` to KunSelect still rendered a 12px\n// radius — the documented \"your class wins\" contract was false for the whole\n// `rounded-kun-*`, `shadow-kun-*`, `z-kun-*`, `ease-kun-*` and `duration-kun-*`\n// surface.\n//\n// `shadow-kun-*` failed worse than the rest. The shadow COLOUR group's\n// validator accepts any non-arbitrary word, so `shadow-kun-md` was classified\n// as a colour: it resolved against `shadow-primary/20` and the box-shadow was\n// the class that got dropped.\n//\n// The scale names are generated from tokens.css (`pnpm gen`) because a drifted\n// hand-written list fails silently — nothing errors, the classes just stop\n// merging again.\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n radius: [...KUN_TW_SCALES.radius],\n shadow: [...KUN_TW_SCALES.shadow],\n ease: [...KUN_TW_SCALES.ease],\n animate: [...KUN_TW_SCALES.animate],\n },\n // z-index and transition-duration are not Tailwind v4 theme namespaces —\n // these are `@utility` blocks, so they extend the class group directly.\n classGroups: {\n z: [{ z: [...KUN_TW_SCALES.z] }],\n duration: [{ duration: [...KUN_TW_SCALES.duration] }],\n },\n },\n})\n\n// Merge Tailwind class names with conflict resolution. Framework-agnostic:\n// the Vue and React layers both import this so \"last class wins\" semantics\n// are identical everywhere.\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs))\n\nexport type { ClassValue }\n","import type { KunUIVariant, KunUIColor } from './types'\n\n// Single source of truth for the variant × color → Tailwind class table.\n// Button / Badge / Chip / Tab / Info / Progress etc. (in every framework\n// layer) consume this so the 7 × 7 matrix lives in exactly one place.\n//\n// All keys MUST be static string literals so the Tailwind JIT picks them\n// up — never construct class names with template strings at runtime.\n// Every entry carries an explicit `border` WIDTH so the outline variant\n// `bordered` actually renders — `border-{color}` alone sets only the\n// color and paints nothing in Tailwind v4. Filled / light variants use a\n// transparent border of the same width so switching variants never shifts the\n// box by a pixel.\nconst TABLE: Record<KunUIVariant, Record<KunUIColor, string>> = {\n // Filled buttons keep white text in BOTH modes, so the fill must stay dark\n // enough for contrast. The dark color scale is inverted (`-500`/`-600` become\n // LIGHT in dark mode), so a plain `bg-{color}` renders pale — worst on the\n // light hues (info ≈ L88%, default/secondary ≈ L65–72%). Each entry pins a\n // `dark:bg-{color}-{n}` that lands every color at a consistent ~L44–55% so the\n // whole row reads as one saturated tier with legible white text.\n // Foreground: the dark hues take white; the light hues (success / warning /\n // info) are light in BOTH modes, so white text fails WCAG on them (~1.5–3.4:1)\n // — they take dark text (≈6–18:1). See kunSolidFgClasses.\n solid: {\n default: 'border border-transparent bg-default text-default-foreground',\n primary: 'border border-transparent bg-primary text-primary-foreground',\n secondary: 'border border-transparent bg-secondary text-secondary-foreground',\n success: 'border border-transparent bg-success text-success-foreground',\n warning: 'border border-transparent bg-warning text-warning-foreground',\n danger: 'border border-transparent bg-danger text-danger-foreground',\n info: 'border border-transparent bg-info text-info-foreground',\n },\n bordered: {\n default: 'border border-default bg-transparent',\n primary: 'border border-primary bg-transparent text-primary',\n secondary: 'border border-secondary bg-transparent text-secondary',\n success: 'border border-success bg-transparent text-success',\n warning: 'border border-warning bg-transparent text-warning',\n danger: 'border border-danger bg-transparent text-danger',\n info: 'border border-info bg-transparent text-info',\n },\n light: {\n default: 'border border-transparent bg-transparent hover:bg-default/20',\n primary: 'border border-transparent bg-transparent text-primary hover:bg-primary/20',\n secondary: 'border border-transparent bg-transparent text-secondary hover:bg-secondary/20',\n success: 'border border-transparent bg-transparent text-success hover:bg-success/20',\n warning: 'border border-transparent bg-transparent text-warning hover:bg-warning/20',\n danger: 'border border-transparent bg-transparent text-danger hover:bg-danger/20',\n info: 'border border-transparent bg-transparent text-info hover:bg-info/20',\n },\n flat: {\n default: 'border border-transparent bg-default/20 text-default-700',\n primary: 'border border-transparent bg-primary/20 text-primary-600',\n secondary: 'border border-transparent bg-secondary/20 text-secondary-600',\n success: 'border border-transparent bg-success/20 text-success-700 dark:text-success',\n warning: 'border border-transparent bg-warning/20 text-warning-700 dark:text-warning',\n danger: 'border border-transparent bg-danger/20 text-danger-600 dark:text-danger-500',\n info: 'border border-transparent bg-info/20 text-info-700 dark:text-info-500',\n },\n // Same fill logic as `solid` (see note above) plus a COLORED glow. The glow\n // needs both a size (`shadow-lg` — the geometry) AND a tint (`shadow-{color}/40`\n // — sets --tw-shadow-color): a color utility alone leaves --tw-shadow empty, so\n // the button rendered with NO shadow at all. `overflow-hidden` on the button\n // doesn't clip its own outset box-shadow, so the glow shows.\n shadow: {\n default: 'border border-transparent shadow-lg shadow-default/40 bg-default text-default-foreground',\n primary: 'border border-transparent shadow-lg shadow-primary/40 bg-primary text-primary-foreground',\n secondary: 'border border-transparent shadow-lg shadow-secondary/40 bg-secondary text-secondary-foreground',\n success: 'border border-transparent shadow-lg shadow-success/40 bg-success text-success-foreground',\n warning: 'border border-transparent shadow-lg shadow-warning/40 bg-warning text-warning-foreground',\n danger: 'border border-transparent shadow-lg shadow-danger/40 bg-danger text-danger-foreground',\n info: 'border border-transparent shadow-lg shadow-info/40 bg-info text-info-foreground',\n },\n}\n\nexport const kunVariantClasses = (\n variant: KunUIVariant,\n color: KunUIColor\n): string => TABLE[variant][color]\n\n// Static maps for narrower use cases (just the fill color, just the text\n// color, etc.) — same JIT-safety requirement: keys must be literals.\n\nexport const kunBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n// ─── Solid fills (a colored fill that carries text / icons) ──────────────────\n// Each semantic color ships a paired on-color token — `--color-{c}` (the vivid\n// fill) + `--color-{c}-foreground` (the text that stays legible on it) — both\n// generated in OKLCH and WCAG-AA-verified in BOTH light and dark by\n// scripts/gen-tokens.mjs (the build fails if any pair regresses). So a solid is\n// just `bg-{c} text-{c}-foreground`: no per-color white/black guess, no `dark:`\n// pin (the tokens are mode-correct by construction). Medium hues land white,\n// the bright hues (magenta/green/cyan/amber) land a refined dark tint.\n// Reach for these — NOT plain `kunBgClasses` — whenever a colored fill carries a\n// foreground. `kunBgClasses` stays for tints / bars / dots that carry no text.\n\n/** Just the fill. Pair with {@link kunSolidFgClasses} when the fill and its text\n * live on different elements. */\nexport const kunSolidBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n/** The generated on-color that stays legible on the matching solid fill in both\n * modes (white on medium hues, a dark hue-tint on the bright ones). */\nexport const kunSolidFgClasses: Record<KunUIColor, string> = {\n default: 'text-default-foreground',\n primary: 'text-primary-foreground',\n secondary: 'text-secondary-foreground',\n success: 'text-success-foreground',\n warning: 'text-warning-foreground',\n danger: 'text-danger-foreground',\n info: 'text-info-foreground',\n}\n\n/** Fill + matching foreground — the common case (text sits on the fill). */\nexport const kunSolidClasses: Record<KunUIColor, string> = {\n default: 'bg-default text-default-foreground',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-danger text-danger-foreground',\n info: 'bg-info text-info-foreground',\n}\n\nexport const kunTextClasses: Record<KunUIColor, string> = {\n default: 'text-foreground',\n primary: 'text-primary',\n secondary: 'text-secondary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n info: 'text-info',\n}\n\nexport const kunBorderClasses: Record<KunUIColor, string> = {\n default: 'border-default',\n primary: 'border-primary',\n secondary: 'border-secondary',\n success: 'border-success',\n warning: 'border-warning',\n danger: 'border-danger',\n info: 'border-info',\n}\n\n/**\n * @deprecated Use {@link kunFocusRingClasses} (or {@link kunFocusRingWithinClasses}\n * for composite widgets). This mixed `:focus` + `:focus-within` so a mouse click\n * lit the ring, and used a different opacity from the rest of the library.\n */\nexport const kunRingClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-default/40 focus:ring-default/40',\n primary: 'focus-within:ring-primary/40 focus:ring-primary/40',\n secondary: 'focus-within:ring-secondary/40 focus:ring-secondary/40',\n success: 'focus-within:ring-success/40 focus:ring-success/40',\n warning: 'focus-within:ring-warning/40 focus:ring-warning/40',\n danger: 'focus-within:ring-danger/40 focus:ring-danger/40',\n info: 'focus-within:ring-info/40 focus:ring-info/40',\n}\n\n/**\n * Unified focus ring — ONE recipe for every directly-focusable control (inputs,\n * textarea, select trigger, buttons, checkbox/radio, links, tabs, menu items…).\n * Keyboard focus only (`:focus-visible`, so a mouse click on a button shows no\n * ring; text fields still show it on click via the browser's focus-visible\n * heuristic). A flush 2px ring in the control's semantic color at 50% — replaces\n * the old scatter of `:focus`/`:focus-within` × `ring-1|2|4` × `/25|/40|/50|full`.\n * Pair with `border-kun` at rest; on an invalid control use the `danger` entry.\n */\nexport const kunFocusRingClasses: Record<KunUIColor, string> = {\n default: 'outline-none focus-visible:ring-2 focus-visible:ring-default/50',\n primary: 'outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n secondary: 'outline-none focus-visible:ring-2 focus-visible:ring-secondary/50',\n success: 'outline-none focus-visible:ring-2 focus-visible:ring-success/50',\n warning: 'outline-none focus-visible:ring-2 focus-visible:ring-warning/50',\n danger: 'outline-none focus-visible:ring-2 focus-visible:ring-danger/50',\n info: 'outline-none focus-visible:ring-2 focus-visible:ring-info/50',\n}\n\n/**\n * Composite-widget variant of {@link kunFocusRingClasses}: the focusable element\n * is an inner `<input>` but the ring should sit on the WRAPPER. Put this on the\n * wrapper and give the inner input `outline-none` (and no ring of its own) so\n * there's exactly one indicator. Used by KunNumberInput / KunTagInput.\n *\n * Uses `focus-within` (not `has-[:focus-visible]`): for a text-field wrapper the\n * two are equivalent — a text input matches `:focus-visible` on click too — and\n * `focus-within` is a native variant that reliably compiles, whereas the\n * `has-[:focus-visible]` arbitrary variant isn't extracted from this TS source.\n */\nexport const kunFocusRingWithinClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-2 focus-within:ring-default/50',\n primary: 'focus-within:ring-2 focus-within:ring-primary/50',\n secondary: 'focus-within:ring-2 focus-within:ring-secondary/50',\n success: 'focus-within:ring-2 focus-within:ring-success/50',\n warning: 'focus-within:ring-2 focus-within:ring-warning/50',\n danger: 'focus-within:ring-2 focus-within:ring-danger/50',\n info: 'focus-within:ring-2 focus-within:ring-info/50',\n}\n\n// Very light tint of the semantic color — \"selected card\" backgrounds in\n// RadioGroup and any \"barely there\" colored fill. Keys are static literals.\nexport const kunSoftBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default/5',\n primary: 'bg-primary/5',\n secondary: 'bg-secondary/5',\n success: 'bg-success/5',\n warning: 'bg-warning/5',\n danger: 'bg-danger/5',\n info: 'bg-info/5',\n}\n","import type { KunUIRounded } from './types'\n\n// Static class map for the 5-bucket Kun radius system. All keys are literal\n// strings so the Tailwind JIT picks them up — the `rounded-kun-*` utilities\n// come from the --radius-kun-* tokens shipped by @kungal/ui-tokens.\nexport const kunRoundedClasses: Record<KunUIRounded, string> = {\n none: 'rounded-kun-none',\n sm: 'rounded-kun-sm',\n md: 'rounded-kun-md',\n lg: 'rounded-kun-lg',\n full: 'rounded-kun-full',\n}\n\n// Global default radius bucket (matches the source layer's behaviour where\n// the un-configured fallback is 'md'). A render layer's config provider may\n// override this per subtree.\nexport const KUN_DEFAULT_ROUNDED: KunUIRounded = 'md'\n\n// Pure precedence resolver for a component's effective radius:\n// prop > component built-in fallback > app/provider default\n//\n// This is the framework-agnostic core of the original Vue\n// `useResolvedRounded` composable. Each render layer wraps it in its own\n// reactivity primitive:\n// Vue: computed(() => resolveRounded(props.rounded, fallback, cfg.rounded))\n// React: useMemo(() => resolveRounded(rounded, fallback, cfg.rounded), [...])\nexport const resolveRounded = (\n prop: KunUIRounded | undefined,\n fallback: KunUIRounded | undefined,\n configDefault: KunUIRounded = KUN_DEFAULT_ROUNDED\n): KunUIRounded => prop ?? fallback ?? configDefault\n\n// A floating panel has no correct `full`. `border-radius: 9999px` on an n-row\n// listbox is not a pill — CSS Backgrounds 3 §5.5 scales every corner by\n// min(side / sum of its radii), so the used radius is half the short side. A\n// measured 80x116 KunSelect popup rendered 40px corners and pushed its option\n// labels inward; the docs' own FilterBar example prescribed `rounded=\"full\"`\n// and shipped that. `full` means \"pill\", and a pill is only defined for a\n// single-line control. So a trigger + panel component keeps `full` on the\n// trigger and resolves the panel to `lg`, the bucket --radius-kun-lg documents\n// as \"containers / floating panels\". Every other bucket passes through.\nexport const kunPanelRoundedClass = (rounded: KunUIRounded): string =>\n kunRoundedClasses[rounded === 'full' ? 'lg' : rounded]\n","import type { KunUISize } from './types'\n\n// The single source of truth for the size of every text-like form control —\n// Button, Input, Select, DatePicker, Textarea, TagInput. They reference this so\n// they share one scale and line up in a row.\n//\n// Padding-driven (not fixed-height): height = font line-height + 2·py + border.\n// `md` is the anchor (~38px, the modern default). px:py is a clean 2:1 (xs/sm a\n// touch looser); horizontal padding grows faster than vertical from md→xl, so a\n// bigger control gets wider, not flatter. Approx heights with a 1px border and\n// text line-heights 16 / 20 / 20 / 24 / 28:\n// xs ≈ 26 · sm ≈ 34 · md ≈ 38 · lg ≈ 46 · xl ≈ 54\nexport const kunControlSizeClasses: Record<KunUISize, string> = {\n xs: 'text-xs px-2.5 py-1',\n sm: 'text-sm px-3.5 py-1.5',\n md: 'text-sm px-4 py-2',\n lg: 'text-base px-5 py-2.5',\n xl: 'text-lg px-6 py-3',\n}\n\n// Icon-only buttons: a fixed SQUARE whose side equals the text-button height at\n// the same size, so an icon button lines up with text buttons in a row.\n//\n// Why this exists: kunControlSizeClasses is padding-driven (height = line-height\n// + 2·py + border). A text label contributes a full line-box (≈1.5em), but a lone\n// 1em icon does not — with the same padding the icon button would come out\n// shorter and break the row. Mainstream libraries dodge this by giving buttons a\n// fixed height and making the icon button a square of that height (shadcn\n// `size-9`, HeroUI/Chakra/Ant `isIconOnly`/`.ant-btn-icon-only`). We do the same,\n// ONLY for icon-only, keeping the icon at its natural 1em centered in the box.\n//\n// Sides MUST equal the kunControlSizeClasses heights (incl. the 1px border every\n// variant carries): xs 26 · sm 34 · md 38 · lg 46 · xl 54. (size-* is border-box,\n// so the value already accounts for the icon button's own 1px border.)\nexport const kunControlSquareClasses: Record<KunUISize, string> = {\n xs: 'size-[26px] p-0',\n sm: 'size-[34px] p-0',\n md: 'size-[38px] p-0',\n lg: 'size-[46px] p-0',\n xl: 'size-[54px] p-0',\n}\n\nexport interface KunSelectionSize {\n box: string // the square: checkbox box / radio indicator outer ring\n dot: string // radio's inner filled dot (unused by checkbox)\n check: string // checkbox's check glyph (unused by radio)\n text: string // the adjacent label\n gap: string // box ↔ label spacing\n}\n\n// The shared scale for selection controls — KunCheckBox and KunRadioGroup use\n// identical box sizes (every major library does this), so a checkbox and a radio\n// of the same size match. The box is ≈ 0.5× the text-control height and ≈ 1.2–1.4×\n// the label font, so it sits optically level with the label beside it.\n// Box px by size: 12 / 14 / 16 / 20 / 24.\nexport const kunSelectionSizeClasses: Record<KunUISize, KunSelectionSize> = {\n xs: { box: 'size-3', dot: 'size-1.5', check: 'size-2', text: 'text-xs', gap: 'gap-1.5' },\n sm: { box: 'size-3.5', dot: 'size-1.5', check: 'size-2.5', text: 'text-sm', gap: 'gap-2' },\n md: { box: 'size-4', dot: 'size-2', check: 'size-3', text: 'text-sm', gap: 'gap-2' },\n lg: { box: 'size-5', dot: 'size-2.5', check: 'size-3.5', text: 'text-base', gap: 'gap-2.5' },\n xl: { box: 'size-6', dot: 'size-3', check: 'size-4', text: 'text-lg', gap: 'gap-3' },\n}\n\n// The single source of truth for chip / tag pills — a standalone KunChip and the\n// tags inside KunTagInput share it, so a tag looks identical either way. A\n// compact sub-scale (~0.7× the form-control height): vertical padding is tighter\n// than kunControlSizeClasses because a chip is text + tight padding, not a tap\n// target. Pair with `gap-1` + `rounded-full`.\nexport const kunChipSizeClasses: Record<KunUISize, string> = {\n xs: 'px-2 py-0.5 text-xs',\n sm: 'px-2 py-1 text-xs',\n md: 'px-3 py-1 text-sm',\n lg: 'px-4 py-1.5 text-sm',\n xl: 'px-6 py-2 text-base',\n}\n","// AUTO-GENERATED by scripts/gen-motion.mjs from\n// packages/ui-tokens/scripts/motion-physics.mjs — do not edit.\n\n/**\n * The ballistic model behind `KunShatter`, as data — outward impulse, air\n * drag (`1 − (1−t)^dragExponent`), gravity as a t² acceleration — sampled\n * into `keyframeSteps` linear keyframes per shard. The same manifest\n * generates `KunShatterPhysics` in the kun_ui_tokens pub package, so the\n * web and Flutter renditions of the motion cannot drift. Tune the feel in\n * the manifest, never inline in a component.\n */\nexport const KUN_SHATTER_PHYSICS = {\n keyframeSteps: 16,\n reachFactor: 0.5,\n launchMin: 0.32,\n launchSpan: 0.55,\n verticalFactor: 0.8,\n gravityMin: 0.85,\n gravitySpan: 0.5,\n dragExponent: 1.7,\n scaleEndMin: 0.8,\n scaleEndSpan: 0.16,\n fadeOutStartMin: 0.5,\n fadeOutStartSpan: 0.18,\n settleExponent: 2,\n fadeInWindow: 0.4,\n staggerFraction: 0.22,\n staggerCapMs: 120,\n defaultDurationMs: 1100,\n defaultRotationDeg: 140,\n} as const\n\n/**\n * Drag-to-dismiss on a bottom sheet, as data: dismiss on release when the\n * sheet moved down and either the release velocity exceeds `closeVelocity`\n * (px/ms) or the offset reaches `closeDistanceRatio` of the panel height\n * (capped at the viewport); an upward drag of d px moves the panel\n * `rubberBandLimit × (1 − e^(−d / rubberBandLimit))`. The same manifest\n * generates `KunSwipeDismissPhysics` in kun_ui_tokens.\n */\nexport const KUN_SWIPE_DISMISS_PHYSICS = {\n closeDistanceRatio: 0.25,\n closeVelocity: 0.4,\n rubberBandLimit: 32,\n} as const\n","import type { KunMessagePath, KunMessages } from './types'\n\n// Resolve one message and substitute its `{name}` placeholders. Framework-free\n// on purpose: each render layer binds it to however that layer holds the\n// active locale.\n//\n// A `{name}` with no matching param is left as written rather than blanked —\n// a missing interpolation should be visible in the UI, not silently produce a\n// half-sentence.\nexport const translateKunMessage = (\n messages: KunMessages,\n path: KunMessagePath,\n params?: Record<string, string | number>\n): string => {\n const [namespace, key] = path.split('.') as [keyof KunMessages, string]\n const group = messages[namespace] as Record<string, string> | undefined\n const template = group?.[key]\n\n if (typeof template !== 'string') {\n // NODE_ENV, not import.meta.env.DEV: Vite folds the latter to false when it\n // builds a consuming package, which strips the warning from the bundle.\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[KunUI] no locale message at \"${path}\". A custom locale must supply every key in KunMessages.`\n )\n }\n return path\n }\n\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (raw, name: string) =>\n params[name] === undefined ? raw : String(params[name])\n )\n}\n","{\n \"name\": \"简体中文\",\n \"code\": \"zh-CN\",\n \"messages\": {\n \"alert\": {\n \"title\": \"确认\",\n \"confirm\": \"确定\",\n \"cancel\": \"取消\"\n },\n \"autocomplete\": {\n \"clear\": \"清除\",\n \"loading\": \"加载中…\",\n \"noResult\": \"无匹配项\"\n },\n \"avatar\": {\n \"unknownUser\": \"未知用户\"\n },\n \"avatarGroup\": {\n \"label\": \"{count} 位用户\"\n },\n \"banner\": {\n \"label\": \"公告\",\n \"close\": \"关闭公告\"\n },\n \"carousel\": {\n \"label\": \"轮播\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"nav\": \"轮播导航\",\n \"goto\": \"跳到第 {index} 张\"\n },\n \"chip\": {\n \"remove\": \"移除\"\n },\n \"commandPalette\": {\n \"placeholder\": \"搜索…\",\n \"empty\": \"输入关键字搜索\",\n \"noResult\": \"无结果\",\n \"loading\": \"加载中…\",\n \"close\": \"关闭\",\n \"hintSelect\": \"选择\",\n \"hintOpen\": \"打开\",\n \"hintClose\": \"关闭\",\n \"resultCount\": \"{count} 条结果\"\n },\n \"copy\": {\n \"copied\": \"已复制\",\n \"success\": \"{text} 复制成功\",\n \"failure\": \"{text} 复制失败! 请更换更现代的浏览器!\"\n },\n \"datePicker\": {\n \"placeholderDay\": \"请选择日期\",\n \"placeholderMonth\": \"请选择月份\",\n \"placeholderYear\": \"请选择年份\",\n \"clear\": \"清空\",\n \"today\": \"今天\",\n \"close\": \"关闭\",\n \"prevYear\": \"上一年\",\n \"nextYear\": \"下一年\",\n \"prevPage\": \"上一{unit}\",\n \"nextPage\": \"下一{unit}\",\n \"zoomOut\": \"{label} — 返回上一级\",\n \"unitMonth\": \"月\",\n \"unitYear\": \"年\",\n \"unitDecade\": \"个十年\",\n \"monthCell\": \"{year}年{month}\"\n },\n \"drawer\": {\n \"close\": \"关闭抽屉\"\n },\n \"fileInput\": {\n \"trigger\": \"选择文件\",\n \"selected\": \"已选 {count} 个文件\"\n },\n \"filePicker\": {\n \"tooLarge\": \"{name} 超过大小限制 ({size})\"\n },\n \"input\": {\n \"clear\": \"清除\",\n \"reveal\": \"显示密码\",\n \"hide\": \"隐藏密码\"\n },\n \"lightbox\": {\n \"label\": \"图片查看器\",\n \"close\": \"关闭\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"goto\": \"跳转到第 {index} 张\",\n \"zoomIn\": \"放大\",\n \"zoomOut\": \"缩小\",\n \"rotateLeft\": \"向左旋转 90°\",\n \"rotateRight\": \"向右旋转 90°\",\n \"reset\": \"重置缩放/旋转/位置\",\n \"download\": \"下载\"\n },\n \"lightboxGallery\": {\n \"view\": \"查看大图\"\n },\n \"loading\": {\n \"description\": \"正在摸鱼中...咕咕咕\"\n },\n \"loli\": {\n \"close\": \"关闭\"\n },\n \"message\": {\n \"close\": \"关闭\"\n },\n \"modal\": {\n \"close\": \"关闭\"\n },\n \"null\": {\n \"description\": \"莲说这里什么都没有\"\n },\n \"numberInput\": {\n \"decrement\": \"减少\",\n \"increment\": \"增加\"\n },\n \"pagination\": {\n \"nav\": \"分页导航\",\n \"prev\": \"上一页\",\n \"next\": \"下一页\",\n \"page\": \"第 {page} 页\",\n \"hintBefore\": \"您可以使用\",\n \"hintAfter\": \"来进行快速翻页\",\n \"jumpLabel\": \"跳转到页数\",\n \"jump\": \"跳转\"\n },\n \"pinInput\": {\n \"label\": \"验证码\",\n \"digit\": \"{label} 第 {index} 位\"\n },\n \"reaction\": {\n \"label\": \"点赞\"\n },\n \"select\": {\n \"searchPlaceholder\": \"搜索…\",\n \"noResult\": \"无匹配项\",\n \"loading\": \"加载中…\",\n \"clear\": \"清除\",\n \"removeOption\": \"移除 {label}\"\n },\n \"spoiler\": {\n \"copyCode\": \"复制代码\",\n \"reveal\": \"剧透内容,点击或按回车显示\"\n },\n \"tagInput\": {\n \"tag\": \"标签 {tag}\",\n \"removeTag\": \"移除标签 {tag}\"\n },\n \"upload\": {\n \"imageAlt\": \"上传图片\",\n \"cropTitle\": \"裁剪图片\",\n \"cancel\": \"取消\",\n \"confirm\": \"确定\"\n }\n }\n}\n","import raw from './zh-CN.json'\nimport type { KunMessageCatalog } from './types'\n\n// KunUI's built-in default. The strings are the ones the components used to\n// hold inline, reproduced verbatim, so adopting the locale system changed no\n// rendered output.\n//\n// The catalog is JSON rather than a TypeScript literal because one file feeds\n// both the web bundle and the generated kun_ui_messages pub package, and a\n// Node generator can read JSON without evaluating TypeScript. The annotation\n// below is what type-checks it: a key missing from KunMessages fails the build.\nexport const KUN_CATALOG_ZH_CN: KunMessageCatalog = raw\n","// Generate a random integer within an inclusive [lower, upper] range.\nexport const randomNum = (lowerValue: number, upperValue: number): number =>\n Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue)\n","// Decode a possibly percent-encoded string, returning the original when it\n// is not encoded (or when decoding throws on malformed input).\nexport const decodeIfEncoded = (text: string): string => {\n try {\n const decoded = decodeURIComponent(text)\n return decoded !== text ? decoded : text\n } catch {\n return text\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// The terminal avatar fallback, inlined as a base64 webp data URI (128x128,\n// 5318 B) so it needs ZERO consumer setup and makes NO network request — the\n// same no-fetch policy as the bundled icons and KunNull's mascot.\n//\n// This is what renders when the host has configured no avatar pool AND when a\n// pool URL itself fails to load. It is a data URI on purpose: the incident it\n// exists for is a CDN path that 404'd for every avatar-less account across\n// six sites at once, so the LAST fallback in the chain must not be reachable\n// over a network at all.\n//\n// Source: the first official KUN Galgame sticker (image hash d52ac5fb…), the\n// site's de-facto mascot.\n/* eslint-disable */\n/* prettier-ignore */\nexport const KUN_AVATAR_FALLBACK =\n 'data:image/webp;base64,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'\n","import { KUN_AVATAR_FALLBACK } from './avatarFallbackImage'\n\n// The predecessor of this file hardcoded `https://sticker.kungal.com` plus a\n// `/stickers/KUNgal{pack}/{n}.webp` path and a pack/per-pack count. That path\n// addressed a POSITION IN A MUTABLE COLLECTION on a site KunUI does not own,\n// so when that site stopped serving static files every avatar-less account\n// across six consumers 404'd at once. A URL that names another service does\n// not belong in a component library: the host supplies the pool\n// (`useKunUIConfig().avatarFallbackPool`), KunUI only chooses from it.\n\nconst hash = (value: string): number => {\n let h = 0\n for (let i = 0; i < value.length; i++) {\n h = (Math.imul(h, 31) + value.charCodeAt(i)) >>> 0\n }\n return h\n}\n\n/**\n * Deterministically pick one image from an avatar fallback pool.\n *\n * The same `seed` always yields the same entry on server and client, so there\n * is no hydration mismatch and no framework state is needed.\n *\n * `pool` is treated as a FIXED-LENGTH array: the index is\n * `hash(seed) % pool.length`, so adding or removing an entry re-assigns every\n * seed, while replacing one entry in place moves only the seeds that land on\n * it. Pool providers should edit slots rather than resize.\n *\n * An empty pool returns the bundled data URI, which cannot fail to load.\n */\nexport const pickAvatarFallback = (seed = '', pool: readonly string[] = []): string =>\n pool.length > 0 ? (pool[hash(seed) % pool.length] ?? KUN_AVATAR_FALLBACK) : KUN_AVATAR_FALLBACK\n\n/**\n * @deprecated Renamed to `pickAvatarFallback`, which takes the pool the host\n * configured. This alias no longer returns a sticker URL — it returns the\n * bundled fallback for any input, because the host it used to point at stopped\n * serving those files. Pass a pool, or read the resolved image off KunAvatar.\n */\nexport const getRandomSticker = (id = ''): string => pickAvatarFallback(id)\n","// AUTO-GENERATED by scripts/gen-icons.mjs — do not edit by hand.\n// Regenerate: pnpm --filter @kungal/ui-core gen:icons\nimport type { KunIconData } from './icons'\n\n// SVG data for the icons KunUI components render, bundled inline so the\n// library never fetches an icon at runtime. Bodies use currentColor.\nexport const KUN_BUNDLED_ICONS: Record<string, KunIconData> = {\n \"lucide:x\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"},\n \"lucide:check\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M20 6L9 17l-5-5\\\"/>\"},\n \"lucide:info\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4m0-4h.01\\\"/></g>\"},\n \"lucide:circle-check\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12l2 2l4-4\\\"/></g>\"},\n \"lucide:circle-x\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9l-6 6m0-6l6 6\\\"/></g>\"},\n \"lucide:triangle-alert\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01\\\"/>\"},\n \"lucide:chevron-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m9 18l6-6l-6-6\\\"/>\"},\n \"lucide:chevron-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m15 18l-6-6l6-6\\\"/>\"},\n \"lucide:chevron-down\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"},\n \"lucide:chevrons-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 17l5-5l-5-5m7 10l5-5l-5-5\\\"/>\"},\n \"lucide:chevrons-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m11 17l-5-5l5-5m7 10l-5-5l5-5\\\"/>\"},\n \"lucide:arrow-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7l7 7l-7 7\\\"/>\"},\n \"lucide:arrow-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m12 19l-7-7l7-7m7 7H5\\\"/>\"},\n \"lucide:plus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"},\n \"lucide:minus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"},\n \"lucide:upload\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/>\"},\n \"lucide:zoom-in\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"},\n \"lucide:zoom-out\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"},\n \"lucide:rotate-cw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"},\n \"lucide:rotate-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/></g>\"},\n \"lucide:refresh-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\\\"/><path d=\\\"M16 16h5v5\\\"/></g>\"},\n \"lucide:external-link\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\"},\n \"lucide:download\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10l5 5l5-5\\\"/></g>\"},\n \"lucide:copy\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"},\n \"lucide:calendar\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M8 2v4m8-4v4\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M3 10h18\\\"/></g>\"},\n \"lucide:lollipop\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.3-4.3M11 11a2 2 0 0 0 4 0a4 4 0 0 0-8 0a6 6 0 0 0 12 0\\\"/></g>\"},\n \"lucide:eye\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"},\n \"lucide:eye-off\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20\\\"/></g>\"},\n \"lucide:search\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m21 21l-4.34-4.34\\\"/><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/></g>\"},\n \"lucide:filter\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\"},\n \"svg-spinners:90-ring-with-bg\": {\"body\":\"<path fill=\\\"currentColor\\\" d=\\\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\\\" opacity=\\\".25\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\\\"><animateTransform attributeName=\\\"transform\\\" dur=\\\"0.75s\\\" repeatCount=\\\"indefinite\\\" type=\\\"rotate\\\" values=\\\"0 12 12;360 12 12\\\"/></path>\"},\n}\n","import { KUN_BUNDLED_ICONS } from './icons-data'\n\n// Iconify-compatible icon shape: `body` is the inner SVG markup (using\n// `currentColor`), rendered into a `0 0 width height` viewBox (default 24).\nexport interface KunIconData {\n body: string\n width?: number\n height?: number\n}\n\n// The registry is SEEDED with KunUI's bundled internal icons (referenced via\n// the data import, so it is never tree-shaken away — no side-effect needed).\n// Consumers add their own icons with registerKunIcon(s). KunIcon renders from\n// this registry and NEVER fetches from a network/API.\nconst registry = new Map<string, KunIconData>(Object.entries(KUN_BUNDLED_ICONS))\n\nexport const registerKunIcon = (name: string, data: KunIconData): void => {\n registry.set(name, data)\n}\n\n// Bulk register — pass a Record<name, data>, e.g. icons extracted from\n// `@iconify-json/*` at build time, or your own custom SVGs.\nexport const registerKunIcons = (\n icons: Record<string, KunIconData>\n): void => {\n for (const [name, data] of Object.entries(icons)) registry.set(name, data)\n}\n\nexport const getKunIcon = (name: string): KunIconData | undefined =>\n registry.get(name)\n\nexport const hasKunIcon = (name: string): boolean => registry.has(name)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/twScales.generated.ts","../src/cn.ts","../src/variants.ts","../src/rounded.ts","../src/controlSize.ts","../src/motionPhysics.generated.ts","../src/locale/translate.ts","../src/locale/zh-CN.json","../src/locale/zh-CN.ts","../src/random.ts","../src/decodeIfEncoded.ts","../src/avatarFallbackImage.ts","../src/avatarFallback.ts","../src/icons-data.ts","../src/icons.ts"],"names":["extendTailwindMerge","clsx"],"mappings":"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","file":"index.cjs","sourcesContent":["// AUTO-GENERATED by scripts/gen-tw-scales.mjs from @kungal/ui-tokens — do not edit.\n//\n// The Tailwind scale names KunUI mints itself. `cn()` feeds them to\n// tailwind-merge, which otherwise cannot parse them and silently keeps two\n// conflicting classes.\nexport const KUN_TW_SCALES = {\n radius: ['kun-full', 'kun-lg', 'kun-md', 'kun-none', 'kun-sm'],\n shadow: ['kun-lg', 'kun-md', 'kun-sm'],\n ease: ['kun-emphasized', 'kun-in', 'kun-out', 'kun-standard'],\n animate: ['bounce', 'bounceInDown', 'bounceInRight', 'fadeInUp', 'fadeOutDown', 'shake', 'swing', 'tada'],\n z: ['kun-alert', 'kun-message', 'kun-modal', 'kun-popover', 'kun-sticky'],\n duration: ['kun-base', 'kun-exit', 'kun-fast', 'kun-slow'],\n} as const\n","import { clsx, type ClassValue } from 'clsx'\nimport { extendTailwindMerge } from 'tailwind-merge'\nimport { KUN_TW_SCALES } from './twScales.generated'\n\n// tailwind-merge only ships Tailwind's OWN scales, so every name KunUI mints in\n// `@theme` / `@utility` was invisible to it and got passed through untouched:\n// `cn('rounded-kun-md', 'rounded-full')` returned both classes and left CSS\n// source order to pick the winner. Measured, a consumer passing\n// `classNames.trigger: 'rounded-full'` to KunSelect still rendered a 12px\n// radius — the documented \"your class wins\" contract was false for the whole\n// `rounded-kun-*`, `shadow-kun-*`, `z-kun-*`, `ease-kun-*` and `duration-kun-*`\n// surface.\n//\n// `shadow-kun-*` failed worse than the rest. The shadow COLOUR group's\n// validator accepts any non-arbitrary word, so `shadow-kun-md` was classified\n// as a colour: it resolved against `shadow-primary/20` and the box-shadow was\n// the class that got dropped.\n//\n// The scale names are generated from tokens.css (`pnpm gen`) because a drifted\n// hand-written list fails silently — nothing errors, the classes just stop\n// merging again.\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n radius: [...KUN_TW_SCALES.radius],\n shadow: [...KUN_TW_SCALES.shadow],\n ease: [...KUN_TW_SCALES.ease],\n animate: [...KUN_TW_SCALES.animate],\n },\n // z-index and transition-duration are not Tailwind v4 theme namespaces —\n // these are `@utility` blocks, so they extend the class group directly.\n classGroups: {\n z: [{ z: [...KUN_TW_SCALES.z] }],\n duration: [{ duration: [...KUN_TW_SCALES.duration] }],\n },\n },\n})\n\n// Merge Tailwind class names with conflict resolution. Framework-agnostic:\n// the Vue and React layers both import this so \"last class wins\" semantics\n// are identical everywhere.\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs))\n\nexport type { ClassValue }\n","import type { KunUIVariant, KunUIColor } from './types'\n\n// Single source of truth for the variant × color → Tailwind class table.\n// Button / Badge / Chip / Tab / Info / Progress etc. (in every framework\n// layer) consume this so the 7 × 7 matrix lives in exactly one place.\n//\n// All keys MUST be static string literals so the Tailwind JIT picks them\n// up — never construct class names with template strings at runtime.\n// Every entry carries an explicit `border` WIDTH so the outline variant\n// `bordered` actually renders — `border-{color}` alone sets only the\n// color and paints nothing in Tailwind v4. Filled / light variants use a\n// transparent border of the same width so switching variants never shifts the\n// box by a pixel.\nconst TABLE: Record<KunUIVariant, Record<KunUIColor, string>> = {\n // Filled buttons keep white text in BOTH modes, so the fill must stay dark\n // enough for contrast. The dark color scale is inverted (`-500`/`-600` become\n // LIGHT in dark mode), so a plain `bg-{color}` renders pale — worst on the\n // light hues (info ≈ L88%, default/secondary ≈ L65–72%). Each entry pins a\n // `dark:bg-{color}-{n}` that lands every color at a consistent ~L44–55% so the\n // whole row reads as one saturated tier with legible white text.\n // Foreground: the dark hues take white; the light hues (success / warning /\n // info) are light in BOTH modes, so white text fails WCAG on them (~1.5–3.4:1)\n // — they take dark text (≈6–18:1). See kunSolidFgClasses.\n solid: {\n default: 'border border-transparent bg-default text-default-foreground',\n primary: 'border border-transparent bg-primary text-primary-foreground',\n secondary: 'border border-transparent bg-secondary text-secondary-foreground',\n success: 'border border-transparent bg-success text-success-foreground',\n warning: 'border border-transparent bg-warning text-warning-foreground',\n danger: 'border border-transparent bg-danger text-danger-foreground',\n info: 'border border-transparent bg-info text-info-foreground',\n },\n bordered: {\n default: 'border border-default bg-transparent',\n primary: 'border border-primary bg-transparent text-primary',\n secondary: 'border border-secondary bg-transparent text-secondary',\n success: 'border border-success bg-transparent text-success',\n warning: 'border border-warning bg-transparent text-warning',\n danger: 'border border-danger bg-transparent text-danger',\n info: 'border border-info bg-transparent text-info',\n },\n light: {\n default: 'border border-transparent bg-transparent hover:bg-default/20',\n primary: 'border border-transparent bg-transparent text-primary hover:bg-primary/20',\n secondary: 'border border-transparent bg-transparent text-secondary hover:bg-secondary/20',\n success: 'border border-transparent bg-transparent text-success hover:bg-success/20',\n warning: 'border border-transparent bg-transparent text-warning hover:bg-warning/20',\n danger: 'border border-transparent bg-transparent text-danger hover:bg-danger/20',\n info: 'border border-transparent bg-transparent text-info hover:bg-info/20',\n },\n flat: {\n default: 'border border-transparent bg-default/20 text-default-700',\n primary: 'border border-transparent bg-primary/20 text-primary-600',\n secondary: 'border border-transparent bg-secondary/20 text-secondary-600',\n success: 'border border-transparent bg-success/20 text-success-700 dark:text-success',\n warning: 'border border-transparent bg-warning/20 text-warning-700 dark:text-warning',\n danger: 'border border-transparent bg-danger/20 text-danger-600 dark:text-danger-500',\n info: 'border border-transparent bg-info/20 text-info-700 dark:text-info-500',\n },\n // Same fill logic as `solid` (see note above) plus a COLORED glow. The glow\n // needs both a size (`shadow-lg` — the geometry) AND a tint (`shadow-{color}/40`\n // — sets --tw-shadow-color): a color utility alone leaves --tw-shadow empty, so\n // the button rendered with NO shadow at all. `overflow-hidden` on the button\n // doesn't clip its own outset box-shadow, so the glow shows.\n shadow: {\n default: 'border border-transparent shadow-lg shadow-default/40 bg-default text-default-foreground',\n primary: 'border border-transparent shadow-lg shadow-primary/40 bg-primary text-primary-foreground',\n secondary: 'border border-transparent shadow-lg shadow-secondary/40 bg-secondary text-secondary-foreground',\n success: 'border border-transparent shadow-lg shadow-success/40 bg-success text-success-foreground',\n warning: 'border border-transparent shadow-lg shadow-warning/40 bg-warning text-warning-foreground',\n danger: 'border border-transparent shadow-lg shadow-danger/40 bg-danger text-danger-foreground',\n info: 'border border-transparent shadow-lg shadow-info/40 bg-info text-info-foreground',\n },\n}\n\nexport const kunVariantClasses = (\n variant: KunUIVariant,\n color: KunUIColor\n): string => TABLE[variant][color]\n\n// Static maps for narrower use cases (just the fill color, just the text\n// color, etc.) — same JIT-safety requirement: keys must be literals.\n\nexport const kunBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n// ─── Solid fills (a colored fill that carries text / icons) ──────────────────\n// Each semantic color ships a paired on-color token — `--color-{c}` (the vivid\n// fill) + `--color-{c}-foreground` (the text that stays legible on it) — both\n// generated in OKLCH and WCAG-AA-verified in BOTH light and dark by\n// scripts/gen-tokens.mjs (the build fails if any pair regresses). So a solid is\n// just `bg-{c} text-{c}-foreground`: no per-color white/black guess, no `dark:`\n// pin (the tokens are mode-correct by construction). Medium hues land white,\n// the bright hues (magenta/green/cyan/amber) land a refined dark tint.\n// Reach for these — NOT plain `kunBgClasses` — whenever a colored fill carries a\n// foreground. `kunBgClasses` stays for tints / bars / dots that carry no text.\n\n/** Just the fill. Pair with {@link kunSolidFgClasses} when the fill and its text\n * live on different elements. */\nexport const kunSolidBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n/** The generated on-color that stays legible on the matching solid fill in both\n * modes (white on medium hues, a dark hue-tint on the bright ones). */\nexport const kunSolidFgClasses: Record<KunUIColor, string> = {\n default: 'text-default-foreground',\n primary: 'text-primary-foreground',\n secondary: 'text-secondary-foreground',\n success: 'text-success-foreground',\n warning: 'text-warning-foreground',\n danger: 'text-danger-foreground',\n info: 'text-info-foreground',\n}\n\n/** Fill + matching foreground — the common case (text sits on the fill). */\nexport const kunSolidClasses: Record<KunUIColor, string> = {\n default: 'bg-default text-default-foreground',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-danger text-danger-foreground',\n info: 'bg-info text-info-foreground',\n}\n\nexport const kunTextClasses: Record<KunUIColor, string> = {\n default: 'text-foreground',\n primary: 'text-primary',\n secondary: 'text-secondary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n info: 'text-info',\n}\n\nexport const kunBorderClasses: Record<KunUIColor, string> = {\n default: 'border-default',\n primary: 'border-primary',\n secondary: 'border-secondary',\n success: 'border-success',\n warning: 'border-warning',\n danger: 'border-danger',\n info: 'border-info',\n}\n\n/**\n * @deprecated Use {@link kunFocusRingClasses} (or {@link kunFocusRingWithinClasses}\n * for composite widgets). This mixed `:focus` + `:focus-within` so a mouse click\n * lit the ring, and used a different opacity from the rest of the library.\n */\nexport const kunRingClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-default/40 focus:ring-default/40',\n primary: 'focus-within:ring-primary/40 focus:ring-primary/40',\n secondary: 'focus-within:ring-secondary/40 focus:ring-secondary/40',\n success: 'focus-within:ring-success/40 focus:ring-success/40',\n warning: 'focus-within:ring-warning/40 focus:ring-warning/40',\n danger: 'focus-within:ring-danger/40 focus:ring-danger/40',\n info: 'focus-within:ring-info/40 focus:ring-info/40',\n}\n\n/**\n * Unified focus ring — ONE recipe for every directly-focusable control (inputs,\n * textarea, select trigger, buttons, checkbox/radio, links, tabs, menu items…).\n * Keyboard focus only (`:focus-visible`, so a mouse click on a button shows no\n * ring; text fields still show it on click via the browser's focus-visible\n * heuristic). A flush 2px ring in the control's semantic color at 50% — replaces\n * the old scatter of `:focus`/`:focus-within` × `ring-1|2|4` × `/25|/40|/50|full`.\n * Pair with `border-kun` at rest; on an invalid control use the `danger` entry.\n */\nexport const kunFocusRingClasses: Record<KunUIColor, string> = {\n default: 'outline-none focus-visible:ring-2 focus-visible:ring-default/50',\n primary: 'outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n secondary: 'outline-none focus-visible:ring-2 focus-visible:ring-secondary/50',\n success: 'outline-none focus-visible:ring-2 focus-visible:ring-success/50',\n warning: 'outline-none focus-visible:ring-2 focus-visible:ring-warning/50',\n danger: 'outline-none focus-visible:ring-2 focus-visible:ring-danger/50',\n info: 'outline-none focus-visible:ring-2 focus-visible:ring-info/50',\n}\n\n/**\n * Composite-widget variant of {@link kunFocusRingClasses}: the focusable element\n * is an inner `<input>` but the ring should sit on the WRAPPER. Put this on the\n * wrapper and give the inner input `outline-none` (and no ring of its own) so\n * there's exactly one indicator. Used by KunNumberInput / KunTagInput.\n *\n * Uses `focus-within` (not `has-[:focus-visible]`): for a text-field wrapper the\n * two are equivalent — a text input matches `:focus-visible` on click too — and\n * `focus-within` is a native variant that reliably compiles, whereas the\n * `has-[:focus-visible]` arbitrary variant isn't extracted from this TS source.\n */\nexport const kunFocusRingWithinClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-2 focus-within:ring-default/50',\n primary: 'focus-within:ring-2 focus-within:ring-primary/50',\n secondary: 'focus-within:ring-2 focus-within:ring-secondary/50',\n success: 'focus-within:ring-2 focus-within:ring-success/50',\n warning: 'focus-within:ring-2 focus-within:ring-warning/50',\n danger: 'focus-within:ring-2 focus-within:ring-danger/50',\n info: 'focus-within:ring-2 focus-within:ring-info/50',\n}\n\n// Very light tint of the semantic color — \"selected card\" backgrounds in\n// RadioGroup and any \"barely there\" colored fill. Keys are static literals.\nexport const kunSoftBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default/5',\n primary: 'bg-primary/5',\n secondary: 'bg-secondary/5',\n success: 'bg-success/5',\n warning: 'bg-warning/5',\n danger: 'bg-danger/5',\n info: 'bg-info/5',\n}\n","import type { KunUIRounded } from './types'\n\n// Static class map for the 5-bucket Kun radius system. All keys are literal\n// strings so the Tailwind JIT picks them up — the `rounded-kun-*` utilities\n// come from the --radius-kun-* tokens shipped by @kungal/ui-tokens.\nexport const kunRoundedClasses: Record<KunUIRounded, string> = {\n none: 'rounded-kun-none',\n sm: 'rounded-kun-sm',\n md: 'rounded-kun-md',\n lg: 'rounded-kun-lg',\n full: 'rounded-kun-full',\n}\n\n// Global default radius bucket (matches the source layer's behaviour where\n// the un-configured fallback is 'md'). A render layer's config provider may\n// override this per subtree.\nexport const KUN_DEFAULT_ROUNDED: KunUIRounded = 'md'\n\n// Pure precedence resolver for a component's effective radius:\n// prop > component built-in fallback > app/provider default\n//\n// This is the framework-agnostic core of the original Vue\n// `useResolvedRounded` composable. Each render layer wraps it in its own\n// reactivity primitive:\n// Vue: computed(() => resolveRounded(props.rounded, fallback, cfg.rounded))\n// React: useMemo(() => resolveRounded(rounded, fallback, cfg.rounded), [...])\nexport const resolveRounded = (\n prop: KunUIRounded | undefined,\n fallback: KunUIRounded | undefined,\n configDefault: KunUIRounded = KUN_DEFAULT_ROUNDED\n): KunUIRounded => prop ?? fallback ?? configDefault\n\n// A floating panel has no correct `full`. `border-radius: 9999px` on an n-row\n// listbox is not a pill — CSS Backgrounds 3 §5.5 scales every corner by\n// min(side / sum of its radii), so the used radius is half the short side. A\n// measured 80x116 KunSelect popup rendered 40px corners and pushed its option\n// labels inward; the docs' own FilterBar example prescribed `rounded=\"full\"`\n// and shipped that. `full` means \"pill\", and a pill is only defined for a\n// single-line control. So a trigger + panel component keeps `full` on the\n// trigger and resolves the panel to `lg`, the bucket --radius-kun-lg documents\n// as \"containers / floating panels\". Every other bucket passes through.\nexport const kunPanelRoundedClass = (rounded: KunUIRounded): string =>\n kunRoundedClasses[rounded === 'full' ? 'lg' : rounded]\n","import type { KunUISize } from './types'\n\n// The single source of truth for the size of every text-like form control —\n// Button, Input, Select, DatePicker, Textarea, TagInput. They reference this so\n// they share one scale and line up in a row.\n//\n// Padding-driven (not fixed-height): height = font line-height + 2·py + border.\n// `md` is the anchor (~38px, the modern default). px:py is a clean 2:1 (xs/sm a\n// touch looser); horizontal padding grows faster than vertical from md→xl, so a\n// bigger control gets wider, not flatter. Approx heights with a 1px border and\n// text line-heights 16 / 20 / 20 / 24 / 28:\n// xs ≈ 26 · sm ≈ 34 · md ≈ 38 · lg ≈ 46 · xl ≈ 54\nexport const kunControlSizeClasses: Record<KunUISize, string> = {\n xs: 'text-xs px-2.5 py-1',\n sm: 'text-sm px-3.5 py-1.5',\n md: 'text-sm px-4 py-2',\n lg: 'text-base px-5 py-2.5',\n xl: 'text-lg px-6 py-3',\n}\n\n// Icon-only buttons: a fixed SQUARE whose side equals the text-button height at\n// the same size, so an icon button lines up with text buttons in a row.\n//\n// Why this exists: kunControlSizeClasses is padding-driven (height = line-height\n// + 2·py + border). A text label contributes a full line-box (≈1.5em), but a lone\n// 1em icon does not — with the same padding the icon button would come out\n// shorter and break the row. Mainstream libraries dodge this by giving buttons a\n// fixed height and making the icon button a square of that height (shadcn\n// `size-9`, HeroUI/Chakra/Ant `isIconOnly`/`.ant-btn-icon-only`). We do the same,\n// ONLY for icon-only, keeping the icon at its natural 1em centered in the box.\n//\n// Sides MUST equal the kunControlSizeClasses heights (incl. the 1px border every\n// variant carries): xs 26 · sm 34 · md 38 · lg 46 · xl 54. (size-* is border-box,\n// so the value already accounts for the icon button's own 1px border.)\nexport const kunControlSquareClasses: Record<KunUISize, string> = {\n xs: 'size-[26px] p-0',\n sm: 'size-[34px] p-0',\n md: 'size-[38px] p-0',\n lg: 'size-[46px] p-0',\n xl: 'size-[54px] p-0',\n}\n\nexport interface KunSelectionSize {\n box: string // the square: checkbox box / radio indicator outer ring\n dot: string // radio's inner filled dot (unused by checkbox)\n check: string // checkbox's check glyph (unused by radio)\n text: string // the adjacent label\n gap: string // box ↔ label spacing\n}\n\n// The shared scale for selection controls — KunCheckBox and KunRadioGroup use\n// identical box sizes (every major library does this), so a checkbox and a radio\n// of the same size match. The box is ≈ 0.5× the text-control height and ≈ 1.2–1.4×\n// the label font, so it sits optically level with the label beside it.\n// Box px by size: 12 / 14 / 16 / 20 / 24.\nexport const kunSelectionSizeClasses: Record<KunUISize, KunSelectionSize> = {\n xs: { box: 'size-3', dot: 'size-1.5', check: 'size-2', text: 'text-xs', gap: 'gap-1.5' },\n sm: { box: 'size-3.5', dot: 'size-1.5', check: 'size-2.5', text: 'text-sm', gap: 'gap-2' },\n md: { box: 'size-4', dot: 'size-2', check: 'size-3', text: 'text-sm', gap: 'gap-2' },\n lg: { box: 'size-5', dot: 'size-2.5', check: 'size-3.5', text: 'text-base', gap: 'gap-2.5' },\n xl: { box: 'size-6', dot: 'size-3', check: 'size-4', text: 'text-lg', gap: 'gap-3' },\n}\n\n// The single source of truth for chip / tag pills — a standalone KunChip and the\n// tags inside KunTagInput share it, so a tag looks identical either way. A\n// compact sub-scale (~0.7× the form-control height): vertical padding is tighter\n// than kunControlSizeClasses because a chip is text + tight padding, not a tap\n// target. Pair with `gap-1` + `rounded-full`.\nexport const kunChipSizeClasses: Record<KunUISize, string> = {\n xs: 'px-2 py-0.5 text-xs',\n sm: 'px-2 py-1 text-xs',\n md: 'px-3 py-1 text-sm',\n lg: 'px-4 py-1.5 text-sm',\n xl: 'px-6 py-2 text-base',\n}\n","// AUTO-GENERATED by scripts/gen-motion.mjs from\n// packages/ui-tokens/scripts/motion-physics.mjs — do not edit.\n\n/**\n * The ballistic model behind `KunShatter`, as data — outward impulse, air\n * drag (`1 − (1−t)^dragExponent`), gravity as a t² acceleration — sampled\n * into `keyframeSteps` linear keyframes per shard. The same manifest\n * generates `KunShatterPhysics` in the kun_ui_tokens pub package, so the\n * web and Flutter renditions of the motion cannot drift. Tune the feel in\n * the manifest, never inline in a component.\n */\nexport const KUN_SHATTER_PHYSICS = {\n keyframeSteps: 16,\n reachFactor: 0.5,\n launchMin: 0.32,\n launchSpan: 0.55,\n verticalFactor: 0.8,\n gravityMin: 0.85,\n gravitySpan: 0.5,\n dragExponent: 1.7,\n scaleEndMin: 0.8,\n scaleEndSpan: 0.16,\n fadeOutStartMin: 0.5,\n fadeOutStartSpan: 0.18,\n settleExponent: 2,\n fadeInWindow: 0.4,\n staggerFraction: 0.22,\n staggerCapMs: 120,\n defaultDurationMs: 1100,\n defaultRotationDeg: 140,\n} as const\n\n/**\n * Drag-to-dismiss on a bottom sheet, as data: dismiss on release when the\n * sheet moved down and either the release velocity exceeds `closeVelocity`\n * (px/ms) or the offset reaches `closeDistanceRatio` of the panel height\n * (capped at the viewport); an upward drag of d px moves the panel\n * `rubberBandLimit × (1 − e^(−d / rubberBandLimit))`. The same manifest\n * generates `KunSwipeDismissPhysics` in kun_ui_tokens.\n */\nexport const KUN_SWIPE_DISMISS_PHYSICS = {\n closeDistanceRatio: 0.25,\n closeVelocity: 0.4,\n rubberBandLimit: 32,\n} as const\n","import type { KunMessagePath, KunMessages } from './types'\n\n// Resolve one message and substitute its `{name}` placeholders. Framework-free\n// on purpose: each render layer binds it to however that layer holds the\n// active locale.\n//\n// A `{name}` with no matching param is left as written rather than blanked —\n// a missing interpolation should be visible in the UI, not silently produce a\n// half-sentence.\nexport const translateKunMessage = (\n messages: KunMessages,\n path: KunMessagePath,\n params?: Record<string, string | number>\n): string => {\n const [namespace, key] = path.split('.') as [keyof KunMessages, string]\n const group = messages[namespace] as Record<string, string> | undefined\n const template = group?.[key]\n\n if (typeof template !== 'string') {\n // NODE_ENV, not import.meta.env.DEV: Vite folds the latter to false when it\n // builds a consuming package, which strips the warning from the bundle.\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[KunUI] no locale message at \"${path}\". A custom locale must supply every key in KunMessages.`\n )\n }\n return path\n }\n\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (raw, name: string) =>\n params[name] === undefined ? raw : String(params[name])\n )\n}\n","{\n \"name\": \"简体中文\",\n \"code\": \"zh-CN\",\n \"messages\": {\n \"alert\": {\n \"title\": \"确认\",\n \"confirm\": \"确定\",\n \"cancel\": \"取消\"\n },\n \"autocomplete\": {\n \"clear\": \"清除\",\n \"loading\": \"加载中…\",\n \"noResult\": \"无匹配项\"\n },\n \"avatar\": {\n \"unknownUser\": \"未知用户\"\n },\n \"avatarGroup\": {\n \"label\": \"{count} 位用户\"\n },\n \"banner\": {\n \"label\": \"公告\",\n \"close\": \"关闭公告\"\n },\n \"carousel\": {\n \"label\": \"轮播\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"nav\": \"轮播导航\",\n \"goto\": \"跳到第 {index} 张\"\n },\n \"chip\": {\n \"remove\": \"移除\"\n },\n \"commandPalette\": {\n \"placeholder\": \"搜索…\",\n \"empty\": \"输入关键字搜索\",\n \"noResult\": \"无结果\",\n \"loading\": \"加载中…\",\n \"close\": \"关闭\",\n \"hintSelect\": \"选择\",\n \"hintOpen\": \"打开\",\n \"hintClose\": \"关闭\",\n \"resultCount\": \"{count} 条结果\"\n },\n \"copy\": {\n \"copied\": \"已复制\",\n \"success\": \"{text} 复制成功\",\n \"failure\": \"{text} 复制失败! 请更换更现代的浏览器!\"\n },\n \"datePicker\": {\n \"placeholderDay\": \"请选择日期\",\n \"placeholderMonth\": \"请选择月份\",\n \"placeholderYear\": \"请选择年份\",\n \"clear\": \"清空\",\n \"today\": \"今天\",\n \"close\": \"关闭\",\n \"prevYear\": \"上一年\",\n \"nextYear\": \"下一年\",\n \"prevPage\": \"上一{unit}\",\n \"nextPage\": \"下一{unit}\",\n \"zoomOut\": \"{label} — 返回上一级\",\n \"unitMonth\": \"月\",\n \"unitYear\": \"年\",\n \"unitDecade\": \"个十年\",\n \"monthCell\": \"{year}年{month}\"\n },\n \"drawer\": {\n \"close\": \"关闭抽屉\"\n },\n \"fileInput\": {\n \"trigger\": \"选择文件\",\n \"selected\": \"已选 {count} 个文件\"\n },\n \"filePicker\": {\n \"tooLarge\": \"{name} 超过大小限制 ({size})\"\n },\n \"input\": {\n \"clear\": \"清除\",\n \"reveal\": \"显示密码\",\n \"hide\": \"隐藏密码\"\n },\n \"lightbox\": {\n \"label\": \"图片查看器\",\n \"close\": \"关闭\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"goto\": \"跳转到第 {index} 张\",\n \"zoomIn\": \"放大\",\n \"zoomOut\": \"缩小\",\n \"rotateLeft\": \"向左旋转 90°\",\n \"rotateRight\": \"向右旋转 90°\",\n \"reset\": \"重置缩放/旋转/位置\",\n \"download\": \"下载\"\n },\n \"lightboxGallery\": {\n \"view\": \"查看大图\"\n },\n \"loading\": {\n \"description\": \"正在摸鱼中...咕咕咕\"\n },\n \"loli\": {\n \"close\": \"关闭\"\n },\n \"message\": {\n \"close\": \"关闭\"\n },\n \"modal\": {\n \"close\": \"关闭\"\n },\n \"null\": {\n \"description\": \"莲说这里什么都没有\"\n },\n \"numberInput\": {\n \"decrement\": \"减少\",\n \"increment\": \"增加\"\n },\n \"pagination\": {\n \"nav\": \"分页导航\",\n \"prev\": \"上一页\",\n \"next\": \"下一页\",\n \"page\": \"第 {page} 页\",\n \"hintBefore\": \"您可以使用\",\n \"hintAfter\": \"来进行快速翻页\",\n \"jumpLabel\": \"跳转到页数\",\n \"jump\": \"跳转\"\n },\n \"pinInput\": {\n \"label\": \"验证码\",\n \"digit\": \"{label} 第 {index} 位\"\n },\n \"reaction\": {\n \"label\": \"点赞\"\n },\n \"select\": {\n \"searchPlaceholder\": \"搜索…\",\n \"noResult\": \"无匹配项\",\n \"loading\": \"加载中…\",\n \"clear\": \"清除\",\n \"removeOption\": \"移除 {label}\"\n },\n \"spoiler\": {\n \"copyCode\": \"复制代码\",\n \"reveal\": \"剧透内容,点击或按回车显示\"\n },\n \"tagInput\": {\n \"tag\": \"标签 {tag}\",\n \"removeTag\": \"移除标签 {tag}\"\n },\n \"textSelection\": {\n \"copy\": \"复制\",\n \"cut\": \"剪切\",\n \"paste\": \"粘贴\",\n \"selectAll\": \"全选\",\n \"share\": \"分享\",\n \"lookUp\": \"查询\",\n \"searchWeb\": \"搜索\"\n },\n \"upload\": {\n \"imageAlt\": \"上传图片\",\n \"cropTitle\": \"裁剪图片\",\n \"cancel\": \"取消\",\n \"confirm\": \"确定\"\n }\n }\n}\n","import raw from './zh-CN.json'\nimport type { KunMessageCatalog } from './types'\n\n// KunUI's built-in default. The strings are the ones the components used to\n// hold inline, reproduced verbatim, so adopting the locale system changed no\n// rendered output.\n//\n// The catalog is JSON rather than a TypeScript literal because one file feeds\n// both the web bundle and the generated kun_ui_messages pub package, and a\n// Node generator can read JSON without evaluating TypeScript. The annotation\n// below is what type-checks it: a key missing from KunMessages fails the build.\nexport const KUN_CATALOG_ZH_CN: KunMessageCatalog = raw\n","// Generate a random integer within an inclusive [lower, upper] range.\nexport const randomNum = (lowerValue: number, upperValue: number): number =>\n Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue)\n","// Decode a possibly percent-encoded string, returning the original when it\n// is not encoded (or when decoding throws on malformed input).\nexport const decodeIfEncoded = (text: string): string => {\n try {\n const decoded = decodeURIComponent(text)\n return decoded !== text ? decoded : text\n } catch {\n return text\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// The terminal avatar fallback, inlined as a base64 webp data URI (128x128,\n// 5318 B) so it needs ZERO consumer setup and makes NO network request — the\n// same no-fetch policy as the bundled icons and KunNull's mascot.\n//\n// This is what renders when the host has configured no avatar pool AND when a\n// pool URL itself fails to load. It is a data URI on purpose: the incident it\n// exists for is a CDN path that 404'd for every avatar-less account across\n// six sites at once, so the LAST fallback in the chain must not be reachable\n// over a network at all.\n//\n// Source: the first official KUN Galgame sticker (image hash d52ac5fb…), the\n// site's de-facto mascot.\n/* eslint-disable */\n/* prettier-ignore */\nexport const KUN_AVATAR_FALLBACK =\n 'data:image/webp;base64,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'\n","import { KUN_AVATAR_FALLBACK } from './avatarFallbackImage'\n\n// The predecessor of this file hardcoded `https://sticker.kungal.com` plus a\n// `/stickers/KUNgal{pack}/{n}.webp` path and a pack/per-pack count. That path\n// addressed a POSITION IN A MUTABLE COLLECTION on a site KunUI does not own,\n// so when that site stopped serving static files every avatar-less account\n// across six consumers 404'd at once. A URL that names another service does\n// not belong in a component library: the host supplies the pool\n// (`useKunUIConfig().avatarFallbackPool`), KunUI only chooses from it.\n\nconst hash = (value: string): number => {\n let h = 0\n for (let i = 0; i < value.length; i++) {\n h = (Math.imul(h, 31) + value.charCodeAt(i)) >>> 0\n }\n return h\n}\n\n/**\n * Deterministically pick one image from an avatar fallback pool.\n *\n * The same `seed` always yields the same entry on server and client, so there\n * is no hydration mismatch and no framework state is needed.\n *\n * `pool` is treated as a FIXED-LENGTH array: the index is\n * `hash(seed) % pool.length`, so adding or removing an entry re-assigns every\n * seed, while replacing one entry in place moves only the seeds that land on\n * it. Pool providers should edit slots rather than resize.\n *\n * An empty pool returns the bundled data URI, which cannot fail to load.\n */\nexport const pickAvatarFallback = (seed = '', pool: readonly string[] = []): string =>\n pool.length > 0 ? (pool[hash(seed) % pool.length] ?? KUN_AVATAR_FALLBACK) : KUN_AVATAR_FALLBACK\n\n/**\n * @deprecated Renamed to `pickAvatarFallback`, which takes the pool the host\n * configured. This alias no longer returns a sticker URL — it returns the\n * bundled fallback for any input, because the host it used to point at stopped\n * serving those files. Pass a pool, or read the resolved image off KunAvatar.\n */\nexport const getRandomSticker = (id = ''): string => pickAvatarFallback(id)\n","// AUTO-GENERATED by scripts/gen-icons.mjs — do not edit by hand.\n// Regenerate: pnpm --filter @kungal/ui-core gen:icons\nimport type { KunIconData } from './icons'\n\n// SVG data for the icons KunUI components render, bundled inline so the\n// library never fetches an icon at runtime. Bodies use currentColor.\nexport const KUN_BUNDLED_ICONS: Record<string, KunIconData> = {\n \"lucide:x\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"},\n \"lucide:check\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M20 6L9 17l-5-5\\\"/>\"},\n \"lucide:info\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4m0-4h.01\\\"/></g>\"},\n \"lucide:circle-check\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12l2 2l4-4\\\"/></g>\"},\n \"lucide:circle-x\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9l-6 6m0-6l6 6\\\"/></g>\"},\n \"lucide:triangle-alert\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01\\\"/>\"},\n \"lucide:chevron-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m9 18l6-6l-6-6\\\"/>\"},\n \"lucide:chevron-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m15 18l-6-6l6-6\\\"/>\"},\n \"lucide:chevron-down\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"},\n \"lucide:chevrons-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 17l5-5l-5-5m7 10l5-5l-5-5\\\"/>\"},\n \"lucide:chevrons-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m11 17l-5-5l5-5m7 10l-5-5l5-5\\\"/>\"},\n \"lucide:arrow-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7l7 7l-7 7\\\"/>\"},\n \"lucide:arrow-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m12 19l-7-7l7-7m7 7H5\\\"/>\"},\n \"lucide:plus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"},\n \"lucide:minus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"},\n \"lucide:upload\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/>\"},\n \"lucide:zoom-in\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"},\n \"lucide:zoom-out\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"},\n \"lucide:rotate-cw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"},\n \"lucide:rotate-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/></g>\"},\n \"lucide:refresh-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\\\"/><path d=\\\"M16 16h5v5\\\"/></g>\"},\n \"lucide:external-link\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\"},\n \"lucide:download\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10l5 5l5-5\\\"/></g>\"},\n \"lucide:copy\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"},\n \"lucide:calendar\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M8 2v4m8-4v4\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M3 10h18\\\"/></g>\"},\n \"lucide:lollipop\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.3-4.3M11 11a2 2 0 0 0 4 0a4 4 0 0 0-8 0a6 6 0 0 0 12 0\\\"/></g>\"},\n \"lucide:eye\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"},\n \"lucide:eye-off\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20\\\"/></g>\"},\n \"lucide:search\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m21 21l-4.34-4.34\\\"/><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/></g>\"},\n \"lucide:filter\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\"},\n \"svg-spinners:90-ring-with-bg\": {\"body\":\"<path fill=\\\"currentColor\\\" d=\\\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\\\" opacity=\\\".25\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\\\"><animateTransform attributeName=\\\"transform\\\" dur=\\\"0.75s\\\" repeatCount=\\\"indefinite\\\" type=\\\"rotate\\\" values=\\\"0 12 12;360 12 12\\\"/></path>\"},\n}\n","import { KUN_BUNDLED_ICONS } from './icons-data'\n\n// Iconify-compatible icon shape: `body` is the inner SVG markup (using\n// `currentColor`), rendered into a `0 0 width height` viewBox (default 24).\nexport interface KunIconData {\n body: string\n width?: number\n height?: number\n}\n\n// The registry is SEEDED with KunUI's bundled internal icons (referenced via\n// the data import, so it is never tree-shaken away — no side-effect needed).\n// Consumers add their own icons with registerKunIcon(s). KunIcon renders from\n// this registry and NEVER fetches from a network/API.\nconst registry = new Map<string, KunIconData>(Object.entries(KUN_BUNDLED_ICONS))\n\nexport const registerKunIcon = (name: string, data: KunIconData): void => {\n registry.set(name, data)\n}\n\n// Bulk register — pass a Record<name, data>, e.g. icons extracted from\n// `@iconify-json/*` at build time, or your own custom SVGs.\nexport const registerKunIcons = (\n icons: Record<string, KunIconData>\n): void => {\n for (const [name, data] of Object.entries(icons)) registry.set(name, data)\n}\n\nexport const getKunIcon = (name: string): KunIconData | undefined =>\n registry.get(name)\n\nexport const hasKunIcon = (name: string): boolean => registry.has(name)\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ClassValue } from 'clsx';
|
|
2
2
|
export { ClassValue } from 'clsx';
|
|
3
|
-
import { K as KunMessages, a as KunMessagePath, b as KunMessageCatalog } from './types-
|
|
4
|
-
export { c as KunTranslate } from './types-
|
|
3
|
+
import { K as KunMessages, a as KunMessagePath, b as KunMessageCatalog } from './types-DWC4cjoO.cjs';
|
|
4
|
+
export { c as KunTranslate } from './types-DWC4cjoO.cjs';
|
|
5
5
|
|
|
6
6
|
type KunUIVariant = 'solid' | 'bordered' | 'light' | 'flat' | 'shadow';
|
|
7
7
|
type KunUIColor = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ClassValue } from 'clsx';
|
|
2
2
|
export { ClassValue } from 'clsx';
|
|
3
|
-
import { K as KunMessages, a as KunMessagePath, b as KunMessageCatalog } from './types-
|
|
4
|
-
export { c as KunTranslate } from './types-
|
|
3
|
+
import { K as KunMessages, a as KunMessagePath, b as KunMessageCatalog } from './types-DWC4cjoO.js';
|
|
4
|
+
export { c as KunTranslate } from './types-DWC4cjoO.js';
|
|
5
5
|
|
|
6
6
|
type KunUIVariant = 'solid' | 'bordered' | 'light' | 'flat' | 'shadow';
|
|
7
7
|
type KunUIColor = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
|
package/dist/index.js
CHANGED
|
@@ -425,6 +425,15 @@ var zh_CN_default = {
|
|
|
425
425
|
tag: "标签 {tag}",
|
|
426
426
|
removeTag: "移除标签 {tag}"
|
|
427
427
|
},
|
|
428
|
+
textSelection: {
|
|
429
|
+
copy: "复制",
|
|
430
|
+
cut: "剪切",
|
|
431
|
+
paste: "粘贴",
|
|
432
|
+
selectAll: "全选",
|
|
433
|
+
share: "分享",
|
|
434
|
+
lookUp: "查询",
|
|
435
|
+
searchWeb: "搜索"
|
|
436
|
+
},
|
|
428
437
|
upload: {
|
|
429
438
|
imageAlt: "上传图片",
|
|
430
439
|
cropTitle: "裁剪图片",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/twScales.generated.ts","../src/cn.ts","../src/variants.ts","../src/rounded.ts","../src/controlSize.ts","../src/motionPhysics.generated.ts","../src/locale/translate.ts","../src/locale/zh-CN.json","../src/locale/zh-CN.ts","../src/random.ts","../src/decodeIfEncoded.ts","../src/avatarFallbackImage.ts","../src/avatarFallback.ts","../src/icons-data.ts","../src/icons.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// AUTO-GENERATED by scripts/gen-tw-scales.mjs from @kungal/ui-tokens — do not edit.\n//\n// The Tailwind scale names KunUI mints itself. `cn()` feeds them to\n// tailwind-merge, which otherwise cannot parse them and silently keeps two\n// conflicting classes.\nexport const KUN_TW_SCALES = {\n radius: ['kun-full', 'kun-lg', 'kun-md', 'kun-none', 'kun-sm'],\n shadow: ['kun-lg', 'kun-md', 'kun-sm'],\n ease: ['kun-emphasized', 'kun-in', 'kun-out', 'kun-standard'],\n animate: ['bounce', 'bounceInDown', 'bounceInRight', 'fadeInUp', 'fadeOutDown', 'shake', 'swing', 'tada'],\n z: ['kun-alert', 'kun-message', 'kun-modal', 'kun-popover', 'kun-sticky'],\n duration: ['kun-base', 'kun-exit', 'kun-fast', 'kun-slow'],\n} as const\n","import { clsx, type ClassValue } from 'clsx'\nimport { extendTailwindMerge } from 'tailwind-merge'\nimport { KUN_TW_SCALES } from './twScales.generated'\n\n// tailwind-merge only ships Tailwind's OWN scales, so every name KunUI mints in\n// `@theme` / `@utility` was invisible to it and got passed through untouched:\n// `cn('rounded-kun-md', 'rounded-full')` returned both classes and left CSS\n// source order to pick the winner. Measured, a consumer passing\n// `classNames.trigger: 'rounded-full'` to KunSelect still rendered a 12px\n// radius — the documented \"your class wins\" contract was false for the whole\n// `rounded-kun-*`, `shadow-kun-*`, `z-kun-*`, `ease-kun-*` and `duration-kun-*`\n// surface.\n//\n// `shadow-kun-*` failed worse than the rest. The shadow COLOUR group's\n// validator accepts any non-arbitrary word, so `shadow-kun-md` was classified\n// as a colour: it resolved against `shadow-primary/20` and the box-shadow was\n// the class that got dropped.\n//\n// The scale names are generated from tokens.css (`pnpm gen`) because a drifted\n// hand-written list fails silently — nothing errors, the classes just stop\n// merging again.\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n radius: [...KUN_TW_SCALES.radius],\n shadow: [...KUN_TW_SCALES.shadow],\n ease: [...KUN_TW_SCALES.ease],\n animate: [...KUN_TW_SCALES.animate],\n },\n // z-index and transition-duration are not Tailwind v4 theme namespaces —\n // these are `@utility` blocks, so they extend the class group directly.\n classGroups: {\n z: [{ z: [...KUN_TW_SCALES.z] }],\n duration: [{ duration: [...KUN_TW_SCALES.duration] }],\n },\n },\n})\n\n// Merge Tailwind class names with conflict resolution. Framework-agnostic:\n// the Vue and React layers both import this so \"last class wins\" semantics\n// are identical everywhere.\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs))\n\nexport type { ClassValue }\n","import type { KunUIVariant, KunUIColor } from './types'\n\n// Single source of truth for the variant × color → Tailwind class table.\n// Button / Badge / Chip / Tab / Info / Progress etc. (in every framework\n// layer) consume this so the 7 × 7 matrix lives in exactly one place.\n//\n// All keys MUST be static string literals so the Tailwind JIT picks them\n// up — never construct class names with template strings at runtime.\n// Every entry carries an explicit `border` WIDTH so the outline variant\n// `bordered` actually renders — `border-{color}` alone sets only the\n// color and paints nothing in Tailwind v4. Filled / light variants use a\n// transparent border of the same width so switching variants never shifts the\n// box by a pixel.\nconst TABLE: Record<KunUIVariant, Record<KunUIColor, string>> = {\n // Filled buttons keep white text in BOTH modes, so the fill must stay dark\n // enough for contrast. The dark color scale is inverted (`-500`/`-600` become\n // LIGHT in dark mode), so a plain `bg-{color}` renders pale — worst on the\n // light hues (info ≈ L88%, default/secondary ≈ L65–72%). Each entry pins a\n // `dark:bg-{color}-{n}` that lands every color at a consistent ~L44–55% so the\n // whole row reads as one saturated tier with legible white text.\n // Foreground: the dark hues take white; the light hues (success / warning /\n // info) are light in BOTH modes, so white text fails WCAG on them (~1.5–3.4:1)\n // — they take dark text (≈6–18:1). See kunSolidFgClasses.\n solid: {\n default: 'border border-transparent bg-default text-default-foreground',\n primary: 'border border-transparent bg-primary text-primary-foreground',\n secondary: 'border border-transparent bg-secondary text-secondary-foreground',\n success: 'border border-transparent bg-success text-success-foreground',\n warning: 'border border-transparent bg-warning text-warning-foreground',\n danger: 'border border-transparent bg-danger text-danger-foreground',\n info: 'border border-transparent bg-info text-info-foreground',\n },\n bordered: {\n default: 'border border-default bg-transparent',\n primary: 'border border-primary bg-transparent text-primary',\n secondary: 'border border-secondary bg-transparent text-secondary',\n success: 'border border-success bg-transparent text-success',\n warning: 'border border-warning bg-transparent text-warning',\n danger: 'border border-danger bg-transparent text-danger',\n info: 'border border-info bg-transparent text-info',\n },\n light: {\n default: 'border border-transparent bg-transparent hover:bg-default/20',\n primary: 'border border-transparent bg-transparent text-primary hover:bg-primary/20',\n secondary: 'border border-transparent bg-transparent text-secondary hover:bg-secondary/20',\n success: 'border border-transparent bg-transparent text-success hover:bg-success/20',\n warning: 'border border-transparent bg-transparent text-warning hover:bg-warning/20',\n danger: 'border border-transparent bg-transparent text-danger hover:bg-danger/20',\n info: 'border border-transparent bg-transparent text-info hover:bg-info/20',\n },\n flat: {\n default: 'border border-transparent bg-default/20 text-default-700',\n primary: 'border border-transparent bg-primary/20 text-primary-600',\n secondary: 'border border-transparent bg-secondary/20 text-secondary-600',\n success: 'border border-transparent bg-success/20 text-success-700 dark:text-success',\n warning: 'border border-transparent bg-warning/20 text-warning-700 dark:text-warning',\n danger: 'border border-transparent bg-danger/20 text-danger-600 dark:text-danger-500',\n info: 'border border-transparent bg-info/20 text-info-700 dark:text-info-500',\n },\n // Same fill logic as `solid` (see note above) plus a COLORED glow. The glow\n // needs both a size (`shadow-lg` — the geometry) AND a tint (`shadow-{color}/40`\n // — sets --tw-shadow-color): a color utility alone leaves --tw-shadow empty, so\n // the button rendered with NO shadow at all. `overflow-hidden` on the button\n // doesn't clip its own outset box-shadow, so the glow shows.\n shadow: {\n default: 'border border-transparent shadow-lg shadow-default/40 bg-default text-default-foreground',\n primary: 'border border-transparent shadow-lg shadow-primary/40 bg-primary text-primary-foreground',\n secondary: 'border border-transparent shadow-lg shadow-secondary/40 bg-secondary text-secondary-foreground',\n success: 'border border-transparent shadow-lg shadow-success/40 bg-success text-success-foreground',\n warning: 'border border-transparent shadow-lg shadow-warning/40 bg-warning text-warning-foreground',\n danger: 'border border-transparent shadow-lg shadow-danger/40 bg-danger text-danger-foreground',\n info: 'border border-transparent shadow-lg shadow-info/40 bg-info text-info-foreground',\n },\n}\n\nexport const kunVariantClasses = (\n variant: KunUIVariant,\n color: KunUIColor\n): string => TABLE[variant][color]\n\n// Static maps for narrower use cases (just the fill color, just the text\n// color, etc.) — same JIT-safety requirement: keys must be literals.\n\nexport const kunBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n// ─── Solid fills (a colored fill that carries text / icons) ──────────────────\n// Each semantic color ships a paired on-color token — `--color-{c}` (the vivid\n// fill) + `--color-{c}-foreground` (the text that stays legible on it) — both\n// generated in OKLCH and WCAG-AA-verified in BOTH light and dark by\n// scripts/gen-tokens.mjs (the build fails if any pair regresses). So a solid is\n// just `bg-{c} text-{c}-foreground`: no per-color white/black guess, no `dark:`\n// pin (the tokens are mode-correct by construction). Medium hues land white,\n// the bright hues (magenta/green/cyan/amber) land a refined dark tint.\n// Reach for these — NOT plain `kunBgClasses` — whenever a colored fill carries a\n// foreground. `kunBgClasses` stays for tints / bars / dots that carry no text.\n\n/** Just the fill. Pair with {@link kunSolidFgClasses} when the fill and its text\n * live on different elements. */\nexport const kunSolidBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n/** The generated on-color that stays legible on the matching solid fill in both\n * modes (white on medium hues, a dark hue-tint on the bright ones). */\nexport const kunSolidFgClasses: Record<KunUIColor, string> = {\n default: 'text-default-foreground',\n primary: 'text-primary-foreground',\n secondary: 'text-secondary-foreground',\n success: 'text-success-foreground',\n warning: 'text-warning-foreground',\n danger: 'text-danger-foreground',\n info: 'text-info-foreground',\n}\n\n/** Fill + matching foreground — the common case (text sits on the fill). */\nexport const kunSolidClasses: Record<KunUIColor, string> = {\n default: 'bg-default text-default-foreground',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-danger text-danger-foreground',\n info: 'bg-info text-info-foreground',\n}\n\nexport const kunTextClasses: Record<KunUIColor, string> = {\n default: 'text-foreground',\n primary: 'text-primary',\n secondary: 'text-secondary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n info: 'text-info',\n}\n\nexport const kunBorderClasses: Record<KunUIColor, string> = {\n default: 'border-default',\n primary: 'border-primary',\n secondary: 'border-secondary',\n success: 'border-success',\n warning: 'border-warning',\n danger: 'border-danger',\n info: 'border-info',\n}\n\n/**\n * @deprecated Use {@link kunFocusRingClasses} (or {@link kunFocusRingWithinClasses}\n * for composite widgets). This mixed `:focus` + `:focus-within` so a mouse click\n * lit the ring, and used a different opacity from the rest of the library.\n */\nexport const kunRingClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-default/40 focus:ring-default/40',\n primary: 'focus-within:ring-primary/40 focus:ring-primary/40',\n secondary: 'focus-within:ring-secondary/40 focus:ring-secondary/40',\n success: 'focus-within:ring-success/40 focus:ring-success/40',\n warning: 'focus-within:ring-warning/40 focus:ring-warning/40',\n danger: 'focus-within:ring-danger/40 focus:ring-danger/40',\n info: 'focus-within:ring-info/40 focus:ring-info/40',\n}\n\n/**\n * Unified focus ring — ONE recipe for every directly-focusable control (inputs,\n * textarea, select trigger, buttons, checkbox/radio, links, tabs, menu items…).\n * Keyboard focus only (`:focus-visible`, so a mouse click on a button shows no\n * ring; text fields still show it on click via the browser's focus-visible\n * heuristic). A flush 2px ring in the control's semantic color at 50% — replaces\n * the old scatter of `:focus`/`:focus-within` × `ring-1|2|4` × `/25|/40|/50|full`.\n * Pair with `border-kun` at rest; on an invalid control use the `danger` entry.\n */\nexport const kunFocusRingClasses: Record<KunUIColor, string> = {\n default: 'outline-none focus-visible:ring-2 focus-visible:ring-default/50',\n primary: 'outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n secondary: 'outline-none focus-visible:ring-2 focus-visible:ring-secondary/50',\n success: 'outline-none focus-visible:ring-2 focus-visible:ring-success/50',\n warning: 'outline-none focus-visible:ring-2 focus-visible:ring-warning/50',\n danger: 'outline-none focus-visible:ring-2 focus-visible:ring-danger/50',\n info: 'outline-none focus-visible:ring-2 focus-visible:ring-info/50',\n}\n\n/**\n * Composite-widget variant of {@link kunFocusRingClasses}: the focusable element\n * is an inner `<input>` but the ring should sit on the WRAPPER. Put this on the\n * wrapper and give the inner input `outline-none` (and no ring of its own) so\n * there's exactly one indicator. Used by KunNumberInput / KunTagInput.\n *\n * Uses `focus-within` (not `has-[:focus-visible]`): for a text-field wrapper the\n * two are equivalent — a text input matches `:focus-visible` on click too — and\n * `focus-within` is a native variant that reliably compiles, whereas the\n * `has-[:focus-visible]` arbitrary variant isn't extracted from this TS source.\n */\nexport const kunFocusRingWithinClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-2 focus-within:ring-default/50',\n primary: 'focus-within:ring-2 focus-within:ring-primary/50',\n secondary: 'focus-within:ring-2 focus-within:ring-secondary/50',\n success: 'focus-within:ring-2 focus-within:ring-success/50',\n warning: 'focus-within:ring-2 focus-within:ring-warning/50',\n danger: 'focus-within:ring-2 focus-within:ring-danger/50',\n info: 'focus-within:ring-2 focus-within:ring-info/50',\n}\n\n// Very light tint of the semantic color — \"selected card\" backgrounds in\n// RadioGroup and any \"barely there\" colored fill. Keys are static literals.\nexport const kunSoftBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default/5',\n primary: 'bg-primary/5',\n secondary: 'bg-secondary/5',\n success: 'bg-success/5',\n warning: 'bg-warning/5',\n danger: 'bg-danger/5',\n info: 'bg-info/5',\n}\n","import type { KunUIRounded } from './types'\n\n// Static class map for the 5-bucket Kun radius system. All keys are literal\n// strings so the Tailwind JIT picks them up — the `rounded-kun-*` utilities\n// come from the --radius-kun-* tokens shipped by @kungal/ui-tokens.\nexport const kunRoundedClasses: Record<KunUIRounded, string> = {\n none: 'rounded-kun-none',\n sm: 'rounded-kun-sm',\n md: 'rounded-kun-md',\n lg: 'rounded-kun-lg',\n full: 'rounded-kun-full',\n}\n\n// Global default radius bucket (matches the source layer's behaviour where\n// the un-configured fallback is 'md'). A render layer's config provider may\n// override this per subtree.\nexport const KUN_DEFAULT_ROUNDED: KunUIRounded = 'md'\n\n// Pure precedence resolver for a component's effective radius:\n// prop > component built-in fallback > app/provider default\n//\n// This is the framework-agnostic core of the original Vue\n// `useResolvedRounded` composable. Each render layer wraps it in its own\n// reactivity primitive:\n// Vue: computed(() => resolveRounded(props.rounded, fallback, cfg.rounded))\n// React: useMemo(() => resolveRounded(rounded, fallback, cfg.rounded), [...])\nexport const resolveRounded = (\n prop: KunUIRounded | undefined,\n fallback: KunUIRounded | undefined,\n configDefault: KunUIRounded = KUN_DEFAULT_ROUNDED\n): KunUIRounded => prop ?? fallback ?? configDefault\n\n// A floating panel has no correct `full`. `border-radius: 9999px` on an n-row\n// listbox is not a pill — CSS Backgrounds 3 §5.5 scales every corner by\n// min(side / sum of its radii), so the used radius is half the short side. A\n// measured 80x116 KunSelect popup rendered 40px corners and pushed its option\n// labels inward; the docs' own FilterBar example prescribed `rounded=\"full\"`\n// and shipped that. `full` means \"pill\", and a pill is only defined for a\n// single-line control. So a trigger + panel component keeps `full` on the\n// trigger and resolves the panel to `lg`, the bucket --radius-kun-lg documents\n// as \"containers / floating panels\". Every other bucket passes through.\nexport const kunPanelRoundedClass = (rounded: KunUIRounded): string =>\n kunRoundedClasses[rounded === 'full' ? 'lg' : rounded]\n","import type { KunUISize } from './types'\n\n// The single source of truth for the size of every text-like form control —\n// Button, Input, Select, DatePicker, Textarea, TagInput. They reference this so\n// they share one scale and line up in a row.\n//\n// Padding-driven (not fixed-height): height = font line-height + 2·py + border.\n// `md` is the anchor (~38px, the modern default). px:py is a clean 2:1 (xs/sm a\n// touch looser); horizontal padding grows faster than vertical from md→xl, so a\n// bigger control gets wider, not flatter. Approx heights with a 1px border and\n// text line-heights 16 / 20 / 20 / 24 / 28:\n// xs ≈ 26 · sm ≈ 34 · md ≈ 38 · lg ≈ 46 · xl ≈ 54\nexport const kunControlSizeClasses: Record<KunUISize, string> = {\n xs: 'text-xs px-2.5 py-1',\n sm: 'text-sm px-3.5 py-1.5',\n md: 'text-sm px-4 py-2',\n lg: 'text-base px-5 py-2.5',\n xl: 'text-lg px-6 py-3',\n}\n\n// Icon-only buttons: a fixed SQUARE whose side equals the text-button height at\n// the same size, so an icon button lines up with text buttons in a row.\n//\n// Why this exists: kunControlSizeClasses is padding-driven (height = line-height\n// + 2·py + border). A text label contributes a full line-box (≈1.5em), but a lone\n// 1em icon does not — with the same padding the icon button would come out\n// shorter and break the row. Mainstream libraries dodge this by giving buttons a\n// fixed height and making the icon button a square of that height (shadcn\n// `size-9`, HeroUI/Chakra/Ant `isIconOnly`/`.ant-btn-icon-only`). We do the same,\n// ONLY for icon-only, keeping the icon at its natural 1em centered in the box.\n//\n// Sides MUST equal the kunControlSizeClasses heights (incl. the 1px border every\n// variant carries): xs 26 · sm 34 · md 38 · lg 46 · xl 54. (size-* is border-box,\n// so the value already accounts for the icon button's own 1px border.)\nexport const kunControlSquareClasses: Record<KunUISize, string> = {\n xs: 'size-[26px] p-0',\n sm: 'size-[34px] p-0',\n md: 'size-[38px] p-0',\n lg: 'size-[46px] p-0',\n xl: 'size-[54px] p-0',\n}\n\nexport interface KunSelectionSize {\n box: string // the square: checkbox box / radio indicator outer ring\n dot: string // radio's inner filled dot (unused by checkbox)\n check: string // checkbox's check glyph (unused by radio)\n text: string // the adjacent label\n gap: string // box ↔ label spacing\n}\n\n// The shared scale for selection controls — KunCheckBox and KunRadioGroup use\n// identical box sizes (every major library does this), so a checkbox and a radio\n// of the same size match. The box is ≈ 0.5× the text-control height and ≈ 1.2–1.4×\n// the label font, so it sits optically level with the label beside it.\n// Box px by size: 12 / 14 / 16 / 20 / 24.\nexport const kunSelectionSizeClasses: Record<KunUISize, KunSelectionSize> = {\n xs: { box: 'size-3', dot: 'size-1.5', check: 'size-2', text: 'text-xs', gap: 'gap-1.5' },\n sm: { box: 'size-3.5', dot: 'size-1.5', check: 'size-2.5', text: 'text-sm', gap: 'gap-2' },\n md: { box: 'size-4', dot: 'size-2', check: 'size-3', text: 'text-sm', gap: 'gap-2' },\n lg: { box: 'size-5', dot: 'size-2.5', check: 'size-3.5', text: 'text-base', gap: 'gap-2.5' },\n xl: { box: 'size-6', dot: 'size-3', check: 'size-4', text: 'text-lg', gap: 'gap-3' },\n}\n\n// The single source of truth for chip / tag pills — a standalone KunChip and the\n// tags inside KunTagInput share it, so a tag looks identical either way. A\n// compact sub-scale (~0.7× the form-control height): vertical padding is tighter\n// than kunControlSizeClasses because a chip is text + tight padding, not a tap\n// target. Pair with `gap-1` + `rounded-full`.\nexport const kunChipSizeClasses: Record<KunUISize, string> = {\n xs: 'px-2 py-0.5 text-xs',\n sm: 'px-2 py-1 text-xs',\n md: 'px-3 py-1 text-sm',\n lg: 'px-4 py-1.5 text-sm',\n xl: 'px-6 py-2 text-base',\n}\n","// AUTO-GENERATED by scripts/gen-motion.mjs from\n// packages/ui-tokens/scripts/motion-physics.mjs — do not edit.\n\n/**\n * The ballistic model behind `KunShatter`, as data — outward impulse, air\n * drag (`1 − (1−t)^dragExponent`), gravity as a t² acceleration — sampled\n * into `keyframeSteps` linear keyframes per shard. The same manifest\n * generates `KunShatterPhysics` in the kun_ui_tokens pub package, so the\n * web and Flutter renditions of the motion cannot drift. Tune the feel in\n * the manifest, never inline in a component.\n */\nexport const KUN_SHATTER_PHYSICS = {\n keyframeSteps: 16,\n reachFactor: 0.5,\n launchMin: 0.32,\n launchSpan: 0.55,\n verticalFactor: 0.8,\n gravityMin: 0.85,\n gravitySpan: 0.5,\n dragExponent: 1.7,\n scaleEndMin: 0.8,\n scaleEndSpan: 0.16,\n fadeOutStartMin: 0.5,\n fadeOutStartSpan: 0.18,\n settleExponent: 2,\n fadeInWindow: 0.4,\n staggerFraction: 0.22,\n staggerCapMs: 120,\n defaultDurationMs: 1100,\n defaultRotationDeg: 140,\n} as const\n\n/**\n * Drag-to-dismiss on a bottom sheet, as data: dismiss on release when the\n * sheet moved down and either the release velocity exceeds `closeVelocity`\n * (px/ms) or the offset reaches `closeDistanceRatio` of the panel height\n * (capped at the viewport); an upward drag of d px moves the panel\n * `rubberBandLimit × (1 − e^(−d / rubberBandLimit))`. The same manifest\n * generates `KunSwipeDismissPhysics` in kun_ui_tokens.\n */\nexport const KUN_SWIPE_DISMISS_PHYSICS = {\n closeDistanceRatio: 0.25,\n closeVelocity: 0.4,\n rubberBandLimit: 32,\n} as const\n","import type { KunMessagePath, KunMessages } from './types'\n\n// Resolve one message and substitute its `{name}` placeholders. Framework-free\n// on purpose: each render layer binds it to however that layer holds the\n// active locale.\n//\n// A `{name}` with no matching param is left as written rather than blanked —\n// a missing interpolation should be visible in the UI, not silently produce a\n// half-sentence.\nexport const translateKunMessage = (\n messages: KunMessages,\n path: KunMessagePath,\n params?: Record<string, string | number>\n): string => {\n const [namespace, key] = path.split('.') as [keyof KunMessages, string]\n const group = messages[namespace] as Record<string, string> | undefined\n const template = group?.[key]\n\n if (typeof template !== 'string') {\n // NODE_ENV, not import.meta.env.DEV: Vite folds the latter to false when it\n // builds a consuming package, which strips the warning from the bundle.\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[KunUI] no locale message at \"${path}\". A custom locale must supply every key in KunMessages.`\n )\n }\n return path\n }\n\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (raw, name: string) =>\n params[name] === undefined ? raw : String(params[name])\n )\n}\n","{\n \"name\": \"简体中文\",\n \"code\": \"zh-CN\",\n \"messages\": {\n \"alert\": {\n \"title\": \"确认\",\n \"confirm\": \"确定\",\n \"cancel\": \"取消\"\n },\n \"autocomplete\": {\n \"clear\": \"清除\",\n \"loading\": \"加载中…\",\n \"noResult\": \"无匹配项\"\n },\n \"avatar\": {\n \"unknownUser\": \"未知用户\"\n },\n \"avatarGroup\": {\n \"label\": \"{count} 位用户\"\n },\n \"banner\": {\n \"label\": \"公告\",\n \"close\": \"关闭公告\"\n },\n \"carousel\": {\n \"label\": \"轮播\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"nav\": \"轮播导航\",\n \"goto\": \"跳到第 {index} 张\"\n },\n \"chip\": {\n \"remove\": \"移除\"\n },\n \"commandPalette\": {\n \"placeholder\": \"搜索…\",\n \"empty\": \"输入关键字搜索\",\n \"noResult\": \"无结果\",\n \"loading\": \"加载中…\",\n \"close\": \"关闭\",\n \"hintSelect\": \"选择\",\n \"hintOpen\": \"打开\",\n \"hintClose\": \"关闭\",\n \"resultCount\": \"{count} 条结果\"\n },\n \"copy\": {\n \"copied\": \"已复制\",\n \"success\": \"{text} 复制成功\",\n \"failure\": \"{text} 复制失败! 请更换更现代的浏览器!\"\n },\n \"datePicker\": {\n \"placeholderDay\": \"请选择日期\",\n \"placeholderMonth\": \"请选择月份\",\n \"placeholderYear\": \"请选择年份\",\n \"clear\": \"清空\",\n \"today\": \"今天\",\n \"close\": \"关闭\",\n \"prevYear\": \"上一年\",\n \"nextYear\": \"下一年\",\n \"prevPage\": \"上一{unit}\",\n \"nextPage\": \"下一{unit}\",\n \"zoomOut\": \"{label} — 返回上一级\",\n \"unitMonth\": \"月\",\n \"unitYear\": \"年\",\n \"unitDecade\": \"个十年\",\n \"monthCell\": \"{year}年{month}\"\n },\n \"drawer\": {\n \"close\": \"关闭抽屉\"\n },\n \"fileInput\": {\n \"trigger\": \"选择文件\",\n \"selected\": \"已选 {count} 个文件\"\n },\n \"filePicker\": {\n \"tooLarge\": \"{name} 超过大小限制 ({size})\"\n },\n \"input\": {\n \"clear\": \"清除\",\n \"reveal\": \"显示密码\",\n \"hide\": \"隐藏密码\"\n },\n \"lightbox\": {\n \"label\": \"图片查看器\",\n \"close\": \"关闭\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"goto\": \"跳转到第 {index} 张\",\n \"zoomIn\": \"放大\",\n \"zoomOut\": \"缩小\",\n \"rotateLeft\": \"向左旋转 90°\",\n \"rotateRight\": \"向右旋转 90°\",\n \"reset\": \"重置缩放/旋转/位置\",\n \"download\": \"下载\"\n },\n \"lightboxGallery\": {\n \"view\": \"查看大图\"\n },\n \"loading\": {\n \"description\": \"正在摸鱼中...咕咕咕\"\n },\n \"loli\": {\n \"close\": \"关闭\"\n },\n \"message\": {\n \"close\": \"关闭\"\n },\n \"modal\": {\n \"close\": \"关闭\"\n },\n \"null\": {\n \"description\": \"莲说这里什么都没有\"\n },\n \"numberInput\": {\n \"decrement\": \"减少\",\n \"increment\": \"增加\"\n },\n \"pagination\": {\n \"nav\": \"分页导航\",\n \"prev\": \"上一页\",\n \"next\": \"下一页\",\n \"page\": \"第 {page} 页\",\n \"hintBefore\": \"您可以使用\",\n \"hintAfter\": \"来进行快速翻页\",\n \"jumpLabel\": \"跳转到页数\",\n \"jump\": \"跳转\"\n },\n \"pinInput\": {\n \"label\": \"验证码\",\n \"digit\": \"{label} 第 {index} 位\"\n },\n \"reaction\": {\n \"label\": \"点赞\"\n },\n \"select\": {\n \"searchPlaceholder\": \"搜索…\",\n \"noResult\": \"无匹配项\",\n \"loading\": \"加载中…\",\n \"clear\": \"清除\",\n \"removeOption\": \"移除 {label}\"\n },\n \"spoiler\": {\n \"copyCode\": \"复制代码\",\n \"reveal\": \"剧透内容,点击或按回车显示\"\n },\n \"tagInput\": {\n \"tag\": \"标签 {tag}\",\n \"removeTag\": \"移除标签 {tag}\"\n },\n \"upload\": {\n \"imageAlt\": \"上传图片\",\n \"cropTitle\": \"裁剪图片\",\n \"cancel\": \"取消\",\n \"confirm\": \"确定\"\n }\n }\n}\n","import raw from './zh-CN.json'\nimport type { KunMessageCatalog } from './types'\n\n// KunUI's built-in default. The strings are the ones the components used to\n// hold inline, reproduced verbatim, so adopting the locale system changed no\n// rendered output.\n//\n// The catalog is JSON rather than a TypeScript literal because one file feeds\n// both the web bundle and the generated kun_ui_messages pub package, and a\n// Node generator can read JSON without evaluating TypeScript. The annotation\n// below is what type-checks it: a key missing from KunMessages fails the build.\nexport const KUN_CATALOG_ZH_CN: KunMessageCatalog = raw\n","// Generate a random integer within an inclusive [lower, upper] range.\nexport const randomNum = (lowerValue: number, upperValue: number): number =>\n Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue)\n","// Decode a possibly percent-encoded string, returning the original when it\n// is not encoded (or when decoding throws on malformed input).\nexport const decodeIfEncoded = (text: string): string => {\n try {\n const decoded = decodeURIComponent(text)\n return decoded !== text ? decoded : text\n } catch {\n return text\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// The terminal avatar fallback, inlined as a base64 webp data URI (128x128,\n// 5318 B) so it needs ZERO consumer setup and makes NO network request — the\n// same no-fetch policy as the bundled icons and KunNull's mascot.\n//\n// This is what renders when the host has configured no avatar pool AND when a\n// pool URL itself fails to load. It is a data URI on purpose: the incident it\n// exists for is a CDN path that 404'd for every avatar-less account across\n// six sites at once, so the LAST fallback in the chain must not be reachable\n// over a network at all.\n//\n// Source: the first official KUN Galgame sticker (image hash d52ac5fb…), the\n// site's de-facto mascot.\n/* eslint-disable */\n/* prettier-ignore */\nexport const KUN_AVATAR_FALLBACK =\n 'data:image/webp;base64,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'\n","import { KUN_AVATAR_FALLBACK } from './avatarFallbackImage'\n\n// The predecessor of this file hardcoded `https://sticker.kungal.com` plus a\n// `/stickers/KUNgal{pack}/{n}.webp` path and a pack/per-pack count. That path\n// addressed a POSITION IN A MUTABLE COLLECTION on a site KunUI does not own,\n// so when that site stopped serving static files every avatar-less account\n// across six consumers 404'd at once. A URL that names another service does\n// not belong in a component library: the host supplies the pool\n// (`useKunUIConfig().avatarFallbackPool`), KunUI only chooses from it.\n\nconst hash = (value: string): number => {\n let h = 0\n for (let i = 0; i < value.length; i++) {\n h = (Math.imul(h, 31) + value.charCodeAt(i)) >>> 0\n }\n return h\n}\n\n/**\n * Deterministically pick one image from an avatar fallback pool.\n *\n * The same `seed` always yields the same entry on server and client, so there\n * is no hydration mismatch and no framework state is needed.\n *\n * `pool` is treated as a FIXED-LENGTH array: the index is\n * `hash(seed) % pool.length`, so adding or removing an entry re-assigns every\n * seed, while replacing one entry in place moves only the seeds that land on\n * it. Pool providers should edit slots rather than resize.\n *\n * An empty pool returns the bundled data URI, which cannot fail to load.\n */\nexport const pickAvatarFallback = (seed = '', pool: readonly string[] = []): string =>\n pool.length > 0 ? (pool[hash(seed) % pool.length] ?? KUN_AVATAR_FALLBACK) : KUN_AVATAR_FALLBACK\n\n/**\n * @deprecated Renamed to `pickAvatarFallback`, which takes the pool the host\n * configured. This alias no longer returns a sticker URL — it returns the\n * bundled fallback for any input, because the host it used to point at stopped\n * serving those files. Pass a pool, or read the resolved image off KunAvatar.\n */\nexport const getRandomSticker = (id = ''): string => pickAvatarFallback(id)\n","// AUTO-GENERATED by scripts/gen-icons.mjs — do not edit by hand.\n// Regenerate: pnpm --filter @kungal/ui-core gen:icons\nimport type { KunIconData } from './icons'\n\n// SVG data for the icons KunUI components render, bundled inline so the\n// library never fetches an icon at runtime. Bodies use currentColor.\nexport const KUN_BUNDLED_ICONS: Record<string, KunIconData> = {\n \"lucide:x\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"},\n \"lucide:check\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M20 6L9 17l-5-5\\\"/>\"},\n \"lucide:info\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4m0-4h.01\\\"/></g>\"},\n \"lucide:circle-check\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12l2 2l4-4\\\"/></g>\"},\n \"lucide:circle-x\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9l-6 6m0-6l6 6\\\"/></g>\"},\n \"lucide:triangle-alert\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01\\\"/>\"},\n \"lucide:chevron-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m9 18l6-6l-6-6\\\"/>\"},\n \"lucide:chevron-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m15 18l-6-6l6-6\\\"/>\"},\n \"lucide:chevron-down\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"},\n \"lucide:chevrons-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 17l5-5l-5-5m7 10l5-5l-5-5\\\"/>\"},\n \"lucide:chevrons-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m11 17l-5-5l5-5m7 10l-5-5l5-5\\\"/>\"},\n \"lucide:arrow-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7l7 7l-7 7\\\"/>\"},\n \"lucide:arrow-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m12 19l-7-7l7-7m7 7H5\\\"/>\"},\n \"lucide:plus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"},\n \"lucide:minus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"},\n \"lucide:upload\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/>\"},\n \"lucide:zoom-in\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"},\n \"lucide:zoom-out\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"},\n \"lucide:rotate-cw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"},\n \"lucide:rotate-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/></g>\"},\n \"lucide:refresh-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\\\"/><path d=\\\"M16 16h5v5\\\"/></g>\"},\n \"lucide:external-link\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\"},\n \"lucide:download\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10l5 5l5-5\\\"/></g>\"},\n \"lucide:copy\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"},\n \"lucide:calendar\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M8 2v4m8-4v4\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M3 10h18\\\"/></g>\"},\n \"lucide:lollipop\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.3-4.3M11 11a2 2 0 0 0 4 0a4 4 0 0 0-8 0a6 6 0 0 0 12 0\\\"/></g>\"},\n \"lucide:eye\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"},\n \"lucide:eye-off\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20\\\"/></g>\"},\n \"lucide:search\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m21 21l-4.34-4.34\\\"/><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/></g>\"},\n \"lucide:filter\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\"},\n \"svg-spinners:90-ring-with-bg\": {\"body\":\"<path fill=\\\"currentColor\\\" d=\\\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\\\" opacity=\\\".25\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\\\"><animateTransform attributeName=\\\"transform\\\" dur=\\\"0.75s\\\" repeatCount=\\\"indefinite\\\" type=\\\"rotate\\\" values=\\\"0 12 12;360 12 12\\\"/></path>\"},\n}\n","import { KUN_BUNDLED_ICONS } from './icons-data'\n\n// Iconify-compatible icon shape: `body` is the inner SVG markup (using\n// `currentColor`), rendered into a `0 0 width height` viewBox (default 24).\nexport interface KunIconData {\n body: string\n width?: number\n height?: number\n}\n\n// The registry is SEEDED with KunUI's bundled internal icons (referenced via\n// the data import, so it is never tree-shaken away — no side-effect needed).\n// Consumers add their own icons with registerKunIcon(s). KunIcon renders from\n// this registry and NEVER fetches from a network/API.\nconst registry = new Map<string, KunIconData>(Object.entries(KUN_BUNDLED_ICONS))\n\nexport const registerKunIcon = (name: string, data: KunIconData): void => {\n registry.set(name, data)\n}\n\n// Bulk register — pass a Record<name, data>, e.g. icons extracted from\n// `@iconify-json/*` at build time, or your own custom SVGs.\nexport const registerKunIcons = (\n icons: Record<string, KunIconData>\n): void => {\n for (const [name, data] of Object.entries(icons)) registry.set(name, data)\n}\n\nexport const getKunIcon = (name: string): KunIconData | undefined =>\n registry.get(name)\n\nexport const hasKunIcon = (name: string): boolean => registry.has(name)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/twScales.generated.ts","../src/cn.ts","../src/variants.ts","../src/rounded.ts","../src/controlSize.ts","../src/motionPhysics.generated.ts","../src/locale/translate.ts","../src/locale/zh-CN.json","../src/locale/zh-CN.ts","../src/random.ts","../src/decodeIfEncoded.ts","../src/avatarFallbackImage.ts","../src/avatarFallback.ts","../src/icons-data.ts","../src/icons.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// AUTO-GENERATED by scripts/gen-tw-scales.mjs from @kungal/ui-tokens — do not edit.\n//\n// The Tailwind scale names KunUI mints itself. `cn()` feeds them to\n// tailwind-merge, which otherwise cannot parse them and silently keeps two\n// conflicting classes.\nexport const KUN_TW_SCALES = {\n radius: ['kun-full', 'kun-lg', 'kun-md', 'kun-none', 'kun-sm'],\n shadow: ['kun-lg', 'kun-md', 'kun-sm'],\n ease: ['kun-emphasized', 'kun-in', 'kun-out', 'kun-standard'],\n animate: ['bounce', 'bounceInDown', 'bounceInRight', 'fadeInUp', 'fadeOutDown', 'shake', 'swing', 'tada'],\n z: ['kun-alert', 'kun-message', 'kun-modal', 'kun-popover', 'kun-sticky'],\n duration: ['kun-base', 'kun-exit', 'kun-fast', 'kun-slow'],\n} as const\n","import { clsx, type ClassValue } from 'clsx'\nimport { extendTailwindMerge } from 'tailwind-merge'\nimport { KUN_TW_SCALES } from './twScales.generated'\n\n// tailwind-merge only ships Tailwind's OWN scales, so every name KunUI mints in\n// `@theme` / `@utility` was invisible to it and got passed through untouched:\n// `cn('rounded-kun-md', 'rounded-full')` returned both classes and left CSS\n// source order to pick the winner. Measured, a consumer passing\n// `classNames.trigger: 'rounded-full'` to KunSelect still rendered a 12px\n// radius — the documented \"your class wins\" contract was false for the whole\n// `rounded-kun-*`, `shadow-kun-*`, `z-kun-*`, `ease-kun-*` and `duration-kun-*`\n// surface.\n//\n// `shadow-kun-*` failed worse than the rest. The shadow COLOUR group's\n// validator accepts any non-arbitrary word, so `shadow-kun-md` was classified\n// as a colour: it resolved against `shadow-primary/20` and the box-shadow was\n// the class that got dropped.\n//\n// The scale names are generated from tokens.css (`pnpm gen`) because a drifted\n// hand-written list fails silently — nothing errors, the classes just stop\n// merging again.\nconst twMerge = extendTailwindMerge({\n extend: {\n theme: {\n radius: [...KUN_TW_SCALES.radius],\n shadow: [...KUN_TW_SCALES.shadow],\n ease: [...KUN_TW_SCALES.ease],\n animate: [...KUN_TW_SCALES.animate],\n },\n // z-index and transition-duration are not Tailwind v4 theme namespaces —\n // these are `@utility` blocks, so they extend the class group directly.\n classGroups: {\n z: [{ z: [...KUN_TW_SCALES.z] }],\n duration: [{ duration: [...KUN_TW_SCALES.duration] }],\n },\n },\n})\n\n// Merge Tailwind class names with conflict resolution. Framework-agnostic:\n// the Vue and React layers both import this so \"last class wins\" semantics\n// are identical everywhere.\nexport const cn = (...inputs: ClassValue[]): string => twMerge(clsx(inputs))\n\nexport type { ClassValue }\n","import type { KunUIVariant, KunUIColor } from './types'\n\n// Single source of truth for the variant × color → Tailwind class table.\n// Button / Badge / Chip / Tab / Info / Progress etc. (in every framework\n// layer) consume this so the 7 × 7 matrix lives in exactly one place.\n//\n// All keys MUST be static string literals so the Tailwind JIT picks them\n// up — never construct class names with template strings at runtime.\n// Every entry carries an explicit `border` WIDTH so the outline variant\n// `bordered` actually renders — `border-{color}` alone sets only the\n// color and paints nothing in Tailwind v4. Filled / light variants use a\n// transparent border of the same width so switching variants never shifts the\n// box by a pixel.\nconst TABLE: Record<KunUIVariant, Record<KunUIColor, string>> = {\n // Filled buttons keep white text in BOTH modes, so the fill must stay dark\n // enough for contrast. The dark color scale is inverted (`-500`/`-600` become\n // LIGHT in dark mode), so a plain `bg-{color}` renders pale — worst on the\n // light hues (info ≈ L88%, default/secondary ≈ L65–72%). Each entry pins a\n // `dark:bg-{color}-{n}` that lands every color at a consistent ~L44–55% so the\n // whole row reads as one saturated tier with legible white text.\n // Foreground: the dark hues take white; the light hues (success / warning /\n // info) are light in BOTH modes, so white text fails WCAG on them (~1.5–3.4:1)\n // — they take dark text (≈6–18:1). See kunSolidFgClasses.\n solid: {\n default: 'border border-transparent bg-default text-default-foreground',\n primary: 'border border-transparent bg-primary text-primary-foreground',\n secondary: 'border border-transparent bg-secondary text-secondary-foreground',\n success: 'border border-transparent bg-success text-success-foreground',\n warning: 'border border-transparent bg-warning text-warning-foreground',\n danger: 'border border-transparent bg-danger text-danger-foreground',\n info: 'border border-transparent bg-info text-info-foreground',\n },\n bordered: {\n default: 'border border-default bg-transparent',\n primary: 'border border-primary bg-transparent text-primary',\n secondary: 'border border-secondary bg-transparent text-secondary',\n success: 'border border-success bg-transparent text-success',\n warning: 'border border-warning bg-transparent text-warning',\n danger: 'border border-danger bg-transparent text-danger',\n info: 'border border-info bg-transparent text-info',\n },\n light: {\n default: 'border border-transparent bg-transparent hover:bg-default/20',\n primary: 'border border-transparent bg-transparent text-primary hover:bg-primary/20',\n secondary: 'border border-transparent bg-transparent text-secondary hover:bg-secondary/20',\n success: 'border border-transparent bg-transparent text-success hover:bg-success/20',\n warning: 'border border-transparent bg-transparent text-warning hover:bg-warning/20',\n danger: 'border border-transparent bg-transparent text-danger hover:bg-danger/20',\n info: 'border border-transparent bg-transparent text-info hover:bg-info/20',\n },\n flat: {\n default: 'border border-transparent bg-default/20 text-default-700',\n primary: 'border border-transparent bg-primary/20 text-primary-600',\n secondary: 'border border-transparent bg-secondary/20 text-secondary-600',\n success: 'border border-transparent bg-success/20 text-success-700 dark:text-success',\n warning: 'border border-transparent bg-warning/20 text-warning-700 dark:text-warning',\n danger: 'border border-transparent bg-danger/20 text-danger-600 dark:text-danger-500',\n info: 'border border-transparent bg-info/20 text-info-700 dark:text-info-500',\n },\n // Same fill logic as `solid` (see note above) plus a COLORED glow. The glow\n // needs both a size (`shadow-lg` — the geometry) AND a tint (`shadow-{color}/40`\n // — sets --tw-shadow-color): a color utility alone leaves --tw-shadow empty, so\n // the button rendered with NO shadow at all. `overflow-hidden` on the button\n // doesn't clip its own outset box-shadow, so the glow shows.\n shadow: {\n default: 'border border-transparent shadow-lg shadow-default/40 bg-default text-default-foreground',\n primary: 'border border-transparent shadow-lg shadow-primary/40 bg-primary text-primary-foreground',\n secondary: 'border border-transparent shadow-lg shadow-secondary/40 bg-secondary text-secondary-foreground',\n success: 'border border-transparent shadow-lg shadow-success/40 bg-success text-success-foreground',\n warning: 'border border-transparent shadow-lg shadow-warning/40 bg-warning text-warning-foreground',\n danger: 'border border-transparent shadow-lg shadow-danger/40 bg-danger text-danger-foreground',\n info: 'border border-transparent shadow-lg shadow-info/40 bg-info text-info-foreground',\n },\n}\n\nexport const kunVariantClasses = (\n variant: KunUIVariant,\n color: KunUIColor\n): string => TABLE[variant][color]\n\n// Static maps for narrower use cases (just the fill color, just the text\n// color, etc.) — same JIT-safety requirement: keys must be literals.\n\nexport const kunBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n// ─── Solid fills (a colored fill that carries text / icons) ──────────────────\n// Each semantic color ships a paired on-color token — `--color-{c}` (the vivid\n// fill) + `--color-{c}-foreground` (the text that stays legible on it) — both\n// generated in OKLCH and WCAG-AA-verified in BOTH light and dark by\n// scripts/gen-tokens.mjs (the build fails if any pair regresses). So a solid is\n// just `bg-{c} text-{c}-foreground`: no per-color white/black guess, no `dark:`\n// pin (the tokens are mode-correct by construction). Medium hues land white,\n// the bright hues (magenta/green/cyan/amber) land a refined dark tint.\n// Reach for these — NOT plain `kunBgClasses` — whenever a colored fill carries a\n// foreground. `kunBgClasses` stays for tints / bars / dots that carry no text.\n\n/** Just the fill. Pair with {@link kunSolidFgClasses} when the fill and its text\n * live on different elements. */\nexport const kunSolidBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default',\n primary: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n danger: 'bg-danger',\n info: 'bg-info',\n}\n\n/** The generated on-color that stays legible on the matching solid fill in both\n * modes (white on medium hues, a dark hue-tint on the bright ones). */\nexport const kunSolidFgClasses: Record<KunUIColor, string> = {\n default: 'text-default-foreground',\n primary: 'text-primary-foreground',\n secondary: 'text-secondary-foreground',\n success: 'text-success-foreground',\n warning: 'text-warning-foreground',\n danger: 'text-danger-foreground',\n info: 'text-info-foreground',\n}\n\n/** Fill + matching foreground — the common case (text sits on the fill). */\nexport const kunSolidClasses: Record<KunUIColor, string> = {\n default: 'bg-default text-default-foreground',\n primary: 'bg-primary text-primary-foreground',\n secondary: 'bg-secondary text-secondary-foreground',\n success: 'bg-success text-success-foreground',\n warning: 'bg-warning text-warning-foreground',\n danger: 'bg-danger text-danger-foreground',\n info: 'bg-info text-info-foreground',\n}\n\nexport const kunTextClasses: Record<KunUIColor, string> = {\n default: 'text-foreground',\n primary: 'text-primary',\n secondary: 'text-secondary',\n success: 'text-success',\n warning: 'text-warning',\n danger: 'text-danger',\n info: 'text-info',\n}\n\nexport const kunBorderClasses: Record<KunUIColor, string> = {\n default: 'border-default',\n primary: 'border-primary',\n secondary: 'border-secondary',\n success: 'border-success',\n warning: 'border-warning',\n danger: 'border-danger',\n info: 'border-info',\n}\n\n/**\n * @deprecated Use {@link kunFocusRingClasses} (or {@link kunFocusRingWithinClasses}\n * for composite widgets). This mixed `:focus` + `:focus-within` so a mouse click\n * lit the ring, and used a different opacity from the rest of the library.\n */\nexport const kunRingClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-default/40 focus:ring-default/40',\n primary: 'focus-within:ring-primary/40 focus:ring-primary/40',\n secondary: 'focus-within:ring-secondary/40 focus:ring-secondary/40',\n success: 'focus-within:ring-success/40 focus:ring-success/40',\n warning: 'focus-within:ring-warning/40 focus:ring-warning/40',\n danger: 'focus-within:ring-danger/40 focus:ring-danger/40',\n info: 'focus-within:ring-info/40 focus:ring-info/40',\n}\n\n/**\n * Unified focus ring — ONE recipe for every directly-focusable control (inputs,\n * textarea, select trigger, buttons, checkbox/radio, links, tabs, menu items…).\n * Keyboard focus only (`:focus-visible`, so a mouse click on a button shows no\n * ring; text fields still show it on click via the browser's focus-visible\n * heuristic). A flush 2px ring in the control's semantic color at 50% — replaces\n * the old scatter of `:focus`/`:focus-within` × `ring-1|2|4` × `/25|/40|/50|full`.\n * Pair with `border-kun` at rest; on an invalid control use the `danger` entry.\n */\nexport const kunFocusRingClasses: Record<KunUIColor, string> = {\n default: 'outline-none focus-visible:ring-2 focus-visible:ring-default/50',\n primary: 'outline-none focus-visible:ring-2 focus-visible:ring-primary/50',\n secondary: 'outline-none focus-visible:ring-2 focus-visible:ring-secondary/50',\n success: 'outline-none focus-visible:ring-2 focus-visible:ring-success/50',\n warning: 'outline-none focus-visible:ring-2 focus-visible:ring-warning/50',\n danger: 'outline-none focus-visible:ring-2 focus-visible:ring-danger/50',\n info: 'outline-none focus-visible:ring-2 focus-visible:ring-info/50',\n}\n\n/**\n * Composite-widget variant of {@link kunFocusRingClasses}: the focusable element\n * is an inner `<input>` but the ring should sit on the WRAPPER. Put this on the\n * wrapper and give the inner input `outline-none` (and no ring of its own) so\n * there's exactly one indicator. Used by KunNumberInput / KunTagInput.\n *\n * Uses `focus-within` (not `has-[:focus-visible]`): for a text-field wrapper the\n * two are equivalent — a text input matches `:focus-visible` on click too — and\n * `focus-within` is a native variant that reliably compiles, whereas the\n * `has-[:focus-visible]` arbitrary variant isn't extracted from this TS source.\n */\nexport const kunFocusRingWithinClasses: Record<KunUIColor, string> = {\n default: 'focus-within:ring-2 focus-within:ring-default/50',\n primary: 'focus-within:ring-2 focus-within:ring-primary/50',\n secondary: 'focus-within:ring-2 focus-within:ring-secondary/50',\n success: 'focus-within:ring-2 focus-within:ring-success/50',\n warning: 'focus-within:ring-2 focus-within:ring-warning/50',\n danger: 'focus-within:ring-2 focus-within:ring-danger/50',\n info: 'focus-within:ring-2 focus-within:ring-info/50',\n}\n\n// Very light tint of the semantic color — \"selected card\" backgrounds in\n// RadioGroup and any \"barely there\" colored fill. Keys are static literals.\nexport const kunSoftBgClasses: Record<KunUIColor, string> = {\n default: 'bg-default/5',\n primary: 'bg-primary/5',\n secondary: 'bg-secondary/5',\n success: 'bg-success/5',\n warning: 'bg-warning/5',\n danger: 'bg-danger/5',\n info: 'bg-info/5',\n}\n","import type { KunUIRounded } from './types'\n\n// Static class map for the 5-bucket Kun radius system. All keys are literal\n// strings so the Tailwind JIT picks them up — the `rounded-kun-*` utilities\n// come from the --radius-kun-* tokens shipped by @kungal/ui-tokens.\nexport const kunRoundedClasses: Record<KunUIRounded, string> = {\n none: 'rounded-kun-none',\n sm: 'rounded-kun-sm',\n md: 'rounded-kun-md',\n lg: 'rounded-kun-lg',\n full: 'rounded-kun-full',\n}\n\n// Global default radius bucket (matches the source layer's behaviour where\n// the un-configured fallback is 'md'). A render layer's config provider may\n// override this per subtree.\nexport const KUN_DEFAULT_ROUNDED: KunUIRounded = 'md'\n\n// Pure precedence resolver for a component's effective radius:\n// prop > component built-in fallback > app/provider default\n//\n// This is the framework-agnostic core of the original Vue\n// `useResolvedRounded` composable. Each render layer wraps it in its own\n// reactivity primitive:\n// Vue: computed(() => resolveRounded(props.rounded, fallback, cfg.rounded))\n// React: useMemo(() => resolveRounded(rounded, fallback, cfg.rounded), [...])\nexport const resolveRounded = (\n prop: KunUIRounded | undefined,\n fallback: KunUIRounded | undefined,\n configDefault: KunUIRounded = KUN_DEFAULT_ROUNDED\n): KunUIRounded => prop ?? fallback ?? configDefault\n\n// A floating panel has no correct `full`. `border-radius: 9999px` on an n-row\n// listbox is not a pill — CSS Backgrounds 3 §5.5 scales every corner by\n// min(side / sum of its radii), so the used radius is half the short side. A\n// measured 80x116 KunSelect popup rendered 40px corners and pushed its option\n// labels inward; the docs' own FilterBar example prescribed `rounded=\"full\"`\n// and shipped that. `full` means \"pill\", and a pill is only defined for a\n// single-line control. So a trigger + panel component keeps `full` on the\n// trigger and resolves the panel to `lg`, the bucket --radius-kun-lg documents\n// as \"containers / floating panels\". Every other bucket passes through.\nexport const kunPanelRoundedClass = (rounded: KunUIRounded): string =>\n kunRoundedClasses[rounded === 'full' ? 'lg' : rounded]\n","import type { KunUISize } from './types'\n\n// The single source of truth for the size of every text-like form control —\n// Button, Input, Select, DatePicker, Textarea, TagInput. They reference this so\n// they share one scale and line up in a row.\n//\n// Padding-driven (not fixed-height): height = font line-height + 2·py + border.\n// `md` is the anchor (~38px, the modern default). px:py is a clean 2:1 (xs/sm a\n// touch looser); horizontal padding grows faster than vertical from md→xl, so a\n// bigger control gets wider, not flatter. Approx heights with a 1px border and\n// text line-heights 16 / 20 / 20 / 24 / 28:\n// xs ≈ 26 · sm ≈ 34 · md ≈ 38 · lg ≈ 46 · xl ≈ 54\nexport const kunControlSizeClasses: Record<KunUISize, string> = {\n xs: 'text-xs px-2.5 py-1',\n sm: 'text-sm px-3.5 py-1.5',\n md: 'text-sm px-4 py-2',\n lg: 'text-base px-5 py-2.5',\n xl: 'text-lg px-6 py-3',\n}\n\n// Icon-only buttons: a fixed SQUARE whose side equals the text-button height at\n// the same size, so an icon button lines up with text buttons in a row.\n//\n// Why this exists: kunControlSizeClasses is padding-driven (height = line-height\n// + 2·py + border). A text label contributes a full line-box (≈1.5em), but a lone\n// 1em icon does not — with the same padding the icon button would come out\n// shorter and break the row. Mainstream libraries dodge this by giving buttons a\n// fixed height and making the icon button a square of that height (shadcn\n// `size-9`, HeroUI/Chakra/Ant `isIconOnly`/`.ant-btn-icon-only`). We do the same,\n// ONLY for icon-only, keeping the icon at its natural 1em centered in the box.\n//\n// Sides MUST equal the kunControlSizeClasses heights (incl. the 1px border every\n// variant carries): xs 26 · sm 34 · md 38 · lg 46 · xl 54. (size-* is border-box,\n// so the value already accounts for the icon button's own 1px border.)\nexport const kunControlSquareClasses: Record<KunUISize, string> = {\n xs: 'size-[26px] p-0',\n sm: 'size-[34px] p-0',\n md: 'size-[38px] p-0',\n lg: 'size-[46px] p-0',\n xl: 'size-[54px] p-0',\n}\n\nexport interface KunSelectionSize {\n box: string // the square: checkbox box / radio indicator outer ring\n dot: string // radio's inner filled dot (unused by checkbox)\n check: string // checkbox's check glyph (unused by radio)\n text: string // the adjacent label\n gap: string // box ↔ label spacing\n}\n\n// The shared scale for selection controls — KunCheckBox and KunRadioGroup use\n// identical box sizes (every major library does this), so a checkbox and a radio\n// of the same size match. The box is ≈ 0.5× the text-control height and ≈ 1.2–1.4×\n// the label font, so it sits optically level with the label beside it.\n// Box px by size: 12 / 14 / 16 / 20 / 24.\nexport const kunSelectionSizeClasses: Record<KunUISize, KunSelectionSize> = {\n xs: { box: 'size-3', dot: 'size-1.5', check: 'size-2', text: 'text-xs', gap: 'gap-1.5' },\n sm: { box: 'size-3.5', dot: 'size-1.5', check: 'size-2.5', text: 'text-sm', gap: 'gap-2' },\n md: { box: 'size-4', dot: 'size-2', check: 'size-3', text: 'text-sm', gap: 'gap-2' },\n lg: { box: 'size-5', dot: 'size-2.5', check: 'size-3.5', text: 'text-base', gap: 'gap-2.5' },\n xl: { box: 'size-6', dot: 'size-3', check: 'size-4', text: 'text-lg', gap: 'gap-3' },\n}\n\n// The single source of truth for chip / tag pills — a standalone KunChip and the\n// tags inside KunTagInput share it, so a tag looks identical either way. A\n// compact sub-scale (~0.7× the form-control height): vertical padding is tighter\n// than kunControlSizeClasses because a chip is text + tight padding, not a tap\n// target. Pair with `gap-1` + `rounded-full`.\nexport const kunChipSizeClasses: Record<KunUISize, string> = {\n xs: 'px-2 py-0.5 text-xs',\n sm: 'px-2 py-1 text-xs',\n md: 'px-3 py-1 text-sm',\n lg: 'px-4 py-1.5 text-sm',\n xl: 'px-6 py-2 text-base',\n}\n","// AUTO-GENERATED by scripts/gen-motion.mjs from\n// packages/ui-tokens/scripts/motion-physics.mjs — do not edit.\n\n/**\n * The ballistic model behind `KunShatter`, as data — outward impulse, air\n * drag (`1 − (1−t)^dragExponent`), gravity as a t² acceleration — sampled\n * into `keyframeSteps` linear keyframes per shard. The same manifest\n * generates `KunShatterPhysics` in the kun_ui_tokens pub package, so the\n * web and Flutter renditions of the motion cannot drift. Tune the feel in\n * the manifest, never inline in a component.\n */\nexport const KUN_SHATTER_PHYSICS = {\n keyframeSteps: 16,\n reachFactor: 0.5,\n launchMin: 0.32,\n launchSpan: 0.55,\n verticalFactor: 0.8,\n gravityMin: 0.85,\n gravitySpan: 0.5,\n dragExponent: 1.7,\n scaleEndMin: 0.8,\n scaleEndSpan: 0.16,\n fadeOutStartMin: 0.5,\n fadeOutStartSpan: 0.18,\n settleExponent: 2,\n fadeInWindow: 0.4,\n staggerFraction: 0.22,\n staggerCapMs: 120,\n defaultDurationMs: 1100,\n defaultRotationDeg: 140,\n} as const\n\n/**\n * Drag-to-dismiss on a bottom sheet, as data: dismiss on release when the\n * sheet moved down and either the release velocity exceeds `closeVelocity`\n * (px/ms) or the offset reaches `closeDistanceRatio` of the panel height\n * (capped at the viewport); an upward drag of d px moves the panel\n * `rubberBandLimit × (1 − e^(−d / rubberBandLimit))`. The same manifest\n * generates `KunSwipeDismissPhysics` in kun_ui_tokens.\n */\nexport const KUN_SWIPE_DISMISS_PHYSICS = {\n closeDistanceRatio: 0.25,\n closeVelocity: 0.4,\n rubberBandLimit: 32,\n} as const\n","import type { KunMessagePath, KunMessages } from './types'\n\n// Resolve one message and substitute its `{name}` placeholders. Framework-free\n// on purpose: each render layer binds it to however that layer holds the\n// active locale.\n//\n// A `{name}` with no matching param is left as written rather than blanked —\n// a missing interpolation should be visible in the UI, not silently produce a\n// half-sentence.\nexport const translateKunMessage = (\n messages: KunMessages,\n path: KunMessagePath,\n params?: Record<string, string | number>\n): string => {\n const [namespace, key] = path.split('.') as [keyof KunMessages, string]\n const group = messages[namespace] as Record<string, string> | undefined\n const template = group?.[key]\n\n if (typeof template !== 'string') {\n // NODE_ENV, not import.meta.env.DEV: Vite folds the latter to false when it\n // builds a consuming package, which strips the warning from the bundle.\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[KunUI] no locale message at \"${path}\". A custom locale must supply every key in KunMessages.`\n )\n }\n return path\n }\n\n if (!params) return template\n return template.replace(/\\{(\\w+)\\}/g, (raw, name: string) =>\n params[name] === undefined ? raw : String(params[name])\n )\n}\n","{\n \"name\": \"简体中文\",\n \"code\": \"zh-CN\",\n \"messages\": {\n \"alert\": {\n \"title\": \"确认\",\n \"confirm\": \"确定\",\n \"cancel\": \"取消\"\n },\n \"autocomplete\": {\n \"clear\": \"清除\",\n \"loading\": \"加载中…\",\n \"noResult\": \"无匹配项\"\n },\n \"avatar\": {\n \"unknownUser\": \"未知用户\"\n },\n \"avatarGroup\": {\n \"label\": \"{count} 位用户\"\n },\n \"banner\": {\n \"label\": \"公告\",\n \"close\": \"关闭公告\"\n },\n \"carousel\": {\n \"label\": \"轮播\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"nav\": \"轮播导航\",\n \"goto\": \"跳到第 {index} 张\"\n },\n \"chip\": {\n \"remove\": \"移除\"\n },\n \"commandPalette\": {\n \"placeholder\": \"搜索…\",\n \"empty\": \"输入关键字搜索\",\n \"noResult\": \"无结果\",\n \"loading\": \"加载中…\",\n \"close\": \"关闭\",\n \"hintSelect\": \"选择\",\n \"hintOpen\": \"打开\",\n \"hintClose\": \"关闭\",\n \"resultCount\": \"{count} 条结果\"\n },\n \"copy\": {\n \"copied\": \"已复制\",\n \"success\": \"{text} 复制成功\",\n \"failure\": \"{text} 复制失败! 请更换更现代的浏览器!\"\n },\n \"datePicker\": {\n \"placeholderDay\": \"请选择日期\",\n \"placeholderMonth\": \"请选择月份\",\n \"placeholderYear\": \"请选择年份\",\n \"clear\": \"清空\",\n \"today\": \"今天\",\n \"close\": \"关闭\",\n \"prevYear\": \"上一年\",\n \"nextYear\": \"下一年\",\n \"prevPage\": \"上一{unit}\",\n \"nextPage\": \"下一{unit}\",\n \"zoomOut\": \"{label} — 返回上一级\",\n \"unitMonth\": \"月\",\n \"unitYear\": \"年\",\n \"unitDecade\": \"个十年\",\n \"monthCell\": \"{year}年{month}\"\n },\n \"drawer\": {\n \"close\": \"关闭抽屉\"\n },\n \"fileInput\": {\n \"trigger\": \"选择文件\",\n \"selected\": \"已选 {count} 个文件\"\n },\n \"filePicker\": {\n \"tooLarge\": \"{name} 超过大小限制 ({size})\"\n },\n \"input\": {\n \"clear\": \"清除\",\n \"reveal\": \"显示密码\",\n \"hide\": \"隐藏密码\"\n },\n \"lightbox\": {\n \"label\": \"图片查看器\",\n \"close\": \"关闭\",\n \"prev\": \"上一张\",\n \"next\": \"下一张\",\n \"goto\": \"跳转到第 {index} 张\",\n \"zoomIn\": \"放大\",\n \"zoomOut\": \"缩小\",\n \"rotateLeft\": \"向左旋转 90°\",\n \"rotateRight\": \"向右旋转 90°\",\n \"reset\": \"重置缩放/旋转/位置\",\n \"download\": \"下载\"\n },\n \"lightboxGallery\": {\n \"view\": \"查看大图\"\n },\n \"loading\": {\n \"description\": \"正在摸鱼中...咕咕咕\"\n },\n \"loli\": {\n \"close\": \"关闭\"\n },\n \"message\": {\n \"close\": \"关闭\"\n },\n \"modal\": {\n \"close\": \"关闭\"\n },\n \"null\": {\n \"description\": \"莲说这里什么都没有\"\n },\n \"numberInput\": {\n \"decrement\": \"减少\",\n \"increment\": \"增加\"\n },\n \"pagination\": {\n \"nav\": \"分页导航\",\n \"prev\": \"上一页\",\n \"next\": \"下一页\",\n \"page\": \"第 {page} 页\",\n \"hintBefore\": \"您可以使用\",\n \"hintAfter\": \"来进行快速翻页\",\n \"jumpLabel\": \"跳转到页数\",\n \"jump\": \"跳转\"\n },\n \"pinInput\": {\n \"label\": \"验证码\",\n \"digit\": \"{label} 第 {index} 位\"\n },\n \"reaction\": {\n \"label\": \"点赞\"\n },\n \"select\": {\n \"searchPlaceholder\": \"搜索…\",\n \"noResult\": \"无匹配项\",\n \"loading\": \"加载中…\",\n \"clear\": \"清除\",\n \"removeOption\": \"移除 {label}\"\n },\n \"spoiler\": {\n \"copyCode\": \"复制代码\",\n \"reveal\": \"剧透内容,点击或按回车显示\"\n },\n \"tagInput\": {\n \"tag\": \"标签 {tag}\",\n \"removeTag\": \"移除标签 {tag}\"\n },\n \"textSelection\": {\n \"copy\": \"复制\",\n \"cut\": \"剪切\",\n \"paste\": \"粘贴\",\n \"selectAll\": \"全选\",\n \"share\": \"分享\",\n \"lookUp\": \"查询\",\n \"searchWeb\": \"搜索\"\n },\n \"upload\": {\n \"imageAlt\": \"上传图片\",\n \"cropTitle\": \"裁剪图片\",\n \"cancel\": \"取消\",\n \"confirm\": \"确定\"\n }\n }\n}\n","import raw from './zh-CN.json'\nimport type { KunMessageCatalog } from './types'\n\n// KunUI's built-in default. The strings are the ones the components used to\n// hold inline, reproduced verbatim, so adopting the locale system changed no\n// rendered output.\n//\n// The catalog is JSON rather than a TypeScript literal because one file feeds\n// both the web bundle and the generated kun_ui_messages pub package, and a\n// Node generator can read JSON without evaluating TypeScript. The annotation\n// below is what type-checks it: a key missing from KunMessages fails the build.\nexport const KUN_CATALOG_ZH_CN: KunMessageCatalog = raw\n","// Generate a random integer within an inclusive [lower, upper] range.\nexport const randomNum = (lowerValue: number, upperValue: number): number =>\n Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue)\n","// Decode a possibly percent-encoded string, returning the original when it\n// is not encoded (or when decoding throws on malformed input).\nexport const decodeIfEncoded = (text: string): string => {\n try {\n const decoded = decodeURIComponent(text)\n return decoded !== text ? decoded : text\n } catch {\n return text\n }\n}\n","// AUTO-GENERATED — do not edit by hand.\n// The terminal avatar fallback, inlined as a base64 webp data URI (128x128,\n// 5318 B) so it needs ZERO consumer setup and makes NO network request — the\n// same no-fetch policy as the bundled icons and KunNull's mascot.\n//\n// This is what renders when the host has configured no avatar pool AND when a\n// pool URL itself fails to load. It is a data URI on purpose: the incident it\n// exists for is a CDN path that 404'd for every avatar-less account across\n// six sites at once, so the LAST fallback in the chain must not be reachable\n// over a network at all.\n//\n// Source: the first official KUN Galgame sticker (image hash d52ac5fb…), the\n// site's de-facto mascot.\n/* eslint-disable */\n/* prettier-ignore */\nexport const KUN_AVATAR_FALLBACK =\n 'data:image/webp;base64,UklGRr4UAABXRUJQVlA4ILIUAADwRACdASqAAIAAPm0qkEWkIqGYPB4wQAbEsgBcqcwHa+p84vk/vy+PcTP2/7L1nf3rdj+YzzZPSv/ZvRr6lz0FvLs9n/+3WqdxS/R/j35v+P743+6/3z1LcT/WVqO/MfwV/C/wPov3u/JfULdt2h1l388epv2D/7X+A+AD+c/1T/i+vP+v8JLzb2AP5l/cf+//j/Yh+sPQB9VftZ8Cv7C+mR/////8Ev3S9nT9tG27iIOpAehgMfdUlcApsWeLB8GNDRgdM8ejhbUlg+8jwgydu6a7Xzzt9pf6Yf5suMNs/mRXIceHCjMWWh+z7k8qw9TXYn7pkMIUoSyJoglh5583QXQyD4B6dEot5bztGzVYuCTsR/gDWwcSq1+VzBMItC1wQi5IEBtW56U7U0lfZnSYEIZz5aRVGjwKkeWIc1xuCFP9mGvVtJuZYbm7swEtEBYW/LVEKHvzd/ZazuQWVctsc8cOA5usYQ9ISAtcwaClCcMduxr3M9n9WPici7m88cq3m5coC4AxGHM4P+2Dcy0GMhNYlP1aHcNePqkN9MKuolRk+MugJpAUVbx62v+e3ow7Q58DVef1Kh7nI/XJUf86QRDGoGrniErDnnf1EcZF2ZiyGglqr12Z2Q/FUNpvomXGKyXBqtHjuvSPwUdT0r/or94nGlj9dojEq8VMUbVniipeHYIqWx8lY3ajGGTLstlQ6f2SgzJ6RAiGk9qLms6LMFwjzWydp6IDccskb7tfgAD+/74TSlHQvrIVOBoMyxKhcVcSAEn/cC3714D+F5/+ba4wY/efe8fUFdmql8ZrtG+Grr9EgHmSslBbYtlIvH31/8bXqMAK5wEZNHPnnb5rEbqGzsal+L9YRKfdZsSMnFbW33jmICDZDYEUGBH3qb13pkdkPofpJAL6mXsQCMq31lTJ/Vk1GfiLu4h2DBvOyvuQOwYeJsJWJ6LlgBHJHzNufWq3Xml3oPrqAbhVvbZf3Er+RTDJAeL3nymoJl6/AxVGmpg3SAh9ek+/xkYJ2wTi2Q14P4VN2LXT+mRb1xt83AQzUc2MWuvLJhL/epkybjh3e87naqbB4R9ylqe1SMNFZeg8EphAT+1En7SsYGaF4Y7xS5dGPupEoupk/GgDQqL8GL1OaC3pra5Q7G/SN3ocXc/mkiZQI+K7gPp8Etz2mWp3AaG9onLd5oGpw23d11dK62Q/EfJzFkD6GHeRL7A7KoYZfXWof0NHjnmMRfo+7CJd3Y27r8cmMl6vpllxSPvvNK+laI4Y5HEg8igIpqszRkqG7/93E5CLpIyefDMqOIweX5OSiq8gThAdEOXc+rW6DAIFy9woMSaaxjQTRkCyQ7ibd58HaXSZyx+WRedSnCDM4wiK3uzX0hxpN2nwwlTaLB+RPJnTSfZCFmB7g9dWzITIZcGR7JKpUxPj7NClVKSMj2VIDxEHmUe0Scq1CcCVxDuVqqez48X1AdrwFGJ4aJ+ZSpjRagcksSHsFSEoGnVpGoHTTaCXENpQGzd+apVKVS4EpjED/hrQRR3juDpmjwjO0fU/t9cPArd5pJroEfxYszatgbIBWqp98jECIPzzlglw9UNhm5U4vSz/h5QtYLNty33Ak7Wv8aK8ZU7xeJW6CmHliOP8iaMWQs6ueF7zbAsP/q0wa2UXYbzMxldybRUeBhOAxPSMgq4uPt4om0LkoGqtd+6A5L5lJ+4M7eCtMBmGluGPBhSyvMJy5FogWA7xnkrIsza179vMzuHhA4aGamILtZtiaKydfKBwtPAf6iYazvCkXR6g95XMbBkDbB0LMN60Hgbrne93gUkb0WOaAcg0YbGD+sxat+2ip3lsAfdf8IV7eEPR+7VCfm6MzE3JooHtjngfL0ABK27sqphsu44X904Ms6VlAV4LXQCcu/HdPT8rkIrNl8/GTRskZXJdcoHO9l3/J5EsFhQHlqxVA+kEzx4okRL0qAP/v8UiQAjgn7j2Am+k0XhsbHgO9crrRfg9ja9EmMpzyC8WfPN3oC16DlpH/fCXqFgTyw/Ft+CxUC7Dg79/hZrVJXX7B3+IwL5nenGjUTPPhQZuD40nzJWOiTTG2H0WAG4QjlmCzJ7d6ULV2g3nyk3ECWv2SxMBa5kNQHdI67NVjLdLMAiGO6Q3zXpzGRXHesfkoveVTER9sLuT8R7Pneqo4gNjTj4kfVzlbpoUCVdqX2rFXdUSpZYvVKOgFQujdI/vpmcwMdEEM2Na9gDxKLFXWQoY277Uz7nMGXsg7aM9SbTwoGub0dSzzfkxGwCbeST5jzqVTFPDPwKQz+AqNNtGzBYQlWbM9UmVegsAgkp8mNmyDPETfrRXYJHt35eEf9gIvnhJjIx5xp9i97Gn/baVB/7+Mttpmq6eNsmoKyYMG/6v8863qp8kVbQbyX/L297eVI6INUTWuUnVx5qgbGPkCDphvX7LDEeWJ5dLa8ivd/m0zzvYz9LYLK+WM7EEncDTt73P/0RMUbEJguQP8YyC2dvchiQgG3LsGgGPGFuABLMnesh6iuZdHB02DvC7Hv0wY7bOsZxeTxiKmkkRa/5FB6RYy5eXt34SfsOu8px9LF13RoFEKT6m+6AbVf/ce4lnemUW+4QZlqyzbMn3KNKkCSkDZfqV/+0nlzixEng8cPghWScSk6wQtbTotJsEcxVvoDNFsZ+vk/X/cAiMV/RfYjmRIe0rpw7NVYonNU/824LTfbAFrm352kzVvd0xhH0WQTC6tKhXfgXwPcid1sgD+WXUwhiPtDTmHSfgooujA27/I9mUlL6Jh8/7ylXJDBa5QHjKfEXrPgzcVLLI2xHmtT2JbTRAbsEHUa2enGtUCJ+rDf2VF7i8B3A5hvz22O0ad3aigG24BxTkcS57N+jOPHj8cnV4K6KBDbIWUDWCRnXoM51StOSLNTcBMKRE4j/jvdEhZVMuEstre/hxR7wRaC//J2QGUwDJq+1wdHDQGaAbUmxVFnRyVo7Rez4zkyOXRYALmVRammJzWmV1gvahrjc7l8IlkwVY4YsyREynMFSLZZF+T4hO6DVaEZ1EUh7pFDBVjLX3VgI7eaV/y6CxjD0ti22FGOpD9raW47k97gVDi8vfKn3fuypXDPhPgjYiEGa946ttv73XRAIjNuyS3OLvfztN3KAytr1eDO9MZtrYFYiN6YwS8M4OmaOBjWoznn5agXleMnS3iH6MDjhZUDRTK7ObMEg2yhdVZwzo5Qtezn3hnRuWwNct5/QC4q9iXi8o3FLvS9H6crIRTRn1q923zH6GLOjZYwwC0XYn3+RAL0UpgycXv370qOgXPaMKdP/YJqSD8aegVFCFd9e2oxgrlRIsq6AWPcKMfiakYkI+L2GkP6udnQfKoGKYYAv9BIOCO8EAWmeEYaXwIalcGca5a/LjnWWQUhJ/H0R8F4qSESHgveuEQpHXmZ7q+fFQcYzdjCYOk0JQgZA1RYUDg1Y0yh3jM/bP3L7UMOY3mZQvW4eG0mNYP1te4ymqfD3/XpDraBuXj9hQjvKPvkCVZLwoY+V0VvOqRvNjqlPLYZzmxWOk1+PG2J0JBWnjsY8vS9Jmaczm0ntPQJgN3JCJeZawQ9MtRw4QmAjsCmfMGfc3LyY6ayaDLoCtGy5N8XFhQbpxVOItpJ04rIUWOnQCxwp7uwDfxv0nFsBBHGnsMGrFboJDhaYcdWWrxQjyGbo3xkQpOg25QBpzPRIUZadsaISivct5QGA+5g8Y45yBNMD8Z/PbhQzhveeHR5r60ISAq3eiIsS+ZdXWjfX4mT5fiIMQ7VABcz+QUDKkDoOdzXPr6JfSR/5mC9hI3Boenn2QR6HGwVRX3/CXfv+T43Fk9QgNkrxR3EHLuJdWjHyx9QxLnJqAHSNCUPMpKSkmverGLoJRxzogjTi8VNq4OWZnZIiKatuxVQA9o2YIxcnaS58T1U3vyzT3nPRQC5ocLc43E9TpDRLrlBDqrwA1D2wbgxMdo6zvt5qi4NKPbxrU7855I9BKEFvxLQenIMxFBXXPzrTo8HIJCjcnmb9UzJ3gt+I7HLGob4Sp9UgMzcJ20++GWW7SB9uV/7zuaxe12fTMVM9n87sHj13OdAJMnpYRo0/lvUe9n0OG7Ep3HawptliRTH5lGKtYR7Ia6HG7+OTkiXhxLVJc3hzVSHwt6fnCZtHobpSh3Njco305mmLpRchbXLae3exiwBK2DezhPQxhoTjY7OJwif3tAeTA2/KReS4G9xXtAepJVUj1/YZ+PETyB8XKOXRpmaHWLThbtiEZKjtEhjl1P5U1x+7TTmvVF1/iWE3fN7ycoykl3kSgvI4mlX3jpEfdJncnN8Kh2hywa3qyubIDJLDgBy6OfKqfPWwrqCB+/qc3NOdIZSlgV80RhhERYQBFEGgE+JrmDu6sU3XIf20/WxI5cXNJJDRJo6Aa+dr5pQz8bAiv4pdDrfoQwVVRuRoAqFrev2TU9CF+QslOzaPGd7lAet6XhjLkgBsjgWqyTThg4msaaf12FJXEr092is3WYo47dHfg27Px5cEwhz4DVgiVuW8eK5DAARYlxqQ7qu6Q3hIQqOQxJ1s8c9oIeRt7/IOrDthh6QSk626Fkat0nkYBlJ0SqKqKayjIdqqU++rQEhjbmhftfBuvExR5E8hJ4GDHjEAp3KzR+/AEkRVqUX8wULWOjNp19AMjoVgBo96TkcizNDBM74na1wkkdLGpoKBV52DeIvRiOhmguj2yKKoXZdYTEv2ExzE7EtoEo8W0Dvtuz4ZMRSgcqDSh+qYV1ZlIrzBxF+ax6AvjX5fknwW1GtJvpiL5ETFcJK3TkwvRQvzNpJaBT8MnSsqmrR5id0P7llCznAJX8B2Y4DhlF8zIUW2ksHkWl2jltiQX8wgew6SmRsJKq7bcslbts/36y1uM9L4BoSKlUtx9tOuluKKk7oN6gb5cETtS9j0G247ncEZmxeGU+rL/OvZaP5q4M0xIKKWV7OK0aUM7obJpi/HdjeDpyFev4/j5dUenuHAIH47VSFXEMYUcsZ6mw9NQR2wdIIDit3hYpZKbzjoJPnb01DN46NG2Ey7E3lVbKeasuvp2tO0pfSQsiuJBetO86t2oTq2zFht8oDcP7c4VwXmuSxUX88LSnkdwuuIg2RZCmz6TJF445+x/Va92RzGmGqnkFl+2XWuxCgB72FFi0xchzKaJ/KcKbf3QmspiLtfhRzOck5xYeDZAE5cCvZH1SZHtqE6fvLRX+lRw2l6zXJRy6XVExzcb9n642u3dV5/Wc5gPTq1AINMwoqcnIGaYiGGxfAVmkcG7CzjHtzFgQiRgEO+ePN09xpsW4iBNRZ1A3OgxkhfrFeVJi88CtSF7lDFd7ibuSDlJRar5BUUOUukqVeeb1fQBfrh0wH0L9x/L1uVCvEfWqe2ksNBsBKyGYsCu9JT7GUU9KzmkSCHdt0vjQJgrrsRPFKTRTbgKafvDnglA74bYjkJa4cVXd/tXCPW7T6Upcn1EWeGmMknvaP/18EUNdjs1AofLSLPMDOzcz2QzH5vv49RZG1zkA4oM0Ifg14v83PWgCZcqo+T7HREkDojb/UtUZJduvUy7/rFM1zBTHwjxVd2ub08yJj+abj2UV2yIh9HCyHmCg+ygnJToFqp3PwHZM8XH+FIL9g9HOIVFRP2LtbHD/g2kProtxz94i57a9dKQRjjy+FhOadOilSRn8u1sA4qCCBzzHD/az/azG1T1e7Z+mtd/8wQRzaboUjxrJ/zG+Ql/qeEvNfQttmzxs/GZHfc5cmlGm++GgQzQ9UDYIK8DawsV8iyPXyicgZvVmpBT0o2+VxktEhJIwsVdaw7GdQp73FJfoDcaXa1/P1IR3w3kCPhN+RVUes0H9EpsA0vxq8ba9S+7bhz79cNuSzxeJDhHI+vjo0pd6N6DPxO8KOedYqsWAGrnMSJQQoB28yBHMiInN+oLJhZtX/thtE+Pv8vgk5j6QV7/98wJsKH99Qcw/9sK6EBBEaUc/JgZTyeLX2pbfMQJYwCPesOWRCNhnT3jhlNntWCYmoSQjNQ7bxV9g5ihdiu2rz5Aie9FKVfVuEchUNOhegl/Hn/UrGpet14rdZt+WjeDGKRkamVHiDgoY5eEoHEo3jhP23ZxpXwrODeDuMAQLDBmd6XcGFCK9oezTQ9WhNFBs7iTn/l6yme+vu4+ONUu5CfXK8azpe8iO4rA/EHxp59sTza6BashgTi9g84D7dIlYQV09vYMsXP8Jt4sgOvE3hHcZ//I9kMuNzLmRVy+B8z7C9JrkUU6GLlEGDOLL1hjqe9aXGN2kGY/ktPjSiidHxMSKVxxSbUurI4uFPkWs1AWe7wHDBF9FPFvDs0NLXf+EPsVMRZezW1R1FzkonZDgu4WqlSsyxty89PyRLlHNRS9S+1GomN7+Dyj21UzxnDsswG6gIBwYoU+5L/Q2sl/lxeGxaKpqmO3QZBADmS/xVfEuGvX5M6TJllEQRNE9QzAGTiVucLIKpkrooB0IPwZrGxTzVtlw7HzRUlLSq0sGgcORaAQ9GUNuw6xKiCUxr7GovpoA2rXoD7RT9m5LzSkwC5Ox58CtJAkuOdUAdyqttE41JSy8upaYFYp4Ge00FIgn3dX1hPqQE08GP/bvLm42giMiDfMwulqYe+8XEg1IpNLIowAgJ4dqPDmLXTl7piFVmRt3yxsJRck+DhdpbsTuZ+evx3xUvL7ld4p4xCgAFPikLnMMVw+QqMX8U+zo4s4dhdZdfqdLw3R5U7awe1pM3AXIge+OXj7N4/P2BA7upsrLzX7685ZUzAmww0ZTDEPqQlIFWS/c4Ao5KAPCOdOU5obRfx1FhKlocYdS0sX3f8SSKASgfRaYR+CMfY3etwG95RYaRof6Vi8BczLMbXXm5bI78A4czROUCbPlcVl6zQraXfOyItY9q8XIUP0iJW/9hER/ZTQi1JtlgJKwlmsBKfXL0z1LXPfHrBwElw/as+cnKcDFPDav+9gYJhDAbzgbHEnMibqT5JoZ2YNRzxma/ZLLTD/75B0IbkVDRfOt+BzmSut9XA6Nb13tqguFaZ/7SHjCmmQ4YGQAAA='\n","import { KUN_AVATAR_FALLBACK } from './avatarFallbackImage'\n\n// The predecessor of this file hardcoded `https://sticker.kungal.com` plus a\n// `/stickers/KUNgal{pack}/{n}.webp` path and a pack/per-pack count. That path\n// addressed a POSITION IN A MUTABLE COLLECTION on a site KunUI does not own,\n// so when that site stopped serving static files every avatar-less account\n// across six consumers 404'd at once. A URL that names another service does\n// not belong in a component library: the host supplies the pool\n// (`useKunUIConfig().avatarFallbackPool`), KunUI only chooses from it.\n\nconst hash = (value: string): number => {\n let h = 0\n for (let i = 0; i < value.length; i++) {\n h = (Math.imul(h, 31) + value.charCodeAt(i)) >>> 0\n }\n return h\n}\n\n/**\n * Deterministically pick one image from an avatar fallback pool.\n *\n * The same `seed` always yields the same entry on server and client, so there\n * is no hydration mismatch and no framework state is needed.\n *\n * `pool` is treated as a FIXED-LENGTH array: the index is\n * `hash(seed) % pool.length`, so adding or removing an entry re-assigns every\n * seed, while replacing one entry in place moves only the seeds that land on\n * it. Pool providers should edit slots rather than resize.\n *\n * An empty pool returns the bundled data URI, which cannot fail to load.\n */\nexport const pickAvatarFallback = (seed = '', pool: readonly string[] = []): string =>\n pool.length > 0 ? (pool[hash(seed) % pool.length] ?? KUN_AVATAR_FALLBACK) : KUN_AVATAR_FALLBACK\n\n/**\n * @deprecated Renamed to `pickAvatarFallback`, which takes the pool the host\n * configured. This alias no longer returns a sticker URL — it returns the\n * bundled fallback for any input, because the host it used to point at stopped\n * serving those files. Pass a pool, or read the resolved image off KunAvatar.\n */\nexport const getRandomSticker = (id = ''): string => pickAvatarFallback(id)\n","// AUTO-GENERATED by scripts/gen-icons.mjs — do not edit by hand.\n// Regenerate: pnpm --filter @kungal/ui-core gen:icons\nimport type { KunIconData } from './icons'\n\n// SVG data for the icons KunUI components render, bundled inline so the\n// library never fetches an icon at runtime. Bodies use currentColor.\nexport const KUN_BUNDLED_ICONS: Record<string, KunIconData> = {\n \"lucide:x\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M18 6L6 18M6 6l12 12\\\"/>\"},\n \"lucide:check\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M20 6L9 17l-5-5\\\"/>\"},\n \"lucide:info\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"M12 16v-4m0-4h.01\\\"/></g>\"},\n \"lucide:circle-check\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m9 12l2 2l4-4\\\"/></g>\"},\n \"lucide:circle-x\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"/><path d=\\\"m15 9l-6 6m0-6l6 6\\\"/></g>\"},\n \"lucide:triangle-alert\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m21.73 18l-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3M12 9v4m0 4h.01\\\"/>\"},\n \"lucide:chevron-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m9 18l6-6l-6-6\\\"/>\"},\n \"lucide:chevron-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m15 18l-6-6l6-6\\\"/>\"},\n \"lucide:chevron-down\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 9l6 6l6-6\\\"/>\"},\n \"lucide:chevrons-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m6 17l5-5l-5-5m7 10l5-5l-5-5\\\"/>\"},\n \"lucide:chevrons-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m11 17l-5-5l5-5m7 10l-5-5l5-5\\\"/>\"},\n \"lucide:arrow-right\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7l7 7l-7 7\\\"/>\"},\n \"lucide:arrow-left\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"m12 19l-7-7l7-7m7 7H5\\\"/>\"},\n \"lucide:plus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14m-7-7v14\\\"/>\"},\n \"lucide:minus\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M5 12h14\\\"/>\"},\n \"lucide:upload\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M12 3v12m5-7l-5-5l-5 5m14 7v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/>\"},\n \"lucide:zoom-in\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M11 8v6m-3-3h6\\\"/></g>\"},\n \"lucide:zoom-out\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.35-4.35M8 11h6\\\"/></g>\"},\n \"lucide:rotate-cw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8\\\"/><path d=\\\"M21 3v5h-5\\\"/></g>\"},\n \"lucide:rotate-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M3 12a9 9 0 1 0 9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5\\\"/></g>\"},\n \"lucide:refresh-ccw\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M21 12a9 9 0 0 0-9-9a9.75 9.75 0 0 0-6.74 2.74L3 8\\\"/><path d=\\\"M3 3v5h5m-5 4a9 9 0 0 0 9 9a9.75 9.75 0 0 0 6.74-2.74L21 16\\\"/><path d=\\\"M16 16h5v5\\\"/></g>\"},\n \"lucide:external-link\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M15 3h6v6m-11 5L21 3m-3 10v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"/>\"},\n \"lucide:download\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M12 15V3m9 12v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"/><path d=\\\"m7 10l5 5l5-5\\\"/></g>\"},\n \"lucide:copy\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><rect width=\\\"14\\\" height=\\\"14\\\" x=\\\"8\\\" y=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"/><path d=\\\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\\\"/></g>\"},\n \"lucide:calendar\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M8 2v4m8-4v4\\\"/><rect width=\\\"18\\\" height=\\\"18\\\" x=\\\"3\\\" y=\\\"4\\\" rx=\\\"2\\\"/><path d=\\\"M3 10h18\\\"/></g>\"},\n \"lucide:lollipop\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/><path d=\\\"m21 21l-4.3-4.3M11 11a2 2 0 0 0 4 0a4 4 0 0 0-8 0a6 6 0 0 0 12 0\\\"/></g>\"},\n \"lucide:eye\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M2.062 12.348a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 19.876 0a1 1 0 0 1 0 .696a10.75 10.75 0 0 1-19.876 0\\\"/><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"/></g>\"},\n \"lucide:eye-off\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575a1 1 0 0 1 0 .696a10.8 10.8 0 0 1-1.444 2.49m-6.41-.679a3 3 0 0 1-4.242-4.242\\\"/><path d=\\\"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151a1 1 0 0 1 0-.696a10.75 10.75 0 0 1 4.446-5.143M2 2l20 20\\\"/></g>\"},\n \"lucide:search\": {\"body\":\"<g fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\"><path d=\\\"m21 21l-4.34-4.34\\\"/><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"/></g>\"},\n \"lucide:filter\": {\"body\":\"<path fill=\\\"none\\\" stroke=\\\"currentColor\\\" stroke-linecap=\\\"round\\\" stroke-linejoin=\\\"round\\\" stroke-width=\\\"2\\\" d=\\\"M22 3H2l8 9.46V19l4 2v-8.54z\\\"/>\"},\n \"svg-spinners:90-ring-with-bg\": {\"body\":\"<path fill=\\\"currentColor\\\" d=\\\"M12,1A11,11,0,1,0,23,12,11,11,0,0,0,12,1Zm0,19a8,8,0,1,1,8-8A8,8,0,0,1,12,20Z\\\" opacity=\\\".25\\\"/><path fill=\\\"currentColor\\\" d=\\\"M10.14,1.16a11,11,0,0,0-9,8.92A1.59,1.59,0,0,0,2.46,12,1.52,1.52,0,0,0,4.11,10.7a8,8,0,0,1,6.66-6.61A1.42,1.42,0,0,0,12,2.69h0A1.57,1.57,0,0,0,10.14,1.16Z\\\"><animateTransform attributeName=\\\"transform\\\" dur=\\\"0.75s\\\" repeatCount=\\\"indefinite\\\" type=\\\"rotate\\\" values=\\\"0 12 12;360 12 12\\\"/></path>\"},\n}\n","import { KUN_BUNDLED_ICONS } from './icons-data'\n\n// Iconify-compatible icon shape: `body` is the inner SVG markup (using\n// `currentColor`), rendered into a `0 0 width height` viewBox (default 24).\nexport interface KunIconData {\n body: string\n width?: number\n height?: number\n}\n\n// The registry is SEEDED with KunUI's bundled internal icons (referenced via\n// the data import, so it is never tree-shaken away — no side-effect needed).\n// Consumers add their own icons with registerKunIcon(s). KunIcon renders from\n// this registry and NEVER fetches from a network/API.\nconst registry = new Map<string, KunIconData>(Object.entries(KUN_BUNDLED_ICONS))\n\nexport const registerKunIcon = (name: string, data: KunIconData): void => {\n registry.set(name, data)\n}\n\n// Bulk register — pass a Record<name, data>, e.g. icons extracted from\n// `@iconify-json/*` at build time, or your own custom SVGs.\nexport const registerKunIcons = (\n icons: Record<string, KunIconData>\n): void => {\n for (const [name, data] of Object.entries(icons)) registry.set(name, data)\n}\n\nexport const getKunIcon = (name: string): KunIconData | undefined =>\n registry.get(name)\n\nexport const hasKunIcon = (name: string): boolean => registry.has(name)\n"]}
|
package/dist/locale/en.cjs
CHANGED
|
@@ -150,6 +150,15 @@ var en_default = {
|
|
|
150
150
|
tag: "Tag {tag}",
|
|
151
151
|
removeTag: "Remove tag {tag}"
|
|
152
152
|
},
|
|
153
|
+
textSelection: {
|
|
154
|
+
copy: "Copy",
|
|
155
|
+
cut: "Cut",
|
|
156
|
+
paste: "Paste",
|
|
157
|
+
selectAll: "Select all",
|
|
158
|
+
share: "Share",
|
|
159
|
+
lookUp: "Look Up",
|
|
160
|
+
searchWeb: "Search Web"
|
|
161
|
+
},
|
|
153
162
|
upload: {
|
|
154
163
|
imageAlt: "Uploaded image",
|
|
155
164
|
cropTitle: "Crop image",
|
package/dist/locale/en.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/locale/en.json","../../src/locale/en.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/locale/en.json","../../src/locale/en.ts"],"names":[],"mappings":"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","file":"en.cjs","sourcesContent":["{\n \"name\": \"English\",\n \"code\": \"en\",\n \"messages\": {\n \"alert\": {\n \"title\": \"Confirm\",\n \"confirm\": \"OK\",\n \"cancel\": \"Cancel\"\n },\n \"autocomplete\": {\n \"clear\": \"Clear\",\n \"loading\": \"Loading…\",\n \"noResult\": \"No matching options\"\n },\n \"avatar\": {\n \"unknownUser\": \"Unknown user\"\n },\n \"avatarGroup\": {\n \"label\": \"{count} users\"\n },\n \"banner\": {\n \"label\": \"Announcement\",\n \"close\": \"Dismiss announcement\"\n },\n \"carousel\": {\n \"label\": \"Carousel\",\n \"prev\": \"Previous slide\",\n \"next\": \"Next slide\",\n \"nav\": \"Carousel navigation\",\n \"goto\": \"Go to slide {index}\"\n },\n \"chip\": {\n \"remove\": \"Remove\"\n },\n \"commandPalette\": {\n \"placeholder\": \"Search…\",\n \"empty\": \"Type to search\",\n \"noResult\": \"No results\",\n \"loading\": \"Loading…\",\n \"close\": \"Close\",\n \"hintSelect\": \"Select\",\n \"hintOpen\": \"Open\",\n \"hintClose\": \"Close\",\n \"resultCount\": \"{count} results\"\n },\n \"copy\": {\n \"copied\": \"Copied\",\n \"success\": \"Copied {text}\",\n \"failure\": \"Could not copy {text} — your browser blocked clipboard access.\"\n },\n \"datePicker\": {\n \"placeholderDay\": \"Select a date\",\n \"placeholderMonth\": \"Select a month\",\n \"placeholderYear\": \"Select a year\",\n \"clear\": \"Clear\",\n \"today\": \"Today\",\n \"close\": \"Close\",\n \"prevYear\": \"Previous year\",\n \"nextYear\": \"Next year\",\n \"prevPage\": \"Previous {unit}\",\n \"nextPage\": \"Next {unit}\",\n \"zoomOut\": \"{label} — zoom out\",\n \"unitMonth\": \"month\",\n \"unitYear\": \"year\",\n \"unitDecade\": \"decade\",\n \"monthCell\": \"{month} {year}\"\n },\n \"drawer\": {\n \"close\": \"Close drawer\"\n },\n \"fileInput\": {\n \"trigger\": \"Choose files\",\n \"selected\": \"{count} files selected\"\n },\n \"filePicker\": {\n \"tooLarge\": \"{name} exceeds the {size} size limit\"\n },\n \"input\": {\n \"clear\": \"Clear\",\n \"reveal\": \"Show password\",\n \"hide\": \"Hide password\"\n },\n \"lightbox\": {\n \"label\": \"Image viewer\",\n \"close\": \"Close\",\n \"prev\": \"Previous image\",\n \"next\": \"Next image\",\n \"goto\": \"Go to image {index}\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"rotateLeft\": \"Rotate 90° left\",\n \"rotateRight\": \"Rotate 90° right\",\n \"reset\": \"Reset zoom, rotation and position\",\n \"download\": \"Download\"\n },\n \"lightboxGallery\": {\n \"view\": \"View full size\"\n },\n \"loading\": {\n \"description\": \"Loading…\"\n },\n \"loli\": {\n \"close\": \"Close\"\n },\n \"message\": {\n \"close\": \"Close\"\n },\n \"modal\": {\n \"close\": \"Close\"\n },\n \"null\": {\n \"description\": \"Nothing here yet\"\n },\n \"numberInput\": {\n \"decrement\": \"Decrease\",\n \"increment\": \"Increase\"\n },\n \"pagination\": {\n \"nav\": \"Pagination\",\n \"prev\": \"Previous page\",\n \"next\": \"Next page\",\n \"page\": \"Page {page}\",\n \"hintBefore\": \"Use\",\n \"hintAfter\": \"to turn pages quickly\",\n \"jumpLabel\": \"Go to page\",\n \"jump\": \"Go\"\n },\n \"pinInput\": {\n \"label\": \"Verification code\",\n \"digit\": \"{label} digit {index}\"\n },\n \"reaction\": {\n \"label\": \"Like\"\n },\n \"select\": {\n \"searchPlaceholder\": \"Search…\",\n \"noResult\": \"No matching options\",\n \"loading\": \"Loading…\",\n \"clear\": \"Clear\",\n \"removeOption\": \"Remove {label}\"\n },\n \"spoiler\": {\n \"copyCode\": \"Copy code\",\n \"reveal\": \"Spoiler — click or press Enter to reveal\"\n },\n \"tagInput\": {\n \"tag\": \"Tag {tag}\",\n \"removeTag\": \"Remove tag {tag}\"\n },\n \"textSelection\": {\n \"copy\": \"Copy\",\n \"cut\": \"Cut\",\n \"paste\": \"Paste\",\n \"selectAll\": \"Select all\",\n \"share\": \"Share\",\n \"lookUp\": \"Look Up\",\n \"searchWeb\": \"Search Web\"\n },\n \"upload\": {\n \"imageAlt\": \"Uploaded image\",\n \"cropTitle\": \"Crop image\",\n \"cancel\": \"Cancel\",\n \"confirm\": \"OK\"\n }\n }\n}\n","import raw from './en.json'\nimport type { KunMessageCatalog } from './types'\n\n// Its own entry point (`@kungal/ui-core/locale/en`) so a zh-CN app never\n// bundles it. Every locale after this one follows the same shape.\nexport const KUN_CATALOG_EN: KunMessageCatalog = raw\n"]}
|
package/dist/locale/en.d.cts
CHANGED
package/dist/locale/en.d.ts
CHANGED
package/dist/locale/en.js
CHANGED
|
@@ -148,6 +148,15 @@ var en_default = {
|
|
|
148
148
|
tag: "Tag {tag}",
|
|
149
149
|
removeTag: "Remove tag {tag}"
|
|
150
150
|
},
|
|
151
|
+
textSelection: {
|
|
152
|
+
copy: "Copy",
|
|
153
|
+
cut: "Cut",
|
|
154
|
+
paste: "Paste",
|
|
155
|
+
selectAll: "Select all",
|
|
156
|
+
share: "Share",
|
|
157
|
+
lookUp: "Look Up",
|
|
158
|
+
searchWeb: "Search Web"
|
|
159
|
+
},
|
|
151
160
|
upload: {
|
|
152
161
|
imageAlt: "Uploaded image",
|
|
153
162
|
cropTitle: "Crop image",
|
package/dist/locale/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/locale/en.json","../../src/locale/en.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../src/locale/en.json","../../src/locale/en.ts"],"names":[],"mappings":";AAAA,IAAA,UAAA,GAAA;AAAA,EACE,IAAA,EAAQ,SAAA;AAAA,EACR,IAAA,EAAQ,IAAA;AAAA,EACR,QAAA,EAAY;AAAA,IACV,KAAA,EAAS;AAAA,MACP,KAAA,EAAS,SAAA;AAAA,MACT,OAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,YAAA,EAAgB;AAAA,MACd,KAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAW,UAAA;AAAA,MACX,QAAA,EAAY;AAAA,KACd;AAAA,IACA,MAAA,EAAU;AAAA,MACR,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,KAAA,EAAS;AAAA,KACX;AAAA,IACA,MAAA,EAAU;AAAA,MACR,KAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS,UAAA;AAAA,MACT,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,GAAA,EAAO,qBAAA;AAAA,MACP,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,cAAA,EAAkB;AAAA,MAChB,WAAA,EAAe,SAAA;AAAA,MACf,KAAA,EAAS,gBAAA;AAAA,MACT,QAAA,EAAY,YAAA;AAAA,MACZ,OAAA,EAAW,UAAA;AAAA,MACX,KAAA,EAAS,OAAA;AAAA,MACT,UAAA,EAAc,QAAA;AAAA,MACd,QAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAa,OAAA;AAAA,MACb,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,MAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAW,eAAA;AAAA,MACX,OAAA,EAAW;AAAA,KACb;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,cAAA,EAAkB,eAAA;AAAA,MAClB,gBAAA,EAAoB,gBAAA;AAAA,MACpB,eAAA,EAAmB,eAAA;AAAA,MACnB,KAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAS,OAAA;AAAA,MACT,QAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAY,WAAA;AAAA,MACZ,QAAA,EAAY,iBAAA;AAAA,MACZ,QAAA,EAAY,aAAA;AAAA,MACZ,OAAA,EAAW,oBAAA;AAAA,MACX,SAAA,EAAa,OAAA;AAAA,MACb,QAAA,EAAY,MAAA;AAAA,MACZ,UAAA,EAAc,QAAA;AAAA,MACd,SAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAU;AAAA,MACR,KAAA,EAAS;AAAA,KACX;AAAA,IACA,SAAA,EAAa;AAAA,MACX,OAAA,EAAW,cAAA;AAAA,MACX,QAAA,EAAY;AAAA,KACd;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,QAAA,EAAY;AAAA,KACd;AAAA,IACA,KAAA,EAAS;AAAA,MACP,KAAA,EAAS,OAAA;AAAA,MACT,MAAA,EAAU,eAAA;AAAA,MACV,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS,cAAA;AAAA,MACT,KAAA,EAAS,OAAA;AAAA,MACT,IAAA,EAAQ,gBAAA;AAAA,MACR,IAAA,EAAQ,YAAA;AAAA,MACR,IAAA,EAAQ,qBAAA;AAAA,MACR,MAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAW,UAAA;AAAA,MACX,UAAA,EAAc,iBAAA;AAAA,MACd,WAAA,EAAe,kBAAA;AAAA,MACf,KAAA,EAAS,mCAAA;AAAA,MACT,QAAA,EAAY;AAAA,KACd;AAAA,IACA,eAAA,EAAmB;AAAA,MACjB,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,OAAA,EAAW;AAAA,MACT,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,KAAA,EAAS;AAAA,KACX;AAAA,IACA,OAAA,EAAW;AAAA,MACT,KAAA,EAAS;AAAA,KACX;AAAA,IACA,KAAA,EAAS;AAAA,MACP,KAAA,EAAS;AAAA,KACX;AAAA,IACA,IAAA,EAAQ;AAAA,MACN,WAAA,EAAe;AAAA,KACjB;AAAA,IACA,WAAA,EAAe;AAAA,MACb,SAAA,EAAa,UAAA;AAAA,MACb,SAAA,EAAa;AAAA,KACf;AAAA,IACA,UAAA,EAAc;AAAA,MACZ,GAAA,EAAO,YAAA;AAAA,MACP,IAAA,EAAQ,eAAA;AAAA,MACR,IAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAQ,aAAA;AAAA,MACR,UAAA,EAAc,KAAA;AAAA,MACd,SAAA,EAAa,uBAAA;AAAA,MACb,SAAA,EAAa,YAAA;AAAA,MACb,IAAA,EAAQ;AAAA,KACV;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS,mBAAA;AAAA,MACT,KAAA,EAAS;AAAA,KACX;AAAA,IACA,QAAA,EAAY;AAAA,MACV,KAAA,EAAS;AAAA,KACX;AAAA,IACA,MAAA,EAAU;AAAA,MACR,iBAAA,EAAqB,SAAA;AAAA,MACrB,QAAA,EAAY,qBAAA;AAAA,MACZ,OAAA,EAAW,UAAA;AAAA,MACX,KAAA,EAAS,OAAA;AAAA,MACT,YAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAW;AAAA,MACT,QAAA,EAAY,WAAA;AAAA,MACZ,MAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAY;AAAA,MACV,GAAA,EAAO,WAAA;AAAA,MACP,SAAA,EAAa;AAAA,KACf;AAAA,IACA,aAAA,EAAiB;AAAA,MACf,IAAA,EAAQ,MAAA;AAAA,MACR,GAAA,EAAO,KAAA;AAAA,MACP,KAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAa,YAAA;AAAA,MACb,KAAA,EAAS,OAAA;AAAA,MACT,MAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAa;AAAA,KACf;AAAA,IACA,MAAA,EAAU;AAAA,MACR,QAAA,EAAY,gBAAA;AAAA,MACZ,SAAA,EAAa,YAAA;AAAA,MACb,MAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAW;AAAA;AACb;AAEJ,CAAA;;;AChKO,IAAM,cAAA,GAAoC","file":"en.js","sourcesContent":["{\n \"name\": \"English\",\n \"code\": \"en\",\n \"messages\": {\n \"alert\": {\n \"title\": \"Confirm\",\n \"confirm\": \"OK\",\n \"cancel\": \"Cancel\"\n },\n \"autocomplete\": {\n \"clear\": \"Clear\",\n \"loading\": \"Loading…\",\n \"noResult\": \"No matching options\"\n },\n \"avatar\": {\n \"unknownUser\": \"Unknown user\"\n },\n \"avatarGroup\": {\n \"label\": \"{count} users\"\n },\n \"banner\": {\n \"label\": \"Announcement\",\n \"close\": \"Dismiss announcement\"\n },\n \"carousel\": {\n \"label\": \"Carousel\",\n \"prev\": \"Previous slide\",\n \"next\": \"Next slide\",\n \"nav\": \"Carousel navigation\",\n \"goto\": \"Go to slide {index}\"\n },\n \"chip\": {\n \"remove\": \"Remove\"\n },\n \"commandPalette\": {\n \"placeholder\": \"Search…\",\n \"empty\": \"Type to search\",\n \"noResult\": \"No results\",\n \"loading\": \"Loading…\",\n \"close\": \"Close\",\n \"hintSelect\": \"Select\",\n \"hintOpen\": \"Open\",\n \"hintClose\": \"Close\",\n \"resultCount\": \"{count} results\"\n },\n \"copy\": {\n \"copied\": \"Copied\",\n \"success\": \"Copied {text}\",\n \"failure\": \"Could not copy {text} — your browser blocked clipboard access.\"\n },\n \"datePicker\": {\n \"placeholderDay\": \"Select a date\",\n \"placeholderMonth\": \"Select a month\",\n \"placeholderYear\": \"Select a year\",\n \"clear\": \"Clear\",\n \"today\": \"Today\",\n \"close\": \"Close\",\n \"prevYear\": \"Previous year\",\n \"nextYear\": \"Next year\",\n \"prevPage\": \"Previous {unit}\",\n \"nextPage\": \"Next {unit}\",\n \"zoomOut\": \"{label} — zoom out\",\n \"unitMonth\": \"month\",\n \"unitYear\": \"year\",\n \"unitDecade\": \"decade\",\n \"monthCell\": \"{month} {year}\"\n },\n \"drawer\": {\n \"close\": \"Close drawer\"\n },\n \"fileInput\": {\n \"trigger\": \"Choose files\",\n \"selected\": \"{count} files selected\"\n },\n \"filePicker\": {\n \"tooLarge\": \"{name} exceeds the {size} size limit\"\n },\n \"input\": {\n \"clear\": \"Clear\",\n \"reveal\": \"Show password\",\n \"hide\": \"Hide password\"\n },\n \"lightbox\": {\n \"label\": \"Image viewer\",\n \"close\": \"Close\",\n \"prev\": \"Previous image\",\n \"next\": \"Next image\",\n \"goto\": \"Go to image {index}\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"rotateLeft\": \"Rotate 90° left\",\n \"rotateRight\": \"Rotate 90° right\",\n \"reset\": \"Reset zoom, rotation and position\",\n \"download\": \"Download\"\n },\n \"lightboxGallery\": {\n \"view\": \"View full size\"\n },\n \"loading\": {\n \"description\": \"Loading…\"\n },\n \"loli\": {\n \"close\": \"Close\"\n },\n \"message\": {\n \"close\": \"Close\"\n },\n \"modal\": {\n \"close\": \"Close\"\n },\n \"null\": {\n \"description\": \"Nothing here yet\"\n },\n \"numberInput\": {\n \"decrement\": \"Decrease\",\n \"increment\": \"Increase\"\n },\n \"pagination\": {\n \"nav\": \"Pagination\",\n \"prev\": \"Previous page\",\n \"next\": \"Next page\",\n \"page\": \"Page {page}\",\n \"hintBefore\": \"Use\",\n \"hintAfter\": \"to turn pages quickly\",\n \"jumpLabel\": \"Go to page\",\n \"jump\": \"Go\"\n },\n \"pinInput\": {\n \"label\": \"Verification code\",\n \"digit\": \"{label} digit {index}\"\n },\n \"reaction\": {\n \"label\": \"Like\"\n },\n \"select\": {\n \"searchPlaceholder\": \"Search…\",\n \"noResult\": \"No matching options\",\n \"loading\": \"Loading…\",\n \"clear\": \"Clear\",\n \"removeOption\": \"Remove {label}\"\n },\n \"spoiler\": {\n \"copyCode\": \"Copy code\",\n \"reveal\": \"Spoiler — click or press Enter to reveal\"\n },\n \"tagInput\": {\n \"tag\": \"Tag {tag}\",\n \"removeTag\": \"Remove tag {tag}\"\n },\n \"textSelection\": {\n \"copy\": \"Copy\",\n \"cut\": \"Cut\",\n \"paste\": \"Paste\",\n \"selectAll\": \"Select all\",\n \"share\": \"Share\",\n \"lookUp\": \"Look Up\",\n \"searchWeb\": \"Search Web\"\n },\n \"upload\": {\n \"imageAlt\": \"Uploaded image\",\n \"cropTitle\": \"Crop image\",\n \"cancel\": \"Cancel\",\n \"confirm\": \"OK\"\n }\n }\n}\n","import raw from './en.json'\nimport type { KunMessageCatalog } from './types'\n\n// Its own entry point (`@kungal/ui-core/locale/en`) so a zh-CN app never\n// bundles it. Every locale after this one follows the same shape.\nexport const KUN_CATALOG_EN: KunMessageCatalog = raw\n"]}
|
|
@@ -160,6 +160,17 @@ interface KunMessages {
|
|
|
160
160
|
tag: string;
|
|
161
161
|
removeTag: string;
|
|
162
162
|
};
|
|
163
|
+
/** The menu a text field shows over its selection. Flutter only: on the
|
|
164
|
+
* web the browser draws that menu, so no web component renders these. */
|
|
165
|
+
textSelection: {
|
|
166
|
+
copy: string;
|
|
167
|
+
cut: string;
|
|
168
|
+
paste: string;
|
|
169
|
+
selectAll: string;
|
|
170
|
+
share: string;
|
|
171
|
+
lookUp: string;
|
|
172
|
+
searchWeb: string;
|
|
173
|
+
};
|
|
163
174
|
upload: {
|
|
164
175
|
imageAlt: string;
|
|
165
176
|
cropTitle: string;
|
|
@@ -160,6 +160,17 @@ interface KunMessages {
|
|
|
160
160
|
tag: string;
|
|
161
161
|
removeTag: string;
|
|
162
162
|
};
|
|
163
|
+
/** The menu a text field shows over its selection. Flutter only: on the
|
|
164
|
+
* web the browser draws that menu, so no web component renders these. */
|
|
165
|
+
textSelection: {
|
|
166
|
+
copy: string;
|
|
167
|
+
cut: string;
|
|
168
|
+
paste: string;
|
|
169
|
+
selectAll: string;
|
|
170
|
+
share: string;
|
|
171
|
+
lookUp: string;
|
|
172
|
+
searchWeb: string;
|
|
173
|
+
};
|
|
163
174
|
upload: {
|
|
164
175
|
imageAlt: string;
|
|
165
176
|
cropTitle: string;
|