@godxjp/ui 2.2.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/BRAND.md +39 -29
  2. package/CHANGELOG.md +554 -10
  3. package/README.md +143 -168
  4. package/config/eslint.js +54 -0
  5. package/config/prettier.cjs +20 -0
  6. package/config/tsconfig.base.json +22 -0
  7. package/config/vitest.base.ts +26 -0
  8. package/dist/MiniMonth-YAmPGEpC.d.ts +143 -0
  9. package/dist/Table.types-BbsxoIYE.d.ts +352 -0
  10. package/dist/color-DO0qqUAb.d.ts +38 -0
  11. package/dist/components/composites.d.ts +963 -0
  12. package/dist/components/composites.js +7340 -0
  13. package/dist/components/composites.js.map +1 -0
  14. package/dist/components/primitives.d.ts +2633 -163
  15. package/dist/components/primitives.js +7264 -165
  16. package/dist/components/primitives.js.map +1 -1
  17. package/dist/components/shell.d.ts +82 -12
  18. package/dist/components/shell.js +168 -162
  19. package/dist/components/shell.js.map +1 -1
  20. package/dist/hooks.d.ts +83 -8
  21. package/dist/hooks.js +497 -83
  22. package/dist/hooks.js.map +1 -1
  23. package/dist/i18n.d.ts +55 -3
  24. package/dist/i18n.js +456 -5
  25. package/dist/i18n.js.map +1 -1
  26. package/dist/index.d.ts +24 -5
  27. package/dist/index.js +12522 -267
  28. package/dist/index.js.map +1 -1
  29. package/dist/padding-DY0JV5Ja.d.ts +16 -0
  30. package/dist/preferences.d.ts +132 -0
  31. package/dist/preferences.js +262 -0
  32. package/dist/preferences.js.map +1 -0
  33. package/dist/props.d.ts +86 -0
  34. package/dist/props.js +16 -0
  35. package/dist/props.js.map +1 -0
  36. package/dist/size-CQwNvOWd.d.ts +19 -0
  37. package/dist/{data.d.ts → types-LTj-2bl-.d.ts} +7 -12
  38. package/dist/useTableViews-D5NIAJ7h.d.ts +154 -0
  39. package/package.json +92 -35
  40. package/src/tokens/tailwind.css +158 -0
  41. package/dist/components/screens.d.ts +0 -51
  42. package/dist/components/screens.js +0 -806
  43. package/dist/components/screens.js.map +0 -1
  44. package/dist/data.js +0 -93
  45. package/dist/data.js.map +0 -1
  46. package/src/tokens/tokens-ext.css +0 -401
  47. package/src/tokens/tokens.css +0 -765
@@ -1,113 +1,823 @@
1
1
  import { ClassValue } from 'clsx';
2
+ import { m as TableProps } from '../Table.types-BbsxoIYE.js';
3
+ export { A as Align, B as Breakpoint, G as GutterValue, J as Justify, R as Row, a as RowProps, b as TableColumn, d as TableColumnVisibility, e as TableDensity, n as TableRowKey, o as TableSelectionConfig, p as TableSort, q as TableSortState, x as Tag, y as TagPresetColor, z as TagProps, C as useRowGutter } from '../Table.types-BbsxoIYE.js';
2
4
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
5
  import * as react from 'react';
4
- import { ComponentProps, ReactNode, TextareaHTMLAttributes, HTMLAttributes } from 'react';
6
+ import { ComponentProps, ReactNode, CSSProperties, TextareaHTMLAttributes, FocusEvent, HTMLAttributes, LabelHTMLAttributes, ReactElement, ComponentPropsWithoutRef, FormHTMLAttributes, RefObject } from 'react';
7
+ import { S as SizeProp, I as IconSizeProp } from '../size-CQwNvOWd.js';
8
+ export { a as SizeWithXSProp } from '../size-CQwNvOWd.js';
9
+ import { LoadingProp } from '../props.js';
10
+ export { AlignProp, HelpToneProp, LoadingKind, LoadingOptions, NormalizedLoading, OrientationProp, PlacementProp, SideProp, StatusProp, ToneProp, normalizeLoading } from '../props.js';
11
+ import { C as ColorProp, F as FeedbackColorProp } from '../color-DO0qqUAb.js';
12
+ export { D as DensityProp } from '../color-DO0qqUAb.js';
13
+ export { P as PaddingProp } from '../padding-DY0JV5Ja.js';
14
+ import { FieldValues, UseFormReturn, DefaultValues, Resolver, UseFormProps, FieldPath } from 'react-hook-form';
15
+ export { useFormContext } from 'react-hook-form';
16
+ import { T as TimeLocale, C as CalendarEvent, E as EventBlockVariant } from '../MiniMonth-YAmPGEpC.js';
17
+ export { a as CalendarRef, D as DEFAULT_GRID, M as MiniMonth, b as MiniMonthProps, c as MiniMonthYMD, d as MonthCellRef, P as PersonRef, S as SegmentedControl, e as SegmentedControlItem, f as SegmentedControlOrientation, g as SegmentedControlProps, h as SegmentedControlSize, i as SegmentedControlVariant, j as buildMonthGrid, k as fmtHour, m as minToY, p as parseHM, y as ymd } from '../MiniMonth-YAmPGEpC.js';
5
18
  import * as LabelPrimitive from '@radix-ui/react-label';
6
19
  import * as TabsPrimitive from '@radix-ui/react-tabs';
7
20
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
8
21
  import * as PopoverPrimitive from '@radix-ui/react-popover';
9
22
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
10
- import { DayPickerProps } from 'react-day-picker';
23
+ import { DateValue, CalendarProps as CalendarProps$1, DateFieldProps as DateFieldProps$1, DatePickerProps as DatePickerProps$1, DateRangePickerProps as DateRangePickerProps$1, TimeValue, TimeFieldProps as TimeFieldProps$1 } from 'react-aria-components';
24
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
25
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
26
+ import * as SelectPrimitive from '@radix-ui/react-select';
27
+ import * as SwitchPrimitive from '@radix-ui/react-switch';
28
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
29
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
30
+ import * as SliderPrimitive from '@radix-ui/react-slider';
31
+ import { ToasterProps } from 'sonner';
32
+ export { ToasterProps, toast } from 'sonner';
33
+ import { CalendarDate, CalendarDateTime, ZonedDateTime } from '@internationalized/date';
34
+ import '@tanstack/react-table';
11
35
 
12
36
  declare function cn(...inputs: ClassValue[]): string;
13
37
 
38
+ interface ColProps extends ComponentProps<"div"> {
39
+ /** Default span (1..24). 24 = full width. */
40
+ span?: number;
41
+ /** Offset by n columns (1..23). */
42
+ offset?: number;
43
+ /** Push by n columns (flex-order shift). */
44
+ push?: number;
45
+ /** Per-breakpoint span overrides. */
46
+ xs?: number;
47
+ sm?: number;
48
+ md?: number;
49
+ lg?: number;
50
+ xl?: number;
51
+ xxl?: number;
52
+ /** Flex order on the main axis. */
53
+ order?: number;
54
+ /** When set, the Col grows/shrinks like `flex: <n>` (free width). */
55
+ flex?: string | number;
56
+ children?: ReactNode;
57
+ }
58
+ declare function Col({ span, offset, push, xs, sm, md, lg, xl, xxl, order, flex, className, style, children, ...rest }: ColProps): react_jsx_runtime.JSX.Element;
59
+
60
+ /** Flex gap scale. Accepts the shared `SizeProp` vocabulary plus a raw
61
+ * pixel number for one-off gaps. Renamed from Ant's `"middle"` →
62
+ * `"default"` to match the framework-wide size axis. */
63
+ type FlexGap = number | SizeProp;
64
+ type FlexJustify = "start" | "end" | "center" | "space-between" | "space-around" | "space-evenly";
65
+ type FlexAlign = "start" | "end" | "center" | "stretch" | "baseline";
66
+ interface FlexProps extends ComponentProps<"div"> {
67
+ /** Direction — false / undefined = horizontal, true = vertical. */
68
+ vertical?: boolean;
69
+ /** Wrap mode. */
70
+ wrap?: boolean | "nowrap" | "wrap" | "wrap-reverse";
71
+ /** Gap between children. Token name or pixel number. */
72
+ gap?: FlexGap;
73
+ justify?: FlexJustify;
74
+ align?: FlexAlign;
75
+ /** flex value for the container itself (rare — usually parent sets it). */
76
+ flex?: string | number;
77
+ children?: ReactNode;
78
+ }
79
+ declare function Flex({ vertical, wrap, gap, justify, align, flex, className, style, children, ...rest }: FlexProps): react_jsx_runtime.JSX.Element;
80
+
81
+ /** Inline-spacing scale. Accepts the shared `SizeProp` vocabulary plus
82
+ * a raw pixel number for one-off gaps. Renamed from Ant's `"middle"`
83
+ * → `"default"` to match the framework-wide size axis. */
84
+ type SpaceSize = number | SizeProp;
85
+ interface SpaceProps extends ComponentProps<"div"> {
86
+ /** Gap between adjacent children. */
87
+ size?: SpaceSize | [SpaceSize, SpaceSize];
88
+ /** Vertical stack instead of horizontal row. */
89
+ direction?: "horizontal" | "vertical";
90
+ /** Allow wrapping when row overflows. */
91
+ wrap?: boolean;
92
+ /** Cross-axis alignment. */
93
+ align?: "start" | "end" | "center" | "baseline";
94
+ /** Separator rendered between siblings (e.g. a divider). */
95
+ split?: ReactNode;
96
+ children?: ReactNode;
97
+ }
98
+ declare function Space({ size, direction, wrap, align, split, className, style, children, ...rest }: SpaceProps): react_jsx_runtime.JSX.Element;
99
+
14
100
  /**
15
- * Badge — status pill with a colored dot + label.
101
+ * Badge — status pill / chip.
102
+ *
103
+ * Renders the canonical `.chip` class family from the dxs-kintai
104
+ * design system (comp-badges.html). Two appearance modes per
105
+ * SKILL.md:
16
106
  *
17
- * Renders the canonical `.badge` class from `@godxjp/ui/tokens` so the
18
- * visual layer is mastered in CSS (not Tailwind utilities). All six
19
- * variants map onto a semantic role from the brand bible:
107
+ * `appearance="soft"` (default) translucent role tint. Use for
108
+ * transient state 申請中 (in review), draft, pending.
109
+ * `appearance="solid"` — full role color. Use for terminal
110
+ * state — 承認済 (approved), 却下 (rejected).
111
+ * • `appearance="outline"` — hairline border only.
112
+ *
113
+ * Variants map to semantic roles:
20
114
  *
21
115
  * - `success` — 若竹 task completed, healthy
22
116
  * - `warning` — 山吹 needs attention, not yet broken
23
117
  * - `info` — 群青 neutral state callout
24
- * - `error` — 茜 failed / blocked
25
- * - `attention`— 朱 pending, awaiting input
26
- * - `neutral` — grey default chrome
27
- * - `outline` — empty hairline only (rare)
118
+ * - `error` — 茜 failed / blocked (emits `chip-destructive`)
119
+ * - `attention`— 朱 pending, awaiting input (prefer over `error`
120
+ * for non-destructive alerts per SKILL.md)
121
+ * - `primary` — brand action
122
+ * - `neutral` — grey default chrome (omitted variant suffix; base
123
+ * `.chip` styling)
124
+ * - `outline` — empty hairline only (rare; same as
125
+ * `appearance="outline"` with no role)
28
126
  *
29
127
  * @example
30
- * <Badge variant="success" dot>Healthy</Badge>
31
- * <Badge variant="error">Failed</Badge>
128
+ * <Badge variant="success" dot>Healthy</Badge> // soft (default)
129
+ * <Badge variant="success" appearance="solid">承認済</Badge>
130
+ * <Badge variant="destructive" appearance="solid">却下</Badge>
131
+ * <Badge variant="attention" dot>遅刻</Badge>
32
132
  */
33
- type BadgeVariant = "success" | "warning" | "info" | "error" | "attention" | "neutral" | "outline";
133
+ type BadgeVariant = "primary" | "success" | "warning" | "info" | "destructive" | "attention" | "neutral" | "outline";
134
+ type BadgeAppearance = "soft" | "solid" | "outline";
34
135
  interface BadgeProps extends ComponentProps<"span"> {
35
136
  variant?: BadgeVariant;
137
+ appearance?: BadgeAppearance;
36
138
  /** When true renders a colored dot before the label. */
37
139
  dot?: boolean;
38
140
  children?: ReactNode;
39
141
  }
