@stn-uiux/pub-ui-react 0.1.80 → 0.1.82

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
@@ -972,6 +972,7 @@ var StnModal = forwardRef6(function StnModal2({
972
972
  bodyClassName,
973
973
  portal = true,
974
974
  closeOnScrimClick = true,
975
+ showClose = true,
975
976
  dim = true,
976
977
  role = "dialog",
977
978
  ...rest
@@ -1004,7 +1005,7 @@ var StnModal = forwardRef6(function StnModal2({
1004
1005
  ] }),
1005
1006
  subtitle ? /* @__PURE__ */ jsx9("p", { className: "stn-pop__subtitle", children: subtitle }) : null
1006
1007
  ] }),
1007
- onClose ? /* @__PURE__ */ jsx9(
1008
+ showClose && onClose ? /* @__PURE__ */ jsx9(
1008
1009
  StnButton,
1009
1010
  {
1010
1011
  icon: "line/x",
@@ -1098,8 +1099,24 @@ function StnDrawerHeader({
1098
1099
  ) : null
1099
1100
  ] });
1100
1101
  }
1102
+ function resolveScaleGap(gap, spacing) {
1103
+ if (gap && ["none", "xs", "sm", "md", "lg", "xl"].includes(gap)) return gap;
1104
+ if (typeof spacing === "string" && ["none", "xs", "sm", "md", "lg", "xl"].includes(spacing)) {
1105
+ return spacing;
1106
+ }
1107
+ if (typeof spacing === "number") {
1108
+ if (spacing <= 0) return "none";
1109
+ if (spacing <= 2) return "xs";
1110
+ if (spacing <= 3) return "sm";
1111
+ if (spacing <= 4) return "md";
1112
+ if (spacing <= 5) return "lg";
1113
+ return "xl";
1114
+ }
1115
+ return void 0;
1116
+ }
1101
1117
  function StnDrawerBody({
1102
1118
  padding = "md",
1119
+ gap,
1103
1120
  spacing,
1104
1121
  className,
1105
1122
  style,
@@ -1108,18 +1125,18 @@ function StnDrawerBody({
1108
1125
  }) {
1109
1126
  const isScalePadding = typeof padding === "string" && ["none", "xs", "sm", "md", "lg", "xl"].includes(padding);
1110
1127
  const computedPadding = isScalePadding ? void 0 : typeof padding === "number" ? `var(--stn-space-${padding}, ${padding}px)` : padding;
1111
- const computedGap = typeof spacing === "number" ? `var(--stn-space-${spacing}, ${spacing * 4}px)` : spacing;
1128
+ const resolvedGap = resolveScaleGap(gap, spacing);
1112
1129
  return /* @__PURE__ */ jsx10(
1113
1130
  "div",
1114
1131
  {
1115
1132
  className: cn(
1116
1133
  "stn-drawer__body",
1117
1134
  isScalePadding && `padding-${padding}`,
1135
+ resolvedGap && `gap-${resolvedGap}`,
1118
1136
  className
1119
1137
  ),
1120
1138
  style: {
1121
1139
  ...computedPadding ? { padding: computedPadding } : {},
1122
- ...computedGap ? { gap: computedGap } : {},
1123
1140
  ...style
1124
1141
  },
1125
1142
  ...rest,
@@ -8173,8 +8190,109 @@ StnTopologyGraph.Toolbar = StnTopologyGraphToolbar;
8173
8190
  StnTopologyGraph.Minimap = StnTopologyGraphMinimap;
8174
8191
  StnTopologyGraph.Viewport = StnTopologyGraphViewport;
8175
8192
 
8193
+ // src/patterns/widget/StnGradeRow.tsx
8194
+ import "react";
8195
+ import { jsx as jsx57, jsxs as jsxs45 } from "react/jsx-runtime";
8196
+ var GRADE_ROW_ICON = {
8197
+ critical: "fill/alert4",
8198
+ major: "fill/alert3",
8199
+ minor: "fill/alert2",
8200
+ default: "fill/alert1"
8201
+ };
8202
+ function formatGradePercent(percent, decimals) {
8203
+ if (decimals !== void 0) {
8204
+ return `${percent.toFixed(decimals)}%`;
8205
+ }
8206
+ const rounded = Math.round(percent * 10) / 10;
8207
+ return Number.isInteger(rounded) ? `${rounded}%` : `${rounded.toFixed(1)}%`;
8208
+ }
8209
+ function StnGradeRow({
8210
+ grade,
8211
+ label,
8212
+ value,
8213
+ percent,
8214
+ percentLabel,
8215
+ decimals,
8216
+ className,
8217
+ ...rest
8218
+ }) {
8219
+ const clamped = Math.max(0, Math.min(100, percent));
8220
+ const resolvedPercentLabel = percentLabel ?? formatGradePercent(clamped, decimals);
8221
+ return /* @__PURE__ */ jsxs45(
8222
+ "div",
8223
+ {
8224
+ className: cn(
8225
+ "stn-grade-row",
8226
+ `stn-grade-row--${grade}`,
8227
+ className
8228
+ ),
8229
+ ...rest,
8230
+ children: [
8231
+ /* @__PURE__ */ jsxs45("div", { className: "stn-grade-row__left", children: [
8232
+ /* @__PURE__ */ jsxs45("span", { className: "stn-grade-row__label", children: [
8233
+ /* @__PURE__ */ jsx57(StnIcon, { name: GRADE_ROW_ICON[grade], size: 20, className: "stn-grade-row__icon", "aria-hidden": true }),
8234
+ label
8235
+ ] }),
8236
+ /* @__PURE__ */ jsx57("div", { className: "stn-grade-row__track", "aria-hidden": true, children: /* @__PURE__ */ jsx57("span", { className: "stn-grade-row__fill", style: { width: `${clamped}%` } }) })
8237
+ ] }),
8238
+ /* @__PURE__ */ jsxs45("div", { className: "stn-grade-row__right", children: [
8239
+ /* @__PURE__ */ jsx57("span", { className: "stn-grade-row__value", children: value }),
8240
+ /* @__PURE__ */ jsx57("span", { className: "stn-grade-row__percent", children: resolvedPercentLabel })
8241
+ ] })
8242
+ ]
8243
+ }
8244
+ );
8245
+ }
8246
+ function StnGradeRowList({ className, children, ...rest }) {
8247
+ return /* @__PURE__ */ jsx57("div", { className: cn("stn-grade-row-list", className), ...rest, children });
8248
+ }
8249
+
8250
+ // src/patterns/widget/StnStatCard.tsx
8251
+ import "react";
8252
+ import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
8253
+ function StnStatCard({ label, count, className, ...rest }) {
8254
+ return /* @__PURE__ */ jsxs46("div", { className: cn("stn-stat-card", className), ...rest, children: [
8255
+ /* @__PURE__ */ jsx58("span", { className: "stn-stat-label", children: label }),
8256
+ /* @__PURE__ */ jsx58("span", { className: "stn-stat-count", children: count })
8257
+ ] });
8258
+ }
8259
+ function StnStatGroup({ className, children, ...rest }) {
8260
+ return /* @__PURE__ */ jsx58("div", { className: cn("stn-stat-group", className), ...rest, children });
8261
+ }
8262
+
8263
+ // src/patterns/widget/StnStatusList.tsx
8264
+ import "react";
8265
+ import { jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
8266
+ function StnStatusItem({
8267
+ label,
8268
+ value,
8269
+ grade: gradeProp,
8270
+ status,
8271
+ showDot = true,
8272
+ className,
8273
+ ...rest
8274
+ }) {
8275
+ const grade = gradeProp ?? (status === "warning" ? "minor" : status) ?? "normal";
8276
+ return /* @__PURE__ */ jsxs47("div", { className: cn("stn-status-item", className), ...rest, children: [
8277
+ /* @__PURE__ */ jsxs47("span", { className: "stn-status-item__label", children: [
8278
+ showDot ? /* @__PURE__ */ jsx59(
8279
+ "span",
8280
+ {
8281
+ className: cn("stn-status-item__dot", `stn-status-item__dot--${grade}`),
8282
+ "aria-hidden": "true"
8283
+ }
8284
+ ) : null,
8285
+ label
8286
+ ] }),
8287
+ /* @__PURE__ */ jsx59("span", { className: "stn-status-item__val", children: value })
8288
+ ] });
8289
+ }
8290
+ function StnStatusList({ className, children, ...rest }) {
8291
+ return /* @__PURE__ */ jsx59("div", { className: cn("stn-status-list", className), ...rest, children });
8292
+ }
8293
+
8176
8294
  // src/components/StnWidget.tsx
8177
- import { Fragment as Fragment8, jsx as jsx57, jsxs as jsxs45 } from "react/jsx-runtime";
8295
+ import { Fragment as Fragment8, jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
8178
8296
  var SHELL_PUB_CLASS = {
8179
8297
  card: "",
8180
8298
  "fault-panel": "",
@@ -8257,20 +8375,20 @@ function StnWidgetPeriodText({
8257
8375
  className,
8258
8376
  ...rest
8259
8377
  }) {
8260
- return /* @__PURE__ */ jsx57("span", { className: cn("stn-widget__period-text", className), ...rest, children });
8378
+ return /* @__PURE__ */ jsx60("span", { className: cn("stn-widget__period-text", className), ...rest, children });
8261
8379
  }
8262
8380
  function StnWidgetPeriodSelect({
8263
8381
  label,
8264
8382
  className,
8265
8383
  ...rest
8266
8384
  }) {
8267
- return /* @__PURE__ */ jsx57(
8385
+ return /* @__PURE__ */ jsx60(
8268
8386
  StnButton,
8269
8387
  {
8270
8388
  variant: "ghost",
8271
8389
  size: "sm",
8272
8390
  shape: "square",
8273
- icon: /* @__PURE__ */ jsx57(StnIcon, { name: "line/chevron-down" }),
8391
+ icon: /* @__PURE__ */ jsx60(StnIcon, { name: "line/chevron-down" }),
8274
8392
  iconPosition: "right",
8275
8393
  className,
8276
8394
  ...rest,
@@ -8287,26 +8405,26 @@ function StnWidgetPeriodPager({
8287
8405
  nextLabel = "\uB2E4\uC74C",
8288
8406
  ...rest
8289
8407
  }) {
8290
- return /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__period-pager", className), ...rest, children: [
8291
- /* @__PURE__ */ jsx57(
8408
+ return /* @__PURE__ */ jsxs48("div", { className: cn("stn-widget__period-pager", className), ...rest, children: [
8409
+ /* @__PURE__ */ jsx60(
8292
8410
  StnButton,
8293
8411
  {
8294
8412
  variant: "ghost",
8295
8413
  size: "sm",
8296
8414
  shape: "square",
8297
- icon: /* @__PURE__ */ jsx57(StnIcon, { name: "line/arrow-narrow-left" }),
8415
+ icon: /* @__PURE__ */ jsx60(StnIcon, { name: "line/arrow-narrow-left" }),
8298
8416
  onClick: onPrev,
8299
8417
  "aria-label": prevLabel
8300
8418
  }
8301
8419
  ),
8302
- /* @__PURE__ */ jsx57("span", { className: "stn-widget__period-pager-label", children: label }),
8303
- /* @__PURE__ */ jsx57(
8420
+ /* @__PURE__ */ jsx60("span", { className: "stn-widget__period-pager-label", children: label }),
8421
+ /* @__PURE__ */ jsx60(
8304
8422
  StnButton,
8305
8423
  {
8306
8424
  variant: "ghost",
8307
8425
  size: "sm",
8308
8426
  shape: "square",
8309
- icon: /* @__PURE__ */ jsx57(StnIcon, { name: "line/arrow-narrow-right" }),
8427
+ icon: /* @__PURE__ */ jsx60(StnIcon, { name: "line/arrow-narrow-right" }),
8310
8428
  onClick: onNext,
8311
8429
  "aria-label": nextLabel
8312
8430
  }
@@ -8333,18 +8451,18 @@ function StnWidgetHeaderInner({
8333
8451
  return null;
8334
8452
  }
8335
8453
  const resolvedIconName = headerIconName ?? defaultHeaderIconName(appearance);
8336
- return /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
8337
- /* @__PURE__ */ jsxs45("div", { className: "stn-widget__head-start", children: [
8338
- showHeaderIcon ? headerIcon != null ? /* @__PURE__ */ jsx57(StnWidgetInsetIcon, { size: "sm", children: headerIcon }) : resolvedIconName ? /* @__PURE__ */ jsx57(StnWidgetInsetIcon, { size: "sm", icon: resolvedIconName }) : null : null,
8339
- title != null || badge != null ? typeof title === "string" || title == null ? /* @__PURE__ */ jsxs45("div", { className: "stn-widget__title-wrap", children: [
8340
- typeof title === "string" ? /* @__PURE__ */ jsx57("p", { className: cn("stn-widget__title", titleSize, titleWeight), title, children: title }) : null,
8454
+ return /* @__PURE__ */ jsxs48("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
8455
+ /* @__PURE__ */ jsxs48("div", { className: "stn-widget__head-start", children: [
8456
+ showHeaderIcon ? headerIcon != null ? /* @__PURE__ */ jsx60(StnWidgetInsetIcon, { size: "sm", children: headerIcon }) : resolvedIconName ? /* @__PURE__ */ jsx60(StnWidgetInsetIcon, { size: "sm", icon: resolvedIconName }) : null : null,
8457
+ title != null || badge != null ? typeof title === "string" || title == null ? /* @__PURE__ */ jsxs48("div", { className: "stn-widget__title-wrap", children: [
8458
+ typeof title === "string" ? /* @__PURE__ */ jsx60("p", { className: cn("stn-widget__title", titleSize, titleWeight), title, children: title }) : null,
8341
8459
  badge
8342
- ] }) : /* @__PURE__ */ jsxs45(Fragment8, { children: [
8460
+ ] }) : /* @__PURE__ */ jsxs48(Fragment8, { children: [
8343
8461
  title,
8344
8462
  badge
8345
8463
  ] }) : null
8346
8464
  ] }),
8347
- titleActions != null || periodActions != null || periodLabel != null && periodLabel !== "" ? /* @__PURE__ */ jsx57("div", { className: "stn-widget__head-end", children: titleActions ?? (periodActions != null ? periodActions : periodLabel != null && periodLabel !== "" ? /* @__PURE__ */ jsx57(StnWidgetPeriodText, { children: periodLabel }) : null) }) : null
8465
+ titleActions != null || periodActions != null || periodLabel != null && periodLabel !== "" ? /* @__PURE__ */ jsx60("div", { className: "stn-widget__head-end", children: titleActions ?? (periodActions != null ? periodActions : periodLabel != null && periodLabel !== "" ? /* @__PURE__ */ jsx60(StnWidgetPeriodText, { children: periodLabel }) : null) }) : null
8348
8466
  ] });
8349
8467
  }
8350
8468
  function StnWidgetRoot({
@@ -8427,10 +8545,10 @@ function StnWidgetRoot({
8427
8545
  ...rest
8428
8546
  };
8429
8547
  const slots = partitionWidgetChildren(children);
8430
- const propHead = shell === "fault-panel" && !isFigmaShell ? title != null || titleActions ? /* @__PURE__ */ jsxs45("div", { className: "app_bar", children: [
8431
- /* @__PURE__ */ jsx57("div", { className: "fault_title_box", children: typeof title === "string" ? /* @__PURE__ */ jsx57("span", { children: title }) : title }),
8548
+ const propHead = shell === "fault-panel" && !isFigmaShell ? title != null || titleActions ? /* @__PURE__ */ jsxs48("div", { className: "app_bar", children: [
8549
+ /* @__PURE__ */ jsx60("div", { className: "fault_title_box", children: typeof title === "string" ? /* @__PURE__ */ jsx60("span", { children: title }) : title }),
8432
8550
  titleActions
8433
- ] }) : null : shell === "board" || shell === "board-item" ? title != null ? /* @__PURE__ */ jsx57("div", { className: "stn-widget__head", children: typeof title === "string" ? /* @__PURE__ */ jsx57("p", { children: title }) : title }) : null : isFigmaShell ? /* @__PURE__ */ jsx57(
8551
+ ] }) : null : shell === "board" || shell === "board-item" ? title != null ? /* @__PURE__ */ jsx60("div", { className: "stn-widget__head", children: typeof title === "string" ? /* @__PURE__ */ jsx60("p", { children: title }) : title }) : null : isFigmaShell ? /* @__PURE__ */ jsx60(
8434
8552
  StnWidgetHeaderInner,
8435
8553
  {
8436
8554
  appearance,
@@ -8446,40 +8564,40 @@ function StnWidgetRoot({
8446
8564
  headerIcon,
8447
8565
  wrapActions
8448
8566
  }
8449
- ) : title != null || badge != null || titleActions ? /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
8450
- /* @__PURE__ */ jsxs45("div", { className: "stn-widget__head-start", children: [
8451
- title != null ? typeof title === "string" ? /* @__PURE__ */ jsx57("p", { className: cn("stn-widget__title", titleSize, titleWeight), title, children: title }) : title : null,
8567
+ ) : title != null || badge != null || titleActions ? /* @__PURE__ */ jsxs48("div", { className: cn("stn-widget__head", wrapActions && "stn-widget__head--wrap"), children: [
8568
+ /* @__PURE__ */ jsxs48("div", { className: "stn-widget__head-start", children: [
8569
+ title != null ? typeof title === "string" ? /* @__PURE__ */ jsx60("p", { className: cn("stn-widget__title", titleSize, titleWeight), title, children: title }) : title : null,
8452
8570
  badge
8453
8571
  ] }),
8454
- titleActions ? /* @__PURE__ */ jsx57("div", { className: "stn-widget__head-end", children: titleActions }) : null
8572
+ titleActions ? /* @__PURE__ */ jsx60("div", { className: "stn-widget__head-end", children: titleActions }) : null
8455
8573
  ] }) : null;
8456
8574
  const head = slots.headers.length > 0 ? slots.headers : propHead;
8457
8575
  const autoBodyClass = shell === "fault-panel" && !isFigmaShell ? "table_area" : void 0;
8458
8576
  let body;
8459
8577
  if (loading) {
8460
- body = /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__body", autoBodyClass, contentClassName), children: /* @__PURE__ */ jsx57(StnWidgetLoading, {}) });
8578
+ body = /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__body", autoBodyClass, contentClassName), children: /* @__PURE__ */ jsx60(StnWidgetLoading, {}) });
8461
8579
  } else if (slots.bodies.length > 0) {
8462
8580
  body = slots.bodies.map(
8463
8581
  (slot, index) => mergeBodySlot(slot, index === 0 ? slots.rest : [], contentClassName, isEmptyState, emptyStyle)
8464
8582
  );
8465
8583
  } else {
8466
- body = /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__body", autoBodyClass, isEmptyState && "empty", contentClassName), style: emptyStyle, children: slots.rest });
8584
+ body = /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__body", autoBodyClass, isEmptyState && "empty", contentClassName), style: emptyStyle, children: slots.rest });
8467
8585
  }
8468
- const footerNode = slots.footers.length > 0 ? slots.footers : footer ? /* @__PURE__ */ jsx57("div", { className: "stn-widget__footer", children: footer }) : null;
8469
- const card = /* @__PURE__ */ jsxs45("div", { ...rootProps, children: [
8470
- isFigmaShell && appearanceShell === "overlay" ? /* @__PURE__ */ jsx57("div", { className: "stn-widget__map-deco", "aria-hidden": true }) : null,
8586
+ const footerNode = slots.footers.length > 0 ? slots.footers : footer ? /* @__PURE__ */ jsx60("div", { className: "stn-widget__footer", children: footer }) : null;
8587
+ const card = /* @__PURE__ */ jsxs48("div", { ...rootProps, children: [
8588
+ isFigmaShell && appearanceShell === "overlay" ? /* @__PURE__ */ jsx60("div", { className: "stn-widget__map-deco", "aria-hidden": true }) : null,
8471
8589
  head,
8472
8590
  body,
8473
8591
  footerNode
8474
8592
  ] });
8475
8593
  if (banner == null || banner === false) return card;
8476
- return /* @__PURE__ */ jsxs45("div", { className: "stn-widget-anchor", children: [
8594
+ return /* @__PURE__ */ jsxs48("div", { className: "stn-widget-anchor", children: [
8477
8595
  withBannerSeverity(banner, bannerSeverityFromStatus(status, isCritical)),
8478
8596
  card
8479
8597
  ] });
8480
8598
  }
8481
8599
  function StnWidgetHeader({ className, wrap = false, children, ...rest }) {
8482
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__head", wrap && "stn-widget__head--wrap", className), ...rest, children });
8600
+ return /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__head", wrap && "stn-widget__head--wrap", className), ...rest, children });
8483
8601
  }
8484
8602
  markWidgetSlot(StnWidgetHeader, "header");
8485
8603
  function StnWidgetTitle({
@@ -8491,10 +8609,10 @@ function StnWidgetTitle({
8491
8609
  ...rest
8492
8610
  }) {
8493
8611
  const titleAttr = title ?? (typeof children === "string" ? children : void 0);
8494
- return /* @__PURE__ */ jsx57("p", { className: cn("stn-widget__title", size, weight, className), title: titleAttr, ...rest, children });
8612
+ return /* @__PURE__ */ jsx60("p", { className: cn("stn-widget__title", size, weight, className), title: titleAttr, ...rest, children });
8495
8613
  }
8496
8614
  function StnWidgetActions({ className, children, ...rest }) {
8497
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__head-end", className), ...rest, children });
8615
+ return /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__head-end", className), ...rest, children });
8498
8616
  }
8499
8617
  function StnWidgetBody({
8500
8618
  padding,
@@ -8508,7 +8626,7 @@ function StnWidgetBody({
8508
8626
  }) {
8509
8627
  const emptyText = typeof empty === "string" ? empty : void 0;
8510
8628
  const mergedStyle = emptyText ? { ["--stn-widget-empty-text"]: `"${emptyText}"`, ...style } : style;
8511
- return /* @__PURE__ */ jsx57(
8629
+ return /* @__PURE__ */ jsx60(
8512
8630
  "div",
8513
8631
  {
8514
8632
  className: cn(
@@ -8530,104 +8648,36 @@ function StnWidgetBody({
8530
8648
  }
8531
8649
  markWidgetSlot(StnWidgetBody, "body");
8532
8650
  function StnWidgetChartSlot({ label = "select chart", className, children, ...rest }) {
8533
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__chart-slot", className), "data-stn-widget-chart-slot": true, ...rest, children: children ?? /* @__PURE__ */ jsx57("span", { className: "stn-widget__chart-slot-label", children: label }) });
8534
- }
8535
- function StnWidgetStatusItem({
8536
- label,
8537
- value,
8538
- grade: gradeProp,
8539
- status,
8540
- showDot = true,
8541
- className,
8542
- ...rest
8543
- }) {
8544
- const grade = gradeProp ?? (status === "warning" ? "minor" : status) ?? "normal";
8545
- return /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__status-item", className), ...rest, children: [
8546
- /* @__PURE__ */ jsxs45("span", { className: "stn-widget__status-label", children: [
8547
- showDot ? /* @__PURE__ */ jsx57(
8548
- "span",
8549
- {
8550
- className: cn("stn-widget__status-dot", `stn-widget__status-dot--${grade}`),
8551
- "aria-hidden": "true"
8552
- }
8553
- ) : null,
8554
- label
8555
- ] }),
8556
- /* @__PURE__ */ jsx57("span", { className: "stn-widget__status-val", children: value })
8557
- ] });
8558
- }
8559
- function StnWidgetStatusList({ className, children, ...rest }) {
8560
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__status-list", className), ...rest, children });
8561
- }
8562
- function StnWidgetStatGroup({ className, children, ...rest }) {
8563
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__stat-group", className), ...rest, children });
8564
- }
8565
- function StnWidgetStatCard({ label, count, className, ...rest }) {
8566
- return /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__stat-card", className), ...rest, children: [
8567
- /* @__PURE__ */ jsx57("span", { className: "stn-widget__stat-label", children: label }),
8568
- /* @__PURE__ */ jsx57("span", { className: "stn-widget__stat-count", children: count })
8569
- ] });
8651
+ return /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__chart-slot", className), "data-stn-widget-chart-slot": true, ...rest, children: children ?? /* @__PURE__ */ jsx60("span", { className: "stn-widget__chart-slot-label", children: label }) });
8570
8652
  }
8571
8653
  function StnWidgetPlaceholder({ label = "\uCF58\uD150\uCE20 \uC601\uC5ED" }) {
8572
- return /* @__PURE__ */ jsx57("div", { className: "stn-widget__placeholder", children: label });
8573
- }
8574
- var GRADE_ROW_ICON = {
8575
- critical: "fill/alert4",
8576
- major: "fill/alert3",
8577
- minor: "fill/alert2",
8578
- default: "fill/alert1"
8579
- };
8580
- function formatGradePercent(percent) {
8581
- const rounded = Math.round(percent * 10) / 10;
8582
- return Number.isInteger(rounded) ? `${rounded}%` : `${rounded.toFixed(1)}%`;
8583
- }
8584
- function StnWidgetGradeRow({
8585
- grade,
8586
- label,
8587
- value,
8588
- percent,
8589
- percentLabel,
8590
- className,
8591
- ...rest
8592
- }) {
8593
- const clamped = Math.max(0, Math.min(100, percent));
8594
- const resolvedPercentLabel = percentLabel ?? formatGradePercent(clamped);
8595
- return /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__grade-row", `stn-widget__grade-row--${grade}`, className), ...rest, children: [
8596
- /* @__PURE__ */ jsxs45("div", { className: "stn-widget__grade-row-left", children: [
8597
- /* @__PURE__ */ jsxs45("span", { className: "stn-widget__grade-row-label", children: [
8598
- /* @__PURE__ */ jsx57(StnIcon, { name: GRADE_ROW_ICON[grade], size: 20, className: "stn-widget__grade-row-icon", "aria-hidden": true }),
8599
- label
8600
- ] }),
8601
- /* @__PURE__ */ jsx57("div", { className: "stn-widget__grade-row-track", "aria-hidden": true, children: /* @__PURE__ */ jsx57("span", { className: "stn-widget__grade-row-fill", style: { width: `${clamped}%` } }) })
8602
- ] }),
8603
- /* @__PURE__ */ jsxs45("div", { className: "stn-widget__grade-row-right", children: [
8604
- /* @__PURE__ */ jsx57("span", { className: "stn-widget__grade-row-value", children: value }),
8605
- /* @__PURE__ */ jsx57("span", { className: "stn-widget__grade-row-percent", children: resolvedPercentLabel })
8606
- ] })
8607
- ] });
8608
- }
8609
- function StnWidgetGradeRowList({ className, children, ...rest }) {
8610
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__grade-row-list", className), ...rest, children });
8611
- }
8654
+ return /* @__PURE__ */ jsx60("div", { className: "stn-widget__placeholder", children: label });
8655
+ }
8656
+ var StnWidgetStatusItem = StnStatusItem;
8657
+ var StnWidgetStatusList = StnStatusList;
8658
+ var StnWidgetStatGroup = StnStatGroup;
8659
+ var StnWidgetStatCard = StnStatCard;
8660
+ var StnWidgetGradeRow = StnGradeRow;
8661
+ var StnWidgetGradeRowList = StnGradeRowList;
8612
8662
  function StnWidgetFooter({ className, children, ...rest }) {
8613
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__footer", className), ...rest, children });
8663
+ return /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__footer", className), ...rest, children });
8614
8664
  }
8615
8665
  markWidgetSlot(StnWidgetFooter, "footer");
8616
8666
  function StnWidgetEmpty({ className, children, ...rest }) {
8617
- return /* @__PURE__ */ jsxs45("div", { className: cn("stn-widget__empty", className), ...rest, children: [
8618
- /* @__PURE__ */ jsxs45("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: [
8619
- /* @__PURE__ */ jsx57("circle", { cx: "12", cy: "12", r: "10" }),
8620
- /* @__PURE__ */ jsx57("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
8621
- /* @__PURE__ */ jsx57("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
8667
+ return /* @__PURE__ */ jsxs48("div", { className: cn("stn-widget__empty", className), ...rest, children: [
8668
+ /* @__PURE__ */ jsxs48("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: [
8669
+ /* @__PURE__ */ jsx60("circle", { cx: "12", cy: "12", r: "10" }),
8670
+ /* @__PURE__ */ jsx60("line", { x1: "12", y1: "8", x2: "12", y2: "12" }),
8671
+ /* @__PURE__ */ jsx60("line", { x1: "12", y1: "16", x2: "12.01", y2: "16" })
8622
8672
  ] }),
8623
- /* @__PURE__ */ jsx57("div", { children: children ?? "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." })
8673
+ /* @__PURE__ */ jsx60("div", { children: children ?? "\uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4." })
8624
8674
  ] });
8625
8675
  }
8626
8676
  function StnWidgetLoading({ lines = 3, className, children, ...rest }) {
8627
- return /* @__PURE__ */ jsx57("div", { className: cn("stn-widget__loading", className), ...rest, children: children ?? /* @__PURE__ */ jsx57(StnLoadingSkeleton.Widget, { lines }) });
8677
+ return /* @__PURE__ */ jsx60("div", { className: cn("stn-widget__loading", className), ...rest, children: children ?? /* @__PURE__ */ jsx60(StnLoadingSkeleton.Widget, { lines }) });
8628
8678
  }
8629
8679
  function StnWidgetInsetIcon({ className, size = "sm", ...rest }) {
8630
- return /* @__PURE__ */ jsx57(StnIconBox, { size, className: cn("stn-widget__inset-icon", className), ...rest });
8680
+ return /* @__PURE__ */ jsx60(StnIconBox, { size, className: cn("stn-widget__inset-icon", className), ...rest });
8631
8681
  }
8632
8682
  var StnWidget = Object.assign(StnWidgetRoot, {
8633
8683
  Header: StnWidgetHeader,
@@ -8672,7 +8722,7 @@ import {
8672
8722
  } from "@stn-uiux/pub-ui/data/stnWidget";
8673
8723
 
8674
8724
  // src/patterns/dashboard/AlertCenterDashboard.tsx
8675
- import { jsx as jsx58, jsxs as jsxs46 } from "react/jsx-runtime";
8725
+ import { jsx as jsx61, jsxs as jsxs49 } from "react/jsx-runtime";
8676
8726
  var TOP5_ROWS = [
8677
8727
  { label: "\uADF8\uB791\uC2DC\uC544", percent: 80, value: "80\uAC74", grade: "critical" },
8678
8728
  { label: "\uC5F0\uB9BD\uC8FC\uD0DD 15\uC138\uB300", percent: 74, value: "74\uAC74", grade: "major" },
@@ -8681,7 +8731,7 @@ var TOP5_ROWS = [
8681
8731
  { label: "PRADA", percent: 68, value: "68\uAC74", grade: "default" }
8682
8732
  ];
8683
8733
  function AlertCenterDashboard({ className, appearance = "translucent", loading = false }) {
8684
- return /* @__PURE__ */ jsxs46(
8734
+ return /* @__PURE__ */ jsxs49(
8685
8735
  StnStack,
8686
8736
  {
8687
8737
  direction: "column",
@@ -8690,17 +8740,17 @@ function AlertCenterDashboard({ className, appearance = "translucent", loading =
8690
8740
  style: { flex: "1 1 0%", minHeight: 0, height: "100%", width: "100%" },
8691
8741
  "data-stn-dashboard": "alert-widgets",
8692
8742
  children: [
8693
- /* @__PURE__ */ jsx58(StnWidget, { title: "\uC2DC\uC124 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx58(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs46(StnWidget.StatusList, { children: [
8694
- /* @__PURE__ */ jsx58(StnWidget.StatusItem, { label: "PTN", value: "179", showDot: false }),
8695
- /* @__PURE__ */ jsx58(StnWidget.StatusItem, { label: "MSPP", value: "63", showDot: false }),
8696
- /* @__PURE__ */ jsx58(StnWidget.StatusItem, { label: "L3\uC2A4\uC704\uCE58", value: "27", showDot: false })
8743
+ /* @__PURE__ */ jsx61(StnWidget, { title: "\uC2DC\uC124 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx61(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs49(StnWidget.StatusList, { children: [
8744
+ /* @__PURE__ */ jsx61(StnWidget.StatusItem, { label: "PTN", value: "179", showDot: false }),
8745
+ /* @__PURE__ */ jsx61(StnWidget.StatusItem, { label: "MSPP", value: "63", showDot: false }),
8746
+ /* @__PURE__ */ jsx61(StnWidget.StatusItem, { label: "L3\uC2A4\uC704\uCE58", value: "27", showDot: false })
8697
8747
  ] }) }),
8698
- /* @__PURE__ */ jsx58(StnWidget, { title: "\uC7A5\uC560 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx58(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs46(StnWidget.StatusList, { children: [
8699
- /* @__PURE__ */ jsx58(StnWidget.StatusItem, { label: "Critical", value: "43", grade: "critical" }),
8700
- /* @__PURE__ */ jsx58(StnWidget.StatusItem, { label: "Major", value: "79", grade: "major" }),
8701
- /* @__PURE__ */ jsx58(StnWidget.StatusItem, { label: "Minor", value: "3", grade: "minor" })
8748
+ /* @__PURE__ */ jsx61(StnWidget, { title: "\uC7A5\uC560 \uD604\uD669", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx61(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsxs49(StnWidget.StatusList, { children: [
8749
+ /* @__PURE__ */ jsx61(StnWidget.StatusItem, { label: "Critical", value: "43", grade: "critical" }),
8750
+ /* @__PURE__ */ jsx61(StnWidget.StatusItem, { label: "Major", value: "79", grade: "major" }),
8751
+ /* @__PURE__ */ jsx61(StnWidget.StatusItem, { label: "Minor", value: "3", grade: "minor" })
8702
8752
  ] }) }),
8703
- /* @__PURE__ */ jsx58(StnWidget, { title: "\uC77C\uC77C \uC7A5\uBE44\uBCC4 \uC7A5\uC560 TOP5", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx58(StnLoadingSkeleton.Widget, { lines: 4 }) : /* @__PURE__ */ jsx58(StnWidget.GradeRowList, { children: TOP5_ROWS.map((row) => /* @__PURE__ */ jsx58(
8753
+ /* @__PURE__ */ jsx61(StnWidget, { title: "\uC77C\uC77C \uC7A5\uBE44\uBCC4 \uC7A5\uC560 TOP5", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx61(StnLoadingSkeleton.Widget, { lines: 4 }) : /* @__PURE__ */ jsx61(StnWidget.GradeRowList, { children: TOP5_ROWS.map((row) => /* @__PURE__ */ jsx61(
8704
8754
  StnWidget.GradeRow,
8705
8755
  {
8706
8756
  grade: row.grade,
@@ -8710,50 +8760,50 @@ function AlertCenterDashboard({ className, appearance = "translucent", loading =
8710
8760
  },
8711
8761
  row.label
8712
8762
  )) }) }),
8713
- /* @__PURE__ */ jsx58(StnWidget, { title: "\uC77C\uC77C \uC7A5\uC560 \uD1B5\uACC4", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx58(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsx58(StnWidget.ChartSlot, { label: "\uC77C\uC77C \uC7A5\uC560 \uD1B5\uACC4 \uCC28\uD2B8" }) })
8763
+ /* @__PURE__ */ jsx61(StnWidget, { title: "\uC77C\uC77C \uC7A5\uC560 \uD1B5\uACC4", appearance, interactive: true, children: loading ? /* @__PURE__ */ jsx61(StnLoadingSkeleton.Widget, { lines: 3 }) : /* @__PURE__ */ jsx61(StnWidget.ChartSlot, { label: "\uC77C\uC77C \uC7A5\uC560 \uD1B5\uACC4 \uCC28\uD2B8" }) })
8714
8764
  ]
8715
8765
  }
8716
8766
  );
8717
8767
  }
8718
8768
 
8719
8769
  // src/patterns/dashboard/PubDashboardWidgetBodies.tsx
8720
- import { jsx as jsx59, jsxs as jsxs47 } from "react/jsx-runtime";
8770
+ import { jsx as jsx62, jsxs as jsxs50 } from "react/jsx-runtime";
8721
8771
  function PubDisabilityStatusList({ items, summary }) {
8722
- return /* @__PURE__ */ jsxs47("div", { className: "ds-disability-status", children: [
8723
- /* @__PURE__ */ jsx59("ul", { className: "ds-disability-status__list", children: items.map((item, i) => /* @__PURE__ */ jsxs47(
8772
+ return /* @__PURE__ */ jsxs50("div", { className: "ds-disability-status", children: [
8773
+ /* @__PURE__ */ jsx62("ul", { className: "ds-disability-status__list", children: items.map((item, i) => /* @__PURE__ */ jsxs50(
8724
8774
  "li",
8725
8775
  {
8726
8776
  className: ["ds-disability-status__item", item.grade].filter(Boolean).join(" "),
8727
8777
  children: [
8728
- /* @__PURE__ */ jsxs47("span", { children: [
8729
- item.showDot !== false && item.grade ? /* @__PURE__ */ jsx59("span", { className: "dot", "aria-hidden": true }) : null,
8778
+ /* @__PURE__ */ jsxs50("span", { children: [
8779
+ item.showDot !== false && item.grade ? /* @__PURE__ */ jsx62("span", { className: "dot", "aria-hidden": true }) : null,
8730
8780
  item.label
8731
8781
  ] }),
8732
- /* @__PURE__ */ jsx59("p", { children: item.value })
8782
+ /* @__PURE__ */ jsx62("p", { children: item.value })
8733
8783
  ]
8734
8784
  },
8735
8785
  i
8736
8786
  )) }),
8737
- summary && summary.length > 0 ? /* @__PURE__ */ jsx59("div", { className: "ds-disability-status__summary", children: summary.map((row, i) => /* @__PURE__ */ jsxs47("p", { className: "ds-disability-status__value", children: [
8787
+ summary && summary.length > 0 ? /* @__PURE__ */ jsx62("div", { className: "ds-disability-status__summary", children: summary.map((row, i) => /* @__PURE__ */ jsxs50("p", { className: "ds-disability-status__value", children: [
8738
8788
  row.label,
8739
- /* @__PURE__ */ jsx59("span", { children: row.value })
8789
+ /* @__PURE__ */ jsx62("span", { children: row.value })
8740
8790
  ] }, i)) }) : null
8741
8791
  ] });
8742
8792
  }
8743
8793
  function PubTrafficTop5Bars({ rows }) {
8744
8794
  const maxPercent = Math.max(...rows.map((row) => row.percent), 0);
8745
- return /* @__PURE__ */ jsx59("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsxs47("div", { className: ["ds-bar", row.percent === maxPercent ? "max" : ""].filter(Boolean).join(" "), children: [
8746
- /* @__PURE__ */ jsx59("p", { className: "ds-bar-name", title: row.label, children: row.label }),
8747
- /* @__PURE__ */ jsx59("div", { className: "ds-bar-con", title: `${row.percent}%`, children: /* @__PURE__ */ jsx59("span", { className: "ds-bar-gauge", style: { "--percent": `${row.percent}%` } }) }),
8748
- /* @__PURE__ */ jsx59("p", { className: "ds-bar-value", title: row.value, children: row.value })
8795
+ return /* @__PURE__ */ jsx62("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsxs50("div", { className: ["ds-bar", row.percent === maxPercent ? "max" : ""].filter(Boolean).join(" "), children: [
8796
+ /* @__PURE__ */ jsx62("p", { className: "ds-bar-name", title: row.label, children: row.label }),
8797
+ /* @__PURE__ */ jsx62("div", { className: "ds-bar-con", title: `${row.percent}%`, children: /* @__PURE__ */ jsx62("span", { className: "ds-bar-gauge", style: { "--percent": `${row.percent}%` } }) }),
8798
+ /* @__PURE__ */ jsx62("p", { className: "ds-bar-value", title: row.value, children: row.value })
8749
8799
  ] }, row.label)) });
8750
8800
  }
8751
8801
  function PubTop5EquipmentBars({ rows }) {
8752
- return /* @__PURE__ */ jsxs47("div", { className: "ds-group", children: [
8753
- /* @__PURE__ */ jsx59("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx59("div", { className: "ds-equipment-ico", children: /* @__PURE__ */ jsx59("span", { className: "blind", children: "\uC7A5\uBE44 \uC774\uBBF8\uC9C0" }) }) }),
8754
- /* @__PURE__ */ jsx59("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx59("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsx59("div", { className: "ds-bar type-2", children: /* @__PURE__ */ jsxs47("div", { className: "ds-bar-con", title: `${row.percent}%`, children: [
8755
- /* @__PURE__ */ jsx59("span", { className: "ds-bar-gauge", style: { "--percent": `${row.percent}%` } }),
8756
- /* @__PURE__ */ jsx59("div", { className: "ds-bar-status", children: row.status })
8802
+ return /* @__PURE__ */ jsxs50("div", { className: "ds-group", children: [
8803
+ /* @__PURE__ */ jsx62("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx62("div", { className: "ds-equipment-ico", children: /* @__PURE__ */ jsx62("span", { className: "blind", children: "\uC7A5\uBE44 \uC774\uBBF8\uC9C0" }) }) }),
8804
+ /* @__PURE__ */ jsx62("div", { className: "ds-group-box", children: /* @__PURE__ */ jsx62("div", { className: "ds-bar-group", children: rows.map((row) => /* @__PURE__ */ jsx62("div", { className: "ds-bar type-2", children: /* @__PURE__ */ jsxs50("div", { className: "ds-bar-con", title: `${row.percent}%`, children: [
8805
+ /* @__PURE__ */ jsx62("span", { className: "ds-bar-gauge", style: { "--percent": `${row.percent}%` } }),
8806
+ /* @__PURE__ */ jsx62("div", { className: "ds-bar-status", children: row.status })
8757
8807
  ] }) }, row.label)) }) })
8758
8808
  ] });
8759
8809
  }
@@ -8762,7 +8812,7 @@ function PubChartSample({
8762
8812
  alt = "\uCC28\uD2B8",
8763
8813
  onError
8764
8814
  }) {
8765
- return /* @__PURE__ */ jsx59("div", { className: "ds-chart", children: /* @__PURE__ */ jsx59("img", { src, alt, className: "chart_sample", onError }) });
8815
+ return /* @__PURE__ */ jsx62("div", { className: "ds-chart", children: /* @__PURE__ */ jsx62("img", { src, alt, className: "chart_sample", onError }) });
8766
8816
  }
8767
8817
 
8768
8818
  // src/patterns/alertCenter/StnAlertCenterPanel.tsx
@@ -8770,7 +8820,7 @@ import { useState as useState16 } from "react";
8770
8820
  import {
8771
8821
  STN_ALERT_CENTER_TABS
8772
8822
  } from "@stn-uiux/pub-ui/data/stnAlertCenter";
8773
- import { jsx as jsx60, jsxs as jsxs48 } from "react/jsx-runtime";
8823
+ import { jsx as jsx63, jsxs as jsxs51 } from "react/jsx-runtime";
8774
8824
  function resolveAlertIcon(item) {
8775
8825
  if (item.icon) {
8776
8826
  if (item.icon === "line/arrow-down") return "line/arrow-narrow-down";
@@ -8797,7 +8847,7 @@ function StnAlertCard({
8797
8847
  }) {
8798
8848
  const iconNode = resolveAlertIcon(item);
8799
8849
  const gradeLabel = resolveGradeLabel(item.grade);
8800
- return /* @__PURE__ */ jsx60(
8850
+ return /* @__PURE__ */ jsx63(
8801
8851
  StnCard,
8802
8852
  {
8803
8853
  variant: "elevated",
@@ -8806,8 +8856,8 @@ function StnAlertCard({
8806
8856
  interactive: true,
8807
8857
  className: cn("stn-alert-card", className),
8808
8858
  onClick,
8809
- children: /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__row", children: [
8810
- /* @__PURE__ */ jsx60(
8859
+ children: /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__row", children: [
8860
+ /* @__PURE__ */ jsx63(
8811
8861
  StnIcon,
8812
8862
  {
8813
8863
  name: iconNode,
@@ -8816,9 +8866,9 @@ function StnAlertCard({
8816
8866
  className: "stn-alert-card__icon"
8817
8867
  }
8818
8868
  ),
8819
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__body", children: [
8820
- /* @__PURE__ */ jsxs48(StnStack, { direction: "row", alignItems: "center", spacing: 1, className: "stn-alert-card__header-line", children: [
8821
- /* @__PURE__ */ jsx60(
8869
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__body", children: [
8870
+ /* @__PURE__ */ jsxs51(StnStack, { direction: "row", alignItems: "center", spacing: 1, className: "stn-alert-card__header-line", children: [
8871
+ /* @__PURE__ */ jsx63(
8822
8872
  StnChip,
8823
8873
  {
8824
8874
  shape: "pill",
@@ -8828,25 +8878,25 @@ function StnAlertCard({
8828
8878
  children: gradeLabel
8829
8879
  }
8830
8880
  ),
8831
- /* @__PURE__ */ jsx60(
8881
+ /* @__PURE__ */ jsx63(
8832
8882
  "span",
8833
8883
  {
8834
8884
  className: cn("stn-alert-card__title", titleOverflow),
8835
8885
  title: item.title,
8836
- children: /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__text-inner", children: item.title })
8886
+ children: /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__text-inner", children: item.title })
8837
8887
  }
8838
8888
  )
8839
8889
  ] }),
8840
- /* @__PURE__ */ jsxs48(StnStack, { direction: "row", alignItems: "center", spacing: 2, wrap: "wrap", className: "stn-alert-card__desc-line", children: [
8841
- /* @__PURE__ */ jsx60(
8890
+ /* @__PURE__ */ jsxs51(StnStack, { direction: "row", alignItems: "center", spacing: 2, wrap: "wrap", className: "stn-alert-card__desc-line", children: [
8891
+ /* @__PURE__ */ jsx63(
8842
8892
  "span",
8843
8893
  {
8844
8894
  className: cn("stn-alert-card__desc", descOverflow),
8845
8895
  title: item.description,
8846
- children: /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__text-inner", children: item.description })
8896
+ children: /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__text-inner", children: item.description })
8847
8897
  }
8848
8898
  ),
8849
- item.occurredAt && /* @__PURE__ */ jsxs48(
8899
+ item.occurredAt && /* @__PURE__ */ jsxs51(
8850
8900
  StnChip,
8851
8901
  {
8852
8902
  shape: "pill",
@@ -8862,9 +8912,9 @@ function StnAlertCard({
8862
8912
  )
8863
8913
  ] })
8864
8914
  ] }),
8865
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__meta", children: [
8866
- /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__time", children: item.time }),
8867
- item.unread !== false && /* @__PURE__ */ jsx60(
8915
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__meta", children: [
8916
+ /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__time", children: item.time }),
8917
+ item.unread !== false && /* @__PURE__ */ jsx63(
8868
8918
  "span",
8869
8919
  {
8870
8920
  className: cn(
@@ -8902,7 +8952,7 @@ function StnAlertCenterPanel({
8902
8952
  const alertCount = alerts.length;
8903
8953
  const resolvedTitleOverflow = titleOverflow ?? textOverflow;
8904
8954
  const resolvedDescOverflow = descOverflow ?? textOverflow;
8905
- return /* @__PURE__ */ jsxs48(
8955
+ return /* @__PURE__ */ jsxs51(
8906
8956
  "div",
8907
8957
  {
8908
8958
  className: cn(
@@ -8914,13 +8964,13 @@ function StnAlertCenterPanel({
8914
8964
  ),
8915
8965
  "data-stn-alert-center": true,
8916
8966
  children: [
8917
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-center__header", children: [
8918
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-center__header-left", children: [
8919
- /* @__PURE__ */ jsx60(StnIcon, { name: "line/bell", size: 20, color: "var(--stn-primary)" }),
8920
- /* @__PURE__ */ jsx60("span", { className: "stn-alert-center__title", children: title }),
8921
- alertCount > 0 && /* @__PURE__ */ jsx60(StnChip, { shape: "pill", size: "sm", variant: "subtle", color: "primary", children: alertCount })
8967
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-center__header", children: [
8968
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-center__header-left", children: [
8969
+ /* @__PURE__ */ jsx63(StnIcon, { name: "line/bell", size: 20, color: "var(--stn-primary)" }),
8970
+ /* @__PURE__ */ jsx63("span", { className: "stn-alert-center__title", children: title }),
8971
+ alertCount > 0 && /* @__PURE__ */ jsx63(StnChip, { shape: "pill", size: "sm", variant: "subtle", color: "primary", children: alertCount })
8922
8972
  ] }),
8923
- /* @__PURE__ */ jsx60(
8973
+ /* @__PURE__ */ jsx63(
8924
8974
  StnSegmented,
8925
8975
  {
8926
8976
  size: "md",
@@ -8933,8 +8983,8 @@ function StnAlertCenterPanel({
8933
8983
  }))
8934
8984
  }
8935
8985
  ),
8936
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-center__header-right", children: [
8937
- /* @__PURE__ */ jsx60(
8986
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-center__header-right", children: [
8987
+ /* @__PURE__ */ jsx63(
8938
8988
  StnButton,
8939
8989
  {
8940
8990
  variant: "text",
@@ -8944,8 +8994,8 @@ function StnAlertCenterPanel({
8944
8994
  children: "\uBAA8\uB450 \uC77D\uC74C"
8945
8995
  }
8946
8996
  ),
8947
- /* @__PURE__ */ jsx60("div", { className: "stn-alert-center__divider", "aria-hidden": true }),
8948
- /* @__PURE__ */ jsx60(
8997
+ /* @__PURE__ */ jsx63("div", { className: "stn-alert-center__divider", "aria-hidden": true }),
8998
+ /* @__PURE__ */ jsx63(
8949
8999
  StnButton,
8950
9000
  {
8951
9001
  icon: "line/x",
@@ -8957,14 +9007,14 @@ function StnAlertCenterPanel({
8957
9007
  )
8958
9008
  ] })
8959
9009
  ] }),
8960
- /* @__PURE__ */ jsxs48(
9010
+ /* @__PURE__ */ jsxs51(
8961
9011
  StnScroll,
8962
9012
  {
8963
9013
  orientation: "vertical",
8964
9014
  size: "thin",
8965
9015
  className: "stn-alert-center__list-wrap",
8966
9016
  children: [
8967
- activeTab === "error" && /* @__PURE__ */ jsx60("ul", { className: "stn-alert-center__list", children: alerts.map((item) => /* @__PURE__ */ jsx60("li", { children: /* @__PURE__ */ jsx60(
9017
+ activeTab === "error" && /* @__PURE__ */ jsx63("ul", { className: "stn-alert-center__list", children: alerts.map((item) => /* @__PURE__ */ jsx63("li", { children: /* @__PURE__ */ jsx63(
8968
9018
  StnAlertCard,
8969
9019
  {
8970
9020
  item,
@@ -8973,35 +9023,35 @@ function StnAlertCenterPanel({
8973
9023
  onClick: () => onItemClick?.(item)
8974
9024
  }
8975
9025
  ) }, item.id ?? item.title)) }),
8976
- activeTab === "work" && /* @__PURE__ */ jsx60("ul", { className: "stn-alert-center__list", children: workItems.map((row) => /* @__PURE__ */ jsx60("li", { children: /* @__PURE__ */ jsx60(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__row", children: [
8977
- /* @__PURE__ */ jsx60(StnIcon, { name: "line/clock", size: 24, color: "var(--stn-text-secondary)", className: "stn-alert-card__icon" }),
8978
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__body", children: [
8979
- /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__type-label work", children: row.typeLabel }),
8980
- /* @__PURE__ */ jsx60("span", { className: cn("stn-alert-card__desc", resolvedDescOverflow), title: row.text, children: /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__text-inner", children: row.text }) })
9026
+ activeTab === "work" && /* @__PURE__ */ jsx63("ul", { className: "stn-alert-center__list", children: workItems.map((row) => /* @__PURE__ */ jsx63("li", { children: /* @__PURE__ */ jsx63(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__row", children: [
9027
+ /* @__PURE__ */ jsx63(StnIcon, { name: "line/clock", size: 24, color: "var(--stn-text-secondary)", className: "stn-alert-card__icon" }),
9028
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__body", children: [
9029
+ /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__type-label work", children: row.typeLabel }),
9030
+ /* @__PURE__ */ jsx63("span", { className: cn("stn-alert-card__desc", resolvedDescOverflow), title: row.text, children: /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__text-inner", children: row.text }) })
8981
9031
  ] }),
8982
- /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__time", children: row.time })
9032
+ /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__time", children: row.time })
8983
9033
  ] }) }) }, row.id ?? row.text)) }),
8984
- activeTab === "deploy" && /* @__PURE__ */ jsx60("ul", { className: "stn-alert-center__list", children: deployItems.map((row) => /* @__PURE__ */ jsx60("li", { children: /* @__PURE__ */ jsx60(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__row", children: [
8985
- /* @__PURE__ */ jsx60(StnIcon, { name: "line/settings", size: 24, color: "var(--stn-secondary)", className: "stn-alert-card__icon" }),
8986
- /* @__PURE__ */ jsxs48("div", { className: "stn-alert-card__body", children: [
8987
- /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__type-label stn-alert-card__type-label--deploy", children: row.typeLabel }),
8988
- /* @__PURE__ */ jsx60("span", { className: cn("stn-alert-card__desc", resolvedDescOverflow), title: row.text, children: /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__text-inner", children: row.text }) })
9034
+ activeTab === "deploy" && /* @__PURE__ */ jsx63("ul", { className: "stn-alert-center__list", children: deployItems.map((row) => /* @__PURE__ */ jsx63("li", { children: /* @__PURE__ */ jsx63(StnCard, { variant: "elevated", radius: "md", padding: "md", interactive: true, className: "stn-alert-card", children: /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__row", children: [
9035
+ /* @__PURE__ */ jsx63(StnIcon, { name: "line/settings", size: 24, color: "var(--stn-secondary)", className: "stn-alert-card__icon" }),
9036
+ /* @__PURE__ */ jsxs51("div", { className: "stn-alert-card__body", children: [
9037
+ /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__type-label stn-alert-card__type-label--deploy", children: row.typeLabel }),
9038
+ /* @__PURE__ */ jsx63("span", { className: cn("stn-alert-card__desc", resolvedDescOverflow), title: row.text, children: /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__text-inner", children: row.text }) })
8989
9039
  ] }),
8990
- /* @__PURE__ */ jsx60("span", { className: "stn-alert-card__time", children: row.time })
9040
+ /* @__PURE__ */ jsx63("span", { className: "stn-alert-card__time", children: row.time })
8991
9041
  ] }) }) }, row.id ?? row.text)) })
8992
9042
  ]
8993
9043
  }
8994
9044
  ),
8995
- /* @__PURE__ */ jsx60("div", { className: "stn-alert-center__footer", children: /* @__PURE__ */ jsxs48(
9045
+ /* @__PURE__ */ jsx63("div", { className: "stn-alert-center__footer", children: /* @__PURE__ */ jsxs51(
8996
9046
  "button",
8997
9047
  {
8998
9048
  type: "button",
8999
9049
  className: "stn-alert-center__footer-link",
9000
9050
  onClick: onManageSettings,
9001
9051
  children: [
9002
- /* @__PURE__ */ jsx60("span", { children: "\uC54C\uB9BC \uC124\uC815 \uAD00\uB9AC" }),
9003
- /* @__PURE__ */ jsx60(StnIcon, { name: "line/settings", size: 14 }),
9004
- /* @__PURE__ */ jsx60(StnIcon, { name: "line/chevron-right", size: 14 })
9052
+ /* @__PURE__ */ jsx63("span", { children: "\uC54C\uB9BC \uC124\uC815 \uAD00\uB9AC" }),
9053
+ /* @__PURE__ */ jsx63(StnIcon, { name: "line/settings", size: 14 }),
9054
+ /* @__PURE__ */ jsx63(StnIcon, { name: "line/chevron-right", size: 14 })
9005
9055
  ]
9006
9056
  }
9007
9057
  ) })
@@ -9011,7 +9061,7 @@ function StnAlertCenterPanel({
9011
9061
  }
9012
9062
 
9013
9063
  // src/patterns/alertCenter/StnAlertCenterDocPreview.tsx
9014
- import { jsx as jsx61 } from "react/jsx-runtime";
9064
+ import { jsx as jsx64 } from "react/jsx-runtime";
9015
9065
  function StnAlertCenterDocPreview({
9016
9066
  mode = "light",
9017
9067
  theme,
@@ -9019,11 +9069,11 @@ function StnAlertCenterDocPreview({
9019
9069
  children,
9020
9070
  ...panelProps
9021
9071
  }) {
9022
- const panel = children ?? /* @__PURE__ */ jsx61(StnAlertCenterPanel, { ...panelProps });
9072
+ const panel = children ?? /* @__PURE__ */ jsx64(StnAlertCenterPanel, { ...panelProps });
9023
9073
  if (!withDocChrome) {
9024
- return /* @__PURE__ */ jsx61(StnProvider, { mode, theme, applyModeToDocument: false, children: panel });
9074
+ return /* @__PURE__ */ jsx64(StnProvider, { mode, theme, applyModeToDocument: false, children: panel });
9025
9075
  }
9026
- return /* @__PURE__ */ jsx61("div", { className: "stn-doc-frame stn-doc-frame--alert-center", "data-mode": mode, "data-theme": theme, children: /* @__PURE__ */ jsx61("div", { className: "stn-alert-center-preview-shell", children: panel }) });
9076
+ return /* @__PURE__ */ jsx64("div", { className: "stn-doc-frame stn-doc-frame--alert-center", "data-mode": mode, "data-theme": theme, children: /* @__PURE__ */ jsx64("div", { className: "stn-alert-center-preview-shell", children: panel }) });
9027
9077
  }
9028
9078
 
9029
9079
  // src/index.ts
@@ -9050,7 +9100,7 @@ var useSideNav = () => useContext5(SideNavContext);
9050
9100
  // src/components/sideNav/StnSideNavItem.tsx
9051
9101
  import { forwardRef as forwardRef33 } from "react";
9052
9102
  import { STN_NAV_MENU_SUB_ICON } from "@stn-uiux/pub-ui/data/stnSideNavItem";
9053
- import { jsx as jsx62, jsxs as jsxs49 } from "react/jsx-runtime";
9103
+ import { jsx as jsx65, jsxs as jsxs52 } from "react/jsx-runtime";
9054
9104
  function maskStyle2(src) {
9055
9105
  return { maskImage: `url('${src}')`, WebkitMaskImage: `url('${src}')` };
9056
9106
  }
@@ -9097,13 +9147,13 @@ var StnSideNavItem = forwardRef33(function StnSideNavItem2({
9097
9147
  sideNav.onSelect(id);
9098
9148
  }
9099
9149
  };
9100
- const iconElement = hasIcon && !isSub ? /* @__PURE__ */ jsxs49("span", { className: "stn-side-nav-item__icon-wrap", children: [
9101
- /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__icon", "aria-hidden": "true", children: icon ?? (resolvedIconSrc ? /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__icon-glyph", style: maskStyle2(resolvedIconSrc) }) : null) }),
9102
- showDot ? /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__dot-wrap", "aria-hidden": "true", children: /* @__PURE__ */ jsx62(StnBadge, { variant: "dot", color: "error" }) }) : null
9150
+ const iconElement = hasIcon && !isSub ? /* @__PURE__ */ jsxs52("span", { className: "stn-side-nav-item__icon-wrap", children: [
9151
+ /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__icon", "aria-hidden": "true", children: icon ?? (resolvedIconSrc ? /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__icon-glyph", style: maskStyle2(resolvedIconSrc) }) : null) }),
9152
+ showDot ? /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__dot-wrap", "aria-hidden": "true", children: /* @__PURE__ */ jsx65(StnBadge, { variant: "dot", color: "error" }) }) : null
9103
9153
  ] }) : null;
9104
- const subIconElement = hasIcon && isSub ? /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__sub-icon", "aria-hidden": "true", children: icon ?? (resolvedIconSrc ? /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__icon-glyph", style: maskStyle2(resolvedIconSrc) }) : null) }) : null;
9154
+ const subIconElement = hasIcon && isSub ? /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__sub-icon", "aria-hidden": "true", children: icon ?? (resolvedIconSrc ? /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__icon-glyph", style: maskStyle2(resolvedIconSrc) }) : null) }) : null;
9105
9155
  const activeIconElement = isSub ? subIconElement : iconElement;
9106
- return /* @__PURE__ */ jsx62(
9156
+ return /* @__PURE__ */ jsx65(
9107
9157
  "button",
9108
9158
  {
9109
9159
  ref,
@@ -9122,10 +9172,10 @@ var StnSideNavItem = forwardRef33(function StnSideNavItem2({
9122
9172
  title: collapsed ? label : void 0,
9123
9173
  onClick: handleClick,
9124
9174
  ...rest,
9125
- children: /* @__PURE__ */ jsxs49("span", { className: cn("stn-side-nav-item__inner", spreadTrail && "spread"), children: [
9126
- /* @__PURE__ */ jsxs49("span", { className: "stn-side-nav-item__lead", children: [
9127
- isSub && showSubIndent ? /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__sub-indent", "aria-hidden": "true" }) : null,
9128
- shouldShowSubDot ? /* @__PURE__ */ jsx62(
9175
+ children: /* @__PURE__ */ jsxs52("span", { className: cn("stn-side-nav-item__inner", spreadTrail && "spread"), children: [
9176
+ /* @__PURE__ */ jsxs52("span", { className: "stn-side-nav-item__lead", children: [
9177
+ isSub && showSubIndent ? /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__sub-indent", "aria-hidden": "true" }) : null,
9178
+ shouldShowSubDot ? /* @__PURE__ */ jsx65(
9129
9179
  "span",
9130
9180
  {
9131
9181
  className: cn(
@@ -9133,14 +9183,14 @@ var StnSideNavItem = forwardRef33(function StnSideNavItem2({
9133
9183
  hasIcon && iconPosition === "left" && "compact"
9134
9184
  ),
9135
9185
  "aria-hidden": "true",
9136
- children: /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__sub-dot-glyph", style: maskStyle2(STN_NAV_MENU_SUB_ICON) })
9186
+ children: /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__sub-dot-glyph", style: maskStyle2(STN_NAV_MENU_SUB_ICON) })
9137
9187
  }
9138
9188
  ) : null,
9139
9189
  iconPosition === "left" ? activeIconElement : null,
9140
- /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__label", children: label })
9190
+ /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__label", children: label })
9141
9191
  ] }),
9142
9192
  iconPosition === "right" ? activeIconElement : null,
9143
- renderBadge ? typeof badge === "string" || typeof badge === "number" ? /* @__PURE__ */ jsx62(
9193
+ renderBadge ? typeof badge === "string" || typeof badge === "number" ? /* @__PURE__ */ jsx65(
9144
9194
  StnBadge,
9145
9195
  {
9146
9196
  badgeContent: badge,
@@ -9148,7 +9198,7 @@ var StnSideNavItem = forwardRef33(function StnSideNavItem2({
9148
9198
  appearance: "subtle",
9149
9199
  className: "stn-side-nav-item__badge"
9150
9200
  }
9151
- ) : badge ? /* @__PURE__ */ jsx62("span", { className: "stn-side-nav-item__badge", children: badge }) : showBadgeDot ? /* @__PURE__ */ jsx62(
9201
+ ) : badge ? /* @__PURE__ */ jsx65("span", { className: "stn-side-nav-item__badge", children: badge }) : showBadgeDot ? /* @__PURE__ */ jsx65(
9152
9202
  StnBadge,
9153
9203
  {
9154
9204
  variant: "dot",
@@ -9156,7 +9206,7 @@ var StnSideNavItem = forwardRef33(function StnSideNavItem2({
9156
9206
  className: "stn-side-nav-item__badge"
9157
9207
  }
9158
9208
  ) : null : null,
9159
- !isSub && showChevron && !collapsed ? /* @__PURE__ */ jsx62(
9209
+ !isSub && showChevron && !collapsed ? /* @__PURE__ */ jsx65(
9160
9210
  "span",
9161
9211
  {
9162
9212
  className: cn(
@@ -9177,11 +9227,11 @@ import { forwardRef as forwardRef35 } from "react";
9177
9227
 
9178
9228
  // src/components/sideNav/StnSideNavLogo.tsx
9179
9229
  import { forwardRef as forwardRef34 } from "react";
9180
- import { jsx as jsx63 } from "react/jsx-runtime";
9230
+ import { jsx as jsx66 } from "react/jsx-runtime";
9181
9231
  var StnSideNavLogo = forwardRef34(
9182
9232
  function StnSideNavLogo2({ className, logoProps, ...rest }, ref) {
9183
9233
  const { collapsed } = useSideNav();
9184
- return /* @__PURE__ */ jsx63(
9234
+ return /* @__PURE__ */ jsx66(
9185
9235
  "div",
9186
9236
  {
9187
9237
  ref,
@@ -9192,7 +9242,7 @@ var StnSideNavLogo = forwardRef34(
9192
9242
  ),
9193
9243
  title: "InfoMap",
9194
9244
  ...rest,
9195
- children: /* @__PURE__ */ jsx63(
9245
+ children: /* @__PURE__ */ jsx66(
9196
9246
  StnLogo,
9197
9247
  {
9198
9248
  variant: collapsed ? "onlyimg" : "horizontal",
@@ -9206,7 +9256,7 @@ var StnSideNavLogo = forwardRef34(
9206
9256
  );
9207
9257
 
9208
9258
  // src/components/sideNav/StnSideNavHeader.tsx
9209
- import { Fragment as Fragment9, jsx as jsx64, jsxs as jsxs50 } from "react/jsx-runtime";
9259
+ import { Fragment as Fragment9, jsx as jsx67, jsxs as jsxs53 } from "react/jsx-runtime";
9210
9260
  var StnSideNavHeader = forwardRef35(function StnSideNavHeader2({
9211
9261
  children,
9212
9262
  border = false,
@@ -9219,7 +9269,7 @@ var StnSideNavHeader = forwardRef35(function StnSideNavHeader2({
9219
9269
  const { collapsed, onToggleCollapse, isDrawer, setMobileOpen } = useSideNav();
9220
9270
  const withBorder = Boolean(border || hasBorder);
9221
9271
  const shouldShowClose = showClose ?? Boolean(isDrawer);
9222
- return /* @__PURE__ */ jsx64(
9272
+ return /* @__PURE__ */ jsx67(
9223
9273
  "div",
9224
9274
  {
9225
9275
  ref,
@@ -9230,9 +9280,9 @@ var StnSideNavHeader = forwardRef35(function StnSideNavHeader2({
9230
9280
  className
9231
9281
  ),
9232
9282
  ...rest,
9233
- children: children ?? /* @__PURE__ */ jsxs50(Fragment9, { children: [
9234
- /* @__PURE__ */ jsx64(StnSideNavLogo, {}),
9235
- shouldShowClose ? /* @__PURE__ */ jsx64(
9283
+ children: children ?? /* @__PURE__ */ jsxs53(Fragment9, { children: [
9284
+ /* @__PURE__ */ jsx67(StnSideNavLogo, {}),
9285
+ shouldShowClose ? /* @__PURE__ */ jsx67(
9236
9286
  StnButton,
9237
9287
  {
9238
9288
  size: "sm",
@@ -9244,7 +9294,7 @@ var StnSideNavHeader = forwardRef35(function StnSideNavHeader2({
9244
9294
  className: "stn-side-nav__collapse-btn",
9245
9295
  onClick: () => setMobileOpen?.(false)
9246
9296
  }
9247
- ) : showToggle ? /* @__PURE__ */ jsx64(
9297
+ ) : showToggle ? /* @__PURE__ */ jsx67(
9248
9298
  StnButton,
9249
9299
  {
9250
9300
  size: "sm",
@@ -9264,7 +9314,7 @@ var StnSideNavHeader = forwardRef35(function StnSideNavHeader2({
9264
9314
 
9265
9315
  // src/components/sideNav/StnSideNavMenu.tsx
9266
9316
  import { forwardRef as forwardRef36 } from "react";
9267
- import { jsx as jsx65 } from "react/jsx-runtime";
9317
+ import { jsx as jsx68 } from "react/jsx-runtime";
9268
9318
  var StnSideNavMenu = forwardRef36(function StnSideNavMenu2({
9269
9319
  children,
9270
9320
  className,
@@ -9272,7 +9322,7 @@ var StnSideNavMenu = forwardRef36(function StnSideNavMenu2({
9272
9322
  scrollColor = "fade",
9273
9323
  ...rest
9274
9324
  }, ref) {
9275
- return /* @__PURE__ */ jsx65(
9325
+ return /* @__PURE__ */ jsx68(
9276
9326
  "nav",
9277
9327
  {
9278
9328
  ref,
@@ -9298,7 +9348,7 @@ import {
9298
9348
  useRef as useRef9,
9299
9349
  useState as useState17
9300
9350
  } from "react";
9301
- import { jsx as jsx66, jsxs as jsxs51 } from "react/jsx-runtime";
9351
+ import { jsx as jsx69, jsxs as jsxs54 } from "react/jsx-runtime";
9302
9352
  var StnSideNavGroup = forwardRef37(function StnSideNavGroup2({
9303
9353
  label,
9304
9354
  parent,
@@ -9343,7 +9393,7 @@ var StnSideNavGroup = forwardRef37(function StnSideNavGroup2({
9343
9393
  }
9344
9394
  onOpenChange?.(next);
9345
9395
  };
9346
- const subnavNode = children && (!collapsed && isOpen) ? /* @__PURE__ */ jsx66(
9396
+ const subnavNode = children && (!collapsed && isOpen) ? /* @__PURE__ */ jsx69(
9347
9397
  "div",
9348
9398
  {
9349
9399
  className: cn(
@@ -9358,7 +9408,7 @@ var StnSideNavGroup = forwardRef37(function StnSideNavGroup2({
9358
9408
  children
9359
9409
  }
9360
9410
  ) : null;
9361
- return /* @__PURE__ */ jsxs51(
9411
+ return /* @__PURE__ */ jsxs54(
9362
9412
  "div",
9363
9413
  {
9364
9414
  ref: (node) => {
@@ -9379,7 +9429,7 @@ var StnSideNavGroup = forwardRef37(function StnSideNavGroup2({
9379
9429
  "aria-label": typeof label === "string" ? label : void 0,
9380
9430
  ...rest,
9381
9431
  children: [
9382
- label && !collapsed ? /* @__PURE__ */ jsx66("span", { className: "stn-side-nav__group-label", onClick: handleToggle, children: label }) : null,
9432
+ label && !collapsed ? /* @__PURE__ */ jsx69("span", { className: "stn-side-nav__group-label", onClick: handleToggle, children: label }) : null,
9383
9433
  isUp ? subnavNode : null,
9384
9434
  parent,
9385
9435
  !isUp ? subnavNode : null
@@ -9390,9 +9440,9 @@ var StnSideNavGroup = forwardRef37(function StnSideNavGroup2({
9390
9440
 
9391
9441
  // src/components/sideNav/StnSideNavSpacer.tsx
9392
9442
  import { forwardRef as forwardRef38 } from "react";
9393
- import { jsx as jsx67 } from "react/jsx-runtime";
9443
+ import { jsx as jsx70 } from "react/jsx-runtime";
9394
9444
  var StnSideNavSpacer = forwardRef38(function StnSideNavSpacer2({ className, style, ...rest }, ref) {
9395
- return /* @__PURE__ */ jsx67(
9445
+ return /* @__PURE__ */ jsx70(
9396
9446
  "div",
9397
9447
  {
9398
9448
  ref,
@@ -9406,9 +9456,9 @@ var StnSideNavSpacer = forwardRef38(function StnSideNavSpacer2({ className, styl
9406
9456
 
9407
9457
  // src/components/sideNav/StnSideNavFooter.tsx
9408
9458
  import { forwardRef as forwardRef39 } from "react";
9409
- import { jsx as jsx68 } from "react/jsx-runtime";
9459
+ import { jsx as jsx71 } from "react/jsx-runtime";
9410
9460
  var StnSideNavFooter = forwardRef39(function StnSideNavFooter2({ curved = false, children, className, ...rest }, ref) {
9411
- return /* @__PURE__ */ jsx68(
9461
+ return /* @__PURE__ */ jsx71(
9412
9462
  "nav",
9413
9463
  {
9414
9464
  ref,
@@ -9422,11 +9472,11 @@ var StnSideNavFooter = forwardRef39(function StnSideNavFooter2({ curved = false,
9422
9472
 
9423
9473
  // src/components/sideNav/StnSideNavToggle.tsx
9424
9474
  import { forwardRef as forwardRef40 } from "react";
9425
- import { jsx as jsx69 } from "react/jsx-runtime";
9475
+ import { jsx as jsx72 } from "react/jsx-runtime";
9426
9476
  var StnSideNavToggle = forwardRef40(
9427
9477
  function StnSideNavToggle2({ className, onClick, ...rest }, ref) {
9428
9478
  const { collapsed, onToggleCollapse } = useSideNav();
9429
- return /* @__PURE__ */ jsx69(
9479
+ return /* @__PURE__ */ jsx72(
9430
9480
  "button",
9431
9481
  {
9432
9482
  ref,
@@ -9439,7 +9489,7 @@ var StnSideNavToggle = forwardRef40(
9439
9489
  "aria-label": collapsed ? "\uC0AC\uC774\uB4DC\uBC14 \uD3BC\uCE58\uAE30" : "\uC0AC\uC774\uB4DC\uBC14 \uC811\uAE30",
9440
9490
  title: collapsed ? "\uC0AC\uC774\uB4DC\uBC14 \uD3BC\uCE58\uAE30" : "\uC0AC\uC774\uB4DC\uBC14 \uC811\uAE30",
9441
9491
  ...rest,
9442
- children: /* @__PURE__ */ jsx69(
9492
+ children: /* @__PURE__ */ jsx72(
9443
9493
  "svg",
9444
9494
  {
9445
9495
  width: "12",
@@ -9450,7 +9500,7 @@ var StnSideNavToggle = forwardRef40(
9450
9500
  strokeWidth: "2.5",
9451
9501
  strokeLinecap: "round",
9452
9502
  strokeLinejoin: "round",
9453
- children: /* @__PURE__ */ jsx69("path", { d: "M9 18l6-6-6-6" })
9503
+ children: /* @__PURE__ */ jsx72("path", { d: "M9 18l6-6-6-6" })
9454
9504
  }
9455
9505
  )
9456
9506
  }
@@ -9460,17 +9510,17 @@ var StnSideNavToggle = forwardRef40(
9460
9510
 
9461
9511
  // src/components/sideNav/StnSideNavWatermark.tsx
9462
9512
  import { forwardRef as forwardRef41 } from "react";
9463
- import { jsx as jsx70 } from "react/jsx-runtime";
9513
+ import { jsx as jsx73 } from "react/jsx-runtime";
9464
9514
  var StnSideNavWatermark = forwardRef41(
9465
9515
  function StnSideNavWatermark2({ size = "xl", mode, theme, className, ...rest }, ref) {
9466
- return /* @__PURE__ */ jsx70(
9516
+ return /* @__PURE__ */ jsx73(
9467
9517
  "div",
9468
9518
  {
9469
9519
  ref,
9470
9520
  className: cn("stn-side-nav__watermark", className),
9471
9521
  "aria-hidden": "true",
9472
9522
  ...rest,
9473
- children: /* @__PURE__ */ jsx70(StnLogo, { variant: "watermark", size, mode: mode ?? theme })
9523
+ children: /* @__PURE__ */ jsx73(StnLogo, { variant: "watermark", size, mode: mode ?? theme })
9474
9524
  }
9475
9525
  );
9476
9526
  }
@@ -9478,7 +9528,7 @@ var StnSideNavWatermark = forwardRef41(
9478
9528
 
9479
9529
  // src/components/sideNav/StnSideNavMobileTrigger.tsx
9480
9530
  import { forwardRef as forwardRef42, useEffect as useEffect14, useState as useState18 } from "react";
9481
- import { jsx as jsx71, jsxs as jsxs52 } from "react/jsx-runtime";
9531
+ import { jsx as jsx74, jsxs as jsxs55 } from "react/jsx-runtime";
9482
9532
  var StnSideNavMobileTrigger = forwardRef42(
9483
9533
  function StnSideNavMobileTrigger2({ floating = false, className, children, onClick, ...rest }, ref) {
9484
9534
  const { onToggleMobileOpen, mobileOpen: contextMobileOpen } = useSideNav();
@@ -9497,7 +9547,7 @@ var StnSideNavMobileTrigger = forwardRef42(
9497
9547
  };
9498
9548
  }, [onToggleMobileOpen]);
9499
9549
  const isMobileOpen = onToggleMobileOpen ? contextMobileOpen : fallbackMobileOpen;
9500
- return /* @__PURE__ */ jsx71(
9550
+ return /* @__PURE__ */ jsx74(
9501
9551
  "button",
9502
9552
  {
9503
9553
  ref,
@@ -9519,10 +9569,10 @@ var StnSideNavMobileTrigger = forwardRef42(
9519
9569
  }
9520
9570
  },
9521
9571
  ...rest,
9522
- children: children ?? /* @__PURE__ */ jsxs52("span", { className: "stn-side-nav__hamburger-bars", "aria-hidden": "true", children: [
9523
- /* @__PURE__ */ jsx71("span", {}),
9524
- /* @__PURE__ */ jsx71("span", {}),
9525
- /* @__PURE__ */ jsx71("span", {})
9572
+ children: children ?? /* @__PURE__ */ jsxs55("span", { className: "stn-side-nav__hamburger-bars", "aria-hidden": "true", children: [
9573
+ /* @__PURE__ */ jsx74("span", {}),
9574
+ /* @__PURE__ */ jsx74("span", {}),
9575
+ /* @__PURE__ */ jsx74("span", {})
9526
9576
  ] })
9527
9577
  }
9528
9578
  );
@@ -9533,10 +9583,10 @@ var StnSideNavMobileTrigger = forwardRef42(
9533
9583
  import {
9534
9584
  forwardRef as forwardRef43
9535
9585
  } from "react";
9536
- import { jsx as jsx72 } from "react/jsx-runtime";
9586
+ import { jsx as jsx75 } from "react/jsx-runtime";
9537
9587
  var StnSideNavSub = forwardRef43(
9538
9588
  function StnSideNavSub2({ children, className, ...rest }, ref) {
9539
- return /* @__PURE__ */ jsx72(
9589
+ return /* @__PURE__ */ jsx75(
9540
9590
  "div",
9541
9591
  {
9542
9592
  ref,
@@ -9565,14 +9615,14 @@ var StnSideNavSubItem = forwardRef43(
9565
9615
  const { collapsed } = useSideNav();
9566
9616
  const content = children ?? label;
9567
9617
  const computedTitle = title ?? (typeof content === "string" ? content : void 0);
9568
- const resolvedIcon = icon ?? (iconSrc ? /* @__PURE__ */ jsx72("span", { className: "stn-side-nav__sub-icon", children: /* @__PURE__ */ jsx72(
9618
+ const resolvedIcon = icon ?? (iconSrc ? /* @__PURE__ */ jsx75("span", { className: "stn-side-nav__sub-icon", children: /* @__PURE__ */ jsx75(
9569
9619
  "span",
9570
9620
  {
9571
9621
  className: "stn-side-nav__sub-glyph",
9572
9622
  style: { maskImage: `url('${iconSrc}')`, WebkitMaskImage: `url('${iconSrc}')` }
9573
9623
  }
9574
9624
  ) }) : null);
9575
- return /* @__PURE__ */ jsx72(
9625
+ return /* @__PURE__ */ jsx75(
9576
9626
  StnButton,
9577
9627
  {
9578
9628
  ref,
@@ -9592,7 +9642,7 @@ var StnSideNavSubItem = forwardRef43(
9592
9642
 
9593
9643
  // src/components/sideNav/StnSideNavSubNav.tsx
9594
9644
  import { forwardRef as forwardRef44 } from "react";
9595
- import { jsx as jsx73 } from "react/jsx-runtime";
9645
+ import { jsx as jsx76 } from "react/jsx-runtime";
9596
9646
  var StnSideNavSubNav = forwardRef44(
9597
9647
  function StnSideNavSubNav2({
9598
9648
  dropdown = false,
@@ -9605,7 +9655,7 @@ var StnSideNavSubNav = forwardRef44(
9605
9655
  }, ref) {
9606
9656
  const isUp = direction === "up";
9607
9657
  const isTransparent = variant === "transparent" || background === false;
9608
- return /* @__PURE__ */ jsx73(
9658
+ return /* @__PURE__ */ jsx76(
9609
9659
  "div",
9610
9660
  {
9611
9661
  ref,
@@ -9634,7 +9684,7 @@ import {
9634
9684
  useMemo as useMemo5,
9635
9685
  useState as useState19
9636
9686
  } from "react";
9637
- import { jsx as jsx74, jsxs as jsxs53 } from "react/jsx-runtime";
9687
+ import { jsx as jsx77, jsxs as jsxs56 } from "react/jsx-runtime";
9638
9688
  function useControllableState(controlledValue, defaultValue, onChange) {
9639
9689
  const [internalState, setInternalState] = useState19(defaultValue);
9640
9690
  const isControlled = controlledValue !== void 0;
@@ -9727,9 +9777,9 @@ var StnSideNavigationRoot = forwardRef45(function StnSideNavigationRoot2({
9727
9777
  }),
9728
9778
  [isEffectiveCollapsed, activeId, setActiveId, handleToggleCollapse, mobileOpen, handleToggleMobileOpen, setMobileOpen, isDrawerMode]
9729
9779
  );
9730
- return /* @__PURE__ */ jsxs53(SideNavContext.Provider, { value: contextValue, children: [
9731
- showMobileTrigger && /* @__PURE__ */ jsx74(StnSideNavMobileTrigger, { floating: true }),
9732
- (drawer || responsiveDrawer) && /* @__PURE__ */ jsx74(
9780
+ return /* @__PURE__ */ jsxs56(SideNavContext.Provider, { value: contextValue, children: [
9781
+ showMobileTrigger && /* @__PURE__ */ jsx77(StnSideNavMobileTrigger, { floating: true }),
9782
+ (drawer || responsiveDrawer) && /* @__PURE__ */ jsx77(
9733
9783
  "div",
9734
9784
  {
9735
9785
  className: cn("stn-side-nav__backdrop", mobileOpen && "is-open"),
@@ -9737,7 +9787,7 @@ var StnSideNavigationRoot = forwardRef45(function StnSideNavigationRoot2({
9737
9787
  "aria-hidden": !mobileOpen
9738
9788
  }
9739
9789
  ),
9740
- /* @__PURE__ */ jsx74(
9790
+ /* @__PURE__ */ jsx77(
9741
9791
  "aside",
9742
9792
  {
9743
9793
  ref,
@@ -9786,7 +9836,7 @@ import {
9786
9836
  import {
9787
9837
  STN_BREADCRUMB_ICON_SRC
9788
9838
  } from "@stn-uiux/pub-ui/data/stnBreadcrumb";
9789
- import { Fragment as Fragment11, jsx as jsx75, jsxs as jsxs54 } from "react/jsx-runtime";
9839
+ import { Fragment as Fragment11, jsx as jsx78, jsxs as jsxs57 } from "react/jsx-runtime";
9790
9840
  function maskStyle3(src) {
9791
9841
  return { maskImage: `url('${src}')`, WebkitMaskImage: `url('${src}')` };
9792
9842
  }
@@ -9799,13 +9849,13 @@ function hasSegmentMenu(item) {
9799
9849
  return Boolean(item.menu || item.menuItems && item.menuItems.length > 0);
9800
9850
  }
9801
9851
  function BreadcrumbSeparator() {
9802
- return /* @__PURE__ */ jsx75("li", { className: "separator", "aria-hidden": "true", children: /* @__PURE__ */ jsx75("span", { style: maskStyle3(STN_BREADCRUMB_ICON_SRC.separator) }) });
9852
+ return /* @__PURE__ */ jsx78("li", { className: "separator", "aria-hidden": "true", children: /* @__PURE__ */ jsx78("span", { style: maskStyle3(STN_BREADCRUMB_ICON_SRC.separator) }) });
9803
9853
  }
9804
9854
  function BreadcrumbIcon({ src }) {
9805
- return /* @__PURE__ */ jsx75("span", { className: "stn-breadcrumb__icon-glyph", style: maskStyle3(src), "aria-hidden": "true" });
9855
+ return /* @__PURE__ */ jsx78("span", { className: "stn-breadcrumb__icon-glyph", style: maskStyle3(src), "aria-hidden": "true" });
9806
9856
  }
9807
9857
  function BreadcrumbCaret() {
9808
- return /* @__PURE__ */ jsx75(
9858
+ return /* @__PURE__ */ jsx78(
9809
9859
  "span",
9810
9860
  {
9811
9861
  className: "stn-breadcrumb__caret",
@@ -9819,10 +9869,10 @@ function SegmentContent({
9819
9869
  label,
9820
9870
  menu
9821
9871
  }) {
9822
- return /* @__PURE__ */ jsxs54(Fragment11, { children: [
9823
- iconSrc ? /* @__PURE__ */ jsx75(BreadcrumbIcon, { src: iconSrc }) : null,
9824
- /* @__PURE__ */ jsx75("span", { className: "stn-breadcrumb__label", children: label }),
9825
- menu ? /* @__PURE__ */ jsx75(BreadcrumbCaret, {}) : null
9872
+ return /* @__PURE__ */ jsxs57(Fragment11, { children: [
9873
+ iconSrc ? /* @__PURE__ */ jsx78(BreadcrumbIcon, { src: iconSrc }) : null,
9874
+ /* @__PURE__ */ jsx78("span", { className: "stn-breadcrumb__label", children: label }),
9875
+ menu ? /* @__PURE__ */ jsx78(BreadcrumbCaret, {}) : null
9826
9876
  ] });
9827
9877
  }
9828
9878
  function BreadcrumbMenuList({
@@ -9830,7 +9880,7 @@ function BreadcrumbMenuList({
9830
9880
  items,
9831
9881
  onPick
9832
9882
  }) {
9833
- return /* @__PURE__ */ jsx75("ul", { id, className: "stn-breadcrumb__menu", role: "menu", children: items.map((option) => /* @__PURE__ */ jsx75("li", { role: "none", children: option.href ? /* @__PURE__ */ jsx75(
9883
+ return /* @__PURE__ */ jsx78("ul", { id, className: "stn-breadcrumb__menu", role: "menu", children: items.map((option) => /* @__PURE__ */ jsx78("li", { role: "none", children: option.href ? /* @__PURE__ */ jsx78(
9834
9884
  "a",
9835
9885
  {
9836
9886
  role: "menuitem",
@@ -9842,7 +9892,7 @@ function BreadcrumbMenuList({
9842
9892
  },
9843
9893
  children: option.label
9844
9894
  }
9845
- ) : /* @__PURE__ */ jsx75(
9895
+ ) : /* @__PURE__ */ jsx78(
9846
9896
  "button",
9847
9897
  {
9848
9898
  type: "button",
@@ -9886,13 +9936,13 @@ function BreadcrumbSegment({
9886
9936
  const canOpenMenu = showMenu && menuItems.length > 0;
9887
9937
  const rootRef = useDismissibleMenu(open, () => setOpen(false));
9888
9938
  const iconSrc = resolveIconSrc(item);
9889
- const content = /* @__PURE__ */ jsx75(SegmentContent, { iconSrc, label: item.label, menu: showMenu });
9939
+ const content = /* @__PURE__ */ jsx78(SegmentContent, { iconSrc, label: item.label, menu: showMenu });
9890
9940
  if (isCurrent) {
9891
- return /* @__PURE__ */ jsx75("span", { className: "stn-breadcrumb__segment", "aria-current": "page", "aria-label": item.label, children: content });
9941
+ return /* @__PURE__ */ jsx78("span", { className: "stn-breadcrumb__segment", "aria-current": "page", "aria-label": item.label, children: content });
9892
9942
  }
9893
9943
  if (canOpenMenu) {
9894
- return /* @__PURE__ */ jsxs54("span", { ref: rootRef, className: "stn-breadcrumb__segment-wrap", children: [
9895
- /* @__PURE__ */ jsx75(
9944
+ return /* @__PURE__ */ jsxs57("span", { ref: rootRef, className: "stn-breadcrumb__segment-wrap", children: [
9945
+ /* @__PURE__ */ jsx78(
9896
9946
  "button",
9897
9947
  {
9898
9948
  type: "button",
@@ -9908,7 +9958,7 @@ function BreadcrumbSegment({
9908
9958
  children: content
9909
9959
  }
9910
9960
  ),
9911
- open ? /* @__PURE__ */ jsx75(BreadcrumbMenuList, { id: menuId, items: menuItems, onPick: () => setOpen(false) }) : null
9961
+ open ? /* @__PURE__ */ jsx78(BreadcrumbMenuList, { id: menuId, items: menuItems, onPick: () => setOpen(false) }) : null
9912
9962
  ] });
9913
9963
  }
9914
9964
  if (item.menu || item.onClick) {
@@ -9920,7 +9970,7 @@ function BreadcrumbSegment({
9920
9970
  "aria-haspopup": item.menu ? "menu" : void 0,
9921
9971
  "aria-expanded": item.menu ? false : void 0
9922
9972
  };
9923
- return /* @__PURE__ */ jsx75("button", { ...buttonProps, children: content });
9973
+ return /* @__PURE__ */ jsx78("button", { ...buttonProps, children: content });
9924
9974
  }
9925
9975
  if (item.href) {
9926
9976
  const linkProps = {
@@ -9929,17 +9979,17 @@ function BreadcrumbSegment({
9929
9979
  onClick: item.onClick,
9930
9980
  "aria-label": item.label
9931
9981
  };
9932
- return /* @__PURE__ */ jsx75("a", { ...linkProps, children: content });
9982
+ return /* @__PURE__ */ jsx78("a", { ...linkProps, children: content });
9933
9983
  }
9934
- return /* @__PURE__ */ jsx75("span", { className: "stn-breadcrumb__segment", "aria-label": item.label, children: content });
9984
+ return /* @__PURE__ */ jsx78("span", { className: "stn-breadcrumb__segment", "aria-label": item.label, children: content });
9935
9985
  }
9936
9986
  function BreadcrumbBack({
9937
9987
  label,
9938
9988
  href,
9939
9989
  onClick
9940
9990
  }) {
9941
- const content = /* @__PURE__ */ jsxs54(Fragment11, { children: [
9942
- /* @__PURE__ */ jsx75(
9991
+ const content = /* @__PURE__ */ jsxs57(Fragment11, { children: [
9992
+ /* @__PURE__ */ jsx78(
9943
9993
  "span",
9944
9994
  {
9945
9995
  className: "stn-breadcrumb__back-glyph",
@@ -9947,12 +9997,12 @@ function BreadcrumbBack({
9947
9997
  "aria-hidden": "true"
9948
9998
  }
9949
9999
  ),
9950
- /* @__PURE__ */ jsx75("span", { className: "stn-breadcrumb__label", children: label })
10000
+ /* @__PURE__ */ jsx78("span", { className: "stn-breadcrumb__label", children: label })
9951
10001
  ] });
9952
10002
  if (href) {
9953
- return /* @__PURE__ */ jsx75("a", { className: "stn-breadcrumb__back", href, onClick, "aria-label": `\uB4A4\uB85C: ${label}`, children: content });
10003
+ return /* @__PURE__ */ jsx78("a", { className: "stn-breadcrumb__back", href, onClick, "aria-label": `\uB4A4\uB85C: ${label}`, children: content });
9954
10004
  }
9955
- return /* @__PURE__ */ jsx75("button", { type: "button", className: "stn-breadcrumb__back", onClick, "aria-label": `\uB4A4\uB85C: ${label}`, children: content });
10005
+ return /* @__PURE__ */ jsx78("button", { type: "button", className: "stn-breadcrumb__back", onClick, "aria-label": `\uB4A4\uB85C: ${label}`, children: content });
9956
10006
  }
9957
10007
  function splitCollapsedItems(items, maxItems, itemsBeforeCollapse, itemsAfterCollapse) {
9958
10008
  if (!maxItems || items.length <= maxItems) {
@@ -9983,8 +10033,8 @@ function BreadcrumbCollapsed({
9983
10033
  onClick: item.onClick,
9984
10034
  current: item.current
9985
10035
  }));
9986
- return /* @__PURE__ */ jsxs54("li", { className: "stn-breadcrumb__item", ref: rootRef, children: [
9987
- /* @__PURE__ */ jsx75(
10036
+ return /* @__PURE__ */ jsxs57("li", { className: "stn-breadcrumb__item", ref: rootRef, children: [
10037
+ /* @__PURE__ */ jsx78(
9988
10038
  "button",
9989
10039
  {
9990
10040
  type: "button",
@@ -9997,7 +10047,7 @@ function BreadcrumbCollapsed({
9997
10047
  children: "\u22EF"
9998
10048
  }
9999
10049
  ),
10000
- open ? /* @__PURE__ */ jsx75(BreadcrumbMenuList, { id: menuId, items: menuItems, onPick: () => setOpen(false) }) : null
10050
+ open ? /* @__PURE__ */ jsx78(BreadcrumbMenuList, { id: menuId, items: menuItems, onPick: () => setOpen(false) }) : null
10001
10051
  ] });
10002
10052
  }
10003
10053
  function StnBreadcrumb({
@@ -10029,8 +10079,8 @@ function StnBreadcrumb({
10029
10079
  const lastId = items[items.length - 1]?.id;
10030
10080
  const renderTrailItem = (item) => {
10031
10081
  const isCurrent = Boolean(item.current) || item.id === lastId;
10032
- const segment = /* @__PURE__ */ jsx75(BreadcrumbSegment, { item, isCurrent });
10033
- return /* @__PURE__ */ jsx75(
10082
+ const segment = /* @__PURE__ */ jsx78(BreadcrumbSegment, { item, isCurrent });
10083
+ return /* @__PURE__ */ jsx78(
10034
10084
  "li",
10035
10085
  {
10036
10086
  className: cn(
@@ -10041,27 +10091,27 @@ function StnBreadcrumb({
10041
10091
  }
10042
10092
  );
10043
10093
  };
10044
- return /* @__PURE__ */ jsx75(
10094
+ return /* @__PURE__ */ jsx78(
10045
10095
  "nav",
10046
10096
  {
10047
10097
  className: cn("stn-breadcrumb", size, variant === "chip" && "chip", className),
10048
10098
  "aria-label": "Breadcrumb",
10049
- children: /* @__PURE__ */ jsxs54("ol", { className: "stn-breadcrumb__list", children: [
10050
- currentItem ? /* @__PURE__ */ jsx75("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--back", children: /* @__PURE__ */ jsx75(BreadcrumbBack, { label: currentItem.label, href: backHref, onClick: backOnClick }) }) : null,
10051
- showHome ? /* @__PURE__ */ jsx75("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--home", children: /* @__PURE__ */ jsxs54("a", { className: "stn-breadcrumb__home", href: homeHref, onClick: onHomeClick, children: [
10052
- /* @__PURE__ */ jsx75(BreadcrumbIcon, { src: STN_BREADCRUMB_ICON_SRC.home }),
10053
- /* @__PURE__ */ jsx75("span", { className: "blind", children: homeLabel })
10099
+ children: /* @__PURE__ */ jsxs57("ol", { className: "stn-breadcrumb__list", children: [
10100
+ currentItem ? /* @__PURE__ */ jsx78("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--back", children: /* @__PURE__ */ jsx78(BreadcrumbBack, { label: currentItem.label, href: backHref, onClick: backOnClick }) }) : null,
10101
+ showHome ? /* @__PURE__ */ jsx78("li", { className: "stn-breadcrumb__item stn-breadcrumb__item--home", children: /* @__PURE__ */ jsxs57("a", { className: "stn-breadcrumb__home", href: homeHref, onClick: onHomeClick, children: [
10102
+ /* @__PURE__ */ jsx78(BreadcrumbIcon, { src: STN_BREADCRUMB_ICON_SRC.home }),
10103
+ /* @__PURE__ */ jsx78("span", { className: "blind", children: homeLabel })
10054
10104
  ] }) }) : null,
10055
- head.map((item, index) => /* @__PURE__ */ jsxs54(Fragment10, { children: [
10056
- showHome || index > 0 ? /* @__PURE__ */ jsx75(BreadcrumbSeparator, {}) : null,
10105
+ head.map((item, index) => /* @__PURE__ */ jsxs57(Fragment10, { children: [
10106
+ showHome || index > 0 ? /* @__PURE__ */ jsx78(BreadcrumbSeparator, {}) : null,
10057
10107
  renderTrailItem(item)
10058
10108
  ] }, item.id)),
10059
- hidden.length > 0 ? /* @__PURE__ */ jsxs54(Fragment11, { children: [
10060
- /* @__PURE__ */ jsx75(BreadcrumbSeparator, {}),
10061
- /* @__PURE__ */ jsx75(BreadcrumbCollapsed, { items: hidden, menuId })
10109
+ hidden.length > 0 ? /* @__PURE__ */ jsxs57(Fragment11, { children: [
10110
+ /* @__PURE__ */ jsx78(BreadcrumbSeparator, {}),
10111
+ /* @__PURE__ */ jsx78(BreadcrumbCollapsed, { items: hidden, menuId })
10062
10112
  ] }) : null,
10063
- tail.map((item) => /* @__PURE__ */ jsxs54(Fragment10, { children: [
10064
- /* @__PURE__ */ jsx75(BreadcrumbSeparator, {}),
10113
+ tail.map((item) => /* @__PURE__ */ jsxs57(Fragment10, { children: [
10114
+ /* @__PURE__ */ jsx78(BreadcrumbSeparator, {}),
10065
10115
  renderTrailItem(item)
10066
10116
  ] }, item.id))
10067
10117
  ] })
@@ -10072,7 +10122,7 @@ function StnBreadcrumb({
10072
10122
  // src/components/StnHeaderTitle.tsx
10073
10123
  import { useEffect as useEffect17, useState as useState21 } from "react";
10074
10124
  import { STN_HEADER_TITLE_FRAME } from "@stn-uiux/pub-ui/data/stnHeaderTitle";
10075
- import { jsx as jsx76, jsxs as jsxs55 } from "react/jsx-runtime";
10125
+ import { jsx as jsx79, jsxs as jsxs58 } from "react/jsx-runtime";
10076
10126
  var KO_WEEKDAY_SHORT = ["\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0"];
10077
10127
  var KO_WEEKDAY_LONG = [
10078
10128
  "\uC77C\uC694\uC77C",
@@ -10111,8 +10161,8 @@ function formatStnHeaderTitleTime(date, options) {
10111
10161
  }
10112
10162
  function HeaderTitleFrame({ preview = false }) {
10113
10163
  const frameClass = preview ? "stn-header-title__frame-preview" : "stn-header-title__frame";
10114
- return /* @__PURE__ */ jsxs55("div", { className: frameClass, "aria-hidden": "true", children: [
10115
- /* @__PURE__ */ jsx76("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--outer", children: /* @__PURE__ */ jsx76(
10164
+ return /* @__PURE__ */ jsxs58("div", { className: frameClass, "aria-hidden": "true", children: [
10165
+ /* @__PURE__ */ jsx79("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--outer", children: /* @__PURE__ */ jsx79(
10116
10166
  "img",
10117
10167
  {
10118
10168
  className: "stn-header-title__frame-img",
@@ -10121,8 +10171,8 @@ function HeaderTitleFrame({ preview = false }) {
10121
10171
  draggable: false
10122
10172
  }
10123
10173
  ) }),
10124
- /* @__PURE__ */ jsxs55("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--inner", children: [
10125
- /* @__PURE__ */ jsx76(
10174
+ /* @__PURE__ */ jsxs58("div", { className: "stn-header-title__frame-bleed stn-header-title__frame-bleed--inner", children: [
10175
+ /* @__PURE__ */ jsx79(
10126
10176
  "img",
10127
10177
  {
10128
10178
  className: "stn-header-title__frame-img stn-header-title__frame-img--dark",
@@ -10131,7 +10181,7 @@ function HeaderTitleFrame({ preview = false }) {
10131
10181
  draggable: false
10132
10182
  }
10133
10183
  ),
10134
- /* @__PURE__ */ jsx76(
10184
+ /* @__PURE__ */ jsx79(
10135
10185
  "img",
10136
10186
  {
10137
10187
  className: "stn-header-title__frame-img stn-header-title__frame-img--light",
@@ -10144,7 +10194,7 @@ function HeaderTitleFrame({ preview = false }) {
10144
10194
  ] });
10145
10195
  }
10146
10196
  function StnHeaderTitleFramePreview({ className }) {
10147
- return /* @__PURE__ */ jsx76("div", { className: cn("stn-header-title__frame-only", className), children: /* @__PURE__ */ jsx76(HeaderTitleFrame, { preview: true }) });
10197
+ return /* @__PURE__ */ jsx79("div", { className: cn("stn-header-title__frame-only", className), children: /* @__PURE__ */ jsx79(HeaderTitleFrame, { preview: true }) });
10148
10198
  }
10149
10199
  function useLiveClock(enabled) {
10150
10200
  const [now, setNow] = useState21(() => /* @__PURE__ */ new Date());
@@ -10160,35 +10210,35 @@ function StnHeaderTitleMainText({
10160
10210
  children,
10161
10211
  ...rest
10162
10212
  }) {
10163
- return /* @__PURE__ */ jsx76("h1", { className: cn("stn-header-title__text", className), ...rest, children });
10213
+ return /* @__PURE__ */ jsx79("h1", { className: cn("stn-header-title__text", className), ...rest, children });
10164
10214
  }
10165
10215
  function StnHeaderTitleSubText({
10166
10216
  className,
10167
10217
  children,
10168
10218
  ...rest
10169
10219
  }) {
10170
- return /* @__PURE__ */ jsx76("span", { className: cn("stn-header-title__sub-text", className), ...rest, children });
10220
+ return /* @__PURE__ */ jsx79("span", { className: cn("stn-header-title__sub-text", className), ...rest, children });
10171
10221
  }
10172
10222
  function StnHeaderTitleDate({
10173
10223
  className,
10174
10224
  children,
10175
10225
  ...rest
10176
10226
  }) {
10177
- return /* @__PURE__ */ jsx76("time", { className: cn("stn-header-title__date", className), ...rest, children });
10227
+ return /* @__PURE__ */ jsx79("time", { className: cn("stn-header-title__date", className), ...rest, children });
10178
10228
  }
10179
10229
  function StnHeaderTitleWeekday({
10180
10230
  className,
10181
10231
  children,
10182
10232
  ...rest
10183
10233
  }) {
10184
- return /* @__PURE__ */ jsx76("span", { className: cn("stn-header-title__weekday", className), ...rest, children });
10234
+ return /* @__PURE__ */ jsx79("span", { className: cn("stn-header-title__weekday", className), ...rest, children });
10185
10235
  }
10186
10236
  function StnHeaderTitleTime({
10187
10237
  className,
10188
10238
  children,
10189
10239
  ...rest
10190
10240
  }) {
10191
- return /* @__PURE__ */ jsx76("span", { className: cn("stn-header-title__time", className), "aria-label": "\uD604\uC7AC \uC2DC\uAC01", ...rest, children });
10241
+ return /* @__PURE__ */ jsx79("span", { className: cn("stn-header-title__time", className), "aria-label": "\uD604\uC7AC \uC2DC\uAC01", ...rest, children });
10192
10242
  }
10193
10243
  function StnHeaderTitleClock({
10194
10244
  className,
@@ -10211,7 +10261,7 @@ function StnHeaderTitleClock({
10211
10261
  }) {
10212
10262
  const now = useLiveClock(live);
10213
10263
  if (children != null) {
10214
- return /* @__PURE__ */ jsxs55(
10264
+ return /* @__PURE__ */ jsxs58(
10215
10265
  "header",
10216
10266
  {
10217
10267
  className: cn(
@@ -10223,8 +10273,8 @@ function StnHeaderTitleClock({
10223
10273
  ),
10224
10274
  ...rest,
10225
10275
  children: [
10226
- framed ? /* @__PURE__ */ jsx76(HeaderTitleFrame, {}) : null,
10227
- /* @__PURE__ */ jsx76("div", { className: "stn-header-title__content", children })
10276
+ framed ? /* @__PURE__ */ jsx79(HeaderTitleFrame, {}) : null,
10277
+ /* @__PURE__ */ jsx79("div", { className: "stn-header-title__content", children })
10228
10278
  ]
10229
10279
  }
10230
10280
  );
@@ -10254,7 +10304,7 @@ function StnHeaderTitleClock({
10254
10304
  resolvedTime = formatStnHeaderTitleTime(now, { showSeconds });
10255
10305
  }
10256
10306
  }
10257
- return /* @__PURE__ */ jsxs55(
10307
+ return /* @__PURE__ */ jsxs58(
10258
10308
  "header",
10259
10309
  {
10260
10310
  className: cn(
@@ -10266,11 +10316,11 @@ function StnHeaderTitleClock({
10266
10316
  ),
10267
10317
  ...rest,
10268
10318
  children: [
10269
- framed ? /* @__PURE__ */ jsx76(HeaderTitleFrame, {}) : null,
10270
- /* @__PURE__ */ jsxs55("div", { className: "stn-header-title__content", children: [
10271
- resolvedDate ? /* @__PURE__ */ jsx76("time", { className: "stn-header-title__date", dateTime: resolvedDate, children: resolvedDate }) : null,
10272
- showWeekdayOnly ? /* @__PURE__ */ jsx76("span", { className: "stn-header-title__weekday", children: resolvedWeekday }) : null,
10273
- resolvedTime ? /* @__PURE__ */ jsx76("span", { className: "stn-header-title__time", "aria-label": "\uD604\uC7AC \uC2DC\uAC01", children: resolvedTime }) : null
10319
+ framed ? /* @__PURE__ */ jsx79(HeaderTitleFrame, {}) : null,
10320
+ /* @__PURE__ */ jsxs58("div", { className: "stn-header-title__content", children: [
10321
+ resolvedDate ? /* @__PURE__ */ jsx79("time", { className: "stn-header-title__date", dateTime: resolvedDate, children: resolvedDate }) : null,
10322
+ showWeekdayOnly ? /* @__PURE__ */ jsx79("span", { className: "stn-header-title__weekday", children: resolvedWeekday }) : null,
10323
+ resolvedTime ? /* @__PURE__ */ jsx79("span", { className: "stn-header-title__time", "aria-label": "\uD604\uC7AC \uC2DC\uAC01", children: resolvedTime }) : null
10274
10324
  ] })
10275
10325
  ]
10276
10326
  }
@@ -10287,7 +10337,7 @@ function StnHeaderTitleDual({
10287
10337
  ...rest
10288
10338
  }) {
10289
10339
  const resolvedMain = mainText ?? title ?? children;
10290
- return /* @__PURE__ */ jsxs55(
10340
+ return /* @__PURE__ */ jsxs58(
10291
10341
  "header",
10292
10342
  {
10293
10343
  className: cn(
@@ -10299,10 +10349,10 @@ function StnHeaderTitleDual({
10299
10349
  ),
10300
10350
  ...rest,
10301
10351
  children: [
10302
- framed ? /* @__PURE__ */ jsx76(HeaderTitleFrame, {}) : null,
10303
- /* @__PURE__ */ jsxs55("div", { className: "stn-header-title__content", children: [
10304
- subText != null ? /* @__PURE__ */ jsx76("span", { className: "stn-header-title__sub-text", children: subText }) : null,
10305
- resolvedMain != null ? typeof resolvedMain === "string" || typeof resolvedMain === "number" ? /* @__PURE__ */ jsx76("h1", { className: "stn-header-title__text", children: resolvedMain }) : resolvedMain : null
10352
+ framed ? /* @__PURE__ */ jsx79(HeaderTitleFrame, {}) : null,
10353
+ /* @__PURE__ */ jsxs58("div", { className: "stn-header-title__content", children: [
10354
+ subText != null ? /* @__PURE__ */ jsx79("span", { className: "stn-header-title__sub-text", children: subText }) : null,
10355
+ resolvedMain != null ? typeof resolvedMain === "string" || typeof resolvedMain === "number" ? /* @__PURE__ */ jsx79("h1", { className: "stn-header-title__text", children: resolvedMain }) : resolvedMain : null
10306
10356
  ] })
10307
10357
  ]
10308
10358
  }
@@ -10317,7 +10367,7 @@ function StnHeaderTitleText({
10317
10367
  ...rest
10318
10368
  }) {
10319
10369
  const resolved = title ?? children;
10320
- return /* @__PURE__ */ jsxs55(
10370
+ return /* @__PURE__ */ jsxs58(
10321
10371
  "header",
10322
10372
  {
10323
10373
  className: cn(
@@ -10329,20 +10379,20 @@ function StnHeaderTitleText({
10329
10379
  ),
10330
10380
  ...rest,
10331
10381
  children: [
10332
- framed ? /* @__PURE__ */ jsx76(HeaderTitleFrame, {}) : null,
10333
- /* @__PURE__ */ jsx76("div", { className: "stn-header-title__content", children: typeof resolved === "string" || typeof resolved === "number" ? /* @__PURE__ */ jsx76("h1", { className: "stn-header-title__text", children: resolved }) : resolved })
10382
+ framed ? /* @__PURE__ */ jsx79(HeaderTitleFrame, {}) : null,
10383
+ /* @__PURE__ */ jsx79("div", { className: "stn-header-title__content", children: typeof resolved === "string" || typeof resolved === "number" ? /* @__PURE__ */ jsx79("h1", { className: "stn-header-title__text", children: resolved }) : resolved })
10334
10384
  ]
10335
10385
  }
10336
10386
  );
10337
10387
  }
10338
10388
  function StnHeaderTitleRoot(props) {
10339
10389
  if (props.variant === "clock") {
10340
- return /* @__PURE__ */ jsx76(StnHeaderTitleClock, { ...props });
10390
+ return /* @__PURE__ */ jsx79(StnHeaderTitleClock, { ...props });
10341
10391
  }
10342
10392
  if (props.variant === "dual" || "subText" in props && props.subText != null) {
10343
- return /* @__PURE__ */ jsx76(StnHeaderTitleDual, { ...props });
10393
+ return /* @__PURE__ */ jsx79(StnHeaderTitleDual, { ...props });
10344
10394
  }
10345
- return /* @__PURE__ */ jsx76(StnHeaderTitleText, { ...props });
10395
+ return /* @__PURE__ */ jsx79(StnHeaderTitleText, { ...props });
10346
10396
  }
10347
10397
  var StnHeaderTitle = Object.assign(StnHeaderTitleRoot, {
10348
10398
  Text: StnHeaderTitleMainText,
@@ -10357,7 +10407,7 @@ var StnHeaderTitle = Object.assign(StnHeaderTitleRoot, {
10357
10407
  import {
10358
10408
  forwardRef as forwardRef46
10359
10409
  } from "react";
10360
- import { jsx as jsx77 } from "react/jsx-runtime";
10410
+ import { jsx as jsx80 } from "react/jsx-runtime";
10361
10411
  var StnContainer = forwardRef46(function StnContainer2({
10362
10412
  component,
10363
10413
  as,
@@ -10373,7 +10423,7 @@ var StnContainer = forwardRef46(function StnContainer2({
10373
10423
  const Component = component ?? as ?? "div";
10374
10424
  const maxWidthClass = maxWidth ? `stn-container--${maxWidth} stn-container--max-width-${maxWidth}` : "stn-container--fluid stn-container--max-width-false";
10375
10425
  const classKey = maxWidth ? `maxWidth${maxWidth.charAt(0).toUpperCase() + maxWidth.slice(1)}` : "maxWidthFalse";
10376
- return /* @__PURE__ */ jsx77(
10426
+ return /* @__PURE__ */ jsx80(
10377
10427
  Component,
10378
10428
  {
10379
10429
  ref,
@@ -10397,7 +10447,7 @@ var StnContainer = forwardRef46(function StnContainer2({
10397
10447
 
10398
10448
  // src/layouts/StnGrid.tsx
10399
10449
  import { forwardRef as forwardRef47 } from "react";
10400
- import { jsx as jsx78 } from "react/jsx-runtime";
10450
+ import { jsx as jsx81 } from "react/jsx-runtime";
10401
10451
  var BREAKPOINTS2 = ["xs", "sm", "md", "lg", "xl"];
10402
10452
  var SPACING_CLASS = {
10403
10453
  "0": "0",
@@ -10483,7 +10533,7 @@ var StnGrid = forwardRef47(function StnGrid2({
10483
10533
  const Component = component ?? as ?? "div";
10484
10534
  const justify = typeof justifyContent === "string" && JUSTIFY_CLASS2.has(justifyContent) ? justifyContent : void 0;
10485
10535
  const align = typeof alignItems === "string" && ALIGN_CLASS2.has(alignItems) ? alignItems : void 0;
10486
- return /* @__PURE__ */ jsx78(
10536
+ return /* @__PURE__ */ jsx81(
10487
10537
  Component,
10488
10538
  {
10489
10539
  ref,
@@ -10507,7 +10557,7 @@ var StnGrid = forwardRef47(function StnGrid2({
10507
10557
  });
10508
10558
 
10509
10559
  // src/layouts/StnLayerShell.tsx
10510
- import { jsx as jsx79, jsxs as jsxs56 } from "react/jsx-runtime";
10560
+ import { jsx as jsx82, jsxs as jsxs59 } from "react/jsx-runtime";
10511
10561
  function StnLayerShell({
10512
10562
  gnb,
10513
10563
  gnbSide = "left",
@@ -10528,7 +10578,7 @@ function StnLayerShell({
10528
10578
  const resolvedMainContent = layer1 ?? children;
10529
10579
  const resolvedModal = layer2;
10530
10580
  const isGnbRight = gnbSide === "right";
10531
- return /* @__PURE__ */ jsxs56(
10581
+ return /* @__PURE__ */ jsxs59(
10532
10582
  "div",
10533
10583
  {
10534
10584
  id: wrapId,
@@ -10536,8 +10586,8 @@ function StnLayerShell({
10536
10586
  className: cn("stn-wrap", isGnbRight && "stn-wrap--gnb-right", wrapClassName),
10537
10587
  children: [
10538
10588
  layer0,
10539
- utilities ? /* @__PURE__ */ jsx79("div", { className: "stn-page-utilities", "data-stn-layer-role": "utility", children: utilities }) : null,
10540
- /* @__PURE__ */ jsxs56(
10589
+ utilities ? /* @__PURE__ */ jsx82("div", { className: "stn-page-utilities", "data-stn-layer-role": "utility", children: utilities }) : null,
10590
+ /* @__PURE__ */ jsxs59(
10541
10591
  "main",
10542
10592
  {
10543
10593
  id: containerId,
@@ -10546,9 +10596,9 @@ function StnLayerShell({
10546
10596
  className: cn("stn-layer-1", scrollable && "scroll", containerClassName),
10547
10597
  children: [
10548
10598
  !isGnbRight && gnb,
10549
- /* @__PURE__ */ jsxs56("div", { className: "stn-layer-1__main", children: [
10550
- header ? /* @__PURE__ */ jsx79("header", { className: "stn-layer-1__header", children: header }) : null,
10551
- /* @__PURE__ */ jsx79("div", { className: cn("stn-layer-1__body", scrollable && "stn-scroll", contentClassName), children: resolvedMainContent })
10599
+ /* @__PURE__ */ jsxs59("div", { className: "stn-layer-1__main", children: [
10600
+ header ? /* @__PURE__ */ jsx82("header", { className: "stn-layer-1__header", children: header }) : null,
10601
+ /* @__PURE__ */ jsx82("div", { className: cn("stn-layer-1__body", scrollable && "stn-scroll", contentClassName), children: resolvedMainContent })
10552
10602
  ] }),
10553
10603
  isGnbRight && gnb
10554
10604
  ]
@@ -10561,7 +10611,7 @@ function StnLayerShell({
10561
10611
  }
10562
10612
 
10563
10613
  // src/layouts/StnListViewLayout.tsx
10564
- import { jsx as jsx80, jsxs as jsxs57 } from "react/jsx-runtime";
10614
+ import { jsx as jsx83, jsxs as jsxs60 } from "react/jsx-runtime";
10565
10615
  function StnListViewLayoutBody({
10566
10616
  search,
10567
10617
  sidebar,
@@ -10572,13 +10622,13 @@ function StnListViewLayoutBody({
10572
10622
  className
10573
10623
  }) {
10574
10624
  const lnbClass = lnbSide === "right" ? "stn-page-scaffold__lnb lnb_box lnb_box_right" : "stn-page-scaffold__lnb lnb_box";
10575
- const sidebarAside = sidebar ? /* @__PURE__ */ jsx80("aside", { className: lnbClass, children: sidebar }) : null;
10576
- return /* @__PURE__ */ jsx80(
10625
+ const sidebarAside = sidebar ? /* @__PURE__ */ jsx83("aside", { className: lnbClass, children: sidebar }) : null;
10626
+ return /* @__PURE__ */ jsx83(
10577
10627
  StnContainer,
10578
10628
  {
10579
10629
  maxWidth: false,
10580
10630
  className: cn("stn-list-view-layout__body", className),
10581
- children: /* @__PURE__ */ jsxs57(
10631
+ children: /* @__PURE__ */ jsxs60(
10582
10632
  StnStack,
10583
10633
  {
10584
10634
  direction: "row",
@@ -10586,19 +10636,19 @@ function StnListViewLayoutBody({
10586
10636
  className: "stn-list-view__main",
10587
10637
  children: [
10588
10638
  lnbSide === "left" ? sidebarAside : null,
10589
- /* @__PURE__ */ jsxs57(
10639
+ /* @__PURE__ */ jsxs60(
10590
10640
  StnStack,
10591
10641
  {
10592
10642
  direction: "column",
10593
10643
  spacing: 2,
10594
10644
  className: "stn-list-view__content-stack",
10595
10645
  children: [
10596
- search ? /* @__PURE__ */ jsx80("div", { className: "stn-page-scaffold__search search_area", children: search }) : null,
10597
- /* @__PURE__ */ jsx80(
10646
+ search ? /* @__PURE__ */ jsx83("div", { className: "stn-page-scaffold__search search_area", children: search }) : null,
10647
+ /* @__PURE__ */ jsx83(
10598
10648
  "div",
10599
10649
  {
10600
10650
  className: "stn-page-scaffold__content content_box",
10601
- children: children ?? /* @__PURE__ */ jsxs57("div", { className: "stn-table stn-table--fill", children: [
10651
+ children: children ?? /* @__PURE__ */ jsxs60("div", { className: "stn-table stn-table--fill", children: [
10602
10652
  table,
10603
10653
  pagination
10604
10654
  ] })
@@ -10630,7 +10680,7 @@ function StnListViewLayoutRoot({
10630
10680
  }) {
10631
10681
  const bare = bareProp ?? noShell ?? false;
10632
10682
  const hasLnbClass = lnbSide === "right" ? "has_lnb_right" : "has_lnb";
10633
- const body = /* @__PURE__ */ jsx80(
10683
+ const body = /* @__PURE__ */ jsx83(
10634
10684
  StnListViewLayoutBody,
10635
10685
  {
10636
10686
  search,
@@ -10645,10 +10695,10 @@ function StnListViewLayoutRoot({
10645
10695
  if (bare) {
10646
10696
  return body;
10647
10697
  }
10648
- const renderedHeader = header === null ? null : header !== void 0 ? header : /* @__PURE__ */ jsx80("div", { className: "stn-layer-1__header", children: /* @__PURE__ */ jsx80(StnHeader, { variant: "page", children: /* @__PURE__ */ jsx80(StnHeader.Left, { children: /* @__PURE__ */ jsx80(StnHeaderPageTitle, { children: title }) }) }) });
10649
- return /* @__PURE__ */ jsxs57("div", { className: cn("stn-list-view-layout", "stn-layer-1", className), ...rest, children: [
10698
+ const renderedHeader = header === null ? null : header !== void 0 ? header : /* @__PURE__ */ jsx83("div", { className: "stn-layer-1__header", children: /* @__PURE__ */ jsx83(StnHeader, { variant: "page", children: /* @__PURE__ */ jsx83(StnHeader.Left, { children: /* @__PURE__ */ jsx83(StnHeaderPageTitle, { children: title }) }) }) });
10699
+ return /* @__PURE__ */ jsxs60("div", { className: cn("stn-list-view-layout", "stn-layer-1", className), ...rest, children: [
10650
10700
  renderedHeader,
10651
- /* @__PURE__ */ jsx80(
10701
+ /* @__PURE__ */ jsx83(
10652
10702
  "div",
10653
10703
  {
10654
10704
  className: cn("stn-content-area", sidebar ? hasLnbClass : null, search ? "has_sch" : null),
@@ -10658,10 +10708,10 @@ function StnListViewLayoutRoot({
10658
10708
  ] });
10659
10709
  }
10660
10710
  function StnListViewLayoutHeader({ className, children, ...rest }) {
10661
- return /* @__PURE__ */ jsx80("div", { className: cn("stn-layer-1__header", className), ...rest, children });
10711
+ return /* @__PURE__ */ jsx83("div", { className: cn("stn-layer-1__header", className), ...rest, children });
10662
10712
  }
10663
10713
  function StnListViewLayoutSearch({ className, children, ...rest }) {
10664
- return /* @__PURE__ */ jsx80("div", { className: cn("search_area", className), ...rest, children });
10714
+ return /* @__PURE__ */ jsx83("div", { className: cn("search_area", className), ...rest, children });
10665
10715
  }
10666
10716
  function StnListViewLayoutSidebar({
10667
10717
  side = "left",
@@ -10670,16 +10720,16 @@ function StnListViewLayoutSidebar({
10670
10720
  ...rest
10671
10721
  }) {
10672
10722
  const lnbClass = side === "right" ? "lnb_box_right" : "lnb_box";
10673
- return /* @__PURE__ */ jsx80("aside", { className: cn(lnbClass, className), ...rest, children });
10723
+ return /* @__PURE__ */ jsx83("aside", { className: cn(lnbClass, className), ...rest, children });
10674
10724
  }
10675
10725
  function StnListViewLayoutContent({ className, children, ...rest }) {
10676
- return /* @__PURE__ */ jsx80("div", { className: cn("content_box", className), ...rest, children });
10726
+ return /* @__PURE__ */ jsx83("div", { className: cn("content_box", className), ...rest, children });
10677
10727
  }
10678
10728
  function StnListViewLayoutTable({ className, children, ...rest }) {
10679
- return /* @__PURE__ */ jsx80("div", { className: cn("stn-table", className), ...rest, children });
10729
+ return /* @__PURE__ */ jsx83("div", { className: cn("stn-table", className), ...rest, children });
10680
10730
  }
10681
10731
  function StnListViewLayoutPagination({ className, children, ...rest }) {
10682
- return /* @__PURE__ */ jsx80("div", { className: cn("stn-list-view-layout__pagination-wrap", className), ...rest, children });
10732
+ return /* @__PURE__ */ jsx83("div", { className: cn("stn-list-view-layout__pagination-wrap", className), ...rest, children });
10683
10733
  }
10684
10734
  var StnListViewLayout = Object.assign(StnListViewLayoutRoot, {
10685
10735
  Body: StnListViewLayoutBody,
@@ -10713,13 +10763,13 @@ import {
10713
10763
  } from "@stn-uiux/pub-ui/data/stnLayout";
10714
10764
 
10715
10765
  // src/patterns/dashboard/StnMapCanvas.tsx
10716
- import { jsx as jsx81 } from "react/jsx-runtime";
10766
+ import { jsx as jsx84 } from "react/jsx-runtime";
10717
10767
  function StnMapCanvas({
10718
10768
  children,
10719
10769
  className,
10720
10770
  ...rest
10721
10771
  }) {
10722
- return /* @__PURE__ */ jsx81(
10772
+ return /* @__PURE__ */ jsx84(
10723
10773
  "div",
10724
10774
  {
10725
10775
  className: cn("stn-map-canvas", className),
@@ -10731,7 +10781,7 @@ function StnMapCanvas({
10731
10781
  }
10732
10782
 
10733
10783
  // src/patterns/dashboard/StnDashboard.tsx
10734
- import { jsx as jsx82 } from "react/jsx-runtime";
10784
+ import { jsx as jsx85 } from "react/jsx-runtime";
10735
10785
  var fillStyle = {
10736
10786
  flex: "1 1 0%",
10737
10787
  minHeight: 0,
@@ -10750,7 +10800,7 @@ function StnDashboardRoot({
10750
10800
  }) {
10751
10801
  const isLeft = widgetPosition === "left";
10752
10802
  const isBoth = widgetPosition === "both";
10753
- return /* @__PURE__ */ jsx82(
10803
+ return /* @__PURE__ */ jsx85(
10754
10804
  "div",
10755
10805
  {
10756
10806
  className: cn(
@@ -10779,7 +10829,7 @@ function StnDashboardLeft({
10779
10829
  style,
10780
10830
  ...rest
10781
10831
  }) {
10782
- return /* @__PURE__ */ jsx82(
10832
+ return /* @__PURE__ */ jsx85(
10783
10833
  "div",
10784
10834
  {
10785
10835
  className: cn("stn-dashboard__left", className),
@@ -10805,7 +10855,7 @@ function StnDashboardRight({
10805
10855
  style,
10806
10856
  ...rest
10807
10857
  }) {
10808
- return /* @__PURE__ */ jsx82(
10858
+ return /* @__PURE__ */ jsx85(
10809
10859
  "div",
10810
10860
  {
10811
10861
  className: cn("stn-dashboard__right", className),
@@ -10833,7 +10883,7 @@ function StnDashboardTopRight({
10833
10883
  className,
10834
10884
  ...rest
10835
10885
  }) {
10836
- return /* @__PURE__ */ jsx82(
10886
+ return /* @__PURE__ */ jsx85(
10837
10887
  "div",
10838
10888
  {
10839
10889
  className: cn("stn-dashboard__top-right", className),
@@ -10852,9 +10902,9 @@ var StnDashboard = Object.assign(StnDashboardRoot, {
10852
10902
  });
10853
10903
 
10854
10904
  // src/patterns/scaffold/StnPageScaffold.tsx
10855
- import { jsx as jsx83, jsxs as jsxs58 } from "react/jsx-runtime";
10905
+ import { jsx as jsx86, jsxs as jsxs61 } from "react/jsx-runtime";
10856
10906
  function StnPageScaffoldRoot({ children, className, ...rest }) {
10857
- return /* @__PURE__ */ jsx83(
10907
+ return /* @__PURE__ */ jsx86(
10858
10908
  "div",
10859
10909
  {
10860
10910
  className: cn("stn-page-scaffold", className),
@@ -10871,9 +10921,9 @@ function StnPageScaffoldRegion({
10871
10921
  className,
10872
10922
  ...rest
10873
10923
  }) {
10874
- return /* @__PURE__ */ jsxs58("div", { className: cn("stn-page-scaffold__region", className), "data-stn-page-scaffold": "region", ...rest, children: [
10875
- /* @__PURE__ */ jsx83("span", { className: "stn-page-scaffold__region-label", children: label }),
10876
- hint ? /* @__PURE__ */ jsx83("span", { className: "stn-page-scaffold__region-hint", children: hint }) : null,
10924
+ return /* @__PURE__ */ jsxs61("div", { className: cn("stn-page-scaffold__region", className), "data-stn-page-scaffold": "region", ...rest, children: [
10925
+ /* @__PURE__ */ jsx86("span", { className: "stn-page-scaffold__region-label", children: label }),
10926
+ hint ? /* @__PURE__ */ jsx86("span", { className: "stn-page-scaffold__region-hint", children: hint }) : null,
10877
10927
  children
10878
10928
  ] });
10879
10929
  }
@@ -10884,7 +10934,7 @@ function StnPageScaffoldMapPlaceholder({
10884
10934
  children,
10885
10935
  ...rest
10886
10936
  }) {
10887
- return /* @__PURE__ */ jsx83("div", { className: "stn-widget shell-canvas stn-map-canvas", "data-stn-dashboard": "canvas", children: /* @__PURE__ */ jsxs58(
10937
+ return /* @__PURE__ */ jsx86("div", { className: "stn-widget shell-canvas stn-map-canvas", "data-stn-dashboard": "canvas", children: /* @__PURE__ */ jsxs61(
10888
10938
  "div",
10889
10939
  {
10890
10940
  className: cn("stn-page-scaffold__canvas-placeholder", className),
@@ -10892,8 +10942,8 @@ function StnPageScaffoldMapPlaceholder({
10892
10942
  role: "status",
10893
10943
  ...rest,
10894
10944
  children: [
10895
- /* @__PURE__ */ jsx83("p", { className: "stn-page-scaffold__canvas-placeholder-title", children: message }),
10896
- note ? /* @__PURE__ */ jsx83("p", { className: "stn-page-scaffold__canvas-placeholder-note", children: note }) : null,
10945
+ /* @__PURE__ */ jsx86("p", { className: "stn-page-scaffold__canvas-placeholder-title", children: message }),
10946
+ note ? /* @__PURE__ */ jsx86("p", { className: "stn-page-scaffold__canvas-placeholder-note", children: note }) : null,
10897
10947
  children
10898
10948
  ]
10899
10949
  }
@@ -10904,7 +10954,7 @@ function StnPageScaffoldMapCanvas({
10904
10954
  children,
10905
10955
  ...rest
10906
10956
  }) {
10907
- return /* @__PURE__ */ jsx83(
10957
+ return /* @__PURE__ */ jsx86(
10908
10958
  "div",
10909
10959
  {
10910
10960
  className: cn("stn-widget", "shell-canvas", "stn-map-canvas", "stn-page-scaffold__canvas", className),
@@ -10917,7 +10967,7 @@ function StnPageScaffoldMapCanvas({
10917
10967
  }
10918
10968
  function StnPageScaffoldLayer({ label, hint, children, className, ...layerProps }) {
10919
10969
  const labelText = label ? hint ? `${label} \xB7 ${hint}` : label : void 0;
10920
- return /* @__PURE__ */ jsx83(
10970
+ return /* @__PURE__ */ jsx86(
10921
10971
  StnLayer2,
10922
10972
  {
10923
10973
  className: cn(
@@ -10964,25 +11014,25 @@ function DashboardPageScaffold({
10964
11014
  const isLeft = widgetPosition === "left";
10965
11015
  const isBoth = widgetPosition === "both";
10966
11016
  const isNone = widgetPosition === "none" || !showRightRegion;
10967
- const mapColumn = /* @__PURE__ */ jsxs58(StnDashboard.Left, { children: [
10968
- /* @__PURE__ */ jsx83(StnPageScaffold.MapPlaceholder, { message: finalMapMessage, note: finalMapNote }),
11017
+ const mapColumn = /* @__PURE__ */ jsxs61(StnDashboard.Left, { children: [
11018
+ /* @__PURE__ */ jsx86(StnPageScaffold.MapPlaceholder, { message: finalMapMessage, note: finalMapNote }),
10969
11019
  faultPanel
10970
11020
  ] });
10971
- const rightWidgets = right ?? /* @__PURE__ */ jsx83(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
10972
- const leftWidgets = left ?? right ?? /* @__PURE__ */ jsx83(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC88C\uCE21 \uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
10973
- const dashboardGrid = bodyEmpty ? /* @__PURE__ */ jsx83(StnDashboard, { empty: true, widgetPosition, "data-stn-page-scaffold": "dashboard-empty" }) : isBoth ? /* @__PURE__ */ jsxs58(StnDashboard, { widgetPosition: "both", children: [
10974
- /* @__PURE__ */ jsx83(StnDashboard.Right, { children: leftWidgets }),
11021
+ const rightWidgets = right ?? /* @__PURE__ */ jsx86(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
11022
+ const leftWidgets = left ?? right ?? /* @__PURE__ */ jsx86(StnPageScaffold.Region, { label: "dashboard_right", hint: "\uC88C\uCE21 \uC704\uC82F\xB7\uC7A5\uC560 \uD328\uB110" });
11023
+ const dashboardGrid = bodyEmpty ? /* @__PURE__ */ jsx86(StnDashboard, { empty: true, widgetPosition, "data-stn-page-scaffold": "dashboard-empty" }) : isBoth ? /* @__PURE__ */ jsxs61(StnDashboard, { widgetPosition: "both", children: [
11024
+ /* @__PURE__ */ jsx86(StnDashboard.Right, { children: leftWidgets }),
10975
11025
  mapColumn,
10976
- /* @__PURE__ */ jsx83(StnDashboard.Right, { children: rightWidgets })
10977
- ] }) : isLeft ? /* @__PURE__ */ jsxs58(StnDashboard, { widgetPosition: "left", children: [
10978
- /* @__PURE__ */ jsx83(StnDashboard.Right, { children: leftWidgets }),
11026
+ /* @__PURE__ */ jsx86(StnDashboard.Right, { children: rightWidgets })
11027
+ ] }) : isLeft ? /* @__PURE__ */ jsxs61(StnDashboard, { widgetPosition: "left", children: [
11028
+ /* @__PURE__ */ jsx86(StnDashboard.Right, { children: leftWidgets }),
10979
11029
  mapColumn
10980
- ] }) : /* @__PURE__ */ jsxs58(StnDashboard, { widgetPosition: isNone ? "none" : "right", children: [
11030
+ ] }) : /* @__PURE__ */ jsxs61(StnDashboard, { widgetPosition: isNone ? "none" : "right", children: [
10981
11031
  mapColumn,
10982
- !isNone ? /* @__PURE__ */ jsx83(StnDashboard.Right, { children: rightWidgets }) : null
11032
+ !isNone ? /* @__PURE__ */ jsx86(StnDashboard.Right, { children: rightWidgets }) : null
10983
11033
  ] });
10984
11034
  const contentNode = children ?? dashboardGrid;
10985
- return /* @__PURE__ */ jsx83(
11035
+ return /* @__PURE__ */ jsx86(
10986
11036
  StnLayerShell,
10987
11037
  {
10988
11038
  gnb,
@@ -10991,7 +11041,7 @@ function DashboardPageScaffold({
10991
11041
  layer0,
10992
11042
  layer2,
10993
11043
  ...shellProps,
10994
- children: /* @__PURE__ */ jsx83(
11044
+ children: /* @__PURE__ */ jsx86(
10995
11045
  StnContainer,
10996
11046
  {
10997
11047
  maxWidth: false,
@@ -11012,9 +11062,9 @@ import {
11012
11062
  STN_ALERT_CENTER_DEMO_WORK
11013
11063
  } from "@stn-uiux/pub-ui/data/stnAlertCenter";
11014
11064
  import { systemIconSrc } from "@stn-uiux/pub-ui/data/stnSystemIcons";
11015
- import { Fragment as Fragment12, jsx as jsx84, jsxs as jsxs59 } from "react/jsx-runtime";
11065
+ import { Fragment as Fragment12, jsx as jsx87, jsxs as jsxs62 } from "react/jsx-runtime";
11016
11066
  function defaultTopologyHeader(_clock) {
11017
- return /* @__PURE__ */ jsx84(StnHeader, { variant: "widget" });
11067
+ return /* @__PURE__ */ jsx87(StnHeader, { variant: "widget" });
11018
11068
  }
11019
11069
  function AlertCenterPageScaffold({
11020
11070
  gnbAlertPanel,
@@ -11033,7 +11083,7 @@ function AlertCenterPageScaffold({
11033
11083
  }) {
11034
11084
  const [gnbOpen, setGnbOpen] = useState22(defaultGnbOpen);
11035
11085
  const panel = useMemo6(
11036
- () => gnbAlertPanel ?? /* @__PURE__ */ jsx84(
11086
+ () => gnbAlertPanel ?? /* @__PURE__ */ jsx87(
11037
11087
  StnAlertCenterPanel,
11038
11088
  {
11039
11089
  alerts: STN_ALERT_CENTER_DEMO_ALERTS,
@@ -11044,26 +11094,26 @@ function AlertCenterPageScaffold({
11044
11094
  [gnbAlertPanel]
11045
11095
  );
11046
11096
  const sideNav = useMemo6(
11047
- () => gnbProp ?? /* @__PURE__ */ jsxs59(Fragment12, { children: [
11048
- /* @__PURE__ */ jsxs59(
11097
+ () => gnbProp ?? /* @__PURE__ */ jsxs62(Fragment12, { children: [
11098
+ /* @__PURE__ */ jsxs62(
11049
11099
  StnSideNavigation,
11050
11100
  {
11051
11101
  collapsed: !gnbOpen,
11052
11102
  onCollapseChange: (col) => setGnbOpen(!col),
11053
11103
  children: [
11054
- /* @__PURE__ */ jsxs59(StnSideNavigation.Header, { children: [
11055
- /* @__PURE__ */ jsx84(StnSideNavigation.Logo, {}),
11056
- /* @__PURE__ */ jsx84(StnSideNavigation.Toggle, {})
11104
+ /* @__PURE__ */ jsxs62(StnSideNavigation.Header, { children: [
11105
+ /* @__PURE__ */ jsx87(StnSideNavigation.Logo, {}),
11106
+ /* @__PURE__ */ jsx87(StnSideNavigation.Toggle, {})
11057
11107
  ] }),
11058
- /* @__PURE__ */ jsxs59(StnSideNavigation.Menu, { children: [
11059
- /* @__PURE__ */ jsx84(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/layout-grid"), label: "\uBA54\uC778 \uB300\uC2DC\uBCF4\uB4DC", active: true }),
11060
- /* @__PURE__ */ jsx84(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/server_2"), label: "\uC11C\uBC84 \uBAA8\uB2C8\uD130\uB9C1" }),
11061
- /* @__PURE__ */ jsx84(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/activity"), label: "\uB124\uD2B8\uC6CC\uD06C \uBD84\uC11D" })
11108
+ /* @__PURE__ */ jsxs62(StnSideNavigation.Menu, { children: [
11109
+ /* @__PURE__ */ jsx87(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/layout-grid"), label: "\uBA54\uC778 \uB300\uC2DC\uBCF4\uB4DC", active: true }),
11110
+ /* @__PURE__ */ jsx87(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/server_2"), label: "\uC11C\uBC84 \uBAA8\uB2C8\uD130\uB9C1" }),
11111
+ /* @__PURE__ */ jsx87(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/activity"), label: "\uB124\uD2B8\uC6CC\uD06C \uBD84\uC11D" })
11062
11112
  ] }),
11063
- /* @__PURE__ */ jsx84(StnSideNavigation.Spacer, {}),
11064
- /* @__PURE__ */ jsxs59(StnSideNavigation.Footer, { curved: true, children: [
11065
- /* @__PURE__ */ jsx84(StnSideNavigation.Watermark, {}),
11066
- /* @__PURE__ */ jsx84(
11113
+ /* @__PURE__ */ jsx87(StnSideNavigation.Spacer, {}),
11114
+ /* @__PURE__ */ jsxs62(StnSideNavigation.Footer, { curved: true, children: [
11115
+ /* @__PURE__ */ jsx87(StnSideNavigation.Watermark, {}),
11116
+ /* @__PURE__ */ jsx87(
11067
11117
  StnSideNavigation.Item,
11068
11118
  {
11069
11119
  iconSrc: systemIconSrc("line/bell"),
@@ -11072,7 +11122,7 @@ function AlertCenterPageScaffold({
11072
11122
  onClick: void 0
11073
11123
  }
11074
11124
  ),
11075
- /* @__PURE__ */ jsx84(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/settings"), label: "\uC124\uC815" })
11125
+ /* @__PURE__ */ jsx87(StnSideNavigation.Item, { iconSrc: systemIconSrc("line/settings"), label: "\uC124\uC815" })
11076
11126
  ] })
11077
11127
  ]
11078
11128
  }
@@ -11081,8 +11131,8 @@ function AlertCenterPageScaffold({
11081
11131
  ] }),
11082
11132
  [gnbProp, gnbOpen, panel]
11083
11133
  );
11084
- const faultSlot = faultPanel ?? (showFaultPanelPlaceholder ? /* @__PURE__ */ jsx84("div", { className: "wrap_real_time stn-page-scaffold__fault-ph", children: /* @__PURE__ */ jsx84(StnPageScaffold.Region, { label: "\uC2E4\uC2DC\uAC04 \uC7A5\uC560 \uD604\uD669", hint: "StnWidget shell=fault-panel \xB7 \uC120\uD0DD" }) }) : null);
11085
- return /* @__PURE__ */ jsx84(
11134
+ const faultSlot = faultPanel ?? (showFaultPanelPlaceholder ? /* @__PURE__ */ jsx87("div", { className: "wrap_real_time stn-page-scaffold__fault-ph", children: /* @__PURE__ */ jsx87(StnPageScaffold.Region, { label: "\uC2E4\uC2DC\uAC04 \uC7A5\uC560 \uD604\uD669", hint: "StnWidget shell=fault-panel \xB7 \uC120\uD0DD" }) }) : null);
11135
+ return /* @__PURE__ */ jsx87(
11086
11136
  DashboardPageScaffold,
11087
11137
  {
11088
11138
  gnb: sideNav,
@@ -11090,7 +11140,7 @@ function AlertCenterPageScaffold({
11090
11140
  mapMessage,
11091
11141
  mapNote,
11092
11142
  faultPanel: faultSlot,
11093
- right: right ?? /* @__PURE__ */ jsx84(AlertCenterDashboard, {}),
11143
+ right: right ?? /* @__PURE__ */ jsx87(AlertCenterDashboard, {}),
11094
11144
  wrapId,
11095
11145
  wrapClassName: "stn-page--map-bg",
11096
11146
  ...shellProps
@@ -11100,7 +11150,7 @@ function AlertCenterPageScaffold({
11100
11150
 
11101
11151
  // src/patterns/scaffold/LoginPageScaffold.tsx
11102
11152
  import { useState as useState23 } from "react";
11103
- import { jsx as jsx85, jsxs as jsxs60 } from "react/jsx-runtime";
11153
+ import { jsx as jsx88, jsxs as jsxs63 } from "react/jsx-runtime";
11104
11154
  var LOGIN_TABS = [
11105
11155
  { value: "normal", label: "\uC77C\uBC18 \uB85C\uADF8\uC778" },
11106
11156
  { value: "social", label: "\uC18C\uC15C \uB85C\uADF8\uC778" }
@@ -11118,8 +11168,8 @@ function DefaultLoginForm({
11118
11168
  e.preventDefault();
11119
11169
  onLogin?.(userId, password);
11120
11170
  }
11121
- return /* @__PURE__ */ jsxs60(StnLoginFormStack, { onSubmit: handleSubmit, children: [
11122
- /* @__PURE__ */ jsx85(
11171
+ return /* @__PURE__ */ jsxs63(StnLoginFormStack, { onSubmit: handleSubmit, children: [
11172
+ /* @__PURE__ */ jsx88(
11123
11173
  StnSegmented,
11124
11174
  {
11125
11175
  "aria-label": "\uB85C\uADF8\uC778 \uBC29\uC2DD",
@@ -11128,8 +11178,8 @@ function DefaultLoginForm({
11128
11178
  options: LOGIN_TABS
11129
11179
  }
11130
11180
  ),
11131
- mode === "normal" ? /* @__PURE__ */ jsxs60(StnLoginFormFields, { children: [
11132
- /* @__PURE__ */ jsx85(
11181
+ mode === "normal" ? /* @__PURE__ */ jsxs63(StnLoginFormFields, { children: [
11182
+ /* @__PURE__ */ jsx88(
11133
11183
  StnLoginTextField,
11134
11184
  {
11135
11185
  icon: "line/user",
@@ -11141,7 +11191,7 @@ function DefaultLoginForm({
11141
11191
  "aria-label": "\uC544\uC774\uB514"
11142
11192
  }
11143
11193
  ),
11144
- /* @__PURE__ */ jsx85(
11194
+ /* @__PURE__ */ jsx88(
11145
11195
  StnLoginTextField,
11146
11196
  {
11147
11197
  icon: "line/lock",
@@ -11154,11 +11204,11 @@ function DefaultLoginForm({
11154
11204
  "aria-label": "\uBE44\uBC00\uBC88\uD638"
11155
11205
  }
11156
11206
  )
11157
- ] }) : socialContent ?? /* @__PURE__ */ jsx85(StnLoginPlaceholder, {}),
11158
- /* @__PURE__ */ jsx85(StnButton, { type: "submit", size: "xl", fullWidth: true, children: "\uB85C\uADF8\uC778" }),
11159
- /* @__PURE__ */ jsxs60(StnLoginFormLinks, { children: [
11160
- /* @__PURE__ */ jsx85("a", { href: signUpHref, children: "\uD68C\uC6D0\uAC00\uC785" }),
11161
- /* @__PURE__ */ jsx85("a", { href: recoverHref, children: "\uC544\uC774\uB514 / \uBE44\uBC00\uBC88\uD638 \uCC3E\uAE30" })
11207
+ ] }) : socialContent ?? /* @__PURE__ */ jsx88(StnLoginPlaceholder, {}),
11208
+ /* @__PURE__ */ jsx88(StnButton, { type: "submit", size: "xl", fullWidth: true, children: "\uB85C\uADF8\uC778" }),
11209
+ /* @__PURE__ */ jsxs63(StnLoginFormLinks, { children: [
11210
+ /* @__PURE__ */ jsx88("a", { href: signUpHref, children: "\uD68C\uC6D0\uAC00\uC785" }),
11211
+ /* @__PURE__ */ jsx88("a", { href: recoverHref, children: "\uC544\uC774\uB514 / \uBE44\uBC00\uBC88\uD638 \uCC3E\uAE30" })
11162
11212
  ] })
11163
11213
  ] });
11164
11214
  }
@@ -11172,16 +11222,16 @@ function DefaultLoginCard({
11172
11222
  signUpHref,
11173
11223
  recoverHref
11174
11224
  }) {
11175
- return /* @__PURE__ */ jsx85(
11225
+ return /* @__PURE__ */ jsx88(
11176
11226
  StnLoginCard,
11177
11227
  {
11178
11228
  glow,
11179
11229
  variant,
11180
- brand: /* @__PURE__ */ jsxs60(StnLoginBrandStack, { children: [
11181
- logo ?? /* @__PURE__ */ jsx85(StnLogo, { variant: "vertical", size: "xl" }),
11182
- /* @__PURE__ */ jsx85("p", { className: "stn-login-card__caption", children: productCaption })
11230
+ brand: /* @__PURE__ */ jsxs63(StnLoginBrandStack, { children: [
11231
+ logo ?? /* @__PURE__ */ jsx88(StnLogo, { variant: "vertical", size: "xl" }),
11232
+ /* @__PURE__ */ jsx88("p", { className: "stn-login-card__caption", children: productCaption })
11183
11233
  ] }),
11184
- children: /* @__PURE__ */ jsx85(
11234
+ children: /* @__PURE__ */ jsx88(
11185
11235
  DefaultLoginForm,
11186
11236
  {
11187
11237
  onLogin,
@@ -11207,8 +11257,8 @@ function LoginPageScaffold({
11207
11257
  recoverHref,
11208
11258
  ...shellProps
11209
11259
  }) {
11210
- const resolvedLayer0 = layer0 ?? /* @__PURE__ */ jsx85(StnLayer0Background, { variant: "login" });
11211
- const resolvedCard = children ?? /* @__PURE__ */ jsx85(
11260
+ const resolvedLayer0 = layer0 ?? /* @__PURE__ */ jsx88(StnLayer0Background, { variant: "login" });
11261
+ const resolvedCard = children ?? /* @__PURE__ */ jsx88(
11212
11262
  DefaultLoginCard,
11213
11263
  {
11214
11264
  logo,
@@ -11221,14 +11271,14 @@ function LoginPageScaffold({
11221
11271
  recoverHref
11222
11272
  }
11223
11273
  );
11224
- return /* @__PURE__ */ jsxs60(
11274
+ return /* @__PURE__ */ jsxs63(
11225
11275
  "div",
11226
11276
  {
11227
11277
  className: cn("stn-wrap stn-page--login", wrapClassName),
11228
11278
  ...shellProps,
11229
11279
  children: [
11230
11280
  resolvedLayer0,
11231
- /* @__PURE__ */ jsx85("div", { className: "stn-login", children: resolvedCard })
11281
+ /* @__PURE__ */ jsx88("div", { className: "stn-login", children: resolvedCard })
11232
11282
  ]
11233
11283
  }
11234
11284
  );
@@ -11254,11 +11304,1507 @@ import {
11254
11304
  STN_LAYER_ROLE_USAGE,
11255
11305
  STN_ELEVATION_Z_INDEX
11256
11306
  } from "@stn-uiux/pub-ui/data/stnLayer";
11307
+
11308
+ // src/components/chartTypes.tsx
11309
+ import { jsx as jsx89, jsxs as jsxs64 } from "react/jsx-runtime";
11310
+ var SEVERITY_COLOR_TOKENS = {
11311
+ critical: "var(--stn-chart-status-critical)",
11312
+ major: "var(--stn-chart-status-major)",
11313
+ minor: "var(--stn-chart-status-minor)",
11314
+ warning: "var(--stn-chart-status-warning)"
11315
+ };
11316
+ var STATUS_COLOR_TOKENS = {
11317
+ critical: "var(--stn-chart-status-critical)",
11318
+ major: "var(--stn-chart-status-major)",
11319
+ minor: "var(--stn-chart-status-minor)",
11320
+ warning: "var(--stn-chart-status-warning)",
11321
+ success: "var(--stn-chart-status-success)",
11322
+ normal: "var(--stn-chart-status-success)",
11323
+ info: "var(--stn-chart-status-info)",
11324
+ neutral: "var(--stn-chart-status-neutral)",
11325
+ primary: "var(--stn-primary)",
11326
+ secondary: "var(--stn-secondary)",
11327
+ error: "var(--stn-chart-status-critical)"
11328
+ };
11329
+ var STN_CHART_STATUS_COLORS = STATUS_COLOR_TOKENS;
11330
+ var STN_CHART_COLORS = [
11331
+ "var(--stn-chart-color-1)",
11332
+ "var(--stn-chart-color-2)",
11333
+ "var(--stn-chart-color-3)",
11334
+ "var(--stn-chart-color-4)",
11335
+ "var(--stn-chart-color-5)",
11336
+ "var(--stn-chart-color-6)",
11337
+ "var(--stn-chart-color-7)",
11338
+ "var(--stn-chart-color-8)",
11339
+ "var(--stn-chart-color-9)",
11340
+ "var(--stn-chart-color-10)"
11341
+ ];
11342
+ var DEFAULT_CHART_COLORS = STN_CHART_COLORS;
11343
+ var LEGACY_CHART_COLOR_ALIASES = {
11344
+ "var(--stn-chart-bar-1)": "var(--stn-chart-color-1)",
11345
+ "var(--stn-chart-bar-2)": "var(--stn-chart-color-2)",
11346
+ "var(--stn-chart-bar-3)": "var(--stn-chart-color-3)",
11347
+ "var(--stn-chart-bar-4)": "var(--stn-chart-color-4)",
11348
+ "var(--stn-chart-bar-5)": "var(--stn-chart-color-5)",
11349
+ "var(--stn-chart-bar-6)": "var(--stn-chart-color-6)",
11350
+ "var(--stn-chart-line-1)": "var(--stn-chart-color-1)",
11351
+ "var(--stn-chart-line-2)": "var(--stn-chart-color-2)",
11352
+ "var(--stn-chart-line-3)": "var(--stn-chart-color-3)",
11353
+ "var(--stn-chart-line-4)": "var(--stn-chart-color-4)",
11354
+ "var(--stn-chart-line-5)": "var(--stn-chart-color-5)",
11355
+ "var(--stn-chart-line-6)": "var(--stn-chart-color-6)",
11356
+ "var(--stn-chart-line-stroke)": "var(--stn-chart-color-1)",
11357
+ "var(--stn-chart-gauge-seg-1)": "var(--stn-chart-color-1)",
11358
+ "var(--stn-chart-gauge-seg-2)": "var(--stn-chart-color-2)",
11359
+ "var(--stn-chart-gauge-seg-3)": "var(--stn-chart-color-3)",
11360
+ "var(--stn-chart-gauge-seg-4)": "var(--stn-chart-color-4)",
11361
+ "var(--stn-chart-gauge-seg-5)": "var(--stn-chart-color-5)",
11362
+ "var(--stn-chart-gauge-seg-6)": "var(--stn-chart-color-6)",
11363
+ "var(--stn-chart-gauge-seg-7)": "var(--stn-chart-color-7)",
11364
+ "var(--stn-chart-gauge-seg-8)": "var(--stn-chart-color-8)",
11365
+ "var(--stn-chart-gauge-seg-9)": "var(--stn-chart-color-9)",
11366
+ "var(--stn-chart-gauge-seg-10)": "var(--stn-chart-color-10)"
11367
+ };
11368
+ function resolveChartColor(color, severityOrFallback, status, fallbackColor) {
11369
+ if (color) {
11370
+ const normalized = color.toLowerCase().trim();
11371
+ if (normalized in STATUS_COLOR_TOKENS) {
11372
+ return STATUS_COLOR_TOKENS[normalized];
11373
+ }
11374
+ if (normalized in LEGACY_CHART_COLOR_ALIASES) {
11375
+ return LEGACY_CHART_COLOR_ALIASES[normalized];
11376
+ }
11377
+ return color;
11378
+ }
11379
+ if (typeof severityOrFallback === "string") {
11380
+ if (severityOrFallback in SEVERITY_COLOR_TOKENS) {
11381
+ return SEVERITY_COLOR_TOKENS[severityOrFallback];
11382
+ }
11383
+ if (severityOrFallback in STATUS_COLOR_TOKENS) {
11384
+ return STATUS_COLOR_TOKENS[severityOrFallback];
11385
+ }
11386
+ }
11387
+ if (status && STATUS_COLOR_TOKENS[status]) {
11388
+ return STATUS_COLOR_TOKENS[status];
11389
+ }
11390
+ if (typeof severityOrFallback === "number") {
11391
+ return STN_CHART_COLORS[severityOrFallback % STN_CHART_COLORS.length];
11392
+ }
11393
+ if (fallbackColor) {
11394
+ return fallbackColor;
11395
+ }
11396
+ if (typeof severityOrFallback === "string" && severityOrFallback.startsWith("var(")) {
11397
+ return severityOrFallback;
11398
+ }
11399
+ return STN_CHART_COLORS[0];
11400
+ }
11401
+ function formatChartValue(value, decimals) {
11402
+ if (value === 0) return "0";
11403
+ if (value >= 1e6) {
11404
+ const m = value / 1e6;
11405
+ const resolvedDecimals2 = decimals !== void 0 ? decimals : m % 1 === 0 ? 0 : 1;
11406
+ return `${m.toFixed(resolvedDecimals2)}M`;
11407
+ }
11408
+ if (value >= 1e3) {
11409
+ const k = value / 1e3;
11410
+ const resolvedDecimals2 = decimals !== void 0 ? decimals : k % 1 === 0 ? 0 : 1;
11411
+ return `${k.toFixed(resolvedDecimals2)}k`;
11412
+ }
11413
+ const resolvedDecimals = decimals !== void 0 ? decimals : value % 1 === 0 ? 0 : 1;
11414
+ return value.toFixed(resolvedDecimals);
11415
+ }
11416
+ function renderChartState(loading, hasData, emptyText = "\uC870\uD68C\uB41C \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4") {
11417
+ if (loading) {
11418
+ return /* @__PURE__ */ jsxs64("div", { className: "stn-chart-skeleton", "aria-busy": "true", "aria-label": "\uCC28\uD2B8 \uB85C\uB529 \uC911", children: [
11419
+ /* @__PURE__ */ jsxs64("div", { className: "stn-chart-skeleton__bars", children: [
11420
+ /* @__PURE__ */ jsx89("div", { className: "stn-chart-skeleton__bar", style: { height: "45%" } }),
11421
+ /* @__PURE__ */ jsx89("div", { className: "stn-chart-skeleton__bar", style: { height: "75%" } }),
11422
+ /* @__PURE__ */ jsx89("div", { className: "stn-chart-skeleton__bar", style: { height: "30%" } }),
11423
+ /* @__PURE__ */ jsx89("div", { className: "stn-chart-skeleton__bar", style: { height: "90%" } }),
11424
+ /* @__PURE__ */ jsx89("div", { className: "stn-chart-skeleton__bar", style: { height: "60%" } })
11425
+ ] }),
11426
+ /* @__PURE__ */ jsx89("div", { className: "stn-chart-skeleton__axis" })
11427
+ ] });
11428
+ }
11429
+ if (!hasData) {
11430
+ return /* @__PURE__ */ jsxs64("div", { className: "stn-chart-empty", role: "status", "aria-label": "\uB370\uC774\uD130 \uC5C6\uC74C", children: [
11431
+ /* @__PURE__ */ jsxs64(
11432
+ "svg",
11433
+ {
11434
+ className: "stn-chart-empty__icon",
11435
+ viewBox: "0 0 24 24",
11436
+ fill: "none",
11437
+ stroke: "currentColor",
11438
+ strokeWidth: "1.5",
11439
+ strokeLinecap: "round",
11440
+ strokeLinejoin: "round",
11441
+ "aria-hidden": "true",
11442
+ children: [
11443
+ /* @__PURE__ */ jsx89("path", { d: "M3 3v18h18" }),
11444
+ /* @__PURE__ */ jsx89("path", { d: "M18 9l-5 5-4-4-3 3" })
11445
+ ]
11446
+ }
11447
+ ),
11448
+ /* @__PURE__ */ jsx89("span", { children: emptyText })
11449
+ ] });
11450
+ }
11451
+ return null;
11452
+ }
11453
+
11454
+ // src/components/StnBarChart.tsx
11455
+ import {
11456
+ useState as useState24
11457
+ } from "react";
11458
+ import { Fragment as Fragment13, jsx as jsx90, jsxs as jsxs65 } from "react/jsx-runtime";
11459
+ var DEFAULT_BAR_COLORS = STN_CHART_COLORS;
11460
+ var SIZE_WIDTH_MAP = {
11461
+ sm: "var(--stn-chart-bar-width-sm)",
11462
+ md: "var(--stn-chart-bar-width-md)",
11463
+ lg: "var(--stn-chart-bar-width-lg)"
11464
+ };
11465
+ function StnBarChart({
11466
+ data = [],
11467
+ direction = "vertical",
11468
+ orientation,
11469
+ size,
11470
+ colorBy = "series",
11471
+ showXAxis = true,
11472
+ showYAxis = true,
11473
+ showTooltip = true,
11474
+ showValue = false,
11475
+ yAxis = {},
11476
+ legend,
11477
+ highlightIndex: controlledHighlight,
11478
+ onColumnClick,
11479
+ compact = false,
11480
+ barWidth: customBarWidth,
11481
+ height,
11482
+ decimals,
11483
+ loading = false,
11484
+ emptyText,
11485
+ className,
11486
+ style,
11487
+ ...rest
11488
+ }) {
11489
+ const [internalHighlight, setInternalHighlight] = useState24(null);
11490
+ const [hoveredIndex, setHoveredIndex] = useState24(null);
11491
+ const isHorizontal = direction === "horizontal" || orientation === "horizontal";
11492
+ if (loading || !data || data.length === 0) {
11493
+ const emptyContainerStyle = {
11494
+ ...style,
11495
+ ...height ? { height: typeof height === "number" ? `${height}px` : height } : {}
11496
+ };
11497
+ return /* @__PURE__ */ jsx90(
11498
+ "div",
11499
+ {
11500
+ className: cn(
11501
+ "stn-chart-bar",
11502
+ isHorizontal ? "stn-chart-bar--horizontal" : "stn-chart-bar--vertical",
11503
+ size && `stn-chart-bar--${size}`,
11504
+ className
11505
+ ),
11506
+ style: { ...emptyContainerStyle, minHeight: height || 160 },
11507
+ ...rest,
11508
+ children: renderChartState(loading, Boolean(data && data.length > 0), emptyText)
11509
+ }
11510
+ );
11511
+ }
11512
+ let maxBarsPerCol = 1;
11513
+ const allValues = data.flatMap((d) => {
11514
+ if (d.values.length > maxBarsPerCol) {
11515
+ maxBarsPerCol = d.values.length;
11516
+ }
11517
+ return d.values.map((v) => typeof v === "number" ? v : v.value);
11518
+ });
11519
+ const computedMax = allValues.length > 0 ? Math.max(...allValues) : 100;
11520
+ const max = yAxis.max ?? (computedMax > 0 ? computedMax : 100);
11521
+ const steps = yAxis.steps ?? 5;
11522
+ const formatter = yAxis.format ?? ((val) => formatChartValue(val, decimals));
11523
+ const resolvedBarWidth = customBarWidth !== void 0 ? typeof customBarWidth === "number" ? `${customBarWidth}px` : customBarWidth === "sm" || customBarWidth === "md" || customBarWidth === "lg" ? SIZE_WIDTH_MAP[customBarWidth] : customBarWidth : size !== void 0 ? SIZE_WIDTH_MAP[size] : compact ? "var(--stn-chart-bar-width-sm)" : maxBarsPerCol >= 5 ? "var(--stn-chart-bar-width-sm)" : maxBarsPerCol >= 3 ? "var(--stn-chart-bar-width-sm)" : "var(--stn-chart-bar-width-md)";
11524
+ const gridRows = [];
11525
+ for (let i = steps; i >= 0; i--) {
11526
+ const val = max / steps * i;
11527
+ gridRows.push({
11528
+ label: formatter(val),
11529
+ isZero: i === 0
11530
+ });
11531
+ }
11532
+ const gridCols = [];
11533
+ for (let i = 0; i <= steps; i++) {
11534
+ const val = max / steps * i;
11535
+ gridCols.push({
11536
+ label: formatter(val),
11537
+ isZero: i === 0
11538
+ });
11539
+ }
11540
+ const isHighlighted = (idx, item) => {
11541
+ if (controlledHighlight !== void 0) return controlledHighlight === idx;
11542
+ if (internalHighlight !== null) return internalHighlight === idx;
11543
+ return Boolean(item.highlight);
11544
+ };
11545
+ const handleColClick = (item, idx) => {
11546
+ setInternalHighlight(idx);
11547
+ onColumnClick?.(item, idx);
11548
+ };
11549
+ const containerStyle = {
11550
+ ...style,
11551
+ ...height ? { height } : {},
11552
+ ["--stn-chart-bar-width"]: resolvedBarWidth
11553
+ };
11554
+ return /* @__PURE__ */ jsxs65(
11555
+ "div",
11556
+ {
11557
+ className: cn(
11558
+ "stn-chart-bar",
11559
+ isHorizontal && "stn-chart-bar--horizontal",
11560
+ size && `stn-chart-bar--${size}`,
11561
+ !showXAxis && "stn-chart-bar--no-x-axis",
11562
+ !showYAxis && "stn-chart-bar--no-y-axis",
11563
+ !showTooltip && "stn-chart--no-tooltip",
11564
+ className
11565
+ ),
11566
+ style: containerStyle,
11567
+ ...rest,
11568
+ children: [
11569
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__body", children: isHorizontal ? (
11570
+ /* ==================== 가로 막대 (Horizontal) ==================== */
11571
+ /* @__PURE__ */ jsxs65(Fragment13, { children: [
11572
+ showXAxis && /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__grid-v", "aria-hidden": "true", children: gridCols.map((col, cIdx) => /* @__PURE__ */ jsxs65("div", { className: "stn-chart-bar__grid-v-col", children: [
11573
+ /* @__PURE__ */ jsx90(
11574
+ "div",
11575
+ {
11576
+ className: cn(
11577
+ "stn-chart-bar__grid-v-line",
11578
+ col.isZero && "stn-chart-bar__grid-v-line--zero"
11579
+ )
11580
+ }
11581
+ ),
11582
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-bar__grid-v-label", children: col.label })
11583
+ ] }, cIdx)) }),
11584
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__rows", role: "list", children: data.map((item, idx) => {
11585
+ const active = isHighlighted(idx, item);
11586
+ const isHovered = hoveredIndex === idx;
11587
+ const rawVals = item.values.map((v, vIdx) => {
11588
+ const colorIndex = colorBy === "category" ? idx : vIdx;
11589
+ if (typeof v === "number") {
11590
+ return {
11591
+ value: v,
11592
+ color: resolveChartColor(void 0, colorIndex),
11593
+ label: legend?.[colorIndex]?.label || (colorBy === "category" ? item.label : `Series ${vIdx + 1}`)
11594
+ };
11595
+ }
11596
+ return {
11597
+ value: v.value,
11598
+ color: resolveChartColor(v.color, colorIndex),
11599
+ label: v.label || legend?.[colorIndex]?.label || (colorBy === "category" ? item.label : `Series ${vIdx + 1}`)
11600
+ };
11601
+ });
11602
+ const summaryValues = rawVals.map((v) => v.value).join(", ");
11603
+ const isFirstRow = idx === 0;
11604
+ return /* @__PURE__ */ jsxs65(
11605
+ "button",
11606
+ {
11607
+ type: "button",
11608
+ className: cn(
11609
+ "stn-chart-bar__row",
11610
+ compact && "stn-chart-bar__row--compact",
11611
+ active && "is-active"
11612
+ ),
11613
+ onClick: () => handleColClick(item, idx),
11614
+ onMouseEnter: () => setHoveredIndex(idx),
11615
+ onMouseLeave: () => setHoveredIndex(null),
11616
+ onFocus: () => setHoveredIndex(idx),
11617
+ onBlur: () => setHoveredIndex(null),
11618
+ "aria-label": `${item.label} (${summaryValues})`,
11619
+ role: "listitem",
11620
+ children: [
11621
+ showYAxis && /* @__PURE__ */ jsx90("span", { className: "stn-chart-bar__row-label", title: item.label, children: item.label }),
11622
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__row-track", children: rawVals.map((bar, bIdx) => {
11623
+ const pct = Math.max(0, Math.min(100, bar.value / max * 100));
11624
+ return /* @__PURE__ */ jsx90(
11625
+ "div",
11626
+ {
11627
+ className: "stn-chart-bar__item",
11628
+ style: {
11629
+ width: `${pct}%`,
11630
+ backgroundColor: bar.color
11631
+ }
11632
+ },
11633
+ bIdx
11634
+ );
11635
+ }) }),
11636
+ showValue && rawVals.length === 1 && /* @__PURE__ */ jsx90("span", { className: "stn-chart-bar__row-val", children: formatter(rawVals[0].value) }),
11637
+ showTooltip && isHovered && /* @__PURE__ */ jsxs65(
11638
+ "div",
11639
+ {
11640
+ className: "stn-chart-tooltip",
11641
+ style: {
11642
+ left: "50%",
11643
+ top: isFirstRow ? "100%" : "0px",
11644
+ transform: isFirstRow ? "translate(-50%, 8px)" : "translate(-50%, -100%)",
11645
+ marginTop: isFirstRow ? "0px" : "-8px"
11646
+ },
11647
+ role: "tooltip",
11648
+ children: [
11649
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-tooltip__header", children: item.label }),
11650
+ rawVals.map((bar, bIdx) => /* @__PURE__ */ jsxs65("div", { className: "stn-chart-tooltip__row", children: [
11651
+ /* @__PURE__ */ jsxs65("div", { className: "stn-chart-tooltip__group", children: [
11652
+ /* @__PURE__ */ jsx90(
11653
+ "span",
11654
+ {
11655
+ className: "stn-chart-tooltip__dot",
11656
+ style: { backgroundColor: bar.color }
11657
+ }
11658
+ ),
11659
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-tooltip__label", children: bar.label })
11660
+ ] }),
11661
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-tooltip__value", children: formatter(bar.value) })
11662
+ ] }, bIdx))
11663
+ ]
11664
+ }
11665
+ )
11666
+ ]
11667
+ },
11668
+ item.id ?? idx
11669
+ );
11670
+ }) })
11671
+ ] })
11672
+ ) : (
11673
+ /* ==================== 세로 막대 (Vertical) ==================== */
11674
+ /* @__PURE__ */ jsxs65(Fragment13, { children: [
11675
+ showYAxis && /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__grid", "aria-hidden": "true", children: gridRows.map((row, rIdx) => /* @__PURE__ */ jsxs65("div", { className: "stn-chart-bar__grid-row", children: [
11676
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-bar__axis-label", children: row.label }),
11677
+ /* @__PURE__ */ jsx90(
11678
+ "div",
11679
+ {
11680
+ className: cn(
11681
+ "stn-chart-bar__grid-line",
11682
+ row.isZero && "stn-chart-bar__grid-line--zero"
11683
+ )
11684
+ }
11685
+ )
11686
+ ] }, rIdx)) }),
11687
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__columns", role: "list", children: data.map((item, idx) => {
11688
+ const active = isHighlighted(idx, item);
11689
+ const isHovered = hoveredIndex === idx;
11690
+ const rawVals = item.values.map((v, vIdx) => {
11691
+ const colorIndex = colorBy === "category" ? idx : vIdx;
11692
+ if (typeof v === "number") {
11693
+ return {
11694
+ value: v,
11695
+ color: resolveChartColor(void 0, colorIndex),
11696
+ label: legend?.[colorIndex]?.label || (colorBy === "category" ? item.label : `Series ${vIdx + 1}`)
11697
+ };
11698
+ }
11699
+ return {
11700
+ value: v.value,
11701
+ color: resolveChartColor(v.color, colorIndex),
11702
+ label: v.label || legend?.[colorIndex]?.label || (colorBy === "category" ? item.label : `Series ${vIdx + 1}`)
11703
+ };
11704
+ });
11705
+ const summaryValues = rawVals.map((v) => v.value).join(", ");
11706
+ return /* @__PURE__ */ jsxs65(
11707
+ "button",
11708
+ {
11709
+ type: "button",
11710
+ className: cn(
11711
+ "stn-chart-bar__col",
11712
+ compact && "stn-chart-bar__col--compact",
11713
+ active && "is-active"
11714
+ ),
11715
+ onClick: () => handleColClick(item, idx),
11716
+ onMouseEnter: () => setHoveredIndex(idx),
11717
+ onMouseLeave: () => setHoveredIndex(null),
11718
+ onFocus: () => setHoveredIndex(idx),
11719
+ onBlur: () => setHoveredIndex(null),
11720
+ "aria-label": `${item.label} (${summaryValues})`,
11721
+ role: "listitem",
11722
+ children: [
11723
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__highlight" }),
11724
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-bar__bars-wrap", children: rawVals.map((bar, bIdx) => {
11725
+ const pct = Math.max(0, Math.min(100, bar.value / max * 100));
11726
+ return /* @__PURE__ */ jsx90(
11727
+ "div",
11728
+ {
11729
+ className: "stn-chart-bar__item",
11730
+ style: {
11731
+ height: `${pct}%`,
11732
+ backgroundColor: bar.color
11733
+ }
11734
+ },
11735
+ bIdx
11736
+ );
11737
+ }) }),
11738
+ showXAxis && /* @__PURE__ */ jsx90("span", { className: "stn-chart-bar__label", children: item.label }),
11739
+ showTooltip && isHovered && /* @__PURE__ */ jsxs65(
11740
+ "div",
11741
+ {
11742
+ className: cn(
11743
+ "stn-chart-tooltip",
11744
+ idx >= data.length - 2 && data.length > 3 && "stn-chart-tooltip--flip-x",
11745
+ idx === 0 && "stn-chart-tooltip--align-left"
11746
+ ),
11747
+ style: {
11748
+ left: "50%",
11749
+ top: "0px"
11750
+ },
11751
+ role: "tooltip",
11752
+ children: [
11753
+ /* @__PURE__ */ jsx90("div", { className: "stn-chart-tooltip__header", children: item.label }),
11754
+ rawVals.map((bar, bIdx) => /* @__PURE__ */ jsxs65("div", { className: "stn-chart-tooltip__row", children: [
11755
+ /* @__PURE__ */ jsxs65("div", { className: "stn-chart-tooltip__group", children: [
11756
+ /* @__PURE__ */ jsx90(
11757
+ "span",
11758
+ {
11759
+ className: "stn-chart-tooltip__dot",
11760
+ style: { backgroundColor: bar.color }
11761
+ }
11762
+ ),
11763
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-tooltip__label", children: bar.label })
11764
+ ] }),
11765
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-tooltip__value", children: formatter(bar.value) })
11766
+ ] }, bIdx))
11767
+ ]
11768
+ }
11769
+ )
11770
+ ]
11771
+ },
11772
+ item.id ?? idx
11773
+ );
11774
+ }) })
11775
+ ] })
11776
+ ) }),
11777
+ legend && legend.length > 0 && /* @__PURE__ */ jsx90("div", { className: "stn-chart-legend-pill", "aria-label": "\uCC28\uD2B8 \uBC94\uB840", children: legend.map((leg, lIdx) => /* @__PURE__ */ jsxs65("div", { className: "stn-chart-legend-pill__item", children: [
11778
+ /* @__PURE__ */ jsx90(
11779
+ "span",
11780
+ {
11781
+ className: "stn-chart-legend-pill__bar",
11782
+ style: { backgroundColor: resolveChartColor(leg.color, lIdx) }
11783
+ }
11784
+ ),
11785
+ /* @__PURE__ */ jsx90("span", { className: "stn-chart-legend-pill__label", children: leg.label })
11786
+ ] }, lIdx)) })
11787
+ ]
11788
+ }
11789
+ );
11790
+ }
11791
+
11792
+ // src/components/StnPieChart.tsx
11793
+ import {
11794
+ useId as useId18,
11795
+ useState as useState25
11796
+ } from "react";
11797
+ import { Fragment as Fragment14, jsx as jsx91, jsxs as jsxs66 } from "react/jsx-runtime";
11798
+ var DEFAULT_PIE_COLORS = STN_CHART_COLORS;
11799
+ var R = 38;
11800
+ var CIRCUMFERENCE = 2 * Math.PI * R;
11801
+ var STROKE_WIDTH_MAP = {
11802
+ sm: 3,
11803
+ md: 5,
11804
+ lg: 8
11805
+ };
11806
+ function StnPieChart({
11807
+ data = [],
11808
+ loading = false,
11809
+ emptyText,
11810
+ variant = "gauge",
11811
+ strokeWidth: customStrokeWidth,
11812
+ thickness,
11813
+ showTooltip = true,
11814
+ centerLabel,
11815
+ centerSubLabel,
11816
+ showLegend = true,
11817
+ size = 90,
11818
+ decimals,
11819
+ format,
11820
+ className,
11821
+ style,
11822
+ ...rest
11823
+ }) {
11824
+ const filterId = useId18().replace(/:/g, "");
11825
+ const [hoveredIndex, setHoveredIndex] = useState25(null);
11826
+ const hasData = Boolean(data && data.length > 0);
11827
+ if (loading || !hasData) {
11828
+ return /* @__PURE__ */ jsx91(
11829
+ "div",
11830
+ {
11831
+ className: cn("stn-chart-gauge", className),
11832
+ style: { ...style, position: "relative", minWidth: size, minHeight: size },
11833
+ ...rest,
11834
+ children: renderChartState(loading, hasData, emptyText)
11835
+ }
11836
+ );
11837
+ }
11838
+ const strokeInput = customStrokeWidth ?? thickness;
11839
+ const resolvedStrokeSize = typeof strokeInput === "string" && strokeInput in STROKE_WIDTH_MAP ? strokeInput : void 0;
11840
+ const baseStrokeWidth = typeof strokeInput === "number" ? strokeInput : STROKE_WIDTH_MAP[resolvedStrokeSize ?? "md"] ?? 5;
11841
+ const hoverStrokeWidth = baseStrokeWidth + (baseStrokeWidth >= 8 ? 2.5 : 2);
11842
+ const total = data.reduce((acc, cur) => acc + (cur.value || 0), 0);
11843
+ const resolvedTotal = total > 0 ? total : 1;
11844
+ let accumulatedOffset = 0;
11845
+ const segments = data.map((item, idx) => {
11846
+ const ratio = Math.max(0, item.value / resolvedTotal);
11847
+ const segmentLength = ratio * CIRCUMFERENCE;
11848
+ const offset = -accumulatedOffset;
11849
+ accumulatedOffset += segmentLength;
11850
+ const color = resolveChartColor(item.color, idx);
11851
+ return {
11852
+ ...item,
11853
+ color,
11854
+ segmentLength: Number(segmentLength.toFixed(2)),
11855
+ offset: Number(offset.toFixed(2)),
11856
+ ratio
11857
+ };
11858
+ });
11859
+ const containerStyle = {
11860
+ ...style,
11861
+ position: "relative"
11862
+ };
11863
+ const activeSeg = hoveredIndex !== null ? segments[hoveredIndex] : null;
11864
+ return /* @__PURE__ */ jsxs66(
11865
+ "div",
11866
+ {
11867
+ className: cn(
11868
+ "stn-chart-gauge",
11869
+ resolvedStrokeSize && `stn-chart-gauge--${resolvedStrokeSize}`,
11870
+ !showTooltip && "stn-chart--no-tooltip",
11871
+ className
11872
+ ),
11873
+ style: containerStyle,
11874
+ ...rest,
11875
+ children: [
11876
+ /* @__PURE__ */ jsxs66(
11877
+ "svg",
11878
+ {
11879
+ className: "stn-chart-gauge__svg",
11880
+ viewBox: "0 0 90 90",
11881
+ style: { width: size, height: size },
11882
+ "aria-hidden": "true",
11883
+ children: [
11884
+ /* @__PURE__ */ jsx91("defs", { children: /* @__PURE__ */ jsx91("filter", { id: `gauge_shadow_${filterId}`, x: "-30%", y: "-30%", width: "160%", height: "160%", children: /* @__PURE__ */ jsx91("feDropShadow", { dx: "0", dy: "2", stdDeviation: "3", floodColor: "var(--stn-opacity-black-30)" }) }) }),
11885
+ /* @__PURE__ */ jsx91(
11886
+ "circle",
11887
+ {
11888
+ className: "stn-chart-gauge__track",
11889
+ cx: "45",
11890
+ cy: "45",
11891
+ r: R,
11892
+ style: resolvedStrokeSize ? void 0 : { strokeWidth: baseStrokeWidth }
11893
+ }
11894
+ ),
11895
+ segments.map((seg, sIdx) => {
11896
+ const isHovered = hoveredIndex === sIdx;
11897
+ return /* @__PURE__ */ jsx91(
11898
+ "circle",
11899
+ {
11900
+ className: "stn-chart-gauge__seg",
11901
+ cx: "45",
11902
+ cy: "45",
11903
+ r: R,
11904
+ stroke: seg.color,
11905
+ strokeWidth: isHovered ? hoverStrokeWidth : resolvedStrokeSize ? void 0 : baseStrokeWidth,
11906
+ strokeDasharray: `${seg.segmentLength} ${CIRCUMFERENCE.toFixed(2)}`,
11907
+ strokeDashoffset: seg.offset,
11908
+ onMouseEnter: () => setHoveredIndex(sIdx),
11909
+ onMouseLeave: () => setHoveredIndex(null),
11910
+ onFocus: () => setHoveredIndex(sIdx),
11911
+ onBlur: () => setHoveredIndex(null),
11912
+ tabIndex: 0,
11913
+ role: "graphics-symbol",
11914
+ "aria-label": `${seg.label}: ${seg.value}`,
11915
+ style: {
11916
+ cursor: showTooltip ? "pointer" : "default",
11917
+ transition: "stroke-width 0.15s ease",
11918
+ outline: "none"
11919
+ }
11920
+ },
11921
+ seg.id ?? sIdx
11922
+ );
11923
+ }),
11924
+ variant === "gauge" ? /* @__PURE__ */ jsxs66(Fragment14, { children: [
11925
+ /* @__PURE__ */ jsx91("circle", { className: "stn-chart-gauge__center-outer", cx: "45", cy: "45", r: "31" }),
11926
+ /* @__PURE__ */ jsx91(
11927
+ "circle",
11928
+ {
11929
+ className: "stn-chart-gauge__center-inner",
11930
+ cx: "45",
11931
+ cy: "45",
11932
+ r: "25",
11933
+ filter: `url(#gauge_shadow_${filterId})`
11934
+ }
11935
+ ),
11936
+ centerLabel && /* @__PURE__ */ jsx91("text", { className: "stn-chart-gauge__center-text", x: "45", y: "49", children: centerLabel })
11937
+ ] }) : /* @__PURE__ */ jsxs66(Fragment14, { children: [
11938
+ /* @__PURE__ */ jsx91("circle", { className: "stn-chart-gauge__center-outer", cx: "45", cy: "45", r: "30" }),
11939
+ centerLabel && /* @__PURE__ */ jsx91("text", { className: "stn-chart-gauge__center-text", x: "45", y: centerSubLabel ? "46" : "49", children: centerLabel }),
11940
+ centerSubLabel && /* @__PURE__ */ jsx91(
11941
+ "text",
11942
+ {
11943
+ x: "45",
11944
+ y: "58",
11945
+ textAnchor: "middle",
11946
+ fill: "var(--stn-text-secondary)",
11947
+ fontSize: "8",
11948
+ fontFamily: "var(--stn-font-body)",
11949
+ children: centerSubLabel
11950
+ }
11951
+ )
11952
+ ] })
11953
+ ]
11954
+ }
11955
+ ),
11956
+ showTooltip && activeSeg && /* @__PURE__ */ jsxs66(
11957
+ "div",
11958
+ {
11959
+ className: "stn-chart-tooltip",
11960
+ style: {
11961
+ left: "50%",
11962
+ top: "0px"
11963
+ },
11964
+ role: "tooltip",
11965
+ children: [
11966
+ /* @__PURE__ */ jsx91("div", { className: "stn-chart-tooltip__header", children: activeSeg.label }),
11967
+ /* @__PURE__ */ jsxs66("div", { className: "stn-chart-tooltip__row", children: [
11968
+ /* @__PURE__ */ jsxs66("div", { className: "stn-chart-tooltip__group", children: [
11969
+ /* @__PURE__ */ jsx91("span", { className: "stn-chart-tooltip__dot", style: { backgroundColor: activeSeg.color } }),
11970
+ /* @__PURE__ */ jsx91("span", { className: "stn-chart-tooltip__label", children: "\uC218\uCE58" })
11971
+ ] }),
11972
+ /* @__PURE__ */ jsx91("span", { className: "stn-chart-tooltip__value", children: format ? format(activeSeg.value, activeSeg.ratio) : `${activeSeg.value.toLocaleString()} (${(activeSeg.ratio * 100).toFixed(decimals !== void 0 ? decimals : 1)}%)` })
11973
+ ] })
11974
+ ]
11975
+ }
11976
+ ),
11977
+ showLegend && segments.length > 0 && /* @__PURE__ */ jsx91("div", { className: "stn-chart-gauge-legend", role: "list", children: segments.map((seg, lIdx) => /* @__PURE__ */ jsxs66(
11978
+ "div",
11979
+ {
11980
+ className: "stn-chart-gauge-legend__item",
11981
+ onMouseEnter: () => setHoveredIndex(lIdx),
11982
+ onMouseLeave: () => setHoveredIndex(null),
11983
+ onFocus: () => setHoveredIndex(lIdx),
11984
+ onBlur: () => setHoveredIndex(null),
11985
+ tabIndex: 0,
11986
+ style: { cursor: "pointer", outline: "none" },
11987
+ role: "listitem",
11988
+ children: [
11989
+ /* @__PURE__ */ jsx91(
11990
+ "span",
11991
+ {
11992
+ className: "stn-chart-gauge-legend__dot",
11993
+ style: { backgroundColor: seg.color }
11994
+ }
11995
+ ),
11996
+ /* @__PURE__ */ jsx91("span", { className: "stn-chart-gauge-legend__label", children: seg.label })
11997
+ ]
11998
+ },
11999
+ seg.id ?? lIdx
12000
+ )) })
12001
+ ]
12002
+ }
12003
+ );
12004
+ }
12005
+ var StnGaugeChart = StnPieChart;
12006
+
12007
+ // src/components/StnLineChart.tsx
12008
+ import {
12009
+ useId as useId19,
12010
+ useRef as useRef11,
12011
+ useState as useState26
12012
+ } from "react";
12013
+ import { jsx as jsx92, jsxs as jsxs67 } from "react/jsx-runtime";
12014
+ var DEFAULT_LINE_COLORS = STN_CHART_COLORS;
12015
+ var VIEW_W = 300;
12016
+ var VIEW_H = 84;
12017
+ var Y_TOP = 8;
12018
+ var Y_BOTTOM = 78;
12019
+ var STROKE_WIDTH_MAP2 = {
12020
+ sm: 1.5,
12021
+ md: 2,
12022
+ lg: 3
12023
+ };
12024
+ var DOT_RADIUS_MAP = {
12025
+ sm: 2,
12026
+ md: 2.5,
12027
+ lg: 3.5
12028
+ };
12029
+ function StnLineChart({
12030
+ data = [],
12031
+ loading = false,
12032
+ emptyText,
12033
+ variant = "line",
12034
+ size = "md",
12035
+ showDots,
12036
+ showPoints,
12037
+ dots,
12038
+ showXAxis = true,
12039
+ showYAxis = true,
12040
+ showTooltip = true,
12041
+ xAxisLabels = [],
12042
+ yAxis = {},
12043
+ legend,
12044
+ height,
12045
+ decimals,
12046
+ format,
12047
+ className,
12048
+ style,
12049
+ ...rest
12050
+ }) {
12051
+ const chartId = useId19().replace(/:/g, "");
12052
+ const svgRef = useRef11(null);
12053
+ const [hoverIndex, setHoverIndex] = useState26(null);
12054
+ const valueFormatter = format ?? ((v) => formatChartValue(v, decimals));
12055
+ const hasDots = Boolean(showDots ?? showPoints ?? dots ?? false);
12056
+ const dotRadius = DOT_RADIUS_MAP[size] || 3;
12057
+ const resolvedHeight = height ?? (variant === "sparkline" ? 36 : 180);
12058
+ const seriesList = Array.isArray(data) && data.length > 0 && typeof data[0] === "number" ? [{ data, color: resolveChartColor(void 0, 0) }] : data.map((s, idx) => ({
12059
+ ...s,
12060
+ color: resolveChartColor(s.color, idx)
12061
+ }));
12062
+ const hasData = seriesList.length > 0 && seriesList.some((s) => Array.isArray(s.data) && s.data.length > 0);
12063
+ if (loading || !hasData) {
12064
+ return /* @__PURE__ */ jsx92(
12065
+ "div",
12066
+ {
12067
+ className: cn("stn-chart-line", `stn-chart-line--${size}`, className),
12068
+ style: { ...style, height: resolvedHeight, position: "relative" },
12069
+ ...rest,
12070
+ children: renderChartState(loading, hasData, emptyText)
12071
+ }
12072
+ );
12073
+ }
12074
+ const allNumbers = seriesList.flatMap((s) => s.data);
12075
+ const computedMax = allNumbers.length > 0 ? Math.max(...allNumbers) : 100;
12076
+ const computedMin = allNumbers.length > 0 ? Math.min(...allNumbers) : 0;
12077
+ const max = yAxis.max ?? (computedMax > 0 ? computedMax : 100);
12078
+ const min = yAxis.min ?? (computedMin < 0 ? computedMin : 0);
12079
+ const range = max - min || 1;
12080
+ const xStart = showYAxis ? 38 : 8;
12081
+ const xEnd = 295;
12082
+ const xDist = xEnd - xStart;
12083
+ const yDist = Y_BOTTOM - Y_TOP;
12084
+ const buildPathString = (points) => {
12085
+ if (!points || points.length === 0) return "";
12086
+ const count = points.length;
12087
+ return points.map((val, idx) => {
12088
+ const x = xStart + idx / Math.max(1, count - 1) * xDist;
12089
+ const y = Y_BOTTOM - (val - min) / range * yDist;
12090
+ return `${idx === 0 ? "M" : "L"} ${x.toFixed(1)},${y.toFixed(1)}`;
12091
+ }).join(" ");
12092
+ };
12093
+ const buildAreaPathString = (points) => {
12094
+ const linePath = buildPathString(points);
12095
+ if (!linePath) return "";
12096
+ return `${linePath} L ${xEnd},${Y_BOTTOM} L ${xStart},${Y_BOTTOM} Z`;
12097
+ };
12098
+ const gridYPositions = [6, 16, 26, 36, 46, 56, 66, 78];
12099
+ const strokeWidth = STROKE_WIDTH_MAP2[size] || 2;
12100
+ const containerStyle = {
12101
+ ...style,
12102
+ height: resolvedHeight
12103
+ };
12104
+ const resolvedLegend = legend ?? (seriesList.length > 1 && seriesList.some((s) => s.label) ? seriesList.map((s, idx) => ({
12105
+ label: s.label || `Line ${idx + 1}`,
12106
+ color: resolveChartColor(s.color, idx)
12107
+ })) : []);
12108
+ const pointCount = seriesList[0]?.data.length || 0;
12109
+ const handleMouseMove = (e) => {
12110
+ if (!showTooltip || pointCount <= 0 || !svgRef.current) return;
12111
+ const rect = svgRef.current.getBoundingClientRect();
12112
+ if (rect.width <= 0) return;
12113
+ const svgX = (e.clientX - rect.left) / rect.width * VIEW_W;
12114
+ const clampedX = Math.max(xStart, Math.min(xEnd, svgX));
12115
+ const ratio = (clampedX - xStart) / xDist;
12116
+ const idx = Math.round(ratio * (pointCount - 1));
12117
+ setHoverIndex(Math.max(0, Math.min(pointCount - 1, idx)));
12118
+ };
12119
+ const handleMouseLeave = () => {
12120
+ setHoverIndex(null);
12121
+ };
12122
+ if (variant === "sparkline") {
12123
+ const firstSeries = seriesList[0] || { data: [] };
12124
+ const points = firstSeries.data;
12125
+ const count = points.length;
12126
+ const sW = 126;
12127
+ const sH = 32;
12128
+ const strokeColor = firstSeries.color || DEFAULT_LINE_COLORS[0];
12129
+ const polyPoints = points.map((v, i) => {
12130
+ const x = i / Math.max(1, count - 1) * sW;
12131
+ const y = sH - 4 - (v - min) / range * (sH - 8);
12132
+ return `${x.toFixed(1)},${y.toFixed(1)}`;
12133
+ }).join(" ");
12134
+ const areaPoints = `0,${sH} ${polyPoints} ${sW},${sH}`;
12135
+ const lastPoint = points[points.length - 1] ?? 0;
12136
+ const lastX = sW - 2;
12137
+ const lastY = sH - 4 - (lastPoint - min) / range * (sH - 8);
12138
+ return /* @__PURE__ */ jsx92(
12139
+ "div",
12140
+ {
12141
+ className: cn("stn-chart-sparkline", `stn-chart-line--${size}`, className),
12142
+ style: { ...containerStyle, position: "relative", overflow: "hidden" },
12143
+ ...rest,
12144
+ children: /* @__PURE__ */ jsxs67(
12145
+ "svg",
12146
+ {
12147
+ width: "100%",
12148
+ height: "100%",
12149
+ viewBox: `0 0 ${sW} ${sH}`,
12150
+ style: { display: "block" },
12151
+ "aria-hidden": "true",
12152
+ children: [
12153
+ /* @__PURE__ */ jsx92("defs", { children: /* @__PURE__ */ jsxs67("linearGradient", { id: `spark_grad_${chartId}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
12154
+ /* @__PURE__ */ jsx92("stop", { offset: "0%", stopColor: strokeColor, stopOpacity: "0.45" }),
12155
+ /* @__PURE__ */ jsx92("stop", { offset: "100%", stopColor: strokeColor, stopOpacity: "0" })
12156
+ ] }) }),
12157
+ /* @__PURE__ */ jsx92("polygon", { points: areaPoints, fill: `url(#spark_grad_${chartId})` }),
12158
+ /* @__PURE__ */ jsx92(
12159
+ "polyline",
12160
+ {
12161
+ points: polyPoints,
12162
+ fill: "none",
12163
+ stroke: strokeColor,
12164
+ strokeWidth,
12165
+ strokeLinejoin: "round",
12166
+ strokeLinecap: "round",
12167
+ vectorEffect: "non-scaling-stroke"
12168
+ }
12169
+ ),
12170
+ /* @__PURE__ */ jsx92("circle", { cx: lastX, cy: lastY, r: "3", fill: strokeColor })
12171
+ ]
12172
+ }
12173
+ )
12174
+ }
12175
+ );
12176
+ }
12177
+ const hoverSvgX = hoverIndex !== null && pointCount > 1 ? xStart + hoverIndex / (pointCount - 1) * xDist : null;
12178
+ const hoverPct = hoverSvgX !== null ? hoverSvgX / VIEW_W * 100 : 0;
12179
+ const isNearRight = hoverPct > 68;
12180
+ const isNearLeft = hoverPct < 15;
12181
+ return /* @__PURE__ */ jsxs67(
12182
+ "div",
12183
+ {
12184
+ className: cn(
12185
+ "stn-chart-line",
12186
+ `stn-chart-line--${size}`,
12187
+ hasDots ? "stn-chart-line--dots" : "stn-chart-line--no-dots",
12188
+ !showXAxis && "stn-chart-line--no-x-axis",
12189
+ !showYAxis && "stn-chart-line--no-y-axis",
12190
+ !showTooltip && "stn-chart--no-tooltip",
12191
+ className
12192
+ ),
12193
+ style: containerStyle,
12194
+ ...rest,
12195
+ children: [
12196
+ /* @__PURE__ */ jsxs67("div", { className: "stn-chart-line__body", children: [
12197
+ showYAxis && /* @__PURE__ */ jsx92("div", { className: "stn-chart-line__axis-y", "aria-hidden": "true", children: (yAxis.labels && yAxis.labels.length > 0 ? yAxis.labels : [max, min + (max - min) * 0.66, min + (max - min) * 0.33, min].map((v) => valueFormatter(v))).map((lbl, idx) => /* @__PURE__ */ jsx92("span", { children: lbl }, idx)) }),
12198
+ /* @__PURE__ */ jsxs67("div", { className: "stn-chart-line__plot-area", style: { position: "relative", width: "100%", flex: "1 1 0%", minHeight: 0 }, children: [
12199
+ /* @__PURE__ */ jsxs67(
12200
+ "svg",
12201
+ {
12202
+ ref: svgRef,
12203
+ className: "stn-chart-line__svg",
12204
+ viewBox: `0 0 ${VIEW_W} ${VIEW_H}`,
12205
+ preserveAspectRatio: "none",
12206
+ onMouseMove: handleMouseMove,
12207
+ onMouseLeave: handleMouseLeave,
12208
+ "aria-hidden": "true",
12209
+ children: [
12210
+ /* @__PURE__ */ jsx92("defs", { children: variant === "area" && seriesList.map((series, sIdx) => {
12211
+ const color = series.color || DEFAULT_LINE_COLORS[sIdx % DEFAULT_LINE_COLORS.length];
12212
+ return /* @__PURE__ */ jsxs67(
12213
+ "linearGradient",
12214
+ {
12215
+ id: `line_area_grad_${chartId}_${sIdx}`,
12216
+ x1: "0",
12217
+ y1: "0",
12218
+ x2: "0",
12219
+ y2: "1",
12220
+ children: [
12221
+ /* @__PURE__ */ jsx92("stop", { offset: "0%", stopColor: color, stopOpacity: "0.35" }),
12222
+ /* @__PURE__ */ jsx92("stop", { offset: "100%", stopColor: color, stopOpacity: "0" })
12223
+ ]
12224
+ },
12225
+ `grad-${sIdx}`
12226
+ );
12227
+ }) }),
12228
+ gridYPositions.map((yPos, idx) => {
12229
+ const isZero = yPos === Y_BOTTOM || idx === 1;
12230
+ return /* @__PURE__ */ jsx92(
12231
+ "line",
12232
+ {
12233
+ x1: xStart,
12234
+ y1: yPos,
12235
+ x2: xEnd,
12236
+ y2: yPos,
12237
+ stroke: isZero ? "var(--stn-chart-zero-line)" : "var(--stn-chart-grid-line)",
12238
+ strokeDasharray: isZero ? void 0 : "2 2"
12239
+ },
12240
+ idx
12241
+ );
12242
+ }),
12243
+ variant === "area" && seriesList.map((series, sIdx) => /* @__PURE__ */ jsx92(
12244
+ "path",
12245
+ {
12246
+ d: buildAreaPathString(series.data),
12247
+ fill: `url(#line_area_grad_${chartId}_${sIdx})`
12248
+ },
12249
+ `area-${series.id ?? sIdx}`
12250
+ )),
12251
+ seriesList.map((series, sIdx) => {
12252
+ const color = series.color || DEFAULT_LINE_COLORS[sIdx % DEFAULT_LINE_COLORS.length];
12253
+ return /* @__PURE__ */ jsx92(
12254
+ "path",
12255
+ {
12256
+ className: "stn-chart-line__path",
12257
+ d: buildPathString(series.data),
12258
+ style: { stroke: color },
12259
+ vectorEffect: "non-scaling-stroke"
12260
+ },
12261
+ `line-${series.id ?? sIdx}`
12262
+ );
12263
+ }),
12264
+ showTooltip && hoverSvgX !== null && hoverIndex !== null && /* @__PURE__ */ jsx92("g", { className: "stn-chart-line__hover-group", children: /* @__PURE__ */ jsx92(
12265
+ "line",
12266
+ {
12267
+ x1: hoverSvgX,
12268
+ y1: Y_TOP,
12269
+ x2: hoverSvgX,
12270
+ y2: Y_BOTTOM,
12271
+ stroke: "var(--stn-chart-highlight-border)",
12272
+ strokeDasharray: "2 2",
12273
+ strokeWidth: "1",
12274
+ vectorEffect: "non-scaling-stroke"
12275
+ }
12276
+ ) }),
12277
+ /* @__PURE__ */ jsx92(
12278
+ "rect",
12279
+ {
12280
+ x: "0",
12281
+ y: "0",
12282
+ width: VIEW_W,
12283
+ height: VIEW_H,
12284
+ fill: "transparent",
12285
+ style: { cursor: showTooltip ? "crosshair" : "default" }
12286
+ }
12287
+ )
12288
+ ]
12289
+ }
12290
+ ),
12291
+ hasDots && /* @__PURE__ */ jsx92("div", { className: "stn-chart-line__dots", "aria-hidden": "true", style: { position: "absolute", inset: 0, pointerEvents: "none" }, children: seriesList.map((series, sIdx) => {
12292
+ const color = series.color || DEFAULT_LINE_COLORS[sIdx % DEFAULT_LINE_COLORS.length];
12293
+ const count = series.data.length;
12294
+ return series.data.map((val, pIdx) => {
12295
+ const xPct = (xStart + pIdx / Math.max(1, count - 1) * xDist) / VIEW_W * 100;
12296
+ const yPct = (Y_BOTTOM - (val - min) / range * yDist) / VIEW_H * 100;
12297
+ const isHoveredPoint = hoverIndex === pIdx;
12298
+ const r = isHoveredPoint ? dotRadius + 1.2 : dotRadius;
12299
+ return /* @__PURE__ */ jsx92(
12300
+ "span",
12301
+ {
12302
+ className: cn("stn-chart-line__dot", isHoveredPoint && "is-active"),
12303
+ style: {
12304
+ position: "absolute",
12305
+ left: `${xPct}%`,
12306
+ top: `${yPct}%`,
12307
+ width: `${r * 2}px`,
12308
+ height: `${r * 2}px`,
12309
+ borderRadius: "var(--stn-radius-full)",
12310
+ backgroundColor: color,
12311
+ transform: "translate(-50%, -50%)",
12312
+ boxShadow: isHoveredPoint ? "0 0 0 2px var(--stn-surface-primary)" : void 0,
12313
+ display: "inline-block"
12314
+ }
12315
+ },
12316
+ `dot-${sIdx}-${pIdx}`
12317
+ );
12318
+ });
12319
+ }) })
12320
+ ] }),
12321
+ showXAxis && xAxisLabels.length > 0 && /* @__PURE__ */ jsx92("div", { className: "stn-chart-line__axis-x", "aria-hidden": "true", children: xAxisLabels.map((lbl, idx) => /* @__PURE__ */ jsx92("span", { children: lbl }, idx)) }),
12322
+ showTooltip && hoverIndex !== null && hoverSvgX !== null && /* @__PURE__ */ jsxs67(
12323
+ "div",
12324
+ {
12325
+ className: cn(
12326
+ "stn-chart-tooltip",
12327
+ isNearRight && "stn-chart-tooltip--flip-x",
12328
+ isNearLeft && "stn-chart-tooltip--align-left"
12329
+ ),
12330
+ style: {
12331
+ left: `${hoverPct}%`,
12332
+ top: "10px"
12333
+ },
12334
+ role: "tooltip",
12335
+ children: [
12336
+ xAxisLabels[hoverIndex] && /* @__PURE__ */ jsx92("div", { className: "stn-chart-tooltip__header", children: xAxisLabels[hoverIndex] }),
12337
+ seriesList.map((series, sIdx) => {
12338
+ const val = series.data[hoverIndex];
12339
+ if (val === void 0) return null;
12340
+ const color = series.color || DEFAULT_LINE_COLORS[sIdx % DEFAULT_LINE_COLORS.length];
12341
+ return /* @__PURE__ */ jsxs67("div", { className: "stn-chart-tooltip__row", children: [
12342
+ /* @__PURE__ */ jsxs67("div", { className: "stn-chart-tooltip__group", children: [
12343
+ /* @__PURE__ */ jsx92("span", { className: "stn-chart-tooltip__dot", style: { backgroundColor: color } }),
12344
+ /* @__PURE__ */ jsx92("span", { className: "stn-chart-tooltip__label", children: series.label || `Series ${sIdx + 1}` })
12345
+ ] }),
12346
+ /* @__PURE__ */ jsx92("span", { className: "stn-chart-tooltip__value", children: valueFormatter(val) })
12347
+ ] }, sIdx);
12348
+ })
12349
+ ]
12350
+ }
12351
+ )
12352
+ ] }),
12353
+ resolvedLegend.length > 0 && /* @__PURE__ */ jsx92("div", { className: "stn-chart-legend-pill", "aria-label": "\uB77C\uC778 \uCC28\uD2B8 \uBC94\uB840", children: resolvedLegend.map((item, idx) => /* @__PURE__ */ jsxs67("div", { className: "stn-chart-legend-pill__item", children: [
12354
+ /* @__PURE__ */ jsx92(
12355
+ "span",
12356
+ {
12357
+ className: "stn-chart-legend-pill__bar",
12358
+ style: { backgroundColor: item.color }
12359
+ }
12360
+ ),
12361
+ /* @__PURE__ */ jsx92("span", { className: "stn-chart-legend-pill__label", children: item.label })
12362
+ ] }, idx)) })
12363
+ ]
12364
+ }
12365
+ );
12366
+ }
12367
+
12368
+ // src/components/StnComboChart.tsx
12369
+ import {
12370
+ useId as useId20,
12371
+ useState as useState27
12372
+ } from "react";
12373
+ import { jsx as jsx93, jsxs as jsxs68 } from "react/jsx-runtime";
12374
+ var BAR_WIDTH_MAP = {
12375
+ sm: "var(--stn-chart-combo-bar-width-sm)",
12376
+ md: "var(--stn-chart-combo-bar-width-md)",
12377
+ lg: "var(--stn-chart-combo-bar-width-lg)"
12378
+ };
12379
+ var DOT_RADIUS_MAP2 = {
12380
+ sm: 2,
12381
+ md: 2.5,
12382
+ lg: 3.5
12383
+ };
12384
+ var VIEW_W2 = 300;
12385
+ var VIEW_H2 = 100;
12386
+ var Y_TOP2 = 8;
12387
+ var Y_BOTTOM2 = 92;
12388
+ function StnComboChart({
12389
+ data = [],
12390
+ loading = false,
12391
+ emptyText,
12392
+ lines = [],
12393
+ size = "md",
12394
+ showDots = false,
12395
+ showXAxis = true,
12396
+ showLeftYAxis = true,
12397
+ showRightYAxis: controlledShowRightYAxis,
12398
+ showTooltip = true,
12399
+ leftYAxis = {},
12400
+ rightYAxis,
12401
+ legend,
12402
+ height = 220,
12403
+ barWidth: customBarWidth,
12404
+ highlightIndex: controlledHighlight,
12405
+ onColumnClick,
12406
+ decimals,
12407
+ className,
12408
+ style,
12409
+ ...rest
12410
+ }) {
12411
+ const chartId = useId20().replace(/:/g, "");
12412
+ const [internalHighlight, setInternalHighlight] = useState27(null);
12413
+ const [hoverIndex, setHoverIndex] = useState27(null);
12414
+ const hasData = Boolean(data && data.length > 0);
12415
+ if (loading || !hasData) {
12416
+ return /* @__PURE__ */ jsx93(
12417
+ "div",
12418
+ {
12419
+ className: cn("stn-chart-combo", `stn-chart-combo--${size}`, className),
12420
+ style: { ...style, height, position: "relative" },
12421
+ ...rest,
12422
+ children: renderChartState(loading, hasData, emptyText)
12423
+ }
12424
+ );
12425
+ }
12426
+ const showRightYAxis = controlledShowRightYAxis ?? Boolean(rightYAxis);
12427
+ const hasRightAxis = Boolean(rightYAxis);
12428
+ const parsedData = data.map((d) => {
12429
+ let rawVals = [];
12430
+ if (d.bar !== void 0) {
12431
+ rawVals = [{ value: d.bar, color: resolveChartColor(void 0, 0), label: "Bar" }];
12432
+ } else if (d.barValues !== void 0) {
12433
+ if (typeof d.barValues === "number") {
12434
+ rawVals = [{ value: d.barValues, color: resolveChartColor(void 0, 0), label: "Bar" }];
12435
+ } else if (Array.isArray(d.barValues)) {
12436
+ rawVals = d.barValues.map((v, vIdx) => {
12437
+ if (typeof v === "number") {
12438
+ return { value: v, color: resolveChartColor(void 0, vIdx), label: `Bar ${vIdx + 1}` };
12439
+ }
12440
+ return {
12441
+ value: v.value,
12442
+ color: resolveChartColor(v.color, vIdx),
12443
+ label: v.label || `Bar ${vIdx + 1}`
12444
+ };
12445
+ });
12446
+ }
12447
+ }
12448
+ return {
12449
+ ...d,
12450
+ bars: rawVals
12451
+ };
12452
+ });
12453
+ const colCount = parsedData.length;
12454
+ const safeLines = lines.map((l, lIdx) => ({
12455
+ ...l,
12456
+ color: resolveChartColor(l.color, (lIdx + 1) % DEFAULT_LINE_COLORS.length),
12457
+ data: colCount > 0 && l.data.length > colCount ? l.data.slice(0, colCount) : l.data
12458
+ }));
12459
+ const allBarValues = parsedData.flatMap((d) => d.bars.map((b) => b.value));
12460
+ const leftLineValues = safeLines.filter((l) => (l.yAxis ?? "left") === "left").flatMap((l) => l.data);
12461
+ const rightLineValues = safeLines.filter((l) => l.yAxis === "right").flatMap((l) => l.data);
12462
+ const allLeftValues = [...allBarValues, ...leftLineValues];
12463
+ const computedLeftMax = allLeftValues.length > 0 ? Math.max(...allLeftValues) : 100;
12464
+ const computedLeftMin = allLeftValues.length > 0 ? Math.min(...allLeftValues) : 0;
12465
+ const leftMax = leftYAxis.max ?? (computedLeftMax > 0 ? computedLeftMax : 100);
12466
+ const leftMin = leftYAxis.min ?? (computedLeftMin < 0 ? computedLeftMin : 0);
12467
+ const leftRange = leftMax - leftMin || 1;
12468
+ const leftSteps = leftYAxis.steps ?? 4;
12469
+ const leftFormatter = leftYAxis.format ?? ((val) => `${formatChartValue(val, decimals)}${leftYAxis.unit ?? ""}`);
12470
+ const computedRightMax = rightLineValues.length > 0 ? Math.max(...rightLineValues) : 100;
12471
+ const computedRightMin = rightLineValues.length > 0 ? Math.min(...rightLineValues) : 0;
12472
+ const rightMax = rightYAxis?.max ?? (computedRightMax > 0 ? computedRightMax : 100);
12473
+ const rightMin = rightYAxis?.min ?? (computedRightMin < 0 ? computedRightMin : 0);
12474
+ const rightRange = rightMax - rightMin || 1;
12475
+ const rightSteps = rightYAxis?.steps ?? leftSteps;
12476
+ const rightFormatter = rightYAxis?.format ?? ((val) => `${formatChartValue(val, decimals)}${rightYAxis?.unit ?? ""}`);
12477
+ const resolvedBarWidth = customBarWidth !== void 0 ? typeof customBarWidth === "number" ? `${customBarWidth}px` : customBarWidth === "sm" || customBarWidth === "md" || customBarWidth === "lg" ? BAR_WIDTH_MAP[customBarWidth] : customBarWidth : BAR_WIDTH_MAP[size] || "var(--stn-chart-combo-bar-width-md)";
12478
+ const dotRadius = DOT_RADIUS_MAP2[size] || 2.5;
12479
+ const leftGridRows = [];
12480
+ if (leftYAxis.labels && leftYAxis.labels.length > 0) {
12481
+ leftYAxis.labels.forEach((lbl, idx) => {
12482
+ leftGridRows.push({ label: lbl, isZero: idx === leftYAxis.labels.length - 1 });
12483
+ });
12484
+ } else {
12485
+ for (let i = leftSteps; i >= 0; i--) {
12486
+ const rawVal = leftMin + leftRange / leftSteps * i;
12487
+ const val = Math.abs(rawVal - Math.round(rawVal)) < 1e-9 ? Math.round(rawVal) : Number(rawVal.toFixed(6));
12488
+ leftGridRows.push({
12489
+ label: leftFormatter(val),
12490
+ isZero: val === 0
12491
+ });
12492
+ }
12493
+ }
12494
+ const rightGridRows = [];
12495
+ if (hasRightAxis) {
12496
+ if (rightYAxis?.labels && rightYAxis.labels.length > 0) {
12497
+ rightGridRows.push(...rightYAxis.labels);
12498
+ } else {
12499
+ for (let i = rightSteps; i >= 0; i--) {
12500
+ const rawVal = rightMin + rightRange / rightSteps * i;
12501
+ const val = Math.abs(rawVal - Math.round(rawVal)) < 1e-9 ? Math.round(rawVal) : Number(rawVal.toFixed(6));
12502
+ rightGridRows.push(rightFormatter(val));
12503
+ }
12504
+ }
12505
+ }
12506
+ const colW = colCount > 0 ? VIEW_W2 / colCount : VIEW_W2;
12507
+ const getLineX = (index) => (index + 0.5) * colW;
12508
+ const getLineY = (val, isRightAxis) => {
12509
+ const curMin = isRightAxis ? rightMin : leftMin;
12510
+ const curRange = isRightAxis ? rightRange : leftRange;
12511
+ const pct = (val - curMin) / curRange;
12512
+ return Y_BOTTOM2 - pct * (Y_BOTTOM2 - Y_TOP2);
12513
+ };
12514
+ const buildPathString = (points, isRightAxis) => {
12515
+ if (!points || points.length === 0) return "";
12516
+ return points.map((val, idx) => {
12517
+ const x = getLineX(idx);
12518
+ const y = getLineY(val, isRightAxis);
12519
+ return `${idx === 0 ? "M" : "L"} ${x.toFixed(1)},${y.toFixed(1)}`;
12520
+ }).join(" ");
12521
+ };
12522
+ const buildAreaPathString = (points, isRightAxis) => {
12523
+ const linePath = buildPathString(points, isRightAxis);
12524
+ if (!linePath || points.length === 0) return "";
12525
+ const startX = getLineX(0);
12526
+ const endX = getLineX(points.length - 1);
12527
+ return `${linePath} L ${endX.toFixed(1)},${Y_BOTTOM2} L ${startX.toFixed(1)},${Y_BOTTOM2} Z`;
12528
+ };
12529
+ const resolvedLegend = legend ?? [
12530
+ ...(parsedData[0]?.bars.length ?? 0) > 0 ? parsedData[0].bars.map((b, bIdx) => ({
12531
+ label: b.label || (bIdx === 0 ? "\uB9C9\uB300" : `\uB9C9\uB300 ${bIdx + 1}`),
12532
+ color: b.color || DEFAULT_BAR_COLORS[bIdx % DEFAULT_BAR_COLORS.length],
12533
+ type: "bar"
12534
+ })) : [],
12535
+ ...safeLines.map((l, lIdx) => ({
12536
+ label: l.label || `\uC120 ${lIdx + 1}`,
12537
+ color: l.color || DEFAULT_LINE_COLORS[(lIdx + 1) % DEFAULT_LINE_COLORS.length],
12538
+ type: "line"
12539
+ }))
12540
+ ];
12541
+ const isHighlighted = (idx, item) => {
12542
+ if (controlledHighlight !== void 0) return controlledHighlight === idx;
12543
+ if (internalHighlight !== null) return internalHighlight === idx;
12544
+ return Boolean(item.highlight);
12545
+ };
12546
+ const handleColClick = (item, idx) => {
12547
+ setInternalHighlight(idx);
12548
+ onColumnClick?.(item, idx);
12549
+ };
12550
+ const containerStyle = {
12551
+ ...style,
12552
+ height,
12553
+ ["--stn-chart-combo-bar-width"]: resolvedBarWidth
12554
+ };
12555
+ const hoverGuideX = hoverIndex !== null ? getLineX(hoverIndex) : null;
12556
+ return /* @__PURE__ */ jsxs68(
12557
+ "div",
12558
+ {
12559
+ className: cn(
12560
+ "stn-chart-combo",
12561
+ `stn-chart-combo--${size}`,
12562
+ !showXAxis && "stn-chart-combo--no-x-axis",
12563
+ !showLeftYAxis && "stn-chart-combo--no-left-y-axis",
12564
+ (!showRightYAxis || !hasRightAxis) && "stn-chart-combo--no-right-y-axis",
12565
+ !showTooltip && "stn-chart--no-tooltip",
12566
+ className
12567
+ ),
12568
+ style: containerStyle,
12569
+ ...rest,
12570
+ children: [
12571
+ /* @__PURE__ */ jsxs68("div", { className: "stn-chart-combo__body", children: [
12572
+ showLeftYAxis && /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__axis-y-left", "aria-hidden": "true", children: leftGridRows.map((row, rIdx) => /* @__PURE__ */ jsx93("span", { children: row.label }, rIdx)) }),
12573
+ showRightYAxis && hasRightAxis && /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__axis-y-right", "aria-hidden": "true", children: rightGridRows.map((lbl, rIdx) => /* @__PURE__ */ jsx93("span", { children: lbl }, rIdx)) }),
12574
+ /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__grid", "aria-hidden": "true", children: leftGridRows.map((row, rIdx) => /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__grid-row", children: /* @__PURE__ */ jsx93(
12575
+ "div",
12576
+ {
12577
+ className: cn(
12578
+ "stn-chart-combo__grid-line",
12579
+ row.isZero && "stn-chart-combo__grid-line--zero"
12580
+ )
12581
+ }
12582
+ ) }, rIdx)) }),
12583
+ /* @__PURE__ */ jsxs68("div", { className: "stn-chart-combo__content", children: [
12584
+ /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__columns", role: "list", children: parsedData.map((item, idx) => {
12585
+ const active = isHighlighted(idx, item);
12586
+ return /* @__PURE__ */ jsxs68(
12587
+ "button",
12588
+ {
12589
+ type: "button",
12590
+ className: cn("stn-chart-combo__col", active && "is-active"),
12591
+ onClick: () => handleColClick(item, idx),
12592
+ onMouseEnter: () => setHoverIndex(idx),
12593
+ onMouseLeave: () => setHoverIndex(null),
12594
+ "aria-label": item.label,
12595
+ role: "listitem",
12596
+ children: [
12597
+ /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__highlight" }),
12598
+ /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__bars-wrap", children: item.bars.map((b, bIdx) => {
12599
+ const pct = Math.max(0, Math.min(100, (b.value - leftMin) / leftRange * 100));
12600
+ return /* @__PURE__ */ jsx93(
12601
+ "div",
12602
+ {
12603
+ className: "stn-chart-combo__bar",
12604
+ style: {
12605
+ height: `${pct}%`,
12606
+ backgroundColor: b.color
12607
+ }
12608
+ },
12609
+ bIdx
12610
+ );
12611
+ }) })
12612
+ ]
12613
+ },
12614
+ item.id ?? idx
12615
+ );
12616
+ }) }),
12617
+ /* @__PURE__ */ jsxs68(
12618
+ "svg",
12619
+ {
12620
+ className: "stn-chart-combo__svg-overlay",
12621
+ viewBox: `0 0 ${VIEW_W2} ${VIEW_H2}`,
12622
+ preserveAspectRatio: "none",
12623
+ "aria-hidden": "true",
12624
+ children: [
12625
+ /* @__PURE__ */ jsx93("defs", { children: safeLines.map((series, sIdx) => {
12626
+ if (!series.area) return null;
12627
+ const color = series.color || DEFAULT_LINE_COLORS[(sIdx + 1) % DEFAULT_LINE_COLORS.length];
12628
+ return /* @__PURE__ */ jsxs68(
12629
+ "linearGradient",
12630
+ {
12631
+ id: `combo_area_grad_${chartId}_${sIdx}`,
12632
+ x1: "0",
12633
+ y1: "0",
12634
+ x2: "0",
12635
+ y2: "1",
12636
+ children: [
12637
+ /* @__PURE__ */ jsx93("stop", { offset: "0%", stopColor: color, stopOpacity: "0.32" }),
12638
+ /* @__PURE__ */ jsx93("stop", { offset: "100%", stopColor: color, stopOpacity: "0.0" })
12639
+ ]
12640
+ },
12641
+ `grad-${sIdx}`
12642
+ );
12643
+ }) }),
12644
+ safeLines.map((series, sIdx) => {
12645
+ if (!series.area) return null;
12646
+ const isRight = series.yAxis === "right";
12647
+ return /* @__PURE__ */ jsx93(
12648
+ "path",
12649
+ {
12650
+ d: buildAreaPathString(series.data, isRight),
12651
+ fill: `url(#combo_area_grad_${chartId}_${sIdx})`
12652
+ },
12653
+ `area-${series.id ?? sIdx}`
12654
+ );
12655
+ }),
12656
+ safeLines.map((series, sIdx) => {
12657
+ const color = series.color || DEFAULT_LINE_COLORS[(sIdx + 1) % DEFAULT_LINE_COLORS.length];
12658
+ const isRight = series.yAxis === "right";
12659
+ return /* @__PURE__ */ jsx93(
12660
+ "path",
12661
+ {
12662
+ className: "stn-chart-combo__path",
12663
+ d: buildPathString(series.data, isRight),
12664
+ style: { stroke: color },
12665
+ vectorEffect: "non-scaling-stroke"
12666
+ },
12667
+ `line-${series.id ?? sIdx}`
12668
+ );
12669
+ }),
12670
+ showTooltip && hoverGuideX !== null && /* @__PURE__ */ jsx93("g", { className: "stn-chart-line__hover-group", children: /* @__PURE__ */ jsx93(
12671
+ "line",
12672
+ {
12673
+ x1: hoverGuideX,
12674
+ y1: Y_TOP2,
12675
+ x2: hoverGuideX,
12676
+ y2: Y_BOTTOM2,
12677
+ stroke: "var(--stn-chart-highlight-border)",
12678
+ strokeDasharray: "2 2",
12679
+ strokeWidth: "1",
12680
+ vectorEffect: "non-scaling-stroke"
12681
+ }
12682
+ ) })
12683
+ ]
12684
+ }
12685
+ ),
12686
+ /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__dots-layer", "aria-hidden": "true", style: { position: "absolute", inset: 0, pointerEvents: "none", zIndex: 3 }, children: safeLines.map((series, sIdx) => {
12687
+ const shouldShowDots = series.showDots ?? showDots;
12688
+ if (!shouldShowDots) return null;
12689
+ const color = series.color || DEFAULT_LINE_COLORS[(sIdx + 1) % DEFAULT_LINE_COLORS.length];
12690
+ const isRight = series.yAxis === "right";
12691
+ return series.data.map((val, pIdx) => {
12692
+ const xPct = getLineX(pIdx) / VIEW_W2 * 100;
12693
+ const yPct = getLineY(val, isRight) / VIEW_H2 * 100;
12694
+ const isHovered = hoverIndex === pIdx;
12695
+ const r = isHovered ? dotRadius + 1.2 : dotRadius;
12696
+ return /* @__PURE__ */ jsx93(
12697
+ "span",
12698
+ {
12699
+ className: cn("stn-chart-line__dot", isHovered && "is-active"),
12700
+ style: {
12701
+ position: "absolute",
12702
+ left: `${xPct}%`,
12703
+ top: `${yPct}%`,
12704
+ width: `${r * 2}px`,
12705
+ height: `${r * 2}px`,
12706
+ borderRadius: "var(--stn-radius-full)",
12707
+ backgroundColor: color,
12708
+ transform: "translate(-50%, -50%)",
12709
+ boxShadow: isHovered ? "0 0 0 2px var(--stn-surface-primary)" : void 0,
12710
+ display: "inline-block"
12711
+ }
12712
+ },
12713
+ `combo-dot-${sIdx}-${pIdx}`
12714
+ );
12715
+ });
12716
+ }) }),
12717
+ showTooltip && hoverIndex !== null && parsedData[hoverIndex] && (() => {
12718
+ const colPct = (hoverIndex + 0.5) / colCount * 100;
12719
+ const isNearRight = colPct > 68;
12720
+ const isNearLeft = colPct < 15;
12721
+ return /* @__PURE__ */ jsxs68(
12722
+ "div",
12723
+ {
12724
+ className: cn(
12725
+ "stn-chart-tooltip",
12726
+ isNearRight && "stn-chart-tooltip--flip-x",
12727
+ isNearLeft && "stn-chart-tooltip--align-left"
12728
+ ),
12729
+ style: {
12730
+ left: `${colPct}%`,
12731
+ top: "0px"
12732
+ },
12733
+ role: "tooltip",
12734
+ children: [
12735
+ /* @__PURE__ */ jsx93("div", { className: "stn-chart-tooltip__header", children: parsedData[hoverIndex].label }),
12736
+ parsedData[hoverIndex].bars.map((b, bIdx) => /* @__PURE__ */ jsxs68("div", { className: "stn-chart-tooltip__row", children: [
12737
+ /* @__PURE__ */ jsxs68("div", { className: "stn-chart-tooltip__group", children: [
12738
+ /* @__PURE__ */ jsx93(
12739
+ "span",
12740
+ {
12741
+ className: "stn-chart-tooltip__bar-mark",
12742
+ style: {
12743
+ backgroundColor: b.color
12744
+ }
12745
+ }
12746
+ ),
12747
+ /* @__PURE__ */ jsx93("span", { className: "stn-chart-tooltip__label", children: b.label })
12748
+ ] }),
12749
+ /* @__PURE__ */ jsx93("span", { className: "stn-chart-tooltip__value", children: leftFormatter(b.value) })
12750
+ ] }, `tip-bar-${bIdx}`)),
12751
+ safeLines.map((series, sIdx) => {
12752
+ const val = series.data[hoverIndex];
12753
+ if (val === void 0) return null;
12754
+ const color = series.color || DEFAULT_LINE_COLORS[(sIdx + 1) % DEFAULT_LINE_COLORS.length];
12755
+ const isRight = series.yAxis === "right";
12756
+ const formatter = isRight ? rightFormatter : leftFormatter;
12757
+ return /* @__PURE__ */ jsxs68("div", { className: "stn-chart-tooltip__row", children: [
12758
+ /* @__PURE__ */ jsxs68("div", { className: "stn-chart-tooltip__group", children: [
12759
+ /* @__PURE__ */ jsx93("span", { className: "stn-chart-tooltip__dot", style: { backgroundColor: color } }),
12760
+ /* @__PURE__ */ jsx93("span", { className: "stn-chart-tooltip__label", children: series.label || `\uC120 ${sIdx + 1}` })
12761
+ ] }),
12762
+ /* @__PURE__ */ jsx93("span", { className: "stn-chart-tooltip__value", children: formatter(val) })
12763
+ ] }, `tip-line-${sIdx}`);
12764
+ })
12765
+ ]
12766
+ }
12767
+ );
12768
+ })()
12769
+ ] }),
12770
+ showXAxis && /* @__PURE__ */ jsx93("div", { className: "stn-chart-combo__axis-x", "aria-hidden": "true", children: parsedData.map((item, idx) => /* @__PURE__ */ jsx93("span", { className: "stn-chart-combo__axis-x-item", title: item.label, children: item.label }, item.id ?? idx)) })
12771
+ ] }),
12772
+ resolvedLegend.length > 0 && /* @__PURE__ */ jsx93("div", { className: "stn-chart-legend-pill", "aria-label": "\uBCF5\uD569 \uCC28\uD2B8 \uBC94\uB840", children: resolvedLegend.map((item, idx) => /* @__PURE__ */ jsxs68("div", { className: "stn-chart-legend-pill__item", children: [
12773
+ item.type === "line" ? /* @__PURE__ */ jsx93(
12774
+ "span",
12775
+ {
12776
+ className: "stn-chart-legend-pill__line-marker",
12777
+ style: { backgroundColor: item.color },
12778
+ children: /* @__PURE__ */ jsx93(
12779
+ "span",
12780
+ {
12781
+ className: "stn-chart-legend-pill__line-dot",
12782
+ style: { backgroundColor: item.color }
12783
+ }
12784
+ )
12785
+ }
12786
+ ) : /* @__PURE__ */ jsx93(
12787
+ "span",
12788
+ {
12789
+ className: "stn-chart-legend-pill__bar",
12790
+ style: { backgroundColor: item.color }
12791
+ }
12792
+ ),
12793
+ /* @__PURE__ */ jsx93("span", { className: "stn-chart-legend-pill__label", children: item.label })
12794
+ ] }, idx)) })
12795
+ ]
12796
+ }
12797
+ );
12798
+ }
11257
12799
  export {
11258
12800
  AlertCenterDashboard,
11259
12801
  AlertCenterPageScaffold,
11260
12802
  DEFAULT_3D_GRAPH_LINKS,
11261
12803
  DEFAULT_3D_GRAPH_NODES,
12804
+ DEFAULT_BAR_COLORS,
12805
+ DEFAULT_CHART_COLORS,
12806
+ DEFAULT_LINE_COLORS,
12807
+ DEFAULT_PIE_COLORS,
11262
12808
  DashboardPageScaffold,
11263
12809
  Divider,
11264
12810
  LoginPageScaffold,
@@ -11266,6 +12812,8 @@ export {
11266
12812
  PubDisabilityStatusList,
11267
12813
  PubTop5EquipmentBars,
11268
12814
  PubTrafficTop5Bars,
12815
+ SEVERITY_COLOR_TOKENS,
12816
+ STATUS_COLOR_TOKENS,
11269
12817
  STN_ALERT_CENTER_DASHBOARD_USAGE,
11270
12818
  STN_ALERT_CENTER_DASHBOARD_WIDGETS,
11271
12819
  STN_ALERT_CENTER_DEMO_ALERTS2 as STN_ALERT_CENTER_DEMO_ALERTS,
@@ -11277,6 +12825,8 @@ export {
11277
12825
  STN_ALERT_CENTER_TAB_IDS,
11278
12826
  STN_ALERT_CENTER_USAGE,
11279
12827
  STN_ALERT_CENTER_USAGE_HTML,
12828
+ STN_CHART_COLORS,
12829
+ STN_CHART_STATUS_COLORS,
11280
12830
  STN_DATE_PICKER_INTRO,
11281
12831
  STN_DATE_PICKER_KO_NAME,
11282
12832
  STN_DATE_PICKER_NAME,
@@ -11385,6 +12935,7 @@ export {
11385
12935
  StnAlertCenterDocPreview,
11386
12936
  StnAlertCenterPanel,
11387
12937
  StnBadge,
12938
+ StnBarChart,
11388
12939
  StnBreadcrumb,
11389
12940
  StnButton,
11390
12941
  StnCard,
@@ -11394,6 +12945,7 @@ export {
11394
12945
  StnCheckbox,
11395
12946
  StnChip,
11396
12947
  StnCircularProgress,
12948
+ StnComboChart,
11397
12949
  StnContainer,
11398
12950
  StnContext,
11399
12951
  StnDashboard,
@@ -11410,6 +12962,9 @@ export {
11410
12962
  StnEventBanner,
11411
12963
  StnFloatingToolbar,
11412
12964
  StnFloatingToolbarPreset,
12965
+ StnGaugeChart,
12966
+ StnGradeRow,
12967
+ StnGradeRowList,
11413
12968
  StnGrid,
11414
12969
  StnHeader,
11415
12970
  StnHeaderContextTitle,
@@ -11433,6 +12988,7 @@ export {
11433
12988
  StnLayerDim,
11434
12989
  StnLayerModal,
11435
12990
  StnLayerShell,
12991
+ StnLineChart,
11436
12992
  StnListViewLayout,
11437
12993
  StnListViewLayoutBody,
11438
12994
  StnListViewLayoutContent,
@@ -11467,6 +13023,7 @@ export {
11467
13023
  StnPageScaffoldRegion,
11468
13024
  StnPageScaffoldRoot,
11469
13025
  StnPagination,
13026
+ StnPieChart,
11470
13027
  StnPopup,
11471
13028
  StnProgressBar,
11472
13029
  StnProvider,
@@ -11495,10 +13052,14 @@ export {
11495
13052
  StnSideNavigation,
11496
13053
  StnSlider,
11497
13054
  StnStack,
13055
+ StnStatCard,
13056
+ StnStatGroup,
11498
13057
  StnStatus,
11499
13058
  StnStatusDot,
11500
13059
  StnStatusDotGroup,
11501
13060
  StnStatusFlow,
13061
+ StnStatusItem,
13062
+ StnStatusList,
11502
13063
  StnStatusSeverity,
11503
13064
  StnStatusSwitch,
11504
13065
  StnSwitch,
@@ -11564,6 +13125,7 @@ export {
11564
13125
  cn,
11565
13126
  collectExpandableIds,
11566
13127
  flattenStnTree,
13128
+ formatChartValue,
11567
13129
  formatStnDateRangeFieldValue3 as formatStnDateRangeFieldValue,
11568
13130
  formatStnHeaderTitleDate,
11569
13131
  formatStnHeaderTitleTime,
@@ -11572,6 +13134,8 @@ export {
11572
13134
  getStnWidgetKind,
11573
13135
  isStnWidgetKindSlug,
11574
13136
  parseStnDateRangeFieldValue2 as parseStnDateRangeFieldValue,
13137
+ renderChartState,
13138
+ resolveChartColor,
11575
13139
  resolveStnWidgetBackground2 as resolveStnWidgetBackground,
11576
13140
  resolveSystemIconSrcFromName3 as resolveSystemIconSrcFromName,
11577
13141
  stnWidgetSampleUrl,