@almadar/ui 5.4.0 → 5.5.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/avl/index.js CHANGED
@@ -6721,7 +6721,7 @@ var init_Overlay = __esm({
6721
6721
  };
6722
6722
  }
6723
6723
  });
6724
- var sizeClasses2, minWidthClasses, Modal;
6724
+ var sizeClasses2, minWidthClasses, lookStyles, Modal;
6725
6725
  var init_Modal = __esm({
6726
6726
  "components/molecules/Modal.tsx"() {
6727
6727
  "use client";
@@ -6746,6 +6746,12 @@ var init_Modal = __esm({
6746
6746
  xl: "min-w-[700px] max-sm:min-w-0",
6747
6747
  full: "min-w-0"
6748
6748
  };
6749
+ lookStyles = {
6750
+ "centered-card": "",
6751
+ "top-sheet": "top-0 rounded-t-none rounded-b-container max-w-full w-full",
6752
+ "side-drawer": "right-0 top-0 bottom-0 h-full rounded-l-container rounded-r-none w-[400px] max-w-full",
6753
+ "full-screen": "inset-0 rounded-none w-full h-full max-w-full"
6754
+ };
6749
6755
  Modal = ({
6750
6756
  isOpen = true,
6751
6757
  onClose = () => {
@@ -6759,7 +6765,8 @@ var init_Modal = __esm({
6759
6765
  closeOnEscape = true,
6760
6766
  className,
6761
6767
  closeEvent,
6762
- swipeDownToClose = true
6768
+ swipeDownToClose = true,
6769
+ look = "centered-card"
6763
6770
  }) => {
6764
6771
  const eventBus = useEventBus();
6765
6772
  const modalRef = useRef(null);
@@ -6844,6 +6851,7 @@ var init_Modal = __esm({
6844
6851
  // Mobile: take the entire screen. Override desktop max-w cap,
6845
6852
  // full height, no rounded corners, no min-width.
6846
6853
  "max-sm:max-w-none max-sm:max-h-none max-sm:w-full max-sm:h-full max-sm:rounded-none",
6854
+ lookStyles[look],
6847
6855
  className
6848
6856
  ),
6849
6857
  style: dragY > 0 ? {
@@ -8418,7 +8426,7 @@ var init_Checkbox = __esm({
8418
8426
  Checkbox.displayName = "Checkbox";
8419
8427
  }
8420
8428
  });
8421
- var variantStyles4, paddingStyles2, shadowStyles2, lookStyles, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
8429
+ var variantStyles4, paddingStyles2, shadowStyles2, lookStyles2, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
8422
8430
  var init_Card = __esm({
8423
8431
  "components/atoms/Card.tsx"() {
8424
8432
  init_cn();
@@ -8466,7 +8474,7 @@ var init_Card = __esm({
8466
8474
  md: "shadow",
8467
8475
  lg: "shadow-elevation-dialog"
8468
8476
  };
8469
- lookStyles = {
8477
+ lookStyles2 = {
8470
8478
  elevated: "",
8471
8479
  "flat-bordered": "shadow-none border-[length:var(--border-width)] border-border",
8472
8480
  "borderless-divider": "shadow-none border-0 border-b border-border rounded-none",
@@ -8496,7 +8504,7 @@ var init_Card = __esm({
8496
8504
  "transition-all duration-[var(--transition-normal)]",
8497
8505
  variantStyles4[variant],
8498
8506
  paddingStyles2[padding],
8499
- lookStyles[look],
8507
+ lookStyles2[look],
8500
8508
  shadow && shadowStyles2[shadow],
8501
8509
  className
8502
8510
  ),
@@ -19882,7 +19890,7 @@ var init_BookTableOfContents = __esm({
19882
19890
  BookTableOfContents.displayName = "BookTableOfContents";
19883
19891
  }
19884
19892
  });
19885
- var ICON_NAME_ALIASES, EmptyState;
19893
+ var ICON_NAME_ALIASES, lookStyles3, EmptyState;
19886
19894
  var init_EmptyState = __esm({
19887
19895
  "components/molecules/EmptyState.tsx"() {
19888
19896
  "use client";
@@ -19899,6 +19907,12 @@ var init_EmptyState = __esm({
19899
19907
  error: "x-circle",
19900
19908
  warning: "alert-circle"
19901
19909
  };
19910
+ lookStyles3 = {
19911
+ "icon-only": "",
19912
+ illustrated: "[&_svg]:w-32 [&_svg]:h-32",
19913
+ "text-only": "[&_svg]:hidden",
19914
+ mascot: "[&_svg]:w-24 [&_svg]:h-24 [&_svg]:rounded-pill"
19915
+ };
19902
19916
  EmptyState = ({
19903
19917
  icon,
19904
19918
  title,
@@ -19909,7 +19923,8 @@ var init_EmptyState = __esm({
19909
19923
  className,
19910
19924
  destructive,
19911
19925
  variant,
19912
- actionEvent
19926
+ actionEvent,
19927
+ look = "icon-only"
19913
19928
  }) => {
19914
19929
  const eventBus = useEventBus();
19915
19930
  const { t } = useTranslate();
@@ -19929,6 +19944,7 @@ var init_EmptyState = __esm({
19929
19944
  align: "center",
19930
19945
  className: cn(
19931
19946
  "justify-center py-12 text-center",
19947
+ lookStyles3[look],
19932
19948
  className
19933
19949
  ),
19934
19950
  children: [
@@ -21169,7 +21185,7 @@ function useSafeEventBus2() {
21169
21185
  } };
21170
21186
  }
21171
21187
  }
21172
- var log9, ButtonGroup;
21188
+ var log9, lookStyles4, ButtonGroup;
21173
21189
  var init_ButtonGroup = __esm({
21174
21190
  "components/molecules/ButtonGroup.tsx"() {
21175
21191
  "use client";
@@ -21177,6 +21193,13 @@ var init_ButtonGroup = __esm({
21177
21193
  init_atoms();
21178
21194
  init_useEventBus();
21179
21195
  log9 = createLogger("almadar:ui:button-group");
21196
+ lookStyles4 = {
21197
+ "right-aligned-buttons": "",
21198
+ "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
21199
+ "inline-row": "gap-2 inline-flex",
21200
+ "dropdown-menu": "[&>button:not(:first-child)]:hidden",
21201
+ "command-palette-trigger": "[&>button:not(:first-child)]:hidden"
21202
+ };
21180
21203
  ButtonGroup = ({
21181
21204
  children,
21182
21205
  primary,
@@ -21186,7 +21209,8 @@ var init_ButtonGroup = __esm({
21186
21209
  className,
21187
21210
  // Filter-group pattern props (entity and filters are used for schema-driven filtering)
21188
21211
  entity: _entity,
21189
- filters
21212
+ filters,
21213
+ look = "right-aligned-buttons"
21190
21214
  }) => {
21191
21215
  const eventBus = useSafeEventBus2();
21192
21216
  const variantClasses2 = {
@@ -21263,6 +21287,7 @@ var init_ButtonGroup = __esm({
21263
21287
  "inline-flex gap-2",
21264
21288
  variantClasses2[variant],
21265
21289
  orientationClasses[orientation],
21290
+ lookStyles4[look],
21266
21291
  className
21267
21292
  ),
21268
21293
  role: "group",
@@ -23794,7 +23819,7 @@ var init_CastleTemplate = __esm({
23794
23819
  CastleTemplate.displayName = "CastleTemplate";
23795
23820
  }
23796
23821
  });
23797
- var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, Chart;
23822
+ var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, LOOK_FROM_CHART_TYPE, Chart;
23798
23823
  var init_Chart = __esm({
23799
23824
  "components/organisms/Chart.tsx"() {
23800
23825
  "use client";
@@ -23824,7 +23849,7 @@ var init_Chart = __esm({
23824
23849
  if (Number.isNaN(parsed.getTime())) return raw;
23825
23850
  return monthFormatter.format(parsed);
23826
23851
  };
23827
- BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, onPointClick }) => {
23852
+ BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, horizontal = false, onPointClick }) => {
23828
23853
  const categories = useMemo(() => {
23829
23854
  const set = [];
23830
23855
  const seen = /* @__PURE__ */ new Set();
@@ -23862,6 +23887,64 @@ var init_Chart = __esm({
23862
23887
  }
23863
23888
  return m;
23864
23889
  }, [series, stack, columnTotals]);
23890
+ if (horizontal) {
23891
+ return /* @__PURE__ */ jsx(VStack, { gap: "xs", align: "stretch", className: "w-full", style: { minHeight: height }, children: categories.map((label, catIdx) => {
23892
+ const displayLabel = timeAxis ? formatTimeLabel(label) : label;
23893
+ const total = columnTotals?.[catIdx] ?? 1;
23894
+ return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "w-full", children: [
23895
+ /* @__PURE__ */ jsx(
23896
+ Typography,
23897
+ {
23898
+ variant: "caption",
23899
+ color: "secondary",
23900
+ className: "truncate text-right",
23901
+ style: { width: 80, flexShrink: 0 },
23902
+ children: displayLabel
23903
+ }
23904
+ ),
23905
+ /* @__PURE__ */ jsx(
23906
+ HStack,
23907
+ {
23908
+ gap: stack === "none" ? "xs" : "none",
23909
+ align: "center",
23910
+ className: "flex-1 min-w-0",
23911
+ style: { height: 24 },
23912
+ children: series.map((s, sIdx) => {
23913
+ const value = valueAt(s, label);
23914
+ const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
23915
+ const color = seriesColor(s, sIdx);
23916
+ return /* @__PURE__ */ jsx(
23917
+ Box,
23918
+ {
23919
+ className: "h-full rounded-r-sm transition-all duration-500 ease-out min-w-[2px] cursor-pointer hover:opacity-80",
23920
+ style: {
23921
+ width: `${ratio}%`,
23922
+ backgroundColor: color
23923
+ },
23924
+ onClick: () => onPointClick?.(
23925
+ { label, value, color },
23926
+ s.name
23927
+ ),
23928
+ title: `${s.name}: ${value}`
23929
+ },
23930
+ s.name
23931
+ );
23932
+ })
23933
+ }
23934
+ ),
23935
+ showValues && series.length === 1 && /* @__PURE__ */ jsx(
23936
+ Typography,
23937
+ {
23938
+ variant: "caption",
23939
+ color: "secondary",
23940
+ className: "tabular-nums",
23941
+ style: { width: 40, flexShrink: 0 },
23942
+ children: valueAt(series[0], label)
23943
+ }
23944
+ )
23945
+ ] }, label);
23946
+ }) });
23947
+ }
23865
23948
  return /* @__PURE__ */ jsx(
23866
23949
  HStack,
23867
23950
  {
@@ -24289,10 +24372,20 @@ var init_Chart = __esm({
24289
24372
  }
24290
24373
  );
24291
24374
  };
24375
+ LOOK_FROM_CHART_TYPE = {
24376
+ bar: "bar-vertical",
24377
+ line: "line",
24378
+ pie: "pie",
24379
+ area: "area",
24380
+ donut: "donut",
24381
+ scatter: "scatter",
24382
+ histogram: "histogram"
24383
+ };
24292
24384
  Chart = ({
24293
24385
  title,
24294
24386
  subtitle,
24295
- chartType = "bar",
24387
+ chartType,
24388
+ look,
24296
24389
  series,
24297
24390
  data: simpleData,
24298
24391
  scatterData,
@@ -24308,6 +24401,7 @@ var init_Chart = __esm({
24308
24401
  error,
24309
24402
  className
24310
24403
  }) => {
24404
+ const resolvedLook = look ?? (chartType ? LOOK_FROM_CHART_TYPE[chartType] : "bar-vertical");
24311
24405
  const eventBus = useEventBus();
24312
24406
  const { t } = useTranslate();
24313
24407
  const handleAction = useCallback(
@@ -24336,7 +24430,7 @@ var init_Chart = __esm({
24336
24430
  return [];
24337
24431
  }, [simpleData, series]);
24338
24432
  const firstSeriesData = normalizedSeries[0]?.data ?? [];
24339
- const hasContent = chartType === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
24433
+ const hasContent = resolvedLook === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
24340
24434
  if (isLoading) {
24341
24435
  return /* @__PURE__ */ jsx(LoadingState, { message: "Loading chart...", className });
24342
24436
  }
@@ -24371,7 +24465,18 @@ var init_Chart = __esm({
24371
24465
  )) })
24372
24466
  ] }),
24373
24467
  /* @__PURE__ */ jsxs(Box, { className: "w-full", children: [
24374
- chartType === "bar" && /* @__PURE__ */ jsx(
24468
+ resolvedLook === "bar-vertical" && /* @__PURE__ */ jsx(
24469
+ BarChart,
24470
+ {
24471
+ series: normalizedSeries,
24472
+ height,
24473
+ showValues,
24474
+ stack,
24475
+ timeAxis,
24476
+ onPointClick: handlePointClick
24477
+ }
24478
+ ),
24479
+ resolvedLook === "bar-horizontal" && /* @__PURE__ */ jsx(
24375
24480
  BarChart,
24376
24481
  {
24377
24482
  series: normalizedSeries,
@@ -24379,10 +24484,11 @@ var init_Chart = __esm({
24379
24484
  showValues,
24380
24485
  stack,
24381
24486
  timeAxis,
24487
+ horizontal: true,
24382
24488
  onPointClick: handlePointClick
24383
24489
  }
24384
24490
  ),
24385
- chartType === "histogram" && /* @__PURE__ */ jsx(
24491
+ resolvedLook === "histogram" && /* @__PURE__ */ jsx(
24386
24492
  BarChart,
24387
24493
  {
24388
24494
  series: normalizedSeries,
@@ -24394,7 +24500,7 @@ var init_Chart = __esm({
24394
24500
  onPointClick: handlePointClick
24395
24501
  }
24396
24502
  ),
24397
- chartType === "line" && /* @__PURE__ */ jsx(
24503
+ resolvedLook === "line" && /* @__PURE__ */ jsx(
24398
24504
  LineChart,
24399
24505
  {
24400
24506
  series: normalizedSeries,
@@ -24404,7 +24510,7 @@ var init_Chart = __esm({
24404
24510
  onPointClick: handlePointClick
24405
24511
  }
24406
24512
  ),
24407
- chartType === "area" && /* @__PURE__ */ jsx(
24513
+ resolvedLook === "area" && /* @__PURE__ */ jsx(
24408
24514
  LineChart,
24409
24515
  {
24410
24516
  series: normalizedSeries,
@@ -24415,7 +24521,7 @@ var init_Chart = __esm({
24415
24521
  onPointClick: handlePointClick
24416
24522
  }
24417
24523
  ),
24418
- chartType === "pie" && /* @__PURE__ */ jsx(
24524
+ resolvedLook === "pie" && /* @__PURE__ */ jsx(
24419
24525
  PieChart,
24420
24526
  {
24421
24527
  data: firstSeriesData,
@@ -24424,7 +24530,7 @@ var init_Chart = __esm({
24424
24530
  onPointClick: handlePointClick
24425
24531
  }
24426
24532
  ),
24427
- chartType === "donut" && /* @__PURE__ */ jsx(
24533
+ resolvedLook === "donut" && /* @__PURE__ */ jsx(
24428
24534
  PieChart,
24429
24535
  {
24430
24536
  data: firstSeriesData,
@@ -24434,7 +24540,7 @@ var init_Chart = __esm({
24434
24540
  onPointClick: handlePointClick
24435
24541
  }
24436
24542
  ),
24437
- chartType === "scatter" && /* @__PURE__ */ jsx(
24543
+ resolvedLook === "scatter" && /* @__PURE__ */ jsx(
24438
24544
  ScatterChart,
24439
24545
  {
24440
24546
  data: scatterData ?? [],
@@ -27857,7 +27963,7 @@ var init_useQuerySingleton = __esm({
27857
27963
  queryStores = /* @__PURE__ */ new Map();
27858
27964
  }
27859
27965
  });
27860
- var resolveFilterType, FilterGroup;
27966
+ var resolveFilterType, lookStyles5, FilterGroup;
27861
27967
  var init_FilterGroup = __esm({
27862
27968
  "components/molecules/FilterGroup.tsx"() {
27863
27969
  "use client";
@@ -27871,6 +27977,13 @@ var init_FilterGroup = __esm({
27871
27977
  init_useEventBus();
27872
27978
  init_useQuerySingleton();
27873
27979
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
27980
+ lookStyles5 = {
27981
+ toolbar: "",
27982
+ chips: "gap-2 [&>*]:rounded-pill [&>*]:px-3 [&>*]:py-1",
27983
+ pills: "gap-2 [&>*]:rounded-pill",
27984
+ "popover-trigger": "[&>*:not(:first-child)]:hidden",
27985
+ "inline-column-header": "hidden"
27986
+ };
27874
27987
  FilterGroup = ({
27875
27988
  entity,
27876
27989
  filters,
@@ -27880,7 +27993,8 @@ var init_FilterGroup = __esm({
27880
27993
  variant = "default",
27881
27994
  showIcon = true,
27882
27995
  query,
27883
- isLoading
27996
+ isLoading,
27997
+ look = "toolbar"
27884
27998
  }) => {
27885
27999
  const eventBus = useEventBus();
27886
28000
  const queryState = useQuerySingleton(query);
@@ -27935,63 +28049,71 @@ var init_FilterGroup = __esm({
27935
28049
  }, [onClearAll, queryState, eventBus, entity, query]);
27936
28050
  const activeFilterCount = Object.keys(selectedValues).length;
27937
28051
  if (variant === "pills") {
27938
- return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
27939
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
27940
- filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
27941
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
27942
- filter.label,
27943
- ":"
27944
- ] }),
27945
- /* @__PURE__ */ jsxs(
27946
- HStack,
27947
- {
27948
- gap: "none",
27949
- className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
27950
- children: [
27951
- /* @__PURE__ */ jsx(
27952
- "button",
27953
- {
27954
- type: "button",
27955
- onClick: () => handleFilterSelect(filter.field, null),
27956
- className: cn(
27957
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
27958
- !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
27959
- ),
27960
- children: "All"
27961
- }
27962
- ),
27963
- filter.options?.map((option) => /* @__PURE__ */ jsx(
27964
- "button",
27965
- {
27966
- type: "button",
27967
- onClick: () => handleFilterSelect(filter.field, option),
27968
- className: cn(
27969
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
27970
- "border-l-[length:var(--border-width)] border-border",
27971
- selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
28052
+ return /* @__PURE__ */ jsxs(
28053
+ HStack,
28054
+ {
28055
+ gap: "md",
28056
+ align: "center",
28057
+ className: cn("flex-wrap", lookStyles5[look], className),
28058
+ children: [
28059
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
28060
+ filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
28061
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
28062
+ filter.label,
28063
+ ":"
28064
+ ] }),
28065
+ /* @__PURE__ */ jsxs(
28066
+ HStack,
28067
+ {
28068
+ gap: "none",
28069
+ className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
28070
+ children: [
28071
+ /* @__PURE__ */ jsx(
28072
+ "button",
28073
+ {
28074
+ type: "button",
28075
+ onClick: () => handleFilterSelect(filter.field, null),
28076
+ className: cn(
28077
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
28078
+ !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
28079
+ ),
28080
+ children: "All"
28081
+ }
27972
28082
  ),
27973
- children: option
27974
- },
27975
- option
27976
- ))
27977
- ]
27978
- }
27979
- )
27980
- ] }, filter.field)),
27981
- activeFilterCount > 0 && /* @__PURE__ */ jsx(
27982
- Button,
27983
- {
27984
- variant: "ghost",
27985
- size: "sm",
27986
- onClick: handleClearAll,
27987
- leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
27988
- children: "Clear"
27989
- }
27990
- )
27991
- ] });
28083
+ filter.options?.map((option) => /* @__PURE__ */ jsx(
28084
+ "button",
28085
+ {
28086
+ type: "button",
28087
+ onClick: () => handleFilterSelect(filter.field, option),
28088
+ className: cn(
28089
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
28090
+ "border-l-[length:var(--border-width)] border-border",
28091
+ selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
28092
+ ),
28093
+ children: option
28094
+ },
28095
+ option
28096
+ ))
28097
+ ]
28098
+ }
28099
+ )
28100
+ ] }, filter.field)),
28101
+ activeFilterCount > 0 && /* @__PURE__ */ jsx(
28102
+ Button,
28103
+ {
28104
+ variant: "ghost",
28105
+ size: "sm",
28106
+ onClick: handleClearAll,
28107
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
28108
+ children: "Clear"
28109
+ }
28110
+ )
28111
+ ]
28112
+ }
28113
+ );
27992
28114
  }
27993
28115
  if (variant === "vertical") {
27994
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
28116
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", lookStyles5[look], className), children: [
27995
28117
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
27996
28118
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
27997
28119
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: "Filters" })
@@ -28074,92 +28196,100 @@ var init_FilterGroup = __esm({
28074
28196
  ] });
28075
28197
  }
28076
28198
  if (variant === "compact") {
28077
- return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
28078
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
28079
- filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
28080
- Input,
28081
- {
28082
- type: "date",
28083
- value: selectedValues[filter.field] || "",
28084
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
28085
- clearable: true,
28086
- onClear: () => handleFilterSelect(filter.field, null),
28087
- className: "text-sm"
28088
- }
28089
- ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
28090
- /* @__PURE__ */ jsx(
28091
- Input,
28092
- {
28093
- type: "date",
28094
- value: selectedValues[`${filter.field}_from`] || "",
28095
- onChange: (e) => handleFilterSelect(
28096
- `${filter.field}_from`,
28097
- e.target.value || null
28098
- ),
28099
- className: "text-sm min-w-[100px]"
28100
- }
28101
- ),
28102
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
28103
- /* @__PURE__ */ jsx(
28104
- Input,
28105
- {
28106
- type: "date",
28107
- value: selectedValues[`${filter.field}_to`] || "",
28108
- onChange: (e) => handleFilterSelect(
28109
- `${filter.field}_to`,
28110
- e.target.value || null
28199
+ return /* @__PURE__ */ jsxs(
28200
+ HStack,
28201
+ {
28202
+ gap: "sm",
28203
+ align: "center",
28204
+ className: cn("flex-wrap", lookStyles5[look], className),
28205
+ children: [
28206
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
28207
+ filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
28208
+ Input,
28209
+ {
28210
+ type: "date",
28211
+ value: selectedValues[filter.field] || "",
28212
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
28213
+ clearable: true,
28214
+ onClear: () => handleFilterSelect(filter.field, null),
28215
+ className: "text-sm"
28216
+ }
28217
+ ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
28218
+ /* @__PURE__ */ jsx(
28219
+ Input,
28220
+ {
28221
+ type: "date",
28222
+ value: selectedValues[`${filter.field}_from`] || "",
28223
+ onChange: (e) => handleFilterSelect(
28224
+ `${filter.field}_from`,
28225
+ e.target.value || null
28226
+ ),
28227
+ className: "text-sm min-w-[100px]"
28228
+ }
28111
28229
  ),
28112
- className: "text-sm min-w-[100px]"
28113
- }
28114
- )
28115
- ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
28116
- Input,
28117
- {
28118
- value: selectedValues[filter.field] || "",
28119
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
28120
- placeholder: filter.label,
28121
- clearable: true,
28122
- onClear: () => handleFilterSelect(filter.field, null),
28123
- className: "text-sm"
28124
- }
28125
- ) : /* @__PURE__ */ jsx(
28126
- Select,
28127
- {
28128
- value: selectedValues[filter.field] || "all",
28129
- onChange: (e) => handleFilterSelect(filter.field, e.target.value),
28130
- options: [
28131
- { value: "all", label: `All ${filter.label}` },
28132
- ...filter.options?.map((opt) => ({
28133
- value: opt,
28134
- label: opt
28135
- })) || []
28136
- ],
28137
- className: "text-sm"
28138
- }
28139
- ) }, filter.field)),
28140
- activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
28141
- Object.entries(selectedValues).map(([field, value]) => {
28142
- const filterDef = filters.find((f3) => f3.field === field);
28143
- return /* @__PURE__ */ jsxs(
28144
- Badge,
28230
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
28231
+ /* @__PURE__ */ jsx(
28232
+ Input,
28233
+ {
28234
+ type: "date",
28235
+ value: selectedValues[`${filter.field}_to`] || "",
28236
+ onChange: (e) => handleFilterSelect(
28237
+ `${filter.field}_to`,
28238
+ e.target.value || null
28239
+ ),
28240
+ className: "text-sm min-w-[100px]"
28241
+ }
28242
+ )
28243
+ ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
28244
+ Input,
28145
28245
  {
28146
- variant: "primary",
28147
- size: "md",
28148
- className: "cursor-pointer",
28149
- onClick: () => handleFilterSelect(field, null),
28150
- children: [
28151
- filterDef?.label,
28152
- ": ",
28153
- value,
28154
- /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
28155
- ]
28156
- },
28157
- field
28158
- );
28159
- }),
28160
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
28161
- ] })
28162
- ] });
28246
+ value: selectedValues[filter.field] || "",
28247
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
28248
+ placeholder: filter.label,
28249
+ clearable: true,
28250
+ onClear: () => handleFilterSelect(filter.field, null),
28251
+ className: "text-sm"
28252
+ }
28253
+ ) : /* @__PURE__ */ jsx(
28254
+ Select,
28255
+ {
28256
+ value: selectedValues[filter.field] || "all",
28257
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value),
28258
+ options: [
28259
+ { value: "all", label: `All ${filter.label}` },
28260
+ ...filter.options?.map((opt) => ({
28261
+ value: opt,
28262
+ label: opt
28263
+ })) || []
28264
+ ],
28265
+ className: "text-sm"
28266
+ }
28267
+ ) }, filter.field)),
28268
+ activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
28269
+ Object.entries(selectedValues).map(([field, value]) => {
28270
+ const filterDef = filters.find((f3) => f3.field === field);
28271
+ return /* @__PURE__ */ jsxs(
28272
+ Badge,
28273
+ {
28274
+ variant: "primary",
28275
+ size: "md",
28276
+ className: "cursor-pointer",
28277
+ onClick: () => handleFilterSelect(field, null),
28278
+ children: [
28279
+ filterDef?.label,
28280
+ ": ",
28281
+ value,
28282
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
28283
+ ]
28284
+ },
28285
+ field
28286
+ );
28287
+ }),
28288
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
28289
+ ] })
28290
+ ]
28291
+ }
28292
+ );
28163
28293
  }
28164
28294
  return /* @__PURE__ */ jsx(
28165
28295
  "div",
@@ -28168,6 +28298,7 @@ var init_FilterGroup = __esm({
28168
28298
  "p-4 rounded-container",
28169
28299
  "bg-card",
28170
28300
  "border-[length:var(--border-width)] border-border",
28301
+ lookStyles5[look],
28171
28302
  className
28172
28303
  ),
28173
28304
  children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: "flex-wrap", children: [
@@ -32641,7 +32772,7 @@ function composeDisplayValue(value, format, max, prefix, suffix) {
32641
32772
  const withMax = max != null && max > 0 ? `${formatted} / ${max}` : formatted;
32642
32773
  return `${prefix ?? ""}${withMax}${suffix ?? ""}`;
32643
32774
  }
32644
- var variantColor, StatDisplay;
32775
+ var lookStyles6, variantColor, StatDisplay;
32645
32776
  var init_StatDisplay = __esm({
32646
32777
  "components/molecules/StatDisplay.tsx"() {
32647
32778
  "use client";
@@ -32653,6 +32784,13 @@ var init_StatDisplay = __esm({
32653
32784
  init_Sparkline();
32654
32785
  init_Icon();
32655
32786
  init_useEventBus();
32787
+ lookStyles6 = {
32788
+ elevated: "",
32789
+ flat: "shadow-none border-[length:var(--border-width)] border-border",
32790
+ "progress-backed": "",
32791
+ gauge: "",
32792
+ sparkline: ""
32793
+ };
32656
32794
  variantColor = {
32657
32795
  default: "text-foreground",
32658
32796
  primary: "text-primary",
@@ -32680,6 +32818,7 @@ var init_StatDisplay = __esm({
32680
32818
  size = "md",
32681
32819
  variant = "default",
32682
32820
  compact = false,
32821
+ look = "elevated",
32683
32822
  className,
32684
32823
  isLoading = false,
32685
32824
  error = null
@@ -32732,7 +32871,7 @@ var init_StatDisplay = __esm({
32732
32871
  return /* @__PURE__ */ jsx(
32733
32872
  Card,
32734
32873
  {
32735
- className: cn(padSizes[size], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
32874
+ className: cn(padSizes[size], lookStyles6[look], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
32736
32875
  onClick: clickEvent ? handleClick : void 0,
32737
32876
  children: /* @__PURE__ */ jsxs(HStack, { align: "start", justify: "between", children: [
32738
32877
  /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "space-y-1 flex-1", children: [
@@ -37911,7 +38050,8 @@ function DataTable({
37911
38050
  bulkActions,
37912
38051
  headerActions,
37913
38052
  showTotal = true,
37914
- className
38053
+ className,
38054
+ look = "dense"
37915
38055
  }) {
37916
38056
  const [openActionMenu, setOpenActionMenu] = useState(
37917
38057
  null
@@ -38038,6 +38178,7 @@ function DataTable({
38038
38178
  {
38039
38179
  className: cn(
38040
38180
  "bg-card border-2 border-border rounded-none overflow-hidden",
38181
+ lookStyles7[look],
38041
38182
  className
38042
38183
  ),
38043
38184
  children: [
@@ -38264,6 +38405,7 @@ function DataTable({
38264
38405
  }
38265
38406
  );
38266
38407
  }
38408
+ var lookStyles7;
38267
38409
  var init_DataTable = __esm({
38268
38410
  "components/organisms/DataTable.tsx"() {
38269
38411
  "use client";
@@ -38277,6 +38419,13 @@ var init_DataTable = __esm({
38277
38419
  init_useEventBus();
38278
38420
  init_useTranslate();
38279
38421
  init_types3();
38422
+ lookStyles7 = {
38423
+ dense: "",
38424
+ spacious: "[&_tbody_tr_td]:py-5 [&_thead_tr_th]:py-4",
38425
+ striped: "[&_tbody_tr:nth-child(odd)]:bg-muted/30",
38426
+ borderless: "border-0 [&_thead]:border-b-0 [&_tbody_tr]:border-b-0 [&_tbody]:divide-y-0",
38427
+ "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"
38428
+ };
38280
38429
  DataTable.displayName = "DataTable";
38281
38430
  }
38282
38431
  });
@@ -41435,7 +41584,7 @@ var init_GraphCanvas = __esm({
41435
41584
  GraphCanvas.displayName = "GraphCanvas";
41436
41585
  }
41437
41586
  });
41438
- var Header;
41587
+ var lookStyles8, Header;
41439
41588
  var init_Header = __esm({
41440
41589
  "components/organisms/Header.tsx"() {
41441
41590
  "use client";
@@ -41448,6 +41597,13 @@ var init_Header = __esm({
41448
41597
  init_Typography();
41449
41598
  init_cn();
41450
41599
  init_useTranslate();
41600
+ lookStyles8 = {
41601
+ "compact-bar": "",
41602
+ hero: "py-section min-h-[200px] [&_h1]:text-display-1",
41603
+ breadcrumb: "py-2 text-sm [&_h1]:text-base [&_h1]:font-medium",
41604
+ contextual: "py-3 [&_h1]:text-lg",
41605
+ "editorial-banner": "py-12 [&_h1]:text-display-2 [&_h1]:font-display-bold border-b border-border"
41606
+ };
41451
41607
  Header = ({
41452
41608
  logo,
41453
41609
  logoSrc,
@@ -41465,6 +41621,7 @@ var init_Header = __esm({
41465
41621
  actions,
41466
41622
  sticky = true,
41467
41623
  variant = "mobile",
41624
+ look = "compact-bar",
41468
41625
  onLogoClick,
41469
41626
  className
41470
41627
  }) => {
@@ -41480,6 +41637,7 @@ var init_Header = __esm({
41480
41637
  "flex items-center px-4 justify-between bg-card",
41481
41638
  sticky && "sticky top-0 z-50",
41482
41639
  variant === "mobile" && "lg:hidden",
41640
+ lookStyles8[look],
41483
41641
  className
41484
41642
  ),
41485
41643
  children: [
@@ -48175,7 +48333,7 @@ var init_TeamOrganism = __esm({
48175
48333
  TeamOrganism.displayName = "TeamOrganism";
48176
48334
  }
48177
48335
  });
48178
- var STATUS_STYLES3, Timeline;
48336
+ var lookStyles9, STATUS_STYLES3, Timeline;
48179
48337
  var init_Timeline = __esm({
48180
48338
  "components/organisms/Timeline.tsx"() {
48181
48339
  "use client";
@@ -48186,6 +48344,12 @@ var init_Timeline = __esm({
48186
48344
  init_ErrorState();
48187
48345
  init_EmptyState();
48188
48346
  init_useTranslate();
48347
+ lookStyles9 = {
48348
+ "vertical-compact": "gap-1 [&>*]:py-1",
48349
+ "vertical-spacious": "",
48350
+ horizontal: "flex-row [&>*]:flex-row [&>*]:items-center",
48351
+ swimlane: "flex-row gap-6 [&>*]:flex-row [&>*]:items-center"
48352
+ };
48189
48353
  STATUS_STYLES3 = {
48190
48354
  complete: {
48191
48355
  dotColor: "text-success",
@@ -48216,7 +48380,8 @@ var init_Timeline = __esm({
48216
48380
  entity,
48217
48381
  isLoading = false,
48218
48382
  error,
48219
- className
48383
+ className,
48384
+ look = "vertical-spacious"
48220
48385
  }) => {
48221
48386
  const { t } = useTranslate();
48222
48387
  const entityData = Array.isArray(entity) ? entity : [];
@@ -48272,7 +48437,7 @@ var init_Timeline = __esm({
48272
48437
  }
48273
48438
  return /* @__PURE__ */ jsx(Card, { className: cn("p-6", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
48274
48439
  title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
48275
- /* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
48440
+ /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("relative", lookStyles9[look]), children: items.map((item, idx) => {
48276
48441
  const status = item.status || "pending";
48277
48442
  const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
48278
48443
  const ItemIcon = item.icon || style.icon;