@stn-uiux/pub-ui-react 0.1.58 → 0.1.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,27 +4,56 @@ function cn(...parts) {
4
4
  }
5
5
 
6
6
  // src/paginationRange.ts
7
- function buildPaginationItems(page, pageCount, siblingCount = 1) {
8
- if (pageCount < 1) return [];
9
- if (pageCount === 1) return [1];
10
- const current = Math.min(Math.max(1, page), pageCount);
11
- const range = (start, end) => Array.from({ length: Math.max(0, end - start + 1) }, (_, i) => start + i);
12
- if (pageCount <= 7) return range(1, pageCount);
13
- const cluster = 5;
14
- const side = Math.max(1, siblingCount);
15
- if (current <= cluster - 1) {
16
- return [...range(1, cluster), "ellipsis", pageCount];
7
+ function buildPaginationItems(page, count, siblingCount = 1, boundaryCount = 1) {
8
+ if (count < 1) return [];
9
+ if (count === 1) return [1];
10
+ const current = Math.min(Math.max(1, page), count);
11
+ const range = (start, end) => {
12
+ const length = end - start + 1;
13
+ return Array.from({ length: Math.max(0, length) }, (_, i) => start + i);
14
+ };
15
+ const startPages = range(1, Math.min(boundaryCount, count));
16
+ const endPages = range(Math.max(count - boundaryCount + 1, boundaryCount + 1), count);
17
+ const siblingsStart = Math.max(
18
+ Math.min(
19
+ current - siblingCount,
20
+ count - boundaryCount - siblingCount * 2 - 1
21
+ ),
22
+ boundaryCount + 2
23
+ );
24
+ const siblingsEnd = Math.min(
25
+ Math.max(
26
+ current + siblingCount,
27
+ boundaryCount + siblingCount * 2 + 2
28
+ ),
29
+ endPages.length > 0 ? endPages[0] - 2 : count - 1
30
+ );
31
+ const itemList = [...startPages];
32
+ if (siblingsStart > boundaryCount + 2) {
33
+ itemList.push("ellipsis");
34
+ } else if (boundaryCount + 1 < count - boundaryCount) {
35
+ itemList.push(boundaryCount + 1);
17
36
  }
18
- if (current >= pageCount - (cluster - 2)) {
19
- return [1, "ellipsis", ...range(pageCount - cluster + 1, pageCount)];
37
+ itemList.push(...range(siblingsStart, siblingsEnd));
38
+ if (siblingsEnd < count - boundaryCount - 1) {
39
+ itemList.push("ellipsis");
40
+ } else if (count - boundaryCount > boundaryCount) {
41
+ itemList.push(count - boundaryCount);
20
42
  }
21
- return [
22
- 1,
23
- "ellipsis",
24
- ...range(current - side, current + side),
25
- "ellipsis",
26
- pageCount
27
- ];
43
+ itemList.push(...endPages);
44
+ const result = [];
45
+ for (const item of itemList) {
46
+ if (item === "ellipsis") {
47
+ if (result.length > 0 && result[result.length - 1] !== "ellipsis") {
48
+ result.push("ellipsis");
49
+ }
50
+ } else {
51
+ if (!result.includes(item)) {
52
+ result.push(item);
53
+ }
54
+ }
55
+ }
56
+ return result;
28
57
  }
29
58
 
30
59
  // src/StnProvider.tsx
@@ -87,6 +116,64 @@ function StnProvider({
87
116
  // src/components/StnButton.tsx
88
117
  import { cloneElement, forwardRef, isValidElement } from "react";
89
118
 
119
+ // src/inputWidth.ts
120
+ import {
121
+ resolveStnInputWidth,
122
+ toStnInputWidthPreset,
123
+ isStnInputFullWidth
124
+ } from "@stn-uiux/pub-ui/data/stnInputWidth";
125
+ function resolveInputWidthProps(_prefix, fullWidth, width) {
126
+ const resolved = resolveStnInputWidth(fullWidth, width);
127
+ if (resolved.kind === "full") {
128
+ return {
129
+ className: "full",
130
+ style: void 0
131
+ };
132
+ }
133
+ if (resolved.kind === "preset" && resolved.preset != null) {
134
+ return {
135
+ className: `w${resolved.preset}`,
136
+ style: void 0
137
+ };
138
+ }
139
+ if (resolved.kind === "custom" && resolved.styleWidth != null) {
140
+ return {
141
+ className: "",
142
+ style: { width: resolved.styleWidth }
143
+ };
144
+ }
145
+ return { className: "", style: void 0 };
146
+ }
147
+ function resolveButtonWidthProps(fullWidth, width, defaultPreset) {
148
+ if (isStnInputFullWidth(fullWidth, width)) {
149
+ return {
150
+ className: "full",
151
+ style: void 0
152
+ };
153
+ }
154
+ const target = width !== void 0 && width !== "" ? width : defaultPreset;
155
+ if (target === void 0 || target === "") {
156
+ return { className: "", style: void 0 };
157
+ }
158
+ const preset = toStnInputWidthPreset(target);
159
+ if (preset != null) {
160
+ return {
161
+ className: `w${preset}`,
162
+ style: void 0
163
+ };
164
+ }
165
+ if (typeof target === "number") {
166
+ return {
167
+ className: "",
168
+ style: { minWidth: `${target}px` }
169
+ };
170
+ }
171
+ return {
172
+ className: "",
173
+ style: { minWidth: String(target) }
174
+ };
175
+ }
176
+
90
177
  // src/components/StnIcon.tsx
91
178
  import { resolveSystemIconSrcFromName } from "@stn-uiux/pub-ui/data/stnSystemIcons";
92
179
  import { jsx as jsx2 } from "react/jsx-runtime";
@@ -181,6 +268,7 @@ var StnButton = forwardRef(function StnButton2({
181
268
  shape,
182
269
  iconPosition,
183
270
  icon,
271
+ width,
184
272
  fullWidth,
185
273
  className,
186
274
  type = "button",
@@ -195,6 +283,7 @@ var StnButton = forwardRef(function StnButton2({
195
283
  const resolvedIcon = resolveIconNode(icon, glyphPx);
196
284
  const isIconOnly = !labeled && resolvedIcon != null;
197
285
  const position = resolveIconPosition(iconPosition, icon);
286
+ const widthProps = resolveButtonWidthProps(fullWidth, width);
198
287
  const showLeading = (isIconOnly || position === "left") && resolvedIcon != null;
199
288
  const showTrailingCustom = !isIconOnly && position === "right" && resolvedIcon != null;
200
289
  return /* @__PURE__ */ jsxs(
@@ -210,9 +299,10 @@ var StnButton = forwardRef(function StnButton2({
210
299
  resolvedColor !== "primary" && resolvedColor,
211
300
  shape === "square" && "square",
212
301
  isIconOnly && "icon",
213
- fullWidth && !isIconOnly && "full",
302
+ !isIconOnly && widthProps.className,
214
303
  className
215
304
  ),
305
+ style: !isIconOnly ? widthProps.style : void 0,
216
306
  ...rest,
217
307
  children: [
218
308
  showLeading ? /* @__PURE__ */ jsx3("span", { className: "stn-btn__leading", children: resolvedIcon }) : null,
@@ -552,8 +642,25 @@ import {
552
642
  } from "@stn-uiux/pub-ui/data/stnPagination";
553
643
 
554
644
  // src/components/StnPagination.tsx
555
- import { forwardRef as forwardRef4 } from "react";
645
+ import { forwardRef as forwardRef4, useState as useState3 } from "react";
556
646
  import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
647
+ var FirstIcon = () => /* @__PURE__ */ jsx7(
648
+ "svg",
649
+ {
650
+ className: "stn-pagination__icon",
651
+ viewBox: "0 0 10 11",
652
+ width: "10",
653
+ height: "11",
654
+ "aria-hidden": "true",
655
+ children: /* @__PURE__ */ jsx7(
656
+ "path",
657
+ {
658
+ fill: "currentColor",
659
+ d: "M1.5.3a.75.75 0 0 1 .75.75v8.9a.75.75 0 0 1-1.5 0V1.05A.75.75 0 0 1 1.5.3Zm7.7 0a.75.75 0 0 1 0 1.06L5.56 5.5l3.64 4.14a.75.75 0 1 1-1.12 1L3.95 6.06a.75.75 0 0 1 0-1.12L8.08.3a.75.75 0 0 1 1.12 0Z"
660
+ }
661
+ )
662
+ }
663
+ );
557
664
  var PrevIcon = () => /* @__PURE__ */ jsx7(
558
665
  "svg",
559
666
  {
@@ -588,55 +695,136 @@ var NextIcon = () => /* @__PURE__ */ jsx7(
588
695
  )
589
696
  }
590
697
  );
698
+ var LastIcon = () => /* @__PURE__ */ jsx7(
699
+ "svg",
700
+ {
701
+ className: "stn-pagination__icon",
702
+ viewBox: "0 0 10 11",
703
+ width: "10",
704
+ height: "11",
705
+ "aria-hidden": "true",
706
+ children: /* @__PURE__ */ jsx7(
707
+ "path",
708
+ {
709
+ fill: "currentColor",
710
+ d: "M8.5.3a.75.75 0 0 1 .75.75v8.9a.75.75 0 0 1-1.5 0V1.05A.75.75 0 0 1 8.5.3ZM.8.3a.75.75 0 0 1 1.12 0L6.05 4.94a.75.75 0 0 1 0 1.12L1.92 10.64a.75.75 0 1 1-1.12-1L4.44 5.5.8 1.36A.75.75 0 0 1 .8.3Z"
711
+ }
712
+ )
713
+ }
714
+ );
591
715
  var StnPagination = forwardRef4(function StnPagination2({
592
- page,
716
+ page: controlledPage,
717
+ defaultPage = 1,
593
718
  count,
594
719
  onPageChange,
595
- siblingCount = 1,
720
+ onChange,
721
+ compact = false,
722
+ siblingCount,
723
+ boundaryCount = 1,
724
+ showFirstButton = false,
725
+ showLastButton = false,
726
+ hidePrevButton = false,
727
+ hideNextButton = false,
728
+ size = "md",
729
+ variant = "text",
730
+ color = "standard",
731
+ disabled = false,
596
732
  className,
597
733
  "aria-label": ariaLabel = "pagination navigation",
598
734
  ...rest
599
735
  }, ref) {
600
- const items = buildPaginationItems(page, count, siblingCount);
601
- const canPrev = page > 1;
602
- const canNext = page < count;
603
- return /* @__PURE__ */ jsxs4("nav", { ref, className: cn("stn-pagination", className), "aria-label": ariaLabel, ...rest, children: [
604
- /* @__PURE__ */ jsx7(
605
- "button",
606
- {
607
- type: "button",
608
- className: "stn-pagination__prev",
609
- disabled: !canPrev,
610
- "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
611
- onClick: () => canPrev && onPageChange?.(page - 1),
612
- children: /* @__PURE__ */ jsx7(PrevIcon, {})
613
- }
614
- ),
615
- /* @__PURE__ */ jsx7("ul", { className: "stn-pagination__list", children: items.map(
616
- (item, index) => item === "ellipsis" ? /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7("span", { className: "stn-pagination__ellipsis", "aria-hidden": "true", children: "\u2026" }) }, `ellipsis-${index}`) : /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
617
- "button",
618
- {
619
- type: "button",
620
- className: cn("stn-pagination__page", item === page && "is-active"),
621
- "aria-label": `${item} \uD398\uC774\uC9C0`,
622
- "aria-current": item === page ? "page" : void 0,
623
- onClick: () => item !== page && onPageChange?.(item),
624
- children: item
625
- }
626
- ) }, item)
627
- ) }),
628
- /* @__PURE__ */ jsx7(
629
- "button",
630
- {
631
- type: "button",
632
- className: "stn-pagination__next",
633
- disabled: !canNext,
634
- "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
635
- onClick: () => canNext && onPageChange?.(page + 1),
636
- children: /* @__PURE__ */ jsx7(NextIcon, {})
637
- }
638
- )
639
- ] });
736
+ const resolvedSiblingCount = siblingCount !== void 0 ? siblingCount : compact ? 0 : 1;
737
+ const [internalPage, setInternalPage] = useState3(defaultPage);
738
+ const isControlled = controlledPage !== void 0;
739
+ const currentPage = Math.min(Math.max(1, isControlled ? controlledPage : internalPage), Math.max(1, count));
740
+ const handlePageSelect = (nextPage) => {
741
+ if (disabled || nextPage === currentPage || nextPage < 1 || nextPage > count) return;
742
+ if (!isControlled) {
743
+ setInternalPage(nextPage);
744
+ }
745
+ onPageChange?.(nextPage);
746
+ onChange?.(null, nextPage);
747
+ };
748
+ const items = buildPaginationItems(currentPage, count, resolvedSiblingCount, boundaryCount);
749
+ const canPrev = !disabled && currentPage > 1;
750
+ const canNext = !disabled && currentPage < count;
751
+ return /* @__PURE__ */ jsxs4(
752
+ "nav",
753
+ {
754
+ ref,
755
+ className: cn(
756
+ "stn-pagination",
757
+ `stn-pagination--${size}`,
758
+ variant !== "text" && `stn-pagination--${variant}`,
759
+ color && color !== "standard" && `stn-pagination--${color}`,
760
+ compact && "is-compact",
761
+ disabled && "is-disabled",
762
+ className
763
+ ),
764
+ "aria-label": ariaLabel,
765
+ ...rest,
766
+ children: [
767
+ showFirstButton && /* @__PURE__ */ jsx7(
768
+ "button",
769
+ {
770
+ type: "button",
771
+ className: "stn-pagination__first",
772
+ disabled: !canPrev,
773
+ "aria-label": "\uCCAB \uD398\uC774\uC9C0",
774
+ onClick: () => handlePageSelect(1),
775
+ children: /* @__PURE__ */ jsx7(FirstIcon, {})
776
+ }
777
+ ),
778
+ !hidePrevButton && /* @__PURE__ */ jsx7(
779
+ "button",
780
+ {
781
+ type: "button",
782
+ className: "stn-pagination__prev",
783
+ disabled: !canPrev,
784
+ "aria-label": "\uC774\uC804 \uD398\uC774\uC9C0",
785
+ onClick: () => handlePageSelect(currentPage - 1),
786
+ children: /* @__PURE__ */ jsx7(PrevIcon, {})
787
+ }
788
+ ),
789
+ /* @__PURE__ */ jsx7("ul", { className: "stn-pagination__list", children: items.map(
790
+ (item, index) => item === "ellipsis" ? /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7("span", { className: "stn-pagination__ellipsis", "aria-hidden": "true", children: "\u2026" }) }, `ellipsis-${index}`) : /* @__PURE__ */ jsx7("li", { children: /* @__PURE__ */ jsx7(
791
+ "button",
792
+ {
793
+ type: "button",
794
+ className: cn("stn-pagination__page", item === currentPage && "is-active"),
795
+ disabled,
796
+ "aria-label": `${item} \uD398\uC774\uC9C0`,
797
+ "aria-current": item === currentPage ? "page" : void 0,
798
+ onClick: () => handlePageSelect(item),
799
+ children: item
800
+ }
801
+ ) }, item)
802
+ ) }),
803
+ !hideNextButton && /* @__PURE__ */ jsx7(
804
+ "button",
805
+ {
806
+ type: "button",
807
+ className: "stn-pagination__next",
808
+ disabled: !canNext,
809
+ "aria-label": "\uB2E4\uC74C \uD398\uC774\uC9C0",
810
+ onClick: () => handlePageSelect(currentPage + 1),
811
+ children: /* @__PURE__ */ jsx7(NextIcon, {})
812
+ }
813
+ ),
814
+ showLastButton && /* @__PURE__ */ jsx7(
815
+ "button",
816
+ {
817
+ type: "button",
818
+ className: "stn-pagination__last",
819
+ disabled: !canNext,
820
+ "aria-label": "\uB9C8\uC9C0\uB9C9 \uD398\uC774\uC9C0",
821
+ onClick: () => handlePageSelect(count),
822
+ children: /* @__PURE__ */ jsx7(LastIcon, {})
823
+ }
824
+ )
825
+ ]
826
+ }
827
+ );
640
828
  });
641
829
 
642
830
  // src/components/StnModal.tsx
@@ -1173,12 +1361,12 @@ var StnCircularProgress = forwardRef8(
1173
1361
  // src/components/StnTable.tsx
1174
1362
  import {
1175
1363
  Children,
1176
- forwardRef as forwardRef10,
1364
+ forwardRef as forwardRef11,
1177
1365
  createContext as createContext2,
1178
1366
  useContext as useContext2,
1179
1367
  useEffect as useEffect5,
1180
1368
  useRef as useRef3,
1181
- useState as useState3
1369
+ useState as useState5
1182
1370
  } from "react";
1183
1371
 
1184
1372
  // src/components/StnCheckbox.tsx
@@ -1281,8 +1469,331 @@ var StnCheckbox = forwardRef9(function StnCheckbox2({
1281
1469
  );
1282
1470
  });
1283
1471
 
1284
- // src/components/StnTable.tsx
1472
+ // src/components/StnStatus.tsx
1473
+ import {
1474
+ forwardRef as forwardRef10,
1475
+ useState as useState4
1476
+ } from "react";
1477
+
1478
+ // src/components/StnSeverityBadge.tsx
1479
+ import React from "react";
1285
1480
  import { jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
1481
+ var SEVERITY_DEFAULT_LABELS = {
1482
+ critical: "Critical",
1483
+ major: "Major",
1484
+ minor: "Minor",
1485
+ warning: "Warning"
1486
+ };
1487
+ var SEVERITY_ICONS = {
1488
+ critical: "fill/alert4",
1489
+ major: "fill/alert3",
1490
+ minor: "fill/alert2",
1491
+ warning: "fill/alert1"
1492
+ };
1493
+ var StnSeverityBadge = React.forwardRef(
1494
+ ({
1495
+ severity,
1496
+ variant = "contained",
1497
+ size = "md",
1498
+ round = false,
1499
+ showIcon = true,
1500
+ iconOnly = false,
1501
+ glow = false,
1502
+ blur = false,
1503
+ label,
1504
+ active = false,
1505
+ onClick,
1506
+ className = "",
1507
+ children,
1508
+ ...restProps
1509
+ }, ref) => {
1510
+ const isFilter = variant === "filter";
1511
+ const isInteractive = isFilter || Boolean(onClick);
1512
+ const Component = isInteractive ? "button" : "span";
1513
+ const isIconOnly = Boolean(iconOnly);
1514
+ const hasGlow = Boolean(glow || blur || variant === "glow");
1515
+ const resolvedVariant = variant === "glow" ? "contained" : variant || "contained";
1516
+ const classNames = [
1517
+ "stn-status-severity",
1518
+ isFilter ? "filter" : resolvedVariant,
1519
+ size,
1520
+ round ? "round" : "",
1521
+ isIconOnly ? "icon-only" : "",
1522
+ hasGlow ? "glow" : "",
1523
+ severity,
1524
+ active ? "is-active" : "",
1525
+ className
1526
+ ].filter(Boolean).join(" ");
1527
+ const defaultLabel = SEVERITY_DEFAULT_LABELS[severity];
1528
+ const displayLabel = children ?? label ?? defaultLabel;
1529
+ const iconName = SEVERITY_ICONS[severity];
1530
+ const elementProps = {
1531
+ ref,
1532
+ className: classNames,
1533
+ onClick,
1534
+ title: restProps.title ?? (isIconOnly ? defaultLabel : void 0),
1535
+ "aria-label": restProps["aria-label"] ?? (isIconOnly ? defaultLabel : void 0),
1536
+ ...restProps
1537
+ };
1538
+ if (Component === "button") {
1539
+ elementProps.type = restProps.type || "button";
1540
+ if (isFilter) {
1541
+ elementProps["aria-pressed"] = active;
1542
+ }
1543
+ }
1544
+ const iconSize = isFilter ? 16 : size === "sm" ? 12 : size === "lg" ? 16 : 14;
1545
+ return /* @__PURE__ */ jsxs9(Component, { ...elementProps, children: [
1546
+ (showIcon || isIconOnly) && /* @__PURE__ */ jsx15(
1547
+ StnIcon,
1548
+ {
1549
+ name: iconName,
1550
+ size: iconSize,
1551
+ className: "stn-status-severity__icon",
1552
+ color: "none",
1553
+ "aria-hidden": "true"
1554
+ }
1555
+ ),
1556
+ !isIconOnly && /* @__PURE__ */ jsx15("span", { className: "stn-status-severity__label", children: displayLabel })
1557
+ ] });
1558
+ }
1559
+ );
1560
+ StnSeverityBadge.displayName = "StnSeverityBadge";
1561
+ var ALL_SEVERITIES = ["critical", "major", "minor", "warning"];
1562
+ var StnSeverityFilter = ({
1563
+ value = ALL_SEVERITIES,
1564
+ onChange,
1565
+ disabledSeverities = [],
1566
+ showIcon = true,
1567
+ className = ""
1568
+ }) => {
1569
+ const handleToggle = (sev) => {
1570
+ if (!onChange) return;
1571
+ const exists = value.includes(sev);
1572
+ const next = exists ? value.filter((item) => item !== sev) : [...value, sev];
1573
+ onChange(next);
1574
+ };
1575
+ return /* @__PURE__ */ jsx15("div", { className: `stn-status-severity-filter-group ${className}`.trim(), role: "group", "aria-label": "\uC2EC\uAC01\uB3C4 \uD544\uD130", children: ALL_SEVERITIES.map((sev) => {
1576
+ const isActive = value.includes(sev);
1577
+ const isDisabled = disabledSeverities.includes(sev);
1578
+ return /* @__PURE__ */ jsx15(
1579
+ StnSeverityBadge,
1580
+ {
1581
+ severity: sev,
1582
+ variant: "filter",
1583
+ showIcon,
1584
+ active: isActive,
1585
+ disabled: isDisabled,
1586
+ onClick: () => !isDisabled && handleToggle(sev)
1587
+ },
1588
+ sev
1589
+ );
1590
+ }) });
1591
+ };
1592
+ StnSeverityFilter.displayName = "StnSeverityFilter";
1593
+
1594
+ // src/components/StnStatus.tsx
1595
+ import { Fragment, jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
1596
+ var StnStatusDot = forwardRef10(function StnStatusDot2({
1597
+ state = "up",
1598
+ label,
1599
+ count,
1600
+ pulse = false,
1601
+ bordered = false,
1602
+ dotPosition = "left",
1603
+ size = "md",
1604
+ gap,
1605
+ className,
1606
+ ...rest
1607
+ }, ref) {
1608
+ const displayLabel = label ?? (state === "up" ? "UP" : state === "down" ? "DOWN" : state.toUpperCase());
1609
+ const pointEl = dotPosition !== "none" ? /* @__PURE__ */ jsx16("span", { className: "stn-status-dot__point", "aria-hidden": "true" }) : null;
1610
+ return /* @__PURE__ */ jsx16(
1611
+ "div",
1612
+ {
1613
+ ref,
1614
+ className: cn(
1615
+ "stn-status-dot",
1616
+ state,
1617
+ size,
1618
+ bordered && "bordered",
1619
+ pulse && "pulse",
1620
+ dotPosition !== "left" && `dot-${dotPosition}`,
1621
+ gap && `gap-${gap}`,
1622
+ className
1623
+ ),
1624
+ "data-stn-status": "dot",
1625
+ ...rest,
1626
+ children: dotPosition === "right" ? /* @__PURE__ */ jsxs10(Fragment, { children: [
1627
+ displayLabel ? /* @__PURE__ */ jsx16("span", { className: "stn-status-dot__label", children: displayLabel }) : null,
1628
+ count !== void 0 && count !== null ? /* @__PURE__ */ jsx16("span", { className: "stn-status-dot__count", children: count }) : null,
1629
+ pointEl
1630
+ ] }) : /* @__PURE__ */ jsxs10(Fragment, { children: [
1631
+ pointEl,
1632
+ displayLabel ? /* @__PURE__ */ jsx16("span", { className: "stn-status-dot__label", children: displayLabel }) : null,
1633
+ count !== void 0 && count !== null ? /* @__PURE__ */ jsx16("span", { className: "stn-status-dot__count", children: count }) : null
1634
+ ] })
1635
+ }
1636
+ );
1637
+ });
1638
+ var StnStatusDotGroup = forwardRef10(function StnStatusDotGroup2({ items, bordered = true, className, ...rest }, ref) {
1639
+ return /* @__PURE__ */ jsx16(
1640
+ "div",
1641
+ {
1642
+ ref,
1643
+ className: cn(
1644
+ "stn-status-dot-group",
1645
+ bordered ? "bordered" : "no-border",
1646
+ className
1647
+ ),
1648
+ "data-stn-status": "dot-group",
1649
+ ...rest,
1650
+ children: items.map((item) => /* @__PURE__ */ jsx16("div", { className: "stn-status-dot-group__item", children: /* @__PURE__ */ jsx16(
1651
+ StnStatusDot,
1652
+ {
1653
+ state: item.state,
1654
+ label: item.label,
1655
+ count: item.count
1656
+ }
1657
+ ) }, item.id))
1658
+ }
1659
+ );
1660
+ });
1661
+ var StnStatusSwitch = forwardRef10(function StnStatusSwitch2({
1662
+ checked: checkedProp,
1663
+ defaultChecked = false,
1664
+ onChange,
1665
+ labelOn = "\uAC10\uC2DC",
1666
+ labelOff = "\uBBF8\uAC10\uC2DC",
1667
+ icon = "line/shield-check",
1668
+ width,
1669
+ fullWidth = false,
1670
+ disabled,
1671
+ className,
1672
+ style,
1673
+ ...rest
1674
+ }, ref) {
1675
+ const [internalChecked, setInternalChecked] = useState4(defaultChecked);
1676
+ const isChecked = checkedProp !== void 0 ? checkedProp : internalChecked;
1677
+ const widthProps = resolveButtonWidthProps(fullWidth, width, 80);
1678
+ const handleClick = () => {
1679
+ if (disabled) return;
1680
+ const next = !isChecked;
1681
+ if (checkedProp === void 0) {
1682
+ setInternalChecked(next);
1683
+ }
1684
+ onChange?.(next);
1685
+ };
1686
+ return /* @__PURE__ */ jsxs10(
1687
+ "button",
1688
+ {
1689
+ ref,
1690
+ type: "button",
1691
+ role: "switch",
1692
+ "aria-checked": isChecked,
1693
+ disabled,
1694
+ className: cn(
1695
+ "stn-status-switch",
1696
+ isChecked && "is-checked",
1697
+ widthProps.className,
1698
+ className
1699
+ ),
1700
+ style: { ...widthProps.style, ...style },
1701
+ onClick: handleClick,
1702
+ "data-stn-status": "switch",
1703
+ ...rest,
1704
+ children: [
1705
+ /* @__PURE__ */ jsx16("span", { className: "stn-status-switch__badge", "aria-hidden": "true", children: /* @__PURE__ */ jsx16(StnIcon, { name: icon, size: 8 }) }),
1706
+ /* @__PURE__ */ jsx16("span", { className: "stn-status-switch__label", children: isChecked ? labelOn : labelOff }),
1707
+ /* @__PURE__ */ jsx16("span", { className: "stn-status-switch__thumb", "aria-hidden": "true" })
1708
+ ]
1709
+ }
1710
+ );
1711
+ });
1712
+ var StnStatusFlow = forwardRef10(function StnStatusFlow2({ steps, current, bordered = true, size = "md", className, ...rest }, ref) {
1713
+ const currentIndex = steps.findIndex((s) => s.key === current);
1714
+ const iconSize = size === "xs" ? 9 : size === "sm" ? 10 : size === "lg" ? 13 : size === "xl" ? 15 : 11;
1715
+ return /* @__PURE__ */ jsx16(
1716
+ "div",
1717
+ {
1718
+ ref,
1719
+ className: cn(
1720
+ "stn-status-flow",
1721
+ size,
1722
+ bordered === false && "no-border",
1723
+ className
1724
+ ),
1725
+ "data-stn-status": "flow",
1726
+ ...rest,
1727
+ children: steps.map((step, idx) => {
1728
+ const isCurrent = step.key === current;
1729
+ const isPassed = currentIndex !== -1 && idx < currentIndex;
1730
+ const isDimmed = currentIndex !== -1 && idx > currentIndex;
1731
+ const badgeColor = step.color ?? (isCurrent ? "primary" : "success");
1732
+ return /* @__PURE__ */ jsxs10("div", { className: "stn-status-flow__item", style: { display: "inline-flex", alignItems: "center", gap: 6 }, children: [
1733
+ idx > 0 && /* @__PURE__ */ jsx16("span", { className: "stn-status-flow__connector", "aria-hidden": "true", children: "|" }),
1734
+ /* @__PURE__ */ jsxs10(
1735
+ "div",
1736
+ {
1737
+ className: cn(
1738
+ "stn-status-flow__step",
1739
+ isCurrent && "is-current",
1740
+ isPassed && "is-passed",
1741
+ isDimmed && "is-dimmed"
1742
+ ),
1743
+ children: [
1744
+ /* @__PURE__ */ jsx16(
1745
+ "span",
1746
+ {
1747
+ className: cn(
1748
+ "stn-status-flow__badge",
1749
+ `stn-status-flow__badge--${badgeColor}`
1750
+ ),
1751
+ "aria-hidden": "true",
1752
+ children: step.icon ? /* @__PURE__ */ jsx16(StnIcon, { name: step.icon, size: iconSize }) : idx + 1
1753
+ }
1754
+ ),
1755
+ /* @__PURE__ */ jsx16("span", { className: "stn-status-flow__label", children: step.label })
1756
+ ]
1757
+ }
1758
+ )
1759
+ ] }, step.key);
1760
+ })
1761
+ }
1762
+ );
1763
+ });
1764
+ function StnStatus(props) {
1765
+ switch (props.type) {
1766
+ case "dot-group": {
1767
+ const { type: _, ...rest } = props;
1768
+ return /* @__PURE__ */ jsx16(StnStatusDotGroup, { ...rest });
1769
+ }
1770
+ case "switch": {
1771
+ const { type: _, ...rest } = props;
1772
+ return /* @__PURE__ */ jsx16(StnStatusSwitch, { ...rest });
1773
+ }
1774
+ case "severity": {
1775
+ const { type: _, ...rest } = props;
1776
+ return /* @__PURE__ */ jsx16(StnSeverityBadge, { ...rest });
1777
+ }
1778
+ case "flow": {
1779
+ const { type: _, ...rest } = props;
1780
+ return /* @__PURE__ */ jsx16(StnStatusFlow, { ...rest });
1781
+ }
1782
+ case "dot":
1783
+ default: {
1784
+ const { type: _, ...rest } = props;
1785
+ return /* @__PURE__ */ jsx16(StnStatusDot, { ...rest });
1786
+ }
1787
+ }
1788
+ }
1789
+ StnStatus.Dot = StnStatusDot;
1790
+ StnStatus.DotGroup = StnStatusDotGroup;
1791
+ StnStatus.Severity = StnSeverityBadge;
1792
+ StnStatus.Switch = StnStatusSwitch;
1793
+ StnStatus.Flow = StnStatusFlow;
1794
+
1795
+ // src/components/StnTable.tsx
1796
+ import { jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
1286
1797
  var STN_TABLE_FOOTER_MAX_ACTIONS = 4;
1287
1798
  function clampFooterRight(node) {
1288
1799
  const kids = Children.toArray(node);
@@ -1308,7 +1819,7 @@ function StnTableBase({
1308
1819
  onColumnReorder,
1309
1820
  className
1310
1821
  }) {
1311
- const [visitedRowId, setVisitedRowId] = useState3(null);
1822
+ const [visitedRowId, setVisitedRowId] = useState5(null);
1312
1823
  const wrapperRef = useRef3(null);
1313
1824
  useEffect5(() => {
1314
1825
  const wrapper = wrapperRef.current;
@@ -1477,32 +1988,32 @@ function StnTableBase({
1477
1988
  const hasLeading = summary != null || pageSize != null;
1478
1989
  const hasCenter = footerCenter != null;
1479
1990
  const hasFooter = hasLeading || hasCenter || right != null;
1480
- return /* @__PURE__ */ jsx15(StnTableContext.Provider, { value: { trackVisited, visitedRowId, setVisitedRowId, resizable, draggable }, children: /* @__PURE__ */ jsxs9("div", { ref: wrapperRef, className: cn("stn-table", fill && "stn-table--fill", className), children: [
1481
- /* @__PURE__ */ jsx15("div", { className: "stn-table__scroll", style: scrollStyle, children }),
1482
- hasFooter ? /* @__PURE__ */ jsxs9("div", { className: "stn-table__footer", children: [
1483
- hasLeading ? /* @__PURE__ */ jsxs9("div", { className: "stn-table__footer-leading", children: [
1484
- summary != null ? /* @__PURE__ */ jsx15("p", { className: "stn-table__summary", children: summary }) : null,
1485
- pageSize != null ? /* @__PURE__ */ jsx15("div", { className: "stn-table__page-size", children: pageSize }) : null
1486
- ] }) : /* @__PURE__ */ jsx15("span", {}),
1487
- hasCenter ? /* @__PURE__ */ jsx15("div", { className: "stn-table__footer-center", children: footerCenter }) : /* @__PURE__ */ jsx15("span", {}),
1488
- /* @__PURE__ */ jsx15("div", { className: "stn-table__footer-right", children: right })
1991
+ return /* @__PURE__ */ jsx17(StnTableContext.Provider, { value: { trackVisited, visitedRowId, setVisitedRowId, resizable, draggable }, children: /* @__PURE__ */ jsxs11("div", { ref: wrapperRef, className: cn("stn-table", fill && "stn-table--fill", className), children: [
1992
+ /* @__PURE__ */ jsx17("div", { className: "stn-table__scroll", style: scrollStyle, children }),
1993
+ hasFooter ? /* @__PURE__ */ jsxs11("div", { className: "stn-table__footer", children: [
1994
+ hasLeading ? /* @__PURE__ */ jsxs11("div", { className: "stn-table__footer-leading", children: [
1995
+ summary != null ? /* @__PURE__ */ jsx17("p", { className: "stn-table__summary", children: summary }) : null,
1996
+ pageSize != null ? /* @__PURE__ */ jsx17("div", { className: "stn-table__page-size", children: pageSize }) : null
1997
+ ] }) : /* @__PURE__ */ jsx17("span", {}),
1998
+ hasCenter ? /* @__PURE__ */ jsx17("div", { className: "stn-table__footer-center", children: footerCenter }) : /* @__PURE__ */ jsx17("span", {}),
1999
+ /* @__PURE__ */ jsx17("div", { className: "stn-table__footer-right", children: right })
1489
2000
  ] }) : null
1490
2001
  ] }) });
1491
2002
  }
1492
- var StnTableGrid = forwardRef10(function StnTableGrid2({ className, children, ...rest }, ref) {
1493
- return /* @__PURE__ */ jsx15("table", { ref, className: cn("stn-table__grid", className), ...rest, children });
2003
+ var StnTableGrid = forwardRef11(function StnTableGrid2({ className, children, ...rest }, ref) {
2004
+ return /* @__PURE__ */ jsx17("table", { ref, className: cn("stn-table__grid", className), ...rest, children });
1494
2005
  });
1495
- var StnTableHead = forwardRef10(
2006
+ var StnTableHead = forwardRef11(
1496
2007
  function StnTableHead2({ className, children, ...rest }, ref) {
1497
- return /* @__PURE__ */ jsx15("thead", { ref, className: cn("stn-table__thead", className), ...rest, children });
2008
+ return /* @__PURE__ */ jsx17("thead", { ref, className: cn("stn-table__thead", className), ...rest, children });
1498
2009
  }
1499
2010
  );
1500
- var StnTableBody = forwardRef10(
2011
+ var StnTableBody = forwardRef11(
1501
2012
  function StnTableBody2({ className, children, ...rest }, ref) {
1502
- return /* @__PURE__ */ jsx15("tbody", { ref, className: cn("stn-table__tbody", className), ...rest, children });
2013
+ return /* @__PURE__ */ jsx17("tbody", { ref, className: cn("stn-table__tbody", className), ...rest, children });
1503
2014
  }
1504
2015
  );
1505
- var StnTableRow = forwardRef10(function StnTableRow2({ className, hoverable = false, selected = false, visited = false, highlighted = false, clickable = false, pressed = false, rowId, children, onClick, ...rest }, ref) {
2016
+ var StnTableRow = forwardRef11(function StnTableRow2({ className, hoverable = false, selected = false, visited = false, highlighted = false, clickable = false, pressed = false, rowId, children, onClick, ...rest }, ref) {
1506
2017
  const ctx = useContext2(StnTableContext);
1507
2018
  const isTrackedVisited = ctx?.trackVisited && ctx.visitedRowId != null && ctx.visitedRowId === rowId;
1508
2019
  const finalVisited = visited || isTrackedVisited;
@@ -1514,7 +2025,7 @@ var StnTableRow = forwardRef10(function StnTableRow2({ className, hoverable = fa
1514
2025
  }
1515
2026
  onClick?.(e);
1516
2027
  };
1517
- return /* @__PURE__ */ jsx15(
2028
+ return /* @__PURE__ */ jsx17(
1518
2029
  "tr",
1519
2030
  {
1520
2031
  ref,
@@ -1538,12 +2049,12 @@ function tableColWidthClass(width) {
1538
2049
  if (typeof width !== "number" || !TABLE_COL_WIDTHS.has(width)) return void 0;
1539
2050
  return `stn-table__col--${width}`;
1540
2051
  }
1541
- var StnTableTh = forwardRef10(function StnTableTh2({ className, check = false, align, pressed = false, width, style, children, scope = "col", resizable, draggable, name, groupCols, ...rest }, ref) {
2052
+ var StnTableTh = forwardRef11(function StnTableTh2({ className, check = false, align, pressed = false, width, style, children, scope = "col", resizable, draggable, name, groupCols, ...rest }, ref) {
1542
2053
  const ctx = useContext2(StnTableContext);
1543
2054
  const colWidthClass = tableColWidthClass(width);
1544
2055
  const finalResizable = resizable ?? ctx?.resizable;
1545
2056
  const finalDraggable = draggable ?? ctx?.draggable;
1546
- return /* @__PURE__ */ jsxs9(
2057
+ return /* @__PURE__ */ jsxs11(
1547
2058
  "th",
1548
2059
  {
1549
2060
  ref,
@@ -1562,7 +2073,7 @@ var StnTableTh = forwardRef10(function StnTableTh2({ className, check = false, a
1562
2073
  ...rest,
1563
2074
  children: [
1564
2075
  children,
1565
- finalResizable && /* @__PURE__ */ jsx15(
2076
+ finalResizable && /* @__PURE__ */ jsx17(
1566
2077
  "div",
1567
2078
  {
1568
2079
  className: "stn-table__resizer",
@@ -1573,7 +2084,7 @@ var StnTableTh = forwardRef10(function StnTableTh2({ className, check = false, a
1573
2084
  }
1574
2085
  );
1575
2086
  });
1576
- var StnTableTd = forwardRef10(function StnTableTd2({ className, check = false, align, children, title, onMouseEnter, ...rest }, ref) {
2087
+ var StnTableTd = forwardRef11(function StnTableTd2({ className, check = false, align, children, title, onMouseEnter, ...rest }, ref) {
1577
2088
  const autoTitle = typeof children === "string" ? children : void 0;
1578
2089
  const handleMouseEnter = (e) => {
1579
2090
  if (onMouseEnter) onMouseEnter(e);
@@ -1586,7 +2097,7 @@ var StnTableTd = forwardRef10(function StnTableTd2({ className, check = false, a
1586
2097
  }
1587
2098
  }
1588
2099
  };
1589
- return /* @__PURE__ */ jsx15(
2100
+ return /* @__PURE__ */ jsx17(
1590
2101
  "td",
1591
2102
  {
1592
2103
  ref,
@@ -1602,15 +2113,15 @@ var StnTableTd = forwardRef10(function StnTableTd2({ className, check = false, a
1602
2113
  }
1603
2114
  );
1604
2115
  });
1605
- var StnTableThCheck = forwardRef10(function StnTableThCheck2({ label = "\uC804\uCCB4 \uC120\uD0DD", scope = "col", className, ...rest }, ref) {
1606
- return /* @__PURE__ */ jsx15("th", { scope, className: cn("stn-table__col-check", className), children: /* @__PURE__ */ jsx15(StnCheckbox, { ref, controlOnly: true, label, ...rest }) });
2116
+ var StnTableThCheck = forwardRef11(function StnTableThCheck2({ label = "\uC804\uCCB4 \uC120\uD0DD", scope = "col", className, ...rest }, ref) {
2117
+ return /* @__PURE__ */ jsx17("th", { scope, className: cn("stn-table__col-check", className), children: /* @__PURE__ */ jsx17(StnCheckbox, { ref, controlOnly: true, label, ...rest }) });
1607
2118
  });
1608
- var StnTableTdCheck = forwardRef10(function StnTableTdCheck2({ label = "\uD589 \uC120\uD0DD", className, ...rest }, ref) {
1609
- return /* @__PURE__ */ jsx15("td", { className: cn("stn-table__col-check", className), children: /* @__PURE__ */ jsx15(StnCheckbox, { ref, controlOnly: true, label, ...rest }) });
2119
+ var StnTableTdCheck = forwardRef11(function StnTableTdCheck2({ label = "\uD589 \uC120\uD0DD", className, ...rest }, ref) {
2120
+ return /* @__PURE__ */ jsx17("td", { className: cn("stn-table__col-check", className), children: /* @__PURE__ */ jsx17(StnCheckbox, { ref, controlOnly: true, label, ...rest }) });
1610
2121
  });
1611
- var StnTableSort = forwardRef10(function StnTableSort2({ label, sort = "none", pressed = false, className, type = "button", ...rest }, ref) {
2122
+ var StnTableSort = forwardRef11(function StnTableSort2({ label, sort = "none", pressed = false, className, type = "button", ...rest }, ref) {
1612
2123
  const active = sort !== "none";
1613
- return /* @__PURE__ */ jsxs9(
2124
+ return /* @__PURE__ */ jsxs11(
1614
2125
  "button",
1615
2126
  {
1616
2127
  ref,
@@ -1626,14 +2137,14 @@ var StnTableSort = forwardRef10(function StnTableSort2({ label, sort = "none", p
1626
2137
  "aria-sort": sort,
1627
2138
  ...rest,
1628
2139
  children: [
1629
- /* @__PURE__ */ jsx15("span", { className: "stn-table__th-label-text", children: label }),
1630
- /* @__PURE__ */ jsx15("span", { className: "stn-table__th-label-icon", "aria-hidden": "true" })
2140
+ /* @__PURE__ */ jsx17("span", { className: "stn-table__th-label-text", children: label }),
2141
+ /* @__PURE__ */ jsx17("span", { className: "stn-table__th-label-icon", "aria-hidden": "true" })
1631
2142
  ]
1632
2143
  }
1633
2144
  );
1634
2145
  });
1635
- var StnTableRowActions = forwardRef10(function StnTableRowActions2({ className, children, ...rest }, ref) {
1636
- return /* @__PURE__ */ jsx15("div", { ref, className: cn("stn-table__row-actions", className), ...rest, children });
2146
+ var StnTableRowActions = forwardRef11(function StnTableRowActions2({ className, children, ...rest }, ref) {
2147
+ return /* @__PURE__ */ jsx17("div", { ref, className: cn("stn-table__row-actions", className), ...rest, children });
1637
2148
  });
1638
2149
  var StnTable = StnTableBase;
1639
2150
  StnTable.Grid = StnTableGrid;
@@ -1646,17 +2157,20 @@ StnTable.ThCheck = StnTableThCheck;
1646
2157
  StnTable.TdCheck = StnTableTdCheck;
1647
2158
  StnTable.Sort = StnTableSort;
1648
2159
  StnTable.RowActions = StnTableRowActions;
2160
+ StnTable.Status = StnStatusDot;
2161
+ StnTable.Switch = StnStatusSwitch;
2162
+ StnTable.Flow = StnStatusFlow;
1649
2163
 
1650
2164
  // src/components/StnTree.tsx
1651
2165
  import {
1652
- forwardRef as forwardRef13,
2166
+ forwardRef as forwardRef14,
1653
2167
  useCallback as useCallback4,
1654
2168
  useMemo as useMemo2,
1655
- useState as useState5
2169
+ useState as useState7
1656
2170
  } from "react";
1657
2171
 
1658
2172
  // src/components/StnTreeNode.tsx
1659
- import { forwardRef as forwardRef11 } from "react";
2173
+ import { forwardRef as forwardRef12 } from "react";
1660
2174
  import { resolveSystemIconSrcFromName as resolveSystemIconSrcFromName2 } from "@stn-uiux/pub-ui/data/stnSystemIcons";
1661
2175
 
1662
2176
  // src/stnTreeFlatten.ts
@@ -1708,7 +2222,9 @@ function walk(nodes, depth, ancestorIsLast, expanded, out) {
1708
2222
  hasChildren,
1709
2223
  expanded: isExpanded,
1710
2224
  isLast,
1711
- visible: node.visible !== false
2225
+ visible: node.visible !== false,
2226
+ count: node.count,
2227
+ icon: node.icon
1712
2228
  });
1713
2229
  if (hasChildren && isExpanded) {
1714
2230
  walk(node.children, depth + 1, [...ancestorIsLast, isLast], expanded, out);
@@ -1736,7 +2252,7 @@ function collectExpandableIds(nodes) {
1736
2252
  }
1737
2253
 
1738
2254
  // src/components/StnTreeNode.tsx
1739
- import { jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
2255
+ import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
1740
2256
  var ICON = {
1741
2257
  folderOpen: resolveSystemIconSrcFromName2("fill/folder-open") ?? "",
1742
2258
  folderClosed: resolveSystemIconSrcFromName2("fill/folder") ?? "",
@@ -1752,13 +2268,13 @@ function maskStyle(src) {
1752
2268
  }
1753
2269
  function TreeGuideCell({ cell }) {
1754
2270
  if (cell.type === "blank") {
1755
- return /* @__PURE__ */ jsx16("span", { className: "stn-tree__cell stn-tree__cell--blank", "aria-hidden": "true" });
2271
+ return /* @__PURE__ */ jsx18("span", { className: "stn-tree__cell stn-tree__cell--blank", "aria-hidden": "true" });
1756
2272
  }
1757
2273
  if (cell.type === "vertical") {
1758
- return /* @__PURE__ */ jsx16("span", { className: "stn-tree__cell stn-tree__cell--guide", "aria-hidden": "true", children: /* @__PURE__ */ jsx16("span", { className: "stn-tree__guide-glyph", style: maskStyle(ICON.vertical) }) });
2274
+ return /* @__PURE__ */ jsx18("span", { className: "stn-tree__cell stn-tree__cell--guide", "aria-hidden": "true", children: /* @__PURE__ */ jsx18("span", { className: "stn-tree__guide-glyph", style: maskStyle(ICON.vertical) }) });
1759
2275
  }
1760
2276
  if (cell.type === "connector") {
1761
- return /* @__PURE__ */ jsx16(
2277
+ return /* @__PURE__ */ jsx18(
1762
2278
  "span",
1763
2279
  {
1764
2280
  className: cn(
@@ -1766,7 +2282,7 @@ function TreeGuideCell({ cell }) {
1766
2282
  cell.variant === "end" && "stn-tree__cell--connector-end"
1767
2283
  ),
1768
2284
  "aria-hidden": "true",
1769
- children: /* @__PURE__ */ jsx16(
2285
+ children: /* @__PURE__ */ jsx18(
1770
2286
  "span",
1771
2287
  {
1772
2288
  className: "stn-tree__guide-glyph",
@@ -1776,7 +2292,7 @@ function TreeGuideCell({ cell }) {
1776
2292
  }
1777
2293
  );
1778
2294
  }
1779
- return /* @__PURE__ */ jsx16("span", { className: "stn-tree__cell stn-tree__cell--toggle", "aria-hidden": "true", children: /* @__PURE__ */ jsx16(
2295
+ return /* @__PURE__ */ jsx18("span", { className: "stn-tree__cell stn-tree__cell--toggle", "aria-hidden": "true", children: /* @__PURE__ */ jsx18(
1780
2296
  "span",
1781
2297
  {
1782
2298
  className: cn("stn-tree__chevron-glyph", cell.expanded && "is-expanded"),
@@ -1784,10 +2300,17 @@ function TreeGuideCell({ cell }) {
1784
2300
  }
1785
2301
  ) });
1786
2302
  }
1787
- function TreeNodeIcon({ kind, expanded }) {
2303
+ function TreeNodeIcon({
2304
+ kind,
2305
+ expanded,
2306
+ icon
2307
+ }) {
2308
+ if (icon != null) {
2309
+ return /* @__PURE__ */ jsx18("span", { className: "stn-tree__cell stn-tree__cell--icon stn-tree__icon stn-tree__icon--custom", children: typeof icon === "string" ? /* @__PURE__ */ jsx18(StnIcon, { name: icon, size: 16, className: "stn-tree__icon-glyph" }) : icon });
2310
+ }
1788
2311
  if (kind === "server") {
1789
- return /* @__PURE__ */ jsxs10("span", { className: "stn-tree__cell stn-tree__cell--icon stn-tree__icon stn-tree__icon--server", children: [
1790
- /* @__PURE__ */ jsx16(
2312
+ return /* @__PURE__ */ jsxs12("span", { className: "stn-tree__cell stn-tree__cell--icon stn-tree__icon stn-tree__icon--server", children: [
2313
+ /* @__PURE__ */ jsx18(
1791
2314
  StnIcon,
1792
2315
  {
1793
2316
  name: "fill/server_2_tree_light",
@@ -1795,7 +2318,7 @@ function TreeNodeIcon({ kind, expanded }) {
1795
2318
  className: "stn-tree__icon-glyph stn-tree__server-icon stn-tree__server-icon--light stn-icon--color"
1796
2319
  }
1797
2320
  ),
1798
- /* @__PURE__ */ jsx16(
2321
+ /* @__PURE__ */ jsx18(
1799
2322
  StnIcon,
1800
2323
  {
1801
2324
  name: "fill/server_2",
@@ -1807,18 +2330,18 @@ function TreeNodeIcon({ kind, expanded }) {
1807
2330
  }
1808
2331
  const folderKind = kind === "root" ? "root" : "folder";
1809
2332
  const folderSrc = kind === "root" || expanded ? ICON.folderOpen : ICON.folderClosed;
1810
- return /* @__PURE__ */ jsx16(
2333
+ return /* @__PURE__ */ jsx18(
1811
2334
  "span",
1812
2335
  {
1813
2336
  className: cn(
1814
2337
  "stn-tree__cell stn-tree__cell--icon stn-tree__icon",
1815
2338
  `stn-tree__icon--${folderKind}`
1816
2339
  ),
1817
- children: /* @__PURE__ */ jsx16("span", { className: "stn-tree__icon-glyph", style: maskStyle(folderSrc), "aria-hidden": "true" })
2340
+ children: /* @__PURE__ */ jsx18("span", { className: "stn-tree__icon-glyph", style: maskStyle(folderSrc), "aria-hidden": "true" })
1818
2341
  }
1819
2342
  );
1820
2343
  }
1821
- var StnTreeNode = forwardRef11(function StnTreeNode2({
2344
+ var StnTreeNode = forwardRef12(function StnTreeNode2({
1822
2345
  label,
1823
2346
  kind = "folder",
1824
2347
  bold = false,
@@ -1830,6 +2353,8 @@ var StnTreeNode = forwardRef11(function StnTreeNode2({
1830
2353
  ancestorIsLast,
1831
2354
  cells: cellsProp,
1832
2355
  showIcon = true,
2356
+ icon,
2357
+ count,
1833
2358
  visible = true,
1834
2359
  showVisibilityToggle = false,
1835
2360
  onVisibilityChange,
@@ -1861,7 +2386,7 @@ var StnTreeNode = forwardRef11(function StnTreeNode2({
1861
2386
  handleSelect();
1862
2387
  }
1863
2388
  };
1864
- return /* @__PURE__ */ jsxs10(
2389
+ return /* @__PURE__ */ jsxs12(
1865
2390
  "div",
1866
2391
  {
1867
2392
  ref,
@@ -1889,7 +2414,7 @@ var StnTreeNode = forwardRef11(function StnTreeNode2({
1889
2414
  children: [
1890
2415
  cells.map((cell, index) => {
1891
2416
  if (cell.type === "toggle") {
1892
- return /* @__PURE__ */ jsx16(
2417
+ return /* @__PURE__ */ jsx18(
1893
2418
  "button",
1894
2419
  {
1895
2420
  type: "button",
@@ -1900,7 +2425,7 @@ var StnTreeNode = forwardRef11(function StnTreeNode2({
1900
2425
  event.stopPropagation();
1901
2426
  onToggle?.();
1902
2427
  },
1903
- children: /* @__PURE__ */ jsx16(
2428
+ children: /* @__PURE__ */ jsx18(
1904
2429
  "span",
1905
2430
  {
1906
2431
  className: cn("stn-tree__chevron-glyph", cell.expanded && "is-expanded"),
@@ -1911,11 +2436,12 @@ var StnTreeNode = forwardRef11(function StnTreeNode2({
1911
2436
  `c-${index}`
1912
2437
  );
1913
2438
  }
1914
- return /* @__PURE__ */ jsx16(TreeGuideCell, { cell }, `c-${index}`);
2439
+ return /* @__PURE__ */ jsx18(TreeGuideCell, { cell }, `c-${index}`);
1915
2440
  }),
1916
- showIcon && /* @__PURE__ */ jsx16(TreeNodeIcon, { kind, expanded }),
1917
- /* @__PURE__ */ jsx16("span", { className: cn("stn-tree__label", bold && "is-bold"), children: label }),
1918
- showVisibilityToggle && /* @__PURE__ */ jsx16(
2441
+ showIcon && /* @__PURE__ */ jsx18(TreeNodeIcon, { kind, expanded, icon }),
2442
+ /* @__PURE__ */ jsx18("span", { className: cn("stn-tree__label", bold && "is-bold"), children: label }),
2443
+ count != null && /* @__PURE__ */ jsx18("span", { className: "stn-tree__count", "aria-label": `\uC218\uB7C9 ${count}`, children: count }),
2444
+ showVisibilityToggle && /* @__PURE__ */ jsx18(
1919
2445
  "button",
1920
2446
  {
1921
2447
  type: "button",
@@ -1926,7 +2452,7 @@ var StnTreeNode = forwardRef11(function StnTreeNode2({
1926
2452
  event.stopPropagation();
1927
2453
  onVisibilityChange?.(!visible);
1928
2454
  },
1929
- children: /* @__PURE__ */ jsx16(
2455
+ children: /* @__PURE__ */ jsx18(
1930
2456
  "span",
1931
2457
  {
1932
2458
  className: cn("stn-tree__visibility-glyph", !visible && "is-off"),
@@ -1943,14 +2469,14 @@ var StnTreeItem = StnTreeNode;
1943
2469
 
1944
2470
  // src/components/StnScroll.tsx
1945
2471
  import {
1946
- forwardRef as forwardRef12,
2472
+ forwardRef as forwardRef13,
1947
2473
  useCallback as useCallback3,
1948
2474
  useEffect as useEffect6,
1949
2475
  useId as useId4,
1950
2476
  useRef as useRef4,
1951
- useState as useState4
2477
+ useState as useState6
1952
2478
  } from "react";
1953
- import { Fragment, jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
2479
+ import { Fragment as Fragment2, jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
1954
2480
  function assignRef(ref, value) {
1955
2481
  if (typeof ref === "function") ref(value);
1956
2482
  else if (ref) ref.current = value;
@@ -1961,7 +2487,7 @@ function barWidth(size, scrollWidth) {
1961
2487
  if (size === "thick") return "12px";
1962
2488
  return "8px";
1963
2489
  }
1964
- var StnScroll = forwardRef12(function StnScroll2({
2490
+ var StnScroll = forwardRef13(function StnScroll2({
1965
2491
  orientation = "vertical",
1966
2492
  variant = "default",
1967
2493
  showArrows = false,
@@ -1980,7 +2506,7 @@ var StnScroll = forwardRef12(function StnScroll2({
1980
2506
  const rawId = useId4();
1981
2507
  const customId = `stn-scr-${rawId.replace(/[^a-zA-Z0-9_-]/g, "")}`;
1982
2508
  const innerRef = useRef4(null);
1983
- const [edges, setEdges] = useState4({ top: true, bottom: false, left: true, right: false });
2509
+ const [edges, setEdges] = useState6({ top: true, bottom: false, left: true, right: false });
1984
2510
  const hasArrows = variant === "arrows" || showArrows;
1985
2511
  const hasCustomStyling = Boolean(thumbColor || trackColor || scrollWidth != null);
1986
2512
  const showY = orientation !== "horizontal";
@@ -1990,7 +2516,7 @@ var StnScroll = forwardRef12(function StnScroll2({
1990
2516
  const w = scrollWidth != null ? typeof scrollWidth === "number" ? `${scrollWidth}px` : scrollWidth : void 0;
1991
2517
  const thumb = thumbColor;
1992
2518
  const track = trackColor || "rgba(255, 255, 255, 0.05)";
1993
- dynamicStyleTag = /* @__PURE__ */ jsx17("style", { children: `
2519
+ dynamicStyleTag = /* @__PURE__ */ jsx19("style", { children: `
1994
2520
  .${customId}::-webkit-scrollbar {
1995
2521
  ${w ? `width: ${w} !important; height: ${w} !important;` : ""}
1996
2522
  ${track ? `background: ${track} !important;` : ""}
@@ -2049,15 +2575,15 @@ var StnScroll = forwardRef12(function StnScroll2({
2049
2575
  behavior: "smooth"
2050
2576
  });
2051
2577
  };
2052
- const scrollElement = /* @__PURE__ */ jsx17(
2578
+ const scrollElement = /* @__PURE__ */ jsx19(
2053
2579
  "div",
2054
2580
  {
2055
2581
  ref: setNode,
2056
2582
  className: cn(
2057
2583
  "stn-scroll",
2058
- `stn-scroll--${orientation}`,
2059
- size !== "default" && `stn-scroll--${size}`,
2060
- color !== "default" && `stn-scroll--${color}`,
2584
+ orientation,
2585
+ size !== "default" && size,
2586
+ color !== "default" && color,
2061
2587
  hasCustomStyling && customId,
2062
2588
  className
2063
2589
  ),
@@ -2068,7 +2594,7 @@ var StnScroll = forwardRef12(function StnScroll2({
2068
2594
  }
2069
2595
  );
2070
2596
  if (!hasArrows) {
2071
- return /* @__PURE__ */ jsxs11(Fragment, { children: [
2597
+ return /* @__PURE__ */ jsxs13(Fragment2, { children: [
2072
2598
  dynamicStyleTag,
2073
2599
  scrollElement
2074
2600
  ] });
@@ -2076,11 +2602,11 @@ var StnScroll = forwardRef12(function StnScroll2({
2076
2602
  const shellStyle = {
2077
2603
  "--stn-scroll-width": barWidth(size, scrollWidth)
2078
2604
  };
2079
- return /* @__PURE__ */ jsxs11(Fragment, { children: [
2605
+ return /* @__PURE__ */ jsxs13(Fragment2, { children: [
2080
2606
  dynamicStyleTag,
2081
- /* @__PURE__ */ jsxs11("div", { className: cn("stn-scroll-shell", `stn-scroll-shell--${orientation}`), style: shellStyle, children: [
2082
- showY ? /* @__PURE__ */ jsxs11(Fragment, { children: [
2083
- /* @__PURE__ */ jsx17(
2607
+ /* @__PURE__ */ jsxs13("div", { className: cn("stn-scroll-shell", orientation), style: shellStyle, children: [
2608
+ showY ? /* @__PURE__ */ jsxs13(Fragment2, { children: [
2609
+ /* @__PURE__ */ jsx19(
2084
2610
  ScrollArrow,
2085
2611
  {
2086
2612
  direction: "up",
@@ -2089,7 +2615,7 @@ var StnScroll = forwardRef12(function StnScroll2({
2089
2615
  onClick: () => scrollByAxis("y", -1)
2090
2616
  }
2091
2617
  ),
2092
- /* @__PURE__ */ jsx17(
2618
+ /* @__PURE__ */ jsx19(
2093
2619
  ScrollArrow,
2094
2620
  {
2095
2621
  direction: "down",
@@ -2100,8 +2626,8 @@ var StnScroll = forwardRef12(function StnScroll2({
2100
2626
  )
2101
2627
  ] }) : null,
2102
2628
  scrollElement,
2103
- showX ? /* @__PURE__ */ jsxs11(Fragment, { children: [
2104
- /* @__PURE__ */ jsx17(
2629
+ showX ? /* @__PURE__ */ jsxs13(Fragment2, { children: [
2630
+ /* @__PURE__ */ jsx19(
2105
2631
  ScrollArrow,
2106
2632
  {
2107
2633
  direction: "left",
@@ -2110,7 +2636,7 @@ var StnScroll = forwardRef12(function StnScroll2({
2110
2636
  onClick: () => scrollByAxis("x", -1)
2111
2637
  }
2112
2638
  ),
2113
- /* @__PURE__ */ jsx17(
2639
+ /* @__PURE__ */ jsx19(
2114
2640
  ScrollArrow,
2115
2641
  {
2116
2642
  direction: "right",
@@ -2129,27 +2655,27 @@ function ScrollArrow({
2129
2655
  label,
2130
2656
  ...rest
2131
2657
  }) {
2132
- return /* @__PURE__ */ jsxs11(
2658
+ return /* @__PURE__ */ jsxs13(
2133
2659
  "button",
2134
2660
  {
2135
2661
  type: "button",
2136
- className: cn("stn-scroll__arrow", `stn-scroll__arrow--${direction}`, className),
2662
+ className: cn("stn-scroll__arrow", direction, className),
2137
2663
  "aria-label": label,
2138
2664
  ...rest,
2139
2665
  children: [
2140
- direction === "up" && /* @__PURE__ */ jsx17("svg", { width: "7", height: "6", viewBox: "0 0 7 6", fill: "currentColor", children: /* @__PURE__ */ jsx17("path", { d: "M2.78 1.13a0.85 0.85 0 0 1 1.44 0l2.12 3.18A0.85 0.85 0 0 1 5.64 5.6H1.36a0.85 0.85 0 0 1-.7-1.29l2.12-3.18z" }) }),
2141
- direction === "down" && /* @__PURE__ */ jsx17("svg", { width: "7", height: "6", viewBox: "0 0 7 6", fill: "currentColor", children: /* @__PURE__ */ jsx17("path", { d: "M2.78 4.87a0.85 0.85 0 0 0 1.44 0l2.12-3.18A0.85 0.85 0 0 0 5.64 0.4H1.36a0.85 0.85 0 0 0-.7 1.29l2.12 3.18z" }) }),
2142
- direction === "left" && /* @__PURE__ */ jsx17("svg", { width: "6", height: "7", viewBox: "0 0 6 7", fill: "currentColor", children: /* @__PURE__ */ jsx17("path", { d: "M1.13 4.22a0.85 0.85 0 0 1 0-1.44l3.18-2.12A0.85 0.85 0 0 1 5.6 1.36v4.28a0.85 0.85 0 0 1-1.29.7L1.13 4.22z" }) }),
2143
- direction === "right" && /* @__PURE__ */ jsx17("svg", { width: "6", height: "7", viewBox: "0 0 6 7", fill: "currentColor", children: /* @__PURE__ */ jsx17("path", { d: "M4.87 4.22a0.85 0.85 0 0 0 0-1.44L1.69 0.66A0.85 0.85 0 0 0 0.4 1.36v4.28a0.85 0.85 0 0 0 1.29.7l3.18-2.12z" }) })
2666
+ direction === "up" && /* @__PURE__ */ jsx19("svg", { width: "7", height: "6", viewBox: "0 0 7 6", fill: "currentColor", children: /* @__PURE__ */ jsx19("path", { d: "M2.78 1.13a0.85 0.85 0 0 1 1.44 0l2.12 3.18A0.85 0.85 0 0 1 5.64 5.6H1.36a0.85 0.85 0 0 1-.7-1.29l2.12-3.18z" }) }),
2667
+ direction === "down" && /* @__PURE__ */ jsx19("svg", { width: "7", height: "6", viewBox: "0 0 7 6", fill: "currentColor", children: /* @__PURE__ */ jsx19("path", { d: "M2.78 4.87a0.85 0.85 0 0 0 1.44 0l2.12-3.18A0.85 0.85 0 0 0 5.64 0.4H1.36a0.85 0.85 0 0 0-.7 1.29l2.12 3.18z" }) }),
2668
+ direction === "left" && /* @__PURE__ */ jsx19("svg", { width: "6", height: "7", viewBox: "0 0 6 7", fill: "currentColor", children: /* @__PURE__ */ jsx19("path", { d: "M1.13 4.22a0.85 0.85 0 0 1 0-1.44l3.18-2.12A0.85 0.85 0 0 1 5.6 1.36v4.28a0.85 0.85 0 0 1-1.29.7L1.13 4.22z" }) }),
2669
+ direction === "right" && /* @__PURE__ */ jsx19("svg", { width: "6", height: "7", viewBox: "0 0 6 7", fill: "currentColor", children: /* @__PURE__ */ jsx19("path", { d: "M4.87 4.22a0.85 0.85 0 0 0 0-1.44L1.69 0.66A0.85 0.85 0 0 0 0.4 1.36v4.28a0.85 0.85 0 0 0 1.29.7l3.18-2.12z" }) })
2144
2670
  ]
2145
2671
  }
2146
2672
  );
2147
2673
  }
2148
2674
 
2149
2675
  // src/components/StnTree.tsx
2150
- import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
2676
+ import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
2151
2677
  function useControllableSet(controlled, defaultIds, defaultExpandAll, allExpandable) {
2152
- const [internal, setInternal] = useState5(() => {
2678
+ const [internal, setInternal] = useState7(() => {
2153
2679
  if (defaultIds != null) return defaultIds;
2154
2680
  if (defaultExpandAll) return allExpandable;
2155
2681
  return [];
@@ -2164,7 +2690,7 @@ function useControllableSet(controlled, defaultIds, defaultExpandAll, allExpanda
2164
2690
  );
2165
2691
  return [value, setValue];
2166
2692
  }
2167
- var StnTree = forwardRef13(function StnTree2({
2693
+ var StnTree = forwardRef14(function StnTree2({
2168
2694
  nodes,
2169
2695
  heading,
2170
2696
  defaultExpandAll = false,
@@ -2198,9 +2724,9 @@ var StnTree = forwardRef13(function StnTree2({
2198
2724
  defaultExpandAll,
2199
2725
  expandableIds
2200
2726
  );
2201
- const [internalSelected, setInternalSelected] = useState5(defaultSelectedId);
2727
+ const [internalSelected, setInternalSelected] = useState7(defaultSelectedId);
2202
2728
  const selected = selectedId ?? internalSelected;
2203
- const [internalHidden, setInternalHidden] = useState5(() => defaultHiddenIds ?? []);
2729
+ const [internalHidden, setInternalHidden] = useState7(() => defaultHiddenIds ?? []);
2204
2730
  const hidden = controlledHiddenIds ?? internalHidden;
2205
2731
  const handleVisibilityToggle = useCallback4(
2206
2732
  (id, nextVisible) => {
@@ -2236,9 +2762,9 @@ var StnTree = forwardRef13(function StnTree2({
2236
2762
  },
2237
2763
  [onSelect, selectedId]
2238
2764
  );
2239
- const rowsContent = /* @__PURE__ */ jsx18("div", { className: "stn-tree__rows", role: "tree", "aria-label": heading || "folder tree", children: rows.map((row) => {
2765
+ const rowsContent = /* @__PURE__ */ jsx20("div", { className: "stn-tree__rows", role: "tree", "aria-label": heading || "folder tree", children: rows.map((row) => {
2240
2766
  const isHidden = hidden.includes(row.id) || !row.visible;
2241
- return /* @__PURE__ */ jsx18(
2767
+ return /* @__PURE__ */ jsx20(
2242
2768
  StnTreeNode,
2243
2769
  {
2244
2770
  label: row.label,
@@ -2251,6 +2777,8 @@ var StnTree = forwardRef13(function StnTree2({
2251
2777
  isLast: row.isLast,
2252
2778
  cells: row.cells,
2253
2779
  showIcon: showIcons,
2780
+ icon: row.icon,
2781
+ count: row.count,
2254
2782
  visible: !isHidden,
2255
2783
  showVisibilityToggle,
2256
2784
  onVisibilityChange: (nextVisible) => handleVisibilityToggle(row.id, nextVisible),
@@ -2261,22 +2789,22 @@ var StnTree = forwardRef13(function StnTree2({
2261
2789
  row.id
2262
2790
  );
2263
2791
  }) });
2264
- return /* @__PURE__ */ jsxs12(
2792
+ return /* @__PURE__ */ jsxs14(
2265
2793
  "div",
2266
2794
  {
2267
2795
  ref,
2268
2796
  className: cn(
2269
2797
  "stn-tree",
2270
- size !== "sm" && `stn-tree--${size}`,
2271
- width !== "full" && `stn-tree--${width}`,
2272
- radius !== "sm" && `stn-tree--radius-${radius}`,
2273
- !guides && "stn-tree--no-guides",
2798
+ size,
2799
+ width,
2800
+ radius !== "sm" && `radius-${radius}`,
2801
+ !guides && "no-guides",
2274
2802
  className
2275
2803
  ),
2276
2804
  ...rest,
2277
2805
  children: [
2278
- heading ? /* @__PURE__ */ jsx18("p", { className: "stn-tree__heading", children: heading }) : null,
2279
- maxHeight != null ? /* @__PURE__ */ jsx18(
2806
+ heading ? /* @__PURE__ */ jsx20("p", { className: "stn-tree__heading", children: heading }) : null,
2807
+ maxHeight != null ? /* @__PURE__ */ jsx20(
2280
2808
  StnScroll,
2281
2809
  {
2282
2810
  orientation: "vertical",
@@ -2293,22 +2821,22 @@ var StnTree = forwardRef13(function StnTree2({
2293
2821
  });
2294
2822
 
2295
2823
  // src/components/StnCard.tsx
2296
- import { forwardRef as forwardRef14 } from "react";
2297
- import { jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
2824
+ import { forwardRef as forwardRef15 } from "react";
2825
+ import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
2298
2826
  function StnCardHeader({ children, title, extra, className, ...rest }) {
2299
- return /* @__PURE__ */ jsxs13("div", { className: cn("stn-card__header", className), ...rest, children: [
2300
- title ? /* @__PURE__ */ jsx19("div", { className: "stn-card__header-title", children: title }) : null,
2827
+ return /* @__PURE__ */ jsxs15("div", { className: cn("stn-card__header", className), ...rest, children: [
2828
+ title ? /* @__PURE__ */ jsx21("div", { className: "stn-card__header-title", children: title }) : null,
2301
2829
  children,
2302
- extra ? /* @__PURE__ */ jsx19("div", { className: "stn-card__header-extra", children: extra }) : null
2830
+ extra ? /* @__PURE__ */ jsx21("div", { className: "stn-card__header-extra", children: extra }) : null
2303
2831
  ] });
2304
2832
  }
2305
2833
  function StnCardBody({ children, className, ...rest }) {
2306
- return /* @__PURE__ */ jsx19("div", { className: cn("stn-card__body", className), ...rest, children });
2834
+ return /* @__PURE__ */ jsx21("div", { className: cn("stn-card__body", className), ...rest, children });
2307
2835
  }
2308
2836
  function StnCardFooter({ children, className, ...rest }) {
2309
- return /* @__PURE__ */ jsx19("div", { className: cn("stn-card__footer", className), ...rest, children });
2837
+ return /* @__PURE__ */ jsx21("div", { className: cn("stn-card__footer", className), ...rest, children });
2310
2838
  }
2311
- var StnCard = forwardRef14(function StnCard2({
2839
+ var StnCard = forwardRef15(function StnCard2({
2312
2840
  children,
2313
2841
  variant = "flat",
2314
2842
  radius = "md",
@@ -2320,7 +2848,7 @@ var StnCard = forwardRef14(function StnCard2({
2320
2848
  ...rest
2321
2849
  }, ref) {
2322
2850
  const isClickable = interactive || rest.onClick != null;
2323
- return /* @__PURE__ */ jsx19(
2851
+ return /* @__PURE__ */ jsx21(
2324
2852
  "div",
2325
2853
  {
2326
2854
  ref,
@@ -2344,39 +2872,48 @@ StnCard.Body = StnCardBody;
2344
2872
  StnCard.Footer = StnCardFooter;
2345
2873
 
2346
2874
  // src/patterns/sectionSide/StnSectionSide.tsx
2347
- import { forwardRef as forwardRef15 } from "react";
2348
- import { jsx as jsx20 } from "react/jsx-runtime";
2349
- var StnSectionSide = forwardRef15(function StnSectionSide2({ children, className, fill = true, scrollProps, ...rest }, ref) {
2875
+ import { forwardRef as forwardRef16 } from "react";
2876
+ import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
2877
+ var StnSectionSide = forwardRef16(function StnSectionSide2({ children, header, footer, className, fill = true, fullWidth = false, scrollProps, ...rest }, ref) {
2350
2878
  const { className: scrollClassName, ...scrollRest } = scrollProps ?? {};
2351
- return /* @__PURE__ */ jsx20(
2879
+ return /* @__PURE__ */ jsxs16(
2352
2880
  "aside",
2353
2881
  {
2354
2882
  ref,
2355
- className: cn("stn-section-side", fill && "stn-section-side--fill", className),
2883
+ className: cn(
2884
+ "stn-section-side",
2885
+ fill && "stn-section-side--fill",
2886
+ fullWidth && "is-full-width",
2887
+ className
2888
+ ),
2356
2889
  "data-stn-section-side": true,
2357
2890
  ...rest,
2358
- children: /* @__PURE__ */ jsx20(
2359
- StnScroll,
2360
- {
2361
- orientation: "vertical",
2362
- className: cn("stn-section-side__body", scrollClassName),
2363
- ...scrollRest,
2364
- children
2365
- }
2366
- )
2891
+ children: [
2892
+ header && /* @__PURE__ */ jsx22("div", { className: "stn-section-side__header", children: header }),
2893
+ /* @__PURE__ */ jsx22(
2894
+ StnScroll,
2895
+ {
2896
+ orientation: "vertical",
2897
+ className: cn("stn-section-side__body", scrollClassName),
2898
+ ...scrollRest,
2899
+ children
2900
+ }
2901
+ ),
2902
+ footer && /* @__PURE__ */ jsx22("div", { className: "stn-section-side__footer", children: footer })
2903
+ ]
2367
2904
  }
2368
2905
  );
2369
2906
  });
2370
2907
  function StnSectionSidePreset({ tree, ...sideProps }) {
2371
- return /* @__PURE__ */ jsx20(StnSectionSide, { ...sideProps, children: /* @__PURE__ */ jsx20(StnTree, { heading: "FOLDER STRUCTURE", ...tree }) });
2908
+ return /* @__PURE__ */ jsx22(StnSectionSide, { ...sideProps, children: /* @__PURE__ */ jsx22(StnTree, { heading: "FOLDER STRUCTURE", ...tree }) });
2372
2909
  }
2373
2910
 
2374
2911
  // src/patterns/login/StnLoginCard.tsx
2375
- import { forwardRef as forwardRef16 } from "react";
2376
- import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
2377
- var StnLoginCardGlowWrapper = forwardRef16(
2912
+ import { forwardRef as forwardRef17 } from "react";
2913
+ import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
2914
+ var StnLoginCardGlowWrapper = forwardRef17(
2378
2915
  function StnLoginCardGlowWrapper2({ children, className, ...rest }, ref) {
2379
- return /* @__PURE__ */ jsx21(
2916
+ return /* @__PURE__ */ jsx23(
2380
2917
  "div",
2381
2918
  {
2382
2919
  ref,
@@ -2388,7 +2925,7 @@ var StnLoginCardGlowWrapper = forwardRef16(
2388
2925
  );
2389
2926
  }
2390
2927
  );
2391
- var StnLoginCard = forwardRef16(function StnLoginCard2({
2928
+ var StnLoginCard = forwardRef17(function StnLoginCard2({
2392
2929
  brand,
2393
2930
  children,
2394
2931
  brandPosition = "left",
@@ -2401,7 +2938,7 @@ var StnLoginCard = forwardRef16(function StnLoginCard2({
2401
2938
  }, ref) {
2402
2939
  const isReversed = reverse || brandPosition === "right";
2403
2940
  const hasGlow = glow || variant === "glow";
2404
- const cardElement = /* @__PURE__ */ jsxs14(
2941
+ const cardElement = /* @__PURE__ */ jsxs17(
2405
2942
  "div",
2406
2943
  {
2407
2944
  ref: hasGlow ? void 0 : ref,
@@ -2409,24 +2946,24 @@ var StnLoginCard = forwardRef16(function StnLoginCard2({
2409
2946
  "data-stn-login-card": true,
2410
2947
  ...rest,
2411
2948
  children: [
2412
- brand && /* @__PURE__ */ jsx21("div", { className: "stn-login-card__brand", "data-stn-login-card-brand": true, children: brand }),
2413
- /* @__PURE__ */ jsx21("div", { className: "stn-login-card__form", "data-stn-login-card-form": true, children })
2949
+ brand && /* @__PURE__ */ jsx23("div", { className: "stn-login-card__brand", "data-stn-login-card-brand": true, children: brand }),
2950
+ /* @__PURE__ */ jsx23("div", { className: "stn-login-card__form", "data-stn-login-card-form": true, children })
2414
2951
  ]
2415
2952
  }
2416
2953
  );
2417
2954
  if (hasGlow) {
2418
- return /* @__PURE__ */ jsx21(StnLoginCardGlowWrapper, { ref, className: wrapperClassName, children: cardElement });
2955
+ return /* @__PURE__ */ jsx23(StnLoginCardGlowWrapper, { ref, className: wrapperClassName, children: cardElement });
2419
2956
  }
2420
2957
  return cardElement;
2421
2958
  });
2422
- var StnLoginBrandStack = forwardRef16(
2959
+ var StnLoginBrandStack = forwardRef17(
2423
2960
  function StnLoginBrandStack2({ children, className, ...rest }, ref) {
2424
- return /* @__PURE__ */ jsx21("div", { ref, className: cn("stn-login-brand-stack", className), ...rest, children });
2961
+ return /* @__PURE__ */ jsx23("div", { ref, className: cn("stn-login-brand-stack", className), ...rest, children });
2425
2962
  }
2426
2963
  );
2427
- var StnLoginFormStack = forwardRef16(
2964
+ var StnLoginFormStack = forwardRef17(
2428
2965
  function StnLoginFormStack2({ children, className, ...rest }, ref) {
2429
- return /* @__PURE__ */ jsx21(
2966
+ return /* @__PURE__ */ jsx23(
2430
2967
  "form",
2431
2968
  {
2432
2969
  ref,
@@ -2438,9 +2975,9 @@ var StnLoginFormStack = forwardRef16(
2438
2975
  );
2439
2976
  }
2440
2977
  );
2441
- var StnLoginFormFields = forwardRef16(
2978
+ var StnLoginFormFields = forwardRef17(
2442
2979
  function StnLoginFormFields2({ children, className, ...rest }, ref) {
2443
- return /* @__PURE__ */ jsx21(
2980
+ return /* @__PURE__ */ jsx23(
2444
2981
  "div",
2445
2982
  {
2446
2983
  ref,
@@ -2452,9 +2989,9 @@ var StnLoginFormFields = forwardRef16(
2452
2989
  );
2453
2990
  }
2454
2991
  );
2455
- var StnLoginFormLinks = forwardRef16(
2992
+ var StnLoginFormLinks = forwardRef17(
2456
2993
  function StnLoginFormLinks2({ children, className, ...rest }, ref) {
2457
- return /* @__PURE__ */ jsx21(
2994
+ return /* @__PURE__ */ jsx23(
2458
2995
  "nav",
2459
2996
  {
2460
2997
  ref,
@@ -2467,20 +3004,20 @@ var StnLoginFormLinks = forwardRef16(
2467
3004
  );
2468
3005
  }
2469
3006
  );
2470
- var StnLoginPlaceholder = forwardRef16(
3007
+ var StnLoginPlaceholder = forwardRef17(
2471
3008
  function StnLoginPlaceholder2({ children = "\uC18C\uC15C \uB85C\uADF8\uC778 \uAE30\uB2A5\uC740 \uC900\uBE44 \uC911\uC785\uB2C8\uB2E4.", className, ...rest }, ref) {
2472
- return /* @__PURE__ */ jsx21("p", { ref, className: cn("stn-login__placeholder", className), ...rest, children });
3009
+ return /* @__PURE__ */ jsx23("p", { ref, className: cn("stn-login__placeholder", className), ...rest, children });
2473
3010
  }
2474
3011
  );
2475
3012
 
2476
3013
  // src/patterns/login/StnLoginTextField.tsx
2477
3014
  import {
2478
3015
  cloneElement as cloneElement3,
2479
- forwardRef as forwardRef17,
3016
+ forwardRef as forwardRef18,
2480
3017
  isValidElement as isValidElement3
2481
3018
  } from "react";
2482
- import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
2483
- var StnLoginTextField = forwardRef17(
3019
+ import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
3020
+ var StnLoginTextField = forwardRef18(
2484
3021
  function StnLoginTextField2({
2485
3022
  icon,
2486
3023
  iconColor,
@@ -2495,7 +3032,7 @@ var StnLoginTextField = forwardRef17(
2495
3032
  let renderedIcon = null;
2496
3033
  if (hasIcon) {
2497
3034
  if (typeof icon === "string") {
2498
- renderedIcon = /* @__PURE__ */ jsx22(
3035
+ renderedIcon = /* @__PURE__ */ jsx24(
2499
3036
  StnIconBox,
2500
3037
  {
2501
3038
  icon,
@@ -2512,7 +3049,7 @@ var StnLoginTextField = forwardRef17(
2512
3049
  renderedIcon = icon;
2513
3050
  }
2514
3051
  }
2515
- return /* @__PURE__ */ jsxs15(
3052
+ return /* @__PURE__ */ jsxs18(
2516
3053
  "div",
2517
3054
  {
2518
3055
  className: cn(
@@ -2522,7 +3059,7 @@ var StnLoginTextField = forwardRef17(
2522
3059
  ),
2523
3060
  children: [
2524
3061
  renderedIcon,
2525
- /* @__PURE__ */ jsx22(
3062
+ /* @__PURE__ */ jsx24(
2526
3063
  "input",
2527
3064
  {
2528
3065
  ref,
@@ -2540,9 +3077,9 @@ var StnLoginTextField = forwardRef17(
2540
3077
  );
2541
3078
 
2542
3079
  // src/components/StnLogo.tsx
2543
- import { forwardRef as forwardRef18 } from "react";
3080
+ import { forwardRef as forwardRef19 } from "react";
2544
3081
  import { STN_INFOMAP_LOGO } from "@stn-uiux/pub-ui/data/stnBrand";
2545
- import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
3082
+ import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
2546
3083
  function sources(variant) {
2547
3084
  if (variant === "onlyimg" || variant === "symbol") {
2548
3085
  return { light: STN_INFOMAP_LOGO.onlyImgLight, dark: STN_INFOMAP_LOGO.onlyImgDark };
@@ -2555,9 +3092,9 @@ function sources(variant) {
2555
3092
  }
2556
3093
  return { light: STN_INFOMAP_LOGO.full, dark: STN_INFOMAP_LOGO.fullDark };
2557
3094
  }
2558
- var StnLogo = forwardRef18(function StnLogo2({ variant = "horizontal", size = "md", theme, alt = "InfoMap SRM", className, ...rest }, ref) {
3095
+ var StnLogo = forwardRef19(function StnLogo2({ variant = "horizontal", size = "md", theme, alt = "InfoMap SRM", className, ...rest }, ref) {
2559
3096
  const { light, dark } = sources(variant);
2560
- return /* @__PURE__ */ jsxs16(
3097
+ return /* @__PURE__ */ jsxs19(
2561
3098
  "span",
2562
3099
  {
2563
3100
  ref,
@@ -2565,17 +3102,17 @@ var StnLogo = forwardRef18(function StnLogo2({ variant = "horizontal", size = "m
2565
3102
  "data-theme": theme,
2566
3103
  ...rest,
2567
3104
  children: [
2568
- /* @__PURE__ */ jsx23("img", { className: "stn-logo__img light", src: light, alt: theme === "dark" ? "" : alt }),
2569
- /* @__PURE__ */ jsx23("img", { className: "stn-logo__img dark", src: dark, alt: theme === "light" ? "" : alt })
3105
+ /* @__PURE__ */ jsx25("img", { className: "stn-logo__img light", src: light, alt: theme === "dark" ? "" : alt }),
3106
+ /* @__PURE__ */ jsx25("img", { className: "stn-logo__img dark", src: dark, alt: theme === "light" ? "" : alt })
2570
3107
  ]
2571
3108
  }
2572
3109
  );
2573
3110
  });
2574
3111
 
2575
3112
  // src/components/StnBadge.tsx
2576
- import React from "react";
2577
- import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
2578
- var StnBadge = React.forwardRef(
3113
+ import React2 from "react";
3114
+ import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
3115
+ var StnBadge = React2.forwardRef(
2579
3116
  ({
2580
3117
  badgeContent,
2581
3118
  variant = "standard",
@@ -2617,7 +3154,7 @@ var StnBadge = React.forwardRef(
2617
3154
  ...badgeStyle,
2618
3155
  ...isStandalone && style ? style : {}
2619
3156
  };
2620
- const badgeElement = /* @__PURE__ */ jsx24(
3157
+ const badgeElement = /* @__PURE__ */ jsx26(
2621
3158
  "span",
2622
3159
  {
2623
3160
  ref: isStandalone ? ref : void 0,
@@ -2641,7 +3178,7 @@ var StnBadge = React.forwardRef(
2641
3178
  if (isStandalone) {
2642
3179
  return badgeElement;
2643
3180
  }
2644
- return /* @__PURE__ */ jsxs17("span", { ref, className: cn("stn-badge-root", className), style, ...restProps, children: [
3181
+ return /* @__PURE__ */ jsxs20("span", { ref, className: cn("stn-badge-root", className), style, ...restProps, children: [
2645
3182
  children,
2646
3183
  badgeElement
2647
3184
  ] });
@@ -2653,11 +3190,11 @@ StnBadge.displayName = "StnBadge";
2653
3190
  import {
2654
3191
  STN_GRADE_SOURCE
2655
3192
  } from "@stn-uiux/pub-ui/data/stnChip";
2656
- import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
3193
+ import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
2657
3194
  function hasSideLabel(sideLabel) {
2658
3195
  return sideLabel !== void 0 && sideLabel !== null && sideLabel !== "";
2659
3196
  }
2660
- var DefaultDeleteIcon = () => /* @__PURE__ */ jsx25("svg", { width: "1em", height: "1em", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx25("path", { d: "M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z" }) });
3197
+ var DefaultDeleteIcon = () => /* @__PURE__ */ jsx27("svg", { width: "1em", height: "1em", viewBox: "0 0 16 16", fill: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ jsx27("path", { d: "M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z" }) });
2661
3198
  function StnChip(props) {
2662
3199
  const {
2663
3200
  variant = "filled",
@@ -2712,9 +3249,9 @@ function StnChip(props) {
2712
3249
  onClick?.(e);
2713
3250
  }
2714
3251
  };
2715
- const iconElement = icon ? /* @__PURE__ */ jsx25("span", { className: "stn-chip__icon", children: icon }) : null;
2716
- const contentElement = /* @__PURE__ */ jsx25("span", { className: "stn-chip__label", children: content });
2717
- const deleteElement = onDelete ? /* @__PURE__ */ jsx25(
3252
+ const iconElement = icon ? /* @__PURE__ */ jsx27("span", { className: "stn-chip__icon", children: icon }) : null;
3253
+ const contentElement = /* @__PURE__ */ jsx27("span", { className: "stn-chip__label", children: content });
3254
+ const deleteElement = onDelete ? /* @__PURE__ */ jsx27(
2718
3255
  "button",
2719
3256
  {
2720
3257
  type: "button",
@@ -2724,7 +3261,7 @@ function StnChip(props) {
2724
3261
  e.stopPropagation();
2725
3262
  onDelete(e);
2726
3263
  },
2727
- children: deleteIcon ?? /* @__PURE__ */ jsx25(DefaultDeleteIcon, {})
3264
+ children: deleteIcon ?? /* @__PURE__ */ jsx27(DefaultDeleteIcon, {})
2728
3265
  }
2729
3266
  ) : null;
2730
3267
  const elements = [];
@@ -2741,7 +3278,7 @@ function StnChip(props) {
2741
3278
  if (deleteElement && deleteIconPosition === "right") {
2742
3279
  elements.push(deleteElement);
2743
3280
  }
2744
- const chip = /* @__PURE__ */ jsx25(
3281
+ const chip = /* @__PURE__ */ jsx27(
2745
3282
  "span",
2746
3283
  {
2747
3284
  role,
@@ -2766,241 +3303,19 @@ function StnChip(props) {
2766
3303
  if (!hasSideLabel(resolvedSideLabel)) {
2767
3304
  return chip;
2768
3305
  }
2769
- return /* @__PURE__ */ jsxs18("span", { className: cn("stn-chip-wrap", positionClass, className), children: [
3306
+ return /* @__PURE__ */ jsxs21("span", { className: cn("stn-chip-wrap", positionClass, className), children: [
2770
3307
  chip,
2771
- /* @__PURE__ */ jsx25("span", { className: "stn-chip__side", children: resolvedSideLabel })
3308
+ /* @__PURE__ */ jsx27("span", { className: "stn-chip__side", children: resolvedSideLabel })
2772
3309
  ] });
2773
3310
  }
2774
3311
 
2775
- // src/components/StnSeverityBadge.tsx
2776
- import React2 from "react";
2777
- import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
2778
- var SEVERITY_DEFAULT_LABELS = {
2779
- critical: "Critical",
2780
- major: "Major",
2781
- minor: "Minor",
2782
- warning: "Warning"
2783
- };
2784
- var SEVERITY_ICONS = {
2785
- critical: "fill/alert4",
2786
- major: "fill/alert3",
2787
- minor: "fill/alert2",
2788
- warning: "fill/alert1"
2789
- };
2790
- var StnSeverityBadge = React2.forwardRef(
2791
- ({
2792
- severity,
2793
- variant = "badge",
2794
- size = "md",
2795
- round = false,
2796
- showIcon = true,
2797
- iconOnly = false,
2798
- glow = false,
2799
- blur = false,
2800
- label,
2801
- active = false,
2802
- onClick,
2803
- className = "",
2804
- children,
2805
- ...restProps
2806
- }, ref) => {
2807
- const isFilter = variant === "filter";
2808
- const isInteractive = isFilter || Boolean(onClick);
2809
- const Component = isInteractive ? "button" : "span";
2810
- const isIconOnly = Boolean(iconOnly);
2811
- const hasGlow = Boolean(glow || blur || variant === "glow");
2812
- const classNames = [
2813
- "stn-severity-badge",
2814
- isFilter ? "filter" : "badge",
2815
- size,
2816
- round ? "round" : "",
2817
- isIconOnly ? "icon-only" : "",
2818
- hasGlow ? "glow" : "",
2819
- severity,
2820
- active ? "is-active" : "",
2821
- className
2822
- ].filter(Boolean).join(" ");
2823
- const defaultLabel = SEVERITY_DEFAULT_LABELS[severity];
2824
- const displayLabel = children ?? label ?? defaultLabel;
2825
- const iconName = SEVERITY_ICONS[severity];
2826
- const elementProps = {
2827
- ref,
2828
- className: classNames,
2829
- onClick,
2830
- title: restProps.title ?? (isIconOnly ? defaultLabel : void 0),
2831
- "aria-label": restProps["aria-label"] ?? (isIconOnly ? defaultLabel : void 0),
2832
- ...restProps
2833
- };
2834
- if (Component === "button") {
2835
- elementProps.type = restProps.type || "button";
2836
- if (isFilter) {
2837
- elementProps["aria-pressed"] = active;
2838
- }
2839
- }
2840
- const iconSize = isFilter ? 16 : size === "sm" ? 12 : size === "lg" ? 16 : 14;
2841
- return /* @__PURE__ */ jsxs19(Component, { ...elementProps, children: [
2842
- (showIcon || isIconOnly) && /* @__PURE__ */ jsx26(
2843
- StnIcon,
2844
- {
2845
- name: iconName,
2846
- size: iconSize,
2847
- className: "stn-severity-badge__icon",
2848
- color: "none",
2849
- "aria-hidden": "true"
2850
- }
2851
- ),
2852
- !isIconOnly && /* @__PURE__ */ jsx26("span", { className: "stn-severity-badge__label", children: displayLabel })
2853
- ] });
2854
- }
2855
- );
2856
- StnSeverityBadge.displayName = "StnSeverityBadge";
2857
- var ALL_SEVERITIES = ["critical", "major", "minor", "warning"];
2858
- var StnSeverityFilter = ({
2859
- value = ALL_SEVERITIES,
2860
- onChange,
2861
- disabledSeverities = [],
2862
- showIcon = true,
2863
- className = ""
2864
- }) => {
2865
- const handleToggle = (sev) => {
2866
- if (!onChange) return;
2867
- const exists = value.includes(sev);
2868
- const next = exists ? value.filter((item) => item !== sev) : [...value, sev];
2869
- onChange(next);
2870
- };
2871
- return /* @__PURE__ */ jsx26("div", { className: `stn-severity-filter-group ${className}`.trim(), role: "group", "aria-label": "\uC2EC\uAC01\uB3C4 \uD544\uD130", children: ALL_SEVERITIES.map((sev) => {
2872
- const isActive = value.includes(sev);
2873
- const isDisabled = disabledSeverities.includes(sev);
2874
- return /* @__PURE__ */ jsx26(
2875
- StnSeverityBadge,
2876
- {
2877
- severity: sev,
2878
- variant: "filter",
2879
- showIcon,
2880
- active: isActive,
2881
- disabled: isDisabled,
2882
- onClick: () => !isDisabled && handleToggle(sev)
2883
- },
2884
- sev
2885
- );
2886
- }) });
2887
- };
2888
- StnSeverityFilter.displayName = "StnSeverityFilter";
2889
-
2890
- // src/components/StnSystemChip.tsx
2891
- import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
2892
- var DEFAULT_TONE_LABELS = {
2893
- cr: "CR",
2894
- mj: "MJ",
2895
- mn: "MN",
2896
- wr: "WR",
2897
- critical: "CR",
2898
- major: "MJ",
2899
- minor: "MN",
2900
- warning: "WR",
2901
- info: "Info",
2902
- success: "Success",
2903
- teal: "WR"
2904
- };
2905
- var TONE_PRIORITY = ["cr", "critical", "mj", "major", "mn", "minor", "wr", "warning", "teal"];
2906
- function canonicalTone(tone) {
2907
- const raw = tone ? tone.toLowerCase() : "info";
2908
- if (raw === "critical") return "cr";
2909
- if (raw === "major") return "mj";
2910
- if (raw === "minor") return "mn";
2911
- if (raw === "warning" || raw === "teal") return "wr";
2912
- return raw;
2913
- }
2914
- function pickPrimaryIndex(items) {
2915
- for (const tone of TONE_PRIORITY) {
2916
- const index = items.findIndex((item) => {
2917
- const t = canonicalTone(item.tone);
2918
- const value = Number(item.value ?? item.count ?? 0);
2919
- return t === tone && Number.isFinite(value) && value > 0;
2920
- });
2921
- if (index >= 0) return index;
2922
- }
2923
- return 0;
2924
- }
2925
- function StnSystemChip({
2926
- items,
2927
- showLabel = false,
2928
- border = true,
2929
- bordered = true,
2930
- textPosition = "right",
2931
- compact,
2932
- className,
2933
- ...rest
2934
- }) {
2935
- const primaryIndex = pickPrimaryIndex(items);
2936
- const hasBorder = border !== false && bordered !== false;
2937
- return /* @__PURE__ */ jsx27(
2938
- "div",
2939
- {
2940
- className: cn(
2941
- "stn-system-chip",
2942
- !hasBorder && "no-border stn-system-chip--no-border",
2943
- textPosition === "left" && "stn-system-chip--text-left",
2944
- showLabel && "stn-system-chip--labeled",
2945
- compact === true && "compact",
2946
- className
2947
- ),
2948
- role: "group",
2949
- "aria-label": "System status chip",
2950
- ...compact === void 0 ? {} : { "data-compact": compact ? "true" : "false" },
2951
- ...rest,
2952
- children: items.map((item, index) => {
2953
- const tone = canonicalTone(item.tone);
2954
- const isNamedTone = [
2955
- "cr",
2956
- "mj",
2957
- "mn",
2958
- "wr",
2959
- "info",
2960
- "success",
2961
- "purple",
2962
- "neutral"
2963
- ].includes(tone);
2964
- const dotStyle = item.dotColor ? { backgroundColor: item.dotColor } : !isNamedTone && item.tone ? { backgroundColor: item.tone } : void 0;
2965
- const displayValue = item.value ?? item.count ?? 0;
2966
- const displayLabel = item.label ?? (showLabel ? DEFAULT_TONE_LABELS[tone] || item.tone && DEFAULT_TONE_LABELS[item.tone] : void 0);
2967
- return /* @__PURE__ */ jsxs20(
2968
- "div",
2969
- {
2970
- className: cn(
2971
- "stn-system-chip__item",
2972
- index === primaryIndex && "stn-system-chip__item--primary"
2973
- ),
2974
- children: [
2975
- /* @__PURE__ */ jsx27(
2976
- "span",
2977
- {
2978
- className: cn(
2979
- "stn-system-chip__dot",
2980
- isNamedTone && `stn-system-chip__dot--${tone}`
2981
- ),
2982
- style: dotStyle,
2983
- "aria-hidden": "true"
2984
- }
2985
- ),
2986
- displayLabel ? /* @__PURE__ */ jsx27("span", { className: "stn-system-chip__label", children: displayLabel }) : null,
2987
- /* @__PURE__ */ jsx27("span", { className: "stn-system-chip__count", children: displayValue })
2988
- ]
2989
- },
2990
- item.id
2991
- );
2992
- })
2993
- }
2994
- );
2995
- }
2996
-
2997
3312
  // src/components/StnToggleButton.tsx
2998
3313
  import {
2999
- forwardRef as forwardRef19,
3000
- useState as useState6
3314
+ forwardRef as forwardRef20,
3315
+ useState as useState8
3001
3316
  } from "react";
3002
- import { Fragment as Fragment2, jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
3003
- var StnToggleButton = forwardRef19(
3317
+ import { Fragment as Fragment3, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
3318
+ var StnToggleButton = forwardRef20(
3004
3319
  function StnToggleButton2({
3005
3320
  pressed: pressedProp,
3006
3321
  defaultPressed = false,
@@ -3022,7 +3337,7 @@ var StnToggleButton = forwardRef19(
3022
3337
  ...rest
3023
3338
  }, ref) {
3024
3339
  const isControlled = pressedProp !== void 0;
3025
- const [internalPressed, setInternalPressed] = useState6(defaultPressed);
3340
+ const [internalPressed, setInternalPressed] = useState8(defaultPressed);
3026
3341
  const isPressed = isControlled ? Boolean(pressedProp) : internalPressed;
3027
3342
  const hasGradient = gradient && gradient !== "none";
3028
3343
  const isKnownTone = [
@@ -3086,10 +3401,10 @@ var StnToggleButton = forwardRef19(
3086
3401
  style: combinedStyle,
3087
3402
  onClick: handleClick,
3088
3403
  ...rest,
3089
- children: iconPosition === "right" ? /* @__PURE__ */ jsxs21(Fragment2, { children: [
3404
+ children: iconPosition === "right" ? /* @__PURE__ */ jsxs22(Fragment3, { children: [
3090
3405
  children,
3091
3406
  renderedIcon
3092
- ] }) : /* @__PURE__ */ jsxs21(Fragment2, { children: [
3407
+ ] }) : /* @__PURE__ */ jsxs22(Fragment3, { children: [
3093
3408
  renderedIcon,
3094
3409
  children
3095
3410
  ] })
@@ -3099,9 +3414,9 @@ var StnToggleButton = forwardRef19(
3099
3414
  );
3100
3415
 
3101
3416
  // src/components/StnSwitch.tsx
3102
- import { forwardRef as forwardRef20, useId as useId5 } from "react";
3103
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
3104
- var StnSwitch = forwardRef20(function StnSwitch2({
3417
+ import { forwardRef as forwardRef21, useId as useId5 } from "react";
3418
+ import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
3419
+ var StnSwitch = forwardRef21(function StnSwitch2({
3105
3420
  label,
3106
3421
  size = "md",
3107
3422
  color,
@@ -3153,7 +3468,7 @@ var StnSwitch = forwardRef20(function StnSwitch2({
3153
3468
  "--stn-switch-track-checked": color
3154
3469
  } : void 0;
3155
3470
  const sizeClass5 = size !== "md" ? size : "";
3156
- return /* @__PURE__ */ jsxs22(
3471
+ return /* @__PURE__ */ jsxs23(
3157
3472
  "label",
3158
3473
  {
3159
3474
  className: cn(
@@ -3182,7 +3497,7 @@ var StnSwitch = forwardRef20(function StnSwitch2({
3182
3497
  }
3183
3498
  ),
3184
3499
  /* @__PURE__ */ jsx29("span", { className: "stn-switch__control", "aria-hidden": "true", children: /* @__PURE__ */ jsx29("span", { className: "stn-switch__thumb" }) }),
3185
- label != null && label !== "" ? /* @__PURE__ */ jsxs22("span", { className: "stn-switch__label", children: [
3500
+ label != null && label !== "" ? /* @__PURE__ */ jsxs23("span", { className: "stn-switch__label", children: [
3186
3501
  label,
3187
3502
  required && /* @__PURE__ */ jsx29("span", { className: "stn-switch__required", "aria-hidden": "true", children: "*" })
3188
3503
  ] }) : null
@@ -3192,9 +3507,9 @@ var StnSwitch = forwardRef20(function StnSwitch2({
3192
3507
  });
3193
3508
 
3194
3509
  // src/components/StnRadio.tsx
3195
- import { forwardRef as forwardRef21, useId as useId6 } from "react";
3196
- import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
3197
- var StnRadio = forwardRef21(function StnRadio2({
3510
+ import { forwardRef as forwardRef22, useId as useId6 } from "react";
3511
+ import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
3512
+ var StnRadio = forwardRef22(function StnRadio2({
3198
3513
  label,
3199
3514
  size = "md",
3200
3515
  color,
@@ -3225,7 +3540,7 @@ var StnRadio = forwardRef21(function StnRadio2({
3225
3540
  "--stn-radio-dot": color,
3226
3541
  "--stn-radio-checked-border": color
3227
3542
  } : void 0;
3228
- return /* @__PURE__ */ jsxs23(
3543
+ return /* @__PURE__ */ jsxs24(
3229
3544
  "span",
3230
3545
  {
3231
3546
  className: cn(
@@ -3241,7 +3556,7 @@ var StnRadio = forwardRef21(function StnRadio2({
3241
3556
  style: inlineStyle,
3242
3557
  children: [
3243
3558
  /* @__PURE__ */ jsx30("input", { ref, type: "radio", id, disabled, required, ...rest }),
3244
- /* @__PURE__ */ jsxs23("label", { htmlFor: id, "aria-hidden": isControlOnly ? true : void 0, children: [
3559
+ /* @__PURE__ */ jsxs24("label", { htmlFor: id, "aria-hidden": isControlOnly ? true : void 0, children: [
3245
3560
  label,
3246
3561
  required && !isControlOnly && /* @__PURE__ */ jsx30("span", { className: "stn-radio__required", "aria-hidden": "true", children: "*" })
3247
3562
  ] })
@@ -3303,7 +3618,7 @@ function StnRadioGroup({
3303
3618
 
3304
3619
  // src/components/StnSegmented.tsx
3305
3620
  import { useId as useId8 } from "react";
3306
- import { jsx as jsx32, jsxs as jsxs24 } from "react/jsx-runtime";
3621
+ import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
3307
3622
  function renderSegmentedIcon(icon, size) {
3308
3623
  if (!icon) return null;
3309
3624
  if (typeof icon === "string") {
@@ -3318,6 +3633,8 @@ function StnSegmented(props) {
3318
3633
  size = "md",
3319
3634
  orientation = "horizontal",
3320
3635
  vertical = false,
3636
+ fullWidth = false,
3637
+ width,
3321
3638
  block = false,
3322
3639
  disabled = false,
3323
3640
  color,
@@ -3329,6 +3646,7 @@ function StnSegmented(props) {
3329
3646
  const name = nameProp ?? `stn-segmented-${autoName}`;
3330
3647
  const multiple = props.multiple === true;
3331
3648
  const isVertical = vertical || orientation === "vertical";
3649
+ const isFull = Boolean(fullWidth || width === "full" || block);
3332
3650
  function isSelected(optionValue) {
3333
3651
  if (multiple) return props.value.includes(optionValue);
3334
3652
  return props.value === optionValue;
@@ -3349,7 +3667,7 @@ function StnSegmented(props) {
3349
3667
  "stn-segmented",
3350
3668
  isVertical && "vertical",
3351
3669
  size !== "md" && size,
3352
- block && "block",
3670
+ isFull && "full block",
3353
3671
  multiple && "stn-segmented--multiple",
3354
3672
  color,
3355
3673
  className
@@ -3362,7 +3680,7 @@ function StnSegmented(props) {
3362
3680
  const itemDisabled = disabled || opt.disabled;
3363
3681
  const isIconOnly = Boolean(opt.icon && !opt.label);
3364
3682
  const ariaLabelText = opt["aria-label"] || (isIconOnly && typeof opt.value === "string" ? opt.value : void 0);
3365
- return /* @__PURE__ */ jsxs24(
3683
+ return /* @__PURE__ */ jsxs25(
3366
3684
  "button",
3367
3685
  {
3368
3686
  id: opt.id,
@@ -3399,38 +3717,9 @@ import {
3399
3717
  useEffect as useEffect7,
3400
3718
  useId as useId9,
3401
3719
  useRef as useRef5,
3402
- useState as useState7
3720
+ useState as useState9
3403
3721
  } from "react";
3404
-
3405
- // src/inputWidth.ts
3406
- import {
3407
- resolveStnInputWidth
3408
- } from "@stn-uiux/pub-ui/data/stnInputWidth";
3409
- function resolveInputWidthProps(_prefix, fullWidth, width) {
3410
- const resolved = resolveStnInputWidth(fullWidth, width);
3411
- if (resolved.kind === "full") {
3412
- return {
3413
- className: "full",
3414
- style: void 0
3415
- };
3416
- }
3417
- if (resolved.kind === "preset" && resolved.preset != null) {
3418
- return {
3419
- className: `w${resolved.preset}`,
3420
- style: void 0
3421
- };
3422
- }
3423
- if (resolved.kind === "custom" && resolved.styleWidth != null) {
3424
- return {
3425
- className: "",
3426
- style: { width: resolved.styleWidth }
3427
- };
3428
- }
3429
- return { className: "", style: void 0 };
3430
- }
3431
-
3432
- // src/components/StnDropdown.tsx
3433
- import { jsx as jsx33, jsxs as jsxs25 } from "react/jsx-runtime";
3722
+ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
3434
3723
  function resolveGlyph(node) {
3435
3724
  if (typeof node === "string") return /* @__PURE__ */ jsx33(StnIcon, { name: node, size: 16, color: "currentColor" });
3436
3725
  return node;
@@ -3459,7 +3748,7 @@ function variantClass(variant = "outline") {
3459
3748
  return "outline";
3460
3749
  }
3461
3750
  function useControllable(controlled, defaultValue, onChange) {
3462
- const [internal, setInternal] = useState7(defaultValue);
3751
+ const [internal, setInternal] = useState9(defaultValue);
3463
3752
  const value = controlled ?? internal;
3464
3753
  const setValue = useCallback5(
3465
3754
  (next) => {
@@ -3501,7 +3790,7 @@ function StnDropdown({
3501
3790
  const autoId = useId9();
3502
3791
  const rootId = idProp ?? `stn-dropdown-${autoId.replace(/:/g, "")}`;
3503
3792
  const [value, setValue] = useControllable(valueProp, defaultValue, onChange);
3504
- const [open, setOpen] = useState7(false);
3793
+ const [open, setOpen] = useState9(false);
3505
3794
  const rootRef = useRef5(null);
3506
3795
  const selected = options.find((o) => o.value === value);
3507
3796
  const hasValue = selected !== void 0 && value !== "";
@@ -3573,7 +3862,7 @@ function StnDropdown({
3573
3862
  setValue(enabledOptions[nextIndex].value);
3574
3863
  }
3575
3864
  };
3576
- const dropdownNode = /* @__PURE__ */ jsxs25(
3865
+ const dropdownNode = /* @__PURE__ */ jsxs26(
3577
3866
  "div",
3578
3867
  {
3579
3868
  ref: rootRef,
@@ -3624,13 +3913,13 @@ function StnDropdown({
3624
3913
  const hasWrap = hasLabel || hasHelper;
3625
3914
  if (!hasWrap) return dropdownNode;
3626
3915
  const resolvedLabelIcon = labelIcon ?? icon;
3627
- const labelElement = hasLabel ? /* @__PURE__ */ jsxs25("label", { htmlFor: rootId, className: "stn-dropdown__label", children: [
3916
+ const labelElement = hasLabel ? /* @__PURE__ */ jsxs26("label", { htmlFor: rootId, className: "stn-dropdown__label", children: [
3628
3917
  resolvedLabelIcon ? /* @__PURE__ */ jsx33("span", { className: "stn-dropdown__label-icon", "aria-hidden": "true", children: resolveGlyph(resolvedLabelIcon) }) : null,
3629
3918
  /* @__PURE__ */ jsx33("span", { className: "stn-dropdown__label-text", children: label }),
3630
3919
  required && /* @__PURE__ */ jsx33("span", { className: "stn-dropdown__required", "aria-hidden": "true", children: "*" })
3631
3920
  ] }) : null;
3632
3921
  const isRow = labelPosition === "left" || labelPosition === "right";
3633
- return /* @__PURE__ */ jsxs25(
3922
+ return /* @__PURE__ */ jsxs26(
3634
3923
  "div",
3635
3924
  {
3636
3925
  className: cn(
@@ -3648,7 +3937,7 @@ function StnDropdown({
3648
3937
  ...divRest,
3649
3938
  children: [
3650
3939
  hasLabel && (labelPosition === "left" || labelPosition === "top") ? labelElement : null,
3651
- /* @__PURE__ */ jsxs25("div", { className: "stn-dropdown-wrap__body", children: [
3940
+ /* @__PURE__ */ jsxs26("div", { className: "stn-dropdown-wrap__body", children: [
3652
3941
  dropdownNode,
3653
3942
  hasHelper && /* @__PURE__ */ jsx33(
3654
3943
  "span",
@@ -3682,8 +3971,8 @@ function StnDropdownMenu({
3682
3971
  }
3683
3972
 
3684
3973
  // src/components/StnTextField.tsx
3685
- import { forwardRef as forwardRef22, useId as useId10 } from "react";
3686
- import { jsx as jsx35, jsxs as jsxs26 } from "react/jsx-runtime";
3974
+ import { forwardRef as forwardRef23, useId as useId10 } from "react";
3975
+ import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
3687
3976
  function normalizeSize(size) {
3688
3977
  if (!size) return "M";
3689
3978
  const u = String(size).toUpperCase();
@@ -3713,7 +4002,7 @@ function resolveGlyph2(node) {
3713
4002
  if (typeof node === "string") return /* @__PURE__ */ jsx35(StnIcon, { name: node, size: 16, color: "currentColor" });
3714
4003
  return node;
3715
4004
  }
3716
- var StnTextField = forwardRef22(function StnTextField2({
4005
+ var StnTextField = forwardRef23(function StnTextField2({
3717
4006
  size = "M",
3718
4007
  variant = "outlined",
3719
4008
  color,
@@ -3755,8 +4044,8 @@ var StnTextField = forwardRef22(function StnTextField2({
3755
4044
  sizeClass2(size),
3756
4045
  colorClass(color),
3757
4046
  !hasWrap && widthProps.className,
3758
- invalid && "stn-text-field--invalid",
3759
- hasSlot && "stn-text-field--with-icon",
4047
+ invalid && "invalid",
4048
+ hasSlot && "with-icon",
3760
4049
  className
3761
4050
  );
3762
4051
  const input = /* @__PURE__ */ jsx35(
@@ -3774,19 +4063,19 @@ var StnTextField = forwardRef22(function StnTextField2({
3774
4063
  ...rest
3775
4064
  }
3776
4065
  );
3777
- const field = hasSlot ? /* @__PURE__ */ jsxs26("div", { className: fieldClass, style: hasWrap ? void 0 : widthProps.style, children: [
4066
+ const field = hasSlot ? /* @__PURE__ */ jsxs27("div", { className: fieldClass, style: hasWrap ? void 0 : widthProps.style, children: [
3778
4067
  hasLeft ? /* @__PURE__ */ jsx35("span", { className: "stn-text-field__icon-left", "aria-hidden": true, children: /* @__PURE__ */ jsx35("span", { className: "stn-text-field__icon-box", children: resolveGlyph2(leftNode) }) }) : null,
3779
4068
  input,
3780
4069
  hasRight ? /* @__PURE__ */ jsx35("span", { className: "stn-text-field__icon-right", "aria-hidden": true, children: /* @__PURE__ */ jsx35("span", { className: "stn-text-field__icon-box", children: resolveGlyph2(rightNode) }) }) : null
3781
4070
  ] }) : input;
3782
4071
  if (!hasWrap) return field;
3783
- const labelElement = hasLabel ? /* @__PURE__ */ jsxs26("label", { htmlFor: id, className: "stn-text-field__label", children: [
4072
+ const labelElement = hasLabel ? /* @__PURE__ */ jsxs27("label", { htmlFor: id, className: "stn-text-field__label", children: [
3784
4073
  labelIcon ? /* @__PURE__ */ jsx35("span", { className: "stn-text-field__label-icon", "aria-hidden": "true", children: resolveGlyph2(labelIcon) }) : null,
3785
4074
  /* @__PURE__ */ jsx35("span", { className: "stn-text-field__label-text", children: label }),
3786
4075
  required && /* @__PURE__ */ jsx35("span", { className: "stn-text-field__required", "aria-hidden": "true", children: "*" })
3787
4076
  ] }) : null;
3788
4077
  const isRow = labelPosition === "left" || labelPosition === "right";
3789
- return /* @__PURE__ */ jsxs26(
4078
+ return /* @__PURE__ */ jsxs27(
3790
4079
  "div",
3791
4080
  {
3792
4081
  className: cn(
@@ -3800,7 +4089,7 @@ var StnTextField = forwardRef22(function StnTextField2({
3800
4089
  style: widthProps.style,
3801
4090
  children: [
3802
4091
  hasLabel && (labelPosition === "left" || labelPosition === "top") ? labelElement : null,
3803
- /* @__PURE__ */ jsxs26("div", { className: "stn-text-field-wrap__body", children: [
4092
+ /* @__PURE__ */ jsxs27("div", { className: "stn-text-field-wrap__body", children: [
3804
4093
  field,
3805
4094
  hasHelper && /* @__PURE__ */ jsx35(
3806
4095
  "p",
@@ -3818,11 +4107,11 @@ var StnTextField = forwardRef22(function StnTextField2({
3818
4107
  });
3819
4108
 
3820
4109
  // src/components/StnDateRangeField.tsx
3821
- import { forwardRef as forwardRef23, useId as useId11 } from "react";
4110
+ import { forwardRef as forwardRef24, useId as useId11 } from "react";
3822
4111
  import {
3823
4112
  formatStnDateRangeFieldValue
3824
4113
  } from "@stn-uiux/pub-ui/data/stnDateRangeField";
3825
- import { jsx as jsx36, jsxs as jsxs27 } from "react/jsx-runtime";
4114
+ import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
3826
4115
  function resolveGlyph3(node) {
3827
4116
  if (typeof node === "string") return /* @__PURE__ */ jsx36(StnIcon, { name: node, size: 16, color: "currentColor" });
3828
4117
  return node;
@@ -3848,7 +4137,7 @@ function resolveValue(value, format) {
3848
4137
  const trimmed = value.trim();
3849
4138
  return trimmed || null;
3850
4139
  }
3851
- var StnDateRangeField = forwardRef23(function StnDateRangeField2({
4140
+ var StnDateRangeField = forwardRef24(function StnDateRangeField2({
3852
4141
  size = "md",
3853
4142
  variant = "outline",
3854
4143
  start,
@@ -3902,8 +4191,8 @@ var StnDateRangeField = forwardRef23(function StnDateRangeField2({
3902
4191
  ),
3903
4192
  style: !hasWrap ? widthProps.style ?? style : void 0,
3904
4193
  ...rest,
3905
- children: /* @__PURE__ */ jsxs27("span", { className: "stn-date-range-field__inner", children: [
3906
- /* @__PURE__ */ jsxs27("span", { className: "stn-date-range-field__text", children: [
4194
+ children: /* @__PURE__ */ jsxs28("span", { className: "stn-date-range-field__inner", children: [
4195
+ /* @__PURE__ */ jsxs28("span", { className: "stn-date-range-field__text", children: [
3907
4196
  /* @__PURE__ */ jsx36("span", { className: cn("stn-date-range-field__value", !startText && "is-placeholder"), children: startText ?? startPlaceholder }),
3908
4197
  /* @__PURE__ */ jsx36("span", { className: "stn-date-range-field__sep", "aria-hidden": "true", children: "~" }),
3909
4198
  /* @__PURE__ */ jsx36("span", { className: cn("stn-date-range-field__value", !endText && "is-placeholder"), children: endText ?? endPlaceholder })
@@ -3914,13 +4203,13 @@ var StnDateRangeField = forwardRef23(function StnDateRangeField2({
3914
4203
  );
3915
4204
  if (!hasWrap) return buttonNode;
3916
4205
  const resolvedLabelIcon = labelIcon ?? icon;
3917
- const labelElement = hasLabel ? /* @__PURE__ */ jsxs27("label", { htmlFor: rootId, className: "stn-date-range-field__label", children: [
4206
+ const labelElement = hasLabel ? /* @__PURE__ */ jsxs28("label", { htmlFor: rootId, className: "stn-date-range-field__label", children: [
3918
4207
  resolvedLabelIcon ? /* @__PURE__ */ jsx36("span", { className: "stn-date-range-field__label-icon", "aria-hidden": "true", children: resolveGlyph3(resolvedLabelIcon) }) : null,
3919
4208
  /* @__PURE__ */ jsx36("span", { className: "stn-date-range-field__label-text", children: label }),
3920
4209
  required && /* @__PURE__ */ jsx36("span", { className: "stn-date-range-field__required", "aria-hidden": "true", children: "*" })
3921
4210
  ] }) : null;
3922
4211
  const isRow = labelPosition === "left" || labelPosition === "right";
3923
- return /* @__PURE__ */ jsxs27(
4212
+ return /* @__PURE__ */ jsxs28(
3924
4213
  "div",
3925
4214
  {
3926
4215
  className: cn(
@@ -3936,7 +4225,7 @@ var StnDateRangeField = forwardRef23(function StnDateRangeField2({
3936
4225
  style: widthProps.style ?? style,
3937
4226
  children: [
3938
4227
  hasLabel && (labelPosition === "left" || labelPosition === "top") ? labelElement : null,
3939
- /* @__PURE__ */ jsxs27("div", { className: "stn-date-range-field-wrap__body", children: [
4228
+ /* @__PURE__ */ jsxs28("div", { className: "stn-date-range-field-wrap__body", children: [
3940
4229
  buttonNode,
3941
4230
  hasHelper && /* @__PURE__ */ jsx36(
3942
4231
  "span",
@@ -3957,8 +4246,13 @@ var StnDateRangeField = forwardRef23(function StnDateRangeField2({
3957
4246
  });
3958
4247
 
3959
4248
  // src/components/StnLabelPrefix.tsx
3960
- import { useId as useId12 } from "react";
3961
- import { jsx as jsx37, jsxs as jsxs28 } from "react/jsx-runtime";
4249
+ import {
4250
+ useId as useId12,
4251
+ useState as useState10,
4252
+ isValidElement as isValidElement4,
4253
+ cloneElement as cloneElement4
4254
+ } from "react";
4255
+ import { jsx as jsx37, jsxs as jsxs29 } from "react/jsx-runtime";
3962
4256
  function sizeClass4(size) {
3963
4257
  return size;
3964
4258
  }
@@ -3968,6 +4262,14 @@ function variantClass4(variant) {
3968
4262
  function StnLabelPrefix({
3969
4263
  label,
3970
4264
  labelIcon,
4265
+ checkbox = false,
4266
+ checked,
4267
+ defaultChecked,
4268
+ onCheckboxChange,
4269
+ checkboxDisabled = false,
4270
+ checkboxSize,
4271
+ disableControlWhenUnchecked = false,
4272
+ checkboxSlot,
3971
4273
  labelPosition = "prefix",
3972
4274
  required = false,
3973
4275
  size = "md",
@@ -3990,6 +4292,15 @@ function StnLabelPrefix({
3990
4292
  const isError = error || invalid || color === "error";
3991
4293
  const hasHelper = helperText != null && helperText !== "";
3992
4294
  const helperId = hasHelper ? `${id}-helper` : void 0;
4295
+ const [internalChecked, setInternalChecked] = useState10(defaultChecked ?? false);
4296
+ const isChecked = checked !== void 0 ? checked : internalChecked;
4297
+ const handleCheckboxChange = (nextChecked) => {
4298
+ if (checked === void 0) {
4299
+ setInternalChecked(nextChecked);
4300
+ }
4301
+ onCheckboxChange?.(nextChecked);
4302
+ };
4303
+ const isControlDisabled = disabled || disableControlWhenUnchecked && !isChecked;
3993
4304
  const widthProps = resolveInputWidthProps("stn-label-prefix", fullWidth, width);
3994
4305
  const rootClass = cn(
3995
4306
  "stn-label-prefix",
@@ -4000,18 +4311,39 @@ function StnLabelPrefix({
4000
4311
  radius && `radius-${radius}`,
4001
4312
  !hasHelper && widthProps.className,
4002
4313
  disabled && "is-disabled",
4314
+ isControlDisabled && !disabled && "is-control-disabled",
4003
4315
  isError && "is-error",
4004
4316
  !hasHelper && className
4005
4317
  );
4006
- const labelSection = /* @__PURE__ */ jsxs28("span", { className: "stn-label-prefix__label", children: [
4318
+ const defaultCheckboxSize = size === "lg" ? "md" : "sm";
4319
+ const resolvedCheckboxSize = checkboxSize ?? defaultCheckboxSize;
4320
+ const checkboxNode = checkboxSlot ?? (checkbox ? /* @__PURE__ */ jsx37("span", { className: "stn-label-prefix__checkbox", children: /* @__PURE__ */ jsx37(
4321
+ StnCheckbox,
4322
+ {
4323
+ size: resolvedCheckboxSize,
4324
+ controlOnly: true,
4325
+ checked: isChecked,
4326
+ disabled: disabled || checkboxDisabled,
4327
+ onChange: (e) => handleCheckboxChange(e.target.checked),
4328
+ "aria-label": typeof label === "string" ? `${label} \uC120\uD0DD` : void 0
4329
+ }
4330
+ ) }) : null);
4331
+ const labelSection = /* @__PURE__ */ jsxs29("span", { className: "stn-label-prefix__label", children: [
4332
+ checkboxNode,
4007
4333
  labelIcon != null && /* @__PURE__ */ jsx37("span", { className: "stn-label-prefix__icon", "aria-hidden": "true", children: labelIcon }),
4008
- /* @__PURE__ */ jsxs28("span", { className: "stn-label-prefix__text", children: [
4334
+ /* @__PURE__ */ jsxs29("span", { className: "stn-label-prefix__text", children: [
4009
4335
  label,
4010
4336
  required && /* @__PURE__ */ jsx37("span", { className: "stn-label-prefix__required", "aria-hidden": "true", children: "*" })
4011
4337
  ] }),
4012
4338
  /* @__PURE__ */ jsx37("span", { className: "stn-label-prefix__divider", "aria-hidden": "true" })
4013
4339
  ] });
4014
- const prefixNode = /* @__PURE__ */ jsxs28(
4340
+ let renderedControl = children;
4341
+ if (isControlDisabled && isValidElement4(children) && typeof children.type !== "string") {
4342
+ renderedControl = cloneElement4(children, {
4343
+ disabled: true
4344
+ });
4345
+ }
4346
+ const prefixNode = /* @__PURE__ */ jsxs29(
4015
4347
  "div",
4016
4348
  {
4017
4349
  id: !hasHelper ? id : void 0,
@@ -4023,14 +4355,14 @@ function StnLabelPrefix({
4023
4355
  ...!hasHelper ? rest : {},
4024
4356
  children: [
4025
4357
  labelSection,
4026
- /* @__PURE__ */ jsx37("span", { className: "stn-label-prefix__control", children })
4358
+ /* @__PURE__ */ jsx37("span", { className: "stn-label-prefix__control", children: renderedControl })
4027
4359
  ]
4028
4360
  }
4029
4361
  );
4030
4362
  if (!hasHelper) {
4031
4363
  return prefixNode;
4032
4364
  }
4033
- return /* @__PURE__ */ jsxs28(
4365
+ return /* @__PURE__ */ jsxs29(
4034
4366
  "div",
4035
4367
  {
4036
4368
  id,
@@ -4110,7 +4442,7 @@ import {
4110
4442
  } from "@stn-uiux/pub-ui/data/stnSearchRequirement";
4111
4443
 
4112
4444
  // src/patterns/search/StnSearchRequirementBar.tsx
4113
- import { jsx as jsx38, jsxs as jsxs29 } from "react/jsx-runtime";
4445
+ import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
4114
4446
  function StnSearchRequirementBar({
4115
4447
  children,
4116
4448
  className,
@@ -4143,7 +4475,7 @@ function StnSearchRequirementBarField({
4143
4475
  controlClassName,
4144
4476
  ...rest
4145
4477
  }) {
4146
- return /* @__PURE__ */ jsxs29("div", { className: cn("stn-search-requirement__field", className), "data-stn-search-requirement": "field", ...rest, children: [
4478
+ return /* @__PURE__ */ jsxs30("div", { className: cn("stn-search-requirement__field", className), "data-stn-search-requirement": "field", ...rest, children: [
4147
4479
  /* @__PURE__ */ jsx38("span", { className: cn("stn-search-requirement__label", labelClassName), children: label }),
4148
4480
  /* @__PURE__ */ jsx38("div", { className: cn("stn-search-requirement__control", controlClassName), children })
4149
4481
  ] });
@@ -4151,6 +4483,7 @@ function StnSearchRequirementBarField({
4151
4483
  function StnSearchRequirementBarSearchButton({
4152
4484
  children = "\uAC80\uC0C9",
4153
4485
  size = "md",
4486
+ variant = "outlined",
4154
4487
  icon = /* @__PURE__ */ jsx38(StnIcon, { name: "line/search", size: 16, color: "currentColor" }),
4155
4488
  className,
4156
4489
  ...rest
@@ -4159,7 +4492,7 @@ function StnSearchRequirementBarSearchButton({
4159
4492
  StnButton,
4160
4493
  {
4161
4494
  size,
4162
- variant: "contained",
4495
+ variant,
4163
4496
  icon,
4164
4497
  className,
4165
4498
  "data-stn-search-requirement": "search",
@@ -4217,13 +4550,13 @@ import {
4217
4550
  useEffect as useEffect9,
4218
4551
  useLayoutEffect,
4219
4552
  useRef as useRef6,
4220
- useState as useState9
4553
+ useState as useState12
4221
4554
  } from "react";
4222
4555
  import { createPortal as createPortal2 } from "react-dom";
4223
4556
  import { formatStnDateRangeFieldValue as formatStnDateRangeFieldValue2 } from "@stn-uiux/pub-ui/data/stnDateRangeField";
4224
4557
 
4225
4558
  // src/components/datePicker/StnDateRangePicker.tsx
4226
- import { useCallback as useCallback6, useEffect as useEffect8, useId as useId13, useMemo as useMemo3, useState as useState8 } from "react";
4559
+ import { useCallback as useCallback6, useEffect as useEffect8, useId as useId13, useMemo as useMemo3, useState as useState11 } from "react";
4227
4560
  import {
4228
4561
  STN_DATE_PICKER_WEEKDAYS
4229
4562
  } from "@stn-uiux/pub-ui/data/stnDatePicker";
@@ -4283,9 +4616,9 @@ function normalizeRange(start, end) {
4283
4616
  }
4284
4617
 
4285
4618
  // src/components/datePicker/StnDateRangePicker.tsx
4286
- import { jsx as jsx39, jsxs as jsxs30 } from "react/jsx-runtime";
4619
+ import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
4287
4620
  function useDraftRange(value, open) {
4288
- const [draft, setDraft] = useState8(value);
4621
+ const [draft, setDraft] = useState11(value);
4289
4622
  useEffect8(() => {
4290
4623
  if (open) setDraft(value);
4291
4624
  }, [open, value]);
@@ -4294,13 +4627,13 @@ function useDraftRange(value, open) {
4294
4627
  function CalendarPanel({ month, range, onPick, onPrev, onNext, showPrev = true, showNext = true }) {
4295
4628
  const days = useMemo3(() => buildMonthGrid(month), [month]);
4296
4629
  const { start, end } = range;
4297
- return /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-panel", children: [
4298
- /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-panel__header", children: [
4630
+ return /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-panel", children: [
4631
+ /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-panel__header", children: [
4299
4632
  showPrev ? /* @__PURE__ */ jsx39("button", { type: "button", className: "stn-date-picker-panel__nav", onClick: onPrev, "aria-label": "Previous month", children: "\u2039" }) : /* @__PURE__ */ jsx39("span", { className: "stn-date-picker-panel__nav", "aria-hidden": "true" }),
4300
4633
  /* @__PURE__ */ jsx39("p", { className: "stn-date-picker-panel__title", children: formatMonthTitle(month) }),
4301
4634
  showNext ? /* @__PURE__ */ jsx39("button", { type: "button", className: "stn-date-picker-panel__nav", onClick: onNext, "aria-label": "Next month", children: "\u203A" }) : /* @__PURE__ */ jsx39("span", { className: "stn-date-picker-panel__nav", "aria-hidden": "true" })
4302
4635
  ] }),
4303
- /* @__PURE__ */ jsxs30("table", { className: "stn-date-picker-content", children: [
4636
+ /* @__PURE__ */ jsxs31("table", { className: "stn-date-picker-content", children: [
4304
4637
  /* @__PURE__ */ jsx39("thead", { children: /* @__PURE__ */ jsx39("tr", { children: STN_DATE_PICKER_WEEKDAYS.map((label) => /* @__PURE__ */ jsx39("th", { scope: "col", children: label }, label)) }) }),
4305
4638
  /* @__PURE__ */ jsx39("tbody", { children: Array.from({ length: 6 }, (_, row) => /* @__PURE__ */ jsx39("tr", { children: days.slice(row * 7, row * 7 + 7).map((cell) => {
4306
4639
  const inRange = start && end && isBetweenDays(cell.date, start, end);
@@ -4338,9 +4671,9 @@ function TimeColumns({ label, value, onChange }) {
4338
4671
  const seconds = value?.getSeconds() ?? 0;
4339
4672
  const base = value ?? /* @__PURE__ */ new Date();
4340
4673
  const patch = (h, m, s) => onChange(setTimePart(base, h, m, s));
4341
- return /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-time__side", children: [
4674
+ return /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-time__side", children: [
4342
4675
  /* @__PURE__ */ jsx39("span", { className: "stn-date-picker-time__label", children: label }),
4343
- /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-time__columns", children: [
4676
+ /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-time__columns", children: [
4344
4677
  /* @__PURE__ */ jsx39(
4345
4678
  StnScroll,
4346
4679
  {
@@ -4408,7 +4741,7 @@ function StnDateRangePicker({
4408
4741
  }) {
4409
4742
  const titleId = useId13();
4410
4743
  const [draft, setDraft] = useDraftRange(value, open);
4411
- const [leftMonth, setLeftMonth] = useState8(() => startOfMonth(draft.start ?? draft.end ?? /* @__PURE__ */ new Date()));
4744
+ const [leftMonth, setLeftMonth] = useState11(() => startOfMonth(draft.start ?? draft.end ?? /* @__PURE__ */ new Date()));
4412
4745
  useEffect8(() => {
4413
4746
  if (!open) return;
4414
4747
  const anchor = draft.start ?? draft.end ?? /* @__PURE__ */ new Date();
@@ -4468,9 +4801,9 @@ function StnDateRangePicker({
4468
4801
  role: "dialog",
4469
4802
  "aria-modal": "false",
4470
4803
  "aria-labelledby": titleId,
4471
- children: /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-dropdown__body", children: [
4804
+ children: /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-dropdown__body", children: [
4472
4805
  /* @__PURE__ */ jsx39("span", { id: titleId, className: "stn-sf__visually-hidden", children: "Date range picker" }),
4473
- /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-dropdown__panels", children: [
4806
+ /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-dropdown__panels", children: [
4474
4807
  /* @__PURE__ */ jsx39(
4475
4808
  CalendarPanel,
4476
4809
  {
@@ -4494,7 +4827,7 @@ function StnDateRangePicker({
4494
4827
  }
4495
4828
  )
4496
4829
  ] }),
4497
- showTime ? /* @__PURE__ */ jsxs30("div", { className: "stn-date-picker-time", children: [
4830
+ showTime ? /* @__PURE__ */ jsxs31("div", { className: "stn-date-picker-time", children: [
4498
4831
  /* @__PURE__ */ jsx39(
4499
4832
  TimeColumns,
4500
4833
  {
@@ -4519,9 +4852,9 @@ function StnDateRangePicker({
4519
4852
  }
4520
4853
 
4521
4854
  // src/components/datePicker/StnDateRangePickerField.tsx
4522
- import { jsx as jsx40, jsxs as jsxs31 } from "react/jsx-runtime";
4855
+ import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
4523
4856
  function useControllableRange(controlled, defaultValue, onChange) {
4524
- const [internal, setInternal] = useState9(defaultValue);
4857
+ const [internal, setInternal] = useState12(defaultValue);
4525
4858
  const value = controlled ?? internal;
4526
4859
  const setValue = useCallback7(
4527
4860
  (next) => {
@@ -4553,8 +4886,8 @@ function StnDateRangePickerField({
4553
4886
  }) {
4554
4887
  const format = formatProp ?? (showTime ? formatStnDateRangeFieldValue2 : formatDateOnly);
4555
4888
  const [value, setValue] = useControllableRange(valueProp, defaultValue, onChange);
4556
- const [open, setOpen] = useState9(false);
4557
- const [anchorRect, setAnchorRect] = useState9(null);
4889
+ const [open, setOpen] = useState12(false);
4890
+ const [anchorRect, setAnchorRect] = useState12(null);
4558
4891
  const rootRef = useRef6(null);
4559
4892
  const triggerRef = useRef6(null);
4560
4893
  const panelRef = useRef6(null);
@@ -4591,7 +4924,7 @@ function StnDateRangePickerField({
4591
4924
  document.addEventListener("keydown", onKeyDown);
4592
4925
  return () => document.removeEventListener("keydown", onKeyDown);
4593
4926
  }, [open]);
4594
- return /* @__PURE__ */ jsxs31("div", { ref: rootRef, className: cn("stn-date-picker-field", className), children: [
4927
+ return /* @__PURE__ */ jsxs32("div", { ref: rootRef, className: cn("stn-date-picker-field", className), children: [
4595
4928
  /* @__PURE__ */ jsx40(
4596
4929
  StnDateRangeField,
4597
4930
  {
@@ -4631,12 +4964,12 @@ function StnDateRangePickerField({
4631
4964
  }
4632
4965
 
4633
4966
  // src/patterns/search/StnSearchRequirementBarDemo.tsx
4634
- import { jsx as jsx41, jsxs as jsxs32 } from "react/jsx-runtime";
4967
+ import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
4635
4968
  var ALL_OPTIONS = [{ value: "", label: "\uC804\uCCB4" }];
4636
4969
  function StnSearchRequirementBarDemo({ onSearch, onExport, className }) {
4637
4970
  const demo = STN_SEARCH_REQUIREMENT_DEMO_FIELDS;
4638
- return /* @__PURE__ */ jsxs32(StnSearchRequirementBar, { className, children: [
4639
- /* @__PURE__ */ jsxs32(StnSearchRequirementBar.Fields, { children: [
4971
+ return /* @__PURE__ */ jsxs33(StnSearchRequirementBar, { className, children: [
4972
+ /* @__PURE__ */ jsxs33(StnSearchRequirementBar.Fields, { children: [
4640
4973
  /* @__PURE__ */ jsx41(
4641
4974
  StnTextField,
4642
4975
  {
@@ -4809,7 +5142,7 @@ import {
4809
5142
  STN_LAYER0_BACKGROUND_DEMO_IMAGES,
4810
5143
  STN_LAYER0_MAP_LIGHT_OVERLAY
4811
5144
  } from "@stn-uiux/pub-ui/data/stnLayer0Background";
4812
- import { jsx as jsx43, jsxs as jsxs33 } from "react/jsx-runtime";
5145
+ import { jsx as jsx43, jsxs as jsxs34 } from "react/jsx-runtime";
4813
5146
  function overlayStyle(overlay) {
4814
5147
  if (overlay == null || overlay <= 0) return void 0;
4815
5148
  const pct = `${Math.min(100, Math.max(0, overlay * 100))}%`;
@@ -4865,7 +5198,7 @@ function StnLayer0Background({
4865
5198
  "aria-hidden": alt === "" ? true : void 0,
4866
5199
  style: { ...overlayStyle(overlay), ...style },
4867
5200
  ...rest,
4868
- children: /* @__PURE__ */ jsxs33("div", { className: "stn-layer0-bg__media", children: [
5201
+ children: /* @__PURE__ */ jsxs34("div", { className: "stn-layer0-bg__media", children: [
4869
5202
  src ? /* @__PURE__ */ jsx43(
4870
5203
  "img",
4871
5204
  {
@@ -4916,9 +5249,9 @@ import {
4916
5249
  // src/components/StnWidget.tsx
4917
5250
  import {
4918
5251
  Children as Children2,
4919
- Fragment as Fragment3,
4920
- cloneElement as cloneElement4,
4921
- isValidElement as isValidElement4
5252
+ Fragment as Fragment4,
5253
+ cloneElement as cloneElement5,
5254
+ isValidElement as isValidElement5
4922
5255
  } from "react";
4923
5256
  import {
4924
5257
  normalizeStnWidgetAppearance,
@@ -4927,7 +5260,7 @@ import {
4927
5260
 
4928
5261
  // src/components/StnEventBanner.tsx
4929
5262
  import React3 from "react";
4930
- import { jsx as jsx44, jsxs as jsxs34 } from "react/jsx-runtime";
5263
+ import { jsx as jsx44, jsxs as jsxs35 } from "react/jsx-runtime";
4931
5264
  var SEVERITY_ICONS2 = {
4932
5265
  critical: "fill/alert4",
4933
5266
  major: "fill/alert3",
@@ -4935,7 +5268,7 @@ var SEVERITY_ICONS2 = {
4935
5268
  warning: "fill/alert1"
4936
5269
  };
4937
5270
  function DefaultTriangleIcon() {
4938
- return /* @__PURE__ */ jsxs34(
5271
+ return /* @__PURE__ */ jsxs35(
4939
5272
  "svg",
4940
5273
  {
4941
5274
  width: "20",
@@ -4984,7 +5317,7 @@ var StnEventBanner = React3.forwardRef(
4984
5317
  id,
4985
5318
  ...restProps
4986
5319
  }, ref) => {
4987
- return /* @__PURE__ */ jsxs34(
5320
+ return /* @__PURE__ */ jsxs35(
4988
5321
  "div",
4989
5322
  {
4990
5323
  ref,
@@ -5001,14 +5334,14 @@ var StnEventBanner = React3.forwardRef(
5001
5334
  ),
5002
5335
  ...restProps,
5003
5336
  children: [
5004
- /* @__PURE__ */ jsxs34("div", { className: "stn-event-banner__left", children: [
5337
+ /* @__PURE__ */ jsxs35("div", { className: "stn-event-banner__left", children: [
5005
5338
  /* @__PURE__ */ jsx44("div", { className: "stn-event-banner__icon-wrap", children: icon ?? resolveDefaultIcon(severity) }),
5006
- /* @__PURE__ */ jsxs34("div", { className: "stn-event-banner__text", children: [
5339
+ /* @__PURE__ */ jsxs35("div", { className: "stn-event-banner__text", children: [
5007
5340
  title && /* @__PURE__ */ jsx44("span", { className: "stn-event-banner__title", title: typeof title === "string" ? title : void 0, children: title }),
5008
5341
  time && /* @__PURE__ */ jsx44("span", { className: "stn-event-banner__time", title: typeof time === "string" ? time : void 0, children: time })
5009
5342
  ] })
5010
5343
  ] }),
5011
- /* @__PURE__ */ jsxs34("div", { className: "stn-event-banner__actions", children: [
5344
+ /* @__PURE__ */ jsxs35("div", { className: "stn-event-banner__actions", children: [
5012
5345
  actions,
5013
5346
  actionText && /* @__PURE__ */ jsx44(
5014
5347
  "button",
@@ -5038,7 +5371,7 @@ var StnEventBanner = React3.forwardRef(
5038
5371
  StnEventBanner.displayName = "StnEventBanner";
5039
5372
 
5040
5373
  // src/patterns/scaffold/StnLoadingSkeleton.tsx
5041
- import { jsx as jsx45, jsxs as jsxs35 } from "react/jsx-runtime";
5374
+ import { jsx as jsx45, jsxs as jsxs36 } from "react/jsx-runtime";
5042
5375
  function StnLoadingSkeletonLine({ width = "full", className, style, ...rest }) {
5043
5376
  return /* @__PURE__ */ jsx45(
5044
5377
  "div",
@@ -5078,7 +5411,7 @@ function StnLoadingSkeletonCircle({ size = 40, className, style, ...rest }) {
5078
5411
  );
5079
5412
  }
5080
5413
  function StnLoadingSkeletonProfile({ avatarSize = 40, className, style, ...rest }) {
5081
- return /* @__PURE__ */ jsxs35(
5414
+ return /* @__PURE__ */ jsxs36(
5082
5415
  "div",
5083
5416
  {
5084
5417
  className: cn("stn-loading-skeleton--profile", className),
@@ -5088,7 +5421,7 @@ function StnLoadingSkeletonProfile({ avatarSize = 40, className, style, ...rest
5088
5421
  ...rest,
5089
5422
  children: [
5090
5423
  /* @__PURE__ */ jsx45(StnLoadingSkeletonCircle, { size: avatarSize }),
5091
- /* @__PURE__ */ jsxs35("div", { className: "stn-loading-skeleton__profile-content", children: [
5424
+ /* @__PURE__ */ jsxs36("div", { className: "stn-loading-skeleton__profile-content", children: [
5092
5425
  /* @__PURE__ */ jsx45(StnLoadingSkeletonLine, { width: "medium" }),
5093
5426
  /* @__PURE__ */ jsx45(StnLoadingSkeletonLine, { width: "short" })
5094
5427
  ] })
@@ -5274,7 +5607,7 @@ function ringOrbitRadius(orbit, ringCount, baseRadius, gap = 36) {
5274
5607
  }
5275
5608
 
5276
5609
  // src/components/topology/StnTopologyNodeMark.tsx
5277
- import { jsx as jsx46, jsxs as jsxs36 } from "react/jsx-runtime";
5610
+ import { jsx as jsx46, jsxs as jsxs37 } from "react/jsx-runtime";
5278
5611
  function renderTopologyIcon(icon, color, px) {
5279
5612
  if (!icon) return null;
5280
5613
  if (typeof icon !== "string") return icon;
@@ -5290,7 +5623,7 @@ function renderTopologyIcon(icon, color, px) {
5290
5623
  };
5291
5624
  switch (icon) {
5292
5625
  case "server":
5293
- return /* @__PURE__ */ jsxs36("svg", { ...iconProps, children: [
5626
+ return /* @__PURE__ */ jsxs37("svg", { ...iconProps, children: [
5294
5627
  /* @__PURE__ */ jsx46("rect", { x: "2", y: "2", width: "20", height: "8", rx: "2", ry: "2" }),
5295
5628
  /* @__PURE__ */ jsx46("rect", { x: "2", y: "14", width: "20", height: "8", rx: "2", ry: "2" }),
5296
5629
  /* @__PURE__ */ jsx46("line", { x1: "6", y1: "6", x2: "6.01", y2: "6" }),
@@ -5299,7 +5632,7 @@ function renderTopologyIcon(icon, color, px) {
5299
5632
  case "cloud":
5300
5633
  return /* @__PURE__ */ jsx46("svg", { ...iconProps, children: /* @__PURE__ */ jsx46("path", { d: "M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z" }) });
5301
5634
  case "ai":
5302
- return /* @__PURE__ */ jsxs36("svg", { ...iconProps, children: [
5635
+ return /* @__PURE__ */ jsxs37("svg", { ...iconProps, children: [
5303
5636
  /* @__PURE__ */ jsx46("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2" }),
5304
5637
  /* @__PURE__ */ jsx46("rect", { x: "9", y: "9", width: "6", height: "6" }),
5305
5638
  /* @__PURE__ */ jsx46("line", { x1: "9", y1: "1", x2: "9", y2: "4" }),
@@ -5312,7 +5645,7 @@ function renderTopologyIcon(icon, color, px) {
5312
5645
  /* @__PURE__ */ jsx46("line", { x1: "1", y1: "14", x2: "4", y2: "14" })
5313
5646
  ] });
5314
5647
  case "network":
5315
- return /* @__PURE__ */ jsxs36("svg", { ...iconProps, children: [
5648
+ return /* @__PURE__ */ jsxs37("svg", { ...iconProps, children: [
5316
5649
  /* @__PURE__ */ jsx46("rect", { x: "2", y: "2", width: "6", height: "6", rx: "1" }),
5317
5650
  /* @__PURE__ */ jsx46("rect", { x: "16", y: "2", width: "6", height: "6", rx: "1" }),
5318
5651
  /* @__PURE__ */ jsx46("rect", { x: "9", y: "16", width: "6", height: "6", rx: "1" }),
@@ -5324,18 +5657,18 @@ function renderTopologyIcon(icon, color, px) {
5324
5657
  case "shield":
5325
5658
  return /* @__PURE__ */ jsx46("svg", { ...iconProps, children: /* @__PURE__ */ jsx46("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z" }) });
5326
5659
  case "user":
5327
- return /* @__PURE__ */ jsxs36("svg", { ...iconProps, children: [
5660
+ return /* @__PURE__ */ jsxs37("svg", { ...iconProps, children: [
5328
5661
  /* @__PURE__ */ jsx46("path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }),
5329
5662
  /* @__PURE__ */ jsx46("circle", { cx: "12", cy: "7", r: "4" })
5330
5663
  ] });
5331
5664
  case "database":
5332
- return /* @__PURE__ */ jsxs36("svg", { ...iconProps, children: [
5665
+ return /* @__PURE__ */ jsxs37("svg", { ...iconProps, children: [
5333
5666
  /* @__PURE__ */ jsx46("ellipse", { cx: "12", cy: "5", rx: "9", ry: "3" }),
5334
5667
  /* @__PURE__ */ jsx46("path", { d: "M21 12c0 1.66-4 3-9 3s-9-1.34-9-3" }),
5335
5668
  /* @__PURE__ */ jsx46("path", { d: "M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5" })
5336
5669
  ] });
5337
5670
  case "wifi":
5338
- return /* @__PURE__ */ jsxs36("svg", { ...iconProps, children: [
5671
+ return /* @__PURE__ */ jsxs37("svg", { ...iconProps, children: [
5339
5672
  /* @__PURE__ */ jsx46("path", { d: "M5 12.55a11 11 0 0 1 14.08 0" }),
5340
5673
  /* @__PURE__ */ jsx46("path", { d: "M1.42 9a16 16 0 0 1 21.16 0" }),
5341
5674
  /* @__PURE__ */ jsx46("path", { d: "M8.53 16.11a6 6 0 0 1 6.95 0" }),
@@ -5419,7 +5752,7 @@ function StnTopologyNodeMark({
5419
5752
  const countText = formatTopologyCount(count);
5420
5753
  const iconPx = metrics.icon;
5421
5754
  const showCornerBadge = !isCount && count != null && count !== "";
5422
- return /* @__PURE__ */ jsxs36(
5755
+ return /* @__PURE__ */ jsxs37(
5423
5756
  "g",
5424
5757
  {
5425
5758
  className: cn("stn-topology-node", selected && "stn-topology-node--selected", className),
@@ -5431,7 +5764,7 @@ function StnTopologyNodeMark({
5431
5764
  style: { cursor: onClick ? "pointer" : "default" },
5432
5765
  ...rest,
5433
5766
  children: [
5434
- isAlert && /* @__PURE__ */ jsxs36(
5767
+ isAlert && /* @__PURE__ */ jsxs37(
5435
5768
  "circle",
5436
5769
  {
5437
5770
  className: "stn-topology-node__pulse",
@@ -5476,7 +5809,7 @@ function StnTopologyNodeMark({
5476
5809
  children: countText
5477
5810
  }
5478
5811
  ) : /* @__PURE__ */ jsx46("g", { transform: `translate(${x - iconPx / 2}, ${y - iconPx / 2})`, children: renderTopologyIcon(icon, stroke, iconPx) }),
5479
- showCornerBadge && /* @__PURE__ */ jsxs36("g", { className: "stn-topology-node__badge", children: [
5812
+ showCornerBadge && /* @__PURE__ */ jsxs37("g", { className: "stn-topology-node__badge", children: [
5480
5813
  /* @__PURE__ */ jsx46("circle", { cx: x + r * 0.72, cy: y - r * 0.72, r: Math.max(6, r * 0.38), fill: stroke, stroke: "rgba(6,7,15,0.9)", strokeWidth: "1" }),
5481
5814
  /* @__PURE__ */ jsx46(
5482
5815
  "text",
@@ -5505,7 +5838,7 @@ function StnTopologyNodeMark({
5505
5838
  children: label
5506
5839
  }
5507
5840
  ),
5508
- showStatus && resolvedStatusLabel && /* @__PURE__ */ jsxs36(
5841
+ showStatus && resolvedStatusLabel && /* @__PURE__ */ jsxs37(
5509
5842
  "text",
5510
5843
  {
5511
5844
  x,
@@ -5540,7 +5873,7 @@ function StnTopologyNodePreview({
5540
5873
  }
5541
5874
 
5542
5875
  // src/components/topology/StnTopologyRing.tsx
5543
- import { jsx as jsx47, jsxs as jsxs37 } from "react/jsx-runtime";
5876
+ import { jsx as jsx47, jsxs as jsxs38 } from "react/jsx-runtime";
5544
5877
  function StnTopologyRing({
5545
5878
  core = {
5546
5879
  title: "\uC5D0\uC2A4\uD2F0\uC5D4\uC778\uD3EC\uD14D",
@@ -5617,7 +5950,7 @@ function StnTopologyRing({
5617
5950
  "data-stn-topology-ring": true,
5618
5951
  "data-ring-count": safeRingCount,
5619
5952
  ...rest,
5620
- children: /* @__PURE__ */ jsxs37(
5953
+ children: /* @__PURE__ */ jsxs38(
5621
5954
  "svg",
5622
5955
  {
5623
5956
  className: "stn-topology-ring__svg",
@@ -5626,12 +5959,12 @@ function StnTopologyRing({
5626
5959
  viewBox: `0 0 ${vb} ${vb}`,
5627
5960
  overflow: "visible",
5628
5961
  children: [
5629
- /* @__PURE__ */ jsxs37("defs", { children: [
5630
- /* @__PURE__ */ jsxs37("radialGradient", { id: coreGlowId, cx: "50%", cy: "50%", r: "50%", children: [
5962
+ /* @__PURE__ */ jsxs38("defs", { children: [
5963
+ /* @__PURE__ */ jsxs38("radialGradient", { id: coreGlowId, cx: "50%", cy: "50%", r: "50%", children: [
5631
5964
  /* @__PURE__ */ jsx47("stop", { offset: "0%", stopColor: "#722ed1", stopOpacity: "0.8" }),
5632
5965
  /* @__PURE__ */ jsx47("stop", { offset: "100%", stopColor: "#120338", stopOpacity: "0" })
5633
5966
  ] }),
5634
- /* @__PURE__ */ jsxs37("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
5967
+ /* @__PURE__ */ jsxs38("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "100%", children: [
5635
5968
  /* @__PURE__ */ jsx47("stop", { offset: "0%", stopColor: "#00e5ff", stopOpacity: "0.4" }),
5636
5969
  /* @__PURE__ */ jsx47("stop", { offset: "100%", stopColor: "#722ed1", stopOpacity: "0.4" })
5637
5970
  ] })
@@ -5665,7 +5998,7 @@ function StnTopologyRing({
5665
5998
  },
5666
5999
  `line-${node.id}`
5667
6000
  )),
5668
- /* @__PURE__ */ jsxs37("g", { className: "stn-topology-ring__core", children: [
6001
+ /* @__PURE__ */ jsxs38("g", { className: "stn-topology-ring__core", children: [
5669
6002
  /* @__PURE__ */ jsx47("circle", { cx: centerX, cy: centerY, r: 54, fill: `url(#${coreGlowId})` }),
5670
6003
  /* @__PURE__ */ jsx47(
5671
6004
  "circle",
@@ -5693,7 +6026,7 @@ function StnTopologyRing({
5693
6026
  }
5694
6027
  ),
5695
6028
  core.title && /* @__PURE__ */ jsx47("text", { x: centerX, y: centerY + 8, textAnchor: "middle", fill: "#f0f2f5", fontSize: "10", fontWeight: "600", children: core.title }),
5696
- /* @__PURE__ */ jsxs37("text", { x: centerX, y: centerY + 22, textAnchor: "middle", fill: coreColor, fontSize: "9", fontWeight: "500", children: [
6029
+ /* @__PURE__ */ jsxs38("text", { x: centerX, y: centerY + 22, textAnchor: "middle", fill: coreColor, fontSize: "9", fontWeight: "500", children: [
5697
6030
  "\u25CF ",
5698
6031
  coreStatusLabel
5699
6032
  ] })
@@ -5726,8 +6059,8 @@ function StnTopologyRing({
5726
6059
  }
5727
6060
 
5728
6061
  // src/components/topology/StnTopologyGraph.tsx
5729
- import { useState as useState10 } from "react";
5730
- import { jsx as jsx48, jsxs as jsxs38 } from "react/jsx-runtime";
6062
+ import { useState as useState13 } from "react";
6063
+ import { jsx as jsx48, jsxs as jsxs39 } from "react/jsx-runtime";
5731
6064
  var DEFAULT_GRAPH_NODES = [
5732
6065
  { id: "n1", x: 200, y: 58, status: "minor", label: "GW-01", shape: "circle", content: "icon", icon: "wifi" },
5733
6066
  { id: "n2", x: 118, y: 118, status: "critical", label: "BACKUP", shape: "hexagon", content: "count", count: 4, pulse: true },
@@ -5761,12 +6094,12 @@ function StnTopologyGraph({
5761
6094
  style,
5762
6095
  ...rest
5763
6096
  }) {
5764
- const [viewMode, setViewMode] = useState10(defaultMode);
6097
+ const [viewMode, setViewMode] = useState13(defaultMode);
5765
6098
  if (loading) {
5766
6099
  return /* @__PURE__ */ jsx48("div", { className: cn("stn-topology-graph", "stn-topology-graph--loading", className), style, ...rest, children: /* @__PURE__ */ jsx48("div", { className: "stn-topology-graph__loading-label", children: "\uD1A0\uD3F4\uB85C\uC9C0 \uCE94\uBC84\uC2A4 \uB370\uC774\uD130\uB97C \uBD88\uB7EC\uC624\uB294 \uC911..." }) });
5767
6100
  }
5768
6101
  const nodeMap = new Map(nodes.map((n) => [n.id, n]));
5769
- return /* @__PURE__ */ jsxs38(
6102
+ return /* @__PURE__ */ jsxs39(
5770
6103
  "div",
5771
6104
  {
5772
6105
  className: cn("stn-topology-graph", className),
@@ -5787,8 +6120,8 @@ function StnTopologyGraph({
5787
6120
  ]
5788
6121
  }
5789
6122
  ) }),
5790
- /* @__PURE__ */ jsxs38("svg", { className: "stn-topology-graph__svg", width: "100%", height: "100%", viewBox: "0 0 400 300", overflow: "visible", children: [
5791
- viewMode === "3D" ? /* @__PURE__ */ jsxs38("g", { opacity: "0.6", children: [
6123
+ /* @__PURE__ */ jsxs39("svg", { className: "stn-topology-graph__svg", width: "100%", height: "100%", viewBox: "0 0 400 300", overflow: "visible", children: [
6124
+ viewMode === "3D" ? /* @__PURE__ */ jsxs39("g", { opacity: "0.6", children: [
5792
6125
  /* @__PURE__ */ jsx48("line", { x1: "60", y1: "260", x2: "200", y2: "80", stroke: "rgba(255,255,255,0.06)", strokeDasharray: "3 3" }),
5793
6126
  /* @__PURE__ */ jsx48("line", { x1: "130", y1: "260", x2: "200", y2: "80", stroke: "rgba(255,255,255,0.08)", strokeDasharray: "3 3" }),
5794
6127
  /* @__PURE__ */ jsx48("line", { x1: "200", y1: "260", x2: "200", y2: "80", stroke: "rgba(255,255,255,0.14)", strokeDasharray: "3 3" }),
@@ -5797,7 +6130,7 @@ function StnTopologyGraph({
5797
6130
  /* @__PURE__ */ jsx48("line", { x1: "100", y1: "230", x2: "300", y2: "230", stroke: "rgba(255,255,255,0.06)" }),
5798
6131
  /* @__PURE__ */ jsx48("line", { x1: "130", y1: "190", x2: "270", y2: "190", stroke: "rgba(255,255,255,0.06)" }),
5799
6132
  /* @__PURE__ */ jsx48("line", { x1: "160", y1: "140", x2: "240", y2: "140", stroke: "rgba(255,255,255,0.06)" })
5800
- ] }) : /* @__PURE__ */ jsxs38("g", { opacity: "0.3", children: [
6133
+ ] }) : /* @__PURE__ */ jsxs39("g", { opacity: "0.3", children: [
5801
6134
  /* @__PURE__ */ jsx48("line", { x1: "40", y1: "60", x2: "360", y2: "60", stroke: "rgba(255,255,255,0.08)", strokeDasharray: "4 4" }),
5802
6135
  /* @__PURE__ */ jsx48("line", { x1: "40", y1: "150", x2: "360", y2: "150", stroke: "rgba(255,255,255,0.08)", strokeDasharray: "4 4" }),
5803
6136
  /* @__PURE__ */ jsx48("line", { x1: "40", y1: "240", x2: "360", y2: "240", stroke: "rgba(255,255,255,0.08)", strokeDasharray: "4 4" }),
@@ -5851,12 +6184,12 @@ function StnTopologyGraph({
5851
6184
  );
5852
6185
  })
5853
6186
  ] }),
5854
- showMinimap && /* @__PURE__ */ jsxs38("div", { className: "stn-topology-graph__minimap", children: [
5855
- /* @__PURE__ */ jsxs38("div", { className: "stn-topology-graph__minimap-head", children: [
6187
+ showMinimap && /* @__PURE__ */ jsxs39("div", { className: "stn-topology-graph__minimap", children: [
6188
+ /* @__PURE__ */ jsxs39("div", { className: "stn-topology-graph__minimap-head", children: [
5856
6189
  /* @__PURE__ */ jsx48("span", { children: "\uBBF8\uB9AC\uBCF4\uAE30" }),
5857
6190
  /* @__PURE__ */ jsx48("span", { children: "\u2014" })
5858
6191
  ] }),
5859
- /* @__PURE__ */ jsxs38("svg", { width: "100%", height: "40", viewBox: "0 0 100 50", children: [
6192
+ /* @__PURE__ */ jsxs39("svg", { width: "100%", height: "40", viewBox: "0 0 100 50", children: [
5860
6193
  /* @__PURE__ */ jsx48("polyline", { points: "50,10 40,25 50,40 60,30", fill: "none", stroke: "rgba(255,77,79,0.5)", strokeWidth: "1" }),
5861
6194
  /* @__PURE__ */ jsx48("circle", { cx: "50", cy: "10", r: "2", fill: STN_TOPOLOGY_STATUS_COLORS.critical.main }),
5862
6195
  /* @__PURE__ */ jsx48("circle", { cx: "40", cy: "25", r: "2.5", fill: STN_TOPOLOGY_STATUS_COLORS.critical.main }),
@@ -5870,7 +6203,7 @@ function StnTopologyGraph({
5870
6203
  }
5871
6204
 
5872
6205
  // src/components/StnWidget.tsx
5873
- import { Fragment as Fragment4, jsx as jsx49, jsxs as jsxs39 } from "react/jsx-runtime";
6206
+ import { Fragment as Fragment5, jsx as jsx49, jsxs as jsxs40 } from "react/jsx-runtime";
5874
6207
  var SHELL_PUB_CLASS = {
5875
6208
  card: "",
5876
6209
  "fault-panel": "",
@@ -5889,8 +6222,8 @@ function bannerSeverityFromStatus(status, isCritical) {
5889
6222
  return void 0;
5890
6223
  }
5891
6224
  function withBannerSeverity(banner, severity) {
5892
- if (!severity || !isValidElement4(banner) || banner.type !== StnEventBanner) return banner;
5893
- return cloneElement4(banner, { severity });
6225
+ if (!severity || !isValidElement5(banner) || banner.type !== StnEventBanner) return banner;
6226
+ return cloneElement5(banner, { severity });
5894
6227
  }
5895
6228
  function markWidgetSlot(component, slot) {
5896
6229
  ;
@@ -5905,7 +6238,7 @@ function readWidgetSlot(type) {
5905
6238
  function flattenWidgetChildren(children) {
5906
6239
  const out = [];
5907
6240
  Children2.forEach(children, (child) => {
5908
- if (isValidElement4(child) && child.type === Fragment3) {
6241
+ if (isValidElement5(child) && child.type === Fragment4) {
5909
6242
  const fragmentProps = child.props;
5910
6243
  out.push(...flattenWidgetChildren(fragmentProps.children));
5911
6244
  return;
@@ -5918,7 +6251,7 @@ function partitionWidgetChildren(children) {
5918
6251
  const slots = { headers: [], bodies: [], footers: [], rest: [] };
5919
6252
  for (const child of flattenWidgetChildren(children)) {
5920
6253
  if (child == null || child === false || child === true) continue;
5921
- if (isValidElement4(child)) {
6254
+ if (isValidElement5(child)) {
5922
6255
  const slot = readWidgetSlot(child.type);
5923
6256
  if (slot === "header") {
5924
6257
  slots.headers.push(child);
@@ -5939,7 +6272,7 @@ function partitionWidgetChildren(children) {
5939
6272
  }
5940
6273
  function mergeBodySlot(body, extra, contentClassName, isEmptyState, emptyStyle) {
5941
6274
  const prev = body.props;
5942
- return cloneElement4(
6275
+ return cloneElement5(
5943
6276
  body,
5944
6277
  {
5945
6278
  className: cn(prev.className, contentClassName, isEmptyState && "empty"),
@@ -5983,7 +6316,7 @@ function StnWidgetPeriodPager({
5983
6316
  nextLabel = "\uB2E4\uC74C",
5984
6317
  ...rest
5985
6318
  }) {
5986
- return /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__period-pager", className), ...rest, children: [
6319
+ return /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__period-pager", className), ...rest, children: [
5987
6320
  /* @__PURE__ */ jsx49(
5988
6321
  StnButton,
5989
6322
  {
@@ -6022,13 +6355,13 @@ function StnWidgetHeaderInner({
6022
6355
  wrapActions = false
6023
6356
  }) {
6024
6357
  const resolvedIconName = headerIconName ?? defaultHeaderIconName(appearance);
6025
- return /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
6026
- /* @__PURE__ */ jsxs39("div", { className: "stn-widget__head-start", children: [
6358
+ return /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
6359
+ /* @__PURE__ */ jsxs40("div", { className: "stn-widget__head-start", children: [
6027
6360
  showHeaderIcon ? headerIcon != null ? /* @__PURE__ */ jsx49(StnWidgetInsetIcon, { size: "sm", children: headerIcon }) : resolvedIconName ? /* @__PURE__ */ jsx49(StnWidgetInsetIcon, { size: "sm", icon: resolvedIconName }) : null : null,
6028
- title != null || badge != null ? typeof title === "string" || title == null ? /* @__PURE__ */ jsxs39("div", { className: "stn-widget__title-wrap", children: [
6361
+ title != null || badge != null ? typeof title === "string" || title == null ? /* @__PURE__ */ jsxs40("div", { className: "stn-widget__title-wrap", children: [
6029
6362
  typeof title === "string" ? /* @__PURE__ */ jsx49("p", { className: "stn-widget__title", title, children: title }) : null,
6030
6363
  badge
6031
- ] }) : /* @__PURE__ */ jsxs39(Fragment4, { children: [
6364
+ ] }) : /* @__PURE__ */ jsxs40(Fragment5, { children: [
6032
6365
  title,
6033
6366
  badge
6034
6367
  ] }) : null
@@ -6113,7 +6446,7 @@ function StnWidgetRoot({
6113
6446
  ...rest
6114
6447
  };
6115
6448
  const slots = partitionWidgetChildren(children);
6116
- const propHead = shell === "fault-panel" && !isFigmaShell ? title != null || titleActions ? /* @__PURE__ */ jsxs39("div", { className: "app_bar", children: [
6449
+ const propHead = shell === "fault-panel" && !isFigmaShell ? title != null || titleActions ? /* @__PURE__ */ jsxs40("div", { className: "app_bar", children: [
6117
6450
  /* @__PURE__ */ jsx49("div", { className: "fault_title_box", children: typeof title === "string" ? /* @__PURE__ */ jsx49("span", { children: title }) : title }),
6118
6451
  titleActions
6119
6452
  ] }) : null : shell === "board" || shell === "board-item" ? title != null ? /* @__PURE__ */ jsx49("div", { className: "stn-widget__head", children: typeof title === "string" ? /* @__PURE__ */ jsx49("p", { children: title }) : title }) : null : isFigmaShell ? /* @__PURE__ */ jsx49(
@@ -6130,8 +6463,8 @@ function StnWidgetRoot({
6130
6463
  headerIcon,
6131
6464
  wrapActions
6132
6465
  }
6133
- ) : title != null || badge != null || titleActions ? /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
6134
- /* @__PURE__ */ jsxs39("div", { className: "stn-widget__head-start", children: [
6466
+ ) : title != null || badge != null || titleActions ? /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
6467
+ /* @__PURE__ */ jsxs40("div", { className: "stn-widget__head-start", children: [
6135
6468
  title != null ? typeof title === "string" ? /* @__PURE__ */ jsx49("p", { className: "stn-widget__title", title, children: title }) : title : null,
6136
6469
  badge
6137
6470
  ] }),
@@ -6150,14 +6483,14 @@ function StnWidgetRoot({
6150
6483
  body = /* @__PURE__ */ jsx49("div", { className: cn("stn-widget__body", autoBodyClass, isEmptyState && "empty", contentClassName), style: emptyStyle, children: slots.rest });
6151
6484
  }
6152
6485
  const footerNode = slots.footers.length > 0 ? slots.footers : footer ? /* @__PURE__ */ jsx49("div", { className: "stn-widget__footer", children: footer }) : null;
6153
- const card = /* @__PURE__ */ jsxs39("div", { ...rootProps, children: [
6486
+ const card = /* @__PURE__ */ jsxs40("div", { ...rootProps, children: [
6154
6487
  isFigmaShell && appearanceShell === "overlay" ? /* @__PURE__ */ jsx49("div", { className: "stn-widget__map-deco", "aria-hidden": true }) : null,
6155
6488
  head,
6156
6489
  body,
6157
6490
  footerNode
6158
6491
  ] });
6159
6492
  if (banner == null || banner === false) return card;
6160
- return /* @__PURE__ */ jsxs39("div", { className: "stn-widget-anchor", children: [
6493
+ return /* @__PURE__ */ jsxs40("div", { className: "stn-widget-anchor", children: [
6161
6494
  withBannerSeverity(banner, bannerSeverityFromStatus(status, isCritical)),
6162
6495
  card
6163
6496
  ] });
@@ -6219,8 +6552,8 @@ function StnWidgetStatusItem({
6219
6552
  ...rest
6220
6553
  }) {
6221
6554
  const grade = gradeProp ?? (status === "warning" ? "minor" : status) ?? "normal";
6222
- return /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__status-item", className), ...rest, children: [
6223
- /* @__PURE__ */ jsxs39("span", { className: "stn-widget__status-label", children: [
6555
+ return /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__status-item", className), ...rest, children: [
6556
+ /* @__PURE__ */ jsxs40("span", { className: "stn-widget__status-label", children: [
6224
6557
  showDot ? /* @__PURE__ */ jsx49(
6225
6558
  "span",
6226
6559
  {
@@ -6240,7 +6573,7 @@ function StnWidgetStatGroup({ className, children, ...rest }) {
6240
6573
  return /* @__PURE__ */ jsx49("div", { className: cn("stn-widget__stat-group", className), ...rest, children });
6241
6574
  }
6242
6575
  function StnWidgetStatCard({ label, count, className, ...rest }) {
6243
- return /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__stat-card", className), ...rest, children: [
6576
+ return /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__stat-card", className), ...rest, children: [
6244
6577
  /* @__PURE__ */ jsx49("span", { className: "stn-widget__stat-label", children: label }),
6245
6578
  /* @__PURE__ */ jsx49("span", { className: "stn-widget__stat-count", children: count })
6246
6579
  ] });
@@ -6269,15 +6602,15 @@ function StnWidgetGradeRow({
6269
6602
  }) {
6270
6603
  const clamped = Math.max(0, Math.min(100, percent));
6271
6604
  const resolvedPercentLabel = percentLabel ?? formatGradePercent(clamped);
6272
- return /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__grade-row", `stn-widget__grade-row--${grade}`, className), ...rest, children: [
6273
- /* @__PURE__ */ jsxs39("div", { className: "stn-widget__grade-row-left", children: [
6274
- /* @__PURE__ */ jsxs39("span", { className: "stn-widget__grade-row-label", children: [
6605
+ return /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__grade-row", `stn-widget__grade-row--${grade}`, className), ...rest, children: [
6606
+ /* @__PURE__ */ jsxs40("div", { className: "stn-widget__grade-row-left", children: [
6607
+ /* @__PURE__ */ jsxs40("span", { className: "stn-widget__grade-row-label", children: [
6275
6608
  /* @__PURE__ */ jsx49(StnIcon, { name: GRADE_ROW_ICON[grade], size: 20, className: "stn-widget__grade-row-icon", "aria-hidden": true }),
6276
6609
  label
6277
6610
  ] }),
6278
6611
  /* @__PURE__ */ jsx49("div", { className: "stn-widget__grade-row-track", "aria-hidden": true, children: /* @__PURE__ */ jsx49("span", { className: "stn-widget__grade-row-fill", style: { width: `${clamped}%` } }) })
6279
6612
  ] }),
6280
- /* @__PURE__ */ jsxs39("div", { className: "stn-widget__grade-row-right", children: [
6613
+ /* @__PURE__ */ jsxs40("div", { className: "stn-widget__grade-row-right", children: [
6281
6614
  /* @__PURE__ */ jsx49("span", { className: "stn-widget__grade-row-value", children: value }),
6282
6615
  /* @__PURE__ */ jsx49("span", { className: "stn-widget__grade-row-percent", children: resolvedPercentLabel })
6283
6616
  ] })
@@ -6291,8 +6624,8 @@ function StnWidgetFooter({ className, children, ...rest }) {
6291
6624
  }
6292
6625
  markWidgetSlot(StnWidgetFooter, "footer");
6293
6626
  function StnWidgetEmpty({ className, children, ...rest }) {
6294
- return /* @__PURE__ */ jsxs39("div", { className: cn("stn-widget__empty", className), ...rest, children: [
6295
- /* @__PURE__ */ jsxs39("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", style: { opacity: 0.6 }, children: [
6627
+ return /* @__PURE__ */ jsxs40("div", { className: cn("stn-widget__empty", className), ...rest, children: [
6628
+ /* @__PURE__ */ jsxs40("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", style: { opacity: 0.6 }, children: [
6296
6629
  /* @__PURE__ */ jsx49("circle", { cx: "12", cy: "12", r: "10" }),
6297
6630
  /* @__PURE__ */ jsx49("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
6298
6631
  /* @__PURE__ */ jsx49("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
@@ -6351,11 +6684,11 @@ import {
6351
6684
  // src/layouts/StnStack.tsx
6352
6685
  import {
6353
6686
  Children as Children3,
6354
- forwardRef as forwardRef24,
6355
- Fragment as Fragment5,
6356
- isValidElement as isValidElement5
6687
+ forwardRef as forwardRef25,
6688
+ Fragment as Fragment6,
6689
+ isValidElement as isValidElement6
6357
6690
  } from "react";
6358
- import { jsx as jsx50, jsxs as jsxs40 } from "react/jsx-runtime";
6691
+ import { jsx as jsx50, jsxs as jsxs41 } from "react/jsx-runtime";
6359
6692
  var BREAKPOINTS = ["xs", "sm", "md", "lg", "xl"];
6360
6693
  var DIRECTION_CLASS = /* @__PURE__ */ new Set(["row", "row-reverse", "column", "column-reverse"]);
6361
6694
  var STACK_SPACE_TOKENS = /* @__PURE__ */ new Set([2, 4, 6, 8, 10, 12, 14, 16, 20, 24, 32, 36, 40, 44, 48, 56, 64, 80, 84]);
@@ -6448,7 +6781,7 @@ function spacingClassesAndStyle(spacing) {
6448
6781
  }
6449
6782
  return { classes, inlineGap };
6450
6783
  }
6451
- var StnStack = forwardRef24(function StnStack2({
6784
+ var StnStack = forwardRef25(function StnStack2({
6452
6785
  component,
6453
6786
  as,
6454
6787
  direction = "column",
@@ -6473,8 +6806,8 @@ var StnStack = forwardRef24(function StnStack2({
6473
6806
  const mergedStyle = inlineGap ? { gap: inlineGap, ...style } : style;
6474
6807
  const validChildren = Children3.toArray(children).filter(Boolean);
6475
6808
  const renderedChildren = divider ? validChildren.map((child, index) => {
6476
- const key = isValidElement5(child) && child.key != null ? child.key : index;
6477
- return /* @__PURE__ */ jsxs40(Fragment5, { children: [
6809
+ const key = isValidElement6(child) && child.key != null ? child.key : index;
6810
+ return /* @__PURE__ */ jsxs41(Fragment6, { children: [
6478
6811
  index > 0 ? divider : null,
6479
6812
  child
6480
6813
  ] }, key);
@@ -6503,7 +6836,7 @@ var StnStack = forwardRef24(function StnStack2({
6503
6836
  });
6504
6837
 
6505
6838
  // src/patterns/dashboard/AlertCenterDashboard.tsx
6506
- import { jsx as jsx51, jsxs as jsxs41 } from "react/jsx-runtime";
6839
+ import { jsx as jsx51, jsxs as jsxs42 } from "react/jsx-runtime";
6507
6840
  var TOP5_ROWS = [
6508
6841
  { label: "\uADF8\uB791\uC2DC\uC544", percent: 80, value: "80\uAC74", grade: "critical" },
6509
6842
  { label: "\uC5F0\uB9BD\uC8FC\uD0DD 15\uC138\uB300", percent: 74, value: "74\uAC74", grade: "major" },
@@ -6512,7 +6845,7 @@ var TOP5_ROWS = [
6512
6845
  { label: "PRADA", percent: 68, value: "68\uAC74", grade: "default" }
6513
6846
  ];
6514
6847
  function AlertCenterDashboard({ className, appearance = "translucent", loading = false }) {
6515
- return /* @__PURE__ */ jsxs41(
6848
+ return /* @__PURE__ */ jsxs42(
6516
6849
  StnStack,
6517
6850
  {
6518
6851
  direction: "column",
@@ -6521,12 +6854,12 @@ function AlertCenterDashboard({ className, appearance = "translucent", loading =
6521
6854
  style: { flex: "1 1 0%", minHeight: 0, height: "100%", width: "100%" },
6522
6855
  "data-stn-dashboard": "alert-widgets",
6523
6856
  children: [
6524
- /* @__PURE__ */ jsx51(StnWidget, { title: "\uC2DC\uC124 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx51(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs41(StnWidget.StatusList, { children: [
6857
+ /* @__PURE__ */ jsx51(StnWidget, { title: "\uC2DC\uC124 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx51(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs42(StnWidget.StatusList, { children: [
6525
6858
  /* @__PURE__ */ jsx51(StnWidget.StatusItem, { label: "PTN", value: "179", showDot: false }),
6526
6859
  /* @__PURE__ */ jsx51(StnWidget.StatusItem, { label: "MSPP", value: "63", showDot: false }),
6527
6860
  /* @__PURE__ */ jsx51(StnWidget.StatusItem, { label: "L3\uC2A4\uC704\uCE58", value: "27", showDot: false })
6528
6861
  ] }) }),
6529
- /* @__PURE__ */ jsx51(StnWidget, { title: "\uC7A5\uC560 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx51(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs41(StnWidget.StatusList, { children: [
6862
+ /* @__PURE__ */ jsx51(StnWidget, { title: "\uC7A5\uC560 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx51(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs42(StnWidget.StatusList, { children: [
6530
6863
  /* @__PURE__ */ jsx51(StnWidget.StatusItem, { label: "Critical", value: "43", grade: "critical" }),
6531
6864
  /* @__PURE__ */ jsx51(StnWidget.StatusItem, { label: "Major", value: "79", grade: "major" }),
6532
6865
  /* @__PURE__ */ jsx51(StnWidget.StatusItem, { label: "Minor", value: "3", grade: "minor" })
@@ -6548,15 +6881,15 @@ function AlertCenterDashboard({ className, appearance = "translucent", loading =
6548
6881
  }
6549
6882
 
6550
6883
  // src/patterns/dashboard/PubDashboardWidgetBodies.tsx
6551
- import { jsx as jsx52, jsxs as jsxs42 } from "react/jsx-runtime";
6884
+ import { jsx as jsx52, jsxs as jsxs43 } from "react/jsx-runtime";
6552
6885
  function PubDisabilityStatusList({ items, summary }) {
6553
- return /* @__PURE__ */ jsxs42("div", { className: "ds-disability-status", children: [
6554
- /* @__PURE__ */ jsx52("ul", { className: "ds-disability-status__list", children: items.map((item, i) => /* @__PURE__ */ jsxs42(
6886
+ return /* @__PURE__ */ jsxs43("div", { className: "ds-disability-status", children: [
6887
+ /* @__PURE__ */ jsx52("ul", { className: "ds-disability-status__list", children: items.map((item, i) => /* @__PURE__ */ jsxs43(
6555
6888
  "li",
6556
6889
  {
6557
6890
  className: ["ds-disability-status__item", item.grade].filter(Boolean).join(" "),
6558
6891
  children: [
6559
- /* @__PURE__ */ jsxs42("span", { children: [
6892
+ /* @__PURE__ */ jsxs43("span", { children: [
6560
6893
  item.showDot !== false && item.grade ? /* @__PURE__ */ jsx52("span", { className: "dot", "aria-hidden": true }) : null,
6561
6894
  item.label
6562
6895
  ] }),
@@ -6565,7 +6898,7 @@ function PubDisabilityStatusList({ items, summary }) {
6565
6898
  },
6566
6899
  i
6567
6900
  )) }),
6568
- summary && summary.length > 0 ? /* @__PURE__ */ jsx52("div", { className: "ds-disability-status__summary", children: summary.map((row, i) => /* @__PURE__ */ jsxs42("p", { className: "ds-disability-status__value", children: [
6901
+ summary && summary.length > 0 ? /* @__PURE__ */ jsx52("div", { className: "ds-disability-status__summary", children: summary.map((row, i) => /* @__PURE__ */ jsxs43("p", { className: "ds-disability-status__value", children: [
6569
6902
  row.label,
6570
6903
  /* @__PURE__ */ jsx52("span", { children: row.value })
6571
6904
  ] }, i)) }) : null
@@ -6573,16 +6906,16 @@ function PubDisabilityStatusList({ items, summary }) {
6573
6906
  }
6574
6907
  function PubTrafficTop5Bars({ rows }) {
6575
6908
  const maxPercent = Math.max(...rows.map((row) => row.percent), 0);
6576
- return /* @__PURE__ */ jsx52("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsxs42("div", { className: ["ds-bar", row.percent === maxPercent ? "max" : ""].filter(Boolean).join(" "), children: [
6909
+ return /* @__PURE__ */ jsx52("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsxs43("div", { className: ["ds-bar", row.percent === maxPercent ? "max" : ""].filter(Boolean).join(" "), children: [
6577
6910
  /* @__PURE__ */ jsx52("p", { className: "ds-bar-name", title: row.label, children: row.label }),
6578
6911
  /* @__PURE__ */ jsx52("div", { className: "ds-bar-con", title: `${row.percent}%`, children: /* @__PURE__ */ jsx52("span", { className: "ds-bar-gauge", style: { "--percent": `${row.percent}%` } }) }),
6579
6912
  /* @__PURE__ */ jsx52("p", { className: "ds-bar-value", title: row.value, children: row.value })
6580
6913
  ] }, row.label)) });
6581
6914
  }
6582
6915
  function PubTop5EquipmentBars({ rows }) {
6583
- return /* @__PURE__ */ jsxs42("div", { className: "ds-group", children: [
6916
+ return /* @__PURE__ */ jsxs43("div", { className: "ds-group", children: [
6584
6917
  /* @__PURE__ */ jsx52("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx52("div", { className: "ds-equipment-ico", children: /* @__PURE__ */ jsx52("span", { className: "blind", children: "\uC7A5\uBE44 \uC774\uBBF8\uC9C0" }) }) }),
6585
- /* @__PURE__ */ jsx52("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx52("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsx52("div", { className: "ds-bar type-2", children: /* @__PURE__ */ jsxs42("div", { className: "ds-bar-con", title: `${row.percent}%`, children: [
6918
+ /* @__PURE__ */ jsx52("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx52("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsx52("div", { className: "ds-bar type-2", children: /* @__PURE__ */ jsxs43("div", { className: "ds-bar-con", title: `${row.percent}%`, children: [
6586
6919
  /* @__PURE__ */ jsx52("span", { className: "ds-bar-gauge", style: { "--percent": `${row.percent}%` } }),
6587
6920
  /* @__PURE__ */ jsx52("div", { className: "ds-bar-status", children: row.status })
6588
6921
  ] }) }, row.label)) }) })
@@ -6597,11 +6930,11 @@ function PubChartSample({
6597
6930
  }
6598
6931
 
6599
6932
  // src/patterns/alertCenter/StnAlertCenterPanel.tsx
6600
- import { useState as useState11 } from "react";
6933
+ import { useState as useState14 } from "react";
6601
6934
  import {
6602
6935
  STN_ALERT_CENTER_TABS
6603
6936
  } from "@stn-uiux/pub-ui/data/stnAlertCenter";
6604
- import { jsx as jsx53, jsxs as jsxs43 } from "react/jsx-runtime";
6937
+ import { jsx as jsx53, jsxs as jsxs44 } from "react/jsx-runtime";
6605
6938
  function resolveAlertIcon(item) {
6606
6939
  if (item.icon) {
6607
6940
  if (item.icon === "line/arrow-down") return "line/arrow-narrow-down";
@@ -6637,7 +6970,7 @@ function StnAlertCard({
6637
6970
  interactive: true,
6638
6971
  className: cn("stn-alert-card", className),
6639
6972
  onClick,
6640
- children: /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__row", children: [
6973
+ children: /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__row", children: [
6641
6974
  /* @__PURE__ */ jsx53(
6642
6975
  StnIcon,
6643
6976
  {
@@ -6647,8 +6980,8 @@ function StnAlertCard({
6647
6980
  className: "stn-alert-card__icon"
6648
6981
  }
6649
6982
  ),
6650
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__body", children: [
6651
- /* @__PURE__ */ jsxs43(StnStack, { direction: "row", alignItems: "center", spacing: 1, className: "stn-alert-card__header-line", children: [
6983
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__body", children: [
6984
+ /* @__PURE__ */ jsxs44(StnStack, { direction: "row", alignItems: "center", spacing: 1, className: "stn-alert-card__header-line", children: [
6652
6985
  /* @__PURE__ */ jsx53(
6653
6986
  StnChip,
6654
6987
  {
@@ -6668,7 +7001,7 @@ function StnAlertCard({
6668
7001
  }
6669
7002
  )
6670
7003
  ] }),
6671
- /* @__PURE__ */ jsxs43(StnStack, { direction: "row", alignItems: "center", spacing: 2, wrap: "wrap", className: "stn-alert-card__desc-line", children: [
7004
+ /* @__PURE__ */ jsxs44(StnStack, { direction: "row", alignItems: "center", spacing: 2, wrap: "wrap", className: "stn-alert-card__desc-line", children: [
6672
7005
  /* @__PURE__ */ jsx53(
6673
7006
  "span",
6674
7007
  {
@@ -6677,7 +7010,7 @@ function StnAlertCard({
6677
7010
  children: /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__text-inner", children: item.description })
6678
7011
  }
6679
7012
  ),
6680
- item.occurredAt && /* @__PURE__ */ jsxs43(
7013
+ item.occurredAt && /* @__PURE__ */ jsxs44(
6681
7014
  StnChip,
6682
7015
  {
6683
7016
  shape: "pill",
@@ -6693,7 +7026,7 @@ function StnAlertCard({
6693
7026
  )
6694
7027
  ] })
6695
7028
  ] }),
6696
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__meta", children: [
7029
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__meta", children: [
6697
7030
  /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__time", children: item.time }),
6698
7031
  item.unread !== false && /* @__PURE__ */ jsx53(
6699
7032
  "span",
@@ -6729,11 +7062,11 @@ function StnAlertCenterPanel({
6729
7062
  closeLabel = "\uB2EB\uAE30",
6730
7063
  className
6731
7064
  }) {
6732
- const [activeTab, setActiveTab] = useState11(defaultTab);
7065
+ const [activeTab, setActiveTab] = useState14(defaultTab);
6733
7066
  const alertCount = alerts.length;
6734
7067
  const resolvedTitleOverflow = titleOverflow ?? textOverflow;
6735
7068
  const resolvedDescOverflow = descOverflow ?? textOverflow;
6736
- return /* @__PURE__ */ jsxs43(
7069
+ return /* @__PURE__ */ jsxs44(
6737
7070
  "div",
6738
7071
  {
6739
7072
  className: cn(
@@ -6745,8 +7078,8 @@ function StnAlertCenterPanel({
6745
7078
  ),
6746
7079
  "data-stn-alert-center": true,
6747
7080
  children: [
6748
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-center__header", children: [
6749
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-center__header-left", children: [
7081
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-center__header", children: [
7082
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-center__header-left", children: [
6750
7083
  /* @__PURE__ */ jsx53(StnIcon, { name: "line/bell", size: 20, color: "var(--stn-primary)" }),
6751
7084
  /* @__PURE__ */ jsx53("span", { className: "stn-alert-center__title", children: title }),
6752
7085
  alertCount > 0 && /* @__PURE__ */ jsx53(StnChip, { shape: "pill", size: "sm", variant: "subtle", color: "primary", children: alertCount })
@@ -6764,7 +7097,7 @@ function StnAlertCenterPanel({
6764
7097
  }))
6765
7098
  }
6766
7099
  ),
6767
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-center__header-right", children: [
7100
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-center__header-right", children: [
6768
7101
  /* @__PURE__ */ jsx53(
6769
7102
  StnButton,
6770
7103
  {
@@ -6788,7 +7121,7 @@ function StnAlertCenterPanel({
6788
7121
  )
6789
7122
  ] })
6790
7123
  ] }),
6791
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-center__list-wrap", children: [
7124
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-center__list-wrap", children: [
6792
7125
  activeTab === "error" && /* @__PURE__ */ jsx53("ul", { className: "stn-alert-center__list", children: alerts.map((item) => /* @__PURE__ */ jsx53("li", { children: /* @__PURE__ */ jsx53(
6793
7126
  StnAlertCard,
6794
7127
  {
@@ -6798,24 +7131,24 @@ function StnAlertCenterPanel({
6798
7131
  onClick: () => onItemClick?.(item)
6799
7132
  }
6800
7133
  ) }, item.id ?? item.title)) }),
6801
- activeTab === "work" && /* @__PURE__ */ jsx53("ul", { className: "stn-alert-center__list", children: workItems.map((row) => /* @__PURE__ */ jsx53("li", { children: /* @__PURE__ */ jsx53(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__row", children: [
7134
+ activeTab === "work" && /* @__PURE__ */ jsx53("ul", { className: "stn-alert-center__list", children: workItems.map((row) => /* @__PURE__ */ jsx53("li", { children: /* @__PURE__ */ jsx53(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__row", children: [
6802
7135
  /* @__PURE__ */ jsx53(StnIcon, { name: "line/clock", size: 24, color: "var(--stn-text-secondary)", className: "stn-alert-card__icon" }),
6803
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__body", children: [
6804
- /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__type-label stn-alert-card__type-label--work", children: row.typeLabel }),
7136
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__body", children: [
7137
+ /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__type-label work", children: row.typeLabel }),
6805
7138
  /* @__PURE__ */ jsx53("span", { className: cn("stn-alert-card__desc", resolvedDescOverflow), title: row.text, children: /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__text-inner", children: row.text }) })
6806
7139
  ] }),
6807
7140
  /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__time", children: row.time })
6808
7141
  ] }) }) }, row.id ?? row.text)) }),
6809
- activeTab === "deploy" && /* @__PURE__ */ jsx53("ul", { className: "stn-alert-center__list", children: deployItems.map((row) => /* @__PURE__ */ jsx53("li", { children: /* @__PURE__ */ jsx53(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__row", children: [
7142
+ activeTab === "deploy" && /* @__PURE__ */ jsx53("ul", { className: "stn-alert-center__list", children: deployItems.map((row) => /* @__PURE__ */ jsx53("li", { children: /* @__PURE__ */ jsx53(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__row", children: [
6810
7143
  /* @__PURE__ */ jsx53(StnIcon, { name: "line/settings", size: 24, color: "var(--stn-secondary)", className: "stn-alert-card__icon" }),
6811
- /* @__PURE__ */ jsxs43("div", { className: "stn-alert-card__body", children: [
7144
+ /* @__PURE__ */ jsxs44("div", { className: "stn-alert-card__body", children: [
6812
7145
  /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__type-label stn-alert-card__type-label--deploy", children: row.typeLabel }),
6813
7146
  /* @__PURE__ */ jsx53("span", { className: cn("stn-alert-card__desc", resolvedDescOverflow), title: row.text, children: /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__text-inner", children: row.text }) })
6814
7147
  ] }),
6815
7148
  /* @__PURE__ */ jsx53("span", { className: "stn-alert-card__time", children: row.time })
6816
7149
  ] }) }) }, row.id ?? row.text)) })
6817
7150
  ] }),
6818
- /* @__PURE__ */ jsx53("div", { className: "stn-alert-center__footer", children: /* @__PURE__ */ jsxs43(
7151
+ /* @__PURE__ */ jsx53("div", { className: "stn-alert-center__footer", children: /* @__PURE__ */ jsxs44(
6819
7152
  "button",
6820
7153
  {
6821
7154
  type: "button",
@@ -6870,13 +7203,13 @@ var SideNavContext = createContext3({
6870
7203
  var useSideNav = () => useContext3(SideNavContext);
6871
7204
 
6872
7205
  // src/components/sideNav/StnSideNavItem.tsx
6873
- import { forwardRef as forwardRef25 } from "react";
7206
+ import { forwardRef as forwardRef26 } from "react";
6874
7207
  import { STN_NAV_MENU_SUB_ICON } from "@stn-uiux/pub-ui/data/stnSideNavItem";
6875
- import { jsx as jsx55, jsxs as jsxs44 } from "react/jsx-runtime";
7208
+ import { jsx as jsx55, jsxs as jsxs45 } from "react/jsx-runtime";
6876
7209
  function maskStyle2(src) {
6877
7210
  return { maskImage: `url('${src}')`, WebkitMaskImage: `url('${src}')` };
6878
7211
  }
6879
- var StnSideNavItem = forwardRef25(function StnSideNavItem2({
7212
+ var StnSideNavItem = forwardRef26(function StnSideNavItem2({
6880
7213
  label,
6881
7214
  id,
6882
7215
  iconSrc,
@@ -6919,7 +7252,7 @@ var StnSideNavItem = forwardRef25(function StnSideNavItem2({
6919
7252
  sideNav.onSelect(id);
6920
7253
  }
6921
7254
  };
6922
- const iconElement = hasIcon && !isSub ? /* @__PURE__ */ jsxs44("span", { className: "stn-side-nav-item__icon-wrap", children: [
7255
+ const iconElement = hasIcon && !isSub ? /* @__PURE__ */ jsxs45("span", { className: "stn-side-nav-item__icon-wrap", children: [
6923
7256
  /* @__PURE__ */ jsx55("span", { className: "stn-side-nav-item__icon", "aria-hidden": "true", children: icon ?? (resolvedIconSrc ? /* @__PURE__ */ jsx55("span", { className: "stn-side-nav-item__icon-glyph", style: maskStyle2(resolvedIconSrc) }) : null) }),
6924
7257
  showDot ? /* @__PURE__ */ jsx55("span", { className: "stn-side-nav-item__dot-wrap", "aria-hidden": "true", children: /* @__PURE__ */ jsx55(StnBadge, { variant: "dot", color: "error" }) }) : null
6925
7258
  ] }) : null;
@@ -6944,8 +7277,8 @@ var StnSideNavItem = forwardRef25(function StnSideNavItem2({
6944
7277
  title: collapsed ? label : void 0,
6945
7278
  onClick: handleClick,
6946
7279
  ...rest,
6947
- children: /* @__PURE__ */ jsxs44("span", { className: cn("stn-side-nav-item__inner", spreadTrail && "spread"), children: [
6948
- /* @__PURE__ */ jsxs44("span", { className: "stn-side-nav-item__lead", children: [
7280
+ children: /* @__PURE__ */ jsxs45("span", { className: cn("stn-side-nav-item__inner", spreadTrail && "spread"), children: [
7281
+ /* @__PURE__ */ jsxs45("span", { className: "stn-side-nav-item__lead", children: [
6949
7282
  isSub && showSubIndent ? /* @__PURE__ */ jsx55("span", { className: "stn-side-nav-item__sub-indent", "aria-hidden": "true" }) : null,
6950
7283
  shouldShowSubDot ? /* @__PURE__ */ jsx55(
6951
7284
  "span",
@@ -6995,12 +7328,12 @@ var StnSideNavItem = forwardRef25(function StnSideNavItem2({
6995
7328
  });
6996
7329
 
6997
7330
  // src/components/sideNav/StnSideNavHeader.tsx
6998
- import { forwardRef as forwardRef27 } from "react";
7331
+ import { forwardRef as forwardRef28 } from "react";
6999
7332
 
7000
7333
  // src/components/sideNav/StnSideNavLogo.tsx
7001
- import { forwardRef as forwardRef26 } from "react";
7334
+ import { forwardRef as forwardRef27 } from "react";
7002
7335
  import { jsx as jsx56 } from "react/jsx-runtime";
7003
- var StnSideNavLogo = forwardRef26(
7336
+ var StnSideNavLogo = forwardRef27(
7004
7337
  function StnSideNavLogo2({ className, logoProps, ...rest }, ref) {
7005
7338
  const { collapsed } = useSideNav();
7006
7339
  return /* @__PURE__ */ jsx56(
@@ -7028,8 +7361,8 @@ var StnSideNavLogo = forwardRef26(
7028
7361
  );
7029
7362
 
7030
7363
  // src/components/sideNav/StnSideNavHeader.tsx
7031
- import { Fragment as Fragment6, jsx as jsx57, jsxs as jsxs45 } from "react/jsx-runtime";
7032
- var StnSideNavHeader = forwardRef27(function StnSideNavHeader2({
7364
+ import { Fragment as Fragment7, jsx as jsx57, jsxs as jsxs46 } from "react/jsx-runtime";
7365
+ var StnSideNavHeader = forwardRef28(function StnSideNavHeader2({
7033
7366
  children,
7034
7367
  border = false,
7035
7368
  hasBorder = false,
@@ -7052,7 +7385,7 @@ var StnSideNavHeader = forwardRef27(function StnSideNavHeader2({
7052
7385
  className
7053
7386
  ),
7054
7387
  ...rest,
7055
- children: children ?? /* @__PURE__ */ jsxs45(Fragment6, { children: [
7388
+ children: children ?? /* @__PURE__ */ jsxs46(Fragment7, { children: [
7056
7389
  /* @__PURE__ */ jsx57(StnSideNavLogo, {}),
7057
7390
  shouldShowClose ? /* @__PURE__ */ jsx57(
7058
7391
  StnButton,
@@ -7085,9 +7418,9 @@ var StnSideNavHeader = forwardRef27(function StnSideNavHeader2({
7085
7418
  });
7086
7419
 
7087
7420
  // src/components/sideNav/StnSideNavMenu.tsx
7088
- import { forwardRef as forwardRef28 } from "react";
7421
+ import { forwardRef as forwardRef29 } from "react";
7089
7422
  import { jsx as jsx58 } from "react/jsx-runtime";
7090
- var StnSideNavMenu = forwardRef28(function StnSideNavMenu2({
7423
+ var StnSideNavMenu = forwardRef29(function StnSideNavMenu2({
7091
7424
  children,
7092
7425
  className,
7093
7426
  scrollSize = "thin",
@@ -7101,9 +7434,9 @@ var StnSideNavMenu = forwardRef28(function StnSideNavMenu2({
7101
7434
  className: cn(
7102
7435
  "stn-side-nav__menu",
7103
7436
  "stn-scroll",
7104
- "stn-scroll--vertical",
7105
- scrollSize && `stn-scroll--${scrollSize}`,
7106
- scrollColor && `stn-scroll--${scrollColor}`,
7437
+ "vertical",
7438
+ scrollSize && scrollSize,
7439
+ scrollColor && scrollColor,
7107
7440
  className
7108
7441
  ),
7109
7442
  "aria-label": "\uC0AC\uC774\uB4DC \uB0B4\uBE44\uAC8C\uC774\uC158",
@@ -7115,13 +7448,13 @@ var StnSideNavMenu = forwardRef28(function StnSideNavMenu2({
7115
7448
 
7116
7449
  // src/components/sideNav/StnSideNavGroup.tsx
7117
7450
  import {
7118
- forwardRef as forwardRef29,
7451
+ forwardRef as forwardRef30,
7119
7452
  useEffect as useEffect10,
7120
7453
  useRef as useRef7,
7121
- useState as useState12
7454
+ useState as useState15
7122
7455
  } from "react";
7123
- import { jsx as jsx59, jsxs as jsxs46 } from "react/jsx-runtime";
7124
- var StnSideNavGroup = forwardRef29(function StnSideNavGroup2({
7456
+ import { jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
7457
+ var StnSideNavGroup = forwardRef30(function StnSideNavGroup2({
7125
7458
  label,
7126
7459
  parent,
7127
7460
  direction = "down",
@@ -7137,7 +7470,7 @@ var StnSideNavGroup = forwardRef29(function StnSideNavGroup2({
7137
7470
  ...rest
7138
7471
  }, ref) {
7139
7472
  const { collapsed } = useSideNav();
7140
- const [internalOpen, setInternalOpen] = useState12(defaultOpen);
7473
+ const [internalOpen, setInternalOpen] = useState15(defaultOpen);
7141
7474
  const isOpen = openProp ?? internalOpen;
7142
7475
  const isDropdown = Boolean(dropdown || variant === "dropdown");
7143
7476
  const isTransparent = dropdownVariant === "transparent" || dropdownBackground === false;
@@ -7180,7 +7513,7 @@ var StnSideNavGroup = forwardRef29(function StnSideNavGroup2({
7180
7513
  children
7181
7514
  }
7182
7515
  ) : null;
7183
- return /* @__PURE__ */ jsxs46(
7516
+ return /* @__PURE__ */ jsxs47(
7184
7517
  "div",
7185
7518
  {
7186
7519
  ref: (node) => {
@@ -7211,9 +7544,9 @@ var StnSideNavGroup = forwardRef29(function StnSideNavGroup2({
7211
7544
  });
7212
7545
 
7213
7546
  // src/components/sideNav/StnSideNavSpacer.tsx
7214
- import { forwardRef as forwardRef30 } from "react";
7547
+ import { forwardRef as forwardRef31 } from "react";
7215
7548
  import { jsx as jsx60 } from "react/jsx-runtime";
7216
- var StnSideNavSpacer = forwardRef30(function StnSideNavSpacer2({ className, style, ...rest }, ref) {
7549
+ var StnSideNavSpacer = forwardRef31(function StnSideNavSpacer2({ className, style, ...rest }, ref) {
7217
7550
  return /* @__PURE__ */ jsx60(
7218
7551
  "div",
7219
7552
  {
@@ -7227,9 +7560,9 @@ var StnSideNavSpacer = forwardRef30(function StnSideNavSpacer2({ className, styl
7227
7560
  });
7228
7561
 
7229
7562
  // src/components/sideNav/StnSideNavFooter.tsx
7230
- import { forwardRef as forwardRef31 } from "react";
7563
+ import { forwardRef as forwardRef32 } from "react";
7231
7564
  import { jsx as jsx61 } from "react/jsx-runtime";
7232
- var StnSideNavFooter = forwardRef31(function StnSideNavFooter2({ curved = false, children, className, ...rest }, ref) {
7565
+ var StnSideNavFooter = forwardRef32(function StnSideNavFooter2({ curved = false, children, className, ...rest }, ref) {
7233
7566
  return /* @__PURE__ */ jsx61(
7234
7567
  "nav",
7235
7568
  {
@@ -7243,9 +7576,9 @@ var StnSideNavFooter = forwardRef31(function StnSideNavFooter2({ curved = false,
7243
7576
  });
7244
7577
 
7245
7578
  // src/components/sideNav/StnSideNavToggle.tsx
7246
- import { forwardRef as forwardRef32 } from "react";
7579
+ import { forwardRef as forwardRef33 } from "react";
7247
7580
  import { jsx as jsx62 } from "react/jsx-runtime";
7248
- var StnSideNavToggle = forwardRef32(
7581
+ var StnSideNavToggle = forwardRef33(
7249
7582
  function StnSideNavToggle2({ className, onClick, ...rest }, ref) {
7250
7583
  const { collapsed, onToggleCollapse } = useSideNav();
7251
7584
  return /* @__PURE__ */ jsx62(
@@ -7281,9 +7614,9 @@ var StnSideNavToggle = forwardRef32(
7281
7614
  );
7282
7615
 
7283
7616
  // src/components/sideNav/StnSideNavWatermark.tsx
7284
- import { forwardRef as forwardRef33 } from "react";
7617
+ import { forwardRef as forwardRef34 } from "react";
7285
7618
  import { jsx as jsx63 } from "react/jsx-runtime";
7286
- var StnSideNavWatermark = forwardRef33(
7619
+ var StnSideNavWatermark = forwardRef34(
7287
7620
  function StnSideNavWatermark2({ size = "xl", theme, className, ...rest }, ref) {
7288
7621
  return /* @__PURE__ */ jsx63(
7289
7622
  "div",
@@ -7299,9 +7632,9 @@ var StnSideNavWatermark = forwardRef33(
7299
7632
  );
7300
7633
 
7301
7634
  // src/components/sideNav/StnSideNavMobileTrigger.tsx
7302
- import { forwardRef as forwardRef34 } from "react";
7303
- import { jsx as jsx64, jsxs as jsxs47 } from "react/jsx-runtime";
7304
- var StnSideNavMobileTrigger = forwardRef34(
7635
+ import { forwardRef as forwardRef35 } from "react";
7636
+ import { jsx as jsx64, jsxs as jsxs48 } from "react/jsx-runtime";
7637
+ var StnSideNavMobileTrigger = forwardRef35(
7305
7638
  function StnSideNavMobileTrigger2({ floating = false, className, children, onClick, ...rest }, ref) {
7306
7639
  const { onToggleMobileOpen, mobileOpen } = useSideNav();
7307
7640
  return /* @__PURE__ */ jsx64(
@@ -7322,7 +7655,7 @@ var StnSideNavMobileTrigger = forwardRef34(
7322
7655
  onToggleMobileOpen?.();
7323
7656
  },
7324
7657
  ...rest,
7325
- children: children ?? /* @__PURE__ */ jsxs47("span", { className: "stn-side-nav__hamburger-bars", "aria-hidden": "true", children: [
7658
+ children: children ?? /* @__PURE__ */ jsxs48("span", { className: "stn-side-nav__hamburger-bars", "aria-hidden": "true", children: [
7326
7659
  /* @__PURE__ */ jsx64("span", {}),
7327
7660
  /* @__PURE__ */ jsx64("span", {}),
7328
7661
  /* @__PURE__ */ jsx64("span", {})
@@ -7334,10 +7667,10 @@ var StnSideNavMobileTrigger = forwardRef34(
7334
7667
 
7335
7668
  // src/components/sideNav/StnSideNavSub.tsx
7336
7669
  import {
7337
- forwardRef as forwardRef35
7670
+ forwardRef as forwardRef36
7338
7671
  } from "react";
7339
7672
  import { jsx as jsx65 } from "react/jsx-runtime";
7340
- var StnSideNavSub = forwardRef35(
7673
+ var StnSideNavSub = forwardRef36(
7341
7674
  function StnSideNavSub2({ children, className, ...rest }, ref) {
7342
7675
  return /* @__PURE__ */ jsx65(
7343
7676
  "div",
@@ -7352,7 +7685,7 @@ var StnSideNavSub = forwardRef35(
7352
7685
  );
7353
7686
  }
7354
7687
  );
7355
- var StnSideNavSubItem = forwardRef35(
7688
+ var StnSideNavSubItem = forwardRef36(
7356
7689
  function StnSideNavSubItem2({
7357
7690
  variant = "ghost",
7358
7691
  size = "md",
@@ -7394,9 +7727,9 @@ var StnSideNavSubItem = forwardRef35(
7394
7727
  );
7395
7728
 
7396
7729
  // src/components/sideNav/StnSideNavSubNav.tsx
7397
- import { forwardRef as forwardRef36 } from "react";
7730
+ import { forwardRef as forwardRef37 } from "react";
7398
7731
  import { jsx as jsx66 } from "react/jsx-runtime";
7399
- var StnSideNavSubNav = forwardRef36(
7732
+ var StnSideNavSubNav = forwardRef37(
7400
7733
  function StnSideNavSubNav2({
7401
7734
  dropdown = false,
7402
7735
  direction = "down",
@@ -7431,14 +7764,14 @@ var StnSideNavSubNav = forwardRef36(
7431
7764
 
7432
7765
  // src/patterns/sideNav/StnSideNavigation.tsx
7433
7766
  import {
7434
- forwardRef as forwardRef37,
7767
+ forwardRef as forwardRef38,
7435
7768
  useCallback as useCallback8,
7436
7769
  useMemo as useMemo4,
7437
- useState as useState13
7770
+ useState as useState16
7438
7771
  } from "react";
7439
- import { jsx as jsx67, jsxs as jsxs48 } from "react/jsx-runtime";
7772
+ import { jsx as jsx67, jsxs as jsxs49 } from "react/jsx-runtime";
7440
7773
  function useControllableState(controlledValue, defaultValue, onChange) {
7441
- const [internalState, setInternalState] = useState13(defaultValue);
7774
+ const [internalState, setInternalState] = useState16(defaultValue);
7442
7775
  const isControlled = controlledValue !== void 0;
7443
7776
  const value = isControlled ? controlledValue : internalState;
7444
7777
  const setValue = useCallback8(
@@ -7452,7 +7785,7 @@ function useControllableState(controlledValue, defaultValue, onChange) {
7452
7785
  );
7453
7786
  return [value, setValue];
7454
7787
  }
7455
- var StnSideNavigationRoot = forwardRef37(function StnSideNavigationRoot2({
7788
+ var StnSideNavigationRoot = forwardRef38(function StnSideNavigationRoot2({
7456
7789
  variant: variantProp,
7457
7790
  appearance,
7458
7791
  drawerVariant: drawerVariantProp,
@@ -7513,7 +7846,7 @@ var StnSideNavigationRoot = forwardRef37(function StnSideNavigationRoot2({
7513
7846
  }),
7514
7847
  [isEffectiveCollapsed, activeId, setActiveId, handleToggleCollapse, mobileOpen, handleToggleMobileOpen, setMobileOpen, isDrawerMode]
7515
7848
  );
7516
- return /* @__PURE__ */ jsxs48(SideNavContext.Provider, { value: contextValue, children: [
7849
+ return /* @__PURE__ */ jsxs49(SideNavContext.Provider, { value: contextValue, children: [
7517
7850
  showMobileTrigger && /* @__PURE__ */ jsx67(StnSideNavMobileTrigger, { floating: true }),
7518
7851
  (drawer || responsiveDrawer) && /* @__PURE__ */ jsx67(
7519
7852
  "div",
@@ -7563,16 +7896,16 @@ var StnSideNavigation = Object.assign(StnSideNavigationRoot, {
7563
7896
 
7564
7897
  // src/components/StnBreadcrumb.tsx
7565
7898
  import {
7566
- Fragment as Fragment7,
7899
+ Fragment as Fragment8,
7567
7900
  useEffect as useEffect11,
7568
7901
  useId as useId15,
7569
7902
  useRef as useRef8,
7570
- useState as useState14
7903
+ useState as useState17
7571
7904
  } from "react";
7572
7905
  import {
7573
7906
  STN_BREADCRUMB_ICON_SRC
7574
7907
  } from "@stn-uiux/pub-ui/data/stnBreadcrumb";
7575
- import { Fragment as Fragment8, jsx as jsx68, jsxs as jsxs49 } from "react/jsx-runtime";
7908
+ import { Fragment as Fragment9, jsx as jsx68, jsxs as jsxs50 } from "react/jsx-runtime";
7576
7909
  function maskStyle3(src) {
7577
7910
  return { maskImage: `url('${src}')`, WebkitMaskImage: `url('${src}')` };
7578
7911
  }
@@ -7605,7 +7938,7 @@ function SegmentContent({
7605
7938
  label,
7606
7939
  menu
7607
7940
  }) {
7608
- return /* @__PURE__ */ jsxs49(Fragment8, { children: [
7941
+ return /* @__PURE__ */ jsxs50(Fragment9, { children: [
7609
7942
  iconSrc ? /* @__PURE__ */ jsx68(BreadcrumbIcon, { src: iconSrc }) : null,
7610
7943
  /* @__PURE__ */ jsx68("span", { className: "stn-breadcrumb__label", children: label }),
7611
7944
  menu ? /* @__PURE__ */ jsx68(BreadcrumbCaret, {}) : null
@@ -7666,7 +7999,7 @@ function BreadcrumbSegment({
7666
7999
  isCurrent
7667
8000
  }) {
7668
8001
  const menuId = useId15();
7669
- const [open, setOpen] = useState14(false);
8002
+ const [open, setOpen] = useState17(false);
7670
8003
  const menuItems = item.menuItems ?? [];
7671
8004
  const showMenu = hasSegmentMenu(item) && !isCurrent;
7672
8005
  const canOpenMenu = showMenu && menuItems.length > 0;
@@ -7677,7 +8010,7 @@ function BreadcrumbSegment({
7677
8010
  return /* @__PURE__ */ jsx68("span", { className: "stn-breadcrumb__segment", "aria-current": "page", "aria-label": item.label, children: content });
7678
8011
  }
7679
8012
  if (canOpenMenu) {
7680
- return /* @__PURE__ */ jsxs49("span", { ref: rootRef, className: "stn-breadcrumb__segment-wrap", children: [
8013
+ return /* @__PURE__ */ jsxs50("span", { ref: rootRef, className: "stn-breadcrumb__segment-wrap", children: [
7681
8014
  /* @__PURE__ */ jsx68(
7682
8015
  "button",
7683
8016
  {
@@ -7724,7 +8057,7 @@ function BreadcrumbBack({
7724
8057
  href,
7725
8058
  onClick
7726
8059
  }) {
7727
- const content = /* @__PURE__ */ jsxs49(Fragment8, { children: [
8060
+ const content = /* @__PURE__ */ jsxs50(Fragment9, { children: [
7728
8061
  /* @__PURE__ */ jsx68(
7729
8062
  "span",
7730
8063
  {
@@ -7760,7 +8093,7 @@ function BreadcrumbCollapsed({
7760
8093
  items,
7761
8094
  menuId
7762
8095
  }) {
7763
- const [open, setOpen] = useState14(false);
8096
+ const [open, setOpen] = useState17(false);
7764
8097
  const rootRef = useDismissibleMenu(open, () => setOpen(false));
7765
8098
  const menuItems = items.map((item) => ({
7766
8099
  id: item.id,
@@ -7769,7 +8102,7 @@ function BreadcrumbCollapsed({
7769
8102
  onClick: item.onClick,
7770
8103
  current: item.current
7771
8104
  }));
7772
- return /* @__PURE__ */ jsxs49("li", { className: "stn-breadcrumb__item", ref: rootRef, children: [
8105
+ return /* @__PURE__ */ jsxs50("li", { className: "stn-breadcrumb__item", ref: rootRef, children: [
7773
8106
  /* @__PURE__ */ jsx68(
7774
8107
  "button",
7775
8108
  {
@@ -7832,21 +8165,21 @@ function StnBreadcrumb({
7832
8165
  {
7833
8166
  className: cn("stn-breadcrumb", size, variant === "chip" && "chip", className),
7834
8167
  "aria-label": "Breadcrumb",
7835
- children: /* @__PURE__ */ jsxs49("ol", { className: "stn-breadcrumb__list", children: [
8168
+ children: /* @__PURE__ */ jsxs50("ol", { className: "stn-breadcrumb__list", children: [
7836
8169
  currentItem ? /* @__PURE__ */ jsx68("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--back", children: /* @__PURE__ */ jsx68(BreadcrumbBack, { label: currentItem.label, href: backHref, onClick: backOnClick }) }) : null,
7837
- showHome ? /* @__PURE__ */ jsx68("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--home", children: /* @__PURE__ */ jsxs49("a", { className: "stn-breadcrumb__home", href: homeHref, onClick: onHomeClick, children: [
8170
+ showHome ? /* @__PURE__ */ jsx68("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--home", children: /* @__PURE__ */ jsxs50("a", { className: "stn-breadcrumb__home", href: homeHref, onClick: onHomeClick, children: [
7838
8171
  /* @__PURE__ */ jsx68(BreadcrumbIcon, { src: STN_BREADCRUMB_ICON_SRC.home }),
7839
8172
  /* @__PURE__ */ jsx68("span", { className: "blind", children: homeLabel })
7840
8173
  ] }) }) : null,
7841
- head.map((item, index) => /* @__PURE__ */ jsxs49(Fragment7, { children: [
8174
+ head.map((item, index) => /* @__PURE__ */ jsxs50(Fragment8, { children: [
7842
8175
  showHome || index > 0 ? /* @__PURE__ */ jsx68(BreadcrumbSeparator, {}) : null,
7843
8176
  renderTrailItem(item)
7844
8177
  ] }, item.id)),
7845
- hidden.length > 0 ? /* @__PURE__ */ jsxs49(Fragment8, { children: [
8178
+ hidden.length > 0 ? /* @__PURE__ */ jsxs50(Fragment9, { children: [
7846
8179
  /* @__PURE__ */ jsx68(BreadcrumbSeparator, {}),
7847
8180
  /* @__PURE__ */ jsx68(BreadcrumbCollapsed, { items: hidden, menuId })
7848
8181
  ] }) : null,
7849
- tail.map((item) => /* @__PURE__ */ jsxs49(Fragment7, { children: [
8182
+ tail.map((item) => /* @__PURE__ */ jsxs50(Fragment8, { children: [
7850
8183
  /* @__PURE__ */ jsx68(BreadcrumbSeparator, {}),
7851
8184
  renderTrailItem(item)
7852
8185
  ] }, item.id))
@@ -7856,9 +8189,9 @@ function StnBreadcrumb({
7856
8189
  }
7857
8190
 
7858
8191
  // src/components/StnHeaderTitle.tsx
7859
- import { useEffect as useEffect12, useState as useState15 } from "react";
8192
+ import { useEffect as useEffect12, useState as useState18 } from "react";
7860
8193
  import { STN_HEADER_TITLE_FRAME } from "@stn-uiux/pub-ui/data/stnHeaderTitle";
7861
- import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
8194
+ import { jsx as jsx69, jsxs as jsxs51 } from "react/jsx-runtime";
7862
8195
  var KO_WEEKDAY_SHORT = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
7863
8196
  var KO_WEEKDAY_LONG = [
7864
8197
  "\uC77C\uC694\uC77C",
@@ -7897,7 +8230,7 @@ function formatStnHeaderTitleTime(date, options) {
7897
8230
  }
7898
8231
  function HeaderTitleFrame({ preview = false }) {
7899
8232
  const frameClass = preview ? "stn-header-title__frame-preview" : "stn-header-title__frame";
7900
- return /* @__PURE__ */ jsxs50("div", { className: frameClass, "aria-hidden": "true", children: [
8233
+ return /* @__PURE__ */ jsxs51("div", { className: frameClass, "aria-hidden": "true", children: [
7901
8234
  /* @__PURE__ */ jsx69("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--outer", children: /* @__PURE__ */ jsx69(
7902
8235
  "img",
7903
8236
  {
@@ -7907,7 +8240,7 @@ function HeaderTitleFrame({ preview = false }) {
7907
8240
  draggable: false
7908
8241
  }
7909
8242
  ) }),
7910
- /* @__PURE__ */ jsxs50("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--inner", children: [
8243
+ /* @__PURE__ */ jsxs51("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--inner", children: [
7911
8244
  /* @__PURE__ */ jsx69(
7912
8245
  "img",
7913
8246
  {
@@ -7933,7 +8266,7 @@ function StnHeaderTitleFramePreview({ className }) {
7933
8266
  return /* @__PURE__ */ jsx69("div", { className: cn("stn-header-title__frame-only", className), children: /* @__PURE__ */ jsx69(HeaderTitleFrame, { preview: true }) });
7934
8267
  }
7935
8268
  function useLiveClock(enabled) {
7936
- const [now, setNow] = useState15(() => /* @__PURE__ */ new Date());
8269
+ const [now, setNow] = useState18(() => /* @__PURE__ */ new Date());
7937
8270
  useEffect12(() => {
7938
8271
  if (!enabled) return;
7939
8272
  const id = window.setInterval(() => setNow(/* @__PURE__ */ new Date()), 1e3);
@@ -7997,7 +8330,7 @@ function StnHeaderTitleClock({
7997
8330
  }) {
7998
8331
  const now = useLiveClock(live);
7999
8332
  if (children != null) {
8000
- return /* @__PURE__ */ jsxs50(
8333
+ return /* @__PURE__ */ jsxs51(
8001
8334
  "header",
8002
8335
  {
8003
8336
  className: cn(
@@ -8040,7 +8373,7 @@ function StnHeaderTitleClock({
8040
8373
  resolvedTime = formatStnHeaderTitleTime(now, { showSeconds });
8041
8374
  }
8042
8375
  }
8043
- return /* @__PURE__ */ jsxs50(
8376
+ return /* @__PURE__ */ jsxs51(
8044
8377
  "header",
8045
8378
  {
8046
8379
  className: cn(
@@ -8053,7 +8386,7 @@ function StnHeaderTitleClock({
8053
8386
  ...rest,
8054
8387
  children: [
8055
8388
  framed ? /* @__PURE__ */ jsx69(HeaderTitleFrame, {}) : null,
8056
- /* @__PURE__ */ jsxs50("div", { className: "stn-header-title__content", children: [
8389
+ /* @__PURE__ */ jsxs51("div", { className: "stn-header-title__content", children: [
8057
8390
  resolvedDate ? /* @__PURE__ */ jsx69("time", { className: "stn-header-title__date", dateTime: resolvedDate, children: resolvedDate }) : null,
8058
8391
  showWeekdayOnly ? /* @__PURE__ */ jsx69("span", { className: "stn-header-title__weekday", children: resolvedWeekday }) : null,
8059
8392
  resolvedTime ? /* @__PURE__ */ jsx69("span", { className: "stn-header-title__time", "aria-label": "\uD604\uC7AC \uC2DC\uAC01", children: resolvedTime }) : null
@@ -8073,7 +8406,7 @@ function StnHeaderTitleDual({
8073
8406
  ...rest
8074
8407
  }) {
8075
8408
  const resolvedMain = mainText ?? title ?? children;
8076
- return /* @__PURE__ */ jsxs50(
8409
+ return /* @__PURE__ */ jsxs51(
8077
8410
  "header",
8078
8411
  {
8079
8412
  className: cn(
@@ -8086,7 +8419,7 @@ function StnHeaderTitleDual({
8086
8419
  ...rest,
8087
8420
  children: [
8088
8421
  framed ? /* @__PURE__ */ jsx69(HeaderTitleFrame, {}) : null,
8089
- /* @__PURE__ */ jsxs50("div", { className: "stn-header-title__content", children: [
8422
+ /* @__PURE__ */ jsxs51("div", { className: "stn-header-title__content", children: [
8090
8423
  subText != null ? /* @__PURE__ */ jsx69("span", { className: "stn-header-title__sub-text", children: subText }) : null,
8091
8424
  resolvedMain != null ? typeof resolvedMain === "string" || typeof resolvedMain === "number" ? /* @__PURE__ */ jsx69("h1", { className: "stn-header-title__text", children: resolvedMain }) : resolvedMain : null
8092
8425
  ] })
@@ -8103,7 +8436,7 @@ function StnHeaderTitleText({
8103
8436
  ...rest
8104
8437
  }) {
8105
8438
  const resolved = title ?? children;
8106
- return /* @__PURE__ */ jsxs50(
8439
+ return /* @__PURE__ */ jsxs51(
8107
8440
  "header",
8108
8441
  {
8109
8442
  className: cn(
@@ -8141,10 +8474,10 @@ var StnHeaderTitle = Object.assign(StnHeaderTitleRoot, {
8141
8474
 
8142
8475
  // src/layouts/StnContainer.tsx
8143
8476
  import {
8144
- forwardRef as forwardRef38
8477
+ forwardRef as forwardRef39
8145
8478
  } from "react";
8146
8479
  import { jsx as jsx70 } from "react/jsx-runtime";
8147
- var StnContainer = forwardRef38(function StnContainer2({
8480
+ var StnContainer = forwardRef39(function StnContainer2({
8148
8481
  component,
8149
8482
  as,
8150
8483
  maxWidth = "lg",
@@ -8182,7 +8515,7 @@ var StnContainer = forwardRef38(function StnContainer2({
8182
8515
  });
8183
8516
 
8184
8517
  // src/layouts/StnGrid.tsx
8185
- import { forwardRef as forwardRef39 } from "react";
8518
+ import { forwardRef as forwardRef40 } from "react";
8186
8519
  import { jsx as jsx71 } from "react/jsx-runtime";
8187
8520
  var BREAKPOINTS2 = ["xs", "sm", "md", "lg", "xl"];
8188
8521
  var SPACING_CLASS = {
@@ -8249,7 +8582,7 @@ function sizeClasses(size) {
8249
8582
  }
8250
8583
  return classes;
8251
8584
  }
8252
- var StnGrid = forwardRef39(function StnGrid2({
8585
+ var StnGrid = forwardRef40(function StnGrid2({
8253
8586
  component,
8254
8587
  as,
8255
8588
  container = false,
@@ -8293,7 +8626,7 @@ var StnGrid = forwardRef39(function StnGrid2({
8293
8626
  });
8294
8627
 
8295
8628
  // src/layouts/StnLayerShell.tsx
8296
- import { jsx as jsx72, jsxs as jsxs51 } from "react/jsx-runtime";
8629
+ import { jsx as jsx72, jsxs as jsxs52 } from "react/jsx-runtime";
8297
8630
  function StnLayerShell({
8298
8631
  gnb,
8299
8632
  gnbSide = "left",
@@ -8314,7 +8647,7 @@ function StnLayerShell({
8314
8647
  const resolvedMainContent = layer1 ?? children;
8315
8648
  const resolvedModal = layer2;
8316
8649
  const isGnbRight = gnbSide === "right";
8317
- return /* @__PURE__ */ jsxs51(
8650
+ return /* @__PURE__ */ jsxs52(
8318
8651
  "div",
8319
8652
  {
8320
8653
  id: wrapId,
@@ -8324,7 +8657,7 @@ function StnLayerShell({
8324
8657
  children: [
8325
8658
  layer0,
8326
8659
  utilities ? /* @__PURE__ */ jsx72("div", { className: "stn-page-utilities", "data-stn-layer-role": "utility", children: utilities }) : null,
8327
- /* @__PURE__ */ jsxs51(
8660
+ /* @__PURE__ */ jsxs52(
8328
8661
  "main",
8329
8662
  {
8330
8663
  id: containerId,
@@ -8333,7 +8666,7 @@ function StnLayerShell({
8333
8666
  className: cn("stn-layer-1", scrollable && "scroll", containerClassName),
8334
8667
  children: [
8335
8668
  !isGnbRight && gnb,
8336
- /* @__PURE__ */ jsxs51("div", { className: "stn-layer-1__main", children: [
8669
+ /* @__PURE__ */ jsxs52("div", { className: "stn-layer-1__main", children: [
8337
8670
  header ? /* @__PURE__ */ jsx72("header", { className: "stn-layer-1__header", children: header }) : null,
8338
8671
  /* @__PURE__ */ jsx72("div", { className: cn("stn-layer-1__body", scrollable && "stn-scroll", contentClassName), children: resolvedMainContent })
8339
8672
  ] }),
@@ -8347,14 +8680,166 @@ function StnLayerShell({
8347
8680
  );
8348
8681
  }
8349
8682
 
8683
+ // src/layouts/StnListViewLayout.tsx
8684
+ import { jsx as jsx73, jsxs as jsxs53 } from "react/jsx-runtime";
8685
+ function StnListViewLayoutBody({
8686
+ search,
8687
+ sidebar,
8688
+ table,
8689
+ pagination,
8690
+ lnbSide = "left",
8691
+ children,
8692
+ className
8693
+ }) {
8694
+ const lnbClass = lnbSide === "right" ? "stn-page-scaffold__lnb lnb_box lnb_box_right" : "stn-page-scaffold__lnb lnb_box";
8695
+ const sidebarAside = sidebar ? /* @__PURE__ */ jsx73("aside", { className: lnbClass, children: sidebar }) : null;
8696
+ return /* @__PURE__ */ jsx73(
8697
+ StnContainer,
8698
+ {
8699
+ maxWidth: false,
8700
+ className: cn("stn-list-view-layout__body", className),
8701
+ children: /* @__PURE__ */ jsxs53(
8702
+ StnStack,
8703
+ {
8704
+ direction: "row",
8705
+ spacing: 2,
8706
+ className: "stn-list-view__main",
8707
+ children: [
8708
+ lnbSide === "left" ? sidebarAside : null,
8709
+ /* @__PURE__ */ jsxs53(
8710
+ StnStack,
8711
+ {
8712
+ direction: "column",
8713
+ spacing: 2,
8714
+ className: "stn-list-view__content-stack",
8715
+ children: [
8716
+ search ? /* @__PURE__ */ jsx73("div", { className: "stn-page-scaffold__search search_area", children: search }) : null,
8717
+ /* @__PURE__ */ jsx73(
8718
+ "div",
8719
+ {
8720
+ className: "stn-page-scaffold__content content_box",
8721
+ children: children ?? /* @__PURE__ */ jsxs53("div", { className: "stn-table stn-table--fill", children: [
8722
+ table,
8723
+ pagination
8724
+ ] })
8725
+ }
8726
+ )
8727
+ ]
8728
+ }
8729
+ ),
8730
+ lnbSide === "right" ? sidebarAside : null
8731
+ ]
8732
+ }
8733
+ )
8734
+ }
8735
+ );
8736
+ }
8737
+ function StnListViewLayoutRoot({
8738
+ bare: bareProp,
8739
+ noShell,
8740
+ title = "\uBAA9\uB85D \uC870\uD68C",
8741
+ header,
8742
+ search,
8743
+ sidebar,
8744
+ table,
8745
+ pagination,
8746
+ lnbSide = "left",
8747
+ children,
8748
+ className,
8749
+ ...rest
8750
+ }) {
8751
+ const bare = bareProp ?? noShell ?? false;
8752
+ const hasLnbClass = lnbSide === "right" ? "has_lnb_right" : "has_lnb";
8753
+ const body = /* @__PURE__ */ jsx73(
8754
+ StnListViewLayoutBody,
8755
+ {
8756
+ search,
8757
+ sidebar,
8758
+ table,
8759
+ pagination,
8760
+ lnbSide,
8761
+ className: bare ? className : void 0,
8762
+ children
8763
+ }
8764
+ );
8765
+ if (bare) {
8766
+ return body;
8767
+ }
8768
+ const renderedHeader = header === null ? null : header !== void 0 ? header : /* @__PURE__ */ jsx73("div", { className: "stn-layer-1__header", children: /* @__PURE__ */ jsx73(StnHeader, { variant: "page", children: /* @__PURE__ */ jsx73(StnHeader.Left, { children: /* @__PURE__ */ jsx73(StnHeaderPageTitle, { children: title }) }) }) });
8769
+ return /* @__PURE__ */ jsxs53("div", { className: cn("stn-list-view-layout", "stn-layer-1", className), ...rest, children: [
8770
+ renderedHeader,
8771
+ /* @__PURE__ */ jsx73(
8772
+ "div",
8773
+ {
8774
+ className: cn("stn-content-area", sidebar ? hasLnbClass : null, search ? "has_sch" : null),
8775
+ children: body
8776
+ }
8777
+ )
8778
+ ] });
8779
+ }
8780
+ function StnListViewLayoutHeader({ className, children, ...rest }) {
8781
+ return /* @__PURE__ */ jsx73("div", { className: cn("stn-layer-1__header", className), ...rest, children });
8782
+ }
8783
+ function StnListViewLayoutSearch({ className, children, ...rest }) {
8784
+ return /* @__PURE__ */ jsx73("div", { className: cn("search_area", className), ...rest, children });
8785
+ }
8786
+ function StnListViewLayoutSidebar({
8787
+ side = "left",
8788
+ className,
8789
+ children,
8790
+ ...rest
8791
+ }) {
8792
+ const lnbClass = side === "right" ? "lnb_box_right" : "lnb_box";
8793
+ return /* @__PURE__ */ jsx73("aside", { className: cn(lnbClass, className), ...rest, children });
8794
+ }
8795
+ function StnListViewLayoutContent({ className, children, ...rest }) {
8796
+ return /* @__PURE__ */ jsx73("div", { className: cn("content_box", className), ...rest, children });
8797
+ }
8798
+ function StnListViewLayoutTable({ className, children, ...rest }) {
8799
+ return /* @__PURE__ */ jsx73("div", { className: cn("stn-table", className), ...rest, children });
8800
+ }
8801
+ function StnListViewLayoutPagination({ className, children, ...rest }) {
8802
+ return /* @__PURE__ */ jsx73("div", { className: cn("stn-list-view-layout__pagination-wrap", className), ...rest, children });
8803
+ }
8804
+ var StnListViewLayout = Object.assign(StnListViewLayoutRoot, {
8805
+ Body: StnListViewLayoutBody,
8806
+ Header: StnListViewLayoutHeader,
8807
+ Search: StnListViewLayoutSearch,
8808
+ Sidebar: StnListViewLayoutSidebar,
8809
+ Content: StnListViewLayoutContent,
8810
+ Table: StnListViewLayoutTable,
8811
+ Pagination: StnListViewLayoutPagination
8812
+ });
8813
+
8814
+ // src/index.ts
8815
+ import {
8816
+ STN_LAYOUT_INTRO,
8817
+ STN_LAYOUT_LAYER_PAGE_TREE,
8818
+ STN_LAYOUT_LIST_VIEW_INTRO,
8819
+ STN_LAYOUT_LIST_VIEW_USAGE,
8820
+ STN_LAYOUT_MAP_DASHBOARD_INTRO,
8821
+ STN_LAYOUT_MAP_DASHBOARD_USAGE,
8822
+ STN_LAYER_SHELL_USAGE,
8823
+ applyLnbSideToModifiers,
8824
+ STN_LAYOUT_CONTENT_ROWS,
8825
+ STN_LAYOUT_REGION_ROWS,
8826
+ STN_LAYOUT_SHELL_USAGE,
8827
+ STN_LAYOUT_RECIPES,
8828
+ STN_LAYOUT_PLAYGROUND_TABS,
8829
+ STN_LAYOUT_WHEN_TO_USE,
8830
+ STN_LAYOUT_SCREEN_RECIPES,
8831
+ STN_LAYOUT_SLOT_USAGE,
8832
+ STN_LAYOUT_ALERT_CENTER_USAGE
8833
+ } from "@stn-uiux/pub-ui/data/stnLayout";
8834
+
8350
8835
  // src/patterns/dashboard/StnMapCanvas.tsx
8351
- import { jsx as jsx73 } from "react/jsx-runtime";
8836
+ import { jsx as jsx74 } from "react/jsx-runtime";
8352
8837
  function StnMapCanvas({
8353
8838
  children,
8354
8839
  className,
8355
8840
  ...rest
8356
8841
  }) {
8357
- return /* @__PURE__ */ jsx73(
8842
+ return /* @__PURE__ */ jsx74(
8358
8843
  "div",
8359
8844
  {
8360
8845
  className: cn("stn-map-canvas", className),
@@ -8366,7 +8851,7 @@ function StnMapCanvas({
8366
8851
  }
8367
8852
 
8368
8853
  // src/patterns/dashboard/StnDashboard.tsx
8369
- import { jsx as jsx74 } from "react/jsx-runtime";
8854
+ import { jsx as jsx75 } from "react/jsx-runtime";
8370
8855
  var fillStyle = {
8371
8856
  flex: "1 1 0%",
8372
8857
  minHeight: 0,
@@ -8385,7 +8870,7 @@ function StnDashboardRoot({
8385
8870
  }) {
8386
8871
  const isLeft = widgetPosition === "left";
8387
8872
  const isBoth = widgetPosition === "both";
8388
- return /* @__PURE__ */ jsx74(
8873
+ return /* @__PURE__ */ jsx75(
8389
8874
  "div",
8390
8875
  {
8391
8876
  className: cn(
@@ -8414,7 +8899,7 @@ function StnDashboardLeft({
8414
8899
  style,
8415
8900
  ...rest
8416
8901
  }) {
8417
- return /* @__PURE__ */ jsx74(
8902
+ return /* @__PURE__ */ jsx75(
8418
8903
  "div",
8419
8904
  {
8420
8905
  className: cn("stn-dashboard__left", className),
@@ -8440,7 +8925,7 @@ function StnDashboardRight({
8440
8925
  style,
8441
8926
  ...rest
8442
8927
  }) {
8443
- return /* @__PURE__ */ jsx74(
8928
+ return /* @__PURE__ */ jsx75(
8444
8929
  "div",
8445
8930
  {
8446
8931
  className: cn("stn-dashboard__right", className),
@@ -8468,7 +8953,7 @@ function StnDashboardTopRight({
8468
8953
  className,
8469
8954
  ...rest
8470
8955
  }) {
8471
- return /* @__PURE__ */ jsx74(
8956
+ return /* @__PURE__ */ jsx75(
8472
8957
  "div",
8473
8958
  {
8474
8959
  className: cn("stn-dashboard__top-right", className),
@@ -8487,9 +8972,9 @@ var StnDashboard = Object.assign(StnDashboardRoot, {
8487
8972
  });
8488
8973
 
8489
8974
  // src/patterns/scaffold/StnPageScaffold.tsx
8490
- import { jsx as jsx75, jsxs as jsxs52 } from "react/jsx-runtime";
8975
+ import { jsx as jsx76, jsxs as jsxs54 } from "react/jsx-runtime";
8491
8976
  function StnPageScaffoldRoot({ children, className, ...rest }) {
8492
- return /* @__PURE__ */ jsx75(
8977
+ return /* @__PURE__ */ jsx76(
8493
8978
  "div",
8494
8979
  {
8495
8980
  className: cn("stn-page-scaffold", className),
@@ -8506,9 +8991,9 @@ function StnPageScaffoldRegion({
8506
8991
  className,
8507
8992
  ...rest
8508
8993
  }) {
8509
- return /* @__PURE__ */ jsxs52("div", { className: cn("stn-page-scaffold__region", className), "data-stn-page-scaffold": "region", ...rest, children: [
8510
- /* @__PURE__ */ jsx75("span", { className: "stn-page-scaffold__region-label", children: label }),
8511
- hint ? /* @__PURE__ */ jsx75("span", { className: "stn-page-scaffold__region-hint", children: hint }) : null,
8994
+ return /* @__PURE__ */ jsxs54("div", { className: cn("stn-page-scaffold__region", className), "data-stn-page-scaffold": "region", ...rest, children: [
8995
+ /* @__PURE__ */ jsx76("span", { className: "stn-page-scaffold__region-label", children: label }),
8996
+ hint ? /* @__PURE__ */ jsx76("span", { className: "stn-page-scaffold__region-hint", children: hint }) : null,
8512
8997
  children
8513
8998
  ] });
8514
8999
  }
@@ -8519,7 +9004,7 @@ function StnPageScaffoldMapPlaceholder({
8519
9004
  children,
8520
9005
  ...rest
8521
9006
  }) {
8522
- return /* @__PURE__ */ jsx75("div", { className: "stn-widget shell-canvas stn-map-canvas", "data-stn-dashboard": "canvas", children: /* @__PURE__ */ jsxs52(
9007
+ return /* @__PURE__ */ jsx76("div", { className: "stn-widget shell-canvas stn-map-canvas", "data-stn-dashboard": "canvas", children: /* @__PURE__ */ jsxs54(
8523
9008
  "div",
8524
9009
  {
8525
9010
  className: cn("stn-page-scaffold__canvas-placeholder", className),
@@ -8527,8 +9012,8 @@ function StnPageScaffoldMapPlaceholder({
8527
9012
  role: "status",
8528
9013
  ...rest,
8529
9014
  children: [
8530
- /* @__PURE__ */ jsx75("p", { className: "stn-page-scaffold__canvas-placeholder-title", children: message }),
8531
- note ? /* @__PURE__ */ jsx75("p", { className: "stn-page-scaffold__canvas-placeholder-note", children: note }) : null,
9015
+ /* @__PURE__ */ jsx76("p", { className: "stn-page-scaffold__canvas-placeholder-title", children: message }),
9016
+ note ? /* @__PURE__ */ jsx76("p", { className: "stn-page-scaffold__canvas-placeholder-note", children: note }) : null,
8532
9017
  children
8533
9018
  ]
8534
9019
  }
@@ -8539,7 +9024,7 @@ function StnPageScaffoldMapCanvas({
8539
9024
  children,
8540
9025
  ...rest
8541
9026
  }) {
8542
- return /* @__PURE__ */ jsx75(
9027
+ return /* @__PURE__ */ jsx76(
8543
9028
  "div",
8544
9029
  {
8545
9030
  className: cn("stn-widget", "shell-canvas", "stn-map-canvas", "stn-page-scaffold__canvas", className),
@@ -8552,7 +9037,7 @@ function StnPageScaffoldMapCanvas({
8552
9037
  }
8553
9038
  function StnPageScaffoldLayer({ label, hint, children, className, ...layerProps }) {
8554
9039
  const labelText = label ? hint ? `${label} \xB7 ${hint}` : label : void 0;
8555
- return /* @__PURE__ */ jsx75(
9040
+ return /* @__PURE__ */ jsx76(
8556
9041
  StnLayer2,
8557
9042
  {
8558
9043
  className: cn(
@@ -8595,16 +9080,47 @@ function ListPageScaffold({
8595
9080
  ...shellProps
8596
9081
  }) {
8597
9082
  const lnbClass = listPageLnbClass(lnbSide);
8598
- const lnbAside = showLnb ? /* @__PURE__ */ jsx75("aside", { className: lnbClass, children: lnb ?? /* @__PURE__ */ jsx75(StnPageScaffold.Region, { label: "LNB", hint: lnbHint }) }) : null;
9083
+ const lnbAside = showLnb ? /* @__PURE__ */ jsx76("aside", { className: lnbClass, children: lnb ?? /* @__PURE__ */ jsx76(StnPageScaffold.Region, { label: "LNB", hint: lnbHint }) }) : null;
8599
9084
  const resolvedContent = layer1 ?? children;
8600
- const body = /* @__PURE__ */ jsxs52(StnPageScaffold, { children: [
8601
- lnbSide === "left" ? lnbAside : null,
8602
- showSearch ? /* @__PURE__ */ jsx75("div", { className: "stn-page-scaffold__search search_area", children: search ?? /* @__PURE__ */ jsx75(StnPageScaffold.Region, { label: "Search", hint: searchHint }) }) : null,
8603
- /* @__PURE__ */ jsx75("div", { className: cn("stn-page-scaffold__content content_box", scrollable && "is-scrollable"), children: resolvedContent ?? /* @__PURE__ */ jsx75("div", { className: "stn-table stn-table--fill", children: /* @__PURE__ */ jsx75(StnPageScaffold.Region, { label: "Table", hint: tableHint }) }) }),
8604
- lnbSide === "right" ? lnbAside : null
8605
- ] });
8606
- const resolvedHeader = header === null ? void 0 : header ?? /* @__PURE__ */ jsx75(StnHeader, { variant: "page", children: /* @__PURE__ */ jsx75(StnHeader.Left, { children: /* @__PURE__ */ jsx75(StnHeaderPageTitle, { children: title }) }) });
8607
- return /* @__PURE__ */ jsx75(
9085
+ const body = /* @__PURE__ */ jsx76(
9086
+ StnContainer,
9087
+ {
9088
+ maxWidth: false,
9089
+ className: "stn-list-page-container",
9090
+ children: /* @__PURE__ */ jsxs54(
9091
+ StnStack,
9092
+ {
9093
+ direction: "row",
9094
+ spacing: 2,
9095
+ className: "stn-list-page-main",
9096
+ children: [
9097
+ lnbSide === "left" ? lnbAside : null,
9098
+ /* @__PURE__ */ jsxs54(
9099
+ StnStack,
9100
+ {
9101
+ direction: "column",
9102
+ spacing: 2,
9103
+ className: "stn-list-page-content-stack",
9104
+ children: [
9105
+ showSearch ? /* @__PURE__ */ jsx76("div", { className: "stn-page-scaffold__search search_area", children: search ?? /* @__PURE__ */ jsx76(StnPageScaffold.Region, { label: "Search", hint: searchHint }) }) : null,
9106
+ /* @__PURE__ */ jsx76(
9107
+ "div",
9108
+ {
9109
+ className: cn("stn-page-scaffold__content content_box", scrollable && "is-scrollable"),
9110
+ children: resolvedContent ?? /* @__PURE__ */ jsx76("div", { className: "stn-table stn-table--fill", children: /* @__PURE__ */ jsx76(StnPageScaffold.Region, { label: "Table", hint: tableHint }) })
9111
+ }
9112
+ )
9113
+ ]
9114
+ }
9115
+ ),
9116
+ lnbSide === "right" ? lnbAside : null
9117
+ ]
9118
+ }
9119
+ )
9120
+ }
9121
+ );
9122
+ const resolvedHeader = header === null ? void 0 : header ?? /* @__PURE__ */ jsx76(StnHeader, { variant: "page", children: /* @__PURE__ */ jsx76(StnHeader.Left, { children: /* @__PURE__ */ jsx76(StnHeaderPageTitle, { children: title }) }) });
9123
+ return /* @__PURE__ */ jsx76(
8608
9124
  StnLayerShell,
8609
9125
  {
8610
9126
  gnb,
@@ -8645,25 +9161,25 @@ function DashboardPageScaffold({
8645
9161
  const isLeft = widgetPosition === "left";
8646
9162
  const isBoth = widgetPosition === "both";
8647
9163
  const isNone = widgetPosition === "none" || !showRightRegion;
8648
- const mapColumn = /* @__PURE__ */ jsxs52(StnDashboard.Left, { children: [
8649
- /* @__PURE__ */ jsx75(StnPageScaffold.MapPlaceholder, { message: finalMapMessage, note: finalMapNote }),
9164
+ const mapColumn = /* @__PURE__ */ jsxs54(StnDashboard.Left, { children: [
9165
+ /* @__PURE__ */ jsx76(StnPageScaffold.MapPlaceholder, { message: finalMapMessage, note: finalMapNote }),
8650
9166
  faultPanel
8651
9167
  ] });
8652
- const rightWidgets = right ?? /* @__PURE__ */ jsx75(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
8653
- const leftWidgets = left ?? right ?? /* @__PURE__ */ jsx75(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC88C\uCE21 \uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
8654
- const dashboardGrid = bodyEmpty ? /* @__PURE__ */ jsx75(StnDashboard, { empty: true, widgetPosition, "data-stn-page-scaffold": "dashboard-empty" }) : isBoth ? /* @__PURE__ */ jsxs52(StnDashboard, { widgetPosition: "both", children: [
8655
- /* @__PURE__ */ jsx75(StnDashboard.Right, { children: leftWidgets }),
9168
+ const rightWidgets = right ?? /* @__PURE__ */ jsx76(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
9169
+ const leftWidgets = left ?? right ?? /* @__PURE__ */ jsx76(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC88C\uCE21 \uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
9170
+ const dashboardGrid = bodyEmpty ? /* @__PURE__ */ jsx76(StnDashboard, { empty: true, widgetPosition, "data-stn-page-scaffold": "dashboard-empty" }) : isBoth ? /* @__PURE__ */ jsxs54(StnDashboard, { widgetPosition: "both", children: [
9171
+ /* @__PURE__ */ jsx76(StnDashboard.Right, { children: leftWidgets }),
8656
9172
  mapColumn,
8657
- /* @__PURE__ */ jsx75(StnDashboard.Right, { children: rightWidgets })
8658
- ] }) : isLeft ? /* @__PURE__ */ jsxs52(StnDashboard, { widgetPosition: "left", children: [
8659
- /* @__PURE__ */ jsx75(StnDashboard.Right, { children: leftWidgets }),
9173
+ /* @__PURE__ */ jsx76(StnDashboard.Right, { children: rightWidgets })
9174
+ ] }) : isLeft ? /* @__PURE__ */ jsxs54(StnDashboard, { widgetPosition: "left", children: [
9175
+ /* @__PURE__ */ jsx76(StnDashboard.Right, { children: leftWidgets }),
8660
9176
  mapColumn
8661
- ] }) : /* @__PURE__ */ jsxs52(StnDashboard, { widgetPosition: isNone ? "none" : "right", children: [
9177
+ ] }) : /* @__PURE__ */ jsxs54(StnDashboard, { widgetPosition: isNone ? "none" : "right", children: [
8662
9178
  mapColumn,
8663
- !isNone ? /* @__PURE__ */ jsx75(StnDashboard.Right, { children: rightWidgets }) : null
9179
+ !isNone ? /* @__PURE__ */ jsx76(StnDashboard.Right, { children: rightWidgets }) : null
8664
9180
  ] });
8665
9181
  const contentNode = children ?? dashboardGrid;
8666
- return /* @__PURE__ */ jsx75(
9182
+ return /* @__PURE__ */ jsx76(
8667
9183
  StnLayerShell,
8668
9184
  {
8669
9185
  gnb,
@@ -8672,7 +9188,7 @@ function DashboardPageScaffold({
8672
9188
  layer0,
8673
9189
  layer2,
8674
9190
  ...shellProps,
8675
- children: /* @__PURE__ */ jsx75(
9191
+ children: /* @__PURE__ */ jsx76(
8676
9192
  StnContainer,
8677
9193
  {
8678
9194
  maxWidth: false,
@@ -8685,135 +9201,15 @@ function DashboardPageScaffold({
8685
9201
  );
8686
9202
  }
8687
9203
 
8688
- // src/layouts/StnListViewLayout.tsx
8689
- import { jsx as jsx76, jsxs as jsxs53 } from "react/jsx-runtime";
8690
- function StnListViewLayoutBody({
8691
- search,
8692
- sidebar,
8693
- table,
8694
- pagination,
8695
- lnbSide = "left",
8696
- children,
8697
- className
8698
- }) {
8699
- const lnbClass = lnbSide === "right" ? "stn-page-scaffold__lnb lnb_box lnb_box_right" : "stn-page-scaffold__lnb lnb_box";
8700
- return /* @__PURE__ */ jsxs53(StnPageScaffold, { className: cn("stn-list-view-layout__body", className), children: [
8701
- lnbSide === "left" && sidebar ? /* @__PURE__ */ jsx76("aside", { className: lnbClass, children: sidebar }) : null,
8702
- search ? /* @__PURE__ */ jsx76("div", { className: "stn-page-scaffold__search search_area", children: search }) : null,
8703
- /* @__PURE__ */ jsx76("div", { className: "stn-page-scaffold__content content_box", children: children ?? /* @__PURE__ */ jsxs53("div", { className: "stn-table stn-table--fill", children: [
8704
- table,
8705
- pagination
8706
- ] }) }),
8707
- lnbSide === "right" && sidebar ? /* @__PURE__ */ jsx76("aside", { className: lnbClass, children: sidebar }) : null
8708
- ] });
8709
- }
8710
- function StnListViewLayoutRoot({
8711
- bare: bareProp,
8712
- noShell,
8713
- title = "\uBAA9\uB85D \uC870\uD68C",
8714
- header,
8715
- search,
8716
- sidebar,
8717
- table,
8718
- pagination,
8719
- lnbSide = "left",
8720
- children,
8721
- className,
8722
- ...rest
8723
- }) {
8724
- const bare = bareProp ?? noShell ?? false;
8725
- const hasLnbClass = lnbSide === "right" ? "has_lnb_right" : "has_lnb";
8726
- const body = /* @__PURE__ */ jsx76(
8727
- StnListViewLayoutBody,
8728
- {
8729
- search,
8730
- sidebar,
8731
- table,
8732
- pagination,
8733
- lnbSide,
8734
- className: bare ? className : void 0,
8735
- children
8736
- }
8737
- );
8738
- if (bare) {
8739
- return body;
8740
- }
8741
- const renderedHeader = header === null ? null : header !== void 0 ? header : /* @__PURE__ */ jsx76("div", { className: "stn-layer-1__header", children: /* @__PURE__ */ jsx76(StnHeader, { variant: "page", children: /* @__PURE__ */ jsx76(StnHeader.Left, { children: /* @__PURE__ */ jsx76(StnHeaderPageTitle, { children: title }) }) }) });
8742
- return /* @__PURE__ */ jsxs53("div", { className: cn("stn-list-view-layout", "stn-layer-1", className), ...rest, children: [
8743
- renderedHeader,
8744
- /* @__PURE__ */ jsx76(
8745
- "div",
8746
- {
8747
- className: cn("stn-content-area", sidebar ? hasLnbClass : null, search ? "has_sch" : null),
8748
- children: body
8749
- }
8750
- )
8751
- ] });
8752
- }
8753
- function StnListViewLayoutHeader({ className, children, ...rest }) {
8754
- return /* @__PURE__ */ jsx76("div", { className: cn("stn-layer-1__header", className), ...rest, children });
8755
- }
8756
- function StnListViewLayoutSearch({ className, children, ...rest }) {
8757
- return /* @__PURE__ */ jsx76("div", { className: cn("search_area", className), ...rest, children });
8758
- }
8759
- function StnListViewLayoutSidebar({
8760
- side = "left",
8761
- className,
8762
- children,
8763
- ...rest
8764
- }) {
8765
- const lnbClass = side === "right" ? "lnb_box_right" : "lnb_box";
8766
- return /* @__PURE__ */ jsx76("aside", { className: cn(lnbClass, className), ...rest, children });
8767
- }
8768
- function StnListViewLayoutContent({ className, children, ...rest }) {
8769
- return /* @__PURE__ */ jsx76("div", { className: cn("content_box", className), ...rest, children });
8770
- }
8771
- function StnListViewLayoutTable({ className, children, ...rest }) {
8772
- return /* @__PURE__ */ jsx76("div", { className: cn("stn-table", className), ...rest, children });
8773
- }
8774
- function StnListViewLayoutPagination({ className, children, ...rest }) {
8775
- return /* @__PURE__ */ jsx76("div", { className: cn("stn-list-view-layout__pagination-wrap", className), ...rest, children });
8776
- }
8777
- var StnListViewLayout = Object.assign(StnListViewLayoutRoot, {
8778
- Body: StnListViewLayoutBody,
8779
- Header: StnListViewLayoutHeader,
8780
- Search: StnListViewLayoutSearch,
8781
- Sidebar: StnListViewLayoutSidebar,
8782
- Content: StnListViewLayoutContent,
8783
- Table: StnListViewLayoutTable,
8784
- Pagination: StnListViewLayoutPagination
8785
- });
8786
-
8787
- // src/index.ts
8788
- import {
8789
- STN_LAYOUT_INTRO,
8790
- STN_LAYOUT_LAYER_PAGE_TREE,
8791
- STN_LAYOUT_LIST_VIEW_INTRO,
8792
- STN_LAYOUT_LIST_VIEW_USAGE,
8793
- STN_LAYOUT_MAP_DASHBOARD_INTRO,
8794
- STN_LAYOUT_MAP_DASHBOARD_USAGE,
8795
- STN_LAYER_SHELL_USAGE,
8796
- applyLnbSideToModifiers,
8797
- STN_LAYOUT_CONTENT_ROWS,
8798
- STN_LAYOUT_REGION_ROWS,
8799
- STN_LAYOUT_SHELL_USAGE,
8800
- STN_LAYOUT_RECIPES,
8801
- STN_LAYOUT_PLAYGROUND_TABS,
8802
- STN_LAYOUT_WHEN_TO_USE,
8803
- STN_LAYOUT_SCREEN_RECIPES,
8804
- STN_LAYOUT_SLOT_USAGE,
8805
- STN_LAYOUT_ALERT_CENTER_USAGE
8806
- } from "@stn-uiux/pub-ui/data/stnLayout";
8807
-
8808
9204
  // src/patterns/scaffold/AlertCenterPageScaffold.tsx
8809
- import { useMemo as useMemo5, useState as useState16 } from "react";
9205
+ import { useMemo as useMemo5, useState as useState19 } from "react";
8810
9206
  import {
8811
9207
  STN_ALERT_CENTER_DEMO_ALERTS,
8812
9208
  STN_ALERT_CENTER_DEMO_DEPLOY,
8813
9209
  STN_ALERT_CENTER_DEMO_WORK
8814
9210
  } from "@stn-uiux/pub-ui/data/stnAlertCenter";
8815
9211
  import { systemIconSrc } from "@stn-uiux/pub-ui/data/stnSystemIcons";
8816
- import { Fragment as Fragment9, jsx as jsx77, jsxs as jsxs54 } from "react/jsx-runtime";
9212
+ import { Fragment as Fragment10, jsx as jsx77, jsxs as jsxs55 } from "react/jsx-runtime";
8817
9213
  function defaultTopologyHeader(_clock) {
8818
9214
  return /* @__PURE__ */ jsx77(StnHeader, { variant: "widget" });
8819
9215
  }
@@ -8832,7 +9228,7 @@ function AlertCenterPageScaffold({
8832
9228
  defaultGnbOpen = true,
8833
9229
  ...shellProps
8834
9230
  }) {
8835
- const [gnbOpen, setGnbOpen] = useState16(defaultGnbOpen);
9231
+ const [gnbOpen, setGnbOpen] = useState19(defaultGnbOpen);
8836
9232
  const panel = useMemo5(
8837
9233
  () => gnbAlertPanel ?? /* @__PURE__ */ jsx77(
8838
9234
  StnAlertCenterPanel,
@@ -8845,24 +9241,24 @@ function AlertCenterPageScaffold({
8845
9241
  [gnbAlertPanel]
8846
9242
  );
8847
9243
  const sideNav = useMemo5(
8848
- () => gnbProp ?? /* @__PURE__ */ jsxs54(Fragment9, { children: [
8849
- /* @__PURE__ */ jsxs54(
9244
+ () => gnbProp ?? /* @__PURE__ */ jsxs55(Fragment10, { children: [
9245
+ /* @__PURE__ */ jsxs55(
8850
9246
  StnSideNavigation,
8851
9247
  {
8852
9248
  collapsed: !gnbOpen,
8853
9249
  onCollapseChange: (col) => setGnbOpen(!col),
8854
9250
  children: [
8855
- /* @__PURE__ */ jsxs54(StnSideNavigation.Header, { children: [
9251
+ /* @__PURE__ */ jsxs55(StnSideNavigation.Header, { children: [
8856
9252
  /* @__PURE__ */ jsx77(StnSideNavigation.Logo, {}),
8857
9253
  /* @__PURE__ */ jsx77(StnSideNavigation.Toggle, {})
8858
9254
  ] }),
8859
- /* @__PURE__ */ jsxs54(StnSideNavigation.Menu, { children: [
9255
+ /* @__PURE__ */ jsxs55(StnSideNavigation.Menu, { children: [
8860
9256
  /* @__PURE__ */ jsx77(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/layout-grid"), label: "\uBA54\uC778 \uB300\uC2DC\uBCF4\uB4DC", active: true }),
8861
9257
  /* @__PURE__ */ jsx77(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/server_2"), label: "\uC11C\uBC84 \uBAA8\uB2C8\uD130\uB9C1" }),
8862
9258
  /* @__PURE__ */ jsx77(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/activity"), label: "\uB124\uD2B8\uC6CC\uD06C \uBD84\uC11D" })
8863
9259
  ] }),
8864
9260
  /* @__PURE__ */ jsx77(StnSideNavigation.Spacer, {}),
8865
- /* @__PURE__ */ jsxs54(StnSideNavigation.Footer, { curved: true, children: [
9261
+ /* @__PURE__ */ jsxs55(StnSideNavigation.Footer, { curved: true, children: [
8866
9262
  /* @__PURE__ */ jsx77(StnSideNavigation.Watermark, {}),
8867
9263
  /* @__PURE__ */ jsx77(
8868
9264
  StnSideNavigation.Item,
@@ -8900,8 +9296,8 @@ function AlertCenterPageScaffold({
8900
9296
  }
8901
9297
 
8902
9298
  // src/patterns/scaffold/LoginPageScaffold.tsx
8903
- import { useState as useState17 } from "react";
8904
- import { jsx as jsx78, jsxs as jsxs55 } from "react/jsx-runtime";
9299
+ import { useState as useState20 } from "react";
9300
+ import { jsx as jsx78, jsxs as jsxs56 } from "react/jsx-runtime";
8905
9301
  var LOGIN_TABS = [
8906
9302
  { value: "normal", label: "\uC77C\uBC18 \uB85C\uADF8\uC778" },
8907
9303
  { value: "social", label: "\uC18C\uC15C \uB85C\uADF8\uC778" }
@@ -8912,14 +9308,14 @@ function DefaultLoginForm({
8912
9308
  signUpHref = "#",
8913
9309
  recoverHref = "#"
8914
9310
  }) {
8915
- const [mode, setMode] = useState17("normal");
8916
- const [userId, setUserId] = useState17("");
8917
- const [password, setPassword] = useState17("");
9311
+ const [mode, setMode] = useState20("normal");
9312
+ const [userId, setUserId] = useState20("");
9313
+ const [password, setPassword] = useState20("");
8918
9314
  function handleSubmit(e) {
8919
9315
  e.preventDefault();
8920
9316
  onLogin?.(userId, password);
8921
9317
  }
8922
- return /* @__PURE__ */ jsxs55(StnLoginFormStack, { onSubmit: handleSubmit, children: [
9318
+ return /* @__PURE__ */ jsxs56(StnLoginFormStack, { onSubmit: handleSubmit, children: [
8923
9319
  /* @__PURE__ */ jsx78(
8924
9320
  StnSegmented,
8925
9321
  {
@@ -8929,7 +9325,7 @@ function DefaultLoginForm({
8929
9325
  options: LOGIN_TABS
8930
9326
  }
8931
9327
  ),
8932
- mode === "normal" ? /* @__PURE__ */ jsxs55(StnLoginFormFields, { children: [
9328
+ mode === "normal" ? /* @__PURE__ */ jsxs56(StnLoginFormFields, { children: [
8933
9329
  /* @__PURE__ */ jsx78(
8934
9330
  StnLoginTextField,
8935
9331
  {
@@ -8957,7 +9353,7 @@ function DefaultLoginForm({
8957
9353
  )
8958
9354
  ] }) : socialContent ?? /* @__PURE__ */ jsx78(StnLoginPlaceholder, {}),
8959
9355
  /* @__PURE__ */ jsx78(StnButton, { type: "submit", size: "xl", fullWidth: true, children: "\uB85C\uADF8\uC778" }),
8960
- /* @__PURE__ */ jsxs55(StnLoginFormLinks, { children: [
9356
+ /* @__PURE__ */ jsxs56(StnLoginFormLinks, { children: [
8961
9357
  /* @__PURE__ */ jsx78("a", { href: signUpHref, children: "\uD68C\uC6D0\uAC00\uC785" }),
8962
9358
  /* @__PURE__ */ jsx78("a", { href: recoverHref, children: "\uC544\uC774\uB514 / \uBE44\uBC00\uBC88\uD638 \uCC3E\uAE30" })
8963
9359
  ] })
@@ -8978,7 +9374,7 @@ function DefaultLoginCard({
8978
9374
  {
8979
9375
  glow,
8980
9376
  variant,
8981
- brand: /* @__PURE__ */ jsxs55(StnLoginBrandStack, { children: [
9377
+ brand: /* @__PURE__ */ jsxs56(StnLoginBrandStack, { children: [
8982
9378
  logo ?? /* @__PURE__ */ jsx78(StnLogo, { variant: "vertical", size: "xl" }),
8983
9379
  /* @__PURE__ */ jsx78("p", { className: "stn-login-card__caption", children: productCaption })
8984
9380
  ] }),
@@ -9022,7 +9418,7 @@ function LoginPageScaffold({
9022
9418
  recoverHref
9023
9419
  }
9024
9420
  );
9025
- return /* @__PURE__ */ jsxs55(
9421
+ return /* @__PURE__ */ jsxs56(
9026
9422
  "div",
9027
9423
  {
9028
9424
  className: cn("stn-wrap stn-page--login", wrapClassName),
@@ -9059,7 +9455,7 @@ import {
9059
9455
 
9060
9456
  // src/patterns/toolbar/StnFloatingToolbar.tsx
9061
9457
  import React4 from "react";
9062
- import { jsx as jsx79, jsxs as jsxs56 } from "react/jsx-runtime";
9458
+ import { jsx as jsx79, jsxs as jsxs57 } from "react/jsx-runtime";
9063
9459
  var DEFAULT_MAP_MODES = [
9064
9460
  { value: "sphere", label: "\uAD6C\uBA74" },
9065
9461
  { value: "plane", label: "\uD3C9\uBA74" },
@@ -9102,7 +9498,7 @@ var StnMapToolbar = React4.forwardRef(
9102
9498
  children,
9103
9499
  ...restProps
9104
9500
  }, ref) => {
9105
- return /* @__PURE__ */ jsxs56(
9501
+ return /* @__PURE__ */ jsxs57(
9106
9502
  StnFloatingToolbar,
9107
9503
  {
9108
9504
  ref,
@@ -9129,7 +9525,7 @@ var StnMapToolbar = React4.forwardRef(
9129
9525
  variant: buttonVariant,
9130
9526
  size: "md",
9131
9527
  shape: "square",
9132
- icon: /* @__PURE__ */ jsxs56("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9528
+ icon: /* @__PURE__ */ jsxs57("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9133
9529
  /* @__PURE__ */ jsx79("path", { d: "M3.06006 13C3.30547 15.1939 4.34865 17.221 5.9912 18.696C7.63374 20.1709 9.76108 20.9907 11.9686 20.9994C14.1762 21.0081 16.3099 20.2052 17.9641 18.7434C19.6183 17.2815 20.6775 15.2627 20.9403 13.0708C21.2031 10.879 20.6511 8.66696 19.3894 6.85551C18.1276 5.04406 16.2441 3.75951 14.0971 3.24618C11.95 2.73284 9.68922 3.02652 7.74457 4.07135C5.79993 5.11619 4.30712 6.83931 3.55006 8.913" }),
9134
9530
  /* @__PURE__ */ jsx79("path", { d: "M3 4.00098V9.00098H8" }),
9135
9531
  /* @__PURE__ */ jsx79("circle", { cx: "12", cy: "12", r: "1", fill: "currentColor" })
@@ -9145,7 +9541,7 @@ var StnMapToolbar = React4.forwardRef(
9145
9541
  variant: buttonVariant,
9146
9542
  size: "md",
9147
9543
  shape: "square",
9148
- icon: /* @__PURE__ */ jsxs56("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9544
+ icon: /* @__PURE__ */ jsxs57("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9149
9545
  /* @__PURE__ */ jsx79("path", { d: "M16 4H20V8" }),
9150
9546
  /* @__PURE__ */ jsx79("path", { d: "M14 10L20 4" }),
9151
9547
  /* @__PURE__ */ jsx79("path", { d: "M8 20H4V16" }),
@@ -9162,7 +9558,7 @@ var StnMapToolbar = React4.forwardRef(
9162
9558
  variant: buttonVariant,
9163
9559
  size: "md",
9164
9560
  shape: "square",
9165
- icon: /* @__PURE__ */ jsxs56("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9561
+ icon: /* @__PURE__ */ jsxs57("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9166
9562
  /* @__PURE__ */ jsx79("path", { d: "M12 5V19" }),
9167
9563
  /* @__PURE__ */ jsx79("path", { d: "M5 12H19" })
9168
9564
  ] }),
@@ -9189,7 +9585,7 @@ var StnMapToolbar = React4.forwardRef(
9189
9585
  variant: buttonVariant,
9190
9586
  size: "md",
9191
9587
  shape: "square",
9192
- icon: /* @__PURE__ */ jsxs56("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9588
+ icon: /* @__PURE__ */ jsxs57("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.6", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [
9193
9589
  /* @__PURE__ */ jsx79("path", { d: "M20 11C19.7554 9.24023 18.9391 7.60967 17.6766 6.35951C16.4142 5.10934 14.7758 4.30893 13.0137 4.08156C11.2516 3.8542 9.46362 4.21249 7.9252 5.10126C6.38678 5.99002 5.18325 7.35995 4.5 9.00001M4 5.00001V9.00001H8" }),
9194
9590
  /* @__PURE__ */ jsx79("path", { d: "M4 13C4.24456 14.7598 5.06093 16.3903 6.32336 17.6405C7.58579 18.8907 9.22424 19.6911 10.9863 19.9184C12.7484 20.1458 14.5364 19.7875 16.0748 18.8988C17.6132 18.01 18.8168 16.6401 19.5 15M20 19V15H16" })
9195
9591
  ] }),
@@ -9443,8 +9839,12 @@ export {
9443
9839
  StnSideNavigation,
9444
9840
  StnSlider,
9445
9841
  StnStack,
9842
+ StnStatus,
9843
+ StnStatusDot,
9844
+ StnStatusDotGroup,
9845
+ StnStatusFlow,
9846
+ StnStatusSwitch,
9446
9847
  StnSwitch,
9447
- StnSystemChip,
9448
9848
  StnTable,
9449
9849
  StnTableBody,
9450
9850
  StnTableGrid,