@wipco/sdui 1.6.1 → 1.7.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 (95) hide show
  1. package/dist/{DatePicker-DX9juElE.d.ts → DatePicker-BOOKdd5x.d.ts} +6 -6
  2. package/dist/calendar-nav-BSGsgJc4.d.ts +54 -0
  3. package/dist/{chunk-O4EMQWCV.js → chunk-27ILQUWE.js} +113 -26
  4. package/dist/{chunk-AJ3KDBEE.js → chunk-466W3XNK.js} +1 -1
  5. package/dist/{chunk-FP32LNFK.js → chunk-4VQIKSDS.js} +157 -190
  6. package/dist/{chunk-UC725BGW.js → chunk-5FZBH3T5.js} +1 -1
  7. package/dist/{chunk-XUVWIRZJ.js → chunk-5LIFU57A.js} +2 -2
  8. package/dist/{chunk-VAXRTBJH.js → chunk-63GM4S25.js} +1 -1
  9. package/dist/{chunk-J7BZF4T4.js → chunk-7EDFYBUA.js} +4 -4
  10. package/dist/{chunk-KO3EUNWB.js → chunk-7YTZB5LQ.js} +3 -3
  11. package/dist/{chunk-SGGIWPP6.js → chunk-7ZCM6XEM.js} +2 -2
  12. package/dist/{chunk-GKYUDTMI.js → chunk-A22QR6PM.js} +2 -2
  13. package/dist/{chunk-IIRVHSNK.js → chunk-A3SO6H47.js} +2 -2
  14. package/dist/{chunk-TWUKNUUQ.js → chunk-AP33B24H.js} +2 -2
  15. package/dist/{chunk-VSNHDHGS.js → chunk-B5MB64YQ.js} +209 -25
  16. package/dist/{chunk-USNPJEXH.js → chunk-DCSUBFFG.js} +4 -4
  17. package/dist/{chunk-KDKRFWIF.js → chunk-DILQ2DJV.js} +5 -5
  18. package/dist/{chunk-US3K6Q5T.js → chunk-ENZBX4AR.js} +1 -1
  19. package/dist/{chunk-CUFGH3LB.js → chunk-FGKBXUUA.js} +1 -1
  20. package/dist/{chunk-VR5MFUD2.js → chunk-FUNCQCKN.js} +2 -2
  21. package/dist/{chunk-TB7G5DXQ.js → chunk-GWT5UF5B.js} +2 -2
  22. package/dist/{chunk-OKNF2SBB.js → chunk-H5QRRPBJ.js} +3 -3
  23. package/dist/{chunk-UZZLMPRW.js → chunk-JCG4575S.js} +2 -2
  24. package/dist/{chunk-34BABTH4.js → chunk-JMNUFA5M.js} +1 -1
  25. package/dist/{chunk-3PT5OBOU.js → chunk-L6ODTHTX.js} +1 -1
  26. package/dist/{chunk-OQ7A3SFM.js → chunk-LKA43GYA.js} +1 -1
  27. package/dist/{chunk-GSXD52XG.js → chunk-LKL3SCBJ.js} +2 -2
  28. package/dist/{chunk-A57GKV5F.js → chunk-LN4KPZIX.js} +3 -3
  29. package/dist/chunk-MUXGTVEA.js +421 -0
  30. package/dist/{chunk-3PCR73OC.js → chunk-MWBCQHKQ.js} +3 -3
  31. package/dist/{chunk-XFKNU6QN.js → chunk-NI3LMETK.js} +2 -2
  32. package/dist/{chunk-ESAFQXEU.js → chunk-NJTIJAFU.js} +2 -2
  33. package/dist/{chunk-PCFH74RD.js → chunk-NQDHGK7C.js} +3 -3
  34. package/dist/{chunk-YYAGE733.js → chunk-OWM7E55U.js} +8 -0
  35. package/dist/{chunk-OCYJ2ZOV.js → chunk-P62INTQ5.js} +1 -1
  36. package/dist/{chunk-7G6J6QFC.js → chunk-Q56LZJFX.js} +1 -1
  37. package/dist/{chunk-BITS7UJY.js → chunk-R2ORCOTG.js} +2 -2
  38. package/dist/{chunk-VQKX5PJ4.js → chunk-RA74PUMP.js} +3 -3
  39. package/dist/{chunk-GSM664TX.js → chunk-TAVKGYH5.js} +24 -1
  40. package/dist/{chunk-BV37UCDF.js → chunk-UBVYPV7H.js} +2 -2
  41. package/dist/chunk-VR4DQTWR.js +391 -0
  42. package/dist/{chunk-6YBSBC77.js → chunk-WPAZBAUW.js} +1 -1
  43. package/dist/{chunk-4YPPL7JK.js → chunk-WTQH2NI2.js} +1 -1
  44. package/dist/{chunk-NLSR3JYU.js → chunk-X7RSKFWF.js} +1 -1
  45. package/dist/{chunk-CSZCWBOE.js → chunk-XDR6HC4U.js} +14 -7
  46. package/dist/{chunk-EUSC5NMZ.js → chunk-Z4JZUIKE.js} +3 -3
  47. package/dist/{chunk-EGFDELSF.js → chunk-Z4LFZWHH.js} +2 -2
  48. package/dist/{chunk-JHFA5RDN.js → chunk-ZBX2CAOO.js} +2 -2
  49. package/dist/index.d.ts +22 -2
  50. package/dist/index.js +27 -19
  51. package/dist/meta.js +14 -1
  52. package/dist/rich/ExcelUploadCard.js +4 -4
  53. package/dist/rich.d.ts +2 -1
  54. package/dist/rich.js +7 -6
  55. package/dist/styles.css +10 -0
  56. package/dist/widgets/ApprovalLineEditor.js +9 -8
  57. package/dist/widgets/ApprovalOverridesEditor.js +11 -10
  58. package/dist/widgets/ApprovalStepper.js +2 -2
  59. package/dist/widgets/AutocompleteField.js +9 -8
  60. package/dist/widgets/ColumnBoard.js +2 -2
  61. package/dist/widgets/DiffView.js +2 -2
  62. package/dist/widgets/Disclosure.js +2 -2
  63. package/dist/widgets/EventCalendar.d.ts +14 -10
  64. package/dist/widgets/EventCalendar.js +5 -3
  65. package/dist/widgets/FileDropzone.js +7 -7
  66. package/dist/widgets/ImageLightbox.js +5 -5
  67. package/dist/widgets/InlineEdit.js +2 -2
  68. package/dist/widgets/JsonField.js +2 -2
  69. package/dist/widgets/OptionSchemaEditor.js +3 -3
  70. package/dist/widgets/OptionValueFields.js +3 -3
  71. package/dist/widgets/OrgChart.js +3 -3
  72. package/dist/widgets/OrgChartBoard.d.ts +57 -4
  73. package/dist/widgets/OrgChartBoard.js +8 -8
  74. package/dist/widgets/PeriodFilter.js +6 -5
  75. package/dist/widgets/PermissionMatrixEditor.js +4 -4
  76. package/dist/widgets/PositionSelect.js +4 -4
  77. package/dist/widgets/PrintSheet.js +2 -2
  78. package/dist/widgets/ProfileEditDiffCard.js +4 -4
  79. package/dist/widgets/QRDisplay.js +4 -4
  80. package/dist/widgets/RankBoard.js +6 -6
  81. package/dist/widgets/RecordSheet.d.ts +48 -1
  82. package/dist/widgets/RecordSheet.js +2 -1
  83. package/dist/widgets/RoleMemberPicker.js +5 -5
  84. package/dist/widgets/SearchableMultiPicker.js +7 -6
  85. package/dist/widgets/SecureScreen.js +2 -2
  86. package/dist/widgets/StagePeriodEditor.js +6 -5
  87. package/dist/widgets/TagInput.js +2 -2
  88. package/dist/widgets/TagMultiSelect.js +4 -4
  89. package/dist/widgets/Timeline.js +3 -3
  90. package/dist/widgets/TreePicker.js +8 -7
  91. package/dist/widgets/TreeView.js +7 -6
  92. package/dist/widgets/index.d.ts +1 -0
  93. package/dist/widgets/index.js +76 -75
  94. package/package.json +1 -1
  95. package/dist/chunk-IB2ZPUTF.js +0 -172
