@wipco/sdui 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +27 -0
  3. package/dist/chunk-4SU2KYPU.js +59 -0
  4. package/dist/chunk-56KKWLNI.js +186 -0
  5. package/dist/chunk-7Y4J7EOK.js +115 -0
  6. package/dist/chunk-APCXOCAO.js +110 -0
  7. package/dist/chunk-AROOQ5W6.js +119 -0
  8. package/dist/chunk-DGPRX4MU.js +251 -0
  9. package/dist/chunk-IL2KS4WS.js +25 -0
  10. package/dist/chunk-KADFN76X.js +541 -0
  11. package/dist/chunk-KBHI3IUR.js +40 -0
  12. package/dist/chunk-LZJTKVMO.js +767 -0
  13. package/dist/chunk-MOIU7MUA.js +282 -0
  14. package/dist/chunk-MSAV4J4I.js +77 -0
  15. package/dist/chunk-OOHHW4K4.js +159 -0
  16. package/dist/chunk-Q6SBH63R.js +190 -0
  17. package/dist/chunk-QZQDHSMD.js +78 -0
  18. package/dist/chunk-RH7ESUE6.js +309 -0
  19. package/dist/chunk-SEBPBUZR.js +260 -0
  20. package/dist/chunk-USKRM22W.js +39 -0
  21. package/dist/chunk-WNYWTFGW.js +61 -0
  22. package/dist/chunk-WVRCIVAD.js +72 -0
  23. package/dist/chunk-YJMD6MOE.js +404 -0
  24. package/dist/chunk-ZNITJ4KK.js +433 -0
  25. package/dist/chunk-ZQR3ULVH.js +193 -0
  26. package/dist/chunk-ZUCI34QY.js +1290 -0
  27. package/dist/index.d.ts +391 -79
  28. package/dist/index.js +277 -758
  29. package/dist/meta.d.ts +10 -2
  30. package/dist/meta.js +268 -27
  31. package/dist/rich.js +3 -2
  32. package/dist/styles.css +334 -13
  33. package/dist/widgets/AutocompleteField.d.ts +96 -0
  34. package/dist/widgets/AutocompleteField.js +3 -0
  35. package/dist/widgets/ColumnBoard.d.ts +47 -0
  36. package/dist/widgets/ColumnBoard.js +2 -0
  37. package/dist/widgets/DiffView.d.ts +30 -0
  38. package/dist/widgets/DiffView.js +2 -0
  39. package/dist/widgets/Disclosure.d.ts +20 -0
  40. package/dist/widgets/Disclosure.js +2 -0
  41. package/dist/widgets/EventCalendar.d.ts +59 -0
  42. package/dist/widgets/EventCalendar.js +2 -0
  43. package/dist/widgets/ImageLightbox.d.ts +25 -0
  44. package/dist/widgets/ImageLightbox.js +2 -0
  45. package/dist/widgets/InlineEdit.d.ts +23 -0
  46. package/dist/widgets/InlineEdit.js +2 -0
  47. package/dist/widgets/JsonField.d.ts +24 -0
  48. package/dist/widgets/JsonField.js +2 -0
  49. package/dist/widgets/LiveClock.d.ts +21 -0
  50. package/dist/widgets/LiveClock.js +1 -0
  51. package/dist/widgets/OrgChart.d.ts +32 -0
  52. package/dist/widgets/OrgChart.js +2 -0
  53. package/dist/widgets/PeriodFilter.d.ts +48 -0
  54. package/dist/widgets/PeriodFilter.js +2 -0
  55. package/dist/widgets/PrintSheet.d.ts +23 -0
  56. package/dist/widgets/PrintSheet.js +2 -0
  57. package/dist/widgets/SearchableMultiPicker.d.ts +29 -0
  58. package/dist/widgets/SearchableMultiPicker.js +3 -0
  59. package/dist/widgets/SecureScreen.d.ts +25 -0
  60. package/dist/widgets/SecureScreen.js +2 -0
  61. package/dist/widgets/StackedMeter.d.ts +26 -0
  62. package/dist/widgets/StackedMeter.js +1 -0
  63. package/dist/widgets/Strip.d.ts +20 -0
  64. package/dist/widgets/Strip.js +1 -0
  65. package/dist/widgets/SummaryTable.d.ts +31 -0
  66. package/dist/widgets/SummaryTable.js +1 -0
  67. package/dist/widgets/TagMultiSelect.d.ts +25 -0
  68. package/dist/widgets/TagMultiSelect.js +2 -0
  69. package/dist/widgets/Timeline.d.ts +30 -0
  70. package/dist/widgets/Timeline.js +3 -0
  71. package/dist/widgets/TreePicker.d.ts +21 -0
  72. package/dist/widgets/TreePicker.js +3 -0
  73. package/dist/widgets/TreeView.d.ts +26 -0
  74. package/dist/widgets/TreeView.js +2 -0
  75. package/dist/widgets/index.d.ts +76 -0
  76. package/dist/widgets/index.js +69 -0
  77. package/package.json +93 -3
  78. package/dist/chunk-AR2JYE75.js +0 -889
package/dist/index.d.ts CHANGED
@@ -72,12 +72,23 @@ declare function Can({ entity, action, scope, fallback, children }: CanProps): R
72
72
  */
73
73
 
74
74
  interface IconProps extends React__default.SVGAttributes<SVGSVGElement> {
75
+ /** kebab-case Lucide 이름 — "scan-line", "layers", "circle-alert". */
75
76
  name: string;
77
+ /** 픽셀 박스. 기본 18. */
76
78
  size?: number;
79
+ /** 기본 1.5. 32px 위에서만 2를 쓴다. */
77
80
  strokeWidth?: number;
81
+ /** 주면 role="img" + aria-label. 장식 아이콘은 생략한다. */
82
+ title?: string;
78
83
  }
79
- /** 스트로크 아이콘. 등록되지 않은 이름은 점으로 대체된다. */
80
- declare function Icon({ name, size, strokeWidth, ...rest }: IconProps): React__default.JSX.Element;
84
+ /**
85
+ * 스트로크 아이콘. 130종을 24px 그리드 위에 그린다.
86
+ *
87
+ * **등록되지 않은 이름은 `null`이다** — 예전엔 점(●)으로 대체했는데, 그러면 스펙 오타나
88
+ * 아직 안 넣은 이름이 "없던 자국"으로 화면에 남는다. 빠진 아이콘은 비어 보이는 편이
89
+ * 낫고, 어차피 잘못된 이름은 check-meta가 팔레트 쪽에서 잡는다.
90
+ */
91
+ declare function Icon({ name, size, strokeWidth, className, style, title, ...rest }: IconProps): React__default.JSX.Element | null;
81
92
  interface ButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
82
93
  /** primary = WIPCO Blue, secondary = 외곽선(기본), ghost = 투명, danger = WIPCO Red, link = 인라인 */
