@almadar/ui 5.3.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1906,7 +1906,7 @@ var init_Overlay = __esm({
1906
1906
  };
1907
1907
  }
1908
1908
  });
1909
- var sizeClasses2, minWidthClasses, Modal;
1909
+ var sizeClasses2, minWidthClasses, lookStyles, Modal;
1910
1910
  var init_Modal = __esm({
1911
1911
  "components/molecules/Modal.tsx"() {
1912
1912
  "use client";
@@ -1931,6 +1931,12 @@ var init_Modal = __esm({
1931
1931
  xl: "min-w-[700px] max-sm:min-w-0",
1932
1932
  full: "min-w-0"
1933
1933
  };
1934
+ lookStyles = {
1935
+ "centered-card": "",
1936
+ "top-sheet": "top-0 rounded-t-none rounded-b-container max-w-full w-full",
1937
+ "side-drawer": "right-0 top-0 bottom-0 h-full rounded-l-container rounded-r-none w-[400px] max-w-full",
1938
+ "full-screen": "inset-0 rounded-none w-full h-full max-w-full"
1939
+ };
1934
1940
  Modal = ({
1935
1941
  isOpen = true,
1936
1942
  onClose = () => {
@@ -1944,7 +1950,8 @@ var init_Modal = __esm({
1944
1950
  closeOnEscape = true,
1945
1951
  className,
1946
1952
  closeEvent,
1947
- swipeDownToClose = true
1953
+ swipeDownToClose = true,
1954
+ look = "centered-card"
1948
1955
  }) => {
1949
1956
  const eventBus = useEventBus();
1950
1957
  const modalRef = useRef(null);
@@ -2029,6 +2036,7 @@ var init_Modal = __esm({
2029
2036
  // Mobile: take the entire screen. Override desktop max-w cap,
2030
2037
  // full height, no rounded corners, no min-width.
2031
2038
  "max-sm:max-w-none max-sm:max-h-none max-sm:w-full max-sm:h-full max-sm:rounded-none",
2039
+ lookStyles[look],
2032
2040
  className
2033
2041
  ),
2034
2042
  style: dragY > 0 ? {
@@ -3603,7 +3611,7 @@ var init_Checkbox = __esm({
3603
3611
  Checkbox.displayName = "Checkbox";
3604
3612
  }
3605
3613
  });
3606
- var variantStyles4, paddingStyles2, shadowStyles2, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
3614
+ var variantStyles4, paddingStyles2, shadowStyles2, lookStyles2, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
3607
3615
  var init_Card = __esm({
3608
3616
  "components/atoms/Card.tsx"() {
3609
3617
  init_cn();
@@ -3651,6 +3659,15 @@ var init_Card = __esm({
3651
3659
  md: "shadow",
3652
3660
  lg: "shadow-elevation-dialog"
3653
3661
  };
3662
+ lookStyles2 = {
3663
+ elevated: "",
3664
+ "flat-bordered": "shadow-none border-[length:var(--border-width)] border-border",
3665
+ "borderless-divider": "shadow-none border-0 border-b border-border rounded-none",
3666
+ ticket: "shadow-none border-dashed border-[length:var(--border-width)] border-border",
3667
+ invoice: "shadow-none border-[length:var(--border-width-thick)] border-border rounded-sm",
3668
+ chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
3669
+ "tile-image-first": "p-0 overflow-hidden"
3670
+ };
3654
3671
  Card = React86__default.forwardRef(
3655
3672
  ({
3656
3673
  className,
@@ -3659,6 +3676,7 @@ var init_Card = __esm({
3659
3676
  title,
3660
3677
  subtitle,
3661
3678
  shadow,
3679
+ look = "elevated",
3662
3680
  children,
3663
3681
  ...props
3664
3682
  }, ref) => {
@@ -3671,6 +3689,7 @@ var init_Card = __esm({
3671
3689
  "transition-all duration-[var(--transition-normal)]",
3672
3690
  variantStyles4[variant],
3673
3691
  paddingStyles2[padding],
3692
+ lookStyles2[look],
3674
3693
  shadow && shadowStyles2[shadow],
3675
3694
  className
3676
3695
  ),
@@ -16283,7 +16302,7 @@ var init_BookTableOfContents = __esm({
16283
16302
  BookTableOfContents.displayName = "BookTableOfContents";
16284
16303
  }
16285
16304
  });
16286
- var ICON_NAME_ALIASES, EmptyState;
16305
+ var ICON_NAME_ALIASES, lookStyles3, EmptyState;
16287
16306
  var init_EmptyState = __esm({
16288
16307
  "components/molecules/EmptyState.tsx"() {
16289
16308
  "use client";
@@ -16300,6 +16319,12 @@ var init_EmptyState = __esm({
16300
16319
  error: "x-circle",
16301
16320
  warning: "alert-circle"
16302
16321
  };
16322
+ lookStyles3 = {
16323
+ "icon-only": "",
16324
+ illustrated: "[&_svg]:w-32 [&_svg]:h-32",
16325
+ "text-only": "[&_svg]:hidden",
16326
+ mascot: "[&_svg]:w-24 [&_svg]:h-24 [&_svg]:rounded-pill"
16327
+ };
16303
16328
  EmptyState = ({
16304
16329
  icon,
16305
16330
  title,
@@ -16310,7 +16335,8 @@ var init_EmptyState = __esm({
16310
16335
  className,
16311
16336
  destructive,
16312
16337
  variant,
16313
- actionEvent
16338
+ actionEvent,
16339
+ look = "icon-only"
16314
16340
  }) => {
16315
16341
  const eventBus = useEventBus();
16316
16342
  const { t } = useTranslate();
@@ -16330,6 +16356,7 @@ var init_EmptyState = __esm({
16330
16356
  align: "center",
16331
16357
  className: cn(
16332
16358
  "justify-center py-12 text-center",
16359
+ lookStyles3[look],
16333
16360
  className
16334
16361
  ),
16335
16362
  children: [
@@ -17570,7 +17597,7 @@ function useSafeEventBus2() {
17570
17597
  } };
17571
17598
  }
17572
17599
  }
17573
- var log9, ButtonGroup;
17600
+ var log9, lookStyles4, ButtonGroup;
17574
17601
  var init_ButtonGroup = __esm({
17575
17602
  "components/molecules/ButtonGroup.tsx"() {
17576
17603
  "use client";
@@ -17578,6 +17605,13 @@ var init_ButtonGroup = __esm({
17578
17605
  init_atoms();
17579
17606
  init_useEventBus();
17580
17607
  log9 = createLogger("almadar:ui:button-group");
17608
+ lookStyles4 = {
17609
+ "right-aligned-buttons": "",
17610
+ "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
17611
+ "inline-row": "gap-2 inline-flex",
17612
+ "dropdown-menu": "[&>button:not(:first-child)]:hidden",
17613
+ "command-palette-trigger": "[&>button:not(:first-child)]:hidden"
17614
+ };
17581
17615
  ButtonGroup = ({
17582
17616
  children,
17583
17617
  primary,
@@ -17587,7 +17621,8 @@ var init_ButtonGroup = __esm({
17587
17621
  className,
17588
17622
  // Filter-group pattern props (entity and filters are used for schema-driven filtering)
17589
17623
  entity: _entity,
17590
- filters
17624
+ filters,
17625
+ look = "right-aligned-buttons"
17591
17626
  }) => {
17592
17627
  const eventBus = useSafeEventBus2();
17593
17628
  const variantClasses2 = {
@@ -17664,6 +17699,7 @@ var init_ButtonGroup = __esm({
17664
17699
  "inline-flex gap-2",
17665
17700
  variantClasses2[variant],
17666
17701
  orientationClasses[orientation],
17702
+ lookStyles4[look],
17667
17703
  className
17668
17704
  ),
17669
17705
  role: "group",
@@ -20195,7 +20231,7 @@ var init_CastleTemplate = __esm({
20195
20231
  CastleTemplate.displayName = "CastleTemplate";
20196
20232
  }
20197
20233
  });
20198
- var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, Chart;
20234
+ var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, LOOK_FROM_CHART_TYPE, Chart;
20199
20235
  var init_Chart = __esm({
20200
20236
  "components/organisms/Chart.tsx"() {
20201
20237
  "use client";
@@ -20225,7 +20261,7 @@ var init_Chart = __esm({
20225
20261
  if (Number.isNaN(parsed.getTime())) return raw;
20226
20262
  return monthFormatter.format(parsed);
20227
20263
  };
20228
- BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, onPointClick }) => {
20264
+ BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, horizontal = false, onPointClick }) => {
20229
20265
  const categories = useMemo(() => {
20230
20266
  const set = [];
20231
20267
  const seen = /* @__PURE__ */ new Set();
@@ -20263,6 +20299,64 @@ var init_Chart = __esm({
20263
20299
  }
20264
20300
  return m;
20265
20301
  }, [series, stack, columnTotals]);
20302
+ if (horizontal) {
20303
+ return /* @__PURE__ */ jsx(VStack, { gap: "xs", align: "stretch", className: "w-full", style: { minHeight: height }, children: categories.map((label, catIdx) => {
20304
+ const displayLabel = timeAxis ? formatTimeLabel(label) : label;
20305
+ const total = columnTotals?.[catIdx] ?? 1;
20306
+ return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "w-full", children: [
20307
+ /* @__PURE__ */ jsx(
20308
+ Typography,
20309
+ {
20310
+ variant: "caption",
20311
+ color: "secondary",
20312
+ className: "truncate text-right",
20313
+ style: { width: 80, flexShrink: 0 },
20314
+ children: displayLabel
20315
+ }
20316
+ ),
20317
+ /* @__PURE__ */ jsx(
20318
+ HStack,
20319
+ {
20320
+ gap: stack === "none" ? "xs" : "none",
20321
+ align: "center",
20322
+ className: "flex-1 min-w-0",
20323
+ style: { height: 24 },
20324
+ children: series.map((s, sIdx) => {
20325
+ const value = valueAt(s, label);
20326
+ const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
20327
+ const color = seriesColor(s, sIdx);
20328
+ return /* @__PURE__ */ jsx(
20329
+ Box,
20330
+ {
20331
+ className: "h-full rounded-r-sm transition-all duration-500 ease-out min-w-[2px] cursor-pointer hover:opacity-80",
20332
+ style: {
20333
+ width: `${ratio}%`,
20334
+ backgroundColor: color
20335
+ },
20336
+ onClick: () => onPointClick?.(
20337
+ { label, value, color },
20338
+ s.name
20339
+ ),
20340
+ title: `${s.name}: ${value}`
20341
+ },
20342
+ s.name
20343
+ );
20344
+ })
20345
+ }
20346
+ ),
20347
+ showValues && series.length === 1 && /* @__PURE__ */ jsx(
20348
+ Typography,
20349
+ {
20350
+ variant: "caption",
20351
+ color: "secondary",
20352
+ className: "tabular-nums",
20353
+ style: { width: 40, flexShrink: 0 },
20354
+ children: valueAt(series[0], label)
20355
+ }
20356
+ )
20357
+ ] }, label);
20358
+ }) });
20359
+ }
20266
20360
  return /* @__PURE__ */ jsx(
20267
20361
  HStack,
20268
20362
  {
@@ -20690,10 +20784,20 @@ var init_Chart = __esm({
20690
20784
  }
20691
20785
  );
20692
20786
  };
20787
+ LOOK_FROM_CHART_TYPE = {
20788
+ bar: "bar-vertical",
20789
+ line: "line",
20790
+ pie: "pie",
20791
+ area: "area",
20792
+ donut: "donut",
20793
+ scatter: "scatter",
20794
+ histogram: "histogram"
20795
+ };
20693
20796
  Chart = ({
20694
20797
  title,
20695
20798
  subtitle,
20696
- chartType = "bar",
20799
+ chartType,
20800
+ look,
20697
20801
  series,
20698
20802
  data: simpleData,
20699
20803
  scatterData,
@@ -20709,6 +20813,7 @@ var init_Chart = __esm({
20709
20813
  error,
20710
20814
  className
20711
20815
  }) => {
20816
+ const resolvedLook = look ?? (chartType ? LOOK_FROM_CHART_TYPE[chartType] : "bar-vertical");
20712
20817
  const eventBus = useEventBus();
20713
20818
  const { t } = useTranslate();
20714
20819
  const handleAction = useCallback(
@@ -20737,7 +20842,7 @@ var init_Chart = __esm({
20737
20842
  return [];
20738
20843
  }, [simpleData, series]);
20739
20844
  const firstSeriesData = normalizedSeries[0]?.data ?? [];
20740
- const hasContent = chartType === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
20845
+ const hasContent = resolvedLook === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
20741
20846
  if (isLoading) {
20742
20847
  return /* @__PURE__ */ jsx(LoadingState, { message: "Loading chart...", className });
20743
20848
  }
@@ -20772,7 +20877,7 @@ var init_Chart = __esm({
20772
20877
  )) })
20773
20878
  ] }),
20774
20879
  /* @__PURE__ */ jsxs(Box, { className: "w-full", children: [
20775
- chartType === "bar" && /* @__PURE__ */ jsx(
20880
+ resolvedLook === "bar-vertical" && /* @__PURE__ */ jsx(
20776
20881
  BarChart,
20777
20882
  {
20778
20883
  series: normalizedSeries,
@@ -20783,7 +20888,19 @@ var init_Chart = __esm({
20783
20888
  onPointClick: handlePointClick
20784
20889
  }
20785
20890
  ),
20786
- chartType === "histogram" && /* @__PURE__ */ jsx(
20891
+ resolvedLook === "bar-horizontal" && /* @__PURE__ */ jsx(
20892
+ BarChart,
20893
+ {
20894
+ series: normalizedSeries,
20895
+ height,
20896
+ showValues,
20897
+ stack,
20898
+ timeAxis,
20899
+ horizontal: true,
20900
+ onPointClick: handlePointClick
20901
+ }
20902
+ ),
20903
+ resolvedLook === "histogram" && /* @__PURE__ */ jsx(
20787
20904
  BarChart,
20788
20905
  {
20789
20906
  series: normalizedSeries,
@@ -20795,7 +20912,7 @@ var init_Chart = __esm({
20795
20912
  onPointClick: handlePointClick
20796
20913
  }
20797
20914
  ),
20798
- chartType === "line" && /* @__PURE__ */ jsx(
20915
+ resolvedLook === "line" && /* @__PURE__ */ jsx(
20799
20916
  LineChart,
20800
20917
  {
20801
20918
  series: normalizedSeries,
@@ -20805,7 +20922,7 @@ var init_Chart = __esm({
20805
20922
  onPointClick: handlePointClick
20806
20923
  }
20807
20924
  ),
20808
- chartType === "area" && /* @__PURE__ */ jsx(
20925
+ resolvedLook === "area" && /* @__PURE__ */ jsx(
20809
20926
  LineChart,
20810
20927
  {
20811
20928
  series: normalizedSeries,
@@ -20816,7 +20933,7 @@ var init_Chart = __esm({
20816
20933
  onPointClick: handlePointClick
20817
20934
  }
20818
20935
  ),
20819
- chartType === "pie" && /* @__PURE__ */ jsx(
20936
+ resolvedLook === "pie" && /* @__PURE__ */ jsx(
20820
20937
  PieChart,
20821
20938
  {
20822
20939
  data: firstSeriesData,
@@ -20825,7 +20942,7 @@ var init_Chart = __esm({
20825
20942
  onPointClick: handlePointClick
20826
20943
  }
20827
20944
  ),
20828
- chartType === "donut" && /* @__PURE__ */ jsx(
20945
+ resolvedLook === "donut" && /* @__PURE__ */ jsx(
20829
20946
  PieChart,
20830
20947
  {
20831
20948
  data: firstSeriesData,
@@ -20835,7 +20952,7 @@ var init_Chart = __esm({
20835
20952
  onPointClick: handlePointClick
20836
20953
  }
20837
20954
  ),
20838
- chartType === "scatter" && /* @__PURE__ */ jsx(
20955
+ resolvedLook === "scatter" && /* @__PURE__ */ jsx(
20839
20956
  ScatterChart,
20840
20957
  {
20841
20958
  data: scatterData ?? [],
@@ -24258,7 +24375,7 @@ var init_useQuerySingleton = __esm({
24258
24375
  queryStores = /* @__PURE__ */ new Map();
24259
24376
  }
24260
24377
  });
24261
- var resolveFilterType, FilterGroup;
24378
+ var resolveFilterType, lookStyles5, FilterGroup;
24262
24379
  var init_FilterGroup = __esm({
24263
24380
  "components/molecules/FilterGroup.tsx"() {
24264
24381
  "use client";
@@ -24272,6 +24389,13 @@ var init_FilterGroup = __esm({
24272
24389
  init_useEventBus();
24273
24390
  init_useQuerySingleton();
24274
24391
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
24392
+ lookStyles5 = {
24393
+ toolbar: "",
24394
+ chips: "gap-2 [&>*]:rounded-pill [&>*]:px-3 [&>*]:py-1",
24395
+ pills: "gap-2 [&>*]:rounded-pill",
24396
+ "popover-trigger": "[&>*:not(:first-child)]:hidden",
24397
+ "inline-column-header": "hidden"
24398
+ };
24275
24399
  FilterGroup = ({
24276
24400
  entity,
24277
24401
  filters,
@@ -24281,7 +24405,8 @@ var init_FilterGroup = __esm({
24281
24405
  variant = "default",
24282
24406
  showIcon = true,
24283
24407
  query,
24284
- isLoading
24408
+ isLoading,
24409
+ look = "toolbar"
24285
24410
  }) => {
24286
24411
  const eventBus = useEventBus();
24287
24412
  const queryState = useQuerySingleton(query);
@@ -24336,63 +24461,71 @@ var init_FilterGroup = __esm({
24336
24461
  }, [onClearAll, queryState, eventBus, entity, query]);
24337
24462
  const activeFilterCount = Object.keys(selectedValues).length;
24338
24463
  if (variant === "pills") {
24339
- return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
24340
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24341
- filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24342
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
24343
- filter.label,
24344
- ":"
24345
- ] }),
24346
- /* @__PURE__ */ jsxs(
24347
- HStack,
24348
- {
24349
- gap: "none",
24350
- className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
24351
- children: [
24352
- /* @__PURE__ */ jsx(
24353
- "button",
24354
- {
24355
- type: "button",
24356
- onClick: () => handleFilterSelect(filter.field, null),
24357
- className: cn(
24358
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24359
- !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24360
- ),
24361
- children: "All"
24362
- }
24363
- ),
24364
- filter.options?.map((option) => /* @__PURE__ */ jsx(
24365
- "button",
24366
- {
24367
- type: "button",
24368
- onClick: () => handleFilterSelect(filter.field, option),
24369
- className: cn(
24370
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24371
- "border-l-[length:var(--border-width)] border-border",
24372
- selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24464
+ return /* @__PURE__ */ jsxs(
24465
+ HStack,
24466
+ {
24467
+ gap: "md",
24468
+ align: "center",
24469
+ className: cn("flex-wrap", lookStyles5[look], className),
24470
+ children: [
24471
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24472
+ filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24473
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
24474
+ filter.label,
24475
+ ":"
24476
+ ] }),
24477
+ /* @__PURE__ */ jsxs(
24478
+ HStack,
24479
+ {
24480
+ gap: "none",
24481
+ className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
24482
+ children: [
24483
+ /* @__PURE__ */ jsx(
24484
+ "button",
24485
+ {
24486
+ type: "button",
24487
+ onClick: () => handleFilterSelect(filter.field, null),
24488
+ className: cn(
24489
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24490
+ !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24491
+ ),
24492
+ children: "All"
24493
+ }
24373
24494
  ),
24374
- children: option
24375
- },
24376
- option
24377
- ))
24378
- ]
24379
- }
24380
- )
24381
- ] }, filter.field)),
24382
- activeFilterCount > 0 && /* @__PURE__ */ jsx(
24383
- Button,
24384
- {
24385
- variant: "ghost",
24386
- size: "sm",
24387
- onClick: handleClearAll,
24388
- leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
24389
- children: "Clear"
24390
- }
24391
- )
24392
- ] });
24495
+ filter.options?.map((option) => /* @__PURE__ */ jsx(
24496
+ "button",
24497
+ {
24498
+ type: "button",
24499
+ onClick: () => handleFilterSelect(filter.field, option),
24500
+ className: cn(
24501
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24502
+ "border-l-[length:var(--border-width)] border-border",
24503
+ selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24504
+ ),
24505
+ children: option
24506
+ },
24507
+ option
24508
+ ))
24509
+ ]
24510
+ }
24511
+ )
24512
+ ] }, filter.field)),
24513
+ activeFilterCount > 0 && /* @__PURE__ */ jsx(
24514
+ Button,
24515
+ {
24516
+ variant: "ghost",
24517
+ size: "sm",
24518
+ onClick: handleClearAll,
24519
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
24520
+ children: "Clear"
24521
+ }
24522
+ )
24523
+ ]
24524
+ }
24525
+ );
24393
24526
  }
24394
24527
  if (variant === "vertical") {
24395
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
24528
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", lookStyles5[look], className), children: [
24396
24529
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
24397
24530
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
24398
24531
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: "Filters" })
@@ -24475,92 +24608,100 @@ var init_FilterGroup = __esm({
24475
24608
  ] });
24476
24609
  }
24477
24610
  if (variant === "compact") {
24478
- return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
24479
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24480
- filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
24481
- Input,
24482
- {
24483
- type: "date",
24484
- value: selectedValues[filter.field] || "",
24485
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24486
- clearable: true,
24487
- onClear: () => handleFilterSelect(filter.field, null),
24488
- className: "text-sm"
24489
- }
24490
- ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24491
- /* @__PURE__ */ jsx(
24492
- Input,
24493
- {
24494
- type: "date",
24495
- value: selectedValues[`${filter.field}_from`] || "",
24496
- onChange: (e) => handleFilterSelect(
24497
- `${filter.field}_from`,
24498
- e.target.value || null
24499
- ),
24500
- className: "text-sm min-w-[100px]"
24501
- }
24502
- ),
24503
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
24504
- /* @__PURE__ */ jsx(
24505
- Input,
24506
- {
24507
- type: "date",
24508
- value: selectedValues[`${filter.field}_to`] || "",
24509
- onChange: (e) => handleFilterSelect(
24510
- `${filter.field}_to`,
24511
- e.target.value || null
24611
+ return /* @__PURE__ */ jsxs(
24612
+ HStack,
24613
+ {
24614
+ gap: "sm",
24615
+ align: "center",
24616
+ className: cn("flex-wrap", lookStyles5[look], className),
24617
+ children: [
24618
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24619
+ filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
24620
+ Input,
24621
+ {
24622
+ type: "date",
24623
+ value: selectedValues[filter.field] || "",
24624
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24625
+ clearable: true,
24626
+ onClear: () => handleFilterSelect(filter.field, null),
24627
+ className: "text-sm"
24628
+ }
24629
+ ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24630
+ /* @__PURE__ */ jsx(
24631
+ Input,
24632
+ {
24633
+ type: "date",
24634
+ value: selectedValues[`${filter.field}_from`] || "",
24635
+ onChange: (e) => handleFilterSelect(
24636
+ `${filter.field}_from`,
24637
+ e.target.value || null
24638
+ ),
24639
+ className: "text-sm min-w-[100px]"
24640
+ }
24512
24641
  ),
24513
- className: "text-sm min-w-[100px]"
24514
- }
24515
- )
24516
- ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
24517
- Input,
24518
- {
24519
- value: selectedValues[filter.field] || "",
24520
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24521
- placeholder: filter.label,
24522
- clearable: true,
24523
- onClear: () => handleFilterSelect(filter.field, null),
24524
- className: "text-sm"
24525
- }
24526
- ) : /* @__PURE__ */ jsx(
24527
- Select,
24528
- {
24529
- value: selectedValues[filter.field] || "all",
24530
- onChange: (e) => handleFilterSelect(filter.field, e.target.value),
24531
- options: [
24532
- { value: "all", label: `All ${filter.label}` },
24533
- ...filter.options?.map((opt) => ({
24534
- value: opt,
24535
- label: opt
24536
- })) || []
24537
- ],
24538
- className: "text-sm"
24539
- }
24540
- ) }, filter.field)),
24541
- activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
24542
- Object.entries(selectedValues).map(([field, value]) => {
24543
- const filterDef = filters.find((f3) => f3.field === field);
24544
- return /* @__PURE__ */ jsxs(
24545
- Badge,
24642
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
24643
+ /* @__PURE__ */ jsx(
24644
+ Input,
24645
+ {
24646
+ type: "date",
24647
+ value: selectedValues[`${filter.field}_to`] || "",
24648
+ onChange: (e) => handleFilterSelect(
24649
+ `${filter.field}_to`,
24650
+ e.target.value || null
24651
+ ),
24652
+ className: "text-sm min-w-[100px]"
24653
+ }
24654
+ )
24655
+ ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
24656
+ Input,
24546
24657
  {
24547
- variant: "primary",
24548
- size: "md",
24549
- className: "cursor-pointer",
24550
- onClick: () => handleFilterSelect(field, null),
24551
- children: [
24552
- filterDef?.label,
24553
- ": ",
24554
- value,
24555
- /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
24556
- ]
24557
- },
24558
- field
24559
- );
24560
- }),
24561
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
24562
- ] })
24563
- ] });
24658
+ value: selectedValues[filter.field] || "",
24659
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24660
+ placeholder: filter.label,
24661
+ clearable: true,
24662
+ onClear: () => handleFilterSelect(filter.field, null),
24663
+ className: "text-sm"
24664
+ }
24665
+ ) : /* @__PURE__ */ jsx(
24666
+ Select,
24667
+ {
24668
+ value: selectedValues[filter.field] || "all",
24669
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value),
24670
+ options: [
24671
+ { value: "all", label: `All ${filter.label}` },
24672
+ ...filter.options?.map((opt) => ({
24673
+ value: opt,
24674
+ label: opt
24675
+ })) || []
24676
+ ],
24677
+ className: "text-sm"
24678
+ }
24679
+ ) }, filter.field)),
24680
+ activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
24681
+ Object.entries(selectedValues).map(([field, value]) => {
24682
+ const filterDef = filters.find((f3) => f3.field === field);
24683
+ return /* @__PURE__ */ jsxs(
24684
+ Badge,
24685
+ {
24686
+ variant: "primary",
24687
+ size: "md",
24688
+ className: "cursor-pointer",
24689
+ onClick: () => handleFilterSelect(field, null),
24690
+ children: [
24691
+ filterDef?.label,
24692
+ ": ",
24693
+ value,
24694
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
24695
+ ]
24696
+ },
24697
+ field
24698
+ );
24699
+ }),
24700
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
24701
+ ] })
24702
+ ]
24703
+ }
24704
+ );
24564
24705
  }
24565
24706
  return /* @__PURE__ */ jsx(
24566
24707
  "div",
@@ -24569,6 +24710,7 @@ var init_FilterGroup = __esm({
24569
24710
  "p-4 rounded-container",
24570
24711
  "bg-card",
24571
24712
  "border-[length:var(--border-width)] border-border",
24713
+ lookStyles5[look],
24572
24714
  className
24573
24715
  ),
24574
24716
  children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: "flex-wrap", children: [
@@ -29042,7 +29184,7 @@ function composeDisplayValue(value, format, max, prefix, suffix) {
29042
29184
  const withMax = max != null && max > 0 ? `${formatted} / ${max}` : formatted;
29043
29185
  return `${prefix ?? ""}${withMax}${suffix ?? ""}`;
29044
29186
  }
29045
- var variantColor, StatDisplay;
29187
+ var lookStyles6, variantColor, StatDisplay;
29046
29188
  var init_StatDisplay = __esm({
29047
29189
  "components/molecules/StatDisplay.tsx"() {
29048
29190
  "use client";
@@ -29054,6 +29196,13 @@ var init_StatDisplay = __esm({
29054
29196
  init_Sparkline();
29055
29197
  init_Icon();
29056
29198
  init_useEventBus();
29199
+ lookStyles6 = {
29200
+ elevated: "",
29201
+ flat: "shadow-none border-[length:var(--border-width)] border-border",
29202
+ "progress-backed": "",
29203
+ gauge: "",
29204
+ sparkline: ""
29205
+ };
29057
29206
  variantColor = {
29058
29207
  default: "text-foreground",
29059
29208
  primary: "text-primary",
@@ -29081,6 +29230,7 @@ var init_StatDisplay = __esm({
29081
29230
  size = "md",
29082
29231
  variant = "default",
29083
29232
  compact = false,
29233
+ look = "elevated",
29084
29234
  className,
29085
29235
  isLoading = false,
29086
29236
  error = null
@@ -29133,7 +29283,7 @@ var init_StatDisplay = __esm({
29133
29283
  return /* @__PURE__ */ jsx(
29134
29284
  Card,
29135
29285
  {
29136
- className: cn(padSizes[size], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
29286
+ className: cn(padSizes[size], lookStyles6[look], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
29137
29287
  onClick: clickEvent ? handleClick : void 0,
29138
29288
  children: /* @__PURE__ */ jsxs(HStack, { align: "start", justify: "between", children: [
29139
29289
  /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "space-y-1 flex-1", children: [
@@ -34715,7 +34865,8 @@ function DataTable({
34715
34865
  bulkActions,
34716
34866
  headerActions,
34717
34867
  showTotal = true,
34718
- className
34868
+ className,
34869
+ look = "dense"
34719
34870
  }) {
34720
34871
  const [openActionMenu, setOpenActionMenu] = useState(
34721
34872
  null
@@ -34842,6 +34993,7 @@ function DataTable({
34842
34993
  {
34843
34994
  className: cn(
34844
34995
  "bg-card border-2 border-border rounded-none overflow-hidden",
34996
+ lookStyles7[look],
34845
34997
  className
34846
34998
  ),
34847
34999
  children: [
@@ -35068,6 +35220,7 @@ function DataTable({
35068
35220
  }
35069
35221
  );
35070
35222
  }
35223
+ var lookStyles7;
35071
35224
  var init_DataTable = __esm({
35072
35225
  "components/organisms/DataTable.tsx"() {
35073
35226
  "use client";
@@ -35081,6 +35234,13 @@ var init_DataTable = __esm({
35081
35234
  init_useEventBus();
35082
35235
  init_useTranslate();
35083
35236
  init_types3();
35237
+ lookStyles7 = {
35238
+ dense: "",
35239
+ spacious: "[&_tbody_tr_td]:py-5 [&_thead_tr_th]:py-4",
35240
+ striped: "[&_tbody_tr:nth-child(odd)]:bg-muted/30",
35241
+ borderless: "border-0 [&_thead]:border-b-0 [&_tbody_tr]:border-b-0 [&_tbody]:divide-y-0",
35242
+ "card-rows": "border-0 [&_tbody]:divide-y-0 [&_tbody_tr]:border-b-0 [&_tbody_tr]:shadow-elevation-card [&_tbody_tr]:rounded-container [&_tbody_tr]:bg-card [&_tbody]:[&_tr]:my-2"
35243
+ };
35084
35244
  DataTable.displayName = "DataTable";
35085
35245
  }
35086
35246
  });
@@ -38239,7 +38399,7 @@ var init_GraphCanvas = __esm({
38239
38399
  GraphCanvas.displayName = "GraphCanvas";
38240
38400
  }
38241
38401
  });
38242
- var Header;
38402
+ var lookStyles8, Header;
38243
38403
  var init_Header = __esm({
38244
38404
  "components/organisms/Header.tsx"() {
38245
38405
  "use client";
@@ -38252,6 +38412,13 @@ var init_Header = __esm({
38252
38412
  init_Typography();
38253
38413
  init_cn();
38254
38414
  init_useTranslate();
38415
+ lookStyles8 = {
38416
+ "compact-bar": "",
38417
+ hero: "py-section min-h-[200px] [&_h1]:text-display-1",
38418
+ breadcrumb: "py-2 text-sm [&_h1]:text-base [&_h1]:font-medium",
38419
+ contextual: "py-3 [&_h1]:text-lg",
38420
+ "editorial-banner": "py-12 [&_h1]:text-display-2 [&_h1]:font-display-bold border-b border-border"
38421
+ };
38255
38422
  Header = ({
38256
38423
  logo,
38257
38424
  logoSrc,
@@ -38269,6 +38436,7 @@ var init_Header = __esm({
38269
38436
  actions,
38270
38437
  sticky = true,
38271
38438
  variant = "mobile",
38439
+ look = "compact-bar",
38272
38440
  onLogoClick,
38273
38441
  className
38274
38442
  }) => {
@@ -38284,6 +38452,7 @@ var init_Header = __esm({
38284
38452
  "flex items-center px-4 justify-between bg-card",
38285
38453
  sticky && "sticky top-0 z-50",
38286
38454
  variant === "mobile" && "lg:hidden",
38455
+ lookStyles8[look],
38287
38456
  className
38288
38457
  ),
38289
38458
  children: [
@@ -44960,7 +45129,7 @@ var init_TeamOrganism = __esm({
44960
45129
  TeamOrganism.displayName = "TeamOrganism";
44961
45130
  }
44962
45131
  });
44963
- var STATUS_STYLES3, Timeline;
45132
+ var lookStyles9, STATUS_STYLES3, Timeline;
44964
45133
  var init_Timeline = __esm({
44965
45134
  "components/organisms/Timeline.tsx"() {
44966
45135
  "use client";
@@ -44971,6 +45140,12 @@ var init_Timeline = __esm({
44971
45140
  init_ErrorState();
44972
45141
  init_EmptyState();
44973
45142
  init_useTranslate();
45143
+ lookStyles9 = {
45144
+ "vertical-compact": "gap-1 [&>*]:py-1",
45145
+ "vertical-spacious": "",
45146
+ horizontal: "flex-row [&>*]:flex-row [&>*]:items-center",
45147
+ swimlane: "flex-row gap-6 [&>*]:flex-row [&>*]:items-center"
45148
+ };
44974
45149
  STATUS_STYLES3 = {
44975
45150
  complete: {
44976
45151
  dotColor: "text-success",
@@ -45001,7 +45176,8 @@ var init_Timeline = __esm({
45001
45176
  entity,
45002
45177
  isLoading = false,
45003
45178
  error,
45004
- className
45179
+ className,
45180
+ look = "vertical-spacious"
45005
45181
  }) => {
45006
45182
  const { t } = useTranslate();
45007
45183
  const entityData = Array.isArray(entity) ? entity : [];
@@ -45057,7 +45233,7 @@ var init_Timeline = __esm({
45057
45233
  }
45058
45234
  return /* @__PURE__ */ jsx(Card, { className: cn("p-6", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
45059
45235
  title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
45060
- /* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
45236
+ /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("relative", lookStyles9[look]), children: items.map((item, idx) => {
45061
45237
  const status = item.status || "pending";
45062
45238
  const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
45063
45239
  const ItemIcon = item.icon || style.icon;