@@ -50,10 +50,57 @@ interface RecordSheetProps {
50
50
  /** 표 아래 오른쪽에 붙는 주석 한 줄(예: 출력일) */
51
51
  note?: string;
52
52
  }
53
+ /** 격자 위의 칸 — 시작 열(포함)·끝 열(제외). */
54
+ interface PlacedCell {
55
+ cell: RecordSheetCell;
56
+ start: number;
57
+ end: number;
58
+ }
59
+ /**
60
+ * 줄 정의마다 칸의 격자 위치를 잡는다 — HTML 표 배치와 같은 규칙: 위 줄의 rowSpan 이 차지한 열은
61
+ * 건너뛰고 다음 빈 열부터 놓는다(사진 칸 rowSpan 옆의 라벨이 몇 번째 열인지 알아야 구획에 나눌 수 있다).
62
+ * 되풀이 줄도 정의 한 줄로 센다 — 칸의 열 위치는 되풀이와 무관하다.
63
+ */
64
+ declare function placeRecordSheetCells(rows: RecordSheetRow[], width: number): PlacedCell[][];
65
+ /** 라벨|값 한 쌍. 라벨 없는 값(줄 첫머리의 값 칸)은 label 이 null 이다. */
66
+ interface RecordSheetPair {
67
+ label: RecordSheetCell | null;
68
+ values: RecordSheetCell[];
69
+ }
70
+ /** 블록의 작은 표 한 줄 — 칸의 열 위치는 블록 기준(0부터), 되풀이면 배열·최소 줄 수를 든다. */
71
+ interface RecordSheetGridRow {
72
+ cells: PlacedCell[];
73
+ repeat?: unknown[][];
74
+ minRows?: number;
75
+ }
76
+ type RecordSheetStackPart = {
77
+ kind: 'pairs';
78
+ pairs: RecordSheetPair[];
79
+ } | {
80
+ kind: 'grid';
81
+ rows: RecordSheetGridRow[];
82
+ } | {
83
+ kind: 'photo';
84
+ cell: RecordSheetCell;
85
+ };
86
+ interface RecordSheetStackBlock {
87
+ /** 구획 제목 칸 — 구획 밖(제목 줄 앞의 기본 정보)은 null */
88
+ section: RecordSheetCell | null;
89
+ parts: RecordSheetStackPart[];
90
+ }
91
+ /**
92
+ * 줄 정의 → 쌓기 블록. 구획 제목 줄(칸이 전부 `section`)이 블록을 연다 — 제목 칸마다 하나씩이고, 다음 줄의
93
+ * 칸은 시작 열이 그 제목 칸의 열 범위에 드는 블록으로 간다. 빈 줄(gap)은 블록을 닫는다. 구획 밖의 줄은
94
+ * 제목 없는 블록이 된다.
95
+ * - 라벨과 값이 섞인 고정 줄 → 쌍 목록(이어지는 줄은 같은 목록에 붙는다)
96
+ * - 라벨만 든 줄(머리 줄)·값만 든 줄·되풀이 줄 → 작은 표 줄
97
+ * - 사진 칸 → 자기 자리(사진 부분)
98
+ */
99
+ declare function stackRecordSheet(rows: RecordSheetRow[], width: number): RecordSheetStackBlock[];
53
100
  /**
54
101
  * 바깥에서 온 `style`·`className`을 뿌리에 얹어 내보낸다 — 자식 축(`grow`·`width` …)이
55
102
  * 이 컴포넌트에서도 동작하게 하는 유일한 통로다. 까닭은 {@link ../boxed.tsx}에 있다.
56
103
  */
