@wipco/sdui 1.8.3 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/{chunk-DTCZPXOT.js → chunk-33LRJ25P.js} +199 -21
  2. package/dist/{chunk-PN5IJPA5.js → chunk-3LPLTD66.js} +1 -1
  3. package/dist/{chunk-TCHXA35K.js → chunk-3M64LBYZ.js} +2 -2
  4. package/dist/{chunk-ZDWCLHIY.js → chunk-4FQB6O4T.js} +5 -5
  5. package/dist/{chunk-TK3WS7XE.js → chunk-55524GIB.js} +2 -2
  6. package/dist/{chunk-JDTVNS3H.js → chunk-5NDYDUMJ.js} +1 -1
  7. package/dist/{chunk-YOLT2TPX.js → chunk-A2PG44CM.js} +1 -1
  8. package/dist/{chunk-YK7ZNV2C.js → chunk-CZMSQ3B3.js} +1 -1
  9. package/dist/{chunk-KVQXQLAP.js → chunk-DE3HYL4K.js} +2 -2
  10. package/dist/{chunk-3PGKBTBZ.js → chunk-DELAII7K.js} +2 -2
  11. package/dist/{chunk-ZW42VDR3.js → chunk-F2ICWCV3.js} +1 -1
  12. package/dist/{chunk-KJDHF6VU.js → chunk-FR7S52ZL.js} +1 -1
  13. package/dist/{chunk-HAK2YXSF.js → chunk-GHKRT7EA.js} +1 -1
  14. package/dist/{chunk-JRCHWX2B.js → chunk-GUXKGL76.js} +1 -1
  15. package/dist/{chunk-37CLBWCE.js → chunk-GW2LSUA4.js} +1 -1
  16. package/dist/{chunk-B6U2YWUP.js → chunk-HKYLKLF6.js} +2 -2
  17. package/dist/{chunk-UNQ6VAVD.js → chunk-I45MRYCE.js} +2 -2
  18. package/dist/{chunk-CFFSCGDV.js → chunk-IOQNDAWT.js} +3 -3
  19. package/dist/{chunk-YJJMK5R5.js → chunk-J2SPMIMO.js} +2 -2
  20. package/dist/{chunk-UDJVLMDH.js → chunk-JHWJSVZH.js} +2 -2
  21. package/dist/{chunk-5JXXCRXA.js → chunk-LDIEWJNP.js} +2 -2
  22. package/dist/{chunk-K7K6WOIG.js → chunk-LEYVJAXU.js} +3 -3
  23. package/dist/{chunk-OI2GPBIL.js → chunk-LK7MHTJO.js} +2 -2
  24. package/dist/{chunk-QP7AQEGZ.js → chunk-LNEFMVHL.js} +3 -3
  25. package/dist/{chunk-I2URQNZZ.js → chunk-MIFCOTLQ.js} +9 -7
  26. package/dist/{chunk-TQV4M3SB.js → chunk-MRCTYYBS.js} +2 -2
  27. package/dist/{chunk-DNUO63VZ.js → chunk-NHKQZDBX.js} +2 -2
  28. package/dist/{chunk-KIHN7DGA.js → chunk-NKRZVRGH.js} +206 -6
  29. package/dist/{chunk-4SVSS7VO.js → chunk-NTMFLJEE.js} +4 -4
  30. package/dist/{chunk-XFNHHGFR.js → chunk-RMYGRGKS.js} +1 -1
  31. package/dist/{chunk-O3SD2HS6.js → chunk-RT2I2U45.js} +1 -1
  32. package/dist/{chunk-ITFSPOOB.js → chunk-SANCYRIQ.js} +1 -1
  33. package/dist/{chunk-H7RLEDKJ.js → chunk-SMVPMDWO.js} +2 -2
  34. package/dist/{chunk-PGAP2RLS.js → chunk-TYPNHH3I.js} +1 -1
  35. package/dist/{chunk-6TWP3E2L.js → chunk-UX37MB4P.js} +3 -3
  36. package/dist/{chunk-LONXOEZY.js → chunk-UYOQ3SEG.js} +1 -1
  37. package/dist/{chunk-CUAGMSSG.js → chunk-VGNLXT3A.js} +1 -1
  38. package/dist/{chunk-LGKLA22B.js → chunk-VSCAW4LS.js} +1 -1
  39. package/dist/{chunk-AMKIMOTU.js → chunk-YMJUK3V4.js} +2 -2
  40. package/dist/{chunk-FXEKHHEA.js → chunk-Z2SOMUZF.js} +1 -1
  41. package/dist/{chunk-DDX7KJAW.js → chunk-Z5Q44VXX.js} +1 -1
  42. package/dist/{chunk-WW65XEEE.js → chunk-ZHWBTWHS.js} +2 -2
  43. package/dist/index.d.ts +40 -5
  44. package/dist/index.js +16 -16
  45. package/dist/meta.js +59 -6
  46. package/dist/rich/ExcelUploadCard.js +3 -3
  47. package/dist/rich.js +5 -5
  48. package/dist/widgets/ApprovalLineEditor.js +7 -7
  49. package/dist/widgets/ApprovalOverridesEditor.js +9 -9
  50. package/dist/widgets/ApprovalStepper.js +2 -2
  51. package/dist/widgets/AutocompleteField.d.ts +29 -3
  52. package/dist/widgets/AutocompleteField.js +7 -7
  53. package/dist/widgets/ColumnBoard.js +2 -2
  54. package/dist/widgets/DiffView.js +2 -2
  55. package/dist/widgets/Disclosure.js +2 -2
  56. package/dist/widgets/EventCalendar.js +3 -3
  57. package/dist/widgets/FileDropzone.js +5 -5
  58. package/dist/widgets/ImageLightbox.js +3 -3
  59. package/dist/widgets/InlineEdit.js +2 -2
  60. package/dist/widgets/JsonField.js +2 -2
  61. package/dist/widgets/OptionSchemaEditor.js +3 -3
  62. package/dist/widgets/OptionValueFields.js +3 -3
  63. package/dist/widgets/OrgChart.js +2 -2
  64. package/dist/widgets/OrgChartBoard.js +5 -5
  65. package/dist/widgets/PeriodFilter.js +4 -4
  66. package/dist/widgets/PermissionMatrixEditor.js +3 -3
  67. package/dist/widgets/PositionSelect.js +3 -3
  68. package/dist/widgets/PrintSheet.js +2 -2
  69. package/dist/widgets/ProfileEditDiffCard.js +3 -3
  70. package/dist/widgets/QRDisplay.js +3 -3
  71. package/dist/widgets/RankBoard.js +4 -4
  72. package/dist/widgets/RoleMemberPicker.js +4 -4
  73. package/dist/widgets/SearchableMultiPicker.js +5 -5
  74. package/dist/widgets/SecureScreen.js +2 -2
  75. package/dist/widgets/StagePeriodEditor.js +4 -4
  76. package/dist/widgets/TagInput.js +2 -2
  77. package/dist/widgets/TagMultiSelect.js +3 -3
  78. package/dist/widgets/Timeline.js +3 -3
  79. package/dist/widgets/TreePicker.js +6 -6
  80. package/dist/widgets/TreeView.js +5 -5
  81. package/dist/widgets/index.js +71 -71
  82. package/package.json +1 -1
@@ -1268,6 +1268,90 @@ var ICON_NODES = {
1268
1268
  { t: "line", x1: "8", x2: "14", y1: "11", y2: "11" }
1269
1269
  ]
1270
1270
  };
