@wipco/sdui 0.6.0 → 0.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 (43) hide show
  1. package/dist/{chunk-4SU2KYPU.js → chunk-2ARNY7WZ.js} +1 -1
  2. package/dist/{chunk-APCXOCAO.js → chunk-562QK2G3.js} +1 -1
  3. package/dist/{chunk-MOIU7MUA.js → chunk-57LLG32F.js} +2 -2
  4. package/dist/{chunk-KBHI3IUR.js → chunk-5O6PFLFJ.js} +1 -1
  5. package/dist/{chunk-ZNITJ4KK.js → chunk-63U54JAG.js} +1 -1
  6. package/dist/{chunk-WVRCIVAD.js → chunk-73ZMMJRX.js} +1 -1
  7. package/dist/{chunk-OOHHW4K4.js → chunk-B4A4KY4K.js} +1 -1
  8. package/dist/{chunk-ZUCI34QY.js → chunk-CRSY67TZ.js} +46 -3
  9. package/dist/{chunk-MSAV4J4I.js → chunk-DN5YNPJS.js} +2 -2
  10. package/dist/{chunk-ZQR3ULVH.js → chunk-GWVK3BHB.js} +2 -2
  11. package/dist/{chunk-56KKWLNI.js → chunk-H32WQHB7.js} +2 -2
  12. package/dist/{chunk-Q6SBH63R.js → chunk-HGFYXY7F.js} +1 -1
  13. package/dist/{chunk-DGPRX4MU.js → chunk-J2DSDERS.js} +1 -1
  14. package/dist/{chunk-FGRR3ROJ.js → chunk-KAXPN6KT.js} +1 -1
  15. package/dist/{chunk-AROOQ5W6.js → chunk-L4ORCIVN.js} +1 -1
  16. package/dist/{chunk-WNYWTFGW.js → chunk-TAFUDHIX.js} +1 -1
  17. package/dist/{chunk-KADFN76X.js → chunk-TKB7H5DB.js} +1 -1
  18. package/dist/{chunk-LZJTKVMO.js → chunk-XMMYJSRV.js} +1 -1
  19. package/dist/{chunk-RH7ESUE6.js → chunk-XY2JKFAV.js} +1 -1
  20. package/dist/{chunk-SEBPBUZR.js → chunk-Y3HYEWSY.js} +1 -1
  21. package/dist/index.d.ts +19 -3
  22. package/dist/index.js +9 -17
  23. package/dist/meta.js +17 -0
  24. package/dist/rich.js +3 -3
  25. package/dist/widgets/AutocompleteField.js +3 -3
  26. package/dist/widgets/ColumnBoard.js +2 -2
  27. package/dist/widgets/DiffView.js +2 -2
  28. package/dist/widgets/Disclosure.js +2 -2
  29. package/dist/widgets/EventCalendar.js +2 -2
  30. package/dist/widgets/ImageLightbox.js +2 -2
  31. package/dist/widgets/InlineEdit.js +2 -2
  32. package/dist/widgets/JsonField.js +2 -2
  33. package/dist/widgets/OrgChart.js +2 -2
  34. package/dist/widgets/PeriodFilter.js +2 -2
  35. package/dist/widgets/PrintSheet.js +2 -2
  36. package/dist/widgets/SearchableMultiPicker.js +3 -3
  37. package/dist/widgets/SecureScreen.js +2 -2
  38. package/dist/widgets/TagMultiSelect.js +2 -2
  39. package/dist/widgets/Timeline.js +3 -3
  40. package/dist/widgets/TreePicker.js +3 -3
  41. package/dist/widgets/TreeView.js +2 -2
  42. package/dist/widgets/index.js +35 -35
  43. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { Badge, Tag } from './chunk-ZUCI34QY.js';
1
+ import { Badge, Tag } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useMemo } from 'react';
3
3
  import { jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-ZUCI34QY.js';
1
+ import { Icon } from './chunk-CRSY67TZ.js';
2
2
  import { useRef, useState, useEffect } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,5 +1,5 @@
1
- import { includesLooseSearch } from './chunk-KADFN76X.js';
2
- import { Icon, Button, Input, Spinner } from './chunk-ZUCI34QY.js';
1
+ import { includesLooseSearch } from './chunk-TKB7H5DB.js';
2
+ import { Icon, Button, Input, Spinner } from './chunk-CRSY67TZ.js';
3
3
  import { useId, useRef, useState, useEffect, useMemo } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-ZUCI34QY.js';
1
+ import { Button } from './chunk-CRSY67TZ.js';
2
2
  import { useEffect } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { IconButton, Badge } from './chunk-ZUCI34QY.js';
1
+ import { IconButton, Badge } from './chunk-CRSY67TZ.js';
2
2
  import { useRef, useState, useMemo, useCallback, useEffect } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Icon, Badge } from './chunk-ZUCI34QY.js';