57
104
  declare const RecordSheet: React__default.FC<RecordSheetProps & SduiBoxProps>;
58
105
 
59
- export { RecordSheet, type RecordSheetCell, type RecordSheetCellKind, type RecordSheetProps, type RecordSheetRow };
106
+ export { type PlacedCell, RecordSheet, type RecordSheetCell, type RecordSheetCellKind, type RecordSheetGridRow, type RecordSheetPair, type RecordSheetProps, type RecordSheetRow, type RecordSheetStackBlock, type RecordSheetStackPart, placeRecordSheetCells, stackRecordSheet };
@@ -1,2 +1,3 @@
1
- export { RecordSheet } from '../chunk-IB2ZPUTF.js';
1
+ export { RecordSheet, placeRecordSheetCells, stackRecordSheet } from '../chunk-VR4DQTWR.js';
2
+ import '../chunk-TAVKGYH5.js';
2
3
  import '../chunk-3JTBOABA.js';
@@ -1,6 +1,6 @@
1
- export { RoleMemberPicker } from '../chunk-PCFH74RD.js';
2
- import '../chunk-VAXRTBJH.js';
3
- import '../chunk-JHFA5RDN.js';
4
- import '../chunk-GSM664TX.js';
5
- import '../chunk-YYAGE733.js';
1
+ export { RoleMemberPicker } from '../chunk-NQDHGK7C.js';
2
+ import '../chunk-63GM4S25.js';
3
+ import '../chunk-ZBX2CAOO.js';
4
+ import '../chunk-TAVKGYH5.js';
5
+ import '../chunk-OWM7E55U.js';
6
6
  import '../chunk-3JTBOABA.js';
@@ -1,8 +1,9 @@
1
- export { SearchableMultiPicker } from '../chunk-3PCR73OC.js';
2
- import '../chunk-A57GKV5F.js';
3
- import '../chunk-FP32LNFK.js';
4
- import '../chunk-BITS7UJY.js';
1
+ export { SearchableMultiPicker } from '../chunk-MWBCQHKQ.js';
2
+ import '../chunk-LN4KPZIX.js';
3
+ import '../chunk-4VQIKSDS.js';
4
+ import '../chunk-MUXGTVEA.js';
5
+ import '../chunk-R2ORCOTG.js';
5
6
  import '../chunk-RIZRM7OO.js';
6
- import '../chunk-GSM664TX.js';
7
- import '../chunk-YYAGE733.js';
7
+ import '../chunk-TAVKGYH5.js';
8
+ import '../chunk-OWM7E55U.js';
8
9
  import '../chunk-3JTBOABA.js';
@@ -1,3 +1,3 @@
1
- export { SecureScreen } from '../chunk-AJ3KDBEE.js';
2
- import '../chunk-YYAGE733.js';
1
+ export { SecureScreen } from '../chunk-466W3XNK.js';
2
+ import '../chunk-OWM7E55U.js';
3
3
  import '../chunk-3JTBOABA.js';
@@ -1,7 +1,8 @@
1
- export { StagePeriodEditor } from '../chunk-TB7G5DXQ.js';
2
- import '../chunk-FP32LNFK.js';
3
- import '../chunk-BITS7UJY.js';
1
+ export { StagePeriodEditor } from '../chunk-GWT5UF5B.js';
2
+ import '../chunk-4VQIKSDS.js';
3
+ import '../chunk-MUXGTVEA.js';
4
+ import '../chunk-R2ORCOTG.js';
4
5
  import '../chunk-RIZRM7OO.js';
5
- import '../chunk-GSM664TX.js';
6
- import '../chunk-YYAGE733.js';
6
+ import '../chunk-TAVKGYH5.js';
7
+ import '../chunk-OWM7E55U.js';
7
8
  import '../chunk-3JTBOABA.js';
@@ -1,4 +1,4 @@
1
- export { TagInput, foldSuggestions, normalizeKeyword, normalizeKeywords, splitKeywordText } from '../chunk-OQ7A3SFM.js';
1
+ export { TagInput, foldSuggestions, normalizeKeyword, normalizeKeywords, splitKeywordText } from '../chunk-LKA43GYA.js';
2
2
  import '../chunk-RIZRM7OO.js';
3
- import '../chunk-YYAGE733.js';
3
+ import '../chunk-OWM7E55U.js';
4
4
  import '../chunk-3JTBOABA.js';
@@ -1,5 +1,5 @@
1
- export { TagMultiSelect, pickSeedValues } from '../chunk-GSXD52XG.js';
2
- import '../chunk-JHFA5RDN.js';
3
- import '../chunk-GSM664TX.js';
4
- import '../chunk-YYAGE733.js';
1
+ export { TagMultiSelect, pickSeedValues } from '../chunk-LKL3SCBJ.js';
2
+ import '../chunk-ZBX2CAOO.js';
3
+ import '../chunk-TAVKGYH5.js';
4
+ import '../chunk-OWM7E55U.js';
5
5
  import '../chunk-3JTBOABA.js';