83
94
  variant?: 'primary' | 'secondary' | 'ghost' | 'danger' | 'link';
@@ -87,33 +98,52 @@ interface ButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElem
87
98
  icon?: string;
88
99
  /** 후행 아이콘 이름 */
89
100
  iconEnd?: string;
90
- /** 라벨을 스피너로 바꾸고 입력을 막는다 */
101
+ /**
102
+ * 라벨을 감추고 스피너를 돌린다.
103
+ *
104
+ * 스피너는 **CSS가 그린다**(`.wp-btn--loading::after`) — 엘리먼트를 따로 넣지 않는다.
105
+ * 예전엔 `<span class="wp-spinner">`를 렌더했는데, 같은 클래스에 ::after 규칙을 가진
106
+ * 디자인 시스템 스타일시트와 겹치면 원이 두 개 돈다. 그릴 주체를 CSS 한쪽으로 모은다.
107
+ */
91
108
  loading?: boolean;
92
109
  block?: boolean;
93
110
  disabled?: boolean;
111
+ /**
112
+ * 다른 태그로 렌더한다. 링크로 보내야 하는 자리(SSO 이동 등)는 `as="a"` + `href`다 —
113
+ * `<button>`에 href를 달면 아무 데도 가지 않는다.
114
+ *
115
+ * button이 아닐 때는 `disabled` 속성이 없으므로 비활성은 `aria-disabled`로만 알린다
116
+ * (그래서 button일 때도 둘 다 붙인다 — 표기가 태그에 따라 달라지지 않게).
117
+ */
118
+ as?: 'button' | 'a' | 'span';
94
119
  children?: React__default.ReactNode;
95
120
  }
96
- declare function Button({ variant, size, icon, iconEnd, loading, block, disabled, children, className, type, ...rest }: ButtonProps): React__default.JSX.Element;
121
+ declare function Button({ variant, size, icon, iconEnd, loading, block, disabled, as, children, className, ...rest }: ButtonProps): React__default.JSX.Element;
97
122
  interface IconButtonProps extends React__default.ButtonHTMLAttributes<HTMLButtonElement> {
98
123
  icon: string;
99
- /** 접근성 라벨(필수 권장) */
124
+ /** 접근성 라벨(필수 권장) — title이자 aria-label이 된다. */
100
125
  label?: string;
101
- size?: 'xs' | 'sm' | 'md';
126
+ /** xs 24 · sm 28 · md 32(기본) · lg 40 px 정사각 */
127
+ size?: 'xs' | 'sm' | 'md' | 'lg';
102
128
  /**
103
129
  * 예전 이름. `variant`를 주지 않았을 때만 쓰인다 — `variant` 주석 참고.
104
130
  * @deprecated `variant`로 옮겨라. `tone="danger"`는 `variant="danger"`와 같다.
105
131
  */
106
132
  tone?: 'default' | 'danger';
107
133
  /**
108
- * 디자인 시스템 어휘. ghost = 투명(기본) · outlined = 하드라인 테두리 · danger = 빨강.
134
+ * 디자인 시스템 어휘. ghost = 투명(기본) · outlined = 하드라인 테두리 ·
135
+ * solid = 채움 · danger = 빨강 · onchrome = 네이비 사이드바/탑바 위.
109
136
  *
110
137
  * 같은 자리를 가리키는 프롭이 `tone`과 둘로 갈라져 있는데 **variant가 이긴다** —
111
138
  * 스펙과 디자인 시스템 문서가 쓰는 이름이 이쪽이고, 값 어휘도 넓다(outlined는 tone에 없다).
112
139
  * variant를 주지 않으면 tone이 그대로 먹으므로 tone만 쓰던 코드는 그대로 돈다.
113
140
  */
114
- variant?: 'ghost' | 'outlined' | 'danger';
141
+ variant?: 'ghost' | 'outlined' | 'solid' | 'danger' | 'onchrome';
142
+ /** 토글 상태 — aria-pressed로 나가고 선택 틴트를 입는다. */
143
+ pressed?: boolean;
144
+ disabled?: boolean;
115
145
  }
116
- declare function IconButton({ icon, label, size, tone, variant, className, type, ...rest }: IconButtonProps): React__default.JSX.Element;
146
+ declare function IconButton({ icon, label, size, tone, variant, pressed, disabled, className, type, ...rest }: IconButtonProps): React__default.JSX.Element;
117
147
  interface InputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'size'> {
118
148
  /** sm 28 · md 32(기본) · lg 40 px */
119
149
  size?: 'sm' | 'md' | 'lg';
@@ -124,15 +154,11 @@ interface InputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputEl
124
154
  /** 고정폭 글꼴 — ID, 좌표, 해시 */
125
155
  mono?: boolean;
126
156
  /**
127
- * 입력 오른쪽 끝에 겹쳐 그리는 후행 표시 — "원", "위", "mm" 같은 단위가 대부분이다.
128
- *
129
- * 단위를 값 안에 섞어 넣지 않는다는 규칙을 지키려면 값이 아니라 입력 위에 얹어야 해서,
130
- * 선행 `icon`과 같은 래퍼를 쓴다.
157
+ * 입력 오른쪽 끝에 겹쳐 그리는 후행 표시.
131
158
  *
132
- * 문자열은 **ICON_PATHS에 있는 이름이면 아이콘, 아니면 그대로 단위 글자**로 그린다.
133
- * 디자인 시스템 쪽 용례는 `trailing="eye"`(비밀번호 보기)처럼 아이콘 이름인데
134
- * 실제 스펙 9곳은 전부 "원"·"위" 같은 단위 글자라, 둘 중 하나만 고르면 나머지가 깨진다.
135
- * 단위가 아이콘 이름과 겹치는 일은 없으므로 이름으로 갈라도 안전하다.
159
+ * **문자열은 아이콘 이름으로 읽는다** — `trailing="eye"`(비밀번호 보기)가 원래 용례다.
160
+ * 등록되지 않은 이름이면 Icon이 null을 내므로 자리만 남는다. 단위 글자("원", "mm")를
161
+ * 넣고 싶으면 문자열이 아니라 노드로 줘라: `trailing={<span>원</span>}`.
136
162
  */
137
163
  trailing?: React__default.ReactNode;
138
164
  }