1271
+
1272
+ // src/number-text.ts
1273
+ function halfWidth(ch) {
1274
+ const code = ch.charCodeAt(0);
1275
+ if (code >= 65296 && code <= 65305) return String.fromCharCode(code - 65296 + 48);
1276
+ if (code === 65294) return ".";
1277
+ if (code === 65293 || code === 8722) return "-";
1278
+ return ch;
1279
+ }
1280
+ function sanitizeNumberText(text) {
1281
+ let out = "";
1282
+ let dot = false;
1283
+ for (const raw of text) {
1284
+ const ch = halfWidth(raw);
1285
+ if (ch >= "0" && ch <= "9") out += ch;
1286
+ else if (ch === "." && !dot) {
1287
+ dot = true;
1288
+ out += ch;
1289
+ } else if (ch === "-" && out === "") out += ch;
1290
+ }
1291
+ return out;
1292
+ }
1293
+ function groupNumberText(clean) {
1294
+ const negative = clean.startsWith("-");
1295
+ const body = negative ? clean.slice(1) : clean;
1296
+ const dotAt = body.indexOf(".");
1297
+ const integer = dotAt === -1 ? body : body.slice(0, dotAt);
1298
+ const tail = dotAt === -1 ? "" : body.slice(dotAt);
1299
+ return `${negative ? "-" : ""}${integer.replace(/\B(?=(\d{3})+(?!\d))/g, ",")}${tail}`;
1300
+ }
1301
+ function parseNumberText(clean) {
1302
+ if (!/\d/.test(clean)) return null;
1303
+ const n = Number(clean);
1304
+ if (!Number.isFinite(n)) return null;
1305
+ return n === 0 ? 0 : n;
1306
+ }
1307
+ function plainNumberText(value) {
1308
+ if (!Number.isFinite(value)) return "";
1309
+ const text = String(value === 0 ? 0 : value);
1310
+ if (!/e/i.test(text)) return text;
1311
+ return value.toLocaleString("en-US", { useGrouping: false, maximumFractionDigits: 20 });
1312
+ }
1313
+ function numberInputValue(value) {
1314
+ if (typeof value === "number") return Number.isFinite(value) ? value === 0 ? 0 : value : null;
1315
+ if (typeof value !== "string") return null;
1316
+ const plain = value.replace(/,/g, "").trim();
1317
+ if (/^[+-]?(\d+(\.\d*)?|\.\d+)$/.test(plain)) return parseNumberText(plain.replace(/^\+/, ""));
1318
+ return parseNumberText(sanitizeNumberText(value));
1319
+ }
1320
+ function formatNumberInputValue(value) {
1321
+ const n = numberInputValue(value);
1322
+ return n === null ? "" : groupNumberText(plainNumberText(n));
1323
+ }
1324
+ function significantBefore(text, caret) {
1325
+ return sanitizeNumberText(text.slice(0, Math.max(0, caret))).length;
1326
+ }
1327
+ function caretAfterSignificant(formatted, count) {
1328
+ if (count <= 0) return 0;
1329
+ let seen = 0;
1330
+ for (let i = 0; i < formatted.length; i += 1) {
1331
+ if (formatted[i] === ",") continue;
1332
+ seen += 1;
1333
+ if (seen === count) return i + 1;
1334
+ }
1335
+ return formatted.length;
1336
+ }
1337
+ function editNumberText(raw, caret, previous, inputType) {
1338
+ let source = raw;
1339
+ let at = Math.max(0, Math.min(caret, raw.length));
1340
+ if (previous !== void 0 && raw.length === previous.length - 1 && previous[at] === "," && raw === previous.slice(0, at) + previous.slice(at + 1)) {
1341
+ if (inputType === "deleteContentForward") {
1342
+ source = previous.slice(0, at + 1) + previous.slice(at + 2);
1343
+ } else if (at > 0) {
1344
+ source = previous.slice(0, at - 1) + previous.slice(at);
1345
+ at -= 1;
1346
+ }
1347
+ }
1348
+ const clean = sanitizeNumberText(source);
1349
+ const text = groupNumberText(clean);
1350
+ return { text, caret: caretAfterSignificant(text, significantBefore(source, at)), value: parseNumberText(clean) };
1351
+ }
1352
+ function sameNumberValue(a, b) {
1353
+ return a === b;
1354
+ }
1271
1355
  function asArray(value) {
1272
1356
  return Array.isArray(value) ? value : [];
1273
1357
  }
@@ -1367,23 +1451,139 @@ function IconButton({
1367
1451
  }
1368
1452
  );
1369
1453
  }