@@ -1,4 +1,4 @@
1
- export { Timeline } from '../chunk-XUVWIRZJ.js';
2
- import '../chunk-OCYJ2ZOV.js';
3
- import '../chunk-YYAGE733.js';
1
+ export { Timeline } from '../chunk-5LIFU57A.js';
2
+ import '../chunk-P62INTQ5.js';
3
+ import '../chunk-OWM7E55U.js';
4
4
  import '../chunk-3JTBOABA.js';
@@ -1,9 +1,10 @@
1
- export { TreePicker } from '../chunk-OKNF2SBB.js';
2
- import '../chunk-TWUKNUUQ.js';
3
- import '../chunk-A57GKV5F.js';
4
- import '../chunk-FP32LNFK.js';
5
- import '../chunk-BITS7UJY.js';
1
+ export { TreePicker } from '../chunk-H5QRRPBJ.js';
2
+ import '../chunk-AP33B24H.js';
3
+ import '../chunk-LN4KPZIX.js';
4
+ import '../chunk-4VQIKSDS.js';
5
+ import '../chunk-MUXGTVEA.js';
6
+ import '../chunk-R2ORCOTG.js';
6
7
  import '../chunk-RIZRM7OO.js';
7
- import '../chunk-GSM664TX.js';
8
- import '../chunk-YYAGE733.js';
8
+ import '../chunk-TAVKGYH5.js';
9
+ import '../chunk-OWM7E55U.js';
9
10
  import '../chunk-3JTBOABA.js';
@@ -1,8 +1,9 @@
1
- export { TreeView, ancestorIdsOf, buildTreeNodes, pruneExcluded, resolveTreeNodes, scrollRowIntoBox } from '../chunk-TWUKNUUQ.js';
2
- import '../chunk-A57GKV5F.js';
3
- import '../chunk-FP32LNFK.js';
4
- import '../chunk-BITS7UJY.js';
1
+ export { TreeView, ancestorIdsOf, buildTreeNodes, pruneExcluded, resolveTreeNodes, scrollRowIntoBox } from '../chunk-AP33B24H.js';
2
+ import '../chunk-LN4KPZIX.js';
3
+ import '../chunk-4VQIKSDS.js';
4
+ import '../chunk-MUXGTVEA.js';
5
+ import '../chunk-R2ORCOTG.js';
5
6
  import '../chunk-RIZRM7OO.js';
6
- import '../chunk-GSM664TX.js';
7
- import '../chunk-YYAGE733.js';
7
+ import '../chunk-TAVKGYH5.js';
8
+ import '../chunk-OWM7E55U.js';
8
9
  import '../chunk-3JTBOABA.js';
@@ -72,6 +72,7 @@ import { ApprovalLineEditorProps } from './ApprovalLineEditor.js';
72
72
  export { ApprovalLineEditor, ApprovalLineStep, CustomApprover } from './ApprovalLineEditor.js';
73
73
  export { AutocompleteField, AutocompleteFieldProps, AutocompleteOption, AutocompleteSearchFn, AutocompleteSearchResult, endpointSearchFn, toAutocompleteOptions } from './AutocompleteField.js';
74
74
  export { FileDropzone, FileDropzoneItem, FileDropzoneProps, unwrapUploaded } from './FileDropzone.js';
75
+ import '../calendar-nav-BSGsgJc4.js';
75
76
 
