@kjun-ui/native 0.4.2 → 0.5.1

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 (109) hide show
  1. package/README.md +4 -4
  2. package/dist/index.cjs +346 -334
  3. package/dist/index.js +346 -334
  4. package/dist/index.web.cjs +346 -334
  5. package/dist/index.web.js +346 -334
  6. package/dist/styles.css +2057 -2133
  7. package/dist/types/packages/native/src/actions.d.cts +13 -13
  8. package/dist/types/packages/native/src/actions.d.ts +13 -13
  9. package/dist/types/packages/native/src/app-navigation.d.cts +6 -6
  10. package/dist/types/packages/native/src/app-navigation.d.ts +6 -6
  11. package/dist/types/packages/native/src/button.d.cts +3 -3
  12. package/dist/types/packages/native/src/button.d.ts +3 -3
  13. package/dist/types/packages/native/src/card.d.cts +2 -2
  14. package/dist/types/packages/native/src/card.d.ts +2 -2
  15. package/dist/types/packages/native/src/chip.d.cts +2 -2
  16. package/dist/types/packages/native/src/chip.d.ts +2 -2
  17. package/dist/types/packages/native/src/choice-controls.d.cts +8 -8
  18. package/dist/types/packages/native/src/choice-controls.d.ts +8 -8
  19. package/dist/types/packages/native/src/combobox.d.cts +2 -2
  20. package/dist/types/packages/native/src/combobox.d.ts +2 -2
  21. package/dist/types/packages/native/src/controls.d.cts +6 -6
  22. package/dist/types/packages/native/src/controls.d.ts +6 -6
  23. package/dist/types/packages/native/src/data-state.d.cts +6 -6
  24. package/dist/types/packages/native/src/data-state.d.ts +6 -6
  25. package/dist/types/packages/native/src/date-picker.d.cts +2 -2
  26. package/dist/types/packages/native/src/date-picker.d.ts +2 -2
  27. package/dist/types/packages/native/src/display-primitives.d.cts +12 -12
  28. package/dist/types/packages/native/src/display-primitives.d.ts +12 -12
  29. package/dist/types/packages/native/src/display.d.cts +6 -6
  30. package/dist/types/packages/native/src/display.d.ts +6 -6
  31. package/dist/types/packages/native/src/drawer.d.cts +2 -2
  32. package/dist/types/packages/native/src/drawer.d.ts +2 -2
  33. package/dist/types/packages/native/src/dropdown.d.cts +12 -12
  34. package/dist/types/packages/native/src/dropdown.d.ts +12 -12
  35. package/dist/types/packages/native/src/financial-display.d.cts +12 -12
  36. package/dist/types/packages/native/src/financial-display.d.ts +12 -12
  37. package/dist/types/packages/native/src/financial.d.cts +4 -4
  38. package/dist/types/packages/native/src/financial.d.ts +4 -4
  39. package/dist/types/packages/native/src/index.d.cts +22 -22
  40. package/dist/types/packages/native/src/index.d.ts +22 -22
  41. package/dist/types/packages/native/src/input.d.cts +5 -5
  42. package/dist/types/packages/native/src/input.d.ts +5 -5
  43. package/dist/types/packages/native/src/kpi-hero.d.cts +2 -2
  44. package/dist/types/packages/native/src/kpi-hero.d.ts +2 -2
  45. package/dist/types/packages/native/src/kpi-row.d.cts +2 -2
  46. package/dist/types/packages/native/src/kpi-row.d.ts +2 -2
  47. package/dist/types/packages/native/src/kpi.d.cts +4 -4
  48. package/dist/types/packages/native/src/kpi.d.ts +4 -4
  49. package/dist/types/packages/native/src/layers.d.cts +6 -6
  50. package/dist/types/packages/native/src/layers.d.ts +6 -6
  51. package/dist/types/packages/native/src/list.d.cts +4 -4
  52. package/dist/types/packages/native/src/list.d.ts +4 -4
  53. package/dist/types/packages/native/src/market-cards.d.cts +2 -2
  54. package/dist/types/packages/native/src/market-cards.d.ts +2 -2
  55. package/dist/types/packages/native/src/market-list.d.cts +2 -2
  56. package/dist/types/packages/native/src/market-list.d.ts +2 -2
  57. package/dist/types/packages/native/src/market-model.d.cts +4 -4
  58. package/dist/types/packages/native/src/market-model.d.ts +4 -4
  59. package/dist/types/packages/native/src/market-panel.d.cts +1 -1
  60. package/dist/types/packages/native/src/market-panel.d.ts +1 -1
  61. package/dist/types/packages/native/src/market-skeleton.d.cts +2 -2
  62. package/dist/types/packages/native/src/market-skeleton.d.ts +2 -2
  63. package/dist/types/packages/native/src/market-table.d.cts +2 -2
  64. package/dist/types/packages/native/src/market-table.d.ts +2 -2
  65. package/dist/types/packages/native/src/market.d.cts +5 -5
  66. package/dist/types/packages/native/src/market.d.ts +5 -5
  67. package/dist/types/packages/native/src/media.d.cts +4 -4
  68. package/dist/types/packages/native/src/media.d.ts +4 -4
  69. package/dist/types/packages/native/src/modal.d.cts +4 -4
  70. package/dist/types/packages/native/src/modal.d.ts +4 -4
  71. package/dist/types/packages/native/src/navigation.d.cts +9 -9
  72. package/dist/types/packages/native/src/navigation.d.ts +9 -9
  73. package/dist/types/packages/native/src/number-display.d.cts +8 -8
  74. package/dist/types/packages/native/src/number-display.d.ts +8 -8
  75. package/dist/types/packages/native/src/popover.d.cts +4 -4
  76. package/dist/types/packages/native/src/popover.d.ts +4 -4
  77. package/dist/types/packages/native/src/quantity-stepper.d.cts +2 -2
  78. package/dist/types/packages/native/src/quantity-stepper.d.ts +2 -2
  79. package/dist/types/packages/native/src/range-input.d.cts +4 -4
  80. package/dist/types/packages/native/src/range-input.d.ts +4 -4
  81. package/dist/types/packages/native/src/search-input.d.cts +2 -2
  82. package/dist/types/packages/native/src/search-input.d.ts +2 -2
  83. package/dist/types/packages/native/src/select-control.d.cts +2 -2
  84. package/dist/types/packages/native/src/select-control.d.ts +2 -2
  85. package/dist/types/packages/native/src/select.d.cts +8 -8
  86. package/dist/types/packages/native/src/select.d.ts +8 -8
  87. package/dist/types/packages/native/src/selection-groups.d.cts +4 -4
  88. package/dist/types/packages/native/src/selection-groups.d.ts +4 -4
  89. package/dist/types/packages/native/src/skeleton-base.d.cts +2 -2
  90. package/dist/types/packages/native/src/skeleton-base.d.ts +2 -2
  91. package/dist/types/packages/native/src/skeletons.d.cts +8 -8
  92. package/dist/types/packages/native/src/skeletons.d.ts +8 -8
  93. package/dist/types/packages/native/src/table-model.d.cts +2 -2
  94. package/dist/types/packages/native/src/table-model.d.ts +2 -2
  95. package/dist/types/packages/native/src/table-view.d.cts +2 -2
  96. package/dist/types/packages/native/src/table-view.d.ts +2 -2
  97. package/dist/types/packages/native/src/table.d.cts +2 -2
  98. package/dist/types/packages/native/src/table.d.ts +2 -2
  99. package/dist/types/packages/native/src/tabs.d.cts +4 -4
  100. package/dist/types/packages/native/src/tabs.d.ts +4 -4
  101. package/dist/types/packages/native/src/textarea.d.cts +2 -2
  102. package/dist/types/packages/native/src/textarea.d.ts +2 -2
  103. package/dist/types/packages/native/src/time-picker.d.cts +2 -2
  104. package/dist/types/packages/native/src/time-picker.d.ts +2 -2
  105. package/dist/types/shared/package-runtime/table-model.d.cts +15 -0
  106. package/dist/types/shared/package-runtime/table-model.d.ts +15 -0
  107. package/dist/types/shared/package-runtime/table.d.cts +1 -1
  108. package/dist/types/shared/package-runtime/table.d.ts +1 -1
  109. package/package.json +3 -3
package/dist/index.cjs CHANGED
@@ -30,86 +30,86 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  // packages/native/src/index.ts
31
31
  var index_exports = {};
32
32
  __export(index_exports, {
33
- DsAccordion: () => DsAccordion,
34
- DsAccordionItem: () => DsAccordionItem,
35
- DsAlert: () => DsAlert,
36
- DsAnimatedNumber: () => DsAnimatedNumber,
37
- DsAvatar: () => DsAvatar,
38
- DsBadge: () => DsBadge,
39
- DsBottomActionBar: () => DsBottomActionBar,
40
- DsBottomNavigation: () => DsBottomNavigation,
41
- DsBreadcrumb: () => DsBreadcrumb,
42
- DsButton: () => DsButton,
43
- DsButtonGroup: () => DsButtonGroup,
44
- DsCard: () => DsCard,
45
- DsChartSkeleton: () => DsChartSkeleton,
46
- DsCheckbox: () => DsCheckbox,
47
- DsChip: () => DsChip,
48
- DsCollectionMark: () => DsCollectionMark,
49
- DsCombobox: () => DsCombobox,
50
- DsCopyButton: () => DsCopyButton,
51
- DsDataState: () => DsDataState,
52
- DsDatePicker: () => DsDatePicker,
53
- DsDeviation: () => DsDeviation,
54
- DsDrawer: () => DsDrawer,
55
- DsDropdown: () => DsDropdown,
56
- DsDropdownDivider: () => DsDropdownDivider,
57
- DsDropdownItem: () => DsDropdownItem,
58
- DsEmpty: () => DsEmpty,
59
- DsErrorBoundary: () => DsErrorBoundary,
60
- DsExecutionStatusBadge: () => DsExecutionStatusBadge,
61
- DsExternalLink: () => DsExternalLink,
62
- DsFilterGroup: () => DsFilterGroup,
63
- DsFormActions: () => DsFormActions,
64
- DsFormGroup: () => DsFormGroup,
65
- DsFormLayout: () => DsFormLayout,
66
- DsFormSkeleton: () => DsFormSkeleton,
67
- DsFreshness: () => DsFreshness,
68
- DsHeatmapCell: () => DsHeatmapCell,
69
- DsIcon: () => DsIcon,
70
- DsIconToggle: () => DsIconToggle,
71
- DsImage: () => DsImage,
72
- DsInput: () => DsInput,
73
- DsKpiHero: () => DsKpiHero,
74
- DsKpiRow: () => DsKpiRow,
75
- DsListRow: () => DsListRow,
76
- DsListSection: () => DsListSection,
77
- DsListSkeleton: () => DsListSkeleton,
78
- DsMarketCards: () => DsMarketCards,
79
- DsMarketListPanel: () => DsMarketListPanel,
80
- DsMarketSimpleList: () => DsMarketSimpleList,
81
- DsMarketTable: () => DsMarketTable,
82
- DsMarketTableSkeleton: () => DsMarketTableSkeleton,
83
- DsMenuButton: () => DsMenuButton,
84
- DsModal: () => DsModal,
85
- DsPagination: () => DsPagination,
86
- DsPopover: () => DsPopover,
87
- DsPriceCell: () => DsPriceCell,
88
- DsProgress: () => DsProgress,
89
- DsProgressCell: () => DsProgressCell,
90
- DsQuantityStepper: () => DsQuantityStepper,
91
- DsRadio: () => DsRadio,
92
- DsRadioGroup: () => DsRadioGroup,
93
- DsRangeSlider: () => DsRangeSlider,
94
- DsRefreshButton: () => DsRefreshButton,
95
- DsScrollFade: () => DsScrollFade,
96
- DsSearchInput: () => DsSearchInput,
97
- DsSelect: () => DsSelect,
98
- DsSignedValue: () => DsSignedValue,
99
- DsSkeleton: () => DsSkeleton,
100
- DsSlider: () => DsSlider,
101
- DsSparkline: () => DsSparkline,
102
- DsSpinner: () => DsSpinner,
103
- DsSwitch: () => DsSwitch,
104
- DsTabPane: () => DsTabPane,
105
- DsTable: () => DsTable,
106
- DsTabs: () => DsTabs,
107
- DsTextarea: () => DsTextarea,
108
- DsTimePicker: () => DsTimePicker,
109
- DsTooltip: () => DsTooltip,
110
- DsTopNavigation: () => DsTopNavigation,
33
+ KjunAccordion: () => KjunAccordion,
34
+ KjunAccordionItem: () => KjunAccordionItem,
35
+ KjunAlert: () => KjunAlert,
36
+ KjunAnimatedNumber: () => KjunAnimatedNumber,
37
+ KjunAvatar: () => KjunAvatar,
38
+ KjunBadge: () => KjunBadge,
39
+ KjunBottomActionBar: () => KjunBottomActionBar,
40
+ KjunBottomNavigation: () => KjunBottomNavigation,
41
+ KjunBreadcrumb: () => KjunBreadcrumb,
42
+ KjunButton: () => KjunButton,
43
+ KjunButtonGroup: () => KjunButtonGroup,
44
+ KjunCard: () => KjunCard,
45
+ KjunChartSkeleton: () => KjunChartSkeleton,
46
+ KjunCheckbox: () => KjunCheckbox,
47
+ KjunChip: () => KjunChip,
48
+ KjunCollectionMark: () => KjunCollectionMark,
49
+ KjunCombobox: () => KjunCombobox,
50
+ KjunCopyButton: () => KjunCopyButton,
51
+ KjunDataState: () => KjunDataState,
52
+ KjunDatePicker: () => KjunDatePicker,
53
+ KjunDeviation: () => KjunDeviation,
54
+ KjunDrawer: () => KjunDrawer,
55
+ KjunDropdown: () => KjunDropdown,
56
+ KjunDropdownDivider: () => KjunDropdownDivider,
57
+ KjunDropdownItem: () => KjunDropdownItem,
58
+ KjunEmpty: () => KjunEmpty,
59
+ KjunErrorBoundary: () => KjunErrorBoundary,
60
+ KjunExecutionStatusBadge: () => KjunExecutionStatusBadge,
61
+ KjunExternalLink: () => KjunExternalLink,
111
62
  KjunFeedbackProvider: () => KjunFeedbackProvider,
63
+ KjunFilterGroup: () => KjunFilterGroup,
64
+ KjunFormActions: () => KjunFormActions,
65
+ KjunFormGroup: () => KjunFormGroup,
66
+ KjunFormLayout: () => KjunFormLayout,
67
+ KjunFormSkeleton: () => KjunFormSkeleton,
68
+ KjunFreshness: () => KjunFreshness,
69
+ KjunHeatmapCell: () => KjunHeatmapCell,
70
+ KjunIcon: () => KjunIcon,
71
+ KjunIconToggle: () => KjunIconToggle,
72
+ KjunImage: () => KjunImage,
73
+ KjunInput: () => KjunInput,
74
+ KjunKpiHero: () => KjunKpiHero,
75
+ KjunKpiRow: () => KjunKpiRow,
76
+ KjunListRow: () => KjunListRow,
77
+ KjunListSection: () => KjunListSection,
78
+ KjunListSkeleton: () => KjunListSkeleton,
79
+ KjunMarketCards: () => KjunMarketCards,
80
+ KjunMarketListPanel: () => KjunMarketListPanel,
81
+ KjunMarketSimpleList: () => KjunMarketSimpleList,
82
+ KjunMarketTable: () => KjunMarketTable,
83
+ KjunMarketTableSkeleton: () => KjunMarketTableSkeleton,
84
+ KjunMenuButton: () => KjunMenuButton,
85
+ KjunModal: () => KjunModal,
86
+ KjunPagination: () => KjunPagination,
87
+ KjunPopover: () => KjunPopover,
88
+ KjunPriceCell: () => KjunPriceCell,
89
+ KjunProgress: () => KjunProgress,
90
+ KjunProgressCell: () => KjunProgressCell,
112
91
  KjunProvider: () => KjunProvider,
92
+ KjunQuantityStepper: () => KjunQuantityStepper,
93
+ KjunRadio: () => KjunRadio,
94
+ KjunRadioGroup: () => KjunRadioGroup,
95
+ KjunRangeSlider: () => KjunRangeSlider,
96
+ KjunRefreshButton: () => KjunRefreshButton,
97
+ KjunScrollFade: () => KjunScrollFade,
98
+ KjunSearchInput: () => KjunSearchInput,
99
+ KjunSelect: () => KjunSelect,
100
+ KjunSignedValue: () => KjunSignedValue,
101
+ KjunSkeleton: () => KjunSkeleton,
102
+ KjunSlider: () => KjunSlider,
103
+ KjunSparkline: () => KjunSparkline,
104
+ KjunSpinner: () => KjunSpinner,
105
+ KjunSwitch: () => KjunSwitch,
106
+ KjunTabPane: () => KjunTabPane,
107
+ KjunTable: () => KjunTable,
108
+ KjunTabs: () => KjunTabs,
109
+ KjunTextarea: () => KjunTextarea,
110
+ KjunTimePicker: () => KjunTimePicker,
111
+ KjunTooltip: () => KjunTooltip,
112
+ KjunTopNavigation: () => KjunTopNavigation,
113
113
  useKjunFeedback: () => useKjunFeedback,
114
114
  useKjunStyles: () => useKjunStyles
115
115
  });
@@ -654,7 +654,7 @@ var AccessiblePressable = (0, import_react11.forwardRef)(
654
654
 
655
655
  // packages/native/src/button.tsx
656
656
  var import_jsx_runtime5 = require("react/jsx-runtime");
657
- function DsIcon({
657
+ function KjunIcon({
658
658
  name,
659
659
  size = import_tokens5.tokens.iconSizes.default,
660
660
  color,
@@ -759,7 +759,7 @@ function useMinimumLoading(loading) {
759
759
  }, [loading]);
760
760
  return loading || active;
761
761
  }
762
- function DsButton(input) {
762
+ function KjunButton(input) {
763
763
  var _a, _b;
764
764
  const {
765
765
  children,
@@ -869,7 +869,7 @@ function DsButton(input) {
869
869
  const color = paint(pressed, hovered && import_react_native3.Platform.OS === "web").ink;
870
870
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
871
871
  before && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
872
- DsIcon,
872
+ KjunIcon,
873
873
  {
874
874
  name: before,
875
875
  filled: !busy && prefixIconFilled,
@@ -886,7 +886,7 @@ function DsButton(input) {
886
886
  ...multiline || navigation ? { flexShrink: 1, minWidth: 0, textAlign: "center" } : {}
887
887
  }, children }),
888
888
  suffixIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react_native3.View, { style: { opacity: busy && prefixIcon ? 0 : 1 }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
889
- DsIcon,
889
+ KjunIcon,
890
890
  {
891
891
  name: busy && !prefixIcon ? "loader-2" : suffixIcon,
892
892
  filled: !busy && suffixIconFilled,
@@ -903,7 +903,7 @@ function DsButton(input) {
903
903
  right: 0,
904
904
  alignItems: "center",
905
905
  justifyContent: "center"
906
- }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DsIcon, { name: "loader-2", spin: true, size: iconSize, color }) })
906
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(KjunIcon, { name: "loader-2", spin: true, size: iconSize, color }) })
907
907
  ] });