1
+ import { Icon, Badge } from './chunk-CRSY67TZ.js';
2
2
  import React from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { IconButton, Input } from './chunk-ZUCI34QY.js';
1
+ import { IconButton, Input } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useRef, useEffect, useCallback } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -688,6 +688,15 @@ var ICON_NODES = {
688
688
  { t: "line", x1: "8", x2: "14", y1: "11", y2: "11" }
689
689
  ]
690
690
  };
691
+
692
+ // src/warn-once.ts
693
+ var warned = /* @__PURE__ */ new Set();
694
+ function warnOnce(key, message, level = "error") {
695
+ if (warned.has(key)) return;
696
+ warned.add(key);
697
+ if (level === "warn") console.warn(message);
698
+ else console.error(message);
699
+ }
691
700
  function cx(...parts) {
692
701
  return parts.filter(Boolean).join(" ");
693
702
  }
@@ -811,15 +820,49 @@ function Textarea({ invalid = false, rows = 3, className = "", ...rest }) {
811
820
  }
812
821
  );
813
822
  }
814
- function Select({ options = [], size = "md", invalid = false, placeholder, className = "", ...rest }) {
823
+ function pickOptionText(option, key) {
824
+ const raw = option[key];
825
+ if (raw === null || raw === void 0) return void 0;
826
+ return String(raw);
827
+ }
828
+ function Select({
829
+ options,
830
+ valueKey = "value",
831
+ labelKey = "label",
832
+ size = "md",
833
+ invalid = false,
834
+ placeholder,
835
+ className = "",
836
+ ...rest
837
+ }) {
815
838
  const classes = ["wp-select"];
816
839
  if (size !== "md") classes.push(`wp-select--${size}`);
817
840
  if (invalid) classes.push("wp-select--invalid");
818
841
  if (className) classes.push(className);
842
+ const list = Array.isArray(options) ? options : [];
819
843
  return /* @__PURE__ */ jsxs("div", { className: "wp-selectwrap", children: [
820
844
  /* @__PURE__ */ jsxs("select", { className: classes.join(" "), "aria-invalid": invalid || void 0, ...rest, children: [
821
845
  placeholder ? /* @__PURE__ */ jsx("option", { value: "", children: placeholder }) : null,
822
- options.map((option) => /* @__PURE__ */ jsx("option", { value: option.value, disabled: option.disabled, children: option.label }, option.value))
846
+ list.map((option, index) => {
847
+ const value = pickOptionText(option, valueKey);
848
+ const label = pickOptionText(option, labelKey) || value || "";
849
+ if (label === "") {
850
+ warnOnce(
851
+ `select:blank-option:${valueKey}/${labelKey}`,
852
+ `[sdui] <Select> \uC635\uC158\uC774 \uAC12\xB7\uB77C\uBCA8 \uB458 \uB2E4 \uBE44\uC5C8\uC2B5\uB2C8\uB2E4 (valueKey="${valueKey}", labelKey="${labelKey}") \u2014 \uB3C4\uBA54\uC778 \uAC1D\uCCB4\uB97C \uADF8\uB300\uB85C \uB118\uACBC\uB2E4\uBA74 \uB450 \uD504\uB86D\uC73C\uB85C \uC77D\uC744 \uD0A4\uB97C \uC9C0\uC815\uD558\uC138\uC694`,
853
+ "warn"
854
+ );
855
+ }
856
+ return /* @__PURE__ */ jsx(
857
+ "option",
858
+ {
859
+ value,
860
+ disabled: Boolean(option.disabled),
861
+ children: label
862
+ },
863
+ `${value ?? ""}-${index}`
864
+ );
865
+ })
823
866
  ] }),
824
867
  /* @__PURE__ */ jsx("span", { className: "wp-selectwrap__caret", children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", size: 15 }) })
825
868
  ] });
@@ -1287,4 +1330,4 @@ function Tooltip({ label, shortcut, placement = "top", wrap = false, children, c
1287
1330
  );
1288
1331
  }
1289
1332
 
1290
- export { Alert, Avatar, Badge, Breadcrumb, Button, Card, Checkbox, Dialog, EmptyState, Field, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip };
1333
+ export { Alert, Avatar, Badge, Breadcrumb, Button, Card, Checkbox, Dialog, EmptyState, Field, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip, warnOnce };
@@ -1,5 +1,5 @@
1
- import { Disclosure } from './chunk-WNYWTFGW.js';
2
- import { Icon } from './chunk-ZUCI34QY.js';
1
+ import { Disclosure } from './chunk-TAFUDHIX.js';
2
+ import { Icon } from './chunk-CRSY67TZ.js';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
5
5
  var TYPE_META = {
@@ -1,5 +1,5 @@
1
- import { TreeView } from './chunk-SEBPBUZR.js';
2
- import { Field, Dialog, Icon, Button, Input } from './chunk-ZUCI34QY.js';
1
+ import { TreeView } from './chunk-Y3HYEWSY.js';
2
+ import { Field, Dialog, Icon, Button, Input } from './chunk-CRSY67TZ.js';
3
3
  import { useState, useEffect } from 'react';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
5
5
 
@@ -1,5 +1,5 @@
1
- import { includesLooseSearch } from './chunk-KADFN76X.js';
2
- import { Button, Dialog, Input, Tag, Checkbox } from './chunk-ZUCI34QY.js';
1
+ import { includesLooseSearch } from './chunk-TKB7H5DB.js';
2
+ import { Button, Dialog, Input, Tag, Checkbox } from './chunk-CRSY67TZ.js';
3
3
  import React, { useMemo, useState, useEffect } from 'react';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { Badge, Checkbox, IconButton, Icon } from './chunk-ZUCI34QY.js';
1
+ import { Badge, Checkbox, IconButton, Icon } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useEffect } from 'react';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { SegmentedControl, Select, Input } from './chunk-ZUCI34QY.js';
1
+ import { SegmentedControl, Select, Input } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useMemo } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-ZUCI34QY.js';
1
+ import { Icon } from './chunk-CRSY67TZ.js';
2
2
  import { createContext, useContext, useState, useRef, useMemo, useCallback, useEffect, useLayoutEffect } from 'react';
3
3
  import { jsx, jsxs } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Textarea, Icon } from './chunk-ZUCI34QY.js';
1
+ import { Textarea, Icon } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useRef, useId, useEffect, useCallback } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-ZUCI34QY.js';
1
+ import { Icon } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useId, useCallback } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Tag, Input, Button, IconButton, Field, Checkbox } from './chunk-ZUCI34QY.js';
1
+ import { Tag, Input, Button, IconButton, Field, Checkbox } from './chunk-CRSY67TZ.js';
2
2
  import { useRef, useEffect, useState, useMemo } from 'react';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { SegmentedControl, IconButton, Button, Tag, EmptyState, Icon, Badge } from './chunk-ZUCI34QY.js';