@@ -158,9 +184,16 @@ declare function Select({ options, size, invalid, placeholder, className, ...res
158
184
  interface CheckboxProps extends React__default.InputHTMLAttributes<HTMLInputElement> {
159
185
  label?: React__default.ReactNode;
160
186
  description?: React__default.ReactNode;
187
+ /**
188
+ * 부분 선택 — 전체선택 체크박스의 "일부만 골랐다" 상태.
189
+ *
190
+ * HTML 속성이 아니라 DOM 프로퍼티라 ref로 직접 넣어야 한다(마크업에 남지 않는다).
191
+ * 글리프도 체크가 아니라 빼기로 바뀐다.
192
+ */
193
+ indeterminate?: boolean;
161
194
  disabled?: boolean;
162
195
  }
163
- declare function Checkbox({ label, description, disabled, className, ...rest }: CheckboxProps): React__default.JSX.Element;
196
+ declare function Checkbox({ label, description, indeterminate, disabled, className, ...rest }: CheckboxProps): React__default.JSX.Element;
164
197
  interface SwitchProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'size'> {
165
198
  label?: React__default.ReactNode;
166
199
  size?: 'sm' | 'md';
@@ -230,10 +263,12 @@ interface ToastProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>,
230
263
  tone?: 'info' | 'success' | 'warning' | 'danger';
231
264
  title?: React__default.ReactNode;
232
265
  children?: React__default.ReactNode;
266
+ /** 인라인 액션 하나 — 되돌리기 같은 것. Button variant="link"를 넣는다. */
267
+ action?: React__default.ReactNode;
233
268
  onClose?: () => void;
234
269
  }
235
270
  /** 우하단 일시 알림. .wp-toast-region 안에 렌더링된다. */
236
- declare function Toast({ tone, title, children, onClose, className, ...rest }: ToastProps): React__default.JSX.Element;
271
+ declare function Toast({ tone, title, children, action, onClose, className, ...rest }: ToastProps): React__default.JSX.Element;
237
272
  interface TabItem {
238
273
  value: string;
239
274
  label: React__default.ReactNode;
@@ -245,8 +280,10 @@ interface TabsProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>,
245
280
  value: string;
246
281
  onChange?: (value: string) => void;
247
282
  size?: 'md' | 'lg';
283
+ /** 네이비 탑바 위 — 밝은 글자, 빨간 인디케이터. */
284
+ onChrome?: boolean;
248
285
  }
249
- declare function Tabs({ items, value, onChange, size, className, ...rest }: TabsProps): React__default.JSX.Element;
286
+ declare function Tabs({ items, value, onChange, size, onChrome, className, ...rest }: TabsProps): React__default.JSX.Element;
250
287
  interface TableColumn {
251
288
  key: string;
252
289
  header: React__default.ReactNode;
@@ -255,6 +292,8 @@ interface TableColumn {
255
292
  align?: 'left' | 'right';
256
293
  mono?: boolean;
257
294
  strong?: boolean;
295
+ /** 헤더를 정렬 버튼으로 만든다. 실제 정렬은 `sort`·`onSort`가 담당한다. */
296
+ sortable?: boolean;
258
297
  /**
259
298
  * 셀 값을 Badge로 렌더링 — JSON 스펙에서 쓸 수 있는 선언적 지정.
260
299
  * toneMap: 값 → tone, labelMap: 값 → 표시 텍스트(생략 시 값 그대로)
@@ -272,13 +311,24 @@ interface TableProps extends React__default.TableHTMLAttributes<HTMLTableElement
272
311
  /** 40px 대신 32px 행 */
273
312
  dense?: boolean;
274
313
  hover?: boolean;
314
+ /** 스크롤 본문용 고정 헤더 */
315
+ sticky?: boolean;
316
+ /** 현재 정렬 상태 — 해당 컬럼 헤더의 화살표 방향을 정한다 */
317
+ sort?: {
318
+ key: string;
319
+ dir: 'asc' | 'desc';
320
+ };
321
+ /** 정렬 헤더를 눌렀을 때. 주지 않으면 sortable 컬럼도 버튼이 되지 않는다 */
322
+ onSort?: (key: string) => void;
323
+ /** 선택된 행의 rowKey 값 — 해당 행에 aria-selected가 붙고 하이라이트된다 */
324
+ selectedIds?: any[];
275
325
  /** 행 key와 선택에 쓸 필드. 기본 "id" */
276
326
  rowKey?: string;
277
327
  onRowClick?: (row: any) => void;
278
328
  /** rows가 비었을 때 대신 렌더링 — EmptyState 권장 */
279
329
  empty?: React__default.ReactNode;
280
330
  }
281
- declare function Table({ columns, rows, dense, hover, rowKey, onRowClick, empty, className, ...rest }: TableProps): React__default.JSX.Element;
331
+ declare function Table({ columns, rows, dense, hover, sticky, sort, onSort, selectedIds, rowKey, onRowClick, empty, className, ...rest }: TableProps): React__default.JSX.Element;
282
332
  interface StatCardProps extends React__default.HTMLAttributes<HTMLDivElement> {
283
333
  label: React__default.ReactNode;
284
334
  value: React__default.ReactNode;
@@ -302,24 +352,33 @@ interface EmptyStateProps extends Omit<React__default.HTMLAttributes<HTMLDivElem
302
352
  declare function EmptyState({ icon, title, children, actions, tight, className, ...rest }: EmptyStateProps): React__default.JSX.Element;
303
353
  interface SpinnerProps extends React__default.HTMLAttributes<HTMLSpanElement> {
304
354
  size?: 'sm' | 'md' | 'lg';
355
+ /** 네이비/뷰어 표면 위 — 밝은 테두리로 뒤집는다. */
356
+ inverse?: boolean;
305
357
  label?: string;
306
358
  }
307
- declare function Spinner({ size, label, className, ...rest }: SpinnerProps): React__default.JSX.Element;
359
+ declare function Spinner({ size, inverse, label, className, ...rest }: SpinnerProps): React__default.JSX.Element;
308
360
  interface ProgressBarProps extends React__default.HTMLAttributes<HTMLDivElement> {
309
- /** 0~100 */
361
+ /** 0~`max` */
310
362
  value: number;
363
+ /** 기본 100. 용량 게이지처럼 분모가 100이 아닌 자리에 쓴다 */
364
+ max?: number;
311
365
  /** danger 임계 강조 등 */
312
366
  tone?: 'brand' | 'success' | 'warning' | 'danger' | 'info';
367
+ /** sm 4 · md 6(기본) · lg 8 px */
368
+ size?: 'sm' | 'md' | 'lg';
369
+ /** 사선 해치 애니메이션 — 진행 중인 작업에만 */
370
+ striped?: boolean;
313
371
  label?: React__default.ReactNode;
314
372
  /**
315
- * 라벨 줄 오른쪽 끝에 현재 값을 퍼센트로 적는다.
373
+ * 현재 값을 퍼센트로 적는다.
316
374
  *
317
375
  * 막대만으로는 82%와 91%를 구분할 수 없어서, 여러 개를 세로로 쌓아 비교하는
318
- * 자리(공정별 진척 목록 등)에서 필요하다. 라벨 없이 켜도 값은 오른쪽에 붙는다.
376
+ * 자리(공정별 진척 목록 등)에서 필요하다. 라벨이 있으면 라벨 줄 오른쪽 끝에,
377
+ * 라벨이 없으면 막대 오른쪽 옆(.wp-meter-row)에 붙는다.
319
378
  */
320
379
  showValue?: boolean;
321
380
  }
322
- declare function ProgressBar({ value, tone, label, showValue, className, ...rest }: ProgressBarProps): React__default.JSX.Element;
381
+ declare function ProgressBar({ value, max, tone, size, striped, showValue, label, className, ...rest }: ProgressBarProps): React__default.JSX.Element;
323
382
  interface PaginationProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, 'onChange'> {
324
383
  page: number;
325
384
  pageCount: number;
@@ -343,6 +402,102 @@ interface DialogProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>
343
402
  }
344
403
  /** 모달 본체. 오버레이가 가장 가까운 포지셔닝 조상을 채운다 — SDUI에서는 SduiDialog 래퍼가 뷰포트에 고정한다. */
345
404
  declare function Dialog({ title, subtitle, icon, tone, size, footer, onClose, children, className, ...rest }: DialogProps): React__default.JSX.Element;
405
+ /** 배타 뷰 전환 스위치. 항목 2~4개까지, 그보다 많으면 Select다. */
406
+ interface SegmentedItem {
407
+ value: string;
408
+ label?: string;
409
+ /** 앞에 붙일 아이콘 이름 */
410
+ icon?: string;
411
+ }
412
+ interface SegmentedControlProps extends Omit<React__default.HTMLAttributes<HTMLDivElement>, 'onChange'> {
413
+ items: SegmentedItem[];
414
+ value: string;
415
+ onChange?: (value: string) => void;
416
+ /** md(24px 항목, 기본) · lg(30px) */
417
+ size?: 'md' | 'lg';
418
+ className?: string;
419
+ }
420
+ /**
421
+ * 목록/카드, 2D/3D, 일/주/월처럼 하나만 고르는 뷰 전환.
422
+ *
423
+ * `search/SearchResults.tsx`가 "라이브러리에 SegmentedControl이 없다"는 이유로
424
+ * 안에 `ViewToggle` 사본을 들고 있었다. 이 컴포넌트가 그 사본의 원본이다.
425
+ */
426
+ declare function SegmentedControl({ items, value, onChange, size, className, ...rest }: SegmentedControlProps): React__default.JSX.Element;
427
+ /** 사람·팀·자산의 신원 표식. */
428
+ interface AvatarProps extends React__default.HTMLAttributes<HTMLSpanElement> {
429
+ /** 이니셜과 title에 쓰인다 */
430
+ name?: string;
431
+ /** 이미지 URL — 있으면 이니셜을 대신한다 */
432
+ src?: string;
433
+ /** hex(기본, 심볼 실루엣) · round(사람) · square(자산) */
434
+ shape?: 'hex' | 'round' | 'square';
435
+ /** xs 20 · sm 24 · md 28(기본) · lg 36 · xl 48 px */
436
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
437
+ /** brand 네이비(기본) · muted 회색 · accent 레드 */
438
+ tone?: 'brand' | 'muted' | 'accent';
439
+ className?: string;
440
+ }
441
+ /** 사람/자산 표식. 기본은 육각형 — 심볼의 실루엣이다. */
442
+ declare function Avatar({ name, src, shape, size, tone, className, ...rest }: AvatarProps): React__default.JSX.Element;
443
+ /** 프로젝트에서 개별 객체까지의 위치. 4단계를 넘으면 가운데를 접는다. */
444
+ interface BreadcrumbItem {
445
+ label: React__default.ReactNode;
446
+ href?: string;
447
+ icon?: string;
448
+ onClick?: () => void;
449
+ }
450
+ interface BreadcrumbProps extends React__default.HTMLAttributes<HTMLElement> {
451
+ items: BreadcrumbItem[];
452
+ className?: string;
453
+ }
454
+ /** 계보 표시. 마지막 항목은 현재 객체이므로 링크가 아니다. */
455
+ declare function Breadcrumb({ items, className, ...rest }: BreadcrumbProps): React__default.JSX.Element;
456
+ /** 후보가 전부 보이는 배타 선택. 5개 이상이면 Select다. */
457
+ interface RadioProps extends React__default.InputHTMLAttributes<HTMLInputElement> {
458
+ label?: React__default.ReactNode;
459
+ description?: React__default.ReactNode;
460
+ disabled?: boolean;
461
+ }
462
+ /** 2~4개 후보를 다 보여 주는 라디오. Checkbox와 마크업을 공유한다(.wp-check). */
463
+ declare function Radio({ label, description, disabled, className, ...rest }: RadioProps): React__default.JSX.Element;
464
+ /** 주 내비게이션 목록. 활성 항목에 빨간 에지 마커가 붙는다. */
465
+ interface SidebarNavItem {
466
+ value: string;
467
+ label: React__default.ReactNode;
468
+ icon?: string;
469
+ meta?: React__default.ReactNode;
470
+ href?: string;
471
+ }
472
+ interface SidebarNavSection {
473
+ label?: React__default.ReactNode;
474
+ items: SidebarNavItem[];
475
+ }
476
+ interface SidebarNavProps extends Omit<React__default.HTMLAttributes<HTMLElement>, 'onSelect'> {
477
+ sections: SidebarNavSection[];
478
+ value?: string;
479
+ onSelect?: (value: string) => void;
480
+ /** 아이콘만 남기는 56px 레일 */
481
+ collapsed?: boolean;
482
+ /** 흰 표면(설정 하위 내비) 위에 쓰는 밝은 변형 */
483
+ light?: boolean;
484
+ className?: string;
485
+ }
486
+ /** 네이비 사이드바의 주 내비게이션. 섹션 + 항목. */
487
+ declare function SidebarNav({ sections, value, onSelect, collapsed, light, className, ...rest }: SidebarNavProps): React__default.JSX.Element;
488
+ /** 아이콘 전용 컨트롤·잘린 값에 붙이는 hover/focus 힌트. */
489
+ interface TooltipProps extends React__default.HTMLAttributes<HTMLSpanElement> {
490
+ label: React__default.ReactNode;
491
+ /** 단축키 칩, 예: "⌘K" */
492
+ shortcut?: string;
493
+ placement?: 'top' | 'bottom' | 'left' | 'right';
494
+ /** 여러 줄 허용(최대 240px) */
495
+ wrap?: boolean;
496
+ children?: React__default.ReactNode;
497
+ className?: string;
498
+ }
499
+ /** hover 힌트. 트리거를 감싸며 위치는 CSS가 잡는다 — 포털을 쓰지 않는다. */
500
+ declare function Tooltip({ label, shortcut, placement, wrap, children, className, ...rest }: TooltipProps): React__default.JSX.Element;
346
501
 
347
502
  interface GridProps {
348
503
  /** wp-grid--N 프리셋 */
@@ -441,6 +596,10 @@ declare function Divider({ style }: {
441
596
  style?: React__default.CSSProperties;
442
597
  }): React__default.JSX.Element;
443
598
 
599
+ /** SduiRenderer가 제공하는 액션 디스패처. 레지스트리의 복합 컴포넌트가 선언적 액션을 실행할 때 쓴다. */
600
+ type SduiDispatch = (action: SduiAction, eventValue?: unknown) => void;
601
+ declare function useSduiDispatch(): SduiDispatch;
602
+
444
603
  /**
445
604
  * 목록 원격 조회 어댑터.
446
605
  *
@@ -602,6 +761,20 @@ interface SearchFilter {
602
761
  value: string;
603
762
  }[];
604
763
  }
764
+ /**
765
+ * 목록/카드 전환 버튼 한 칸.
766
+ *
767
+ * 예전에는 이 두 칸(`목록`/`카드`)이 코드에 박혀 있어 스펙이 라벨·아이콘·순서를
768
+ * 바꿀 수 없었고, `disableGrid`/`disableList`로 **끄는 것만** 가능했다.
769
+ * 이제 `views`로 목록 자체를 정할 수 있고, 두 disable 프롭은 그 축약형으로 남는다.
770
+ */
771
+ interface SearchViewItem {
772
+ value: 'grid' | 'list';
773
+ /** 생략 시 기본 아이콘 — list=list, grid=layout-grid */
774
+ icon?: string;
775
+ /** 생략 시 기본 라벨 — list=목록, grid=카드 */
776
+ label?: string;
777
+ }
605
778
  interface GridCardRow<T> {
606
779
  icon?: React__default.ReactNode | ((item: T) => React__default.ReactNode);
607
780
  label?: React__default.ReactNode | ((item: T) => React__default.ReactNode);
@@ -631,6 +804,14 @@ interface SearchResultsProps<T> {
631
804
  leftFilters?: SearchFilter[];
632
805
  rightFilters?: SearchFilter[];
633
806
  initialView?: 'grid' | 'list';
807
+ /**
808
+ * 노출할 보기 목록. 생략하면 목록/카드 두 칸이 기본값이고,
809
+ * 그때만 `disableGrid`/`disableList`가 목록을 깎는다(둘 다 오면 views가 이긴다).
810
+ * 한 칸만 남으면 전환 버튼 자체를 그리지 않는다.
811
+ */
812
+ views?: SearchViewItem[];
813
+ /** 페이지당 건수 선택지. 생략 시 [10, 20, 50, 100]. 첫 값이 기본 페이지 크기다. */
814
+ pageSizes?: number[];
634
815
  className?: string;
635
816
  /** 검색/필터/페이지 파라미터 (controlled) */
636
817
  searchParams: URLSearchParams;
@@ -654,9 +835,96 @@ interface SearchResultsProps<T> {
654
835
  */
655
836
  virtual?: boolean | number;
656
837
  }
838
+ /**
839
+ * 스펙이 준 페이지 크기 목록을 다듬는다 — 양의 정수만, 중복 제거, 오름차순.
840
+ * 쓸 값이 하나도 없으면 undefined를 돌려 기본 선택지를 쓰게 한다.
841
+ */
842
+ declare function normalizePageSizes(sizes: number[] | undefined): number[] | undefined;
657
843
  declare function SearchResults<T extends {
658
844
  id: string;
659
- }>({ item, columns, gridConfig, leftFilters, rightFilters, initialView, className, searchParams, onParamsChange, actions, disableGrid, disableList, onRowClick, title, headerActions, isLoading, hideHeader, advancedSearchFields, searchPlaceholder, virtual, }: SearchResultsProps<T>): React__default.JSX.Element;
845
+ }>({ item, columns, gridConfig, leftFilters, rightFilters, initialView, views, pageSizes, className, searchParams, onParamsChange, actions, disableGrid, disableList, onRowClick, title, headerActions, isLoading, hideHeader, advancedSearchFields, searchPlaceholder, virtual, }: SearchResultsProps<T>): React__default.JSX.Element;
846
+
847
+ /**
848
+ * 셀 표현 어휘 — 목록 컬럼의 셀과 카드 행의 값이 **같은 규칙**을 쓴다.
849
+ *
850
+ * 예전에는 스펙이 고를 수 있는 표현이 `badge` 하나뿐이었고 나머지는 `row[key]` 원문
851
+ * 출력이었다. 밑에 깔린 `SearchColumn.render`는 임의의 노드를 그릴 수 있는데 스펙에는
852
+ * 그 역량이 두 종류(원문/배지)로만 열려 있었다는 뜻이다. 여기서 그 구멍을 메운다.
853
+ *
854
+ * 규약 두 가지:
855
+ * - **모르는 type은 원문으로 강등한다.** 스펙은 신뢰할 수 없는 입력이고, 컬럼 하나 때문에
856
+ * 목록 전체가 비면 안 된다. 판별 유니언이라 새 type을 더해도 옛 스펙은 그대로 돈다.
857
+ * - **값을 해석하지 못하면 원문을 그대로 낸다.** ERP는 이미 서식된 문자열(`"12,400,000"`,
858
+ * `"2026-07-31 09:00"`)을 내려주는 자리가 많아, 파싱 실패를 빈칸으로 만들면 퇴행이다.
859
+ */
860
+
861
+ /** ProgressBar가 받는 톤 */
862
+ type MeterTone = 'brand' | 'success' | 'warning' | 'danger' | 'info';
863
+ /** 값을 그대로 출력한다. cell을 생략한 것과 같으며, 명시하고 싶을 때 쓴다. */
864
+ interface SduiTextCell {
865
+ type: 'text';
866
+ }
867
+ /** 값을 배지로. 톤은 값별 매핑(없는 값은 neutral). */
868
+ interface SduiBadgeCell {
869
+ type: 'badge';
870
+ toneMap?: Record<string, BadgeTone>;
871
+ }
872
+ /** 값을 태그로. 선행 점 색은 값별 매핑(CSS 색상 문자열). */
873
+ interface SduiTagCell {
874
+ type: 'tag';
875
+ colorMap?: Record<string, string>;
876
+ filled?: boolean;
877
+ }
878
+ /**
879
+ * 값을 링크로. `to`는 `/assets/{id}` 처럼 행의 필드를 `{키}`로 끼워 넣는 경로 템플릿이고,
880
+ * 클릭하면 navigate 액션이 나간다(렌더러가 대상 안전성을 다시 검사한다).
881
+ */
882
+ interface SduiLinkCell {
883
+ type: 'link';
884
+ to: string;
885
+ /** 링크 문구로 쓸 필드 — 생략하면 컬럼 자신의 값 */
886
+ labelKey?: string;
887
+ icon?: string;
888
+ }
889
+ /** 값을 진행 막대로. 분모는 maxKey(행의 필드) → max → 100 순으로 정한다. */
890
+ interface SduiProgressCell {
891
+ type: 'progress';
892
+ max?: number;
893
+ maxKey?: string;
894
+ tone?: MeterTone;
895
+ showValue?: boolean;
896
+ }
897
+ /** 값을 아이콘으로. iconMap에 없는 값은 icon(공통 기본)으로, 그것도 없으면 원문으로. */
898
+ interface SduiIconCell {
899
+ type: 'icon';
900
+ iconMap?: Record<string, string>;
901
+ icon?: string;
902
+ /** 아이콘 뒤에 값도 적는다 */
903
+ withLabel?: boolean;
904
+ }
905
+ /**
906
+ * 숫자 서식(ko-KR 천단위) + 접두/접미. 통화는 `{ type:'number', suffix:'원' }`이다 —
907
+ * `currency` 타입을 따로 두지 않은 이유는 ERP가 원화 단일이고, 그 자리에 필요한 것이
908
+ * 통화 기호가 아니라 "단위 문자열"이기 때문이다(원·건·개·%·kg).
909
+ */
910
+ interface SduiNumberCell {
911
+ type: 'number';
912
+ /** 소수 자릿수 (기본 0) */
913
+ digits?: number;
914
+ prefix?: string;
915
+ suffix?: string;
916
+ }
917
+ /** 날짜 서식(ko-KR). 파싱되지 않는 값은 원문 그대로. */
918
+ interface SduiDateCell {
919
+ type: 'date';
920
+ format?: 'date' | 'datetime' | 'time';
921
+ }
922
+ type SduiCell = SduiTextCell | SduiBadgeCell | SduiTagCell | SduiLinkCell | SduiProgressCell | SduiIconCell | SduiNumberCell | SduiDateCell;
923
+ /**
924
+ * 셀 스펙 → 렌더 함수. `undefined`를 돌려주면 호출자가 원문을 그대로 출력한다
925
+ * (표에서는 `<td>{row[key]}</td>`, 카드에서는 값 문자열).
926
+ */
927
+ declare function cellRenderer(cell: SduiCell | undefined, key: string, dispatch: SduiDispatch): ((row: SearchRow) => React__default.ReactNode) | undefined;
660
928
 
661
929
  /**
662
930
  * SearchResults의 SDUI 어댑터 — 함수 프롭 없이 JSON만으로 검색+목록 화면을 구성한다.
@@ -677,12 +945,36 @@ interface SduiSearchColumn {
677
945
  ratio?: number;
678
946
  mono?: boolean;
679
947
  strong?: boolean;
680
- /** 셀 표현. 생략하면 row[key]를 그대로 출력한다 */
681
- cell?: {
682
- type: 'badge';
683
- /** 값 → Badge 톤 매핑 (없는 값은 neutral) */
684
- toneMap?: Record<string, BadgeTone>;
685
- };
948
+ /** 셀 표현. 생략하면 row[key]를 그대로 출력한다 — 어휘는 `cells.tsx` 참고 */
949
+ cell?: SduiCell;
950
+ }
951
+ /**
952
+ * 카드 행 표시 조건.
953
+ * `key`만 주면 "그 값이 비어 있지 않을 때"다. 값이 없는 행을 감춰 카드 높이가
954
+ * 들쭉날쭉해지지 않게 하는 것이 주 용도라 그것이 기본 의미다.
955
+ */
956
+ interface SduiRowCondition {
957
+ key: string;
958
+ equals?: string | number | boolean;
959
+ in?: Array<string | number>;
960
+ notEmpty?: boolean;
961
+ }
962
+ interface SduiGridCardRow {
963
+ label?: string;
964
+ valueKey: string;
965
+ /** 라벨 앞 아이콘 */
966
+ icon?: string;
967
+ /** 값 표현 — 컬럼 셀과 같은 어휘 */
968
+ cell?: SduiCell;
969
+ /** 조건부 행 */
970
+ showWhen?: SduiRowCondition;
971
+ }
972
+ /** 카드 우상단 버튼 — 이벤트 값으로 행 객체 전체가 전달된다 */
973
+ interface SduiGridCardAction {
974
+ label: string;
975
+ icon?: string;
976
+ variant?: 'default' | 'destructive' | 'outline';
977
+ run: SduiAction | SduiAction[];
686
978
  }
687
979
  interface SduiGridCard {
688
980
  titleKey: string;
@@ -691,10 +983,14 @@ interface SduiGridCard {
691
983
  key: string;
692
984
  toneMap?: Record<string, BadgeTone>;
693
985
  };
694
- rows?: Array<{
695
- label?: string;
696
- valueKey: string;
697
- }>;
986
+ /** 한 열로 쌓는 행 */
987
+ rows?: SduiGridCardRow[];
988
+ /** 두 열 배치 — 좌/우 각각의 행 목록. rows와 함께 쓰면 두 열이 위, rows가 아래다 */
989
+ leftRows?: SduiGridCardRow[];
990
+ rightRows?: SduiGridCardRow[];
991
+ /** 카드 맨 아래 보조 문구로 쓸 필드 */
992
+ noteKey?: string;
993
+ actions?: SduiGridCardAction[];
698
994
  }
699
995
  interface SduiSearchAction {
700
996
  label: string;
@@ -713,6 +1009,13 @@ interface SduiSearchCommonProps {
713
1009
  gridCard?: SduiGridCard;
714
1010
  actions?: SduiSearchAction[];
715
1011
  initialView?: 'grid' | 'list';
1012
+ /**
1013
+ * 노출할 보기 목록(라벨·아이콘·순서). 생략하면 목록/카드 두 칸이 기본이다.
1014
+ * gridCard 없이 카드 보기를 넣으면 빈 카드가 나오므로 여기서 걸러낸다.
1015
+ */
1016
+ views?: SearchViewItem[];
1017
+ /** 페이지당 건수 선택지. 생략 시 [10, 20, 50, 100] */
1018
+ pageSizes?: number[];
716
1019
  disableGrid?: boolean;
717
1020
  disableList?: boolean;
718
1021
  searchPlaceholder?: string;
@@ -726,7 +1029,7 @@ interface SduiSearchCommonProps {
726
1029
  interface SduiSearchResultsProps extends SduiSearchCommonProps {
727
1030
  data: SearchRow[];
728
1031
  }
729
- declare function SduiSearchResults({ title, data, columns, fields, leftFilters, rightFilters, gridCard, actions, initialView, disableGrid, disableList, searchPlaceholder, rowClick, headerActions, virtual, }: SduiSearchResultsProps): React__default.JSX.Element;
1032
+ declare function SduiSearchResults({ title, data, columns, fields, leftFilters, rightFilters, gridCard, actions, initialView, views, pageSizes, disableGrid, disableList, searchPlaceholder, rowClick, headerActions, virtual, }: SduiSearchResultsProps): React__default.JSX.Element;
730
1033
  interface RemoteSearchResultsProps extends SduiSearchCommonProps {
731
1034
  /**
732
1035
  * 목록 endpoint — page/limit/search/필드키 쿼리를 붙여 조회하고
@@ -736,7 +1039,7 @@ interface RemoteSearchResultsProps extends SduiSearchCommonProps {
736
1039
  /** 페이지당 행 수 (기본 10) — limit 파라미터의 초기값 */
737
1040
  pageSize?: number;
738
1041
  }
739
- declare function RemoteSearchResults({ title, endpoint, columns, fields, leftFilters, rightFilters, gridCard, actions, initialView, disableGrid, disableList, searchPlaceholder, rowClick, headerActions, virtual, pageSize, }: RemoteSearchResultsProps): React__default.JSX.Element;
1042
+ declare function RemoteSearchResults({ title, endpoint, columns, fields, leftFilters, rightFilters, gridCard, actions, initialView, views, pageSizes, disableGrid, disableList, searchPlaceholder, rowClick, headerActions, virtual, pageSize, }: RemoteSearchResultsProps): React__default.JSX.Element;
740
1043
 
741
1044
  /**
742
1045
  * 목록 표 — SearchResults 전용. 내장 `Table`은 정렬 헤더·선택 표시·가상 스크롤을
@@ -891,42 +1194,6 @@ declare const defaultRegistry: {
891
1194
  */
892
1195
  declare function createRegistry(extensions: SduiRegistry): SduiRegistry;
893
1196
 
894
- /** custom 액션을 앱 코드로 위임하는 확장 지점. */
895
- type CustomActionHandler = (name: string, payload?: SduiPropValue, value?: unknown) => void;
896
- /** custom 검증 규칙 구현 — 에러 메시지 또는 null 반환 */
897
- type CustomValidator = (fieldValue: SduiPropValue | undefined, values: Record<string, SduiPropValue>) => string | null;
898
- interface SduiRendererProps {
899
- page: SduiPage;
900
- /** 컴포넌트 어휘 — 생략 시 내장 기본 레지스트리 */
901
- registry?: SduiRegistry;
902
- /** 내비게이션·API·실시간 연결점 — 생략 시 브라우저 기본 구현 */
903
- adapter?: SduiAdapter;
904
- /**
905
- * page.urlState ↔ URL 쿼리 동기화 여부 (기본 true).
906
- * 편집기 미리보기처럼 실제 페이지 라우트가 아닌 곳에 마운트할 때 false로 끈다 —
907
- * 안 그러면 미리보기의 상태가 호스트 앱 URL을 오염시킨다.
908
- */
909
- syncUrlState?: boolean;
910
- onCustomAction?: CustomActionHandler;
911
- customValidators?: Record<string, CustomValidator>;
912
- }
913
- /**
914
- * 서버(JSON 스펙) 주도 페이지 렌더러.
915
- * 스펙은 직렬화 가능한 데이터만 담고, 상태·이벤트·폼·내비게이션은 여기서 해석한다.
916
- */
917
- declare function SduiRenderer({ page, registry, adapter, syncUrlState, onCustomAction, customValidators, }: SduiRendererProps): React__default.JSX.Element;
918
-
919
- /**
920
- * 스펙 구조 검증기 — 서버(또는 편집기)가 만든 스펙의 형태 오류를 렌더 전에 찾아낸다.
921
- * 렌더러는 개발 모드에서 이 결과를 콘솔에 경고하고, 관리자 편집기는
922
- * 저장 전에 같은 검사를 돌려 문제 목록을 보여준다.
923
- */
924
- interface SpecIssue {
925
- path: string;
926
- message: string;
927
- }
928
- declare function validateSpec(page: unknown, knownComponents?: Set<string>): SpecIssue[];
929
-
930
1197
  /**
931
1198
  * 권한 판정 주입 지점.
932
1199
  *
@@ -968,9 +1235,54 @@ declare function SduiPermissionProvider({ can, children }: SduiPermissionProvide
968
1235
  */
969
1236
  declare function useSduiCan(): SduiCanFn;
970
1237
 
971
- /** SduiRenderer가 제공하는 액션 디스패처. 레지스트리의 복합 컴포넌트가 선언적 액션을 실행할 때 쓴다. */
972
- type SduiDispatch = (action: SduiAction, eventValue?: unknown) => void;
973
- declare function useSduiDispatch(): SduiDispatch;
1238
+ /** custom 액션을 앱 코드로 위임하는 확장 지점. */
1239
+ type CustomActionHandler = (name: string, payload?: SduiPropValue, value?: unknown) => void;
1240
+ /** custom 검증 규칙 구현 — 에러 메시지 또는 null 반환 */
1241
+ type CustomValidator = (fieldValue: SduiPropValue | undefined, values: Record<string, SduiPropValue>) => string | null;
1242
+ interface SduiRendererProps {
1243
+ page: SduiPage;
1244
+ /** 컴포넌트 어휘 — 생략 시 내장 기본 레지스트리 */
1245
+ registry?: SduiRegistry;
1246
+ /** 내비게이션·API·실시간 연결점 — 생략 시 브라우저 기본 구현 */
1247
+ adapter?: SduiAdapter;
1248
+ /**
1249
+ * page.urlState ↔ URL 쿼리 동기화 여부 (기본 true).
1250
+ * 편집기 미리보기처럼 실제 페이지 라우트가 아닌 곳에 마운트할 때 false로 끈다 —
1251
+ * 안 그러면 미리보기의 상태가 호스트 앱 URL을 오염시킨다.
1252
+ */
1253
+ syncUrlState?: boolean;
1254
+ /**
1255
+ * 권한 판정 — `Can` 게이트가 이 콜백에 질의한다.
1256
+ *
1257
+ * 라이브러리는 권한 모델을 알지 않는다(근거는 permission.tsx 주석). ERP라면
1258
+ * `can={(q) => can(user, q.entity, q.action, q.scope)}`처럼 자기 판정 함수를 꽂는다.
1259
+ * 세션이 없는 편집기 미리보기·스토리북은 `can="allow-all"`을 **명시**한다 —
1260
+ * 아무것도 주지 않으면 게이트는 열리되 console.error가 한 번 난다.
1261
+ *
1262
+ * 이 프롭이 없어서 소비 앱이 `Can`을 자기 구현으로 덮어써야 했다. 이제 렌더러가
1263
+ * `SduiPermissionProvider`로 흘려보내므로 판정 함수만 주면 게이트는 라이브러리 것을 쓴다.
1264
+ * (렌더러 밖에서 직접 provider로 감싸도 동작한다 — 그쪽이 바깥이라 이 프롭이 이긴다.)
1265
+ */
1266
+ can?: SduiCanSetting;
1267
+ onCustomAction?: CustomActionHandler;
1268
+ customValidators?: Record<string, CustomValidator>;
1269
+ }
1270
+ /**
1271
+ * 서버(JSON 스펙) 주도 페이지 렌더러.
1272
+ * 스펙은 직렬화 가능한 데이터만 담고, 상태·이벤트·폼·내비게이션은 여기서 해석한다.
1273
+ */
1274
+ declare function SduiRenderer({ page, registry, adapter, syncUrlState, can, onCustomAction, customValidators, }: SduiRendererProps): React__default.JSX.Element;
1275
+
1276
+ /**
1277
+ * 스펙 구조 검증기 — 서버(또는 편집기)가 만든 스펙의 형태 오류를 렌더 전에 찾아낸다.
1278
+ * 렌더러는 개발 모드에서 이 결과를 콘솔에 경고하고, 관리자 편집기는
1279
+ * 저장 전에 같은 검사를 돌려 문제 목록을 보여준다.
1280
+ */
1281
+ interface SpecIssue {
1282
+ path: string;
1283
+ message: string;
1284
+ }
1285
+ declare function validateSpec(page: unknown, knownComponents?: Set<string>): SpecIssue[];
974
1286
 
975
1287
  /** Form이 렌더러에 등록하는 검증 설정 */
976
1288
  interface SduiFormConfig {
@@ -1009,4 +1321,4 @@ declare class NodeErrorBoundary extends React__default.Component<Props, State> {
1009
1321
  render(): string | number | bigint | boolean | React__default.JSX.Element | Iterable<React__default.ReactNode> | Promise<string | number | bigint | boolean | React__default.ReactPortal | React__default.ReactElement<unknown, string | React__default.JSXElementConstructor<any>> | Iterable<React__default.ReactNode> | null | undefined> | null | undefined;
1010
1322
  }
1011
1323
 
1012
- export { Actions, type ActionsProps, Alert, type AlertProps, Badge, type BadgeProps, type BadgeTone, Button, type ButtonProps, Can, type CanProps, Card, type CardProps, type CascadingSearchOption, Checkbox, type CheckboxProps, Col, type CustomActionHandler, type CustomValidator, DatePicker, DateRangePicker, Dialog, type DialogProps, Divider, EmptyState, type EmptyStateProps, Field, type FieldProps, Grid, type GridCardConfig, type GridCardRow, type GridProps, Icon, IconButton, type IconButtonProps, type IconProps, Input, type InputProps, type Justify, type KeyValueItem, KeyValueList, type KeyValueListProps, NodeErrorBoundary, PageHead, type PageHeadProps, Pagination, type PaginationProps, ProgressBar, type ProgressBarProps, RemoteSearchResults, type RemoteSearchResultsProps, ResultTable, type ResultTableColumn, type ResultTableProps, Row, type RowProps, SduiAction, type SduiAdapter, type SduiCanFn, type SduiCanQuery, type SduiCanSetting, SduiDialog, type SduiDispatch, SduiForm, type SduiFormConfig, type SduiFormProps, type SduiGridCard, SduiPage, SduiPermissionProvider, SduiPropValue, type SduiRegistry, SduiRenderer, type SduiRendererProps, SduiRule, type SduiRuntime, type SduiSearchAction, type SduiSearchColumn, SduiSearchDataProvider, SduiSearchResults, type SduiSearchResultsProps, type SearchAction, type SearchColumn, type SearchFetcher, type SearchField, type SearchFilter, type SearchOption, type SearchPage, SearchResults, type SearchResultsProps, type SearchRow, SearchToolbar, type SearchValues, Section, type SectionProps, Select, type SelectOption, type SelectProps, Show, type ShowProps, type SortDir, Spacer, type SpacerProps, type SpecIssue, Spinner, type SpinnerProps, StatCard, type StatCardProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Tag, type TagProps, Text, type TextPreset, type TextProps, Textarea, type TextareaProps, Toast, type ToastProps, cascadingValuePaths, cleanSearchValues, createRegistry, defaultAdapter, defaultRegistry, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue, useRemoteSearchPage, useSduiCan, useSduiDispatch, useSduiRuntime, useSearchFetcher, validateSpec };
1324
+ export { Actions, type ActionsProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Can, type CanProps, Card, type CardProps, type CascadingSearchOption, Checkbox, type CheckboxProps, Col, type CustomActionHandler, type CustomValidator, DatePicker, DateRangePicker, Dialog, type DialogProps, Divider, EmptyState, type EmptyStateProps, Field, type FieldProps, Grid, type GridCardConfig, type GridCardRow, type GridProps, Icon, IconButton, type IconButtonProps, type IconProps, Input, type InputProps, type Justify, type KeyValueItem, KeyValueList, type KeyValueListProps, type MeterTone, NodeErrorBoundary, PageHead, type PageHeadProps, Pagination, type PaginationProps, ProgressBar, type ProgressBarProps, Radio, type RadioProps, RemoteSearchResults, type RemoteSearchResultsProps, ResultTable, type ResultTableColumn, type ResultTableProps, Row, type RowProps, SduiAction, type SduiAdapter, type SduiBadgeCell, type SduiCanFn, type SduiCanQuery, type SduiCanSetting, type SduiCell, type SduiDateCell, SduiDialog, type SduiDispatch, SduiForm, type SduiFormConfig, type SduiFormProps, type SduiGridCard, type SduiGridCardAction, type SduiGridCardRow, type SduiIconCell, type SduiLinkCell, type SduiNumberCell, SduiPage, SduiPermissionProvider, type SduiProgressCell, SduiPropValue, type SduiRegistry, SduiRenderer, type SduiRendererProps, type SduiRowCondition, SduiRule, type SduiRuntime, type SduiSearchAction, type SduiSearchColumn, SduiSearchDataProvider, SduiSearchResults, type SduiSearchResultsProps, type SduiTagCell, type SduiTextCell, type SearchAction, type SearchColumn, type SearchFetcher, type SearchField, type SearchFilter, type SearchOption, type SearchPage, SearchResults, type SearchResultsProps, type SearchRow, SearchToolbar, type SearchValues, type SearchViewItem, Section, type SectionProps, SegmentedControl, type SegmentedControlProps, type SegmentedItem, Select, type SelectOption, type SelectProps, Show, type ShowProps, SidebarNav, type SidebarNavItem, type SidebarNavProps, type SidebarNavSection, type SortDir, Spacer, type SpacerProps, type SpecIssue, Spinner, type SpinnerProps, StatCard, type StatCardProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Tag, type TagProps, Text, type TextPreset, type TextProps, Textarea, type TextareaProps, Toast, type ToastProps, Tooltip, type TooltipProps, cascadingValuePaths, cellRenderer, cleanSearchValues, createRegistry, defaultAdapter, defaultRegistry, includesLooseSearch, joinMultiValue, normalizePageSizes, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue, useRemoteSearchPage, useSduiCan, useSduiDispatch, useSduiRuntime, useSearchFetcher, validateSpec };