@kb-labs/studio-ui-kit 2.118.0 → 2.118.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import * as React4 from 'react';
5
5
  import { useMemo } from 'react';
6
6
  import { Line, Column, Area, Pie, Bar } from '@ant-design/charts';
7
7
  import dayjs from 'dayjs';
8
- import { useSearchParams, useNavigate, useParams } from 'react-router-dom';
8
+ import { useNavigate, useSearchParams, useParams } from 'react-router-dom';
9
9
  import { marked } from 'marked';
10
10
 
11
11
  // src/primitives/UIText.tsx
@@ -1312,13 +1312,17 @@ function UIBreadcrumb({
1312
1312
  separator,
1313
1313
  className
1314
1314
  }) {
1315
+ const navigate = useNavigate();
1315
1316
  const breadcrumbItems = items.map((item) => ({
1316
1317
  title: item.icon ? /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: "4px" }, children: [
1317
1318
  item.icon,
1318
1319
  /* @__PURE__ */ jsx("span", { children: item.title })
1319
1320
  ] }) : item.title,
1320
1321
  href: item.href,
1321
- onClick: item.onClick
1322
+ onClick: item.href ? (e) => {
1323
+ e.preventDefault();
1324
+ navigate(item.href);
1325
+ } : item.onClick
1322
1326
  }));
1323
1327
  return /* @__PURE__ */ jsx(
1324
1328
  Breadcrumb,
@@ -1887,25 +1891,26 @@ var { useToken: useToken16 } = theme;
1887
1891
  function UIMarkdownViewer({ content, className, style: customStyle }) {
1888
1892
  const { token } = useToken16();
1889
1893
  const css = `
1890
- .kb-md { font-size: ${token.fontSize}px; line-height: 1.75; color: ${token.colorText}; font-family: ${token.fontFamily}; }
1891
- .kb-md h1,.kb-md h2,.kb-md h3,.kb-md h4,.kb-md h5,.kb-md h6 { font-weight:600; line-height:1.3; margin:1.5em 0 0.5em; color:${token.colorTextHeading}; }
1892
- .kb-md h1 { font-size:${token.fontSizeHeading1}px; padding-bottom:0.3em; border-bottom:1px solid ${token.colorBorderSecondary}; }
1893
- .kb-md h2 { font-size:${token.fontSizeHeading2}px; padding-bottom:0.2em; border-bottom:1px solid ${token.colorBorderSecondary}; }
1894
- .kb-md h3 { font-size:${token.fontSizeHeading3}px; }
1895
- .kb-md h4 { font-size:${token.fontSizeHeading4}px; }
1896
- .kb-md p { margin:0.75em 0; }
1894
+ .kb-md { font-size: ${token.fontSize}px; line-height: 1.6; color: ${token.colorText}; font-family: ${token.fontFamily}; }
1895
+ .kb-md h1,.kb-md h2,.kb-md h3,.kb-md h4,.kb-md h5,.kb-md h6 { font-weight:600; line-height:1.3; margin:1.2em 0 0.4em; color:${token.colorTextHeading}; }
1896
+ .kb-md h1:first-child,.kb-md h2:first-child,.kb-md h3:first-child { margin-top:0; }
1897
+ .kb-md h1 { font-size:1.5em; padding-bottom:0.3em; border-bottom:1px solid ${token.colorBorderSecondary}; }
1898
+ .kb-md h2 { font-size:1.25em; padding-bottom:0.2em; border-bottom:1px solid ${token.colorBorderSecondary}; }
1899
+ .kb-md h3 { font-size:1.1em; }
1900
+ .kb-md h4 { font-size:1em; }
1901
+ .kb-md p { margin:0.6em 0; }
1897
1902
  .kb-md a { color:${token.colorPrimary}; text-decoration:none; }
1898
1903
  .kb-md a:hover { text-decoration:underline; }
1899
1904
  .kb-md code { font-family:${token.fontFamilyCode}; font-size:0.875em; background:${token.colorFillTertiary}; color:${token.colorTextSecondary}; padding:0.15em 0.4em; border-radius:${token.borderRadiusSM}px; }
1900
- .kb-md pre { background:${token.colorFillQuaternary}; border:1px solid ${token.colorBorderSecondary}; border-radius:${token.borderRadius}px; padding:16px; overflow-x:auto; margin:1em 0; }
1905
+ .kb-md pre { background:${token.colorFillQuaternary}; border:1px solid ${token.colorBorderSecondary}; border-radius:${token.borderRadius}px; padding:12px 16px; overflow-x:auto; margin:0.75em 0; }
1901
1906
  .kb-md pre code { background:none; padding:0; font-size:0.85em; color:${token.colorText}; }
1902
- .kb-md ul,.kb-md ol { padding-left:1.75em; margin:0.75em 0; }
1903
- .kb-md li { margin:0.25em 0; }
1904
- .kb-md blockquote { margin:1em 0; padding:0.5em 1em; border-left:4px solid ${token.colorPrimaryBorder}; background:${token.colorFillQuaternary}; color:${token.colorTextSecondary}; border-radius:0 ${token.borderRadiusSM}px ${token.borderRadiusSM}px 0; }
1907
+ .kb-md ul,.kb-md ol { padding-left:1.5em; margin:0.6em 0; }
1908
+ .kb-md li { margin:0.2em 0; }
1909
+ .kb-md blockquote { margin:0.75em 0; padding:0.4em 1em; border-left:4px solid ${token.colorPrimaryBorder}; background:${token.colorFillQuaternary}; color:${token.colorTextSecondary}; border-radius:0 ${token.borderRadiusSM}px ${token.borderRadiusSM}px 0; }
1905
1910
  .kb-md blockquote p { margin:0; }
1906
- .kb-md hr { border:none; border-top:1px solid ${token.colorBorderSecondary}; margin:1.5em 0; }
1907
- .kb-md table { width:100%; border-collapse:collapse; margin:1em 0; font-size:0.9em; }
1908
- .kb-md th,.kb-md td { border:1px solid ${token.colorBorderSecondary}; padding:8px 12px; text-align:left; }
1911
+ .kb-md hr { border:none; border-top:1px solid ${token.colorBorderSecondary}; margin:1.2em 0; }
1912
+ .kb-md table { width:100%; border-collapse:collapse; margin:0.75em 0; font-size:0.9em; }
1913
+ .kb-md th,.kb-md td { border:1px solid ${token.colorBorderSecondary}; padding:6px 10px; text-align:left; }
1909
1914
  .kb-md th { background:${token.colorFillTertiary}; font-weight:600; }
1910
1915
  .kb-md tr:nth-child(even) td { background:${token.colorFillQuaternary}; }
1911
1916
  .kb-md img { max-width:100%; border-radius:${token.borderRadius}px; }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/primitives/UIText.tsx","../src/primitives/UIBox.tsx","../src/primitives/UIFlex.tsx","../src/primitives/UITypography.tsx","../src/layout/UIStack.tsx","../src/layout/UISpace.tsx","../src/layout/UIGrid.tsx","../src/layout/UIDivider.tsx","../src/core/UIBadge.tsx","../src/core/UIButton.module.css","../src/core/UIButton.tsx","../src/core/UICard.module.css","../src/core/UICard.tsx","../src/core/UITag.tsx","../src/core/UITitle.tsx","../src/core/UIIcon.module.css","../src/core/UIIcon.tsx","../src/core/UIAvatar.tsx","../src/core/useUiTheme.ts","../src/core/UIShimmerText.module.css","../src/core/UIShimmerText.tsx","../src/core/UICopyButton.tsx","../src/data/UIMetricCard.tsx","../src/data/UITable.tsx","../src/data/charts/useChartColors.ts","../src/data/charts/UILineChart.tsx","../src/data/charts/UIColumnChart.tsx","../src/data/charts/UIAreaChart.tsx","../src/data/charts/UIPieChart.tsx","../src/data/charts/UIBarChart.tsx","../src/data/charts/UIStatisticsChart.tsx","../src/data/UIStatistic.tsx","../src/data/UIProgress.tsx","../src/data/UIDescriptions.tsx","../src/data/UITimeline.tsx","../src/data/UITree.tsx","../src/data/UIList.tsx","../src/form/UIInput.tsx","../src/form/UISelect.tsx","../src/form/UIForm.tsx","../src/form/UICheckbox.tsx","../src/form/UISwitch.tsx","../src/form/UIDatePicker.tsx","../src/form/UIInputNumber.tsx","../src/form/UIRadio.tsx","../src/form/UIUpload.tsx","../src/form/UISlider.tsx","../src/navigation/UIBreadcrumb.tsx","../src/navigation/UITabs.tsx","../src/navigation/UIAccordion.tsx","../src/navigation/UIDropdown.tsx","../src/navigation/UISegmented.tsx","../src/navigation/UISteps.tsx","../src/navigation/UIMenu.tsx","../src/composite/UIPage.tsx","../src/composite/UIHeader.tsx","../src/composite/UIPageHeader.tsx","../src/composite/UIPageSection.tsx","../src/feedback/UIAlert.tsx","../src/feedback/UIEmptyState.tsx","../src/feedback/UIErrorState.tsx","../src/feedback/UISkeleton.module.css","../src/feedback/UISkeleton.tsx","../src/feedback/UISpin.tsx","../src/feedback/UIResult.tsx","../src/feedback/useUiMessage.ts","../src/feedback/useUiNotification.ts","../src/overlay/UIModal.tsx","../src/overlay/UITooltip.tsx","../src/overlay/UIDrawer.tsx","../src/overlay/UIPopconfirm.tsx","../src/overlay/UIPopover.tsx","../src/content/UIMarkdownViewer.tsx","../src/content/UIJsonViewer.tsx","../src/content/UIDiffViewer.tsx"],"names":["jsx","spacing","AntSpace","AntRow","AntCol","AntDivider","useToken","theme","AntBadge","React","UIButton","AntButton","AntCard","AntTag","Typography","jsxs","React2","AntAvatar","React3","AntTable","useChartTheme","React5","React6","React7","React8","React9","Card","AntStatistic","AntProgress","AntDescriptions","AntTimeline","AntTree","AntList","AntInput","AntSelect","AntForm","AntCheckbox","AntSwitch","AntDatePicker","AntTimePicker","AntInputNumber","AntRadio","AntUpload","AntSlider","AntBreadcrumb","AntTabs","AntCollapse","AntDropdown","AntSegmented","AntSteps","AntMenu","Fragment","message","AntAlert","AntEmpty","AntSkeleton","AntSpin","AntResult","AntModal","AntTooltip","AntDrawer","AntPopconfirm","AntPopover","React10"],"mappings":";;;;;;;;;;;AAWA,IAAM,EAAE,UAAS,GAAI,KAAA;AAgCd,SAAS,MAAA,CAAO;AAAA,EACrB,QAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,MAAA,GAAS,QAAA;AAAA,EACT,KAAA,GAAQ,SAAA;AAAA,EACR,IAAI,SAAA,GAAY,MAAA;AAAA,EAChB,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAgB;AACd,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,QAAA,EAAS;AAG3B,EAAA,MAAM,QAAA,GAAwC;AAAA,IAC5C,SAAS,KAAA,CAAM,SAAA;AAAA,IACf,WAAW,KAAA,CAAM,kBAAA;AAAA,IACjB,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,MAAM,KAAA,CAAM;AAAA,GACd;AAEA,EAAA,MAAM,SAAA,GAAiC;AAAA,IACrC,QAAA,EAAU,UAAA,CAAW,QAAA,CAAS,IAAI,EAAE,CAAC,CAAA;AAAA,IACrC,YAAY,UAAA,CAAW,QAAA,CAAS,IAAI,CAAA,CAAE,CAAC,CAAA,CAAE,UAAA;AAAA,IACzC,UAAA,EAAY,UAAA,CAAW,UAAA,CAAW,MAAM,CAAA;AAAA,IACxC,KAAA,EAAO,SAAS,KAAK;AAAA,GACvB;AAGA,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,SAAA,EAAW,GAAG,WAAA,EAAY;AAE7C,EAAA,uBACE,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAc,SAAA,EACtB,QAAA,EACH,CAAA;AAEJ;AC3BO,SAAS,KAAA,CAAM;AAAA,EACpB,QAAA;AAAA,EACA,CAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,CAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,EAAA;AAAA,EACA,IAAI,SAAA,GAAY,KAAA;AAAA,EAChB,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAe;AACb,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,GAAI,CAAA,KAAM,MAAA,IAAa,EAAE,OAAA,EAAS,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,IAC7C,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,UAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IAClD,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,YAAA,EAAc,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IACpD,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,aAAA,EAAe,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IACrD,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,WAAA,EAAa,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IACnD,GAAI,CAAA,KAAM,MAAA,IAAa,EAAE,MAAA,EAAQ,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,IAC5C,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,SAAA,EAAW,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IACjD,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,WAAA,EAAa,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IACnD,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,YAAA,EAAc,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IACpD,GAAI,EAAA,KAAO,MAAA,IAAa,EAAE,UAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAE;AAAA,IAClD,GAAG;AAAA,GACL;AAEA,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAc,WACtB,QAAA,EACH,CAAA;AAEJ;AC3CO,SAAS,MAAA,CAAO;AAAA,EACrB,QAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,OAAA,GAAU,OAAA;AAAA,EACV,KAAA,GAAQ,SAAA;AAAA,EACR,GAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,IAAI,SAAA,GAAY,KAAA;AAAA,EAChB,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAgB;AACd,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,KAAA,EAAO,YAAA;AAAA,IACP,GAAA,EAAK,UAAA;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,eAAA;AAAA,IACT,MAAA,EAAQ,cAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAEA,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,KAAA,EAAO,YAAA;AAAA,IACP,GAAA,EAAK,UAAA;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU,UAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,SAAA;AAAA,IACf,cAAA,EAAgB,WAAW,OAAO,CAAA;AAAA,IAClC,UAAA,EAAY,SAAS,KAAK,CAAA;AAAA,IAC1B,QAAA,EAAU,IAAA;AAAA,IACV,GAAI,GAAA,KAAQ,MAAA,IAAa,EAAE,GAAA,EAAKC,OAAAA,CAAQ,GAAG,CAAA,EAAE;AAAA,IAC7C,GAAG;AAAA,GACL;AAEA,EAAA,uBACED,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAc,WACtB,QAAA,EACH,CAAA;AAEJ;ACpEO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,uBAAOA,GAAAA,CAAC,UAAA,CAAW,IAAA,EAAX,EAAiB,GAAG,KAAA,EAAO,CAAA;AACrC;AAEO,SAAS,sBAAsB,KAAA,EAAmC;AACvE,EAAA,uBAAOA,GAAAA,CAAC,UAAA,CAAW,SAAA,EAAX,EAAsB,GAAG,KAAA,EAAO,CAAA;AAC1C;AAEO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,uBAAOA,GAAAA,CAAC,UAAA,CAAW,IAAA,EAAX,EAAiB,GAAG,KAAA,EAAO,CAAA;AACrC;ACoBO,SAAS,OAAA,CAAQ;AAAA,EACtB,SAAA,GAAY,UAAA;AAAA,EACZ,SAAAC,QAAAA,GAAU,CAAA;AAAA,EACV,KAAA;AAAA,EACA,QAAA;AAAA,EACA,EAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,uBACED,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,SAAA,KAAc,UAAA,GAAa,QAAA,GAAW,KAAA;AAAA,MACjD,GAAA,EAAKC,QAAAA;AAAA,MACL,KAAA;AAAA,MACA,EAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AC3DO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,uBAAOD,GAAAA,CAACE,KAAA,EAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC9B;AAEO,SAAS,eAAe,KAAA,EAAsD;AACnF,EAAA,uBAAOF,GAAAA,CAACE,KAAA,CAAS,OAAA,EAAT,EAAkB,GAAG,KAAA,EAAO,CAAA;AACtC;ACLO,SAAS,MAAM,KAAA,EAAmB;AACvC,EAAA,uBAAOF,GAAAA,CAACG,GAAA,EAAA,EAAQ,GAAG,KAAA,EAAO,CAAA;AAC5B;AAEO,SAAS,MAAM,KAAA,EAAmB;AACvC,EAAA,uBAAOH,GAAAA,CAACI,GAAA,EAAA,EAAQ,GAAG,KAAA,EAAO,CAAA;AAC5B;ACPO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,uBAAOJ,GAAAA,CAACK,OAAA,EAAA,EAAY,GAAG,KAAA,EAAO,CAAA;AAChC;ACFA,IAAM,EAAE,QAAA,EAAAC,SAAAA,EAAS,GAAIC,KAAAA;AAoBd,SAAS,QAAQ,EAAE,OAAA,GAAU,WAAW,QAAA,EAAU,GAAG,OAAM,EAAiB;AACjF,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,SAAAA,EAAS;AAG3B,EAAA,MAAM,SAAA,GAA6D;AAAA,IACjE,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAGA,EAAA,MAAM,QAAA,GAA2C;AAAA,IAC/C,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,MAAM,KAAA,CAAM,SAAA;AAAA,IACZ,SAAS,KAAA,CAAM;AAAA,GACjB;AAEA,EAAA,IAAI,QAAA,EAAU;AAEZ,IAAA,uBACEN,GAAAA;AAAA,MAACQ,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,SAAS,OAAO,CAAA;AAAA,QACvB,IAAA,EAAM,QAAA;AAAA,QACL,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AAGA,EAAA,uBACER,GAAAA;AAAA,IAACQ,KAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,UAAU,OAAO,CAAA;AAAA,MACxB,GAAG;AAAA;AAAA,GACN;AAEJ;;;ACtEA,IAAA,gBAAA,GAAA,EAAA;ACoCO,IAAM,QAAA,GAAiBC,MAAA,CAAA,UAAA;AAAA,EAC5B,SAASC,UAAS,EAAE,OAAA,GAAU,WAAW,SAAA,EAAW,GAAG,IAAA,EAAK,EAAG,GAAA,EAAK;AAClE,IAAA,MAAM,iBAAA,GAAoB,CAAC,gBAAA,CAAO,QAAA,EAAU,SAAS,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAC/E,IAAA,uBACEV,GAAAA;AAAA,MAACW,MAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAM,OAAA;AAAA,QACN,SAAA,EAAW,iBAAA;AAAA,QACV,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;;;AChDA,IAAA,cAAA,GAAA,EAAA;ACcA,IAAM,EAAE,QAAA,EAAAL,SAAAA,EAAS,GAAIC,KAAAA;AAMrB,IAAM,aAAA,GAA2D;AAAA,EAC/D,OAAA,EAAS,EAAE,MAAA,EAAQ,uBAAA,EAAwB;AAAA,EAC3C,OAAA,EAAS,EAAE,MAAA,EAAQ,gBAAA,EAAiB;AAAA,EACpC,OAAA,EAAS,EAAE,MAAA,EAAQ,gBAAA,EAAiB;AAAA,EACpC,KAAA,EAAS,EAAE,MAAA,EAAQ,cAAA,EAAe;AAAA,EAClC,IAAA,EAAS,EAAE,MAAA,EAAQ,aAAA;AACrB,CAAA;AA2CO,SAAS,MAAA,CAAO;AAAA,EACrB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,QAAA,GAAW,IAAA;AAAA,EACX,SAAA,GAAY,KAAA;AAAA,EACZ,OAAA,GAAU,KAAA;AAAA,EACV,MAAA,GAAS,SAAA;AAAA,EACT,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,SAAAA,EAAS;AAC3B,EAAA,MAAM,EAAA,GAAK,cAAc,MAAM,CAAA;AAG/B,EAAA,MAAM,SAAA,GAAa,KAAA,IAAS,QAAA,mBAC1B,IAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,KAAA,KAAU,OAAO,KAAA,KAAU,QAAA,mBACxBN,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,MAAA,EAAO,UAAA,EAAW,EAAA,EAAG,KAAA,EAAO,iBAAM,CAAA,GACpD,KAAA,CAAA;AAAA,IAEH,4BACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,MAAK,KAAA,EAAM,WAAA,EAAY,EAAA,EAAG,KAAA,EAAM,OAAO,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,IACpE,QAAA,EAAA,QAAA,EACH;AAAA,GAAA,EAEJ,CAAA,GACE,MAAA;AAEJ,EAAA,uBACE,IAAA;AAAA,IAACY,IAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAA;AAAA,MACP,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA,EAAS,WAAW,UAAA,GAAa,YAAA;AAAA,MACjC,SAAA,EAAW,KAAA;AAAA,MACX,OAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,SAAA,EAAW;AAAA,QACT,cAAA,CAAO,IAAA;AAAA,QACP,aAAa,cAAA,CAAO,SAAA;AAAA,QACpB,MAAA,KAAW,aAAa,cAAA,CAAO,QAAA;AAAA,QAC/B,IAAA,CAAK;AAAA,OACP,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,QACL,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,QAAA,EAAU,QAAA;AAAA,QACV,iBAAiB,EAAA,CAAG,MAAA;AAAA,QACpB,GAAG,IAAA,CAAK;AAAA,OACV;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QACA,0BACCZ,GAAAA,CAAC,KAAA,EAAA,EAAM,EAAA,EAAI,GAAG,EAAA,EAAI,CAAA,EAAG,KAAA,EAAO,EAAE,WAAW,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA,IACpE,QAAA,EAAA,MAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ;AC1FO,SAAS,KAAA,CAAM;AAAA,EACpB,OAAA,GAAU,SAAA;AAAA,EACV,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAe;AAMb,EAAA,MAAM,QAAA,GAAqD;AAAA,IACzD,OAAA,EAAS,SAAA;AAAA,IACT,OAAA,EAAS,SAAA;AAAA,IACT,KAAA,EAAO,OAAA;AAAA,IACP,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,WAAA,EAAa,OAAA,IAAW,sBAAA,EAAwB,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAE9G,EAAA,uBACEA,GAAAA;AAAA,IAACa,GAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,KAAA,IAAS,QAAA,CAAS,OAAO,CAAA;AAAA,MAChC,QAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW,iBAAA;AAAA,MACX,OAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;ACnEA,IAAM,EAAE,KAAA,EAAO,QAAA,EAAS,GAAIC,UAAAA;AAC5B,IAAM,EAAE,QAAA,EAAAR,SAAAA,EAAS,GAAIC,KAAAA;AA2Bd,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA,GAAQ,CAAA;AAAA,EACR,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAID,SAAAA,EAAS;AAEnC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACES,IAAAA,CAAC,KAAA,EAAA,EAAM,EAAA,EAAI,QAAA,GAAW,IAAI,CAAA,EACxB,QAAA,EAAA;AAAA,sBAAAf,GAAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAc,SAAA,EAAsB,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA,EAAG,GAAG,KAAA,EAAM,EACxE,QAAA,EACH,CAAA;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAM,WAAA;AAAA,UACN,EAAA,EAAG,KAAA;AAAA,UACH,KAAA,EAAO,EAAE,SAAA,EAAWC,OAAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,UAE9B,QAAA,EAAA;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACED,GAAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAc,WAAsB,KAAA,EAAO,EAAE,YAAA,EAAcC,OAAAA,CAAQ,CAAC,CAAA,EAAG,GAAG,KAAA,IACjF,QAAA,EACH,CAAA;AAEJ;;;ACzEA,IAAA,cAAA,GAAA,EAAA;ACwCA,IAAI,aAAA,GAAqC,IAAA;AAElC,SAAS,qBAAqB,QAAA,EAA8B;AACjE,EAAA,aAAA,GAAgB,QAAA;AAClB;AA6BO,SAAS,MAAA,CAAO;AAAA,EACrB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,KAAA,GAAQ,SAAA;AAAA,EACR,IAAA,GAAO,KAAA;AAAA,EACP,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAgB;AAId,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,cAAA,CAAO,MAAA;AAAA,IACP,SAAA;AAAA,IACA,cAAA,CAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACrB,cAAA,CAAO,CAAA,MAAA,EAAS,KAAK,CAAA,CAAE,CAAA;AAAA,IACvB,QAAQ,cAAA,CAAO,IAAA;AAAA,IACf,WAAW,cAAA,CAAO,SAAA;AAAA,IAClB;AAAA,GACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAGX,EAAA,IAAI,WAAA,GAA+B,IAAA;AAEnC,EAAA,MAAM,QAAA,GAAW,IAAA,KAAS,OAAO,IAAA,KAAS,WAAW,IAAA,GAAO,IAAA,CAAA;AAC5D,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,WAAA,GAAc,cAAc,QAAQ,CAAA;AAAA,IACtC,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,MAAA,EAAS,QAAQ,CAAA,kEAAA,CAAoE,CAAA;AAClG,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAA,IAAiBe,MAAA,CAAA,cAAA,CAAe,IAAI,CAAA,EAAG;AACrC,IAAA,WAAA,GAAc,IAAA;AAAA,EAChB;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEhB,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACX,KAAA,EAAO,WAAA;AAAA,MACP,OAAA;AAAA,MACA,IAAA,EAAM,UAAU,QAAA,GAAW,MAAA;AAAA,MAC3B,QAAA,EAAU,UAAU,CAAA,GAAI,MAAA;AAAA,MACxB,SAAA,EACE,OAAA,GACI,CAAC,CAAA,KAAM;AACL,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,OAAA,EAAQ;AAAA,QACV;AAAA,MACF,CAAA,GACA,MAAA;AAAA,MAGL,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AAKO,IAAM,eAAe,CAAC;AAAA,EAC3B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,MAAA;AAAA,EACP,KAAA,GAAQ,SAAA;AAAA,EACR,GAAG;AACL,CAAA,qBACEA,GAAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,IAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA,EAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,YAAY,cAAA,EAAgB,GAAG,MAAM,KAAA,EAAM;AAAA,IACtE,GAAG;AAAA;AACN;ACpJK,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAOA,GAAAA,CAACiB,MAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAC/B;AAEO,SAAS,cAAc,KAAA,EAAqD;AACjF,EAAA,uBAAOjB,GAAAA,CAACiB,MAAA,CAAU,KAAA,EAAV,EAAiB,GAAG,KAAA,EAAO,CAAA;AACrC;ACOO,SAAS,UAAA,GAA4B;AAC1C,EAAA,MAAM,MAAA,GAASV,MAAM,QAAA,EAAS;AAC9B,EAAA,OAAO,MAAA;AACT;;;AC3BA,IAAA,qBAAA,GAAA,EAAA;ACmDO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,KAAA,GAAQ,gCAAA;AAAA,EACR,SAAA,GAAY,8BAAA;AAAA,EACZ,QAAA,GAAW,IAAA;AAAA,EACX,SAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEP,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAC,qBAAA,CAAO,OAAA,EAAS,SAAS,EAAE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AAAA,MAC/D,KAAA,EAAO;AAAA,QACL,mBAAA,EAAqB,KAAA;AAAA,QACrB,mBAAA,EAAqB,KAAA;AAAA,QACrB,qBAAA,EAAuB,SAAA;AAAA,QACvB,oBAAA,EAAsB,QAAA;AAAA,QACtB,GAAG;AAAA,OACL;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;ACnDO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,IAAA,GAAO,SAAS,KAAA,EAAO,KAAA,EAAO,GAAG,IAAA,EAAK,EAAsB;AAChG,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUkB,gBAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAwB;AAC1C,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAK,CAAA,CAAE,KAAK,MAAM;AAC9C,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,IAAI,CAAA;AAAA,IACzC,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACElB,GAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,MAAA;AAAA,MACR,IAAA;AAAA,MACA,sBACEA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,SAAS,eAAA,GAAkB,cAAA;AAAA,UACjC,OAAO,EAAE,KAAA,EAAO,SAAS,SAAA,GAAY,MAAA,EAAW,YAAY,kBAAA;AAAmB;AAAA,OACjF;AAAA,MAEF,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,EAAE,UAAA,EAAY,oBAAA,EAAsB,GAAG,KAAA,EAAM;AAAA,MACnD,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;AC5CA,IAAM,EAAE,QAAA,EAAAM,SAAAA,EAAS,GAAIC,KAAAA;AAyBd,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA,GAAS,SAAA;AAAA,EACT,KAAA,GAAQ,SAAA;AAAA,EACR,KAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,SAAA,GAAY,IAAA;AAAA,EACZ,OAAA,GAAU;AACZ,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,SAAAA,EAAS;AAE3B,EAAA,MAAM,SAAA,GAAoC;AAAA,IACxC,SAAS,KAAA,CAAM,kBAAA;AAAA,IACf,MAAM,KAAA,CAAM,WAAA;AAAA,IACZ,SAAS,KAAA,CAAM,cAAA;AAAA,IACf,SAAS,KAAA,CAAM,cAAA;AAAA,IACf,OAAO,KAAA,CAAM;AAAA,GACf;AAEA,EAAA,MAAM,YAAA,GAAuC;AAAA,IAC3C,SAAS,KAAA,CAAM,kBAAA;AAAA,IACf,MAAM,KAAA,CAAM,SAAA;AAAA,IACZ,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,SAAS,KAAA,CAAM,YAAA;AAAA,IACf,OAAO,KAAA,CAAM;AAAA,GACf;AAEA,EACE,UAAU,IAAA,GAAO,KAAA,CAAM,eACvB,KAAA,KAAU,MAAA,GAAS,KAAA,CAAM,UAAA,GACzB,KAAA,CAAM;AAER,EAAA,MAAM,YAAY,KAAA,KAAU,IAAA,GAAO,QAAA,GAAM,KAAA,KAAU,SAAS,QAAA,GAAM,EAAA;AAElE,EAAA,uBACEN,GAAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAY,OAAA,EAAkB,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAA,EAAO,EAC1D,QAAA,kBAAAe,IAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,IAAA,oBACCf,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO;AAAA,MACV,KAAA,EAAO,EAAA;AAAA,MACP,MAAA,EAAQ,EAAA;AAAA,MACR,cAAc,KAAA,CAAM,cAAA;AAAA,MACpB,eAAA,EAAiB,UAAU,MAAM,CAAA;AAAA,MACjC,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,KAAA,EAAO,aAAa,MAAM,CAAA;AAAA,MAC1B,QAAA,EAAU,EAAA;AAAA,MACV,cAAc,KAAA,CAAM;AAAA,OAEnB,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,oBAGFA,IAAC,MAAA,EAAA,EAAO,IAAA,EAAK,MAAK,KAAA,EAAM,WAAA,EAAY,EAAA,EAAG,KAAA,EACpC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBAEAA,IAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,OAAO,KAAK,CAAA,EAAG,eAAA,EAAiB,GAAA,EAC9C,QAAA,kBAAAe,IAAAA,CAAC,UAAO,KAAA,EAAM,UAAA,EAAW,KAAK,CAAA,EAAG,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,EAAG,QAAA,EAAU,QAAA,EAAS,EACzE,QAAA,EAAA;AAAA,sBAAAf,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,KAAA;AAAA,UACL,MAAA,EAAO,MAAA;AAAA,UACP,EAAA,EAAG,KAAA;AAAA,UACH,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAU,cAAc,UAAA,EAAY,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,CAAA,EAAE;AAAA,UAExF,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,MACC,IAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,MAAA,EAAO,KAAA,EAAM,WAAA,EAAY,KAAA,EAAO,EAAE,UAAA,EAAY,CAAA,IACxD,QAAA,EAAA,IAAA,EACH;AAAA,KAAA,EAEJ,CAAA,EACF,CAAA;AAAA,IAEC,SAAA,IAAa,KAAA,KAAU,MAAA,oBACtBA,GAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAM,QAAA,EAAS,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,EAAE,WAAW,KAAA,CAAM,QAAA,EAAS,EAChE,QAAA,kBAAAe,IAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,IAAS,CAAA,GAAI,KAAA,CAAM,YAAA,GAAe,KAAA,CAAM,YAAW,EAClF,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAU,GAAA;AAAA,MAAE,IAAA,CAAK,IAAI,KAAK,CAAA;AAAA,MAAE;AAAA,KAAA,EAC/B,CAAA,EACF;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AChBO,SAAS,OAAA,CAA6C;AAAA,EAC3D,OAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,OAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA,GAAO,QAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,UAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACEf,GAAAA;AAAA,IAACmB,KAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACnGO,SAAS,cAAA,GAAoC;AAClD,EAAA,OAAO,QAAQ,MAAM;AAInB,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA;AAAA;AAAA,KACF;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,mCAAA,EAAqC,EAAE,MAAA,EAAQ,CAAA;AAI3D,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,GAAG,MAAA;AAAA,MACH,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA,SAAA;AAAA;AAAA,MACA;AAAA;AAAA,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA0B;AAC1C,MAAA,OAAO,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,MAAM,CAAA,IAAK,SAAA;AAAA,IAC1C,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,EAAa,UAAA,KAA+C;AAC7E,MAAA,MAAM,eAAe,KAAA,CAAM,IAAA;AAAA,QACzB,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,IAAA,KAAQ,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,IAAK,EAAE,CAAC,CAAC;AAAA,OAC1D;AACA,MAAA,MAAM,WAAmC,EAAC;AAE1C,MAAA,YAAA,CAAa,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AACrC,QAAA,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA,CAAS,KAAK,CAAA;AAAA,MAClC,CAAC,CAAA;AAED,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAEA,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACP;AAqBO,SAAS,kBAAA,CACd,UACA,UAAA,EACwB;AACxB,EAAA,OAAO,CAAC,KAAA,KAAe;AACrB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,UAAU,KAAK,EAAE,CAAA;AAC5C,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,QAAQ,EAAE,CAAC,CAAA;AACxC,IAAA,OAAO,SAAS,KAAK,CAAA,KAAM,WAAW,QAAA,CAAS,QAAQ,IAAI,SAAA,CAAA,IAAc,SAAA;AAAA,EAC3E,CAAA;AACF;ACzHA,IAAM,EAAE,QAAA,EAAAb,SAAAA,EAAS,GAAIC,KAAAA;AAKrB,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,SAAAA,EAAS;AAE3B,EAAA,OAAa,MAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,UAAA,EAAY;AAAA,QACV,iBAAiB,KAAA,CAAM,gBAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAO,KAAA,CAAM;AAAA;AACf,KACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAwDO,SAAS,YAAY,EAAE,MAAA,EAAQ,iBAAA,EAAmB,GAAG,OAAM,EAAqB;AACrF,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,EAAA,MAAM,aAAA,GAAsB,eAAQ,MAAM;AAExC,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,UAAA,IAAc,KAAA,CAAM,WAAA;AAEhD,IAAA,OAAA,CAAQ,IAAI,2BAAA,EAA6B;AAAA,MACvC,aAAA;AAAA,MACA,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,iBAAA;AAAA,MACA,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM,IAAA;AAAA,MACjB,UAAA,EAAY,MAAM,IAAA,EAAM,MAAA;AAAA,MACxB,YAAA,EAAc,MAAA;AAAA,MACd,eAAe,OAAA,CAAQ;AAAA,KACxB,CAAA;AAED,IAAA,IAAI,iBAAA,IAAqB,CAAC,aAAA,IAAiB,CAAC,MAAM,IAAA,EAAM;AACtD,MAAA,OAAA,CAAQ,IAAI,qCAAA,EAAuC;AAAA,QACjD,iBAAA;AAAA,QACA,aAAA;AAAA,QACA,OAAA,EAAS,CAAC,CAAC,KAAA,CAAM;AAAA,OAClB,CAAA;AACD,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,UAAU,OAAA,CAAQ,MAAA;AAEtC,IAAA,OAAA,CAAQ,IAAI,gCAAA,EAAkC;AAAA,MAC5C,MAAA,EAAQ,SAAS,QAAA,GAAW,SAAA;AAAA,MAC5B,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,GAAG,KAAA,CAAM,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,QAAQ,OAAA,CAAQ,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAErD,EAAA,uBAAON,GAAAA,CAAC,IAAA,EAAA,EAAM,GAAG,aAAA,EAAe,OAAO,UAAA,EAAY,CAAA;AACrD;AC9HA,IAAM,EAAE,QAAA,EAAAM,SAAAA,EAAS,GAAIC,KAAAA;AAKrB,SAASa,cAAAA,GAAgB;AACvB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAId,SAAAA,EAAS;AAE3B,EAAA,OAAae,MAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,QAAA,EAAU;AAAA,QACR,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,UAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAAA,MACA,QAAA,EAAU;AAAA,QACR,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,UAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,WAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM,eAAA;AAAA,QACN,KAAA,CAAM,kBAAA;AAAA,QACN,KAAA,CAAM,kBAAA;AAAA,QACN,KAAA,CAAM,gBAAA;AAAA,QACN,KAAA,CAAM,kBAAA;AAAA,QACN,KAAA,CAAM,aAAA;AAAA,QACN,KAAA,CAAM,gBAAA;AAAA,QACN,KAAA,CAAM,gBAAA;AAAA,QACN,KAAA,CAAM,cAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR;AAAA,MACA,UAAA,EAAY;AAAA,QACV,iBAAiB,KAAA,CAAM,gBAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAO,KAAA,CAAM;AAAA;AACf,KACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAyBO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,GAAG,OAAM,EAAuB;AACtE,EAAA,MAAM,aAAaD,cAAAA,EAAc;AAGjC,EAAA,MAAM,cAAc,MAAA,GAChB;AAAA,IACE,GAAG,UAAA;AAAA,IACH,QAAA,EAAU,MAAA;AAAA,IACV,QAAA,EAAU;AAAA,GACZ,GACA,UAAA;AAEJ,EAAA,uBAAOpB,GAAAA,CAAC,MAAA,EAAA,EAAQ,GAAG,KAAA,EAAO,OAAO,WAAA,EAAa,CAAA;AAChD;AC3FA,IAAM,EAAE,QAAA,EAAAM,SAAAA,EAAS,GAAIC,KAAAA;AAKrB,SAASa,cAAAA,GAAgB;AACvB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAId,SAAAA,EAAS;AAE3B,EAAA,OAAagB,MAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,UAAA,EAAY;AAAA,QACV,iBAAiB,KAAA,CAAM,gBAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAO,KAAA,CAAM;AAAA;AACf,KACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAuDO,SAAS,YAAY,EAAE,MAAA,EAAQ,iBAAA,EAAmB,GAAG,OAAM,EAAqB;AACrF,EAAA,MAAM,aAAaF,cAAAA,EAAc;AACjC,EAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,EAAA,MAAM,aAAA,GAAsBE,eAAQ,MAAM;AACxC,IAAA,IAAI,qBAAqB,CAAC,KAAA,CAAM,UAAA,IAAc,CAAC,MAAM,IAAA,EAAM;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,UAAU,OAAA,CAAQ,MAAA;AAEtC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,GAAG,KAAA,CAAM,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,QAAQ,OAAA,CAAQ,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAErD,EAAA,uBAAOtB,GAAAA,CAAC,IAAA,EAAA,EAAM,GAAG,aAAA,EAAe,OAAO,UAAA,EAAY,CAAA;AACrD;ACpGA,IAAM,EAAE,QAAA,EAAAM,SAAAA,EAAS,GAAIC,KAAAA;AAKrB,SAASa,cAAAA,GAAgB;AACvB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAId,SAAAA,EAAS;AAE3B,EAAA,OAAaiB,MAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,UAAA,EAAY;AAAA,QACV,iBAAiB,KAAA,CAAM,gBAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAO,KAAA,CAAM;AAAA;AACf,KACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAyCO,SAAS,WAAW,EAAE,MAAA,EAAQ,iBAAA,EAAmB,GAAG,OAAM,EAAoB;AACnF,EAAA,MAAM,aAAaH,cAAAA,EAAc;AACjC,EAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,EAAA,MAAM,aAAA,GAAsBG,eAAQ,MAAM;AACxC,IAAA,IAAI,qBAAqB,CAAC,KAAA,CAAM,UAAA,IAAc,CAAC,MAAM,IAAA,EAAM;AACzD,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,UAAU,OAAA,CAAQ,MAAA;AAEtC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,GAAG,KAAA,CAAM,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,QAAQ,OAAA,CAAQ,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAErD,EAAA,uBAAOvB,GAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,aAAA,EAAe,OAAO,UAAA,EAAY,CAAA;AACpD;ACtFA,IAAM,EAAE,QAAA,EAAAM,UAAAA,EAAS,GAAIC,KAAAA;AAKrB,SAASa,cAAAA,GAAgB;AACvB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAId,UAAAA,EAAS;AAE3B,EAAA,OAAakB,MAAA,CAAA,OAAA;AAAA,IACX,OAAO;AAAA,MACL,cAAc,KAAA,CAAM,YAAA;AAAA,MACpB,UAAA,EAAY;AAAA,QACV,iBAAiB,KAAA,CAAM,gBAAA;AAAA,QACvB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,OAAO,KAAA,CAAM;AAAA;AACf,KACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AACF;AAyCO,SAAS,WAAW,EAAE,MAAA,EAAQ,iBAAA,EAAmB,GAAG,OAAM,EAAoB;AACnF,EAAA,MAAM,aAAaJ,cAAAA,EAAc;AACjC,EAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,EAAA,MAAM,aAAA,GAAsBI,eAAQ,MAAM;AACxC,IAAA,IAAI,qBAAqB,CAAC,KAAA,CAAM,WAAA,IAAe,CAAC,MAAM,IAAA,EAAM;AAC1D,MAAA,OAAO,KAAA;AAAA,IACT;AAGA,IAAA,MAAM,WAAA,GAAc,UAAU,OAAA,CAAQ,MAAA;AAEtC,IAAA,OAAO;AAAA,MACL,GAAG,KAAA;AAAA,MACH,KAAA,EAAO;AAAA,QACL,GAAG,KAAA,CAAM,KAAA;AAAA,QACT,KAAA,EAAO;AAAA,UACL,KAAA,EAAO;AAAA;AACT;AACF,KACF;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,QAAQ,OAAA,CAAQ,MAAA,EAAQ,iBAAiB,CAAC,CAAA;AAErD,EAAA,uBAAOxB,GAAAA,CAAC,GAAA,EAAA,EAAK,GAAG,aAAA,EAAe,OAAO,UAAA,EAAY,CAAA;AACpD;AC0CO,SAAS,iBAAA,CAAkB;AAAA,EAChC,IAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,KAAA;AAAA,EACA,UAAU,EAAC;AAAA,EACX,MAAA,GAAS,MAAA;AAAA,EACT,MAAA,GAAS,OAAA;AAAA,EACT,UAAA,GAAa,UAAA;AAAA,EACb,KAAA;AAAA,EACA,MAAA,GAAS,GAAA;AAAA,EACT,UAAA,GAAa,IAAA;AAAA,EACb;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,UAAU,cAAA,EAAe;AAG/B,EAAA,MAAM,WAAA,GAAoByB,MAAA,CAAA,OAAA;AAAA,IACxB,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,KAAK,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAC,CAAA;AAAA,IACzD,CAAC,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,MAAM;AAAA,GACjC;AAGA,EAAA,MAAM,SAAA,GAAkBA,eAAQ,MAAM;AACpC,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,OAAO,EAAC;AAAA,IACV;AAGA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC5B,MAAA,MAAM,OAAsC,EAAC;AAE7C,MAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,QAAA,IAAI,KAAA;AAGJ,QAAA,IAAI,MAAA,CAAO,OAAO,IAAA,IAAQ,OAAO,KAAK,MAAA,CAAO,GAAG,MAAM,QAAA,EAAU;AAE9D,UAAA,KAAA,GAAQ,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,QACzB,WAAW,IAAA,CAAK,OAAA,IAAW,MAAA,CAAO,GAAA,IAAO,KAAK,OAAA,EAAS;AAErD,UAAA,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,QACjC,CAAA,MAAO;AAEL,UAAA,KAAA,GAAQ,CAAA;AAAA,QACV;AAGA,QAAA,IAAI,OAAO,SAAA,EAAW;AACpB,UAAA,KAAA,GAAQ,MAAA,CAAO,UAAU,KAAK,CAAA;AAAA,QAChC;AAEA,QAAA,IAAA,CAAK,IAAA,CAAK;AAAA,UACR,CAAC,MAAM,GAAG,IAAA,CAAK,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAE,MAAA,CAAO,YAAY,CAAA,GAAI,KAAK,MAAM,CAAA;AAAA,UACzE,CAAC,UAAU,GAAG,MAAA,CAAO,KAAA;AAAA,UACrB,CAAC,MAAM,GAAG;AAAA,SACX,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,GAAG,CAAC,IAAA,EAAM,SAAS,MAAA,EAAQ,MAAA,EAAQ,UAAU,CAAC,CAAA;AAG9C,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,CAAC,UAAA,IAAc,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG;AACvC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,uBACEzB,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,cAAA,EAAgB,UAAA,EAAY,YAAA,EAAc,EAAA,EAAI,GAAA,EAAK,IAAG,EAClF,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAA,qBACpBe,IAAAA,CAAC,KAAA,EAAA,EAAuB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,GAAE,EAC7E,QAAA,EAAA;AAAA,sBAAAf,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,cAAA;AAAA,YACT,KAAA,EAAO,EAAA;AAAA,YACP,MAAA,EAAQ,EAAA;AAAA,YACR,YAAA,EAAc,KAAA;AAAA,YACd,eAAA,EAAiB,WAAA,CAAY,KAAA,GAAQ,WAAA,CAAY,MAAM;AAAA;AACzD;AAAA,OACF;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAI,UAAA,EAAY,GAAA,EAAI,EAAI,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA,KAAA,EAAA,EAVtD,MAAA,CAAO,KAWjB,CACD,CAAA,EACH,CAAA;AAAA,EAEJ,CAAA;AAGA,EAAA,MAAM,aAAA,GAAgB,sBACpBe,IAAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,OAAA,oBACCf,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,WAAW,QAAA,EAAU,OAAA,EAAS,QAAA,EAAS,EACnD,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAM,WAAA,EAAY,mCAAqB,CAAA,EACjD,CAAA;AAAA,IAGD,CAAC,YAAY,CAAC,SAAA,IAAa,UAAU,MAAA,KAAW,CAAA,CAAA,oBAC/CA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,QAAA,EAAS,EACnD,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAO,KAAA,EAAM,WAAA,EAAY,QAAA,EAAA,+CAAA,EAA6C,CAAA,EACzE,CAAA;AAAA,IAGD,CAAC,WAAW,SAAA,IAAa,SAAA,CAAU,SAAS,CAAA,oBAC7Ce,KAAC,KAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,YAAA,EAAa;AAAA,sBAIdf,GAAAA;AAAA,QAAC,WAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,SAAA;AAAA,UACN,MAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAO;AAAA,YACL,KAAA,EAAO;AAAA,cACL,KAAA,EAAO;AAAA;AACT,WACF;AAAA,UACA,IAAA,EAAM;AAAA,YACJ,CAAA,EAAG;AAAA,cACD,KAAA,EAAO;AAAA,gBACL,UAAA,EAAY;AAAA;AACd,aACF;AAAA,YACA,CAAA,EAAG;AAAA,cACD,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW,CAAC,CAAA,KAAc;AACxB,kBAAA,MAAM,GAAA,GAAM,OAAO,CAAC,CAAA;AACpB,kBAAA,IAAI,OAAO,GAAA,EAAS;AAClB,oBAAA,OAAO,CAAA,EAAA,CAAI,GAAA,GAAM,GAAA,EAAS,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,kBACtC;AACA,kBAAA,IAAI,OAAO,GAAA,EAAM;AACf,oBAAA,OAAO,CAAA,EAAA,CAAI,GAAA,GAAM,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,kBACnC;AACA,kBAAA,OAAO,IAAI,cAAA,EAAe;AAAA,gBAC5B;AAAA;AACF;AACF,WACF;AAAA,UACA,KAAA,EAAO;AAAA,YACL,KAAA,EAAO,QAAA;AAAA,YACP,SAAA,EAAW;AAAA,WACb;AAAA,UACA,MAAA,EAAQ,KAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,KAAA,EAAO,CAAC,CAAA,KAAW,CAAA,CAAE,MAAM,CAAA;AAAA,YAC3B,KAAA,EAAO;AAAA,cACL,CAAC,CAAA,KAAW;AACV,gBAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5D,gBAAA,MAAM,WAAA,GAAc,QAAQ,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,CAAA,CAAE,UAAU,CAAC,CAAA;AACtE,gBAAA,IAAI,cAAA,GAAiB,CAAA,CAAE,MAAM,CAAA,EAAG,gBAAe,IAAK,GAAA;AAEpD,gBAAA,IAAI,MAAA,EAAQ,MAAA,IAAU,CAAA,CAAE,MAAM,KAAK,IAAA,EAAM;AACvC,kBAAA,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,gBAC1C;AAEA,gBAAA,OAAO;AAAA,kBACL,IAAA,EAAM,EAAE,UAAU,CAAA;AAAA,kBAClB,KAAA,EAAO,cAAA;AAAA,kBACP,KAAA,EAAO,WAAA,CAAY,WAAA,IAAe,CAAA,GAAI,cAAc,CAAC;AAAA,iBACvD;AAAA,cACF;AAAA;AACF,WACF;AAAA,UACC,GAAG;AAAA;AAAA;AACN,KAAA,EACF;AAAA,GAAA,EAEF,CAAA;AAIF,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEA,GAAAA,CAAC0B,IAAAA,EAAA,EAAK,KAAA,EAAc,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,EAAI,GAAG,KAAA,EAAM,EAClD,yBAAc,EACjB,CAAA;AAAA,EAEJ;AAGA,EAAA,uBAAO1B,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAe,yBAAc,EAAE,CAAA;AAC7C;ACzTO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,uBAAOA,GAAAA,CAAC2B,SAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEO,SAAS,qBAAqB,KAAA,EAA4D;AAC/F,EAAA,uBAAO3B,GAAAA,CAAC2B,SAAA,CAAa,SAAA,EAAb,EAAwB,GAAG,KAAA,EAAO,CAAA;AAC5C;ACNO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,uBAAO3B,GAAAA,CAAC4B,QAAA,EAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACjC;ACFO,SAAS,eAAe,KAAA,EAA4B;AACzD,EAAA,uBAAO5B,GAAAA,CAAC6B,YAAA,EAAA,EAAiB,GAAG,KAAA,EAAO,CAAA;AACrC;AAEO,SAAS,mBAAmB,KAAA,EAA0D;AAC3F,EAAA,uBAAO7B,GAAAA,CAAC6B,YAAA,CAAgB,IAAA,EAAhB,EAAsB,GAAG,KAAA,EAAO,CAAA;AAC1C;ACNO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,uBAAO7B,GAAAA,CAAC8B,QAAA,EAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACjC;AAEO,SAAS,eAAe,KAAA,EAAsD;AACnF,EAAA,uBAAO9B,GAAAA,CAAC8B,QAAA,CAAY,IAAA,EAAZ,EAAkB,GAAG,KAAA,EAAO,CAAA;AACtC;ACNO,SAAS,OAAO,KAAA,EAAoB;AACzC,EAAA,uBAAO9B,GAAAA,CAAC+B,IAAA,EAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC7B;AAEO,SAAS,oBAAoB,KAAA,EAA2D;AAC7F,EAAA,uBAAO/B,GAAAA,CAAC+B,IAAA,CAAQ,aAAA,EAAR,EAAuB,GAAG,KAAA,EAAO,CAAA;AAC3C;AAEO,SAAS,WAAW,KAAA,EAAsD;AAC/E,EAAA,uBAAO/B,GAAAA,CAAC+B,IAAA,CAAQ,QAAA,EAAR,EAAkB,GAAG,KAAA,EAAO,CAAA;AACtC;ACVO,SAAS,OAAU,KAAA,EAAuB;AAC/C,EAAA,uBAAO/B,GAAAA,CAACgC,IAAA,EAAA,EAAY,GAAG,KAAA,EAAO,CAAA;AAChC;AAEO,SAAS,WAAW,KAAA,EAAkD;AAC3E,EAAA,uBAAOhC,GAAAA,CAACgC,IAAA,CAAQ,IAAA,EAAR,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEO,SAAS,eAAe,KAAA,EAAuD;AACpF,EAAA,uBAAOhC,GAAAA,CAACgC,IAAA,CAAQ,KAAK,IAAA,EAAb,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;ACyBO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAiB;AACf,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAA2C;AAC/D,IAAA,QAAA,GAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,EAC3B,CAAA;AAEA,EAAA,uBACEhC,GAAAA;AAAA,IAACiC,KAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,YAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAKO,SAAS,gBAAgB,KAAA,EAAuD;AACrF,EAAA,uBAAOjC,GAAAA,CAACiC,KAAA,CAAS,QAAA,EAAT,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;AAKO,SAAS,gBAAgB,KAAA,EAAuD;AACrF,EAAA,uBAAOjC,GAAAA,CAACiC,KAAA,CAAS,QAAA,EAAT,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;AAKO,SAAS,cAAc,KAAA,EAAqD;AACjF,EAAA,uBAAOjC,GAAAA,CAACiC,KAAA,CAAS,MAAA,EAAT,EAAiB,GAAG,KAAA,EAAO,CAAA;AACrC;AChCO,SAAS,QAAA,CAAS;AAAA,EACvB,UAAU,EAAC;AAAA,EACX,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAEhB,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,IAC/C,OAAO,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,WAAA,mBACrBlB,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAM,QAAA,EAAS,KAAK,CAAA,EAAG,KAAA,EAAO,EAAE,KAAA,EAAO,QAAO,EACnD,QAAA,EAAA;AAAA,MAAA,GAAA,CAAI,IAAA,oBAAQf,GAAAA,CAAC,MAAA,EAAA,EAAM,cAAI,IAAA,EAAK,CAAA;AAAA,sBAC7BA,IAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,EAAE,EAAI,QAAA,EAAA,GAAA,CAAI,KAAA,EAAM,CAAA;AAAA,MACpC,GAAA,CAAI,WAAA,oBACHA,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,GAAA,EAAI,EAC7C,cAAI,WAAA,EACP;AAAA,KAAA,EAEJ,IACE,GAAA,CAAI,KAAA;AAAA,IACR,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,UAAU,GAAA,CAAI;AAAA,GAChB,CAAE,CAAA;AAEF,EAAA,uBACEA,GAAAA;AAAA,IAACkC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,kBAAA;AAAA,MACT,KAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACzEO,SAAS,MAAA,CAAO;AAAA,EACrB,MAAA,GAAS,UAAA;AAAA,EACT,QAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,uBACElC,GAAAA;AAAA,IAACmC,IAAA;AAAA,IAAA;AAAA,MACC,MAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAmBO,SAAS,WAAW,KAAA,EAAyB;AAClD,EAAA,uBAAOnC,GAAAA,CAACmC,IAAA,CAAQ,IAAA,EAAR,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAKO,IAAM,YAAYA,IAAA,CAAQ;AAK1B,SAAS,WAAW,KAAA,EAAkD;AAC3E,EAAA,uBAAOnC,GAAAA,CAACmC,IAAA,CAAQ,IAAA,EAAR,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AC3BO,SAAS,UAAA,CAAW;AAAA,EACzB,QAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAoB;AAClB,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAW;AAC/B,IAAA,QAAA,GAAW,CAAA,CAAE,OAAO,OAAO,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,uBACEnC,GAAAA;AAAA,IAACoC,QAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACT,GAAG,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAiBO,SAAS,eAAA,CAAgB;AAAA,EAC9B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAA,GAAM,CAAA;AAAA,EACN;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEpC,GAAAA,CAACoC,QAAA,CAAY,KAAA,EAAZ,EAAkB,KAAA,EAAc,YAAA,EAA4B,QAAA,EAAoB,QAAA,EAC/E,QAAA,kBAAApC,GAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,OAAA,CAAQ,IAAI,CAAC,MAAA,EAAQ,KAAA,qBACpBe,IAAAA,CAAC,KAAA,EAAA,EAAyB,EAAA,EAAI,KAAA,GAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,CAAA,EAC/D,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAACoC,YAAY,KAAA,EAAO,MAAA,CAAO,OAAO,QAAA,EAAU,MAAA,CAAO,QAAA,EAChD,QAAA,EAAA,MAAA,CAAO,KAAA,EACV,CAAA;AAAA,IACC,MAAA,CAAO,+BACNpC,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,IAAA;AAAA,QACL,KAAA,EAAM,WAAA;AAAA,QACN,EAAA,EAAG,KAAA;AAAA,QACH,KAAA,EAAO,EAAE,UAAA,EAAYC,OAAAA,CAAQ,CAAC,CAAA,EAAG,SAAA,EAAWA,OAAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,QAEtD,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,GAAA,EAAA,EAZQ,MAAA,CAAO,KAcnB,CACD,CAAA,EACH,CAAA,EACF,CAAA;AAEJ;ACtFO,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA,GAAO,SAAA;AAAA,EACP,KAAA;AAAA,EACA,aAAA,GAAgB,OAAA;AAAA,EAChB,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,gCACJD,GAAAA;AAAA,IAACqC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,cAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAGF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,aAAA;AAAA,EACT;AAEA,EAAA,uBACEtB,IAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAM,QAAA,EAAS,KAAK,CAAA,EACzB,QAAA,EAAA;AAAA,IAAA,aAAA,KAAkB,MAAA,oBAAUf,GAAAA,CAAC,MAAA,EAAA,EAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAC3C,aAAA;AAAA,IACA,aAAA,KAAkB,OAAA,oBAAWA,GAAAA,CAAC,UAAQ,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC/C,CAAA;AAEJ;AC/BO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACEA,GAAAA;AAAA,IAACsC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAWO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAsB;AACpB,EAAA,uBACEtC,GAAAA;AAAA,IAACuC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAKO,SAAS,cAAc,KAAA,EAA+D;AAC3F,EAAA,uBAAOvC,GAAAA,CAACsC,UAAA,CAAc,WAAA,EAAd,EAA2B,GAAG,KAAA,EAAO,CAAA;AAC/C;ACjHO,SAAS,cAAc,KAAA,EAA2B;AACvD,EAAA,uBAAOtC,GAAAA,CAACwC,WAAA,EAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpC;ACDO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,uBAAOxC,GAAAA,CAACyC,KAAA,EAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC9B;AAEO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,uBAAOzC,GAAAA,CAACyC,KAAA,CAAS,KAAA,EAAT,EAAgB,GAAG,KAAA,EAAO,CAAA;AACpC;ACPO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAOzC,GAAAA,CAAC0C,MAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAC/B;AAEO,SAAS,gBAAgB,KAAA,EAAuD;AACrF,EAAA,uBAAO1C,GAAAA,CAAC0C,MAAA,CAAU,OAAA,EAAV,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;ACNO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAO1C,GAAAA,CAAC2C,MAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAC/B;ACuCO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,eAAA,GAAkB,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IAC3C,KAAA,EAAO,IAAA,CAAK,IAAA,mBACV5B,KAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,OAAM,EAC9D,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,IAAA;AAAA,sBACNf,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,KAAA,EACpB,IACE,IAAA,CAAK,KAAA;AAAA,IACT,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,SAAS,IAAA,CAAK;AAAA,GAChB,CAAE,CAAA;AAEF,EAAA,uBACEA,GAAAA;AAAA,IAAC4C,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,eAAA;AAAA,MACP,SAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AChBA,SAAS,WAAA,CAAY;AAAA,EACnB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,EAAW,mBAAA;AAAA,EACX,gBAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,GAAO,MAAA;AAAA,EACP,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAA,EAAgB;AACxD,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,SAAS,SAAA,EAA4B;AAE3C,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,CAAC,CAAA,EAAG,GAAA,IAAO,EAAA;AAEpC,EAAA,IAAI,SAAA,GAAgC,mBAAA;AAEpC,EAAA,MAAM,QAAA,GAAW,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,QAAA;AACjD,EAAA,MAAM,SAAS,OAAA,IAAW,OAAO,OAAA,KAAY,QAAA,IAAY,QAAQ,IAAA,KAAS,MAAA;AAE1E,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,SAAA,GAAY,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA,IAAK,UAAA;AAAA,EACzC,WAAW,MAAA,EAAQ;AACjB,IAAA,SAAA,GAAY,OAAO,GAAA,IAAO,UAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAgB;AACpC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,eAAA,CAAgB,QAAQ,UAAA,GAAa,KAAK,EAAE,GAAA,EAAK,KAAK,CAAA;AAAA,IACxD,CAAA,MAAA,IAAW,MAAA,IAAU,OAAO,OAAA,KAAY,QAAA,EAAU;AAChD,MAAA,MAAM,IAAA,GAAO,QAAQ,UAAA,GAAa,OAAA,CAAQ,WAAW,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAC/E,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AACA,IAAA,QAAA,GAAW,GAAG,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IACpC,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,KAAA,EAAO,IAAA,CAAK,IAAA,mBACV7B,KAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,OAAM,EAC9D,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,IAAA;AAAA,sBACNf,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM;AAAA,KAAA,EACpB,IACE,IAAA,CAAK,KAAA;AAAA,IACT,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAU,IAAA,CAAK;AAAA,GACjB,CAAE,CAAA;AAEF,EAAA,MAAM,UAAA,GAAa,MAAA,GACf,CAAC,SAAA,EAA4D,MAAA,KAA6B;AACxF,IAAA,MAAM,GAAA,GAAM,OAAO,SAAA,KAAc,QAAA,GAAW,SAAA,GAAY,EAAA;AACxD,IAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,EACpB,CAAA,GACA,MAAA;AAEJ,EAAA,uBACEA,GAAAA;AAAA,IAAC6C,IAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,QAAA;AAAA,MACP,SAAA;AAAA,MACA,gBAAA,EAAkB,UAAU,MAAA,GAAY,gBAAA;AAAA,MACxC,WAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AAEO,SAAS,OAAO,KAAA,EAAoB;AACzC,EAAA,uBAAO7C,GAAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACjC;ACjDO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,QAAA,GAAW,IAAA;AAAA,EACX,KAAA,GAAQ,KAAA;AAAA,EACR,IAAA,GAAO,QAAA;AAAA,EACP,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,IACzC,KAAK,IAAA,CAAK,GAAA;AAAA,IACV,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,OAAO,IAAA,CAAK,KAAA;AAAA,IACZ,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,aAAa,IAAA,CAAK;AAAA,GACpB,CAAE,CAAA;AAEF,EAAA,uBACEA,GAAAA;AAAA,IAAC8C,QAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,aAAA;AAAA,MACP,SAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;AChHO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,uBAAO9C,GAAAA,CAAC+C,QAAA,EAAA,EAAa,GAAG,KAAA,EAAO,CAAA;AACjC;AAEO,SAAS,iBAAiB,KAAA,EAAwD;AACvF,EAAA,uBAAO/C,GAAAA,CAAC+C,QAAA,CAAY,MAAA,EAAZ,EAAoB,GAAG,KAAA,EAAO,CAAA;AACxC;ACNO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,uBAAO/C,GAAAA,CAACgD,SAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;ACFO,SAAS,QAAQ,KAAA,EAAqB;AAC3C,EAAA,uBAAOhD,GAAAA,CAACiD,KAAA,EAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAC9B;ACFO,SAAS,OAAO,KAAA,EAAoB;AACzC,EAAA,uBAAOjD,GAAAA,CAACkD,IAAA,EAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC7B;ACFA,IAAM,EAAE,QAAA,EAAA5C,UAAAA,EAAS,GAAIC,KAAAA;AAwCd,SAAS,MAAA,CAAO;AAAA,EACrB,QAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,OAAA,GAAU,SAAA;AAAA,EACV,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAgB;AACd,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAE3B,EAAA,MAAM,WAAA,GAA2C;AAAA,IAC/C,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,MAAM,aAAa,OAAA,KAAY,UAAA;AAE/B,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,QAAA,EAAU,YAAY,KAAK,CAAA;AAAA,IAC3B,MAAA,EAAQ,QAAA;AAAA,IACR,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,GAAI,UAAA,IAAc;AAAA,MAChB,iBAAiB,KAAA,CAAM,gBAAA;AAAA,MACvB,cAAc,KAAA,CAAM,cAAA;AAAA,MACpB,WAAW,KAAA,CAAM;AAAA,KACnB;AAAA,IACA,SAAA,EAAW,aAAa,MAAA,GAAY,MAAA;AAAA,IACpC,GAAG;AAAA,GACL;AAEA,EAAA,uBACEN,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAG,MAAA,EAAO,SAAA,EAAsB,OACpC,QAAA,EACH,CAAA;AAEJ;ACvEA,IAAM,EAAE,QAAA,EAAAM,UAAAA,EAAS,GAAIC,KAAAA;AAkCd,SAAS,QAAA,CAAS;AAAA,EACvB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAkB;AAChB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAE3B,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,YAAA,EAAc,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IAC5C,aAAA,EAAeL,QAAQ,CAAC,CAAA;AAAA,IACxB,YAAA,EAAcA,QAAQ,CAAC,CAAA;AAAA,IACvB,GAAG;AAAA,GACL;AAEA,EAAA,uBACEc,IAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAsB,KAAA,EAC1B,QAAA,EAAA;AAAA,IAAA,UAAA,oBACCf,GAAAA,CAAC,KAAA,EAAA,EAAM,EAAA,EAAI,GACR,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,oBAGFe,KAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,KAAA,EAAM,OAAA,EAAQ,KAAK,CAAA,EAC3C,QAAA,EAAA;AAAA,sBAAAA,KAAC,KAAA,EAAA,EAAM,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EACtB,QAAA,EAAA;AAAA,wBAAAf,GAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,EAAE,YAAA,EAAc,QAAA,GAAWC,OAAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,IAC/D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QACC,QAAA,oBACCD,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,MAAA,EAAO,KAAA,EAAM,aACvB,QAAA,EAAA,QAAA,EACH;AAAA,OAAA,EAEJ,CAAA;AAAA,MAEC,OAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAM,OAAO,EAAE,UAAA,EAAY,CAAA,EAAE,EAC3B,QAAA,EAAA,OAAA,EACH;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AC/EA,IAAM,EAAE,QAAA,EAAAM,UAAAA,EAAS,GAAIC,KAAAA;AA6Cd,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAE3B,EAAA,MAAM,OAAA,GAAU,CAAC,CAAC,IAAA;AAElB,EAAA,uBACES,KAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,OAAA,GAAU,CAAA,GAAI,EAAA,EAAG,EAEzC,QAAA,EAAA;AAAA,IAAA,CAAA,MAAA,IAAW,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,qBAC/CA,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,QAAA;AAAA,UACZ,KAAK,KAAA,CAAM,QAAA;AAAA,UACX,cAAc,KAAA,CAAM;AAAA,SACtB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,MAAA,oBACCf,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,MAAA;AAAA,cACR,IAAA,EAAK,OAAA;AAAA,cACL,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,mBAAA,EAAoB,CAAA;AAAA,cACvC,OAAA,EAAS,MAAA;AAAA,cACT,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA;AAAQ;AAAA,WAC5B;AAAA,UAED,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,oBACnCA,GAAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAO,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,gBAChC,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,GAAI,KAAK,IAAA,GAAO,EAAE,MAAM,IAAA,CAAK,IAAA,KAAS;AAAC,eACzC,CAAE;AAAA;AAAA;AACJ;AAAA;AAAA,KAEJ;AAAA,oBAIFe,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,YAAA;AAAA,UACZ,cAAA,EAAgB,eAAA;AAAA,UAChB,KAAK,KAAA,CAAM;AAAA,SACb;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,QAAA,EAAU,QAAA,EAAU,GAAE,EACnF,QAAA,EAAA;AAAA,YAAA,IAAA,oBACCf,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,QAAA,EAAU,EAAA;AAAA,kBACV,OAAO,KAAA,CAAM,YAAA;AAAA,kBACb,UAAA,EAAY,CAAA;AAAA,kBACZ,OAAA,EAAS,MAAA;AAAA,kBACT,UAAA,EAAY;AAAA,iBACd;AAAA,gBAEC,QAAA,EAAA;AAAA;AAAA,aACH;AAAA,4BAEFe,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,QAAA,EAAU,GAAE,EACvB,QAAA,EAAA;AAAA,cAAA,OAAO,KAAA,KAAU,2BAChBf,GAAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO;AAAA,oBACL,MAAA,EAAQ,CAAA;AAAA,oBACR,UAAA,EAAY,qBAAA;AAAA,oBACZ,UAAU,KAAA,CAAM,gBAAA;AAAA,oBAChB,UAAA,EAAY,GAAA;AAAA,oBACZ,aAAA,EAAe,SAAA;AAAA,oBACf,OAAO,KAAA,CAAM,gBAAA;AAAA,oBACb,UAAA,EAAY;AAAA,mBACd;AAAA,kBAEC,QAAA,EAAA;AAAA;AAAA,eACH,GAEA,KAAA;AAAA,cAED,WAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,GAAE,EACxB,QAAA,EAAA,OAAO,gBAAgB,QAAA,mBACtBA,IAAC,MAAA,EAAA,EAAO,KAAA,EAAM,aAAY,IAAA,EAAK,IAAA,EAC5B,QAAA,EAAA,WAAA,EACH,CAAA,GAEA,WAAA,EAEJ;AAAA,aAAA,EAEJ;AAAA,WAAA,EACF,CAAA;AAAA,UAEC,2BACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,KAAK,KAAA,CAAM,QAAA,EAAU,UAAA,EAAY,CAAA,IACnF,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,KAEJ;AAAA,IAGC,QAAA,oBAAYA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,KAAA,CAAM,QAAA,EAAS,EAAI,QAAA,EAAS,CAAA;AAAA,IAGjE,OAAA,oBACCe,IAAAA,CAAAoC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAnD,IAAC,SAAA,EAAA,EAAU,KAAA,EAAO,EAAE,YAAA,EAAc,GAAE,EAAG,CAAA;AAAA,MACtC;AAAA,KAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACrKO,SAAS,aAAA,CAAc,EAAE,QAAA,EAAU,GAAA,GAAM,IAAI,KAAA,EAAO,GAAG,MAAK,EAAuB;AACxF,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,YAAA,EAAc,GAAA,EAAK,GAAG,KAAA,EAAM,EAAI,GAAG,IAAA,EAC9C,QAAA,EACH,CAAA;AAEJ;ACuCO,SAAS,OAAA,CAAQ;AAAA,EACtB,OAAA,GAAU,MAAA;AAAA,EACV,KAAA;AAAA,EACA,OAAA,EAAAoD,QAAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,uBACEpD,GAAAA;AAAA,IAACqD,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,OAAA;AAAA,MACN,SAAS,KAAA,IAASD,QAAAA;AAAA,MAClB,WAAA,EAAa,KAAA,GAAQ,WAAA,IAAeA,QAAAA,GAAU,WAAA;AAAA,MAC9C,QAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACzEA,IAAM,EAAE,QAAA,EAAA9C,UAAAA,EAAS,GAAIC,KAAAA;AA2Cd,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAE3B,EAAA,MAAM,UAAU,QAAA,IAAY,MAAA;AAE5B,EAAA,IAAI,eAAA,IAAmB,UAAU,MAAA,EAAW;AAC1C,IAAA,uBACEN,GAAAA;AAAA,MAACsD,KAAA;AAAA,MAAA;AAAA,QACC,WAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAA;AAAA,QACA,KAAA,EAAO,WAAA;AAAA,QAEN,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,OAAA,EAASrD,QAAQ,CAAC,CAAA;AAAA,IAClB,SAAA,EAAW,QAAA;AAAA,IACX,GAAG;AAAA,GACL;AAEA,EAAA,uBACED,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAsB,KAAA,EAC3B,QAAA,kBAAAe,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAAS,KAAA,EAAM,QAAA,EAAS,KAAK,CAAA,EAC5C,QAAA,EAAA;AAAA,IAAA,IAAA,oBACCf,GAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,KAAA,CAAM,kBAAA,EAAmB,EAC/D,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,IAGD,KAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,IAAA,EAAK,MAAA,EAAO,YACtB,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,IAGD,WAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,MAAA,EAAO,KAAA,EAAM,aACvB,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,IAGD,2BAAWA,GAAAA,CAAC,KAAA,EAAA,EAAM,EAAA,EAAI,GAAI,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACrC,CAAA,EACF,CAAA;AAEJ;AAEA,YAAA,CAAa,yBAAyBsD,KAAA,CAAS,sBAAA;AAC/C,YAAA,CAAa,0BAA0BA,KAAA,CAAS,uBAAA;ACxGhD,IAAM,EAAE,QAAA,EAAAhD,UAAAA,EAAS,GAAIC,KAAAA;AAqDd,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA,GAAQ,sBAAA;AAAA,EACR,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,WAAA;AAAA,EACZ,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAE3B,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,OAAA,EAASL,QAAQ,CAAC,CAAA;AAAA,IAClB,SAAA,EAAW,QAAA;AAAA,IACX,GAAG;AAAA,GACL;AAEA,EAAA,uBACED,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAsB,KAAA,EAC3B,QAAA,kBAAAe,IAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,QAAA,EAAS,KAAA,EAAM,QAAA,EAAS,KAAK,CAAA,EAC5C,QAAA,EAAA;AAAA,IAAA,IAAA,oBACCf,GAAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,KAAA,CAAM,UAAA,EAAW,EACvD,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,oBAGFA,IAAC,MAAA,EAAA,EAAO,IAAA,EAAK,MAAK,MAAA,EAAO,UAAA,EAAW,KAAA,EAAM,OAAA,EACvC,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,IAEC,WAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAO,MAAK,MAAA,EAAO,KAAA,EAAM,aACvB,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,IAGD,2BACCA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAG,CAAA;AAAA,QACH,KAAA,EAAO;AAAA,UACL,iBAAiB,KAAA,CAAM,YAAA;AAAA,UACvB,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,QAAA,EAAU,OAAA;AAAA,UACV,KAAA,EAAO;AAAA,SACT;AAAA,QAEA,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAA,EAAK,IAAA,EAAK,IAAG,KAAA,EAAM,KAAA,EAAO,EAAE,MAAA,EAAQ,GAAG,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,UAAA,IAC3E,QAAA,EAAA,OAAA,EACH;AAAA;AAAA,KACF;AAAA,IAAA,CAGA,aAAa,MAAA,qBACbA,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAI,CAAA,EACR,QAAA,EAAA,MAAA,oBACCA,GAAAA,CAAC,YAAS,OAAA,EAAQ,SAAA,EAAU,OAAA,EAAS,OAAA,EAClC,qBACH,CAAA,EAEJ;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;;;ACvIA,IAAA,kBAAA,GAAA,EAAA;ACsDO,SAAS,UAAA,CAAW;AAAA,EACzB,OAAA,GAAU,IAAA;AAAA,EACV,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAc,QAAA;AAAA,EACd,KAAA,GAAQ,CAAA;AAAA,EACR,KAAA,GAAQ,IAAA;AAAA,EACR,MAAA,GAAS,IAAA;AAAA,EACT,SAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACEA,GAAAA;AAAA,IAACuD,QAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,MAAA,EAAQ,MAAA,GAAS,EAAE,KAAA,EAAO,aAAY,GAAI,KAAA;AAAA,MAC1C,SAAA,EAAW,EAAE,IAAA,EAAM,KAAA,EAAM;AAAA,MACzB,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAKO,SAAS,iBAAiB,KAAA,EAAwD;AACvF,EAAA,uBAAOvD,GAAAA,CAACuD,QAAA,CAAY,MAAA,EAAZ,EAAoB,GAAG,KAAA,EAAO,CAAA;AACxC;AAKO,SAAS,gBAAgB,KAAA,EAAuD;AACrF,EAAA,uBAAOvD,GAAAA,CAACuD,QAAA,CAAY,KAAA,EAAZ,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;AAKO,SAAS,gBAAgB,KAAA,EAAuD;AACrF,EAAA,uBAAOvD,GAAAA,CAACuD,QAAA,CAAY,KAAA,EAAZ,EAAmB,GAAG,KAAA,EAAO,CAAA;AACvC;AAKO,SAAS,eAAe,KAAA,EAAsD;AACnF,EAAA,uBAAOvD,GAAAA,CAACuD,QAAA,CAAY,IAAA,EAAZ,EAAkB,GAAG,KAAA,EAAO,CAAA;AACtC;AAyCO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA,GAAQ,MAAA;AAAA,EACR,MAAA,GAAS,KAAA;AAAA,EACT,GAAA,GAAM,CAAA;AAAA,EACN,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAIhD,KAAAA,CAAM,QAAA,EAAS;AACjC,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AACnC,EAAA,MAAM,MAAA,GAAS,OAAA,GAAU,KAAA,GAAQ,CAAC,KAAK,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,UAAU,MAAA,GAAU,OAAO,UAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AAElF,EAAA,uBACEP,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,OAAA,EAAS,aAAA,EAAe,aAAA,EAAe,UAAU,GAAA,EAAK,KAAA,EAAO,UAAA,EAAY,GAAG,KAAA,EAAM;AAAA,MAE1F,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,sBACdA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UAEC,WAAW,kBAAA,CAAO,YAAA;AAAA,UAClB,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,OAAA;AAAA,YACT,KAAA,EAAO,UAAW,OAAO,CAAA,KAAM,WAAW,CAAA,EAAG,CAAC,OAAO,CAAA,GAAK,MAAA;AAAA,YAC1D,QAAQ,OAAO,MAAA,KAAW,QAAA,GAAW,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,YACrD,cAAc,KAAA,CAAM,cAAA;AAAA,YACpB,UAAA,EAAY,CAAA;AAAA,YACZ,eAAA,EAAiB,0BAA0B,KAAA,CAAM,WAAW,SAAS,KAAA,CAAM,aAAa,CAAA,MAAA,EAAS,KAAA,CAAM,WAAW,CAAA,KAAA,CAAA;AAAA,YAClH,cAAA,EAAgB;AAAA;AAClB,SAAA;AAAA,QAVK;AAAA,OAYR;AAAA;AAAA,GACH;AAEJ;AC1KO,SAAS,OAAO,KAAA,EAAoB;AACzC,EAAA,uBAAOA,GAAAA,CAACwD,IAAA,EAAA,EAAS,GAAG,KAAA,EAAO,CAAA;AAC7B;ACFO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAOxD,GAAAA,CAACyD,MAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAC/B;AC+BO,IAAM,SAAA,GAA0B;AAEhC,SAAS,YAAA,GAAe;AAC7B,EAAA,OAAO,QAAQ,UAAA,EAAW;AAC5B;ACRO,IAAM,cAAA,GAAoC;AAE1C,SAAS,iBAAA,GAAoB;AAClC,EAAA,OAAO,aAAa,eAAA,EAAgB;AACtC;ACoCO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,SAAA;AAAA,EACR,QAAA,GAAW,IAAA;AAAA,EACX,YAAA,GAAe,IAAA;AAAA,EACf,MAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,QAAA,GAAyC;AAAA,IAC7C,KAAA,EAAO,GAAA;AAAA,IACP,OAAA,EAAS,GAAA;AAAA,IACT,KAAA,EAAO,GAAA;AAAA,IACP,IAAA,EAAM,OAAO,UAAA,GAAa;AAAA,GAC5B;AAEA,EAAA,MAAM,aAAa,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,SAAS,KAAK,CAAA;AAErE,EAAA,uBACEzD,GAAAA;AAAA,IAAC0D,KAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA,EAAO,UAAA;AAAA,MACP,QAAA;AAAA,MACA,YAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,IAAA;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,SAAA;AAAA,MACA,KAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAKO,IAAM,iBAAiBA,KAAA,CAAS;AAKhC,IAAM,cAAcA,KAAA,CAAS;AAK7B,IAAM,iBAAiBA,KAAA,CAAS;AAKhC,IAAM,eAAeA,KAAA,CAAS;AAK9B,IAAM,iBAAiBA,KAAA,CAAS;AC3FhC,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,KAAA,GAAQ,IAAA;AAAA,EACR,OAAA,GAAU,OAAA;AAAA,EACV,IAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,uBACE1D,GAAAA;AAAA,IAAC2D,OAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,SAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;ACrEO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAO3D,GAAAA,CAAC4D,MAAA,EAAA,EAAW,GAAG,KAAA,EAAO,CAAA;AAC/B;ACFO,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,uBAAO5D,GAAAA,CAAC6D,UAAA,EAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AACnC;ACFO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,uBAAO7D,GAAAA,CAAC8D,OAAA,EAAA,EAAY,GAAG,KAAA,EAAO,CAAA;AAChC;ACRA,IAAM,EAAE,QAAA,EAAAxD,UAAAA,EAAS,GAAIC,KAAAA;AAQd,SAAS,iBAAiB,EAAE,OAAA,EAAS,SAAA,EAAW,KAAA,EAAO,aAAY,EAA0B;AAClG,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAE3B,EAAA,MAAM,GAAA,GAAM;AAAA,wBAAA,EACY,MAAM,QAAQ,CAAA,8BAAA,EAAiC,MAAM,SAAS,CAAA,eAAA,EAAkB,MAAM,UAAU,CAAA;AAAA,gIAAA,EACQ,MAAM,gBAAgB,CAAA;AAAA,0BAAA,EAC5H,KAAA,CAAM,gBAAgB,CAAA,kDAAA,EAAqD,KAAA,CAAM,oBAAoB,CAAA;AAAA,0BAAA,EACrG,KAAA,CAAM,gBAAgB,CAAA,kDAAA,EAAqD,KAAA,CAAM,oBAAoB,CAAA;AAAA,0BAAA,EACrG,MAAM,gBAAgB,CAAA;AAAA,0BAAA,EACtB,MAAM,gBAAgB,CAAA;AAAA;AAAA,qBAAA,EAE3B,MAAM,YAAY,CAAA;AAAA;AAAA,8BAAA,EAET,KAAA,CAAM,cAAc,CAAA,gCAAA,EAAmC,KAAA,CAAM,iBAAiB,WAAW,KAAA,CAAM,kBAAkB,CAAA,sCAAA,EAAyC,KAAA,CAAM,cAAc,CAAA;AAAA,4BAAA,EAChL,MAAM,mBAAmB,CAAA,mBAAA,EAAsB,MAAM,oBAAoB,CAAA,gBAAA,EAAmB,MAAM,YAAY,CAAA;AAAA,0EAAA,EAChE,MAAM,SAAS,CAAA;AAAA;AAAA;AAAA,+EAAA,EAGV,KAAA,CAAM,kBAAkB,CAAA,aAAA,EAAgB,KAAA,CAAM,mBAAmB,CAAA,QAAA,EAAW,KAAA,CAAM,kBAAkB,CAAA,kBAAA,EAAqB,KAAA,CAAM,cAAc,CAAA,GAAA,EAAM,MAAM,cAAc,CAAA;AAAA;AAAA,kDAAA,EAEpM,MAAM,oBAAoB,CAAA;AAAA;AAAA,2CAAA,EAEjC,MAAM,oBAAoB,CAAA;AAAA,2BAAA,EAC1C,MAAM,iBAAiB,CAAA;AAAA,8CAAA,EACJ,MAAM,mBAAmB,CAAA;AAAA,+CAAA,EACxB,MAAM,YAAY,CAAA;AAAA,EAAA,CAAA;AAGjE,EAAA,uBACES,IAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAS,GAAG,WAAA,EAAY,EAC3E,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,WAAO,QAAA,EAAA,GAAA,EAAI,CAAA;AAAA,oBACZA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,OAAA;AAAA,QACV,uBAAA,EAAyB,EAAE,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAA;AAAY;AAAA;AAC/D,GAAA,EACF,CAAA;AAEJ;ACvCA,IAAM,EAAE,QAAA,EAAAM,UAAAA,EAAS,GAAIC,KAAAA;AAwCd,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,WAAW,UAAA,GAAa,KAAA;AAAA,EACxB,MAAA,GAAS,CAAA;AAAA,EACT,eAAA,GAAkB,KAAA;AAAA,EAClB,SAAA;AAAA,EACA,KAAA,EAAO;AACT,CAAA,EAAsB;AACpB,EAAA,MAAM,EAAE,KAAA,EAAM,GAAID,UAAAA,EAAS;AAK3B,EAAA,MAAM,UAAA,GAAmByD,eAAQ,MAAM;AACrC,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,MAAM,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,CAAA,OAAA,EAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,cAAc,CAAA,CAAA;AAAA,IAC1E;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,MAAM,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AAEnC,EAAA,MAAM,KAAA,GAA6B;AAAA,IACjC,iBAAiB,KAAA,CAAM,gBAAA;AAAA,IACvB,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IACtC,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW,OAAA;AAAA,IACX,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,SAAA,GAAiC;AAAA,IACrC,OAAA,EAAS,OAAA;AAAA,IACT,UAAA,EAAY,4CAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,SAAS,KAAA,CAAM,OAAA;AAAA,IACf,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,KAAA,CAAM;AAAA,GACf;AAEA,EAAA,MAAM,eAAA,GAAuC;AAAA,IAC3C,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,MAAA;AAAA,IACP,OAAO,KAAA,CAAM,kBAAA;AAAA,IACb,UAAA,EAAY,MAAA;AAAA,IACZ,SAAA,EAAW,OAAA;AAAA,IACX,aAAa,KAAA,CAAM;AAAA,GACrB;AAGA,EAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,UAAA,EAAY,KAAK,CAAA;AAEvD,EAAA,uBACE/D,GAAAA,CAAC,KAAA,EAAA,EAAM,WAAsB,KAAA,EAC3B,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,KAAA,EAAO,SAAA,EACT,QAAA,EAAA,eAAA,GACC,MAAM,GAAA,CAAI,CAAC,MAAM,KAAA,qBACfe,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,eAAA,EAAkB,kBAAQ,CAAA,EAAE,CAAA;AAAA,oBACzCA,GAAAA,CAAC,MAAA,EAAA,EAAK,uBAAA,EAAyB,EAAE,QAAQ,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA,EAAE,EAAG;AAAA,GAAA,EAAA,EAF/D,KAGV,CACD,CAAA,mBAEDA,GAAAA,CAAC,MAAA,EAAA,EAAK,uBAAA,EAAyB,EAAE,MAAA,EAAQ,eAAA,EAAgB,EAAG,CAAA,EAEhE,CAAA,EACF,CAAA;AAEJ;AAKA,SAAS,aAAA,CAAc,MAAc,KAAA,EAAoB;AAEvD,EAAA,IAAA,GAAO,KAAK,OAAA,CAAQ,aAAA,EAAe,CAAA,oBAAA,EAAuB,KAAA,CAAM,YAAY,CAAA,cAAA,CAAgB,CAAA;AAG5F,EAAA,IAAA,GAAO,KAAK,OAAA,CAAQ,cAAA,EAAgB,CAAA,sBAAA,EAAyB,KAAA,CAAM,YAAY,CAAA,aAAA,CAAe,CAAA;AAG9F,EAAA,IAAA,GAAO,KAAK,OAAA,CAAQ,UAAA,EAAY,CAAA,sBAAA,EAAyB,KAAA,CAAM,YAAY,CAAA,WAAA,CAAa,CAAA;AAGxF,EAAA,IAAA,GAAO,KAAK,OAAA,CAAQ,iBAAA,EAAmB,CAAA,sBAAA,EAAyB,KAAA,CAAM,SAAS,CAAA,WAAA,CAAa,CAAA;AAG5F,EAAA,IAAA,GAAO,KAAK,OAAA,CAAQ,WAAA,EAAa,CAAA,sBAAA,EAAyB,KAAA,CAAM,kBAAkB,CAAA,WAAA,CAAa,CAAA;AAE/F,EAAA,OAAO,IAAA;AACT;AC1HA,SAAS,YAAY,IAAA,EAAwB;AAC3C,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AAAE,IAAA,OAAO,QAAA;AAAA,EAAU;AAC9C,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC1C,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,EAAG;AAAE,IAAA,OAAO,QAAA;AAAA,EAAU;AAC7C,EAAA,OAAO,SAAA;AACT;AAEA,IAAM,WAAA,GAA+E;AAAA,EACnF,KAAK,EAAE,EAAA,EAAI,2BAA2B,MAAA,EAAQ,yBAAA,EAA2B,OAAO,yBAAA,EAA0B;AAAA,EAC1G,QAAQ,EAAE,EAAA,EAAI,2BAA2B,MAAA,EAAQ,uBAAA,EAAyB,OAAO,uBAAA,EAAwB;AAAA,EACzG,QAAQ,EAAE,EAAA,EAAI,wCAAwC,MAAA,EAAQ,aAAA,EAAe,OAAO,gCAAA,EAAiC;AAAA,EACrH,SAAS,EAAE,EAAA,EAAI,eAAe,MAAA,EAAQ,aAAA,EAAe,OAAO,SAAA;AAC9D,CAAA;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,SAAA,GAAY,GAAA;AAAA,EACZ,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,IAAA,OAAW,EAAA,EAAI;AAC/B,IAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAS,EAAA,EAAI,SAAA,EAAW,QAAA,EAAS,EAC7C,0BAAAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,IAAA,EAAK,WAAA,EAAY,mCAAqB,CAAA,EAC1D,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE7B,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,sCAAA;AAAA,QACZ,MAAA,EAAQ,kDAAA;AAAA,QACR,YAAA,EAAc,uBAAA;AAAA,QACd,UAAA,EAAY,yCAAA;AAAA,QACZ,QAAA,EAAU,EAAA;AAAA,QACV,UAAA,EAAY,GAAA;AAAA,QACZ,SAAA;AAAA,QACA,QAAA,EAAU,MAAA;AAAA,QACV,GAAG;AAAA,OACL;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,QAAA,MAAM,IAAA,GAAO,YAAY,IAAI,CAAA;AAC7B,QAAA,MAAM,CAAA,GAAI,YAAY,IAAI,CAAA;AAC1B,QAAA,MAAM,aAAA,GAAgB,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,QAAA;AAEjD,QAAA,uBACEe,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,YAAY,CAAA,CAAE,EAAA;AAAA,cACd,UAAA,EAAY,aAAA,GAAgB,CAAA,UAAA,EAAa,CAAA,CAAE,MAAM,CAAA,CAAA,GAAK,MAAA;AAAA,cACtD,WAAA,EAAa,gBAAgB,CAAA,GAAI;AAAA,aACnC;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,eAAA,oBACCf,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,EAAA;AAAA,oBACV,SAAA,EAAW,OAAA;AAAA,oBACX,YAAA,EAAc,EAAA;AAAA,oBACd,UAAA,EAAY,MAAA;AAAA,oBACZ,KAAA,EAAO,gCAAA;AAAA,oBACP,QAAA,EAAU;AAAA,mBACZ;AAAA,kBAEC,QAAA,EAAA,CAAA,GAAI;AAAA;AAAA,eACP;AAAA,8BAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAQ,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,EAAY,OAAO,IAAA,EAAM,CAAA,IAC3E,QAAA,EAAA,IAAA,EACH;AAAA;AAAA,WAAA;AAAA,UAxBK;AAAA,SAyBP;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ","file":"index.js","sourcesContent":["/**\n * Text component - Typography primitive with design tokens\n *\n * Uses tokens from @kb-labs/studio-ui-core for consistent styling.\n * NO inline styles, NO hardcoded colors.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { typography } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport type UITextSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';\nexport type UITextWeight = 'normal' | 'medium' | 'semibold' | 'bold';\nexport type UITextColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n\nexport interface UITextProps {\n /** Text content */\n children: React.ReactNode;\n /** Typography size from design tokens */\n size?: UITextSize;\n /** Font weight from design tokens */\n weight?: UITextWeight;\n /** Semantic color using Ant Design tokens */\n color?: UITextColor;\n /** HTML element to render */\n as?: 'span' | 'p' | 'div' | 'label' | 'pre';\n /** Additional CSS class */\n className?: string;\n /** Additional styles (use sparingly) */\n style?: React.CSSProperties;\n}\n\n/**\n * UIText component with design system tokens\n *\n * @example\n * ```tsx\n * <UIText size=\"sm\" color=\"secondary\">Label text</UIText>\n * <UIText size=\"2xl\" weight=\"bold\">Heading</UIText>\n * ```\n */\nexport function UIText({\n children,\n size = 'base',\n weight = 'normal',\n color = 'primary',\n as: Component = 'span',\n className,\n style: customStyle,\n}: UITextProps) {\n const { token } = useToken();\n\n // Map semantic colors to Ant Design tokens\n const colorMap: Record<UITextColor, string> = {\n primary: token.colorText,\n secondary: token.colorTextSecondary,\n success: token.colorSuccess,\n warning: token.colorWarning,\n error: token.colorError,\n info: token.colorInfo,\n };\n\n const baseStyle: React.CSSProperties = {\n fontSize: typography.fontSize[size][0],\n lineHeight: typography.fontSize[size][1].lineHeight,\n fontWeight: typography.fontWeight[weight],\n color: colorMap[color],\n };\n\n // Merge base styles with custom styles (custom styles override)\n const style = { ...baseStyle, ...customStyle };\n\n return (\n <Component style={style} className={className}>\n {children}\n </Component>\n );\n}\n","/**\n * Box component - Layout primitive with spacing tokens\n *\n * Uses tokens from @kb-labs/studio-ui-core for consistent spacing.\n * NO inline styles for spacing/sizing.\n */\n\nimport * as React from 'react';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nexport type UIBoxSpacingValue = keyof typeof spacing;\n\nexport interface UIBoxProps {\n /** Box content */\n children: React.ReactNode;\n /** Padding from design tokens */\n p?: UIBoxSpacingValue;\n /** Padding top */\n pt?: UIBoxSpacingValue;\n /** Padding right */\n pr?: UIBoxSpacingValue;\n /** Padding bottom */\n pb?: UIBoxSpacingValue;\n /** Padding left */\n pl?: UIBoxSpacingValue;\n /** Margin from design tokens */\n m?: UIBoxSpacingValue;\n /** Margin top */\n mt?: UIBoxSpacingValue;\n /** Margin right */\n mr?: UIBoxSpacingValue;\n /** Margin bottom */\n mb?: UIBoxSpacingValue;\n /** Margin left */\n ml?: UIBoxSpacingValue;\n /** HTML element to render */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional CSS class */\n className?: string;\n /** Additional styles (use sparingly) */\n style?: React.CSSProperties;\n}\n\n/**\n * Box component with spacing tokens\n *\n * @example\n * ```tsx\n * <Box p={4} mb={2}>Content</Box>\n * <Box pt={2} pb={3}>Asymmetric padding</Box>\n * ```\n */\nexport function UIBox({\n children,\n p,\n pt,\n pr,\n pb,\n pl,\n m,\n mt,\n mr,\n mb,\n ml,\n as: Component = 'div',\n className,\n style: customStyle,\n}: UIBoxProps) {\n const style: React.CSSProperties = {\n ...(p !== undefined && { padding: spacing[p] }),\n ...(pt !== undefined && { paddingTop: spacing[pt] }),\n ...(pr !== undefined && { paddingRight: spacing[pr] }),\n ...(pb !== undefined && { paddingBottom: spacing[pb] }),\n ...(pl !== undefined && { paddingLeft: spacing[pl] }),\n ...(m !== undefined && { margin: spacing[m] }),\n ...(mt !== undefined && { marginTop: spacing[mt] }),\n ...(mr !== undefined && { marginRight: spacing[mr] }),\n ...(mb !== undefined && { marginBottom: spacing[mb] }),\n ...(ml !== undefined && { marginLeft: spacing[ml] }),\n ...customStyle,\n };\n\n return (\n <Component style={style} className={className}>\n {children}\n </Component>\n );\n}\n","/**\n * Flex component - Flexbox layout primitive\n *\n * Uses spacing tokens for gap. NO inline styles for layout.\n */\n\nimport * as React from 'react';\nimport { spacing } from '@kb-labs/studio-ui-core';\nimport type { UIBoxSpacingValue } from './UIBox';\n\nexport type UIFlexSpacingValue = UIBoxSpacingValue;\n\nexport interface UIFlexProps {\n /** Flex content */\n children: React.ReactNode;\n /** Flex direction */\n direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n /** Justify content */\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\n /** Align items */\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n /** Gap from design tokens */\n gap?: UIFlexSpacingValue;\n /** Wrap behavior */\n wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n /** HTML element to render */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Flex layout component\n *\n * @example\n * ```tsx\n * <Flex direction=\"row\" gap={2} align=\"center\">\n * <Text>Item 1</Text>\n * <Text>Item 2</Text>\n * </Flex>\n * ```\n */\nexport function UIFlex({\n children,\n direction = 'row',\n justify = 'start',\n align = 'stretch',\n gap,\n wrap = 'nowrap',\n as: Component = 'div',\n className,\n style: customStyle,\n}: UIFlexProps) {\n const justifyMap = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n };\n\n const alignMap = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n baseline: 'baseline',\n stretch: 'stretch',\n };\n\n const style: React.CSSProperties = {\n display: 'flex',\n flexDirection: direction,\n justifyContent: justifyMap[justify],\n alignItems: alignMap[align],\n flexWrap: wrap,\n ...(gap !== undefined && { gap: spacing[gap] }),\n ...customStyle,\n };\n\n return (\n <Component style={style} className={className}>\n {children}\n </Component>\n );\n}\n","/**\n * UITypography components - Rich text display\n *\n * Wraps Ant Design Typography.Text, Typography.Paragraph, Typography.Link\n * for features like copyable, ellipsis, editable, etc.\n *\n * For simple styled text, use UIText instead (design-token-based).\n */\n\nimport * as React from 'react';\nimport { Typography } from 'antd';\nimport type { TextProps } from 'antd/es/typography/Text';\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph';\nimport type { LinkProps } from 'antd/es/typography/Link';\n\nexport interface UITypographyTextProps extends TextProps {}\nexport interface UITypographyParagraphProps extends ParagraphProps {}\nexport interface UITypographyLinkProps extends LinkProps {}\n\nexport function UITypographyText(props: UITypographyTextProps) {\n return <Typography.Text {...props} />;\n}\n\nexport function UITypographyParagraph(props: UITypographyParagraphProps) {\n return <Typography.Paragraph {...props} />;\n}\n\nexport function UITypographyLink(props: UITypographyLinkProps) {\n return <Typography.Link {...props} />;\n}\n","/**\n * UIStack component - Vertical/horizontal spacing layout\n *\n * Simplified wrapper around UIFlex for consistent spacing.\n * NO inline styles, uses spacing tokens.\n */\n\nimport * as React from 'react';\nimport { UIFlex } from '../primitives/UIFlex';\nimport type { UIBoxSpacingValue } from '../primitives/UIBox';\n\nexport type UIStackDirection = 'vertical' | 'horizontal';\nexport type UIStackSpacing = UIBoxSpacingValue;\nexport type UIStackAlign = 'start' | 'end' | 'center' | 'stretch';\n\nexport interface UIStackProps {\n /** Stack direction */\n direction?: UIStackDirection;\n /** Spacing between items (from design tokens) */\n spacing?: UIStackSpacing;\n /** Align items */\n align?: UIStackAlign;\n /** Stack content */\n children: React.ReactNode;\n /** HTML element to render */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIStack - Consistent spacing layout\n *\n * @example\n * ```tsx\n * <UIStack direction=\"vertical\" spacing={4}>\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * <Card>Item 3</Card>\n * </UIStack>\n *\n * <UIStack direction=\"horizontal\" spacing={2} align=\"center\">\n * <Button>Cancel</Button>\n * <Button>Submit</Button>\n * </UIStack>\n * ```\n */\nexport function UIStack({\n direction = 'vertical',\n spacing = 2,\n align,\n children,\n as,\n className,\n style,\n}: UIStackProps) {\n return (\n <UIFlex\n direction={direction === 'vertical' ? 'column' : 'row'}\n gap={spacing}\n align={align}\n as={as}\n className={className}\n style={style}\n >\n {children}\n </UIFlex>\n );\n}\n","/**\n * UISpace component - Spacing container\n *\n * Wraps Ant Design Space for consistent spacing between elements.\n */\n\nimport * as React from 'react';\nimport { Space as AntSpace, type SpaceProps as AntSpaceProps } from 'antd';\n\nexport interface UISpaceProps extends AntSpaceProps {}\n\nexport function UISpace(props: UISpaceProps) {\n return <AntSpace {...props} />;\n}\n\nexport function UISpaceCompact(props: React.ComponentProps<typeof AntSpace.Compact>) {\n return <AntSpace.Compact {...props} />;\n}\n","/**\n * UIRow / UICol components - Grid layout\n *\n * Wraps Ant Design Row/Col for responsive grid layouts.\n */\n\nimport * as React from 'react';\nimport { Row as AntRow, Col as AntCol, type RowProps as AntRowProps, type ColProps as AntColProps } from 'antd';\n\nexport interface UIRowProps extends AntRowProps {}\nexport interface UIColProps extends AntColProps {}\n\nexport function UIRow(props: UIRowProps) {\n return <AntRow {...props} />;\n}\n\nexport function UICol(props: UIColProps) {\n return <AntCol {...props} />;\n}\n","/**\n * UIDivider component - Visual separator\n *\n * Wraps Ant Design Divider.\n */\n\nimport * as React from 'react';\nimport { Divider as AntDivider, type DividerProps as AntDividerProps } from 'antd';\n\nexport interface UIDividerProps extends AntDividerProps {}\n\nexport function UIDivider(props: UIDividerProps) {\n return <AntDivider {...props} />;\n}\n","/**\n * Badge component - Status indicator with semantic colors\n *\n * Uses Ant Design tokens for all colors.\n * NO hardcoded colors, NO inline styles.\n */\n\nimport * as React from 'react';\nimport { Badge as AntBadge, theme } from 'antd';\nimport type { BadgeProps as AntBadgeProps } from 'antd';\n\nconst { useToken } = theme;\n\nexport type UIBadgeVariant = 'success' | 'warning' | 'error' | 'info' | 'default';\n\nexport interface UIBadgeProps extends Omit<AntBadgeProps, 'status' | 'color'> {\n /** Semantic variant */\n variant?: UIBadgeVariant;\n /** Badge text */\n children?: React.ReactNode;\n}\n\n/**\n * Badge component with semantic colors\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\">Failed</Badge>\n * ```\n */\nexport function UIBadge({ variant = 'default', children, ...props }: UIBadgeProps) {\n const { token } = useToken();\n\n // Map semantic variants to Ant Design status\n const statusMap: Record<UIBadgeVariant, AntBadgeProps['status']> = {\n success: 'success',\n warning: 'warning',\n error: 'error',\n info: 'processing',\n default: 'default',\n };\n\n // Map semantic variants to colors for text badges\n const colorMap: Record<UIBadgeVariant, string> = {\n success: token.colorSuccess,\n warning: token.colorWarning,\n error: token.colorError,\n info: token.colorInfo,\n default: token.colorTextSecondary,\n };\n\n if (children) {\n // Text badge\n return (\n <AntBadge\n color={colorMap[variant]}\n text={children}\n {...props}\n />\n );\n }\n\n // Status badge (dot)\n return (\n <AntBadge\n status={statusMap[variant]}\n {...props}\n />\n );\n}\n","/**\n * UIButton styles - Proper SVG icon theming\n *\n * This ensures all SVG icons (lucide-react, etc.) inherit colors from CSS variables\n * and work correctly in both light and dark themes.\n */\n\n.uiButton {\n /* Button inherits theme colors from Ant Design tokens */\n}\n\n/*\n * CRITICAL: SVG icon color inheritance\n *\n * Force all SVG icons to inherit button text color automatically\n * Works for lucide-react, heroicons, and any other icon libraries\n */\n.uiButton svg {\n color: inherit !important;\n stroke: currentColor !important;\n fill: currentColor !important;\n}\n\n/*\n * Disabled state - reduce opacity\n */\n.uiButton:disabled svg,\n.uiButton.ant-btn-disabled svg {\n opacity: 0.4;\n}\n\n/*\n * Size variants - ensure SVG scales properly\n */\n.uiButton.ant-btn-sm svg {\n /* Small button icons */\n width: 14px;\n height: 14px;\n}\n\n.uiButton svg {\n /* Default (middle) button icons */\n width: 16px;\n height: 16px;\n}\n\n.uiButton.ant-btn-lg svg {\n /* Large button icons */\n width: 18px;\n height: 18px;\n}\n\n/*\n * Icon positioning within button\n * Ensures proper spacing between icon and text\n */\n.uiButton .ant-btn-icon {\n /* Icon wrapper - CRITICAL: must inherit color for SVG to get correct color */\n color: inherit !important;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.uiButton .ant-btn-icon svg {\n /* SVG inside icon wrapper */\n vertical-align: middle;\n display: block; /* Remove inline spacing */\n}\n\n/*\n * All buttons — base transition and press feedback\n */\n.uiButton {\n transition: transform 100ms ease, box-shadow 150ms ease, opacity 100ms ease;\n}\n\n.uiButton:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.96);\n transition: transform 60ms ease;\n}\n\n/*\n * Primary button — subtle lift on hover, snap back on press\n */\n.uiButton.ant-btn-primary {\n transition: transform 150ms ease, box-shadow 150ms ease;\n}\n\n.uiButton.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);\n}\n\n.uiButton.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.97);\n box-shadow: none;\n transition: transform 60ms ease;\n}\n\n/*\n * Default / dashed — dim on press\n */\n.uiButton.ant-btn-default:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton.ant-btn-dashed:active:not(:disabled):not(.ant-btn-disabled) {\n opacity: 0.75;\n}\n\n/*\n * Text / link — background flash on press for clear tactile signal\n */\n.uiButton.ant-btn-text:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton.ant-btn-link:active:not(:disabled):not(.ant-btn-disabled) {\n background: rgba(0, 0, 0, 0.06) !important;\n transform: scale(0.95);\n}\n\n/*\n * RTL (Right-to-Left) support\n */\n[dir='rtl'] .uiButton .ant-btn-icon {\n /* Mirror icon position in RTL */\n transform: scaleX(-1);\n}\n","/**\n * UIButton component - Action button with semantic variants\n *\n * Wraps Ant Design Button with consistent styling and proper SVG icon theming.\n * NO hardcoded colors, uses Ant Design theme tokens + CSS variables.\n *\n * IMPORTANT: This component ensures all SVG icons (lucide-react, etc.)\n * inherit colors correctly in both light and dark themes through CSS.\n */\n\nimport * as React from 'react';\nimport { Button as AntButton, type ButtonProps as AntButtonProps } from 'antd';\nimport styles from './UIButton.module.css';\n\nexport type UIButtonVariant = 'primary' | 'default' | 'dashed' | 'text' | 'link';\n\nexport interface UIButtonProps extends Omit<AntButtonProps, 'type' | 'variant'> {\n /** Button variant (maps to Ant Design 'type' prop) */\n variant?: UIButtonVariant;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * UIButton - Action button with proper icon theming\n *\n * @example\n * ```tsx\n * import { X, Check } from 'lucide-react';\n *\n * <UIButton variant=\"primary\">Submit</UIButton>\n * <UIButton variant=\"default\" icon={<Check />}>Confirm</UIButton>\n * <UIButton variant=\"text\" danger icon={<X />}>Delete</UIButton>\n * <UIButton variant=\"text\" icon={<X />} /> // Icon-only close button\n * ```\n */\nexport const UIButton = React.forwardRef<HTMLButtonElement, UIButtonProps>(\n function UIButton({ variant = 'default', className, ...rest }, ref) {\n const combinedClassName = [styles.uiButton, className].filter(Boolean).join(' ');\n return (\n <AntButton\n ref={ref}\n type={variant}\n className={combinedClassName}\n {...rest}\n />\n );\n },\n);\n",".card {\n --card-accent: var(--border-primary);\n box-shadow: 0 1px 2px var(--shadow);\n transition: box-shadow 200ms ease, transform 200ms ease, border-color 200ms ease;\n position: relative;\n}\n\n.card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 16px;\n right: 16px;\n height: 2px;\n border-radius: 0 0 2px 2px;\n background: var(--card-accent);\n opacity: 0;\n transition: opacity 200ms ease;\n}\n\n.card.accented::before {\n opacity: 1;\n}\n\n.card.hoverable:hover {\n box-shadow: 0 8px 20px -4px var(--shadow-hover);\n border-color: var(--border-secondary);\n transform: translateY(-1px);\n}\n","/**\n * UICard component - Card container with header/footer\n *\n * Wraps Ant Design Card with additional features.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Card as AntCard, theme } from 'antd';\nimport type { CardProps as AntCardProps } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport styles from './UICard.module.css';\n\nconst { useToken } = theme;\n\nexport type UICardVariant = 'default' | 'success' | 'warning' | 'error' | 'info';\n\n// Status reads as a short accent bar at the top-left, not a full-width border —\n// distinctive enough to scan at a glance without tinting the whole card.\nconst variantTokens: Record<UICardVariant, { accent: string }> = {\n default: { accent: 'var(--border-primary)' },\n success: { accent: 'var(--success)' },\n warning: { accent: 'var(--warning)' },\n error: { accent: 'var(--error)' },\n info: { accent: 'var(--info)' },\n};\n\nexport interface UICardProps extends Omit<AntCardProps, 'title' | 'bordered'> {\n /** Card title */\n title?: React.ReactNode;\n /** Subtitle (below title) */\n subtitle?: string;\n /** Extra content (top-right corner) */\n extra?: React.ReactNode;\n /** Footer content */\n footer?: React.ReactNode;\n /** Card content */\n children: React.ReactNode;\n /** Card size */\n size?: 'small' | 'default';\n /** Show border — false maps to variant=\"borderless\" */\n bordered?: boolean;\n /** Hoverable effect */\n hoverable?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Status variant — adds colored top border + tinted background */\n status?: UICardVariant;\n}\n\n/**\n * UICard - Container with optional header/footer\n *\n * @example\n * ```tsx\n * <UICard title=\"User Profile\" subtitle=\"Last updated today\">\n * <p>Card content</p>\n * </UICard>\n *\n * <UICard\n * title=\"Analytics\"\n * extra={<Button>View All</Button>}\n * footer={<p>Last 7 days</p>}\n * >\n * <MetricChart />\n * </UICard>\n * ```\n */\nexport function UICard({\n title,\n subtitle,\n extra,\n footer,\n children,\n size = 'default',\n bordered = true,\n hoverable = false,\n loading = false,\n status = 'default',\n ...rest\n}: UICardProps) {\n const { token } = useToken();\n const vt = variantTokens[status];\n\n // Custom title with subtitle\n const cardTitle = (title || subtitle) ? (\n <UIBox>\n {title && (typeof title === 'string'\n ? <UIText size=\"lg\" weight=\"semibold\" as=\"div\">{title}</UIText>\n : title\n )}\n {subtitle && (\n <UIText size=\"sm\" color=\"secondary\" as=\"div\" style={{ marginTop: token.marginXXS }}>\n {subtitle}\n </UIText>\n )}\n </UIBox>\n ) : undefined;\n\n return (\n <AntCard\n title={cardTitle}\n extra={extra}\n size={size}\n variant={bordered ? 'outlined' : 'borderless'}\n hoverable={false}\n loading={loading}\n {...rest}\n className={[\n styles.card,\n hoverable && styles.hoverable,\n status !== 'default' && styles.accented,\n rest.className,\n ].filter(Boolean).join(' ')}\n style={{\n borderColor: token.colorBorder,\n overflow: 'hidden',\n '--card-accent': vt.accent,\n ...rest.style,\n } as React.CSSProperties}\n >\n {children}\n {footer && (\n <UIBox mt={3} pt={3} style={{ borderTop: `1px solid ${token.colorBorder}` }}>\n {footer}\n </UIBox>\n )}\n </AntCard>\n );\n}\n","/**\n * UITag component - Label/category tag with semantic colors\n *\n * Wraps Ant Design Tag with semantic variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Tag as AntTag } from 'antd';\nimport type { TagProps as AntTagProps } from 'antd';\nimport './UITag.module.css';\n\nexport type UITagVariant = 'success' | 'warning' | 'error' | 'info' | 'default' | 'neutral';\n\nexport interface UITagProps extends Omit<AntTagProps, 'color'> {\n /** Semantic variant */\n variant?: UITagVariant;\n /** Direct color override (Ant Design color name or hex) */\n color?: string;\n /** Tag content */\n children: React.ReactNode;\n /** Closable tag */\n closable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Icon element */\n icon?: React.ReactNode;\n}\n\n/**\n * UITag - Label or category indicator\n *\n * @example\n * ```tsx\n * <UITag variant=\"success\">Active</UITag>\n * <UITag variant=\"warning\" closable onClose={() => {}}>Pending</UITag>\n * <UITag variant=\"error\">Failed</UITag>\n * <UITag variant=\"info\" icon={<InfoIcon />}>Info</UITag>\n * ```\n */\nexport function UITag({\n variant = 'default',\n color,\n children,\n closable,\n onClose,\n icon,\n className,\n onClick,\n ...rest\n}: UITagProps) {\n // Preset *status* names (not raw hex/CSS-var values) — Ant Design resolves these\n // through the Tag component's own theme tokens (see theme-adapter.ts `Tag: {...}`),\n // which are plain `var(--x)` strings. Passing a *computed* useToken() color instead\n // sends it through Ant's derivation pipeline, which runs TinyColor over the raw\n // `var(--x)` string, fails to parse it, and silently falls back to black.\n const colorMap: Record<UITagVariant, string | undefined> = {\n success: 'success',\n warning: 'warning',\n error: 'error',\n info: 'processing',\n default: undefined,\n neutral: undefined,\n };\n\n const combinedClassName = ['kb-ui-tag', onClick && 'kb-ui-tag--clickable', className].filter(Boolean).join(' ');\n\n return (\n <AntTag\n color={color ?? colorMap[variant]}\n closable={closable}\n onClose={onClose}\n icon={icon}\n className={combinedClassName}\n onClick={onClick}\n {...rest}\n >\n {children}\n </AntTag>\n );\n}\n","/**\n * UITitle component - Page/section titles with hierarchy\n *\n * Wraps Ant Design Typography.Title with consistent styling.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Typography, theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { Title: AntTitle } = Typography;\nconst { useToken } = theme;\n\nexport type UITitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface UITitleProps {\n /** Title level (h1-h5) */\n level?: UITitleLevel;\n /** Title content */\n children: React.ReactNode;\n /** Optional subtitle */\n subtitle?: string;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UITitle - Page or section title\n *\n * @example\n * ```tsx\n * <UITitle level={1}>Dashboard</UITitle>\n * <UITitle level={2} subtitle=\"Manage your settings\">Settings</UITitle>\n * <UITitle level={3}>Section Title</UITitle>\n * ```\n */\nexport function UITitle({\n level = 1,\n children,\n subtitle,\n className,\n style,\n}: UITitleProps) {\n const { token: _token } = useToken();\n\n if (subtitle) {\n return (\n <UIBox mb={subtitle ? 2 : 3}>\n <AntTitle level={level} className={className} style={{ margin: 0, ...style }}>\n {children}\n </AntTitle>\n <UIText\n size=\"base\"\n color=\"secondary\"\n as=\"div\"\n style={{ marginTop: spacing[1] }}\n >\n {subtitle}\n </UIText>\n </UIBox>\n );\n }\n\n return (\n <AntTitle level={level} className={className} style={{ marginBottom: spacing[3], ...style }}>\n {children}\n </AntTitle>\n );\n}\n","/**\n * UIIcon styles - Proper SVG and icon font theming\n *\n * Ensures all icons (Ant Design icons, lucide-react, custom SVG)\n * inherit colors from CSS variables and work in both light and dark themes.\n */\n\n.uiIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n}\n\n/*\n * SVG icons (lucide-react, custom SVG)\n * Use currentColor to inherit from parent color\n */\n.uiIcon svg {\n color: currentColor;\n stroke: currentColor;\n fill: none; /* Most icon libraries use stroke, not fill */\n display: block; /* Remove inline spacing */\n}\n\n/*\n * Ant Design icons (icon fonts)\n * Already use currentColor by default, but ensure it's explicit\n */\n.uiIcon .anticon {\n color: currentColor;\n}\n\n/*\n * Clickable icons (icon buttons)\n */\n.uiIcon.clickable {\n cursor: pointer;\n transition: opacity 0.2s ease, transform 0.1s ease;\n}\n\n.uiIcon.clickable:hover {\n opacity: 0.8;\n}\n\n.uiIcon.clickable:active {\n transform: scale(0.95);\n}\n\n/*\n * Size variants\n */\n.uiIcon.size-xs {\n font-size: 12px;\n width: 12px;\n height: 12px;\n}\n\n.uiIcon.size-sm {\n font-size: 14px;\n width: 14px;\n height: 14px;\n}\n\n.uiIcon.size-base {\n font-size: 16px;\n width: 16px;\n height: 16px;\n}\n\n.uiIcon.size-lg {\n font-size: 20px;\n width: 20px;\n height: 20px;\n}\n\n.uiIcon.size-xl {\n font-size: 24px;\n width: 24px;\n height: 24px;\n}\n\n.uiIcon.size-2xl {\n font-size: 32px;\n width: 32px;\n height: 32px;\n}\n\n/*\n * Color variants using CSS variables\n */\n.uiIcon.color-primary {\n color: var(--link, #2563EB);\n}\n\n.uiIcon.color-secondary {\n color: var(--text-secondary, #6B7280);\n}\n\n.uiIcon.color-success {\n color: var(--success, #16A34A);\n}\n\n.uiIcon.color-warning {\n color: var(--warning, #F59E0B);\n}\n\n.uiIcon.color-error {\n color: var(--error, #DC2626);\n}\n\n.uiIcon.color-info {\n color: var(--info, #0EA5E9);\n}\n\n.uiIcon.color-inherit {\n color: inherit;\n}\n\n/*\n * Spin animation\n */\n.uiIcon.spin {\n animation: uiIconSpin 1s linear infinite;\n}\n\n@keyframes uiIconSpin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*\n * Disabled state\n */\n.uiIcon.disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n","/**\n * UIIcon component - Icon wrapper with proper theming\n *\n * Provides consistent icon sizing and coloring using CSS variables.\n * Supports Ant Design icons, lucide-react, and custom SVG icons.\n * NO hardcoded colors, uses CSS variables for theme support.\n *\n * IMPORTANT: All icons (SVG, icon fonts) inherit colors through CSS.\n */\n\nimport * as React from 'react';\nimport styles from './UIIcon.module.css';\n\nexport type UIIconSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';\nexport type UIIconColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'inherit';\n\nexport interface UIIconProps {\n /** Icon component or icon name (e.g., 'HomeOutlined') */\n icon?: React.ReactNode | string;\n /** Icon name (alternative to icon prop) */\n name?: string;\n /** Icon size */\n size?: UIIconSize;\n /** Icon color */\n color?: UIIconColor;\n /** Spin animation */\n spin?: boolean;\n /** Click handler */\n onClick?: () => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Icon resolver registry — call registerIconRenderer() once at app startup\n * to wire up the icon lookup (e.g. from @/components/ui/icons renderIcon).\n */\ntype IconRenderer = (name: string) => React.ReactNode | null;\nlet _iconRenderer: IconRenderer | null = null;\n\nexport function registerIconRenderer(renderer: IconRenderer): void {\n _iconRenderer = renderer;\n}\n\n/**\n * UIIcon - Icon wrapper with CSS-based theming\n *\n * @example\n * ```tsx\n * import { CheckCircleOutlined } from '@ant-design/icons';\n * import { Check } from 'lucide-react';\n *\n * // Ant Design icon\n * <UIIcon icon={<CheckCircleOutlined />} color=\"success\" />\n *\n * // lucide-react icon\n * <UIIcon icon={<Check />} color=\"success\" size=\"lg\" />\n *\n * // Using icon name (from AVAILABLE_ICONS)\n * <UIIcon name=\"HomeOutlined\" size=\"lg\" />\n * <UIIcon icon=\"SettingOutlined\" color=\"primary\" />\n *\n * <UIIcon icon={<LoadingOutlined />} spin />\n *\n * <UIIcon\n * name=\"SettingOutlined\"\n * size=\"lg\"\n * onClick={handleSettings}\n * />\n * ```\n */\nexport function UIIcon({\n icon,\n name,\n size = 'base',\n color = 'inherit',\n spin = false,\n onClick,\n className,\n style: customStyle,\n}: UIIconProps) {\n // Build CSS classes\n // 'anticon' class is required so Ant Design components (e.g. Tag icon prop)\n // apply correct margin/spacing — it's the standard Ant Design icon marker class\n const classes = [\n styles.uiIcon,\n 'anticon',\n styles[`size-${size}`],\n styles[`color-${color}`],\n spin && styles.spin,\n onClick && styles.clickable,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Resolve icon: name prop > string icon > React element icon\n let iconElement: React.ReactNode = null;\n\n const iconName = name || (typeof icon === 'string' ? icon : null);\n if (iconName) {\n if (_iconRenderer) {\n iconElement = _iconRenderer(iconName);\n } else {\n console.warn(`Icon \"${iconName}\" could not be loaded. Call registerIconRenderer() at app startup.`);\n iconElement = null;\n }\n } else if (React.isValidElement(icon)) {\n iconElement = icon;\n }\n\n if (!iconElement) {\n return null;\n }\n\n return (\n <span\n className={classes}\n style={customStyle}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {iconElement}\n </span>\n );\n}\n\n/**\n * Icon helper for common use cases\n */\nexport const UIIconButton = ({\n icon,\n name,\n onClick,\n size = 'base',\n color = 'primary',\n ...props\n}: UIIconProps) => (\n <UIIcon\n icon={icon}\n name={name}\n size={size}\n color={color}\n onClick={onClick}\n style={{ cursor: 'pointer', transition: 'opacity 0.2s', ...props.style }}\n {...props}\n />\n);\n","/**\n * UIAvatar component - User avatar\n *\n * Wraps Ant Design Avatar.\n */\n\nimport * as React from 'react';\nimport { Avatar as AntAvatar, type AvatarProps as AntAvatarProps } from 'antd';\n\nexport interface UIAvatarProps extends AntAvatarProps {}\n\nexport function UIAvatar(props: UIAvatarProps) {\n return <AntAvatar {...props} />;\n}\n\nexport function UIAvatarGroup(props: React.ComponentProps<typeof AntAvatar.Group>) {\n return <AntAvatar.Group {...props} />;\n}\n","/**\n * useUITheme - Access design tokens from the current theme\n *\n * Wraps antd's theme.useToken() to decouple app from antd internals.\n *\n * @example\n * ```tsx\n * import { useUITheme } from '@kb-labs/studio-ui-kit';\n *\n * function MyComponent() {\n * const { token } = useUITheme();\n * return <div style={{ color: token.colorPrimary }}>Themed text</div>;\n * }\n * ```\n */\n\nimport { theme, type GlobalToken } from 'antd';\n\nexport interface UIThemeResult {\n token: GlobalToken;\n hashId: string;\n theme: ReturnType<typeof theme.useToken>['theme'];\n}\n\nexport function useUITheme(): UIThemeResult {\n const result = theme.useToken();\n return result as UIThemeResult;\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n * Classic \"Cursor / ClickUp\" loading text effect.\n */\n\n.shimmer {\n background: linear-gradient(\n 90deg,\n var(--shimmer-color-1, #888) 0%,\n var(--shimmer-color-2, #888) 25%,\n var(--shimmer-highlight, #fff) 50%,\n var(--shimmer-color-2, #888) 75%,\n var(--shimmer-color-1, #888) 100%\n );\n background-size: 200% 100%;\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: shimmerMove var(--shimmer-duration, 2s) linear infinite;\n display: inline-block;\n}\n\n@keyframes shimmerMove {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n *\n * Text stays visible but a highlight sweeps across it — the\n * classic \"Cursor / ClickUp / Codex\" loading text effect.\n * Pure CSS, zero dependencies, respects dark/light themes.\n */\n\nimport * as React from 'react';\nimport styles from './UIShimmerText.module.css';\n\nexport interface UIShimmerTextProps {\n /** Text to display with shimmer effect */\n children: React.ReactNode;\n /**\n * Base text color (the \"dim\" parts of the gradient).\n * Defaults to current text color via CSS variable.\n * @default 'var(--text-secondary, #6B7280)'\n */\n color?: string;\n /**\n * Highlight color that sweeps across.\n * @default 'var(--text-primary, #111827)'\n */\n highlight?: string;\n /**\n * Animation duration.\n * @default '2s'\n */\n duration?: string;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIShimmerText - Text with animated shimmer sweep\n *\n * @example\n * // Basic\n * <UIShimmerText>Initializing plugins and widgets</UIShimmerText>\n *\n * // Custom colors\n * <UIShimmerText highlight=\"#6366f1\" color=\"#c7d2fe\">\n * Loading workspace...\n * </UIShimmerText>\n *\n * // Faster sweep\n * <UIShimmerText duration=\"1.2s\">Processing...</UIShimmerText>\n */\nexport function UIShimmerText({\n children,\n color = 'var(--text-secondary, #9CA3AF)',\n highlight = 'var(--text-primary, #111827)',\n duration = '2s',\n className,\n style,\n}: UIShimmerTextProps) {\n return (\n <span\n className={[styles.shimmer, className].filter(Boolean).join(' ')}\n style={{\n '--shimmer-color-1': color,\n '--shimmer-color-2': color,\n '--shimmer-highlight': highlight,\n '--shimmer-duration': duration,\n ...style,\n } as React.CSSProperties}\n >\n {children}\n </span>\n );\n}\n","/**\n * UICopyButton — one-click copy with built-in visual feedback.\n *\n * Shows a checkmark for 1.5s after copying, no toast required.\n * Accepts `value` to copy and optional `label` for accessibility.\n */\n\nimport * as React from 'react';\nimport { UIButton } from './UIButton';\nimport { UIIcon } from './UIIcon';\nimport type { UIButtonProps } from './UIButton';\n\nexport interface UICopyButtonProps\n extends Omit<UIButtonProps, 'onClick' | 'icon' | 'children' | 'variant'> {\n /** Text to copy */\n value: string;\n /** Button size */\n size?: 'small' | 'middle' | 'large';\n /** Show label next to icon */\n label?: string;\n}\n\nexport function UICopyButton({ value, size = 'small', label, style, ...rest }: UICopyButtonProps) {\n const [copied, setCopied] = React.useState(false);\n\n const handleCopy = (e: React.MouseEvent) => {\n e.stopPropagation();\n navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n });\n };\n\n return (\n <UIButton\n variant=\"text\"\n size={size}\n icon={\n <UIIcon\n name={copied ? 'CheckOutlined' : 'CopyOutlined'}\n style={{ color: copied ? '#52c41a' : undefined, transition: 'color 150ms ease' }}\n />\n }\n onClick={handleCopy}\n style={{ transition: 'opacity 150ms ease', ...style }}\n {...rest}\n >\n {label}\n </UIButton>\n );\n}\n","import * as React from 'react';\nimport { Card, theme, Tooltip } from 'antd';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport interface UIMetricCardProps {\n /** Metric label */\n label: string;\n /** Metric value */\n value: string | number;\n /** Icon shown in colored badge */\n icon?: React.ReactNode;\n /** Color theme for the icon badge */\n status?: 'default' | 'info' | 'success' | 'warning' | 'error';\n /** Trend direction */\n trend?: 'up' | 'down' | 'neutral';\n /** Change delta (percentage) */\n delta?: number;\n /** Value unit (e.g., '%', 'ms', '$') */\n unit?: string;\n /** Card size */\n size?: 'small' | 'default';\n /** Show/hide delta */\n showDelta?: boolean;\n /** Loading state */\n loading?: boolean;\n}\n\nexport function UIMetricCard({\n label,\n value,\n icon,\n status = 'default',\n trend = 'neutral',\n delta,\n unit,\n size = 'default',\n showDelta = true,\n loading = false,\n}: UIMetricCardProps) {\n const { token } = useToken();\n\n const iconBgMap: Record<string, string> = {\n default: token.colorFillSecondary,\n info: token.colorInfoBg,\n success: token.colorSuccessBg,\n warning: token.colorWarningBg,\n error: token.colorErrorBg,\n };\n\n const iconColorMap: Record<string, string> = {\n default: token.colorTextSecondary,\n info: token.colorInfo,\n success: token.colorSuccess,\n warning: token.colorWarning,\n error: token.colorError,\n };\n\n const trendColor =\n trend === 'up' ? token.colorSuccess :\n trend === 'down' ? token.colorError :\n token.colorTextSecondary;\n\n const trendIcon = trend === 'up' ? '↑' : trend === 'down' ? '↓' : '';\n\n return (\n <Card size={size} loading={loading} style={{ height: '100%' }}>\n <UIBox>\n {icon && (\n <div style={{\n width: 36,\n height: 36,\n borderRadius: token.borderRadiusSM,\n backgroundColor: iconBgMap[status],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: iconColorMap[status],\n fontSize: 16,\n marginBottom: token.marginSM,\n }}>\n {icon}\n </div>\n )}\n\n <UIText size=\"sm\" color=\"secondary\" as=\"div\">\n {label}\n </UIText>\n\n <Tooltip title={String(value)} mouseEnterDelay={0.6}>\n <UIFlex align=\"baseline\" gap={2} style={{ marginTop: 4, overflow: 'hidden' }}>\n <UIText\n size=\"2xl\"\n weight=\"bold\"\n as=\"div\"\n style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', minWidth: 0 }}\n >\n {value}\n </UIText>\n {unit && (\n <UIText size=\"base\" color=\"secondary\" style={{ flexShrink: 0 }}>\n {unit}\n </UIText>\n )}\n </UIFlex>\n </Tooltip>\n\n {showDelta && delta !== undefined && (\n <UIFlex align=\"center\" gap={1} style={{ marginTop: token.marginXS }}>\n <UIText size=\"sm\" style={{ color: delta >= 0 ? token.colorSuccess : token.colorError }}>\n {trendIcon} {Math.abs(delta)}%\n </UIText>\n </UIFlex>\n )}\n </UIBox>\n </Card>\n );\n}\n","/**\n * UITable component - Data table\n *\n * Wraps Ant Design Table with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Table as AntTable } from 'antd';\nimport type { ColumnType } from 'antd/es/table';\nimport type { ExpandableConfig } from 'antd/es/table/interface';\n\nexport interface UITableColumn<T = any> extends ColumnType<T> {\n /** Column key */\n key: string;\n /** Column title */\n title: string;\n /** Data index (object key) */\n dataIndex?: string;\n /** Custom render function */\n render?: (value: any, record: T, index: number) => React.ReactNode;\n /** Column width */\n width?: number | string;\n /** Sortable column */\n sorter?: boolean | ((a: T, b: T) => number);\n /** Filterable column */\n filters?: { text: string; value: any }[];\n /** Default filter value */\n defaultFilteredValue?: any[];\n /** Custom filter function */\n onFilter?: (value: any, record: T) => boolean;\n /** Fixed column */\n fixed?: 'left' | 'right';\n /** Ellipsis text */\n ellipsis?: boolean;\n}\n\nexport interface UITableProps<T = any> {\n /** Table columns */\n columns: UITableColumn<T>[];\n /** Table data */\n dataSource: T[];\n /** Row key field */\n rowKey?: string | ((record: T) => string);\n /** Loading state */\n loading?: boolean;\n /** Show pagination */\n pagination?: false | { pageSize?: number; current?: number; total?: number };\n /** Row selection */\n rowSelection?: {\n selectedRowKeys?: React.Key[];\n onChange?: (selectedRowKeys: React.Key[], selectedRows: T[]) => void;\n };\n /** Row click handler */\n onRow?: (record: T) => {\n onClick?: () => void;\n onDoubleClick?: () => void;\n };\n /** Table size */\n size?: 'small' | 'middle' | 'large';\n /** Show border */\n bordered?: boolean;\n /** Expandable row config */\n expandable?: ExpandableConfig<T>;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Scroll config */\n scroll?: { x?: number | string | true; y?: number | string };\n}\n\n/**\n * UITable - Data table\n *\n * @example\n * ```tsx\n * <UITable\n * columns={[\n * { key: 'name', title: 'Name', dataIndex: 'name', sorter: true },\n * { key: 'age', title: 'Age', dataIndex: 'age', width: 100 },\n * { key: 'status', title: 'Status', dataIndex: 'status',\n * render: (status) => <UIBadge variant={status}>{status}</UIBadge>\n * },\n * ]}\n * dataSource={data}\n * rowKey=\"id\"\n * loading={isLoading}\n * />\n *\n * <UITable\n * columns={columns}\n * dataSource={workflows}\n * rowKey=\"workflowId\"\n * rowSelection={{\n * selectedRowKeys,\n * onChange: setSelectedRowKeys,\n * }}\n * onRow={(record) => ({\n * onClick: () => handleRowClick(record),\n * })}\n * />\n * ```\n */\nexport function UITable<T extends Record<string, any> = any>({\n columns,\n dataSource,\n rowKey = 'id',\n loading,\n pagination,\n rowSelection,\n onRow,\n size = 'middle',\n bordered = false,\n expandable,\n className,\n style,\n scroll,\n}: UITableProps<T>) {\n return (\n <AntTable<T>\n columns={columns}\n dataSource={dataSource}\n rowKey={rowKey}\n loading={loading}\n pagination={pagination}\n rowSelection={rowSelection}\n onRow={onRow}\n size={size}\n bordered={bordered}\n expandable={expandable}\n className={className}\n style={style}\n scroll={scroll}\n />\n );\n}\n","import { useMemo } from 'react';\n\n/**\n * Chart color palette configuration\n *\n * Provides a consistent color palette for charts based on Ant Design tokens.\n * Colors are optimized for data visualization with good contrast and accessibility.\n */\nexport interface ChartColorPalette {\n /** Primary colors for main data series (10 colors) */\n colors: string[];\n /** Extended palette for complex charts (20 colors) */\n extendedColors: string[];\n /** Get color by index with automatic wrapping */\n getColor: (index: number) => string;\n /** Map data series to colors by field value */\n mapColors: (data: any[], colorField: string) => Record<string, string>;\n}\n\n/**\n * Hook to get chart color palette based on current theme\n *\n * Returns a palette of 10 primary colors and 20 extended colors,\n * plus helper functions for color mapping.\n *\n * @example\n * ```tsx\n * const palette = useChartColors();\n *\n * // Get color by index\n * const color = palette.getColor(0); // First color\n *\n * // Map data to colors\n * const colorMap = palette.mapColors(data, 'category');\n * // { 'Category A': '#1890ff', 'Category B': '#52c41a', ... }\n * ```\n */\nexport function useChartColors(): ChartColorPalette {\n return useMemo(() => {\n // Primary palette (10 colors) - for most charts\n // Using hardcoded Ant Design default colors to ensure consistency\n // (token colors may not be available in all contexts)\n const colors = [\n '#1677ff', // Blue (colorInfo default)\n '#52c41a', // Green (colorSuccess default)\n '#faad14', // Orange (colorWarning default)\n '#ff4d4f', // Red (colorError default)\n '#1890ff', // Primary blue\n '#722ed1', // Purple\n '#eb2f96', // Magenta\n '#13c2c2', // Cyan\n '#fa8c16', // Volcano\n '#2f54eb', // Geek blue\n ];\n\n console.log('[useChartColors] Created palette:', { colors });\n\n // Extended palette (20 colors) - for complex charts\n // Using hardcoded colors for consistency (not theme tokens)\n const extendedColors = [\n ...colors,\n '#e6f4ff', // Light blue (colorInfoBg equivalent)\n '#f6ffed', // Light green (colorSuccessBg equivalent)\n '#fffbe6', // Light yellow (colorWarningBg equivalent)\n '#fff2f0', // Light red (colorErrorBg equivalent)\n '#e6f4ff', // Light blue (colorPrimaryBg equivalent)\n '#f759ab', // Light magenta\n '#9254de', // Light purple\n '#40a9ff', // Light blue\n '#73d13d', // Light green\n '#ffc53d', // Light yellow\n ];\n\n const getColor = (index: number): string => {\n return colors[index % colors.length] || '#1890ff';\n };\n\n const mapColors = (data: any[], colorField: string): Record<string, string> => {\n const uniqueValues = Array.from(\n new Set(data.map(item => String(item[colorField] ?? '')))\n );\n const colorMap: Record<string, string> = {};\n\n uniqueValues.forEach((value, index) => {\n colorMap[value] = getColor(index);\n });\n\n return colorMap;\n };\n\n return {\n colors,\n extendedColors,\n getColor,\n mapColors,\n };\n }, []); // Empty deps - colors are hardcoded and don't need to update\n}\n\n/**\n * Create style.fill function for @ant-design/charts\n *\n * @param colorMap - Map of field values to colors\n * @param colorField - Name of the field to use for color mapping\n *\n * @example\n * ```tsx\n * const palette = useChartColors();\n * const colorMap = palette.mapColors(data, 'type');\n *\n * const config = {\n * colorField: 'type',\n * style: {\n * fill: createFillFunction(colorMap, 'type'),\n * },\n * };\n * ```\n */\nexport function createFillFunction(\n colorMap: Record<string, string>,\n colorField: string\n): (datum: any) => string {\n return (datum: any) => {\n const value = String(datum[colorField] ?? '');\n const firstKey = Object.keys(colorMap)[0];\n return colorMap[value] || (firstKey ? colorMap[firstKey] : '#1890ff') || '#1890ff';\n };\n}\n","import * as React from 'react';\nimport { Line } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { LineConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UILineChartProps extends Omit<LineConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually via style.fill\n */\n disableAutoColors?: boolean;\n seriesField?: string;\n}\n\n/**\n * UILineChart - Line chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Line component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UILineChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * />\n *\n * // Custom colors\n * <UILineChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * colors={['#ff0000', '#00ff00']}\n * />\n *\n * // Manual color control via scale\n * <UILineChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * disableAutoColors\n * scale={{\n * color: {\n * range: ['#ff0000', '#00ff00']\n * }\n * }}\n * />\n * ```\n */\nexport function UILineChart({ colors, disableAutoColors, ...props }: UILineChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if colorField or seriesField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n // For Line charts, colors are mapped via either colorField or seriesField\n const hasColorField = props.colorField || props.seriesField;\n\n console.log('[UILineChart] Debug info:', {\n hasColorField,\n colorField: props.colorField,\n seriesField: props.seriesField,\n disableAutoColors,\n hasData: !!props.data,\n dataLength: props.data?.length,\n customColors: colors,\n paletteColors: palette.colors,\n });\n\n if (disableAutoColors || !hasColorField || !props.data) {\n console.log('[UILineChart] Skipping auto-colors:', {\n disableAutoColors,\n hasColorField,\n hasData: !!props.data,\n });\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n console.log('[UILineChart] Applying colors:', {\n source: colors ? 'custom' : 'palette',\n colors: colorSource,\n });\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Line {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Column } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { ColumnConfig } from '@ant-design/charts';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n colors10: [\n token.colorInfo,\n token.colorSuccess,\n token.colorWarning,\n token.colorError,\n token.colorPrimary,\n token.colorInfoBg,\n token.colorSuccessBg,\n token.colorWarningBg,\n token.colorErrorBg,\n token.colorPrimaryBg,\n ],\n colors20: [\n token.colorInfo,\n token.colorSuccess,\n token.colorWarning,\n token.colorError,\n token.colorPrimary,\n token.colorInfoBg,\n token.colorSuccessBg,\n token.colorWarningBg,\n token.colorErrorBg,\n token.colorPrimaryBg,\n token.colorInfoBorder,\n token.colorSuccessBorder,\n token.colorWarningBorder,\n token.colorErrorBorder,\n token.colorPrimaryBorder,\n token.colorInfoText,\n token.colorSuccessText,\n token.colorWarningText,\n token.colorErrorText,\n token.colorPrimaryText,\n ],\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIColumnChartProps extends Omit<ColumnConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n */\n colors?: string[];\n}\n\n/**\n * UIColumnChart - Column chart with automatic theming\n *\n * Wrapper around @ant-design/charts Column component that uses theme tokens\n * for automatic light/dark mode support.\n *\n * @example\n * ```tsx\n * <UIColumnChart\n * data={data}\n * xField=\"category\"\n * yField=\"value\"\n * colorField=\"type\"\n * />\n * ```\n */\nexport function UIColumnChart({ colors, ...props }: UIColumnChartProps) {\n const chartTheme = useChartTheme();\n\n // Merge theme with custom colors if provided\n const mergedTheme = colors\n ? {\n ...chartTheme,\n colors10: colors,\n colors20: colors,\n }\n : chartTheme;\n\n return <Column {...props} theme={mergedTheme} />;\n}\n","import * as React from 'react';\nimport { Area } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { AreaConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIAreaChartProps extends Omit<AreaConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually via style.fill\n */\n disableAutoColors?: boolean;\n}\n\n/**\n * UIAreaChart - Area chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Area component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UIAreaChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * />\n *\n * // Custom colors\n * <UIAreaChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * colors={['#ff0000', '#00ff00']}\n * />\n *\n * // Manual color control via scale\n * <UIAreaChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * disableAutoColors\n * scale={{\n * color: {\n * range: ['#ff0000', '#00ff00']\n * }\n * }}\n * />\n * ```\n */\nexport function UIAreaChart({ colors, disableAutoColors, ...props }: UIAreaChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if colorField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n if (disableAutoColors || !props.colorField || !props.data) {\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Area {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Pie } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { PieConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIPieChartProps extends Omit<PieConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually\n */\n disableAutoColors?: boolean;\n}\n\n/**\n * UIPieChart - Pie/Donut chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Pie component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UIPieChart\n * data={data}\n * angleField=\"value\"\n * colorField=\"category\"\n * />\n * ```\n *\n * @example Donut chart\n * ```tsx\n * <UIPieChart\n * data={data}\n * angleField=\"value\"\n * colorField=\"category\"\n * innerRadius={0.6}\n * />\n * ```\n */\nexport function UIPieChart({ colors, disableAutoColors, ...props }: UIPieChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if colorField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n if (disableAutoColors || !props.colorField || !props.data) {\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Pie {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Bar } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { BarConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIBarChartProps extends Omit<BarConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually\n */\n disableAutoColors?: boolean;\n}\n\n/**\n * UIBarChart - Horizontal bar chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Bar component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UIBarChart\n * data={data}\n * xField=\"value\"\n * yField=\"category\"\n * seriesField=\"type\"\n * />\n *\n * // Custom colors\n * <UIBarChart\n * data={data}\n * xField=\"value\"\n * yField=\"category\"\n * seriesField=\"type\"\n * colors={['#ff0000', '#00ff00']}\n * />\n * ```\n */\nexport function UIBarChart({ colors, disableAutoColors, ...props }: UIBarChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if seriesField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n if (disableAutoColors || !props.seriesField || !props.data) {\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Bar {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Card } from 'antd';\nimport dayjs from 'dayjs';\nimport { UILineChart } from './UILineChart';\nimport { UIText } from '../../primitives';\nimport { useChartColors } from './useChartColors';\nimport type { LineConfig } from '@ant-design/charts';\n\n/**\n * Configuration for chart metrics\n */\nexport interface ChartMetricConfig {\n /**\n * Metric key from data object\n * - For top-level fields: use the field name directly (e.g., 'count')\n * - For nested fields: data will be extracted from record.metrics[key] if metrics object exists\n */\n key: string;\n\n /**\n * Display label for the metric\n */\n label: string;\n\n /**\n * Optional transformer function to convert raw value to display value\n * Example: (v) => v / 1000 to convert tokens to K tokens\n */\n transform?: (value: number) => number;\n\n /**\n * Optional formatter for tooltip\n */\n format?: (value: number) => string;\n}\n\nexport interface UIStatisticsChartProps {\n /**\n * Chart data - can be either:\n * 1. Pre-transformed: Array<{ [xField]: string, [yField]: number, [colorField]: string }>\n * 2. Raw DailyStats: Array<{ date: string, count: number, metrics: { [key]: number } }>\n */\n data: any[] | undefined;\n\n /**\n * Loading state\n */\n loading?: boolean;\n\n /**\n * Chart title\n */\n title?: string;\n\n /**\n * Metrics to display on the chart\n * Each metric will be shown as a separate line\n *\n * Only used when data transformation is needed (raw DailyStats format)\n */\n metrics?: ChartMetricConfig[];\n\n /**\n * X-axis field name (default: 'date')\n */\n xField?: string;\n\n /**\n * Y-axis field name (default: 'value')\n */\n yField?: string;\n\n /**\n * Color field name (default: 'category')\n */\n colorField?: string;\n\n /**\n * Optional card style\n */\n style?: React.CSSProperties;\n\n /**\n * Chart height in pixels\n */\n height?: number;\n\n /**\n * Show legend (default: true)\n */\n showLegend?: boolean;\n\n /**\n * Additional LineChart props\n */\n chartProps?: Partial<LineConfig>;\n}\n\n/**\n * UIStatisticsChart - Reusable statistics chart with legend and loading states\n *\n * Specialized chart component for displaying time-series statistics with automatic theming.\n * Includes built-in legend, loading states, and empty states.\n *\n * Supports two data formats:\n * 1. Pre-transformed chart data (simple array of objects with xField, yField, colorField)\n * 2. Raw DailyStats format (automatically transforms using metrics config)\n *\n * @example Pre-transformed data\n * ```tsx\n * <UIStatisticsChart\n * data={[\n * { date: '2024-01-01', value: 100, category: 'Requests' },\n * { date: '2024-01-01', value: 5000, category: 'Tokens' },\n * ]}\n * loading={isLoading}\n * title=\"Daily Usage\"\n * />\n * ```\n *\n * @example Raw DailyStats with transformation\n * ```tsx\n * <UIStatisticsChart\n * data={dailyStats}\n * loading={isLoading}\n * title=\"Daily Usage Trend\"\n * metrics={[\n * { key: 'count', label: 'Requests' },\n * { key: 'totalTokens', label: 'Tokens (K)', transform: (v) => v / 1000 },\n * { key: 'totalCost', label: 'Cost ($)', format: (v) => `$${v.toFixed(2)}` },\n * ]}\n * />\n * ```\n */\nexport function UIStatisticsChart({\n data,\n loading = false,\n title,\n metrics = [],\n xField = 'date',\n yField = 'value',\n colorField = 'category',\n style,\n height = 350,\n showLegend = true,\n chartProps,\n}: UIStatisticsChartProps) {\n const palette = useChartColors();\n\n // Chart colors from centralized palette\n const chartColors = React.useMemo(\n () => palette.colors.slice(0, Math.max(metrics.length, 3)),\n [palette.colors, metrics.length]\n );\n\n // Transform data if metrics are provided (raw DailyStats format)\n const chartData = React.useMemo(() => {\n if (!data) {\n return [];\n }\n\n // If no metrics provided, assume data is already in chart format\n if (metrics.length === 0) {\n return data;\n }\n\n // Transform raw DailyStats to chart format\n return data.flatMap((stat) => {\n const rows: Array<{ [key: string]: any }> = [];\n\n for (const metric of metrics) {\n let value: number;\n\n // Extract value: check top-level first, then metrics object\n if (metric.key in stat && typeof stat[metric.key] === 'number') {\n // Top-level field (e.g., 'count')\n value = stat[metric.key];\n } else if (stat.metrics && metric.key in stat.metrics) {\n // Nested in metrics object\n value = stat.metrics[metric.key];\n } else {\n // Not found, default to 0\n value = 0;\n }\n\n // Apply transformation if provided\n if (metric.transform) {\n value = metric.transform(value);\n }\n\n rows.push({\n [xField]: stat.date ? dayjs(stat.date).format('YYYY-MM-DD') : stat[xField],\n [colorField]: metric.label,\n [yField]: value,\n });\n }\n\n return rows;\n });\n }, [data, metrics, xField, yField, colorField]);\n\n // Render legend\n const renderLegend = () => {\n if (!showLegend || metrics.length === 0) {\n return null;\n }\n\n return (\n <div style={{ display: 'flex', justifyContent: 'flex-end', marginBottom: 12, gap: 16 }}>\n {metrics.map((metric, index) => (\n <div key={metric.label} style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <span\n style={{\n display: 'inline-block',\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: chartColors[index % chartColors.length],\n }}\n />\n <span style={{ fontSize: 13, fontWeight: 500 }}>{metric.label}</span>\n </div>\n ))}\n </div>\n );\n };\n\n // Render function for content\n const renderContent = () => (\n <>\n {loading && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UIText color=\"secondary\">Loading chart data...</UIText>\n </div>\n )}\n\n {!loading && (!chartData || chartData.length === 0) && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UIText color=\"secondary\">No data available for the selected date range</UIText>\n </div>\n )}\n\n {!loading && chartData && chartData.length > 0 && (\n <div>\n {renderLegend()}\n\n\n {/* @ts-expect-error @ant-design/charts LineConfig overloads produce a 44-variant union incompatible with JSX strict checking */}\n <UILineChart\n data={chartData}\n xField={xField}\n yField={yField}\n colorField={colorField}\n height={height}\n colors={chartColors}\n scale={{\n color: {\n range: chartColors,\n },\n }}\n axis={{\n x: {\n label: {\n autoRotate: false,\n },\n },\n y: {\n label: {\n formatter: (v: string) => {\n const num = Number(v);\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}M`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}K`;\n }\n return num.toLocaleString();\n },\n },\n },\n }}\n style={{\n shape: 'smooth',\n lineWidth: 2,\n }}\n legend={false}\n tooltip={{\n title: (d: any) => d[xField],\n items: [\n (d: any) => {\n const metric = metrics.find((m) => m.label === d[colorField]);\n const metricIndex = metrics.findIndex((m) => m.label === d[colorField]);\n let formattedValue = d[yField]?.toLocaleString() || '0';\n\n if (metric?.format && d[yField] != null) {\n formattedValue = metric.format(d[yField]);\n }\n\n return {\n name: d[colorField],\n value: formattedValue,\n color: chartColors[metricIndex >= 0 ? metricIndex : 0],\n };\n },\n ],\n }}\n {...chartProps}\n />\n </div>\n )}\n </>\n );\n\n // Render with or without Card wrapper depending on title\n if (title) {\n return (\n <Card title={title} style={{ marginTop: 16, ...style }}>\n {renderContent()}\n </Card>\n );\n }\n\n // No title - render content directly\n return <div style={style}>{renderContent()}</div>;\n}\n","/**\n * UIStatistic component - Statistic display\n *\n * Wraps Ant Design Statistic for displaying numeric values with titles.\n */\n\nimport * as React from 'react';\nimport { Statistic as AntStatistic, type StatisticProps as AntStatisticProps } from 'antd';\n\nexport interface UIStatisticProps extends AntStatisticProps {}\n\nexport function UIStatistic(props: UIStatisticProps) {\n return <AntStatistic {...props} />;\n}\n\nexport function UIStatisticCountdown(props: React.ComponentProps<typeof AntStatistic.Countdown>) {\n return <AntStatistic.Countdown {...props} />;\n}\n","/**\n * UIProgress component - Progress indicator\n *\n * Wraps Ant Design Progress for displaying completion status.\n */\n\nimport * as React from 'react';\nimport { Progress as AntProgress, type ProgressProps as AntProgressProps } from 'antd';\n\nexport interface UIProgressProps extends AntProgressProps {}\n\nexport function UIProgress(props: UIProgressProps) {\n return <AntProgress {...props} />;\n}\n","/**\n * UIDescriptions component - Description list\n *\n * Wraps Ant Design Descriptions for displaying key-value pairs.\n */\n\nimport * as React from 'react';\nimport { Descriptions as AntDescriptions, type DescriptionsProps as AntDescriptionsProps } from 'antd';\n\nexport interface UIDescriptionsProps extends AntDescriptionsProps {}\n\nexport function UIDescriptions(props: UIDescriptionsProps) {\n return <AntDescriptions {...props} />;\n}\n\nexport function UIDescriptionsItem(props: React.ComponentProps<typeof AntDescriptions.Item>) {\n return <AntDescriptions.Item {...props} />;\n}\n","/**\n * UITimeline component - Timeline display\n *\n * Wraps Ant Design Timeline for displaying chronological events.\n */\n\nimport * as React from 'react';\nimport { Timeline as AntTimeline, type TimelineProps as AntTimelineProps } from 'antd';\n\nexport interface UITimelineProps extends AntTimelineProps {}\n\nexport function UITimeline(props: UITimelineProps) {\n return <AntTimeline {...props} />;\n}\n\nexport function UITimelineItem(props: React.ComponentProps<typeof AntTimeline.Item>) {\n return <AntTimeline.Item {...props} />;\n}\n","/**\n * UITree component - Tree view\n *\n * Wraps Ant Design Tree for hierarchical data display.\n */\n\nimport * as React from 'react';\nimport { Tree as AntTree, type TreeProps as AntTreeProps } from 'antd';\n\nexport interface UITreeProps extends AntTreeProps {}\n\nexport function UITree(props: UITreeProps) {\n return <AntTree {...props} />;\n}\n\nexport function UITreeDirectoryTree(props: React.ComponentProps<typeof AntTree.DirectoryTree>) {\n return <AntTree.DirectoryTree {...props} />;\n}\n\nexport function UITreeNode(props: React.ComponentProps<typeof AntTree.TreeNode>) {\n return <AntTree.TreeNode {...props} />;\n}\n","/**\n * UIList component - List display\n *\n * Wraps Ant Design List for displaying collections of items.\n */\n\nimport * as React from 'react';\nimport { List as AntList, type ListProps as AntListProps } from 'antd';\n\nexport interface UIListProps<T> extends AntListProps<T> {}\n\nexport function UIList<T>(props: UIListProps<T>) {\n return <AntList<T> {...props} />;\n}\n\nexport function UIListItem(props: React.ComponentProps<typeof AntList.Item>) {\n return <AntList.Item {...props} />;\n}\n\nexport function UIListItemMeta(props: React.ComponentProps<typeof AntList.Item.Meta>) {\n return <AntList.Item.Meta {...props} />;\n}\n","/**\n * UIInput component - Text input with variants\n *\n * Wraps Ant Design Input with semantic variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Input as AntInput } from 'antd';\nimport type { InputProps as AntInputProps } from 'antd';\n\nexport interface UIInputProps extends Omit<AntInputProps, 'onChange'> {\n /** Input value */\n value?: string;\n /** Default value */\n defaultValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Prefix icon/element */\n prefix?: React.ReactNode;\n /** Suffix icon/element */\n suffix?: React.ReactNode;\n /** Max length */\n maxLength?: number;\n /** Show character count */\n showCount?: boolean;\n /** Allow clear */\n allowClear?: boolean;\n /** Change handler (returns value string, not event) */\n onChange?: (value: string) => void;\n /** Enter key handler */\n onPressEnter?: () => void;\n}\n\n/**\n * UIInput - Text input\n *\n * @example\n * ```tsx\n * <UIInput placeholder=\"Enter name\" />\n * <UIInput prefix={<SearchIcon />} placeholder=\"Search...\" />\n * <UIInput allowClear showCount maxLength={100} />\n * ```\n */\nexport function UIInput({\n value,\n defaultValue,\n placeholder,\n disabled,\n prefix,\n suffix,\n maxLength,\n showCount,\n allowClear,\n onChange,\n onPressEnter,\n ...rest\n}: UIInputProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <AntInput\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n prefix={prefix}\n suffix={suffix}\n maxLength={maxLength}\n showCount={showCount}\n allowClear={allowClear}\n onChange={handleChange}\n onPressEnter={onPressEnter}\n {...rest}\n />\n );\n}\n\n/**\n * UIInputPassword - Password input with toggle visibility\n */\nexport function UIInputPassword(props: React.ComponentProps<typeof AntInput.Password>) {\n return <AntInput.Password {...props} />;\n}\n\n/**\n * UIInputTextArea - Multiline text input\n */\nexport function UIInputTextArea(props: React.ComponentProps<typeof AntInput.TextArea>) {\n return <AntInput.TextArea {...props} />;\n}\n\n/**\n * UIInputSearch - Search input with search button\n */\nexport function UIInputSearch(props: React.ComponentProps<typeof AntInput.Search>) {\n return <AntInput.Search {...props} />;\n}\n","/**\n * UISelect component - Dropdown select with icon support\n *\n * Wraps Ant Design Select with enhanced options.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Select as AntSelect } from 'antd';\nimport type { SelectProps as AntSelectProps } from 'antd';\nimport { UIFlex } from '../primitives/UIFlex';\n\nexport interface UISelectOption {\n /** Option label */\n label: string;\n /** Option value */\n value: string | number;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Disabled option */\n disabled?: boolean;\n /** Option description */\n description?: string;\n}\n\nexport interface UISelectProps extends Omit<AntSelectProps, 'options' | 'onChange'> {\n /** Select options */\n options: UISelectOption[];\n /** Selected value */\n value?: string | number | (string | number)[];\n /** Default value */\n defaultValue?: string | number | (string | number)[];\n /** Placeholder */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Allow clear */\n allowClear?: boolean;\n /** Enable search */\n showSearch?: boolean;\n /** Multiple selection */\n mode?: 'multiple' | 'tags';\n /** Change handler (returns value, not event) */\n onChange?: (value: string | number | (string | number)[]) => void;\n}\n\n/**\n * UISelect - Dropdown select\n *\n * @example\n * ```tsx\n * <UISelect\n * options={[\n * { label: 'Option 1', value: 1 },\n * { label: 'Option 2', value: 2, icon: <Icon /> },\n * ]}\n * placeholder=\"Select option\"\n * />\n *\n * <UISelect\n * mode=\"multiple\"\n * options={options}\n * showSearch\n * allowClear\n * />\n * ```\n */\nexport function UISelect({\n options = [],\n value,\n defaultValue,\n placeholder,\n disabled,\n loading,\n allowClear,\n showSearch,\n mode,\n onChange,\n ...rest\n}: UISelectProps) {\n // Transform options to support icon + description\n const transformedOptions = options.map((opt) => ({\n label: opt.icon || opt.description ? (\n <UIFlex align=\"center\" gap={2} style={{ width: '100%' }}>\n {opt.icon && <span>{opt.icon}</span>}\n <span style={{ flex: 1 }}>{opt.label}</span>\n {opt.description && (\n <span style={{ fontSize: '0.85em', opacity: 0.7 }}>\n {opt.description}\n </span>\n )}\n </UIFlex>\n ) : opt.label,\n value: opt.value,\n disabled: opt.disabled,\n }));\n\n return (\n <AntSelect\n options={transformedOptions}\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n loading={loading}\n allowClear={allowClear}\n showSearch={showSearch}\n mode={mode}\n onChange={onChange}\n {...rest}\n />\n );\n}\n","/**\n * UIForm component - Form wrapper with validation\n *\n * Wraps Ant Design Form with consistent layout.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Form as AntForm } from 'antd';\nimport type { FormProps as AntFormProps, FormItemProps as AntFormItemProps } from 'antd';\n\nexport type UIFormLayout = 'horizontal' | 'vertical' | 'inline';\n\nexport interface UIFormProps extends AntFormProps {\n /** Form layout */\n layout?: UIFormLayout;\n /** Submit handler */\n onFinish?: (values: any) => void;\n /** Failed submit handler */\n onFinishFailed?: (errorInfo: any) => void;\n /** Initial form values */\n initialValues?: Record<string, any>;\n /** Form content */\n children: React.ReactNode;\n}\n\n/**\n * UIForm - Form wrapper\n *\n * @example\n * ```tsx\n * <UIForm layout=\"vertical\" onFinish={handleSubmit}>\n * <UIFormItem label=\"Username\" name=\"username\" rules={[{ required: true }]}>\n * <UIInput />\n * </UIFormItem>\n * <UIFormItem>\n * <UIButton variant=\"primary\" htmlType=\"submit\">Submit</UIButton>\n * </UIFormItem>\n * </UIForm>\n * ```\n */\nexport function UIForm({\n layout = 'vertical',\n onFinish,\n onFinishFailed,\n initialValues,\n children,\n ...rest\n}: UIFormProps) {\n return (\n <AntForm\n layout={layout}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n initialValues={initialValues}\n {...rest}\n >\n {children}\n </AntForm>\n );\n}\n\n/**\n * UIFormItem - Form field wrapper\n *\n * @example\n * ```tsx\n * <UIFormItem\n * label=\"Email\"\n * name=\"email\"\n * rules={[\n * { required: true, message: 'Please enter email' },\n * { type: 'email', message: 'Please enter valid email' }\n * ]}\n * >\n * <UIInput type=\"email\" />\n * </UIFormItem>\n * ```\n */\nexport function UIFormItem(props: AntFormItemProps) {\n return <AntForm.Item {...props} />;\n}\n\n/**\n * useForm hook - Form instance hook\n */\nexport const useUIForm = AntForm.useForm;\n\n/**\n * UIFormList - Dynamic form list\n */\nexport function UIFormList(props: React.ComponentProps<typeof AntForm.List>) {\n return <AntForm.List {...props} />;\n}\n","/**\n * UICheckbox component - Checkbox input\n *\n * Wraps Ant Design Checkbox with group support.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Checkbox as AntCheckbox } from 'antd';\nimport { UIBox, type UIBoxSpacingValue } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nexport interface UICheckboxOption {\n /** Option label */\n label: string;\n /** Option value */\n value: string | number;\n /** Disabled option */\n disabled?: boolean;\n /** Option description */\n description?: string;\n}\n\nexport interface UICheckboxProps {\n /** Checkbox label */\n children?: React.ReactNode;\n /** Checked state */\n checked?: boolean;\n /** Default checked state */\n defaultChecked?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Indeterminate state */\n indeterminate?: boolean;\n /** Change handler (returns checked boolean) */\n onChange?: (checked: boolean) => void;\n}\n\nexport interface UICheckboxGroupProps {\n /** Checkbox options */\n options: UICheckboxOption[];\n /** Selected values */\n value?: (string | number)[];\n /** Default selected values */\n defaultValue?: (string | number)[];\n /** Disabled state */\n disabled?: boolean;\n /** Gap between checkboxes (spacing token) */\n gap?: UIBoxSpacingValue;\n /** Change handler (returns array of values) */\n onChange?: (values: (string | number)[]) => void;\n}\n\n/**\n * UICheckbox - Single checkbox\n *\n * @example\n * ```tsx\n * <UICheckbox checked onChange={(checked) => console.log(checked)}>\n * Accept terms\n * </UICheckbox>\n *\n * <UICheckbox indeterminate>Select all</UICheckbox>\n * ```\n */\nexport function UICheckbox({\n children,\n checked,\n defaultChecked,\n disabled,\n indeterminate,\n onChange,\n ...rest\n}: UICheckboxProps) {\n const handleChange = (e: any) => {\n onChange?.(e.target.checked);\n };\n\n return (\n <AntCheckbox\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n indeterminate={indeterminate}\n onChange={handleChange}\n {...rest}\n >\n {children}\n </AntCheckbox>\n );\n}\n\n/**\n * UICheckboxGroup - Checkbox group\n *\n * @example\n * ```tsx\n * <UICheckboxGroup\n * options={[\n * { label: 'Option 1', value: 1 },\n * { label: 'Option 2', value: 2, description: 'With description' },\n * ]}\n * gap={3}\n * onChange={(values) => console.log(values)}\n * />\n * ```\n */\nexport function UICheckboxGroup({\n options,\n value,\n defaultValue,\n disabled,\n gap = 2,\n onChange,\n}: UICheckboxGroupProps) {\n return (\n <AntCheckbox.Group value={value} defaultValue={defaultValue} disabled={disabled} onChange={onChange}>\n <UIBox>\n {options.map((option, index) => (\n <UIBox key={option.value} mb={index < options.length - 1 ? gap : 0}>\n <AntCheckbox value={option.value} disabled={option.disabled}>\n {option.label}\n </AntCheckbox>\n {option.description && (\n <UIText\n size=\"sm\"\n color=\"secondary\"\n as=\"div\"\n style={{ marginLeft: spacing[6], marginTop: spacing[1] }}\n >\n {option.description}\n </UIText>\n )}\n </UIBox>\n ))}\n </UIBox>\n </AntCheckbox.Group>\n );\n}\n","/**\n * UISwitch component - Toggle switch\n *\n * Wraps Ant Design Switch with label positioning.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Switch as AntSwitch } from 'antd';\nimport type { SwitchProps as AntSwitchProps } from 'antd';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UIText } from '../primitives/UIText';\n\nexport type UISwitchSize = 'small' | 'default';\nexport type UISwitchLabelPosition = 'left' | 'right';\n\nexport interface UISwitchProps extends Omit<AntSwitchProps, 'onChange'> {\n /** Checked state */\n checked?: boolean;\n /** Default checked state */\n defaultChecked?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Switch size */\n size?: UISwitchSize;\n /** Label text */\n label?: string;\n /** Label position */\n labelPosition?: UISwitchLabelPosition;\n /** Checked children (text inside switch when on) */\n checkedChildren?: React.ReactNode;\n /** Unchecked children (text inside switch when off) */\n unCheckedChildren?: React.ReactNode;\n /** Change handler (returns checked boolean) */\n onChange?: (checked: boolean) => void;\n}\n\n/**\n * UISwitch - Toggle switch\n *\n * @example\n * ```tsx\n * <UISwitch label=\"Enable notifications\" />\n * <UISwitch label=\"Dark mode\" labelPosition=\"left\" />\n * <UISwitch\n * checkedChildren=\"ON\"\n * unCheckedChildren=\"OFF\"\n * defaultChecked\n * />\n * ```\n */\nexport function UISwitch({\n checked,\n defaultChecked,\n disabled,\n loading,\n size = 'default',\n label,\n labelPosition = 'right',\n checkedChildren,\n unCheckedChildren,\n onChange,\n ...rest\n}: UISwitchProps) {\n const switchElement = (\n <AntSwitch\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n loading={loading}\n size={size}\n checkedChildren={checkedChildren}\n unCheckedChildren={unCheckedChildren}\n onChange={onChange}\n {...rest}\n />\n );\n\n if (!label) {\n return switchElement;\n }\n\n return (\n <UIFlex align=\"center\" gap={2}>\n {labelPosition === 'left' && <UIText>{label}</UIText>}\n {switchElement}\n {labelPosition === 'right' && <UIText>{label}</UIText>}\n </UIFlex>\n );\n}\n","/**\n * UIDatePicker component - Date/time picker\n *\n * Wraps Ant Design DatePicker with variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { DatePicker as AntDatePicker, TimePicker as AntTimePicker } from 'antd';\nimport type { DatePickerProps as AntDatePickerProps, TimePickerProps as AntTimePickerProps } from 'antd';\nimport type { Dayjs } from 'dayjs';\n\nexport interface UIDatePickerProps extends Omit<AntDatePickerProps, 'onChange'> {\n /** Selected date */\n value?: Dayjs | null;\n /** Default date */\n defaultValue?: Dayjs;\n /** Placeholder */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Date format */\n format?: string;\n /** Allow clear */\n allowClear?: boolean;\n /** Show time picker */\n showTime?: boolean;\n /** Change handler (returns Dayjs or null) */\n onChange?: (date: Dayjs | null) => void;\n}\n\nexport interface UITimePickerProps extends Omit<AntTimePickerProps, 'onChange'> {\n /** Selected time */\n value?: Dayjs | null;\n /** Default time */\n defaultValue?: Dayjs;\n /** Placeholder */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Time format */\n format?: string;\n /** Allow clear */\n allowClear?: boolean;\n /** Change handler (returns Dayjs or null) */\n onChange?: (time: Dayjs | null) => void;\n}\n\n/**\n * UIDatePicker - Date picker\n *\n * @example\n * ```tsx\n * <UIDatePicker placeholder=\"Select date\" />\n * <UIDatePicker showTime format=\"YYYY-MM-DD HH:mm:ss\" />\n * <UIDatePicker\n * onChange={(date) => console.log(date?.format('YYYY-MM-DD'))}\n * />\n * ```\n */\nexport function UIDatePicker({\n value,\n defaultValue,\n placeholder,\n disabled,\n format,\n allowClear = true,\n showTime,\n onChange,\n ...rest\n}: UIDatePickerProps) {\n return (\n <AntDatePicker\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n format={format}\n allowClear={allowClear}\n showTime={showTime}\n onChange={onChange}\n {...rest}\n />\n );\n}\n\n/**\n * UITimePicker - Time picker\n *\n * @example\n * ```tsx\n * <UITimePicker placeholder=\"Select time\" />\n * <UITimePicker format=\"HH:mm\" />\n * ```\n */\nexport function UITimePicker({\n value,\n defaultValue,\n placeholder,\n disabled,\n format,\n allowClear = true,\n onChange,\n ...rest\n}: UITimePickerProps) {\n return (\n <AntTimePicker\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n format={format}\n allowClear={allowClear}\n onChange={onChange}\n {...rest}\n />\n );\n}\n\n/**\n * UIRangePicker - Date range picker\n */\nexport function UIRangePicker(props: React.ComponentProps<typeof AntDatePicker.RangePicker>) {\n return <AntDatePicker.RangePicker {...props} />;\n}\n","/**\n * UIInputNumber component - Numeric input\n *\n * Wraps Ant Design InputNumber for numeric value entry.\n */\n\nimport * as React from 'react';\nimport { InputNumber as AntInputNumber, type InputNumberProps as AntInputNumberProps } from 'antd';\n\nexport interface UIInputNumberProps extends AntInputNumberProps {}\n\nexport function UIInputNumber(props: UIInputNumberProps) {\n return <AntInputNumber {...props} />;\n}\n","/**\n * UIRadio component - Radio button\n *\n * Wraps Ant Design Radio and Radio.Group.\n */\n\nimport * as React from 'react';\nimport { Radio as AntRadio, type RadioProps as AntRadioProps, type RadioGroupProps as AntRadioGroupProps } from 'antd';\n\nexport interface UIRadioProps extends AntRadioProps {}\nexport interface UIRadioGroupProps extends AntRadioGroupProps {}\n\nexport function UIRadio(props: UIRadioProps) {\n return <AntRadio {...props} />;\n}\n\nexport function UIRadioGroup(props: UIRadioGroupProps) {\n return <AntRadio.Group {...props} />;\n}\n\n","/**\n * UIUpload component - File upload\n *\n * Wraps Ant Design Upload.\n */\n\nimport * as React from 'react';\nimport { Upload as AntUpload, type UploadProps as AntUploadProps } from 'antd';\n\nexport interface UIUploadProps extends AntUploadProps {}\n\nexport function UIUpload(props: UIUploadProps) {\n return <AntUpload {...props} />;\n}\n\nexport function UIUploadDragger(props: React.ComponentProps<typeof AntUpload.Dragger>) {\n return <AntUpload.Dragger {...props} />;\n}\n","/**\n * UISlider component - Slider input\n *\n * Wraps Ant Design Slider.\n */\n\nimport * as React from 'react';\nimport { Slider as AntSlider, type SliderSingleProps } from 'antd';\n\nexport interface UISliderProps extends SliderSingleProps {}\n\nexport function UISlider(props: UISliderProps) {\n return <AntSlider {...props} />;\n}\n","/**\n * UIBreadcrumb component - Navigation breadcrumb trail\n *\n * Wraps Ant Design Breadcrumb with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Breadcrumb as AntBreadcrumb } from 'antd';\n\nexport interface UIBreadcrumbItem {\n /** Breadcrumb text */\n title: string;\n /** Optional link href */\n href?: string;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Click handler (if no href) */\n onClick?: () => void;\n}\n\nexport interface UIBreadcrumbProps {\n /** Breadcrumb items */\n items: UIBreadcrumbItem[];\n /** Custom separator */\n separator?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * UIBreadcrumb - Navigation breadcrumb\n *\n * @example\n * ```tsx\n * <UIBreadcrumb\n * items={[\n * { title: 'Home', href: '/' },\n * { title: 'Workflows', href: '/workflows' },\n * { title: 'Details' },\n * ]}\n * />\n *\n * <UIBreadcrumb\n * items={[\n * { title: 'Dashboard', icon: <HomeIcon /> },\n * { title: 'Settings', onClick: () => navigate('/settings') },\n * ]}\n * separator=\">\"\n * />\n * ```\n */\nexport function UIBreadcrumb({\n items,\n separator,\n className,\n}: UIBreadcrumbProps) {\n const breadcrumbItems = items.map((item) => ({\n title: item.icon ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n {item.icon}\n <span>{item.title}</span>\n </span>\n ) : item.title,\n href: item.href,\n onClick: item.onClick,\n }));\n\n return (\n <AntBreadcrumb\n items={breadcrumbItems}\n separator={separator}\n className={className}\n />\n );\n}\n","/**\n * UITabs component - Tabbed navigation\n *\n * Wraps Ant Design Tabs with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n *\n * syncUrl modes:\n * - \"search\" — syncs with ?tab= query param (for pages at a fixed path, e.g. /)\n * - \"path\" — syncs with /:tab path segment via navigate (for pages like /settings/:tab)\n */\n\nimport * as React from 'react';\nimport { Tabs as AntTabs } from 'antd';\nimport { useSearchParams, useNavigate, useParams } from 'react-router-dom';\n\nexport interface UITabItem {\n /** Tab key */\n key: string;\n /** Tab label */\n label: string;\n /** Tab icon */\n icon?: React.ReactNode;\n /** Tab content */\n children: React.ReactNode;\n /** Disabled tab */\n disabled?: boolean;\n /** Closable tab */\n closable?: boolean;\n}\n\nexport interface UITabsProps {\n /** Tab items */\n items: UITabItem[];\n /**\n * Sync active tab with URL automatically.\n * - true / \"search\" — uses ?tab= query param, default tab = first item (clean URL)\n * - { mode: \"path\", basePath } — uses /:tab path segment (e.g. \"/settings\")\n */\n syncUrl?: boolean | 'search' | { mode: 'path'; basePath: string };\n /** Controlled active tab key (ignored when syncUrl is set) */\n activeKey?: string;\n /** Default active tab key */\n defaultActiveKey?: string;\n /** Tab position */\n tabPosition?: 'top' | 'right' | 'bottom' | 'left';\n /** Tab type */\n type?: 'line' | 'card';\n /** Tab size */\n size?: 'small' | 'middle' | 'large';\n /** Change handler (called in addition to URL sync) */\n onChange?: (activeKey: string) => void;\n /** Tab edit handler (for closable tabs) */\n onEdit?: (targetKey: string, action: 'add' | 'remove') => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\nfunction UITabsInner({\n items,\n syncUrl,\n activeKey: controlledActiveKey,\n defaultActiveKey,\n tabPosition = 'top',\n type = 'line',\n size = 'middle',\n onChange,\n onEdit,\n className,\n style,\n}: UITabsProps) {\n const [searchParams, setSearchParams] = useSearchParams();\n const navigate = useNavigate();\n const params = useParams<{ tab?: string }>();\n\n const defaultKey = items[0]?.key ?? '';\n\n let activeKey: string | undefined = controlledActiveKey;\n\n const isSearch = syncUrl === true || syncUrl === 'search';\n const isPath = syncUrl && typeof syncUrl === 'object' && syncUrl.mode === 'path';\n\n if (isSearch) {\n activeKey = searchParams.get('tab') ?? defaultKey;\n } else if (isPath) {\n activeKey = params.tab ?? defaultKey;\n }\n\n const handleChange = (key: string) => {\n if (isSearch) {\n setSearchParams(key === defaultKey ? {} : { tab: key });\n } else if (isPath && typeof syncUrl === 'object') {\n const path = key === defaultKey ? syncUrl.basePath : `${syncUrl.basePath}/${key}`;\n navigate(path);\n }\n onChange?.(key);\n };\n\n const tabItems = items.map((item) => ({\n key: item.key,\n label: item.icon ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n {item.icon}\n <span>{item.label}</span>\n </span>\n ) : item.label,\n children: item.children,\n disabled: item.disabled,\n closable: item.closable,\n }));\n\n const handleEdit = onEdit\n ? (targetKey: string | React.MouseEvent | React.KeyboardEvent, action: 'add' | 'remove') => {\n const key = typeof targetKey === 'string' ? targetKey : '';\n onEdit(key, action);\n }\n : undefined;\n\n return (\n <AntTabs\n items={tabItems}\n activeKey={activeKey}\n defaultActiveKey={syncUrl ? undefined : defaultActiveKey}\n tabPosition={tabPosition}\n type={type}\n size={size}\n onChange={handleChange}\n onEdit={handleEdit}\n className={className}\n style={style}\n />\n );\n}\n\nexport function UITabs(props: UITabsProps) {\n return <UITabsInner {...props} />;\n}\n","/**\n * UIAccordion component - Collapsible panels\n *\n * Wraps Ant Design Collapse with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Collapse as AntCollapse } from 'antd';\n\nexport interface UIAccordionItem {\n /** Panel key */\n key: string;\n /** Panel header/title */\n label: string;\n /** Panel content */\n children: React.ReactNode;\n /** Extra content in header */\n extra?: React.ReactNode;\n /** Show arrow */\n showArrow?: boolean;\n /** Collapsible trigger */\n collapsible?: 'header' | 'icon' | 'disabled';\n}\n\nexport interface UIAccordionProps {\n /** Accordion items */\n items: UIAccordionItem[];\n /** Active panel keys */\n activeKey?: string | string[];\n /** Default active panel keys */\n defaultActiveKey?: string | string[];\n /** Accordion mode (allow multiple open) */\n accordion?: boolean;\n /** Bordered style */\n bordered?: boolean;\n /** Ghost style (no border, no background) */\n ghost?: boolean;\n /** Size */\n size?: 'small' | 'middle' | 'large';\n /** Change handler */\n onChange?: (keys: string | string[]) => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIAccordion - Collapsible panels\n *\n * @example\n * ```tsx\n * <UIAccordion\n * items={[\n * {\n * key: '1',\n * label: 'Section 1',\n * children: <div>Content 1</div>,\n * },\n * {\n * key: '2',\n * label: 'Section 2',\n * children: <div>Content 2</div>,\n * },\n * ]}\n * defaultActiveKey={['1']}\n * />\n *\n * <UIAccordion\n * accordion\n * items={sections}\n * onChange={(key) => console.log('Active:', key)}\n * />\n *\n * <UIAccordion\n * ghost\n * items={[\n * {\n * key: 'advanced',\n * label: 'Advanced Options',\n * children: <AdvancedForm />,\n * extra: <UIBadge>New</UIBadge>,\n * },\n * ]}\n * />\n * ```\n */\nexport function UIAccordion({\n items,\n activeKey,\n defaultActiveKey,\n accordion = false,\n bordered = true,\n ghost = false,\n size = 'middle',\n onChange,\n className,\n style,\n}: UIAccordionProps) {\n const collapseItems = items.map((item) => ({\n key: item.key,\n label: item.label,\n children: item.children,\n extra: item.extra,\n showArrow: item.showArrow,\n collapsible: item.collapsible,\n }));\n\n return (\n <AntCollapse\n items={collapseItems}\n activeKey={activeKey}\n defaultActiveKey={defaultActiveKey}\n accordion={accordion}\n bordered={bordered}\n ghost={ghost}\n size={size}\n onChange={onChange}\n className={className}\n style={style}\n />\n );\n}\n","/**\n * UIDropdown component - Dropdown menu\n *\n * Wraps Ant Design Dropdown.\n */\n\nimport * as React from 'react';\nimport { Dropdown as AntDropdown, type DropdownProps as AntDropdownProps } from 'antd';\n\nexport interface UIDropdownProps extends AntDropdownProps {}\n\nexport function UIDropdown(props: UIDropdownProps) {\n return <AntDropdown {...props} />;\n}\n\nexport function UIDropdownButton(props: React.ComponentProps<typeof AntDropdown.Button>) {\n return <AntDropdown.Button {...props} />;\n}\n","/**\n * UISegmented component - Segmented control\n *\n * Wraps Ant Design Segmented for tab-like selection.\n */\n\nimport * as React from 'react';\nimport { Segmented as AntSegmented, type SegmentedProps as AntSegmentedProps } from 'antd';\n\nexport interface UISegmentedProps extends AntSegmentedProps {}\n\nexport function UISegmented(props: UISegmentedProps) {\n return <AntSegmented {...props} />;\n}\n","/**\n * UISteps component - Step indicator\n *\n * Wraps Ant Design Steps for multi-step processes.\n */\n\nimport * as React from 'react';\nimport { Steps as AntSteps, type StepsProps as AntStepsProps } from 'antd';\n\nexport interface UIStepsProps extends AntStepsProps {}\n\nexport function UISteps(props: UIStepsProps) {\n return <AntSteps {...props} />;\n}\n","/**\n * UIMenu component - Navigation menu\n *\n * Wraps Ant Design Menu.\n */\n\nimport * as React from 'react';\nimport { Menu as AntMenu, type MenuProps as AntMenuProps } from 'antd';\n\nexport interface UIMenuProps extends AntMenuProps {}\n\nexport function UIMenu(props: UIMenuProps) {\n return <AntMenu {...props} />;\n}\n","/**\n * UIPage component - Page container with padding and max-width\n *\n * Wraps page content with consistent padding and responsive max-width.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport type UIPageWidth = 'default' | 'wide' | 'full';\n\nexport interface UIPageProps {\n /** Page content */\n children: React.ReactNode;\n /** Max width mode */\n width?: UIPageWidth;\n /**\n * Page variant:\n * - 'default' — transparent background, cards float on grey (dashboard, lists)\n * - 'document' — white card wrapping all content (settings, detail pages)\n */\n variant?: 'default' | 'document';\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIPage - Page container\n *\n * @example\n * ```tsx\n * <UIPage>\n * <UIHeader title=\"Dashboard\" />\n * <div>Content here</div>\n * </UIPage>\n *\n * <UIPage width=\"wide\">\n * <div>Wider content area</div>\n * </UIPage>\n *\n * <UIPage width=\"full\">\n * <div>Full width, no max-width constraint</div>\n * </UIPage>\n * ```\n */\nexport function UIPage({\n children,\n width = 'default',\n variant = 'default',\n className,\n style: customStyle,\n}: UIPageProps) {\n const { token } = useToken();\n\n const maxWidthMap: Record<UIPageWidth, string> = {\n default: '1280px',\n wide: '1600px',\n full: '100%',\n };\n\n const isDocument = variant === 'document';\n\n const style: React.CSSProperties = {\n maxWidth: maxWidthMap[width],\n margin: '0 auto',\n padding: token.padding,\n ...(isDocument && {\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadiusLG,\n boxShadow: token.boxShadow,\n }),\n minHeight: isDocument ? undefined : '100%',\n ...customStyle,\n };\n\n return (\n <UIBox as=\"main\" className={className} style={style}>\n {children}\n </UIBox>\n );\n}\n","/**\n * UIHeader component - Page header with title, subtitle, and breadcrumbs\n *\n * Displays page title with optional subtitle, breadcrumbs, and actions.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UITitle } from '../core/UITitle';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport interface UIHeaderProps {\n /** Page title */\n title: string;\n /** Optional subtitle/description */\n subtitle?: string;\n /** Breadcrumb component */\n breadcrumb?: React.ReactNode;\n /** Action buttons (right side) */\n actions?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIHeader - Page header\n *\n * @example\n * ```tsx\n * <UIHeader\n * title=\"Dashboard\"\n * subtitle=\"Overview of your workspace\"\n * />\n *\n * <UIHeader\n * title=\"Workflows\"\n * breadcrumb={<UIBreadcrumb items={[{ title: 'Home' }, { title: 'Workflows' }]} />}\n * actions={<UIButton variant=\"primary\">Create Workflow</UIButton>}\n * />\n * ```\n */\nexport function UIHeader({\n title,\n subtitle,\n breadcrumb,\n actions,\n className,\n style: customStyle,\n}: UIHeaderProps) {\n const { token } = useToken();\n\n const style: React.CSSProperties = {\n borderBottom: `1px solid ${token.colorBorder}`,\n paddingBottom: spacing[4],\n marginBottom: spacing[6],\n ...customStyle,\n };\n\n return (\n <UIBox className={className} style={style}>\n {breadcrumb && (\n <UIBox mb={2}>\n {breadcrumb}\n </UIBox>\n )}\n\n <UIFlex justify=\"between\" align=\"start\" gap={4}>\n <UIBox style={{ flex: 1 }}>\n <UITitle level={1} style={{ marginBottom: subtitle ? spacing[2] : 0 }}>\n {title}\n </UITitle>\n {subtitle && (\n <UIText size=\"base\" color=\"secondary\">\n {subtitle}\n </UIText>\n )}\n </UIBox>\n\n {actions && (\n <UIBox style={{ flexShrink: 0 }}>\n {actions}\n </UIBox>\n )}\n </UIFlex>\n </UIBox>\n );\n}\n","/**\n * UIPageHeader component - Standard page header\n *\n * Handles title, description, breadcrumbs, actions, back button, icon, tabs.\n * NO hardcoded colors — all via useToken().\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIButton } from '../core/UIButton';\nimport { UIIcon } from '../core/UIIcon';\nimport { UIBreadcrumb } from '../navigation/UIBreadcrumb';\nimport { UIDivider } from '../layout/UIDivider';\nimport { UIText } from '../primitives/UIText';\n\nconst { useToken } = theme;\n\nexport interface UIPageBreadcrumbItem {\n title: string;\n href?: string;\n}\n\nexport interface UIPageHeaderProps {\n /** Page title */\n title: string | React.ReactNode;\n /** Subtitle below title */\n description?: string | React.ReactNode;\n /** Icon displayed left of title */\n icon?: React.ReactNode;\n /** Breadcrumb trail above title */\n breadcrumbs?: UIPageBreadcrumbItem[];\n /** Actions slot — right side (buttons, menus, etc.) */\n actions?: React.ReactNode;\n /** Tabs slot — rendered below divider */\n tabs?: React.ReactNode;\n /** Back button handler — renders ← button */\n onBack?: () => void;\n /** Escape hatch for custom content below description */\n children?: React.ReactNode;\n}\n\n/**\n * UIPageHeader - Standard page header for Studio and plugins\n *\n * @example\n * ```tsx\n * <UIPageHeader\n * title=\"Release Manager\"\n * description=\"Manage deployments and releases\"\n * breadcrumbs={[{ title: 'Plugins' }, { title: 'Release Manager' }]}\n * actions={<UIButton variant=\"primary\">Deploy</UIButton>}\n * onBack={() => navigate(-1)}\n * />\n *\n * <UIPageHeader\n * title=\"Settings\"\n * tabs={<UITabs items={tabItems} />}\n * />\n * ```\n */\nexport function UIPageHeader({\n title,\n description,\n icon,\n breadcrumbs,\n actions,\n tabs,\n onBack,\n children,\n}: UIPageHeaderProps) {\n const { token } = useToken();\n\n const hasTabs = !!tabs;\n\n return (\n <div style={{ marginBottom: hasTabs ? 0 : 24 }}>\n {/* Back button + Breadcrumbs row */}\n {(onBack || (breadcrumbs && breadcrumbs.length > 0)) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n marginBottom: token.marginXS,\n }}\n >\n {onBack && (\n <UIButton\n variant=\"text\"\n size=\"small\"\n icon={<UIIcon name=\"ArrowLeftOutlined\" />}\n onClick={onBack}\n style={{ padding: '0 4px' }}\n />\n )}\n {breadcrumbs && breadcrumbs.length > 0 && (\n <UIBreadcrumb\n items={breadcrumbs.map((item) => ({\n title: item.title,\n ...(item.href ? { href: item.href } : {}),\n }))}\n />\n )}\n </div>\n )}\n\n {/* Title row: icon + title + actions */}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: token.marginSM,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: token.marginSM, minWidth: 0 }}>\n {icon && (\n <span\n style={{\n fontSize: 24,\n color: token.colorPrimary,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {icon}\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n {typeof title === 'string' ? (\n <h2\n style={{\n margin: 0,\n fontFamily: 'var(--font-heading)',\n fontSize: token.fontSizeHeading3,\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color: token.colorTextHeading,\n lineHeight: 1.2,\n }}\n >\n {title}\n </h2>\n ) : (\n title\n )}\n {description && (\n <div style={{ marginTop: 4 }}>\n {typeof description === 'string' ? (\n <UIText color=\"secondary\" size=\"sm\">\n {description}\n </UIText>\n ) : (\n description\n )}\n </div>\n )}\n </div>\n </div>\n\n {actions && (\n <div style={{ display: 'flex', alignItems: 'center', gap: token.marginXS, flexShrink: 0 }}>\n {actions}\n </div>\n )}\n </div>\n\n {/* Escape hatch children */}\n {children && <div style={{ marginTop: token.marginSM }}>{children}</div>}\n\n {/* Tabs with divider */}\n {hasTabs && (\n <>\n <UIDivider style={{ marginBottom: 0 }} />\n {tabs}\n </>\n )}\n </div>\n );\n}\n","/**\n * UIPageSection component - Section within a page\n *\n * Adds consistent bottom margin between page sections.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\n\nexport interface UIPageSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Bottom margin in px, default 24 */\n gap?: number;\n}\n\nexport function UIPageSection({ children, gap = 24, style, ...rest }: UIPageSectionProps) {\n return (\n <div style={{ marginBottom: gap, ...style }} {...rest}>\n {children}\n </div>\n );\n}\n","/**\n * UIAlert component - Alert messages and notifications\n *\n * Wraps Ant Design Alert with semantic variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Alert as AntAlert } from 'antd';\n\nexport type UIAlertVariant = 'success' | 'info' | 'warning' | 'error';\n\nexport interface UIAlertProps {\n /** Alert variant */\n variant?: UIAlertVariant;\n /** Alert title */\n title?: string;\n /** Alert message */\n message: React.ReactNode;\n /** Alert description */\n description?: React.ReactNode;\n /** Show icon */\n showIcon?: boolean;\n /** Closable alert */\n closable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Action button */\n action?: React.ReactNode;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIAlert - Alert message\n *\n * @example\n * ```tsx\n * <UIAlert variant=\"success\" message=\"Success message\" />\n *\n * <UIAlert\n * variant=\"error\"\n * title=\"Error\"\n * message=\"Something went wrong\"\n * description=\"Please try again later\"\n * showIcon\n * closable\n * />\n *\n * <UIAlert\n * variant=\"warning\"\n * message=\"Warning\"\n * action={<UIButton size=\"small\">Action</UIButton>}\n * />\n * ```\n */\nexport function UIAlert({\n variant = 'info',\n title,\n message,\n description,\n showIcon,\n closable,\n onClose,\n action,\n icon,\n className,\n style,\n}: UIAlertProps) {\n return (\n <AntAlert\n type={variant}\n message={title || message}\n description={title ? description || message : description}\n showIcon={showIcon}\n closable={closable}\n onClose={onClose}\n action={action}\n icon={icon}\n className={className}\n style={style}\n />\n );\n}\n","/**\n * UIEmptyState component - Empty state placeholder\n *\n * Displays empty state with icon, title, description, and optional action.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Empty as AntEmpty, theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport interface UIEmptyStateProps {\n /** Empty state icon */\n icon?: React.ReactNode;\n /** Empty state title */\n title?: string;\n /** Empty state description */\n description?: string;\n /** Action button */\n action?: React.ReactNode;\n /** Children rendered below description/action (alias for action) */\n children?: React.ReactNode;\n /** Use default Ant Design empty image */\n useDefaultImage?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Ant Design image prop (e.g. Empty.PRESENTED_IMAGE_SIMPLE) */\n image?: React.ReactNode;\n}\n\n/**\n * UIEmptyState - Empty state placeholder\n *\n * @example\n * ```tsx\n * <UIEmptyState\n * title=\"No workflows\"\n * description=\"Get started by creating your first workflow\"\n * action={<UIButton variant=\"primary\">Create Workflow</UIButton>}\n * />\n *\n * <UIEmptyState\n * icon={<SearchIcon />}\n * title=\"No results found\"\n * description=\"Try adjusting your search criteria\"\n * />\n *\n * <UIEmptyState useDefaultImage />\n * ```\n */\nexport function UIEmptyState({\n icon,\n title,\n description,\n action,\n children,\n useDefaultImage,\n image,\n className,\n style: customStyle,\n}: UIEmptyStateProps) {\n const { token } = useToken();\n\n const content = children ?? action;\n\n if (useDefaultImage || image !== undefined) {\n return (\n <AntEmpty\n description={description}\n image={image}\n className={className}\n style={customStyle}\n >\n {content}\n </AntEmpty>\n );\n }\n\n const style: React.CSSProperties = {\n padding: spacing[8],\n textAlign: 'center',\n ...customStyle,\n };\n\n return (\n <UIBox className={className} style={style}>\n <UIFlex direction=\"column\" align=\"center\" gap={3}>\n {icon && (\n <UIBox style={{ fontSize: '48px', color: token.colorTextSecondary }}>\n {icon}\n </UIBox>\n )}\n\n {title && (\n <UIText size=\"lg\" weight=\"semibold\">\n {title}\n </UIText>\n )}\n\n {description && (\n <UIText size=\"base\" color=\"secondary\">\n {description}\n </UIText>\n )}\n\n {content && <UIBox mt={2}>{content}</UIBox>}\n </UIFlex>\n </UIBox>\n );\n}\n\nUIEmptyState.PRESENTED_IMAGE_SIMPLE = AntEmpty.PRESENTED_IMAGE_SIMPLE;\nUIEmptyState.PRESENTED_IMAGE_DEFAULT = AntEmpty.PRESENTED_IMAGE_DEFAULT;\n","/**\n * UIErrorState component - Error state display\n *\n * Displays error state with icon, title, description, and retry action.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UIButton } from '../core/UIButton';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport interface UIErrorStateProps {\n /** Error icon */\n icon?: React.ReactNode;\n /** Error title */\n title?: string;\n /** Error description */\n description?: string;\n /** Error details (technical message) */\n details?: string;\n /** Show retry button */\n showRetry?: boolean;\n /** Retry button text */\n retryText?: string;\n /** Retry handler */\n onRetry?: () => void;\n /** Custom action (instead of retry) */\n action?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIErrorState - Error state display\n *\n * @example\n * ```tsx\n * <UIErrorState\n * title=\"Failed to load data\"\n * description=\"Something went wrong\"\n * showRetry\n * onRetry={() => refetch()}\n * />\n *\n * <UIErrorState\n * icon={<ErrorIcon />}\n * title=\"Connection error\"\n * description=\"Unable to connect to server\"\n * details=\"Error: ECONNREFUSED 127.0.0.1:5000\"\n * retryText=\"Reconnect\"\n * onRetry={handleReconnect}\n * />\n *\n * <UIErrorState\n * title=\"Access denied\"\n * description=\"You don't have permission to view this resource\"\n * action={<UIButton>Go Back</UIButton>}\n * />\n * ```\n */\nexport function UIErrorState({\n icon,\n title = 'Something went wrong',\n description,\n details,\n showRetry = false,\n retryText = 'Try again',\n onRetry,\n action,\n className,\n style: customStyle,\n}: UIErrorStateProps) {\n const { token } = useToken();\n\n const style: React.CSSProperties = {\n padding: spacing[8],\n textAlign: 'center',\n ...customStyle,\n };\n\n return (\n <UIBox className={className} style={style}>\n <UIFlex direction=\"column\" align=\"center\" gap={3}>\n {icon && (\n <UIBox style={{ fontSize: '48px', color: token.colorError }}>\n {icon}\n </UIBox>\n )}\n\n <UIText size=\"lg\" weight=\"semibold\" color=\"error\">\n {title}\n </UIText>\n\n {description && (\n <UIText size=\"base\" color=\"secondary\">\n {description}\n </UIText>\n )}\n\n {details && (\n <UIBox\n p={3}\n style={{\n backgroundColor: token.colorErrorBg,\n borderRadius: token.borderRadius,\n maxWidth: '600px',\n width: '100%',\n }}\n >\n <UIText size=\"sm\" as=\"pre\" style={{ margin: 0, textAlign: 'left', whiteSpace: 'pre-wrap' }}>\n {details}\n </UIText>\n </UIBox>\n )}\n\n {(showRetry || action) && (\n <UIBox mt={2}>\n {action || (\n <UIButton variant=\"primary\" onClick={onRetry}>\n {retryText}\n </UIButton>\n )}\n </UIBox>\n )}\n </UIFlex>\n </UIBox>\n );\n}\n","@keyframes skeletonLoading {\n 0% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n.skeletonText {\n animation: skeletonLoading 1.4s ease infinite;\n}\n","/**\n * UISkeleton component - Loading skeleton\n *\n * Wraps Ant Design Skeleton with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Skeleton as AntSkeleton, theme } from 'antd';\nimport styles from './UISkeleton.module.css';\n\nexport interface UISkeletonProps {\n /** Show loading state */\n loading?: boolean;\n /** Content to show when not loading */\n children?: React.ReactNode;\n /** Show avatar */\n avatar?: boolean;\n /** Avatar shape */\n avatarShape?: 'circle' | 'square';\n /** Number of paragraph lines */\n lines?: number;\n /** Show title */\n title?: boolean;\n /** Active animation */\n active?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UISkeleton - Loading skeleton\n *\n * @example\n * ```tsx\n * <UISkeleton loading={isLoading}>\n * <div>Content</div>\n * </UISkeleton>\n *\n * <UISkeleton avatar lines={3} active />\n *\n * <UISkeleton\n * loading={isLoading}\n * avatar\n * avatarShape=\"circle\"\n * title\n * lines={2}\n * >\n * <ProfileCard />\n * </UISkeleton>\n * ```\n */\nexport function UISkeleton({\n loading = true,\n children,\n avatar,\n avatarShape = 'circle',\n lines = 3,\n title = true,\n active = true,\n className,\n style,\n}: UISkeletonProps) {\n return (\n <AntSkeleton\n loading={loading}\n avatar={avatar ? { shape: avatarShape } : false}\n paragraph={{ rows: lines }}\n title={title}\n active={active}\n className={className}\n style={style}\n >\n {children}\n </AntSkeleton>\n );\n}\n\n/**\n * UISkeletonButton - Button skeleton\n */\nexport function UISkeletonButton(props: React.ComponentProps<typeof AntSkeleton.Button>) {\n return <AntSkeleton.Button {...props} />;\n}\n\n/**\n * UISkeletonInput - Input skeleton\n */\nexport function UISkeletonInput(props: React.ComponentProps<typeof AntSkeleton.Input>) {\n return <AntSkeleton.Input {...props} />;\n}\n\n/**\n * UISkeletonImage - Image skeleton\n */\nexport function UISkeletonImage(props: React.ComponentProps<typeof AntSkeleton.Image>) {\n return <AntSkeleton.Image {...props} />;\n}\n\n/**\n * UISkeletonNode - Custom node skeleton\n */\nexport function UISkeletonNode(props: React.ComponentProps<typeof AntSkeleton.Node>) {\n return <AntSkeleton.Node {...props} />;\n}\n\nexport interface UISkeletonTextProps {\n /**\n * Width of the text line(s). Can be a number (px), string ('100%', '8ch'), or\n * an array to render multiple lines with different widths.\n * @default '100%'\n */\n width?: number | string | Array<number | string>;\n /**\n * Height / font-size of the shimmer block — matches the surrounding text size.\n * @default '1em'\n */\n height?: number | string;\n /** Gap between lines when width is an array */\n gap?: number | string;\n /** Additional CSS class */\n className?: string;\n /** Additional styles applied to the wrapper */\n style?: React.CSSProperties;\n}\n\n/**\n * UISkeletonText - Inline text shimmer placeholder\n *\n * Renders a shimmer block that matches the height of surrounding text.\n * Uses Ant Design's native skeleton animation so it respects the theme.\n *\n * @example\n * // Single line, full width\n * <UISkeletonText />\n *\n * // Single line, fixed width\n * <UISkeletonText width={120} height=\"1em\" />\n *\n * // Multiple lines with varying widths (like a paragraph)\n * <UISkeletonText width={['100%', '85%', '60%']} height=\"14px\" gap={8} />\n *\n * // Match a specific font size\n * <UISkeletonText width=\"8ch\" height=\"20px\" />\n */\nexport function UISkeletonText({\n width = '100%',\n height = '1em',\n gap = 6,\n className,\n style,\n}: UISkeletonTextProps) {\n const { token } = theme.useToken();\n const isArray = Array.isArray(width);\n const widths = isArray ? width : [width];\n const outerWidth = isArray ? '100%' : (typeof width === 'number' ? `${width}px` : width);\n\n return (\n <span\n className={className}\n style={{ display: 'inline-flex', flexDirection: 'column', gap, width: outerWidth, ...style }}\n >\n {widths.map((w, i) => (\n <span\n key={i}\n className={styles.skeletonText}\n style={{\n display: 'block',\n width: isArray ? (typeof w === 'number' ? `${w}px` : w) : '100%',\n height: typeof height === 'number' ? `${height}px` : height,\n borderRadius: token.borderRadiusSM,\n flexShrink: 0,\n backgroundImage: `linear-gradient(90deg, ${token.colorBorder} 25%, ${token.colorBgLayout} 50%, ${token.colorBorder} 75%)`,\n backgroundSize: '400% 100%',\n }}\n />\n ))}\n </span>\n );\n}\n","/**\n * UISpin component - Loading spinner\n *\n * Wraps Ant Design Spin for loading states.\n */\n\nimport * as React from 'react';\nimport { Spin as AntSpin, type SpinProps as AntSpinProps } from 'antd';\n\nexport interface UISpinProps extends AntSpinProps {}\n\nexport function UISpin(props: UISpinProps) {\n return <AntSpin {...props} />;\n}\n","/**\n * UIResult component - Result page\n *\n * Wraps Ant Design Result for success/error/info pages.\n */\n\nimport * as React from 'react';\nimport { Result as AntResult, type ResultProps as AntResultProps } from 'antd';\n\nexport interface UIResultProps extends AntResultProps {}\n\nexport function UIResult(props: UIResultProps) {\n return <AntResult {...props} />;\n}\n","/**\n * UIMessage - Imperative message API\n *\n * Wraps antd's message API to decouple app from antd internals.\n *\n * @example\n * ```tsx\n * import { UIMessage } from '@kb-labs/studio-ui-kit';\n *\n * UIMessage.success('Operation completed');\n * UIMessage.error('Something went wrong');\n * UIMessage.loading('Processing...');\n * ```\n *\n * For hook-based usage (with context holder):\n * ```tsx\n * import { useUIMessage } from '@kb-labs/studio-ui-kit';\n *\n * function MyComponent() {\n * const [messageApi, contextHolder] = useUIMessage();\n * return (\n * <>\n * {contextHolder}\n * <button onClick={() => messageApi.success('Done!')}>Click</button>\n * </>\n * );\n * }\n * ```\n */\n\nimport { message, type MessageArgsProps } from 'antd';\n\ntype MessageFunc = (content: React.ReactNode | MessageArgsProps, duration?: number, onClose?: () => void) => Promise<boolean>;\n\nexport interface UIMessageAPI {\n success: MessageFunc;\n error: MessageFunc;\n info: MessageFunc;\n warning: MessageFunc;\n loading: MessageFunc;\n open: (args: MessageArgsProps) => Promise<boolean>;\n destroy: (key?: React.Key) => void;\n}\n\nexport const UIMessage: UIMessageAPI = message as unknown as UIMessageAPI;\n\nexport function useUIMessage() {\n return message.useMessage();\n}\n","/**\n * UINotification - Imperative notification API\n *\n * Wraps antd's notification API to decouple app from antd internals.\n *\n * @example\n * ```tsx\n * import { UINotification } from '@kb-labs/studio-ui-kit';\n *\n * UINotification.success({ message: 'Done', description: 'Task completed.' });\n * ```\n */\n\nimport { notification } from 'antd';\n\nexport interface UINotificationArgs {\n message: React.ReactNode;\n description?: React.ReactNode;\n key?: React.Key;\n duration?: number | null;\n placement?: 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';\n icon?: React.ReactNode;\n btn?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n onClose?: () => void;\n}\n\ntype NotifyFunc = (args: UINotificationArgs) => void;\n\nexport interface UINotificationAPI {\n success: NotifyFunc;\n error: NotifyFunc;\n info: NotifyFunc;\n warning: NotifyFunc;\n open: NotifyFunc;\n destroy: (key?: React.Key) => void;\n}\n\nexport const UINotification: UINotificationAPI = notification as unknown as UINotificationAPI;\n\nexport function useUINotification() {\n return notification.useNotification();\n}\n","/**\n * UIModal component - Modal dialog\n *\n * Wraps Ant Design Modal with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Modal as AntModal } from 'antd';\n\nexport type UIModalWidth = 'small' | 'default' | 'large' | 'full';\n\nexport interface UIModalProps {\n /** Modal open state */\n open: boolean;\n /** Modal title */\n title?: React.ReactNode;\n /** Modal content */\n children: React.ReactNode;\n /** Modal width preset */\n width?: UIModalWidth | number;\n /** Show close button */\n closable?: boolean;\n /** Mask closable (click outside to close) */\n maskClosable?: boolean;\n /** Show footer */\n footer?: React.ReactNode | null;\n /** OK button text */\n okText?: string;\n /** Cancel button text */\n cancelText?: string;\n /** OK button loading */\n confirmLoading?: boolean;\n /** OK button handler */\n onOk?: () => void;\n /** Cancel button handler */\n onCancel?: () => void;\n /** Close handler */\n onClose?: () => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIModal - Modal dialog\n *\n * @example\n * ```tsx\n * <UIModal\n * open={isOpen}\n * title=\"Confirm Action\"\n * onOk={handleOk}\n * onCancel={handleCancel}\n * >\n * Are you sure you want to proceed?\n * </UIModal>\n *\n * <UIModal\n * open={isOpen}\n * title=\"Create Workflow\"\n * width=\"large\"\n * confirmLoading={isSubmitting}\n * onOk={handleSubmit}\n * onCancel={() => setIsOpen(false)}\n * >\n * <WorkflowForm />\n * </UIModal>\n *\n * <UIModal\n * open={isOpen}\n * title=\"Details\"\n * footer={null}\n * onCancel={() => setIsOpen(false)}\n * >\n * <DetailsView />\n * </UIModal>\n * ```\n */\nexport function UIModal({\n open,\n title,\n children,\n width = 'default',\n closable = true,\n maskClosable = true,\n footer,\n okText,\n cancelText,\n confirmLoading,\n onOk,\n onCancel,\n onClose,\n className,\n style,\n}: UIModalProps) {\n const widthMap: Record<UIModalWidth, number> = {\n small: 416,\n default: 520,\n large: 800,\n full: window.innerWidth - 64,\n };\n\n const modalWidth = typeof width === 'number' ? width : widthMap[width];\n\n return (\n <AntModal\n open={open}\n title={title}\n width={modalWidth}\n closable={closable}\n maskClosable={maskClosable}\n footer={footer}\n okText={okText}\n cancelText={cancelText}\n confirmLoading={confirmLoading}\n onOk={onOk}\n onCancel={onCancel || onClose}\n className={className}\n style={style}\n >\n {children}\n </AntModal>\n );\n}\n\n/**\n * UIModalConfirm - Confirmation modal shorthand\n */\nexport const UIModalConfirm = AntModal.confirm;\n\n/**\n * UIModalInfo - Info modal shorthand\n */\nexport const UIModalInfo = AntModal.info;\n\n/**\n * UIModalSuccess - Success modal shorthand\n */\nexport const UIModalSuccess = AntModal.success;\n\n/**\n * UIModalError - Error modal shorthand\n */\nexport const UIModalError = AntModal.error;\n\n/**\n * UIModalWarning - Warning modal shorthand\n */\nexport const UIModalWarning = AntModal.warning;\n","/**\n * UITooltip component - Tooltip overlay\n *\n * Wraps Ant Design Tooltip with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Tooltip as AntTooltip } from 'antd';\n\nexport type UITooltipPlacement =\n | 'top'\n | 'topLeft'\n | 'topRight'\n | 'bottom'\n | 'bottomLeft'\n | 'bottomRight'\n | 'left'\n | 'leftTop'\n | 'leftBottom'\n | 'right'\n | 'rightTop'\n | 'rightBottom';\n\nexport interface UITooltipProps {\n /** Tooltip content */\n title: React.ReactNode;\n /** Element to attach tooltip to */\n children: React.ReactNode;\n /** Tooltip placement */\n placement?: UITooltipPlacement;\n /** Show arrow */\n arrow?: boolean;\n /** Trigger mode */\n trigger?: 'hover' | 'focus' | 'click';\n /** Show/hide controlled */\n open?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * UITooltip - Tooltip overlay\n *\n * @example\n * ```tsx\n * <UITooltip title=\"Click to save\">\n * <UIButton>Save</UIButton>\n * </UITooltip>\n *\n * <UITooltip title=\"Additional information\" placement=\"right\">\n * <InfoIcon />\n * </UITooltip>\n *\n * <UITooltip title=\"Detailed help text\" trigger=\"click\">\n * <HelpIcon />\n * </UITooltip>\n * ```\n */\nexport function UITooltip({\n title,\n children,\n placement = 'top',\n arrow = true,\n trigger = 'hover',\n open,\n className,\n}: UITooltipProps) {\n return (\n <AntTooltip\n title={title}\n placement={placement}\n arrow={arrow}\n trigger={trigger}\n open={open}\n className={className}\n >\n {children}\n </AntTooltip>\n );\n}\n","/**\n * UIDrawer component - Side panel overlay\n *\n * Wraps Ant Design Drawer for sliding panels.\n */\n\nimport * as React from 'react';\nimport { Drawer as AntDrawer, type DrawerProps as AntDrawerProps } from 'antd';\n\nexport interface UIDrawerProps extends AntDrawerProps {}\n\nexport function UIDrawer(props: UIDrawerProps) {\n return <AntDrawer {...props} />;\n}\n","/**\n * UIPopconfirm component - Confirmation popover\n *\n * Wraps Ant Design Popconfirm for inline confirmations.\n */\n\nimport * as React from 'react';\nimport { Popconfirm as AntPopconfirm, type PopconfirmProps as AntPopconfirmProps } from 'antd';\n\nexport interface UIPopconfirmProps extends AntPopconfirmProps {}\n\nexport function UIPopconfirm(props: UIPopconfirmProps) {\n return <AntPopconfirm {...props} />;\n}\n","/**\n * UIPopover component - Popover overlay\n *\n * Wraps Ant Design Popover for floating content.\n */\n\nimport * as React from 'react';\nimport { Popover as AntPopover, type PopoverProps as AntPopoverProps } from 'antd';\n\nexport interface UIPopoverProps extends AntPopoverProps {}\n\nexport function UIPopover(props: UIPopoverProps) {\n return <AntPopover {...props} />;\n}\n","import * as React from 'react';\nimport { theme } from 'antd';\nimport { marked } from 'marked';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport interface UIMarkdownViewerProps {\n content: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function UIMarkdownViewer({ content, className, style: customStyle }: UIMarkdownViewerProps) {\n const { token } = useToken();\n\n const css = `\n .kb-md { font-size: ${token.fontSize}px; line-height: 1.75; color: ${token.colorText}; font-family: ${token.fontFamily}; }\n .kb-md h1,.kb-md h2,.kb-md h3,.kb-md h4,.kb-md h5,.kb-md h6 { font-weight:600; line-height:1.3; margin:1.5em 0 0.5em; color:${token.colorTextHeading}; }\n .kb-md h1 { font-size:${token.fontSizeHeading1}px; padding-bottom:0.3em; border-bottom:1px solid ${token.colorBorderSecondary}; }\n .kb-md h2 { font-size:${token.fontSizeHeading2}px; padding-bottom:0.2em; border-bottom:1px solid ${token.colorBorderSecondary}; }\n .kb-md h3 { font-size:${token.fontSizeHeading3}px; }\n .kb-md h4 { font-size:${token.fontSizeHeading4}px; }\n .kb-md p { margin:0.75em 0; }\n .kb-md a { color:${token.colorPrimary}; text-decoration:none; }\n .kb-md a:hover { text-decoration:underline; }\n .kb-md code { font-family:${token.fontFamilyCode}; font-size:0.875em; background:${token.colorFillTertiary}; color:${token.colorTextSecondary}; padding:0.15em 0.4em; border-radius:${token.borderRadiusSM}px; }\n .kb-md pre { background:${token.colorFillQuaternary}; border:1px solid ${token.colorBorderSecondary}; border-radius:${token.borderRadius}px; padding:16px; overflow-x:auto; margin:1em 0; }\n .kb-md pre code { background:none; padding:0; font-size:0.85em; color:${token.colorText}; }\n .kb-md ul,.kb-md ol { padding-left:1.75em; margin:0.75em 0; }\n .kb-md li { margin:0.25em 0; }\n .kb-md blockquote { margin:1em 0; padding:0.5em 1em; border-left:4px solid ${token.colorPrimaryBorder}; background:${token.colorFillQuaternary}; color:${token.colorTextSecondary}; border-radius:0 ${token.borderRadiusSM}px ${token.borderRadiusSM}px 0; }\n .kb-md blockquote p { margin:0; }\n .kb-md hr { border:none; border-top:1px solid ${token.colorBorderSecondary}; margin:1.5em 0; }\n .kb-md table { width:100%; border-collapse:collapse; margin:1em 0; font-size:0.9em; }\n .kb-md th,.kb-md td { border:1px solid ${token.colorBorderSecondary}; padding:8px 12px; text-align:left; }\n .kb-md th { background:${token.colorFillTertiary}; font-weight:600; }\n .kb-md tr:nth-child(even) td { background:${token.colorFillQuaternary}; }\n .kb-md img { max-width:100%; border-radius:${token.borderRadius}px; }\n `;\n\n return (\n <UIBox className={className} style={{ padding: token.padding, ...customStyle }}>\n <style>{css}</style>\n <div\n className=\"kb-md\"\n dangerouslySetInnerHTML={{ __html: marked(content) as string }}\n />\n </UIBox>\n );\n}\n","/**\n * UIJsonViewer component - JSON content viewer\n *\n * Displays JSON data with syntax highlighting and collapsible nodes.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport interface UIJsonViewerProps {\n /** JSON data to display */\n data: any;\n /** Collapsed by default */\n collapsed?: boolean;\n /** Indentation size */\n indent?: number;\n /** Show line numbers */\n showLineNumbers?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIJsonViewer - JSON content viewer\n *\n * Note: This is a basic implementation. For production use, consider:\n * - react-json-view for interactive JSON viewer\n * - @uiw/react-json-view for modern alternative\n *\n * @example\n * ```tsx\n * <UIJsonViewer data={jsonData} />\n *\n * <UIJsonViewer\n * data={{ name: \"John\", age: 30, active: true }}\n * collapsed={false}\n * showLineNumbers\n * />\n *\n * <UIJsonViewer\n * data={apiResponse}\n * indent={4}\n * />\n * ```\n */\nexport function UIJsonViewer({\n data,\n collapsed: _collapsed = false,\n indent = 2,\n showLineNumbers = false,\n className,\n style: customStyle,\n}: UIJsonViewerProps) {\n const { token } = useToken();\n\n // TODO: Implement collapse/expand functionality\n // const [isCollapsed, setIsCollapsed] = React.useState(_collapsed);\n\n const jsonString = React.useMemo(() => {\n try {\n return JSON.stringify(data, null, indent);\n } catch (error) {\n return `Error: ${error instanceof Error ? error.message : 'Invalid JSON'}`;\n }\n }, [data, indent]);\n\n const lines = jsonString.split('\\n');\n\n const style: React.CSSProperties = {\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadius,\n border: `1px solid ${token.colorBorder}`,\n overflow: 'auto',\n maxHeight: '600px',\n ...customStyle,\n };\n\n const codeStyle: React.CSSProperties = {\n display: 'block',\n fontFamily: 'Consolas, Monaco, \"Courier New\", monospace',\n fontSize: '13px',\n lineHeight: '1.6',\n padding: token.padding,\n margin: 0,\n whiteSpace: 'pre',\n color: token.colorText,\n };\n\n const lineNumberStyle: React.CSSProperties = {\n display: 'inline-block',\n width: '40px',\n color: token.colorTextSecondary,\n userSelect: 'none',\n textAlign: 'right',\n marginRight: token.marginSM,\n };\n\n // Syntax highlighting\n const highlightedJson = highlightJson(jsonString, token);\n\n return (\n <UIBox className={className} style={style}>\n <pre style={codeStyle}>\n {showLineNumbers ? (\n lines.map((line, index) => (\n <div key={index}>\n <span style={lineNumberStyle}>{index + 1}</span>\n <span dangerouslySetInnerHTML={{ __html: highlightJson(line, token) }} />\n </div>\n ))\n ) : (\n <span dangerouslySetInnerHTML={{ __html: highlightedJson }} />\n )}\n </pre>\n </UIBox>\n );\n}\n\n/**\n * Basic JSON syntax highlighting\n */\nfunction highlightJson(json: string, token: any): string {\n // String values\n json = json.replace(/\"([^\"]+)\":/g, `<span style=\"color: ${token.colorPrimary}\">\"$1\"</span>:`);\n\n // String literals\n json = json.replace(/: \"([^\"]*)\"/g, `: <span style=\"color: ${token.colorSuccess}\">\"$1\"</span>`);\n\n // Numbers\n json = json.replace(/: (\\d+)/g, `: <span style=\"color: ${token.colorWarning}\">$1</span>`);\n\n // Booleans\n json = json.replace(/: (true|false)/g, `: <span style=\"color: ${token.colorInfo}\">$1</span>`);\n\n // Null\n json = json.replace(/: (null)/g, `: <span style=\"color: ${token.colorTextSecondary}\">$1</span>`);\n\n return json;\n}\n","/**\n * UIDiffViewer — renders unified git diff with line highlighting.\n * Uses design tokens for theming (light/dark compatible).\n */\n\nimport { UITypographyText } from '../primitives';\n\nexport interface UIDiffViewerProps {\n /** Raw diff string (git diff output) */\n diff: string;\n /** Show line numbers (default: true) */\n showLineNumbers?: boolean;\n /** Max height in pixels (default: 500) */\n maxHeight?: number;\n /** Custom className */\n className?: string;\n /** Custom style */\n style?: React.CSSProperties;\n}\n\ntype LineType = 'add' | 'remove' | 'context' | 'header';\n\nfunction getLineType(line: string): LineType {\n if (line.startsWith('@@')) { return 'header'; }\n if (line.startsWith('+')) { return 'add'; }\n if (line.startsWith('-')) { return 'remove'; }\n return 'context';\n}\n\nconst LINE_STYLES: Record<LineType, { bg: string; border: string; color: string }> = {\n add: { bg: 'rgba(22, 163, 74, 0.12)', border: 'var(--success, #16a34a)', color: 'var(--success, #16a34a)' },\n remove: { bg: 'rgba(220, 38, 38, 0.12)', border: 'var(--error, #dc2626)', color: 'var(--error, #dc2626)' },\n header: { bg: 'var(--bg-tertiary, rgba(0,0,0,0.04))', border: 'transparent', color: 'var(--text-secondary, #6b7280)' },\n context: { bg: 'transparent', border: 'transparent', color: 'inherit' },\n};\n\nexport function UIDiffViewer({\n diff,\n showLineNumbers = true,\n maxHeight = 500,\n className,\n style,\n}: UIDiffViewerProps) {\n if (!diff || diff.trim() === '') {\n return (\n <div style={{ padding: 16, textAlign: 'center' }}>\n <UITypographyText type=\"secondary\">No changes to display</UITypographyText>\n </div>\n );\n }\n\n const lines = diff.split('\\n');\n\n return (\n <div\n className={className}\n style={{\n background: 'var(--bg-tertiary, rgba(0,0,0,0.02))',\n border: '1px solid var(--border-primary, rgba(0,0,0,0.1))',\n borderRadius: 'var(--radius-md, 6px)',\n fontFamily: 'Monaco, Menlo, \"Courier New\", monospace',\n fontSize: 13,\n lineHeight: 1.5,\n maxHeight,\n overflow: 'auto',\n ...style,\n }}\n >\n {lines.map((line, i) => {\n const type = getLineType(line);\n const s = LINE_STYLES[type];\n const hasLeftBorder = type === 'add' || type === 'remove';\n\n return (\n <div\n key={i}\n style={{\n display: 'flex',\n background: s.bg,\n borderLeft: hasLeftBorder ? `3px solid ${s.border}` : 'none',\n paddingLeft: hasLeftBorder ? 8 : 11,\n }}\n >\n {showLineNumbers && (\n <span\n style={{\n minWidth: 44,\n textAlign: 'right',\n paddingRight: 12,\n userSelect: 'none',\n color: 'var(--text-secondary, #6c757d)',\n fontSize: 12,\n }}\n >\n {i + 1}\n </span>\n )}\n <pre style={{ margin: 0, padding: 0, color: s.color, whiteSpace: 'pre', flex: 1 }}>\n {line}\n </pre>\n </div>\n );\n })}\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/primitives/UIText.tsx","../src/primitives/UIBox.tsx","../src/primitives/UIFlex.tsx","../src/primitives/UITypography.tsx","../src/layout/UIStack.tsx","../src/layout/UISpace.tsx","../src/layout/UIGrid.tsx","../src/layout/UIDivider.tsx","../src/core/UIBadge.tsx","../src/core/UIButton.module.css","../src/core/UIButton.tsx","../src/core/UICard.module.css","../src/core/UICard.tsx","../src/core/UITag.tsx","../src/core/UITitle.tsx","../src/core/UIIcon.module.css","../src/core/UIIcon.tsx","../src/core/UIAvatar.tsx","../src/core/useUiTheme.ts","../src/core/UIShimmerText.module.css","../src/core/UIShimmerText.tsx","../src/core/UICopyButton.tsx","../src/data/UIMetricCard.tsx","../src/data/UITable.tsx","../src/data/charts/useChartColors.ts","../src/data/charts/UILineChart.tsx","../src/data/charts/UIColumnChart.tsx","../src/data/charts/UIAreaChart.tsx","../src/data/charts/UIPieChart.tsx","../src/data/charts/UIBarChart.tsx","../src/data/charts/UIStatisticsChart.tsx","../src/data/UIStatistic.tsx","../src/data/UIProgress.tsx","../src/data/UIDescriptions.tsx","../src/data/UITimeline.tsx","../src/data/UITree.tsx","../src/data/UIList.tsx","../src/form/UIInput.tsx","../src/form/UISelect.tsx","../src/form/UIForm.tsx","../src/form/UICheckbox.tsx","../src/form/UISwitch.tsx","../src/form/UIDatePicker.tsx","../src/form/UIInputNumber.tsx","../src/form/UIRadio.tsx","../src/form/UIUpload.tsx","../src/form/UISlider.tsx","../src/navigation/UIBreadcrumb.tsx","../src/navigation/UITabs.tsx","../src/navigation/UIAccordion.tsx","../src/navigation/UIDropdown.tsx","../src/navigation/UISegmented.tsx","../src/navigation/UISteps.tsx","../src/navigation/UIMenu.tsx","../src/composite/UIPage.tsx","../src/composite/UIHeader.tsx","../src/composite/UIPageHeader.tsx","../src/composite/UIPageSection.tsx","../src/feedback/UIAlert.tsx","../src/feedback/UIEmptyState.tsx","../src/feedback/UIErrorState.tsx","../src/feedback/UISkeleton.module.css","../src/feedback/UISkeleton.tsx","../src/feedback/UISpin.tsx","../src/feedback/UIResult.tsx","../src/feedback/useUiMessage.ts","../src/feedback/useUiNotification.ts","../src/overlay/UIModal.tsx","../src/overlay/UITooltip.tsx","../src/overlay/UIDrawer.tsx","../src/overlay/UIPopconfirm.tsx","../src/overlay/UIPopover.tsx","../src/content/UIMarkdownViewer.tsx","../src/content/UIJsonViewer.tsx","../src/content/UIDiffViewer.tsx"],"names":["jsx","spacing","AntSpace","AntRow","AntCol","AntDivider","useToken","theme","AntBadge","React","UIButton","AntButton","AntCard","AntTag","Typography","jsxs","React2","AntAvatar","React3","AntTable","useChartTheme","React5","React6","React7","React8","React9","Card","AntStatistic","AntProgress","AntDescriptions","AntTimeline","AntTree","AntList","AntInput","AntSelect","AntForm","AntCheckbox","AntSwitch","AntDatePicker","AntTimePicker","AntInputNumber","AntRadio","AntUpload","AntSlider","AntBreadcrumb","useNavigate","AntTabs","AntCollapse","AntDropdown","AntSegmented","AntSteps","AntMenu","Fragment","message","AntAlert","AntEmpty","AntSkeleton","AntSpin","AntResult","AntModal","AntTooltip","AntDrawer","AntPopconfirm","AntPopover","React10"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Text component - Typography primitive with design tokens\n *\n * Uses tokens from @kb-labs/studio-ui-core for consistent styling.\n * NO inline styles, NO hardcoded colors.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { typography } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport type UITextSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';\nexport type UITextWeight = 'normal' | 'medium' | 'semibold' | 'bold';\nexport type UITextColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n\nexport interface UITextProps {\n /** Text content */\n children: React.ReactNode;\n /** Typography size from design tokens */\n size?: UITextSize;\n /** Font weight from design tokens */\n weight?: UITextWeight;\n /** Semantic color using Ant Design tokens */\n color?: UITextColor;\n /** HTML element to render */\n as?: 'span' | 'p' | 'div' | 'label' | 'pre';\n /** Additional CSS class */\n className?: string;\n /** Additional styles (use sparingly) */\n style?: React.CSSProperties;\n}\n\n/**\n * UIText component with design system tokens\n *\n * @example\n * ```tsx\n * <UIText size=\"sm\" color=\"secondary\">Label text</UIText>\n * <UIText size=\"2xl\" weight=\"bold\">Heading</UIText>\n * ```\n */\nexport function UIText({\n children,\n size = 'base',\n weight = 'normal',\n color = 'primary',\n as: Component = 'span',\n className,\n style: customStyle,\n}: UITextProps) {\n const { token } = useToken();\n\n // Map semantic colors to Ant Design tokens\n const colorMap: Record<UITextColor, string> = {\n primary: token.colorText,\n secondary: token.colorTextSecondary,\n success: token.colorSuccess,\n warning: token.colorWarning,\n error: token.colorError,\n info: token.colorInfo,\n };\n\n const baseStyle: React.CSSProperties = {\n fontSize: typography.fontSize[size][0],\n lineHeight: typography.fontSize[size][1].lineHeight,\n fontWeight: typography.fontWeight[weight],\n color: colorMap[color],\n };\n\n // Merge base styles with custom styles (custom styles override)\n const style = { ...baseStyle, ...customStyle };\n\n return (\n <Component style={style} className={className}>\n {children}\n </Component>\n );\n}\n","/**\n * Box component - Layout primitive with spacing tokens\n *\n * Uses tokens from @kb-labs/studio-ui-core for consistent spacing.\n * NO inline styles for spacing/sizing.\n */\n\nimport * as React from 'react';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nexport type UIBoxSpacingValue = keyof typeof spacing;\n\nexport interface UIBoxProps {\n /** Box content */\n children: React.ReactNode;\n /** Padding from design tokens */\n p?: UIBoxSpacingValue;\n /** Padding top */\n pt?: UIBoxSpacingValue;\n /** Padding right */\n pr?: UIBoxSpacingValue;\n /** Padding bottom */\n pb?: UIBoxSpacingValue;\n /** Padding left */\n pl?: UIBoxSpacingValue;\n /** Margin from design tokens */\n m?: UIBoxSpacingValue;\n /** Margin top */\n mt?: UIBoxSpacingValue;\n /** Margin right */\n mr?: UIBoxSpacingValue;\n /** Margin bottom */\n mb?: UIBoxSpacingValue;\n /** Margin left */\n ml?: UIBoxSpacingValue;\n /** HTML element to render */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional CSS class */\n className?: string;\n /** Additional styles (use sparingly) */\n style?: React.CSSProperties;\n}\n\n/**\n * Box component with spacing tokens\n *\n * @example\n * ```tsx\n * <Box p={4} mb={2}>Content</Box>\n * <Box pt={2} pb={3}>Asymmetric padding</Box>\n * ```\n */\nexport function UIBox({\n children,\n p,\n pt,\n pr,\n pb,\n pl,\n m,\n mt,\n mr,\n mb,\n ml,\n as: Component = 'div',\n className,\n style: customStyle,\n}: UIBoxProps) {\n const style: React.CSSProperties = {\n ...(p !== undefined && { padding: spacing[p] }),\n ...(pt !== undefined && { paddingTop: spacing[pt] }),\n ...(pr !== undefined && { paddingRight: spacing[pr] }),\n ...(pb !== undefined && { paddingBottom: spacing[pb] }),\n ...(pl !== undefined && { paddingLeft: spacing[pl] }),\n ...(m !== undefined && { margin: spacing[m] }),\n ...(mt !== undefined && { marginTop: spacing[mt] }),\n ...(mr !== undefined && { marginRight: spacing[mr] }),\n ...(mb !== undefined && { marginBottom: spacing[mb] }),\n ...(ml !== undefined && { marginLeft: spacing[ml] }),\n ...customStyle,\n };\n\n return (\n <Component style={style} className={className}>\n {children}\n </Component>\n );\n}\n","/**\n * Flex component - Flexbox layout primitive\n *\n * Uses spacing tokens for gap. NO inline styles for layout.\n */\n\nimport * as React from 'react';\nimport { spacing } from '@kb-labs/studio-ui-core';\nimport type { UIBoxSpacingValue } from './UIBox';\n\nexport type UIFlexSpacingValue = UIBoxSpacingValue;\n\nexport interface UIFlexProps {\n /** Flex content */\n children: React.ReactNode;\n /** Flex direction */\n direction?: 'row' | 'column' | 'row-reverse' | 'column-reverse';\n /** Justify content */\n justify?: 'start' | 'end' | 'center' | 'between' | 'around' | 'evenly';\n /** Align items */\n align?: 'start' | 'end' | 'center' | 'baseline' | 'stretch';\n /** Gap from design tokens */\n gap?: UIFlexSpacingValue;\n /** Wrap behavior */\n wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';\n /** HTML element to render */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Flex layout component\n *\n * @example\n * ```tsx\n * <Flex direction=\"row\" gap={2} align=\"center\">\n * <Text>Item 1</Text>\n * <Text>Item 2</Text>\n * </Flex>\n * ```\n */\nexport function UIFlex({\n children,\n direction = 'row',\n justify = 'start',\n align = 'stretch',\n gap,\n wrap = 'nowrap',\n as: Component = 'div',\n className,\n style: customStyle,\n}: UIFlexProps) {\n const justifyMap = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n between: 'space-between',\n around: 'space-around',\n evenly: 'space-evenly',\n };\n\n const alignMap = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n baseline: 'baseline',\n stretch: 'stretch',\n };\n\n const style: React.CSSProperties = {\n display: 'flex',\n flexDirection: direction,\n justifyContent: justifyMap[justify],\n alignItems: alignMap[align],\n flexWrap: wrap,\n ...(gap !== undefined && { gap: spacing[gap] }),\n ...customStyle,\n };\n\n return (\n <Component style={style} className={className}>\n {children}\n </Component>\n );\n}\n","/**\n * UITypography components - Rich text display\n *\n * Wraps Ant Design Typography.Text, Typography.Paragraph, Typography.Link\n * for features like copyable, ellipsis, editable, etc.\n *\n * For simple styled text, use UIText instead (design-token-based).\n */\n\nimport * as React from 'react';\nimport { Typography } from 'antd';\nimport type { TextProps } from 'antd/es/typography/Text';\nimport type { ParagraphProps } from 'antd/es/typography/Paragraph';\nimport type { LinkProps } from 'antd/es/typography/Link';\n\nexport interface UITypographyTextProps extends TextProps {}\nexport interface UITypographyParagraphProps extends ParagraphProps {}\nexport interface UITypographyLinkProps extends LinkProps {}\n\nexport function UITypographyText(props: UITypographyTextProps) {\n return <Typography.Text {...props} />;\n}\n\nexport function UITypographyParagraph(props: UITypographyParagraphProps) {\n return <Typography.Paragraph {...props} />;\n}\n\nexport function UITypographyLink(props: UITypographyLinkProps) {\n return <Typography.Link {...props} />;\n}\n","/**\n * UIStack component - Vertical/horizontal spacing layout\n *\n * Simplified wrapper around UIFlex for consistent spacing.\n * NO inline styles, uses spacing tokens.\n */\n\nimport * as React from 'react';\nimport { UIFlex } from '../primitives/UIFlex';\nimport type { UIBoxSpacingValue } from '../primitives/UIBox';\n\nexport type UIStackDirection = 'vertical' | 'horizontal';\nexport type UIStackSpacing = UIBoxSpacingValue;\nexport type UIStackAlign = 'start' | 'end' | 'center' | 'stretch';\n\nexport interface UIStackProps {\n /** Stack direction */\n direction?: UIStackDirection;\n /** Spacing between items (from design tokens) */\n spacing?: UIStackSpacing;\n /** Align items */\n align?: UIStackAlign;\n /** Stack content */\n children: React.ReactNode;\n /** HTML element to render */\n as?: keyof React.JSX.IntrinsicElements;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIStack - Consistent spacing layout\n *\n * @example\n * ```tsx\n * <UIStack direction=\"vertical\" spacing={4}>\n * <Card>Item 1</Card>\n * <Card>Item 2</Card>\n * <Card>Item 3</Card>\n * </UIStack>\n *\n * <UIStack direction=\"horizontal\" spacing={2} align=\"center\">\n * <Button>Cancel</Button>\n * <Button>Submit</Button>\n * </UIStack>\n * ```\n */\nexport function UIStack({\n direction = 'vertical',\n spacing = 2,\n align,\n children,\n as,\n className,\n style,\n}: UIStackProps) {\n return (\n <UIFlex\n direction={direction === 'vertical' ? 'column' : 'row'}\n gap={spacing}\n align={align}\n as={as}\n className={className}\n style={style}\n >\n {children}\n </UIFlex>\n );\n}\n","/**\n * UISpace component - Spacing container\n *\n * Wraps Ant Design Space for consistent spacing between elements.\n */\n\nimport * as React from 'react';\nimport { Space as AntSpace, type SpaceProps as AntSpaceProps } from 'antd';\n\nexport interface UISpaceProps extends AntSpaceProps {}\n\nexport function UISpace(props: UISpaceProps) {\n return <AntSpace {...props} />;\n}\n\nexport function UISpaceCompact(props: React.ComponentProps<typeof AntSpace.Compact>) {\n return <AntSpace.Compact {...props} />;\n}\n","/**\n * UIRow / UICol components - Grid layout\n *\n * Wraps Ant Design Row/Col for responsive grid layouts.\n */\n\nimport * as React from 'react';\nimport { Row as AntRow, Col as AntCol, type RowProps as AntRowProps, type ColProps as AntColProps } from 'antd';\n\nexport interface UIRowProps extends AntRowProps {}\nexport interface UIColProps extends AntColProps {}\n\nexport function UIRow(props: UIRowProps) {\n return <AntRow {...props} />;\n}\n\nexport function UICol(props: UIColProps) {\n return <AntCol {...props} />;\n}\n","/**\n * UIDivider component - Visual separator\n *\n * Wraps Ant Design Divider.\n */\n\nimport * as React from 'react';\nimport { Divider as AntDivider, type DividerProps as AntDividerProps } from 'antd';\n\nexport interface UIDividerProps extends AntDividerProps {}\n\nexport function UIDivider(props: UIDividerProps) {\n return <AntDivider {...props} />;\n}\n","/**\n * Badge component - Status indicator with semantic colors\n *\n * Uses Ant Design tokens for all colors.\n * NO hardcoded colors, NO inline styles.\n */\n\nimport * as React from 'react';\nimport { Badge as AntBadge, theme } from 'antd';\nimport type { BadgeProps as AntBadgeProps } from 'antd';\n\nconst { useToken } = theme;\n\nexport type UIBadgeVariant = 'success' | 'warning' | 'error' | 'info' | 'default';\n\nexport interface UIBadgeProps extends Omit<AntBadgeProps, 'status' | 'color'> {\n /** Semantic variant */\n variant?: UIBadgeVariant;\n /** Badge text */\n children?: React.ReactNode;\n}\n\n/**\n * Badge component with semantic colors\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\">Failed</Badge>\n * ```\n */\nexport function UIBadge({ variant = 'default', children, ...props }: UIBadgeProps) {\n const { token } = useToken();\n\n // Map semantic variants to Ant Design status\n const statusMap: Record<UIBadgeVariant, AntBadgeProps['status']> = {\n success: 'success',\n warning: 'warning',\n error: 'error',\n info: 'processing',\n default: 'default',\n };\n\n // Map semantic variants to colors for text badges\n const colorMap: Record<UIBadgeVariant, string> = {\n success: token.colorSuccess,\n warning: token.colorWarning,\n error: token.colorError,\n info: token.colorInfo,\n default: token.colorTextSecondary,\n };\n\n if (children) {\n // Text badge\n return (\n <AntBadge\n color={colorMap[variant]}\n text={children}\n {...props}\n />\n );\n }\n\n // Status badge (dot)\n return (\n <AntBadge\n status={statusMap[variant]}\n {...props}\n />\n );\n}\n","/**\n * UIButton styles - Proper SVG icon theming\n *\n * This ensures all SVG icons (lucide-react, etc.) inherit colors from CSS variables\n * and work correctly in both light and dark themes.\n */\n\n.uiButton {\n /* Button inherits theme colors from Ant Design tokens */\n}\n\n/*\n * CRITICAL: SVG icon color inheritance\n *\n * Force all SVG icons to inherit button text color automatically\n * Works for lucide-react, heroicons, and any other icon libraries\n */\n.uiButton svg {\n color: inherit !important;\n stroke: currentColor !important;\n fill: currentColor !important;\n}\n\n/*\n * Disabled state - reduce opacity\n */\n.uiButton:disabled svg,\n.uiButton.ant-btn-disabled svg {\n opacity: 0.4;\n}\n\n/*\n * Size variants - ensure SVG scales properly\n */\n.uiButton.ant-btn-sm svg {\n /* Small button icons */\n width: 14px;\n height: 14px;\n}\n\n.uiButton svg {\n /* Default (middle) button icons */\n width: 16px;\n height: 16px;\n}\n\n.uiButton.ant-btn-lg svg {\n /* Large button icons */\n width: 18px;\n height: 18px;\n}\n\n/*\n * Icon positioning within button\n * Ensures proper spacing between icon and text\n */\n.uiButton .ant-btn-icon {\n /* Icon wrapper - CRITICAL: must inherit color for SVG to get correct color */\n color: inherit !important;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.uiButton .ant-btn-icon svg {\n /* SVG inside icon wrapper */\n vertical-align: middle;\n display: block; /* Remove inline spacing */\n}\n\n/*\n * All buttons — base transition and press feedback\n */\n.uiButton {\n transition: transform 100ms ease, box-shadow 150ms ease, opacity 100ms ease;\n}\n\n.uiButton:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.96);\n transition: transform 60ms ease;\n}\n\n/*\n * Primary button — subtle lift on hover, snap back on press\n */\n.uiButton.ant-btn-primary {\n transition: transform 150ms ease, box-shadow 150ms ease;\n}\n\n.uiButton.ant-btn-primary:hover:not(:disabled):not(.ant-btn-disabled) {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(12, 102, 255, 0.3);\n}\n\n.uiButton.ant-btn-primary:active:not(:disabled):not(.ant-btn-disabled) {\n transform: scale(0.97);\n box-shadow: none;\n transition: transform 60ms ease;\n}\n\n/*\n * Default / dashed — dim on press\n */\n.uiButton.ant-btn-default:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton.ant-btn-dashed:active:not(:disabled):not(.ant-btn-disabled) {\n opacity: 0.75;\n}\n\n/*\n * Text / link — background flash on press for clear tactile signal\n */\n.uiButton.ant-btn-text:active:not(:disabled):not(.ant-btn-disabled),\n.uiButton.ant-btn-link:active:not(:disabled):not(.ant-btn-disabled) {\n background: rgba(0, 0, 0, 0.06) !important;\n transform: scale(0.95);\n}\n\n/*\n * RTL (Right-to-Left) support\n */\n[dir='rtl'] .uiButton .ant-btn-icon {\n /* Mirror icon position in RTL */\n transform: scaleX(-1);\n}\n","/**\n * UIButton component - Action button with semantic variants\n *\n * Wraps Ant Design Button with consistent styling and proper SVG icon theming.\n * NO hardcoded colors, uses Ant Design theme tokens + CSS variables.\n *\n * IMPORTANT: This component ensures all SVG icons (lucide-react, etc.)\n * inherit colors correctly in both light and dark themes through CSS.\n */\n\nimport * as React from 'react';\nimport { Button as AntButton, type ButtonProps as AntButtonProps } from 'antd';\nimport styles from './UIButton.module.css';\n\nexport type UIButtonVariant = 'primary' | 'default' | 'dashed' | 'text' | 'link';\n\nexport interface UIButtonProps extends Omit<AntButtonProps, 'type' | 'variant'> {\n /** Button variant (maps to Ant Design 'type' prop) */\n variant?: UIButtonVariant;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * UIButton - Action button with proper icon theming\n *\n * @example\n * ```tsx\n * import { X, Check } from 'lucide-react';\n *\n * <UIButton variant=\"primary\">Submit</UIButton>\n * <UIButton variant=\"default\" icon={<Check />}>Confirm</UIButton>\n * <UIButton variant=\"text\" danger icon={<X />}>Delete</UIButton>\n * <UIButton variant=\"text\" icon={<X />} /> // Icon-only close button\n * ```\n */\nexport const UIButton = React.forwardRef<HTMLButtonElement, UIButtonProps>(\n function UIButton({ variant = 'default', className, ...rest }, ref) {\n const combinedClassName = [styles.uiButton, className].filter(Boolean).join(' ');\n return (\n <AntButton\n ref={ref}\n type={variant}\n className={combinedClassName}\n {...rest}\n />\n );\n },\n);\n",".card {\n --card-accent: var(--border-primary);\n box-shadow: 0 1px 2px var(--shadow);\n transition: box-shadow 200ms ease, transform 200ms ease, border-color 200ms ease;\n position: relative;\n}\n\n.card::before {\n content: '';\n position: absolute;\n top: 0;\n left: 16px;\n right: 16px;\n height: 2px;\n border-radius: 0 0 2px 2px;\n background: var(--card-accent);\n opacity: 0;\n transition: opacity 200ms ease;\n}\n\n.card.accented::before {\n opacity: 1;\n}\n\n.card.hoverable:hover {\n box-shadow: 0 8px 20px -4px var(--shadow-hover);\n border-color: var(--border-secondary);\n transform: translateY(-1px);\n}\n","/**\n * UICard component - Card container with header/footer\n *\n * Wraps Ant Design Card with additional features.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Card as AntCard, theme } from 'antd';\nimport type { CardProps as AntCardProps } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport styles from './UICard.module.css';\n\nconst { useToken } = theme;\n\nexport type UICardVariant = 'default' | 'success' | 'warning' | 'error' | 'info';\n\n// Status reads as a short accent bar at the top-left, not a full-width border —\n// distinctive enough to scan at a glance without tinting the whole card.\nconst variantTokens: Record<UICardVariant, { accent: string }> = {\n default: { accent: 'var(--border-primary)' },\n success: { accent: 'var(--success)' },\n warning: { accent: 'var(--warning)' },\n error: { accent: 'var(--error)' },\n info: { accent: 'var(--info)' },\n};\n\nexport interface UICardProps extends Omit<AntCardProps, 'title' | 'bordered'> {\n /** Card title */\n title?: React.ReactNode;\n /** Subtitle (below title) */\n subtitle?: string;\n /** Extra content (top-right corner) */\n extra?: React.ReactNode;\n /** Footer content */\n footer?: React.ReactNode;\n /** Card content */\n children: React.ReactNode;\n /** Card size */\n size?: 'small' | 'default';\n /** Show border — false maps to variant=\"borderless\" */\n bordered?: boolean;\n /** Hoverable effect */\n hoverable?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Status variant — adds colored top border + tinted background */\n status?: UICardVariant;\n}\n\n/**\n * UICard - Container with optional header/footer\n *\n * @example\n * ```tsx\n * <UICard title=\"User Profile\" subtitle=\"Last updated today\">\n * <p>Card content</p>\n * </UICard>\n *\n * <UICard\n * title=\"Analytics\"\n * extra={<Button>View All</Button>}\n * footer={<p>Last 7 days</p>}\n * >\n * <MetricChart />\n * </UICard>\n * ```\n */\nexport function UICard({\n title,\n subtitle,\n extra,\n footer,\n children,\n size = 'default',\n bordered = true,\n hoverable = false,\n loading = false,\n status = 'default',\n ...rest\n}: UICardProps) {\n const { token } = useToken();\n const vt = variantTokens[status];\n\n // Custom title with subtitle\n const cardTitle = (title || subtitle) ? (\n <UIBox>\n {title && (typeof title === 'string'\n ? <UIText size=\"lg\" weight=\"semibold\" as=\"div\">{title}</UIText>\n : title\n )}\n {subtitle && (\n <UIText size=\"sm\" color=\"secondary\" as=\"div\" style={{ marginTop: token.marginXXS }}>\n {subtitle}\n </UIText>\n )}\n </UIBox>\n ) : undefined;\n\n return (\n <AntCard\n title={cardTitle}\n extra={extra}\n size={size}\n variant={bordered ? 'outlined' : 'borderless'}\n hoverable={false}\n loading={loading}\n {...rest}\n className={[\n styles.card,\n hoverable && styles.hoverable,\n status !== 'default' && styles.accented,\n rest.className,\n ].filter(Boolean).join(' ')}\n style={{\n borderColor: token.colorBorder,\n overflow: 'hidden',\n '--card-accent': vt.accent,\n ...rest.style,\n } as React.CSSProperties}\n >\n {children}\n {footer && (\n <UIBox mt={3} pt={3} style={{ borderTop: `1px solid ${token.colorBorder}` }}>\n {footer}\n </UIBox>\n )}\n </AntCard>\n );\n}\n","/**\n * UITag component - Label/category tag with semantic colors\n *\n * Wraps Ant Design Tag with semantic variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Tag as AntTag } from 'antd';\nimport type { TagProps as AntTagProps } from 'antd';\nimport './UITag.module.css';\n\nexport type UITagVariant = 'success' | 'warning' | 'error' | 'info' | 'default' | 'neutral';\n\nexport interface UITagProps extends Omit<AntTagProps, 'color'> {\n /** Semantic variant */\n variant?: UITagVariant;\n /** Direct color override (Ant Design color name or hex) */\n color?: string;\n /** Tag content */\n children: React.ReactNode;\n /** Closable tag */\n closable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Icon element */\n icon?: React.ReactNode;\n}\n\n/**\n * UITag - Label or category indicator\n *\n * @example\n * ```tsx\n * <UITag variant=\"success\">Active</UITag>\n * <UITag variant=\"warning\" closable onClose={() => {}}>Pending</UITag>\n * <UITag variant=\"error\">Failed</UITag>\n * <UITag variant=\"info\" icon={<InfoIcon />}>Info</UITag>\n * ```\n */\nexport function UITag({\n variant = 'default',\n color,\n children,\n closable,\n onClose,\n icon,\n className,\n onClick,\n ...rest\n}: UITagProps) {\n // Preset *status* names (not raw hex/CSS-var values) — Ant Design resolves these\n // through the Tag component's own theme tokens (see theme-adapter.ts `Tag: {...}`),\n // which are plain `var(--x)` strings. Passing a *computed* useToken() color instead\n // sends it through Ant's derivation pipeline, which runs TinyColor over the raw\n // `var(--x)` string, fails to parse it, and silently falls back to black.\n const colorMap: Record<UITagVariant, string | undefined> = {\n success: 'success',\n warning: 'warning',\n error: 'error',\n info: 'processing',\n default: undefined,\n neutral: undefined,\n };\n\n const combinedClassName = ['kb-ui-tag', onClick && 'kb-ui-tag--clickable', className].filter(Boolean).join(' ');\n\n return (\n <AntTag\n color={color ?? colorMap[variant]}\n closable={closable}\n onClose={onClose}\n icon={icon}\n className={combinedClassName}\n onClick={onClick}\n {...rest}\n >\n {children}\n </AntTag>\n );\n}\n","/**\n * UITitle component - Page/section titles with hierarchy\n *\n * Wraps Ant Design Typography.Title with consistent styling.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Typography, theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { Title: AntTitle } = Typography;\nconst { useToken } = theme;\n\nexport type UITitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface UITitleProps {\n /** Title level (h1-h5) */\n level?: UITitleLevel;\n /** Title content */\n children: React.ReactNode;\n /** Optional subtitle */\n subtitle?: string;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UITitle - Page or section title\n *\n * @example\n * ```tsx\n * <UITitle level={1}>Dashboard</UITitle>\n * <UITitle level={2} subtitle=\"Manage your settings\">Settings</UITitle>\n * <UITitle level={3}>Section Title</UITitle>\n * ```\n */\nexport function UITitle({\n level = 1,\n children,\n subtitle,\n className,\n style,\n}: UITitleProps) {\n const { token: _token } = useToken();\n\n if (subtitle) {\n return (\n <UIBox mb={subtitle ? 2 : 3}>\n <AntTitle level={level} className={className} style={{ margin: 0, ...style }}>\n {children}\n </AntTitle>\n <UIText\n size=\"base\"\n color=\"secondary\"\n as=\"div\"\n style={{ marginTop: spacing[1] }}\n >\n {subtitle}\n </UIText>\n </UIBox>\n );\n }\n\n return (\n <AntTitle level={level} className={className} style={{ marginBottom: spacing[3], ...style }}>\n {children}\n </AntTitle>\n );\n}\n","/**\n * UIIcon styles - Proper SVG and icon font theming\n *\n * Ensures all icons (Ant Design icons, lucide-react, custom SVG)\n * inherit colors from CSS variables and work in both light and dark themes.\n */\n\n.uiIcon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n}\n\n/*\n * SVG icons (lucide-react, custom SVG)\n * Use currentColor to inherit from parent color\n */\n.uiIcon svg {\n color: currentColor;\n stroke: currentColor;\n fill: none; /* Most icon libraries use stroke, not fill */\n display: block; /* Remove inline spacing */\n}\n\n/*\n * Ant Design icons (icon fonts)\n * Already use currentColor by default, but ensure it's explicit\n */\n.uiIcon .anticon {\n color: currentColor;\n}\n\n/*\n * Clickable icons (icon buttons)\n */\n.uiIcon.clickable {\n cursor: pointer;\n transition: opacity 0.2s ease, transform 0.1s ease;\n}\n\n.uiIcon.clickable:hover {\n opacity: 0.8;\n}\n\n.uiIcon.clickable:active {\n transform: scale(0.95);\n}\n\n/*\n * Size variants\n */\n.uiIcon.size-xs {\n font-size: 12px;\n width: 12px;\n height: 12px;\n}\n\n.uiIcon.size-sm {\n font-size: 14px;\n width: 14px;\n height: 14px;\n}\n\n.uiIcon.size-base {\n font-size: 16px;\n width: 16px;\n height: 16px;\n}\n\n.uiIcon.size-lg {\n font-size: 20px;\n width: 20px;\n height: 20px;\n}\n\n.uiIcon.size-xl {\n font-size: 24px;\n width: 24px;\n height: 24px;\n}\n\n.uiIcon.size-2xl {\n font-size: 32px;\n width: 32px;\n height: 32px;\n}\n\n/*\n * Color variants using CSS variables\n */\n.uiIcon.color-primary {\n color: var(--link, #2563EB);\n}\n\n.uiIcon.color-secondary {\n color: var(--text-secondary, #6B7280);\n}\n\n.uiIcon.color-success {\n color: var(--success, #16A34A);\n}\n\n.uiIcon.color-warning {\n color: var(--warning, #F59E0B);\n}\n\n.uiIcon.color-error {\n color: var(--error, #DC2626);\n}\n\n.uiIcon.color-info {\n color: var(--info, #0EA5E9);\n}\n\n.uiIcon.color-inherit {\n color: inherit;\n}\n\n/*\n * Spin animation\n */\n.uiIcon.spin {\n animation: uiIconSpin 1s linear infinite;\n}\n\n@keyframes uiIconSpin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n/*\n * Disabled state\n */\n.uiIcon.disabled {\n opacity: 0.4;\n cursor: not-allowed;\n pointer-events: none;\n}\n","/**\n * UIIcon component - Icon wrapper with proper theming\n *\n * Provides consistent icon sizing and coloring using CSS variables.\n * Supports Ant Design icons, lucide-react, and custom SVG icons.\n * NO hardcoded colors, uses CSS variables for theme support.\n *\n * IMPORTANT: All icons (SVG, icon fonts) inherit colors through CSS.\n */\n\nimport * as React from 'react';\nimport styles from './UIIcon.module.css';\n\nexport type UIIconSize = 'xs' | 'sm' | 'base' | 'lg' | 'xl' | '2xl';\nexport type UIIconColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'inherit';\n\nexport interface UIIconProps {\n /** Icon component or icon name (e.g., 'HomeOutlined') */\n icon?: React.ReactNode | string;\n /** Icon name (alternative to icon prop) */\n name?: string;\n /** Icon size */\n size?: UIIconSize;\n /** Icon color */\n color?: UIIconColor;\n /** Spin animation */\n spin?: boolean;\n /** Click handler */\n onClick?: () => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Icon resolver registry — call registerIconRenderer() once at app startup\n * to wire up the icon lookup (e.g. from @/components/ui/icons renderIcon).\n */\ntype IconRenderer = (name: string) => React.ReactNode | null;\nlet _iconRenderer: IconRenderer | null = null;\n\nexport function registerIconRenderer(renderer: IconRenderer): void {\n _iconRenderer = renderer;\n}\n\n/**\n * UIIcon - Icon wrapper with CSS-based theming\n *\n * @example\n * ```tsx\n * import { CheckCircleOutlined } from '@ant-design/icons';\n * import { Check } from 'lucide-react';\n *\n * // Ant Design icon\n * <UIIcon icon={<CheckCircleOutlined />} color=\"success\" />\n *\n * // lucide-react icon\n * <UIIcon icon={<Check />} color=\"success\" size=\"lg\" />\n *\n * // Using icon name (from AVAILABLE_ICONS)\n * <UIIcon name=\"HomeOutlined\" size=\"lg\" />\n * <UIIcon icon=\"SettingOutlined\" color=\"primary\" />\n *\n * <UIIcon icon={<LoadingOutlined />} spin />\n *\n * <UIIcon\n * name=\"SettingOutlined\"\n * size=\"lg\"\n * onClick={handleSettings}\n * />\n * ```\n */\nexport function UIIcon({\n icon,\n name,\n size = 'base',\n color = 'inherit',\n spin = false,\n onClick,\n className,\n style: customStyle,\n}: UIIconProps) {\n // Build CSS classes\n // 'anticon' class is required so Ant Design components (e.g. Tag icon prop)\n // apply correct margin/spacing — it's the standard Ant Design icon marker class\n const classes = [\n styles.uiIcon,\n 'anticon',\n styles[`size-${size}`],\n styles[`color-${color}`],\n spin && styles.spin,\n onClick && styles.clickable,\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n // Resolve icon: name prop > string icon > React element icon\n let iconElement: React.ReactNode = null;\n\n const iconName = name || (typeof icon === 'string' ? icon : null);\n if (iconName) {\n if (_iconRenderer) {\n iconElement = _iconRenderer(iconName);\n } else {\n console.warn(`Icon \"${iconName}\" could not be loaded. Call registerIconRenderer() at app startup.`);\n iconElement = null;\n }\n } else if (React.isValidElement(icon)) {\n iconElement = icon;\n }\n\n if (!iconElement) {\n return null;\n }\n\n return (\n <span\n className={classes}\n style={customStyle}\n onClick={onClick}\n role={onClick ? 'button' : undefined}\n tabIndex={onClick ? 0 : undefined}\n onKeyDown={\n onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick();\n }\n }\n : undefined\n }\n >\n {iconElement}\n </span>\n );\n}\n\n/**\n * Icon helper for common use cases\n */\nexport const UIIconButton = ({\n icon,\n name,\n onClick,\n size = 'base',\n color = 'primary',\n ...props\n}: UIIconProps) => (\n <UIIcon\n icon={icon}\n name={name}\n size={size}\n color={color}\n onClick={onClick}\n style={{ cursor: 'pointer', transition: 'opacity 0.2s', ...props.style }}\n {...props}\n />\n);\n","/**\n * UIAvatar component - User avatar\n *\n * Wraps Ant Design Avatar.\n */\n\nimport * as React from 'react';\nimport { Avatar as AntAvatar, type AvatarProps as AntAvatarProps } from 'antd';\n\nexport interface UIAvatarProps extends AntAvatarProps {}\n\nexport function UIAvatar(props: UIAvatarProps) {\n return <AntAvatar {...props} />;\n}\n\nexport function UIAvatarGroup(props: React.ComponentProps<typeof AntAvatar.Group>) {\n return <AntAvatar.Group {...props} />;\n}\n","/**\n * useUITheme - Access design tokens from the current theme\n *\n * Wraps antd's theme.useToken() to decouple app from antd internals.\n *\n * @example\n * ```tsx\n * import { useUITheme } from '@kb-labs/studio-ui-kit';\n *\n * function MyComponent() {\n * const { token } = useUITheme();\n * return <div style={{ color: token.colorPrimary }}>Themed text</div>;\n * }\n * ```\n */\n\nimport { theme, type GlobalToken } from 'antd';\n\nexport interface UIThemeResult {\n token: GlobalToken;\n hashId: string;\n theme: ReturnType<typeof theme.useToken>['theme'];\n}\n\nexport function useUITheme(): UIThemeResult {\n const result = theme.useToken();\n return result as UIThemeResult;\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n * Classic \"Cursor / ClickUp\" loading text effect.\n */\n\n.shimmer {\n background: linear-gradient(\n 90deg,\n var(--shimmer-color-1, #888) 0%,\n var(--shimmer-color-2, #888) 25%,\n var(--shimmer-highlight, #fff) 50%,\n var(--shimmer-color-2, #888) 75%,\n var(--shimmer-color-1, #888) 100%\n );\n background-size: 200% 100%;\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: transparent;\n animation: shimmerMove var(--shimmer-duration, 2s) linear infinite;\n display: inline-block;\n}\n\n@keyframes shimmerMove {\n 0% { background-position: 100% 0; }\n 100% { background-position: -100% 0; }\n}\n","/**\n * UIShimmerText - Animated gradient shimmer on text\n *\n * Text stays visible but a highlight sweeps across it — the\n * classic \"Cursor / ClickUp / Codex\" loading text effect.\n * Pure CSS, zero dependencies, respects dark/light themes.\n */\n\nimport * as React from 'react';\nimport styles from './UIShimmerText.module.css';\n\nexport interface UIShimmerTextProps {\n /** Text to display with shimmer effect */\n children: React.ReactNode;\n /**\n * Base text color (the \"dim\" parts of the gradient).\n * Defaults to current text color via CSS variable.\n * @default 'var(--text-secondary, #6B7280)'\n */\n color?: string;\n /**\n * Highlight color that sweeps across.\n * @default 'var(--text-primary, #111827)'\n */\n highlight?: string;\n /**\n * Animation duration.\n * @default '2s'\n */\n duration?: string;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIShimmerText - Text with animated shimmer sweep\n *\n * @example\n * // Basic\n * <UIShimmerText>Initializing plugins and widgets</UIShimmerText>\n *\n * // Custom colors\n * <UIShimmerText highlight=\"#6366f1\" color=\"#c7d2fe\">\n * Loading workspace...\n * </UIShimmerText>\n *\n * // Faster sweep\n * <UIShimmerText duration=\"1.2s\">Processing...</UIShimmerText>\n */\nexport function UIShimmerText({\n children,\n color = 'var(--text-secondary, #9CA3AF)',\n highlight = 'var(--text-primary, #111827)',\n duration = '2s',\n className,\n style,\n}: UIShimmerTextProps) {\n return (\n <span\n className={[styles.shimmer, className].filter(Boolean).join(' ')}\n style={{\n '--shimmer-color-1': color,\n '--shimmer-color-2': color,\n '--shimmer-highlight': highlight,\n '--shimmer-duration': duration,\n ...style,\n } as React.CSSProperties}\n >\n {children}\n </span>\n );\n}\n","/**\n * UICopyButton — one-click copy with built-in visual feedback.\n *\n * Shows a checkmark for 1.5s after copying, no toast required.\n * Accepts `value` to copy and optional `label` for accessibility.\n */\n\nimport * as React from 'react';\nimport { UIButton } from './UIButton';\nimport { UIIcon } from './UIIcon';\nimport type { UIButtonProps } from './UIButton';\n\nexport interface UICopyButtonProps\n extends Omit<UIButtonProps, 'onClick' | 'icon' | 'children' | 'variant'> {\n /** Text to copy */\n value: string;\n /** Button size */\n size?: 'small' | 'middle' | 'large';\n /** Show label next to icon */\n label?: string;\n}\n\nexport function UICopyButton({ value, size = 'small', label, style, ...rest }: UICopyButtonProps) {\n const [copied, setCopied] = React.useState(false);\n\n const handleCopy = (e: React.MouseEvent) => {\n e.stopPropagation();\n navigator.clipboard.writeText(value).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n });\n };\n\n return (\n <UIButton\n variant=\"text\"\n size={size}\n icon={\n <UIIcon\n name={copied ? 'CheckOutlined' : 'CopyOutlined'}\n style={{ color: copied ? '#52c41a' : undefined, transition: 'color 150ms ease' }}\n />\n }\n onClick={handleCopy}\n style={{ transition: 'opacity 150ms ease', ...style }}\n {...rest}\n >\n {label}\n </UIButton>\n );\n}\n","import * as React from 'react';\nimport { Card, theme, Tooltip } from 'antd';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport interface UIMetricCardProps {\n /** Metric label */\n label: string;\n /** Metric value */\n value: string | number;\n /** Icon shown in colored badge */\n icon?: React.ReactNode;\n /** Color theme for the icon badge */\n status?: 'default' | 'info' | 'success' | 'warning' | 'error';\n /** Trend direction */\n trend?: 'up' | 'down' | 'neutral';\n /** Change delta (percentage) */\n delta?: number;\n /** Value unit (e.g., '%', 'ms', '$') */\n unit?: string;\n /** Card size */\n size?: 'small' | 'default';\n /** Show/hide delta */\n showDelta?: boolean;\n /** Loading state */\n loading?: boolean;\n}\n\nexport function UIMetricCard({\n label,\n value,\n icon,\n status = 'default',\n trend = 'neutral',\n delta,\n unit,\n size = 'default',\n showDelta = true,\n loading = false,\n}: UIMetricCardProps) {\n const { token } = useToken();\n\n const iconBgMap: Record<string, string> = {\n default: token.colorFillSecondary,\n info: token.colorInfoBg,\n success: token.colorSuccessBg,\n warning: token.colorWarningBg,\n error: token.colorErrorBg,\n };\n\n const iconColorMap: Record<string, string> = {\n default: token.colorTextSecondary,\n info: token.colorInfo,\n success: token.colorSuccess,\n warning: token.colorWarning,\n error: token.colorError,\n };\n\n const trendColor =\n trend === 'up' ? token.colorSuccess :\n trend === 'down' ? token.colorError :\n token.colorTextSecondary;\n\n const trendIcon = trend === 'up' ? '↑' : trend === 'down' ? '↓' : '';\n\n return (\n <Card size={size} loading={loading} style={{ height: '100%' }}>\n <UIBox>\n {icon && (\n <div style={{\n width: 36,\n height: 36,\n borderRadius: token.borderRadiusSM,\n backgroundColor: iconBgMap[status],\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: iconColorMap[status],\n fontSize: 16,\n marginBottom: token.marginSM,\n }}>\n {icon}\n </div>\n )}\n\n <UIText size=\"sm\" color=\"secondary\" as=\"div\">\n {label}\n </UIText>\n\n <Tooltip title={String(value)} mouseEnterDelay={0.6}>\n <UIFlex align=\"baseline\" gap={2} style={{ marginTop: 4, overflow: 'hidden' }}>\n <UIText\n size=\"2xl\"\n weight=\"bold\"\n as=\"div\"\n style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', minWidth: 0 }}\n >\n {value}\n </UIText>\n {unit && (\n <UIText size=\"base\" color=\"secondary\" style={{ flexShrink: 0 }}>\n {unit}\n </UIText>\n )}\n </UIFlex>\n </Tooltip>\n\n {showDelta && delta !== undefined && (\n <UIFlex align=\"center\" gap={1} style={{ marginTop: token.marginXS }}>\n <UIText size=\"sm\" style={{ color: delta >= 0 ? token.colorSuccess : token.colorError }}>\n {trendIcon} {Math.abs(delta)}%\n </UIText>\n </UIFlex>\n )}\n </UIBox>\n </Card>\n );\n}\n","/**\n * UITable component - Data table\n *\n * Wraps Ant Design Table with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Table as AntTable } from 'antd';\nimport type { ColumnType } from 'antd/es/table';\nimport type { ExpandableConfig } from 'antd/es/table/interface';\n\nexport interface UITableColumn<T = any> extends ColumnType<T> {\n /** Column key */\n key: string;\n /** Column title */\n title: string;\n /** Data index (object key) */\n dataIndex?: string;\n /** Custom render function */\n render?: (value: any, record: T, index: number) => React.ReactNode;\n /** Column width */\n width?: number | string;\n /** Sortable column */\n sorter?: boolean | ((a: T, b: T) => number);\n /** Filterable column */\n filters?: { text: string; value: any }[];\n /** Default filter value */\n defaultFilteredValue?: any[];\n /** Custom filter function */\n onFilter?: (value: any, record: T) => boolean;\n /** Fixed column */\n fixed?: 'left' | 'right';\n /** Ellipsis text */\n ellipsis?: boolean;\n}\n\nexport interface UITableProps<T = any> {\n /** Table columns */\n columns: UITableColumn<T>[];\n /** Table data */\n dataSource: T[];\n /** Row key field */\n rowKey?: string | ((record: T) => string);\n /** Loading state */\n loading?: boolean;\n /** Show pagination */\n pagination?: false | { pageSize?: number; current?: number; total?: number };\n /** Row selection */\n rowSelection?: {\n selectedRowKeys?: React.Key[];\n onChange?: (selectedRowKeys: React.Key[], selectedRows: T[]) => void;\n };\n /** Row click handler */\n onRow?: (record: T) => {\n onClick?: () => void;\n onDoubleClick?: () => void;\n };\n /** Table size */\n size?: 'small' | 'middle' | 'large';\n /** Show border */\n bordered?: boolean;\n /** Expandable row config */\n expandable?: ExpandableConfig<T>;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Scroll config */\n scroll?: { x?: number | string | true; y?: number | string };\n}\n\n/**\n * UITable - Data table\n *\n * @example\n * ```tsx\n * <UITable\n * columns={[\n * { key: 'name', title: 'Name', dataIndex: 'name', sorter: true },\n * { key: 'age', title: 'Age', dataIndex: 'age', width: 100 },\n * { key: 'status', title: 'Status', dataIndex: 'status',\n * render: (status) => <UIBadge variant={status}>{status}</UIBadge>\n * },\n * ]}\n * dataSource={data}\n * rowKey=\"id\"\n * loading={isLoading}\n * />\n *\n * <UITable\n * columns={columns}\n * dataSource={workflows}\n * rowKey=\"workflowId\"\n * rowSelection={{\n * selectedRowKeys,\n * onChange: setSelectedRowKeys,\n * }}\n * onRow={(record) => ({\n * onClick: () => handleRowClick(record),\n * })}\n * />\n * ```\n */\nexport function UITable<T extends Record<string, any> = any>({\n columns,\n dataSource,\n rowKey = 'id',\n loading,\n pagination,\n rowSelection,\n onRow,\n size = 'middle',\n bordered = false,\n expandable,\n className,\n style,\n scroll,\n}: UITableProps<T>) {\n return (\n <AntTable<T>\n columns={columns}\n dataSource={dataSource}\n rowKey={rowKey}\n loading={loading}\n pagination={pagination}\n rowSelection={rowSelection}\n onRow={onRow}\n size={size}\n bordered={bordered}\n expandable={expandable}\n className={className}\n style={style}\n scroll={scroll}\n />\n );\n}\n","import { useMemo } from 'react';\n\n/**\n * Chart color palette configuration\n *\n * Provides a consistent color palette for charts based on Ant Design tokens.\n * Colors are optimized for data visualization with good contrast and accessibility.\n */\nexport interface ChartColorPalette {\n /** Primary colors for main data series (10 colors) */\n colors: string[];\n /** Extended palette for complex charts (20 colors) */\n extendedColors: string[];\n /** Get color by index with automatic wrapping */\n getColor: (index: number) => string;\n /** Map data series to colors by field value */\n mapColors: (data: any[], colorField: string) => Record<string, string>;\n}\n\n/**\n * Hook to get chart color palette based on current theme\n *\n * Returns a palette of 10 primary colors and 20 extended colors,\n * plus helper functions for color mapping.\n *\n * @example\n * ```tsx\n * const palette = useChartColors();\n *\n * // Get color by index\n * const color = palette.getColor(0); // First color\n *\n * // Map data to colors\n * const colorMap = palette.mapColors(data, 'category');\n * // { 'Category A': '#1890ff', 'Category B': '#52c41a', ... }\n * ```\n */\nexport function useChartColors(): ChartColorPalette {\n return useMemo(() => {\n // Primary palette (10 colors) - for most charts\n // Using hardcoded Ant Design default colors to ensure consistency\n // (token colors may not be available in all contexts)\n const colors = [\n '#1677ff', // Blue (colorInfo default)\n '#52c41a', // Green (colorSuccess default)\n '#faad14', // Orange (colorWarning default)\n '#ff4d4f', // Red (colorError default)\n '#1890ff', // Primary blue\n '#722ed1', // Purple\n '#eb2f96', // Magenta\n '#13c2c2', // Cyan\n '#fa8c16', // Volcano\n '#2f54eb', // Geek blue\n ];\n\n console.log('[useChartColors] Created palette:', { colors });\n\n // Extended palette (20 colors) - for complex charts\n // Using hardcoded colors for consistency (not theme tokens)\n const extendedColors = [\n ...colors,\n '#e6f4ff', // Light blue (colorInfoBg equivalent)\n '#f6ffed', // Light green (colorSuccessBg equivalent)\n '#fffbe6', // Light yellow (colorWarningBg equivalent)\n '#fff2f0', // Light red (colorErrorBg equivalent)\n '#e6f4ff', // Light blue (colorPrimaryBg equivalent)\n '#f759ab', // Light magenta\n '#9254de', // Light purple\n '#40a9ff', // Light blue\n '#73d13d', // Light green\n '#ffc53d', // Light yellow\n ];\n\n const getColor = (index: number): string => {\n return colors[index % colors.length] || '#1890ff';\n };\n\n const mapColors = (data: any[], colorField: string): Record<string, string> => {\n const uniqueValues = Array.from(\n new Set(data.map(item => String(item[colorField] ?? '')))\n );\n const colorMap: Record<string, string> = {};\n\n uniqueValues.forEach((value, index) => {\n colorMap[value] = getColor(index);\n });\n\n return colorMap;\n };\n\n return {\n colors,\n extendedColors,\n getColor,\n mapColors,\n };\n }, []); // Empty deps - colors are hardcoded and don't need to update\n}\n\n/**\n * Create style.fill function for @ant-design/charts\n *\n * @param colorMap - Map of field values to colors\n * @param colorField - Name of the field to use for color mapping\n *\n * @example\n * ```tsx\n * const palette = useChartColors();\n * const colorMap = palette.mapColors(data, 'type');\n *\n * const config = {\n * colorField: 'type',\n * style: {\n * fill: createFillFunction(colorMap, 'type'),\n * },\n * };\n * ```\n */\nexport function createFillFunction(\n colorMap: Record<string, string>,\n colorField: string\n): (datum: any) => string {\n return (datum: any) => {\n const value = String(datum[colorField] ?? '');\n const firstKey = Object.keys(colorMap)[0];\n return colorMap[value] || (firstKey ? colorMap[firstKey] : '#1890ff') || '#1890ff';\n };\n}\n","import * as React from 'react';\nimport { Line } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { LineConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UILineChartProps extends Omit<LineConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually via style.fill\n */\n disableAutoColors?: boolean;\n seriesField?: string;\n}\n\n/**\n * UILineChart - Line chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Line component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UILineChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * />\n *\n * // Custom colors\n * <UILineChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * colors={['#ff0000', '#00ff00']}\n * />\n *\n * // Manual color control via scale\n * <UILineChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * disableAutoColors\n * scale={{\n * color: {\n * range: ['#ff0000', '#00ff00']\n * }\n * }}\n * />\n * ```\n */\nexport function UILineChart({ colors, disableAutoColors, ...props }: UILineChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if colorField or seriesField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n // For Line charts, colors are mapped via either colorField or seriesField\n const hasColorField = props.colorField || props.seriesField;\n\n console.log('[UILineChart] Debug info:', {\n hasColorField,\n colorField: props.colorField,\n seriesField: props.seriesField,\n disableAutoColors,\n hasData: !!props.data,\n dataLength: props.data?.length,\n customColors: colors,\n paletteColors: palette.colors,\n });\n\n if (disableAutoColors || !hasColorField || !props.data) {\n console.log('[UILineChart] Skipping auto-colors:', {\n disableAutoColors,\n hasColorField,\n hasData: !!props.data,\n });\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n console.log('[UILineChart] Applying colors:', {\n source: colors ? 'custom' : 'palette',\n colors: colorSource,\n });\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Line {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Column } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { ColumnConfig } from '@ant-design/charts';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n colors10: [\n token.colorInfo,\n token.colorSuccess,\n token.colorWarning,\n token.colorError,\n token.colorPrimary,\n token.colorInfoBg,\n token.colorSuccessBg,\n token.colorWarningBg,\n token.colorErrorBg,\n token.colorPrimaryBg,\n ],\n colors20: [\n token.colorInfo,\n token.colorSuccess,\n token.colorWarning,\n token.colorError,\n token.colorPrimary,\n token.colorInfoBg,\n token.colorSuccessBg,\n token.colorWarningBg,\n token.colorErrorBg,\n token.colorPrimaryBg,\n token.colorInfoBorder,\n token.colorSuccessBorder,\n token.colorWarningBorder,\n token.colorErrorBorder,\n token.colorPrimaryBorder,\n token.colorInfoText,\n token.colorSuccessText,\n token.colorWarningText,\n token.colorErrorText,\n token.colorPrimaryText,\n ],\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIColumnChartProps extends Omit<ColumnConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n */\n colors?: string[];\n}\n\n/**\n * UIColumnChart - Column chart with automatic theming\n *\n * Wrapper around @ant-design/charts Column component that uses theme tokens\n * for automatic light/dark mode support.\n *\n * @example\n * ```tsx\n * <UIColumnChart\n * data={data}\n * xField=\"category\"\n * yField=\"value\"\n * colorField=\"type\"\n * />\n * ```\n */\nexport function UIColumnChart({ colors, ...props }: UIColumnChartProps) {\n const chartTheme = useChartTheme();\n\n // Merge theme with custom colors if provided\n const mergedTheme = colors\n ? {\n ...chartTheme,\n colors10: colors,\n colors20: colors,\n }\n : chartTheme;\n\n return <Column {...props} theme={mergedTheme} />;\n}\n","import * as React from 'react';\nimport { Area } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { AreaConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIAreaChartProps extends Omit<AreaConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually via style.fill\n */\n disableAutoColors?: boolean;\n}\n\n/**\n * UIAreaChart - Area chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Area component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UIAreaChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * />\n *\n * // Custom colors\n * <UIAreaChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * colors={['#ff0000', '#00ff00']}\n * />\n *\n * // Manual color control via scale\n * <UIAreaChart\n * data={data}\n * xField=\"date\"\n * yField=\"value\"\n * colorField=\"category\"\n * disableAutoColors\n * scale={{\n * color: {\n * range: ['#ff0000', '#00ff00']\n * }\n * }}\n * />\n * ```\n */\nexport function UIAreaChart({ colors, disableAutoColors, ...props }: UIAreaChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if colorField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n if (disableAutoColors || !props.colorField || !props.data) {\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Area {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Pie } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { PieConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIPieChartProps extends Omit<PieConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually\n */\n disableAutoColors?: boolean;\n}\n\n/**\n * UIPieChart - Pie/Donut chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Pie component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UIPieChart\n * data={data}\n * angleField=\"value\"\n * colorField=\"category\"\n * />\n * ```\n *\n * @example Donut chart\n * ```tsx\n * <UIPieChart\n * data={data}\n * angleField=\"value\"\n * colorField=\"category\"\n * innerRadius={0.6}\n * />\n * ```\n */\nexport function UIPieChart({ colors, disableAutoColors, ...props }: UIPieChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if colorField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n if (disableAutoColors || !props.colorField || !props.data) {\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Pie {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Bar } from '@ant-design/charts';\nimport { theme } from 'antd';\nimport type { BarConfig } from '@ant-design/charts';\nimport { useChartColors } from './useChartColors';\n\nconst { useToken } = theme;\n\n/**\n * Get chart theme from Ant Design tokens\n */\nfunction useChartTheme() {\n const { token } = useToken();\n\n return React.useMemo(\n () => ({\n defaultColor: token.colorPrimary,\n styleSheet: {\n backgroundColor: token.colorBgContainer,\n fontFamily: token.fontFamily,\n fontSize: token.fontSize,\n color: token.colorText,\n },\n }),\n [token],\n );\n}\n\nexport interface UIBarChartProps extends Omit<BarConfig, 'theme'> {\n /**\n * Custom colors to override theme colors\n * If not provided, automatic color palette will be used\n */\n colors?: string[];\n /**\n * Disable automatic color mapping\n * Set to true if you want to handle colors manually\n */\n disableAutoColors?: boolean;\n}\n\n/**\n * UIBarChart - Horizontal bar chart with automatic theming and color mapping\n *\n * Wrapper around @ant-design/charts Bar component that uses theme tokens\n * for automatic light/dark mode support and automatic color mapping.\n *\n * @example\n * ```tsx\n * // Automatic color mapping (recommended)\n * <UIBarChart\n * data={data}\n * xField=\"value\"\n * yField=\"category\"\n * seriesField=\"type\"\n * />\n *\n * // Custom colors\n * <UIBarChart\n * data={data}\n * xField=\"value\"\n * yField=\"category\"\n * seriesField=\"type\"\n * colors={['#ff0000', '#00ff00']}\n * />\n * ```\n */\nexport function UIBarChart({ colors, disableAutoColors, ...props }: UIBarChartProps) {\n const chartTheme = useChartTheme();\n const palette = useChartColors();\n\n // Auto-map colors if seriesField is provided and auto-colors are not disabled\n const enhancedProps = React.useMemo(() => {\n if (disableAutoColors || !props.seriesField || !props.data) {\n return props;\n }\n\n // Use custom colors if provided, otherwise use palette\n const colorSource = colors || palette.colors;\n\n return {\n ...props,\n scale: {\n ...props.scale,\n color: {\n range: colorSource,\n },\n },\n };\n }, [props, colors, palette.colors, disableAutoColors]);\n\n return <Bar {...enhancedProps} theme={chartTheme} />;\n}\n","import * as React from 'react';\nimport { Card } from 'antd';\nimport dayjs from 'dayjs';\nimport { UILineChart } from './UILineChart';\nimport { UIText } from '../../primitives';\nimport { useChartColors } from './useChartColors';\nimport type { LineConfig } from '@ant-design/charts';\n\n/**\n * Configuration for chart metrics\n */\nexport interface ChartMetricConfig {\n /**\n * Metric key from data object\n * - For top-level fields: use the field name directly (e.g., 'count')\n * - For nested fields: data will be extracted from record.metrics[key] if metrics object exists\n */\n key: string;\n\n /**\n * Display label for the metric\n */\n label: string;\n\n /**\n * Optional transformer function to convert raw value to display value\n * Example: (v) => v / 1000 to convert tokens to K tokens\n */\n transform?: (value: number) => number;\n\n /**\n * Optional formatter for tooltip\n */\n format?: (value: number) => string;\n}\n\nexport interface UIStatisticsChartProps {\n /**\n * Chart data - can be either:\n * 1. Pre-transformed: Array<{ [xField]: string, [yField]: number, [colorField]: string }>\n * 2. Raw DailyStats: Array<{ date: string, count: number, metrics: { [key]: number } }>\n */\n data: any[] | undefined;\n\n /**\n * Loading state\n */\n loading?: boolean;\n\n /**\n * Chart title\n */\n title?: string;\n\n /**\n * Metrics to display on the chart\n * Each metric will be shown as a separate line\n *\n * Only used when data transformation is needed (raw DailyStats format)\n */\n metrics?: ChartMetricConfig[];\n\n /**\n * X-axis field name (default: 'date')\n */\n xField?: string;\n\n /**\n * Y-axis field name (default: 'value')\n */\n yField?: string;\n\n /**\n * Color field name (default: 'category')\n */\n colorField?: string;\n\n /**\n * Optional card style\n */\n style?: React.CSSProperties;\n\n /**\n * Chart height in pixels\n */\n height?: number;\n\n /**\n * Show legend (default: true)\n */\n showLegend?: boolean;\n\n /**\n * Additional LineChart props\n */\n chartProps?: Partial<LineConfig>;\n}\n\n/**\n * UIStatisticsChart - Reusable statistics chart with legend and loading states\n *\n * Specialized chart component for displaying time-series statistics with automatic theming.\n * Includes built-in legend, loading states, and empty states.\n *\n * Supports two data formats:\n * 1. Pre-transformed chart data (simple array of objects with xField, yField, colorField)\n * 2. Raw DailyStats format (automatically transforms using metrics config)\n *\n * @example Pre-transformed data\n * ```tsx\n * <UIStatisticsChart\n * data={[\n * { date: '2024-01-01', value: 100, category: 'Requests' },\n * { date: '2024-01-01', value: 5000, category: 'Tokens' },\n * ]}\n * loading={isLoading}\n * title=\"Daily Usage\"\n * />\n * ```\n *\n * @example Raw DailyStats with transformation\n * ```tsx\n * <UIStatisticsChart\n * data={dailyStats}\n * loading={isLoading}\n * title=\"Daily Usage Trend\"\n * metrics={[\n * { key: 'count', label: 'Requests' },\n * { key: 'totalTokens', label: 'Tokens (K)', transform: (v) => v / 1000 },\n * { key: 'totalCost', label: 'Cost ($)', format: (v) => `$${v.toFixed(2)}` },\n * ]}\n * />\n * ```\n */\nexport function UIStatisticsChart({\n data,\n loading = false,\n title,\n metrics = [],\n xField = 'date',\n yField = 'value',\n colorField = 'category',\n style,\n height = 350,\n showLegend = true,\n chartProps,\n}: UIStatisticsChartProps) {\n const palette = useChartColors();\n\n // Chart colors from centralized palette\n const chartColors = React.useMemo(\n () => palette.colors.slice(0, Math.max(metrics.length, 3)),\n [palette.colors, metrics.length]\n );\n\n // Transform data if metrics are provided (raw DailyStats format)\n const chartData = React.useMemo(() => {\n if (!data) {\n return [];\n }\n\n // If no metrics provided, assume data is already in chart format\n if (metrics.length === 0) {\n return data;\n }\n\n // Transform raw DailyStats to chart format\n return data.flatMap((stat) => {\n const rows: Array<{ [key: string]: any }> = [];\n\n for (const metric of metrics) {\n let value: number;\n\n // Extract value: check top-level first, then metrics object\n if (metric.key in stat && typeof stat[metric.key] === 'number') {\n // Top-level field (e.g., 'count')\n value = stat[metric.key];\n } else if (stat.metrics && metric.key in stat.metrics) {\n // Nested in metrics object\n value = stat.metrics[metric.key];\n } else {\n // Not found, default to 0\n value = 0;\n }\n\n // Apply transformation if provided\n if (metric.transform) {\n value = metric.transform(value);\n }\n\n rows.push({\n [xField]: stat.date ? dayjs(stat.date).format('YYYY-MM-DD') : stat[xField],\n [colorField]: metric.label,\n [yField]: value,\n });\n }\n\n return rows;\n });\n }, [data, metrics, xField, yField, colorField]);\n\n // Render legend\n const renderLegend = () => {\n if (!showLegend || metrics.length === 0) {\n return null;\n }\n\n return (\n <div style={{ display: 'flex', justifyContent: 'flex-end', marginBottom: 12, gap: 16 }}>\n {metrics.map((metric, index) => (\n <div key={metric.label} style={{ display: 'flex', alignItems: 'center', gap: 6 }}>\n <span\n style={{\n display: 'inline-block',\n width: 10,\n height: 10,\n borderRadius: '50%',\n backgroundColor: chartColors[index % chartColors.length],\n }}\n />\n <span style={{ fontSize: 13, fontWeight: 500 }}>{metric.label}</span>\n </div>\n ))}\n </div>\n );\n };\n\n // Render function for content\n const renderContent = () => (\n <>\n {loading && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UIText color=\"secondary\">Loading chart data...</UIText>\n </div>\n )}\n\n {!loading && (!chartData || chartData.length === 0) && (\n <div style={{ textAlign: 'center', padding: '40px 0' }}>\n <UIText color=\"secondary\">No data available for the selected date range</UIText>\n </div>\n )}\n\n {!loading && chartData && chartData.length > 0 && (\n <div>\n {renderLegend()}\n\n\n {/* @ts-expect-error @ant-design/charts LineConfig overloads produce a 44-variant union incompatible with JSX strict checking */}\n <UILineChart\n data={chartData}\n xField={xField}\n yField={yField}\n colorField={colorField}\n height={height}\n colors={chartColors}\n scale={{\n color: {\n range: chartColors,\n },\n }}\n axis={{\n x: {\n label: {\n autoRotate: false,\n },\n },\n y: {\n label: {\n formatter: (v: string) => {\n const num = Number(v);\n if (num >= 1000000) {\n return `${(num / 1000000).toFixed(1)}M`;\n }\n if (num >= 1000) {\n return `${(num / 1000).toFixed(1)}K`;\n }\n return num.toLocaleString();\n },\n },\n },\n }}\n style={{\n shape: 'smooth',\n lineWidth: 2,\n }}\n legend={false}\n tooltip={{\n title: (d: any) => d[xField],\n items: [\n (d: any) => {\n const metric = metrics.find((m) => m.label === d[colorField]);\n const metricIndex = metrics.findIndex((m) => m.label === d[colorField]);\n let formattedValue = d[yField]?.toLocaleString() || '0';\n\n if (metric?.format && d[yField] != null) {\n formattedValue = metric.format(d[yField]);\n }\n\n return {\n name: d[colorField],\n value: formattedValue,\n color: chartColors[metricIndex >= 0 ? metricIndex : 0],\n };\n },\n ],\n }}\n {...chartProps}\n />\n </div>\n )}\n </>\n );\n\n // Render with or without Card wrapper depending on title\n if (title) {\n return (\n <Card title={title} style={{ marginTop: 16, ...style }}>\n {renderContent()}\n </Card>\n );\n }\n\n // No title - render content directly\n return <div style={style}>{renderContent()}</div>;\n}\n","/**\n * UIStatistic component - Statistic display\n *\n * Wraps Ant Design Statistic for displaying numeric values with titles.\n */\n\nimport * as React from 'react';\nimport { Statistic as AntStatistic, type StatisticProps as AntStatisticProps } from 'antd';\n\nexport interface UIStatisticProps extends AntStatisticProps {}\n\nexport function UIStatistic(props: UIStatisticProps) {\n return <AntStatistic {...props} />;\n}\n\nexport function UIStatisticCountdown(props: React.ComponentProps<typeof AntStatistic.Countdown>) {\n return <AntStatistic.Countdown {...props} />;\n}\n","/**\n * UIProgress component - Progress indicator\n *\n * Wraps Ant Design Progress for displaying completion status.\n */\n\nimport * as React from 'react';\nimport { Progress as AntProgress, type ProgressProps as AntProgressProps } from 'antd';\n\nexport interface UIProgressProps extends AntProgressProps {}\n\nexport function UIProgress(props: UIProgressProps) {\n return <AntProgress {...props} />;\n}\n","/**\n * UIDescriptions component - Description list\n *\n * Wraps Ant Design Descriptions for displaying key-value pairs.\n */\n\nimport * as React from 'react';\nimport { Descriptions as AntDescriptions, type DescriptionsProps as AntDescriptionsProps } from 'antd';\n\nexport interface UIDescriptionsProps extends AntDescriptionsProps {}\n\nexport function UIDescriptions(props: UIDescriptionsProps) {\n return <AntDescriptions {...props} />;\n}\n\nexport function UIDescriptionsItem(props: React.ComponentProps<typeof AntDescriptions.Item>) {\n return <AntDescriptions.Item {...props} />;\n}\n","/**\n * UITimeline component - Timeline display\n *\n * Wraps Ant Design Timeline for displaying chronological events.\n */\n\nimport * as React from 'react';\nimport { Timeline as AntTimeline, type TimelineProps as AntTimelineProps } from 'antd';\n\nexport interface UITimelineProps extends AntTimelineProps {}\n\nexport function UITimeline(props: UITimelineProps) {\n return <AntTimeline {...props} />;\n}\n\nexport function UITimelineItem(props: React.ComponentProps<typeof AntTimeline.Item>) {\n return <AntTimeline.Item {...props} />;\n}\n","/**\n * UITree component - Tree view\n *\n * Wraps Ant Design Tree for hierarchical data display.\n */\n\nimport * as React from 'react';\nimport { Tree as AntTree, type TreeProps as AntTreeProps } from 'antd';\n\nexport interface UITreeProps extends AntTreeProps {}\n\nexport function UITree(props: UITreeProps) {\n return <AntTree {...props} />;\n}\n\nexport function UITreeDirectoryTree(props: React.ComponentProps<typeof AntTree.DirectoryTree>) {\n return <AntTree.DirectoryTree {...props} />;\n}\n\nexport function UITreeNode(props: React.ComponentProps<typeof AntTree.TreeNode>) {\n return <AntTree.TreeNode {...props} />;\n}\n","/**\n * UIList component - List display\n *\n * Wraps Ant Design List for displaying collections of items.\n */\n\nimport * as React from 'react';\nimport { List as AntList, type ListProps as AntListProps } from 'antd';\n\nexport interface UIListProps<T> extends AntListProps<T> {}\n\nexport function UIList<T>(props: UIListProps<T>) {\n return <AntList<T> {...props} />;\n}\n\nexport function UIListItem(props: React.ComponentProps<typeof AntList.Item>) {\n return <AntList.Item {...props} />;\n}\n\nexport function UIListItemMeta(props: React.ComponentProps<typeof AntList.Item.Meta>) {\n return <AntList.Item.Meta {...props} />;\n}\n","/**\n * UIInput component - Text input with variants\n *\n * Wraps Ant Design Input with semantic variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Input as AntInput } from 'antd';\nimport type { InputProps as AntInputProps } from 'antd';\n\nexport interface UIInputProps extends Omit<AntInputProps, 'onChange'> {\n /** Input value */\n value?: string;\n /** Default value */\n defaultValue?: string;\n /** Placeholder text */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Prefix icon/element */\n prefix?: React.ReactNode;\n /** Suffix icon/element */\n suffix?: React.ReactNode;\n /** Max length */\n maxLength?: number;\n /** Show character count */\n showCount?: boolean;\n /** Allow clear */\n allowClear?: boolean;\n /** Change handler (returns value string, not event) */\n onChange?: (value: string) => void;\n /** Enter key handler */\n onPressEnter?: () => void;\n}\n\n/**\n * UIInput - Text input\n *\n * @example\n * ```tsx\n * <UIInput placeholder=\"Enter name\" />\n * <UIInput prefix={<SearchIcon />} placeholder=\"Search...\" />\n * <UIInput allowClear showCount maxLength={100} />\n * ```\n */\nexport function UIInput({\n value,\n defaultValue,\n placeholder,\n disabled,\n prefix,\n suffix,\n maxLength,\n showCount,\n allowClear,\n onChange,\n onPressEnter,\n ...rest\n}: UIInputProps) {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e.target.value);\n };\n\n return (\n <AntInput\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n prefix={prefix}\n suffix={suffix}\n maxLength={maxLength}\n showCount={showCount}\n allowClear={allowClear}\n onChange={handleChange}\n onPressEnter={onPressEnter}\n {...rest}\n />\n );\n}\n\n/**\n * UIInputPassword - Password input with toggle visibility\n */\nexport function UIInputPassword(props: React.ComponentProps<typeof AntInput.Password>) {\n return <AntInput.Password {...props} />;\n}\n\n/**\n * UIInputTextArea - Multiline text input\n */\nexport function UIInputTextArea(props: React.ComponentProps<typeof AntInput.TextArea>) {\n return <AntInput.TextArea {...props} />;\n}\n\n/**\n * UIInputSearch - Search input with search button\n */\nexport function UIInputSearch(props: React.ComponentProps<typeof AntInput.Search>) {\n return <AntInput.Search {...props} />;\n}\n","/**\n * UISelect component - Dropdown select with icon support\n *\n * Wraps Ant Design Select with enhanced options.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Select as AntSelect } from 'antd';\nimport type { SelectProps as AntSelectProps } from 'antd';\nimport { UIFlex } from '../primitives/UIFlex';\n\nexport interface UISelectOption {\n /** Option label */\n label: string;\n /** Option value */\n value: string | number;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Disabled option */\n disabled?: boolean;\n /** Option description */\n description?: string;\n}\n\nexport interface UISelectProps extends Omit<AntSelectProps, 'options' | 'onChange'> {\n /** Select options */\n options: UISelectOption[];\n /** Selected value */\n value?: string | number | (string | number)[];\n /** Default value */\n defaultValue?: string | number | (string | number)[];\n /** Placeholder */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Allow clear */\n allowClear?: boolean;\n /** Enable search */\n showSearch?: boolean;\n /** Multiple selection */\n mode?: 'multiple' | 'tags';\n /** Change handler (returns value, not event) */\n onChange?: (value: string | number | (string | number)[]) => void;\n}\n\n/**\n * UISelect - Dropdown select\n *\n * @example\n * ```tsx\n * <UISelect\n * options={[\n * { label: 'Option 1', value: 1 },\n * { label: 'Option 2', value: 2, icon: <Icon /> },\n * ]}\n * placeholder=\"Select option\"\n * />\n *\n * <UISelect\n * mode=\"multiple\"\n * options={options}\n * showSearch\n * allowClear\n * />\n * ```\n */\nexport function UISelect({\n options = [],\n value,\n defaultValue,\n placeholder,\n disabled,\n loading,\n allowClear,\n showSearch,\n mode,\n onChange,\n ...rest\n}: UISelectProps) {\n // Transform options to support icon + description\n const transformedOptions = options.map((opt) => ({\n label: opt.icon || opt.description ? (\n <UIFlex align=\"center\" gap={2} style={{ width: '100%' }}>\n {opt.icon && <span>{opt.icon}</span>}\n <span style={{ flex: 1 }}>{opt.label}</span>\n {opt.description && (\n <span style={{ fontSize: '0.85em', opacity: 0.7 }}>\n {opt.description}\n </span>\n )}\n </UIFlex>\n ) : opt.label,\n value: opt.value,\n disabled: opt.disabled,\n }));\n\n return (\n <AntSelect\n options={transformedOptions}\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n loading={loading}\n allowClear={allowClear}\n showSearch={showSearch}\n mode={mode}\n onChange={onChange}\n {...rest}\n />\n );\n}\n","/**\n * UIForm component - Form wrapper with validation\n *\n * Wraps Ant Design Form with consistent layout.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Form as AntForm } from 'antd';\nimport type { FormProps as AntFormProps, FormItemProps as AntFormItemProps } from 'antd';\n\nexport type UIFormLayout = 'horizontal' | 'vertical' | 'inline';\n\nexport interface UIFormProps extends AntFormProps {\n /** Form layout */\n layout?: UIFormLayout;\n /** Submit handler */\n onFinish?: (values: any) => void;\n /** Failed submit handler */\n onFinishFailed?: (errorInfo: any) => void;\n /** Initial form values */\n initialValues?: Record<string, any>;\n /** Form content */\n children: React.ReactNode;\n}\n\n/**\n * UIForm - Form wrapper\n *\n * @example\n * ```tsx\n * <UIForm layout=\"vertical\" onFinish={handleSubmit}>\n * <UIFormItem label=\"Username\" name=\"username\" rules={[{ required: true }]}>\n * <UIInput />\n * </UIFormItem>\n * <UIFormItem>\n * <UIButton variant=\"primary\" htmlType=\"submit\">Submit</UIButton>\n * </UIFormItem>\n * </UIForm>\n * ```\n */\nexport function UIForm({\n layout = 'vertical',\n onFinish,\n onFinishFailed,\n initialValues,\n children,\n ...rest\n}: UIFormProps) {\n return (\n <AntForm\n layout={layout}\n onFinish={onFinish}\n onFinishFailed={onFinishFailed}\n initialValues={initialValues}\n {...rest}\n >\n {children}\n </AntForm>\n );\n}\n\n/**\n * UIFormItem - Form field wrapper\n *\n * @example\n * ```tsx\n * <UIFormItem\n * label=\"Email\"\n * name=\"email\"\n * rules={[\n * { required: true, message: 'Please enter email' },\n * { type: 'email', message: 'Please enter valid email' }\n * ]}\n * >\n * <UIInput type=\"email\" />\n * </UIFormItem>\n * ```\n */\nexport function UIFormItem(props: AntFormItemProps) {\n return <AntForm.Item {...props} />;\n}\n\n/**\n * useForm hook - Form instance hook\n */\nexport const useUIForm = AntForm.useForm;\n\n/**\n * UIFormList - Dynamic form list\n */\nexport function UIFormList(props: React.ComponentProps<typeof AntForm.List>) {\n return <AntForm.List {...props} />;\n}\n","/**\n * UICheckbox component - Checkbox input\n *\n * Wraps Ant Design Checkbox with group support.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Checkbox as AntCheckbox } from 'antd';\nimport { UIBox, type UIBoxSpacingValue } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nexport interface UICheckboxOption {\n /** Option label */\n label: string;\n /** Option value */\n value: string | number;\n /** Disabled option */\n disabled?: boolean;\n /** Option description */\n description?: string;\n}\n\nexport interface UICheckboxProps {\n /** Checkbox label */\n children?: React.ReactNode;\n /** Checked state */\n checked?: boolean;\n /** Default checked state */\n defaultChecked?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Indeterminate state */\n indeterminate?: boolean;\n /** Change handler (returns checked boolean) */\n onChange?: (checked: boolean) => void;\n}\n\nexport interface UICheckboxGroupProps {\n /** Checkbox options */\n options: UICheckboxOption[];\n /** Selected values */\n value?: (string | number)[];\n /** Default selected values */\n defaultValue?: (string | number)[];\n /** Disabled state */\n disabled?: boolean;\n /** Gap between checkboxes (spacing token) */\n gap?: UIBoxSpacingValue;\n /** Change handler (returns array of values) */\n onChange?: (values: (string | number)[]) => void;\n}\n\n/**\n * UICheckbox - Single checkbox\n *\n * @example\n * ```tsx\n * <UICheckbox checked onChange={(checked) => console.log(checked)}>\n * Accept terms\n * </UICheckbox>\n *\n * <UICheckbox indeterminate>Select all</UICheckbox>\n * ```\n */\nexport function UICheckbox({\n children,\n checked,\n defaultChecked,\n disabled,\n indeterminate,\n onChange,\n ...rest\n}: UICheckboxProps) {\n const handleChange = (e: any) => {\n onChange?.(e.target.checked);\n };\n\n return (\n <AntCheckbox\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n indeterminate={indeterminate}\n onChange={handleChange}\n {...rest}\n >\n {children}\n </AntCheckbox>\n );\n}\n\n/**\n * UICheckboxGroup - Checkbox group\n *\n * @example\n * ```tsx\n * <UICheckboxGroup\n * options={[\n * { label: 'Option 1', value: 1 },\n * { label: 'Option 2', value: 2, description: 'With description' },\n * ]}\n * gap={3}\n * onChange={(values) => console.log(values)}\n * />\n * ```\n */\nexport function UICheckboxGroup({\n options,\n value,\n defaultValue,\n disabled,\n gap = 2,\n onChange,\n}: UICheckboxGroupProps) {\n return (\n <AntCheckbox.Group value={value} defaultValue={defaultValue} disabled={disabled} onChange={onChange}>\n <UIBox>\n {options.map((option, index) => (\n <UIBox key={option.value} mb={index < options.length - 1 ? gap : 0}>\n <AntCheckbox value={option.value} disabled={option.disabled}>\n {option.label}\n </AntCheckbox>\n {option.description && (\n <UIText\n size=\"sm\"\n color=\"secondary\"\n as=\"div\"\n style={{ marginLeft: spacing[6], marginTop: spacing[1] }}\n >\n {option.description}\n </UIText>\n )}\n </UIBox>\n ))}\n </UIBox>\n </AntCheckbox.Group>\n );\n}\n","/**\n * UISwitch component - Toggle switch\n *\n * Wraps Ant Design Switch with label positioning.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Switch as AntSwitch } from 'antd';\nimport type { SwitchProps as AntSwitchProps } from 'antd';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UIText } from '../primitives/UIText';\n\nexport type UISwitchSize = 'small' | 'default';\nexport type UISwitchLabelPosition = 'left' | 'right';\n\nexport interface UISwitchProps extends Omit<AntSwitchProps, 'onChange'> {\n /** Checked state */\n checked?: boolean;\n /** Default checked state */\n defaultChecked?: boolean;\n /** Disabled state */\n disabled?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Switch size */\n size?: UISwitchSize;\n /** Label text */\n label?: string;\n /** Label position */\n labelPosition?: UISwitchLabelPosition;\n /** Checked children (text inside switch when on) */\n checkedChildren?: React.ReactNode;\n /** Unchecked children (text inside switch when off) */\n unCheckedChildren?: React.ReactNode;\n /** Change handler (returns checked boolean) */\n onChange?: (checked: boolean) => void;\n}\n\n/**\n * UISwitch - Toggle switch\n *\n * @example\n * ```tsx\n * <UISwitch label=\"Enable notifications\" />\n * <UISwitch label=\"Dark mode\" labelPosition=\"left\" />\n * <UISwitch\n * checkedChildren=\"ON\"\n * unCheckedChildren=\"OFF\"\n * defaultChecked\n * />\n * ```\n */\nexport function UISwitch({\n checked,\n defaultChecked,\n disabled,\n loading,\n size = 'default',\n label,\n labelPosition = 'right',\n checkedChildren,\n unCheckedChildren,\n onChange,\n ...rest\n}: UISwitchProps) {\n const switchElement = (\n <AntSwitch\n checked={checked}\n defaultChecked={defaultChecked}\n disabled={disabled}\n loading={loading}\n size={size}\n checkedChildren={checkedChildren}\n unCheckedChildren={unCheckedChildren}\n onChange={onChange}\n {...rest}\n />\n );\n\n if (!label) {\n return switchElement;\n }\n\n return (\n <UIFlex align=\"center\" gap={2}>\n {labelPosition === 'left' && <UIText>{label}</UIText>}\n {switchElement}\n {labelPosition === 'right' && <UIText>{label}</UIText>}\n </UIFlex>\n );\n}\n","/**\n * UIDatePicker component - Date/time picker\n *\n * Wraps Ant Design DatePicker with variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { DatePicker as AntDatePicker, TimePicker as AntTimePicker } from 'antd';\nimport type { DatePickerProps as AntDatePickerProps, TimePickerProps as AntTimePickerProps } from 'antd';\nimport type { Dayjs } from 'dayjs';\n\nexport interface UIDatePickerProps extends Omit<AntDatePickerProps, 'onChange'> {\n /** Selected date */\n value?: Dayjs | null;\n /** Default date */\n defaultValue?: Dayjs;\n /** Placeholder */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Date format */\n format?: string;\n /** Allow clear */\n allowClear?: boolean;\n /** Show time picker */\n showTime?: boolean;\n /** Change handler (returns Dayjs or null) */\n onChange?: (date: Dayjs | null) => void;\n}\n\nexport interface UITimePickerProps extends Omit<AntTimePickerProps, 'onChange'> {\n /** Selected time */\n value?: Dayjs | null;\n /** Default time */\n defaultValue?: Dayjs;\n /** Placeholder */\n placeholder?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Time format */\n format?: string;\n /** Allow clear */\n allowClear?: boolean;\n /** Change handler (returns Dayjs or null) */\n onChange?: (time: Dayjs | null) => void;\n}\n\n/**\n * UIDatePicker - Date picker\n *\n * @example\n * ```tsx\n * <UIDatePicker placeholder=\"Select date\" />\n * <UIDatePicker showTime format=\"YYYY-MM-DD HH:mm:ss\" />\n * <UIDatePicker\n * onChange={(date) => console.log(date?.format('YYYY-MM-DD'))}\n * />\n * ```\n */\nexport function UIDatePicker({\n value,\n defaultValue,\n placeholder,\n disabled,\n format,\n allowClear = true,\n showTime,\n onChange,\n ...rest\n}: UIDatePickerProps) {\n return (\n <AntDatePicker\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n format={format}\n allowClear={allowClear}\n showTime={showTime}\n onChange={onChange}\n {...rest}\n />\n );\n}\n\n/**\n * UITimePicker - Time picker\n *\n * @example\n * ```tsx\n * <UITimePicker placeholder=\"Select time\" />\n * <UITimePicker format=\"HH:mm\" />\n * ```\n */\nexport function UITimePicker({\n value,\n defaultValue,\n placeholder,\n disabled,\n format,\n allowClear = true,\n onChange,\n ...rest\n}: UITimePickerProps) {\n return (\n <AntTimePicker\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n format={format}\n allowClear={allowClear}\n onChange={onChange}\n {...rest}\n />\n );\n}\n\n/**\n * UIRangePicker - Date range picker\n */\nexport function UIRangePicker(props: React.ComponentProps<typeof AntDatePicker.RangePicker>) {\n return <AntDatePicker.RangePicker {...props} />;\n}\n","/**\n * UIInputNumber component - Numeric input\n *\n * Wraps Ant Design InputNumber for numeric value entry.\n */\n\nimport * as React from 'react';\nimport { InputNumber as AntInputNumber, type InputNumberProps as AntInputNumberProps } from 'antd';\n\nexport interface UIInputNumberProps extends AntInputNumberProps {}\n\nexport function UIInputNumber(props: UIInputNumberProps) {\n return <AntInputNumber {...props} />;\n}\n","/**\n * UIRadio component - Radio button\n *\n * Wraps Ant Design Radio and Radio.Group.\n */\n\nimport * as React from 'react';\nimport { Radio as AntRadio, type RadioProps as AntRadioProps, type RadioGroupProps as AntRadioGroupProps } from 'antd';\n\nexport interface UIRadioProps extends AntRadioProps {}\nexport interface UIRadioGroupProps extends AntRadioGroupProps {}\n\nexport function UIRadio(props: UIRadioProps) {\n return <AntRadio {...props} />;\n}\n\nexport function UIRadioGroup(props: UIRadioGroupProps) {\n return <AntRadio.Group {...props} />;\n}\n\n","/**\n * UIUpload component - File upload\n *\n * Wraps Ant Design Upload.\n */\n\nimport * as React from 'react';\nimport { Upload as AntUpload, type UploadProps as AntUploadProps } from 'antd';\n\nexport interface UIUploadProps extends AntUploadProps {}\n\nexport function UIUpload(props: UIUploadProps) {\n return <AntUpload {...props} />;\n}\n\nexport function UIUploadDragger(props: React.ComponentProps<typeof AntUpload.Dragger>) {\n return <AntUpload.Dragger {...props} />;\n}\n","/**\n * UISlider component - Slider input\n *\n * Wraps Ant Design Slider.\n */\n\nimport * as React from 'react';\nimport { Slider as AntSlider, type SliderSingleProps } from 'antd';\n\nexport interface UISliderProps extends SliderSingleProps {}\n\nexport function UISlider(props: UISliderProps) {\n return <AntSlider {...props} />;\n}\n","/**\n * UIBreadcrumb component - Navigation breadcrumb trail\n *\n * Wraps Ant Design Breadcrumb with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Breadcrumb as AntBreadcrumb } from 'antd';\nimport { useNavigate } from 'react-router-dom';\n\nexport interface UIBreadcrumbItem {\n /** Breadcrumb text */\n title: string;\n /** Optional link href */\n href?: string;\n /** Optional icon */\n icon?: React.ReactNode;\n /** Click handler (if no href) */\n onClick?: () => void;\n}\n\nexport interface UIBreadcrumbProps {\n /** Breadcrumb items */\n items: UIBreadcrumbItem[];\n /** Custom separator */\n separator?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * UIBreadcrumb - Navigation breadcrumb\n *\n * @example\n * ```tsx\n * <UIBreadcrumb\n * items={[\n * { title: 'Home', href: '/' },\n * { title: 'Workflows', href: '/workflows' },\n * { title: 'Details' },\n * ]}\n * />\n *\n * <UIBreadcrumb\n * items={[\n * { title: 'Dashboard', icon: <HomeIcon /> },\n * { title: 'Settings', onClick: () => navigate('/settings') },\n * ]}\n * separator=\">\"\n * />\n * ```\n */\nexport function UIBreadcrumb({\n items,\n separator,\n className,\n}: UIBreadcrumbProps) {\n const navigate = useNavigate();\n\n const breadcrumbItems = items.map((item) => ({\n title: item.icon ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>\n {item.icon}\n <span>{item.title}</span>\n </span>\n ) : item.title,\n href: item.href,\n onClick: item.href\n ? (e: React.MouseEvent) => {\n e.preventDefault();\n navigate(item.href!);\n }\n : item.onClick,\n }));\n\n return (\n <AntBreadcrumb\n items={breadcrumbItems}\n separator={separator}\n className={className}\n />\n );\n}\n","/**\n * UITabs component - Tabbed navigation\n *\n * Wraps Ant Design Tabs with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n *\n * syncUrl modes:\n * - \"search\" — syncs with ?tab= query param (for pages at a fixed path, e.g. /)\n * - \"path\" — syncs with /:tab path segment via navigate (for pages like /settings/:tab)\n */\n\nimport * as React from 'react';\nimport { Tabs as AntTabs } from 'antd';\nimport { useSearchParams, useNavigate, useParams } from 'react-router-dom';\n\nexport interface UITabItem {\n /** Tab key */\n key: string;\n /** Tab label */\n label: string;\n /** Tab icon */\n icon?: React.ReactNode;\n /** Tab content */\n children: React.ReactNode;\n /** Disabled tab */\n disabled?: boolean;\n /** Closable tab */\n closable?: boolean;\n}\n\nexport interface UITabsProps {\n /** Tab items */\n items: UITabItem[];\n /**\n * Sync active tab with URL automatically.\n * - true / \"search\" — uses ?tab= query param, default tab = first item (clean URL)\n * - { mode: \"path\", basePath } — uses /:tab path segment (e.g. \"/settings\")\n */\n syncUrl?: boolean | 'search' | { mode: 'path'; basePath: string };\n /** Controlled active tab key (ignored when syncUrl is set) */\n activeKey?: string;\n /** Default active tab key */\n defaultActiveKey?: string;\n /** Tab position */\n tabPosition?: 'top' | 'right' | 'bottom' | 'left';\n /** Tab type */\n type?: 'line' | 'card';\n /** Tab size */\n size?: 'small' | 'middle' | 'large';\n /** Change handler (called in addition to URL sync) */\n onChange?: (activeKey: string) => void;\n /** Tab edit handler (for closable tabs) */\n onEdit?: (targetKey: string, action: 'add' | 'remove') => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\nfunction UITabsInner({\n items,\n syncUrl,\n activeKey: controlledActiveKey,\n defaultActiveKey,\n tabPosition = 'top',\n type = 'line',\n size = 'middle',\n onChange,\n onEdit,\n className,\n style,\n}: UITabsProps) {\n const [searchParams, setSearchParams] = useSearchParams();\n const navigate = useNavigate();\n const params = useParams<{ tab?: string }>();\n\n const defaultKey = items[0]?.key ?? '';\n\n let activeKey: string | undefined = controlledActiveKey;\n\n const isSearch = syncUrl === true || syncUrl === 'search';\n const isPath = syncUrl && typeof syncUrl === 'object' && syncUrl.mode === 'path';\n\n if (isSearch) {\n activeKey = searchParams.get('tab') ?? defaultKey;\n } else if (isPath) {\n activeKey = params.tab ?? defaultKey;\n }\n\n const handleChange = (key: string) => {\n if (isSearch) {\n setSearchParams(key === defaultKey ? {} : { tab: key });\n } else if (isPath && typeof syncUrl === 'object') {\n const path = key === defaultKey ? syncUrl.basePath : `${syncUrl.basePath}/${key}`;\n navigate(path);\n }\n onChange?.(key);\n };\n\n const tabItems = items.map((item) => ({\n key: item.key,\n label: item.icon ? (\n <span style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n {item.icon}\n <span>{item.label}</span>\n </span>\n ) : item.label,\n children: item.children,\n disabled: item.disabled,\n closable: item.closable,\n }));\n\n const handleEdit = onEdit\n ? (targetKey: string | React.MouseEvent | React.KeyboardEvent, action: 'add' | 'remove') => {\n const key = typeof targetKey === 'string' ? targetKey : '';\n onEdit(key, action);\n }\n : undefined;\n\n return (\n <AntTabs\n items={tabItems}\n activeKey={activeKey}\n defaultActiveKey={syncUrl ? undefined : defaultActiveKey}\n tabPosition={tabPosition}\n type={type}\n size={size}\n onChange={handleChange}\n onEdit={handleEdit}\n className={className}\n style={style}\n />\n );\n}\n\nexport function UITabs(props: UITabsProps) {\n return <UITabsInner {...props} />;\n}\n","/**\n * UIAccordion component - Collapsible panels\n *\n * Wraps Ant Design Collapse with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Collapse as AntCollapse } from 'antd';\n\nexport interface UIAccordionItem {\n /** Panel key */\n key: string;\n /** Panel header/title */\n label: string;\n /** Panel content */\n children: React.ReactNode;\n /** Extra content in header */\n extra?: React.ReactNode;\n /** Show arrow */\n showArrow?: boolean;\n /** Collapsible trigger */\n collapsible?: 'header' | 'icon' | 'disabled';\n}\n\nexport interface UIAccordionProps {\n /** Accordion items */\n items: UIAccordionItem[];\n /** Active panel keys */\n activeKey?: string | string[];\n /** Default active panel keys */\n defaultActiveKey?: string | string[];\n /** Accordion mode (allow multiple open) */\n accordion?: boolean;\n /** Bordered style */\n bordered?: boolean;\n /** Ghost style (no border, no background) */\n ghost?: boolean;\n /** Size */\n size?: 'small' | 'middle' | 'large';\n /** Change handler */\n onChange?: (keys: string | string[]) => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIAccordion - Collapsible panels\n *\n * @example\n * ```tsx\n * <UIAccordion\n * items={[\n * {\n * key: '1',\n * label: 'Section 1',\n * children: <div>Content 1</div>,\n * },\n * {\n * key: '2',\n * label: 'Section 2',\n * children: <div>Content 2</div>,\n * },\n * ]}\n * defaultActiveKey={['1']}\n * />\n *\n * <UIAccordion\n * accordion\n * items={sections}\n * onChange={(key) => console.log('Active:', key)}\n * />\n *\n * <UIAccordion\n * ghost\n * items={[\n * {\n * key: 'advanced',\n * label: 'Advanced Options',\n * children: <AdvancedForm />,\n * extra: <UIBadge>New</UIBadge>,\n * },\n * ]}\n * />\n * ```\n */\nexport function UIAccordion({\n items,\n activeKey,\n defaultActiveKey,\n accordion = false,\n bordered = true,\n ghost = false,\n size = 'middle',\n onChange,\n className,\n style,\n}: UIAccordionProps) {\n const collapseItems = items.map((item) => ({\n key: item.key,\n label: item.label,\n children: item.children,\n extra: item.extra,\n showArrow: item.showArrow,\n collapsible: item.collapsible,\n }));\n\n return (\n <AntCollapse\n items={collapseItems}\n activeKey={activeKey}\n defaultActiveKey={defaultActiveKey}\n accordion={accordion}\n bordered={bordered}\n ghost={ghost}\n size={size}\n onChange={onChange}\n className={className}\n style={style}\n />\n );\n}\n","/**\n * UIDropdown component - Dropdown menu\n *\n * Wraps Ant Design Dropdown.\n */\n\nimport * as React from 'react';\nimport { Dropdown as AntDropdown, type DropdownProps as AntDropdownProps } from 'antd';\n\nexport interface UIDropdownProps extends AntDropdownProps {}\n\nexport function UIDropdown(props: UIDropdownProps) {\n return <AntDropdown {...props} />;\n}\n\nexport function UIDropdownButton(props: React.ComponentProps<typeof AntDropdown.Button>) {\n return <AntDropdown.Button {...props} />;\n}\n","/**\n * UISegmented component - Segmented control\n *\n * Wraps Ant Design Segmented for tab-like selection.\n */\n\nimport * as React from 'react';\nimport { Segmented as AntSegmented, type SegmentedProps as AntSegmentedProps } from 'antd';\n\nexport interface UISegmentedProps extends AntSegmentedProps {}\n\nexport function UISegmented(props: UISegmentedProps) {\n return <AntSegmented {...props} />;\n}\n","/**\n * UISteps component - Step indicator\n *\n * Wraps Ant Design Steps for multi-step processes.\n */\n\nimport * as React from 'react';\nimport { Steps as AntSteps, type StepsProps as AntStepsProps } from 'antd';\n\nexport interface UIStepsProps extends AntStepsProps {}\n\nexport function UISteps(props: UIStepsProps) {\n return <AntSteps {...props} />;\n}\n","/**\n * UIMenu component - Navigation menu\n *\n * Wraps Ant Design Menu.\n */\n\nimport * as React from 'react';\nimport { Menu as AntMenu, type MenuProps as AntMenuProps } from 'antd';\n\nexport interface UIMenuProps extends AntMenuProps {}\n\nexport function UIMenu(props: UIMenuProps) {\n return <AntMenu {...props} />;\n}\n","/**\n * UIPage component - Page container with padding and max-width\n *\n * Wraps page content with consistent padding and responsive max-width.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport type UIPageWidth = 'default' | 'wide' | 'full';\n\nexport interface UIPageProps {\n /** Page content */\n children: React.ReactNode;\n /** Max width mode */\n width?: UIPageWidth;\n /**\n * Page variant:\n * - 'default' — transparent background, cards float on grey (dashboard, lists)\n * - 'document' — white card wrapping all content (settings, detail pages)\n */\n variant?: 'default' | 'document';\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIPage - Page container\n *\n * @example\n * ```tsx\n * <UIPage>\n * <UIHeader title=\"Dashboard\" />\n * <div>Content here</div>\n * </UIPage>\n *\n * <UIPage width=\"wide\">\n * <div>Wider content area</div>\n * </UIPage>\n *\n * <UIPage width=\"full\">\n * <div>Full width, no max-width constraint</div>\n * </UIPage>\n * ```\n */\nexport function UIPage({\n children,\n width = 'default',\n variant = 'default',\n className,\n style: customStyle,\n}: UIPageProps) {\n const { token } = useToken();\n\n const maxWidthMap: Record<UIPageWidth, string> = {\n default: '1280px',\n wide: '1600px',\n full: '100%',\n };\n\n const isDocument = variant === 'document';\n\n const style: React.CSSProperties = {\n maxWidth: maxWidthMap[width],\n margin: '0 auto',\n padding: token.padding,\n ...(isDocument && {\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadiusLG,\n boxShadow: token.boxShadow,\n }),\n minHeight: isDocument ? undefined : '100%',\n ...customStyle,\n };\n\n return (\n <UIBox as=\"main\" className={className} style={style}>\n {children}\n </UIBox>\n );\n}\n","/**\n * UIHeader component - Page header with title, subtitle, and breadcrumbs\n *\n * Displays page title with optional subtitle, breadcrumbs, and actions.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UITitle } from '../core/UITitle';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport interface UIHeaderProps {\n /** Page title */\n title: string;\n /** Optional subtitle/description */\n subtitle?: string;\n /** Breadcrumb component */\n breadcrumb?: React.ReactNode;\n /** Action buttons (right side) */\n actions?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIHeader - Page header\n *\n * @example\n * ```tsx\n * <UIHeader\n * title=\"Dashboard\"\n * subtitle=\"Overview of your workspace\"\n * />\n *\n * <UIHeader\n * title=\"Workflows\"\n * breadcrumb={<UIBreadcrumb items={[{ title: 'Home' }, { title: 'Workflows' }]} />}\n * actions={<UIButton variant=\"primary\">Create Workflow</UIButton>}\n * />\n * ```\n */\nexport function UIHeader({\n title,\n subtitle,\n breadcrumb,\n actions,\n className,\n style: customStyle,\n}: UIHeaderProps) {\n const { token } = useToken();\n\n const style: React.CSSProperties = {\n borderBottom: `1px solid ${token.colorBorder}`,\n paddingBottom: spacing[4],\n marginBottom: spacing[6],\n ...customStyle,\n };\n\n return (\n <UIBox className={className} style={style}>\n {breadcrumb && (\n <UIBox mb={2}>\n {breadcrumb}\n </UIBox>\n )}\n\n <UIFlex justify=\"between\" align=\"start\" gap={4}>\n <UIBox style={{ flex: 1 }}>\n <UITitle level={1} style={{ marginBottom: subtitle ? spacing[2] : 0 }}>\n {title}\n </UITitle>\n {subtitle && (\n <UIText size=\"base\" color=\"secondary\">\n {subtitle}\n </UIText>\n )}\n </UIBox>\n\n {actions && (\n <UIBox style={{ flexShrink: 0 }}>\n {actions}\n </UIBox>\n )}\n </UIFlex>\n </UIBox>\n );\n}\n","/**\n * UIPageHeader component - Standard page header\n *\n * Handles title, description, breadcrumbs, actions, back button, icon, tabs.\n * NO hardcoded colors — all via useToken().\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIButton } from '../core/UIButton';\nimport { UIIcon } from '../core/UIIcon';\nimport { UIBreadcrumb } from '../navigation/UIBreadcrumb';\nimport { UIDivider } from '../layout/UIDivider';\nimport { UIText } from '../primitives/UIText';\n\nconst { useToken } = theme;\n\nexport interface UIPageBreadcrumbItem {\n title: string;\n href?: string;\n}\n\nexport interface UIPageHeaderProps {\n /** Page title */\n title: string | React.ReactNode;\n /** Subtitle below title */\n description?: string | React.ReactNode;\n /** Icon displayed left of title */\n icon?: React.ReactNode;\n /** Breadcrumb trail above title */\n breadcrumbs?: UIPageBreadcrumbItem[];\n /** Actions slot — right side (buttons, menus, etc.) */\n actions?: React.ReactNode;\n /** Tabs slot — rendered below divider */\n tabs?: React.ReactNode;\n /** Back button handler — renders ← button */\n onBack?: () => void;\n /** Escape hatch for custom content below description */\n children?: React.ReactNode;\n}\n\n/**\n * UIPageHeader - Standard page header for Studio and plugins\n *\n * @example\n * ```tsx\n * <UIPageHeader\n * title=\"Release Manager\"\n * description=\"Manage deployments and releases\"\n * breadcrumbs={[{ title: 'Plugins' }, { title: 'Release Manager' }]}\n * actions={<UIButton variant=\"primary\">Deploy</UIButton>}\n * onBack={() => navigate(-1)}\n * />\n *\n * <UIPageHeader\n * title=\"Settings\"\n * tabs={<UITabs items={tabItems} />}\n * />\n * ```\n */\nexport function UIPageHeader({\n title,\n description,\n icon,\n breadcrumbs,\n actions,\n tabs,\n onBack,\n children,\n}: UIPageHeaderProps) {\n const { token } = useToken();\n\n const hasTabs = !!tabs;\n\n return (\n <div style={{ marginBottom: hasTabs ? 0 : 24 }}>\n {/* Back button + Breadcrumbs row */}\n {(onBack || (breadcrumbs && breadcrumbs.length > 0)) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: token.marginXS,\n marginBottom: token.marginXS,\n }}\n >\n {onBack && (\n <UIButton\n variant=\"text\"\n size=\"small\"\n icon={<UIIcon name=\"ArrowLeftOutlined\" />}\n onClick={onBack}\n style={{ padding: '0 4px' }}\n />\n )}\n {breadcrumbs && breadcrumbs.length > 0 && (\n <UIBreadcrumb\n items={breadcrumbs.map((item) => ({\n title: item.title,\n ...(item.href ? { href: item.href } : {}),\n }))}\n />\n )}\n </div>\n )}\n\n {/* Title row: icon + title + actions */}\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: token.marginSM,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', gap: token.marginSM, minWidth: 0 }}>\n {icon && (\n <span\n style={{\n fontSize: 24,\n color: token.colorPrimary,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n }}\n >\n {icon}\n </span>\n )}\n <div style={{ minWidth: 0 }}>\n {typeof title === 'string' ? (\n <h2\n style={{\n margin: 0,\n fontFamily: 'var(--font-heading)',\n fontSize: token.fontSizeHeading3,\n fontWeight: 700,\n letterSpacing: '-0.02em',\n color: token.colorTextHeading,\n lineHeight: 1.2,\n }}\n >\n {title}\n </h2>\n ) : (\n title\n )}\n {description && (\n <div style={{ marginTop: 4 }}>\n {typeof description === 'string' ? (\n <UIText color=\"secondary\" size=\"sm\">\n {description}\n </UIText>\n ) : (\n description\n )}\n </div>\n )}\n </div>\n </div>\n\n {actions && (\n <div style={{ display: 'flex', alignItems: 'center', gap: token.marginXS, flexShrink: 0 }}>\n {actions}\n </div>\n )}\n </div>\n\n {/* Escape hatch children */}\n {children && <div style={{ marginTop: token.marginSM }}>{children}</div>}\n\n {/* Tabs with divider */}\n {hasTabs && (\n <>\n <UIDivider style={{ marginBottom: 0 }} />\n {tabs}\n </>\n )}\n </div>\n );\n}\n","/**\n * UIPageSection component - Section within a page\n *\n * Adds consistent bottom margin between page sections.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\n\nexport interface UIPageSectionProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n /** Bottom margin in px, default 24 */\n gap?: number;\n}\n\nexport function UIPageSection({ children, gap = 24, style, ...rest }: UIPageSectionProps) {\n return (\n <div style={{ marginBottom: gap, ...style }} {...rest}>\n {children}\n </div>\n );\n}\n","/**\n * UIAlert component - Alert messages and notifications\n *\n * Wraps Ant Design Alert with semantic variants.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Alert as AntAlert } from 'antd';\n\nexport type UIAlertVariant = 'success' | 'info' | 'warning' | 'error';\n\nexport interface UIAlertProps {\n /** Alert variant */\n variant?: UIAlertVariant;\n /** Alert title */\n title?: string;\n /** Alert message */\n message: React.ReactNode;\n /** Alert description */\n description?: React.ReactNode;\n /** Show icon */\n showIcon?: boolean;\n /** Closable alert */\n closable?: boolean;\n /** Close handler */\n onClose?: () => void;\n /** Action button */\n action?: React.ReactNode;\n /** Custom icon */\n icon?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIAlert - Alert message\n *\n * @example\n * ```tsx\n * <UIAlert variant=\"success\" message=\"Success message\" />\n *\n * <UIAlert\n * variant=\"error\"\n * title=\"Error\"\n * message=\"Something went wrong\"\n * description=\"Please try again later\"\n * showIcon\n * closable\n * />\n *\n * <UIAlert\n * variant=\"warning\"\n * message=\"Warning\"\n * action={<UIButton size=\"small\">Action</UIButton>}\n * />\n * ```\n */\nexport function UIAlert({\n variant = 'info',\n title,\n message,\n description,\n showIcon,\n closable,\n onClose,\n action,\n icon,\n className,\n style,\n}: UIAlertProps) {\n return (\n <AntAlert\n type={variant}\n message={title || message}\n description={title ? description || message : description}\n showIcon={showIcon}\n closable={closable}\n onClose={onClose}\n action={action}\n icon={icon}\n className={className}\n style={style}\n />\n );\n}\n","/**\n * UIEmptyState component - Empty state placeholder\n *\n * Displays empty state with icon, title, description, and optional action.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Empty as AntEmpty, theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport interface UIEmptyStateProps {\n /** Empty state icon */\n icon?: React.ReactNode;\n /** Empty state title */\n title?: string;\n /** Empty state description */\n description?: string;\n /** Action button */\n action?: React.ReactNode;\n /** Children rendered below description/action (alias for action) */\n children?: React.ReactNode;\n /** Use default Ant Design empty image */\n useDefaultImage?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Ant Design image prop (e.g. Empty.PRESENTED_IMAGE_SIMPLE) */\n image?: React.ReactNode;\n}\n\n/**\n * UIEmptyState - Empty state placeholder\n *\n * @example\n * ```tsx\n * <UIEmptyState\n * title=\"No workflows\"\n * description=\"Get started by creating your first workflow\"\n * action={<UIButton variant=\"primary\">Create Workflow</UIButton>}\n * />\n *\n * <UIEmptyState\n * icon={<SearchIcon />}\n * title=\"No results found\"\n * description=\"Try adjusting your search criteria\"\n * />\n *\n * <UIEmptyState useDefaultImage />\n * ```\n */\nexport function UIEmptyState({\n icon,\n title,\n description,\n action,\n children,\n useDefaultImage,\n image,\n className,\n style: customStyle,\n}: UIEmptyStateProps) {\n const { token } = useToken();\n\n const content = children ?? action;\n\n if (useDefaultImage || image !== undefined) {\n return (\n <AntEmpty\n description={description}\n image={image}\n className={className}\n style={customStyle}\n >\n {content}\n </AntEmpty>\n );\n }\n\n const style: React.CSSProperties = {\n padding: spacing[8],\n textAlign: 'center',\n ...customStyle,\n };\n\n return (\n <UIBox className={className} style={style}>\n <UIFlex direction=\"column\" align=\"center\" gap={3}>\n {icon && (\n <UIBox style={{ fontSize: '48px', color: token.colorTextSecondary }}>\n {icon}\n </UIBox>\n )}\n\n {title && (\n <UIText size=\"lg\" weight=\"semibold\">\n {title}\n </UIText>\n )}\n\n {description && (\n <UIText size=\"base\" color=\"secondary\">\n {description}\n </UIText>\n )}\n\n {content && <UIBox mt={2}>{content}</UIBox>}\n </UIFlex>\n </UIBox>\n );\n}\n\nUIEmptyState.PRESENTED_IMAGE_SIMPLE = AntEmpty.PRESENTED_IMAGE_SIMPLE;\nUIEmptyState.PRESENTED_IMAGE_DEFAULT = AntEmpty.PRESENTED_IMAGE_DEFAULT;\n","/**\n * UIErrorState component - Error state display\n *\n * Displays error state with icon, title, description, and retry action.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\nimport { UIText } from '../primitives/UIText';\nimport { UIFlex } from '../primitives/UIFlex';\nimport { UIButton } from '../core/UIButton';\nimport { spacing } from '@kb-labs/studio-ui-core';\n\nconst { useToken } = theme;\n\nexport interface UIErrorStateProps {\n /** Error icon */\n icon?: React.ReactNode;\n /** Error title */\n title?: string;\n /** Error description */\n description?: string;\n /** Error details (technical message) */\n details?: string;\n /** Show retry button */\n showRetry?: boolean;\n /** Retry button text */\n retryText?: string;\n /** Retry handler */\n onRetry?: () => void;\n /** Custom action (instead of retry) */\n action?: React.ReactNode;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIErrorState - Error state display\n *\n * @example\n * ```tsx\n * <UIErrorState\n * title=\"Failed to load data\"\n * description=\"Something went wrong\"\n * showRetry\n * onRetry={() => refetch()}\n * />\n *\n * <UIErrorState\n * icon={<ErrorIcon />}\n * title=\"Connection error\"\n * description=\"Unable to connect to server\"\n * details=\"Error: ECONNREFUSED 127.0.0.1:5000\"\n * retryText=\"Reconnect\"\n * onRetry={handleReconnect}\n * />\n *\n * <UIErrorState\n * title=\"Access denied\"\n * description=\"You don't have permission to view this resource\"\n * action={<UIButton>Go Back</UIButton>}\n * />\n * ```\n */\nexport function UIErrorState({\n icon,\n title = 'Something went wrong',\n description,\n details,\n showRetry = false,\n retryText = 'Try again',\n onRetry,\n action,\n className,\n style: customStyle,\n}: UIErrorStateProps) {\n const { token } = useToken();\n\n const style: React.CSSProperties = {\n padding: spacing[8],\n textAlign: 'center',\n ...customStyle,\n };\n\n return (\n <UIBox className={className} style={style}>\n <UIFlex direction=\"column\" align=\"center\" gap={3}>\n {icon && (\n <UIBox style={{ fontSize: '48px', color: token.colorError }}>\n {icon}\n </UIBox>\n )}\n\n <UIText size=\"lg\" weight=\"semibold\" color=\"error\">\n {title}\n </UIText>\n\n {description && (\n <UIText size=\"base\" color=\"secondary\">\n {description}\n </UIText>\n )}\n\n {details && (\n <UIBox\n p={3}\n style={{\n backgroundColor: token.colorErrorBg,\n borderRadius: token.borderRadius,\n maxWidth: '600px',\n width: '100%',\n }}\n >\n <UIText size=\"sm\" as=\"pre\" style={{ margin: 0, textAlign: 'left', whiteSpace: 'pre-wrap' }}>\n {details}\n </UIText>\n </UIBox>\n )}\n\n {(showRetry || action) && (\n <UIBox mt={2}>\n {action || (\n <UIButton variant=\"primary\" onClick={onRetry}>\n {retryText}\n </UIButton>\n )}\n </UIBox>\n )}\n </UIFlex>\n </UIBox>\n );\n}\n","@keyframes skeletonLoading {\n 0% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n}\n\n.skeletonText {\n animation: skeletonLoading 1.4s ease infinite;\n}\n","/**\n * UISkeleton component - Loading skeleton\n *\n * Wraps Ant Design Skeleton with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Skeleton as AntSkeleton, theme } from 'antd';\nimport styles from './UISkeleton.module.css';\n\nexport interface UISkeletonProps {\n /** Show loading state */\n loading?: boolean;\n /** Content to show when not loading */\n children?: React.ReactNode;\n /** Show avatar */\n avatar?: boolean;\n /** Avatar shape */\n avatarShape?: 'circle' | 'square';\n /** Number of paragraph lines */\n lines?: number;\n /** Show title */\n title?: boolean;\n /** Active animation */\n active?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UISkeleton - Loading skeleton\n *\n * @example\n * ```tsx\n * <UISkeleton loading={isLoading}>\n * <div>Content</div>\n * </UISkeleton>\n *\n * <UISkeleton avatar lines={3} active />\n *\n * <UISkeleton\n * loading={isLoading}\n * avatar\n * avatarShape=\"circle\"\n * title\n * lines={2}\n * >\n * <ProfileCard />\n * </UISkeleton>\n * ```\n */\nexport function UISkeleton({\n loading = true,\n children,\n avatar,\n avatarShape = 'circle',\n lines = 3,\n title = true,\n active = true,\n className,\n style,\n}: UISkeletonProps) {\n return (\n <AntSkeleton\n loading={loading}\n avatar={avatar ? { shape: avatarShape } : false}\n paragraph={{ rows: lines }}\n title={title}\n active={active}\n className={className}\n style={style}\n >\n {children}\n </AntSkeleton>\n );\n}\n\n/**\n * UISkeletonButton - Button skeleton\n */\nexport function UISkeletonButton(props: React.ComponentProps<typeof AntSkeleton.Button>) {\n return <AntSkeleton.Button {...props} />;\n}\n\n/**\n * UISkeletonInput - Input skeleton\n */\nexport function UISkeletonInput(props: React.ComponentProps<typeof AntSkeleton.Input>) {\n return <AntSkeleton.Input {...props} />;\n}\n\n/**\n * UISkeletonImage - Image skeleton\n */\nexport function UISkeletonImage(props: React.ComponentProps<typeof AntSkeleton.Image>) {\n return <AntSkeleton.Image {...props} />;\n}\n\n/**\n * UISkeletonNode - Custom node skeleton\n */\nexport function UISkeletonNode(props: React.ComponentProps<typeof AntSkeleton.Node>) {\n return <AntSkeleton.Node {...props} />;\n}\n\nexport interface UISkeletonTextProps {\n /**\n * Width of the text line(s). Can be a number (px), string ('100%', '8ch'), or\n * an array to render multiple lines with different widths.\n * @default '100%'\n */\n width?: number | string | Array<number | string>;\n /**\n * Height / font-size of the shimmer block — matches the surrounding text size.\n * @default '1em'\n */\n height?: number | string;\n /** Gap between lines when width is an array */\n gap?: number | string;\n /** Additional CSS class */\n className?: string;\n /** Additional styles applied to the wrapper */\n style?: React.CSSProperties;\n}\n\n/**\n * UISkeletonText - Inline text shimmer placeholder\n *\n * Renders a shimmer block that matches the height of surrounding text.\n * Uses Ant Design's native skeleton animation so it respects the theme.\n *\n * @example\n * // Single line, full width\n * <UISkeletonText />\n *\n * // Single line, fixed width\n * <UISkeletonText width={120} height=\"1em\" />\n *\n * // Multiple lines with varying widths (like a paragraph)\n * <UISkeletonText width={['100%', '85%', '60%']} height=\"14px\" gap={8} />\n *\n * // Match a specific font size\n * <UISkeletonText width=\"8ch\" height=\"20px\" />\n */\nexport function UISkeletonText({\n width = '100%',\n height = '1em',\n gap = 6,\n className,\n style,\n}: UISkeletonTextProps) {\n const { token } = theme.useToken();\n const isArray = Array.isArray(width);\n const widths = isArray ? width : [width];\n const outerWidth = isArray ? '100%' : (typeof width === 'number' ? `${width}px` : width);\n\n return (\n <span\n className={className}\n style={{ display: 'inline-flex', flexDirection: 'column', gap, width: outerWidth, ...style }}\n >\n {widths.map((w, i) => (\n <span\n key={i}\n className={styles.skeletonText}\n style={{\n display: 'block',\n width: isArray ? (typeof w === 'number' ? `${w}px` : w) : '100%',\n height: typeof height === 'number' ? `${height}px` : height,\n borderRadius: token.borderRadiusSM,\n flexShrink: 0,\n backgroundImage: `linear-gradient(90deg, ${token.colorBorder} 25%, ${token.colorBgLayout} 50%, ${token.colorBorder} 75%)`,\n backgroundSize: '400% 100%',\n }}\n />\n ))}\n </span>\n );\n}\n","/**\n * UISpin component - Loading spinner\n *\n * Wraps Ant Design Spin for loading states.\n */\n\nimport * as React from 'react';\nimport { Spin as AntSpin, type SpinProps as AntSpinProps } from 'antd';\n\nexport interface UISpinProps extends AntSpinProps {}\n\nexport function UISpin(props: UISpinProps) {\n return <AntSpin {...props} />;\n}\n","/**\n * UIResult component - Result page\n *\n * Wraps Ant Design Result for success/error/info pages.\n */\n\nimport * as React from 'react';\nimport { Result as AntResult, type ResultProps as AntResultProps } from 'antd';\n\nexport interface UIResultProps extends AntResultProps {}\n\nexport function UIResult(props: UIResultProps) {\n return <AntResult {...props} />;\n}\n","/**\n * UIMessage - Imperative message API\n *\n * Wraps antd's message API to decouple app from antd internals.\n *\n * @example\n * ```tsx\n * import { UIMessage } from '@kb-labs/studio-ui-kit';\n *\n * UIMessage.success('Operation completed');\n * UIMessage.error('Something went wrong');\n * UIMessage.loading('Processing...');\n * ```\n *\n * For hook-based usage (with context holder):\n * ```tsx\n * import { useUIMessage } from '@kb-labs/studio-ui-kit';\n *\n * function MyComponent() {\n * const [messageApi, contextHolder] = useUIMessage();\n * return (\n * <>\n * {contextHolder}\n * <button onClick={() => messageApi.success('Done!')}>Click</button>\n * </>\n * );\n * }\n * ```\n */\n\nimport { message, type MessageArgsProps } from 'antd';\n\ntype MessageFunc = (content: React.ReactNode | MessageArgsProps, duration?: number, onClose?: () => void) => Promise<boolean>;\n\nexport interface UIMessageAPI {\n success: MessageFunc;\n error: MessageFunc;\n info: MessageFunc;\n warning: MessageFunc;\n loading: MessageFunc;\n open: (args: MessageArgsProps) => Promise<boolean>;\n destroy: (key?: React.Key) => void;\n}\n\nexport const UIMessage: UIMessageAPI = message as unknown as UIMessageAPI;\n\nexport function useUIMessage() {\n return message.useMessage();\n}\n","/**\n * UINotification - Imperative notification API\n *\n * Wraps antd's notification API to decouple app from antd internals.\n *\n * @example\n * ```tsx\n * import { UINotification } from '@kb-labs/studio-ui-kit';\n *\n * UINotification.success({ message: 'Done', description: 'Task completed.' });\n * ```\n */\n\nimport { notification } from 'antd';\n\nexport interface UINotificationArgs {\n message: React.ReactNode;\n description?: React.ReactNode;\n key?: React.Key;\n duration?: number | null;\n placement?: 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft' | 'bottomRight';\n icon?: React.ReactNode;\n btn?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n onClick?: () => void;\n onClose?: () => void;\n}\n\ntype NotifyFunc = (args: UINotificationArgs) => void;\n\nexport interface UINotificationAPI {\n success: NotifyFunc;\n error: NotifyFunc;\n info: NotifyFunc;\n warning: NotifyFunc;\n open: NotifyFunc;\n destroy: (key?: React.Key) => void;\n}\n\nexport const UINotification: UINotificationAPI = notification as unknown as UINotificationAPI;\n\nexport function useUINotification() {\n return notification.useNotification();\n}\n","/**\n * UIModal component - Modal dialog\n *\n * Wraps Ant Design Modal with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Modal as AntModal } from 'antd';\n\nexport type UIModalWidth = 'small' | 'default' | 'large' | 'full';\n\nexport interface UIModalProps {\n /** Modal open state */\n open: boolean;\n /** Modal title */\n title?: React.ReactNode;\n /** Modal content */\n children: React.ReactNode;\n /** Modal width preset */\n width?: UIModalWidth | number;\n /** Show close button */\n closable?: boolean;\n /** Mask closable (click outside to close) */\n maskClosable?: boolean;\n /** Show footer */\n footer?: React.ReactNode | null;\n /** OK button text */\n okText?: string;\n /** Cancel button text */\n cancelText?: string;\n /** OK button loading */\n confirmLoading?: boolean;\n /** OK button handler */\n onOk?: () => void;\n /** Cancel button handler */\n onCancel?: () => void;\n /** Close handler */\n onClose?: () => void;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIModal - Modal dialog\n *\n * @example\n * ```tsx\n * <UIModal\n * open={isOpen}\n * title=\"Confirm Action\"\n * onOk={handleOk}\n * onCancel={handleCancel}\n * >\n * Are you sure you want to proceed?\n * </UIModal>\n *\n * <UIModal\n * open={isOpen}\n * title=\"Create Workflow\"\n * width=\"large\"\n * confirmLoading={isSubmitting}\n * onOk={handleSubmit}\n * onCancel={() => setIsOpen(false)}\n * >\n * <WorkflowForm />\n * </UIModal>\n *\n * <UIModal\n * open={isOpen}\n * title=\"Details\"\n * footer={null}\n * onCancel={() => setIsOpen(false)}\n * >\n * <DetailsView />\n * </UIModal>\n * ```\n */\nexport function UIModal({\n open,\n title,\n children,\n width = 'default',\n closable = true,\n maskClosable = true,\n footer,\n okText,\n cancelText,\n confirmLoading,\n onOk,\n onCancel,\n onClose,\n className,\n style,\n}: UIModalProps) {\n const widthMap: Record<UIModalWidth, number> = {\n small: 416,\n default: 520,\n large: 800,\n full: window.innerWidth - 64,\n };\n\n const modalWidth = typeof width === 'number' ? width : widthMap[width];\n\n return (\n <AntModal\n open={open}\n title={title}\n width={modalWidth}\n closable={closable}\n maskClosable={maskClosable}\n footer={footer}\n okText={okText}\n cancelText={cancelText}\n confirmLoading={confirmLoading}\n onOk={onOk}\n onCancel={onCancel || onClose}\n className={className}\n style={style}\n >\n {children}\n </AntModal>\n );\n}\n\n/**\n * UIModalConfirm - Confirmation modal shorthand\n */\nexport const UIModalConfirm = AntModal.confirm;\n\n/**\n * UIModalInfo - Info modal shorthand\n */\nexport const UIModalInfo = AntModal.info;\n\n/**\n * UIModalSuccess - Success modal shorthand\n */\nexport const UIModalSuccess = AntModal.success;\n\n/**\n * UIModalError - Error modal shorthand\n */\nexport const UIModalError = AntModal.error;\n\n/**\n * UIModalWarning - Warning modal shorthand\n */\nexport const UIModalWarning = AntModal.warning;\n","/**\n * UITooltip component - Tooltip overlay\n *\n * Wraps Ant Design Tooltip with simplified API.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { Tooltip as AntTooltip } from 'antd';\n\nexport type UITooltipPlacement =\n | 'top'\n | 'topLeft'\n | 'topRight'\n | 'bottom'\n | 'bottomLeft'\n | 'bottomRight'\n | 'left'\n | 'leftTop'\n | 'leftBottom'\n | 'right'\n | 'rightTop'\n | 'rightBottom';\n\nexport interface UITooltipProps {\n /** Tooltip content */\n title: React.ReactNode;\n /** Element to attach tooltip to */\n children: React.ReactNode;\n /** Tooltip placement */\n placement?: UITooltipPlacement;\n /** Show arrow */\n arrow?: boolean;\n /** Trigger mode */\n trigger?: 'hover' | 'focus' | 'click';\n /** Show/hide controlled */\n open?: boolean;\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * UITooltip - Tooltip overlay\n *\n * @example\n * ```tsx\n * <UITooltip title=\"Click to save\">\n * <UIButton>Save</UIButton>\n * </UITooltip>\n *\n * <UITooltip title=\"Additional information\" placement=\"right\">\n * <InfoIcon />\n * </UITooltip>\n *\n * <UITooltip title=\"Detailed help text\" trigger=\"click\">\n * <HelpIcon />\n * </UITooltip>\n * ```\n */\nexport function UITooltip({\n title,\n children,\n placement = 'top',\n arrow = true,\n trigger = 'hover',\n open,\n className,\n}: UITooltipProps) {\n return (\n <AntTooltip\n title={title}\n placement={placement}\n arrow={arrow}\n trigger={trigger}\n open={open}\n className={className}\n >\n {children}\n </AntTooltip>\n );\n}\n","/**\n * UIDrawer component - Side panel overlay\n *\n * Wraps Ant Design Drawer for sliding panels.\n */\n\nimport * as React from 'react';\nimport { Drawer as AntDrawer, type DrawerProps as AntDrawerProps } from 'antd';\n\nexport interface UIDrawerProps extends AntDrawerProps {}\n\nexport function UIDrawer(props: UIDrawerProps) {\n return <AntDrawer {...props} />;\n}\n","/**\n * UIPopconfirm component - Confirmation popover\n *\n * Wraps Ant Design Popconfirm for inline confirmations.\n */\n\nimport * as React from 'react';\nimport { Popconfirm as AntPopconfirm, type PopconfirmProps as AntPopconfirmProps } from 'antd';\n\nexport interface UIPopconfirmProps extends AntPopconfirmProps {}\n\nexport function UIPopconfirm(props: UIPopconfirmProps) {\n return <AntPopconfirm {...props} />;\n}\n","/**\n * UIPopover component - Popover overlay\n *\n * Wraps Ant Design Popover for floating content.\n */\n\nimport * as React from 'react';\nimport { Popover as AntPopover, type PopoverProps as AntPopoverProps } from 'antd';\n\nexport interface UIPopoverProps extends AntPopoverProps {}\n\nexport function UIPopover(props: UIPopoverProps) {\n return <AntPopover {...props} />;\n}\n","import * as React from 'react';\nimport { theme } from 'antd';\nimport { marked } from 'marked';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport interface UIMarkdownViewerProps {\n content: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function UIMarkdownViewer({ content, className, style: customStyle }: UIMarkdownViewerProps) {\n const { token } = useToken();\n\n const css = `\n .kb-md { font-size: ${token.fontSize}px; line-height: 1.6; color: ${token.colorText}; font-family: ${token.fontFamily}; }\n .kb-md h1,.kb-md h2,.kb-md h3,.kb-md h4,.kb-md h5,.kb-md h6 { font-weight:600; line-height:1.3; margin:1.2em 0 0.4em; color:${token.colorTextHeading}; }\n .kb-md h1:first-child,.kb-md h2:first-child,.kb-md h3:first-child { margin-top:0; }\n .kb-md h1 { font-size:1.5em; padding-bottom:0.3em; border-bottom:1px solid ${token.colorBorderSecondary}; }\n .kb-md h2 { font-size:1.25em; padding-bottom:0.2em; border-bottom:1px solid ${token.colorBorderSecondary}; }\n .kb-md h3 { font-size:1.1em; }\n .kb-md h4 { font-size:1em; }\n .kb-md p { margin:0.6em 0; }\n .kb-md a { color:${token.colorPrimary}; text-decoration:none; }\n .kb-md a:hover { text-decoration:underline; }\n .kb-md code { font-family:${token.fontFamilyCode}; font-size:0.875em; background:${token.colorFillTertiary}; color:${token.colorTextSecondary}; padding:0.15em 0.4em; border-radius:${token.borderRadiusSM}px; }\n .kb-md pre { background:${token.colorFillQuaternary}; border:1px solid ${token.colorBorderSecondary}; border-radius:${token.borderRadius}px; padding:12px 16px; overflow-x:auto; margin:0.75em 0; }\n .kb-md pre code { background:none; padding:0; font-size:0.85em; color:${token.colorText}; }\n .kb-md ul,.kb-md ol { padding-left:1.5em; margin:0.6em 0; }\n .kb-md li { margin:0.2em 0; }\n .kb-md blockquote { margin:0.75em 0; padding:0.4em 1em; border-left:4px solid ${token.colorPrimaryBorder}; background:${token.colorFillQuaternary}; color:${token.colorTextSecondary}; border-radius:0 ${token.borderRadiusSM}px ${token.borderRadiusSM}px 0; }\n .kb-md blockquote p { margin:0; }\n .kb-md hr { border:none; border-top:1px solid ${token.colorBorderSecondary}; margin:1.2em 0; }\n .kb-md table { width:100%; border-collapse:collapse; margin:0.75em 0; font-size:0.9em; }\n .kb-md th,.kb-md td { border:1px solid ${token.colorBorderSecondary}; padding:6px 10px; text-align:left; }\n .kb-md th { background:${token.colorFillTertiary}; font-weight:600; }\n .kb-md tr:nth-child(even) td { background:${token.colorFillQuaternary}; }\n .kb-md img { max-width:100%; border-radius:${token.borderRadius}px; }\n `;\n\n return (\n <UIBox className={className} style={{ padding: token.padding, ...customStyle }}>\n <style>{css}</style>\n <div\n className=\"kb-md\"\n dangerouslySetInnerHTML={{ __html: marked(content) as string }}\n />\n </UIBox>\n );\n}\n","/**\n * UIJsonViewer component - JSON content viewer\n *\n * Displays JSON data with syntax highlighting and collapsible nodes.\n * NO hardcoded colors, uses Ant Design theme.\n */\n\nimport * as React from 'react';\nimport { theme } from 'antd';\nimport { UIBox } from '../primitives/UIBox';\n\nconst { useToken } = theme;\n\nexport interface UIJsonViewerProps {\n /** JSON data to display */\n data: any;\n /** Collapsed by default */\n collapsed?: boolean;\n /** Indentation size */\n indent?: number;\n /** Show line numbers */\n showLineNumbers?: boolean;\n /** Additional CSS class */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * UIJsonViewer - JSON content viewer\n *\n * Note: This is a basic implementation. For production use, consider:\n * - react-json-view for interactive JSON viewer\n * - @uiw/react-json-view for modern alternative\n *\n * @example\n * ```tsx\n * <UIJsonViewer data={jsonData} />\n *\n * <UIJsonViewer\n * data={{ name: \"John\", age: 30, active: true }}\n * collapsed={false}\n * showLineNumbers\n * />\n *\n * <UIJsonViewer\n * data={apiResponse}\n * indent={4}\n * />\n * ```\n */\nexport function UIJsonViewer({\n data,\n collapsed: _collapsed = false,\n indent = 2,\n showLineNumbers = false,\n className,\n style: customStyle,\n}: UIJsonViewerProps) {\n const { token } = useToken();\n\n // TODO: Implement collapse/expand functionality\n // const [isCollapsed, setIsCollapsed] = React.useState(_collapsed);\n\n const jsonString = React.useMemo(() => {\n try {\n return JSON.stringify(data, null, indent);\n } catch (error) {\n return `Error: ${error instanceof Error ? error.message : 'Invalid JSON'}`;\n }\n }, [data, indent]);\n\n const lines = jsonString.split('\\n');\n\n const style: React.CSSProperties = {\n backgroundColor: token.colorBgContainer,\n borderRadius: token.borderRadius,\n border: `1px solid ${token.colorBorder}`,\n overflow: 'auto',\n maxHeight: '600px',\n ...customStyle,\n };\n\n const codeStyle: React.CSSProperties = {\n display: 'block',\n fontFamily: 'Consolas, Monaco, \"Courier New\", monospace',\n fontSize: '13px',\n lineHeight: '1.6',\n padding: token.padding,\n margin: 0,\n whiteSpace: 'pre',\n color: token.colorText,\n };\n\n const lineNumberStyle: React.CSSProperties = {\n display: 'inline-block',\n width: '40px',\n color: token.colorTextSecondary,\n userSelect: 'none',\n textAlign: 'right',\n marginRight: token.marginSM,\n };\n\n // Syntax highlighting\n const highlightedJson = highlightJson(jsonString, token);\n\n return (\n <UIBox className={className} style={style}>\n <pre style={codeStyle}>\n {showLineNumbers ? (\n lines.map((line, index) => (\n <div key={index}>\n <span style={lineNumberStyle}>{index + 1}</span>\n <span dangerouslySetInnerHTML={{ __html: highlightJson(line, token) }} />\n </div>\n ))\n ) : (\n <span dangerouslySetInnerHTML={{ __html: highlightedJson }} />\n )}\n </pre>\n </UIBox>\n );\n}\n\n/**\n * Basic JSON syntax highlighting\n */\nfunction highlightJson(json: string, token: any): string {\n // String values\n json = json.replace(/\"([^\"]+)\":/g, `<span style=\"color: ${token.colorPrimary}\">\"$1\"</span>:`);\n\n // String literals\n json = json.replace(/: \"([^\"]*)\"/g, `: <span style=\"color: ${token.colorSuccess}\">\"$1\"</span>`);\n\n // Numbers\n json = json.replace(/: (\\d+)/g, `: <span style=\"color: ${token.colorWarning}\">$1</span>`);\n\n // Booleans\n json = json.replace(/: (true|false)/g, `: <span style=\"color: ${token.colorInfo}\">$1</span>`);\n\n // Null\n json = json.replace(/: (null)/g, `: <span style=\"color: ${token.colorTextSecondary}\">$1</span>`);\n\n return json;\n}\n","/**\n * UIDiffViewer — renders unified git diff with line highlighting.\n * Uses design tokens for theming (light/dark compatible).\n */\n\nimport { UITypographyText } from '../primitives';\n\nexport interface UIDiffViewerProps {\n /** Raw diff string (git diff output) */\n diff: string;\n /** Show line numbers (default: true) */\n showLineNumbers?: boolean;\n /** Max height in pixels (default: 500) */\n maxHeight?: number;\n /** Custom className */\n className?: string;\n /** Custom style */\n style?: React.CSSProperties;\n}\n\ntype LineType = 'add' | 'remove' | 'context' | 'header';\n\nfunction getLineType(line: string): LineType {\n if (line.startsWith('@@')) { return 'header'; }\n if (line.startsWith('+')) { return 'add'; }\n if (line.startsWith('-')) { return 'remove'; }\n return 'context';\n}\n\nconst LINE_STYLES: Record<LineType, { bg: string; border: string; color: string }> = {\n add: { bg: 'rgba(22, 163, 74, 0.12)', border: 'var(--success, #16a34a)', color: 'var(--success, #16a34a)' },\n remove: { bg: 'rgba(220, 38, 38, 0.12)', border: 'var(--error, #dc2626)', color: 'var(--error, #dc2626)' },\n header: { bg: 'var(--bg-tertiary, rgba(0,0,0,0.04))', border: 'transparent', color: 'var(--text-secondary, #6b7280)' },\n context: { bg: 'transparent', border: 'transparent', color: 'inherit' },\n};\n\nexport function UIDiffViewer({\n diff,\n showLineNumbers = true,\n maxHeight = 500,\n className,\n style,\n}: UIDiffViewerProps) {\n if (!diff || diff.trim() === '') {\n return (\n <div style={{ padding: 16, textAlign: 'center' }}>\n <UITypographyText type=\"secondary\">No changes to display</UITypographyText>\n </div>\n );\n }\n\n const lines = diff.split('\\n');\n\n return (\n <div\n className={className}\n style={{\n background: 'var(--bg-tertiary, rgba(0,0,0,0.02))',\n border: '1px solid var(--border-primary, rgba(0,0,0,0.1))',\n borderRadius: 'var(--radius-md, 6px)',\n fontFamily: 'Monaco, Menlo, \"Courier New\", monospace',\n fontSize: 13,\n lineHeight: 1.5,\n maxHeight,\n overflow: 'auto',\n ...style,\n }}\n >\n {lines.map((line, i) => {\n const type = getLineType(line);\n const s = LINE_STYLES[type];\n const hasLeftBorder = type === 'add' || type === 'remove';\n\n return (\n <div\n key={i}\n style={{\n display: 'flex',\n background: s.bg,\n borderLeft: hasLeftBorder ? `3px solid ${s.border}` : 'none',\n paddingLeft: hasLeftBorder ? 8 : 11,\n }}\n >\n {showLineNumbers && (\n <span\n style={{\n minWidth: 44,\n textAlign: 'right',\n paddingRight: 12,\n userSelect: 'none',\n color: 'var(--text-secondary, #6c757d)',\n fontSize: 12,\n }}\n >\n {i + 1}\n </span>\n )}\n <pre style={{ margin: 0, padding: 0, color: s.color, whiteSpace: 'pre', flex: 1 }}>\n {line}\n </pre>\n </div>\n );\n })}\n </div>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kb-labs/studio-ui-kit",
3
3
  "description": "KB Labs Studio UI Kit — React components using Ant Design and design tokens",
4
- "version": "2.118.0",
4
+ "version": "2.118.1",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -17,7 +17,7 @@
17
17
  ],
18
18
  "dependencies": {
19
19
  "marked": "^17.0.1",
20
- "@kb-labs/studio-ui-core": "2.118.0"
20
+ "@kb-labs/studio-ui-core": "2.118.1"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@ant-design/charts": "^2.6.6",
@@ -37,7 +37,7 @@
37
37
  "tsx": "^4.21.0",
38
38
  "typescript": "^5.6.3",
39
39
  "vitest": "^3.2.6",
40
- "@kb-labs/devkit": "2.118.0"
40
+ "@kb-labs/devkit": "2.118.1"
41
41
  },
42
42
  "engines": {
43
43
  "node": ">=22.0.0",