@wipco/sdui 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/meta.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { b as SduiPropValue, i as SduiNode } from './types-opTPYysN.js';
1
+ import { b as SduiPropValue, i as SduiNode } from './types-BNdv5-jn.js';
2
2
 
3
3
  /**
4
4
  * 시각 빌더용 컴포넌트 메타데이터 스키마.
@@ -405,9 +405,9 @@ declare const richComponentMeta: {
405
405
  * 받지 않게 하려는 것이다. 여기도 값 import는 없다(`import type`만).
406
406
  *
407
407
  * 프롭 목록은 `src/widgets/*.tsx`의 **실제 프롭 인터페이스**와, ERP 스펙 84개를 훑어
408
- * 뽑은 **실사용 프롭 집합**의 합집합이다. 대조 결과 이 21종에서 스펙이 쓰는 프롭 중
409
- * 구현에 없는 것은 `AutocompleteField.endpoint` 하나뿐이고(아래 `legacy` 주석 참고),
410
- * 나머지는 전부 구현에 존재한다.
408
+ * 뽑은 **실사용 프롭 집합**의 합집합이다. 스펙이 쓰는데 구현에 없는 프롭은 이제
409
+ * **한 개도 없다** — 마지막 하나였던 `AutocompleteField.endpoint`가 0.22.0에서
410
+ * 구현으로 들어왔다(소비 앱이 들고 있던 어댑터가 그만큼 사라진다).
411
411
  *
412
412
  * ## 함수 프롭을 메타데이터에 넣지 않은 자리
413
413
  *
@@ -442,6 +442,7 @@ declare const OrgChartMeta: SduiComponentMeta;
442
442
  declare const SummaryTableMeta: SduiComponentMeta;
443
443
  declare const TreeViewMeta: SduiComponentMeta;
444
444
  declare const PrintSheetMeta: SduiComponentMeta;
445
+ declare const RecordSheetMeta: SduiComponentMeta;
445
446
  declare const SecureScreenMeta: SduiComponentMeta;
446
447
  declare const StripMeta: SduiComponentMeta;
447
448
  /**
@@ -467,6 +468,7 @@ declare const widgetComponentMeta: {
467
468
  OrgChart: SduiComponentMeta;
468
469
  PeriodFilter: SduiComponentMeta;
469
470
  PrintSheet: SduiComponentMeta;
471
+ RecordSheet: SduiComponentMeta;
470
472
  SearchableMultiPicker: SduiComponentMeta;
471
473
  SecureScreen: SduiComponentMeta;
472
474
  StackedMeter: SduiComponentMeta;
@@ -557,11 +559,11 @@ declare const SDUI_CATEGORIES: ReadonlyArray<{
557
559
  label: string;
558
560
  }>;
559
561
  /**
560
- * 라이브러리가 아는 어휘 전체 — 기본 41 + rich 2 + 위젯 21 + DS 6 + 렌더러 내장 2 = 72종.
562
+ * 라이브러리가 아는 어휘 전체 — 기본 42 + rich 2 + 위젯 22 + DS 6 + 렌더러 내장 2 = 74종.
561
563
  * 편집기처럼 어휘 전부를 다뤄야 하는 쪽에서 쓴다.
562
564
  *
563
565
  * **레지스트리와 일대일이 아니다.** `defaultRegistry`에 없는 것도 들어 있다 —
564
- * rich 2종, 위젯 21종, DS 6종은 소비자가 `createRegistry`로 직접 얹는 어휘라서
566
+ * rich 2종, 위젯 22종, DS 6종은 소비자가 `createRegistry`로 직접 얹는 어휘라서
565
567
  * 여기 있다고 곧바로 렌더되지는 않는다. 이 목록은 "빌더가 프롭을 그릴 줄 아는 이름"이지
566
568
  * "지금 렌더할 수 있는 이름"이 아니다.
567
569
  *
@@ -586,4 +588,4 @@ declare function paletteGroups(catalog?: Record<string, SduiComponentMeta>): Arr
586
588
  items: SduiComponentMeta[];
587
589
  }>;
588
590
 
589
- export { ActionsMeta, AlertMeta, AutocompleteFieldMeta, AvatarMeta, BadgeMeta, BreadcrumbMeta, ButtonMeta, CanMeta, CardMeta, ChartMeta, CheckboxMeta, ColMeta, ColumnBoardMeta, DatePickerMeta, DateRangePickerMeta, DialogMeta, DiffViewMeta, DisclosureMeta, DividerMeta, EmptyStateMeta, EventCalendarMeta, FieldMeta, ForEachMeta, FormMeta, FragmentMeta, GridMeta, IconButtonMeta, IconMeta, ImageLightboxMeta, InlineEditMeta, InputMeta, JsonFieldMeta, KeyValueListMeta, LiveClockMeta, MapPreviewMeta, OrgChartMeta, PageHeadMeta, PaginationMeta, PeriodFilterMeta, PrintSheetMeta, ProgressBarMeta, RadioMeta, RemoteSearchResultsMeta, RowMeta, SDUI_CATEGORIES, SELF_AXIS_PROPS, type SduiCategory, type SduiChildrenMeta, type SduiComponentMeta, type SduiDomMeta, type SduiEnumOption, type SduiPropGroup, type SduiPropKind, type SduiPropMeta, type SduiResizeMeta, type SduiSlotMeta, SearchResultsMeta, SearchableMultiPickerMeta, SectionMeta, SecureScreenMeta, SegmentedControlMeta, SelectMeta, ShowMeta, SidebarNavMeta, SortHandleMeta, SortableListMeta, SpacerMeta, SpinnerMeta, StackedMeterMeta, StatCardMeta, StripMeta, SummaryTableMeta, SwitchMeta, TableMeta, TabsMeta, TagMeta, TagMultiSelectMeta, TextMeta, TextareaMeta, TimePickerMeta, TimelineMeta, ToastMeta, TooltipMeta, TreePickerMeta, TreeViewMeta, allComponentMeta, builtinComponentMeta, coreComponentMeta, dsComponentMeta, getComponentMeta, paletteGroups, richComponentMeta, slotNamesOf, widgetComponentMeta, withSelfAxis, withSelfAxisAll };
591
+ export { ActionsMeta, AlertMeta, AutocompleteFieldMeta, AvatarMeta, BadgeMeta, BreadcrumbMeta, ButtonMeta, CanMeta, CardMeta, ChartMeta, CheckboxMeta, ColMeta, ColumnBoardMeta, DatePickerMeta, DateRangePickerMeta, DialogMeta, DiffViewMeta, DisclosureMeta, DividerMeta, EmptyStateMeta, EventCalendarMeta, FieldMeta, ForEachMeta, FormMeta, FragmentMeta, GridMeta, IconButtonMeta, IconMeta, ImageLightboxMeta, InlineEditMeta, InputMeta, JsonFieldMeta, KeyValueListMeta, LiveClockMeta, MapPreviewMeta, OrgChartMeta, PageHeadMeta, PaginationMeta, PeriodFilterMeta, PrintSheetMeta, ProgressBarMeta, RadioMeta, RecordSheetMeta, RemoteSearchResultsMeta, RowMeta, SDUI_CATEGORIES, SELF_AXIS_PROPS, type SduiCategory, type SduiChildrenMeta, type SduiComponentMeta, type SduiDomMeta, type SduiEnumOption, type SduiPropGroup, type SduiPropKind, type SduiPropMeta, type SduiResizeMeta, type SduiSlotMeta, SearchResultsMeta, SearchableMultiPickerMeta, SectionMeta, SecureScreenMeta, SegmentedControlMeta, SelectMeta, ShowMeta, SidebarNavMeta, SortHandleMeta, SortableListMeta, SpacerMeta, SpinnerMeta, StackedMeterMeta, StatCardMeta, StripMeta, SummaryTableMeta, SwitchMeta, TableMeta, TabsMeta, TagMeta, TagMultiSelectMeta, TextMeta, TextareaMeta, TimePickerMeta, TimelineMeta, ToastMeta, TooltipMeta, TreePickerMeta, TreeViewMeta, allComponentMeta, builtinComponentMeta, coreComponentMeta, dsComponentMeta, getComponentMeta, paletteGroups, richComponentMeta, slotNamesOf, widgetComponentMeta, withSelfAxis, withSelfAxisAll };
package/dist/meta.js CHANGED
@@ -3298,7 +3298,7 @@ var AutocompleteFieldMeta = {
3298
3298
  label: "\uC790\uB3D9\uC644\uC131",
3299
3299
  category: "input",
3300
3300
  icon: "search",
3301
- description: "\uAC80\uC0C9\uD574\uC11C \uD558\uB098\uB97C \uACE0\uB974\uB294 \uC785\uB825. \uACE0\uB978 \uB4A4\uC5D0\uB294 \uC120\uD0DD \uCE74\uB4DC\uB85C \uC811\uD78C\uB2E4. \uC6D0\uACA9 \uC870\uD68C\uB294 \uC571\uC774 \uC5B9\uC740 \uC5B4\uB311\uD130\uAC00 \uB2F4\uB2F9\uD55C\uB2E4.",
3301
+ description: "\uAC80\uC0C9\uD574\uC11C \uD558\uB098\uB97C \uACE0\uB974\uB294 \uC785\uB825. \uACE0\uB978 \uB4A4\uC5D0\uB294 \uC120\uD0DD \uCE74\uB4DC\uB85C \uC811\uD78C\uB2E4. \uAC80\uC0C9 \uACBD\uB85C\uB97C \uC8FC\uBA74 \uC6D0\uACA9 \uC870\uD68C\uAE4C\uC9C0 \uD55C\uB2E4.",
3302
3302
  props: [
3303
3303
  {
3304
3304
  name: "options",
@@ -3316,9 +3316,15 @@ var AutocompleteFieldMeta = {
3316
3316
  {
3317
3317
  name: "endpoint",
3318
3318
  kind: "string",
3319
- legacy: true,
3320
3319
  label: "\uAC80\uC0C9 \uACBD\uB85C",
3321
- description: "\uB77C\uC774\uBE0C\uB7EC\uB9AC \uAD6C\uD604\uC5D0\uB294 \uC5C6\uB2E4 \u2014 \uC774 \uC790\uB9AC\uC758 \uB77C\uC774\uBE0C\uB7EC\uB9AC \uD504\uB86D\uC740 `search`(\uD568\uC218)\uB77C JSON\uC73C\uB85C \uD45C\uD604\uD560 \uC218 \uC5C6\uC5B4\uC11C, \uC18C\uBE44 \uC571\uC774 \uC5B4\uB311\uD130\uB97C \uC50C\uC6CC endpoint\uB97C search\uB85C \uBC14\uAFD4 \uB4F1\uB85D\uD55C\uB2E4(ERP\uC758 `@/components/widgets/AutocompleteField`). \uC2A4\uD399 \uC5B4\uD718\uB294 endpoint \uCABD\uC774\uBBC0\uB85C \uC9C0\uC6B0\uC9C0 \uC54A\uB294\uB2E4.",
3320
+ description: "\uC8FC\uBA74 \uC5B4\uB311\uD130\uC758 fetch\uB85C \uC9C1\uC811 \uC870\uD68C\uD55C\uB2E4(`GET {\uACBD\uB85C}?q={\uD0A4\uC6CC\uB4DC}`). 0.22.0 \uC804\uC5D0\uB294 \uC774 \uD504\uB86D\uC774 \uB77C\uC774\uBE0C\uB7EC\uB9AC \uAD6C\uD604\uC5D0 \uC5C6\uC5B4\uC11C \uC18C\uBE44 \uC571\uC774 \uC5B4\uB311\uD130\uB97C \uC50C\uC6CC endpoint\uB97C search \uD568\uC218\uB85C \uBC14\uAFD4 \uB4F1\uB85D\uD588\uB2E4 \u2014 \uC774\uC81C \uD544\uC694 \uC5C6\uB2E4.",
3321
+ group: "data"
3322
+ },
3323
+ {
3324
+ name: "searchParam",
3325
+ kind: "string",
3326
+ label: "\uD0A4\uC6CC\uB4DC \uD30C\uB77C\uBBF8\uD130",
3327
+ description: "endpoint \uC870\uD68C\uC5D0 \uBD99\uB294 \uD0A4\uC6CC\uB4DC \uCFFC\uB9AC \uC774\uB984. \uAE30\uBCF8 'q'.",
3322
3328
  group: "data"
3323
3329
  },
3324
3330
  {
@@ -4478,6 +4484,146 @@ var PrintSheetMeta = {
4478
4484
  },
4479
4485
  resize: { kind: "none" }
4480
4486
  };
4487
+ var RecordSheetMeta = {
4488
+ name: "RecordSheet",
4489
+ label: "\uC591\uC2DD \uD45C",
4490
+ category: "data",
4491
+ icon: "layout-grid",
4492
+ description: "\uCE78\uC744 \uBCD1\uD569\uD574 \uC4F0\uB294 \uC885\uC774 \uC11C\uC2DD\uC6A9 \uD45C(\uC778\uC0AC\uAE30\uB85D\uCE74\uB4DC \uB4F1). \uACA9\uC790 \uC5F4 \uC218\uB97C \uC815\uD558\uACE0 \uCE78\uB9C8\uB2E4 \uBA87 \uCE78\uC744 \uCC28\uC9C0\uD560\uC9C0 \uC801\uB294\uB2E4 \u2014 \uAD6C\uD68D\uC774 \uB2EC\uB77C\uB3C4 \uC138\uB85C\uC120\uC774 \uD558\uB098\uB85C \uC774\uC5B4\uC9C4\uB2E4.",
4493
+ props: [
4494
+ {
4495
+ name: "columns",
4496
+ kind: "number",
4497
+ label: "\uACA9\uC790 \uC5F4 \uC218",
4498
+ default: 24,
4499
+ description: "\uBAA8\uB4E0 \uCE78 \uBCD1\uD569(span)\uC758 \uAE30\uC900. 24\uBA74 2\xB73\xB74\xB76\xB78\xB712 \uB4F1\uBD84\uC774 \uB531 \uB5A8\uC5B4\uC9C4\uB2E4.",
4500
+ group: "layout"
4501
+ },
4502
+ { name: "title", kind: "string", label: "\uD45C \uC81C\uBAA9 \uC904", bindable: true, group: "content" },
4503
+ {
4504
+ name: "rows",
4505
+ kind: "array",
4506
+ label: "\uC904",
4507
+ required: true,
4508
+ group: "data",
4509
+ description: "\uC704\uC5D0\uC11C \uC544\uB798\uB85C \uADF8\uB9B4 \uC904 \uBAA9\uB85D. \uAC01 \uC904\uC740 \uCE78 \uBAA9\uB85D\uC774\uAC70\uB098, \uBC30\uC5F4\uC744 \uB418\uD480\uC774\uD558\uB294 \uC904\uC774\uB2E4.",
4510
+ item: [
4511
+ {
4512
+ name: "gap",
4513
+ kind: "boolean",
4514
+ label: "\uBE48 \uC904",
4515
+ description: "\uD14C\uB450\uB9AC \uC5C6\uB294 \uC5EC\uBC31 \uC904 \u2014 \uAD6C\uD68D \uC0AC\uC774\uB97C \uB744\uC6B4\uB2E4. \uCF1C\uBA74 \uB098\uBA38\uC9C0\uB294 \uBB34\uC2DC\uB41C\uB2E4."
4516
+ },
4517
+ {
4518
+ name: "repeat",
4519
+ kind: "binding",
4520
+ label: "\uB418\uD480\uC774\uD560 \uBC30\uC5F4\uB4E4",
4521
+ bindable: true,
4522
+ description: "\uBC30\uC5F4\uC758 \uBC30\uC5F4. \uC5EC\uB7FF \uC8FC\uBA74 \uB098\uB780\uD788 \uB193\uACE0 \uAC00\uC7A5 \uAE34 \uAC83\uC5D0 \uB9DE\uCD98\uB2E4 \u2014 \uC67C\uCABD \uD559\uB825\xB7\uC624\uB978\uCABD \uC790\uACA9\uCC98\uB7FC \uAE38\uC774\uAC00 \uB2E4\uB978 \uBAA9\uB85D\uC744 \uD55C \uACA9\uC790\uC5D0 \uB2F4\uB294\uB2E4."
4523
+ },
4524
+ {
4525
+ name: "minRows",
4526
+ kind: "number",
4527
+ label: "\uCD5C\uC18C \uC904 \uC218",
4528
+ description: "\uAC12\uC774 \uBAA8\uC790\uB77C\uBA74 \uBE48 \uC904\uB85C \uCC44\uC6CC \uC591\uC2DD \uB192\uC774\uB97C \uC9C0\uD0A8\uB2E4."
4529
+ },
4530
+ {
4531
+ name: "cells",
4532
+ kind: "array",
4533
+ label: "\uCE78",
4534
+ item: [
4535
+ { name: "span", kind: "number", label: "\uC5F4 \uBCD1\uD569", default: 1 },
4536
+ { name: "rowSpan", kind: "number", label: "\uD589 \uBCD1\uD569", default: 1 },
4537
+ {
4538
+ name: "kind",
4539
+ kind: "enum",
4540
+ label: "\uCE78 \uC885\uB958",
4541
+ default: "value",
4542
+ options: [
4543
+ { value: "value", label: "\uAC12" },
4544
+ { value: "label", label: "\uBA38\uB9AC\uCE78", description: "\uD68C\uC0C9 \uBC30\uACBD + \uAC00\uC6B4\uB370 \uC815\uB82C" },
4545
+ { value: "section", label: "\uAD6C\uD68D \uC81C\uBAA9", description: "\uAD6C\uD68D \uC704\uC5D0 \uAD75\uC740 \uC120\uC774 \uBD99\uB294\uB2E4" },
4546
+ { value: "photo", label: "\uC0AC\uC9C4", description: "src\uC758 \uC0AC\uC9C4\uC744 \uCC44\uC6B4\uB2E4. \uC5C6\uC73C\uBA74 \uC790\uB9AC \uC0C1\uC790." }
4547
+ ]
4548
+ },
4549
+ { name: "text", kind: "node", label: "\uACE0\uC815 \uAC12", bindable: true },
4550
+ { name: "source", kind: "number", label: "\uBC30\uC5F4 \uBC88\uD638", default: 0, description: "\uB418\uD480\uC774 \uC904\uC5D0\uC11C \uBA87 \uBC88\uC9F8 \uBC30\uC5F4\uC744 \uBCFC\uC9C0." },
4551
+ { name: "field", kind: "string", label: "\uD56D\uBAA9 \uD544\uB4DC" },
4552
+ {
4553
+ name: "fields",
4554
+ kind: "array",
4555
+ label: "\uC774\uC5B4 \uBD99\uC77C \uD544\uB4DC\uB4E4",
4556
+ item: [],
4557
+ itemKind: "string",
4558
+ description: "\uAE30\uAC04 \uCE78(\uC2DC\uC791 ~ \uC885\uB8CC)\uCC98\uB7FC \uB450 \uD544\uB4DC\uB97C \uD55C \uCE78\uC5D0 \uB2F4\uC744 \uB54C."
4559
+ },
4560
+ { name: "separator", kind: "string", label: "\uC774\uC74C\uB9D0", default: " ~ " },
4561
+ {
4562
+ name: "align",
4563
+ kind: "enum",
4564
+ label: "\uC815\uB82C",
4565
+ options: [
4566
+ { value: "left", label: "\uC67C\uCABD" },
4567
+ { value: "center", label: "\uAC00\uC6B4\uB370" },
4568
+ { value: "right", label: "\uC624\uB978\uCABD" }
4569
+ ]
4570
+ },
4571
+ { name: "mono", kind: "boolean", label: "\uACE0\uC815\uD3ED \uAE00\uAF34" },
4572
+ { name: "placeholder", kind: "string", label: "\uBE48 \uAC12 \uD45C\uC2DC", default: "-" },
4573
+ { name: "src", kind: "string", label: "\uC0AC\uC9C4 \uC8FC\uC18C", bindable: true },
4574
+ { name: "alt", kind: "string", label: "\uC0AC\uC9C4 \uB300\uCCB4 \uAE00\uC790", default: "\uC0AC\uC9C4" }
4575
+ ]
4576
+ }
4577
+ ]
4578
+ },
4579
+ {
4580
+ name: "note",
4581
+ kind: "string",
4582
+ label: "\uD45C \uC544\uB798 \uC8FC\uC11D",
4583
+ bindable: true,
4584
+ group: "content",
4585
+ description: "\uC624\uB978\uCABD \uC544\uB798\uC5D0 \uC791\uAC8C \uBD99\uB294 \uD55C \uC904(\uCD9C\uB825\uC77C \uB4F1)."
4586
+ }
4587
+ ],
4588
+ children: { accepts: false },
4589
+ dom: { element: "div" },
4590
+ preset: {
4591
+ component: "RecordSheet",
4592
+ props: {
4593
+ columns: 12,
4594
+ title: "\uC0AC\uC6D0 \uC778\uC0AC\uAE30\uB85D\uCE74\uB4DC",
4595
+ rows: [
4596
+ {
4597
+ cells: [
4598
+ { kind: "label", span: 2, text: "\uC131\uBA85" },
4599
+ { span: 4, text: "\uD64D\uAE38\uB3D9" },
4600
+ { kind: "label", span: 2, text: "\uC0AC\uBC88" },
4601
+ { span: 4, text: "140", mono: true }
4602
+ ]
4603
+ },
4604
+ { gap: true },
4605
+ { cells: [{ kind: "section", span: 12, text: "1) \uD559\uC704 \uBC0F \uD559\uB825\uC0AC\uD56D" }] },
4606
+ {
4607
+ cells: [
4608
+ { kind: "label", span: 5, text: "\uD559\uAD50\uBA85" },
4609
+ { kind: "label", span: 3, text: "\uD559\uC704" },
4610
+ { kind: "label", span: 4, text: "\uC878\uC5C5\uC77C" }
4611
+ ]
4612
+ },
4613
+ {
4614
+ repeat: [[{ institution: "\uC704\uD504\uCF54\uB300\uD559\uAD50", degree: "\uD559\uC0AC", end_date: "2018-02-09" }]],
4615
+ minRows: 2,
4616
+ cells: [
4617
+ { span: 5, field: "institution" },
4618
+ { span: 3, field: "degree", align: "center" },
4619
+ { span: 4, field: "end_date", align: "center", mono: true }
4620
+ ]
4621
+ }
4622
+ ]
4623
+ }
4624
+ },
4625
+ resize: { kind: "none" }
4626
+ };
4481
4627
  var SecureScreenMeta = {
4482
4628
  name: "SecureScreen",
4483
4629
  label: "\uD654\uBA74 \uBCF4\uD638",
@@ -4576,6 +4722,7 @@ var widgetComponentMeta = {
4576
4722
  OrgChart: OrgChartMeta,
4577
4723
  PeriodFilter: PeriodFilterMeta,
4578
4724
  PrintSheet: PrintSheetMeta,
4725
+ RecordSheet: RecordSheetMeta,
4579
4726
  SearchableMultiPicker: SearchableMultiPickerMeta,
4580
4727
  SecureScreen: SecureScreenMeta,
4581
4728
  StackedMeter: StackedMeterMeta,
@@ -4620,4 +4767,4 @@ function paletteGroups(catalog = allComponentMeta) {
4620
4767
  })).filter((group) => group.items.length > 0);
4621
4768
  }
4622
4769
 
4623
- export { ActionsMeta, AlertMeta, AutocompleteFieldMeta, AvatarMeta, BadgeMeta, BreadcrumbMeta, ButtonMeta, CanMeta, CardMeta, ChartMeta, CheckboxMeta, ColMeta, ColumnBoardMeta, DatePickerMeta, DateRangePickerMeta, DialogMeta, DiffViewMeta, DisclosureMeta, DividerMeta, EmptyStateMeta, EventCalendarMeta, FieldMeta, ForEachMeta, FormMeta, FragmentMeta, GridMeta, IconButtonMeta, IconMeta, ImageLightboxMeta, InlineEditMeta, InputMeta, JsonFieldMeta, KeyValueListMeta, LiveClockMeta, MapPreviewMeta, OrgChartMeta, PageHeadMeta, PaginationMeta, PeriodFilterMeta, PrintSheetMeta, ProgressBarMeta, RadioMeta, RemoteSearchResultsMeta, RowMeta, SDUI_CATEGORIES, SELF_AXIS_PROPS, SearchResultsMeta, SearchableMultiPickerMeta, SectionMeta, SecureScreenMeta, SegmentedControlMeta, SelectMeta, ShowMeta, SidebarNavMeta, SortHandleMeta, SortableListMeta, SpacerMeta, SpinnerMeta, StackedMeterMeta, StatCardMeta, StripMeta, SummaryTableMeta, SwitchMeta, TableMeta, TabsMeta, TagMeta, TagMultiSelectMeta, TextMeta, TextareaMeta, TimePickerMeta, TimelineMeta, ToastMeta, TooltipMeta, TreePickerMeta, TreeViewMeta, allComponentMeta, builtinComponentMeta, coreComponentMeta, dsComponentMeta, getComponentMeta, paletteGroups, richComponentMeta, slotNamesOf, widgetComponentMeta, withSelfAxis, withSelfAxisAll };
4770
+ export { ActionsMeta, AlertMeta, AutocompleteFieldMeta, AvatarMeta, BadgeMeta, BreadcrumbMeta, ButtonMeta, CanMeta, CardMeta, ChartMeta, CheckboxMeta, ColMeta, ColumnBoardMeta, DatePickerMeta, DateRangePickerMeta, DialogMeta, DiffViewMeta, DisclosureMeta, DividerMeta, EmptyStateMeta, EventCalendarMeta, FieldMeta, ForEachMeta, FormMeta, FragmentMeta, GridMeta, IconButtonMeta, IconMeta, ImageLightboxMeta, InlineEditMeta, InputMeta, JsonFieldMeta, KeyValueListMeta, LiveClockMeta, MapPreviewMeta, OrgChartMeta, PageHeadMeta, PaginationMeta, PeriodFilterMeta, PrintSheetMeta, ProgressBarMeta, RadioMeta, RecordSheetMeta, RemoteSearchResultsMeta, RowMeta, SDUI_CATEGORIES, SELF_AXIS_PROPS, SearchResultsMeta, SearchableMultiPickerMeta, SectionMeta, SecureScreenMeta, SegmentedControlMeta, SelectMeta, ShowMeta, SidebarNavMeta, SortHandleMeta, SortableListMeta, SpacerMeta, SpinnerMeta, StackedMeterMeta, StatCardMeta, StripMeta, SummaryTableMeta, SwitchMeta, TableMeta, TabsMeta, TagMeta, TagMultiSelectMeta, TextMeta, TextareaMeta, TimePickerMeta, TimelineMeta, ToastMeta, TooltipMeta, TreePickerMeta, TreeViewMeta, allComponentMeta, builtinComponentMeta, coreComponentMeta, dsComponentMeta, getComponentMeta, paletteGroups, richComponentMeta, slotNamesOf, widgetComponentMeta, withSelfAxis, withSelfAxisAll };
package/dist/rich.js CHANGED
@@ -1,5 +1,5 @@
1
- import { useSduiAssetResolver } from './chunk-HPZTFZZN.js';
2
- export { TimePicker } from './chunk-HPZTFZZN.js';
1
+ export { TimePicker } from './chunk-PNVOE5VH.js';
2
+ import { useSduiAssetResolver } from './chunk-WGRB5UL4.js';
3
3
  import { HoistedStyle } from './chunk-XKLUCUVA.js';
4
4
  export { DatePicker, DateRangePicker } from './chunk-XKLUCUVA.js';
5
5
  import { Spinner, EmptyState } from './chunk-WIDDHR7L.js';
@@ -64,11 +64,67 @@ interface SduiIndexRef {
64
64
  interface SduiCalcRef {
65
65
  $calc: {
66
66
  op: 'sum' | 'sub' | 'mul' | 'div' | 'percent' | 'count' | 'concat' | 'encode'
67
- /** 비교·논리 — Show의 when, Button의 disabled 등에 바인딩한다 */
68
- | 'eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'not';
67
+ /**
68
+ * 비교·논리 — Show의 when, Button의 disabled 등에 바인딩한다.
69
+ * 순서 비교(gt/gte/lt/lte)는 숫자로 재되, **양쪽이 모두 숫자가 아닌 문자열일
70
+ * 때만** 사전순으로 본다 — ISO 날짜·시각 문자열의 대소가 이 규칙으로 성립한다.
71
+ */
72
+ | 'eq' | 'gt' | 'gte' | 'lt' | 'lte' | 'not' | 'and' | 'or'
73
+ /**
74
+ * 값 고르기. `if`는 `then`/`else`, `match`는 `cases`(+`default`)를 쓴다 —
75
+ * 둘 다 **고른 가지만** 해석되므로 안 고른 가지의 조회는 나가지 않는다.
76
+ * `coalesce`는 args에서 처음으로 비지 않은 값(null·undefined·'' 제외)을 준다.
77
+ */
78
+ | 'if' | 'match' | 'coalesce'
79
+ /**
80
+ * 목록·객체. JSON에는 람다가 없으므로 술어는 `where` 객체로 쓴다
81
+ * (Prisma의 where와 같은 모양 — 아래 필드 설명 참고).
82
+ *
83
+ * - `get` args[0]에서 args[1] 키/인덱스로 꺼낸다(런타임 값이 키가 될 수 있다)
84
+ * - `pluck` 객체 배열에서 `field` 값만 뽑아 값 배열로 만든다(빈 값은 떨어뜨린다)
85
+ * - `filter` `where`에 맞는 행만 남긴다
86
+ * - `some`/`every` `where`에 맞는 행이 있는지 / 전부인지
87
+ * - `includes` 목록(또는 문자열)이 args[1]을 담고 있는지
88
+ * - `distinct` `field`(없으면 값 자체) 기준 중복 제거
89
+ * - `except` args[0]에서 args[1]에 있는 것을 뺀다(`field`로 맞춘다)
90
+ * - `entries` 객체를 `{key, value}` 배열로 편다 — ForEach가 돌 수 있는 모양
91
+ * - `length` 배열·문자열의 길이
92
+ * - `join` `sep`(기본 ',')으로 잇는다
93
+ * - `split` `sep`(기본 ',')으로 가른다. `take`를 주면 그 조각 하나(음수는 뒤에서)
94
+ * - `sortBy` `field` 기준 정렬(`desc: true`면 내림차순). 원본은 건드리지 않는다
95
+ */
96
+ | 'get' | 'pluck' | 'filter' | 'some' | 'every' | 'includes' | 'distinct' | 'except' | 'entries' | 'length' | 'join' | 'split' | 'sortBy';
69
97
  args: SduiPropValue[];