908
908
  }
909
909
  }
@@ -943,7 +943,7 @@ function FieldClear({ size, disabled, label, onPress }) {
943
943
  alignItems: "center",
944
944
  justifyContent: "center",
945
945
  backgroundColor: disabled ? "transparent" : pressed ? colors.active : hovered ? colors.hover : "transparent"
946
- }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(DsIcon, { name: "x", size: spec.iconSize, color: disabled ? colors.textDisabled : colors.textSecondary }) })
946
+ }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(KjunIcon, { name: "x", size: spec.iconSize, color: disabled ? colors.textDisabled : colors.textSecondary }) })
947
947
  }
948
948
  );
949
949
  }
@@ -1110,7 +1110,7 @@ var import_react_native8 = require("react-native");
1110
1110
  var import_jsx_runtime8 = require("react/jsx-runtime");
1111
1111
  var FieldContext = (0, import_react16.createContext)(null);
1112
1112
  var useKjunField = () => (0, import_react16.useContext)(FieldContext);
1113
- function DsFormGroup({
1113
+ function KjunFormGroup({
1114
1114
  label,
1115
1115
  id,
1116
1116
  required = false,
@@ -1154,7 +1154,7 @@ function DsFormGroup({
1154
1154
  marginTop: import_tokens9.tokens.extensions.form.messageGap
1155
1155
  },
1156
1156
  children: [
1157
- !!error && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DsIcon, { name: "alert-circle", size: import_tokens9.tokens.extensions.form.messageIconSize, color: c.danger }),
1157
+ !!error && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(KjunIcon, { name: "alert-circle", size: import_tokens9.tokens.extensions.form.messageIconSize, color: c.danger }),
1158
1158
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1159
1159
  import_react_native8.Text,
1160
1160
  {
@@ -1176,7 +1176,7 @@ function DsFormGroup({
1176
1176
  }
1177
1177
  );
1178
1178
  }
1179
- var DsInput = (0, import_react16.forwardRef)(function DsInput2({
1179
+ var KjunInput = (0, import_react16.forwardRef)(function KjunInput2({
1180
1180
  value,
1181
1181
  size = "md",
1182
1182
  error = false,
@@ -1290,7 +1290,7 @@ var DsInput = (0, import_react16.forwardRef)(function DsInput2({
1290
1290
  justifyContent: "center"
1291
1291
  },
1292
1292
  children: prefix || /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1293
- DsIcon,
1293
+ KjunIcon,
1294
1294
  {
1295
1295
  name: prefixIcon,
1296
1296
  size: spec.iconSize,
@@ -1321,7 +1321,7 @@ var DsInput = (0, import_react16.forwardRef)(function DsInput2({
1321
1321
  (_a = input.current) == null ? void 0 : _a.focus();
1322
1322
  } }),
1323
1323
  suffix || suffixIcon && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1324
- DsIcon,
1324
+ KjunIcon,
1325
1325
  {
1326
1326
  name: suffixIcon,
1327
1327
  size: spec.iconSize,
@@ -1348,13 +1348,13 @@ var DsInput = (0, import_react16.forwardRef)(function DsInput2({
1348
1348
  )
1349
1349
  ] });
1350
1350
  });
1351
- function DsFormLayout({
1351
+ function KjunFormLayout({
1352
1352
  children,
1353
1353
  gap = import_tokens9.tokens.extensions.form.itemGap
1354
1354
  }) {
1355
1355
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_react_native8.View, { style: { gap }, children: import_react16.Children.map(
1356
1356
  children,
1357
- (child) => (0, import_react16.isValidElement)(child) && child.type === DsFormGroup ? (0, import_react16.cloneElement)(child, {
1357
+ (child) => (0, import_react16.isValidElement)(child) && child.type === KjunFormGroup ? (0, import_react16.cloneElement)(child, {
1358
1358
  style: [{ marginBottom: 0 }, child.props.style]
1359
1359
  }) : child
1360
1360
  ) });
@@ -1406,7 +1406,7 @@ function ScopedNativeModal({ children, visible, ...props }) {
1406
1406
  const entry = scope ? layers.entries.get(scope) : void 0;
1407
1407
  const generation = (_a = entry == null ? void 0 : entry.order) != null ? _a : 0;
1408
1408
  const inactive = !!scope && !layers.isActive(scope);
1409
- const host = (0, import_react17.useContext)(FeedbackOverlayContext), id = (0, import_react17.useId)(), register = host == null ? void 0 : host.register;
1409
+ const host = (0, import_react17.useContext)(FeedbackOverlayContext), id = "kjun-" + (0, import_react17.useId)(), register = host == null ? void 0 : host.register;
1410
1410
  (0, import_react17.useEffect)(
1411
1411
  () => visible && register ? register(id) : void 0,
1412
1412
  [visible, register, id, generation]
@@ -1438,7 +1438,7 @@ function ScopedNativeModal({ children, visible, ...props }) {
1438
1438
 
1439
1439
  // packages/native/src/modal.tsx
1440
1440
  var import_jsx_runtime12 = require("react/jsx-runtime");
1441
- function DsFormActions({
1441
+ function KjunFormActions({
1442
1442
  size = "lg",
1443
1443
  cancelText = "\uCDE8\uC18C",
1444
1444
  confirmText = "\uC800\uC7A5",
@@ -1497,7 +1497,7 @@ function DsFormActions({
1497
1497
  }
1498
1498
  ),
1499
1499
  showCancel && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1500
- DsButton,
1500
+ KjunButton,
1501
1501
  {
1502
1502
  size,
1503
1503
  variant: cancelVariant,
@@ -1507,7 +1507,7 @@ function DsFormActions({
1507
1507
  }
1508
1508
  ),
1509
1509
  showConfirm && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1510
- DsButton,
1510
+ KjunButton,
1511
1511
  {
1512
1512
  size,
1513
1513
  variant,
@@ -1521,7 +1521,7 @@ function DsFormActions({
1521
1521
  }
1522
1522
  ) });
1523
1523
  }
1524
- function DsModal({
1524
+ function KjunModal({
1525
1525
  open,
1526
1526
  onOpenChange,
1527
1527
  onClose,
@@ -1662,14 +1662,14 @@ function DsModal({
1662
1662
  }
1663
1663
  ) }),
1664
1664
  closable && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1665
- DsButton,
1665
+ KjunButton,
1666
1666
  {
1667
1667
  variant: "ghost",
1668
1668
  size: "sm",
1669
1669
  ariaLabel: "\uB2EB\uAE30",
1670
1670
  onPress: close,
1671
1671
  style: { borderRadius: import_tokens10.tokens.modal.closeRadius, width: import_tokens10.tokens.modal.closeSize, height: import_tokens10.tokens.modal.closeSize, paddingHorizontal: 0, paddingVertical: 0 },
1672
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(DsIcon, { name: "x", size: import_tokens10.tokens.modal.closeIconSize })
1672
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(KjunIcon, { name: "x", size: import_tokens10.tokens.modal.closeIconSize })
1673
1673
  }
1674
1674
  )
1675
1675
  ]
@@ -1698,7 +1698,7 @@ function DsModal({
1698
1698
  borderTopColor: c.border
1699
1699
  },
1700
1700
  children: footer || /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1701
- DsFormActions,
1701
+ KjunFormActions,
1702
1702
  {
1703
1703
  size: footerSize,
1704
1704
  cancelVariant: "secondary",
@@ -1747,7 +1747,7 @@ function hasContent(node) {
1747
1747
 
1748
1748
  // packages/native/src/card.tsx
1749
1749
  var import_jsx_runtime13 = require("react/jsx-runtime");
1750
- function DsCard({
1750
+ function KjunCard({
1751
1751
  title,
1752
1752
  subtitle,
1753
1753
  header,
@@ -1765,7 +1765,7 @@ function DsCard({
1765
1765
  style
1766
1766
  }) {
1767
1767
  const { colors } = useKjunStyles();
1768
- const id = (0, import_react20.useId)().replace(/[^a-z0-9]/gi, "");
1768
+ const id = "kjun-" + (0, import_react20.useId)().replace(/[^a-z0-9]/gi, "");
1769
1769
  const inset = import_tokens11.tokens.card.padding[padding], bodyInset = import_tokens11.tokens.card.padding[bodyPadding];
1770
1770
  const corner = import_tokens11.tokens.card.radii[radius];
1771
1771
  const paint = import_tokens11.tokens.cardSurfaces[surface];
@@ -1833,7 +1833,7 @@ var import_react21 = require("react");
1833
1833
  var import_react_native15 = require("react-native");
1834
1834
  var import_react_native_svg3 = __toESM(require("react-native-svg"), 1);
1835
1835
  var import_jsx_runtime14 = require("react/jsx-runtime");
1836
- function DsBadge(props) {
1836
+ function KjunBadge(props) {
1837
1837
  return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BadgeView, { ...props });
1838
1838
  }
1839
1839
  function BadgeView({
@@ -1895,7 +1895,7 @@ function BadgeView({
1895
1895
  }
1896
1896
  );
1897
1897
  }
1898
- function DsEmpty({
1898
+ function KjunEmpty({
1899
1899
  text = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",
1900
1900
  description,
1901
1901
  icon,
@@ -1913,7 +1913,7 @@ function DsEmpty({
1913
1913
  paddingVertical: stateContent === "empty" ? 0 : import_tokens12.tokens.dimension.value32
1914
1914
  },
1915
1915
  children: [
1916
- icon && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native15.View, { style: { marginBottom: spec.iconGap }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(DsIcon, { name: icon, size: spec.iconSize, color: colors.textSecondary }) }),
1916
+ icon && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native15.View, { style: { marginBottom: spec.iconGap }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(KjunIcon, { name: icon, size: spec.iconSize, color: colors.textSecondary }) }),
1917
1917
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(KText, { style: { ...typeStyle("cardTitle"), color: colors.text, fontSize: spec.titleSize, lineHeight: spec.titleLineHeight, textAlign: "center", maxWidth: spec.textMaxWidth }, children: text }),
1918
1918
  description && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1919
1919
  KText,
@@ -1935,7 +1935,7 @@ function DsEmpty({
1935
1935
  }
1936
1936
  );
1937
1937
  }
1938
- function DsSpinner({ size = "md", text }) {
1938
+ function KjunSpinner({ size = "md", text }) {
1939
1939
  const { colors } = useKjunStyles(), reduced = useReducedMotion(), rotation = (0, import_react21.useRef)(new import_react_native15.Animated.Value(0)).current;
1940
1940
  (0, import_react21.useEffect)(() => {
1941
1941
  if (reduced) return;
@@ -2013,7 +2013,7 @@ function DsSpinner({ size = "md", text }) {
2013
2013
  }
2014
2014
  );
2015
2015
  }
2016
- function DsAlert({
2016
+ function KjunAlert({
2017
2017
  type = "info",
2018
2018
  variant,
2019
2019
  size = "md",
@@ -2049,7 +2049,7 @@ function DsAlert({
2049
2049
  },
2050
2050
  children: [
2051
2051
  /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_native15.View, { style: { height: lineHeight, justifyContent: "center", flexShrink: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2052
- DsIcon,
2052
+ KjunIcon,
2053
2053
  {
2054
2054
  name: {
2055
2055
  info: "info-circle",
@@ -2093,7 +2093,7 @@ function DsAlert({
2093
2093
  onClose == null ? void 0 : onClose();
2094
2094
  },
2095
2095
  children: ({ pressed, hovered }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
2096
- DsIcon,
2096
+ KjunIcon,
2097
2097
  {
2098
2098
  name: "x",
2099
2099
  size: geometry2.closeIconSize,
@@ -2106,7 +2106,7 @@ function DsAlert({
2106
2106
  }
2107
2107
  );
2108
2108
  }
2109
- function DsProgress({
2109
+ function KjunProgress({
2110
2110
  value = 0,
2111
2111
  max = 100,
2112
2112
  size = "md",
@@ -2185,7 +2185,7 @@ var import_tokens13 = require("@kjun-ui/tokens");
2185
2185
  var import_react22 = require("react");
2186
2186
  var import_react_native16 = require("react-native");
2187
2187
  var import_jsx_runtime15 = require("react/jsx-runtime");
2188
- function DsSkeleton({
2188
+ function KjunSkeleton({
2189
2189
  type = "text",
2190
2190
  rows = 3,
2191
2191
  columns = 4,
@@ -2561,7 +2561,7 @@ function ToastView({
2561
2561
  overflow: "hidden"
2562
2562
  },
2563
2563
  children: [
2564
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DsIcon, { name: icon, color: colors[`${tone}Accent`] }),
2564
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(KjunIcon, { name: icon, color: colors[`${tone}Accent`] }),
2565
2565
  /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_native17.View, { style: { flex: 1, minWidth: 0 }, children: [
2566
2566
  toast.title && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(KText, { style: { fontWeight: typeStyle("control").fontWeight, marginBottom: import_tokens15.tokens.extensions.toast.titleGap }, children: toast.title }),
2567
2567
  /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(KText, { style: { color: colors.textSecondary }, children: toast.message }),
@@ -2609,7 +2609,7 @@ function ToastView({
2609
2609
  justifyContent: "center",
2610
2610
  borderRadius: import_tokens15.tokens.extensions.toast.closeRadius
2611
2611
  },
2612
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(DsIcon, { name: "x", color: colors.textTertiary })
2612
+ children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(KjunIcon, { name: "x", color: colors.textTertiary })
2613
2613
  }
2614
2614
  ),
2615
2615
  toast.showProgress !== false && !!toast.duration && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
@@ -2724,7 +2724,7 @@ function FeedbackDialog({
2724
2724
  }) {
2725
2725
  const { options, value, error, busy, edit, cancel, submit } = useFeedbackDialog(controller, request);
2726
2726
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
2727
- DsModal,
2727
+ KjunModal,
2728
2728
  {
2729
2729
  open,
2730
2730
  onOpenChange: (open2) => {
@@ -2743,7 +2743,7 @@ function FeedbackDialog({
2743
2743
  children: [
2744
2744
  options.message && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(KText, { style: { marginBottom: import_tokens17.tokens.dimension.value16 }, children: options.message }),
2745
2745
  request.kind === "prompt" && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
2746
- DsInput,
2746
+ KjunInput,
2747
2747
  {
2748
2748
  autoFocus: true,
2749
2749
  value,
@@ -2812,7 +2812,7 @@ var import_tokens18 = require("@kjun-ui/tokens");
2812
2812
  var import_react29 = require("react");
2813
2813
  var import_react_native21 = require("react-native");
2814
2814
  var import_jsx_runtime19 = require("react/jsx-runtime");
2815
- function DsCheckbox({
2815
+ function KjunCheckbox({
2816
2816
  value,
2817
2817
  val,
2818
2818
  label,
@@ -2861,7 +2861,7 @@ function DsCheckbox({
2861
2861
  backgroundColor: checked ? colors.brand : colors.surface
2862
2862
  },
2863
2863
  children: checked && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2864
- DsIcon,
2864
+ KjunIcon,
2865
2865
  {
2866
2866
  name: "check",
2867
2867
  size: import_tokens18.tokens.extensions.checkbox.iconSizes[size],
@@ -2890,7 +2890,7 @@ function useControlFocus(disabled) {
2890
2890
  ring: focused && !disabled ? { outlineStyle: "solid", outlineWidth: import_tokens18.tokens.states.focus.width, outlineOffset: import_tokens18.tokens.states.focus.choiceOffset, outlineColor: colors.focusRing } : {}
2891
2891
  };
2892
2892
  }
2893
- function DsSwitch({
2893
+ function KjunSwitch({
2894
2894
  value,
2895
2895
  label,
2896
2896
  ariaLabel,
@@ -2990,7 +2990,7 @@ function DsSwitch({
2990
2990
  );
2991
2991
  }
2992
2992
  var RadioContext = (0, import_react29.createContext)(null);
2993
- function DsRadio({
2993
+ function KjunRadio({
2994
2994
  value,
2995
2995
  val,
2996
2996
  label,
@@ -3066,7 +3066,7 @@ function DsRadio({
3066
3066
  }
3067
3067
  );
3068
3068
  }
3069
- function DsRadioGroup({
3069
+ function KjunRadioGroup({
3070
3070
  value,
3071
3071
  options = [],
3072
3072
  direction = "horizontal",
@@ -3099,7 +3099,7 @@ function DsRadioGroup({
3099
3099
  gap: direction === "vertical" ? import_tokens18.tokens.dimension.value8 : import_tokens18.tokens.dimension.value16
3100
3100
  },
3101
3101
  children: children || options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
3102
- DsRadio,
3102
+ KjunRadio,
3103
3103
  {
3104
3104
  val: option.value,
3105
3105
  label: option.label,
@@ -3201,7 +3201,7 @@ function ButtonGroupLabel({ label, active, size, reduced }) {
3201
3201
 
3202
3202
  // packages/native/src/selection-groups.tsx
3203
3203
  var import_jsx_runtime21 = require("react/jsx-runtime");
3204
- function DsButtonGroup({
3204
+ function KjunButtonGroup({
3205
3205
  value,
3206
3206
  options,
3207
3207
  size = "md",
@@ -3302,7 +3302,7 @@ function DsButtonGroup({
3302
3302
  }),
3303
3303
  children: [
3304
3304
  option.icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3305
- DsIcon,
3305
+ KjunIcon,
3306
3306
  {
3307
3307
  name: option.icon,
3308
3308
  size: import_tokens20.tokens.extensions.selection.iconSize,
@@ -3329,7 +3329,7 @@ function DsButtonGroup({
3329
3329
  }
3330
3330
  );
3331
3331
  }
3332
- function DsFilterGroup({
3332
+ function KjunFilterGroup({
3333
3333
  value,
3334
3334
  options,
3335
3335
  size = "sm",
@@ -3399,7 +3399,7 @@ function DsFilterGroup({
3399
3399
  }
3400
3400
  ),
3401
3401
  option.icon && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
3402
- DsIcon,
3402
+ KjunIcon,
3403
3403
  {
3404
3404
  name: option.icon,
3405
3405
  size: import_tokens20.tokens.extensions.selection.iconSize,
@@ -3457,8 +3457,8 @@ var import_tokens21 = require("@kjun-ui/tokens");
3457
3457
  var import_react32 = require("react");
3458
3458
  var import_react_native24 = require("react-native");
3459
3459
  var import_jsx_runtime22 = require("react/jsx-runtime");
3460
- var DsTextarea = (0, import_react32.forwardRef)(
3461
- function DsTextarea2({
3460
+ var KjunTextarea = (0, import_react32.forwardRef)(
3461
+ function KjunTextarea2({
3462
3462
  value,
3463
3463
  size = "md",
3464
3464
  error = false,
@@ -3531,7 +3531,7 @@ var import_react33 = require("react");
3531
3531
  var import_react_native25 = require("react-native");
3532
3532
  var import_react_native26 = require("react-native");
3533
3533
  var import_jsx_runtime23 = require("react/jsx-runtime");
3534
- function DsDrawer({
3534
+ function KjunDrawer({
3535
3535
  open,
3536
3536
  onOpenChange,
3537
3537
  title,
@@ -3639,14 +3639,14 @@ function DsDrawer({
3639
3639
  }
3640
3640
  ) }),
3641
3641
  closable && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
3642
- DsButton,
3642
+ KjunButton,
3643
3643
  {
3644
3644
  size: "sm",
3645
3645
  variant: "ghost",
3646
3646
  ariaLabel: "\uB2EB\uAE30",
3647
3647
  onPress: close,
3648
3648
  style: { borderRadius: import_tokens22.tokens.extensions.drawer.closeRadius, width: import_tokens22.tokens.extensions.drawer.closeSize, height: import_tokens22.tokens.extensions.drawer.closeSize, paddingHorizontal: 0, paddingVertical: 0 },
3649
- children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(DsIcon, { name: "x", size: import_tokens22.tokens.extensions.drawer.closeIconSize })
3649
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(KjunIcon, { name: "x", size: import_tokens22.tokens.extensions.drawer.closeIconSize })
3650
3650
  }
3651
3651
  )
3652
3652
  ]
@@ -3938,7 +3938,7 @@ var import_react35 = require("react");
3938
3938
  var import_react_native29 = require("react-native");
3939
3939
  var import_tokens24 = require("@kjun-ui/tokens");
3940
3940
  var import_jsx_runtime25 = require("react/jsx-runtime");
3941
- function DsPopover({
3941
+ function KjunPopover({
3942
3942
  noPadding = false,
3943
3943
  open: controlled,
3944
3944
  onOpenChange,
@@ -3988,7 +3988,7 @@ function DsPopover({
3988
3988
  )
3989
3989
  ] });
3990
3990
  }
3991
- function DsTooltip({
3991
+ function KjunTooltip({
3992
3992
  content: message = "",
3993
3993
  placement = "top",
3994
3994
  delay = 0,
@@ -4105,9 +4105,9 @@ var import_jsx_runtime26 = require("react/jsx-runtime");
4105
4105
  var DropdownContext = (0, import_react36.createContext)(null);
4106
4106
  var MenuIconSlotContext = (0, import_react36.createContext)(false);
4107
4107
  function hasLeadingIcon(node) {
4108
- return import_react36.Children.toArray(node).some((child) => (0, import_react36.isValidElement)(child) && (child.type === import_react36.Fragment ? hasLeadingIcon(child.props.children) : child.type === DsDropdownItem && !!child.props.icon));
4108
+ return import_react36.Children.toArray(node).some((child) => (0, import_react36.isValidElement)(child) && (child.type === import_react36.Fragment ? hasLeadingIcon(child.props.children) : child.type === KjunDropdownItem && !!child.props.icon));
4109
4109
  }
4110
- function DsDropdown({
4110
+ function KjunDropdown({
4111
4111
  disabled = false,
4112
4112
  placement = "bottom-start",
4113
4113
  trigger,
@@ -4117,7 +4117,7 @@ function DsDropdown({
4117
4117
  }) {
4118
4118
  const [open, setOpen] = (0, import_react36.useState)(false), currentOpen = (0, import_react36.useRef)(false), ref = (0, import_react36.useRef)(null);
4119
4119
  let control = trigger;
4120
- while ((0, import_react36.isValidElement)(control) && control.type === DsTooltip)
4120
+ while ((0, import_react36.isValidElement)(control) && control.type === KjunTooltip)
4121
4121
  control = control.props.children;
4122
4122
  const unavailable = disabled || (0, import_react36.isValidElement)(control) && !!(control.props.disabled || control.props.loading);
4123
4123
  const change = (v) => {
@@ -4153,7 +4153,7 @@ function DsDropdown({
4153
4153
  )
4154
4154
  ] });
4155
4155
  }
4156
- function DsDropdownItem({
4156
+ function KjunDropdownItem({
4157
4157
  variant = "default",
4158
4158
  icon,
4159
4159
  disabled = false,
@@ -4191,14 +4191,14 @@ function DsDropdownItem({
4191
4191
  opacity: disabled ? import_tokens25.tokens.states.opacity.disabled : 1
4192
4192
  }),
4193
4193
  children: [
4194
- icon ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DsIcon, { name: icon, size: import_tokens25.tokens.extensions.menu.iconSize, color: iconColor }) : reserveIcon && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native30.View, { style: { width: import_tokens25.tokens.extensions.menu.iconSize }, accessible: false }),
4194
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(KjunIcon, { name: icon, size: import_tokens25.tokens.extensions.menu.iconSize, color: iconColor }) : reserveIcon && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native30.View, { style: { width: import_tokens25.tokens.extensions.menu.iconSize }, accessible: false }),
4195
4195
  /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native30.View, { style: { flexGrow: 1, flexShrink: 1 }, children: content(children, { color, fontSize: import_tokens25.tokens.extensions.menu.optionFontSize, lineHeight: import_tokens25.tokens.extensions.menu.optionLineHeight }) }),
4196
- selected !== null && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native30.View, { style: { opacity: selected ? 1 : 0 }, accessible: false, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DsIcon, { name: "check", size: import_tokens25.tokens.extensions.menu.iconSize, color: colors.brand }) })
4196
+ selected !== null && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_native30.View, { style: { opacity: selected ? 1 : 0 }, accessible: false, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(KjunIcon, { name: "check", size: import_tokens25.tokens.extensions.menu.iconSize, color: colors.brand }) })
4197
4197
  ]
4198
4198
  }
4199
4199
  );
4200
4200
  }
4201
- function DsDropdownDivider() {
4201
+ function KjunDropdownDivider() {
4202
4202
  const { colors } = useKjunStyles();
4203
4203
  return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4204
4204
  import_react_native30.View,
@@ -4208,7 +4208,7 @@ function DsDropdownDivider() {
4208
4208
  }
4209
4209
  );
4210
4210
  }
4211
- function DsMenuButton({
4211
+ function KjunMenuButton({
4212
4212
  label,
4213
4213
  size = "md",
4214
4214
  variant = "secondary",
@@ -4224,7 +4224,7 @@ function DsMenuButton({
4224
4224
  }) {
4225
4225
  const [open, setOpen] = (0, import_react36.useState)(false);
4226
4226
  return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4227
- DsDropdown,
4227
+ KjunDropdown,
4228
4228
  {
4229
4229
  ...props,
4230
4230
  onOpen: () => {
@@ -4236,13 +4236,13 @@ function DsMenuButton({
4236
4236
  onClose == null ? void 0 : onClose();
4237
4237
  },
4238
4238
  trigger: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4239
- DsTooltip,
4239
+ KjunTooltip,
4240
4240
  {
4241
4241
  content: open ? "" : tooltip,
4242
4242
  placement: tooltipPlacement,
4243
4243
  delay: tooltipDelay,
4244
4244
  children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
4245
- DsButton,
4245
+ KjunButton,
4246
4246
  {
4247
4247
  size,
4248
4248
  variant,
@@ -4402,7 +4402,7 @@ function OptionRow({
4402
4402
  }),
4403
4403
  children: [
4404
4404
  /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_native31.View, { style: { flex: 1 }, children: content(children || label, { fontSize: import_tokens26.tokens.extensions.menu.optionFontSize, lineHeight: import_tokens26.tokens.extensions.menu.optionLineHeight }) }),
4405
- selected && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(DsIcon, { name: "check", size: import_tokens26.tokens.extensions.menu.iconSize, color: colors.brand })
4405
+ selected && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(KjunIcon, { name: "check", size: import_tokens26.tokens.extensions.menu.iconSize, color: colors.brand })
4406
4406
  ]
4407
4407
  }
4408
4408
  );
@@ -4410,7 +4410,7 @@ function OptionRow({
4410
4410
 
4411
4411
  // packages/native/src/combobox.tsx
4412
4412
  var import_jsx_runtime28 = require("react/jsx-runtime");
4413
- function DsCombobox({
4413
+ function KjunCombobox({
4414
4414
  value,
4415
4415
  options = [],
4416
4416
  placeholder = "\uAC80\uC0C9 \uB610\uB294 \uC120\uD0DD",
@@ -4518,7 +4518,7 @@ function SearchField({
4518
4518
  onSubmitEditing: onEnter
4519
4519
  };
4520
4520
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_jsx_runtime28.Fragment, { children: [
4521
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native32.View, { ref, collapsable: false, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DsInput, { ...inputProps, ...import_react_native32.Platform.OS === "web" ? { onClick: openFromPress } : { onPressIn: openFromPress }, "aria-expanded": open && !disabled, onBlur: focusGuard.clear, onFocus: () => {
4521
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native32.View, { ref, collapsable: false, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(KjunInput, { ...inputProps, ...import_react_native32.Platform.OS === "web" ? { onClick: openFromPress } : { onPressIn: openFromPress }, "aria-expanded": open && !disabled, onBlur: focusGuard.clear, onFocus: () => {
4522
4522
  if (!clearing.current && focusGuard.canOpen()) onOpenChange(true);
4523
4523
  } }) }),
4524
4524
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -4540,12 +4540,12 @@ function SearchField({
4540
4540
  borderBottomWidth: import_tokens27.tokens.border.defaultWidth,
4541
4541
  borderBottomColor: colors.border
4542
4542
  },
4543
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DsInput, { ...inputProps, nativeID: searchId, autoFocus: true })
4543
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(KjunInput, { ...inputProps, nativeID: searchId, autoFocus: true })
4544
4544
  }
4545
4545
  ),
4546
4546
  loading ? (
4547
4547
  // Centered like the Select loading row on every platform.
4548
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native32.View, { style: { padding: import_tokens27.tokens.dimension.value12, alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(DsSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) })
4548
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_native32.View, { style: { padding: import_tokens27.tokens.dimension.value12, alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(KjunSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) })
4549
4549
  ) : failed ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
4550
4550
  KText,
4551
4551
  {
@@ -4596,7 +4596,7 @@ function displayMonth(value) {
4596
4596
  const date = /* @__PURE__ */ new Date(value + "T12:00:00");
4597
4597
  return Number.isNaN(date.getTime()) ? /* @__PURE__ */ new Date() : date;
4598
4598
  }
4599
- function DsDatePicker({
4599
+ function KjunDatePicker({
4600
4600
  value,
4601
4601
  min,
4602
4602
  max,
@@ -4661,7 +4661,7 @@ function DsDatePicker({
4661
4661
  }
4662
4662
  ),
4663
4663
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4664
- DsIcon,
4664
+ KjunIcon,
4665
4665
  {
4666
4666
  name: "calendar",
4667
4667
  size: spec.iconSize,
@@ -4692,7 +4692,7 @@ function DsDatePicker({
4692
4692
  },
4693
4693
  children: [
4694
4694
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4695
- DsButton,
4695
+ KjunButton,
4696
4696
  {
4697
4697
  size: "sm",
4698
4698
  variant: "ghost",
@@ -4708,7 +4708,7 @@ function DsDatePicker({
4708
4708
  "\uC6D4"
4709
4709
  ] }),
4710
4710
  /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
4711
- DsButton,
4711
+ KjunButton,
4712
4712
  {
4713
4713
  size: "sm",
4714
4714
  variant: "ghost",
@@ -4873,7 +4873,7 @@ function useSearchInputModel({
4873
4873
 
4874
4874
  // packages/native/src/search-input.tsx
4875
4875
  var import_jsx_runtime30 = require("react/jsx-runtime");
4876
- function DsSearchInput({
4876
+ function KjunSearchInput({
4877
4877
  value,
4878
4878
  placeholder = "\uAC80\uC0C9...",
4879
4879
  ariaLabel,
@@ -4908,7 +4908,7 @@ function DsSearchInput({
4908
4908
  };
4909
4909
  if (!loadOptions)
4910
4910
  return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
4911
- DsInput,
4911
+ KjunInput,
4912
4912
  {
4913
4913
  error,
4914
4914
  value: query,
@@ -5007,7 +5007,7 @@ function useSelectState(controlled, disabled, pageSize, onOpenChange) {
5007
5007
  // packages/native/src/select-control.tsx
5008
5008
  var import_react_native35 = require("react-native");
5009
5009
  var import_jsx_runtime32 = require("react/jsx-runtime");
5010
- function DsSelect({
5010
+ function KjunSelect({
5011
5011
  value,
5012
5012
  options = [],
5013
5013
  placeholder = "\uC120\uD0DD",
@@ -5118,7 +5118,7 @@ function DsSelect({
5118
5118
  }, children: label || placeholder })
5119
5119
  ] }),
5120
5120
  /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native35.View, { style: { transform: [{ rotate: expanded ? "180deg" : "0deg" }] }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5121
- DsIcon,
5121
+ KjunIcon,
5122
5122
  {
5123
5123
  name: "chevron-down",
5124
5124
  size: compound ? import_tokens30.tokens.extensions.timePicker.iconSize : spec.iconSize,
@@ -5170,7 +5170,7 @@ function DsSelect({
5170
5170
  borderBottomColor: colors.border
5171
5171
  },
5172
5172
  children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5173
- DsInput,
5173
+ KjunInput,
5174
5174
  {
5175
5175
  autoFocus: true,
5176
5176
  value: query,
@@ -5186,7 +5186,7 @@ function DsSelect({
5186
5186
  )
5187
5187
  }
5188
5188
  ),
5189
- loading ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native35.View, { style: { padding: import_tokens30.tokens.dimension.value12 }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(DsSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) }) : visible.map(({ option: o, key }, index) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5189
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_native35.View, { style: { padding: import_tokens30.tokens.dimension.value12 }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(KjunSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) }) : visible.map(({ option: o, key }, index) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5190
5190
  OptionRow,
5191
5191
  {
5192
5192
  selected: selected(o),
@@ -5216,7 +5216,7 @@ function DsSelect({
5216
5216
  }
5217
5217
  ),
5218
5218
  !loading && visible.length < matching.length && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
5219
- DsButton,
5219
+ KjunButton,
5220
5220
  {
5221
5221
  size: "sm",
5222
5222
  variant: "ghost",
@@ -5342,7 +5342,7 @@ function usePanelFocus(_root) {
5342
5342
  // packages/native/src/tabs.tsx
5343
5343
  var import_jsx_runtime34 = require("react/jsx-runtime");
5344
5344
  var TabContext = (0, import_react47.createContext)({ value: "", id: "", names: [] });
5345
- function DsTabs({
5345
+ function KjunTabs({
5346
5346
  value,
5347
5347
  items = [],
5348
5348
  density = "comfortable",
@@ -5358,15 +5358,15 @@ function DsTabs({
5358
5358
  const { colors } = useKjunStyles(), panes = import_react47.Children.toArray(children).filter(
5359
5359
  import_react47.isValidElement
5360
5360
  );
5361
- const tabs = items.length ? items : panes.filter((child) => child.type === DsTabPane).map((child) => child.props);
5362
- const id = (0, import_react47.useId)(), root = (0, import_react47.useRef)(null);
5361
+ const tabs = items.length ? items : panes.filter((child) => child.type === KjunTabPane).map((child) => child.props);
5362
+ const id = "kjun-" + (0, import_react47.useId)(), root = (0, import_react47.useRef)(null);
5363
5363
  const menuState = (0, import_react47.useRef)({ tabs, onTabMenu });
5364
5364
  menuState.current = { tabs, onTabMenu };
5365
5365
  const pressedMenu = (0, import_react47.useRef)(null);
5366
5366
  (0, import_react47.useLayoutEffect)(() => {
5367
5367
  if (!onTabMenu || !tabs.some((tab) => tab.name === pressedMenu.current && !tab.disabled)) pressedMenu.current = null;
5368
5368
  }, [tabs, onTabMenu]);
5369
- const panelNames = panes.filter((child) => child.type === DsTabPane).map((child) => child.props.name);
5369
+ const panelNames = panes.filter((child) => child.type === KjunTabPane).map((child) => child.props.name);
5370
5370
  const geometry2 = import_tokens32.tokens.extensions.tabs;
5371
5371
  const underline = variant === "underline";
5372
5372
  const [hoveredTab, setHoveredTab] = (0, import_react47.useState)(null);
@@ -5497,7 +5497,7 @@ function DsTabs({
5497
5497
  },
5498
5498
  children: [
5499
5499
  tab.icon && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
5500
- DsIcon,
5500
+ KjunIcon,
5501
5501
  {
5502
5502
  name: tab.icon,
5503
5503
  size: geometry2.iconSize,
@@ -5548,7 +5548,7 @@ function DsTabs({
5548
5548
  children && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_native37.View, { style: { marginTop: geometry2.contentGap }, children })
5549
5549
  ] }) });
5550
5550
  }
5551
- function DsTabPane({ name, children }) {
5551
+ function KjunTabPane({ name, children }) {
5552
5552
  const { value, id, names } = (0, import_react47.useContext)(TabContext);
5553
5553
  const root = (0, import_react47.useRef)(null);
5554
5554
  usePanelFocus(root);
@@ -5574,7 +5574,7 @@ function DsTabPane({ name, children }) {
5574
5574
  // packages/native/src/navigation.tsx
5575
5575
  var import_jsx_runtime35 = require("react/jsx-runtime");
5576
5576
  var AccordionContext = (0, import_react48.createContext)(null);
5577
- function DsAccordion({
5577
+ function KjunAccordion({
5578
5578
  multiple = false,
5579
5579
  tone = "card",
5580
5580
  children
@@ -5598,14 +5598,14 @@ function DsAccordion({
5598
5598
  }
5599
5599
  );
5600
5600
  }
5601
- function DsAccordionItem({
5601
+ function KjunAccordionItem({
5602
5602
  title = "",
5603
5603
  defaultOpen = false,
5604
5604
  disabled = false,
5605
5605
  header,
5606
5606
  children
5607
5607
  }) {
5608
- const { colors } = useKjunStyles(), group = (0, import_react48.useContext)(AccordionContext), id = (0, import_react48.useId)(), [own, setOwn] = (0, import_react48.useState)(defaultOpen), open = group ? group.opened.has(id) : own;
5608
+ const { colors } = useKjunStyles(), group = (0, import_react48.useContext)(AccordionContext), id = "kjun-" + (0, import_react48.useId)(), [own, setOwn] = (0, import_react48.useState)(defaultOpen), open = group ? group.opened.has(id) : own;
5609
5609
  const rotation = useMotionValue(open ? 1 : 0, import_tokens33.tokens.motion.collapse, void 0, void 0, true);
5610
5610
  const geometry2 = import_tokens33.tokens.extensions.accordion;
5611
5611
  const [hovered, setHovered] = (0, import_react48.useState)(false);
@@ -5640,7 +5640,7 @@ function DsAccordionItem({
5640
5640
  }),
5641
5641
  children: [
5642
5642
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_native38.View, { style: { flex: 1, minWidth: 0 }, children: content(header || title, { ...typeStyle("control"), ...wrapping }) }),
5643
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_native38.Animated.View, { style: { flexShrink: 0, transform: [{ rotate: rotation.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "180deg"] }) }] }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DsIcon, { name: "chevron-down", size: geometry2.iconSize, color: colors.textSecondary }) })
5643
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_native38.Animated.View, { style: { flexShrink: 0, transform: [{ rotate: rotation.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "180deg"] }) }] }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(KjunIcon, { name: "chevron-down", size: geometry2.iconSize, color: colors.textSecondary }) })
5644
5644
  ]
5645
5645
  }
5646
5646
  ),
@@ -5654,7 +5654,7 @@ function DsAccordionItem({
5654
5654
  ) })
5655
5655
  ] });
5656
5656
  }
5657
- function DsBreadcrumb({
5657
+ function KjunBreadcrumb({
5658
5658
  items,
5659
5659
  renderLink,
5660
5660
  onNavigate,
@@ -5673,7 +5673,7 @@ function DsBreadcrumb({
5673
5673
  },
5674
5674
  children: items.map((item, i) => {
5675
5675
  const label = /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react_native38.View, { style: { flexDirection: "row", alignItems: "center", gap: import_tokens33.tokens.dimension.value4 }, children: [
5676
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(DsIcon, { name: item.icon, size: import_tokens33.tokens.extensions.breadcrumb.iconSize, color: colors.textSecondary }),
5676
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(KjunIcon, { name: item.icon, size: import_tokens33.tokens.extensions.breadcrumb.iconSize, color: colors.textSecondary }),
5677
5677
  /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5678
5678
  KText,
5679
5679
  {
@@ -5687,7 +5687,7 @@ function DsBreadcrumb({
5687
5687
  ] });
5688
5688
  return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react48.Fragment, { children: [
5689
5689
  i > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5690
- DsIcon,
5690
+ KjunIcon,
5691
5691
  {
5692
5692
  name: "chevron-right",
5693
5693
  size: import_tokens33.tokens.extensions.breadcrumb.separatorSize,
@@ -5709,7 +5709,7 @@ function DsBreadcrumb({
5709
5709
  }
5710
5710
  );
5711
5711
  }
5712
- function DsPagination({
5712
+ function KjunPagination({
5713
5713
  currentPage,
5714
5714
  page,
5715
5715
  totalPages,
@@ -5751,7 +5751,7 @@ function DsPagination({
5751
5751
  };
5752
5752
  const arrowSize = (_b = Object.keys(import_tokens33.tokens.button.iconSizes).find((size) => import_tokens33.tokens.button.iconSizes[size] === import_tokens33.tokens.extensions.pagination.iconSize)) != null ? _b : "sm";
5753
5753
  const button = (target, label, icon) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5754
- DsButton,
5754
+ KjunButton,
5755
5755
  {
5756
5756
  style: pageButtonStyle,
5757
5757
  size: arrowSize,
@@ -5796,7 +5796,7 @@ function DsPagination({
5796
5796
  },
5797
5797
  children: [
5798
5798
  showSizeSelector && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_native38.View, { style: { minWidth: import_tokens33.tokens.extensions.pagination.selectorMinimumWidth }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5799
- DsSelect,
5799
+ KjunSelect,
5800
5800
  {
5801
5801
  size: "sm",
5802
5802
  ariaLabel: "\uD398\uC774\uC9C0\uB2F9 \uD56D\uBAA9 \uC218",
@@ -5821,7 +5821,7 @@ function DsPagination({
5821
5821
  totalPages
5822
5822
  ] }) : pages.map(
5823
5823
  (n, i) => typeof n === "string" ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(KText, { children: "..." }, "dots" + i) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
5824
- DsButton,
5824
+ KjunButton,
5825
5825
  {
5826
5826
  style: pageButtonStyle,
5827
5827
  size: "sm",
@@ -5849,7 +5849,7 @@ var import_tokens34 = require("@kjun-ui/tokens");
5849
5849
  var import_react49 = require("react");
5850
5850
  var import_react_native39 = require("react-native");
5851
5851
  var import_jsx_runtime36 = require("react/jsx-runtime");
5852
- function DsIconToggle({
5852
+ function KjunIconToggle({
5853
5853
  active = false,
5854
5854
  activeIcon,
5855
5855
  inactiveIcon,
@@ -5867,7 +5867,7 @@ function DsIconToggle({
5867
5867
  const { colors } = useKjunStyles();
5868
5868
  const navigation = (0, import_react49.useContext)(TopNavigationContext);
5869
5869
  const box = navigation ? navigation.controlSize : size === "xs" ? import_tokens34.tokens.extensions.iconToggle.compactSize : import_tokens34.tokens.extensions.iconToggle.sizes[size];
5870
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DsTooltip, { content: disabled || loading ? "" : tooltip != null ? tooltip : ariaLabel, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5870
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(KjunTooltip, { content: disabled || loading ? "" : tooltip != null ? tooltip : ariaLabel, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5871
5871
  AccessiblePressable,
5872
5872
  {
5873
5873
  accessibilityRole: "button",
@@ -5904,8 +5904,8 @@ function DsIconToggle({
5904
5904
  }),
5905
5905
  children: ({ pressed, hovered }) => {
5906
5906
  var _a;
5907
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_native39.View, { style: { width: box, height: box, alignItems: "center", justifyContent: "center", borderRadius: import_tokens34.tokens.extensions.iconToggle.radii[size], backgroundColor: !disabled && !loading && (pressed || hovered) ? colors.hover : "transparent" }, children: loading ? navigation ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DsIcon, { name: "loader-2", spin: true, size: navigation.iconSize }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DsSpinner, { size: "sm" }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5908
- DsIcon,
5907
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_native39.View, { style: { width: box, height: box, alignItems: "center", justifyContent: "center", borderRadius: import_tokens34.tokens.extensions.iconToggle.radii[size], backgroundColor: !disabled && !loading && (pressed || hovered) ? colors.hover : "transparent" }, children: loading ? navigation ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(KjunIcon, { name: "loader-2", spin: true, size: navigation.iconSize }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(KjunSpinner, { size: "sm" }) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5908
+ KjunIcon,
5909
5909
  {
5910
5910
  name: active ? activeIcon : inactiveIcon || activeIcon,
5911
5911
  filled: active,
@@ -5917,7 +5917,7 @@ function DsIconToggle({
5917
5917
  }
5918
5918
  ) });
5919
5919
  }
5920
- function DsCopyButton({
5920
+ function KjunCopyButton({
5921
5921
  value,
5922
5922
  ariaLabel,
5923
5923
  text,
@@ -5982,7 +5982,7 @@ function DsCopyButton({
5982
5982
  }),
5983
5983
  children: [
5984
5984
  /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
5985
- DsIcon,
5985
+ KjunIcon,
5986
5986
  {
5987
5987
  name: copied ? "check" : "copy",
5988
5988
  size: import_tokens34.tokens.button.iconSizes[size],
@@ -6003,7 +6003,7 @@ function DsCopyButton({
6003
6003
  }
6004
6004
  ) });
6005
6005
  }
6006
- function DsRefreshButton({
6006
+ function KjunRefreshButton({
6007
6007
  targetName = "",
6008
6008
  mode = "icon",
6009
6009
  text = "\uC0C8\uB85C\uACE0\uCE68",
@@ -6020,8 +6020,8 @@ function DsRefreshButton({
6020
6020
  const reduced = useReducedMotion();
6021
6021
  const label = ariaLabel || [targetName, "\uC0C8\uB85C\uACE0\uCE68"].filter(Boolean).join(" ");
6022
6022
  const hint = tooltip != null ? tooltip : mode === "icon" ? label : "";
6023
- const button = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DsTooltip, { content: props.disabled || props.loading ? "" : hint, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
6024
- DsButton,
6023
+ const button = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(KjunTooltip, { content: props.disabled || props.loading ? "" : hint, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
6024
+ KjunButton,
6025
6025
  {
6026
6026
  ...props,
6027
6027
  size,
@@ -6043,14 +6043,14 @@ function safeExternalUrl(href) {
6043
6043
  return "";
6044
6044
  }
6045
6045
  }
6046
- function DsExternalLink({
6046
+ function KjunExternalLink({
6047
6047
  href = "",
6048
6048
  mode = "text",
6049
6049
  label,
6050
6050
  children,
6051
6051
  openUrl
6052
6052
  }) {
6053
- const { colors } = useKjunStyles(), url = safeExternalUrl(href), name = label || (mode === "icon" ? "\uC678\uBD80 \uB9C1\uD06C" : void 0), body = mode === "icon" ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DsIcon, { name: "external-link", color: colors.text }) : content(children);
6053
+ const { colors } = useKjunStyles(), url = safeExternalUrl(href), name = label || (mode === "icon" ? "\uC678\uBD80 \uB9C1\uD06C" : void 0), body = mode === "icon" ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(KjunIcon, { name: "external-link", color: colors.text }) : content(children);
6054
6054
  return url ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
6055
6055
  AccessiblePressable,
6056
6056
  {
@@ -6062,13 +6062,13 @@ function DsExternalLink({
6062
6062
  // Like Web, text links show the new-window cue after the text.
6063
6063
  /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_native39.View, { style: { flexDirection: "row", alignItems: "center", gap: import_tokens34.tokens.dimension.value4 }, children: [
6064
6064
  body,
6065
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(DsIcon, { name: "external-link", size: import_tokens34.tokens.iconSizes.small, color: colors.text })
6065
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(KjunIcon, { name: "external-link", size: import_tokens34.tokens.iconSizes.small, color: colors.text })
6066
6066
  ] })
6067
6067
  ) : body
6068
6068
  }
6069
6069
  ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_native39.View, { children: body });
6070
6070
  }
6071
- function DsScrollFade({ children }) {
6071
+ function KjunScrollFade({ children }) {
6072
6072
  return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
6073
6073
  import_react_native39.ScrollView,
6074
6074
  {
@@ -6095,7 +6095,7 @@ function useQueryDisplay(props) {
6095
6095
  }
6096
6096
  return (0, import_tokens35.queryDisplayStatus)(next, props);
6097
6097
  }
6098
- function DsDataState({
6098
+ function KjunDataState({
6099
6099
  preserveContent = false,
6100
6100
  refreshing = false,
6101
6101
  refreshError,
@@ -6144,7 +6144,7 @@ function DsDataState({
6144
6144
  backgroundColor: colors.surface
6145
6145
  },
6146
6146
  children: [
6147
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsSpinner, { size: "xs" }),
6147
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunSpinner, { size: "xs" }),
6148
6148
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KText, { style: { ...typeStyle("caption"), color: colors.textTertiary, flexShrink: 1, minWidth: 0 }, children: refreshingText })
6149
6149
  ]
6150
6150
  }
@@ -6154,12 +6154,12 @@ function DsDataState({
6154
6154
  {
6155
6155
  accessibilityLabel: loadingText,
6156
6156
  style: { paddingVertical: loadingPadding === "none" ? 0 : padding },
6157
- children: loadingContent || (skeleton ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { gap: import_tokens35.tokens.dimension.value12 }, children: Array.from({ length: skeletonCount }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsSkeleton, { type: skeletonType }, i)) }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_native40.View, { style: { alignItems: "center", gap: import_tokens35.tokens.dimension.value12 }, children: [
6158
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsSpinner, { size: "md" }),
6157
+ children: loadingContent || (skeleton ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { gap: import_tokens35.tokens.dimension.value12 }, children: Array.from({ length: skeletonCount }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunSkeleton, { type: skeletonType }, i)) }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_native40.View, { style: { alignItems: "center", gap: import_tokens35.tokens.dimension.value12 }, children: [
6158
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunSpinner, { size: "md" }),
6159
6159
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KText, { style: { ...typeStyle("body"), color: colors.textSecondary, textAlign: "center", maxWidth: "100%" }, children: loadingText })
6160
6160
  ] }))
6161
6161
  }
6162
- ) : blockingError ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { paddingVertical: padding }, children: errorContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsAlert, { type: "danger", title: "\uC624\uB958 \uBC1C\uC0DD", actions: onRetry && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsButton, { variant: "secondary", onPress: onRetry, children: retryText }), children: query.error }) }) }) : empty ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataStateContentContext.Provider, { value: "empty", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { paddingVertical: padding }, children: emptyContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsEmpty, { text: emptyText, icon: emptyIcon, children: emptyActionText && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsButton, { onPress: onEmptyAction, children: emptyActionText }) }) }) }) : null,
6162
+ ) : blockingError ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { paddingVertical: padding }, children: errorContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunAlert, { type: "danger", title: "\uC624\uB958 \uBC1C\uC0DD", actions: onRetry && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunButton, { variant: "secondary", onPress: onRetry, children: retryText }), children: query.error }) }) }) : empty ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataStateContentContext.Provider, { value: "empty", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { paddingVertical: padding }, children: emptyContent || /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunEmpty, { text: emptyText, icon: emptyIcon, children: emptyActionText && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunButton, { onPress: onEmptyAction, children: emptyActionText }) }) }) }) : null,
6163
6163
  (!concealed || preserveContent && state.hasQueryResult) && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
6164
6164
  import_react_native40.View,
6165
6165
  {
@@ -6178,7 +6178,7 @@ function DsDataState({
6178
6178
  },
6179
6179
  "content"
6180
6180
  ),
6181
- visibleRefreshError && !state.initialLoading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { marginTop: import_tokens35.tokens.dimension.value12 }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsAlert, { type: "warning", size: "sm", actions: onRetry && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DsButton, { variant: "secondary", onPress: onRetry, children: retryText }), children: `${visibleRefreshError} \xB7 \uC774\uC804 \uC870\uD68C \uACB0\uACFC\uB97C \uD45C\uC2DC\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.` }) }) })
6181
+ visibleRefreshError && !state.initialLoading && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_native40.View, { style: { marginTop: import_tokens35.tokens.dimension.value12 }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunAlert, { type: "warning", size: "sm", actions: onRetry && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KjunButton, { variant: "secondary", onPress: onRetry, children: retryText }), children: `${visibleRefreshError} \xB7 \uC774\uC804 \uC870\uD68C \uACB0\uACFC\uB97C \uD45C\uC2DC\uD558\uACE0 \uC788\uC2B5\uB2C8\uB2E4.` }) }) })
6182
6182
  ]
6183
6183
  }
6184
6184
  );
@@ -6187,7 +6187,7 @@ function BoundaryDescription() {
6187
6187
  const { colors } = useKjunStyles();
6188
6188
  return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(KText, { style: { ...typeStyle({ ...import_tokens35.tokens.typography.caption, fontSizePx: import_tokens35.tokens.extensions.state.descriptionSize }), color: colors.textSecondary, textAlign: "center" }, children: "\uB2E4\uC2DC \uC2DC\uB3C4\uD558\uBA74 \uBB38\uC81C\uAC00 \uD574\uACB0\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4." });
6189
6189
  }
6190
- var DsErrorBoundary = class extends import_react50.Component {
6190
+ var KjunErrorBoundary = class extends import_react50.Component {
6191
6191
  constructor() {
6192
6192
  super(...arguments);
6193
6193
  this.state = { error: false };
@@ -6215,7 +6215,7 @@ var DsErrorBoundary = class extends import_react50.Component {
6215
6215
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(BoundaryDescription, {})
6216
6216
  ] }),
6217
6217
  /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
6218
- DsButton,
6218
+ KjunButton,
6219
6219
  {
6220
6220
  style: { alignSelf: "center" },
6221
6221
  onPress: () => {
@@ -6274,28 +6274,28 @@ var marketRowStyle = { minHeight: marketGeometry.rowHeight, flexDirection: "row"
6274
6274
 
6275
6275
  // packages/native/src/market-skeleton.tsx
6276
6276
  var import_jsx_runtime38 = require("react/jsx-runtime");
6277
- function DsMarketTableSkeleton({ columns = [], rows = 8, showActions = false }) {
6277
+ function KjunMarketTableSkeleton({ columns = [], rows = 8, showActions = false }) {
6278
6278
  const { colors } = useKjunStyles();
6279
6279
  const cols = normalizeMarketColumns(columns), layout = useMarketLayout(cols, showActions);
6280
6280
  const actions = { width: marketGeometry.actionsWidth, paddingVertical: import_tokens38.tokens.dimension.value12, paddingHorizontal: import_tokens38.tokens.dimension.value4, justifyContent: "center", alignItems: "center" };
6281
6281
  return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.ScrollView, { horizontal: true, onLayout: layout.onLayout, accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native41.View, { style: { width: layout.width }, children: [
6282
6282
  /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native41.View, { style: { ...marketHeaderStyle, borderBottomColor: colors.border }, children: [
6283
- showActions && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: actions, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(DsSkeleton, { type: "block", width: import_tokens38.tokens.extensions.marketTable.actionSkeletonWidth, height: import_tokens38.tokens.extensions.marketTable.headerSkeletonHeight }) }),
6283
+ showActions && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: actions, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(KjunSkeleton, { type: "block", width: import_tokens38.tokens.extensions.marketTable.actionSkeletonWidth, height: import_tokens38.tokens.extensions.marketTable.headerSkeletonHeight }) }),
6284
6284
  cols.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: { width: layout.widths[i], padding: import_tokens38.tokens.dimension.value12, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(KText, { style: { ...typeStyle("meta"), color: colors.textTertiary, textAlign: col.align }, children: col.label }) }, col.key || i))
6285
6285
  ] }),
6286
6286
  Array.from({ length: Math.max(0, rows) }, (_, row) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native41.View, { style: { ...marketRowStyle, borderBottomColor: colors.border }, children: [
6287
- showActions && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: actions, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(DsSkeleton, { type: "block", width: import_tokens38.tokens.extensions.marketTable.actionSkeletonWidth, height: import_tokens38.tokens.extensions.financial.priceSkeletonHeight }) }),
6287
+ showActions && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: actions, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(KjunSkeleton, { type: "block", width: import_tokens38.tokens.extensions.marketTable.actionSkeletonWidth, height: import_tokens38.tokens.extensions.financial.priceSkeletonHeight }) }),
6288
6288
  cols.map((col, i) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: { width: layout.widths[i], paddingVertical: import_tokens38.tokens.dimension.value14, paddingHorizontal: import_tokens38.tokens.dimension.value12, justifyContent: "center", alignItems: isMarketIdentity(col.key) ? void 0 : col.align === "right" ? "flex-end" : col.align === "center" ? "center" : "flex-start" }, children: isMarketIdentity(col.key) ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_native41.View, { style: { gap: import_tokens38.tokens.dimension.value2 }, children: [
6289
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: { height: import_tokens38.tokens.typography.body.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(DsSkeleton, { type: "block", width: "80%", height: import_tokens38.tokens.extensions.skeleton.lineHeights.md }) }),
6290
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: { height: import_tokens38.tokens.typography.caption.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(DsSkeleton, { type: "block", width: "60%", height: import_tokens38.tokens.extensions.skeleton.lineHeights.sm }) })
6291
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(DsSkeleton, { type: "block", width: import_tokens38.tokens.extensions.financial.priceSkeletonWidth, height: import_tokens38.tokens.extensions.financial.priceSkeletonHeight }) }, col.key || i))
6289
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: { height: import_tokens38.tokens.typography.body.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(KjunSkeleton, { type: "block", width: "80%", height: import_tokens38.tokens.extensions.skeleton.lineHeights.md }) }),
6290
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_native41.View, { style: { height: import_tokens38.tokens.typography.caption.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(KjunSkeleton, { type: "block", width: "60%", height: import_tokens38.tokens.extensions.skeleton.lineHeights.sm }) })
6291
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(KjunSkeleton, { type: "block", width: import_tokens38.tokens.extensions.financial.priceSkeletonWidth, height: import_tokens38.tokens.extensions.financial.priceSkeletonHeight }) }, col.key || i))
6292
6292
  ] }, row))
6293
6293
  ] }) });
6294
6294
  }
6295
6295
 
6296
6296
  // packages/native/src/skeletons.tsx
6297
6297
  var import_jsx_runtime39 = require("react/jsx-runtime");
6298
- function DsListSkeleton({
6298
+ function KjunListSkeleton({
6299
6299
  rows = 8,
6300
6300
  variant = "market",
6301
6301
  avatar = true,
@@ -6325,21 +6325,21 @@ function DsListSkeleton({
6325
6325
  borderBottomColor: colors.border
6326
6326
  },
6327
6327
  children: [
6328
- avatar && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DsSkeleton, { type: "avatar", width: avatarSize, height: avatarSize }),
6328
+ avatar && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KjunSkeleton, { type: "avatar", width: avatarSize, height: avatarSize }),
6329
6329
  /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native42.View, { style: { flex: 1, minWidth: 0, gap: market ? import_tokens39.tokens.dimension.value2 : import_tokens39.tokens.extensions.skeleton.detailGap }, children: [
6330
6330
  slot(0, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
6331
- DsSkeleton,
6331
+ KjunSkeleton,
6332
6332
  {
6333
6333
  type: "block",
6334
6334
  height: import_tokens39.tokens.extensions.skeleton.lineHeights.md,
6335
6335
  width: i % 2 ? "80%" : "65%"
6336
6336
  }
6337
6337
  )),
6338
- slot(1, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DsSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.lineHeights.sm, width: "50%" }))
6338
+ slot(1, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KjunSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.lineHeights.sm, width: "50%" }))
6339
6339
  ] }),
6340
6340
  quote && /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_native42.View, { style: { alignItems: "flex-end", gap: market ? import_tokens39.tokens.dimension.value2 : import_tokens39.tokens.extensions.skeleton.detailGap }, children: [
6341
- slot(0, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DsSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.quoteHeight, width: import_tokens39.tokens.extensions.skeleton.quoteWidth })),
6342
- slot(1, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DsSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.lineHeights.sm, width: import_tokens39.tokens.extensions.skeleton.detailWidth }))
6341
+ slot(0, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KjunSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.quoteHeight, width: import_tokens39.tokens.extensions.skeleton.quoteWidth })),
6342
+ slot(1, /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KjunSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.lineHeights.sm, width: import_tokens39.tokens.extensions.skeleton.detailWidth }))
6343
6343
  ] })
6344
6344
  ]
6345
6345
  },
@@ -6348,7 +6348,7 @@ function DsListSkeleton({
6348
6348
  }
6349
6349
  );
6350
6350
  }
6351
- function DsFormSkeleton({
6351
+ function KjunFormSkeleton({
6352
6352
  fields = ["", "", "", ""],
6353
6353
  columns = 1,
6354
6354
  multiline = false,
@@ -6379,10 +6379,10 @@ function DsFormSkeleton({
6379
6379
  children: [
6380
6380
  field ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KText, { style: { color: colors.text, ...typeStyle("label") }, children: typeof field === "string" ? field : field.label }) : (
6381
6381
  // The bar sits in a label-line slot so the field starts where the real input will.
6382
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native42.View, { style: { height: typeStyle("label").lineHeight, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DsSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.formLabelHeight, width: import_tokens39.tokens.extensions.skeleton.formLabelWidth }) })
6382
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native42.View, { style: { height: typeStyle("label").lineHeight, justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KjunSkeleton, { type: "block", height: import_tokens39.tokens.extensions.skeleton.formLabelHeight, width: import_tokens39.tokens.extensions.skeleton.formLabelWidth }) })
6383
6383
  ),
6384
6384
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_native42.View, { style: { borderRadius: import_tokens39.tokens.input[size].radius, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
6385
- DsSkeleton,
6385
+ KjunSkeleton,
6386
6386
  {
6387
6387
  type: "block",
6388
6388
  height: typeof field === "object" && field.height != null ? field.height : multiline ? import_tokens39.tokens.input[size].lineHeight * 3 + import_tokens39.tokens.input[size].textareaPaddingY * 2 + 2 * import_tokens39.tokens.border.controlWidth : import_tokens39.tokens.input[size].height
@@ -6395,7 +6395,7 @@ function DsFormSkeleton({
6395
6395
  }
6396
6396
  );
6397
6397
  }
6398
- function DsChartSkeleton({
6398
+ function KjunChartSkeleton({
6399
6399
  loadingText = "\uCC28\uD2B8\uB97C \uBD88\uB7EC\uC624\uB294 \uC911",
6400
6400
  kind = "line",
6401
6401
  height = import_tokens39.tokens.extensions.chartSkeleton.height
@@ -6449,7 +6449,7 @@ function DsChartSkeleton({
6449
6449
  alignItems: "center",
6450
6450
  justifyContent: "center"
6451
6451
  },
6452
- children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(DsSkeleton, { type: "block", width: import_tokens39.tokens.extensions.chartSkeleton.donutLabelWidth, height: import_tokens39.tokens.extensions.chartSkeleton.donutLabelHeight })
6452
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(KjunSkeleton, { type: "block", width: import_tokens39.tokens.extensions.chartSkeleton.donutLabelWidth, height: import_tokens39.tokens.extensions.chartSkeleton.donutLabelHeight })
6453
6453
  }
6454
6454
  ) : /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
6455
6455
  import_react_native_svg5.default,
@@ -6619,7 +6619,7 @@ function useCountUp(value, animated, fromPrevious) {
6619
6619
  return useNumberMotion(value, animated, fromPrevious, useReducedMotion());
6620
6620
  }
6621
6621
  var MarketQuoteTypeContext = (0, import_react54.createContext)(null);
6622
- function DsAnimatedNumber({
6622
+ function KjunAnimatedNumber({
6623
6623
  value,
6624
6624
  decimals = 0,
6625
6625
  prefix = "",
@@ -6654,7 +6654,7 @@ function DsAnimatedNumber({
6654
6654
  }
6655
6655
  );
6656
6656
  }
6657
- function DsFreshness({
6657
+ function KjunFreshness({
6658
6658
  stale = false,
6659
6659
  source,
6660
6660
  fetchedAt,
@@ -6662,14 +6662,14 @@ function DsFreshness({
6662
6662
  }) {
6663
6663
  const label = source === "close" ? "\uC885\uAC00" : "\uC9C0\uC5F0";
6664
6664
  return stale ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
6665
- DsTooltip,
6665
+ KjunTooltip,
6666
6666
  {
6667
6667
  content: (source === "close" ? "\uC2E4\uC2DC\uAC04 \uC2DC\uC138 \uC5C6\uC74C \xB7 \uCD5C\uADFC \uC885\uAC00 \uD45C\uC2DC" : "\uC2E4\uC2DC\uAC04 \uC2DC\uC138 \uC9C0\uC5F0") + (fetchedAt ? " \xB7 " + ((formatter == null ? void 0 : formatter(fetchedAt)) || formatRelativeTime(fetchedAt)) : ""),
6668
- children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(AccessiblePressable, { accessibilityLabel: label, focusRingRadius: import_tokens41.tokens.extensions.badge.radius, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(DsBadge, { variant: "warning", size: "xs", children: label }) })
6668
+ children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(AccessiblePressable, { accessibilityLabel: label, focusRingRadius: import_tokens41.tokens.extensions.badge.radius, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(KjunBadge, { variant: "warning", size: "xs", children: label }) })
6669
6669
  }
6670
6670
  ) : null;
6671
6671
  }
6672
- function DsPriceCell({
6672
+ function KjunPriceCell({
6673
6673
  value,
6674
6674
  formatter,
6675
6675
  stale = false,
@@ -6679,13 +6679,13 @@ function DsPriceCell({
6679
6679
  fromPrevious = true
6680
6680
  }) {
6681
6681
  const { colors } = useKjunStyles(), quoteType = (0, import_react54.useContext)(MarketQuoteTypeContext);
6682
- return value == null ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(DsSkeleton, { type: "block", height: import_tokens41.tokens.extensions.financial.priceSkeletonHeight, width: import_tokens41.tokens.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native43.View, { style: { flexDirection: "row", alignItems: "center", gap: import_tokens41.tokens.extensions.financial.affixGap }, children: [
6682
+ return value == null ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(KjunSkeleton, { type: "block", height: import_tokens41.tokens.extensions.financial.priceSkeletonHeight, width: import_tokens41.tokens.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_react_native43.View, { style: { flexDirection: "row", alignItems: "center", gap: import_tokens41.tokens.extensions.financial.affixGap }, children: [
6683
6683
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
6684
6684
  import_react_native43.View,
6685
6685
  {
6686
6686
  style: quoteType ? void 0 : { paddingVertical: import_tokens41.tokens.extensions.financial.pillPaddingY, paddingHorizontal: import_tokens41.tokens.extensions.financial.pillPaddingX, borderRadius: import_tokens41.tokens.radius.radius9999 },
6687
6687
  children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
6688
- DsAnimatedNumber,
6688
+ KjunAnimatedNumber,
6689
6689
  {
6690
6690
  value,
6691
6691
  formatter,
@@ -6695,10 +6695,10 @@ function DsPriceCell({
6695
6695
  )
6696
6696
  }
6697
6697
  ),
6698
- showFreshness && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native43.View, { style: { alignSelf: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(DsFreshness, { stale, source, fetchedAt }) })
6698
+ showFreshness && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native43.View, { style: { alignSelf: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(KjunFreshness, { stale, source, fetchedAt }) })
6699
6699
  ] });
6700
6700
  }
6701
- function DsSignedValue({
6701
+ function KjunSignedValue({
6702
6702
  value,
6703
6703
  format: kind = "number",
6704
6704
  isRaw = false,
@@ -6729,7 +6729,7 @@ function DsSignedValue({
6729
6729
  backgroundColor: tone === "pill" && !stale && !loading && n !== null ? domainColor(domainColors, role + "Bg") : void 0
6730
6730
  },
6731
6731
  children: [
6732
- loading ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(DsSkeleton, { type: "block", width: import_tokens41.tokens.extensions.financial.signedSkeletonWidth, height: import_tokens41.tokens.extensions.financial.signedSkeletonHeight }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
6732
+ loading ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(KjunSkeleton, { type: "block", width: import_tokens41.tokens.extensions.financial.signedSkeletonWidth, height: import_tokens41.tokens.extensions.financial.signedSkeletonHeight }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
6733
6733
  KText,
6734
6734
  {
6735
6735
  style: {
@@ -6743,7 +6743,7 @@ function DsSignedValue({
6743
6743
  children: display
6744
6744
  }
6745
6745
  ),
6746
- !loading && showFreshness && stale && n !== null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native43.View, { style: { alignSelf: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(DsFreshness, { stale: true }) })
6746
+ !loading && showFreshness && stale && n !== null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_react_native43.View, { style: { alignSelf: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(KjunFreshness, { stale: true }) })
6747
6747
  ]
6748
6748
  }
6749
6749
  );
@@ -6751,7 +6751,7 @@ function DsSignedValue({
6751
6751
 
6752
6752
  // packages/native/src/financial-display.tsx
6753
6753
  var import_jsx_runtime41 = require("react/jsx-runtime");
6754
- function DsDeviation({
6754
+ function KjunDeviation({
6755
6755
  value,
6756
6756
  variant = "pill",
6757
6757
  signalThreshold = 1,
@@ -6774,7 +6774,7 @@ function DsDeviation({
6774
6774
  },
6775
6775
  children: [
6776
6776
  /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
6777
- DsBadge,
6777
+ KjunBadge,
6778
6778
  {
6779
6779
  variant: neutral ? "secondary" : n > 0 ? "price-up" : "price-down",
6780
6780
  size: "sm",
@@ -6790,7 +6790,7 @@ function DsDeviation({
6790
6790
  }
6791
6791
  ),
6792
6792
  !signal && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native44.View, { style: { width: import_tokens42.tokens.extensions.financial.warningIconSize, flexShrink: 0 } }),
6793
- signal && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native44.View, { style: { alignSelf: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DsTooltip, { content: `\uAD34\uB9AC\uC728 ${signalThreshold}% \uCD08\uACFC \u2014 \uCC28\uC775\uAC70\uB798 \uAE30\uD68C \uAC00\uB2A5`, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
6793
+ signal && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_jsx_runtime41.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native44.View, { style: { alignSelf: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(KjunTooltip, { content: `\uAD34\uB9AC\uC728 ${signalThreshold}% \uCD08\uACFC \u2014 \uCC28\uC775\uAC70\uB798 \uAE30\uD68C \uAC00\uB2A5`, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
6794
6794
  AccessiblePressable,
6795
6795
  {
6796
6796
  accessibilityRole: "image",
@@ -6804,7 +6804,7 @@ function DsDeviation({
6804
6804
  alignItems: "center",
6805
6805
  justifyContent: "center"
6806
6806
  },
6807
- children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DsIcon, { name: "alert-triangle", size: import_tokens42.tokens.extensions.financial.warningIconSize, color: colors.warning })
6807
+ children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(KjunIcon, { name: "alert-triangle", size: import_tokens42.tokens.extensions.financial.warningIconSize, color: colors.warning })
6808
6808
  }
6809
6809
  ) }) }) })
6810
6810
  ]
@@ -6852,7 +6852,7 @@ function DsDeviation({
6852
6852
  }
6853
6853
  );
6854
6854
  }
6855
- function DsHeatmapCell({
6855
+ function KjunHeatmapCell({
6856
6856
  value = 0,
6857
6857
  min = 0,
6858
6858
  max = 1,
@@ -6896,7 +6896,7 @@ function DsHeatmapCell({
6896
6896
  }
6897
6897
  );
6898
6898
  }
6899
- function DsProgressCell({
6899
+ function KjunProgressCell({
6900
6900
  value = 0,
6901
6901
  max = 100,
6902
6902
  showLabel = true,
@@ -6959,7 +6959,7 @@ function DsProgressCell({
6959
6959
  }
6960
6960
  );
6961
6961
  }
6962
- function DsCollectionMark({
6962
+ function KjunCollectionMark({
6963
6963
  kind,
6964
6964
  active = false,
6965
6965
  size = "md"
@@ -6967,7 +6967,7 @@ function DsCollectionMark({
6967
6967
  const { colors, domainColors } = useKjunStyles();
6968
6968
  const box = import_tokens42.tokens.extensions.financial.markSizes[size], glyph = kind === "interest" ? import_tokens42.tokens.extensions.financial.heartMarkSizes[size] : box;
6969
6969
  return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_react_native44.View, { style: { width: box, height: box, alignItems: "center", justifyContent: "center", overflow: "visible" }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
6970
- DsIcon,
6970
+ KjunIcon,
6971
6971
  {
6972
6972
  name: kind === "favorite" ? "star" : "heart",
6973
6973
  filled: active,
@@ -6986,15 +6986,15 @@ var executionStates = {
6986
6986
  completed_with_errors: ["warning", "\uC644\uB8CC (\uC624\uB958)"],
6987
6987
  failed: ["danger", "\uC2E4\uD328"]
6988
6988
  };
6989
- function DsExecutionStatusBadge({
6989
+ function KjunExecutionStatusBadge({
6990
6990
  status,
6991
6991
  label,
6992
6992
  size = "md"
6993
6993
  }) {
6994
6994
  const state = status ? executionStates[status] : void 0;
6995
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(DsBadge, { variant: (state == null ? void 0 : state[0]) || "secondary", size, dot: status === "running", children: label || (state == null ? void 0 : state[1]) || (status ? "\uC54C \uC218 \uC5C6\uC74C" : "\uC2E4\uD589 \uC774\uB825 \uC5C6\uC74C") });
6995
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(KjunBadge, { variant: (state == null ? void 0 : state[0]) || "secondary", size, dot: status === "running", children: label || (state == null ? void 0 : state[1]) || (status ? "\uC54C \uC218 \uC5C6\uC74C" : "\uC2E4\uD589 \uC774\uB825 \uC5C6\uC74C") });
6996
6996
  }
6997
- function DsSparkline({
6997
+ function KjunSparkline({
6998
6998
  data = [],
6999
6999
  width = import_tokens42.tokens.extensions.financial.sparklineWidth,
7000
7000
  height = import_tokens42.tokens.extensions.financial.sparklineHeight,
@@ -7005,7 +7005,7 @@ function DsSparkline({
7005
7005
  stretch = false,
7006
7006
  ariaLabel
7007
7007
  }) {
7008
- const { colors, domainColors } = useKjunStyles(), id = (0, import_react55.useId)().replace(/:/g, ""), values = data.filter(Number.isFinite), min = Math.min(...values), max = Math.max(...values), range = max - min || 1, points = values.map(
7008
+ const { colors, domainColors } = useKjunStyles(), id = "kjun-" + (0, import_react55.useId)().replace(/:/g, ""), values = data.filter(Number.isFinite), min = Math.min(...values), max = Math.max(...values), range = max - min || 1, points = values.map(
7009
7009
  (v, i) => `${2 + i / Math.max(1, values.length - 1) * (width - 4)},${2 + height - 4 - (v - min) / range * (height - 4)}`
7010
7010
  ).join(" "), change = values.length > 1 ? values[values.length - 1] - values[0] : 0, line = color || (change === 0 ? colors.textTertiary : semantic === "status" ? change > 0 ? colors.success : colors.danger : domainColor(domainColors, change > 0 ? "priceUp" : "priceDown"));
7011
7011
  return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
@@ -7052,12 +7052,36 @@ function DsSparkline({
7052
7052
  // shared/package-runtime/table.ts
7053
7053
  var import_tokens43 = require("@kjun-ui/tokens");
7054
7054
  var import_react56 = require("react");
7055
+
7056
+ // shared/package-runtime/table-model.ts
7055
7057
  function getValue(row, key) {
7056
7058
  return key.split(".").reduce(
7057
7059
  (value, part) => value != null && typeof value === "object" ? value[part] : void 0,
7058
7060
  row
7059
7061
  );
7060
7062
  }
7063
+ function sortTableRows(data, sort, { sortable = true, sortMode = "client" }) {
7064
+ if (!sortable || sortMode === "server" || !sort.key) return data;
7065
+ return [...data].sort((a, b) => {
7066
+ const x = getValue(a, sort.key), y = getValue(b, sort.key);
7067
+ const order = x === y ? 0 : typeof x === "number" && typeof y === "number" ? x > y ? 1 : -1 : String(x) > String(y) ? 1 : -1;
7068
+ return sort.order === "asc" ? order : -order;
7069
+ });
7070
+ }
7071
+ var tableRowKey = (row, rowKey, index = 0) => {
7072
+ var _a;
7073
+ return (_a = getValue(row, rowKey)) != null ? _a : index;
7074
+ };
7075
+ function tableSelection(rows, selected, rowKey) {
7076
+ const isSelected = (row) => selected.some((r) => getValue(r, rowKey) === getValue(row, rowKey));
7077
+ const all = rows.length > 0 && rows.every(isSelected);
7078
+ return { isSelected, all, some: rows.some(isSelected) && !all };
7079
+ }
7080
+ var toggleSelectedRow = (selected, row, rowKey) => selected.some((r) => getValue(r, rowKey) === getValue(row, rowKey)) ? selected.filter((r) => getValue(r, rowKey) !== getValue(row, rowKey)) : [...selected, row];
7081
+ var toggleAllRows = (rows, all) => all ? [] : [...rows];
7082
+ var toggleExpandedRow = (expanded, id, single) => expanded.includes(id) ? expanded.filter((v) => v !== id) : [...single ? [] : expanded, id];
7083
+
7084
+ // shared/package-runtime/table.ts
7061
7085
  function useTableModel(props) {
7062
7086
  var _a;
7063
7087
  const {
@@ -7077,17 +7101,9 @@ function useTableModel(props) {
7077
7101
  }), [internalExpanded, setExpanded] = (0, import_react56.useState)([]), [search, setSearch] = (0, import_react56.useState)(""), timer = (0, import_react56.useRef)(void 0);
7078
7102
  (0, import_react56.useEffect)(() => () => clearTimeout(timer.current), []);
7079
7103
  const sort = props.sort === void 0 ? internalSort : (_a = props.sort) != null ? _a : { key: "", order: "asc" };
7080
- const rows = sortable && sortMode !== "server" && sort.key ? [...data].sort((a, b) => {
7081
- const x = getValue(a, sort.key), y = getValue(b, sort.key);
7082
- const order = x === y ? 0 : typeof x === "number" && typeof y === "number" ? x > y ? 1 : -1 : String(x) > String(y) ? 1 : -1;
7083
- return sort.order === "asc" ? order : -order;
7084
- }) : data;
7085
- const key = (row, index = 0) => {
7086
- var _a2;
7087
- return (_a2 = getValue(row, rowKey)) != null ? _a2 : index;
7088
- };
7089
- const selectedRow = (row) => selected.some((r) => getValue(r, rowKey) === getValue(row, rowKey));
7090
- const all = rows.length > 0 && rows.every(selectedRow), some = rows.some(selectedRow) && !all, expanded = expandedRows != null ? expandedRows : internalExpanded;
7104
+ const rows = sortTableRows(data, sort, { sortable, sortMode });
7105
+ const key = (row, index = 0) => tableRowKey(row, rowKey, index);
7106
+ const { isSelected: selectedRow, all, some } = tableSelection(rows, selected, rowKey), expanded = expandedRows != null ? expandedRows : internalExpanded;
7091
7107
  return {
7092
7108
  rows,
7093
7109
  key,
@@ -7112,14 +7128,10 @@ function useTableModel(props) {
7112
7128
  if (props.sort === void 0) setSort(next);
7113
7129
  (_a2 = props.onSortChange) == null ? void 0 : _a2.call(props, next);
7114
7130
  },
7115
- toggleRow: (row) => onSelectionChange == null ? void 0 : onSelectionChange(
7116
- selectedRow(row) ? selected.filter(
7117
- (r) => getValue(r, rowKey) !== getValue(row, rowKey)
7118
- ) : [...selected, row]
7119
- ),
7120
- toggleAll: () => onSelectionChange == null ? void 0 : onSelectionChange(all ? [] : [...rows]),
7131
+ toggleRow: (row) => onSelectionChange == null ? void 0 : onSelectionChange(toggleSelectedRow(selected, row, rowKey)),
7132
+ toggleAll: () => onSelectionChange == null ? void 0 : onSelectionChange(toggleAllRows(rows, all)),
7121
7133
  toggleExpand: (row, index) => {
7122
- const id = key(row, index), next = expanded.includes(id) ? expanded.filter((v) => v !== id) : [...expandSingle ? [] : expanded, id];
7134
+ const next = toggleExpandedRow(expanded, key(row, index), expandSingle);
7123
7135
  setExpanded(next);
7124
7136
  onExpandedRowsChange == null ? void 0 : onExpandedRowsChange(next);
7125
7137
  }
@@ -7206,9 +7218,9 @@ function TableToolbar({
7206
7218
  selected.length,
7207
7219
  "\uAC1C \uC120\uD0DD"
7208
7220
  ] }),
7209
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(DsButton, { size: "xs", variant: "ghost", onPress: toggleAll, children: "\uC804\uCCB4 \uC120\uD0DD" }),
7221
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(KjunButton, { size: "xs", variant: "ghost", onPress: toggleAll, children: "\uC804\uCCB4 \uC120\uD0DD" }),
7210
7222
  /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7211
- DsButton,
7223
+ KjunButton,
7212
7224
  {
7213
7225
  size: "xs",
7214
7226
  variant: "ghost",
@@ -7223,7 +7235,7 @@ function TableToolbar({
7223
7235
  (searchable || toolbar) && // Like Web: the search toolbar sits on the surface so the filled search field stands out from it.
7224
7236
  /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_react_native45.View, { style: { ...toolbarStyle, backgroundColor: colors.surface }, children: [
7225
7237
  searchable && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_native45.View, { style: { width: import_tokens44.tokens.table.searchWidth, maxWidth: "100%" }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
7226
- DsInput,
7238
+ KjunInput,
7227
7239
  {
7228
7240
  size: "sm",
7229
7241
  value: search,
@@ -7285,7 +7297,7 @@ function TableGrid({ initialLoading, skeletonRows, state, onRowClick, selectable
7285
7297
  },
7286
7298
  children: [
7287
7299
  selectable && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_native46.View, { style: { width: geometry2.actionColumnWidth, alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
7288
- DsCheckbox,
7300
+ KjunCheckbox,
7289
7301
  {
7290
7302
  size: "sm",
7291
7303
  value: state.all,
@@ -7324,7 +7336,7 @@ function TableGrid({ initialLoading, skeletonRows, state, onRowClick, selectable
7324
7336
  }
7325
7337
  ),
7326
7338
  sortable !== false && state.sort.key === col.key && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
7327
- DsIcon,
7339
+ KjunIcon,
7328
7340
  {
7329
7341
  name: state.sort.order === "asc" ? "sort-ascending" : "sort-descending",
7330
7342
  size: import_tokens45.tokens.table.sortIconSize,
@@ -7350,7 +7362,7 @@ function TableGrid({ initialLoading, skeletonRows, state, onRowClick, selectable
7350
7362
  paddingHorizontal: cellPadding.x
7351
7363
  },
7352
7364
  children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
7353
- DsSkeleton,
7365
+ KjunSkeleton,
7354
7366
  {
7355
7367
  type: "block",
7356
7368
  height: geometry2.skeletonHeight,
@@ -7466,7 +7478,7 @@ function TableCards({
7466
7478
  const { colors } = useKjunStyles();
7467
7479
  const { title, subtitle, badges, inline, sections, actions, columnsForSection } = layout;
7468
7480
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_react_native47.View, { style: { gap: import_tokens46.tokens.extensions.tableCard.gap, padding: import_tokens46.tokens.extensions.tableCard.listPadding }, children: [
7469
- initialLoading ? Array.from({ length: skeletonRows }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(DsSkeleton, { type: "card" }, i)) : state.rows.map((row, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
7481
+ initialLoading ? Array.from({ length: skeletonRows }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(KjunSkeleton, { type: "card" }, i)) : state.rows.map((row, i) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
7470
7482
  AccessiblePressable,
7471
7483
  {
7472
7484
  accessible: false,
@@ -7612,7 +7624,7 @@ function TableCards({
7612
7624
 
7613
7625
  // packages/native/src/table-view.tsx
7614
7626
  var import_jsx_runtime45 = require("react/jsx-runtime");
7615
- function DsTable(props) {
7627
+ function KjunTable(props) {
7616
7628
  const {
7617
7629
  skeletonRows = 8,
7618
7630
  emptyText = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",
@@ -7666,7 +7678,7 @@ function DsTable(props) {
7666
7678
  });
7667
7679
  };
7668
7680
  const checkbox = (row, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7669
- DsCheckbox,
7681
+ KjunCheckbox,
7670
7682
  {
7671
7683
  value: state.selectedRow(row),
7672
7684
  ariaLabel: `\uD589 \uC120\uD0DD ${i + 1}`,
@@ -7675,7 +7687,7 @@ function DsTable(props) {
7675
7687
  }
7676
7688
  );
7677
7689
  const expand = (row, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7678
- DsButton,
7690
+ KjunButton,
7679
7691
  {
7680
7692
  variant: "ghost",
7681
7693
  size: "xs",
@@ -7705,7 +7717,7 @@ function DsTable(props) {
7705
7717
  }
7706
7718
  ),
7707
7719
  /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
7708
- DsDataState,
7720
+ KjunDataState,
7709
7721
  {
7710
7722
  queryKey: props.queryKey,
7711
7723
  resultKey: query.usesQueryState ? query.hasCurrentResult ? props.queryKey : null : void 0,
@@ -7717,7 +7729,7 @@ function DsTable(props) {
7717
7729
  children: [
7718
7730
  card ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(TableCards, { ...{ initialLoading: query.initialLoading, skeletonRows, state, onRowClick, selectable, checkbox, cell, expandable, expand, renderExpand, emptyContent, emptyText, layout } }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(TableGrid, { ...{ initialLoading: query.initialLoading, skeletonRows, state, onRowClick, selectable, checkbox, cell, expandable, expand, renderExpand, emptyContent, emptyText, visible, maxHeight, stickyHeader, compact, striped, hoverable }, sortable: props.sortable }),
7719
7731
  pagination && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
7720
- DsPagination,
7732
+ KjunPagination,
7721
7733
  {
7722
7734
  currentPage: pagination.page,
7723
7735
  totalPages: Math.ceil(
@@ -7759,7 +7771,7 @@ var kpiFormat = (item, value = item.value) => {
7759
7771
  maximumFractionDigits: (_b = item.decimals) != null ? _b : 0
7760
7772
  }).format(item.semantic === "price" ? Math.abs(value) : value);
7761
7773
  };
7762
- function DsKpiHero(props) {
7774
+ function KjunKpiHero(props) {
7763
7775
  const {
7764
7776
  loading = false,
7765
7777
  label,
@@ -7838,7 +7850,7 @@ function DsKpiHero(props) {
7838
7850
  ),
7839
7851
  loading ? (
7840
7852
  // Placeholders fill each line's height, like Web's 1lh; the value width approximates Web's 7ch.
7841
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DsSkeleton, { type: "block", height: typeStyle(numberRole).lineHeight, width: font * 4.8 })
7853
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(KjunSkeleton, { type: "block", height: typeStyle(numberRole).lineHeight, width: font * 4.8 })
7842
7854
  ) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7843
7855
  KpiNumberLine,
7844
7856
  {
@@ -7848,7 +7860,7 @@ function DsKpiHero(props) {
7848
7860
  suffixGap: geometry2.suffixGap,
7849
7861
  style: { ...numeric, ...typeStyle(numberRole) },
7850
7862
  unitStyle,
7851
- children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DsAnimatedNumber, { value, decimals, animated, formatter, style: typeStyle(numberRole) })
7863
+ children: /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(KjunAnimatedNumber, { value, decimals, animated, formatter, style: typeStyle(numberRole) })
7852
7864
  }
7853
7865
  ),
7854
7866
  showDelta && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -7861,7 +7873,7 @@ function DsKpiHero(props) {
7861
7873
  alignItems: "baseline",
7862
7874
  gap: spec.deltaGap
7863
7875
  },
7864
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(DsSkeleton, { type: "block", height: typeStyle("numberMd").lineHeight, width: geometry2.deltaSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
7876
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(KjunSkeleton, { type: "block", height: typeStyle("numberMd").lineHeight, width: geometry2.deltaSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_jsx_runtime47.Fragment, { children: [
7865
7877
  deltaAbsolute !== null && delta(deltaAbsolute, "absolute", { ...numeric, color: direction(deltaAbsolute), ...typeStyle("numberMd") }),
7866
7878
  deltaPercent !== null && delta(deltaPercent, "percent", { ...numeric, color: direction(deltaPercent), ...typeStyle("numberMd"), opacity: 0.9 }),
7867
7879
  deltaDescription && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
@@ -7918,7 +7930,7 @@ function DsKpiHero(props) {
7918
7930
  }
7919
7931
  ),
7920
7932
  loading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7921
- DsSkeleton,
7933
+ KjunSkeleton,
7922
7934
  {
7923
7935
  type: "block",
7924
7936
  height: typeStyle("numberMd").lineHeight,
@@ -7937,7 +7949,7 @@ function DsKpiHero(props) {
7937
7949
  }
7938
7950
  ),
7939
7951
  item.desc && (loading ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
7940
- DsSkeleton,
7952
+ KjunSkeleton,
7941
7953
  {
7942
7954
  type: "block",
7943
7955
  width: geometry2.descriptionSkeletonWidth,
@@ -7970,7 +7982,7 @@ var import_tokens49 = require("@kjun-ui/tokens");
7970
7982
  var import_react58 = require("react");
7971
7983
  var import_react_native51 = require("react-native");
7972
7984
  var import_jsx_runtime48 = require("react/jsx-runtime");
7973
- function DsKpiRow({
7985
+ function KjunKpiRow({
7974
7986
  loading = false,
7975
7987
  items,
7976
7988
  size = "md",
@@ -8075,7 +8087,7 @@ function DsKpiRow({
8075
8087
  marginBottom: sub ? 0 : spec.labelMargin
8076
8088
  },
8077
8089
  children: [
8078
- busy && !item.label ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DsSkeleton, { type: "block", width: geometry2.labelSkeletonWidth, height: geometry2.labelSkeletonHeight }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(KText, { style: { minWidth: 0, flexShrink: 1, color: colors.textSecondary, ...typeStyle("caption") }, children: item.label }),
8090
+ busy && !item.label ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(KjunSkeleton, { type: "block", width: geometry2.labelSkeletonWidth, height: geometry2.labelSkeletonHeight }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(KText, { style: { minWidth: 0, flexShrink: 1, color: colors.textSecondary, ...typeStyle("caption") }, children: item.label }),
8079
8091
  !busy && item.badgePlacement !== "value" && badge(item)
8080
8092
  ]
8081
8093
  }
@@ -8104,7 +8116,7 @@ function DsKpiRow({
8104
8116
  }
8105
8117
  ),
8106
8118
  busy && !seg.separator ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8107
- DsSkeleton,
8119
+ KjunSkeleton,
8108
8120
  {
8109
8121
  type: "block",
8110
8122
  height: valueStyle.lineHeight,
@@ -8126,7 +8138,7 @@ function DsKpiRow({
8126
8138
  // Like Web's 1lh × 5ch: the placeholder fills the value line, and its width (set for the display
8127
8139
  // number) scales with the value's font so a text value gets a text-sized bar.
8128
8140
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8129
- DsSkeleton,
8141
+ KjunSkeleton,
8130
8142
  {
8131
8143
  type: "block",
8132
8144
  height: valueStyle.lineHeight,
@@ -8148,7 +8160,7 @@ function DsKpiRow({
8148
8160
  }
8149
8161
  ),
8150
8162
  item.animated && typeof item.value === "number" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8151
- DsAnimatedNumber,
8163
+ KjunAnimatedNumber,
8152
8164
  {
8153
8165
  fromPrevious: true,
8154
8166
  value: item.value,
@@ -8172,7 +8184,7 @@ function DsKpiRow({
8172
8184
  ]
8173
8185
  }
8174
8186
  ),
8175
- item.desc && (busy ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(DsSkeleton, { type: "block", height: typeStyle("caption").lineHeight, width: geometry2.descriptionSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8187
+ item.desc && (busy ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(KjunSkeleton, { type: "block", height: typeStyle("caption").lineHeight, width: geometry2.descriptionSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
8176
8188
  KText,
8177
8189
  {
8178
8190
  style: {
@@ -8295,8 +8307,8 @@ function MarketIdentity({
8295
8307
  children: label
8296
8308
  }
8297
8309
  ),
8298
- ((_f = props.interestKeys) == null ? void 0 : _f.has(id)) && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DsCollectionMark, { kind: "interest", size: "sm", active: true }),
8299
- ((_g = props.favoriteKeys) == null ? void 0 : _g.has(id)) && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(DsCollectionMark, { kind: "favorite", size: "sm", active: true }),
8310
+ ((_f = props.interestKeys) == null ? void 0 : _f.has(id)) && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(KjunCollectionMark, { kind: "interest", size: "sm", active: true }),
8311
+ ((_g = props.favoriteKeys) == null ? void 0 : _g.has(id)) && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(KjunCollectionMark, { kind: "favorite", size: "sm", active: true }),
8300
8312
  (_h = props.renderNameSuffix) == null ? void 0 : _h.call(props, row)
8301
8313
  ]
8302
8314
  }
@@ -8343,7 +8355,7 @@ function MarketFooter({
8343
8355
  } = props;
8344
8356
  return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
8345
8357
  pagination && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
8346
- DsPagination,
8358
+ KjunPagination,
8347
8359
  {
8348
8360
  currentPage: pagination.page,
8349
8361
  totalPages: Math.ceil(pagination.total / pagination.size),
@@ -8381,7 +8393,7 @@ function MarketFooter({
8381
8393
 
8382
8394
  // packages/native/src/market-cards.tsx
8383
8395
  var import_jsx_runtime50 = require("react/jsx-runtime");
8384
- function DsMarketCards(props) {
8396
+ function KjunMarketCards(props) {
8385
8397
  const {
8386
8398
  rows = [],
8387
8399
  rowKey = "id",
@@ -8459,13 +8471,13 @@ function DsMarketCards(props) {
8459
8471
  metricDisplay: display
8460
8472
  }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
8461
8473
  /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
8462
- DsDataState,
8474
+ KjunDataState,
8463
8475
  {
8464
8476
  ...props,
8465
8477
  loadingPadding: "none",
8466
8478
  empty: !rows.length,
8467
- loadingContent: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DsListSkeleton, { variant: "compact" }),
8468
- emptyContent: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DsEmpty, { text: emptyMessage, description: emptySubMessage }),
8479
+ loadingContent: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(KjunListSkeleton, { variant: "compact" }),
8480
+ emptyContent: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(KjunEmpty, { text: emptyMessage, description: emptySubMessage }),
8469
8481
  children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_react_native53.View, { children: [
8470
8482
  state.pill && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(KText, { style: { textAlign: "right", paddingHorizontal: import_tokens51.tokens.dimension.value16, paddingVertical: import_tokens51.tokens.dimension.value8, ...typeStyle("caption"), color: colors.textSecondary }, children: state.pill.label }),
8471
8483
  rows.map((row, i) => {
@@ -8491,21 +8503,21 @@ function DsMarketCards(props) {
8491
8503
  children: [
8492
8504
  /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(MarketIdentity, { row, props, compact: true }),
8493
8505
  /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_react_native53.View, { style: { marginLeft: import_tokens51.tokens.dimension.value12, alignItems: "flex-end" }, children: ((_b = state.pill) == null ? void 0 : _b.format) === "sparkline" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
8494
- DsSparkline,
8506
+ KjunSparkline,
8495
8507
  {
8496
8508
  data: getValue(row, state.key) || [],
8497
8509
  width: import_tokens51.tokens.extensions.marketTable.sparklineWidth,
8498
8510
  height: import_tokens51.tokens.extensions.marketTable.sparklineHeight
8499
8511
  }
8500
- ) : state.pill ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_jsx_runtime50.Fragment, { children: metricLoading(row, state.key) ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DsSkeleton, { type: "block", height: import_tokens51.tokens.extensions.marketTable.valueSkeletonHeight, width: import_tokens51.tokens.extensions.marketTable.valueSkeletonWidth }) : isChange && getValue(row, state.key) != null ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
8501
- DsSignedValue,
8512
+ ) : state.pill ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_jsx_runtime50.Fragment, { children: metricLoading(row, state.key) ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(KjunSkeleton, { type: "block", height: import_tokens51.tokens.extensions.marketTable.valueSkeletonHeight, width: import_tokens51.tokens.extensions.marketTable.valueSkeletonWidth }) : isChange && getValue(row, state.key) != null ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
8513
+ KjunSignedValue,
8502
8514
  {
8503
8515
  value: finiteNumber(getValue(row, state.key)),
8504
8516
  formatter: () => display(row),
8505
8517
  stale: !!getValue(row, "stale"),
8506
8518
  tone: "pill"
8507
8519
  }
8508
- ) : isPrice && getValue(row, state.key) == null ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(DsSkeleton, { type: "block", height: import_tokens51.tokens.extensions.financial.priceSkeletonHeight, width: import_tokens51.tokens.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
8520
+ ) : isPrice && getValue(row, state.key) == null ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(KjunSkeleton, { type: "block", height: import_tokens51.tokens.extensions.financial.priceSkeletonHeight, width: import_tokens51.tokens.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
8509
8521
  import_react_native53.View,
8510
8522
  {
8511
8523
  style: {
@@ -8555,7 +8567,7 @@ var import_jsx_runtime51 = require("react/jsx-runtime");
8555
8567
  var changeWeight = { fontWeight: typeStyle("label").fontWeight };
8556
8568
  var quoteDesktop = { price: typeStyle("control"), change: { ...typeStyle("caption"), ...changeWeight } };
8557
8569
  var quoteMobile = { price: typeStyle("input"), change: { ...typeStyle("body"), ...changeWeight } };
8558
- function DsMarketSimpleList(props) {
8570
+ function KjunMarketSimpleList(props) {
8559
8571
  const {
8560
8572
  rows = [],
8561
8573
  rowKey = "id",
@@ -8569,14 +8581,14 @@ function DsMarketSimpleList(props) {
8569
8581
  } = props, { colors } = useKjunStyles(), mobile = (0, import_react_native54.useWindowDimensions)().width < import_tokens52.tokens.responsive.market;
8570
8582
  return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_native54.View, { children: [
8571
8583
  /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
8572
- DsDataState,
8584
+ KjunDataState,
8573
8585
  {
8574
8586
  ...props,
8575
8587
  loadingPadding: "none",
8576
8588
  empty: !rows.length,
8577
8589
  emptyText: emptyMessage,
8578
- loadingContent: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DsListSkeleton, {}),
8579
- emptyContent: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DsEmpty, { text: emptyMessage, description: emptySubMessage }),
8590
+ loadingContent: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(KjunListSkeleton, {}),
8591
+ emptyContent: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(KjunEmpty, { text: emptyMessage, description: emptySubMessage }),
8580
8592
  children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_react_native54.View, { children: rows.map((row, i) => {
8581
8593
  var _a, _b;
8582
8594
  const price = priceValue(row), change = changeValue(row), stale = !!getValue(row, "stale"), source = String(getValue(row, "source") || ""), fetchedAt = String(getValue(row, "fetched_at") || "");
@@ -8613,7 +8625,7 @@ function DsMarketSimpleList(props) {
8613
8625
  },
8614
8626
  children: [
8615
8627
  /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
8616
- DsPriceCell,
8628
+ KjunPriceCell,
8617
8629
  {
8618
8630
  value: price,
8619
8631
  formatter: priceFormatter,
@@ -8634,16 +8646,16 @@ function DsMarketSimpleList(props) {
8634
8646
  },
8635
8647
  children: [
8636
8648
  price !== null && ((_b = props.renderPricePrefix) == null ? void 0 : _b.call(props, row)),
8637
- (finiteNumber(price) !== null || !changeLoading(row) && finiteNumber(change) !== null) && (closingPrice && !stale ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DsBadge, { variant: "secondary", size: "xs", children: "\uC885\uAC00" }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
8638
- DsFreshness,
8649
+ (finiteNumber(price) !== null || !changeLoading(row) && finiteNumber(change) !== null) && (closingPrice && !stale ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(KjunBadge, { variant: "secondary", size: "xs", children: "\uC885\uAC00" }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
8650
+ KjunFreshness,
8639
8651
  {
8640
8652
  stale,
8641
8653
  source: closingPrice ? "close" : source,
8642
8654
  fetchedAt
8643
8655
  }
8644
8656
  )),
8645
- changeLoading(row) ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(DsSkeleton, { type: "block", height: import_tokens52.tokens.extensions.marketList.changeSkeletonHeight, width: import_tokens52.tokens.extensions.marketList.changeSkeletonWidth }) : change !== null ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
8646
- DsSignedValue,
8657
+ changeLoading(row) ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(KjunSkeleton, { type: "block", height: import_tokens52.tokens.extensions.marketList.changeSkeletonHeight, width: import_tokens52.tokens.extensions.marketList.changeSkeletonWidth }) : change !== null ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
8658
+ KjunSignedValue,
8647
8659
  {
8648
8660
  value: change,
8649
8661
  stale,
@@ -8679,12 +8691,12 @@ function DsMarketSimpleList(props) {
8679
8691
  var import_tokens53 = require("@kjun-ui/tokens");
8680
8692
  var import_react_native55 = require("react-native");
8681
8693
  var import_jsx_runtime52 = require("react/jsx-runtime");
8682
- function DsMarketListPanel({
8694
+ function KjunMarketListPanel({
8683
8695
  controls,
8684
8696
  children
8685
8697
  }) {
8686
8698
  const { colors } = useKjunStyles();
8687
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(DsCard, { children: [
8699
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(KjunCard, { children: [
8688
8700
  /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_react_native55.View, { children: controls }),
8689
8701
  /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
8690
8702
  import_react_native55.View,
@@ -8706,7 +8718,7 @@ var import_react60 = require("react");
8706
8718
  var import_react_native56 = require("react-native");
8707
8719
  var import_react_native_svg8 = __toESM(require("react-native-svg"), 1);
8708
8720
  var import_jsx_runtime53 = require("react/jsx-runtime");
8709
- function DsMarketTable(props) {
8721
+ function KjunMarketTable(props) {
8710
8722
  const {
8711
8723
  rows = [],
8712
8724
  columns,
@@ -8728,13 +8740,13 @@ function DsMarketTable(props) {
8728
8740
  const render = (row, col) => {
8729
8741
  const value = getValue(row, col.key), stale = !!getValue(row, "stale");
8730
8742
  if (cellLoading(row, col))
8731
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(DsSkeleton, { type: "block", height: import_tokens54.tokens.extensions.marketTable.valueSkeletonHeight, width: import_tokens54.tokens.extensions.marketTable.valueSkeletonWidth });
8743
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KjunSkeleton, { type: "block", height: import_tokens54.tokens.extensions.marketTable.valueSkeletonHeight, width: import_tokens54.tokens.extensions.marketTable.valueSkeletonWidth });
8732
8744
  if (renderCell) return content(renderCell(row, col));
8733
8745
  if (["stock_name", "name", "symbol"].includes(col.key))
8734
8746
  return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(MarketIdentity, { row, props, table: true });
8735
8747
  if (col.type === "sparkline")
8736
8748
  return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8737
- DsSparkline,
8749
+ KjunSparkline,
8738
8750
  {
8739
8751
  data: Array.isArray(value) ? value : [],
8740
8752
  width: import_tokens54.tokens.extensions.marketTable.sparklineWidth,
@@ -8743,7 +8755,7 @@ function DsMarketTable(props) {
8743
8755
  );
8744
8756
  if (col.type === "price")
8745
8757
  return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8746
- DsPriceCell,
8758
+ KjunPriceCell,
8747
8759
  {
8748
8760
  value: finiteNumber(value),
8749
8761
  formatter: priceFormatter,
@@ -8753,7 +8765,7 @@ function DsMarketTable(props) {
8753
8765
  );
8754
8766
  if (col.type === "percent")
8755
8767
  return value == null ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KText, { children: "-" }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8756
- DsSignedValue,
8768
+ KjunSignedValue,
8757
8769
  {
8758
8770
  value: finiteNumber(value),
8759
8771
  format: "percent",
@@ -8769,7 +8781,7 @@ function DsMarketTable(props) {
8769
8781
  );
8770
8782
  const text = formatMetric ? formatMetric(value, col.type || "text", { currency, row, column: col }) : value == null ? "-" : String(value);
8771
8783
  return ["investor", "net_amount", "net_volume"].includes(col.type || "") ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8772
- DsSignedValue,
8784
+ KjunSignedValue,
8773
8785
  {
8774
8786
  value: finiteNumber(value),
8775
8787
  formatter: () => text,
@@ -8800,14 +8812,14 @@ function DsMarketTable(props) {
8800
8812
  },
8801
8813
  children: [
8802
8814
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8803
- DsDataState,
8815
+ KjunDataState,
8804
8816
  {
8805
8817
  ...props,
8806
8818
  loadingPadding: "none",
8807
8819
  empty: !rows.length,
8808
8820
  emptyText: emptyMessage,
8809
- loadingContent: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(DsMarketTableSkeleton, { columns, showActions }),
8810
- emptyContent: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(DsEmpty, { text: emptyMessage, description: emptySubMessage }),
8821
+ loadingContent: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KjunMarketTableSkeleton, { columns, showActions }),
8822
+ emptyContent: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KjunEmpty, { text: emptyMessage, description: emptySubMessage }),
8811
8823
  children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(MarketQuoteTypeContext.Provider, { value: tableQuote, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_react_native56.View, { style: { position: "relative", minWidth: 0 }, children: [
8812
8824
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8813
8825
  import_react_native56.ScrollView,
@@ -8842,7 +8854,7 @@ function DsMarketTable(props) {
8842
8854
  alignItems: "center",
8843
8855
  justifyContent: "center"
8844
8856
  },
8845
- children: ["interest", "favorite"].map((kind) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native56.View, { style: { width: Math.max(import_tokens54.tokens.native.minimumTouchTarget, import_tokens54.tokens.extensions.iconToggle.sizes.xs), alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(DsCollectionMark, { kind, size: "md" }) }, kind))
8857
+ children: ["interest", "favorite"].map((kind) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native56.View, { style: { width: Math.max(import_tokens54.tokens.native.minimumTouchTarget, import_tokens54.tokens.extensions.iconToggle.sizes.xs), alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(KjunCollectionMark, { kind, size: "md" }) }, kind))
8846
8858
  }
8847
8859
  ),
8848
8860
  columns.map((col, columnIndex) => /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
@@ -8875,7 +8887,7 @@ function DsMarketTable(props) {
8875
8887
  }
8876
8888
  ),
8877
8889
  col.sortable && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8878
- DsIcon,
8890
+ KjunIcon,
8879
8891
  {
8880
8892
  name: sortKey === col.key ? sortOrder === "asc" ? "sort-ascending" : "sort-descending" : "arrows-sort",
8881
8893
  size: import_tokens54.tokens.extensions.marketTable.sortIconSize,
@@ -8921,7 +8933,7 @@ function DsMarketTable(props) {
8921
8933
  },
8922
8934
  children: [
8923
8935
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8924
- DsIconToggle,
8936
+ KjunIconToggle,
8925
8937
  {
8926
8938
  size: "xs",
8927
8939
  active: (_a = props.interestKeys) == null ? void 0 : _a.has(id),
@@ -8940,7 +8952,7 @@ function DsMarketTable(props) {
8940
8952
  }
8941
8953
  ),
8942
8954
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8943
- DsIconToggle,
8955
+ KjunIconToggle,
8944
8956
  {
8945
8957
  size: "xs",
8946
8958
  active: (_d = props.favoriteKeys) == null ? void 0 : _d.has(id),
@@ -8974,7 +8986,7 @@ function DsMarketTable(props) {
8974
8986
  children: [
8975
8987
  /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_react_native56.View, { style: { alignSelf: col.align === "right" ? "flex-end" : col.align === "center" ? "center" : void 0 }, children: render(row, col) }),
8976
8988
  col.key === (priceCol == null ? void 0 : priceCol.key) && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
8977
- DsFreshness,
8989
+ KjunFreshness,
8978
8990
  {
8979
8991
  stale: !!getValue(row, "stale"),
8980
8992
  source: String(getValue(row, "source") || ""),
@@ -9015,7 +9027,7 @@ var import_react61 = require("react");
9015
9027
  var import_react_native57 = require("react-native");
9016
9028
  var import_jsx_runtime54 = require("react/jsx-runtime");
9017
9029
  var LastListRow = (0, import_react61.createContext)(false);
9018
- function DsListRow({ title, description, leading, trailing, actions, href, disabled = false, onPress }) {
9030
+ function KjunListRow({ title, description, leading, trailing, actions, href, disabled = false, onPress }) {
9019
9031
  const { colors } = useKjunStyles(), last = (0, import_react61.useContext)(LastListRow);
9020
9032
  const parts = /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_jsx_runtime54.Fragment, { children: [
9021
9033
  leading && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native57.View, { children: content(leading) }),
@@ -9031,7 +9043,7 @@ function DsListRow({ title, description, leading, trailing, actions, href, disab
9031
9043
  actions && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_native57.View, { pointerEvents: disabled ? "none" : "auto", ...disabled && import_react_native57.Platform.OS === "web" ? { inert: true } : {}, style: { maxWidth: "45%", flexDirection: "row", flexWrap: "wrap", gap: import_tokens55.tokens.extensions.list.actionsGap, paddingRight: import_tokens55.tokens.extensions.list.actionsPadding, opacity: disabled ? import_tokens55.tokens.states.opacity.disabled : 1 }, children: content(actions) })
9032
9044
  ] });
9033
9045
  }
9034
- function DsListSection({ title, description, actions, children, ariaLabel }) {
9046
+ function KjunListSection({ title, description, actions, children, ariaLabel }) {
9035
9047
  const { colors } = useKjunStyles();
9036
9048
  return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native57.View, { style: { minWidth: 0, backgroundColor: colors.surface }, children: [
9037
9049
  (title || description || actions) && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_native57.View, { style: { flexDirection: "row", alignItems: "center", gap: import_tokens55.tokens.extensions.list.gap, padding: import_tokens55.tokens.extensions.list.padding }, children: [
@@ -9050,7 +9062,7 @@ var import_tokens56 = require("@kjun-ui/tokens");
9050
9062
  var import_react62 = require("react");
9051
9063
  var import_react_native58 = require("react-native");
9052
9064
  var import_jsx_runtime55 = require("react/jsx-runtime");
9053
- function DsTopNavigation({ title, description, leading, actions, safeAreaTop = 0 }) {
9065
+ function KjunTopNavigation({ title, description, leading, actions, safeAreaTop = 0 }) {
9054
9066
  const { colors } = useKjunStyles();
9055
9067
  const geometry2 = import_tokens56.tokens.extensions.topNavigation;
9056
9068
  const titleInset = Math.max(0, (geometry2.controlSize - import_tokens56.tokens.typography.sectionTitle.lineHeightPx) / 2);
@@ -9073,7 +9085,7 @@ function DsTopNavigation({ title, description, leading, actions, safeAreaTop = 0
9073
9085
  actions && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(TopNavigationContext.Provider, { value: { ...geometry2, slot: "actions" }, children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native58.View, { style: { minHeight: geometry2.controlSize, minWidth: 0, maxWidth: "100%", marginLeft: "auto", flexShrink: 1, flexDirection: "row", flexWrap: "wrap", alignItems: "center", justifyContent: "flex-end", gap: geometry2.actionsGap }, children: actionList.map((action, index) => index < actionList.length - 1 ? content(action) : /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_react_native58.View, { onLayout: square("trailing"), style: { flexShrink: 1, minWidth: 0, maxWidth: "100%", marginRight: iconEdges.trailing ? -edgeInset : 0 }, children: content(action) }, "trailing")) }) })
9074
9086
  ] }) }) });
9075
9087
  }
9076
- function DsBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0C9", safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = true, onNavigate }) {
9088
+ function KjunBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0C9", safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = true, onNavigate }) {
9077
9089
  const { colors } = useKjunStyles();
9078
9090
  const geometry2 = import_tokens56.tokens.extensions.bottomNavigation;
9079
9091
  const hasIcons = items.some((item) => item.icon);
@@ -9120,7 +9132,7 @@ function DsBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0
9120
9132
  },
9121
9133
  children: [
9122
9134
  hasIcons && /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react_native58.View, { style: { width: geometry2.iconSize, height: geometry2.iconSize, flexShrink: 0 }, children: [
9123
- item.icon && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(DsIcon, { name: item.icon, size: geometry2.iconSize, color: ink }),
9135
+ item.icon && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(KjunIcon, { name: item.icon, size: geometry2.iconSize, color: ink }),
9124
9136
  badge
9125
9137
  ] }),
9126
9138
  /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_react_native58.View, { style: { maxWidth: "100%" }, children: [
@@ -9134,7 +9146,7 @@ function DsBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0
9134
9146
  );
9135
9147
  }) });
9136
9148
  }
9137
- function DsBottomActionBar({ description, children, safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = false }) {
9149
+ function KjunBottomActionBar({ description, children, safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = false }) {
9138
9150
  const { colors } = useKjunStyles();
9139
9151
  const [width, setWidth] = (0, import_react62.useState)(0);
9140
9152
  const geometry2 = import_tokens56.tokens.extensions.navigation;
@@ -9162,7 +9174,7 @@ var import_react63 = require("react");
9162
9174
  var import_react_native59 = require("react-native");
9163
9175
  var import_tokens57 = require("@kjun-ui/tokens");
9164
9176
  var import_jsx_runtime56 = require("react/jsx-runtime");
9165
- function DsImage({ src, source, alt, decorative = false, aspectRatio = 1, fit = "cover", fallback: fallback2, onLoad, onError }) {
9177
+ function KjunImage({ src, source, alt, decorative = false, aspectRatio = 1, fit = "cover", fallback: fallback2, onLoad, onError }) {
9166
9178
  const { colors } = useKjunStyles();
9167
9179
  const request = JSON.stringify(source != null ? source : src), current = (0, import_react63.useRef)({ request, version: 0 });
9168
9180
  if (current.current.request !== request) current.current = { request, version: current.current.version + 1 };
@@ -9176,23 +9188,23 @@ function DsImage({ src, source, alt, decorative = false, aspectRatio = 1, fit =
9176
9188
  setFailed(version);
9177
9189
  onError == null ? void 0 : onError();
9178
9190
  }
9179
- } }, version) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native59.View, { accessible: !decorative, accessibilityRole: "image", accessibilityLabel: decorative ? void 0 : alt, "aria-hidden": decorative || void 0, style: { flex: 1, alignItems: "center", justifyContent: "center" }, children: content(fallback2 != null ? fallback2 : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DsIcon, { name: "image", size: import_tokens57.tokens.extensions.image.fallbackIconSize, color: colors.textSecondary }), { color: colors.textSecondary, fontWeight: typeStyle("control").fontWeight, textAlign: "center" }) }) });
9191
+ } }, version) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native59.View, { accessible: !decorative, accessibilityRole: "image", accessibilityLabel: decorative ? void 0 : alt, "aria-hidden": decorative || void 0, style: { flex: 1, alignItems: "center", justifyContent: "center" }, children: content(fallback2 != null ? fallback2 : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(KjunIcon, { name: "image", size: import_tokens57.tokens.extensions.image.fallbackIconSize, color: colors.textSecondary }), { color: colors.textSecondary, fontWeight: typeStyle("control").fontWeight, textAlign: "center" }) }) });
9180
9192
  }
9181
- function DsAvatar({ src, source, name = "", alt, decorative = false, size = "md", shape = "circle", fallback: fallback2, onLoad, onError }) {
9193
+ function KjunAvatar({ src, source, name = "", alt, decorative = false, size = "md", shape = "circle", fallback: fallback2, onLoad, onError }) {
9182
9194
  const { colors } = useKjunStyles(), initial = Array.from(name.trim())[0];
9183
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native59.View, { style: { width: import_tokens57.tokens.extensions.avatar[size], height: import_tokens57.tokens.extensions.avatar[size], borderRadius: shape === "circle" ? import_tokens57.tokens.radius.radius9999 : import_tokens57.tokens.radius.radius8, overflow: "hidden", flexShrink: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DsImage, { src, source, alt: alt || name || "\uC0AC\uC6A9\uC790", decorative, fallback: fallback2 != null ? fallback2 : initial ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(KText, { style: { ...typeStyle(size === "sm" ? "control" : size === "lg" ? "sectionTitle" : "input"), fontWeight: typeStyle("control").fontWeight, color: colors.textSecondary }, children: initial.toLocaleUpperCase() }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(DsIcon, { name: "user", size: import_tokens57.tokens.extensions.avatar.fallbackIconSizes[size] }), onLoad, onError }) });
9195
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_react_native59.View, { style: { width: import_tokens57.tokens.extensions.avatar[size], height: import_tokens57.tokens.extensions.avatar[size], borderRadius: shape === "circle" ? import_tokens57.tokens.radius.radius9999 : import_tokens57.tokens.radius.radius8, overflow: "hidden", flexShrink: 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(KjunImage, { src, source, alt: alt || name || "\uC0AC\uC6A9\uC790", decorative, fallback: fallback2 != null ? fallback2 : initial ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(KText, { style: { ...typeStyle(size === "sm" ? "control" : size === "lg" ? "sectionTitle" : "input"), fontWeight: typeStyle("control").fontWeight, color: colors.textSecondary }, children: initial.toLocaleUpperCase() }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(KjunIcon, { name: "user", size: import_tokens57.tokens.extensions.avatar.fallbackIconSizes[size] }), onLoad, onError }) });
9184
9196
  }
9185
9197
 
9186
9198
  // packages/native/src/chip.tsx
9187
9199
  var import_react_native60 = require("react-native");
9188
9200
  var import_tokens58 = require("@kjun-ui/tokens");
9189
9201
  var import_jsx_runtime57 = require("react/jsx-runtime");
9190
- function DsChip({ label, icon, removable = false, disabled = false, size = "md", removeLabel, onRemove }) {
9202
+ function KjunChip({ label, icon, removable = false, disabled = false, size = "md", removeLabel, onRemove }) {
9191
9203
  const { colors } = useKjunStyles();
9192
9204
  return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_react_native60.View, { style: { alignSelf: "flex-start", maxWidth: "100%", minWidth: 0, flexShrink: 1, flexDirection: "row", alignItems: "center", gap: import_tokens58.tokens.extensions.chip.gap, minHeight: removable ? import_tokens58.tokens.extensions.chip.nativeRemoveSize : import_tokens58.tokens.extensions.chip[size], paddingVertical: removable ? 0 : import_tokens58.tokens.extensions.chip.paddingY, paddingLeft: import_tokens58.tokens.extensions.chip.paddingX, paddingRight: removable ? 0 : import_tokens58.tokens.extensions.chip.paddingX, borderRadius: import_tokens58.tokens.extensions.chip.radius, backgroundColor: colors.secondary, opacity: disabled ? import_tokens58.tokens.states.opacity.disabled : 1 }, children: [
9193
- icon && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DsIcon, { name: icon, size: import_tokens58.tokens.extensions.chip.iconSizes[size] }),
9205
+ icon && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(KjunIcon, { name: icon, size: import_tokens58.tokens.extensions.chip.iconSizes[size] }),
9194
9206
  /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(KText, { style: { ...typeStyle(import_tokens58.tokens.extensions.chip.typography[size]), flexShrink: 1, minWidth: 0 }, children: label }),
9195
- removable && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AccessiblePressable, { accessibilityRole: "button", accessibilityLabel: removeLabel || label + " \uC0AD\uC81C", disabled, accessibilityState: { disabled }, onPress: onRemove, style: { width: import_tokens58.tokens.extensions.chip.nativeRemoveSize, height: import_tokens58.tokens.extensions.chip.nativeRemoveSize, borderRadius: import_tokens58.tokens.extensions.chip.radius, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(DsIcon, { name: "x", size: import_tokens58.tokens.extensions.chip.removeIconSizes[size] }) })
9207
+ removable && /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(AccessiblePressable, { accessibilityRole: "button", accessibilityLabel: removeLabel || label + " \uC0AD\uC81C", disabled, accessibilityState: { disabled }, onPress: onRemove, style: { width: import_tokens58.tokens.extensions.chip.nativeRemoveSize, height: import_tokens58.tokens.extensions.chip.nativeRemoveSize, borderRadius: import_tokens58.tokens.extensions.chip.radius, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(KjunIcon, { name: "x", size: import_tokens58.tokens.extensions.chip.removeIconSizes[size] }) })
9196
9208
  ] });
9197
9209
  }
9198
9210
 
@@ -9489,10 +9501,10 @@ function RangeInput({
9489
9501
  }
9490
9502
  );
9491
9503
  }
9492
- function DsSlider(props) {
9504
+ function KjunSlider(props) {
9493
9505
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(RangeInput, { ...props });
9494
9506
  }
9495
- function DsRangeSlider(props) {
9507
+ function KjunRangeSlider(props) {
9496
9508
  return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(RangeInput, { ...props });
9497
9509
  }
9498
9510
 
@@ -9507,7 +9519,7 @@ var componentIcons = { minus: import_minus.default };
9507
9519
 
9508
9520
  // packages/native/src/quantity-stepper.tsx
9509
9521
  var import_jsx_runtime59 = require("react/jsx-runtime");
9510
- function DsQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disabled = false, error = false, size = "md", block = false, id, ariaLabel, onValueChange, onChangeCommit, onInvalidInput }) {
9522
+ function KjunQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disabled = false, error = false, size = "md", block = false, id, ariaLabel, onValueChange, onChangeCommit, onInvalidInput }) {
9511
9523
  const { colors, fontFamily } = useKjunStyles();
9512
9524
  const field = useKjunField();
9513
9525
  const invalid = error || !!(field == null ? void 0 : field.error);
@@ -9605,7 +9617,7 @@ function DsQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disab
9605
9617
  const surfaceBox = { position: "absolute", left: 0, right: 0, top: "50%", height: import_tokens60.tokens.input[size].height, marginTop: -import_tokens60.tokens.input[size].height / 2, borderRadius: surface.spec.radius };
9606
9618
  return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(IconFallbacks, { icons: componentIcons, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react_native62.View, { style: { flexDirection: "row", alignItems: "center", alignSelf: block ? "stretch" : "flex-start", maxWidth: "100%" }, children: [
9607
9619
  /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_native62.View, { pointerEvents: "none", "aria-hidden": true, style: { ...surfaceBox, backgroundColor: colors.inputBg } }),
9608
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CompoundTarget, { square: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(DsButton, { size, style: decreaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uC904\uC774\uAE30", disabled: blocked || value <= min, onPress: () => move(-1), prefixIcon: "minus" }) }),
9620
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CompoundTarget, { square: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(KjunButton, { size, style: decreaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uC904\uC774\uAE30", disabled: blocked || value <= min, onPress: () => move(-1), prefixIcon: "minus" }) }),
9609
9621
  /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_native62.View, { style: { flex: block ? 1 : void 0, width: block ? void 0 : geometry2.valueWidth, minWidth: 0, minHeight: finePointer() ? void 0 : import_tokens60.tokens.native.minimumTouchTarget, justifyContent: "center" }, ...fieldTarget(() => {
9610
9622
  var _a;
9611
9623
  return (_a = inputRef.current) == null ? void 0 : _a.focus();
@@ -9638,7 +9650,7 @@ function DsQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disab
9638
9650
  style: { width: "100%", minWidth: 0, ...surface.style, borderRadius: 0, borderTopColor: "transparent", borderBottomColor: "transparent", borderLeftColor: "transparent", borderRightColor: "transparent", backgroundColor: !blocked && (surface.active || surface.hovered) ? colors.hover : "transparent", outlineWidth: 0, color: surface.ink, fontFamily, ...inputTypeStyle(size), textAlign: "center", paddingHorizontal: surface.spec.padding - import_tokens60.tokens.border.controlWidth, paddingVertical: 0 }
9639
9651
  }
9640
9652
  ) }),
9641
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CompoundTarget, { square: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(DsButton, { size, style: increaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uB298\uB9AC\uAE30", disabled: blocked || max !== void 0 && value >= max, onPress: () => move(1), prefixIcon: "plus" }) }),
9653
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(CompoundTarget, { square: true, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(KjunButton, { size, style: increaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uB298\uB9AC\uAE30", disabled: blocked || max !== void 0 && value >= max, onPress: () => move(1), prefixIcon: "plus" }) }),
9642
9654
  (invalid || surface.active) && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_native62.View, { pointerEvents: "none", "aria-hidden": true, style: { ...surfaceBox, borderWidth: invalid ? import_tokens60.tokens.border.controlWidth : import_tokens60.tokens.states.focus.width, borderColor: invalid ? colors.danger : colors.focusRing } })
9643
9655
  ] }) });
9644
9656
  }
@@ -9648,7 +9660,7 @@ var import_react66 = require("react");
9648
9660
  var import_react_native63 = require("react-native");
9649
9661
  var import_tokens61 = require("@kjun-ui/tokens");
9650
9662
  var import_jsx_runtime60 = require("react/jsx-runtime");
9651
- function DsTimePicker({ value, precision = "minute", min, max, minuteStep = 1, secondStep = 1, disabled = false, error = false, clearable = true, size = "md", ariaLabel = "\uC2DC\uAC04", onValueChange, onChangeCommit }) {
9663
+ function KjunTimePicker({ value, precision = "minute", min, max, minuteStep = 1, secondStep = 1, disabled = false, error = false, clearable = true, size = "md", ariaLabel = "\uC2DC\uAC04", onValueChange, onChangeCommit }) {
9652
9664
  const geometry2 = import_tokens61.tokens.extensions.timePicker, spec = import_tokens61.tokens.input[size];
9653
9665
  const { colors } = useKjunStyles();
9654
9666
  const first = (0, import_react66.useRef)(null);
@@ -9669,7 +9681,7 @@ function DsTimePicker({ value, precision = "minute", min, max, minuteStep = 1, s
9669
9681
  return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_native63.View, { accessibilityLabel: ariaLabel, style: { flexDirection: "row", alignItems: "center", maxWidth: "100%", minWidth: 0, backgroundColor: colors.inputBg, borderRadius: spec.radius }, children: [
9670
9682
  /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native63.View, { style: { flex: 1, flexDirection: "row", alignItems: "center", minWidth: 0 }, children: ["\uC2DC", "\uBD84", "\uCD08"].slice(0, precision === "second" ? 3 : 2).map((label, index) => /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react66.Fragment, { children: [
9671
9683
  index > 0 && /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(KText, { "aria-hidden": true, style: { ...inputTypeStyle(size), width: geometry2.separatorWidth, textAlign: "center", color: disabled || !valid ? colors.textDisabled : colors.textSecondary }, children: ":" }),
9672
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(FieldContext.Provider, { value: { ...field, id: index === 0 ? fieldId : `${fieldId}-${index}` }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CompoundControlContext.Provider, { value: { size, focusRef: index === 0 ? first : void 0, onFocusChange: setFocused, leading: index === 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native63.View, { style: { flexShrink: 0, minWidth: geometry2.segmentMinimumWidth }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(DsSelect, { value: time === null ? null : domain.part(time, index), options: domain.options(value, index).map((n) => ({ value: n, label: String(n).padStart(2, "0") })), onValueChange: (next) => {
9684
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(FieldContext.Provider, { value: { ...field, id: index === 0 ? fieldId : `${fieldId}-${index}` }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(CompoundControlContext.Provider, { value: { size, focusRef: index === 0 ? first : void 0, onFocusChange: setFocused, leading: index === 0 }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_native63.View, { style: { flexShrink: 0, minWidth: geometry2.segmentMinimumWidth }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(KjunSelect, { value: time === null ? null : domain.part(time, index), options: domain.options(value, index).map((n) => ({ value: n, label: String(n).padStart(2, "0") })), onValueChange: (next) => {
9673
9685
  if (typeof next === "number") change(domain.select(value, index, next));
9674
9686
  }, onOpenChange: (open) => setOpened(open ? index : null), ariaLabel: ((field == null ? void 0 : field.label) || ariaLabel) + " " + label, placeholder: label, disabled: disabled || !valid, error, size, clearable: false, searchable: false }) }) }) })
9675
9687
  ] }, label)) }),