1370
- function Input({ size = "md", icon, invalid = false, mono = false, trailing, className = "", style, ...rest }) {
1454
+ function unitPaddingRight(unit) {
1455
+ let width = 0;
1456
+ for (const ch of unit) {
1457
+ if (/[\u1100-\u11ff\u3000-\u9fff\uac00-\ud7af\uff00-\uffef]/.test(ch)) width += 12;
1458
+ else if (/[A-Z%@#&WM]/.test(ch)) width += 9;
1459
+ else if (ch === " ") width += 3.5;
1460
+ else width += 7;
1461
+ }
1462
+ return `${Math.ceil(width + 18)}px`;
1463
+ }
1464
+ function Input(props) {
1465
+ const {
1466
+ size = "md",
1467
+ icon,
1468
+ invalid = false,
1469
+ mono = false,
1470
+ trailing,
1471
+ unit,
1472
+ thousands,
1473
+ className = "",
1474
+ style,
1475
+ ...rest
1476
+ } = props;
1371
1477
  const classes = ["wp-input"];
1372
1478
  if (size !== "md") classes.push(`wp-input--${size}`);
1373
1479
  if (invalid) classes.push("wp-input--invalid");
1374
1480
  if (mono) classes.push("wp-input--mono");
1375
1481
  if (className) classes.push(className);
1376
- const input = /* @__PURE__ */ jsx("input", { className: classes.join(" "), "aria-invalid": invalid || void 0, style, ...rest });
1377
- if (!icon && !trailing) return input;
1482
+ const unitText = unit === void 0 || unit === null || String(unit) === "" ? void 0 : String(unit);
1483
+ if (unitText !== void 0 && trailing) {
1484
+ warnOnce("input:unit+trailing", "[sdui] Input: unit \uACFC trailing \uC744 \uD568\uAED8 \uC8FC\uBA74 unit \uB9CC \uADF8\uB9BD\uB2C8\uB2E4");
1485
+ }
1486
+ const inputStyle = unitText !== void 0 ? { paddingRight: unitPaddingRight(unitText), ...style } : style;
1487
+ const input = thousands ? /* @__PURE__ */ jsx(
1488
+ ThousandsInput,
1489
+ {
1490
+ className: classes.join(" "),
1491
+ "aria-invalid": invalid || void 0,
1492
+ style: inputStyle,
1493
+ ...rest
1494
+ }
1495
+ ) : /* @__PURE__ */ jsx(
1496
+ "input",
1497
+ {
1498
+ className: classes.join(" "),
1499
+ "aria-invalid": invalid || void 0,
1500
+ style: inputStyle,
1501
+ ...rest
1502
+ }
1503
+ );
1504
+ const trail = unitText !== void 0 ? /* @__PURE__ */ jsx(
1505
+ "span",
1506
+ {
1507
+ className: "wp-inputwrap__trail",
1508
+ "data-unit": "",
1509
+ style: { fontSize: "var(--wp-size-xs)", color: "var(--wp-text-muted)", whiteSpace: "nowrap", lineHeight: 1 },
1510
+ children: unitText
1511
+ }
1512
+ ) : trailing ? /* @__PURE__ */ jsx("span", { className: "wp-inputwrap__trail", children: typeof trailing === "string" ? /* @__PURE__ */ jsx(Icon, { name: trailing, size: 15 }) : trailing }) : null;
1513
+ if (!icon && !trail) return input;
1378
1514
  const wrap = ["wp-inputwrap"];
1379
1515
  if (icon) wrap.push("wp-inputwrap--lead");
1380
- if (trailing) wrap.push("wp-inputwrap--trail");
1516
+ if (trail) wrap.push("wp-inputwrap--trail");
1381
1517
  return /* @__PURE__ */ jsxs("div", { className: wrap.join(" "), children: [
1382
1518
  icon ? /* @__PURE__ */ jsx("span", { className: "wp-inputwrap__lead", children: /* @__PURE__ */ jsx(Icon, { name: icon, size: 15 }) }) : null,
1383
1519
  input,
1384
- trailing ? /* @__PURE__ */ jsx("span", { className: "wp-inputwrap__trail", children: typeof trailing === "string" ? /* @__PURE__ */ jsx(Icon, { name: trailing, size: 15 }) : trailing }) : null
1520
+ trail
1385
1521
  ] });
1386
1522
  }
1523
+ function ThousandsInput({
1524
+ value,
1525
+ defaultValue,
1526
+ onChange,
1527
+ onBlur,
1528
+ type: _type,
1529
+ min: _min,
1530
+ max: _max,
1531
+ step: _step,
1532
+ inputMode,
1533
+ autoComplete,
1534
+ ...rest
1535
+ }) {
1536
+ const controlled = value !== void 0;
1537
+ const [own, setOwn] = React.useState(() => numberInputValue(defaultValue));
1538
+ const external = controlled ? numberInputValue(value) : own;
1539
+ const [draft, setDraft] = React.useState(null);
1540
+ const [seen, setSeen] = React.useState(external);
1541
+ let shown = draft;
1542
+ if (!sameNumberValue(seen, external)) {
1543
+ setSeen(external);
1544
+ if (draft !== null && !sameNumberValue(parseNumberText(sanitizeNumberText(draft)), external)) {
1545
+ setDraft(null);
1546
+ shown = null;
1547
+ }
1548
+ }
1549
+ const display = shown ?? formatNumberInputValue(controlled ? value : own);
1550
+ const handleChange = (event) => {
1551
+ const el = event.target;
1552
+ const inputType = event.nativeEvent.inputType;
1553
+ const next = editNumberText(
1554
+ el.value,
1555
+ el.selectionStart ?? el.value.length,
1556
+ display,
1557
+ typeof inputType === "string" ? inputType : void 0
1558
+ );
1559
+ if (el.value !== next.text) el.value = next.text;
1560
+ if (el.ownerDocument.activeElement === el) {
1561
+ try {
1562
+ el.setSelectionRange(next.caret, next.caret);
1563
+ } catch {
1564
+ }
1565
+ }
1566
+ setDraft(next.text);
1567
+ if (next.text === display) return;
1568
+ if (!controlled) setOwn(next.value);
1569
+ onChange?.(next.value);
1570
+ };
1571
+ return /* @__PURE__ */ jsx(
1572
+ "input",
1573
+ {
1574
+ ...rest,
1575
+ type: "text",
1576
+ inputMode: inputMode ?? "decimal",
1577
+ autoComplete: autoComplete ?? "off",
1578
+ value: display,
1579
+ onChange: handleChange,
1580
+ onBlur: (event) => {
1581
+ setDraft(null);
1582
+ onBlur?.(event);
1583
+ }
1584
+ }
1585
+ );
1586
+ }
1387
1587
  function Textarea({ invalid = false, rows = 3, className = "", ...rest }) {
1388
1588
  return /* @__PURE__ */ jsx(
1389
1589
  "textarea",
@@ -2039,4 +2239,4 @@ function Tooltip({ label, shortcut, placement = "top", wrap = false, children, c
2039
2239
  );
2040
2240
  }
2041
2241
 
2042
- export { Alert, Avatar, Badge, Breadcrumb, Button, CALC_OPS, Card, Checkbox, Dialog, EmptyState, Field, ICON_NODES, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip, evaluateCalc, fieldOf, formatDateValue, formatDisplayValue, formatNumberValue, isPlainObject, isZonedIsoDateTime, parseNumeric, toNumber, warnOnce };
2242
+ export { Alert, Avatar, Badge, Breadcrumb, Button, CALC_OPS, Card, Checkbox, Dialog, EmptyState, Field, ICON_NODES, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip, evaluateCalc, fieldOf, formatDateValue, formatDisplayValue, formatNumberValue, isPlainObject, isZonedIsoDateTime, parseNumeric, plainNumberText, toNumber, warnOnce };
@@ -1,7 +1,7 @@
1
- import { orderCircleStyle, ellipsisStyle, unwrapRows, uid } from './chunk-YOLT2TPX.js';
2
- import { includesLooseSearch } from './chunk-I2URQNZZ.js';
3
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-XFNHHGFR.js';
4
- import { Icon, Badge, IconButton, Field, Select, Input, Tag, Spinner, Button, isPlainObject } from './chunk-KIHN7DGA.js';
1
+ import { orderCircleStyle, ellipsisStyle, unwrapRows, uid } from './chunk-A2PG44CM.js';
2
+ import { includesLooseSearch } from './chunk-MIFCOTLQ.js';
3
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-RMYGRGKS.js';
4
+ import { Icon, Badge, IconButton, Field, Select, Input, Tag, Spinner, Button, isPlainObject } from './chunk-NKRZVRGH.js';
5
5
  import { boxed } from './chunk-3JTBOABA.js';
6
6
  import React, { useState, useId, useRef, useEffect } from 'react';
7
7
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  import { DEV } from './chunk-TAVKGYH5.js';
2
- import { warnOnce } from './chunk-KIHN7DGA.js';
2
+ import { warnOnce } from './chunk-NKRZVRGH.js';
3
3
  import { createContext, useContext } from 'react';
4
4
 
5
5
  function isSafeNavigationTarget(to) {
@@ -1,5 +1,5 @@
1
1
  import { OverlayLayer } from './chunk-R2ORCOTG.js';
2
- import { Dialog, Button, warnOnce } from './chunk-KIHN7DGA.js';
2
+ import { Dialog, Button, warnOnce } from './chunk-NKRZVRGH.js';
3
3
  import { createContext, useContext, useMemo, useRef, useCallback, useState } from 'react';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-KIHN7DGA.js';
1
+ import { Icon } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useRef, useState, useEffect } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
- import { includesLooseSearch } from './chunk-I2URQNZZ.js';
1
+ import { includesLooseSearch } from './chunk-MIFCOTLQ.js';
2
2
  import { OverlayLayer } from './chunk-R2ORCOTG.js';
3
- import { Button, Dialog, Input, Tag, Checkbox } from './chunk-KIHN7DGA.js';
3
+ import { Button, Dialog, Input, Tag, Checkbox } from './chunk-NKRZVRGH.js';
4
4
  import { boxed } from './chunk-3JTBOABA.js';
5
5
  import React, { useMemo, useState } from 'react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Textarea, Icon } from './chunk-KIHN7DGA.js';
1
+ import { Textarea, Icon } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useState, useRef, useId, useEffect, useCallback } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,9 +1,9 @@
1
1
  import { parseJobPositionRow } from './chunk-XRHR452N.js';
2
2
  import { MIN_ZOOM, usePanZoomCanvas } from './chunk-XDR6HC4U.js';
3
- import { ImageLightbox } from './chunk-JDTVNS3H.js';
4
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-XFNHHGFR.js';
3
+ import { ImageLightbox } from './chunk-5NDYDUMJ.js';
4
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-RMYGRGKS.js';
5
5
  import { useIsTabletDown } from './chunk-TAVKGYH5.js';
6
- import { warnOnce, Badge, Button, IconButton, Icon } from './chunk-KIHN7DGA.js';
6
+ import { warnOnce, Badge, Button, IconButton, Icon } from './chunk-NKRZVRGH.js';
7
7
  import { boxed } from './chunk-3JTBOABA.js';
8
8
  import { useState, useMemo, useRef, useCallback, useEffect, useLayoutEffect } from 'react';
9
9
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Icon } from './chunk-KIHN7DGA.js';
1
+ import { Icon } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useState, useId, useCallback } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Badge, Checkbox, IconButton, Icon } from './chunk-KIHN7DGA.js';
1
+ import { Badge, Checkbox, IconButton, Icon } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useState, useEffect } from 'react';
4
4
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Button } from './chunk-KIHN7DGA.js';
1
+ import { Button } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useEffect, useState } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
- import { Text } from './chunk-YK7ZNV2C.js';
2
- import { Field, Input, Select, IconButton, Button } from './chunk-KIHN7DGA.js';
1
+ import { Text } from './chunk-CZMSQ3B3.js';
2
+ import { Field, Input, Select, IconButton, Button } from './chunk-NKRZVRGH.js';
3
3
  import { boxed } from './chunk-3JTBOABA.js';