1
+ import { SegmentedControl, IconButton, Button, Tag, EmptyState, Icon, Badge } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useMemo } from 'react';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
4
 
@@ -1,4 +1,4 @@
1
- import { IconButton } from './chunk-ZUCI34QY.js';
1
+ import { IconButton } from './chunk-CRSY67TZ.js';
2
2
  import { useState, useRef, useCallback, useEffect } from 'react';
3
3
  import { createPortal } from 'react-dom';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Input, IconButton, EmptyState, Icon, Badge } from './chunk-ZUCI34QY.js';
1
+ import { Input, IconButton, EmptyState, Icon, Badge } from './chunk-CRSY67TZ.js';
2
2
  import React, { useState, useMemo } from 'react';
3
3
  import { jsxs, jsx } from 'react/jsx-runtime';
4
4
 
package/dist/index.d.ts CHANGED
@@ -272,14 +272,30 @@ interface SelectOption {
272
272
  label: string;
273
273
  disabled?: boolean;
274
274
  }
275
+ /**
276
+ * 자유 형식 옵션 — `valueKey`/`labelKey`가 가리키는 키로 읽는다.
277
+ *
278
+ * `AutocompleteOption`과 같은 모양(`Record<string, unknown>`)으로 맞췄다. 두 어휘가
279
+ * 같은 자리에서 같은 프롭 이름을 쓰는데 옵션 타입만 다르면 스펙 작성자가 둘 사이를
280
+ * 옮길 때마다 다시 배워야 한다.
281
+ */
282
+ type SelectOptionRecord = Record<string, unknown>;
275
283
  interface SelectProps extends Omit<React__default.SelectHTMLAttributes<HTMLSelectElement>, 'size'> {
276
- options: SelectOption[];
284
+ /**
285
+ * 옵션 목록. 기본은 `{value, label}`이고, 도메인 객체(`{id, title, …}`)를 그대로
286
+ * 넘길 거면 `valueKey`/`labelKey`로 읽을 키를 알려 준다.
287
+ */
288
+ options: (SelectOption | SelectOptionRecord)[];
289
+ /** 옵션에서 값을 읽을 키. 기본 'value'. */
290
+ valueKey?: string;
291
+ /** 옵션에서 표시 라벨을 읽을 키. 기본 'label'. */
292
+ labelKey?: string;
277
293
  size?: 'sm' | 'md' | 'lg';
278
294
  invalid?: boolean;
279
295
  /** 비어 있는 첫 옵션 */
280
296
  placeholder?: string;
281
297
  }
