@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.web.js CHANGED
@@ -644,7 +644,7 @@ var AccessiblePressable = forwardRef(
644
644
 
645
645
  // packages/native/src/button.tsx
646
646
  import { Fragment, jsx as jsx5, jsxs } from "react/jsx-runtime";
647
- function DsIcon({
647
+ function KjunIcon({
648
648
  name,
649
649
  size = tokens3.iconSizes.default,
650
650
  color,
@@ -749,7 +749,7 @@ function useMinimumLoading(loading) {
749
749
  }, [loading]);
750
750
  return loading || active;
751
751
  }
752
- function DsButton(input) {
752
+ function KjunButton(input) {
753
753
  var _a, _b;
754
754
  const {
755
755
  children,
@@ -859,7 +859,7 @@ function DsButton(input) {
859
859
  const color = paint(pressed, hovered && Platform2.OS === "web").ink;
860
860
  return /* @__PURE__ */ jsxs(Fragment, { children: [
861
861
  before && /* @__PURE__ */ jsx5(
862
- DsIcon,
862
+ KjunIcon,
863
863
  {
864
864
  name: before,
865
865
  filled: !busy && prefixIconFilled,
@@ -876,7 +876,7 @@ function DsButton(input) {
876
876
  ...multiline || navigation ? { flexShrink: 1, minWidth: 0, textAlign: "center" } : {}
877
877
  }, children }),
878
878
  suffixIcon && /* @__PURE__ */ jsx5(View2, { style: { opacity: busy && prefixIcon ? 0 : 1 }, children: /* @__PURE__ */ jsx5(
879
- DsIcon,
879
+ KjunIcon,
880
880
  {
881
881
  name: busy && !prefixIcon ? "loader-2" : suffixIcon,
882
882
  filled: !busy && suffixIconFilled,
@@ -893,7 +893,7 @@ function DsButton(input) {
893
893
  right: 0,
894
894
  alignItems: "center",
895
895
  justifyContent: "center"
896
- }, children: /* @__PURE__ */ jsx5(DsIcon, { name: "loader-2", spin: true, size: iconSize, color }) })
896
+ }, children: /* @__PURE__ */ jsx5(KjunIcon, { name: "loader-2", spin: true, size: iconSize, color }) })
897
897
  ] });
898
898
  }
899
899
  }
@@ -933,7 +933,7 @@ function FieldClear({ size, disabled, label, onPress }) {
933
933
  alignItems: "center",
934
934
  justifyContent: "center",
935
935
  backgroundColor: disabled ? "transparent" : pressed ? colors.active : hovered ? colors.hover : "transparent"
936
- }, children: /* @__PURE__ */ jsx6(DsIcon, { name: "x", size: spec.iconSize, color: disabled ? colors.textDisabled : colors.textSecondary }) })
936
+ }, children: /* @__PURE__ */ jsx6(KjunIcon, { name: "x", size: spec.iconSize, color: disabled ? colors.textDisabled : colors.textSecondary }) })
937
937
  }
938
938
  );
939
939
  }