70
- /** sum/count에서 객체 배열의 필드를 지정 */
98
+ /** sum/count·목록 연산에서 객체 배열의 필드를 지정 */
71
99
  field?: string;
100
+ /**
101
+ * `filter`·`some`·`every`의 술어. 키가 필드, 값이 연산 객체다.
102
+ *
103
+ * { "deptId": { "eq": { "$state": "sel" } },
104
+ * "level": { "gte": 3 },
105
+ * "OR": [ { "status": "open" }, { "owner": { "isNull": true } } ] }
106
+ *
107
+ * 필드 연산: eq · ne · gt · gte · lt · lte · in · notIn · contains ·
108
+ * startsWith · endsWith · isNull. 값이 연산 객체가 아니면 `eq`로 읽는다.
109
+ * 같은 객체의 키들은 AND이고, `AND`/`OR`는 술어 배열, `NOT`은 술어 하나다.
110
+ * 술어 안의 값에도 참조를 쓸 수 있는데, 이때 `$item`은 거르고 있는 행이 아니라
111
+ * **바깥 ForEach의 행**을 가리킨다(거르는 행은 필드 이름으로 지목한다).
112
+ */
113
+ where?: SduiPropValue;
114
+ /** `if`가 참일 때의 값 (고를 때만 해석된다) */
115
+ then?: SduiPropValue;
116
+ /** `if`가 거짓일 때의 값 (고를 때만 해석된다) */
117
+ else?: SduiPropValue;
118
+ /** `match`의 대응표 — 키는 args[0]을 문자열로 눕힌 값 */
119
+ cases?: Record<string, SduiPropValue>;
120
+ /** `match`에서 어느 case에도 안 맞을 때의 값 */
121
+ default?: SduiPropValue;
122
+ /** `join`/`split`의 구분자 (기본 ',') */
123
+ sep?: string;
124
+ /** `split`에서 꺼낼 조각의 인덱스. 음수는 뒤에서부터 센다 */
125
+ take?: number;
126
+ /** `sortBy`를 내림차순으로 */
127
+ desc?: boolean;
72
128
  };