282
- declare function Select({ options, size, invalid, placeholder, className, ...rest }: SelectProps): React__default.JSX.Element;
298
+ declare function Select({ options, valueKey, labelKey, size, invalid, placeholder, className, ...rest }: SelectProps): React__default.JSX.Element;
283
299
  interface CheckboxProps extends React__default.InputHTMLAttributes<HTMLInputElement> {
284
300
  label?: React__default.ReactNode;
285
301
  description?: React__default.ReactNode;
@@ -1571,4 +1587,4 @@ declare class NodeErrorBoundary extends React__default.Component<Props, State> {
1571
1587
  render(): string | number | bigint | boolean | 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> | React__default.JSX.Element | null | undefined;
1572
1588
  }
1573
1589
 
1574
- 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 ColProps, 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 SduiAssetContext, type SduiAssetResolver, type SduiBadgeCell, type SduiCanFn, type SduiCanQuery, type SduiCanSetting, type SduiCell, SduiColumnsScale, SduiContainerLayoutProps, 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, SduiTextAlignScale, type SduiTextCell, SduiWeightScale, 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, SortHandle, type SortHandleProps, SortableList, type SortableListProps, 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, sortableDropIndex, sortableMove, splitMultiValue, useRemoteSearchPage, useSduiAssetResolver, useSduiCan, useSduiDispatch, useSduiRuntime, useSduiSandbox, useSearchFetcher, validateSpec };
1590
+ 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 ColProps, 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 SduiAssetContext, type SduiAssetResolver, type SduiBadgeCell, type SduiCanFn, type SduiCanQuery, type SduiCanSetting, type SduiCell, SduiColumnsScale, SduiContainerLayoutProps, 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, SduiTextAlignScale, type SduiTextCell, SduiWeightScale, 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 SelectOptionRecord, type SelectProps, Show, type ShowProps, SidebarNav, type SidebarNavItem, type SidebarNavProps, type SidebarNavSection, type SortDir, SortHandle, type SortHandleProps, SortableList, type SortableListProps, 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, sortableDropIndex, sortableMove, splitMultiValue, useRemoteSearchPage, useSduiAssetResolver, useSduiCan, useSduiDispatch, useSduiRuntime, useSduiSandbox, useSearchFetcher, validateSpec };
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- import { DEV, DateRangePicker, DatePicker, isSafeNavigationTarget, useSduiAdapter, hostFetchOf, HoistedStyle, useSduiSandbox, resolveAdapter, assetResolverOf, SduiAdapterContext } from './chunk-FGRR3ROJ.js';
2
- export { DatePicker, DateRangePicker, defaultAdapter, useSduiAssetResolver, useSduiSandbox } from './chunk-FGRR3ROJ.js';
1
+ import { DEV, DateRangePicker, DatePicker, isSafeNavigationTarget, useSduiAdapter, hostFetchOf, HoistedStyle, useSduiSandbox, resolveAdapter, assetResolverOf, SduiAdapterContext } from './chunk-KAXPN6KT.js';
2
+ export { DatePicker, DateRangePicker, defaultAdapter, useSduiAssetResolver, useSduiSandbox } from './chunk-KAXPN6KT.js';
3
3
  import { containerLayoutStyle, columnsClass, typographyStyle, LAYOUT_CSS, childLayoutFrom, CHILD_LAYOUT_PROPS } from './chunk-QBIVW7E6.js';
