@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
@@ -0,0 +1,59 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * EventCalendar — 일정 캘린더 위젯 (월 / 주 / 일 / 일정 뷰).
5
+ *
6
+ * 여러 날에 걸친 일정은 주 단위로 잘라(lane packing) 막대로 그린다.
7
+ * 주 경계에서 잘린 쪽은 모서리를 각지게 두어 이어짐을 표현하고,
8
+ * 월 뷰에서는 최대 3줄까지만 보여준 뒤 '+N' 칩으로 넘김을 알린다.
9
+ * view/date는 controlled-with-fallback: prop이 오면 그 값을 따르고,
10
+ * 없으면 내부 상태로 동작한다.
11
+ */
12
+ interface EventCalendarEvent {
13
+ id: string;
14
+ title: string;
15
+ /** YYYY-MM-DD */
16
+ start: string;
17
+ /** YYYY-MM-DD, 포함(inclusive). 없으면 start와 동일. */
18
+ end?: string;
19
+ type?: string;
20
+ status?: string;
21
+ /** CSS 색상. 없으면 type별로 --wp-series-N을 순환 배정. */
22
+ color?: string;
23
+ }
24
+ interface EventCalendarTypeOption {
25
+ value: string;
26
+ label: string;
27
+ color?: string;
28
+ }
29
+ type EventCalendarView = 'month' | 'week' | 'day' | 'agenda';
30
+ /** 뷰 전환 버튼 한 칸. `label`을 생략하면 기본 라벨(월/주/일/일정)을 쓴다. */
31
+ interface EventCalendarViewItem {
32
+ value: EventCalendarView;
33
+ label?: string;
34
+ /** 라벨 앞에 붙일 아이콘 이름 */
35
+ icon?: string;
36
+ }
37
+ interface EventCalendarProps {
38
+ events: EventCalendarEvent[];
39
+ view?: EventCalendarView;
40
+ onViewChange?: (view: EventCalendarView) => void;
41
+ /**
42
+ * 노출할 뷰와 그 라벨·아이콘·순서. 생략하면 월/주/일/일정 넷이 그대로 나온다.
43
+ *
44
+ * `view`는 **어느 뷰로 시작할지**만 정했지 **어떤 뷰를 고를 수 있는지**는 정하지
45
+ * 못했다 — 월만 쓰는 화면에도 주/일/일정 버튼이 보였다. 문자열 축약형(`["month"]`)도
46
+ * 받는다. 모르는 값·중복은 버리고, 전부 걸러지면 기본 넷으로 되돌린다.
47
+ */
48
+ views?: Array<EventCalendarViewItem | EventCalendarView>;
49
+ /** 기준 날짜(YYYY-MM-DD). 기본 오늘. */
50
+ date?: string;
51
+ onDateChange?: (date: string) => void;
52
+ /** 유형 필터 칩. 주어지면 칩 토글로 해당 type 일정을 숨기거나 보인다. */
53
+ types?: EventCalendarTypeOption[];
54
+ onEventClick?: (event: EventCalendarEvent) => void;
55
+ selectedId?: string;
56
+ }
57
+ declare const EventCalendar: ({ events, view, onViewChange, views, date, onDateChange, types, onEventClick, selectedId, }: EventCalendarProps) => React.JSX.Element;
58
+
59
+ export { EventCalendar, type EventCalendarEvent, type EventCalendarProps, type EventCalendarTypeOption, type EventCalendarView, type EventCalendarViewItem };
@@ -0,0 +1,2 @@
1
+ export { EventCalendar } from '../chunk-LZJTKVMO.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,25 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * ImageLightbox — 이미지 라이트박스 뷰어.
5
+ * 썸네일(또는 커스텀 트리거) 클릭 → 전체 화면 오버레이:
6
+ * - 휠 줌 1x–8x (커서 위치 기준 앵커)
7
+ * - 확대 상태에서 드래그 패닝 (pointer capture, 경계 클램프)
8
+ * - 툴바: 축소 / 확대 / 원래 크기 / 닫기 + 배율 % 표시
9
+ * - Escape·배경 클릭으로 닫힘, 트리거 클릭은 stopPropagation (행 클릭과 공존)
10
+ */
11
+
12
+ interface ImageLightboxProps {
13
+ /** 원본 이미지 URL */
14
+ src: string;
15
+ alt?: string;
16
+ /** 기본 썸네일 <img>에 적용할 클래스 */
17
+ thumbClassName?: string;
18
+ /** 기본 썸네일 <img>에 적용할 스타일 */
19
+ thumbStyle?: React__default.CSSProperties;
20
+ /** 커스텀 트리거 — 주면 기본 썸네일 대신 렌더된다 */
21
+ children?: React__default.ReactNode;
22
+ }
23
+ declare function ImageLightbox({ src, alt, thumbClassName, thumbStyle, children }: ImageLightboxProps): React__default.JSX.Element;
24
+
25
+ export { ImageLightbox, type ImageLightboxProps };
@@ -0,0 +1,2 @@
1
+ export { ImageLightbox } from '../chunk-RH7ESUE6.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,23 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * InlineEdit — 텍스트를 제자리에서 수정하는 위젯.
5
+ *
6
+ * - 보기 모드: 값 + 연필 IconButton(hover/focus 시 표시, 터치 기기에서는 항상 표시).
7
+ * - 편집 모드: DS Input(autoFocus, Enter=저장, Escape=취소) + 확인/취소 IconButton.
8
+ * - 비동기 onSave 동안 확인 버튼이 로딩(회전 아이콘) 상태가 되고, 실패하면
9
+ * 편집 모드를 유지한 채 danger 캡션을 보여준다(503은 데모 모드 안내).
10
+ */
11
+
12
+ interface InlineEditProps {
13
+ value: string;
14
+ onSave: (value: string) => void | Promise<void>;
15
+ type?: 'text' | 'number';
16
+ mono?: boolean;
17
+ disabled?: boolean;
18
+ /** 값이 비었을 때 표시할 텍스트. 기본 '—' */
19
+ emptyText?: string;
20
+ }
21
+ declare function InlineEdit({ value, onSave, type, mono, disabled, emptyText, }: InlineEditProps): React__default.JSX.Element;
22
+
23
+ export { InlineEdit, type InlineEditProps };
@@ -0,0 +1,2 @@
1
+ export { InlineEdit } from '../chunk-OOHHW4K4.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * JsonField — JSON 편집용 텍스트 영역.
5
+ *
6
+ * - 객체가 들어오면 2칸 들여쓰기로 정렬해 보여준다(문자열이면 파싱 시도 후 정렬, 실패 시 원문 유지).
7
+ * - blur 시 JSON.parse로 검증: 성공하면 정렬 후 onChange(parsed), 실패하면 오류 위치(행/열)를
8
+ * danger 캡션으로 보여주고 입력한 원문을 그대로 유지한다.
9
+ * - controlled-with-fallback: value가 실제로 바뀔 때만 내부 텍스트를 동기화한다
10
+ * (편집 중이거나 표현이 같으면 사용자가 입력한 원문을 덮어쓰지 않는다).
11
+ */
12
+ interface JsonFieldProps {
13
+ /** 객체 또는 JSON 문자열 */
14
+ value?: unknown;
15
+ onChange?: (parsed: unknown) => void;
16
+ /** 기본 6 */
17
+ rows?: number;
18
+ invalid?: boolean;
19
+ disabled?: boolean;
20
+ placeholder?: string;
21
+ }
22
+ declare function JsonField({ value, onChange, rows, invalid, disabled, placeholder, }: JsonFieldProps): React.JSX.Element;
23
+
24
+ export { JsonField, type JsonFieldProps };
@@ -0,0 +1,2 @@
1
+ export { JsonField } from '../chunk-AROOQ5W6.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * LiveClock — 1초 간격 실시간 시계 / 경과 시간 표시.
5
+ *
6
+ * - startedAt(ISO)이 주어지면 현재 시각 대신 경과 시간을 HH:MM:SS로 표시한다
7
+ * (24시간을 넘으면 시 자리수가 늘어난다: 워크오더 가동시간 등).
8
+ * - showDate: 시계 모드에서는 오늘 날짜(요일 포함), 경과 모드에서는 시작 시각을 함께 표시.
9
+ * - 하이드레이션 안전: useSyncExternalStore의 서버 스냅숏은 null이라 서버/첫 클라이언트
10
+ * 렌더에서는 --:--:-- 플레이스홀더를 보여주고, 마운트 후에만 실제 시각을 그린다.
11
+ * 인터벌은 구독 해제(언마운트) 시 정리된다.
12
+ */
13
+ interface LiveClockProps {
14
+ /** ISO 시각 문자열 — 주어지면 현재 시각 대신 경과 시간(HH:MM:SS)을 표시 */
15
+ startedAt?: string;
16
+ /** 날짜(시계 모드) 또는 시작 시각(경과 모드) 함께 표시 */
17
+ showDate?: boolean;
18
+ }
19
+ declare function LiveClock({ startedAt, showDate }: LiveClockProps): React.JSX.Element;
20
+
21
+ export { LiveClock, type LiveClockProps };
@@ -0,0 +1 @@
1
+ export { LiveClock } from '../chunk-QZQDHSMD.js';
@@ -0,0 +1,32 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ /**
4
+ * OrgChart — 줌/팬 가능한 조직도 캔버스.
5
+ *
6
+ * 재귀 블록 레이아웃: 각 노드의 서브트리 폭을 먼저 계산하고 부모를
7
+ * 자식 영역의 가운데 위에 배치한다. 노드 카드는 절대 위치로 그리고,
8
+ * 부모→자식 연결선은 SVG 직교(ㄱ자) 경로로 그린다.
9
+ *
10
+ * 상호작용: 휠 줌(커서 기준 0.35~1.8x), 포인터 드래그 패닝,
11
+ * 확대/축소/초기화 버튼 + 배율 표시, 전체화면 토글, 노드 클릭 선택.
12
+ */
13
+
14
+ interface OrgNode {
15
+ id: string;
16
+ label: string;
17
+ /** 직책/직급 등 보조 텍스트. */
18
+ sub?: string;
19
+ badge?: string;
20
+ children?: OrgNode[];
21
+ }
22
+ interface OrgChartProps {
23
+ root: OrgNode;
24
+ onNodeClick?: (node: OrgNode) => void;
25
+ /** 지정하면 controlled — 없으면 내부 선택 상태를 사용한다. */
26
+ selectedId?: string;
27
+ /** 캔버스 높이(px). 기본 520. */
28
+ height?: number;
29
+ }
30
+ declare function OrgChart({ root, onNodeClick, selectedId, height, }: OrgChartProps): ReactNode;
31
+
32
+ export { OrgChart, type OrgChartProps, type OrgNode };
@@ -0,0 +1,2 @@
1
+ export { OrgChart } from '../chunk-ZNITJ4KK.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,48 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * PeriodFilter — 복합 기간 선택기.
5
+ *
6
+ * - SegmentedControl로 모드(연간/반기/분기/월간/직접)를 고르고,
7
+ * 모드에 맞는 Select(연도/반기/분기/월) 또는 날짜 Input(from~to)이 조건부로 나타난다.
8
+ * - 모드 전환 시 기존 선택을 최대한 보존하며 변환한다
9
+ * (예: 11월 → 분기 전환 시 4분기, 직접 전환 시 해당 월의 날짜 범위로 프리필).
10
+ * - 항상 정규화된 Period(해당 모드에 필요한 필드만, 범위 클램프 완료)를 emit한다.
11
+ * - controlled-with-fallback: value가 없으면 내부 상태(현재 연·월)로 동작한다.
12
+ */
13
+ type PeriodMode = 'year' | 'half' | 'quarter' | 'month' | 'custom';
14
+ interface Period {
15
+ mode: PeriodMode;
16
+ year?: number;
17
+ half?: 1 | 2;
18
+ quarter?: 1 | 2 | 3 | 4;
19
+ month?: number;
20
+ /** YYYY-MM-DD (custom 모드) */
21
+ from?: string;
22
+ /** YYYY-MM-DD (custom 모드) */
23
+ to?: string;
24
+ }
25
+ /** 모드 전환 버튼 한 칸. `label`을 생략하면 기본 라벨(연간/반기/분기/월간/직접)을 쓴다. */
26
+ interface PeriodModeItem {
27
+ value: PeriodMode;
28
+ label?: string;
29
+ /** 라벨 앞에 붙일 아이콘 이름 */
30
+ icon?: string;
31
+ }
32
+ interface PeriodFilterProps {
33
+ value?: Period;
34
+ onChange?: (v: Period) => void;
35
+ /** 연도 Select에 노출할 연도 목록. 기본: 올해부터 5년 전까지 */
36
+ years?: number[];
37
+ /**
38
+ * 노출할 모드와 그 라벨·아이콘·순서. 생략하면 다섯 모드가 그대로 나온다.
39
+ *
40
+ * 월간만 쓰는 화면에도 반기·분기·직접 버튼이 보이던 것을 스펙이 정할 수 있게 한
41
+ * 것이다. 문자열 축약형(`["month","custom"]`)도 받는다. 모르는 값·중복은 버리고,
42
+ * 전부 걸러지면 기본 다섯으로 되돌린다.
43
+ */
44
+ modes?: Array<PeriodModeItem | PeriodMode>;
45
+ }
46
+ declare function PeriodFilter({ value, onChange, years, modes }: PeriodFilterProps): React.JSX.Element;
47
+
48
+ export { type Period, PeriodFilter, type PeriodFilterProps, type PeriodMode, type PeriodModeItem };
@@ -0,0 +1,2 @@
1
+ export { PeriodFilter } from '../chunk-DGPRX4MU.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,23 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * PrintSheet — 인쇄 레이아웃 래퍼.
5
+ *
6
+ * - 화면에서는 A4 폭(210mm)의 흰 종이 카드 + 상단 툴바(인쇄하기/닫기)를 보여주고,
7
+ * 인쇄 시에는 @page A4·1cm 여백, 12pt 기준 서체로 종이에 맞게 펼친다.
8
+ * - 표 테두리는 화면에서 var(--wp-border-default), 인쇄에서는 토큰을 검정 계열로
9
+ * 재정의해 흐린 회색 선이 프린터에서 사라지지 않게 한다.
10
+ * - .erp-print-hidden 은 @media print 에서 숨겨진다(툴바 등 화면 전용 요소).
11
+ * - autoPrint: 새 창(window.opener 존재)으로 열린 경우에만 마운트 500ms 후 자동 인쇄.
12
+ */
13
+
14
+ interface PrintSheetProps {
15
+ /** 시트 상단 제목(예: 거래명세서) */
16
+ title?: string;
17
+ children: React__default.ReactNode;
18
+ /** window.opener 감지 시(새 창으로 열림) 500ms 후 자동으로 window.print() 호출 */
19
+ autoPrint?: boolean;
20
+ }
21
+ declare function PrintSheet({ title, children, autoPrint }: PrintSheetProps): React__default.JSX.Element;
22
+
23
+ export { PrintSheet, type PrintSheetProps };
@@ -0,0 +1,2 @@
1
+ export { PrintSheet } from '../chunk-KBHI3IUR.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,29 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * SearchableMultiPicker — 모달(다이얼로그) 다중 선택기.
5
+ *
6
+ * - 트리거 버튼 → DS Dialog. SduiDialog와 같은 방식으로 뷰포트 고정 래퍼를 두어
7
+ * 스크림이 사이드바·탑바까지 전체 화면을 덮는다(배경 클릭·Escape로 닫힘 = 취소).
8
+ * - 검색 Input(느슨한 포함 검색) + 선택된 항목이 먼저 오는 Checkbox 목록(스크롤)
9
+ * + 선택 개수/칩 행 + 하단 [전체 해제 / 완료].
10
+ * - 다이얼로그 안에서는 초안(draft)만 바뀌고, '완료'를 눌러야 onChange로 확정된다.
11
+ */
12
+
13
+ interface MultiPickerOption {
14
+ value: string;
15
+ label: string;
16
+ sub?: string;
17
+ }
18
+ interface SearchableMultiPickerProps {
19
+ title?: string;
20
+ options: MultiPickerOption[];
21
+ values: string[];
22
+ onChange: (values: string[]) => void;
23
+ /** 다이얼로그를 여는 트리거. 기본값은 secondary Button '선택'. */
24
+ trigger?: React__default.ReactNode;
25
+ disabled?: boolean;
26
+ }
27
+ declare function SearchableMultiPicker({ title, options, values, onChange, trigger, disabled, }: SearchableMultiPickerProps): React__default.JSX.Element;
28
+
29
+ export { type MultiPickerOption, SearchableMultiPicker, type SearchableMultiPickerProps };
@@ -0,0 +1,3 @@
1
+ export { SearchableMultiPicker } from '../chunk-56KKWLNI.js';
2
+ import '../chunk-KADFN76X.js';
3
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,25 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * SecureScreen — 개인정보 보호 래퍼.
5
+ *
6
+ * enabled(기본 true)일 때:
7
+ * - 래퍼 내부의 contextmenu / copy / cut / dragstart / selectstart 차단 + user-select:none
8
+ * - document keydown에서 Ctrl/Cmd+(A|C|P|S|U|X) 차단, PrintScreen 감지 시
9
+ * 클립보드를 경고 문구로 덮어쓴다(캡처 이미지 대신 경고가 붙게).
10
+ * - 탭 전환(visibilitychange)·창 blur 시 전체 가림막(스크림 + 블러) 표시, 재포커스까지 유지
11
+ * - beforeprint 시 인쇄 경고 오버레이 표시(@media print에서는 콘텐츠 자체를 숨기고
12
+ * 경고만 인쇄되게 한다), afterprint에 해제
13
+ * - 모든 리스너는 언마운트/비활성화 시 정리된다.
14
+ */
15
+
16
+ interface SecureScreenProps {
17
+ /** 보호 동작 활성화 여부. 기본 true. */
18
+ enabled?: boolean;
19
+ /** 가림막에 표시할 안내 문구 */
20
+ notice?: string;
21
+ children: React__default.ReactNode;
22
+ }
23
+ declare function SecureScreen({ enabled, notice, children }: SecureScreenProps): React__default.JSX.Element;
24
+
25
+ export { SecureScreen, type SecureScreenProps };
@@ -0,0 +1,2 @@
1
+ export { SecureScreen } from '../chunk-APCXOCAO.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ /**
4
+ * StackedMeter — CSS로 그리는 누적 비율 막대.
5
+ *
6
+ * 전체 대비 각 항목의 비중을 한 줄 트랙으로 보여준다. 트랙은
7
+ * var(--wp-surface-sunken), 세그먼트는 --wp-series 토큰을 고정
8
+ * 순서로 순환하며, 범례 행에 색 점 + 라벨 + 값 + 백분율을 함께 적는다.
9
+ */
10
+
11
+ interface StackedMeterSegment {
12
+ label: string;
13
+ value: number;
14
+ /** CSS 색상 또는 "1"~"8" (→ var(--wp-series-N)). 없으면 순서대로 자동 배정. */
15
+ color?: string;
16
+ }
17
+ interface StackedMeterProps {
18
+ segments: StackedMeterSegment[];
19
+ /** 범례 표시 여부. 기본 true. */
20
+ showLegend?: boolean;
21
+ /** 트랙 높이(px). 기본 10. */
22
+ height?: number;
23
+ }
24
+ declare function StackedMeter({ segments, showLegend, height, }: StackedMeterProps): ReactNode;
25
+
26
+ export { StackedMeter, type StackedMeterProps, type StackedMeterSegment };
@@ -0,0 +1 @@
1
+ export { StackedMeter } from '../chunk-7Y4J7EOK.js';
@@ -0,0 +1,20 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * Strip — 가로 스크롤 스트립.
5
+ *
6
+ * - 자식들을 flex-shrink:0 래퍼로 감싸 한 줄로 늘어놓고 overflow-x로 스크롤한다.
7
+ * - 스크롤바는 얇게(scrollbar-width:thin + webkit 폴백).
8
+ * - snap이면 scroll-snap-type:x mandatory, 각 항목 scroll-snap-align:start.
9
+ */
10
+
11
+ interface StripProps {
12
+ children: React__default.ReactNode;
13
+ /** 항목 간격(CSS 길이). 기본 var(--wp-space-3) */
14
+ gap?: string;
15
+ /** 항목 시작점에 스크롤 스냅 */
16
+ snap?: boolean;
17
+ }
18
+ declare function Strip({ children, gap, snap }: StripProps): React__default.JSX.Element;
19
+
20
+ export { Strip, type StripProps };
@@ -0,0 +1 @@
1
+ export { Strip } from '../chunk-IL2KS4WS.js';
@@ -0,0 +1,31 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * SummaryTable — 합계 푸터 행이 있는 테이블.
5
+ *
6
+ * DS Table은 tfoot을 지원하지 않아, 컬럼 정렬이 어긋나지 않도록
7
+ * .wp-table 구조(src/styles/css/data.css)를 그대로 미러링한 단일
8
+ * <table>로 직접 렌더링한다. 푸터 행: var(--wp-surface-sunken) 배경 + strong 텍스트.
9
+ */
10
+
11
+ interface SummaryTableColumn {
12
+ key: string;
13
+ header: React__default.ReactNode;
14
+ /** right → 우측 정렬 + tabular numerals(.wp-table__num) */
15
+ align?: 'left' | 'right';
16
+ /** JetBrains Mono 셀(.wp-table__mono) */
17
+ mono?: boolean;
18
+ /** 강조 셀(.wp-table__strong) */
19
+ strong?: boolean;
20
+ }
21
+ interface SummaryTableProps {
22
+ columns: SummaryTableColumn[];
23
+ rows: Array<Record<string, React__default.ReactNode>>;
24
+ /** 컬럼 key → 합계 셀. 주어지면 푸터 행을 렌더링한다. */
25
+ footer?: Record<string, React__default.ReactNode>;
26
+ /** 32px 행(.wp-table--dense) */
27
+ dense?: boolean;
28
+ }
29
+ declare function SummaryTable({ columns, rows, footer, dense }: SummaryTableProps): React__default.JSX.Element;
30
+
31
+ export { SummaryTable, type SummaryTableColumn, type SummaryTableProps };
@@ -0,0 +1 @@
1
+ export { SummaryTable } from '../chunk-USKRM22W.js';
@@ -0,0 +1,25 @@
1
+ import * as React from 'react';
2
+
3
+ /**
4
+ * TagMultiSelect — 인라인 토글 배지 다중 선택.
5
+ *
6
+ * 옵션마다 토글 버튼(aria-pressed) 하나:
7
+ * - 선택됨 → brand 톤 Badge(채워진 모습)
8
+ * - 미선택 → Tag(아웃라인 모습)
9
+ * onChange로 내보내는 값 배열은 항상 options 순서를 보존한다.
10
+ */
11
+ interface TagMultiSelectOption {
12
+ value: string;
13
+ label: string;
14
+ }
15
+ interface TagMultiSelectProps {
16
+ options: TagMultiSelectOption[];
17
+ values: string[];
18
+ onChange: (values: string[]) => void;
19
+ disabled?: boolean;
20
+ /** 옵션이 하나도 없을 때 보여줄 안내 문구. */
21
+ emptyText?: string;
22
+ }
23
+ declare function TagMultiSelect({ options, values, onChange, disabled, emptyText, }: TagMultiSelectProps): React.JSX.Element;
24
+
25
+ export { TagMultiSelect, type TagMultiSelectOption, type TagMultiSelectProps };
@@ -0,0 +1,2 @@
1
+ export { TagMultiSelect } from '../chunk-4SU2KYPU.js';
2
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,30 @@
1
+ import React__default from 'react';
2
+
3
+ /**
4
+ * Timeline — 변경 이력/활동 피드.
5
+ *
6
+ * - 좌측 아이콘 컬럼: 유형별 틴트 원(생성=success/plus, 수정=info/pencil,
7
+ * 삭제=danger/trash-2, 정보=neutral/info) + 항목 사이 연결선(var(--wp-border-subtle)).
8
+ * - payload가 있으면 Disclosure 접기 버튼 아래 wp-mono-xs <pre> JSON 블록으로 보여준다.
9
+ * - actions는 본문 하단 우측 정렬.
10
+ */
11
+
12
+ interface TimelineItem {
13
+ id: string;
14
+ /** create=success · update=info · delete=danger · info(기본)=neutral */
15
+ type?: 'create' | 'update' | 'delete' | 'info';
16
+ title: React__default.ReactNode;
17
+ time?: string;
18
+ description?: React__default.ReactNode;
19
+ /** 객체면 접을 수 있는 정렬 JSON 블록으로 표시 */
20
+ payload?: unknown;
21
+ actions?: React__default.ReactNode;
22
+ }
23
+ interface TimelineProps {
24
+ items: TimelineItem[];
25
+ /** 지정 시 이 높이를 넘으면 세로 스크롤 */
26
+ maxHeight?: string;
27
+ }
28
+ declare function Timeline({ items, maxHeight }: TimelineProps): React__default.JSX.Element;
29
+
30
+ export { Timeline, type TimelineItem, type TimelineProps };
@@ -0,0 +1,3 @@
1
+ export { Timeline } from '../chunk-MSAV4J4I.js';
2
+ import '../chunk-WNYWTFGW.js';
3
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+ import { TreeNode } from './TreeView.js';
3
+
4
+ interface TreePickerProps {
5
+ nodes: TreeNode[];
6
+ /** 지정하면 controlled — 내부 커밋 상태를 쓰지 않는다. null = 선택 없음. */
7
+ value?: string | null;
8
+ /** 트리에서 노드를 찾지 못할 때 표시할 라벨(controlled 보조). */
9
+ valueLabel?: string;
10
+ onChange?: (id: string | null, node?: TreeNode) => void;
11
+ /** 필드 라벨 겸 다이얼로그 제목. */
12
+ label?: string;
13
+ placeholder?: string;
14
+ excludeIds?: string[];
15
+ /** '(없음)' 선택 허용. 기본 true. */
16
+ allowEmpty?: boolean;
17
+ disabled?: boolean;
18
+ }
19
+ declare function TreePicker({ nodes, value, valueLabel, onChange, label, placeholder, excludeIds, allowEmpty, disabled, }: TreePickerProps): React.JSX.Element;
20
+
21
+ export { TreePicker, type TreePickerProps };
@@ -0,0 +1,3 @@
1
+ export { TreePicker } from '../chunk-ZQR3ULVH.js';
2
+ import '../chunk-SEBPBUZR.js';
3
+ import '../chunk-ZUCI34QY.js';
@@ -0,0 +1,26 @@
1
+ import React__default from 'react';
2
+
3
+ /** 트리 노드. children이 있으면 폴더, 없으면 리프로 그린다. */
4
+ interface TreeNode {
5
+ id: string;
6
+ label: string;
7
+ meta?: string;
8
+ children?: TreeNode[];
9
+ }
10
+ interface TreeViewProps {
11
+ nodes: TreeNode[];
12
+ /** 지정하면 controlled — 내부 선택 상태를 쓰지 않는다. */
13
+ selectedId?: string | null;
14
+ onSelect?: (id: string, node: TreeNode) => void;
15
+ /** 검색 입력을 노출한다. 일치 노드의 조상은 펼친 채 유지된다. */
16
+ searchable?: boolean;
17
+ /** 초기에 펼칠 깊이. 1 = 최상위만 펼침. 기본 1. */
18
+ defaultExpandedDepth?: number;
19
+ /** 서브트리째 숨길 노드 id 목록. */
20
+ excludeIds?: string[];
21
+ /** 스크롤 컨테이너 최대 높이 (예: "320px"). */
22
+ maxHeight?: string;
23
+ }
24
+ declare function TreeView({ nodes, selectedId, onSelect, searchable, defaultExpandedDepth, excludeIds, maxHeight, }: TreeViewProps): React__default.JSX.Element;
25
+
26
+ export { type TreeNode, TreeView, type TreeViewProps };
@@ -0,0 +1,2 @@
1
+ export { TreeView } from '../chunk-SEBPBUZR.js';
2
+ import '../chunk-ZUCI34QY.js';