76
77
  /**
77
78
  * `createRegistry(widgetComponents)`로 어휘에 얹는 묶음.
@@ -1,88 +1,89 @@
1
- import { TreePicker } from '../chunk-OKNF2SBB.js';
2
- export { TreePicker } from '../chunk-OKNF2SBB.js';
3
- import { TreeView } from '../chunk-TWUKNUUQ.js';
4
- export { TreeView, buildTreeNodes } from '../chunk-TWUKNUUQ.js';
5
- import { SecureScreen } from '../chunk-AJ3KDBEE.js';
6
- export { SecureScreen } from '../chunk-AJ3KDBEE.js';
1
+ import { TreePicker } from '../chunk-H5QRRPBJ.js';
2
+ export { TreePicker } from '../chunk-H5QRRPBJ.js';
3
+ import { TreeView } from '../chunk-AP33B24H.js';
4
+ export { TreeView, buildTreeNodes } from '../chunk-AP33B24H.js';
5
+ import { SecureScreen } from '../chunk-466W3XNK.js';
6
+ export { SecureScreen } from '../chunk-466W3XNK.js';
7
7
  import { StackedMeter } from '../chunk-EJIWOD7W.js';
8
8
  export { StackedMeter } from '../chunk-EJIWOD7W.js';
9
- import { StagePeriodEditor } from '../chunk-TB7G5DXQ.js';
10
- export { StagePeriodEditor } from '../chunk-TB7G5DXQ.js';
9
+ import { StagePeriodEditor } from '../chunk-GWT5UF5B.js';
10
+ export { StagePeriodEditor } from '../chunk-GWT5UF5B.js';
11
11
  import { Strip } from '../chunk-XAXROQKB.js';
12
12
  export { Strip } from '../chunk-XAXROQKB.js';
13
13
  import { SummaryTable } from '../chunk-VZOQRQAR.js';
14
14
  export { SummaryTable } from '../chunk-VZOQRQAR.js';
15
- import { TagInput } from '../chunk-OQ7A3SFM.js';
16
- export { TagInput, foldSuggestions, normalizeKeyword, normalizeKeywords, splitKeywordText } from '../chunk-OQ7A3SFM.js';
17
- import { Timeline } from '../chunk-XUVWIRZJ.js';
18
- export { Timeline } from '../chunk-XUVWIRZJ.js';
19
- import { PositionSelect } from '../chunk-BV37UCDF.js';
20
- export { PositionSelect } from '../chunk-BV37UCDF.js';
21
- import { PrintSheet } from '../chunk-6YBSBC77.js';
22
- export { PrintSheet } from '../chunk-6YBSBC77.js';
23
- import { QRDisplay } from '../chunk-XFKNU6QN.js';
24
- export { QRDisplay } from '../chunk-XFKNU6QN.js';
25
- import { ProfileEditDiffCard } from '../chunk-IIRVHSNK.js';
26
- export { ProfileEditDiffCard } from '../chunk-IIRVHSNK.js';
27
- import { RankBoard } from '../chunk-VQKX5PJ4.js';
28
- export { RankBoard } from '../chunk-VQKX5PJ4.js';
29
- import { RecordSheet } from '../chunk-IB2ZPUTF.js';
30
- export { RecordSheet } from '../chunk-IB2ZPUTF.js';
31
- import { RoleMemberPicker } from '../chunk-PCFH74RD.js';
32
- export { RoleMemberPicker } from '../chunk-PCFH74RD.js';
33
- import { SearchableMultiPicker } from '../chunk-3PCR73OC.js';
34
- export { SearchableMultiPicker } from '../chunk-3PCR73OC.js';
35
- import { JsonField } from '../chunk-US3K6Q5T.js';
36
- export { JsonField } from '../chunk-US3K6Q5T.js';
15
+ import { TagInput } from '../chunk-LKA43GYA.js';
16
+ export { TagInput, foldSuggestions, normalizeKeyword, normalizeKeywords, splitKeywordText } from '../chunk-LKA43GYA.js';
17
+ import { Timeline } from '../chunk-5LIFU57A.js';
18
+ export { Timeline } from '../chunk-5LIFU57A.js';
19
+ import { PositionSelect } from '../chunk-UBVYPV7H.js';
20
+ export { PositionSelect } from '../chunk-UBVYPV7H.js';
21
+ import { PrintSheet } from '../chunk-WPAZBAUW.js';
22
+ export { PrintSheet } from '../chunk-WPAZBAUW.js';
23
+ import { QRDisplay } from '../chunk-NI3LMETK.js';
24
+ export { QRDisplay } from '../chunk-NI3LMETK.js';
25
+ import { ProfileEditDiffCard } from '../chunk-A3SO6H47.js';
26
+ export { ProfileEditDiffCard } from '../chunk-A3SO6H47.js';
27
+ import { RankBoard } from '../chunk-RA74PUMP.js';
28
+ export { RankBoard } from '../chunk-RA74PUMP.js';
29
+ import { RecordSheet } from '../chunk-VR4DQTWR.js';
30
+ export { RecordSheet } from '../chunk-VR4DQTWR.js';
31
+ import { RoleMemberPicker } from '../chunk-NQDHGK7C.js';
32
+ export { RoleMemberPicker } from '../chunk-NQDHGK7C.js';
33
+ import { SearchableMultiPicker } from '../chunk-MWBCQHKQ.js';
34
+ export { SearchableMultiPicker } from '../chunk-MWBCQHKQ.js';
35
+ import { JsonField } from '../chunk-ENZBX4AR.js';
36
+ export { JsonField } from '../chunk-ENZBX4AR.js';
37
37
  import { LiveClock } from '../chunk-37BNG4DT.js';
38
38
  export { LiveClock } from '../chunk-37BNG4DT.js';
39
- import { OptionSchemaEditor } from '../chunk-ESAFQXEU.js';
40
- export { OPTION_TYPES, OptionSchemaEditor } from '../chunk-ESAFQXEU.js';
41
- import { OptionValueFields } from '../chunk-SGGIWPP6.js';
42
- export { OptionValueFields } from '../chunk-SGGIWPP6.js';
43
- import { OrgChart } from '../chunk-EGFDELSF.js';
44
- export { OrgChart } from '../chunk-EGFDELSF.js';
45
- import { OrgChartBoard } from '../chunk-VSNHDHGS.js';
46
- export { OrgChartBoard } from '../chunk-VSNHDHGS.js';
39
+ import { OptionSchemaEditor } from '../chunk-NJTIJAFU.js';
40
+ export { OPTION_TYPES, OptionSchemaEditor } from '../chunk-NJTIJAFU.js';
41
+ import { OptionValueFields } from '../chunk-7ZCM6XEM.js';
42
+ export { OptionValueFields } from '../chunk-7ZCM6XEM.js';
43
+ import { OrgChart } from '../chunk-Z4LFZWHH.js';
44
+ export { OrgChart } from '../chunk-Z4LFZWHH.js';
45
+ import { OrgChartBoard } from '../chunk-B5MB64YQ.js';
46
+ export { OrgChartBoard } from '../chunk-B5MB64YQ.js';
47
47
  import '../chunk-XRHR452N.js';
48
- import '../chunk-CSZCWBOE.js';
49
- import { PermissionMatrixEditor } from '../chunk-KO3EUNWB.js';
50
- export { PermissionMatrixEditor, stickyInsetOf } from '../chunk-KO3EUNWB.js';
51
- import { PeriodFilter } from '../chunk-GKYUDTMI.js';
52
- export { PeriodFilter } from '../chunk-GKYUDTMI.js';
53
- export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-J7BZF4T4.js';
54
- import { ColumnBoard } from '../chunk-7G6J6QFC.js';
55
- export { ColumnBoard } from '../chunk-7G6J6QFC.js';
56
- import { DiffView } from '../chunk-NLSR3JYU.js';
57
- export { DiffView } from '../chunk-NLSR3JYU.js';
58
- import { Disclosure } from '../chunk-OCYJ2ZOV.js';
59
- export { Disclosure } from '../chunk-OCYJ2ZOV.js';
60
- import { EventCalendar } from '../chunk-O4EMQWCV.js';
61
- export { EventCalendar, statusToneOf } from '../chunk-O4EMQWCV.js';
62
- export { FileDropzone, unwrapUploaded } from '../chunk-EUSC5NMZ.js';
63
- import { ImageLightbox } from '../chunk-3PT5OBOU.js';
64
- export { ImageLightbox } from '../chunk-3PT5OBOU.js';
65
- import { InlineEdit } from '../chunk-34BABTH4.js';
66
- export { InlineEdit } from '../chunk-34BABTH4.js';
67
- import '../chunk-VR5MFUD2.js';
68
- import '../chunk-UC725BGW.js';
69
- import '../chunk-UZZLMPRW.js';
70
- import { ApprovalOverridesEditor } from '../chunk-KDKRFWIF.js';
71
- export { ApprovalOverridesEditor } from '../chunk-KDKRFWIF.js';
72
- import { TagMultiSelect } from '../chunk-GSXD52XG.js';
73
- export { TagMultiSelect, pickSeedValues } from '../chunk-GSXD52XG.js';
74
- import { ApprovalLineEditor } from '../chunk-USNPJEXH.js';
75
- export { ApprovalLineEditor } from '../chunk-USNPJEXH.js';
76
- import '../chunk-VAXRTBJH.js';
77
- import '../chunk-A57GKV5F.js';
78
- import '../chunk-FP32LNFK.js';
79
- import '../chunk-BITS7UJY.js';
48
+ import '../chunk-XDR6HC4U.js';
49
+ import { PermissionMatrixEditor } from '../chunk-7YTZB5LQ.js';
50
+ export { PermissionMatrixEditor, stickyInsetOf } from '../chunk-7YTZB5LQ.js';
51
+ import { PeriodFilter } from '../chunk-A22QR6PM.js';
52
+ export { PeriodFilter } from '../chunk-A22QR6PM.js';
53
+ export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-7EDFYBUA.js';
54
+ import { ColumnBoard } from '../chunk-Q56LZJFX.js';
55
+ export { ColumnBoard } from '../chunk-Q56LZJFX.js';
56
+ import { DiffView } from '../chunk-X7RSKFWF.js';
57
+ export { DiffView } from '../chunk-X7RSKFWF.js';
58
+ import { Disclosure } from '../chunk-P62INTQ5.js';
59
+ export { Disclosure } from '../chunk-P62INTQ5.js';
60
+ import { EventCalendar } from '../chunk-27ILQUWE.js';
61
+ export { EventCalendar, statusToneOf } from '../chunk-27ILQUWE.js';
62
+ export { FileDropzone, unwrapUploaded } from '../chunk-Z4JZUIKE.js';
63
+ import { ImageLightbox } from '../chunk-L6ODTHTX.js';
64
+ export { ImageLightbox } from '../chunk-L6ODTHTX.js';
65
+ import { InlineEdit } from '../chunk-JMNUFA5M.js';
66
+ export { InlineEdit } from '../chunk-JMNUFA5M.js';
67
+ import '../chunk-FUNCQCKN.js';
68
+ import '../chunk-5FZBH3T5.js';
69
+ import '../chunk-JCG4575S.js';
70
+ import { ApprovalOverridesEditor } from '../chunk-DILQ2DJV.js';
71
+ export { ApprovalOverridesEditor } from '../chunk-DILQ2DJV.js';
72
+ import { TagMultiSelect } from '../chunk-LKL3SCBJ.js';
73
+ export { TagMultiSelect, pickSeedValues } from '../chunk-LKL3SCBJ.js';
74
+ import { ApprovalLineEditor } from '../chunk-DCSUBFFG.js';
75
+ export { ApprovalLineEditor } from '../chunk-DCSUBFFG.js';
76
+ import '../chunk-63GM4S25.js';
77
+ import '../chunk-LN4KPZIX.js';
78
+ import '../chunk-4VQIKSDS.js';
79
+ import '../chunk-MUXGTVEA.js';
80
+ import '../chunk-R2ORCOTG.js';
80
81
  import '../chunk-RIZRM7OO.js';
81
- import '../chunk-JHFA5RDN.js';
82
- import '../chunk-GSM664TX.js';
83
- import { ApprovalStepper } from '../chunk-CUFGH3LB.js';
84
- export { ApprovalStepper, normalizeStepStatus } from '../chunk-CUFGH3LB.js';
85
- import '../chunk-YYAGE733.js';
82
+ import '../chunk-ZBX2CAOO.js';
83
+ import '../chunk-TAVKGYH5.js';
84
+ import { ApprovalStepper } from '../chunk-FGKBXUUA.js';
85
+ export { ApprovalStepper, normalizeStepStatus } from '../chunk-FGKBXUUA.js';
86
+ import '../chunk-OWM7E55U.js';
86
87
  import '../chunk-3JTBOABA.js';
87
88
 
88
89
  // src/widgets/index.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipco/sdui",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "description": "WIPCO 서버 주도 UI(SDUI) 렌더러 — JSON 페이지 스펙을 React 컴포넌트로 렌더링",
5
5
  "keywords": [
6
6
  "sdui",
@@ -1,172 +0,0 @@
1
- import { boxed } from './chunk-3JTBOABA.js';
2
- import { useRef, useState, useEffect } from 'react';
3
- import { jsx, jsxs } from 'react/jsx-runtime';
4
-
5
- var RECORD_SHEET_CSS = `
6
- .erp-recsheet__scroll{overflow-x:auto;min-width:0}
7
- .erp-recsheet{width:100%;min-width:44rem;border-collapse:collapse;table-layout:fixed;font-size:var(--wp-size-sm)}
8
- .erp-recsheet td{height:var(--wp-row-h-dense);border:var(--wp-border-w) solid var(--wp-border-default);padding:var(--wp-space-1) var(--wp-space-2);color:var(--wp-text-default);vertical-align:middle;line-height:var(--wp-leading-snug);overflow-wrap:anywhere}
9
- .erp-recsheet td.erp-recsheet__title{background:var(--wp-surface-inverse);color:var(--wp-text-inverse);text-align:center;font-size:var(--wp-size-lg);font-weight:var(--wp-weight-semibold);letter-spacing:var(--wp-tracking-heading);padding:var(--wp-space-3) var(--wp-space-2)}
10
- .erp-recsheet td.erp-recsheet__label{background:var(--wp-surface-sunken);color:var(--wp-text-subtle);font-size:var(--wp-size-xs);font-weight:var(--wp-weight-semibold);text-align:center;white-space:nowrap}
11
- .erp-recsheet td.erp-recsheet__section{background:var(--wp-surface-brand-tint);border-top:var(--wp-border-w-strong) solid var(--wp-border-brand);color:var(--wp-text-brand);font-size:var(--wp-size-xs);font-weight:var(--wp-weight-semibold);letter-spacing:var(--wp-tracking-heading)}
12
- .erp-recsheet tr.erp-recsheet__gap td{border:0;padding:0;height:var(--wp-space-3)}
13
- .erp-recsheet td.erp-recsheet__mono{font-family:var(--wp-font-mono);font-size:var(--wp-size-xs)}
14
- .erp-recsheet td.erp-recsheet__photo{background:var(--wp-surface-sunken);padding:var(--wp-space-2);text-align:center}
15
- .erp-recsheet__img{display:block;width:100%;height:11rem;object-fit:cover;border-radius:var(--wp-radius-sm)}
16
- .erp-recsheet__noimg{display:flex;align-items:center;justify-content:center;width:100%;height:11rem;border:var(--wp-border-w) dashed var(--wp-border-default);border-radius:var(--wp-radius-sm);color:var(--wp-text-disabled);font-size:var(--wp-size-xs)}
17
- .erp-recsheet__note{margin:var(--wp-space-2) 0 0;text-align:right;color:var(--wp-text-subtle);font-size:var(--wp-size-xs)}
18
- .erp-recsheet__frame{position:relative;min-width:0}
19
- .erp-recsheet__frame::before,.erp-recsheet__frame::after{content:"";position:absolute;top:0;bottom:0;z-index:1;width:var(--wp-space-4);pointer-events:none;opacity:0;transition:opacity var(--wp-duration-fast)}
20
- .erp-recsheet__frame::before{left:0;background:linear-gradient(to right,color-mix(in srgb,var(--wp-text-strong) 16%,transparent),transparent)}
21
- .erp-recsheet__frame::after{right:0;background:linear-gradient(to left,color-mix(in srgb,var(--wp-text-strong) 16%,transparent),transparent)}
22
- .erp-recsheet__frame[data-more-left]::before,.erp-recsheet__frame[data-more-right]::after{opacity:1}
23
- @media print{
24
- .erp-recsheet__frame::before,.erp-recsheet__frame::after{display:none}
25
- .erp-recsheet__scroll{overflow-x:visible}
26
- .erp-recsheet{min-width:0}
27
- .erp-recsheet tr{break-inside:avoid}
28
- }
29
- `;
30
- function RecordSheetStyles() {
31
- return /* @__PURE__ */ jsx("style", { href: "erp-recsheet", precedence: "medium", children: RECORD_SHEET_CSS });
32
- }
33
- function gridColumns(columns) {
34
- if (typeof columns !== "number" || !Number.isFinite(columns)) return 24;
35
- return Math.min(60, Math.max(1, Math.floor(columns)));
36
- }
37
- function cellClass(cell) {
38
- const classes = [];
39
- if (cell.kind === "label") classes.push("erp-recsheet__label");
40
- else if (cell.kind === "section") classes.push("erp-recsheet__section");
41
- else if (cell.kind === "photo") classes.push("erp-recsheet__photo");
42
- if (cell.mono) classes.push("erp-recsheet__mono");
43
- return classes.length > 0 ? classes.join(" ") : void 0;
44
- }
45
- function isBlank(value) {
46
- return value === null || value === void 0 || value === "";
47
- }
48
- function pickValue(cell, item) {
49
- if (!item || typeof item !== "object") return void 0;
50
- const row = item;
51
- if (cell.fields && cell.fields.length > 0) {
52
- const parts = cell.fields.map((name) => isBlank(row[name]) ? "" : String(row[name]));
53
- if (parts.every((part) => part === "")) return void 0;
54
- return parts.join(cell.separator ?? " ~ ");
55
- }
56
- if (cell.field) return row[cell.field];
57
- return void 0;
58
- }
59
- function PhotoCell({ src, alt }) {
60
- const [failed, setFailed] = useState(false);
61
- const label = alt ?? "\uC0AC\uC9C4";
62
- if (!src || failed) return /* @__PURE__ */ jsx("span", { className: "erp-recsheet__noimg", children: label });
63
- return /* @__PURE__ */ jsx("img", { className: "erp-recsheet__img", src, alt: label, onError: () => setFailed(true) });
64
- }
65
- function cellContent(cell, item, repeated) {
66
- if (cell.kind === "photo") return /* @__PURE__ */ jsx(PhotoCell, { src: cell.src, alt: cell.alt });
67
- if (!repeated) {
68
- if (!isBlank(cell.text)) return cell.text;
69
- if (cell.kind === "label" || cell.kind === "section") return null;
70
- return cell.placeholder ?? "-";
71
- }
72
- const value = pickValue(cell, item);
73
- if (!isBlank(value)) return value;
74
- return item ? cell.placeholder ?? "-" : null;
75
- }
76
- function renderCells(cells, items, keyPrefix) {
77
- return cells.map((cell, index) => {
78
- const item = items ? items[cell.source ?? 0] ?? null : null;
79
- return /* @__PURE__ */ jsx(
80
- "td",
81
- {
82
- className: cellClass(cell),
83
- colSpan: cell.span && cell.span > 1 ? cell.span : void 0,
84
- rowSpan: cell.rowSpan && cell.rowSpan > 1 ? cell.rowSpan : void 0,
85
- style: cell.align && cell.align !== "left" ? { textAlign: cell.align } : void 0,
86
- children: cellContent(cell, item, items !== null)
87
- },
88
- `${keyPrefix}-${index}`
89
- );
90
- });
91
- }
92
- function repeatLength(sources, minRows) {
93
- const longest = sources.reduce((max, source) => Math.max(max, source.length), 0);
94
- return Math.max(longest, Math.max(0, Math.floor(minRows ?? 0)));
95
- }
96
- function RecordSheetImpl({ columns, title, rows, note }) {
97
- const scrollRef = useRef(null);
98
- const edges = useScrollEdges(scrollRef);
99
- const width = gridColumns(columns);
100
- const list = Array.isArray(rows) ? rows : [];
101
- const body = [];
102
- list.forEach((row, rowIndex) => {
103
- if (row?.gap) {
104
- body.push(
105
- /* @__PURE__ */ jsx("tr", { className: "erp-recsheet__gap", children: /* @__PURE__ */ jsx("td", { colSpan: width }) }, `gap-${rowIndex}`)
106
- );
107
- return;
108
- }
109
- const cells = Array.isArray(row?.cells) ? row.cells : [];
110
- if (cells.length === 0) return;
111
- if (Array.isArray(row.repeat)) {
112
- const sources = row.repeat.map((source) => Array.isArray(source) ? source : []);
113
- const count = repeatLength(sources, row.minRows);
114
- for (let line = 0; line < count; line += 1) {
115
- body.push(
116
- /* @__PURE__ */ jsx("tr", { children: renderCells(
117
- cells,
118
- sources.map((source) => source[line] ?? null),
119
- `rep-${rowIndex}-${line}`
120
- ) }, `rep-${rowIndex}-${line}`)
121
- );
122
- }
123
- return;
124
- }
125
- body.push(/* @__PURE__ */ jsx("tr", { children: renderCells(cells, null, `row-${rowIndex}`) }, `row-${rowIndex}`));
126
- });
127
- return /* @__PURE__ */ jsx(
128
- "div",
129
- {
130
- className: "erp-recsheet__frame",
131
- "data-more-left": edges.left ? "" : void 0,
132
- "data-more-right": edges.right ? "" : void 0,
133
- children: /* @__PURE__ */ jsxs("div", { ref: scrollRef, className: "erp-recsheet__scroll", children: [
134
- /* @__PURE__ */ jsx(RecordSheetStyles, {}),
135
- /* @__PURE__ */ jsxs("table", { className: "erp-recsheet", children: [
136
- /* @__PURE__ */ jsx("colgroup", { children: Array.from({ length: width }, (_, index) => /* @__PURE__ */ jsx("col", { style: { width: `${100 / width}%` } }, index)) }),
137
- /* @__PURE__ */ jsxs("tbody", { children: [
138
- title ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { className: "erp-recsheet__title", colSpan: width, children: title }) }) : null,
139
- body
140
- ] })
141
- ] }),
142
- note ? /* @__PURE__ */ jsx("p", { className: "erp-recsheet__note", children: note }) : null
143
- ] })
144
- }
145
- );
146
- }
147
- function useScrollEdges(ref) {
148
- const [edges, setEdges] = useState({ left: false, right: false });
149
- useEffect(() => {
150
- const el = ref.current;
151
- if (!el) return;
152
- const update = () => {
153
- const left = el.scrollLeft > 1;
154
- const right = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;
155
- setEdges((prev) => prev.left === left && prev.right === right ? prev : { left, right });
156
- };
157
- update();
158
- el.addEventListener("scroll", update, { passive: true });
159
- const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(update);
160
- observer?.observe(el);
161
- const table = el.querySelector("table");
162
- if (table) observer?.observe(table);
163
- return () => {
164
- el.removeEventListener("scroll", update);
165
- observer?.disconnect();
166
- };
167
- }, [ref]);
168
- return edges;
169
- }
170
- var RecordSheet = boxed(RecordSheetImpl, "RecordSheet");
171
-
172
- export { RecordSheet };