4
4
  export { CHILD_LAYOUT_PROPS, LAYOUT_CSS, childLayoutFrom, columnsClass, containerLayoutStyle, typographyStyle } from './chunk-QBIVW7E6.js';
5
- import { searchValuesFromParams, splitMultiValue, includesLooseSearch, cascadingValuePaths, SearchToolbar, searchFieldKeys, Popover } from './chunk-KADFN76X.js';
6
- export { SearchToolbar, cascadingValuePaths, cleanSearchValues, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue } from './chunk-KADFN76X.js';
7
- import { Toast, Textarea, Tag, Tabs, Table, Switch, StatCard, Spinner, Select, ProgressBar, Pagination, Input, IconButton, Icon, Field, EmptyState, Checkbox, Card, Button, Badge, Alert, SegmentedControl, Dialog } from './chunk-ZUCI34QY.js';
8
- export { Alert, Avatar, Badge, Breadcrumb, Button, Card, Checkbox, Dialog, EmptyState, Field, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip } from './chunk-ZUCI34QY.js';
5
+ import { searchValuesFromParams, splitMultiValue, includesLooseSearch, cascadingValuePaths, SearchToolbar, searchFieldKeys, Popover } from './chunk-TKB7H5DB.js';
6
+ export { SearchToolbar, cascadingValuePaths, cleanSearchValues, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue } from './chunk-TKB7H5DB.js';
7
+ import { Toast, Textarea, Tag, Tabs, Table, Switch, StatCard, Spinner, Select, ProgressBar, Pagination, Input, IconButton, Icon, Field, EmptyState, Checkbox, Card, Button, Badge, Alert, warnOnce, SegmentedControl, Dialog } from './chunk-CRSY67TZ.js';
8
+ export { Alert, Avatar, Badge, Breadcrumb, Button, Card, Checkbox, Dialog, EmptyState, Field, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip } from './chunk-CRSY67TZ.js';
9
9
  import React, { createContext, useContext, useMemo, useState, useRef, useEffect, useCallback } from 'react';
10
10
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
11
11
 
@@ -151,14 +151,6 @@ var NodeErrorBoundary = class extends React.Component {
151
151
  return this.props.children;
152
152
  }
153
153
  };
154
-
155
- // src/warn-once.ts
156
- var warned = /* @__PURE__ */ new Set();
157
- function warnOnce(key, message) {
158
- if (warned.has(key)) return;
159
- warned.add(key);
160
- console.error(message);
161
- }
162
154
  var ALLOW_ALL = () => true;
163
155
  var DENY_ALL = () => false;