4
4
  import { useMemo } from 'react';
5
5
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { IconButton, Input } from './chunk-KIHN7DGA.js';
1
+ import { IconButton, Input } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import { useState, useRef, useEffect, useCallback } from 'react';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,4 +1,4 @@
1
- import { Icon, Badge } from './chunk-KIHN7DGA.js';
1
+ import { Icon, Badge } from './chunk-NKRZVRGH.js';
2
2
  import { boxed } from './chunk-3JTBOABA.js';
3
3
  import React from 'react';
4
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
- import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-XFNHHGFR.js';
2
- import { Spinner, Badge, Icon } from './chunk-KIHN7DGA.js';
1
+ import { useSduiAdapter, hostFetchOf, defaultAdapter } from './chunk-RMYGRGKS.js';
2
+ import { Spinner, Badge, Icon } from './chunk-NKRZVRGH.js';
3
3
  import { boxed } from './chunk-3JTBOABA.js';
4
4
  import { useState, useEffect } from 'react';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
package/dist/index.d.ts CHANGED
@@ -351,7 +351,7 @@ interface IconButtonProps extends React__default.ButtonHTMLAttributes<HTMLButton
351
351
  disabled?: boolean;
352
352
  }
353
353
  declare function IconButton({ icon, label, size, tone, variant, pressed, disabled, className, type, ...rest }: IconButtonProps): React__default.JSX.Element;
354
- interface InputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'size'> {
354
+ interface InputBaseProps extends Omit<React__default.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange'> {
355
355
  /** sm 28 · md 32(기본) · lg 40 px */
356
356
  size?: 'sm' | 'md' | 'lg';
357
357
  /** 선행 아이콘 이름 (예: "search") */
@@ -364,12 +364,47 @@ interface InputProps extends Omit<React__default.InputHTMLAttributes<HTMLInputEl
364
364
  * 입력 오른쪽 끝에 겹쳐 그리는 후행 표시.
365
365
  *
366
366
  * **문자열은 아이콘 이름으로 읽는다** — `trailing="eye"`(비밀번호 보기)가 원래 용례다.
367
- * 등록되지 않은 이름이면 Icon이 null을 내므로 자리만 남는다. 단위 글자("원", "mm")를
368
- * 넣고 싶으면 문자열이 아니라 노드로 줘라: `trailing={<span>원</span>}`.
367
+ * 등록되지 않은 이름이면 Icon이 null을 내므로 자리만 남는다. 단위 글자("원", "mm")는
368
+ * `unit` 으로 준다(1.9.0) — 스펙은 노드를 넘길 수 없으니 그쪽이 유일한 글자 통로다.
369
+ * `unit` 과 함께 오면 `unit` 이 자리를 차지하고 이쪽은 무시된다(경고 한 번).
369
370
  */
370
371
  trailing?: React__default.ReactNode;
372
+ /**
373
+ * 입력 오른쪽 끝의 **글자** 단위 — "원", "%", "km"(1.9.0).
374
+ *
375
+ * `trailing` 은 문자열을 아이콘 이름으로 읽어서 `trailing:"원"` 이라 쓴 스펙은 아무것도 그리지 않았다.
376
+ * 같은 `.wp-inputwrap__trail` 자리에 글자로 그리고, 값이 단위 밑으로 들어가지 않게 입력의 오른쪽 안쪽
377
+ * 여백을 단위 길이만큼 인라인으로 준다(스펙의 `style.paddingRight` 가 있으면 그쪽이 이긴다).
378
+ * 새 CSS 클래스를 쓰지 않는다 — 자체 미러 CSS 를 둔 소비 앱(ERP)도 옮길 규칙이 없다.
379
+ */
380
+ unit?: string;
381
+ }
382
+ /** `thousands` 를 켜지 않은 칸 — onChange 는 예전 그대로 DOM 이벤트를 받는다. */
383
+ interface InputTextProps extends InputBaseProps {
384
+ thousands?: false;
385
+ onChange?: React__default.ChangeEventHandler<HTMLInputElement>;
386
+ }
387
+ /**
388
+ * `thousands` 칸 — 3자리마다 쉼표를 그어 보이고, onChange 는 **이벤트가 아니라 값**을 받는다:
389
+ * 숫자, 또는 비었거나 미완성(`-`)이면 null. 렌더러의 `fromEvent`·`{"$event":true}` 는 이벤트가 아닌 인자를
390
+ * 그대로 넘기므로(SduiRenderer `eventValue`) 스펙은 그대로 숫자를 받는다.
391
+ */
392
+ interface InputThousandsProps extends InputBaseProps {
393
+ /**
394
+ * 3자리마다 쉼표(1.9.0). 켜면 `type` 과 무관하게 `<input type="text" inputMode="decimal">` 로 그린다
395
+ * (number 칸은 쉼표를 값으로 받지 못한다 — number-text.ts 머리 주석). `min`·`max`·`step` 은 글자 칸에서
396
+ * 뜻이 없어 DOM 에 내리지 않는다. 소수는 그대로 받는다(반올림하지 않는다).
397
+ */
398
+ thousands: true;
399
+ onChange?: (value: number | null) => void;
371
400
  }