73
129
  }
74
130
  /** 폼 필드 검증 규칙. */
@@ -26,7 +26,20 @@ interface AutocompleteFieldProps {
26
26
  * ERP의 `endpoint` 프롭은 이 함수를 만드는 앱 쪽 어댑터가 계속 소유한다(위 주석 참고).
27
27
  */
28
28
  search?: AutocompleteSearchFn;
29
- /** 정적 옵션(데모/폴백) — `search`가 없을 때 로컬 검색 대상. */
29
+ /**
30
+ * 조회 경로. 주면 **어댑터의 `fetch`로 직접 조회한다** — 소비 앱이 `search`를
31
+ * 만들어 넘기지 않아도 된다(`GET {endpoint}?{searchParam}={키워드}`).
32
+ *
33
+ * `search`가 함께 오면 그쪽이 이긴다 — 응답 모양이나 오류 분기가 특수한 화면은
34
+ * 여전히 자기 함수를 넘길 수 있다.
35
+ *
36
+ * 어댑터가 없거나 `fetch`를 안 준 환경(편집기 캔버스 등)에서는 조회하지 않고
37
+ * `options` 로컬 검색으로 떨어진다 — 미리보기에서 실요청이 나가면 안 된다.
38
+ */
39
+ endpoint?: string;
40
+ /** `endpoint` 조회의 키워드 파라미터 이름. 기본 'q'. */
41
+ searchParam?: string;
42
+ /** 정적 옵션(데모/폴백) — `search`·`endpoint`가 없을 때 로컬 검색 대상. */
30
43
  options?: AutocompleteOption[];
31
44
  /** 옵션에서 표시 라벨을 읽을 키. 기본 'label'. */
32
45
  labelKey?: string;
@@ -48,6 +61,20 @@ interface AutocompleteFieldProps {
48
61
  invalid?: boolean;
49
62
  disabled?: boolean;
50
63
  }
64
+ type HostFetch = (path: string, init: {
65
+ method: string;
66
+ signal?: AbortSignal;
67
+ }) => Promise<unknown>;
68
+ /**
69
+ * `endpoint` → 검색 함수. 컴포넌트 밖에 두어 DOM 없이 그대로 잰다
70
+ * (`page-data.ts`·`calc.ts`와 같은 이유).
71
+ *
72
+ * 503만 별도로 본다. 어댑터 계약상 실패는 Error 하나라 상태 코드가 사라지지만,
73
+ * 503은 "서비스가 아직 없다"는 표준 의미라 "불러왔는데 없다"와 사용자에게 다른
74
+ * 말을 해야 한다. 호스트 오류 객체에 `status`가 있으면 읽고, 없으면 평소대로
75
+ * 던진다 — 특정 앱의 오류 타입을 알지 않는다.
76
+ */
77
+ declare function endpointSearchFn(endpoint: string, searchParam: string, hostFetch: HostFetch): AutocompleteSearchFn;
51
78
  /**
52
79
  * 응답이 배열이 아니면 items/data/results/rows 래핑까지 풀어 준다.
53
80
  * 조회를 앱이 맡게 됐으므로 이 정규화도 함께 내보낸다 — 앱마다 다시 짤 규칙이 아니다.
@@ -59,4 +86,4 @@ declare function toAutocompleteOptions(payload: unknown): AutocompleteOption[];
59
86
  */
60
87
  declare const AutocompleteField: React__default.FC<AutocompleteFieldProps & SduiBoxProps>;
61
88
 
62
- export { AutocompleteField, type AutocompleteFieldProps, type AutocompleteOption, type AutocompleteSearchFn, type AutocompleteSearchResult, toAutocompleteOptions };
89
+ export { AutocompleteField, type AutocompleteFieldProps, type AutocompleteOption, type AutocompleteSearchFn, type AutocompleteSearchResult, endpointSearchFn, toAutocompleteOptions };
@@ -1,5 +1,6 @@
1
- export { AutocompleteField, toAutocompleteOptions } from '../chunk-SRGXODY2.js';
1
+ export { AutocompleteField, endpointSearchFn, toAutocompleteOptions } from '../chunk-WZKDOZL2.js';
2
2
  import '../chunk-U7ZK7WYH.js';
3
+ import '../chunk-WGRB5UL4.js';
3
4
  import '../chunk-XKLUCUVA.js';
4
5
  import '../chunk-WIDDHR7L.js';
5
6
  import '../chunk-SAN4IX6N.js';
@@ -0,0 +1,59 @@
1
+ import { S as SduiBoxProps } from '../layout-B1QrIBm6.js';
2
+ import React__default from 'react';
3
+
4
+ /** 칸의 생김새 — 값칸(기본)·머리칸·구획 제목·사진칸 */
5
+ type RecordSheetCellKind = 'value' | 'label' | 'section' | 'photo';
6
+ interface RecordSheetCell {
7
+ /** 격자에서 차지할 열 수. 기본 1 */
8
+ span?: number;
9
+ /** 아래로 병합할 줄 수(사진 칸 등). 기본 1 */
10
+ rowSpan?: number;
11
+ kind?: RecordSheetCellKind;
12
+ /** 고정 칸의 값. 되풀이 줄에서는 `field`/`fields`가 우선한다. */
13
+ text?: React__default.ReactNode;
14
+ /** 되풀이 줄에서 볼 배열 번호(`repeat`의 인덱스). 기본 0 */
15
+ source?: number;
16
+ /** 되풀이 항목에서 꺼낼 필드 */
17
+ field?: string;
18
+ /** 여러 필드를 이어 붙인다 — 기간 칸(시작 ~ 종료) 등. `field`보다 우선한다. */
19
+ fields?: string[];
20
+ /** `fields` 사이에 넣을 글자. 기본 ' ~ ' */
21
+ separator?: string;
22
+ align?: 'left' | 'center' | 'right';
23
+ /** 고정폭 글꼴 — 날짜·번호 칸 */
24
+ mono?: boolean;
25
+ /** 값이 비었을 때 대신 쓸 글자. 기본 '-'. 되풀이의 **빈 줄**은 언제나 빈칸이다. */
26
+ placeholder?: string;
27
+ /** 사진 칸(kind:'photo')의 이미지 주소 */
28
+ src?: string;
29
+ /** 사진이 없거나 못 불러올 때 상자에 쓸 글자. 기본 '사진' */
30
+ alt?: string;
31
+ }
32
+ interface RecordSheetRow {
33
+ /** 테두리 없는 빈 줄 — 구획 사이를 띄운다. 주면 나머지는 무시된다. */
34
+ gap?: boolean;
35
+ /**
36
+ * 이 줄을 배열만큼 되풀이한다. 배열을 여럿 주면 나란히 놓고 가장 긴 것에 맞춘다.
37
+ * 칸은 `source`로 몇 번째 배열을 볼지 고른다.
38
+ */
39
+ repeat?: Array<unknown>;
40
+ /** 되풀이의 최소 줄 수 — 모자라면 빈 줄로 채운다 */
41
+ minRows?: number;
42
+ cells?: RecordSheetCell[];
43
+ }
44
+ interface RecordSheetProps {
45
+ /** 격자 열 수 — 모든 `span`의 기준. 기본 24 */
46
+ columns?: number;
47
+ /** 표 맨 위 제목 줄(반전 배경). 없으면 그리지 않는다. */
48
+ title?: string;
49
+ rows: RecordSheetRow[];
50
+ /** 표 아래 오른쪽에 붙는 주석 한 줄(예: 출력일) */
51
+ note?: string;
52
+ }
53
+ /**
54
+ * 바깥에서 온 `style`·`className`을 뿌리에 얹어 내보낸다 — 자식 축(`grow`·`width` …)이
55
+ * 이 컴포넌트에서도 동작하게 하는 유일한 통로다. 까닭은 {@link ../boxed.tsx}에 있다.
56
+ */
57
+ declare const RecordSheet: React__default.FC<RecordSheetProps & SduiBoxProps>;
58
+
59
+ export { RecordSheet, type RecordSheetCell, type RecordSheetCellKind, type RecordSheetProps, type RecordSheetRow };
@@ -0,0 +1,2 @@
1
+ export { RecordSheet } from '../chunk-K3JBSWFI.js';
2
+ import '../chunk-SAN4IX6N.js';
@@ -16,6 +16,8 @@ import { SecureScreenProps } from './SecureScreen.js';
16
16
  export { SecureScreen } from './SecureScreen.js';
17
17
  import { SearchableMultiPickerProps } from './SearchableMultiPicker.js';
18
18
  export { MultiPickerOption, SearchableMultiPicker } from './SearchableMultiPicker.js';
19
+ import { RecordSheetProps } from './RecordSheet.js';
20
+ export { RecordSheet, RecordSheetCell, RecordSheetCellKind, RecordSheetRow } from './RecordSheet.js';
19
21
  import { PrintSheetProps } from './PrintSheet.js';
20
22
  export { PrintSheet } from './PrintSheet.js';
21
23
  import { PeriodFilterProps } from './PeriodFilter.js';
@@ -61,6 +63,7 @@ declare const widgetComponents: {
61
63
  OrgChart: React.FC<OrgChartProps & SduiBoxProps>;
62
64
  PeriodFilter: React.FC<PeriodFilterProps & SduiBoxProps>;
63
65
  PrintSheet: React.FC<PrintSheetProps & SduiBoxProps>;
66
+ RecordSheet: React.FC<RecordSheetProps & SduiBoxProps>;
64
67
  SearchableMultiPicker: React.FC<SearchableMultiPickerProps & SduiBoxProps>;
65
68
  SecureScreen: React.FC<SecureScreenProps & SduiBoxProps>;
66
69
  StackedMeter: React.FC<StackedMeterProps & SduiBoxProps>;
@@ -74,4 +77,4 @@ declare const widgetComponents: {
74
77
  /** 위젯 어휘의 컴포넌트 이름 union — 메타데이터 대조에 쓴다(`@wipco/sdui/meta`). */
75
78
  type SduiWidgetComponentName = keyof typeof widgetComponents;
76
79
 
77
- export { ColumnBoardProps, DiffViewProps, DisclosureProps, EventCalendarProps, ImageLightboxProps, InlineEditProps, JsonFieldProps, LiveClockProps, OrgChartProps, PeriodFilterProps, PrintSheetProps, type SduiWidgetComponentName, SearchableMultiPickerProps, SecureScreenProps, StackedMeterProps, StripProps, SummaryTableProps, TagMultiSelectProps, TimelineProps, TreePickerProps, TreeViewProps, widgetComponents };
80
+ export { ColumnBoardProps, DiffViewProps, DisclosureProps, EventCalendarProps, ImageLightboxProps, InlineEditProps, JsonFieldProps, LiveClockProps, OrgChartProps, PeriodFilterProps, PrintSheetProps, RecordSheetProps, type SduiWidgetComponentName, SearchableMultiPickerProps, SecureScreenProps, StackedMeterProps, StripProps, SummaryTableProps, TagMultiSelectProps, TimelineProps, TreePickerProps, TreeViewProps, widgetComponents };
@@ -1,3 +1,9 @@
1
+ import { TreePicker } from '../chunk-EQW24SJC.js';
2
+ export { TreePicker } from '../chunk-EQW24SJC.js';
3
+ import { TreeView } from '../chunk-IDUN2ESE.js';
4
+ export { TreeView, buildTreeNodes } from '../chunk-IDUN2ESE.js';
5
+ import { RecordSheet } from '../chunk-K3JBSWFI.js';
6
+ export { RecordSheet } from '../chunk-K3JBSWFI.js';
1
7
  import { SearchableMultiPicker } from '../chunk-N5IATDUF.js';
2
8
  export { SearchableMultiPicker } from '../chunk-N5IATDUF.js';
3
9
  import { SecureScreen } from '../chunk-IIRENCDS.js';
@@ -12,10 +18,6 @@ import { TagMultiSelect } from '../chunk-QDEZXA34.js';
12
18
  export { TagMultiSelect } from '../chunk-QDEZXA34.js';
13
19
  import { Timeline } from '../chunk-EFYEOT47.js';
14
20
  export { Timeline } from '../chunk-EFYEOT47.js';
15
- import { TreePicker } from '../chunk-EQW24SJC.js';
16
- export { TreePicker } from '../chunk-EQW24SJC.js';
17
- import { TreeView } from '../chunk-IDUN2ESE.js';
18
- export { TreeView, buildTreeNodes } from '../chunk-IDUN2ESE.js';
19
21
  import { EventCalendar } from '../chunk-C3JY6GA3.js';
20
22
  export { EventCalendar } from '../chunk-C3JY6GA3.js';
21
23
  import { ImageLightbox } from '../chunk-XPBZMECW.js';
@@ -33,8 +35,9 @@ export { PeriodFilter } from '../chunk-PFUULIZ2.js';
33
35
  import { PrintSheet } from '../chunk-MYJ2KEIP.js';
34
36
  export { PrintSheet } from '../chunk-MYJ2KEIP.js';
35
37
  import '../chunk-THEP3VWY.js';
36
- export { AutocompleteField, toAutocompleteOptions } from '../chunk-SRGXODY2.js';
38
+ export { AutocompleteField, toAutocompleteOptions } from '../chunk-WZKDOZL2.js';
37
39
  import '../chunk-U7ZK7WYH.js';
40
+ import '../chunk-WGRB5UL4.js';
38
41
  import '../chunk-XKLUCUVA.js';
39
42
  import { ColumnBoard } from '../chunk-C4JRSZGS.js';
40
43
  export { ColumnBoard } from '../chunk-C4JRSZGS.js';
@@ -58,6 +61,7 @@ var widgetComponents = {
58
61
  OrgChart,
59
62
  PeriodFilter,
60
63
  PrintSheet,
64
+ RecordSheet,
61
65
  SearchableMultiPicker,
62
66
  SecureScreen,
63
67
  StackedMeter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipco/sdui",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "WIPCO 서버 주도 UI(SDUI) 렌더러 — JSON 페이지 스펙을 React 컴포넌트로 렌더링",
5
5
  "keywords": [
6
6
  "sdui",
@@ -84,6 +84,10 @@
84
84
  "types": "./dist/widgets/PrintSheet.d.ts",
85
85
  "default": "./dist/widgets/PrintSheet.js"
86
86
  },
87
+ "./widgets/RecordSheet": {
88
+ "types": "./dist/widgets/RecordSheet.d.ts",
89
+ "default": "./dist/widgets/RecordSheet.js"
90
+ },
87
91
  "./widgets/SearchableMultiPicker": {
88
92
  "types": "./dist/widgets/SearchableMultiPicker.d.ts",
89
93
  "default": "./dist/widgets/SearchableMultiPicker.js"