164
156
  var MISSING = () => {
@@ -1907,10 +1899,10 @@ function toIndex(v) {
1907
1899
  function inRange(index, length) {
1908
1900
  return index !== null && index >= 0 && index < length;
1909
1901
  }
1910
- var warned2 = /* @__PURE__ */ new Set();
1902
+ var warned = /* @__PURE__ */ new Set();
1911
1903
  function warnOnce2(key, message) {
1912
- if (warned2.has(key)) return;
1913
- warned2.add(key);
1904
+ if (warned.has(key)) return;
1905
+ warned.add(key);
1914
1906
  console.error(message);
1915
1907
  }
1916
1908
  function validateForm(values, config, customValidators) {
package/dist/meta.js CHANGED
@@ -1114,6 +1114,7 @@ var SelectMeta = {
1114
1114
  kind: "array",
1115
1115
  label: "\uC635\uC158",
1116
1116
  required: true,
1117
+ description: "\uAE30\uBCF8\uC740 \uC544\uB798 \uD589 \uD3B8\uC9D1\uAE30\uC758 {\uAC12, \uD45C\uC2DC} \uBAA8\uC591\uC774\uB2E4. \uB3C4\uBA54\uC778 \uAC1D\uCCB4 \uBAA9\uB85D\uC744 \uADF8\uB300\uB85C \uBB3C\uB9B4 \uAC70\uBA74(\uC608: {id, title}) \uAC12 \uD0A4\xB7\uB77C\uBCA8 \uD0A4\uB85C \uC77D\uC744 \uC790\uB9AC\uB97C \uC54C\uB824 \uC900\uB2E4.",
1117
1118
  group: "data",
1118
1119
  bindable: true,
1119
1120
  item: [
@@ -1122,6 +1123,22 @@ var SelectMeta = {
1122
1123
  { name: "disabled", kind: "boolean", label: "\uBE44\uD65C\uC131" }
1123
1124
  ]
1124
1125
  },
1126
+ {
1127
+ name: "valueKey",
1128
+ kind: "string",
1129
+ label: "\uAC12 \uD0A4",
1130
+ default: "value",
1131
+ description: "\uC635\uC158\uC5D0\uC11C \uAC12\uC744 \uC77D\uC744 \uD0A4. AutocompleteField\uC758 \uAC19\uC740 \uC774\uB984 \uD504\uB86D\uACFC \uB73B\uC774 \uAC19\uB2E4.",
1132
+ group: "data"
1133
+ },
1134
+ {
1135
+ name: "labelKey",
1136
+ kind: "string",
1137
+ label: "\uB77C\uBCA8 \uD0A4",
1138
+ default: "label",
1139
+ description: "\uC635\uC158\uC5D0\uC11C \uD45C\uC2DC \uB77C\uBCA8\uC744 \uC77D\uC744 \uD0A4. \uADF8 \uC790\uB9AC\uAC00 \uBE44\uBA74 \uAC12\uC73C\uB85C \uB300\uC2E0 \uADF8\uB9B0\uB2E4.",
1140
+ group: "data"
1141
+ },
1125
1142
  { name: "value", kind: "string", label: "\uC120\uD0DD\uB41C \uAC12", bindable: true, group: "data" },
1126
1143
  { name: "onChange", kind: "action", label: "\uBCC0\uACBD", eventArg: "\uC120\uD0DD\uB41C value", group: "behavior" },
1127
1144
  { name: "placeholder", kind: "string", label: "\uBE48 \uCCAB \uC635\uC158", group: "content" },
package/dist/rich.js CHANGED
@@ -1,6 +1,6 @@
1
- import { useSduiAssetResolver, HoistedStyle } from './chunk-FGRR3ROJ.js';
2
- export { DatePicker, DateRangePicker } from './chunk-FGRR3ROJ.js';
3
- import { Spinner, EmptyState } from './chunk-ZUCI34QY.js';
1
+ import { useSduiAssetResolver, HoistedStyle } from './chunk-KAXPN6KT.js';
2
+ export { DatePicker, DateRangePicker } from './chunk-KAXPN6KT.js';
3
+ import { Spinner, EmptyState } from './chunk-CRSY67TZ.js';
4
4
  import { useRef, useCallback, useMemo, useState, useEffect, useLayoutEffect } from 'react';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
 
@@ -1,3 +1,3 @@
1
- export { AutocompleteField, toAutocompleteOptions } from '../chunk-MOIU7MUA.js';
2
- import '../chunk-KADFN76X.js';
3
- import '../chunk-ZUCI34QY.js';
1
+ export { AutocompleteField, toAutocompleteOptions } from '../chunk-57LLG32F.js';
2
+ import '../chunk-TKB7H5DB.js';
3
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { ColumnBoard } from '../chunk-Q6SBH63R.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { ColumnBoard } from '../chunk-HGFYXY7F.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { DiffView } from '../chunk-WVRCIVAD.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { DiffView } from '../chunk-73ZMMJRX.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { Disclosure } from '../chunk-WNYWTFGW.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { Disclosure } from '../chunk-TAFUDHIX.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { EventCalendar } from '../chunk-LZJTKVMO.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { EventCalendar } from '../chunk-XMMYJSRV.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { ImageLightbox } from '../chunk-RH7ESUE6.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { ImageLightbox } from '../chunk-XY2JKFAV.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { InlineEdit } from '../chunk-OOHHW4K4.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { InlineEdit } from '../chunk-B4A4KY4K.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { JsonField } from '../chunk-AROOQ5W6.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { JsonField } from '../chunk-L4ORCIVN.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { OrgChart } from '../chunk-ZNITJ4KK.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { OrgChart } from '../chunk-63U54JAG.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { PeriodFilter } from '../chunk-DGPRX4MU.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { PeriodFilter } from '../chunk-J2DSDERS.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { PrintSheet } from '../chunk-KBHI3IUR.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { PrintSheet } from '../chunk-5O6PFLFJ.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,3 +1,3 @@
1
- export { SearchableMultiPicker } from '../chunk-56KKWLNI.js';
2
- import '../chunk-KADFN76X.js';
3
- import '../chunk-ZUCI34QY.js';
1
+ export { SearchableMultiPicker } from '../chunk-H32WQHB7.js';
2
+ import '../chunk-TKB7H5DB.js';
3
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { SecureScreen } from '../chunk-APCXOCAO.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { SecureScreen } from '../chunk-562QK2G3.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { TagMultiSelect } from '../chunk-4SU2KYPU.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { TagMultiSelect } from '../chunk-2ARNY7WZ.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,3 +1,3 @@
1
- export { Timeline } from '../chunk-MSAV4J4I.js';
2
- import '../chunk-WNYWTFGW.js';
3
- import '../chunk-ZUCI34QY.js';
1
+ export { Timeline } from '../chunk-DN5YNPJS.js';
2
+ import '../chunk-TAFUDHIX.js';
3
+ import '../chunk-CRSY67TZ.js';
@@ -1,3 +1,3 @@
1
- export { TreePicker } from '../chunk-ZQR3ULVH.js';
2
- import '../chunk-SEBPBUZR.js';
3
- import '../chunk-ZUCI34QY.js';
1
+ export { TreePicker } from '../chunk-GWVK3BHB.js';
2
+ import '../chunk-Y3HYEWSY.js';
3
+ import '../chunk-CRSY67TZ.js';
@@ -1,2 +1,2 @@
1
- export { TreeView } from '../chunk-SEBPBUZR.js';
2
- import '../chunk-ZUCI34QY.js';
1
+ export { TreeView } from '../chunk-Y3HYEWSY.js';
2
+ import '../chunk-CRSY67TZ.js';
@@ -1,47 +1,47 @@
1
- import { SearchableMultiPicker } from '../chunk-56KKWLNI.js';
2
- export { SearchableMultiPicker } from '../chunk-56KKWLNI.js';
3
- import { SecureScreen } from '../chunk-APCXOCAO.js';
4
- export { SecureScreen } from '../chunk-APCXOCAO.js';
1
+ import { SearchableMultiPicker } from '../chunk-H32WQHB7.js';
2
+ export { SearchableMultiPicker } from '../chunk-H32WQHB7.js';
3
+ import { SecureScreen } from '../chunk-562QK2G3.js';
4
+ export { SecureScreen } from '../chunk-562QK2G3.js';
5
5
  import { StackedMeter } from '../chunk-7Y4J7EOK.js';
6
6
  export { StackedMeter } from '../chunk-7Y4J7EOK.js';
7
7
  import { Strip } from '../chunk-PJRXPMI3.js';
8
8
  export { Strip } from '../chunk-PJRXPMI3.js';
9
9
  import { SummaryTable } from '../chunk-USKRM22W.js';
10
10
  export { SummaryTable } from '../chunk-USKRM22W.js';
11
- import { TagMultiSelect } from '../chunk-4SU2KYPU.js';
12
- export { TagMultiSelect } from '../chunk-4SU2KYPU.js';
13
- import { Timeline } from '../chunk-MSAV4J4I.js';
14
- export { Timeline } from '../chunk-MSAV4J4I.js';
15
- import { TreePicker } from '../chunk-ZQR3ULVH.js';
16
- export { TreePicker } from '../chunk-ZQR3ULVH.js';
17
- import { TreeView } from '../chunk-SEBPBUZR.js';
18
- export { TreeView } from '../chunk-SEBPBUZR.js';
19
- import { EventCalendar } from '../chunk-LZJTKVMO.js';
20
- export { EventCalendar } from '../chunk-LZJTKVMO.js';
21
- import { ImageLightbox } from '../chunk-RH7ESUE6.js';
22
- export { ImageLightbox } from '../chunk-RH7ESUE6.js';
23
- import { InlineEdit } from '../chunk-OOHHW4K4.js';
24
- export { InlineEdit } from '../chunk-OOHHW4K4.js';
25
- import { JsonField } from '../chunk-AROOQ5W6.js';
26
- export { JsonField } from '../chunk-AROOQ5W6.js';
11
+ import { TagMultiSelect } from '../chunk-2ARNY7WZ.js';
12
+ export { TagMultiSelect } from '../chunk-2ARNY7WZ.js';
13
+ import { Timeline } from '../chunk-DN5YNPJS.js';
14
+ export { Timeline } from '../chunk-DN5YNPJS.js';
15
+ import { TreePicker } from '../chunk-GWVK3BHB.js';
16
+ export { TreePicker } from '../chunk-GWVK3BHB.js';
17
+ import { TreeView } from '../chunk-Y3HYEWSY.js';
18
+ export { TreeView } from '../chunk-Y3HYEWSY.js';
19
+ import { EventCalendar } from '../chunk-XMMYJSRV.js';
20
+ export { EventCalendar } from '../chunk-XMMYJSRV.js';
21
+ import { ImageLightbox } from '../chunk-XY2JKFAV.js';
22
+ export { ImageLightbox } from '../chunk-XY2JKFAV.js';
23
+ import { InlineEdit } from '../chunk-B4A4KY4K.js';
24
+ export { InlineEdit } from '../chunk-B4A4KY4K.js';
25
+ import { JsonField } from '../chunk-L4ORCIVN.js';
26
+ export { JsonField } from '../chunk-L4ORCIVN.js';
27
27
  import { LiveClock } from '../chunk-QZQDHSMD.js';
28
28
  export { LiveClock } from '../chunk-QZQDHSMD.js';
29
- import { OrgChart } from '../chunk-ZNITJ4KK.js';
30
- export { OrgChart } from '../chunk-ZNITJ4KK.js';
31
- import { PeriodFilter } from '../chunk-DGPRX4MU.js';
32
- export { PeriodFilter } from '../chunk-DGPRX4MU.js';
33
- import { PrintSheet } from '../chunk-KBHI3IUR.js';
34
- export { PrintSheet } from '../chunk-KBHI3IUR.js';
29
+ import { OrgChart } from '../chunk-63U54JAG.js';
30
+ export { OrgChart } from '../chunk-63U54JAG.js';
31
+ import { PeriodFilter } from '../chunk-J2DSDERS.js';
32
+ export { PeriodFilter } from '../chunk-J2DSDERS.js';
33
+ import { PrintSheet } from '../chunk-5O6PFLFJ.js';
34
+ export { PrintSheet } from '../chunk-5O6PFLFJ.js';
35
35
  import '../chunk-QBIVW7E6.js';
36
- export { AutocompleteField, toAutocompleteOptions } from '../chunk-MOIU7MUA.js';
37
- import '../chunk-KADFN76X.js';
38
- import { ColumnBoard } from '../chunk-Q6SBH63R.js';
39
- export { ColumnBoard } from '../chunk-Q6SBH63R.js';
40
- import { DiffView } from '../chunk-WVRCIVAD.js';
41
- export { DiffView } from '../chunk-WVRCIVAD.js';
42
- import { Disclosure } from '../chunk-WNYWTFGW.js';
43
- export { Disclosure } from '../chunk-WNYWTFGW.js';
44
- import '../chunk-ZUCI34QY.js';
36
+ export { AutocompleteField, toAutocompleteOptions } from '../chunk-57LLG32F.js';
37
+ import '../chunk-TKB7H5DB.js';
38
+ import { ColumnBoard } from '../chunk-HGFYXY7F.js';
39
+ export { ColumnBoard } from '../chunk-HGFYXY7F.js';
40
+ import { DiffView } from '../chunk-73ZMMJRX.js';
41
+ export { DiffView } from '../chunk-73ZMMJRX.js';
42
+ import { Disclosure } from '../chunk-TAFUDHIX.js';
43
+ export { Disclosure } from '../chunk-TAFUDHIX.js';
44
+ import '../chunk-CRSY67TZ.js';
45
45
 
46
46
  // src/widgets/index.ts
47
47
  var widgetComponents = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipco/sdui",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "WIPCO 서버 주도 UI(SDUI) 렌더러 — JSON 페이지 스펙을 React 컴포넌트로 렌더링",
5
5
  "keywords": [
6
6
  "sdui",