@@ -1119,7 +1119,7 @@ import {
1119
1119
  import { jsx as jsx8, jsxs as jsxs2 } from "react/jsx-runtime";
1120
1120
  var FieldContext = createContext11(null);
1121
1121
  var useKjunField = () => useContext6(FieldContext);
1122
- function DsFormGroup({
1122
+ function KjunFormGroup({
1123
1123
  label,
1124
1124
  id,
1125
1125
  required = false,
@@ -1163,7 +1163,7 @@ function DsFormGroup({
1163
1163
  marginTop: tokens7.extensions.form.messageGap
1164
1164
  },
1165
1165
  children: [
1166
- !!error && /* @__PURE__ */ jsx8(DsIcon, { name: "alert-circle", size: tokens7.extensions.form.messageIconSize, color: c.danger }),
1166
+ !!error && /* @__PURE__ */ jsx8(KjunIcon, { name: "alert-circle", size: tokens7.extensions.form.messageIconSize, color: c.danger }),
1167
1167
  /* @__PURE__ */ jsx8(
1168
1168
  Text3,
1169
1169
  {
@@ -1185,7 +1185,7 @@ function DsFormGroup({
1185
1185
  }
1186
1186
  );
1187
1187
  }
1188
- var DsInput = forwardRef2(function DsInput2({
1188
+ var KjunInput = forwardRef2(function KjunInput2({
1189
1189
  value,
1190
1190
  size = "md",
1191
1191
  error = false,
@@ -1299,7 +1299,7 @@ var DsInput = forwardRef2(function DsInput2({
1299
1299
  justifyContent: "center"
1300
1300
  },
1301
1301
  children: prefix || /* @__PURE__ */ jsx8(
1302
- DsIcon,
1302
+ KjunIcon,
1303
1303
  {
1304
1304
  name: prefixIcon,
1305
1305
  size: spec.iconSize,
@@ -1330,7 +1330,7 @@ var DsInput = forwardRef2(function DsInput2({
1330
1330
  (_a = input.current) == null ? void 0 : _a.focus();
1331
1331
  } }),
1332
1332
  suffix || suffixIcon && /* @__PURE__ */ jsx8(
1333
- DsIcon,
1333
+ KjunIcon,
1334
1334
  {
1335
1335
  name: suffixIcon,
1336
1336
  size: spec.iconSize,
@@ -1357,13 +1357,13 @@ var DsInput = forwardRef2(function DsInput2({
1357
1357
  )
1358
1358
  ] });
1359
1359
  });
1360
- function DsFormLayout({
1360
+ function KjunFormLayout({
1361
1361
  children,
1362
1362
  gap = tokens7.extensions.form.itemGap
1363
1363
  }) {
1364
1364
  return /* @__PURE__ */ jsx8(View4, { style: { gap }, children: Children.map(
1365
1365
  children,
1366
- (child) => isValidElement(child) && child.type === DsFormGroup ? cloneElement(child, {
1366
+ (child) => isValidElement(child) && child.type === KjunFormGroup ? cloneElement(child, {
1367
1367
  style: [{ marginBottom: 0 }, child.props.style]
1368
1368
  }) : child
1369
1369
  ) });
@@ -1438,7 +1438,7 @@ function ScopedNativeModal({ children, visible, ...props }) {
1438
1438
  const entry = scope ? layers.entries.get(scope) : void 0;
1439
1439
  const generation = (_a = entry == null ? void 0 : entry.order) != null ? _a : 0;
1440
1440
  const inactive = !!scope && !layers.isActive(scope);
1441
- const host = useContext7(FeedbackOverlayContext), id = useId3(), register = host == null ? void 0 : host.register;
1441
+ const host = useContext7(FeedbackOverlayContext), id = "kjun-" + useId3(), register = host == null ? void 0 : host.register;
1442
1442
  useEffect4(
1443
1443
  () => visible && register ? register(id) : void 0,
1444
1444
  [visible, register, id, generation]
@@ -1474,7 +1474,7 @@ function ScopedNativeModal({ children, visible, ...props }) {
1474
1474
 
1475
1475
  // packages/native/src/modal.tsx
1476
1476
  import { jsx as jsx12, jsxs as jsxs5 } from "react/jsx-runtime";
1477
- function DsFormActions({
1477
+ function KjunFormActions({
1478
1478
  size = "lg",
1479
1479
  cancelText = "\uCDE8\uC18C",
1480
1480
  confirmText = "\uC800\uC7A5",
@@ -1533,7 +1533,7 @@ function DsFormActions({
1533
1533
  }
1534
1534
  ),
1535
1535
  showCancel && /* @__PURE__ */ jsx12(
1536
- DsButton,
1536
+ KjunButton,
1537
1537
  {
1538
1538
  size,
1539
1539
  variant: cancelVariant,
@@ -1543,7 +1543,7 @@ function DsFormActions({
1543
1543
  }
1544
1544
  ),
1545
1545
  showConfirm && /* @__PURE__ */ jsx12(
1546
- DsButton,
1546
+ KjunButton,
1547
1547
  {
1548
1548
  size,
1549
1549
  variant,
@@ -1557,7 +1557,7 @@ function DsFormActions({
1557
1557
  }
1558
1558
  ) });
1559
1559
  }
1560
- function DsModal({
1560
+ function KjunModal({
1561
1561
  open,
1562
1562
  onOpenChange,
1563
1563
  onClose,
@@ -1698,14 +1698,14 @@ function DsModal({
1698
1698
  }
1699
1699
  ) }),
1700
1700
  closable && /* @__PURE__ */ jsx12(
1701
- DsButton,
1701
+ KjunButton,
1702
1702
  {
1703
1703
  variant: "ghost",
1704
1704
  size: "sm",
1705
1705
  ariaLabel: "\uB2EB\uAE30",
1706
1706
  onPress: close,
1707
1707
  style: { borderRadius: tokens8.modal.closeRadius, width: tokens8.modal.closeSize, height: tokens8.modal.closeSize, paddingHorizontal: 0, paddingVertical: 0 },
1708
- children: /* @__PURE__ */ jsx12(DsIcon, { name: "x", size: tokens8.modal.closeIconSize })
1708
+ children: /* @__PURE__ */ jsx12(KjunIcon, { name: "x", size: tokens8.modal.closeIconSize })
1709
1709
  }
1710
1710
  )
1711
1711
  ]
@@ -1734,7 +1734,7 @@ function DsModal({
1734
1734
  borderTopColor: c.border
1735
1735
  },
1736
1736
  children: footer || /* @__PURE__ */ jsx12(
1737
- DsFormActions,
1737
+ KjunFormActions,
1738
1738
  {
1739
1739
  size: footerSize,
1740
1740
  cancelVariant: "secondary",
@@ -1783,7 +1783,7 @@ function hasContent(node) {
1783
1783
 
1784
1784
  // packages/native/src/card.tsx
1785
1785
  import { Fragment as Fragment4, jsx as jsx13, jsxs as jsxs6 } from "react/jsx-runtime";
1786
- function DsCard({
1786
+ function KjunCard({
1787
1787
  title,
1788
1788
  subtitle,
1789
1789
  header,
@@ -1801,7 +1801,7 @@ function DsCard({
1801
1801
  style
1802
1802
  }) {
1803
1803
  const { colors } = useKjunStyles();
1804
- const id = useId4().replace(/[^a-z0-9]/gi, "");
1804
+ const id = "kjun-" + useId4().replace(/[^a-z0-9]/gi, "");
1805
1805
  const inset = tokens9.card.padding[padding], bodyInset = tokens9.card.padding[bodyPadding];
1806
1806
  const corner = tokens9.card.radii[radius];
1807
1807
  const paint = tokens9.cardSurfaces[surface];
@@ -1874,7 +1874,7 @@ import {
1874
1874
  } from "react-native";
1875
1875
  import Svg3, { Circle as Circle2, Path as Path2 } from "react-native-svg";
1876
1876
  import { jsx as jsx14, jsxs as jsxs7 } from "react/jsx-runtime";
1877
- function DsBadge(props) {
1877
+ function KjunBadge(props) {
1878
1878
  return /* @__PURE__ */ jsx14(BadgeView, { ...props });
1879
1879
  }
1880
1880
  function BadgeView({
@@ -1936,7 +1936,7 @@ function BadgeView({
1936
1936
  }
1937
1937
  );
1938
1938
  }
1939
- function DsEmpty({
1939
+ function KjunEmpty({
1940
1940
  text = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",
1941
1941
  description,
1942
1942
  icon,
@@ -1954,7 +1954,7 @@ function DsEmpty({
1954
1954
  paddingVertical: stateContent === "empty" ? 0 : tokens10.dimension.value32
1955
1955
  },
1956
1956
  children: [
1957
- icon && /* @__PURE__ */ jsx14(View10, { style: { marginBottom: spec.iconGap }, children: /* @__PURE__ */ jsx14(DsIcon, { name: icon, size: spec.iconSize, color: colors.textSecondary }) }),
1957
+ icon && /* @__PURE__ */ jsx14(View10, { style: { marginBottom: spec.iconGap }, children: /* @__PURE__ */ jsx14(KjunIcon, { name: icon, size: spec.iconSize, color: colors.textSecondary }) }),
1958
1958
  /* @__PURE__ */ jsx14(KText, { style: { ...typeStyle("cardTitle"), color: colors.text, fontSize: spec.titleSize, lineHeight: spec.titleLineHeight, textAlign: "center", maxWidth: spec.textMaxWidth }, children: text }),
1959
1959
  description && /* @__PURE__ */ jsx14(
1960
1960
  KText,
@@ -1976,7 +1976,7 @@ function DsEmpty({
1976
1976
  }
1977
1977
  );
1978
1978
  }
1979
- function DsSpinner({ size = "md", text }) {
1979
+ function KjunSpinner({ size = "md", text }) {
1980
1980
  const { colors } = useKjunStyles(), reduced = useReducedMotion(), rotation = useRef6(new Animated5.Value(0)).current;
1981
1981
  useEffect5(() => {
1982
1982
  if (reduced) return;
@@ -2054,7 +2054,7 @@ function DsSpinner({ size = "md", text }) {
2054
2054
  }
2055
2055
  );
2056
2056
  }
2057
- function DsAlert({
2057
+ function KjunAlert({
2058
2058
  type = "info",
2059
2059
  variant,
2060
2060
  size = "md",
@@ -2090,7 +2090,7 @@ function DsAlert({
2090
2090
  },
2091
2091
  children: [
2092
2092
  /* @__PURE__ */ jsx14(View10, { style: { height: lineHeight, justifyContent: "center", flexShrink: 0 }, children: /* @__PURE__ */ jsx14(
2093
- DsIcon,
2093
+ KjunIcon,
2094
2094
  {
2095
2095
  name: {
2096
2096
  info: "info-circle",
@@ -2134,7 +2134,7 @@ function DsAlert({
2134
2134
  onClose == null ? void 0 : onClose();
2135
2135
  },
2136
2136
  children: ({ pressed, hovered }) => /* @__PURE__ */ jsx14(
2137
- DsIcon,
2137
+ KjunIcon,
2138
2138
  {
2139
2139
  name: "x",
2140
2140
  size: geometry2.closeIconSize,
@@ -2147,7 +2147,7 @@ function DsAlert({
2147
2147
  }
2148
2148
  );
2149
2149
  }
2150
- function DsProgress({
2150
+ function KjunProgress({
2151
2151
  value = 0,
2152
2152
  max = 100,
2153
2153
  size = "md",
@@ -2229,7 +2229,7 @@ import {
2229
2229
  View as View11
2230
2230
  } from "react-native";
2231
2231
  import { jsx as jsx15, jsxs as jsxs8 } from "react/jsx-runtime";
2232
- function DsSkeleton({
2232
+ function KjunSkeleton({
2233
2233
  type = "text",
2234
2234
  rows = 3,
2235
2235
  columns = 4,
@@ -2605,7 +2605,7 @@ function ToastView({
2605
2605
  overflow: "hidden"
2606
2606
  },
2607
2607
  children: [
2608
- /* @__PURE__ */ jsx16(DsIcon, { name: icon, color: colors[`${tone}Accent`] }),
2608
+ /* @__PURE__ */ jsx16(KjunIcon, { name: icon, color: colors[`${tone}Accent`] }),
2609
2609
  /* @__PURE__ */ jsxs9(View12, { style: { flex: 1, minWidth: 0 }, children: [
2610
2610
  toast.title && /* @__PURE__ */ jsx16(KText, { style: { fontWeight: typeStyle("control").fontWeight, marginBottom: tokens13.extensions.toast.titleGap }, children: toast.title }),
2611
2611
  /* @__PURE__ */ jsx16(KText, { style: { color: colors.textSecondary }, children: toast.message }),
@@ -2653,7 +2653,7 @@ function ToastView({
2653
2653
  justifyContent: "center",
2654
2654
  borderRadius: tokens13.extensions.toast.closeRadius
2655
2655
  },
2656
- children: /* @__PURE__ */ jsx16(DsIcon, { name: "x", color: colors.textTertiary })
2656
+ children: /* @__PURE__ */ jsx16(KjunIcon, { name: "x", color: colors.textTertiary })
2657
2657
  }
2658
2658
  ),
2659
2659
  toast.showProgress !== false && !!toast.duration && /* @__PURE__ */ jsx16(
@@ -2844,7 +2844,7 @@ function FeedbackDialog({
2844
2844
  }) {
2845
2845
  const { options, value, error, busy, edit, cancel, submit } = useFeedbackDialog(controller, request);
2846
2846
  return /* @__PURE__ */ jsxs10(
2847
- DsModal,
2847
+ KjunModal,
2848
2848
  {
2849
2849
  open,
2850
2850
  onOpenChange: (open2) => {
@@ -2863,7 +2863,7 @@ function FeedbackDialog({
2863
2863
  children: [
2864
2864
  options.message && /* @__PURE__ */ jsx18(KText, { style: { marginBottom: tokens16.dimension.value16 }, children: options.message }),
2865
2865
  request.kind === "prompt" && /* @__PURE__ */ jsx18(
2866
- DsInput,
2866
+ KjunInput,
2867
2867
  {
2868
2868
  autoFocus: true,
2869
2869
  value,
@@ -2940,7 +2940,7 @@ import {
2940
2940
  View as View15
2941
2941
  } from "react-native";
2942
2942
  import { Fragment as Fragment5, jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
2943
- function DsCheckbox({
2943
+ function KjunCheckbox({
2944
2944
  value,
2945
2945
  val,
2946
2946
  label,
@@ -2989,7 +2989,7 @@ function DsCheckbox({
2989
2989
  backgroundColor: checked ? colors.brand : colors.surface
2990
2990
  },
2991
2991
  children: checked && /* @__PURE__ */ jsx19(
2992
- DsIcon,
2992
+ KjunIcon,
2993
2993
  {
2994
2994
  name: "check",
2995
2995
  size: tokens17.extensions.checkbox.iconSizes[size],
@@ -3018,7 +3018,7 @@ function useControlFocus(disabled) {
3018
3018
  ring: focused && !disabled ? { outlineStyle: "solid", outlineWidth: tokens17.states.focus.width, outlineOffset: tokens17.states.focus.choiceOffset, outlineColor: colors.focusRing } : {}
3019
3019
  };
3020
3020
  }
3021
- function DsSwitch({
3021
+ function KjunSwitch({
3022
3022
  value,
3023
3023
  label,
3024
3024
  ariaLabel,
@@ -3118,7 +3118,7 @@ function DsSwitch({
3118
3118
  );
3119
3119
  }
3120
3120
  var RadioContext = createContext14(null);
3121
- function DsRadio({
3121
+ function KjunRadio({
3122
3122
  value,
3123
3123
  val,
3124
3124
  label,
@@ -3194,7 +3194,7 @@ function DsRadio({
3194
3194
  }
3195
3195
  );
3196
3196
  }
3197
- function DsRadioGroup({
3197
+ function KjunRadioGroup({
3198
3198
  value,
3199
3199
  options = [],
3200
3200
  direction = "horizontal",
@@ -3227,7 +3227,7 @@ function DsRadioGroup({
3227
3227
  gap: direction === "vertical" ? tokens17.dimension.value8 : tokens17.dimension.value16
3228
3228
  },
3229
3229
  children: children || options.map((option) => /* @__PURE__ */ jsx19(
3230
- DsRadio,
3230
+ KjunRadio,
3231
3231
  {
3232
3232
  val: option.value,
3233
3233
  label: option.label,
@@ -3334,7 +3334,7 @@ function ButtonGroupLabel({ label, active, size, reduced }) {
3334
3334
 
3335
3335
  // packages/native/src/selection-groups.tsx
3336
3336
  import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
3337
- function DsButtonGroup({
3337
+ function KjunButtonGroup({
3338
3338
  value,
3339
3339
  options,
3340
3340
  size = "md",
@@ -3435,7 +3435,7 @@ function DsButtonGroup({
3435
3435
  }),
3436
3436
  children: [
3437
3437
  option.icon && /* @__PURE__ */ jsx21(
3438
- DsIcon,
3438
+ KjunIcon,
3439
3439
  {
3440
3440
  name: option.icon,
3441
3441
  size: tokens19.extensions.selection.iconSize,
@@ -3462,7 +3462,7 @@ function DsButtonGroup({
3462
3462
  }
3463
3463
  );
3464
3464
  }
3465
- function DsFilterGroup({
3465
+ function KjunFilterGroup({
3466
3466
  value,
3467
3467
  options,
3468
3468
  size = "sm",
@@ -3532,7 +3532,7 @@ function DsFilterGroup({
3532
3532
  }
3533
3533
  ),
3534
3534
  option.icon && /* @__PURE__ */ jsx21(
3535
- DsIcon,
3535
+ KjunIcon,
3536
3536
  {
3537
3537
  name: option.icon,
3538
3538
  size: tokens19.extensions.selection.iconSize,
@@ -3594,8 +3594,8 @@ import {
3594
3594
  Platform as Platform13
3595
3595
  } from "react-native";
3596
3596
  import { jsx as jsx22 } from "react/jsx-runtime";
3597
- var DsTextarea = forwardRef3(
3598
- function DsTextarea2({
3597
+ var KjunTextarea = forwardRef3(
3598
+ function KjunTextarea2({
3599
3599
  value,
3600
3600
  size = "md",
3601
3601
  error = false,
@@ -3673,7 +3673,7 @@ import {
3673
3673
  useWindowDimensions as useWindowDimensions3
3674
3674
  } from "react-native";
3675
3675
  import { jsx as jsx23, jsxs as jsxs14 } from "react/jsx-runtime";
3676
- function DsDrawer({
3676
+ function KjunDrawer({
3677
3677
  open,
3678
3678
  onOpenChange,
3679
3679
  title,
@@ -3781,14 +3781,14 @@ function DsDrawer({
3781
3781
  }
3782
3782
  ) }),
3783
3783
  closable && /* @__PURE__ */ jsx23(
3784
- DsButton,
3784
+ KjunButton,
3785
3785
  {
3786
3786
  size: "sm",
3787
3787
  variant: "ghost",
3788
3788
  ariaLabel: "\uB2EB\uAE30",
3789
3789
  onPress: close,
3790
3790
  style: { borderRadius: tokens21.extensions.drawer.closeRadius, width: tokens21.extensions.drawer.closeSize, height: tokens21.extensions.drawer.closeSize, paddingHorizontal: 0, paddingVertical: 0 },
3791
- children: /* @__PURE__ */ jsx23(DsIcon, { name: "x", size: tokens21.extensions.drawer.closeIconSize })
3791
+ children: /* @__PURE__ */ jsx23(KjunIcon, { name: "x", size: tokens21.extensions.drawer.closeIconSize })
3792
3792
  }
3793
3793
  )
3794
3794
  ]
@@ -4115,7 +4115,7 @@ import {
4115
4115
  } from "react-native";
4116
4116
  import { tokens as tokens23 } from "@kjun-ui/tokens";
4117
4117
  import { Fragment as Fragment6, jsx as jsx25, jsxs as jsxs16 } from "react/jsx-runtime";
4118
- function DsPopover({
4118
+ function KjunPopover({
4119
4119
  noPadding = false,
4120
4120
  open: controlled,
4121
4121
  onOpenChange,
@@ -4165,7 +4165,7 @@ function DsPopover({
4165
4165
  )
4166
4166
  ] });
4167
4167
  }
4168
- function DsTooltip({
4168
+ function KjunTooltip({
4169
4169
  content: message = "",
4170
4170
  placement = "top",
4171
4171
  delay = 0,
@@ -4282,9 +4282,9 @@ import { jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
4282
4282
  var DropdownContext = createContext15(null);
4283
4283
  var MenuIconSlotContext = createContext15(false);
4284
4284
  function hasLeadingIcon(node) {
4285
- return Children2.toArray(node).some((child) => isValidElement5(child) && (child.type === Fragment7 ? hasLeadingIcon(child.props.children) : child.type === DsDropdownItem && !!child.props.icon));
4285
+ return Children2.toArray(node).some((child) => isValidElement5(child) && (child.type === Fragment7 ? hasLeadingIcon(child.props.children) : child.type === KjunDropdownItem && !!child.props.icon));
4286
4286
  }
4287
- function DsDropdown({
4287
+ function KjunDropdown({
4288
4288
  disabled = false,
4289
4289
  placement = "bottom-start",
4290
4290
  trigger,
@@ -4294,7 +4294,7 @@ function DsDropdown({
4294
4294
  }) {
4295
4295
  const [open, setOpen] = useState19(false), currentOpen = useRef19(false), ref = useRef19(null);
4296
4296
  let control = trigger;
4297
- while (isValidElement5(control) && control.type === DsTooltip)
4297
+ while (isValidElement5(control) && control.type === KjunTooltip)
4298
4298
  control = control.props.children;
4299
4299
  const unavailable = disabled || isValidElement5(control) && !!(control.props.disabled || control.props.loading);
4300
4300
  const change = (v) => {
@@ -4330,7 +4330,7 @@ function DsDropdown({
4330
4330
  )
4331
4331
  ] });
4332
4332
  }
4333
- function DsDropdownItem({
4333
+ function KjunDropdownItem({
4334
4334
  variant = "default",
4335
4335
  icon,
4336
4336
  disabled = false,
@@ -4368,14 +4368,14 @@ function DsDropdownItem({
4368
4368
  opacity: disabled ? tokens24.states.opacity.disabled : 1
4369
4369
  }),
4370
4370
  children: [
4371
- icon ? /* @__PURE__ */ jsx26(DsIcon, { name: icon, size: tokens24.extensions.menu.iconSize, color: iconColor }) : reserveIcon && /* @__PURE__ */ jsx26(View21, { style: { width: tokens24.extensions.menu.iconSize }, accessible: false }),
4371
+ icon ? /* @__PURE__ */ jsx26(KjunIcon, { name: icon, size: tokens24.extensions.menu.iconSize, color: iconColor }) : reserveIcon && /* @__PURE__ */ jsx26(View21, { style: { width: tokens24.extensions.menu.iconSize }, accessible: false }),
4372
4372
  /* @__PURE__ */ jsx26(View21, { style: { flexGrow: 1, flexShrink: 1 }, children: content(children, { color, fontSize: tokens24.extensions.menu.optionFontSize, lineHeight: tokens24.extensions.menu.optionLineHeight }) }),
4373
- selected !== null && /* @__PURE__ */ jsx26(View21, { style: { opacity: selected ? 1 : 0 }, accessible: false, children: /* @__PURE__ */ jsx26(DsIcon, { name: "check", size: tokens24.extensions.menu.iconSize, color: colors.brand }) })
4373
+ selected !== null && /* @__PURE__ */ jsx26(View21, { style: { opacity: selected ? 1 : 0 }, accessible: false, children: /* @__PURE__ */ jsx26(KjunIcon, { name: "check", size: tokens24.extensions.menu.iconSize, color: colors.brand }) })
4374
4374
  ]
4375
4375
  }
4376
4376
  );
4377
4377
  }
4378
- function DsDropdownDivider() {
4378
+ function KjunDropdownDivider() {
4379
4379
  const { colors } = useKjunStyles();
4380
4380
  return /* @__PURE__ */ jsx26(
4381
4381
  View21,
@@ -4385,7 +4385,7 @@ function DsDropdownDivider() {
4385
4385
  }
4386
4386
  );
4387
4387
  }
4388
- function DsMenuButton({
4388
+ function KjunMenuButton({
4389
4389
  label,
4390
4390
  size = "md",
4391
4391
  variant = "secondary",
@@ -4401,7 +4401,7 @@ function DsMenuButton({
4401
4401
  }) {
4402
4402
  const [open, setOpen] = useState19(false);
4403
4403
  return /* @__PURE__ */ jsx26(
4404
- DsDropdown,
4404
+ KjunDropdown,
4405
4405
  {
4406
4406
  ...props,
4407
4407
  onOpen: () => {
@@ -4413,13 +4413,13 @@ function DsMenuButton({
4413
4413
  onClose == null ? void 0 : onClose();
4414
4414
  },
4415
4415
  trigger: /* @__PURE__ */ jsx26(
4416
- DsTooltip,
4416
+ KjunTooltip,
4417
4417
  {
4418
4418
  content: open ? "" : tooltip,
4419
4419
  placement: tooltipPlacement,
4420
4420
  delay: tooltipDelay,
4421
4421
  children: /* @__PURE__ */ jsx26(
4422
- DsButton,
4422
+ KjunButton,
4423
4423
  {
4424
4424
  size,
4425
4425
  variant,
@@ -4579,7 +4579,7 @@ function OptionRow({
4579
4579
  }),
4580
4580
  children: [
4581
4581
  /* @__PURE__ */ jsx27(View22, { style: { flex: 1 }, children: content(children || label, { fontSize: tokens25.extensions.menu.optionFontSize, lineHeight: tokens25.extensions.menu.optionLineHeight }) }),
4582
- selected && /* @__PURE__ */ jsx27(DsIcon, { name: "check", size: tokens25.extensions.menu.iconSize, color: colors.brand })
4582
+ selected && /* @__PURE__ */ jsx27(KjunIcon, { name: "check", size: tokens25.extensions.menu.iconSize, color: colors.brand })
4583
4583
  ]
4584
4584
  }
4585
4585
  );
@@ -4587,7 +4587,7 @@ function OptionRow({
4587
4587
 
4588
4588
  // packages/native/src/combobox.tsx
4589
4589
  import { Fragment as Fragment8, jsx as jsx28, jsxs as jsxs19 } from "react/jsx-runtime";
4590
- function DsCombobox({
4590
+ function KjunCombobox({
4591
4591
  value,
4592
4592
  options = [],
4593
4593
  placeholder = "\uAC80\uC0C9 \uB610\uB294 \uC120\uD0DD",
@@ -4695,7 +4695,7 @@ function SearchField({
4695
4695
  onSubmitEditing: onEnter
4696
4696
  };
4697
4697
  return /* @__PURE__ */ jsxs19(Fragment8, { children: [
4698
- /* @__PURE__ */ jsx28(View23, { ref, collapsable: false, children: /* @__PURE__ */ jsx28(DsInput, { ...inputProps, ...Platform17.OS === "web" ? { onClick: openFromPress } : { onPressIn: openFromPress }, "aria-expanded": open && !disabled, onBlur: focusGuard.clear, onFocus: () => {
4698
+ /* @__PURE__ */ jsx28(View23, { ref, collapsable: false, children: /* @__PURE__ */ jsx28(KjunInput, { ...inputProps, ...Platform17.OS === "web" ? { onClick: openFromPress } : { onPressIn: openFromPress }, "aria-expanded": open && !disabled, onBlur: focusGuard.clear, onFocus: () => {
4699
4699
  if (!clearing.current && focusGuard.canOpen()) onOpenChange(true);
4700
4700
  } }) }),
4701
4701
  /* @__PURE__ */ jsx28(
@@ -4717,12 +4717,12 @@ function SearchField({
4717
4717
  borderBottomWidth: tokens26.border.defaultWidth,
4718
4718
  borderBottomColor: colors.border
4719
4719
  },
4720
- children: /* @__PURE__ */ jsx28(DsInput, { ...inputProps, nativeID: searchId, autoFocus: true })
4720
+ children: /* @__PURE__ */ jsx28(KjunInput, { ...inputProps, nativeID: searchId, autoFocus: true })
4721
4721
  }
4722
4722
  ),
4723
4723
  loading ? (
4724
4724
  // Centered like the Select loading row on every platform.
4725
- /* @__PURE__ */ jsx28(View23, { style: { padding: tokens26.dimension.value12, alignItems: "center" }, children: /* @__PURE__ */ jsx28(DsSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) })
4725
+ /* @__PURE__ */ jsx28(View23, { style: { padding: tokens26.dimension.value12, alignItems: "center" }, children: /* @__PURE__ */ jsx28(KjunSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) })
4726
4726
  ) : failed ? /* @__PURE__ */ jsx28(
4727
4727
  KText,
4728
4728
  {
@@ -4773,7 +4773,7 @@ function displayMonth(value) {
4773
4773
  const date = /* @__PURE__ */ new Date(value + "T12:00:00");
4774
4774
  return Number.isNaN(date.getTime()) ? /* @__PURE__ */ new Date() : date;
4775
4775
  }
4776
- function DsDatePicker({
4776
+ function KjunDatePicker({
4777
4777
  value,
4778
4778
  min,
4779
4779
  max,
@@ -4838,7 +4838,7 @@ function DsDatePicker({
4838
4838
  }
4839
4839
  ),
4840
4840
  /* @__PURE__ */ jsx29(
4841
- DsIcon,
4841
+ KjunIcon,
4842
4842
  {
4843
4843
  name: "calendar",
4844
4844
  size: spec.iconSize,
@@ -4869,7 +4869,7 @@ function DsDatePicker({
4869
4869
  },
4870
4870
  children: [
4871
4871
  /* @__PURE__ */ jsx29(
4872
- DsButton,
4872
+ KjunButton,
4873
4873
  {
4874
4874
  size: "sm",
4875
4875
  variant: "ghost",
@@ -4885,7 +4885,7 @@ function DsDatePicker({
4885
4885
  "\uC6D4"
4886
4886
  ] }),
4887
4887
  /* @__PURE__ */ jsx29(
4888
- DsButton,
4888
+ KjunButton,
4889
4889
  {
4890
4890
  size: "sm",
4891
4891
  variant: "ghost",
@@ -5050,7 +5050,7 @@ function useSearchInputModel({
5050
5050
 
5051
5051
  // packages/native/src/search-input.tsx
5052
5052
  import { jsx as jsx30 } from "react/jsx-runtime";
5053
- function DsSearchInput({
5053
+ function KjunSearchInput({
5054
5054
  value,
5055
5055
  placeholder = "\uAC80\uC0C9...",
5056
5056
  ariaLabel,
@@ -5085,7 +5085,7 @@ function DsSearchInput({
5085
5085
  };
5086
5086
  if (!loadOptions)
5087
5087
  return /* @__PURE__ */ jsx30(
5088
- DsInput,
5088
+ KjunInput,
5089
5089
  {
5090
5090
  error,
5091
5091
  value: query,
@@ -5184,7 +5184,7 @@ function useSelectState(controlled, disabled, pageSize, onOpenChange) {
5184
5184
  // packages/native/src/select-control.tsx
5185
5185
  import { Platform as Platform19, View as View26 } from "react-native";
5186
5186
  import { Fragment as Fragment10, jsx as jsx32, jsxs as jsxs21 } from "react/jsx-runtime";
5187
- function DsSelect({
5187
+ function KjunSelect({
5188
5188
  value,
5189
5189
  options = [],
5190
5190
  placeholder = "\uC120\uD0DD",
@@ -5295,7 +5295,7 @@ function DsSelect({
5295
5295
  }, children: label || placeholder })
5296
5296
  ] }),
5297
5297
  /* @__PURE__ */ jsx32(View26, { style: { transform: [{ rotate: expanded ? "180deg" : "0deg" }] }, children: /* @__PURE__ */ jsx32(
5298
- DsIcon,
5298
+ KjunIcon,
5299
5299
  {
5300
5300
  name: "chevron-down",
5301
5301
  size: compound ? tokens29.extensions.timePicker.iconSize : spec.iconSize,
@@ -5347,7 +5347,7 @@ function DsSelect({
5347
5347
  borderBottomColor: colors.border
5348
5348
  },
5349
5349
  children: /* @__PURE__ */ jsx32(
5350
- DsInput,
5350
+ KjunInput,
5351
5351
  {
5352
5352
  autoFocus: true,
5353
5353
  value: query,
@@ -5363,7 +5363,7 @@ function DsSelect({
5363
5363
  )
5364
5364
  }
5365
5365
  ),
5366
- loading ? /* @__PURE__ */ jsx32(View26, { style: { padding: tokens29.dimension.value12 }, children: /* @__PURE__ */ jsx32(DsSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) }) : visible.map(({ option: o, key }, index) => /* @__PURE__ */ jsx32(
5366
+ loading ? /* @__PURE__ */ jsx32(View26, { style: { padding: tokens29.dimension.value12 }, children: /* @__PURE__ */ jsx32(KjunSpinner, { size: "sm", text: "\uAC80\uC0C9 \uC911..." }) }) : visible.map(({ option: o, key }, index) => /* @__PURE__ */ jsx32(
5367
5367
  OptionRow,
5368
5368
  {
5369
5369
  selected: selected(o),
@@ -5393,7 +5393,7 @@ function DsSelect({
5393
5393
  }
5394
5394
  ),
5395
5395
  !loading && visible.length < matching.length && /* @__PURE__ */ jsx32(
5396
- DsButton,
5396
+ KjunButton,
5397
5397
  {
5398
5398
  size: "sm",
5399
5399
  variant: "ghost",
@@ -5619,7 +5619,7 @@ function usePanelFocus(root) {
5619
5619
  // packages/native/src/tabs.tsx
5620
5620
  import { jsx as jsx34, jsxs as jsxs22 } from "react/jsx-runtime";
5621
5621
  var TabContext = createContext17({ value: "", id: "", names: [] });
5622
- function DsTabs({
5622
+ function KjunTabs({
5623
5623
  value,
5624
5624
  items = [],
5625
5625
  density = "comfortable",
@@ -5635,15 +5635,15 @@ function DsTabs({
5635
5635
  const { colors } = useKjunStyles(), panes = Children3.toArray(children).filter(
5636
5636
  isValidElement6
5637
5637
  );
5638
- const tabs = items.length ? items : panes.filter((child) => child.type === DsTabPane).map((child) => child.props);
5639
- const id = useId6(), root = useRef28(null);
5638
+ const tabs = items.length ? items : panes.filter((child) => child.type === KjunTabPane).map((child) => child.props);
5639
+ const id = "kjun-" + useId6(), root = useRef28(null);
5640
5640
  const menuState = useRef28({ tabs, onTabMenu });
5641
5641
  menuState.current = { tabs, onTabMenu };
5642
5642
  const pressedMenu = useRef28(null);
5643
5643
  useLayoutEffect15(() => {
5644
5644
  if (!onTabMenu || !tabs.some((tab) => tab.name === pressedMenu.current && !tab.disabled)) pressedMenu.current = null;
5645
5645
  }, [tabs, onTabMenu]);
5646
- const panelNames = panes.filter((child) => child.type === DsTabPane).map((child) => child.props.name);
5646
+ const panelNames = panes.filter((child) => child.type === KjunTabPane).map((child) => child.props.name);
5647
5647
  const geometry2 = tokens31.extensions.tabs;
5648
5648
  const underline = variant === "underline";
5649
5649
  const [hoveredTab, setHoveredTab] = useState27(null);
@@ -5774,7 +5774,7 @@ function DsTabs({
5774
5774
  },
5775
5775
  children: [
5776
5776
  tab.icon && /* @__PURE__ */ jsx34(
5777
- DsIcon,
5777
+ KjunIcon,
5778
5778
  {
5779
5779
  name: tab.icon,
5780
5780
  size: geometry2.iconSize,
@@ -5825,7 +5825,7 @@ function DsTabs({
5825
5825
  children && /* @__PURE__ */ jsx34(View28, { style: { marginTop: geometry2.contentGap }, children })
5826
5826
  ] }) });
5827
5827
  }
5828
- function DsTabPane({ name, children }) {
5828
+ function KjunTabPane({ name, children }) {
5829
5829
  const { value, id, names } = useContext13(TabContext);
5830
5830
  const root = useRef28(null);
5831
5831
  usePanelFocus(root);
@@ -5851,7 +5851,7 @@ function DsTabPane({ name, children }) {
5851
5851
  // packages/native/src/navigation.tsx
5852
5852
  import { jsx as jsx35, jsxs as jsxs23 } from "react/jsx-runtime";
5853
5853
  var AccordionContext = createContext18(null);
5854
- function DsAccordion({
5854
+ function KjunAccordion({
5855
5855
  multiple = false,
5856
5856
  tone = "card",
5857
5857
  children
@@ -5875,14 +5875,14 @@ function DsAccordion({
5875
5875
  }
5876
5876
  );
5877
5877
  }
5878
- function DsAccordionItem({
5878
+ function KjunAccordionItem({
5879
5879
  title = "",
5880
5880
  defaultOpen = false,
5881
5881
  disabled = false,
5882
5882
  header,
5883
5883
  children
5884
5884
  }) {
5885
- const { colors } = useKjunStyles(), group = useContext14(AccordionContext), id = useId7(), [own, setOwn] = useState28(defaultOpen), open = group ? group.opened.has(id) : own;
5885
+ const { colors } = useKjunStyles(), group = useContext14(AccordionContext), id = "kjun-" + useId7(), [own, setOwn] = useState28(defaultOpen), open = group ? group.opened.has(id) : own;
5886
5886
  const rotation = useMotionValue(open ? 1 : 0, tokens32.motion.collapse, void 0, void 0, true);
5887
5887
  const geometry2 = tokens32.extensions.accordion;
5888
5888
  const [hovered, setHovered] = useState28(false);
@@ -5917,7 +5917,7 @@ function DsAccordionItem({
5917
5917
  }),
5918
5918
  children: [
5919
5919
  /* @__PURE__ */ jsx35(View29, { style: { flex: 1, minWidth: 0 }, children: content(header || title, { ...typeStyle("control"), ...wrapping }) }),
5920
- /* @__PURE__ */ jsx35(Animated16.View, { style: { flexShrink: 0, transform: [{ rotate: rotation.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "180deg"] }) }] }, children: /* @__PURE__ */ jsx35(DsIcon, { name: "chevron-down", size: geometry2.iconSize, color: colors.textSecondary }) })
5920
+ /* @__PURE__ */ jsx35(Animated16.View, { style: { flexShrink: 0, transform: [{ rotate: rotation.interpolate({ inputRange: [0, 1], outputRange: ["0deg", "180deg"] }) }] }, children: /* @__PURE__ */ jsx35(KjunIcon, { name: "chevron-down", size: geometry2.iconSize, color: colors.textSecondary }) })
5921
5921
  ]
5922
5922
  }
5923
5923
  ),
@@ -5931,7 +5931,7 @@ function DsAccordionItem({
5931
5931
  ) })
5932
5932
  ] });
5933
5933
  }
5934
- function DsBreadcrumb({
5934
+ function KjunBreadcrumb({
5935
5935
  items,
5936
5936
  renderLink,
5937
5937
  onNavigate,
@@ -5950,7 +5950,7 @@ function DsBreadcrumb({
5950
5950
  },
5951
5951
  children: items.map((item, i) => {
5952
5952
  const label = /* @__PURE__ */ jsxs23(View29, { style: { flexDirection: "row", alignItems: "center", gap: tokens32.dimension.value4 }, children: [
5953
- item.icon && /* @__PURE__ */ jsx35(DsIcon, { name: item.icon, size: tokens32.extensions.breadcrumb.iconSize, color: colors.textSecondary }),
5953
+ item.icon && /* @__PURE__ */ jsx35(KjunIcon, { name: item.icon, size: tokens32.extensions.breadcrumb.iconSize, color: colors.textSecondary }),
5954
5954
  /* @__PURE__ */ jsx35(
5955
5955
  KText,
5956
5956
  {
@@ -5964,7 +5964,7 @@ function DsBreadcrumb({
5964
5964
  ] });
5965
5965
  return /* @__PURE__ */ jsxs23(Fragment11, { children: [
5966
5966
  i > 0 && /* @__PURE__ */ jsx35(
5967
- DsIcon,
5967
+ KjunIcon,
5968
5968
  {
5969
5969
  name: "chevron-right",
5970
5970
  size: tokens32.extensions.breadcrumb.separatorSize,
@@ -5986,7 +5986,7 @@ function DsBreadcrumb({
5986
5986
  }
5987
5987
  );
5988
5988
  }
5989
- function DsPagination({
5989
+ function KjunPagination({
5990
5990
  currentPage,
5991
5991
  page,
5992
5992
  totalPages,
@@ -6028,7 +6028,7 @@ function DsPagination({
6028
6028
  };
6029
6029
  const arrowSize = (_b = Object.keys(tokens32.button.iconSizes).find((size) => tokens32.button.iconSizes[size] === tokens32.extensions.pagination.iconSize)) != null ? _b : "sm";
6030
6030
  const button = (target, label, icon) => /* @__PURE__ */ jsx35(
6031
- DsButton,
6031
+ KjunButton,
6032
6032
  {
6033
6033
  style: pageButtonStyle,
6034
6034
  size: arrowSize,
@@ -6073,7 +6073,7 @@ function DsPagination({
6073
6073
  },
6074
6074
  children: [
6075
6075
  showSizeSelector && /* @__PURE__ */ jsx35(View29, { style: { minWidth: tokens32.extensions.pagination.selectorMinimumWidth }, children: /* @__PURE__ */ jsx35(
6076
- DsSelect,
6076
+ KjunSelect,
6077
6077
  {
6078
6078
  size: "sm",
6079
6079
  ariaLabel: "\uD398\uC774\uC9C0\uB2F9 \uD56D\uBAA9 \uC218",
@@ -6098,7 +6098,7 @@ function DsPagination({
6098
6098
  totalPages
6099
6099
  ] }) : pages.map(
6100
6100
  (n, i) => typeof n === "string" ? /* @__PURE__ */ jsx35(KText, { children: "..." }, "dots" + i) : /* @__PURE__ */ jsx35(
6101
- DsButton,
6101
+ KjunButton,
6102
6102
  {
6103
6103
  style: pageButtonStyle,
6104
6104
  size: "sm",
@@ -6126,7 +6126,7 @@ import { tokens as tokens33 } from "@kjun-ui/tokens";
6126
6126
  import { useContext as useContext15, useEffect as useEffect20, useRef as useRef29, useState as useState29 } from "react";
6127
6127
  import { Platform as Platform22, ScrollView as ScrollView7, View as View30 } from "react-native";
6128
6128
  import { jsx as jsx36, jsxs as jsxs24 } from "react/jsx-runtime";
6129
- function DsIconToggle({
6129
+ function KjunIconToggle({
6130
6130
  active = false,
6131
6131
  activeIcon,
6132
6132
  inactiveIcon,
@@ -6144,7 +6144,7 @@ function DsIconToggle({
6144
6144
  const { colors } = useKjunStyles();
6145
6145
  const navigation = useContext15(TopNavigationContext);
6146
6146
  const box = navigation ? navigation.controlSize : size === "xs" ? tokens33.extensions.iconToggle.compactSize : tokens33.extensions.iconToggle.sizes[size];
6147
- return /* @__PURE__ */ jsx36(DsTooltip, { content: disabled || loading ? "" : tooltip != null ? tooltip : ariaLabel, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ jsx36(
6147
+ return /* @__PURE__ */ jsx36(KjunTooltip, { content: disabled || loading ? "" : tooltip != null ? tooltip : ariaLabel, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ jsx36(
6148
6148
  AccessiblePressable,
6149
6149
  {
6150
6150
  accessibilityRole: "button",
@@ -6181,8 +6181,8 @@ function DsIconToggle({
6181
6181
  }),
6182
6182
  children: ({ pressed, hovered }) => {
6183
6183
  var _a;
6184
- return /* @__PURE__ */ jsx36(View30, { style: { width: box, height: box, alignItems: "center", justifyContent: "center", borderRadius: tokens33.extensions.iconToggle.radii[size], backgroundColor: !disabled && !loading && (pressed || hovered) ? colors.hover : "transparent" }, children: loading ? navigation ? /* @__PURE__ */ jsx36(DsIcon, { name: "loader-2", spin: true, size: navigation.iconSize }) : /* @__PURE__ */ jsx36(DsSpinner, { size: "sm" }) : /* @__PURE__ */ jsx36(
6185
- DsIcon,
6184
+ return /* @__PURE__ */ jsx36(View30, { style: { width: box, height: box, alignItems: "center", justifyContent: "center", borderRadius: tokens33.extensions.iconToggle.radii[size], backgroundColor: !disabled && !loading && (pressed || hovered) ? colors.hover : "transparent" }, children: loading ? navigation ? /* @__PURE__ */ jsx36(KjunIcon, { name: "loader-2", spin: true, size: navigation.iconSize }) : /* @__PURE__ */ jsx36(KjunSpinner, { size: "sm" }) : /* @__PURE__ */ jsx36(
6185
+ KjunIcon,
6186
6186
  {
6187
6187
  name: active ? activeIcon : inactiveIcon || activeIcon,
6188
6188
  filled: active,
@@ -6194,7 +6194,7 @@ function DsIconToggle({
6194
6194
  }
6195
6195
  ) });
6196
6196
  }
6197
- function DsCopyButton({
6197
+ function KjunCopyButton({
6198
6198
  value,
6199
6199
  ariaLabel,
6200
6200
  text,
@@ -6259,7 +6259,7 @@ function DsCopyButton({
6259
6259
  }),
6260
6260
  children: [
6261
6261
  /* @__PURE__ */ jsx36(
6262
- DsIcon,
6262
+ KjunIcon,
6263
6263
  {
6264
6264
  name: copied ? "check" : "copy",
6265
6265
  size: tokens33.button.iconSizes[size],
@@ -6280,7 +6280,7 @@ function DsCopyButton({
6280
6280
  }
6281
6281
  ) });
6282
6282
  }
6283
- function DsRefreshButton({
6283
+ function KjunRefreshButton({
6284
6284
  targetName = "",
6285
6285
  mode = "icon",
6286
6286
  text = "\uC0C8\uB85C\uACE0\uCE68",
@@ -6297,8 +6297,8 @@ function DsRefreshButton({
6297
6297
  const reduced = useReducedMotion();
6298
6298
  const label = ariaLabel || [targetName, "\uC0C8\uB85C\uACE0\uCE68"].filter(Boolean).join(" ");
6299
6299
  const hint = tooltip != null ? tooltip : mode === "icon" ? label : "";
6300
- const button = /* @__PURE__ */ jsx36(DsTooltip, { content: props.disabled || props.loading ? "" : hint, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ jsx36(
6301
- DsButton,
6300
+ const button = /* @__PURE__ */ jsx36(KjunTooltip, { content: props.disabled || props.loading ? "" : hint, placement: tooltipPlacement, delay: tooltipDelay, children: /* @__PURE__ */ jsx36(
6301
+ KjunButton,
6302
6302
  {
6303
6303
  ...props,
6304
6304
  size,
@@ -6320,14 +6320,14 @@ function safeExternalUrl(href) {
6320
6320
  return "";
6321
6321
  }
6322
6322
  }
6323
- function DsExternalLink({
6323
+ function KjunExternalLink({
6324
6324
  href = "",
6325
6325
  mode = "text",
6326
6326
  label,
6327
6327
  children,
6328
6328
  openUrl
6329
6329
  }) {
6330
- const { colors } = useKjunStyles(), url = safeExternalUrl(href), name = label || (mode === "icon" ? "\uC678\uBD80 \uB9C1\uD06C" : void 0), body = mode === "icon" ? /* @__PURE__ */ jsx36(DsIcon, { name: "external-link", color: colors.text }) : content(children);
6330
+ const { colors } = useKjunStyles(), url = safeExternalUrl(href), name = label || (mode === "icon" ? "\uC678\uBD80 \uB9C1\uD06C" : void 0), body = mode === "icon" ? /* @__PURE__ */ jsx36(KjunIcon, { name: "external-link", color: colors.text }) : content(children);
6331
6331
  return url ? /* @__PURE__ */ jsx36(
6332
6332
  AccessiblePressable,
6333
6333
  {
@@ -6339,13 +6339,13 @@ function DsExternalLink({
6339
6339
  // Like Web, text links show the new-window cue after the text.
6340
6340
  /* @__PURE__ */ jsxs24(View30, { style: { flexDirection: "row", alignItems: "center", gap: tokens33.dimension.value4 }, children: [
6341
6341
  body,
6342
- /* @__PURE__ */ jsx36(DsIcon, { name: "external-link", size: tokens33.iconSizes.small, color: colors.text })
6342
+ /* @__PURE__ */ jsx36(KjunIcon, { name: "external-link", size: tokens33.iconSizes.small, color: colors.text })
6343
6343
  ] })
6344
6344
  ) : body
6345
6345
  }
6346
6346
  ) : /* @__PURE__ */ jsx36(View30, { children: body });
6347
6347
  }
6348
- function DsScrollFade({ children }) {
6348
+ function KjunScrollFade({ children }) {
6349
6349
  return /* @__PURE__ */ jsx36(
6350
6350
  ScrollView7,
6351
6351
  {
@@ -6377,7 +6377,7 @@ function useQueryDisplay(props) {
6377
6377
  }
6378
6378
  return queryDisplayStatus(next, props);
6379
6379
  }
6380
- function DsDataState({
6380
+ function KjunDataState({
6381
6381
  preserveContent = false,
6382
6382
  refreshing = false,
6383
6383
  refreshError,
@@ -6426,7 +6426,7 @@ function DsDataState({
6426
6426
  backgroundColor: colors.surface
6427
6427
  },
6428
6428
  children: [
6429
- /* @__PURE__ */ jsx37(DsSpinner, { size: "xs" }),
6429
+ /* @__PURE__ */ jsx37(KjunSpinner, { size: "xs" }),
6430
6430
  /* @__PURE__ */ jsx37(KText, { style: { ...typeStyle("caption"), color: colors.textTertiary, flexShrink: 1, minWidth: 0 }, children: refreshingText })
6431
6431
  ]
6432
6432
  }
@@ -6436,12 +6436,12 @@ function DsDataState({
6436
6436
  {
6437
6437
  accessibilityLabel: loadingText,
6438
6438
  style: { paddingVertical: loadingPadding === "none" ? 0 : padding },
6439
- children: loadingContent || (skeleton ? /* @__PURE__ */ jsx37(View31, { style: { gap: tokens34.dimension.value12 }, children: Array.from({ length: skeletonCount }, (_, i) => /* @__PURE__ */ jsx37(DsSkeleton, { type: skeletonType }, i)) }) : /* @__PURE__ */ jsxs25(View31, { style: { alignItems: "center", gap: tokens34.dimension.value12 }, children: [
6440
- /* @__PURE__ */ jsx37(DsSpinner, { size: "md" }),
6439
+ children: loadingContent || (skeleton ? /* @__PURE__ */ jsx37(View31, { style: { gap: tokens34.dimension.value12 }, children: Array.from({ length: skeletonCount }, (_, i) => /* @__PURE__ */ jsx37(KjunSkeleton, { type: skeletonType }, i)) }) : /* @__PURE__ */ jsxs25(View31, { style: { alignItems: "center", gap: tokens34.dimension.value12 }, children: [
6440
+ /* @__PURE__ */ jsx37(KjunSpinner, { size: "md" }),
6441
6441
  /* @__PURE__ */ jsx37(KText, { style: { ...typeStyle("body"), color: colors.textSecondary, textAlign: "center", maxWidth: "100%" }, children: loadingText })
6442
6442
  ] }))
6443
6443
  }
6444
- ) : blockingError ? /* @__PURE__ */ jsx37(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ jsx37(View31, { style: { paddingVertical: padding }, children: errorContent || /* @__PURE__ */ jsx37(DsAlert, { type: "danger", title: "\uC624\uB958 \uBC1C\uC0DD", actions: onRetry && /* @__PURE__ */ jsx37(DsButton, { variant: "secondary", onPress: onRetry, children: retryText }), children: query.error }) }) }) : empty ? /* @__PURE__ */ jsx37(DataStateContentContext.Provider, { value: "empty", children: /* @__PURE__ */ jsx37(View31, { style: { paddingVertical: padding }, children: emptyContent || /* @__PURE__ */ jsx37(DsEmpty, { text: emptyText, icon: emptyIcon, children: emptyActionText && /* @__PURE__ */ jsx37(DsButton, { onPress: onEmptyAction, children: emptyActionText }) }) }) }) : null,
6444
+ ) : blockingError ? /* @__PURE__ */ jsx37(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ jsx37(View31, { style: { paddingVertical: padding }, children: errorContent || /* @__PURE__ */ jsx37(KjunAlert, { type: "danger", title: "\uC624\uB958 \uBC1C\uC0DD", actions: onRetry && /* @__PURE__ */ jsx37(KjunButton, { variant: "secondary", onPress: onRetry, children: retryText }), children: query.error }) }) }) : empty ? /* @__PURE__ */ jsx37(DataStateContentContext.Provider, { value: "empty", children: /* @__PURE__ */ jsx37(View31, { style: { paddingVertical: padding }, children: emptyContent || /* @__PURE__ */ jsx37(KjunEmpty, { text: emptyText, icon: emptyIcon, children: emptyActionText && /* @__PURE__ */ jsx37(KjunButton, { onPress: onEmptyAction, children: emptyActionText }) }) }) }) : null,
6445
6445
  (!concealed || preserveContent && state.hasQueryResult) && /* @__PURE__ */ jsx37(
6446
6446
  View31,
6447
6447
  {
@@ -6460,7 +6460,7 @@ function DsDataState({
6460
6460
  },
6461
6461
  "content"
6462
6462
  ),
6463
- visibleRefreshError && !state.initialLoading && /* @__PURE__ */ jsx37(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ jsx37(View31, { style: { marginTop: tokens34.dimension.value12 }, children: /* @__PURE__ */ jsx37(DsAlert, { type: "warning", size: "sm", actions: onRetry && /* @__PURE__ */ jsx37(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.` }) }) })
6463
+ visibleRefreshError && !state.initialLoading && /* @__PURE__ */ jsx37(DataStateContentContext.Provider, { value: "message", children: /* @__PURE__ */ jsx37(View31, { style: { marginTop: tokens34.dimension.value12 }, children: /* @__PURE__ */ jsx37(KjunAlert, { type: "warning", size: "sm", actions: onRetry && /* @__PURE__ */ jsx37(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.` }) }) })
6464
6464
  ]
6465
6465
  }
6466
6466
  );
@@ -6469,7 +6469,7 @@ function BoundaryDescription() {
6469
6469
  const { colors } = useKjunStyles();
6470
6470
  return /* @__PURE__ */ jsx37(KText, { style: { ...typeStyle({ ...tokens34.typography.caption, fontSizePx: tokens34.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." });
6471
6471
  }
6472
- var DsErrorBoundary = class extends Component {
6472
+ var KjunErrorBoundary = class extends Component {
6473
6473
  constructor() {
6474
6474
  super(...arguments);
6475
6475
  this.state = { error: false };
@@ -6497,7 +6497,7 @@ var DsErrorBoundary = class extends Component {
6497
6497
  /* @__PURE__ */ jsx37(BoundaryDescription, {})
6498
6498
  ] }),
6499
6499
  /* @__PURE__ */ jsx37(
6500
- DsButton,
6500
+ KjunButton,
6501
6501
  {
6502
6502
  style: { alignSelf: "center" },
6503
6503
  onPress: () => {
@@ -6556,28 +6556,28 @@ var marketRowStyle = { minHeight: marketGeometry.rowHeight, flexDirection: "row"
6556
6556
 
6557
6557
  // packages/native/src/market-skeleton.tsx
6558
6558
  import { jsx as jsx38, jsxs as jsxs26 } from "react/jsx-runtime";
6559
- function DsMarketTableSkeleton({ columns = [], rows = 8, showActions = false }) {
6559
+ function KjunMarketTableSkeleton({ columns = [], rows = 8, showActions = false }) {
6560
6560
  const { colors } = useKjunStyles();
6561
6561
  const cols = normalizeMarketColumns(columns), layout = useMarketLayout(cols, showActions);
6562
6562
  const actions = { width: marketGeometry.actionsWidth, paddingVertical: tokens37.dimension.value12, paddingHorizontal: tokens37.dimension.value4, justifyContent: "center", alignItems: "center" };
6563
6563
  return /* @__PURE__ */ jsx38(ScrollView8, { horizontal: true, onLayout: layout.onLayout, accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: /* @__PURE__ */ jsxs26(View32, { style: { width: layout.width }, children: [
6564
6564
  /* @__PURE__ */ jsxs26(View32, { style: { ...marketHeaderStyle, borderBottomColor: colors.border }, children: [
6565
- showActions && /* @__PURE__ */ jsx38(View32, { style: actions, children: /* @__PURE__ */ jsx38(DsSkeleton, { type: "block", width: tokens37.extensions.marketTable.actionSkeletonWidth, height: tokens37.extensions.marketTable.headerSkeletonHeight }) }),
6565
+ showActions && /* @__PURE__ */ jsx38(View32, { style: actions, children: /* @__PURE__ */ jsx38(KjunSkeleton, { type: "block", width: tokens37.extensions.marketTable.actionSkeletonWidth, height: tokens37.extensions.marketTable.headerSkeletonHeight }) }),
6566
6566
  cols.map((col, i) => /* @__PURE__ */ jsx38(View32, { style: { width: layout.widths[i], padding: tokens37.dimension.value12, justifyContent: "center" }, children: /* @__PURE__ */ jsx38(KText, { style: { ...typeStyle("meta"), color: colors.textTertiary, textAlign: col.align }, children: col.label }) }, col.key || i))
6567
6567
  ] }),
6568
6568
  Array.from({ length: Math.max(0, rows) }, (_, row) => /* @__PURE__ */ jsxs26(View32, { style: { ...marketRowStyle, borderBottomColor: colors.border }, children: [
6569
- showActions && /* @__PURE__ */ jsx38(View32, { style: actions, children: /* @__PURE__ */ jsx38(DsSkeleton, { type: "block", width: tokens37.extensions.marketTable.actionSkeletonWidth, height: tokens37.extensions.financial.priceSkeletonHeight }) }),
6569
+ showActions && /* @__PURE__ */ jsx38(View32, { style: actions, children: /* @__PURE__ */ jsx38(KjunSkeleton, { type: "block", width: tokens37.extensions.marketTable.actionSkeletonWidth, height: tokens37.extensions.financial.priceSkeletonHeight }) }),
6570
6570
  cols.map((col, i) => /* @__PURE__ */ jsx38(View32, { style: { width: layout.widths[i], paddingVertical: tokens37.dimension.value14, paddingHorizontal: tokens37.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__ */ jsxs26(View32, { style: { gap: tokens37.dimension.value2 }, children: [
6571
- /* @__PURE__ */ jsx38(View32, { style: { height: tokens37.typography.body.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ jsx38(DsSkeleton, { type: "block", width: "80%", height: tokens37.extensions.skeleton.lineHeights.md }) }),
6572
- /* @__PURE__ */ jsx38(View32, { style: { height: tokens37.typography.caption.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ jsx38(DsSkeleton, { type: "block", width: "60%", height: tokens37.extensions.skeleton.lineHeights.sm }) })
6573
- ] }) : /* @__PURE__ */ jsx38(DsSkeleton, { type: "block", width: tokens37.extensions.financial.priceSkeletonWidth, height: tokens37.extensions.financial.priceSkeletonHeight }) }, col.key || i))
6571
+ /* @__PURE__ */ jsx38(View32, { style: { height: tokens37.typography.body.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ jsx38(KjunSkeleton, { type: "block", width: "80%", height: tokens37.extensions.skeleton.lineHeights.md }) }),
6572
+ /* @__PURE__ */ jsx38(View32, { style: { height: tokens37.typography.caption.lineHeightPx, justifyContent: "center" }, children: /* @__PURE__ */ jsx38(KjunSkeleton, { type: "block", width: "60%", height: tokens37.extensions.skeleton.lineHeights.sm }) })
6573
+ ] }) : /* @__PURE__ */ jsx38(KjunSkeleton, { type: "block", width: tokens37.extensions.financial.priceSkeletonWidth, height: tokens37.extensions.financial.priceSkeletonHeight }) }, col.key || i))
6574
6574
  ] }, row))
6575
6575
  ] }) });
6576
6576
  }
6577
6577
 
6578
6578
  // packages/native/src/skeletons.tsx
6579
6579
  import { jsx as jsx39, jsxs as jsxs27 } from "react/jsx-runtime";
6580
- function DsListSkeleton({
6580
+ function KjunListSkeleton({
6581
6581
  rows = 8,
6582
6582
  variant = "market",
6583
6583
  avatar = true,
@@ -6607,21 +6607,21 @@ function DsListSkeleton({
6607
6607
  borderBottomColor: colors.border
6608
6608
  },
6609
6609
  children: [
6610
- avatar && /* @__PURE__ */ jsx39(DsSkeleton, { type: "avatar", width: avatarSize, height: avatarSize }),
6610
+ avatar && /* @__PURE__ */ jsx39(KjunSkeleton, { type: "avatar", width: avatarSize, height: avatarSize }),
6611
6611
  /* @__PURE__ */ jsxs27(View33, { style: { flex: 1, minWidth: 0, gap: market ? tokens38.dimension.value2 : tokens38.extensions.skeleton.detailGap }, children: [
6612
6612
  slot(0, /* @__PURE__ */ jsx39(
6613
- DsSkeleton,
6613
+ KjunSkeleton,
6614
6614
  {
6615
6615
  type: "block",
6616
6616
  height: tokens38.extensions.skeleton.lineHeights.md,
6617
6617
  width: i % 2 ? "80%" : "65%"
6618
6618
  }
6619
6619
  )),
6620
- slot(1, /* @__PURE__ */ jsx39(DsSkeleton, { type: "block", height: tokens38.extensions.skeleton.lineHeights.sm, width: "50%" }))
6620
+ slot(1, /* @__PURE__ */ jsx39(KjunSkeleton, { type: "block", height: tokens38.extensions.skeleton.lineHeights.sm, width: "50%" }))
6621
6621
  ] }),
6622
6622
  quote && /* @__PURE__ */ jsxs27(View33, { style: { alignItems: "flex-end", gap: market ? tokens38.dimension.value2 : tokens38.extensions.skeleton.detailGap }, children: [
6623
- slot(0, /* @__PURE__ */ jsx39(DsSkeleton, { type: "block", height: tokens38.extensions.skeleton.quoteHeight, width: tokens38.extensions.skeleton.quoteWidth })),
6624
- slot(1, /* @__PURE__ */ jsx39(DsSkeleton, { type: "block", height: tokens38.extensions.skeleton.lineHeights.sm, width: tokens38.extensions.skeleton.detailWidth }))
6623
+ slot(0, /* @__PURE__ */ jsx39(KjunSkeleton, { type: "block", height: tokens38.extensions.skeleton.quoteHeight, width: tokens38.extensions.skeleton.quoteWidth })),
6624
+ slot(1, /* @__PURE__ */ jsx39(KjunSkeleton, { type: "block", height: tokens38.extensions.skeleton.lineHeights.sm, width: tokens38.extensions.skeleton.detailWidth }))
6625
6625
  ] })
6626
6626
  ]
6627
6627
  },
@@ -6630,7 +6630,7 @@ function DsListSkeleton({
6630
6630
  }
6631
6631
  );
6632
6632
  }
6633
- function DsFormSkeleton({
6633
+ function KjunFormSkeleton({
6634
6634
  fields = ["", "", "", ""],
6635
6635
  columns = 1,
6636
6636
  multiline = false,
@@ -6661,10 +6661,10 @@ function DsFormSkeleton({
6661
6661
  children: [
6662
6662
  field ? /* @__PURE__ */ jsx39(KText, { style: { color: colors.text, ...typeStyle("label") }, children: typeof field === "string" ? field : field.label }) : (
6663
6663
  // The bar sits in a label-line slot so the field starts where the real input will.
6664
- /* @__PURE__ */ jsx39(View33, { style: { height: typeStyle("label").lineHeight, justifyContent: "center" }, children: /* @__PURE__ */ jsx39(DsSkeleton, { type: "block", height: tokens38.extensions.skeleton.formLabelHeight, width: tokens38.extensions.skeleton.formLabelWidth }) })
6664
+ /* @__PURE__ */ jsx39(View33, { style: { height: typeStyle("label").lineHeight, justifyContent: "center" }, children: /* @__PURE__ */ jsx39(KjunSkeleton, { type: "block", height: tokens38.extensions.skeleton.formLabelHeight, width: tokens38.extensions.skeleton.formLabelWidth }) })
6665
6665
  ),
6666
6666
  /* @__PURE__ */ jsx39(View33, { style: { borderRadius: tokens38.input[size].radius, overflow: "hidden" }, children: /* @__PURE__ */ jsx39(
6667
- DsSkeleton,
6667
+ KjunSkeleton,
6668
6668
  {
6669
6669
  type: "block",
6670
6670
  height: typeof field === "object" && field.height != null ? field.height : multiline ? tokens38.input[size].lineHeight * 3 + tokens38.input[size].textareaPaddingY * 2 + 2 * tokens38.border.controlWidth : tokens38.input[size].height
@@ -6677,7 +6677,7 @@ function DsFormSkeleton({
6677
6677
  }
6678
6678
  );
6679
6679
  }
6680
- function DsChartSkeleton({
6680
+ function KjunChartSkeleton({
6681
6681
  loadingText = "\uCC28\uD2B8\uB97C \uBD88\uB7EC\uC624\uB294 \uC911",
6682
6682
  kind = "line",
6683
6683
  height = tokens38.extensions.chartSkeleton.height
@@ -6731,7 +6731,7 @@ function DsChartSkeleton({
6731
6731
  alignItems: "center",
6732
6732
  justifyContent: "center"
6733
6733
  },
6734
- children: /* @__PURE__ */ jsx39(DsSkeleton, { type: "block", width: tokens38.extensions.chartSkeleton.donutLabelWidth, height: tokens38.extensions.chartSkeleton.donutLabelHeight })
6734
+ children: /* @__PURE__ */ jsx39(KjunSkeleton, { type: "block", width: tokens38.extensions.chartSkeleton.donutLabelWidth, height: tokens38.extensions.chartSkeleton.donutLabelHeight })
6735
6735
  }
6736
6736
  ) : /* @__PURE__ */ jsxs27(
6737
6737
  Svg5,
@@ -6913,7 +6913,7 @@ function useCountUp(value, animated, fromPrevious) {
6913
6913
  return useNumberMotion(value, animated, fromPrevious, useReducedMotion());
6914
6914
  }
6915
6915
  var MarketQuoteTypeContext = createContext19(null);
6916
- function DsAnimatedNumber({
6916
+ function KjunAnimatedNumber({
6917
6917
  value,
6918
6918
  decimals = 0,
6919
6919
  prefix = "",
@@ -6948,7 +6948,7 @@ function DsAnimatedNumber({
6948
6948
  }
6949
6949
  );
6950
6950
  }
6951
- function DsFreshness({
6951
+ function KjunFreshness({
6952
6952
  stale = false,
6953
6953
  source,
6954
6954
  fetchedAt,
@@ -6956,14 +6956,14 @@ function DsFreshness({
6956
6956
  }) {
6957
6957
  const label = source === "close" ? "\uC885\uAC00" : "\uC9C0\uC5F0";
6958
6958
  return stale ? /* @__PURE__ */ jsx40(
6959
- DsTooltip,
6959
+ KjunTooltip,
6960
6960
  {
6961
6961
  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)) : ""),
6962
- children: /* @__PURE__ */ jsx40(AccessiblePressable, { accessibilityLabel: label, focusRingRadius: tokens40.extensions.badge.radius, children: /* @__PURE__ */ jsx40(DsBadge, { variant: "warning", size: "xs", children: label }) })
6962
+ children: /* @__PURE__ */ jsx40(AccessiblePressable, { accessibilityLabel: label, focusRingRadius: tokens40.extensions.badge.radius, children: /* @__PURE__ */ jsx40(KjunBadge, { variant: "warning", size: "xs", children: label }) })
6963
6963
  }
6964
6964
  ) : null;
6965
6965
  }
6966
- function DsPriceCell({
6966
+ function KjunPriceCell({
6967
6967
  value,
6968
6968
  formatter,
6969
6969
  stale = false,
@@ -6973,13 +6973,13 @@ function DsPriceCell({
6973
6973
  fromPrevious = true
6974
6974
  }) {
6975
6975
  const { colors } = useKjunStyles(), quoteType = useContext16(MarketQuoteTypeContext);
6976
- return value == null ? /* @__PURE__ */ jsx40(DsSkeleton, { type: "block", height: tokens40.extensions.financial.priceSkeletonHeight, width: tokens40.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ jsxs28(View34, { style: { flexDirection: "row", alignItems: "center", gap: tokens40.extensions.financial.affixGap }, children: [
6976
+ return value == null ? /* @__PURE__ */ jsx40(KjunSkeleton, { type: "block", height: tokens40.extensions.financial.priceSkeletonHeight, width: tokens40.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ jsxs28(View34, { style: { flexDirection: "row", alignItems: "center", gap: tokens40.extensions.financial.affixGap }, children: [
6977
6977
  /* @__PURE__ */ jsx40(
6978
6978
  View34,
6979
6979
  {
6980
6980
  style: quoteType ? void 0 : { paddingVertical: tokens40.extensions.financial.pillPaddingY, paddingHorizontal: tokens40.extensions.financial.pillPaddingX, borderRadius: tokens40.radius.radius9999 },
6981
6981
  children: /* @__PURE__ */ jsx40(
6982
- DsAnimatedNumber,
6982
+ KjunAnimatedNumber,
6983
6983
  {
6984
6984
  value,
6985
6985
  formatter,
@@ -6989,10 +6989,10 @@ function DsPriceCell({
6989
6989
  )
6990
6990
  }
6991
6991
  ),
6992
- showFreshness && /* @__PURE__ */ jsx40(View34, { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx40(DsFreshness, { stale, source, fetchedAt }) })
6992
+ showFreshness && /* @__PURE__ */ jsx40(View34, { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx40(KjunFreshness, { stale, source, fetchedAt }) })
6993
6993
  ] });
6994
6994
  }
6995
- function DsSignedValue({
6995
+ function KjunSignedValue({
6996
6996
  value,
6997
6997
  format: kind = "number",
6998
6998
  isRaw = false,
@@ -7023,7 +7023,7 @@ function DsSignedValue({
7023
7023
  backgroundColor: tone === "pill" && !stale && !loading && n !== null ? domainColor(domainColors, role + "Bg") : void 0
7024
7024
  },
7025
7025
  children: [
7026
- loading ? /* @__PURE__ */ jsx40(DsSkeleton, { type: "block", width: tokens40.extensions.financial.signedSkeletonWidth, height: tokens40.extensions.financial.signedSkeletonHeight }) : /* @__PURE__ */ jsx40(
7026
+ loading ? /* @__PURE__ */ jsx40(KjunSkeleton, { type: "block", width: tokens40.extensions.financial.signedSkeletonWidth, height: tokens40.extensions.financial.signedSkeletonHeight }) : /* @__PURE__ */ jsx40(
7027
7027
  KText,
7028
7028
  {
7029
7029
  style: {
@@ -7037,7 +7037,7 @@ function DsSignedValue({
7037
7037
  children: display
7038
7038
  }
7039
7039
  ),
7040
- !loading && showFreshness && stale && n !== null && /* @__PURE__ */ jsx40(View34, { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx40(DsFreshness, { stale: true }) })
7040
+ !loading && showFreshness && stale && n !== null && /* @__PURE__ */ jsx40(View34, { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx40(KjunFreshness, { stale: true }) })
7041
7041
  ]
7042
7042
  }
7043
7043
  );
@@ -7045,7 +7045,7 @@ function DsSignedValue({
7045
7045
 
7046
7046
  // packages/native/src/financial-display.tsx
7047
7047
  import { Fragment as Fragment13, jsx as jsx41, jsxs as jsxs29 } from "react/jsx-runtime";
7048
- function DsDeviation({
7048
+ function KjunDeviation({
7049
7049
  value,
7050
7050
  variant = "pill",
7051
7051
  signalThreshold = 1,
@@ -7068,7 +7068,7 @@ function DsDeviation({
7068
7068
  },
7069
7069
  children: [
7070
7070
  /* @__PURE__ */ jsx41(
7071
- DsBadge,
7071
+ KjunBadge,
7072
7072
  {
7073
7073
  variant: neutral ? "secondary" : n > 0 ? "price-up" : "price-down",
7074
7074
  size: "sm",
@@ -7084,7 +7084,7 @@ function DsDeviation({
7084
7084
  }
7085
7085
  ),
7086
7086
  !signal && /* @__PURE__ */ jsx41(View35, { style: { width: tokens41.extensions.financial.warningIconSize, flexShrink: 0 } }),
7087
- signal && /* @__PURE__ */ jsx41(Fragment13, { children: /* @__PURE__ */ jsx41(View35, { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx41(DsTooltip, { content: `\uAD34\uB9AC\uC728 ${signalThreshold}% \uCD08\uACFC \u2014 \uCC28\uC775\uAC70\uB798 \uAE30\uD68C \uAC00\uB2A5`, children: /* @__PURE__ */ jsx41(
7087
+ signal && /* @__PURE__ */ jsx41(Fragment13, { children: /* @__PURE__ */ jsx41(View35, { style: { alignSelf: "center" }, children: /* @__PURE__ */ jsx41(KjunTooltip, { content: `\uAD34\uB9AC\uC728 ${signalThreshold}% \uCD08\uACFC \u2014 \uCC28\uC775\uAC70\uB798 \uAE30\uD68C \uAC00\uB2A5`, children: /* @__PURE__ */ jsx41(
7088
7088
  AccessiblePressable,
7089
7089
  {
7090
7090
  accessibilityRole: "image",
@@ -7098,7 +7098,7 @@ function DsDeviation({
7098
7098
  alignItems: "center",
7099
7099
  justifyContent: "center"
7100
7100
  },
7101
- children: /* @__PURE__ */ jsx41(DsIcon, { name: "alert-triangle", size: tokens41.extensions.financial.warningIconSize, color: colors.warning })
7101
+ children: /* @__PURE__ */ jsx41(KjunIcon, { name: "alert-triangle", size: tokens41.extensions.financial.warningIconSize, color: colors.warning })
7102
7102
  }
7103
7103
  ) }) }) })
7104
7104
  ]
@@ -7146,7 +7146,7 @@ function DsDeviation({
7146
7146
  }
7147
7147
  );
7148
7148
  }
7149
- function DsHeatmapCell({
7149
+ function KjunHeatmapCell({
7150
7150
  value = 0,
7151
7151
  min = 0,
7152
7152
  max = 1,
@@ -7190,7 +7190,7 @@ function DsHeatmapCell({
7190
7190
  }
7191
7191
  );
7192
7192
  }
7193
- function DsProgressCell({
7193
+ function KjunProgressCell({
7194
7194
  value = 0,
7195
7195
  max = 100,
7196
7196
  showLabel = true,
@@ -7253,7 +7253,7 @@ function DsProgressCell({
7253
7253
  }
7254
7254
  );
7255
7255
  }
7256
- function DsCollectionMark({
7256
+ function KjunCollectionMark({
7257
7257
  kind,
7258
7258
  active = false,
7259
7259
  size = "md"
@@ -7261,7 +7261,7 @@ function DsCollectionMark({
7261
7261
  const { colors, domainColors } = useKjunStyles();
7262
7262
  const box = tokens41.extensions.financial.markSizes[size], glyph = kind === "interest" ? tokens41.extensions.financial.heartMarkSizes[size] : box;
7263
7263
  return /* @__PURE__ */ jsx41(View35, { style: { width: box, height: box, alignItems: "center", justifyContent: "center", overflow: "visible" }, children: /* @__PURE__ */ jsx41(
7264
- DsIcon,
7264
+ KjunIcon,
7265
7265
  {
7266
7266
  name: kind === "favorite" ? "star" : "heart",
7267
7267
  filled: active,
@@ -7280,15 +7280,15 @@ var executionStates = {
7280
7280
  completed_with_errors: ["warning", "\uC644\uB8CC (\uC624\uB958)"],
7281
7281
  failed: ["danger", "\uC2E4\uD328"]
7282
7282
  };
7283
- function DsExecutionStatusBadge({
7283
+ function KjunExecutionStatusBadge({
7284
7284
  status,
7285
7285
  label,
7286
7286
  size = "md"
7287
7287
  }) {
7288
7288
  const state = status ? executionStates[status] : void 0;
7289
- return /* @__PURE__ */ jsx41(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") });
7289
+ return /* @__PURE__ */ jsx41(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") });
7290
7290
  }
7291
- function DsSparkline({
7291
+ function KjunSparkline({
7292
7292
  data = [],
7293
7293
  width = tokens41.extensions.financial.sparklineWidth,
7294
7294
  height = tokens41.extensions.financial.sparklineHeight,
@@ -7299,7 +7299,7 @@ function DsSparkline({
7299
7299
  stretch = false,
7300
7300
  ariaLabel
7301
7301
  }) {
7302
- const { colors, domainColors } = useKjunStyles(), id = useId8().replace(/:/g, ""), values = data.filter(Number.isFinite), min = Math.min(...values), max = Math.max(...values), range = max - min || 1, points = values.map(
7302
+ const { colors, domainColors } = useKjunStyles(), id = "kjun-" + useId8().replace(/:/g, ""), values = data.filter(Number.isFinite), min = Math.min(...values), max = Math.max(...values), range = max - min || 1, points = values.map(
7303
7303
  (v, i) => `${2 + i / Math.max(1, values.length - 1) * (width - 4)},${2 + height - 4 - (v - min) / range * (height - 4)}`
7304
7304
  ).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"));
7305
7305
  return /* @__PURE__ */ jsxs29(
@@ -7346,12 +7346,36 @@ function DsSparkline({
7346
7346
  // shared/package-runtime/table.ts
7347
7347
  import { nextTableSort } from "@kjun-ui/tokens";
7348
7348
  import { useEffect as useEffect23, useRef as useRef33, useState as useState34 } from "react";
7349
+
7350
+ // shared/package-runtime/table-model.ts
7349
7351
  function getValue(row, key) {
7350
7352
  return key.split(".").reduce(
7351
7353
  (value, part) => value != null && typeof value === "object" ? value[part] : void 0,
7352
7354
  row
7353
7355
  );
7354
7356
  }
7357
+ function sortTableRows(data, sort, { sortable = true, sortMode = "client" }) {
7358
+ if (!sortable || sortMode === "server" || !sort.key) return data;
7359
+ return [...data].sort((a, b) => {
7360
+ const x = getValue(a, sort.key), y = getValue(b, sort.key);
7361
+ const order = x === y ? 0 : typeof x === "number" && typeof y === "number" ? x > y ? 1 : -1 : String(x) > String(y) ? 1 : -1;
7362
+ return sort.order === "asc" ? order : -order;
7363
+ });
7364
+ }
7365
+ var tableRowKey = (row, rowKey, index = 0) => {
7366
+ var _a;
7367
+ return (_a = getValue(row, rowKey)) != null ? _a : index;
7368
+ };
7369
+ function tableSelection(rows, selected, rowKey) {
7370
+ const isSelected = (row) => selected.some((r) => getValue(r, rowKey) === getValue(row, rowKey));
7371
+ const all = rows.length > 0 && rows.every(isSelected);
7372
+ return { isSelected, all, some: rows.some(isSelected) && !all };
7373
+ }
7374
+ 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];
7375
+ var toggleAllRows = (rows, all) => all ? [] : [...rows];
7376
+ var toggleExpandedRow = (expanded, id, single) => expanded.includes(id) ? expanded.filter((v) => v !== id) : [...single ? [] : expanded, id];
7377
+
7378
+ // shared/package-runtime/table.ts
7355
7379
  function useTableModel(props) {
7356
7380
  var _a;
7357
7381
  const {
@@ -7371,17 +7395,9 @@ function useTableModel(props) {
7371
7395
  }), [internalExpanded, setExpanded] = useState34([]), [search, setSearch] = useState34(""), timer = useRef33(void 0);
7372
7396
  useEffect23(() => () => clearTimeout(timer.current), []);
7373
7397
  const sort = props.sort === void 0 ? internalSort : (_a = props.sort) != null ? _a : { key: "", order: "asc" };
7374
- const rows = sortable && sortMode !== "server" && sort.key ? [...data].sort((a, b) => {
7375
- const x = getValue(a, sort.key), y = getValue(b, sort.key);
7376
- const order = x === y ? 0 : typeof x === "number" && typeof y === "number" ? x > y ? 1 : -1 : String(x) > String(y) ? 1 : -1;
7377
- return sort.order === "asc" ? order : -order;
7378
- }) : data;
7379
- const key = (row, index = 0) => {
7380
- var _a2;
7381
- return (_a2 = getValue(row, rowKey)) != null ? _a2 : index;
7382
- };
7383
- const selectedRow = (row) => selected.some((r) => getValue(r, rowKey) === getValue(row, rowKey));
7384
- const all = rows.length > 0 && rows.every(selectedRow), some = rows.some(selectedRow) && !all, expanded = expandedRows != null ? expandedRows : internalExpanded;
7398
+ const rows = sortTableRows(data, sort, { sortable, sortMode });
7399
+ const key = (row, index = 0) => tableRowKey(row, rowKey, index);
7400
+ const { isSelected: selectedRow, all, some } = tableSelection(rows, selected, rowKey), expanded = expandedRows != null ? expandedRows : internalExpanded;
7385
7401
  return {
7386
7402
  rows,
7387
7403
  key,
@@ -7406,14 +7422,10 @@ function useTableModel(props) {
7406
7422
  if (props.sort === void 0) setSort(next);
7407
7423
  (_a2 = props.onSortChange) == null ? void 0 : _a2.call(props, next);
7408
7424
  },
7409
- toggleRow: (row) => onSelectionChange == null ? void 0 : onSelectionChange(
7410
- selectedRow(row) ? selected.filter(
7411
- (r) => getValue(r, rowKey) !== getValue(row, rowKey)
7412
- ) : [...selected, row]
7413
- ),
7414
- toggleAll: () => onSelectionChange == null ? void 0 : onSelectionChange(all ? [] : [...rows]),
7425
+ toggleRow: (row) => onSelectionChange == null ? void 0 : onSelectionChange(toggleSelectedRow(selected, row, rowKey)),
7426
+ toggleAll: () => onSelectionChange == null ? void 0 : onSelectionChange(toggleAllRows(rows, all)),
7415
7427
  toggleExpand: (row, index) => {
7416
- const id = key(row, index), next = expanded.includes(id) ? expanded.filter((v) => v !== id) : [...expandSingle ? [] : expanded, id];
7428
+ const next = toggleExpandedRow(expanded, key(row, index), expandSingle);
7417
7429
  setExpanded(next);
7418
7430
  onExpandedRowsChange == null ? void 0 : onExpandedRowsChange(next);
7419
7431
  }
@@ -7500,9 +7512,9 @@ function TableToolbar({
7500
7512
  selected.length,
7501
7513
  "\uAC1C \uC120\uD0DD"
7502
7514
  ] }),
7503
- /* @__PURE__ */ jsx42(DsButton, { size: "xs", variant: "ghost", onPress: toggleAll, children: "\uC804\uCCB4 \uC120\uD0DD" }),
7515
+ /* @__PURE__ */ jsx42(KjunButton, { size: "xs", variant: "ghost", onPress: toggleAll, children: "\uC804\uCCB4 \uC120\uD0DD" }),
7504
7516
  /* @__PURE__ */ jsx42(
7505
- DsButton,
7517
+ KjunButton,
7506
7518
  {
7507
7519
  size: "xs",
7508
7520
  variant: "ghost",
@@ -7517,7 +7529,7 @@ function TableToolbar({
7517
7529
  (searchable || toolbar) && // Like Web: the search toolbar sits on the surface so the filled search field stands out from it.
7518
7530
  /* @__PURE__ */ jsxs30(View36, { style: { ...toolbarStyle, backgroundColor: colors.surface }, children: [
7519
7531
  searchable && /* @__PURE__ */ jsx42(View36, { style: { width: tokens42.table.searchWidth, maxWidth: "100%" }, children: /* @__PURE__ */ jsx42(
7520
- DsInput,
7532
+ KjunInput,
7521
7533
  {
7522
7534
  size: "sm",
7523
7535
  value: search,
@@ -7579,7 +7591,7 @@ function TableGrid({ initialLoading, skeletonRows, state, onRowClick, selectable
7579
7591
  },
7580
7592
  children: [
7581
7593
  selectable && /* @__PURE__ */ jsx43(View37, { style: { width: geometry2.actionColumnWidth, alignItems: "center" }, children: /* @__PURE__ */ jsx43(
7582
- DsCheckbox,
7594
+ KjunCheckbox,
7583
7595
  {
7584
7596
  size: "sm",
7585
7597
  value: state.all,
@@ -7618,7 +7630,7 @@ function TableGrid({ initialLoading, skeletonRows, state, onRowClick, selectable
7618
7630
  }
7619
7631
  ),
7620
7632
  sortable !== false && state.sort.key === col.key && /* @__PURE__ */ jsx43(
7621
- DsIcon,
7633
+ KjunIcon,
7622
7634
  {
7623
7635
  name: state.sort.order === "asc" ? "sort-ascending" : "sort-descending",
7624
7636
  size: tokens43.table.sortIconSize,
@@ -7644,7 +7656,7 @@ function TableGrid({ initialLoading, skeletonRows, state, onRowClick, selectable
7644
7656
  paddingHorizontal: cellPadding.x
7645
7657
  },
7646
7658
  children: /* @__PURE__ */ jsx43(
7647
- DsSkeleton,
7659
+ KjunSkeleton,
7648
7660
  {
7649
7661
  type: "block",
7650
7662
  height: geometry2.skeletonHeight,
@@ -7765,7 +7777,7 @@ function TableCards({
7765
7777
  const { colors } = useKjunStyles();
7766
7778
  const { title, subtitle, badges, inline, sections, actions, columnsForSection } = layout;
7767
7779
  return /* @__PURE__ */ jsxs32(View38, { style: { gap: tokens44.extensions.tableCard.gap, padding: tokens44.extensions.tableCard.listPadding }, children: [
7768
- initialLoading ? Array.from({ length: skeletonRows }, (_, i) => /* @__PURE__ */ jsx44(DsSkeleton, { type: "card" }, i)) : state.rows.map((row, i) => /* @__PURE__ */ jsxs32(
7780
+ initialLoading ? Array.from({ length: skeletonRows }, (_, i) => /* @__PURE__ */ jsx44(KjunSkeleton, { type: "card" }, i)) : state.rows.map((row, i) => /* @__PURE__ */ jsxs32(
7769
7781
  AccessiblePressable,
7770
7782
  {
7771
7783
  accessible: false,
@@ -7911,7 +7923,7 @@ function TableCards({
7911
7923
 
7912
7924
  // packages/native/src/table-view.tsx
7913
7925
  import { jsx as jsx45, jsxs as jsxs33 } from "react/jsx-runtime";
7914
- function DsTable(props) {
7926
+ function KjunTable(props) {
7915
7927
  const {
7916
7928
  skeletonRows = 8,
7917
7929
  emptyText = "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4",
@@ -7965,7 +7977,7 @@ function DsTable(props) {
7965
7977
  });
7966
7978
  };
7967
7979
  const checkbox = (row, i) => /* @__PURE__ */ jsx45(
7968
- DsCheckbox,
7980
+ KjunCheckbox,
7969
7981
  {
7970
7982
  value: state.selectedRow(row),
7971
7983
  ariaLabel: `\uD589 \uC120\uD0DD ${i + 1}`,
@@ -7974,7 +7986,7 @@ function DsTable(props) {
7974
7986
  }
7975
7987
  );
7976
7988
  const expand = (row, i) => /* @__PURE__ */ jsx45(
7977
- DsButton,
7989
+ KjunButton,
7978
7990
  {
7979
7991
  variant: "ghost",
7980
7992
  size: "xs",
@@ -8004,7 +8016,7 @@ function DsTable(props) {
8004
8016
  }
8005
8017
  ),
8006
8018
  /* @__PURE__ */ jsxs33(
8007
- DsDataState,
8019
+ KjunDataState,
8008
8020
  {
8009
8021
  queryKey: props.queryKey,
8010
8022
  resultKey: query.usesQueryState ? query.hasCurrentResult ? props.queryKey : null : void 0,
@@ -8016,7 +8028,7 @@ function DsTable(props) {
8016
8028
  children: [
8017
8029
  card ? /* @__PURE__ */ jsx45(TableCards, { ...{ initialLoading: query.initialLoading, skeletonRows, state, onRowClick, selectable, checkbox, cell, expandable, expand, renderExpand, emptyContent, emptyText, layout } }) : /* @__PURE__ */ jsx45(TableGrid, { ...{ initialLoading: query.initialLoading, skeletonRows, state, onRowClick, selectable, checkbox, cell, expandable, expand, renderExpand, emptyContent, emptyText, visible, maxHeight, stickyHeader, compact, striped, hoverable }, sortable: props.sortable }),
8018
8030
  pagination && /* @__PURE__ */ jsx45(
8019
- DsPagination,
8031
+ KjunPagination,
8020
8032
  {
8021
8033
  currentPage: pagination.page,
8022
8034
  totalPages: Math.ceil(
@@ -8061,7 +8073,7 @@ var kpiFormat = (item, value = item.value) => {
8061
8073
  maximumFractionDigits: (_b = item.decimals) != null ? _b : 0
8062
8074
  }).format(item.semantic === "price" ? Math.abs(value) : value);
8063
8075
  };
8064
- function DsKpiHero(props) {
8076
+ function KjunKpiHero(props) {
8065
8077
  const {
8066
8078
  loading = false,
8067
8079
  label,
@@ -8140,7 +8152,7 @@ function DsKpiHero(props) {
8140
8152
  ),
8141
8153
  loading ? (
8142
8154
  // Placeholders fill each line's height, like Web's 1lh; the value width approximates Web's 7ch.
8143
- /* @__PURE__ */ jsx47(DsSkeleton, { type: "block", height: typeStyle(numberRole).lineHeight, width: font * 4.8 })
8155
+ /* @__PURE__ */ jsx47(KjunSkeleton, { type: "block", height: typeStyle(numberRole).lineHeight, width: font * 4.8 })
8144
8156
  ) : /* @__PURE__ */ jsx47(
8145
8157
  KpiNumberLine,
8146
8158
  {
@@ -8150,7 +8162,7 @@ function DsKpiHero(props) {
8150
8162
  suffixGap: geometry2.suffixGap,
8151
8163
  style: { ...numeric, ...typeStyle(numberRole) },
8152
8164
  unitStyle,
8153
- children: /* @__PURE__ */ jsx47(DsAnimatedNumber, { value, decimals, animated, formatter, style: typeStyle(numberRole) })
8165
+ children: /* @__PURE__ */ jsx47(KjunAnimatedNumber, { value, decimals, animated, formatter, style: typeStyle(numberRole) })
8154
8166
  }
8155
8167
  ),
8156
8168
  showDelta && /* @__PURE__ */ jsx47(
@@ -8163,7 +8175,7 @@ function DsKpiHero(props) {
8163
8175
  alignItems: "baseline",
8164
8176
  gap: spec.deltaGap
8165
8177
  },
8166
- children: loading ? /* @__PURE__ */ jsx47(DsSkeleton, { type: "block", height: typeStyle("numberMd").lineHeight, width: geometry2.deltaSkeletonWidth }) : /* @__PURE__ */ jsxs35(Fragment16, { children: [
8178
+ children: loading ? /* @__PURE__ */ jsx47(KjunSkeleton, { type: "block", height: typeStyle("numberMd").lineHeight, width: geometry2.deltaSkeletonWidth }) : /* @__PURE__ */ jsxs35(Fragment16, { children: [
8167
8179
  deltaAbsolute !== null && delta(deltaAbsolute, "absolute", { ...numeric, color: direction(deltaAbsolute), ...typeStyle("numberMd") }),
8168
8180
  deltaPercent !== null && delta(deltaPercent, "percent", { ...numeric, color: direction(deltaPercent), ...typeStyle("numberMd"), opacity: 0.9 }),
8169
8181
  deltaDescription && /* @__PURE__ */ jsx47(
@@ -8220,7 +8232,7 @@ function DsKpiHero(props) {
8220
8232
  }
8221
8233
  ),
8222
8234
  loading ? /* @__PURE__ */ jsx47(
8223
- DsSkeleton,
8235
+ KjunSkeleton,
8224
8236
  {
8225
8237
  type: "block",
8226
8238
  height: typeStyle("numberMd").lineHeight,
@@ -8239,7 +8251,7 @@ function DsKpiHero(props) {
8239
8251
  }
8240
8252
  ),
8241
8253
  item.desc && (loading ? /* @__PURE__ */ jsx47(
8242
- DsSkeleton,
8254
+ KjunSkeleton,
8243
8255
  {
8244
8256
  type: "block",
8245
8257
  width: geometry2.descriptionSkeletonWidth,
@@ -8276,7 +8288,7 @@ import {
8276
8288
  useWindowDimensions as useWindowDimensions9
8277
8289
  } from "react-native";
8278
8290
  import { jsx as jsx48, jsxs as jsxs36 } from "react/jsx-runtime";
8279
- function DsKpiRow({
8291
+ function KjunKpiRow({
8280
8292
  loading = false,
8281
8293
  items,
8282
8294
  size = "md",
@@ -8381,7 +8393,7 @@ function DsKpiRow({
8381
8393
  marginBottom: sub ? 0 : spec.labelMargin
8382
8394
  },
8383
8395
  children: [
8384
- busy && !item.label ? /* @__PURE__ */ jsx48(DsSkeleton, { type: "block", width: geometry2.labelSkeletonWidth, height: geometry2.labelSkeletonHeight }) : /* @__PURE__ */ jsx48(KText, { style: { minWidth: 0, flexShrink: 1, color: colors.textSecondary, ...typeStyle("caption") }, children: item.label }),
8396
+ busy && !item.label ? /* @__PURE__ */ jsx48(KjunSkeleton, { type: "block", width: geometry2.labelSkeletonWidth, height: geometry2.labelSkeletonHeight }) : /* @__PURE__ */ jsx48(KText, { style: { minWidth: 0, flexShrink: 1, color: colors.textSecondary, ...typeStyle("caption") }, children: item.label }),
8385
8397
  !busy && item.badgePlacement !== "value" && badge(item)
8386
8398
  ]
8387
8399
  }
@@ -8410,7 +8422,7 @@ function DsKpiRow({
8410
8422
  }
8411
8423
  ),
8412
8424
  busy && !seg.separator ? /* @__PURE__ */ jsx48(
8413
- DsSkeleton,
8425
+ KjunSkeleton,
8414
8426
  {
8415
8427
  type: "block",
8416
8428
  height: valueStyle.lineHeight,
@@ -8432,7 +8444,7 @@ function DsKpiRow({
8432
8444
  // Like Web's 1lh × 5ch: the placeholder fills the value line, and its width (set for the display
8433
8445
  // number) scales with the value's font so a text value gets a text-sized bar.
8434
8446
  /* @__PURE__ */ jsx48(
8435
- DsSkeleton,
8447
+ KjunSkeleton,
8436
8448
  {
8437
8449
  type: "block",
8438
8450
  height: valueStyle.lineHeight,
@@ -8454,7 +8466,7 @@ function DsKpiRow({
8454
8466
  }
8455
8467
  ),
8456
8468
  item.animated && typeof item.value === "number" ? /* @__PURE__ */ jsx48(
8457
- DsAnimatedNumber,
8469
+ KjunAnimatedNumber,
8458
8470
  {
8459
8471
  fromPrevious: true,
8460
8472
  value: item.value,
@@ -8478,7 +8490,7 @@ function DsKpiRow({
8478
8490
  ]
8479
8491
  }
8480
8492
  ),
8481
- item.desc && (busy ? /* @__PURE__ */ jsx48(DsSkeleton, { type: "block", height: typeStyle("caption").lineHeight, width: geometry2.descriptionSkeletonWidth }) : /* @__PURE__ */ jsx48(
8493
+ item.desc && (busy ? /* @__PURE__ */ jsx48(KjunSkeleton, { type: "block", height: typeStyle("caption").lineHeight, width: geometry2.descriptionSkeletonWidth }) : /* @__PURE__ */ jsx48(
8482
8494
  KText,
8483
8495
  {
8484
8496
  style: {
@@ -8601,8 +8613,8 @@ function MarketIdentity({
8601
8613
  children: label
8602
8614
  }
8603
8615
  ),
8604
- ((_f = props.interestKeys) == null ? void 0 : _f.has(id)) && /* @__PURE__ */ jsx49(DsCollectionMark, { kind: "interest", size: "sm", active: true }),
8605
- ((_g = props.favoriteKeys) == null ? void 0 : _g.has(id)) && /* @__PURE__ */ jsx49(DsCollectionMark, { kind: "favorite", size: "sm", active: true }),
8616
+ ((_f = props.interestKeys) == null ? void 0 : _f.has(id)) && /* @__PURE__ */ jsx49(KjunCollectionMark, { kind: "interest", size: "sm", active: true }),
8617
+ ((_g = props.favoriteKeys) == null ? void 0 : _g.has(id)) && /* @__PURE__ */ jsx49(KjunCollectionMark, { kind: "favorite", size: "sm", active: true }),
8606
8618
  (_h = props.renderNameSuffix) == null ? void 0 : _h.call(props, row)
8607
8619
  ]
8608
8620
  }
@@ -8649,7 +8661,7 @@ function MarketFooter({
8649
8661
  } = props;
8650
8662
  return /* @__PURE__ */ jsxs37(Fragment17, { children: [
8651
8663
  pagination && /* @__PURE__ */ jsx49(
8652
- DsPagination,
8664
+ KjunPagination,
8653
8665
  {
8654
8666
  currentPage: pagination.page,
8655
8667
  totalPages: Math.ceil(pagination.total / pagination.size),
@@ -8687,7 +8699,7 @@ function MarketFooter({
8687
8699
 
8688
8700
  // packages/native/src/market-cards.tsx
8689
8701
  import { Fragment as Fragment18, jsx as jsx50, jsxs as jsxs38 } from "react/jsx-runtime";
8690
- function DsMarketCards(props) {
8702
+ function KjunMarketCards(props) {
8691
8703
  const {
8692
8704
  rows = [],
8693
8705
  rowKey = "id",
@@ -8765,13 +8777,13 @@ function DsMarketCards(props) {
8765
8777
  metricDisplay: display
8766
8778
  }) : /* @__PURE__ */ jsxs38(Fragment18, { children: [
8767
8779
  /* @__PURE__ */ jsx50(
8768
- DsDataState,
8780
+ KjunDataState,
8769
8781
  {
8770
8782
  ...props,
8771
8783
  loadingPadding: "none",
8772
8784
  empty: !rows.length,
8773
- loadingContent: /* @__PURE__ */ jsx50(DsListSkeleton, { variant: "compact" }),
8774
- emptyContent: /* @__PURE__ */ jsx50(DsEmpty, { text: emptyMessage, description: emptySubMessage }),
8785
+ loadingContent: /* @__PURE__ */ jsx50(KjunListSkeleton, { variant: "compact" }),
8786
+ emptyContent: /* @__PURE__ */ jsx50(KjunEmpty, { text: emptyMessage, description: emptySubMessage }),
8775
8787
  children: /* @__PURE__ */ jsxs38(View44, { children: [
8776
8788
  state.pill && /* @__PURE__ */ jsx50(KText, { style: { textAlign: "right", paddingHorizontal: tokens49.dimension.value16, paddingVertical: tokens49.dimension.value8, ...typeStyle("caption"), color: colors.textSecondary }, children: state.pill.label }),
8777
8789
  rows.map((row, i) => {
@@ -8797,21 +8809,21 @@ function DsMarketCards(props) {
8797
8809
  children: [
8798
8810
  /* @__PURE__ */ jsx50(MarketIdentity, { row, props, compact: true }),
8799
8811
  /* @__PURE__ */ jsx50(View44, { style: { marginLeft: tokens49.dimension.value12, alignItems: "flex-end" }, children: ((_b = state.pill) == null ? void 0 : _b.format) === "sparkline" ? /* @__PURE__ */ jsx50(
8800
- DsSparkline,
8812
+ KjunSparkline,
8801
8813
  {
8802
8814
  data: getValue(row, state.key) || [],
8803
8815
  width: tokens49.extensions.marketTable.sparklineWidth,
8804
8816
  height: tokens49.extensions.marketTable.sparklineHeight
8805
8817
  }
8806
- ) : state.pill ? /* @__PURE__ */ jsx50(Fragment18, { children: metricLoading(row, state.key) ? /* @__PURE__ */ jsx50(DsSkeleton, { type: "block", height: tokens49.extensions.marketTable.valueSkeletonHeight, width: tokens49.extensions.marketTable.valueSkeletonWidth }) : isChange && getValue(row, state.key) != null ? /* @__PURE__ */ jsx50(
8807
- DsSignedValue,
8818
+ ) : state.pill ? /* @__PURE__ */ jsx50(Fragment18, { children: metricLoading(row, state.key) ? /* @__PURE__ */ jsx50(KjunSkeleton, { type: "block", height: tokens49.extensions.marketTable.valueSkeletonHeight, width: tokens49.extensions.marketTable.valueSkeletonWidth }) : isChange && getValue(row, state.key) != null ? /* @__PURE__ */ jsx50(
8819
+ KjunSignedValue,
8808
8820
  {
8809
8821
  value: finiteNumber(getValue(row, state.key)),
8810
8822
  formatter: () => display(row),
8811
8823
  stale: !!getValue(row, "stale"),
8812
8824
  tone: "pill"
8813
8825
  }
8814
- ) : isPrice && getValue(row, state.key) == null ? /* @__PURE__ */ jsx50(DsSkeleton, { type: "block", height: tokens49.extensions.financial.priceSkeletonHeight, width: tokens49.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ jsxs38(
8826
+ ) : isPrice && getValue(row, state.key) == null ? /* @__PURE__ */ jsx50(KjunSkeleton, { type: "block", height: tokens49.extensions.financial.priceSkeletonHeight, width: tokens49.extensions.financial.priceSkeletonWidth }) : /* @__PURE__ */ jsxs38(
8815
8827
  View44,
8816
8828
  {
8817
8829
  style: {
@@ -8861,7 +8873,7 @@ import { jsx as jsx51, jsxs as jsxs39 } from "react/jsx-runtime";
8861
8873
  var changeWeight = { fontWeight: typeStyle("label").fontWeight };
8862
8874
  var quoteDesktop = { price: typeStyle("control"), change: { ...typeStyle("caption"), ...changeWeight } };
8863
8875
  var quoteMobile = { price: typeStyle("input"), change: { ...typeStyle("body"), ...changeWeight } };
8864
- function DsMarketSimpleList(props) {
8876
+ function KjunMarketSimpleList(props) {
8865
8877
  const {
8866
8878
  rows = [],
8867
8879
  rowKey = "id",
@@ -8875,14 +8887,14 @@ function DsMarketSimpleList(props) {
8875
8887
  } = props, { colors } = useKjunStyles(), mobile = useWindowDimensions11().width < tokens50.responsive.market;
8876
8888
  return /* @__PURE__ */ jsxs39(View45, { children: [
8877
8889
  /* @__PURE__ */ jsx51(
8878
- DsDataState,
8890
+ KjunDataState,
8879
8891
  {
8880
8892
  ...props,
8881
8893
  loadingPadding: "none",
8882
8894
  empty: !rows.length,
8883
8895
  emptyText: emptyMessage,
8884
- loadingContent: /* @__PURE__ */ jsx51(DsListSkeleton, {}),
8885
- emptyContent: /* @__PURE__ */ jsx51(DsEmpty, { text: emptyMessage, description: emptySubMessage }),
8896
+ loadingContent: /* @__PURE__ */ jsx51(KjunListSkeleton, {}),
8897
+ emptyContent: /* @__PURE__ */ jsx51(KjunEmpty, { text: emptyMessage, description: emptySubMessage }),
8886
8898
  children: /* @__PURE__ */ jsx51(View45, { children: rows.map((row, i) => {
8887
8899
  var _a, _b;
8888
8900
  const price = priceValue(row), change = changeValue(row), stale = !!getValue(row, "stale"), source = String(getValue(row, "source") || ""), fetchedAt = String(getValue(row, "fetched_at") || "");
@@ -8919,7 +8931,7 @@ function DsMarketSimpleList(props) {
8919
8931
  },
8920
8932
  children: [
8921
8933
  /* @__PURE__ */ jsx51(
8922
- DsPriceCell,
8934
+ KjunPriceCell,
8923
8935
  {
8924
8936
  value: price,
8925
8937
  formatter: priceFormatter,
@@ -8940,16 +8952,16 @@ function DsMarketSimpleList(props) {
8940
8952
  },
8941
8953
  children: [
8942
8954
  price !== null && ((_b = props.renderPricePrefix) == null ? void 0 : _b.call(props, row)),
8943
- (finiteNumber(price) !== null || !changeLoading(row) && finiteNumber(change) !== null) && (closingPrice && !stale ? /* @__PURE__ */ jsx51(DsBadge, { variant: "secondary", size: "xs", children: "\uC885\uAC00" }) : /* @__PURE__ */ jsx51(
8944
- DsFreshness,
8955
+ (finiteNumber(price) !== null || !changeLoading(row) && finiteNumber(change) !== null) && (closingPrice && !stale ? /* @__PURE__ */ jsx51(KjunBadge, { variant: "secondary", size: "xs", children: "\uC885\uAC00" }) : /* @__PURE__ */ jsx51(
8956
+ KjunFreshness,
8945
8957
  {
8946
8958
  stale,
8947
8959
  source: closingPrice ? "close" : source,
8948
8960
  fetchedAt
8949
8961
  }
8950
8962
  )),
8951
- changeLoading(row) ? /* @__PURE__ */ jsx51(DsSkeleton, { type: "block", height: tokens50.extensions.marketList.changeSkeletonHeight, width: tokens50.extensions.marketList.changeSkeletonWidth }) : change !== null ? /* @__PURE__ */ jsx51(
8952
- DsSignedValue,
8963
+ changeLoading(row) ? /* @__PURE__ */ jsx51(KjunSkeleton, { type: "block", height: tokens50.extensions.marketList.changeSkeletonHeight, width: tokens50.extensions.marketList.changeSkeletonWidth }) : change !== null ? /* @__PURE__ */ jsx51(
8964
+ KjunSignedValue,
8953
8965
  {
8954
8966
  value: change,
8955
8967
  stale,
@@ -8985,12 +8997,12 @@ function DsMarketSimpleList(props) {
8985
8997
  import { tokens as tokens51 } from "@kjun-ui/tokens";
8986
8998
  import { View as View46 } from "react-native";
8987
8999
  import { jsx as jsx52, jsxs as jsxs40 } from "react/jsx-runtime";
8988
- function DsMarketListPanel({
9000
+ function KjunMarketListPanel({
8989
9001
  controls,
8990
9002
  children
8991
9003
  }) {
8992
9004
  const { colors } = useKjunStyles();
8993
- return /* @__PURE__ */ jsxs40(DsCard, { children: [
9005
+ return /* @__PURE__ */ jsxs40(KjunCard, { children: [
8994
9006
  /* @__PURE__ */ jsx52(View46, { children: controls }),
8995
9007
  /* @__PURE__ */ jsx52(
8996
9008
  View46,
@@ -9012,7 +9024,7 @@ import { useId as useId10, useState as useState38 } from "react";
9012
9024
  import { ScrollView as ScrollView11, View as View47 } from "react-native";
9013
9025
  import Svg8, { Defs as Defs4, LinearGradient as LinearGradient4, Rect as Rect5, Stop as Stop4 } from "react-native-svg";
9014
9026
  import { jsx as jsx53, jsxs as jsxs41 } from "react/jsx-runtime";
9015
- function DsMarketTable(props) {
9027
+ function KjunMarketTable(props) {
9016
9028
  const {
9017
9029
  rows = [],
9018
9030
  columns,
@@ -9034,13 +9046,13 @@ function DsMarketTable(props) {
9034
9046
  const render = (row, col) => {
9035
9047
  const value = getValue(row, col.key), stale = !!getValue(row, "stale");
9036
9048
  if (cellLoading(row, col))
9037
- return /* @__PURE__ */ jsx53(DsSkeleton, { type: "block", height: tokens52.extensions.marketTable.valueSkeletonHeight, width: tokens52.extensions.marketTable.valueSkeletonWidth });
9049
+ return /* @__PURE__ */ jsx53(KjunSkeleton, { type: "block", height: tokens52.extensions.marketTable.valueSkeletonHeight, width: tokens52.extensions.marketTable.valueSkeletonWidth });
9038
9050
  if (renderCell) return content(renderCell(row, col));
9039
9051
  if (["stock_name", "name", "symbol"].includes(col.key))
9040
9052
  return /* @__PURE__ */ jsx53(MarketIdentity, { row, props, table: true });
9041
9053
  if (col.type === "sparkline")
9042
9054
  return /* @__PURE__ */ jsx53(
9043
- DsSparkline,
9055
+ KjunSparkline,
9044
9056
  {
9045
9057
  data: Array.isArray(value) ? value : [],
9046
9058
  width: tokens52.extensions.marketTable.sparklineWidth,
@@ -9049,7 +9061,7 @@ function DsMarketTable(props) {
9049
9061
  );
9050
9062
  if (col.type === "price")
9051
9063
  return /* @__PURE__ */ jsx53(
9052
- DsPriceCell,
9064
+ KjunPriceCell,
9053
9065
  {
9054
9066
  value: finiteNumber(value),
9055
9067
  formatter: priceFormatter,
@@ -9059,7 +9071,7 @@ function DsMarketTable(props) {
9059
9071
  );
9060
9072
  if (col.type === "percent")
9061
9073
  return value == null ? /* @__PURE__ */ jsx53(KText, { children: "-" }) : /* @__PURE__ */ jsx53(
9062
- DsSignedValue,
9074
+ KjunSignedValue,
9063
9075
  {
9064
9076
  value: finiteNumber(value),
9065
9077
  format: "percent",
@@ -9075,7 +9087,7 @@ function DsMarketTable(props) {
9075
9087
  );
9076
9088
  const text = formatMetric ? formatMetric(value, col.type || "text", { currency, row, column: col }) : value == null ? "-" : String(value);
9077
9089
  return ["investor", "net_amount", "net_volume"].includes(col.type || "") ? /* @__PURE__ */ jsx53(
9078
- DsSignedValue,
9090
+ KjunSignedValue,
9079
9091
  {
9080
9092
  value: finiteNumber(value),
9081
9093
  formatter: () => text,
@@ -9106,14 +9118,14 @@ function DsMarketTable(props) {
9106
9118
  },
9107
9119
  children: [
9108
9120
  /* @__PURE__ */ jsx53(
9109
- DsDataState,
9121
+ KjunDataState,
9110
9122
  {
9111
9123
  ...props,
9112
9124
  loadingPadding: "none",
9113
9125
  empty: !rows.length,
9114
9126
  emptyText: emptyMessage,
9115
- loadingContent: /* @__PURE__ */ jsx53(DsMarketTableSkeleton, { columns, showActions }),
9116
- emptyContent: /* @__PURE__ */ jsx53(DsEmpty, { text: emptyMessage, description: emptySubMessage }),
9127
+ loadingContent: /* @__PURE__ */ jsx53(KjunMarketTableSkeleton, { columns, showActions }),
9128
+ emptyContent: /* @__PURE__ */ jsx53(KjunEmpty, { text: emptyMessage, description: emptySubMessage }),
9117
9129
  children: /* @__PURE__ */ jsx53(MarketQuoteTypeContext.Provider, { value: tableQuote, children: /* @__PURE__ */ jsxs41(View47, { style: { position: "relative", minWidth: 0 }, children: [
9118
9130
  /* @__PURE__ */ jsx53(
9119
9131
  ScrollView11,
@@ -9148,7 +9160,7 @@ function DsMarketTable(props) {
9148
9160
  alignItems: "center",
9149
9161
  justifyContent: "center"
9150
9162
  },
9151
- children: ["interest", "favorite"].map((kind) => /* @__PURE__ */ jsx53(View47, { style: { width: Math.max(tokens52.native.minimumTouchTarget, tokens52.extensions.iconToggle.sizes.xs), alignItems: "center" }, children: /* @__PURE__ */ jsx53(DsCollectionMark, { kind, size: "md" }) }, kind))
9163
+ children: ["interest", "favorite"].map((kind) => /* @__PURE__ */ jsx53(View47, { style: { width: Math.max(tokens52.native.minimumTouchTarget, tokens52.extensions.iconToggle.sizes.xs), alignItems: "center" }, children: /* @__PURE__ */ jsx53(KjunCollectionMark, { kind, size: "md" }) }, kind))
9152
9164
  }
9153
9165
  ),
9154
9166
  columns.map((col, columnIndex) => /* @__PURE__ */ jsxs41(
@@ -9181,7 +9193,7 @@ function DsMarketTable(props) {
9181
9193
  }
9182
9194
  ),
9183
9195
  col.sortable && /* @__PURE__ */ jsx53(
9184
- DsIcon,
9196
+ KjunIcon,
9185
9197
  {
9186
9198
  name: sortKey === col.key ? sortOrder === "asc" ? "sort-ascending" : "sort-descending" : "arrows-sort",
9187
9199
  size: tokens52.extensions.marketTable.sortIconSize,
@@ -9227,7 +9239,7 @@ function DsMarketTable(props) {
9227
9239
  },
9228
9240
  children: [
9229
9241
  /* @__PURE__ */ jsx53(
9230
- DsIconToggle,
9242
+ KjunIconToggle,
9231
9243
  {
9232
9244
  size: "xs",
9233
9245
  active: (_a = props.interestKeys) == null ? void 0 : _a.has(id),
@@ -9246,7 +9258,7 @@ function DsMarketTable(props) {
9246
9258
  }
9247
9259
  ),
9248
9260
  /* @__PURE__ */ jsx53(
9249
- DsIconToggle,
9261
+ KjunIconToggle,
9250
9262
  {
9251
9263
  size: "xs",
9252
9264
  active: (_d = props.favoriteKeys) == null ? void 0 : _d.has(id),
@@ -9280,7 +9292,7 @@ function DsMarketTable(props) {
9280
9292
  children: [
9281
9293
  /* @__PURE__ */ jsx53(View47, { style: { alignSelf: col.align === "right" ? "flex-end" : col.align === "center" ? "center" : void 0 }, children: render(row, col) }),
9282
9294
  col.key === (priceCol == null ? void 0 : priceCol.key) && /* @__PURE__ */ jsx53(
9283
- DsFreshness,
9295
+ KjunFreshness,
9284
9296
  {
9285
9297
  stale: !!getValue(row, "stale"),
9286
9298
  source: String(getValue(row, "source") || ""),
@@ -9321,7 +9333,7 @@ import { Children as Children4, createContext as createContext20, useContext as
9321
9333
  import { View as View48, Platform as Platform24 } from "react-native";
9322
9334
  import { Fragment as Fragment19, jsx as jsx54, jsxs as jsxs42 } from "react/jsx-runtime";
9323
9335
  var LastListRow = createContext20(false);
9324
- function DsListRow({ title, description, leading, trailing, actions, href, disabled = false, onPress }) {
9336
+ function KjunListRow({ title, description, leading, trailing, actions, href, disabled = false, onPress }) {
9325
9337
  const { colors } = useKjunStyles(), last = useContext17(LastListRow);
9326
9338
  const parts = /* @__PURE__ */ jsxs42(Fragment19, { children: [
9327
9339
  leading && /* @__PURE__ */ jsx54(View48, { children: content(leading) }),
@@ -9337,7 +9349,7 @@ function DsListRow({ title, description, leading, trailing, actions, href, disab
9337
9349
  actions && /* @__PURE__ */ jsx54(View48, { pointerEvents: disabled ? "none" : "auto", ...disabled && Platform24.OS === "web" ? { inert: true } : {}, style: { maxWidth: "45%", flexDirection: "row", flexWrap: "wrap", gap: tokens53.extensions.list.actionsGap, paddingRight: tokens53.extensions.list.actionsPadding, opacity: disabled ? tokens53.states.opacity.disabled : 1 }, children: content(actions) })
9338
9350
  ] });
9339
9351
  }
9340
- function DsListSection({ title, description, actions, children, ariaLabel }) {
9352
+ function KjunListSection({ title, description, actions, children, ariaLabel }) {
9341
9353
  const { colors } = useKjunStyles();
9342
9354
  return /* @__PURE__ */ jsxs42(View48, { style: { minWidth: 0, backgroundColor: colors.surface }, children: [
9343
9355
  (title || description || actions) && /* @__PURE__ */ jsxs42(View48, { style: { flexDirection: "row", alignItems: "center", gap: tokens53.extensions.list.gap, padding: tokens53.extensions.list.padding }, children: [
@@ -9356,7 +9368,7 @@ import { tokens as tokens54 } from "@kjun-ui/tokens";
9356
9368
  import { Children as Children5, Fragment as Fragment20, isValidElement as isValidElement7, useState as useState39 } from "react";
9357
9369
  import { View as View49, Platform as Platform25 } from "react-native";
9358
9370
  import { jsx as jsx55, jsxs as jsxs43 } from "react/jsx-runtime";
9359
- function DsTopNavigation({ title, description, leading, actions, safeAreaTop = 0 }) {
9371
+ function KjunTopNavigation({ title, description, leading, actions, safeAreaTop = 0 }) {
9360
9372
  const { colors } = useKjunStyles();
9361
9373
  const geometry2 = tokens54.extensions.topNavigation;
9362
9374
  const titleInset = Math.max(0, (geometry2.controlSize - tokens54.typography.sectionTitle.lineHeightPx) / 2);
@@ -9379,7 +9391,7 @@ function DsTopNavigation({ title, description, leading, actions, safeAreaTop = 0
9379
9391
  actions && /* @__PURE__ */ jsx55(TopNavigationContext.Provider, { value: { ...geometry2, slot: "actions" }, children: /* @__PURE__ */ jsx55(View49, { 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__ */ jsx55(View49, { onLayout: square("trailing"), style: { flexShrink: 1, minWidth: 0, maxWidth: "100%", marginRight: iconEdges.trailing ? -edgeInset : 0 }, children: content(action) }, "trailing")) }) })
9380
9392
  ] }) }) });
9381
9393
  }
9382
- function DsBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0C9", safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = true, onNavigate }) {
9394
+ function KjunBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0C9", safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = true, onNavigate }) {
9383
9395
  const { colors } = useKjunStyles();
9384
9396
  const geometry2 = tokens54.extensions.bottomNavigation;
9385
9397
  const hasIcons = items.some((item) => item.icon);
@@ -9426,7 +9438,7 @@ function DsBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0
9426
9438
  },
9427
9439
  children: [
9428
9440
  hasIcons && /* @__PURE__ */ jsxs43(View49, { style: { width: geometry2.iconSize, height: geometry2.iconSize, flexShrink: 0 }, children: [
9429
- item.icon && /* @__PURE__ */ jsx55(DsIcon, { name: item.icon, size: geometry2.iconSize, color: ink }),
9441
+ item.icon && /* @__PURE__ */ jsx55(KjunIcon, { name: item.icon, size: geometry2.iconSize, color: ink }),
9430
9442
  badge
9431
9443
  ] }),
9432
9444
  /* @__PURE__ */ jsxs43(View49, { style: { maxWidth: "100%" }, children: [
@@ -9440,7 +9452,7 @@ function DsBottomNavigation({ items, value, ariaLabel = "\uC8FC\uC694 \uD0D0\uC0
9440
9452
  );
9441
9453
  }) });
9442
9454
  }
9443
- function DsBottomActionBar({ description, children, safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = false }) {
9455
+ function KjunBottomActionBar({ description, children, safeAreaBottom = 0, keyboardVisible = false, hideOnKeyboard = false }) {
9444
9456
  const { colors } = useKjunStyles();
9445
9457
  const [width, setWidth] = useState39(0);
9446
9458
  const geometry2 = tokens54.extensions.navigation;
@@ -9468,7 +9480,7 @@ import { useRef as useRef35, useState as useState40 } from "react";
9468
9480
  import { Image, View as View50 } from "react-native";
9469
9481
  import { tokens as tokens55 } from "@kjun-ui/tokens";
9470
9482
  import { jsx as jsx56 } from "react/jsx-runtime";
9471
- function DsImage({ src, source, alt, decorative = false, aspectRatio = 1, fit = "cover", fallback: fallback2, onLoad, onError }) {
9483
+ function KjunImage({ src, source, alt, decorative = false, aspectRatio = 1, fit = "cover", fallback: fallback2, onLoad, onError }) {
9472
9484
  const { colors } = useKjunStyles();
9473
9485
  const request = JSON.stringify(source != null ? source : src), current = useRef35({ request, version: 0 });
9474
9486
  if (current.current.request !== request) current.current = { request, version: current.current.version + 1 };
@@ -9482,23 +9494,23 @@ function DsImage({ src, source, alt, decorative = false, aspectRatio = 1, fit =
9482
9494
  setFailed(version);
9483
9495
  onError == null ? void 0 : onError();
9484
9496
  }
9485
- } }, version) : /* @__PURE__ */ jsx56(View50, { 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__ */ jsx56(DsIcon, { name: "image", size: tokens55.extensions.image.fallbackIconSize, color: colors.textSecondary }), { color: colors.textSecondary, fontWeight: typeStyle("control").fontWeight, textAlign: "center" }) }) });
9497
+ } }, version) : /* @__PURE__ */ jsx56(View50, { 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__ */ jsx56(KjunIcon, { name: "image", size: tokens55.extensions.image.fallbackIconSize, color: colors.textSecondary }), { color: colors.textSecondary, fontWeight: typeStyle("control").fontWeight, textAlign: "center" }) }) });
9486
9498
  }
9487
- function DsAvatar({ src, source, name = "", alt, decorative = false, size = "md", shape = "circle", fallback: fallback2, onLoad, onError }) {
9499
+ function KjunAvatar({ src, source, name = "", alt, decorative = false, size = "md", shape = "circle", fallback: fallback2, onLoad, onError }) {
9488
9500
  const { colors } = useKjunStyles(), initial = Array.from(name.trim())[0];
9489
- return /* @__PURE__ */ jsx56(View50, { style: { width: tokens55.extensions.avatar[size], height: tokens55.extensions.avatar[size], borderRadius: shape === "circle" ? tokens55.radius.radius9999 : tokens55.radius.radius8, overflow: "hidden", flexShrink: 0 }, children: /* @__PURE__ */ jsx56(DsImage, { src, source, alt: alt || name || "\uC0AC\uC6A9\uC790", decorative, fallback: fallback2 != null ? fallback2 : initial ? /* @__PURE__ */ jsx56(KText, { style: { ...typeStyle(size === "sm" ? "control" : size === "lg" ? "sectionTitle" : "input"), fontWeight: typeStyle("control").fontWeight, color: colors.textSecondary }, children: initial.toLocaleUpperCase() }) : /* @__PURE__ */ jsx56(DsIcon, { name: "user", size: tokens55.extensions.avatar.fallbackIconSizes[size] }), onLoad, onError }) });
9501
+ return /* @__PURE__ */ jsx56(View50, { style: { width: tokens55.extensions.avatar[size], height: tokens55.extensions.avatar[size], borderRadius: shape === "circle" ? tokens55.radius.radius9999 : tokens55.radius.radius8, overflow: "hidden", flexShrink: 0 }, children: /* @__PURE__ */ jsx56(KjunImage, { src, source, alt: alt || name || "\uC0AC\uC6A9\uC790", decorative, fallback: fallback2 != null ? fallback2 : initial ? /* @__PURE__ */ jsx56(KText, { style: { ...typeStyle(size === "sm" ? "control" : size === "lg" ? "sectionTitle" : "input"), fontWeight: typeStyle("control").fontWeight, color: colors.textSecondary }, children: initial.toLocaleUpperCase() }) : /* @__PURE__ */ jsx56(KjunIcon, { name: "user", size: tokens55.extensions.avatar.fallbackIconSizes[size] }), onLoad, onError }) });
9490
9502
  }
9491
9503
 
9492
9504
  // packages/native/src/chip.tsx
9493
9505
  import { View as View51 } from "react-native";
9494
9506
  import { tokens as tokens56 } from "@kjun-ui/tokens";
9495
9507
  import { jsx as jsx57, jsxs as jsxs44 } from "react/jsx-runtime";
9496
- function DsChip({ label, icon, removable = false, disabled = false, size = "md", removeLabel, onRemove }) {
9508
+ function KjunChip({ label, icon, removable = false, disabled = false, size = "md", removeLabel, onRemove }) {
9497
9509
  const { colors } = useKjunStyles();
9498
9510
  return /* @__PURE__ */ jsxs44(View51, { style: { alignSelf: "flex-start", maxWidth: "100%", minWidth: 0, flexShrink: 1, flexDirection: "row", alignItems: "center", gap: tokens56.extensions.chip.gap, minHeight: removable ? tokens56.extensions.chip.nativeRemoveSize : tokens56.extensions.chip[size], paddingVertical: removable ? 0 : tokens56.extensions.chip.paddingY, paddingLeft: tokens56.extensions.chip.paddingX, paddingRight: removable ? 0 : tokens56.extensions.chip.paddingX, borderRadius: tokens56.extensions.chip.radius, backgroundColor: colors.secondary, opacity: disabled ? tokens56.states.opacity.disabled : 1 }, children: [
9499
- icon && /* @__PURE__ */ jsx57(DsIcon, { name: icon, size: tokens56.extensions.chip.iconSizes[size] }),
9511
+ icon && /* @__PURE__ */ jsx57(KjunIcon, { name: icon, size: tokens56.extensions.chip.iconSizes[size] }),
9500
9512
  /* @__PURE__ */ jsx57(KText, { style: { ...typeStyle(tokens56.extensions.chip.typography[size]), flexShrink: 1, minWidth: 0 }, children: label }),
9501
- removable && /* @__PURE__ */ jsx57(AccessiblePressable, { accessibilityRole: "button", accessibilityLabel: removeLabel || label + " \uC0AD\uC81C", disabled, accessibilityState: { disabled }, onPress: onRemove, style: { width: tokens56.extensions.chip.nativeRemoveSize, height: tokens56.extensions.chip.nativeRemoveSize, borderRadius: tokens56.extensions.chip.radius, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx57(DsIcon, { name: "x", size: tokens56.extensions.chip.removeIconSizes[size] }) })
9513
+ removable && /* @__PURE__ */ jsx57(AccessiblePressable, { accessibilityRole: "button", accessibilityLabel: removeLabel || label + " \uC0AD\uC81C", disabled, accessibilityState: { disabled }, onPress: onRemove, style: { width: tokens56.extensions.chip.nativeRemoveSize, height: tokens56.extensions.chip.nativeRemoveSize, borderRadius: tokens56.extensions.chip.radius, alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx57(KjunIcon, { name: "x", size: tokens56.extensions.chip.removeIconSizes[size] }) })
9502
9514
  ] });
9503
9515
  }
9504
9516
 
@@ -9795,10 +9807,10 @@ function RangeInput({
9795
9807
  }
9796
9808
  );
9797
9809
  }
9798
- function DsSlider(props) {
9810
+ function KjunSlider(props) {
9799
9811
  return /* @__PURE__ */ jsx58(RangeInput, { ...props });
9800
9812
  }
9801
- function DsRangeSlider(props) {
9813
+ function KjunRangeSlider(props) {
9802
9814
  return /* @__PURE__ */ jsx58(RangeInput, { ...props });
9803
9815
  }
9804
9816
 
@@ -9813,7 +9825,7 @@ var componentIcons = { minus };
9813
9825
 
9814
9826
  // packages/native/src/quantity-stepper.tsx
9815
9827
  import { jsx as jsx59, jsxs as jsxs46 } from "react/jsx-runtime";
9816
- function DsQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disabled = false, error = false, size = "md", block = false, id, ariaLabel, onValueChange, onChangeCommit, onInvalidInput }) {
9828
+ function KjunQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disabled = false, error = false, size = "md", block = false, id, ariaLabel, onValueChange, onChangeCommit, onInvalidInput }) {
9817
9829
  const { colors, fontFamily } = useKjunStyles();
9818
9830
  const field = useKjunField();
9819
9831
  const invalid = error || !!(field == null ? void 0 : field.error);
@@ -9911,7 +9923,7 @@ function DsQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disab
9911
9923
  const surfaceBox = { position: "absolute", left: 0, right: 0, top: "50%", height: tokens58.input[size].height, marginTop: -tokens58.input[size].height / 2, borderRadius: surface.spec.radius };
9912
9924
  return /* @__PURE__ */ jsx59(IconFallbacks, { icons: componentIcons, children: /* @__PURE__ */ jsxs46(View53, { style: { flexDirection: "row", alignItems: "center", alignSelf: block ? "stretch" : "flex-start", maxWidth: "100%" }, children: [
9913
9925
  /* @__PURE__ */ jsx59(View53, { pointerEvents: "none", "aria-hidden": true, style: { ...surfaceBox, backgroundColor: colors.inputBg } }),
9914
- /* @__PURE__ */ jsx59(CompoundTarget, { square: true, children: /* @__PURE__ */ jsx59(DsButton, { size, style: decreaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uC904\uC774\uAE30", disabled: blocked || value <= min, onPress: () => move(-1), prefixIcon: "minus" }) }),
9926
+ /* @__PURE__ */ jsx59(CompoundTarget, { square: true, children: /* @__PURE__ */ jsx59(KjunButton, { size, style: decreaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uC904\uC774\uAE30", disabled: blocked || value <= min, onPress: () => move(-1), prefixIcon: "minus" }) }),
9915
9927
  /* @__PURE__ */ jsx59(View53, { style: { flex: block ? 1 : void 0, width: block ? void 0 : geometry2.valueWidth, minWidth: 0, minHeight: finePointer() ? void 0 : tokens58.native.minimumTouchTarget, justifyContent: "center" }, ...fieldTarget(() => {
9916
9928
  var _a;
9917
9929
  return (_a = inputRef.current) == null ? void 0 : _a.focus();
@@ -9944,7 +9956,7 @@ function DsQuantityStepper({ value, min = 0, max, step = 1, precision = 0, disab
9944
9956
  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 - tokens58.border.controlWidth, paddingVertical: 0 }
9945
9957
  }
9946
9958
  ) }),
9947
- /* @__PURE__ */ jsx59(CompoundTarget, { square: true, children: /* @__PURE__ */ jsx59(DsButton, { size, style: increaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uB298\uB9AC\uAE30", disabled: blocked || max !== void 0 && value >= max, onPress: () => move(1), prefixIcon: "plus" }) }),
9959
+ /* @__PURE__ */ jsx59(CompoundTarget, { square: true, children: /* @__PURE__ */ jsx59(KjunButton, { size, style: increaseStyle, variant: "ghost", ariaLabel: "\uC218\uB7C9 \uB298\uB9AC\uAE30", disabled: blocked || max !== void 0 && value >= max, onPress: () => move(1), prefixIcon: "plus" }) }),
9948
9960
  (invalid || surface.active) && /* @__PURE__ */ jsx59(View53, { pointerEvents: "none", "aria-hidden": true, style: { ...surfaceBox, borderWidth: invalid ? tokens58.border.controlWidth : tokens58.states.focus.width, borderColor: invalid ? colors.danger : colors.focusRing } })
9949
9961
  ] }) });
9950
9962
  }
@@ -9954,7 +9966,7 @@ import { Fragment as Fragment21, useEffect as useEffect27, useId as useId11, use
9954
9966
  import { View as View54 } from "react-native";
9955
9967
  import { createTimeDomain, tokens as tokens59 } from "@kjun-ui/tokens";
9956
9968
  import { jsx as jsx60, jsxs as jsxs47 } from "react/jsx-runtime";
9957
- function DsTimePicker({ value, precision = "minute", min, max, minuteStep = 1, secondStep = 1, disabled = false, error = false, clearable = true, size = "md", ariaLabel = "\uC2DC\uAC04", onValueChange, onChangeCommit }) {
9969
+ function KjunTimePicker({ value, precision = "minute", min, max, minuteStep = 1, secondStep = 1, disabled = false, error = false, clearable = true, size = "md", ariaLabel = "\uC2DC\uAC04", onValueChange, onChangeCommit }) {
9958
9970
  const geometry2 = tokens59.extensions.timePicker, spec = tokens59.input[size];
9959
9971
  const { colors } = useKjunStyles();
9960
9972
  const first = useRef38(null);
@@ -9975,7 +9987,7 @@ function DsTimePicker({ value, precision = "minute", min, max, minuteStep = 1, s
9975
9987
  return /* @__PURE__ */ jsxs47(View54, { accessibilityLabel: ariaLabel, style: { flexDirection: "row", alignItems: "center", maxWidth: "100%", minWidth: 0, backgroundColor: colors.inputBg, borderRadius: spec.radius }, children: [
9976
9988
  /* @__PURE__ */ jsx60(View54, { style: { flex: 1, flexDirection: "row", alignItems: "center", minWidth: 0 }, children: ["\uC2DC", "\uBD84", "\uCD08"].slice(0, precision === "second" ? 3 : 2).map((label, index) => /* @__PURE__ */ jsxs47(Fragment21, { children: [
9977
9989
  index > 0 && /* @__PURE__ */ jsx60(KText, { "aria-hidden": true, style: { ...inputTypeStyle(size), width: geometry2.separatorWidth, textAlign: "center", color: disabled || !valid ? colors.textDisabled : colors.textSecondary }, children: ":" }),
9978
- /* @__PURE__ */ jsx60(FieldContext.Provider, { value: { ...field, id: index === 0 ? fieldId : `${fieldId}-${index}` }, children: /* @__PURE__ */ jsx60(CompoundControlContext.Provider, { value: { size, focusRef: index === 0 ? first : void 0, onFocusChange: setFocused, leading: index === 0 }, children: /* @__PURE__ */ jsx60(View54, { style: { flexShrink: 0, minWidth: geometry2.segmentMinimumWidth }, children: /* @__PURE__ */ jsx60(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) => {
9990
+ /* @__PURE__ */ jsx60(FieldContext.Provider, { value: { ...field, id: index === 0 ? fieldId : `${fieldId}-${index}` }, children: /* @__PURE__ */ jsx60(CompoundControlContext.Provider, { value: { size, focusRef: index === 0 ? first : void 0, onFocusChange: setFocused, leading: index === 0 }, children: /* @__PURE__ */ jsx60(View54, { style: { flexShrink: 0, minWidth: geometry2.segmentMinimumWidth }, children: /* @__PURE__ */ jsx60(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) => {
9979
9991
  if (typeof next === "number") change(domain.select(value, index, next));
9980
9992
  }, 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 }) }) }) })
9981
9993
  ] }, label)) }),
@@ -9988,86 +10000,86 @@ function DsTimePicker({ value, precision = "minute", min, max, minuteStep = 1, s
9988
10000
  ] });
9989
10001
  }
9990
10002
  export {
9991
- DsAccordion,
9992
- DsAccordionItem,
9993
- DsAlert,
9994
- DsAnimatedNumber,
9995
- DsAvatar,
9996
- DsBadge,
9997
- DsBottomActionBar,
9998
- DsBottomNavigation,
9999
- DsBreadcrumb,
10000
- DsButton,
10001
- DsButtonGroup,
10002
- DsCard,
10003
- DsChartSkeleton,
10004
- DsCheckbox,
10005
- DsChip,
10006
- DsCollectionMark,
10007
- DsCombobox,
10008
- DsCopyButton,
10009
- DsDataState,
10010
- DsDatePicker,
10011
- DsDeviation,
10012
- DsDrawer,
10013
- DsDropdown,
10014
- DsDropdownDivider,
10015
- DsDropdownItem,
10016
- DsEmpty,
10017
- DsErrorBoundary,
10018
- DsExecutionStatusBadge,
10019
- DsExternalLink,
10020
- DsFilterGroup,
10021
- DsFormActions,
10022
- DsFormGroup,
10023
- DsFormLayout,
10024
- DsFormSkeleton,
10025
- DsFreshness,
10026
- DsHeatmapCell,
10027
- DsIcon,
10028
- DsIconToggle,
10029
- DsImage,
10030
- DsInput,
10031
- DsKpiHero,
10032
- DsKpiRow,
10033
- DsListRow,
10034
- DsListSection,
10035
- DsListSkeleton,
10036
- DsMarketCards,
10037
- DsMarketListPanel,
10038
- DsMarketSimpleList,
10039
- DsMarketTable,
10040
- DsMarketTableSkeleton,
10041
- DsMenuButton,
10042
- DsModal,
10043
- DsPagination,
10044
- DsPopover,
10045
- DsPriceCell,
10046
- DsProgress,
10047
- DsProgressCell,
10048
- DsQuantityStepper,
10049
- DsRadio,
10050
- DsRadioGroup,
10051
- DsRangeSlider,
10052
- DsRefreshButton,
10053
- DsScrollFade,
10054
- DsSearchInput,
10055
- DsSelect,
10056
- DsSignedValue,
10057
- DsSkeleton,
10058
- DsSlider,
10059
- DsSparkline,
10060
- DsSpinner,
10061
- DsSwitch,
10062
- DsTabPane,
10063
- DsTable,
10064
- DsTabs,
10065
- DsTextarea,
10066
- DsTimePicker,
10067
- DsTooltip,
10068
- DsTopNavigation,
10003
+ KjunAccordion,
10004
+ KjunAccordionItem,
10005
+ KjunAlert,
10006
+ KjunAnimatedNumber,
10007
+ KjunAvatar,
10008
+ KjunBadge,
10009
+ KjunBottomActionBar,
10010
+ KjunBottomNavigation,
10011
+ KjunBreadcrumb,
10012
+ KjunButton,
10013
+ KjunButtonGroup,
10014
+ KjunCard,
10015
+ KjunChartSkeleton,
10016
+ KjunCheckbox,
10017
+ KjunChip,
10018
+ KjunCollectionMark,
10019
+ KjunCombobox,
10020
+ KjunCopyButton,
10021
+ KjunDataState,
10022
+ KjunDatePicker,
10023
+ KjunDeviation,
10024
+ KjunDrawer,
10025
+ KjunDropdown,
10026
+ KjunDropdownDivider,
10027
+ KjunDropdownItem,
10028
+ KjunEmpty,
10029
+ KjunErrorBoundary,
10030
+ KjunExecutionStatusBadge,
10031
+ KjunExternalLink,
10069
10032
  KjunFeedbackProvider,
10033
+ KjunFilterGroup,
10034
+ KjunFormActions,
10035
+ KjunFormGroup,
10036
+ KjunFormLayout,
10037
+ KjunFormSkeleton,
10038
+ KjunFreshness,
10039
+ KjunHeatmapCell,
10040
+ KjunIcon,
10041
+ KjunIconToggle,
10042
+ KjunImage,
10043
+ KjunInput,
10044
+ KjunKpiHero,
10045
+ KjunKpiRow,
10046
+ KjunListRow,
10047
+ KjunListSection,
10048
+ KjunListSkeleton,
10049
+ KjunMarketCards,
10050
+ KjunMarketListPanel,
10051
+ KjunMarketSimpleList,
10052
+ KjunMarketTable,
10053
+ KjunMarketTableSkeleton,
10054
+ KjunMenuButton,
10055
+ KjunModal,
10056
+ KjunPagination,
10057
+ KjunPopover,
10058
+ KjunPriceCell,
10059
+ KjunProgress,
10060
+ KjunProgressCell,
10070
10061
  KjunProvider,
10062
+ KjunQuantityStepper,
10063
+ KjunRadio,
10064
+ KjunRadioGroup,
10065
+ KjunRangeSlider,
10066
+ KjunRefreshButton,
10067
+ KjunScrollFade,
10068
+ KjunSearchInput,
10069
+ KjunSelect,
10070
+ KjunSignedValue,
10071
+ KjunSkeleton,
10072
+ KjunSlider,
10073
+ KjunSparkline,
10074
+ KjunSpinner,
10075
+ KjunSwitch,
10076
+ KjunTabPane,
10077
+ KjunTable,
10078
+ KjunTabs,
10079
+ KjunTextarea,
10080
+ KjunTimePicker,
10081
+ KjunTooltip,
10082
+ KjunTopNavigation,
10071
10083
  useKjunFeedback,
10072
10084
  useKjunStyles
10073
10085
  };