372
- declare function Input({ size, icon, invalid, mono, trailing, className, style, ...rest }: InputProps): React__default.JSX.Element;
401
+ /**
402
+ * 판별 합집합으로 둔 까닭: onChange 의 인자가 `thousands` 에 따라 다르다. 하나의 함수 합집합으로 두면
403
+ * `onChange={(e) => …}` 처럼 타입을 안 적은 기존 호출부(편집기에 여럿)가 매개변수 타입을 잃는다 —
404
+ * `thousands` 가 없거나 false 면 예전 타입으로 좁혀진다.
405
+ */
406
+ type InputProps = InputTextProps | InputThousandsProps;
407
+ declare function Input(props: InputProps): React__default.JSX.Element;
373
408
  interface TextareaProps extends React__default.TextareaHTMLAttributes<HTMLTextAreaElement> {
374
409
  invalid?: boolean;
375
410
  rows?: number;
@@ -2540,4 +2575,4 @@ interface ImageViewerProps {
2540
2575
  */
2541
2576
  declare function ImageViewer({ src, alt, open, onClose }: ImageViewerProps): React__default.ReactPortal | null;
2542
2577
 
2543
- export { Actions, type ActionsProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, CALC_OPS, Can, type CanProps, Card, type CardProps, type CascadingSearchOption, Checkbox, type CheckboxProps, Col, type ColProps, type CustomActionHandler, type CustomValidator, DatePickerProps, DateRangePickerProps, Dialog, type DialogProps, Divider, EmptyState, type EmptyStateProps, Field, type FieldProps, Grid, type GridCardConfig, type GridCardRow, type GridProps, ICON_NAMES, Icon, IconButton, type IconButtonProps, type IconProps, ImageViewer, type ImageViewerProps, Input, type InputProps, type Justify, type KeyValueItem, KeyValueList, type KeyValueListProps, MOBILE_MEDIA_QUERY, type MeterTone, NodeErrorBoundary, ORDER_PARAM, OverlayContainerContext, OverlayLayer, PageHead, type PageHeadProps, Pagination, type PaginationProps, ProgressBar, type ProgressBarProps, Radio, type RadioProps, type RemotePageState, RemoteSearchResults, type RemoteSearchResultsProps, type RemoteSummaryState, type ResolvedPatternSpec, ResultEmptyState, type ResultEmptyStateProps, ResultTable, type ResultTableColumn, type ResultTableProps, Row, type RowProps, SORT_PARAM, SduiAction, type SduiAdapter, type SduiAssetContext, type SduiAssetResolver, type SduiBadgeCell, SduiBoxProps, type SduiCanFn, type SduiCanQuery, type SduiCanSetting, type SduiCell, SduiColumnsScale, SduiContainerLayoutProps, type SduiContainerRoleProps, type SduiDateCell, type SduiDateFormat, SduiDialog, type SduiDispatch, type SduiDisplayFormat, SduiForm, type SduiFormConfig, type SduiFormProps, SduiGapScale, type SduiGridCard, type SduiGridCardAction, type SduiGridCardRow, type SduiIconCell, type SduiImageCell, type SduiLinkCell, type SduiNumberCell, SduiPage, SduiPermissionProvider, type SduiProgressCell, SduiPropValue, type SduiRegistry, SduiRenderer, type SduiRendererProps, type SduiRowCondition, SduiRule, type SduiRuntime, type SduiSearchAction, type SduiSearchColumn, SduiSearchDataProvider, SduiSearchInvalidationProvider, SduiSearchResults, type SduiSearchResultsProps, type SduiSearchSummary, type SduiSearchSummaryItem, type SduiTagCell, SduiTextAlignScale, type SduiTextCell, type SduiUseSpec, SduiWeightScale, type SearchAction, type SearchColumn, type SearchFetcher, type SearchField, type SearchFilter, type SearchInvalidator, type SearchOption, type SearchPage, SearchResults, type SearchResultsProps, type SearchRow, SearchSummaryCards, type SearchSummaryCardsProps, type SearchTabs, SearchToolbar, type SearchValues, type SearchViewItem, Section, type SectionProps, SegmentedControl, type SegmentedControlProps, type SegmentedItem, Select, type SelectOption, type SelectOptionRecord, type SelectProps, type ServerSortMemory, type ServerUnsortable, Show, type ShowProps, SidebarNav, type SidebarNavItem, type SidebarNavProps, type SidebarNavSection, type SortDir, type SortEcho, SortHandle, type SortHandleProps, type SortState, SortableList, type SortableListProps, Spacer, type SpacerProps, type SpecIdCandidate, type SpecIssue, Spinner, type SpinnerProps, StatCard, type StatCardProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Tag, type TagProps, Text, type TextPreset, type TextProps, Textarea, type TextareaProps, TimePickerProps, Toast, type ToastProps, Tooltip, type TooltipProps, boxed, cascadingValuePaths, cellRenderer, cleanSearchValues, conditionParams, createRegistry, createSearchInvalidator, createServerSortMemory, defaultAdapter, defaultRegistry, formatDateValue, formatDisplayValue, formatNumberValue, getOverlayRoot, imageRenderer, includesLooseSearch, isValidSpecId, isZonedIsoDateTime, joinMultiValue, loadOptionalModule, mapActions, mapCardRows, mapColumns, mapGridCard, mapViews, matchesCondition, nextSort, normalizePageSizes, normalizeSearchText, parseNumeric, patternSpecCandidates, resolvePatternSpec, searchFieldKeys, searchValuesFromParams, serverSortMemory, sortEchoOf, sortFromParams, sortableDropIndex, sortableMove, splitMultiValue, summaryParams, useAnyModalOpen, useIsMobile, useOverlayLayer, useRemoteSearchPage, useRemoteSearchSummary, useSduiAssetResolver, useSduiCan, useSduiDispatch, useSduiRuntime, useSduiSandbox, useSearchFetcher, validateSpec, withProps, withoutSort };
2578
+ export { Actions, type ActionsProps, Alert, type AlertProps, Avatar, type AvatarProps, Badge, type BadgeProps, type BadgeTone, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, CALC_OPS, Can, type CanProps, Card, type CardProps, type CascadingSearchOption, Checkbox, type CheckboxProps, Col, type ColProps, type CustomActionHandler, type CustomValidator, DatePickerProps, DateRangePickerProps, Dialog, type DialogProps, Divider, EmptyState, type EmptyStateProps, Field, type FieldProps, Grid, type GridCardConfig, type GridCardRow, type GridProps, ICON_NAMES, Icon, IconButton, type IconButtonProps, type IconProps, ImageViewer, type ImageViewerProps, Input, type InputBaseProps, type InputProps, type InputTextProps, type InputThousandsProps, type Justify, type KeyValueItem, KeyValueList, type KeyValueListProps, MOBILE_MEDIA_QUERY, type MeterTone, NodeErrorBoundary, ORDER_PARAM, OverlayContainerContext, OverlayLayer, PageHead, type PageHeadProps, Pagination, type PaginationProps, ProgressBar, type ProgressBarProps, Radio, type RadioProps, type RemotePageState, RemoteSearchResults, type RemoteSearchResultsProps, type RemoteSummaryState, type ResolvedPatternSpec, ResultEmptyState, type ResultEmptyStateProps, ResultTable, type ResultTableColumn, type ResultTableProps, Row, type RowProps, SORT_PARAM, SduiAction, type SduiAdapter, type SduiAssetContext, type SduiAssetResolver, type SduiBadgeCell, SduiBoxProps, type SduiCanFn, type SduiCanQuery, type SduiCanSetting, type SduiCell, SduiColumnsScale, SduiContainerLayoutProps, type SduiContainerRoleProps, type SduiDateCell, type SduiDateFormat, SduiDialog, type SduiDispatch, type SduiDisplayFormat, SduiForm, type SduiFormConfig, type SduiFormProps, SduiGapScale, type SduiGridCard, type SduiGridCardAction, type SduiGridCardRow, type SduiIconCell, type SduiImageCell, type SduiLinkCell, type SduiNumberCell, SduiPage, SduiPermissionProvider, type SduiProgressCell, SduiPropValue, type SduiRegistry, SduiRenderer, type SduiRendererProps, type SduiRowCondition, SduiRule, type SduiRuntime, type SduiSearchAction, type SduiSearchColumn, SduiSearchDataProvider, SduiSearchInvalidationProvider, SduiSearchResults, type SduiSearchResultsProps, type SduiSearchSummary, type SduiSearchSummaryItem, type SduiTagCell, SduiTextAlignScale, type SduiTextCell, type SduiUseSpec, SduiWeightScale, type SearchAction, type SearchColumn, type SearchFetcher, type SearchField, type SearchFilter, type SearchInvalidator, type SearchOption, type SearchPage, SearchResults, type SearchResultsProps, type SearchRow, SearchSummaryCards, type SearchSummaryCardsProps, type SearchTabs, SearchToolbar, type SearchValues, type SearchViewItem, Section, type SectionProps, SegmentedControl, type SegmentedControlProps, type SegmentedItem, Select, type SelectOption, type SelectOptionRecord, type SelectProps, type ServerSortMemory, type ServerUnsortable, Show, type ShowProps, SidebarNav, type SidebarNavItem, type SidebarNavProps, type SidebarNavSection, type SortDir, type SortEcho, SortHandle, type SortHandleProps, type SortState, SortableList, type SortableListProps, Spacer, type SpacerProps, type SpecIdCandidate, type SpecIssue, Spinner, type SpinnerProps, StatCard, type StatCardProps, Switch, type SwitchProps, type TabItem, Table, type TableColumn, type TableProps, Tabs, type TabsProps, Tag, type TagProps, Text, type TextPreset, type TextProps, Textarea, type TextareaProps, TimePickerProps, Toast, type ToastProps, Tooltip, type TooltipProps, boxed, cascadingValuePaths, cellRenderer, cleanSearchValues, conditionParams, createRegistry, createSearchInvalidator, createServerSortMemory, defaultAdapter, defaultRegistry, formatDateValue, formatDisplayValue, formatNumberValue, getOverlayRoot, imageRenderer, includesLooseSearch, isValidSpecId, isZonedIsoDateTime, joinMultiValue, loadOptionalModule, mapActions, mapCardRows, mapColumns, mapGridCard, mapViews, matchesCondition, nextSort, normalizePageSizes, normalizeSearchText, parseNumeric, patternSpecCandidates, resolvePatternSpec, searchFieldKeys, searchValuesFromParams, serverSortMemory, sortEchoOf, sortFromParams, sortableDropIndex, sortableMove, splitMultiValue, summaryParams, useAnyModalOpen, useIsMobile, useOverlayLayer, useRemoteSearchPage, useRemoteSearchSummary, useSduiAssetResolver, useSduiCan, useSduiDispatch, useSduiRuntime, useSduiSandbox, useSearchFetcher, validateSpec, withProps, withoutSort };
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
1
- export { loadOptionalModule } from './chunk-JRCHWX2B.js';
2
- import { useSduiDispatch, SduiDialog, useSduiCan, useSduiRuntime, SduiDirtyRegistryContext, SduiLeaveRegistryContext, SduiFormScopeContext, SduiDispatchContext, SduiRuntimeContext, SduiPermissionProvider } from './chunk-O3SD2HS6.js';
3
- export { SduiDialog, SduiPermissionProvider, useSduiCan, useSduiDispatch, useSduiRuntime } from './chunk-O3SD2HS6.js';
4
- import { Text, Spacer, Show, Section, Row, PageHead, KeyValueList, Grid, Divider, Col, Actions } from './chunk-YK7ZNV2C.js';
5
- export { Actions, Col, Divider, Grid, KeyValueList, PageHead, Row, Section, Show, Spacer, Text } from './chunk-YK7ZNV2C.js';
6
- import { ImageViewer } from './chunk-PN5IJPA5.js';
7
- export { ImageViewer } from './chunk-PN5IJPA5.js';
8
- import { normalizeSearchFields, searchValuesFromParams, splitMultiValue, includesLooseSearch, cascadingValuePaths, SearchToolbar, searchFieldKeys, Popover } from './chunk-I2URQNZZ.js';
9
- export { SearchToolbar, cascadingValuePaths, cleanSearchValues, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue } from './chunk-I2URQNZZ.js';
10
- import { parseYmd, YMD_RE, TimePicker, DateRangePicker, DatePicker } from './chunk-5JXXCRXA.js';
11
- export { DatePicker, DateRangePicker, TimePicker } from './chunk-5JXXCRXA.js';
12
- import './chunk-KJDHF6VU.js';
1
+ export { loadOptionalModule } from './chunk-GUXKGL76.js';
2
+ import { useSduiDispatch, SduiDialog, useSduiCan, useSduiRuntime, SduiDirtyRegistryContext, SduiLeaveRegistryContext, SduiFormScopeContext, SduiDispatchContext, SduiRuntimeContext, SduiPermissionProvider } from './chunk-RT2I2U45.js';
3
+ export { SduiDialog, SduiPermissionProvider, useSduiCan, useSduiDispatch, useSduiRuntime } from './chunk-RT2I2U45.js';
4
+ import { Text, Spacer, Show, Section, Row, PageHead, KeyValueList, Grid, Divider, Col, Actions } from './chunk-CZMSQ3B3.js';
5
+ export { Actions, Col, Divider, Grid, KeyValueList, PageHead, Row, Section, Show, Spacer, Text } from './chunk-CZMSQ3B3.js';
6
+ import { ImageViewer } from './chunk-3LPLTD66.js';
7
+ export { ImageViewer } from './chunk-3LPLTD66.js';
8
+ import { normalizeSearchFields, searchValuesFromParams, splitMultiValue, includesLooseSearch, cascadingValuePaths, SearchToolbar, searchFieldKeys, Popover } from './chunk-MIFCOTLQ.js';
9
+ export { SearchToolbar, cascadingValuePaths, cleanSearchValues, includesLooseSearch, joinMultiValue, normalizeSearchText, searchFieldKeys, searchValuesFromParams, splitMultiValue } from './chunk-MIFCOTLQ.js';
10
+ import { parseYmd, YMD_RE, TimePicker, DateRangePicker, DatePicker } from './chunk-LDIEWJNP.js';
11
+ export { DatePicker, DateRangePicker, TimePicker } from './chunk-LDIEWJNP.js';
12
+ import './chunk-FR7S52ZL.js';
13
13
  import { OverlayContainerContext, OverlayLayer, useAnyModalOpen } from './chunk-R2ORCOTG.js';
14
14
  export { OverlayContainerContext, OverlayLayer, getOverlayRoot, useAnyModalOpen, useOverlayLayer } from './chunk-R2ORCOTG.js';
15
15
  import { HoistedStyle } from './chunk-RIZRM7OO.js';
16
- import { useSduiAdapter, hostFetchOf, isSafeNavigationTarget, useSduiSandbox, resolveAdapter, assetResolverOf, SduiAdapterContext } from './chunk-XFNHHGFR.js';
17
- export { defaultAdapter, useSduiAssetResolver, useSduiSandbox } from './chunk-XFNHHGFR.js';
16
+ import { useSduiAdapter, hostFetchOf, isSafeNavigationTarget, useSduiSandbox, resolveAdapter, assetResolverOf, SduiAdapterContext } from './chunk-RMYGRGKS.js';
17
+ export { defaultAdapter, useSduiAssetResolver, useSduiSandbox } from './chunk-RMYGRGKS.js';
18
18
  import { DEV, useIsMobile } from './chunk-TAVKGYH5.js';
19
19
  export { MOBILE_MEDIA_QUERY, useIsMobile } from './chunk-TAVKGYH5.js';
20
- import { EmptyState, Button, Checkbox, Select, Tabs, SegmentedControl, Spinner, Pagination, fieldOf, StatCard, isZonedIsoDateTime, formatDateValue, Icon, Card, Badge, ProgressBar, Tag, Toast, Textarea, Table, Switch, Input, IconButton, Field, Alert, warnOnce, isPlainObject, CALC_OPS, evaluateCalc, Dialog, ICON_NODES, toNumber } from './chunk-KIHN7DGA.js';
21
- export { Alert, Avatar, Badge, Breadcrumb, Button, CALC_OPS, Card, Checkbox, Dialog, EmptyState, Field, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip, formatDateValue, formatDisplayValue, formatNumberValue, isZonedIsoDateTime, parseNumeric } from './chunk-KIHN7DGA.js';
20
+ import { EmptyState, Button, Checkbox, Select, Tabs, SegmentedControl, Spinner, Pagination, fieldOf, StatCard, isZonedIsoDateTime, formatDateValue, Icon, Card, Badge, ProgressBar, Tag, Toast, Textarea, Table, Switch, Input, IconButton, Field, Alert, warnOnce, isPlainObject, CALC_OPS, evaluateCalc, Dialog, ICON_NODES, toNumber } from './chunk-NKRZVRGH.js';
21
+ export { Alert, Avatar, Badge, Breadcrumb, Button, CALC_OPS, Card, Checkbox, Dialog, EmptyState, Field, Icon, IconButton, Input, Pagination, ProgressBar, Radio, SegmentedControl, Select, SidebarNav, Spinner, StatCard, Switch, Table, Tabs, Tag, Textarea, Toast, Tooltip, formatDateValue, formatDisplayValue, formatNumberValue, isZonedIsoDateTime, parseNumeric } from './chunk-NKRZVRGH.js';
22
22
  import { boxed, LAYOUT_CSS, childLayoutFrom, CHILD_LAYOUT_PROPS } from './chunk-3JTBOABA.js';
23
23
  export { CHILD_LAYOUT_PROPS, LAYOUT_CSS, boxed, childLayoutFrom, columnsClass, containerLayoutStyle, joinClass, mergeStyle, typographyStyle } from './chunk-3JTBOABA.js';
24
24
  import React9, { createContext, useState, useMemo, useEffect, useRef, useContext, useCallback, useSyncExternalStore } from 'react';
package/dist/meta.js CHANGED
@@ -1414,15 +1414,37 @@ var InputMeta = {
1414
1414
  icon: "pencil",
1415
1415
  description: "\uD55C \uC904 \uC785\uB825. \uB098\uBA38\uC9C0 \uD504\uB86D\uC740 <input>\uC5D0 \uADF8\uB300\uB85C \uC804\uB2EC\uB41C\uB2E4.",
1416
1416
  props: [
1417
- { name: "value", kind: "string", label: "\uAC12", bindable: true, group: "data" },
1417
+ {
1418
+ name: "value",
1419
+ kind: "string",
1420
+ label: "\uAC12",
1421
+ bindable: true,
1422
+ description: "thousands \uCE78\uC740 \uC22B\uC790\xB7\uC22B\uC790 \uAE00\uC790\uB97C \uBC1B\uC544 \uC27C\uD45C\uB97C \uADF8\uC5B4 \uBCF4\uC778\uB2E4.",
1423
+ group: "data"
1424
+ },
1418
1425
  {
1419
1426
  name: "onChange",
1420
1427
  kind: "action",
1421
1428
  label: "\uBCC0\uACBD",
1422
- eventArg: "\uC785\uB825 \uAC12(\uBB38\uC790\uC5F4)",
1429
+ eventArg: '\uC785\uB825 \uAC12(\uBB38\uC790\uC5F4). type=number \uBA74 \uC22B\uC790(\uBE44\uC6B0\uBA74 null), thousands \uBA74 \uC22B\uC790(\uBE44\uC5C8\uAC70\uB098 "-" \uCC98\uB7FC \uBBF8\uC644\uC131\uC774\uBA74 null)',
1423
1430
  description: '{ "action": "setState", "key": "\uD3FCid.\uD544\uB4DC", "fromEvent": true }',
1424
1431
  group: "behavior"
1425
1432
  },
1433
+ {
1434
+ name: "thousands",
1435
+ kind: "boolean",
1436
+ label: "\uCC9C \uB2E8\uC704 \uC27C\uD45C",
1437
+ default: false,
1438
+ description: '3\uC790\uB9AC\uB9C8\uB2E4 \uC27C\uD45C\uB97C \uADF8\uC5B4 \uBCF4\uC778\uB2E4(1,234,567.5). type \uACFC \uBB34\uAD00\uD558\uAC8C \uAE00\uC790 \uCE78(inputMode=decimal)\uC73C\uB85C \uADF8\uB9AC\uACE0, onChange \uAC12\uC740 \uC22B\uC790(\uBE44\uC6B0\uBA74 null) \u2014 \uC27C\uD45C\uB294 \uD654\uBA74\uC5D0\uB9CC \uC788\uB2E4. \uBD99\uC5EC\uB123\uC740 "1,234\uC6D0" \uC740 1234. \uC18C\uC218\uB294 \uBC18\uC62C\uB9BC\uD558\uC9C0 \uC54A\uB294\uB2E4. min\xB7max\xB7step \uC740 \uC774 \uCE78\uC5D0\uC11C \uC4F0\uC9C0 \uC54A\uB294\uB2E4.',
1439
+ group: "behavior"
1440
+ },
1441
+ {
1442
+ name: "unit",
1443
+ kind: "string",
1444
+ label: "\uB2E8\uC704",
1445
+ description: '\uC785\uB825 \uC624\uB978\uCABD \uB05D\uC5D0 \uBD99\uB294 \uAE00\uC790 \uB2E8\uC704 \u2014 "\uC6D0", "%", "km". trailing \uACFC \uD568\uAED8 \uC8FC\uBA74 unit \uB9CC \uADF8\uB9B0\uB2E4.',
1446
+ group: "content"
1447
+ },
1426
1448
  {
1427
1449
  name: "type",
1428
1450
  kind: "enum",
@@ -1478,7 +1500,7 @@ var InputMeta = {
1478
1500
  name: "trailing",
1479
1501
  kind: "icon",
1480
1502
  label: "\uD6C4\uD589 \uC544\uC774\uCF58",
1481
- description: '\uC785\uB825 \uC624\uB978\uCABD \uB05D\uC5D0 \uACB9\uCCD0 \uADF8\uB9AC\uB294 \uD45C\uC2DC. **\uC544\uC774\uCF58 \uC774\uB984\uC73C\uB85C \uC77D\uB294\uB2E4**(\uC608: "eye" = \uBE44\uBC00\uBC88\uD638 \uBCF4\uAE30). \uB4F1\uB85D\uB418\uC9C0 \uC54A\uC740 \uC774\uB984\uC774\uBA74 \uC544\uBB34\uAC83\uB3C4 \uADF8\uB9AC\uC9C0 \uC54A\uB294\uB2E4 \u2014 "\uC6D0"\xB7"mm" \uAC19\uC740 \uB2E8\uC704 \uAE00\uC790\uB294 \uC5EC\uAE30 \uB123\uC5B4\uB3C4 \uB098\uC624\uC9C0 \uC54A\uB294\uB2E4.',
1503
+ description: '\uC785\uB825 \uC624\uB978\uCABD \uB05D\uC5D0 \uACB9\uCCD0 \uADF8\uB9AC\uB294 \uD45C\uC2DC. **\uC544\uC774\uCF58 \uC774\uB984\uC73C\uB85C \uC77D\uB294\uB2E4**(\uC608: "eye" = \uBE44\uBC00\uBC88\uD638 \uBCF4\uAE30). \uB4F1\uB85D\uB418\uC9C0 \uC54A\uC740 \uC774\uB984\uC774\uBA74 \uC544\uBB34\uAC83\uB3C4 \uADF8\uB9AC\uC9C0 \uC54A\uB294\uB2E4 \u2014 "\uC6D0"\xB7"mm" \uAC19\uC740 \uB2E8\uC704 \uAE00\uC790\uB294 \uC5EC\uAE30\uAC00 \uC544\uB2C8\uB77C unit \uC5D0 \uB123\uB294\uB2E4.',
1482
1504
  group: "content"
1483
1505
  },
1484
1506
  styleProp,
@@ -4871,7 +4893,7 @@ var AutocompleteFieldMeta = {
4871
4893
  label: "\uC790\uB3D9\uC644\uC131",
4872
4894
  category: "input",
4873
4895
  icon: "search",
4874
- description: "\uAC80\uC0C9\uD574\uC11C \uD558\uB098\uB97C \uACE0\uB974\uB294 \uC785\uB825. \uACE0\uB978 \uB4A4\uC5D0\uB294 \uC120\uD0DD \uCE74\uB4DC\uB85C \uC811\uD78C\uB2E4. \uAC80\uC0C9 \uACBD\uB85C\uB97C \uC8FC\uBA74 \uC6D0\uACA9 \uC870\uD68C\uAE4C\uC9C0 \uD55C\uB2E4.",
4896
+ description: "\uAC80\uC0C9\uD574\uC11C \uD558\uB098\uB97C \uACE0\uB974\uB294 \uC785\uB825. \uACE0\uB978 \uB4A4\uC5D0\uB294 \uC120\uD0DD \uCE74\uB4DC\uB85C \uC811\uD78C\uB2E4. \uAC80\uC0C9 \uACBD\uB85C\uB97C \uC8FC\uBA74 \uC6D0\uACA9 \uC870\uD68C\uAE4C\uC9C0 \uD55C\uB2E4. freeText \uB97C \uCF1C\uBA74 \uC785\uB825\uD55C \uAE00\uC790 \uC790\uCCB4\uAC00 \uAC12\uC774\uACE0(\uC9C1\uC811\uC785\uB825), \uBAA9\uB85D\uC740 \uC9C1\uC811\uC785\uB825 \uC904 + \uC774\uB984 \uB9E4\uCE6D \uD6C4\uBCF4\uB2E4.",
4875
4897
  props: [
4876
4898
  {
4877
4899
  name: "options",
@@ -4905,7 +4927,7 @@ var AutocompleteFieldMeta = {
4905
4927
  kind: "string",
4906
4928
  label: "\uC120\uD0DD\uB41C \uAC12",
4907
4929
  bindable: true,
4908
- description: "\uBE48 \uBB38\uC790\uC5F4\uC774\uBA74 \uBBF8\uC120\uD0DD\uC73C\uB85C \uBCF8\uB2E4.",
4930
+ description: "\uBE48 \uBB38\uC790\uC5F4\uC774\uBA74 \uBBF8\uC120\uD0DD\uC73C\uB85C \uBCF8\uB2E4. freeText \uC5D0\uC11C\uB294 \uCE78\uC758 \uAE00\uC790 \uADF8 \uC790\uCCB4.",
4909
4931
  group: "data"
4910
4932
  },
4911
4933
  {
@@ -4920,9 +4942,40 @@ var AutocompleteFieldMeta = {
4920
4942
  name: "onChange",
4921
4943
  kind: "action",
4922
4944
  label: "\uC120\uD0DD \uBCC0\uACBD",
4923
- eventArg: "\uC120\uD0DD\uB41C \uAC12(\uBB38\uC790\uC5F4), \uD574\uC81C\uD558\uBA74 null",
4945
+ eventArg: "\uC120\uD0DD\uB41C \uAC12(\uBB38\uC790\uC5F4), \uD574\uC81C\uD558\uBA74 null. freeText \uC5D0\uC11C\uB294 \uCE58\uB294 \uAE00\uC790\uB9C8\uB2E4 \uADF8 \uAE00\uC790, \uD6C4\uBCF4\uB97C \uACE0\uB974\uBA74 \uADF8 \uB77C\uBCA8",
4924
4946
  group: "behavior"
4925
4947
  },
4948
+ {
4949
+ name: "onSelect",
4950
+ kind: "action",
4951
+ label: "\uD56D\uBAA9 \uACE0\uB984",
4952
+ eventArg: "\uACE0\uB978 \uD56D\uBAA9(\uC9C1\uC811\uC785\uB825\xB7\uC5F0\uACB0 \uD574\uC81C\uB294 null)",
4953
+ description: `\uACE0\uB978 \uD56D\uBAA9 \uD1B5\uC9F8\uB85C \u2014 {"$event":"business_no"} \uCC98\uB7FC \uD56D\uBAA9\uC758 \uB2E4\uB978 \uCE78\uC744 \uC77D\uC5B4 \uD568\uAED8 \uCC44\uC6B4\uB2E4. \uACE0\uB978 \uB4A4 \uAE00\uC790\uB97C \uACE0\uCE58\uAC70\uB098(freeText) '\uBCC0\uACBD'\uC73C\uB85C \uD480\uBA74 null \uC774 \uD55C \uBC88 \uC628\uB2E4.`,
4954
+ group: "behavior"
4955
+ },
4956
+ {
4957
+ name: "freeText",
4958
+ kind: "boolean",
4959
+ label: "\uC9C1\uC811\uC785\uB825",
4960
+ default: false,
4961
+ description: "\uC785\uB825\uD55C \uAE00\uC790 \uC790\uCCB4\uAC00 \uAC12(onChange \uAC00 \uAE00\uC790\uB9C8\uB2E4 \uC628\uB2E4). \uC120\uD0DD \uCE74\uB4DC \uC5C6\uC74C. \uBAA9\uB85D \uCCAB \uC904\uC740 \uC5B8\uC81C\uB098 \uC9C1\uC811\uC785\uB825 \uC904\uC774\uACE0 Enter \uB97C \uADF8\uB0E5 \uB204\uB974\uBA74 \uCE5C \uAE00\uC790\uAC00 \uB0A8\uB294\uB2E4. \uD6C4\uBCF4\uB97C \uACE0\uB974\uBA74(Enter\xB7Tab\xB7\uD074\uB9AD) onChange(\uB77C\uBCA8) \uB2E4\uC74C onSelect(\uD56D\uBAA9). \uBAA9\uB85D\uC740 \uC0AC\uC6A9\uC790\uAC00 \uCE60 \uB54C\uB9CC \uC5F4\uB9B0\uB2E4.",
4962
+ group: "behavior"
4963
+ },
4964
+ {
4965
+ name: "selected",
4966
+ kind: "boolean",
4967
+ label: "\uD56D\uBAA9 \uC5F0\uACB0\uB428",
4968
+ bindable: true,
4969
+ description: "freeText \uC5D0\uC11C \uC9C0\uAE08 \uAE00\uC790\uAC00 \uACE0\uB978 \uD56D\uBAA9\uC5D0 \uC5F0\uACB0\uB3FC \uC788\uB294\uAC00(\uC608: \uBC1C\uC8FC\uCC98 id \uAC00 \uBE44\uC9C0 \uC54A\uC558\uB098). \uCC38\uC774\uBA74 \uC55E \uC544\uC774\uCF58\uC774 \uCCB4\uD06C\uB85C \uBC14\uB00C\uACE0, \uAE00\uC790\uB97C \uACE0\uCE58\uBA74 onSelect(null) \uC774 \uBA3C\uC800 \uAC04\uB2E4. \uC0DD\uB7B5\uD558\uBA74 \uC704\uC82F\uC774 \uC2A4\uC2A4\uB85C \uAE30\uC5B5\uD55C\uB2E4.",
4970
+ group: "data"
4971
+ },
4972
+ {
4973
+ name: "createLabel",
4974
+ kind: "string",
4975
+ label: "\uC9C1\uC811\uC785\uB825 \uC904 \uBB38\uAD6C",
4976
+ description: 'freeText \uBAA9\uB85D \uCCAB \uC904. {value} \uAC00 \uC9C0\uAE08 \uAE00\uC790\uB85C \uBC14\uB010\uB2E4. \uAE30\uBCF8 \uC9C1\uC811\uC785\uB825: "{value}".',
4977
+ group: "content"
4978
+ },
4926
4979
  { name: "labelKey", kind: "string", label: "\uB77C\uBCA8 \uD0A4", default: "label", description: "\uC635\uC158\uC5D0\uC11C \uD45C\uC2DC \uB77C\uBCA8\uC744 \uC77D\uC744 \uD0A4.", group: "data" },
4927
4980
  { name: "valueKey", kind: "string", label: "\uAC12 \uD0A4", default: "value", description: "\uC635\uC158\uC5D0\uC11C \uAC12\uC744 \uC77D\uC744 \uD0A4.", group: "data" },
4928
4981
  { name: "subKey", kind: "string", label: "\uBCF4\uC870 \uC815\uBCF4 \uD0A4", description: "\uBAA9\uB85D \uB458\uC9F8 \uC904\uC5D0 \uC4F8 \uD0A4. \uC5C6\uC73C\uBA74 \uD55C \uC904\uB9CC \uADF8\uB9B0\uB2E4.", group: "data" },
@@ -1,7 +1,7 @@
1
- import { loadOptionalModule } from '../chunk-JRCHWX2B.js';
2
- import { useSduiAdapter, useSduiSandbox, hostFetchOf, defaultAdapter, hostRawFetchOf } from '../chunk-XFNHHGFR.js';
1
+ import { loadOptionalModule } from '../chunk-GUXKGL76.js';
2
+ import { useSduiAdapter, useSduiSandbox, hostFetchOf, defaultAdapter, hostRawFetchOf } from '../chunk-RMYGRGKS.js';
3
3
  import '../chunk-TAVKGYH5.js';
4
- import { Select, Input, Card, Button, Spinner, Icon, Alert, StatCard, Badge, Table, EmptyState } from '../chunk-KIHN7DGA.js';
4
+ import { Select, Input, Card, Button, Spinner, Icon, Alert, StatCard, Badge, Table, EmptyState } from '../chunk-NKRZVRGH.js';
5
5
  import { boxed } from '../chunk-3JTBOABA.js';
6
6
  import { useRef, useState, useMemo, useCallback } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';