40
- declare function Badge({ variant, dot, className, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
142
+ declare function Badge({ variant, appearance, dot, className, children, ...rest }: BadgeProps): react_jsx_runtime.JSX.Element;
41
143
 
42
144
  /**
43
- * Button — canonical action atom.
145
+ * Button — canonical action primitive.
44
146
  *
45
- * Maps onto the `.btn` family in tokens.css:
147
+ * 100% mapped to the dxs-kintai design canon
148
+ * (`design-handoff/ui-system/dxs-kintai-design-system/project/preview/
149
+ * comp-buttons.html`):
46
150
  *
47
- * primary filled, brand color, default action
48
- * secondary bordered, foreground text, neutral surface
49
- * ghost — transparent, foreground text, hover surface
50
- * danger — destructive, --destructive bg
151
+ * Variants: primary · secondary · outline · ghost · destructive · link
152
+ * Sizes: x-small · small · default · large
51
153
  *
52
- * Sizes mirror density tokens:
53
- * sm 28 px height (compact action bar)
54
- * md 32 px height (default)
55
- * lg 36 px height (page hero CTA)
154
+ * Cardinal rules honoured:
155
+ * §14 shadcn / Radix recipe (Slot for asChild)
156
+ * §21 every axis (theme/accent/density/font-size)
157
+ * §22 every literal token-pinned (height = --density-element-*)
158
+ * §23 — vocabulary (`size` + `variant` per docs/specs/04 §B)
159
+ * §24 — mobile touch target handled without changing visual size
56
160
  *
57
- * Supports `asChild` (Radix Slot pattern) so the button styles can wrap
58
- * a Link or any other element without nesting:
161
+ * Slot props (§N):
162
+ * startContent ReactNode rendered before children (left icon)
163
+ * endContent — ReactNode rendered after children (right icon)
59
164
  *
60
- * @example
61
- * <Button variant="primary">Save</Button>
62
- * <Button asChild variant="ghost"><a href="/docs">Docs</a></Button>
165
+ * When `asChild` is true, Radix Slot merges Button's classes onto
166
+ * the caller's single child element. The slot props
167
+ * (`startContent` / `endContent` / `loading` spinner) are then
168
+ * INERT — the caller's element owns its content. Compose icons
169
+ * inline inside the slotted element:
170
+ *
171
+ * <Button asChild>
172
+ * <a href="/x"><Icon /> Label</a> ← icon wired inline
173
+ * </Button>
174
+ *
175
+ * <Button asChild startContent={<Icon />}>← `startContent` IGNORED
176
+ * <a href="/x">Label</a>
177
+ * </Button>
63
178
  */
64
- type ButtonVariant = "primary" | "secondary" | "ghost" | "danger";
65
- type ButtonSize = "sm" | "md" | "lg";
66
- interface ButtonProps extends ComponentProps<"button"> {
179
+ type ButtonVariant = "primary" | "secondary" | "outline" | "ghost" | "destructive" | "link";
180
+ type ButtonSize = "x-small" | "small" | "default" | "large";
181
+ interface ButtonProps extends Omit<ComponentProps<"button">, "size"> {
182
+ /** Visual treatment per design canon `.btn-<variant>`. */
67
183
  variant?: ButtonVariant;
184
+ /** Dimensional scale per `--density-element-<size>` chain. */
68
185
  size?: ButtonSize;
186
+ /** Stretch to fill parent's width (mobile form submit pattern). */
187
+ block?: boolean;
188
+ /** Show a spinner + disable interaction. */
189
+ loading?: boolean;
190
+ /** Icon slot rendered before the label. */
191
+ startContent?: ReactNode;
192
+ /** Icon slot rendered after the label. */
193
+ endContent?: ReactNode;
194
+ /** Radix Slot pattern — wrap a link / RouterLink without nesting. */
69
195
  asChild?: boolean;
70
196
  children?: ReactNode;
71
197
  }
72
- declare function Button({ variant, size, asChild, className, type, children, ...rest }: ButtonProps): react_jsx_runtime.JSX.Element;
198
+ declare const Button: react.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
73
199
 
74
200
  /**
75
- * Card — surface container for grouped content.
201
+ * Card — surface container. 100% mapped to the dxs-kintai design canon
202
+ * (`design-handoff/ui-system/dxs-kintai-design-system/project/preview/
203
+ * comp-card.html`).
204
+ *
205
+ * One atom (`.card`, 1px border, 6px radius, `var(--card)` bg,
206
+ * no shadow at rest) + four orthogonal prop axes:
207
+ *
208
+ * - `padding` — tight / default / cozy / none (12 / 16 / 20 / 0)
209
+ * - `tone` — default / muted / outline-only
210
+ * - `accent` — primary / success / warning / attention / info /
211
+ * destructive / featured (3px left edge or full ring)
212
+ * - `hoverable`
76
213
  *
77
- * The atom hierarchy mirrors the `.card`/`.card-header`/`.card-title`
78
- * classes in tokens.css. Compose as:
214
+ * Plus a `band` prop for the H11 color-strip variant (4px strip
215
+ * above the header).
79
216
  *
80
- * <Card>
81
- * <CardHeader>
82
- * <CardTitle>Pull requests</CardTitle>
83
- * <CardSubtitle>Open / merged this week</CardSubtitle>
84
- * </CardHeader>
85
- * <CardContent>...</CardContent>
86
- * </Card>
217
+ * Header shape auto-detects from the slot props:
218
+ *
219
+ * - `kicker` set → `.ch-kicker` (3-tier
220
+ * column: kicker / title /
221
+ * subtitle)
222
+ * - `subtitle` set, no `kicker` → `.ch-stack` (2-tier
223
+ * column: title /
224
+ * subtitle)
225
+ * - `meta` set, no `subtitle`/`kicker` → `.ch` row with meta
226
+ * right-aligned
227
+ * (margin-left: auto)
228
+ * - just `title` → `.ch` row, title only
229
+ *
230
+ * `extra` always renders right-aligned at the end of the header row
231
+ * (works with all three shapes). Used for action buttons + tags
232
+ * (H4/H5/H7 patterns).
233
+ *
234
+ * For flush cards with internal sections (H1-H17 variants), use
235
+ * `padding="none"` plus `footer` / `actions` and normal body content.
87
236
  */
88
- declare function Card({ className, ...rest }: ComponentProps<"div">): react_jsx_runtime.JSX.Element;
89
- declare function CardHeader({ className, ...rest }: ComponentProps<"div">): react_jsx_runtime.JSX.Element;
90
- declare function CardTitle({ className, ...rest }: ComponentProps<"h3">): react_jsx_runtime.JSX.Element;
91
- interface CardSubtitleProps extends ComponentProps<"p"> {
92
- children?: ReactNode;
237
+ type CardPadding = "tight" | "default" | "cozy" | "none";
238
+ type CardTone = "default" | "muted" | "outline-only";
239
+ type CardAccent = "primary" | "success" | "warning" | "attention" | "info" | "destructive" | "featured";
240
+ type CardBand = "primary" | "success" | "warning" | "attention" | "info" | "destructive" | "gradient" | "dotted";
241
+ interface CardProps extends Omit<ComponentProps<"div">, "title"> {
242
+ /** Card title — H1/H2/H3/H12 `<span class="t">…</span>`. */
243
+ title?: ReactNode;
244
+ /** Sub-text stacked BELOW the title (H2 `.ch-stack .sub`). */
245
+ subtitle?: ReactNode;
246
+ /** Small uppercase label ABOVE the title (H12 `.ch-kicker .k`). */
247
+ kicker?: ReactNode;
248
+ /** Right-aligned secondary text (H3 `.ch .sub` with margin-left:auto). */
249
+ meta?: ReactNode;
250
+ /** Right-aligned action slot — buttons, tags, status indicators. */
251
+ extra?: ReactNode;
252
+ /** Color strip above the header (4px, semantic). */
253
+ band?: CardBand;
254
+ /** Footer slot rendered with top divider + muted secondary tint. */
255
+ footer?: ReactNode;
256
+ /** Right-aligned action bar footer — no divider tint, transparent bg. */
257
+ actions?: ReactNode;
258
+ /** Padding density. */
259
+ padding?: CardPadding;
260
+ /** Surface tone. */
261
+ tone?: CardTone;
262
+ /** Edge accent (3px left edge, or full --primary ring for `featured`). */
263
+ accent?: CardAccent;
264
+ /** Hover affordance — border + shadow lift. */
265
+ hoverable?: boolean;
93
266
  }
94
- declare function CardSubtitle({ className, ...rest }: CardSubtitleProps): react_jsx_runtime.JSX.Element;
95
- declare function CardContent({ className, ...rest }: ComponentProps<"div">): react_jsx_runtime.JSX.Element;
267
+ declare const Card: react.ForwardRefExoticComponent<Omit<CardProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
96
268
 
97
269
  /**
98
- * Input — text input atom. Maps to `.input` in tokens.css.
270
+ * Input — text input with affix slots that match the canonical
271
+ * dxs-kintai `.input-wrap` shell.
99
272
  *
100
- * Forward-ref so consumers can wire `react-hook-form` / focus
101
- * management without escaping the design tokens.
273
+ * <Input prefix={<SearchIcon />} suffix={<EyeIcon />} />
274
+ * <Input addonBefore="https://" addonAfter=".com" />
275
+ * <Input size="large" status="error" />
276
+ *
277
+ * When `prefix` / `suffix` is provided the input is wrapped in a
278
+ * `.input-wrap` shell that owns the focus ring while the icon sits
279
+ * inside the field. When `addonBefore` / `addonAfter` is provided the
280
+ * input + addons form a connected group; the addons render inside the
281
+ * same `.input-wrap` as canonical `.affix.pre` / `.affix.suf`.
282
+ */
283
+ type InputSize = "small" | "default" | "large";
284
+ /**
285
+ * Form-field validation state per cardinal rule 23 §B vocabulary
286
+ * (`"default" | "success" | "warning" | "error"`). Drives the border
287
+ * + ring + helper-text color via the semantic chain.
102
288
  */
103
- interface InputProps extends ComponentProps<"input"> {
289
+ type InputStatus = "default" | "success" | "warning" | "error";
290
+ interface InputProps extends Omit<ComponentProps<"input">, "prefix" | "size"> {
291
+ prefix?: ReactNode;
292
+ suffix?: ReactNode;
293
+ addonBefore?: ReactNode;
294
+ addonAfter?: ReactNode;
295
+ size?: InputSize;
296
+ status?: InputStatus;
297
+ /** Padding for the inner input — usually auto-derived from prefix/suffix. */
298
+ inputStyle?: CSSProperties;
104
299
  }
105
300
  declare const Input: react.ForwardRefExoticComponent<Omit<InputProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
106
- /** Textarea — uses `.input` for shape, leaves height auto. */
107
- interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
301
+ /**
302
+ * Textarea `rows`, `autoSize`, `showCount`, `maxLength`, `resize`,
303
+ * `status`, `size`. Visual contract maps to `.input` from the canonical
304
+ * dxs-kintai design system.
305
+ *
306
+ * <Textarea rows={5} resize="vertical" />
307
+ * <Textarea autoSize={{ minRows: 3, maxRows: 8 }} showCount maxLength={500} />
308
+ */
309
+ type TextareaResize = "none" | "vertical" | "horizontal" | "both";
310
+ interface TextareaProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "size"> {
311
+ size?: InputSize;
312
+ status?: InputStatus;
313
+ /** "none" by default — matches the canonical chrome. */
314
+ resize?: TextareaResize;
315
+ /** Auto-grow on content. `true` = grow indefinitely. */
316
+ autoSize?: boolean | {
317
+ minRows?: number;
318
+ maxRows?: number;
319
+ };
320
+ /** Show character count in the bottom-right. */
321
+ showCount?: boolean;
108
322
  }
109
323
  declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.RefAttributes<HTMLTextAreaElement>>;
110
324
 
325
+ /**
326
+ * InputPassword — Input subtype with show/hide toggle.
327
+ *
328
+ * Mirrors the canonical password reveal at `K:comp-inputs.html:184-201`:
329
+ * a `<button class="pass-toggle">` absolute-positioned at `right:6px`,
330
+ * with an `Eye` / `EyeOff` icon flipping the underlying `<input>` type.
331
+ *
332
+ * Wraps `<Input>` so every base prop pass-through works (`size`,
333
+ * `status`, `prefix`, `addonBefore`, etc.). Pair with `<Checklist>`
334
+ * below to render password-strength rules.
335
+ *
336
+ * Controlled-or-uncontrolled reveal:
337
+ * - omit `revealed` → internal state
338
+ * - pass `revealed` + `onRevealChange` → fully controlled
339
+ *
340
+ * @example
341
+ * <InputPassword placeholder="••••••••••" />
342
+ *
343
+ * @example with strength meter slot
344
+ * <Field>
345
+ * <Field.Label required>パスワード</Field.Label>
346
+ * <InputPassword strengthMeter={<Checklist items={…} />} />
347
+ * </Field>
348
+ */
349
+ interface InputPasswordProps extends Omit<InputProps, "type"> {
350
+ /** Controlled reveal state. */
351
+ revealed?: boolean;
352
+ /** Default reveal state when uncontrolled. */
353
+ defaultRevealed?: boolean;
354
+ onRevealChange?: (next: boolean) => void;
355
+ /** Accessible label for the toggle button. Defaults to a translated string. */
356
+ toggleLabels?: {
357
+ show?: string;
358
+ hide?: string;
359
+ };
360
+ /** Slot rendered below the input — typically a `<Checklist>` of password rules. */
361
+ strengthMeter?: ReactNode;
362
+ }
363
+ declare const InputPassword: react.ForwardRefExoticComponent<Omit<InputPasswordProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
364
+
365
+ /**
366
+ * InputSearch — Input subtype with leading magnifier + optional clear-X.
367
+ *
368
+ * Mirrors the canonical search pattern used in `K:comp-pageheader.html`
369
+ * and `K:comp-topbar.html`. Wraps `<Input>` so every base prop
370
+ * pass-through works (`size`, `status`, etc.).
371
+ *
372
+ * Behaviour:
373
+ * - Renders a leading `<Search>` icon as the `prefix` slot.
374
+ * - Default `searchMode="submit"` fires `onSearch` only from the
375
+ * search button or Enter key. Use `searchMode="change"` for local
376
+ * in-memory filtering only.
377
+ * - When `value` is non-empty and `allowClear` is true (default),
378
+ * hides the custom suffix and renders a trailing `<X>` clear button that fires
379
+ * `onChange({ target: { value: "" } })` and `onClear()`.
380
+ *
381
+ * Controlled-or-uncontrolled. Sets `type="search"` for native semantics
382
+ * (mobile keyboards, `<form>` reset behaviour).
383
+ *
384
+ * @example
385
+ * <InputSearch placeholder="従業員を検索" />
386
+ *
387
+ * @example controlled
388
+ * <InputSearch
389
+ * value={query}
390
+ * onChange={(e) => setQuery(e.target.value)}
391
+ * onClear={() => setQuery("")}
392
+ * />
393
+ */
394
+ interface InputSearchProps extends Omit<InputProps, "type" | "prefix"> {
395
+ /** Show the trailing X clear button when value is non-empty. Default `true`. */
396
+ allowClear?: boolean;
397
+ /** Fired when the user clicks the clear button. */
398
+ onClear?: () => void;
399
+ /** Search execution mode. Default `submit` avoids request-per-keypress. */
400
+ searchMode?: "submit" | "change";
401
+ /** Fired when search should execute. */
402
+ onSearch?: (value: string) => void;
403
+ /** Custom leading icon — defaults to lucide `Search`. */
404
+ searchIcon?: React.ReactNode;
405
+ }
406
+ declare const InputSearch: react.ForwardRefExoticComponent<Omit<InputSearchProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
407
+
408
+ /**
409
+ * InputNumber — numeric input with optional ± step buttons and an
410
+ * optional display formatter / parser pair.
411
+ *
412
+ * Vocabulary per cardinal rule 23 §B:
413
+ * • `value` / `defaultValue` / `onValueChange` (Radix-style)
414
+ * • `size`: `"small" | "default" | "large"` (shared with Input)
415
+ * • `status`: `"default" | "success" | "warning" | "error"`
416
+ *
417
+ * NOT Ant-shaped: no `controls` / `formatter` / `parser`. The
418
+ * display side is a single `format` callback; the inverse parse is
419
+ * an optional `parse` callback (only needed when `format` produces
420
+ * text the browser's `Number()` can no longer round-trip).
421
+ *
422
+ * DOM mirrors `.input` from `30-input.css` with two stacked step
423
+ * buttons absolutely positioned inside the wrapper.
424
+ */
425
+ interface InputNumberProps {
426
+ value?: number;
427
+ defaultValue?: number;
428
+ onValueChange?: (value: number | null) => void;
429
+ min?: number;
430
+ max?: number;
431
+ /** Increment applied by the ± buttons + arrow keys. Default 1. */
432
+ step?: number;
433
+ /** Round to this many decimal places when emitting / blurring. */
434
+ precision?: number;
435
+ size?: InputSize;
436
+ disabled?: boolean;
437
+ readOnly?: boolean;
438
+ placeholder?: string;
439
+ /** Show +/− step buttons (default true). */
440
+ showStepper?: boolean;
441
+ /** Optional display formatter (e.g., `n => \`¥\${n.toLocaleString()}\``). */
442
+ format?: (value: number) => string;
443
+ /** Optional parser (inverse of format). Defaults to stripping non-numeric chars. */
444
+ parse?: (text: string) => number | null;
445
+ className?: string;
446
+ status?: InputStatus;
447
+ /** Forwarded `name` for native form submission. */
448
+ name?: string;
449
+ /** Forwarded `id` for label binding. */
450
+ id?: string;
451
+ onBlur?: (event: FocusEvent<HTMLInputElement>) => void;
452
+ onFocus?: (event: FocusEvent<HTMLInputElement>) => void;
453
+ }
454
+ declare const InputNumber: react.ForwardRefExoticComponent<InputNumberProps & react.RefAttributes<HTMLInputElement>>;
455
+
456
+ type FormLayout = "vertical" | "horizontal" | "inline";
457
+ interface FormProps<T extends FieldValues = FieldValues> extends Omit<ComponentProps<"form">, "onSubmit" | "defaultValue"> {
458
+ form?: UseFormReturn<T>;
459
+ defaultValues?: DefaultValues<T>;
460
+ resolver?: Resolver<T>;
461
+ mode?: UseFormProps<T>["mode"];
462
+ onSubmit?: (values: T) => void | Promise<void>;
463
+ /** Visual layout. Mobile-first: every layout collapses to vertical at `xs`;
464
+ * `horizontal` becomes label-left at `md`, `inline` becomes single-row at `sm`. */
465
+ layout?: FormLayout;
466
+ /** When set, every `<FormField>` inside this form renders its loading
467
+ * state (spinner by default, skeleton via `{ kind: "skeleton" }`).
468
+ * Each `<FormField>` can override with its own `loading` prop. */
469
+ loading?: LoadingProp;
470
+ }
471
+ /** Read the surrounding Form's loading state (used by `<FormField>`). */
472
+ declare function useFormLoading(): LoadingProp | undefined;
473
+ declare function Form<T extends FieldValues>({ form, defaultValues, resolver, mode, onSubmit, layout, loading, className, children, ...rest }: FormProps<T>): react_jsx_runtime.JSX.Element;
474
+
475
+ interface FieldProps extends HTMLAttributes<HTMLDivElement> {
476
+ label?: ReactNode;
477
+ help?: ReactNode;
478
+ description?: ReactNode;
479
+ count?: {
480
+ current: number;
481
+ max?: number;
482
+ warnAt?: number;
483
+ };
484
+ required?: boolean;
485
+ optional?: boolean;
486
+ optionalLabel?: ReactNode;
487
+ tone?: FieldHelpTone;
488
+ children: ReactNode;
489
+ }
490
+ declare const Field: react.ForwardRefExoticComponent<FieldProps & react.RefAttributes<HTMLDivElement>>;
491
+ interface FieldLabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
492
+ /** Append a red asterisk (`<span class="req">*</span>`). */
493
+ required?: boolean;
494
+ /** Append a "(optional)" marker (`<span class="opt">(任意)</span>`). */
495
+ optional?: boolean;
496
+ /** Optional label for the optional badge — defaults to "(任意)". */
497
+ optionalLabel?: ReactNode;
498
+ /** Inline help icon — typically a tooltip handle. Provide a `<span>` or `<button>`. */
499
+ info?: ReactNode;
500
+ /** Trailing slot at the right edge (e.g. an inline "Forgot password?" link). */
501
+ extra?: ReactNode;
502
+ }
503
+ type FieldHelpTone = "default" | "info" | "warn" | "error" | "success";
504
+ interface FieldHelpProps extends HTMLAttributes<HTMLDivElement> {
505
+ tone?: FieldHelpTone;
506
+ /** Sets tone to `error` — shortcut. */
507
+ error?: boolean;
508
+ /** Sets tone to `warn` — shortcut. */
509
+ warning?: boolean;
510
+ /** Sets tone to `info` — shortcut. */
511
+ info?: boolean;
512
+ /** Sets tone to `success` — shortcut. */
513
+ success?: boolean;
514
+ /** Leading icon slot. */
515
+ icon?: ReactNode;
516
+ }
517
+ interface FieldCountProps extends HTMLAttributes<HTMLDivElement> {
518
+ current: number;
519
+ max?: number;
520
+ /** Threshold (0–1) above which the count flips to "warn" tone. Default `0.9`. */
521
+ warnAt?: number;
522
+ }
523
+
524
+ interface FormFieldProps<T extends FieldValues = FieldValues, TName extends FieldPath<T> = FieldPath<T>> {
525
+ name: TName;
526
+ label?: ReactNode;
527
+ description?: ReactNode;
528
+ required?: boolean;
529
+ optional?: boolean;
530
+ /** Override the auto-derived help tone (defaults to `"error"` when invalid,
531
+ * `"default"` when `description` is set, otherwise undefined). */
532
+ tone?: FieldHelpTone;
533
+ /** Per-field loading override. `true` → spinner. `{ kind: "skeleton" }` →
534
+ * skeleton placeholder (use during initial data fetch). When omitted,
535
+ * inherits from the surrounding `<Form loading={…}>`. */
536
+ loading?: LoadingProp;
537
+ children: ReactElement;
538
+ }
539
+ /**
540
+ * Form-wired Field. Reads value/onChange/error from the surrounding
541
+ * `<Form>` via react-hook-form's `useController`, then clones its single
542
+ * child with the right adapter:
543
+ *
544
+ * - Checkbox / Switch → checked + onCheckedChange
545
+ * - InputNumber → value (number) + onValueChange
546
+ * - Select / AutoComplete / ColorPicker / RadioGroup / Rate / Slider /
547
+ * Cascader / Transfer / TreeSelect → value + onValueChange
548
+ * - default (Input / Textarea / InputSearch / etc.)
549
+ * → value + onChange(event)
550
+ */
551
+ declare function FormField<T extends FieldValues = FieldValues, TName extends FieldPath<T> = FieldPath<T>>({ name, label, description, required, optional, tone, loading, children, }: FormFieldProps<T, TName>): react_jsx_runtime.JSX.Element;
552
+
553
+ /**
554
+ * Transfer — dual list-box. Items in the left ("source") column move
555
+ * to the right ("target") column via arrow buttons; `value` tracks
556
+ * the keys currently on the right.
557
+ *
558
+ * Vocabulary per cardinal rule 23 §B:
559
+ * • `value` / `defaultValue` / `onValueChange` (Radix-style)
560
+ * — NOT `targetKeys`. The string-array carries "the chosen set",
561
+ * which on this primitive happens to be the right column.
562
+ * • `size`: `"small" | "default" | "large"`
563
+ * • `disabled` boolean
564
+ *
565
+ * DOM mirrors `.transfer` / `.transfer-list` / `.transfer-actions`
566
+ * from `30-input.css`.
567
+ */
568
+ interface TransferItem {
569
+ key: string;
570
+ label: ReactNode;
571
+ disabled?: boolean;
572
+ }
573
+ type TransferSize = "small" | "default" | "large";
574
+ interface TransferProps {
575
+ dataSource: TransferItem[];
576
+ /** Keys currently on the right ("target") column. */
577
+ value?: string[];
578
+ defaultValue?: string[];
579
+ onValueChange?: (value: string[]) => void;
580
+ /** Headers for the two columns — `[left, right]`. */
581
+ titles?: [ReactNode, ReactNode];
582
+ size?: TransferSize;
583
+ disabled?: boolean;
584
+ className?: string;
585
+ /** Search box above each column. */
586
+ showSearch?: boolean;
587
+ /** Placeholder for the search input when `showSearch` is true. */
588
+ searchPlaceholder?: string;
589
+ /** Renderer for each item label (defaults to `item.label`). */
590
+ renderItem?: (item: TransferItem) => ReactNode;
591
+ }
592
+ declare const Transfer: react.ForwardRefExoticComponent<TransferProps & react.RefAttributes<HTMLDivElement>>;
593
+
594
+ /**
595
+ * LocaleTabs — bare tab strip with status dots per locale.
596
+ *
597
+ * Mirrors the `K:comp-inputs.html:248-284` reference (pattern ①, "Locale
598
+ * tabs"). This primitive is the **header-only** subset: the consumer
599
+ * wires the panel below. For the full input + panel composition see
600
+ * the `LocaleInput` composite under `components/composites/locale-input`.
601
+ *
602
+ * Each tab carries a coloured dot signalling translation status:
603
+ * - `translated` → success (green)
604
+ * - `draft` → warning (amber, stale relative to base)
605
+ * - `missing` → destructive (red, no translation yet)
606
+ *
607
+ * The base locale (first in `locales`, or `baseLocale` if provided)
608
+ * carries a subtle "(基準 / base)" suffix so reviewers see the fallback
609
+ * source at a glance.
610
+ *
611
+ * @example
612
+ * <LocaleTabs
613
+ * locales={[
614
+ * { code: "ja", label: "日本語", status: "translated" },
615
+ * { code: "en", label: "English", status: "translated" },
616
+ * { code: "vi", label: "Tiếng Việt", status: "draft" },
617
+ * { code: "zh", label: "简体中文", status: "missing" },
618
+ * ]}
619
+ * baseLocale="ja"
620
+ * meta="3 / 4 翻訳済"
621
+ * onAdd={() => openAddLocale()}
622
+ * />
623
+ */
624
+ type LocaleTabStatus = "translated" | "draft" | "missing";
625
+ interface LocaleTabItem {
626
+ code: string;
627
+ label?: ReactNode;
628
+ status?: LocaleTabStatus;
629
+ }
630
+ interface LocaleTabsProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
631
+ locales: LocaleTabItem[];
632
+ /** Controlled active locale code. */
633
+ value?: string;
634
+ /** Uncontrolled initial locale code. */
635
+ defaultValue?: string;
636
+ onChange?: (next: string) => void;
637
+ /** Locale labelled "(基準)" in its tab. Defaults to `locales[0].code`. */
638
+ baseLocale?: string;
639
+ /** Custom label for the base-locale suffix. Defaults to "(基準)". */
640
+ baseLabel?: ReactNode;
641
+ /** Right-side meta string (e.g. "3 / 4 翻訳済"). */
642
+ meta?: ReactNode;
643
+ /** Click handler for the "⊕ 追加" button — when omitted, no button renders. */
644
+ onAdd?: () => void;
645
+ /** Label for the add button. Defaults to "⊕ 追加". */
646
+ addLabel?: ReactNode;
647
+ }
648
+ declare const LocaleTabs: react.ForwardRefExoticComponent<LocaleTabsProps & react.RefAttributes<HTMLDivElement>>;
649
+
650
+ /**
651
+ * Checklist — vertical list of pass/fail rules with per-row icon.
652
+ *
653
+ * Mirrors the canonical `.checklist` pattern from
654
+ * `K:comp-inputs.html:196-200` (password-rules) + the CSS atom in
655
+ * `shell.css` (`.checklist`, `.checklist li.ok`, `.checklist li.bad`).
656
+ * Each row carries a leading icon (check / x by default) and a label;
657
+ * row tone follows the canonical semantic palette (`--success` for ok,
658
+ * `--destructive` for bad, `--muted-foreground` for neutral / pending).
659
+ *
660
+ * Typical uses: password-rule hints, validation summaries, "tasks
661
+ * completed" lists, capability matrices.
662
+ *
663
+ * @example
664
+ * <Checklist
665
+ * items={[
666
+ * { ok: true, label: "8文字以上" },
667
+ * { ok: true, label: "大文字・小文字を含む" },
668
+ * { ok: false, label: "記号 (! @ # …) を 1 つ以上" },
669
+ * ]}
670
+ * />
671
+ *
672
+ * @example with custom icons + neutral pending state
673
+ * <Checklist
674
+ * items={[
675
+ * { ok: true, label: "Plan approved", icon: <Check size={11} /> },
676
+ * { ok: null, label: "Awaiting review", icon: <Clock size={11} /> },
677
+ * { ok: false, label: "Budget exceeded" },
678
+ * ]}
679
+ * />
680
+ */
681
+ interface ChecklistItem {
682
+ /** `true` → ok / success; `false` → bad / destructive; `null` → neutral / pending. */
683
+ ok: boolean | null;
684
+ label: ReactNode;
685
+ /** Override the default check / x icon. */
686
+ icon?: ReactNode;
687
+ /** Optional trailing hint text. */
688
+ hint?: ReactNode;
689
+ }
690
+ interface ChecklistProps extends HTMLAttributes<HTMLUListElement> {
691
+ items: ChecklistItem[];
692
+ /** Icon size in px — defaults to 11 (matches canonical). */
693
+ iconSize?: number;
694
+ }
695
+ declare const Checklist: react.ForwardRefExoticComponent<ChecklistProps & react.RefAttributes<HTMLUListElement>>;
696
+
697
+ /**
698
+ * Spinner — small inline circular loading indicator.
699
+ *
700
+ * Renders the canonical `.spinner` family from shell.css. Uses
701
+ * `border-top-color: var(--info)` rotation; respects
702
+ * `prefers-reduced-motion` via the keyframe declaration in CSS.
703
+ *
704
+ * Size mapping:
705
+ * - `sm` → 10px (inline with `.help` lines)
706
+ * - `md` → 12px (default, inline with `.input` suffix slot)
707
+ * - `lg` → 16px (inline with `.btn` content)
708
+ *
709
+ * The `tone` prop selects a semantic role: `info` (default), `muted`,
710
+ * `primary`, `success`, `warning`, `destructive`. Each tone re-targets
711
+ * `border-top-color` to the matching semantic variable via the
712
+ * `.spinner-tone-*` class.
713
+ *
714
+ * @example
715
+ * <Spinner />
716
+ * <Spinner size="large" tone="primary" aria-label="Saving…" />
717
+ */
718
+ /** Alias of the shared `IconSizeProp` — Spinner is icon-symbol shaped. */
719
+ type SpinnerSize = IconSizeProp;
720
+ /**
721
+ * Full semantic palette + `"muted"`. `default` falls back to `info`'s
722
+ * CSS class for backwards compatibility (existing CSS chain was rooted
723
+ * on info). `secondary` is excluded — it's Typography text-dimming
724
+ * which doesn't translate to a rotating arc.
725
+ */
726
+ type SpinnerTone = Exclude<ColorProp, "secondary"> | "muted";
727
+ interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {
728
+ /** 10 / 12 / 16 px — defaults to `md`. */
729
+ size?: SpinnerSize;
730
+ /** Color role for the rotating arc; defaults to `info`. */
731
+ tone?: SpinnerTone;
732
+ /** Accessible label. When omitted, falls back to `aria-hidden`. */
733
+ "aria-label"?: string;
734
+ }
735
+ declare const Spinner: react.ForwardRefExoticComponent<SpinnerProps & react.RefAttributes<HTMLSpanElement>>;
736
+
737
+ type IconButtonVariant = "secondary" | "ghost" | "primary";
738
+ /** Alias of the shared `IconSizeProp` (`sm | md | lg`) — IconButton is
739
+ * icon-symbol shaped, same axis as Spinner. Renamed `"default"` → `"md"`
740
+ * so the verb stays consistent across icon-only primitives. */
741
+ type IconButtonSize = IconSizeProp;
742
+ interface IconButtonProps extends Omit<ComponentProps<"button">, "children"> {
743
+ variant?: IconButtonVariant;
744
+ size?: IconButtonSize;
745
+ asChild?: boolean;
746
+ children?: ReactNode;
747
+ }
748
+ declare const IconButton: react.ForwardRefExoticComponent<Omit<IconButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
749
+
750
+ /**
751
+ * PageHeader — canonical page chrome strip with title + subtitle +
752
+ * breadcrumb slot + action slot.
753
+ *
754
+ * Mirrors `K:comp-pageheader.html` (three reference patterns: compact,
755
+ * overflow, stacked). The atomic CSS classes (`.ph`, `.ph-bar`,
756
+ * `.ph-title`, `.ph-actions`, `.ph-tabs`, `.ph-body`) live in
757
+ * `shell.css`. React owns the slot composition — visual values stay in
758
+ * tokens.
759
+ *
760
+ * Variant semantics:
761
+ *
762
+ * - `compact` → 1 row, title truncates with ellipsis, actions never
763
+ * wrap. Use for index pages with a single primary
764
+ * CTA + 0–2 secondary actions.
765
+ * - `overflow` → 1 row, primary action + 2–3 icon buttons + "…"
766
+ * overflow. Same height as `compact`; the variant flag
767
+ * just signals intent in the JSX.
768
+ * - `stacked` → 2 rows; meta / breadcrumb + tabs go on a second
769
+ * row. Use when the page navigates between sub-views.
770
+ *
771
+ * Slots:
772
+ * - `breadcrumb` → rendered above the title (xs muted text per
773
+ * canonical). Passing this auto-bumps the layout to
774
+ * "stacked" if `variant` is "compact".
775
+ * - `title` → h1 (16px / 500 weight, ellipsis truncate)
776
+ * - `subtitle` → adjacent baseline text (`.sub`, xs muted)
777
+ * - `actions` → right-aligned slot, flex-shrink:0 / no wrap
778
+ * - `tabs` → second-row tab strip (`.ph-tabs`); pair with
779
+ * `<Tabs variant="line">` or a list of `<a>`
780
+ * - `body` → third-row body strip (`.ph-body`), small muted
781
+ * descriptive copy
782
+ *
783
+ * @example compact
784
+ * <PageHeader
785
+ * title="従業員シフト · カレンダー"
786
+ * subtitle="月単位の一括割当"
787
+ * actions={<><Button size="small">+ 一括割当</Button></>}
788
+ * />
789
+ *
790
+ * @example stacked + tabs
791
+ * <PageHeader
792
+ * variant="stacked"
793
+ * breadcrumb={<Breadcrumb>...</Breadcrumb>}
794
+ * title="店舗別 · 月次レポート"
795
+ * actions={...}
796
+ * tabs={<nav>...</nav>}
797
+ * />
798
+ */
799
+ type PageHeaderVariant = "compact" | "overflow" | "stacked";
800
+ type PageHeaderPadding = "tight" | "default" | "cozy" | "none";
801
+ interface PageHeaderProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
802
+ title: ReactNode;
803
+ subtitle?: ReactNode;
804
+ /** Breadcrumb slot rendered above the title (auto-stacks). */
805
+ breadcrumb?: ReactNode;
806
+ /** Right-aligned action slot — icon buttons, buttons, segmented controls. */
807
+ actions?: ReactNode;
808
+ /** Tab strip on a dedicated second row (`.ph-tabs`). */
809
+ tabs?: ReactNode;
810
+ /** Descriptive body strip below the bar (`.ph-body`). */
811
+ body?: ReactNode;
812
+ /** Layout variant — defaults to `compact`. */
813
+ variant?: PageHeaderVariant;
814
+ /** Internal-spacing density. Shares the vocabulary with `<Card>`
815
+ * (cardinal rule 23 §B): tight (10/12) · default (14/16) · cozy
816
+ * (20/24) · none (consumer pads the inside). Default `default`. */
817
+ padding?: PageHeaderPadding;
818
+ }
819
+ declare const PageHeader: react.ForwardRefExoticComponent<PageHeaderProps & react.RefAttributes<HTMLElement>>;
820
+
111
821
  /**
112
822
  * Label — form-field label. Wraps Radix Label so `htmlFor` /
113
823
  * click-to-focus works out of the box. Maps to `.label` in tokens.css.
@@ -120,41 +830,312 @@ declare const Textarea: react.ForwardRefExoticComponent<TextareaProps & react.Re
120
830
  */
121
831
  declare const Label: react.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & react.RefAttributes<HTMLLabelElement>, "ref"> & react.RefAttributes<HTMLLabelElement>>;
122
832
 
833
+ type TabsVariant = "line" | "pills";
834
+ type TabsOrientation = "horizontal" | "vertical";
835
+ type TabsPlacement = "top" | "right" | "bottom" | "left";
836
+ interface TabsItem {
837
+ value: string;
838
+ label: ReactNode;
839
+ content?: ReactNode;
840
+ disabled?: boolean;
841
+ }
842
+ interface TabsProps extends Omit<ComponentPropsWithoutRef<typeof TabsPrimitive.Root>, "children"> {
843
+ items: TabsItem[];
844
+ variant?: TabsVariant;
845
+ placement?: TabsPlacement;
846
+ listClassName?: string;
847
+ contentClassName?: string;
848
+ children?: ReactNode;
849
+ }
850
+ declare const Tabs: react.ForwardRefExoticComponent<TabsProps & react.RefAttributes<HTMLDivElement>>;
851
+
123
852
  /**
124
- * TabsRadix-backed tab strip styled with the canonical `.tabs` /
125
- * `.tab` CSS from tokens.css. Keyboard navigation + ARIA come from
126
- * Radix; the visual contract stays in the design tokens.
853
+ * AvatarAnt-Design-shaped: shape + size + icon + image + initials.
127
854
  *
128
- * @example
129
- * <Tabs defaultValue="open">
130
- * <TabsList>
131
- * <TabsTrigger value="open">Open</TabsTrigger>
132
- * <TabsTrigger value="closed">Closed</TabsTrigger>
133
- * </TabsList>
134
- * <TabsContent value="open">...</TabsContent>
135
- * <TabsContent value="closed">...</TabsContent>
136
- * </Tabs>
855
+ * <Avatar size="large" shape="square" src={url} />
856
+ * <Avatar size={48} icon={<UserOutlined />} />
857
+ * <Avatar shape="square" color="oklch(56% 0.15 240)">F</Avatar>
137
858
  */
138
- declare const Tabs: react.ForwardRefExoticComponent<TabsPrimitive.TabsProps & react.RefAttributes<HTMLDivElement>>;
139
- declare const TabsList: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
140
- declare const TabsTrigger: react.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
141
- declare const TabsContent: react.ForwardRefExoticComponent<TabsPrimitive.TabsContentProps & react.RefAttributes<HTMLDivElement>>;
859
+ type AvatarShape = "circle" | "square";
860
+ type AvatarSizeToken = "xs" | "sm" | "default" | "lg" | "xl";
861
+ type AvatarSize = AvatarSizeToken | number;
862
+ interface AvatarProps extends Omit<ComponentProps<"span">, "color"> {
863
+ /** Shape — circle (default) or square (rounded-md). */
864
+ shape?: AvatarShape;
865
+ /** Token name (xs|sm|default|lg|xl) or pixel number. */
866
+ size?: AvatarSize;
867
+ /** Image URL — wins over `icon` / children. */
868
+ src?: string;
869
+ alt?: string;
870
+ /** Icon slot — wins over children when `src` is unset. */
871
+ icon?: ReactNode;
872
+ /**
873
+ * Display name — first two initials are rendered as the fallback
874
+ * when no `src` / `icon` / children are passed. Mirrors the
875
+ * design-handoff `<Avatar name="Satoshi F" />` shape (ui-kit.jsx).
876
+ */
877
+ name?: string;
878
+ /**
879
+ * Background colour — used for initials avatars to tint the bg
880
+ * with a brand hue. Accepts any CSS colour value.
881
+ */
882
+ color?: string;
883
+ /** Foreground colour override (rare; defaults follow `color`). */
884
+ textColor?: string;
885
+ /**
886
+ * Variant alias for legacy callers. `brand` maps to color =
887
+ * `var(--brand)` + textColor = `var(--primary-foreground)`.
888
+ */
889
+ variant?: "default" | "brand";
890
+ }
891
+ declare function Avatar({ shape, size, src, alt, icon, name, color, textColor, variant, className, style, children, ...rest }: AvatarProps): react_jsx_runtime.JSX.Element;
142
892
 
143
893
  /**
144
- * Avatarround chip with initials or an image. Maps to `.avatar`
145
- * + `.avatar.brand` in tokens.css.
894
+ * StatisticAnt-Design KPI tile.
146
895
  *
147
- * @example
148
- * <Avatar>PT</Avatar>
149
- * <Avatar variant="brand">G</Avatar>
896
+ * <Statistic title="Active users" value={1024} />
897
+ * <Statistic title="Revenue" value={1234.56} precision={2} prefix="¥" />
898
+ * <Statistic title="Uptime" value={99.95} suffix="%" />
899
+ * <Statistic title="MRR" value={5800000} bordered />
900
+ *
901
+ * The `bordered` prop renders the tile with its own card-style frame
902
+ * (border + radius + padding + background) so consumers don't need to
903
+ * wrap with `<Card>` just to get a surface. Default `false` keeps the
904
+ * tile transparent for use inside grids / dashboards where the parent
905
+ * surface already provides the chrome.
150
906
  */
151
- interface AvatarProps extends ComponentProps<"span"> {
152
- variant?: "default" | "brand";
153
- /** Optional image url; falls back to children (initials) when missing. */
154
- src?: string;
155
- alt?: string;
907
+ interface StatisticProps extends Omit<ComponentProps<"div">, "title" | "prefix"> {
908
+ title?: ReactNode;
909
+ value: number | string;
910
+ /** Decimal places when value is a number. */
911
+ precision?: number;
912
+ /** Prepended to value (e.g. "¥", icon). */
913
+ prefix?: ReactNode;
914
+ /** Appended to value (e.g. "%", "/mo"). */
915
+ suffix?: ReactNode;
916
+ /** Locale-aware grouping (default `true` — uses Intl.NumberFormat). */
917
+ groupSeparator?: boolean;
918
+ /** Custom format function. Overrides precision + groupSeparator. */
919
+ formatter?: (value: number | string) => ReactNode;
920
+ /** Text alignment for the tile (default `left`). */
921
+ align?: "left" | "right" | "center";
922
+ /** Font size of the value (px). */
923
+ valueSize?: number;
924
+ /** Render the tile as a standalone card surface (border + radius +
925
+ * padding + bg). Default `false` — the tile is transparent so it
926
+ * composes inside grids that supply their own chrome. */
927
+ bordered?: boolean;
928
+ }
929
+ declare function Statistic({ title, value, precision, prefix, suffix, groupSeparator, formatter, align, valueSize, bordered, className, style, ...rest }: StatisticProps): react_jsx_runtime.JSX.Element;
930
+
931
+ /**
932
+ * Empty — Ant-Design empty-state placeholder.
933
+ *
934
+ * <Empty description="No data" />
935
+ * <Empty image={<CustomIllustration />} description="Nothing here yet">
936
+ * <Button>Create one</Button>
937
+ * </Empty>
938
+ */
939
+ interface EmptyProps extends ComponentProps<"div"> {
940
+ /** Image / illustration / icon at the top. */
941
+ image?: ReactNode;
942
+ /** Text below the image (default `null` — no text). */
943
+ description?: ReactNode;
944
+ /** Action area below description (typically a button). */
945
+ children?: ReactNode;
946
+ }
947
+ declare function Empty({ image, description, children, className, ...rest }: EmptyProps): react_jsx_runtime.JSX.Element;
948
+
949
+ /**
950
+ * Alert — Ant-Design banner-style notice.
951
+ *
952
+ * <Alert color="info" title="5月度の締めは 5/31 (土) 23:59 です" />
953
+ * <Alert
954
+ * color="warning"
955
+ * title="3 件の打刻漏れがあります"
956
+ * description="本日中に確認してください。"
957
+ * actions={<Button size="small">確認する</Button>}
958
+ * closable
959
+ * onClose={() => …}
960
+ * />
961
+ * <Alert variant="banner" color="info" title="メンテナンス予定 …" />
962
+ *
963
+ * Concept mapping (Ant → @godxjp/ui vocabulary per cardinal rule 23 §B):
964
+ * - Ant `type` → `color` (semantic role)
965
+ * - Ant `banner` → `variant="banner"` (full-width borderless)
966
+ * - Ant `message` → `title` (ReactNode slot)
967
+ * - Ant `description` → `description` (ReactNode slot)
968
+ * - Ant `action` → `actions` (plural — matches Card)
969
+ * - Ant `showIcon` → boolean (omit `icon` + set false → no icon)
970
+ * - Ant `closeIcon` → not exposed; default × ships
971
+ * - Ant `closable` → already vocab (Tag uses it)
972
+ * - Ant `onClose` → onClose callback
973
+ */
974
+ /** Alias of the shared `FeedbackColorProp` — same shape as
975
+ * ResultColor / ProgressColor; kept as a named export for back-compat. */
976
+ type AlertColor = FeedbackColorProp;
977
+ type AlertVariant = "outlined" | "banner";
978
+ interface AlertProps extends Omit<ComponentProps<"div">, "color" | "title"> {
979
+ /** Semantic role. Defaults to `default`. */
980
+ color?: AlertColor;
981
+ /** Outlined card (default) or full-width banner. */
982
+ variant?: AlertVariant;
983
+ /** Primary message. */
984
+ title?: ReactNode;
985
+ /** Optional secondary body text. */
986
+ description?: ReactNode;
987
+ /** Leading icon. Omit to auto-pick a semantic icon for the color. */
988
+ icon?: ReactNode;
989
+ /** Render an × close button. */
990
+ closable?: boolean;
991
+ /** Called when the × close button is clicked. */
992
+ onClose?: () => void;
993
+ /** Footer action slot (typically a Button group). */
994
+ actions?: ReactNode;
995
+ }
996
+ declare const Alert: react.ForwardRefExoticComponent<Omit<AlertProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
997
+
998
+ /**
999
+ * Result — page-level outcome surface (Ant-Design `Result` shape).
1000
+ *
1001
+ * <Result
1002
+ * color="success"
1003
+ * title="ご注文が完了しました"
1004
+ * description="番号 No. 2026-05-17-0042 でお手元に届きます。"
1005
+ * extra={<Button>注文履歴を見る</Button>}
1006
+ * />
1007
+ *
1008
+ * Concept mapping (Ant → @godxjp/ui vocabulary per cardinal rule 23 §B):
1009
+ * - Ant `status` → `color` (semantic role; HTTP-status
1010
+ * shortcuts dropped — consumers
1011
+ * wire their own icon)
1012
+ * - Ant `title` → `title` (ReactNode slot)
1013
+ * - Ant `subTitle` → `description` (matches Alert vocabulary)
1014
+ * - Ant `icon` → `icon` (ReactNode slot)
1015
+ * - Ant `extra` → `extra` (matches Card footer slot)
1016
+ */
1017
+ /** Alias of the shared `FeedbackColorProp` — same shape as
1018
+ * AlertColor / ProgressColor; kept as a named export for back-compat. */
1019
+ type ResultColor = FeedbackColorProp;
1020
+ interface ResultProps extends Omit<ComponentProps<"div">, "color" | "title"> {
1021
+ /** Semantic role. Defaults to `info`. */
1022
+ color?: ResultColor;
1023
+ /** Primary headline. */
1024
+ title?: ReactNode;
1025
+ /** Secondary body text. */
1026
+ description?: ReactNode;
1027
+ /** Leading visual. Omit to auto-pick a semantic icon for the color. */
1028
+ icon?: ReactNode;
1029
+ /** Action area below the description (typically a Button group). */
1030
+ extra?: ReactNode;
156
1031
  }
157
- declare function Avatar({ variant, src, alt, className, children, ...rest }: AvatarProps): react_jsx_runtime.JSX.Element;
1032
+ declare const Result: react.ForwardRefExoticComponent<Omit<ResultProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
1033
+
1034
+ /**
1035
+ * Typography — Title / Paragraph / Text / Link primitive family.
1036
+ *
1037
+ * <Typography.Title size={2}>Heading</Typography.Title>
1038
+ * <Typography.Paragraph>Lorem ipsum…</Typography.Paragraph>
1039
+ * <Typography.Text color="secondary" strong>label</Typography.Text>
1040
+ * <Typography.Text code>code</Typography.Text>
1041
+ * <Typography.Text copyable>kb@famgia.com</Typography.Text>
1042
+ * <Typography.Text truncate>truncate me</Typography.Text>
1043
+ * <Typography.Paragraph truncate={{ rows: 3 }}>multi-line clamp</Typography.Paragraph>
1044
+ * <Typography.Link href="/x">jump</Typography.Link>
1045
+ *
1046
+ * Vocabulary (per CLAUDE.md §23.B):
1047
+ * - `size` (1..5) — dimensional scale for Title; maps to the canon
1048
+ * heading mapping declared in `theme.css`. Same name as the
1049
+ * framework-wide `size` vocabulary entry (Button, Input, Avatar,
1050
+ * Tag, Badge, IconButton).
1051
+ * - `color` — semantic role; identical enum to Tag/Badge/Alert.
1052
+ * - `copyable` / `disabled` — adjective-boolean state, same pattern
1053
+ * as Tag's `closable` / Input's `disabled`.
1054
+ * - `truncate` — `true | { rows: N }`; framework-owned name (NOT
1055
+ * Ant's `ellipsis`).
1056
+ * - `strong` / `italic` / `underline` / `del` / `mark` / `code` /
1057
+ * `keyboard` — HTML5 semantic inline elements; conveniences, not
1058
+ * Ant-specific.
1059
+ *
1060
+ * Cardinal rules honoured:
1061
+ * §14 — purely structural primitive (no Radix peer needed)
1062
+ * §21 — every axis (theme/accent/density/font-size) flows via tokens
1063
+ * §22 — every literal mapped to an existing token; no new tokens;
1064
+ * heading scale follows the canon mapping declared in
1065
+ * `theme.css` (h1=4xl, h2=2xl, h3=xl, h4=lg, h5=md).
1066
+ * §23 — vocabulary first; no Ant-named props leak in.
1067
+ * §25 — primitive is the canon; all visuals live in `.typography*`
1068
+ * classes in `shell.css`. No inline `style={{...}}`.
1069
+ */
1070
+ type TypographyColor = "default" | "secondary" | "success" | "warning" | "attention" | "info" | "destructive";
1071
+ /** Single-line truncate (`true`) or multi-line clamp (`{ rows: N }`). */
1072
+ type TypographyTruncate = boolean | {
1073
+ rows?: number;
1074
+ };
1075
+ interface TypographyCommonProps {
1076
+ color?: TypographyColor;
1077
+ disabled?: boolean;
1078
+ /** Bold weight via `--font-weight-bold`. */
1079
+ strong?: boolean;
1080
+ italic?: boolean;
1081
+ underline?: boolean;
1082
+ /** Line-through. */
1083
+ del?: boolean;
1084
+ /** Highlight pill — wa-iro 山吹 (warning) tint. */
1085
+ mark?: boolean;
1086
+ /** Render as inline `<code>` chip. */
1087
+ code?: boolean;
1088
+ /** Render as inline `<kbd>` chip. */
1089
+ keyboard?: boolean;
1090
+ /** Truncate to one or more rows with ellipsis. */
1091
+ truncate?: TypographyTruncate;
1092
+ /** Show a copy icon-button after the text. */
1093
+ copyable?: boolean | {
1094
+ text?: string;
1095
+ onCopy?: () => void;
1096
+ };
1097
+ }
1098
+ type TitleSize = 1 | 2 | 3 | 4 | 5;
1099
+ interface TitleProps extends Omit<ComponentProps<"h1">, "color">, TypographyCommonProps {
1100
+ /** Heading scale — renders `<h{size}>` and binds the canon
1101
+ * font-size token. `1` = `--text-4xl` (h1 cap), `2` = `--text-2xl`
1102
+ * (h2), `3` = `--text-xl` (page title), `4` = `--text-lg`
1103
+ * (subheading), `5` = `--text-md` (content body). */
1104
+ size?: TitleSize;
1105
+ }
1106
+ interface ParagraphProps extends Omit<ComponentProps<"p">, "color">, TypographyCommonProps {
1107
+ }
1108
+ interface TextProps extends Omit<ComponentProps<"span">, "color">, TypographyCommonProps {
1109
+ }
1110
+ interface LinkProps extends Omit<ComponentProps<"a">, "color">, Omit<TypographyCommonProps, "color"> {
1111
+ /** Override link colour (default `--primary`). Use
1112
+ * `color="destructive"` etc. when the link's semantic role is
1113
+ * non-default. */
1114
+ color?: TypographyColor;
1115
+ }
1116
+ declare const Typography: {
1117
+ Title: react.ForwardRefExoticComponent<Omit<TitleProps, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
1118
+ Paragraph: react.ForwardRefExoticComponent<Omit<ParagraphProps, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
1119
+ Text: react.ForwardRefExoticComponent<Omit<TextProps, "ref"> & react.RefAttributes<HTMLSpanElement>>;
1120
+ Link: react.ForwardRefExoticComponent<Omit<LinkProps, "ref"> & react.RefAttributes<HTMLAnchorElement>>;
1121
+ };
1122
+
1123
+ interface DescriptionsOption {
1124
+ label: ReactNode;
1125
+ value: ReactNode;
1126
+ span?: number;
1127
+ className?: string;
1128
+ }
1129
+ interface DescriptionsProps extends Omit<ComponentProps<"div">, "title"> {
1130
+ title?: ReactNode;
1131
+ extra?: ReactNode;
1132
+ items: DescriptionsOption[];
1133
+ column?: number;
1134
+ layout?: "horizontal" | "vertical";
1135
+ bordered?: boolean;
1136
+ size?: "small" | "default" | "large";
1137
+ }
1138
+ declare function Descriptions({ title, extra, items, column, layout, bordered, size, className, style, ...rest }: DescriptionsProps): react_jsx_runtime.JSX.Element;
158
1139
 
159
1140
  /**
160
1141
  * Separator — horizontal / vertical divider. Wraps Radix Separator for
@@ -163,104 +1144,1593 @@ declare function Avatar({ variant, src, alt, className, children, ...rest }: Ava
163
1144
  */
164
1145
  declare const Separator: react.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
165
1146
 
1147
+ interface PopoverProps extends Omit<ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>, "children"> {
1148
+ trigger?: ReactNode;
1149
+ children?: ReactNode;
1150
+ align?: ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>["align"];
1151
+ side?: ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>["side"];
1152
+ sideOffset?: number;
1153
+ className?: string;
1154
+ contentProps?: Omit<ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>, "children">;
1155
+ }
1156
+ declare const Popover: react.ForwardRefExoticComponent<PopoverProps & react.RefAttributes<HTMLDivElement>>;
1157
+
1158
+ interface DropdownMenuOption {
1159
+ key: string;
1160
+ label?: ReactNode;
1161
+ onSelect?: ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item>["onSelect"];
1162
+ disabled?: boolean;
1163
+ variant?: "default" | "destructive";
1164
+ shortcut?: ReactNode;
1165
+ type?: "item" | "label" | "separator";
1166
+ }
1167
+ interface DropdownMenuProps extends Omit<ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>, "children"> {
1168
+ trigger: ReactNode;
1169
+ items: DropdownMenuOption[];
1170
+ align?: ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>["align"];
1171
+ sideOffset?: number;
1172
+ contentClassName?: string;
1173
+ }
1174
+ declare function DropdownMenu({ trigger, items, align, sideOffset, contentClassName, ...rootProps }: DropdownMenuProps): react_jsx_runtime.JSX.Element;
1175
+
166
1176
  /**
167
- * PopoverRadix-backed floating panel anchored to a trigger element.
168
- * Styled with the canonical `.popover-content` class from tokens.css
169
- * so the visual contract stays in the design tokens.
1177
+ * Calendaraccessible date grid built on React Aria Components.
1178
+ *
1179
+ * Replaces the prior `react-day-picker` wrapper. The Adobe React
1180
+ * Aria stack is the modern shadcn / Radix-ecosystem recommendation
1181
+ * for date input: ARIA APG-compliant, full keyboard nav (arrow keys
1182
+ * / PageUp/PageDown / Home/End), locale-aware via `react-aria-i18n`,
1183
+ * and timezone-correct via `@internationalized/date`.
1184
+ *
1185
+ * Two exports:
1186
+ *
1187
+ * - `<Calendar>` — single date selection. `value` is a
1188
+ * `@internationalized/date` `CalendarDate` (or null); `onChange`
1189
+ * receives the same shape. Convert to/from JS `Date` with
1190
+ * `parseDate`, `today`, `getLocalTimeZone` from `@internationalized/date`.
1191
+ *
1192
+ * - `<RangeCalendar>` — contiguous range selection. `value` is
1193
+ * `{ start: CalendarDate, end: CalendarDate } | null`.
170
1194
  *
171
1195
  * @example
172
- * <Popover>
173
- * <PopoverTrigger asChild>
174
- * <Button variant="ghost">Open</Button>
175
- * </PopoverTrigger>
176
- * <PopoverContent>…body…</PopoverContent>
177
- * </Popover>
1196
+ * import { Calendar } from "@godxjp/ui"
1197
+ * import { today, getLocalTimeZone } from "@internationalized/date"
1198
+ *
1199
+ * const [value, setValue] = useState<CalendarDate | null>(
1200
+ * today(getLocalTimeZone())
1201
+ * )
1202
+ * <Calendar value={value} onChange={setValue} aria-label="Pick a date" />
1203
+ *
1204
+ * @see https://react-spectrum.adobe.com/react-aria/Calendar.html
178
1205
  */
179
- declare const Popover: react.FC<PopoverPrimitive.PopoverProps>;
180
- declare const PopoverTrigger: react.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & react.RefAttributes<HTMLButtonElement>>;
181
- declare const PopoverAnchor: react.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & react.RefAttributes<HTMLDivElement>>;
182
- declare const PopoverContent: react.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
1206
+ interface CalendarProps<T extends DateValue = DateValue> extends Omit<CalendarProps$1<T>, "children"> {
1207
+ className?: string;
1208
+ }
1209
+ declare function Calendar<T extends DateValue = DateValue>({ className, ...rest }: CalendarProps<T>): react_jsx_runtime.JSX.Element;
1210
+
1211
+ interface DialogProps extends ComponentPropsWithoutRef<typeof DialogPrimitive.Root> {
1212
+ trigger?: ReactNode;
1213
+ title: ReactNode;
1214
+ description?: ReactNode;
1215
+ footer?: ReactNode;
1216
+ children?: ReactNode;
1217
+ className?: string;
1218
+ contentProps?: Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, "children" | "className">;
1219
+ form?: FormHTMLAttributes<HTMLFormElement>;
1220
+ }
1221
+ declare function Dialog({ trigger, title, description, footer, children, className, contentProps, form, ...rootProps }: DialogProps): react_jsx_runtime.JSX.Element;
1222
+
1223
+ type SheetSide = "top" | "right" | "bottom" | "left";
1224
+ interface SheetProps extends Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Root>, "children"> {
1225
+ trigger?: ReactNode;
1226
+ title?: ReactNode;
1227
+ description?: ReactNode;
1228
+ footer?: ReactNode;
1229
+ children?: ReactNode;
1230
+ side?: SheetSide;
1231
+ className?: string;
1232
+ contentProps?: Omit<ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, "children">;
1233
+ form?: FormHTMLAttributes<HTMLFormElement>;
1234
+ }
1235
+ declare const Sheet: react.ForwardRefExoticComponent<SheetProps & react.RefAttributes<HTMLDivElement>>;
1236
+
1237
+ interface AlertDialogProps extends Omit<ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Root>, "children"> {
1238
+ trigger?: ReactNode;
1239
+ title: ReactNode;
1240
+ description?: ReactNode;
1241
+ children?: ReactNode;
1242
+ cancel?: ReactNode;
1243
+ action?: ReactNode;
1244
+ footer?: ReactNode;
1245
+ className?: string;
1246
+ contentProps?: Omit<ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>, "children">;
1247
+ }
1248
+ declare const AlertDialog: react.ForwardRefExoticComponent<AlertDialogProps & react.RefAttributes<HTMLDivElement>>;
183
1249
 
184
1250
  /**
185
- * DropdownMenuRadix-backed action menu opened from a trigger
186
- * (kebab, caret, button…). Styled via canonical `.dropdown-menu-*`
187
- * classes from tokens.css.
1251
+ * Selectsingle-select picker.
188
1252
  *
189
- * Items support `variant="destructive"` for dangerous actions and
190
- * `inset` for left-padding alignment when icons aren't on every row.
1253
+ * <Select options={[…]} value={…} onValueChange={…} placeholder="" />
191
1254
  *
192
- * @example
193
- * <DropdownMenu>
194
- * <DropdownMenuTrigger asChild>
195
- * <Button variant="ghost"><MoreVertical /></Button>
196
- * </DropdownMenuTrigger>
197
- * <DropdownMenuContent align="end">
198
- * <DropdownMenuItem onSelect={onEdit}>Edit</DropdownMenuItem>
199
- * <DropdownMenuSeparator />
200
- * <DropdownMenuItem variant="destructive" onSelect={onDelete}>
201
- * Delete
202
- * </DropdownMenuItem>
203
- * </DropdownMenuContent>
204
- * </DropdownMenu>
205
- */
206
- declare const DropdownMenu: react.FC<DropdownMenuPrimitive.DropdownMenuProps>;
207
- declare const DropdownMenuTrigger: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuTriggerProps & react.RefAttributes<HTMLButtonElement>>;
208
- declare const DropdownMenuGroup: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuGroupProps & react.RefAttributes<HTMLDivElement>>;
209
- declare const DropdownMenuPortal: react.FC<DropdownMenuPrimitive.DropdownMenuPortalProps>;
210
- declare const DropdownMenuSub: react.FC<DropdownMenuPrimitive.DropdownMenuSubProps>;
211
- declare const DropdownMenuRadioGroup: react.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & react.RefAttributes<HTMLDivElement>>;
212
- declare const DropdownMenuContent: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
213
- declare const DropdownMenuItem: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
214
- inset?: boolean;
215
- variant?: "default" | "destructive";
216
- } & react.RefAttributes<HTMLDivElement>>;
217
- declare const DropdownMenuSeparator: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSeparatorProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
218
- declare const DropdownMenuLabel: react.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuLabelProps & react.RefAttributes<HTMLDivElement>, "ref"> & {
219
- inset?: boolean;
220
- } & react.RefAttributes<HTMLDivElement>>;
221
- declare function DropdownMenuShortcut({ className, ...rest }: HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
1255
+ * Pass `searchable` for a filterable variant backed by cmdk + Popover
1256
+ * (replaces the former standalone Combobox primitive):
1257
+ *
1258
+ * <Select options={…} value={…} onValueChange={…} searchable
1259
+ * searchPlaceholder="Find…" emptyLabel="No matches" />
1260
+ */
1261
+ interface SelectOption {
1262
+ value: string;
1263
+ /** Display content — usually a string, but ReactNode is fine for
1264
+ * icon + label compositions. When `searchable`, string labels are
1265
+ * used as filter keywords automatically. */
1266
+ label: ReactNode;
1267
+ disabled?: boolean;
1268
+ }
1269
+ interface SelectOptionGroup {
1270
+ label: ReactNode;
1271
+ options: SelectOption[];
1272
+ }
1273
+ type SelectOptions = ReadonlyArray<SelectOption | SelectOptionGroup>;
1274
+ interface SelectProps extends Omit<ComponentPropsWithoutRef<typeof SelectPrimitive.Root>, "children"> {
1275
+ options: SelectOptions;
1276
+ placeholder?: ReactNode;
1277
+ triggerClassName?: string;
1278
+ contentClassName?: string;
1279
+ /** Render a searchable variant (cmdk + Popover) instead of Radix Select. */
1280
+ searchable?: boolean;
1281
+ /** Search input placeholder (searchable mode only). */
1282
+ searchPlaceholder?: string;
1283
+ /** Shown when the filter matches nothing (searchable mode only). */
1284
+ emptyLabel?: ReactNode;
1285
+ /** Render a disabled loading row instead of options (searchable mode only). */
1286
+ loading?: boolean;
1287
+ /** Loading row text (searchable mode only). */
1288
+ loadingLabel?: ReactNode;
1289
+ }
1290
+ declare function Select({ options, placeholder, triggerClassName, contentClassName, searchable, searchPlaceholder, emptyLabel, loading, loadingLabel, ...rest }: SelectProps): react_jsx_runtime.JSX.Element;
1291
+
1292
+ /**
1293
+ * Switch — boolean toggle (Radix). Styled with `.switch-root` / `.switch-thumb`
1294
+ * in tokens.css.
1295
+ */
1296
+ declare const Switch: react.ForwardRefExoticComponent<Omit<SwitchPrimitive.SwitchProps & react.RefAttributes<HTMLButtonElement>, "ref"> & react.RefAttributes<HTMLButtonElement>>;
222
1297
 
223
1298
  /**
224
- * Calendarreact-day-picker grid themed with brand tokens via the
225
- * canonical `.calendar` class from tokens.css. Caller controls
226
- * mode/selected/onSelect through DayPicker's standard props.
1299
+ * Checkboxtri-state capable (checked / unchecked / indeterminate).
227
1300
  *
228
- * Locale + week-start are inherited from i18next / browser by default;
229
- * pass DayPickerProps explicitly to override (e.g. `weekStartsOn={1}`
230
- * for Monday-first).
1301
+ * Two consumption modes (per cardinal rule 23 + rule 31 — no parallel
1302
+ * convenience wrappers):
231
1303
  *
232
- * @example
233
- * const [date, setDate] = useState<Date>()
234
- * <Calendar mode="single" selected={date} onSelect={setDate} />
1304
+ * 1. With label (preferred, Ant canonical) — pass children as the
1305
+ * label text:
1306
+ *
1307
+ * <Checkbox defaultChecked>利用規約に同意する</Checkbox>
1308
+ *
1309
+ * The primitive wraps the box + label in a single `<label>` so
1310
+ * clicking the text toggles the checkbox, ARIA labelling is
1311
+ * automatic, and the consumer never writes
1312
+ * `<label><Checkbox /><span>…</span></label>` ceremony.
1313
+ *
1314
+ * 2. Box-only (advanced) — no children. Use when the label lives
1315
+ * elsewhere (table cell header, custom layout) and you wire
1316
+ * `aria-labelledby` / `aria-label` yourself:
1317
+ *
1318
+ * <th><Checkbox aria-label="Select all" /></th>
1319
+ *
1320
+ * Uses `.checkbox-*` classes from tokens.css. The box is 1rem (16px
1321
+ * @ base) per industry canon (shadcn / Ant / Tailwind).
235
1322
  */
236
- declare function Calendar({ className, showOutsideDays, ...rest }: DayPickerProps): react_jsx_runtime.JSX.Element;
237
-
238
- interface TimeInputProps {
239
- /** Current time value in `"HH:mm"` (24-hour) format. */
240
- value?: string;
241
- /** Fired on blur with the validated `"HH:mm"` string. */
242
- onChange?: (time: string) => void;
243
- /** Additional class name applied to the input element. */
1323
+ interface CheckboxProps extends ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
1324
+ /** Label text rendered to the right of the box. When provided, the
1325
+ * primitive wraps both in a single `<label>` so clicking the text
1326
+ * toggles the checkbox. */
1327
+ children?: ReactNode;
1328
+ /** Class merged onto the OUTER `<label>` when `children` is set,
1329
+ * or onto the box `<button>` otherwise. */
244
1330
  className?: string;
245
- /** Disable input + propagate aria-disabled. */
1331
+ /** Class merged onto the inner box (when `children` is set). */
1332
+ boxClassName?: string;
1333
+ }
1334
+ declare const Checkbox: react.ForwardRefExoticComponent<CheckboxProps & react.RefAttributes<HTMLButtonElement>>;
1335
+
1336
+ /**
1337
+ * CheckboxGroup — wraps a set of `<Checkbox value="…" />` items into a
1338
+ * single selection axis. Compositional (children) OR data-driven
1339
+ * (`options`) per cardinal rule 23 §A — one concept per prop.
1340
+ *
1341
+ * Vocabulary (cardinal rule 23 §B):
1342
+ * - `value` / `defaultValue` / `onValueChange` — Radix-style
1343
+ * controlled / uncontrolled selection (array of selected values).
1344
+ * NEVER `checked` / `selectedKeys` aliases.
1345
+ * - `orientation` — "horizontal" (default) | "vertical".
1346
+ * - `size` — "small" | "default" | "large" (forwarded via context).
1347
+ * - `disabled` — applies to every item.
1348
+ *
1349
+ * Visual contract lives in `.checkbox-group` (shell.css) — flex
1350
+ * direction flips on `data-orientation`.
1351
+ */
1352
+ type CheckboxGroupSize = "small" | "default" | "large";
1353
+ type CheckboxGroupOrientation = "horizontal" | "vertical";
1354
+ interface CheckboxOption {
1355
+ value: string;
1356
+ label: ReactNode;
246
1357
  disabled?: boolean;
247
- /** Optional placeholder (defaults to "HH:mm"). */
248
- placeholder?: string;
249
- /** Optional id used for label association. */
250
- id?: string;
251
- /** Optional name used in form submissions. */
1358
+ }
1359
+ interface CheckboxGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, "defaultValue" | "onChange"> {
1360
+ /** Data-driven items. Alternative to passing `<Checkbox value="…" />` children. */
1361
+ options?: CheckboxOption[];
1362
+ /** Compositional children when `options` is omitted. */
1363
+ children?: ReactNode;
1364
+ /** Controlled selection. */
1365
+ value?: string[];
1366
+ /** Uncontrolled initial selection. */
1367
+ defaultValue?: string[];
1368
+ /** Fires whenever the selection set changes. */
1369
+ onValueChange?: (value: string[]) => void;
1370
+ orientation?: CheckboxGroupOrientation;
1371
+ /** Disable every item in the group. */
1372
+ disabled?: boolean;
1373
+ size?: CheckboxGroupSize;
1374
+ /** Form name for native submission (mirrors RadioGroup). */
252
1375
  name?: string;
253
1376
  }
1377
+ declare const CheckboxGroup: react.ForwardRefExoticComponent<CheckboxGroupProps & react.RefAttributes<HTMLDivElement>>;
1378
+
254
1379
  /**
255
- * TimeInput narrow text input for HH:mm (24-hour) values.
256
- * Mirrors the public `@godxjp/ui@0.2.0` API so call sites don't change
257
- * when upgrading to v2. Visual contract lives in the `.time-input`
258
- * class in tokens.css.
1380
+ * Radio + RadioGroup Radix-backed single-select group. Compositional
1381
+ * (`<Radio value="…" />` children) OR data-driven (`options`) per
1382
+ * cardinal rule 23 §A.
259
1383
  *
260
- * Validation: emits `onChange` with the normalized string on blur if
261
- * it parses, otherwise leaves the value untouched and surfaces
262
- * `aria-invalid` so the consumer can style the error state.
1384
+ * Vocabulary (cardinal rule 23 §B):
1385
+ * - `value` / `defaultValue` / `onValueChange` Radix-canonical
1386
+ * selection (the GROUP exposes the value; individual items
1387
+ * internally use Radix's `checked` data-state).
1388
+ * - `orientation` — "horizontal" (default) | "vertical".
1389
+ * - `size` — "small" | "default" | "large".
1390
+ * - `disabled` — applies to the whole group OR per-item.
1391
+ * - `name` — native form name.
1392
+ *
1393
+ * Visual contract: `.radio-group` + `.radio-root` + `.radio-indicator`
1394
+ * in shell.css. State flows via Radix `data-state="checked"`.
263
1395
  */
264
- declare const TimeInput: react.ForwardRefExoticComponent<TimeInputProps & react.RefAttributes<HTMLInputElement>>;
1396
+ type RadioGroupSize = "small" | "default" | "large";
1397
+ type RadioGroupOrientation = "horizontal" | "vertical";
1398
+ interface RadioOption {
1399
+ value: string;
1400
+ label: ReactNode;
1401
+ disabled?: boolean;
1402
+ }
1403
+ interface RadioGroupProps extends Omit<ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>, "orientation"> {
1404
+ /** Data-driven items. */
1405
+ options?: RadioOption[];
1406
+ /** Compositional children when `options` is omitted. */
1407
+ children?: ReactNode;
1408
+ orientation?: RadioGroupOrientation;
1409
+ size?: RadioGroupSize;
1410
+ }
1411
+ declare const RadioGroup: react.ForwardRefExoticComponent<RadioGroupProps & react.RefAttributes<HTMLDivElement>>;
1412
+ interface RadioProps {
1413
+ value: string;
1414
+ disabled?: boolean;
1415
+ children?: ReactNode;
1416
+ className?: string;
1417
+ id?: string;
1418
+ }
1419
+ declare const Radio: react.ForwardRefExoticComponent<RadioProps & react.RefAttributes<HTMLButtonElement>>;
1420
+
1421
+ /**
1422
+ * Slider — Radix-backed range input. Single-handle by default;
1423
+ * `range` flips to dual-handle.
1424
+ *
1425
+ * Vocabulary (cardinal rule 23 §B):
1426
+ * - `value` / `defaultValue` / `onValueChange` — Radix-canonical
1427
+ * selection; scalar for single-handle, `[number, number]` for
1428
+ * `range`.
1429
+ * - `min` / `max` / `step` — HTML standards (not vocabulary).
1430
+ * - `disabled`, `orientation` — shared axes.
1431
+ * - `marks` — optional tick labels along the track.
1432
+ *
1433
+ * Visual contract: `.slider`, `.slider-track`, `.slider-range`,
1434
+ * `.slider-thumb` in shell.css. Vertical variant flips dimensions
1435
+ * via `data-orientation="vertical"`.
1436
+ */
1437
+ interface SliderMark {
1438
+ value: number;
1439
+ label?: ReactNode;
1440
+ }
1441
+ type SliderValue = number | [number, number];
1442
+ interface SliderProps extends Omit<ComponentPropsWithoutRef<typeof SliderPrimitive.Root>, "value" | "defaultValue" | "onValueChange" | "orientation"> {
1443
+ value?: SliderValue;
1444
+ defaultValue?: SliderValue;
1445
+ onValueChange?: (value: SliderValue) => void;
1446
+ min?: number;
1447
+ max?: number;
1448
+ step?: number;
1449
+ /** Dual-handle when true; pass `[number, number]` for value. */
1450
+ range?: boolean;
1451
+ disabled?: boolean;
1452
+ orientation?: "horizontal" | "vertical";
1453
+ /** Optional tick marks rendered alongside the track. */
1454
+ marks?: SliderMark[];
1455
+ }
1456
+ declare const Slider: react.ForwardRefExoticComponent<SliderProps & react.RefAttributes<HTMLSpanElement>>;
1457
+
1458
+ declare function Table<TData>({ columns, data, density, containerClassName, stickyHeader, rowKey, getRowId, caption, defaultColumnVisibility, columnVisibility, onColumnVisibilityChange, sort, onSortChange, resizable, expandable, editing, groupBy, tree, onColumnPinningChange, selection, footer, empty, rowClassName, className, instance, ...rest }: TableProps<TData>): react_jsx_runtime.JSX.Element;
1459
+
1460
+ interface TimeInputProps {
1461
+ /** Current time value in `"HH:mm"` (24-hour) format. */
1462
+ value?: string;
1463
+ /** Fired on blur with the validated `"HH:mm"` string. */
1464
+ onChange?: (time: string) => void;
1465
+ /** Additional class name applied to the input element. */
1466
+ className?: string;
1467
+ /** Disable input + propagate aria-disabled. */
1468
+ disabled?: boolean;
1469
+ /** Optional placeholder (defaults to "HH:mm"). */
1470
+ placeholder?: string;
1471
+ /** Optional id used for label association. */
1472
+ id?: string;
1473
+ /** Optional name used in form submissions. */
1474
+ name?: string;
1475
+ }
1476
+ /**
1477
+ * TimeInput — narrow text input for HH:mm (24-hour) values.
1478
+ * Mirrors the public `@godxjp/ui@0.2.0` API so call sites don't change
1479
+ * when upgrading to v2. Visual contract lives in the `.time-input`
1480
+ * class in tokens.css.
1481
+ *
1482
+ * Validation: emits `onChange` with the normalized string on blur if
1483
+ * it parses, otherwise leaves the value untouched and surfaces
1484
+ * `aria-invalid` so the consumer can style the error state.
1485
+ */
1486
+ declare const TimeInput: react.ForwardRefExoticComponent<TimeInputProps & react.RefAttributes<HTMLInputElement>>;
1487
+
1488
+ /**
1489
+ * Toast host — wraps `sonner` with token classes (`tokens.css` + optional
1490
+ * `sonner.css` import). Defaults to `toastOptions.unstyled` so visuals
1491
+ * come from `.toast*` atoms, not sonner’s default gray theme.
1492
+ */
1493
+ declare const Toaster: react.ForwardRefExoticComponent<ToasterProps & react.RefAttributes<HTMLElement>>;
1494
+
1495
+ type SkeletonProps = HTMLAttributes<HTMLDivElement>;
1496
+ declare const Skeleton: react.ForwardRefExoticComponent<SkeletonProps & react.RefAttributes<HTMLDivElement>>;
1497
+
1498
+ /**
1499
+ * Watermark — repeating SVG-pattern overlay applied as a CSS
1500
+ * background image on a wrapper element. Tiled rotated text via
1501
+ * `<pattern>`-like SVG referenced through `background-image:url(…)`.
1502
+ *
1503
+ * Theme-aware: the SVG uses `fill='currentColor'`, and the wrapper
1504
+ * sets `color: var(--muted-foreground)` so dark / light / accent
1505
+ * axes flow through without per-instance overrides.
1506
+ *
1507
+ * Cardinal rules honoured:
1508
+ * §21 — colour reads from `var(--muted-foreground)` (theme axis).
1509
+ * §22 — no hardcoded colour literal in the SVG (currentColor).
1510
+ * §23 — no prop name collides with the locked vocabulary; the
1511
+ * API mirrors the same `content` / `rotate` / `gap` /
1512
+ * `fontSize` / `fontFamily` / `opacity` surface as the
1513
+ * design canon's watermark example.
1514
+ *
1515
+ * @example
1516
+ * <Watermark content="Famgia · Confidential">
1517
+ * <Card>…</Card>
1518
+ * </Watermark>
1519
+ */
1520
+ interface WatermarkProps extends Omit<ComponentProps<"div">, "content"> {
1521
+ /** Single line or multi-line text. Empty → no watermark drawn. */
1522
+ content?: string | string[];
1523
+ /** Rotation in degrees. Default `-22`. */
1524
+ rotate?: number;
1525
+ /** Tile gap `[x, y]` in pixels. Default `[120, 80]`. */
1526
+ gap?: [number, number];
1527
+ /** Font size in pixels. Default `14`. */
1528
+ fontSize?: number;
1529
+ /** Font family — defaults to inherited system stack. */
1530
+ fontFamily?: string;
1531
+ /** Opacity 0-1. Default `0.12`. */
1532
+ opacity?: number;
1533
+ children?: ReactNode;
1534
+ }
1535
+ declare const Watermark: react.ForwardRefExoticComponent<Omit<WatermarkProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
1536
+
1537
+ /**
1538
+ * Popconfirm — inline confirmation popover anchored to its trigger.
1539
+ *
1540
+ * <Popconfirm
1541
+ * title="削除しますか?"
1542
+ * description="このアイテムは復元できません。"
1543
+ * confirmLabel="削除"
1544
+ * confirmVariant="destructive"
1545
+ * onConfirm={() => deleteItem()}
1546
+ * >
1547
+ * <Button variant="destructive">削除</Button>
1548
+ * </Popconfirm>
1549
+ *
1550
+ * Distinct from AlertDialog / Modal (full-screen modal for
1551
+ * high-stakes decisions that need focus trap + scrim). Popconfirm
1552
+ * is a LIGHTWEIGHT inline confirm — the trigger stays in flow, the
1553
+ * popover anchors next to it, no overlay dim.
1554
+ *
1555
+ * Vocabulary (per cardinal rule 23 §B):
1556
+ * - `open` / `defaultOpen` / `onOpenChange` — Radix overlay state
1557
+ * - `placement` — popover anchor side
1558
+ * - `title` / `description` / `icon` slots
1559
+ * - `confirmVariant` — Button `variant` value ("primary" | "destructive")
1560
+ */
1561
+ interface PopconfirmProps {
1562
+ title: ReactNode;
1563
+ description?: ReactNode;
1564
+ confirmLabel?: ReactNode;
1565
+ cancelLabel?: ReactNode;
1566
+ /** Button variant for the confirm action ("primary" | "destructive"). */
1567
+ confirmVariant?: "primary" | "destructive";
1568
+ /** Leading icon shown beside the title. */
1569
+ icon?: ReactNode;
1570
+ onConfirm?: () => void;
1571
+ onCancel?: () => void;
1572
+ open?: boolean;
1573
+ defaultOpen?: boolean;
1574
+ onOpenChange?: (open: boolean) => void;
1575
+ /** The trigger element (rendered via Radix `asChild`). */
1576
+ children?: ReactNode;
1577
+ /** Anchor side relative to the trigger. */
1578
+ placement?: "top" | "right" | "bottom" | "left";
1579
+ className?: string;
1580
+ }
1581
+ declare function Popconfirm({ title, description, confirmLabel, cancelLabel, confirmVariant, icon, onConfirm, onCancel, open, defaultOpen, onOpenChange, children, placement, className, }: PopconfirmProps): react_jsx_runtime.JSX.Element;
1582
+
1583
+ interface BreadcrumbOption {
1584
+ label: ReactNode;
1585
+ href?: string;
1586
+ current?: boolean;
1587
+ }
1588
+ interface BreadcrumbProps extends HTMLAttributes<HTMLElement> {
1589
+ items: BreadcrumbOption[];
1590
+ separator?: ReactNode;
1591
+ }
1592
+ declare const Breadcrumb: react.ForwardRefExoticComponent<BreadcrumbProps & react.RefAttributes<HTMLElement>>;
1593
+
1594
+ /**
1595
+ * Anchor — in-page scroll-spy navigation.
1596
+ *
1597
+ * Data-driven API:
1598
+ * <Anchor items={[{ href: "#intro", label: "Intro" }, …]} />
1599
+ *
1600
+ * Vocabulary (§23.B):
1601
+ * - `orientation` — axis of stack ("vertical" default | "horizontal")
1602
+ * - `sticky` — pin-on-scroll boolean
1603
+ * - `offset` — pixel offset for IntersectionObserver root margin
1604
+ * - `value` / `defaultValue` / `onValueChange` — controlled/uncontrolled
1605
+ * active section (the active hash; mirrors Tabs/Select selection
1606
+ * vocabulary; auto-detected via IntersectionObserver when uncontrolled)
1607
+ */
1608
+ type AnchorOrientation = "horizontal" | "vertical";
1609
+ interface AnchorItem {
1610
+ href: string;
1611
+ label: ReactNode;
1612
+ }
1613
+ interface AnchorProps extends Omit<ComponentProps<"nav">, "defaultValue" | "onChange"> {
1614
+ orientation?: AnchorOrientation;
1615
+ sticky?: boolean;
1616
+ /** Pixel offset from the top of the viewport for scroll-spy detection. */
1617
+ offset?: number;
1618
+ items: AnchorItem[];
1619
+ /** Controlled active href (`#intro` etc.). */
1620
+ value?: string;
1621
+ /** Uncontrolled initial active href. */
1622
+ defaultValue?: string;
1623
+ onValueChange?: (href: string) => void;
1624
+ }
1625
+ declare const Anchor: react.ForwardRefExoticComponent<Omit<AnchorProps, "ref"> & react.RefAttributes<HTMLElement>>;
1626
+
1627
+ type MenuOrientation = "horizontal" | "vertical";
1628
+ interface MenuOption {
1629
+ value?: string;
1630
+ label?: ReactNode;
1631
+ disabled?: boolean;
1632
+ icon?: ReactNode;
1633
+ extra?: ReactNode;
1634
+ type?: "item" | "group" | "divider";
1635
+ items?: MenuOption[];
1636
+ }
1637
+ interface MenuProps extends Omit<ComponentProps<"ul">, "onChange" | "children"> {
1638
+ orientation?: MenuOrientation;
1639
+ value?: string;
1640
+ defaultValue?: string;
1641
+ onValueChange?: (value: string) => void;
1642
+ items: MenuOption[];
1643
+ }
1644
+ declare const Menu: react.ForwardRefExoticComponent<Omit<MenuProps, "ref"> & react.RefAttributes<HTMLUListElement>>;
1645
+
1646
+ /**
1647
+ * Pagination — page jumper.
1648
+ *
1649
+ * <Pagination total={120} pageSize={10} defaultValue={1} onValueChange={…} />
1650
+ *
1651
+ * Three variants:
1652
+ * - `default` (pill bar) — freestanding pagination chips
1653
+ * - `simple` — only ‹ N/M ›
1654
+ * - `embedded` — table-footer layout (`info` + page-size changer +
1655
+ * numeric pager). Use when embedding inside a `<Table>` footer.
1656
+ *
1657
+ * Vocabulary (§23.B):
1658
+ * - `value` / `defaultValue` / `onValueChange` — current page (1-based)
1659
+ * - `pageSize` / `defaultPageSize` / `onPageSizeChange` — rows per page
1660
+ * - `size` — "small" | "default" — dimensional scale (default + simple)
1661
+ * - `variant` — visual treatment (above)
1662
+ * - `justify` — "start" | "center" | "end" | "space-between" (matches FlexJustify)
1663
+ * - `disabled` — interaction state
1664
+ * - `showTotal`, `showSizeChanger`, `showFirstLast`, `hideOnSinglePage`
1665
+ * — adjective-boolean toggles
1666
+ */
1667
+ type PaginationSize = "small" | "default";
1668
+ type PaginationVariant = "default" | "simple" | "embedded";
1669
+ /** Justify values match FlexJustify spelling (`"space-between"`) so the
1670
+ * vocabulary stays uniform across layout primitives. Pagination ships
1671
+ * 4 of FlexJustify's 6 values (no `space-around` / `space-evenly`). */
1672
+ type PaginationJustify = "start" | "center" | "end" | "space-between";
1673
+ interface PaginationProps extends Omit<ComponentProps<"nav">, "onChange" | "defaultValue" | "value"> {
1674
+ /** Total row count. */
1675
+ total: number;
1676
+ /** Rows per page. Controlled or uncontrolled via `defaultPageSize`. */
1677
+ pageSize?: number;
1678
+ defaultPageSize?: number;
1679
+ onPageSizeChange?: (pageSize: number) => void;
1680
+ /** Current page (1-based). Controlled or uncontrolled via `defaultValue`. */
1681
+ value?: number;
1682
+ defaultValue?: number;
1683
+ onValueChange?: (page: number) => void;
1684
+ size?: PaginationSize;
1685
+ variant?: PaginationVariant;
1686
+ justify?: PaginationJustify;
1687
+ disabled?: boolean;
1688
+ /** Selectable page sizes when `showSizeChanger` is true. */
1689
+ pageSizeOptions?: number[];
1690
+ /** Render the page-size `<select>` (embedded variant only). */
1691
+ showSizeChanger?: boolean;
1692
+ /** Render first/last page chevron buttons (embedded variant). */
1693
+ showFirstLast?: boolean;
1694
+ /** Suppress render when total fits in a single page. */
1695
+ hideOnSinglePage?: boolean;
1696
+ /** Show total-row label. Accepts a render function for full control. */
1697
+ showTotal?: boolean | ((total: number, range: [number, number]) => ReactNode);
1698
+ /** Sibling pages either side of current (default 1). */
1699
+ siblings?: number;
1700
+ /** Pages anchored at each end before the ellipsis (default 1). */
1701
+ boundary?: number;
1702
+ /** Override page-size dropdown label (defaults to i18n `table.pageSize`). */
1703
+ pageSizeLabel?: ReactNode;
1704
+ /** Override first-page button aria-label. */
1705
+ firstPageLabel?: string;
1706
+ /** Override previous-page button aria-label. */
1707
+ previousPageLabel?: string;
1708
+ /** Override next-page button aria-label. */
1709
+ nextPageLabel?: string;
1710
+ /** Override last-page button aria-label. */
1711
+ lastPageLabel?: string;
1712
+ }
1713
+ /**
1714
+ * Laravel-style page range — first + last anchor pages, a window of
1715
+ * `sibling` pages around the current page, and `"gap"` markers
1716
+ * (rendered as `…`) where pages are elided. Exported for consumers
1717
+ * building custom paginators.
1718
+ *
1719
+ * computePageRange(1, 52) → [1, 2, 3, "gap", 52]
1720
+ * computePageRange(25, 52) → [1, "gap", 24, 25, 26, "gap", 52]
1721
+ * computePageRange(3, 6) → [1, 2, 3, 4, 5, 6]
1722
+ */
1723
+ declare function computePageRange(current: number, total: number, sibling?: number, boundary?: number): Array<number | "gap">;
1724
+ declare const Pagination: react.ForwardRefExoticComponent<Omit<PaginationProps, "ref"> & react.RefAttributes<HTMLElement>>;
1725
+
1726
+ type StepsOrientation = "horizontal" | "vertical";
1727
+ interface StepsItem {
1728
+ title?: ReactNode;
1729
+ description?: ReactNode;
1730
+ icon?: ReactNode;
1731
+ content?: ReactNode;
1732
+ className?: string;
1733
+ }
1734
+ interface StepsProps extends Omit<ComponentProps<"ol">, "children" | "color"> {
1735
+ items: StepsItem[];
1736
+ orientation?: StepsOrientation;
1737
+ current?: number;
1738
+ }
1739
+ declare const Steps: react.ForwardRefExoticComponent<Omit<StepsProps, "ref"> & react.RefAttributes<HTMLOListElement>>;
1740
+
1741
+ /**
1742
+ * Progress — linear or circular progress indicator.
1743
+ *
1744
+ * Vocabulary (per cardinal rule 23 §B — concept-first):
1745
+ * - `value` / `max` — Radix-style numeric state (matches Tabs/Select).
1746
+ * - `variant` — `line` (default) or `circle`.
1747
+ * - `color` — semantic role (`default` / `info` / `success` /
1748
+ * `warning` / `destructive`).
1749
+ * - `size` — dimensional scale (`small` / `default` / `large`).
1750
+ * - `showInfo` — render the numeric label (default `true`).
1751
+ * - `strokeWidth` — circle stroke thickness in user units (default 6).
1752
+ * - `format` — custom label renderer; receives `(value, max)`.
1753
+ *
1754
+ * Line variant reuses the canonical `.prog` atom from
1755
+ * `shell/75-card-atoms.css`; circle variant renders an SVG sweep with
1756
+ * `currentColor` so the outer `.progress-color-*` class drives the
1757
+ * arc colour. ARIA: `role="progressbar"` + `aria-valuenow/min/max`.
1758
+ */
1759
+ type ProgressVariant = "line" | "circle";
1760
+ /** Alias of the shared `FeedbackColorProp` — same shape as
1761
+ * AlertColor / ResultColor; kept as a named export for back-compat. */
1762
+ type ProgressColor = FeedbackColorProp;
1763
+ type ProgressSize = "small" | "default" | "large";
1764
+ interface ProgressProps extends Omit<ComponentProps<"div">, "color"> {
1765
+ /** Current progress value (0 – `max`). Defaults to 0. */
1766
+ value?: number;
1767
+ /** Maximum value. Defaults to 100. */
1768
+ max?: number;
1769
+ /** Visual shape — line bar or circular sweep. */
1770
+ variant?: ProgressVariant;
1771
+ /** Semantic colour role. */
1772
+ color?: ProgressColor;
1773
+ /** Dimensional scale. */
1774
+ size?: ProgressSize;
1775
+ /** Render the numeric label (defaults to true). */
1776
+ showInfo?: boolean;
1777
+ /** Circle stroke thickness (defaults to 6). */
1778
+ strokeWidth?: number;
1779
+ /** Custom label renderer. */
1780
+ format?: (value: number, max: number) => ReactNode;
1781
+ }
1782
+ declare const Progress: react.ForwardRefExoticComponent<Omit<ProgressProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
1783
+
1784
+ /**
1785
+ * IconRow — `20px icon | content` two-column row used by detail panels
1786
+ * and create-event dialogs. Keeps icon glyphs aligned in a tight column
1787
+ * regardless of body height.
1788
+ *
1789
+ * @example
1790
+ * <IconRow icon={<Clock />}>
1791
+ * <div>10:00 – 11:00</div>
1792
+ * <div className="muted">GMT+09</div>
1793
+ * </IconRow>
1794
+ */
1795
+ type IconRowAlign = "top" | "center";
1796
+ interface IconRowProps extends Omit<ComponentProps<"div">, "children"> {
1797
+ icon: ReactNode;
1798
+ align?: IconRowAlign;
1799
+ children?: ReactNode;
1800
+ }
1801
+ declare function IconRow({ icon, align, className, children, ...rest }: IconRowProps): react_jsx_runtime.JSX.Element;
1802
+
1803
+ /**
1804
+ * AvatarStack — overlapping circular initials avatars with a `+N`
1805
+ * overflow chip. Border = `--background` to knock the avatars out of
1806
+ * the surface they sit on.
1807
+ *
1808
+ * @example
1809
+ * <AvatarStack
1810
+ * items={[{ id: "y", short: "YT", color: "#1e50a2", name: "Yuki" }]}
1811
+ * max={3}
1812
+ * />
1813
+ */
1814
+ interface AvatarStackItem {
1815
+ id: string;
1816
+ short: string;
1817
+ color: string;
1818
+ name?: string;
1819
+ }
1820
+ interface AvatarStackProps extends Omit<ComponentProps<"div">, "children"> {
1821
+ items: AvatarStackItem[];
1822
+ /** Maximum number of avatars before overflow chip. Default 3. */
1823
+ max?: number;
1824
+ /** Pixel size of each avatar. Default 22. */
1825
+ size?: number;
1826
+ }
1827
+ declare function AvatarStack({ items, max, size, className, style, ...rest }: AvatarStackProps): react_jsx_runtime.JSX.Element;
1828
+
1829
+ /**
1830
+ * ColorSwatchCheckbox — Google-Calendar-style "color square = on/off"
1831
+ * checkbox. Border paints in `color`; fill paints `color` when checked.
1832
+ * Hidden native `<input>` keeps it a real form control + a11y target.
1833
+ *
1834
+ * @example
1835
+ * <ColorSwatchCheckbox
1836
+ * color="#4c6cb3"
1837
+ * label="godx-admin · Product"
1838
+ * checked={shown}
1839
+ * onChange={(next) => setShown(next)}
1840
+ * />
1841
+ */
1842
+ interface ColorSwatchCheckboxProps extends Omit<ComponentProps<"label">, "onChange"> {
1843
+ color: string;
1844
+ label: string;
1845
+ checked: boolean;
1846
+ onChange?: (next: boolean) => void;
1847
+ /** Marks the row as read-only (renders an "R" hint instead of a swatch). */
1848
+ readonly?: boolean;
1849
+ disabled?: boolean;
1850
+ }
1851
+ declare function ColorSwatchCheckbox({ color, label, checked, onChange, readonly, disabled, className, ...rest }: ColorSwatchCheckboxProps): react_jsx_runtime.JSX.Element;
1852
+
1853
+ /**
1854
+ * CalendarOption — color-swatch + name label used inside calendar
1855
+ * pickers (e.g. "Save to which calendar" select). Stays presentational;
1856
+ * the consuming select / dropdown handles state.
1857
+ */
1858
+ interface CalendarOptionProps extends ComponentProps<"span"> {
1859
+ color: string;
1860
+ name: string;
1861
+ /** Suffix label (e.g. "(read-only)"). */
1862
+ meta?: string;
1863
+ }
1864
+ declare function CalendarOption({ color, name, meta, className, ...rest }: CalendarOptionProps): react_jsx_runtime.JSX.Element;
1865
+
1866
+ /**
1867
+ * AttendeeChip — pill with leading initials avatar + name + optional
1868
+ * remove (✕). Used in event composer attendee fields and similar
1869
+ * "selected items" chip arrays.
1870
+ */
1871
+ interface AttendeeChipProps extends ComponentProps<"span"> {
1872
+ name: string;
1873
+ short: string;
1874
+ color: string;
1875
+ onRemove?: () => void;
1876
+ }
1877
+ declare function AttendeeChip({ name, short, color, onRemove, className, ...rest }: AttendeeChipProps): react_jsx_runtime.JSX.Element;
1878
+
1879
+ /**
1880
+ * AttendeeListItem — row used in event-detail attendee lists. Avatar,
1881
+ * name, optional "(you)" marker, optional org line, optional trailing
1882
+ * status badge slot.
1883
+ */
1884
+ interface AttendeeListItemProps extends ComponentProps<"div"> {
1885
+ name: string;
1886
+ short: string;
1887
+ color: string;
1888
+ /** Display "(you)" suffix. */
1889
+ isSelf?: boolean;
1890
+ /** Show "Organizer · " prefix in the org line. */
1891
+ isOrganizer?: boolean;
1892
+ org?: string;
1893
+ /** Trailing slot — typically a small Badge. */
1894
+ status?: ReactNode;
1895
+ /** i18n override for "(you)" — defaults to en. */
1896
+ selfLabel?: string;
1897
+ organizerLabel?: string;
1898
+ }
1899
+ declare function AttendeeListItem({ name, short, color, isSelf, isOrganizer, org, status, selfLabel, organizerLabel, className, ...rest }: AttendeeListItemProps): react_jsx_runtime.JSX.Element;
1900
+
1901
+ /**
1902
+ * AllDayChip — solid-color rounded chip used for all-day events across
1903
+ * week-band, day-header strip, and month-cell rows.
1904
+ *
1905
+ * Sizes:
1906
+ * - `compact` — week-band / detail rows
1907
+ * - `month` — month-cell rows (slightly smaller radius + font)
1908
+ * - `pill` — day-view header (full pill radius, larger font)
1909
+ */
1910
+ type AllDayChipSize = "compact" | "month" | "pill";
1911
+ interface AllDayChipProps extends ComponentProps<"button"> {
1912
+ color: string;
1913
+ size?: AllDayChipSize;
1914
+ children: ComponentProps<"button">["children"];
1915
+ }
1916
+ declare function AllDayChip({ color, size, className, style, children, ...rest }: AllDayChipProps): react_jsx_runtime.JSX.Element;
1917
+
1918
+ /**
1919
+ * DayHeaderPill — small day-of-week label + 32px circular day-of-month
1920
+ * pill rendered above each Week-view column.
1921
+ *
1922
+ * default — neutral
1923
+ * today — filled accent + white number
1924
+ * selected — soft accent tint + accent number
1925
+ */
1926
+ type DayHeaderPillState = "default" | "today" | "selected";
1927
+ interface DayHeaderPillProps extends ComponentProps<"div"> {
1928
+ dow: string;
1929
+ day: number;
1930
+ state?: DayHeaderPillState;
1931
+ }
1932
+ declare function DayHeaderPill({ dow, day, state, className, ...rest }: DayHeaderPillProps): react_jsx_runtime.JSX.Element;
1933
+
1934
+ /**
1935
+ * TimeGrid primitives — `GridColumn` (a day-of-events column with
1936
+ * hour-line dividers), `TimeGutter` (the labelled hour rail next to
1937
+ * it), and `NowLine` (auto-refreshing horizontal indicator at the
1938
+ * current time). All consume `--accent-color`, `--surface-*`, `--border`
1939
+ * via the `.tg-*` classes in shell.css; no service-specific tokens.
1940
+ *
1941
+ * @example
1942
+ * <div style={{ display: "grid", gridTemplateColumns: "60px 1fr" }}>
1943
+ * <TimeGutter dayStartH={6} dayEndH={22} pxPerMin={0.9} locale="vi" />
1944
+ * <GridColumn dayStartH={6} dayEndH={22} pxPerMin={0.9} isToday>
1945
+ * <NowLine dayStartH={6} pxPerMin={0.9} />
1946
+ * <EventBlock ... />
1947
+ * </GridColumn>
1948
+ * </div>
1949
+ */
1950
+ interface GridColumnProps {
1951
+ /** Day-start hour (inclusive). Default 6. */
1952
+ dayStartH?: number;
1953
+ /** Day-end hour (exclusive). Default 22. */
1954
+ dayEndH?: number;
1955
+ /** Vertical pixels per minute. Default 0.9 (1h = 54px). */
1956
+ pxPerMin?: number;
1957
+ /** Tints column subtly when true. */
1958
+ isToday?: boolean;
1959
+ className?: string;
1960
+ style?: CSSProperties;
1961
+ children?: ReactNode;
1962
+ }
1963
+ declare function GridColumn({ dayStartH, dayEndH, pxPerMin, isToday, className, style, children, }: GridColumnProps): react_jsx_runtime.JSX.Element;
1964
+ interface TimeGutterProps {
1965
+ dayStartH?: number;
1966
+ dayEndH?: number;
1967
+ pxPerMin?: number;
1968
+ locale?: TimeLocale;
1969
+ className?: string;
1970
+ }
1971
+ declare function TimeGutter({ dayStartH, dayEndH, pxPerMin, locale, className, }: TimeGutterProps): react_jsx_runtime.JSX.Element;
1972
+ interface NowLineProps {
1973
+ /** Optional override; defaults to the live current time. */
1974
+ nowDate?: Date;
1975
+ dayStartH?: number;
1976
+ pxPerMin?: number;
1977
+ /** Auto-refresh interval in ms. Default 60_000 (1 minute). */
1978
+ refreshMs?: number;
1979
+ }
1980
+ declare function NowLine({ nowDate, dayStartH, pxPerMin, refreshMs, }: NowLineProps): react_jsx_runtime.JSX.Element | null;
1981
+
1982
+ /**
1983
+ * EventBlock — absolutely-positioned timed-event chip inside a
1984
+ * `GridColumn`. Supports four visual treatments:
1985
+ *
1986
+ * - `solid` — saturated brand color (customer / external meets)
1987
+ * - `tint` — soft-mixed background (organizer / accepted)
1988
+ * - `tentative` — diagonal hatch over a soft tint
1989
+ * - `focus` — repeating subtle stripes (deep-work blocks)
1990
+ *
1991
+ * Multi-event overlap is handled by `lane` / `lanes` props (horizontal
1992
+ * slicing of the column). The selected state paints a 2px accent ring
1993
+ * via `--accent-color`.
1994
+ *
1995
+ * Service-agnostic: pass any `CalendarEvent`-shaped object + a `color`.
1996
+ */
1997
+ interface EventBlockProps {
1998
+ event: CalendarEvent;
1999
+ /** Event color (typically from the event's calendar). */
2000
+ color: string;
2001
+ variant?: EventBlockVariant;
2002
+ /** Whether the chip renders as the selected event (accent ring). */
2003
+ selected?: boolean;
2004
+ /** Horizontal lane index (0-based) for overlap layout. */
2005
+ lane?: number;
2006
+ /** Total lane count in the day. */
2007
+ lanes?: number;
2008
+ /** Day-grid configuration — must match the parent GridColumn. */
2009
+ dayStartH?: number;
2010
+ pxPerMin?: number;
2011
+ onClick?: (event: CalendarEvent) => void;
2012
+ /** Optional render-prop slot for trailing line (e.g. "cá nhân"). */
2013
+ footer?: ReactNode;
2014
+ className?: string;
2015
+ }
2016
+ declare function EventBlock({ event, color, variant, selected, lane, lanes, dayStartH, pxPerMin, onClick, footer, className, }: EventBlockProps): react_jsx_runtime.JSX.Element;
2017
+ /**
2018
+ * Naïve lane allocator for overlapping timed events on a single day.
2019
+ * Mutates / annotates input objects with `_lane` and `_lanes`; returns
2020
+ * the sorted array. Reused by Week + Day screens.
2021
+ */
2022
+ interface LanedEvent extends CalendarEvent {
2023
+ _lane: number;
2024
+ _lanes: number;
2025
+ }
2026
+ declare function layoutEvents(dayEvents: CalendarEvent[]): LanedEvent[];
2027
+
2028
+ /**
2029
+ * MonthCell — one day cell of a 6×7 month grid. Render-prop friendly:
2030
+ * the `events` slot is anything the caller wants (`EventPill` /
2031
+ * `AllDayChip` / their own render). Includes a "+N more" overflow row
2032
+ * helper.
2033
+ */
2034
+ interface MonthCellProps extends Omit<ComponentProps<"div">, "children"> {
2035
+ day: number;
2036
+ /** Is this the today cell? Paints the day-number with accent. */
2037
+ today?: boolean;
2038
+ /** Is this cell from a different month? Dimmed. */
2039
+ dim?: boolean;
2040
+ /** Sat/Sun cell — slight tint. */
2041
+ weekend?: boolean;
2042
+ /** Optional small header chip next to the number (e.g. "Th. 5" when day === 1). */
2043
+ monthLabel?: ReactNode;
2044
+ /** Events to render — typically EventPill / AllDayChip components. */
2045
+ events?: ReactNode;
2046
+ /** Number of additional events beyond what's rendered. */
2047
+ overflow?: number;
2048
+ /** Localised "+N more" label builder. */
2049
+ formatOverflow?: (n: number) => ReactNode;
2050
+ }
2051
+ declare function MonthCell({ day, today, dim, weekend, monthLabel, events, overflow, formatOverflow, className, ...rest }: MonthCellProps): react_jsx_runtime.JSX.Element;
2052
+
2053
+ /**
2054
+ * EventPill — single-line clickable row for month-cell event lists.
2055
+ * Layout: `dot · HH:MM · title`. For all-day variants, callers should
2056
+ * use `AllDayChip` instead (different visual).
2057
+ */
2058
+ interface EventPillProps extends ComponentProps<"button"> {
2059
+ color: string;
2060
+ time?: string;
2061
+ title: string;
2062
+ dim?: boolean;
2063
+ }
2064
+ declare function EventPill({ color, time, title, dim, className, ...rest }: EventPillProps): react_jsx_runtime.JSX.Element;
2065
+
2066
+ /**
2067
+ * AvailabilityRow — one person × N time-slot row used in scheduling /
2068
+ * find-a-time grids. Generic over the slot dimension: `slots[i] = 0`
2069
+ * (free), `1` (tentative — hatched), `2` (busy — solid tint). An
2070
+ * optional `selectedRange` paints the picked-time overlay in accent.
2071
+ *
2072
+ * Two-cell grid: `personSlot | cellsSlot`, sized externally.
2073
+ */
2074
+ interface AvailabilityRowProps {
2075
+ /** Person slot — typically `<AttendeeListItem>` or a name + avatar. */
2076
+ person: ReactNode;
2077
+ /** 0 = free, 1 = tentative, 2 = busy — one per slot index. */
2078
+ slots: ReadonlyArray<0 | 1 | 2>;
2079
+ /** [startSlotInclusive, endSlotExclusive] — paints the accent overlay. */
2080
+ selectedRange?: [number, number] | null;
2081
+ className?: string;
2082
+ }
2083
+ declare function AvailabilityRow({ person, slots, selectedRange, className, }: AvailabilityRowProps): react_jsx_runtime.JSX.Element;
2084
+
2085
+ /**
2086
+ * SuggestedSlotCard — small button-shaped card surfacing a scheduling
2087
+ * recommendation. Two visual treatments: `default` (neutral border) and
2088
+ * `best` (accent border + accent text, e.g. "all attendees free").
2089
+ */
2090
+ interface SuggestedSlotCardProps extends ComponentProps<"button"> {
2091
+ label: ReactNode;
2092
+ meta?: ReactNode;
2093
+ /** Highlight as the best/recommended option. */
2094
+ best?: boolean;
2095
+ }
2096
+ declare function SuggestedSlotCard({ label, meta, best, className, ...rest }: SuggestedSlotCardProps): react_jsx_runtime.JSX.Element;
2097
+
2098
+ /**
2099
+ * Date / time input primitives — segmented + popover combinations
2100
+ * built on Adobe React Aria Components. Mirrors the dxs-kintai
2101
+ * design-system patterns A–E from
2102
+ * `design-handoff/ui-system/dxs-kintai-design-system/project/preview/comp-datetimepicker.html`.
2103
+ *
2104
+ * Five exports:
2105
+ *
2106
+ * - `<DateField>` — segmented date input only (no popover).
2107
+ * - `<TimeField>` — segmented time input (HH:MM, optional seconds).
2108
+ * - `<DatePicker>` — single-date trigger + popover + Calendar.
2109
+ * - `<DateRangePicker>` — range trigger + popover + RangeCalendar.
2110
+ *
2111
+ * All four consume `@internationalized/date` values (CalendarDate,
2112
+ * Time, etc.) — convert to/from JS Date via `parseDate`, `parseTime`,
2113
+ * `today(getLocalTimeZone())` from `@internationalized/date`. The
2114
+ * segmented inputs are timezone-correct and locale-aware.
2115
+ *
2116
+ * Visual theming flows through the four theme axes
2117
+ * (`docs/specs/01-theme-axes.md`): `data-theme`, `data-accent`,
2118
+ * `data-density`, `data-font-size`.
2119
+ */
2120
+ interface DateFieldProps<T extends DateValue = DateValue> extends DateFieldProps$1<T> {
2121
+ label?: string;
2122
+ description?: string;
2123
+ errorMessage?: string;
2124
+ className?: string;
2125
+ }
2126
+ declare function DateField<T extends DateValue = DateValue>({ label, description, errorMessage, className, ...rest }: DateFieldProps<T>): react_jsx_runtime.JSX.Element;
2127
+ interface TimeFieldProps<T extends TimeValue = TimeValue> extends TimeFieldProps$1<T> {
2128
+ label?: string;
2129
+ description?: string;
2130
+ errorMessage?: string;
2131
+ className?: string;
2132
+ }
2133
+ declare function TimeField<T extends TimeValue = TimeValue>({ label, description, errorMessage, className, ...rest }: TimeFieldProps<T>): react_jsx_runtime.JSX.Element;
2134
+ interface DatePickerProps<T extends DateValue = DateValue> extends DatePickerProps$1<T> {
2135
+ label?: string;
2136
+ description?: string;
2137
+ errorMessage?: string;
2138
+ className?: string;
2139
+ }
2140
+ declare function DatePicker<T extends DateValue = DateValue>({ label, description, errorMessage, className, ...rest }: DatePickerProps<T>): react_jsx_runtime.JSX.Element;
2141
+ interface DateRangePickerProps<T extends DateValue = DateValue> extends DateRangePickerProps$1<T> {
2142
+ label?: string;
2143
+ description?: string;
2144
+ errorMessage?: string;
2145
+ className?: string;
2146
+ }
2147
+ declare function DateRangePicker<T extends DateValue = DateValue>({ label, description, errorMessage, className, ...rest }: DateRangePickerProps<T>): react_jsx_runtime.JSX.Element;
2148
+
2149
+ interface AutoCompleteOption {
2150
+ value: string;
2151
+ label: string;
2152
+ disabled?: boolean;
2153
+ }
2154
+ interface AutoCompleteProps {
2155
+ options: AutoCompleteOption[];
2156
+ value?: string;
2157
+ defaultValue?: string;
2158
+ onValueChange?: (value: string) => void;
2159
+ placeholder?: string;
2160
+ size?: "small" | "default" | "large";
2161
+ disabled?: boolean;
2162
+ open?: boolean;
2163
+ defaultOpen?: boolean;
2164
+ onOpenChange?: (open: boolean) => void;
2165
+ allowCustomValue?: boolean;
2166
+ className?: string;
2167
+ }
2168
+ declare const AutoComplete: react.ForwardRefExoticComponent<AutoCompleteProps & react.RefAttributes<HTMLInputElement>>;
2169
+
2170
+ /**
2171
+ * Cascader — nested column navigation. Renders a Popover whose body
2172
+ * is a horizontal row of vertical columns. Each column lists the
2173
+ * options at that depth; clicking a non-leaf option expands the next
2174
+ * column to the right; clicking a leaf commits the path of values.
2175
+ *
2176
+ * Vocabulary (cardinal rule 23 §B):
2177
+ * - `value` / `defaultValue` / `onValueChange` — Radix-style selection
2178
+ * (path is `string[]`; callback also receives the leaf option)
2179
+ * - `size` — "small" | "default" | "large"
2180
+ * - `open` / `defaultOpen` / `onOpenChange` — overlay state
2181
+ * - `disabled`, `placeholder`, `className`
2182
+ */
2183
+ interface CascaderOption {
2184
+ value: string;
2185
+ label: string;
2186
+ disabled?: boolean;
2187
+ children?: CascaderOption[];
2188
+ }
2189
+ interface CascaderProps {
2190
+ options: CascaderOption[];
2191
+ value?: string[];
2192
+ defaultValue?: string[];
2193
+ onValueChange?: (path: string[], leafOption: CascaderOption) => void;
2194
+ placeholder?: string;
2195
+ size?: "small" | "default" | "large";
2196
+ disabled?: boolean;
2197
+ open?: boolean;
2198
+ defaultOpen?: boolean;
2199
+ onOpenChange?: (open: boolean) => void;
2200
+ /** Display the full path as breadcrumb text or just the leaf label. */
2201
+ showFullPath?: boolean;
2202
+ className?: string;
2203
+ }
2204
+ declare const Cascader: react.ForwardRefExoticComponent<CascaderProps & react.RefAttributes<HTMLButtonElement>>;
2205
+
2206
+ /**
2207
+ * TreeSelect — tree-structured Select. Renders a Popover containing a
2208
+ * recursive tree where each node is expandable. Multi-select supported
2209
+ * via `multiple`; single-select highlights one node.
2210
+ *
2211
+ * Vocabulary (cardinal rule 23 §B):
2212
+ * - `value` / `defaultValue` / `onValueChange` — Radix-style selection
2213
+ * (single: `string`; multiple: `string[]`)
2214
+ * - `multiple` — boolean (NEVER `mode="multiple"`)
2215
+ * - `size` — "small" | "default" | "large"
2216
+ * - `open` / `defaultOpen` / `onOpenChange`
2217
+ * - `disabled`, `placeholder`, `className`
2218
+ */
2219
+ interface TreeSelectOption {
2220
+ value: string;
2221
+ label: string;
2222
+ disabled?: boolean;
2223
+ children?: TreeSelectOption[];
2224
+ }
2225
+ interface TreeSelectProps {
2226
+ options: TreeSelectOption[];
2227
+ value?: string | string[];
2228
+ defaultValue?: string | string[];
2229
+ onValueChange?: (value: string | string[]) => void;
2230
+ multiple?: boolean;
2231
+ placeholder?: string;
2232
+ size?: "small" | "default" | "large";
2233
+ disabled?: boolean;
2234
+ open?: boolean;
2235
+ defaultOpen?: boolean;
2236
+ onOpenChange?: (open: boolean) => void;
2237
+ /** Expand every node on first render. */
2238
+ defaultExpandAll?: boolean;
2239
+ className?: string;
2240
+ }
2241
+ declare const TreeSelect: react.ForwardRefExoticComponent<TreeSelectProps & react.RefAttributes<HTMLButtonElement>>;
2242
+
2243
+ /**
2244
+ * ColorPicker — decorative color-selection trigger + popover panel.
2245
+ *
2246
+ * <ColorPicker defaultValue="#3b82f6" presets={["#ef4444", "#10b981"]} />
2247
+ *
2248
+ * Modeled on Input/Popconfirm prop shape per cardinal rule 23 §D.4.
2249
+ * The trigger is a `.colorpicker-trigger` button (swatch + hex label);
2250
+ * the popover hosts a native `<input type="color">` canvas plus a hex
2251
+ * text input + preset swatch grid.
2252
+ *
2253
+ * Vocabulary (cardinal rule 23 §B):
2254
+ * - `value` / `defaultValue` / `onValueChange` — Radix-style state
2255
+ * - `size` — `"small" | "default" | "large"` (matches Input)
2256
+ * - `disabled` — boolean
2257
+ * - `open` / `defaultOpen` / `onOpenChange` — popover state
2258
+ * - `presets` — configurable hex list
2259
+ * - `showAlpha` — toggle alpha slider (0..1)
2260
+ *
2261
+ * Never uses Ant's `format` / `mode` aliases — `value` is always a hex
2262
+ * string (with optional `#rrggbbaa` when `showAlpha` is true).
2263
+ */
2264
+ type ColorPickerSize = "small" | "default" | "large";
2265
+ interface ColorPickerProps {
2266
+ value?: string;
2267
+ defaultValue?: string;
2268
+ onValueChange?: (hex: string) => void;
2269
+ presets?: string[];
2270
+ showAlpha?: boolean;
2271
+ size?: ColorPickerSize;
2272
+ disabled?: boolean;
2273
+ open?: boolean;
2274
+ defaultOpen?: boolean;
2275
+ onOpenChange?: (open: boolean) => void;
2276
+ className?: string;
2277
+ }
2278
+ declare const ColorPicker: react.ForwardRefExoticComponent<ColorPickerProps & react.RefAttributes<HTMLButtonElement>>;
2279
+
2280
+ /**
2281
+ * Rate — star-rating primitive (decorative input).
2282
+ *
2283
+ * <Rate defaultValue={3.5} allowHalf />
2284
+ * <Rate value={4} count={5} onValueChange={setRating} />
2285
+ * <Rate value={4} icon={<Heart />} />
2286
+ *
2287
+ * Vocabulary (cardinal rule 23 §B):
2288
+ * - `value` / `defaultValue` / `onValueChange` — Radix-style state
2289
+ * - `size` — `"small" | "default" | "large"` (svg sized via CSS)
2290
+ * - `disabled` — boolean
2291
+ * - `readOnly` — display-only (matches Input)
2292
+ * - `count` — how many icons (default 5)
2293
+ * - `allowHalf` — left-half-click commits 0.5 step
2294
+ * - `icon` slot — custom icon node (per cardinal rule 23 §B `icon`
2295
+ * slot — NEVER Ant's `character`)
2296
+ *
2297
+ * The rendered row uses lucide `Star` filled vs hollow (and `StarHalf`
2298
+ * when `allowHalf` resolves to a 0.5 fraction). When `icon` is
2299
+ * provided, the custom node is reused for filled / hollow alike with
2300
+ * `data-filled` driving the color via CSS.
2301
+ */
2302
+ type RateSize = "small" | "default" | "large";
2303
+ interface RateProps {
2304
+ value?: number;
2305
+ defaultValue?: number;
2306
+ onValueChange?: (value: number) => void;
2307
+ /** Max number of stars (default 5). */
2308
+ count?: number;
2309
+ allowHalf?: boolean;
2310
+ /** Render a custom icon instead of Star. */
2311
+ icon?: ReactNode;
2312
+ size?: RateSize;
2313
+ disabled?: boolean;
2314
+ /** Read-only display (no hover effect). */
2315
+ readOnly?: boolean;
2316
+ className?: string;
2317
+ }
2318
+ declare const Rate: react.ForwardRefExoticComponent<RateProps & react.RefAttributes<HTMLDivElement>>;
2319
+
2320
+ /**
2321
+ * Carousel — image / content slide deck.
2322
+ *
2323
+ * Pass `slides`, one ReactNode per slide. The track translates by
2324
+ * index along the configured `orientation`. Plain
2325
+ * React + CSS transform — no external dep. Autoplay pauses on hover
2326
+ * (mouseenter / mouseleave handlers; CSS `:hover` cannot reach JS).
2327
+ *
2328
+ * Prop vocabulary follows cardinal rule 23 §B: `value` /
2329
+ * `defaultValue` / `onValueChange` for selection state (current slide
2330
+ * index), `orientation`, `autoplay` (ms), `loop`, `arrows`, `dots`.
2331
+ * NEVER Ant's `activeKey` / `autoplaySpeed`.
2332
+ *
2333
+ */
2334
+ interface CarouselProps {
2335
+ /** Current slide index (0-based). */
2336
+ value?: number;
2337
+ /** Initial slide index when uncontrolled. */
2338
+ defaultValue?: number;
2339
+ onValueChange?: (index: number) => void;
2340
+ /** Auto-advance interval in ms. Omit / 0 to disable. */
2341
+ autoplay?: number;
2342
+ /** Wrap from last → first / first → last. Default true. */
2343
+ loop?: boolean;
2344
+ /** Show prev / next arrows. Default true. */
2345
+ arrows?: boolean;
2346
+ /** Show dot indicators. Default true. */
2347
+ dots?: boolean;
2348
+ /** Stack axis. Default "horizontal". */
2349
+ orientation?: "horizontal" | "vertical";
2350
+ className?: string;
2351
+ slides: ReactNode[];
2352
+ }
2353
+ declare function Carousel({ value: controlled, defaultValue, onValueChange, autoplay, loop, arrows, dots, orientation, className, slides, }: CarouselProps): react_jsx_runtime.JSX.Element;
2354
+
2355
+ interface CollapseItem {
2356
+ value: string;
2357
+ title: ReactNode;
2358
+ extra?: ReactNode;
2359
+ disabled?: boolean;
2360
+ content?: ReactNode;
2361
+ }
2362
+ interface CollapseProps {
2363
+ /** Expanded panel key(s). String for single, string[] for multi. */
2364
+ value?: string | string[];
2365
+ defaultValue?: string | string[];
2366
+ onValueChange?: (value: string | string[]) => void;
2367
+ /** Allow multiple panels open simultaneously. Default false. */
2368
+ multiple?: boolean;
2369
+ /** Visual treatment. Default "default". */
2370
+ variant?: "default" | "ghost" | "outlined";
2371
+ /** Dimensional scale. Default "default". */
2372
+ size?: "small" | "default" | "large";
2373
+ /** Disable every panel. */
2374
+ disabled?: boolean;
2375
+ items: CollapseItem[];
2376
+ className?: string;
2377
+ }
2378
+ declare function Collapse({ value: controlled, defaultValue, onValueChange, multiple, variant, size, disabled, items, className, }: CollapseProps): react_jsx_runtime.JSX.Element;
2379
+
2380
+ /**
2381
+ * List — header + items + optional footer surface.
2382
+ *
2383
+ * Two consumption modes:
2384
+ *
2385
+ * Data-driven: pass `dataSource` + `renderItem`.
2386
+ *
2387
+ * Prop vocabulary follows cardinal rule 23 §B: `size` for dimensional
2388
+ * scale, `bordered` boolean for surface treatment, `cols` for grid
2389
+ * mode (column count). NEVER Ant's `itemLayout` / `grid` object —
2390
+ * `cols` is the one knob.
2391
+ *
2392
+ * @example data-driven
2393
+ * <List
2394
+ * dataSource={users}
2395
+ * renderItem={(u) => (
2396
+ * <UserRow avatar={<Avatar src={u.photo} />} title={u.name} description={u.role} />
2397
+ * )}
2398
+ * />
2399
+ *
2400
+ */
2401
+ interface ListProps<T = unknown> {
2402
+ /** Data array; required for data-driven mode. Omit when using children. */
2403
+ dataSource?: T[];
2404
+ /** Render fn for each datum. */
2405
+ renderItem?: (item: T, index: number) => ReactNode;
2406
+ /** Optional header content. */
2407
+ header?: ReactNode;
2408
+ /** Optional footer (e.g. pagination). */
2409
+ footer?: ReactNode;
2410
+ /** Title rendered above the list as a heading. */
2411
+ title?: ReactNode;
2412
+ /** Empty state when dataSource is empty (defaults to plain "No data"). */
2413
+ empty?: ReactNode;
2414
+ /** Dimensional scale. Default "default". */
2415
+ size?: "small" | "default" | "large";
2416
+ /** Wrap the list in a bordered surface. */
2417
+ bordered?: boolean;
2418
+ /** Show dividers between items. Defaults to true when `bordered`. */
2419
+ split?: boolean;
2420
+ /** Render a loading placeholder instead of items. */
2421
+ loading?: boolean;
2422
+ /** Grid mode — number of columns. Omit for list (1 column) layout. */
2423
+ cols?: number;
2424
+ className?: string;
2425
+ }
2426
+ declare function List<T = unknown>({ dataSource, renderItem, header, footer, title, empty, size, bordered, split, loading, cols, className, }: ListProps<T>): react_jsx_runtime.JSX.Element;
2427
+
2428
+ /**
2429
+ * Image — `<img>` element with optional click-to-preview lightbox.
2430
+ *
2431
+ * Default opens a fullscreen overlay on click; Esc + outside-click +
2432
+ * the corner × button all close it. Loading / error states render
2433
+ * via the `placeholder` / `fallback` slots (skeleton-styled by
2434
+ * default through the canonical `.image-wrap` class chain in
2435
+ * `src/styles/shell/35-badge-tag-misc.css`).
2436
+ *
2437
+ * @example
2438
+ * <Image src="/photo.jpg" alt="Sunset" fit="cover" preview />
2439
+ */
2440
+ interface ImageProps extends Omit<ComponentProps<"img">, "loading"> {
2441
+ src: string;
2442
+ alt: string;
2443
+ /** Click → fullscreen preview overlay. Default true. */
2444
+ preview?: boolean;
2445
+ /** Loading placeholder (default: skeleton block). */
2446
+ placeholder?: ReactNode;
2447
+ /** Fallback when src fails to load. */
2448
+ fallback?: ReactNode;
2449
+ /** Eager / lazy loading. Default "lazy". */
2450
+ loadStrategy?: "eager" | "lazy";
2451
+ /** Object-fit. Default "cover". */
2452
+ fit?: "cover" | "contain" | "fill" | "none" | "scale-down";
2453
+ className?: string;
2454
+ style?: CSSProperties;
2455
+ }
2456
+ declare function Image({ src, alt, preview, placeholder, fallback, loadStrategy, fit, className, style, onClick, onLoad, onError, ...rest }: ImageProps): react_jsx_runtime.JSX.Element;
2457
+
2458
+ /**
2459
+ * QRCode — render a QR code as inline SVG.
2460
+ *
2461
+ * Uses the `qrcode` library to compute the matrix (no canvas / no
2462
+ * `dangerouslySetInnerHTML`); each dark cell becomes one `<rect>`.
2463
+ * Foreground colour defaults to `currentColor` so the QR theme
2464
+ * follows the surrounding text colour (cardinal rule 21 — theme
2465
+ * axis flows naturally).
2466
+ *
2467
+ * @example
2468
+ * <QRCode value="https://godx.jp" />
2469
+ * <QRCode value="https://example" size={240} icon={<Logo />} />
2470
+ */
2471
+ interface QRCodeProps {
2472
+ /** Text / URL to encode. */
2473
+ value: string;
2474
+ /** Output size in pixels. Default 160. */
2475
+ size?: number;
2476
+ /** Error correction level. Default "M". */
2477
+ errorLevel?: "L" | "M" | "Q" | "H";
2478
+ /** Foreground colour (defaults to `currentColor` — themeable). */
2479
+ color?: string;
2480
+ /** Background colour (defaults to `transparent`). */
2481
+ bgColor?: string;
2482
+ /** Optional icon overlay (logo in the centre). */
2483
+ icon?: ReactNode;
2484
+ /** Icon size in px. Default = 22% of `size`. */
2485
+ iconSize?: number;
2486
+ className?: string;
2487
+ }
2488
+ declare function QRCode({ value, size, errorLevel, color, bgColor, icon, iconSize, className, }: QRCodeProps): react_jsx_runtime.JSX.Element;
2489
+
2490
+ interface TooltipProps {
2491
+ /** Tooltip text / content. When set, primitive auto-wires the
2492
+ * Radix Root + Trigger(asChild) + Content around the child trigger
2493
+ * element — the consumer just provides the trigger node. When
2494
+ * omitted, the primitive renders children without tooltip wiring. */
2495
+ content?: ReactNode;
2496
+ /** Trigger element (data-driven mode) OR Radix Root children
2497
+ * (compositional mode). */
2498
+ children?: ReactNode;
2499
+ /** Anchor side per cardinal rule 23 §B `placement` vocabulary.
2500
+ * Default `top`. Honoured only in data-driven mode. */
2501
+ placement?: "top" | "right" | "bottom" | "left";
2502
+ /** Open / close delay in ms. Default 200. Overrides the
2503
+ * app-wide default set on `<GodxConfigProvider>` for this single
2504
+ * tooltip; without an override the Provider's shared timing wins. */
2505
+ delayDuration?: number;
2506
+ open?: boolean;
2507
+ defaultOpen?: boolean;
2508
+ onOpenChange?: (open: boolean) => void;
2509
+ }
2510
+ declare function Tooltip({ content, children, placement, delayDuration, open, defaultOpen, onOpenChange, }: TooltipProps): react_jsx_runtime.JSX.Element;
2511
+
2512
+ /**
2513
+ * Timeline — chronological event rail.
2514
+ *
2515
+ * Data-driven API (cardinal rule 23 + rule 31 — no parallel
2516
+ * sub-component primitives). Consumers pass an `items` array; the
2517
+ * primitive renders the rail end-to-end. Per-item customisation
2518
+ * flows through optional `renderItem` for advanced cases.
2519
+ *
2520
+ * Three visual variants, each backed by an existing CSS atom shipped
2521
+ * with the dxs-kintai card canon (`src/styles/shell/80-card-sections.css`):
2522
+ *
2523
+ * - `"list"` (default) — vertical rail with markers, `.tl-list` + `.tl-item`.
2524
+ * - `"branching"` — approval pipeline with left timestamp, dot, body.
2525
+ * `.tl-br` + `.row`.
2526
+ * - `"feed"` — social-style avatar feed. `.tl-feed` + `.item`.
2527
+ *
2528
+ * Vocabulary (cardinal rule 23 §B):
2529
+ * - `variant` — visual treatment ("list" | "branching" | "feed").
2530
+ * - `color` per item — semantic role of the marker.
2531
+ * - `current` per item — boolean, marks the active item.
2532
+ * - `animate` per item — pulsing ring around the marker.
2533
+ * - NEVER `mode` / `position` / `type` / `dot` / `pending` synonyms
2534
+ * (cardinal rule 32 — a separate `pending` prop is redundant when
2535
+ * a regular item with `animate: true` covers the same need).
2536
+ *
2537
+ * @example Data-driven (preferred)
2538
+ * <Timeline
2539
+ * items={[
2540
+ * { color: "success", title: "申請", time: "09:30" },
2541
+ * { color: "primary", current: true, animate: true, title: "承認待ち" },
2542
+ * ]}
2543
+ * />
2544
+ *
2545
+ * @example With renderItem (full custom)
2546
+ * <Timeline
2547
+ * items={events}
2548
+ * renderItem={(it) => <RichRow data={it} />}
2549
+ * />
2550
+ */
2551
+ type TimelineVariant = "list" | "branching" | "feed";
2552
+ /** Identical to `TagPresetColor` — the framework's semantic palette
2553
+ * minus `"secondary"` (which is Typography's text-dimming slot).
2554
+ * Aliased so any colour added to `ColorProp` lights up here too. */
2555
+ type TimelineColor = Exclude<ColorProp, "secondary">;
2556
+ interface TimelineItem {
2557
+ /** Stable key for React reconciliation. Defaults to the item index
2558
+ * but consumers should pass a real id for lists that re-order. */
2559
+ key?: string | number;
2560
+ /** Semantic role of the marker. Default "default". */
2561
+ color?: TimelineColor;
2562
+ /** Heavier outline on the marker — typically the active step. */
2563
+ current?: boolean;
2564
+ /** Pulsing ring around the marker — typically paired with
2565
+ * `current: true` on an in-progress item. Honours
2566
+ * `prefers-reduced-motion` (rule 6 a11y baseline). */
2567
+ animate?: boolean;
2568
+ /** Time / timestamp slot — right-side label in `branching`, inline
2569
+ * `.ts` in `list`, inline `.ts` in `feed`. Accepts a temporal value
2570
+ * (`Date`, ISO string, or any `@internationalized/date` value) — in
2571
+ * that case the active provider's locale + timezone format it via
2572
+ * `useFormatters` (`format` or `relative` controlled by the
2573
+ * Timeline `timeFormat` prop). Pass `ReactNode` to opt out. */
2574
+ time?: ReactNode | Date | CalendarDate | CalendarDateTime | ZonedDateTime;
2575
+ /** Avatar slot — `feed` variant only. */
2576
+ avatar?: ReactNode;
2577
+ title?: ReactNode;
2578
+ description?: ReactNode;
2579
+ /** Extra content rendered after `title` + `description`. */
2580
+ children?: ReactNode;
2581
+ /** Per-item class merged onto the row. */
2582
+ className?: string;
2583
+ }
2584
+ interface TimelineProps {
2585
+ /** Items to render. Each row is a single object — no sub-component
2586
+ * ceremony. */
2587
+ items: TimelineItem[];
2588
+ /** Custom row renderer. When set, takes priority over the default
2589
+ * variant rendering — receives the item + the active variant +
2590
+ * index, returns the full row JSX. */
2591
+ renderItem?: (item: TimelineItem, variant: TimelineVariant, index: number) => ReactNode;
2592
+ /** Visual variant. Default `list`. */
2593
+ variant?: TimelineVariant;
2594
+ /** Render items last-first. */
2595
+ reverse?: boolean;
2596
+ /** Show the vertical connector line that joins markers. Default
2597
+ * `true` for `list` + `branching`; ignored by `feed` (feed has no
2598
+ * connector by design). */
2599
+ connector?: boolean;
2600
+ /** How to render temporal `time` values. `"relative"` (default for
2601
+ * `feed`) renders "2 時間前" / "2 hours ago" via `useFormatters`.
2602
+ * `"datetime"` renders an absolute "MMM d, HH:mm" style. `"time"`
2603
+ * renders the time-of-day portion only. Ignored when `time` is a
2604
+ * `ReactNode` (string / JSX). */
2605
+ timeFormat?: "relative" | "datetime" | "date" | "time";
2606
+ className?: string;
2607
+ }
2608
+ declare function Timeline({ items, renderItem, variant, reverse, connector, timeFormat, className, }: TimelineProps): react_jsx_runtime.JSX.Element;
2609
+
2610
+ /**
2611
+ * Tree — standalone hierarchical view (no popover).
2612
+ *
2613
+ * React Aria-backed sibling of `<TreeSelect>` — same recursive shape,
2614
+ * but renders inline with ARIA tree keyboard navigation and selection.
2615
+ * Useful for org charts, file explorers, category navigators where the
2616
+ * tree IS the surface (not a dropdown).
2617
+ *
2618
+ * Vocabulary (cardinal rule 23 §B):
2619
+ * - `value` / `defaultValue` / `onValueChange` — Radix-style selection
2620
+ * (single: `string`; multiple: `string[]`).
2621
+ * - `multiple` — boolean (NEVER `mode="multiple"`).
2622
+ * - `expandedKeys` / `defaultExpandedKeys` / `onExpandedKeysChange`
2623
+ * — expansion state.
2624
+ * - `checkable` — render checkboxes alongside labels.
2625
+ * - `showLine` — render connector guides.
2626
+ * - `density` — local row spacing override for tree-heavy surfaces.
2627
+ *
2628
+ * @example
2629
+ * <Tree
2630
+ * treeData={[
2631
+ * { key: "eng", title: "エンジニアリング", children: [
2632
+ * { key: "fe", title: "Frontend" },
2633
+ * { key: "be", title: "Backend" },
2634
+ * ]},
2635
+ * ]}
2636
+ * defaultExpandedKeys={["eng"]}
2637
+ * />
2638
+ */
2639
+ interface TreeNode {
2640
+ key: string;
2641
+ title: ReactNode;
2642
+ icon?: ReactNode;
2643
+ disabled?: boolean;
2644
+ selectable?: boolean;
2645
+ children?: TreeNode[];
2646
+ }
2647
+ interface TreeRenderItemState {
2648
+ node: TreeNode;
2649
+ isExpanded: boolean;
2650
+ isSelected: boolean;
2651
+ isDisabled: boolean;
2652
+ hasChildren: boolean;
2653
+ level: number;
2654
+ }
2655
+ type TreeDensity = "compact" | "default" | "comfortable";
2656
+ interface TreeProps {
2657
+ treeData: TreeNode[];
2658
+ /** Selected key(s). */
2659
+ value?: string | string[];
2660
+ defaultValue?: string | string[];
2661
+ onValueChange?: (value: string | string[]) => void;
2662
+ /** Allow multi-select. */
2663
+ multiple?: boolean;
2664
+ /** Initially-expanded node keys. */
2665
+ defaultExpandedKeys?: string[];
2666
+ /** Controlled expanded keys. */
2667
+ expandedKeys?: string[];
2668
+ onExpandedKeysChange?: (keys: string[]) => void;
2669
+ /** Render checkboxes (multi-select via checkbox). Implies `multiple`. */
2670
+ checkable?: boolean;
2671
+ /** Render connector lines between depths. */
2672
+ showLine?: boolean;
2673
+ /** Local row spacing override. Defaults to the page density. */
2674
+ density?: TreeDensity;
2675
+ /** Override the row's icon + label content without replacing the ARIA tree. */
2676
+ renderItem?: (state: TreeRenderItemState) => ReactNode;
2677
+ className?: string;
2678
+ }
2679
+ declare const Tree: react.ForwardRefExoticComponent<TreeProps & react.RefAttributes<HTMLDivElement>>;
2680
+
2681
+ /**
2682
+ * Tour — multi-step product walkthrough.
2683
+ *
2684
+ * Overlays the viewport, highlights a target through a true cutout,
2685
+ * advances step-by-step. The callout positions near the target's
2686
+ * bounding rect (or page-centre when `placement="center"`).
2687
+ *
2688
+ * Vocabulary (cardinal rule 23 §B):
2689
+ * - `open` / `defaultOpen` / `onOpenChange` — Radix-style visibility.
2690
+ * - `current` / `defaultCurrent` / `onCurrentChange` — active step.
2691
+ * - `placement` — positional anchor of the callout.
2692
+ *
2693
+ * @example
2694
+ * <Tour
2695
+ * defaultOpen
2696
+ * steps={[
2697
+ * { target: "#new-btn", title: "新規作成", description: "…" },
2698
+ * { target: "#filter", title: "絞り込み" },
2699
+ * ]}
2700
+ * />
2701
+ */
2702
+ type TourPlacement = "top" | "right" | "bottom" | "left" | "center";
2703
+ interface TourStep {
2704
+ /** CSS selector OR ref to highlight. Omit / `null` → centred. */
2705
+ target?: string | RefObject<HTMLElement | null>;
2706
+ title: ReactNode;
2707
+ description?: ReactNode;
2708
+ /** Callout placement relative to the target. Default "bottom". */
2709
+ placement?: TourPlacement;
2710
+ }
2711
+ interface TourLabels {
2712
+ prev?: string;
2713
+ next?: string;
2714
+ finish?: string;
2715
+ skip?: string;
2716
+ }
2717
+ interface TourProps {
2718
+ steps: TourStep[];
2719
+ open?: boolean;
2720
+ defaultOpen?: boolean;
2721
+ onOpenChange?: (open: boolean) => void;
2722
+ /** Controlled current step (0-based). */
2723
+ current?: number;
2724
+ defaultCurrent?: number;
2725
+ onCurrentChange?: (step: number) => void;
2726
+ /** Called when the user clicks Finish on the last step. */
2727
+ onFinish?: () => void;
2728
+ /** Called when the user dismisses (Skip / Esc). */
2729
+ onClose?: () => void;
2730
+ /** Override button strings. */
2731
+ labels?: TourLabels;
2732
+ className?: string;
2733
+ }
2734
+ declare function Tour({ steps, open, defaultOpen, onOpenChange, current, defaultCurrent, onCurrentChange, onFinish, onClose, labels, className, }: TourProps): react.ReactPortal | null;
265
2735
 
266
- export { Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeVariant, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, Card, CardContent, CardHeader, CardSubtitle, type CardSubtitleProps, CardTitle, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuTrigger, Input, type InputProps, Label, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Separator, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, TimeInput, type TimeInputProps, cn };
2736
+ export { Alert, type AlertColor, AlertDialog, type AlertDialogProps, type AlertProps, type AlertVariant, AllDayChip, type AllDayChipProps, type AllDayChipSize, Anchor, type AnchorItem, type AnchorOrientation, type AnchorProps, AttendeeChip, type AttendeeChipProps, AttendeeListItem, type AttendeeListItemProps, AutoComplete, type AutoCompleteOption, type AutoCompleteProps, AvailabilityRow, type AvailabilityRowProps, Avatar, type AvatarProps, type AvatarShape, type AvatarSize, type AvatarSizeToken, AvatarStack, type AvatarStackItem, type AvatarStackProps, Badge, type BadgeProps, type BadgeVariant, Breadcrumb, type BreadcrumbOption, type BreadcrumbProps, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Calendar, CalendarEvent, CalendarOption, type CalendarOptionProps, Card, type CardAccent, type CardBand, type CardPadding, type CardProps, type CardTone, Carousel, type CarouselProps, Cascader, type CascaderOption, type CascaderProps, Checkbox, CheckboxGroup, type CheckboxGroupProps, type CheckboxOption, Checklist, type ChecklistItem, type ChecklistProps, Col, type ColProps, Collapse, type CollapseItem, type CollapseProps, ColorPicker, type ColorPickerProps, type ColorPickerSize, ColorProp, ColorSwatchCheckbox, type ColorSwatchCheckboxProps, DateField, type DateFieldProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, DayHeaderPill, type DayHeaderPillProps, type DayHeaderPillState, Descriptions, type DescriptionsOption, type DescriptionsProps, Dialog, type DialogProps, DropdownMenu, Empty, type EmptyProps, EventBlock, type EventBlockProps, EventBlockVariant, EventPill, type EventPillProps, FeedbackColorProp, Field, type FieldCountProps, type FieldHelpProps, type FieldHelpTone, type FieldLabelProps, type FieldProps, Flex, type FlexAlign, type FlexGap, type FlexJustify, type FlexProps, Form, FormField, type FormFieldProps, type FormLayout, type FormProps, GridColumn, type GridColumnProps, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, IconRow, type IconRowAlign, type IconRowProps, IconSizeProp, Image, type ImageProps, Input, InputNumber, type InputNumberProps, InputPassword, type InputPasswordProps, type InputProps, InputSearch, type InputSearchProps, type InputSize, type InputStatus, Label, type LanedEvent, type LinkProps, List, type ListProps, LoadingProp, type LocaleTabItem, type LocaleTabStatus, LocaleTabs, type LocaleTabsProps, Menu, type MenuOption, type MenuOrientation, type MenuProps, MonthCell, type MonthCellProps, NowLine, type NowLineProps, PageHeader, type PageHeaderProps, type PageHeaderVariant, Pagination, type PaginationJustify, type PaginationProps, type PaginationSize, type PaginationVariant, type ParagraphProps, Popconfirm, type PopconfirmProps, Popover, Progress, type ProgressColor, type ProgressProps, type ProgressSize, type ProgressVariant, QRCode, type QRCodeProps, Radio, RadioGroup, type RadioGroupProps, type RadioOption, type RadioProps, Rate, type RateProps, type RateSize, Result, type ResultColor, type ResultProps, Select, type SelectOption, type SelectOptionGroup, type SelectOptions, type SelectProps, Separator, Sheet, type SheetProps, type SheetSide, SizeProp, Skeleton, type SkeletonProps, Slider, type SliderProps, Space, type SpaceProps, type SpaceSize, Spinner, type SpinnerProps, type SpinnerSize, type SpinnerTone, Statistic, type StatisticProps, Steps, type StepsItem, type StepsOrientation, type StepsProps, SuggestedSlotCard, type SuggestedSlotCardProps, Switch, Table, TableProps, Tabs, type TabsOrientation, type TabsPlacement, type TabsProps, type TabsVariant, type TextProps, Textarea, type TextareaProps, type TextareaResize, TimeField, type TimeFieldProps, TimeGutter, type TimeGutterProps, TimeInput, type TimeInputProps, TimeLocale, Timeline, type TimelineColor, type TimelineItem, type TimelineProps, type TimelineVariant, type TitleProps, type TitleSize, Toaster, Tooltip, type TooltipProps, Tour, type TourLabels, type TourPlacement, type TourProps, type TourStep, Transfer, type TransferItem, type TransferProps, type TransferSize, Tree, type TreeDensity, type TreeNode, type TreeProps, type TreeRenderItemState, TreeSelect, type TreeSelectOption, type TreeSelectProps, Typography, type TypographyColor, type TypographyCommonProps, type TypographyTruncate, Watermark, type WatermarkProps, cn, computePageRange, layoutEvents, useFormLoading };