@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.
- package/BRAND.md +39 -29
- package/CHANGELOG.md +554 -10
- package/README.md +143 -168
- package/config/eslint.js +54 -0
- package/config/prettier.cjs +20 -0
- package/config/tsconfig.base.json +22 -0
- package/config/vitest.base.ts +26 -0
- package/dist/MiniMonth-YAmPGEpC.d.ts +143 -0
- package/dist/Table.types-BbsxoIYE.d.ts +352 -0
- package/dist/color-DO0qqUAb.d.ts +38 -0
- package/dist/components/composites.d.ts +963 -0
- package/dist/components/composites.js +7340 -0
- package/dist/components/composites.js.map +1 -0
- package/dist/components/primitives.d.ts +2633 -163
- package/dist/components/primitives.js +7264 -165
- package/dist/components/primitives.js.map +1 -1
- package/dist/components/shell.d.ts +82 -12
- package/dist/components/shell.js +168 -162
- package/dist/components/shell.js.map +1 -1
- package/dist/hooks.d.ts +83 -8
- package/dist/hooks.js +497 -83
- package/dist/hooks.js.map +1 -1
- package/dist/i18n.d.ts +55 -3
- package/dist/i18n.js +456 -5
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +24 -5
- package/dist/index.js +12522 -267
- package/dist/index.js.map +1 -1
- package/dist/padding-DY0JV5Ja.d.ts +16 -0
- package/dist/preferences.d.ts +132 -0
- package/dist/preferences.js +262 -0
- package/dist/preferences.js.map +1 -0
- package/dist/props.d.ts +86 -0
- package/dist/props.js +16 -0
- package/dist/props.js.map +1 -0
- package/dist/size-CQwNvOWd.d.ts +19 -0
- package/dist/{data.d.ts → types-LTj-2bl-.d.ts} +7 -12
- package/dist/useTableViews-D5NIAJ7h.d.ts +154 -0
- package/package.json +92 -35
- package/src/tokens/tailwind.css +158 -0
- package/dist/components/screens.d.ts +0 -51
- package/dist/components/screens.js +0 -806
- package/dist/components/screens.js.map +0 -1
- package/dist/data.js +0 -93
- package/dist/data.js.map +0 -1
- package/src/tokens/tokens-ext.css +0 -401
- 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 {
|
|
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
|
|
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
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
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
|
-
* -
|
|
27
|
-
* - `
|
|
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="
|
|
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" | "
|
|
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
|
|
145
|
+
* Button — canonical action primitive.
|
|
44
146
|
*
|
|
45
|
-
*
|
|
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
|
|
48
|
-
*
|
|
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
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
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
|
-
*
|
|
58
|
-
*
|
|
161
|
+
* Slot props (§N):
|
|
162
|
+
* startContent — ReactNode rendered before children (left icon)
|
|
163
|
+
* endContent — ReactNode rendered after children (right icon)
|
|
59
164
|
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
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" | "
|
|
65
|
-
type ButtonSize = "
|
|
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
|
|
198
|
+
declare const Button: react.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
|
|
73
199
|
|
|
74
200
|
/**
|
|
75
|
-
* Card — surface container
|
|
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
|
-
*
|
|
78
|
-
*
|
|
214
|
+
* Plus a `band` prop for the H11 color-strip variant (4px strip
|
|
215
|
+
* above the header).
|
|
79
216
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
|
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
|
|
270
|
+
* Input — text input with affix slots that match the canonical
|
|
271
|
+
* dxs-kintai `.input-wrap` shell.
|
|
99
272
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
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
|
-
|
|
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
|
-
/**
|
|
107
|
-
|
|
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
|
-
*
|
|
125
|
-
* `.tab` CSS from tokens.css. Keyboard navigation + ARIA come from
|
|
126
|
-
* Radix; the visual contract stays in the design tokens.
|
|
853
|
+
* Avatar — Ant-Design-shaped: shape + size + icon + image + initials.
|
|
127
854
|
*
|
|
128
|
-
*
|
|
129
|
-
* <
|
|
130
|
-
*
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
*
|
|
145
|
-
* + `.avatar.brand` in tokens.css.
|
|
894
|
+
* Statistic — Ant-Design KPI tile.
|
|
146
895
|
*
|
|
147
|
-
*
|
|
148
|
-
* <
|
|
149
|
-
* <
|
|
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
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
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
|
|
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
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
1177
|
+
* Calendar — accessible 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
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
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
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
declare
|
|
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
|
-
*
|
|
186
|
-
* (kebab, caret, button…). Styled via canonical `.dropdown-menu-*`
|
|
187
|
-
* classes from tokens.css.
|
|
1251
|
+
* Select — single-select picker.
|
|
188
1252
|
*
|
|
189
|
-
*
|
|
190
|
-
* `inset` for left-padding alignment when icons aren't on every row.
|
|
1253
|
+
* <Select options={[…]} value={…} onValueChange={…} placeholder="…" />
|
|
191
1254
|
*
|
|
192
|
-
*
|
|
193
|
-
*
|
|
194
|
-
*
|
|
195
|
-
*
|
|
196
|
-
*
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
*
|
|
225
|
-
* canonical `.calendar` class from tokens.css. Caller controls
|
|
226
|
-
* mode/selected/onSelect through DayPicker's standard props.
|
|
1299
|
+
* Checkbox — tri-state capable (checked / unchecked / indeterminate).
|
|
227
1300
|
*
|
|
228
|
-
*
|
|
229
|
-
*
|
|
230
|
-
* for Monday-first).
|
|
1301
|
+
* Two consumption modes (per cardinal rule 23 + rule 31 — no parallel
|
|
1302
|
+
* convenience wrappers):
|
|
231
1303
|
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
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
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
/**
|
|
242
|
-
|
|
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
|
-
/**
|
|
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
|
-
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
|
|
251
|
-
/**
|
|
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
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
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
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
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
|
-
|
|
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,
|
|
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 };
|