@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.
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, 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,6 +8474,15 @@ var init_Card = __esm({
8466
8474
  md: "shadow",
8467
8475
  lg: "shadow-elevation-dialog"
8468
8476
  };
8477
+ lookStyles2 = {
8478
+ elevated: "",
8479
+ "flat-bordered": "shadow-none border-[length:var(--border-width)] border-border",
8480
+ "borderless-divider": "shadow-none border-0 border-b border-border rounded-none",
8481
+ ticket: "shadow-none border-dashed border-[length:var(--border-width)] border-border",
8482
+ invoice: "shadow-none border-[length:var(--border-width-thick)] border-border rounded-sm",
8483
+ chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
8484
+ "tile-image-first": "p-0 overflow-hidden"
8485
+ };
8469
8486
  Card = React98__default.forwardRef(
8470
8487
  ({
8471
8488
  className,
@@ -8474,6 +8491,7 @@ var init_Card = __esm({
8474
8491
  title,
8475
8492
  subtitle,
8476
8493
  shadow,
8494
+ look = "elevated",
8477
8495
  children,
8478
8496
  ...props
8479
8497
  }, ref) => {
@@ -8486,6 +8504,7 @@ var init_Card = __esm({
8486
8504
  "transition-all duration-[var(--transition-normal)]",
8487
8505
  variantStyles4[variant],
8488
8506
  paddingStyles2[padding],
8507
+ lookStyles2[look],
8489
8508
  shadow && shadowStyles2[shadow],
8490
8509
  className
8491
8510
  ),
@@ -19871,7 +19890,7 @@ var init_BookTableOfContents = __esm({
19871
19890
  BookTableOfContents.displayName = "BookTableOfContents";
19872
19891
  }
19873
19892
  });
19874
- var ICON_NAME_ALIASES, EmptyState;
19893
+ var ICON_NAME_ALIASES, lookStyles3, EmptyState;
19875
19894
  var init_EmptyState = __esm({
19876
19895
  "components/molecules/EmptyState.tsx"() {
19877
19896
  "use client";
@@ -19888,6 +19907,12 @@ var init_EmptyState = __esm({
19888
19907
  error: "x-circle",
19889
19908
  warning: "alert-circle"
19890
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
+ };
19891
19916
  EmptyState = ({
19892
19917
  icon,
19893
19918
  title,
@@ -19898,7 +19923,8 @@ var init_EmptyState = __esm({
19898
19923
  className,
19899
19924
  destructive,
19900
19925
  variant,
19901
- actionEvent
19926
+ actionEvent,
19927
+ look = "icon-only"
19902
19928
  }) => {
19903
19929
  const eventBus = useEventBus();
19904
19930
  const { t } = useTranslate();
@@ -19918,6 +19944,7 @@ var init_EmptyState = __esm({
19918
19944
  align: "center",
19919
19945
  className: cn(
19920
19946
  "justify-center py-12 text-center",
19947
+ lookStyles3[look],
19921
19948
  className
19922
19949
  ),
19923
19950
  children: [
@@ -21158,7 +21185,7 @@ function useSafeEventBus2() {
21158
21185
  } };
21159
21186
  }
21160
21187
  }
21161
- var log9, ButtonGroup;
21188
+ var log9, lookStyles4, ButtonGroup;
21162
21189
  var init_ButtonGroup = __esm({
21163
21190
  "components/molecules/ButtonGroup.tsx"() {
21164
21191
  "use client";
@@ -21166,6 +21193,13 @@ var init_ButtonGroup = __esm({
21166
21193
  init_atoms();
21167
21194
  init_useEventBus();
21168
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
+ };
21169
21203
  ButtonGroup = ({
21170
21204
  children,
21171
21205
  primary,
@@ -21175,7 +21209,8 @@ var init_ButtonGroup = __esm({
21175
21209
  className,
21176
21210
  // Filter-group pattern props (entity and filters are used for schema-driven filtering)
21177
21211
  entity: _entity,
21178
- filters
21212
+ filters,
21213
+ look = "right-aligned-buttons"
21179
21214
  }) => {
21180
21215
  const eventBus = useSafeEventBus2();
21181
21216
  const variantClasses2 = {
@@ -21252,6 +21287,7 @@ var init_ButtonGroup = __esm({
21252
21287
  "inline-flex gap-2",
21253
21288
  variantClasses2[variant],
21254
21289
  orientationClasses[orientation],
21290
+ lookStyles4[look],
21255
21291
  className
21256
21292
  ),
21257
21293
  role: "group",
@@ -23783,7 +23819,7 @@ var init_CastleTemplate = __esm({
23783
23819
  CastleTemplate.displayName = "CastleTemplate";
23784
23820
  }
23785
23821
  });
23786
- 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;
23787
23823
  var init_Chart = __esm({
23788
23824
  "components/organisms/Chart.tsx"() {
23789
23825
  "use client";
@@ -23813,7 +23849,7 @@ var init_Chart = __esm({
23813
23849
  if (Number.isNaN(parsed.getTime())) return raw;
23814
23850
  return monthFormatter.format(parsed);
23815
23851
  };
23816
- BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, onPointClick }) => {
23852
+ BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, horizontal = false, onPointClick }) => {
23817
23853
  const categories = useMemo(() => {
23818
23854
  const set = [];
23819
23855
  const seen = /* @__PURE__ */ new Set();
@@ -23851,6 +23887,64 @@ var init_Chart = __esm({
23851
23887
  }
23852
23888
  return m;
23853
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
+ }
23854
23948
  return /* @__PURE__ */ jsx(
23855
23949
  HStack,
23856
23950
  {
@@ -24278,10 +24372,20 @@ var init_Chart = __esm({
24278
24372
  }
24279
24373
  );
24280
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
+ };
24281
24384
  Chart = ({
24282
24385
  title,
24283
24386
  subtitle,
24284
- chartType = "bar",
24387
+ chartType,
24388
+ look,
24285
24389
  series,
24286
24390
  data: simpleData,
24287
24391
  scatterData,
@@ -24297,6 +24401,7 @@ var init_Chart = __esm({
24297
24401
  error,
24298
24402
  className
24299
24403
  }) => {
24404
+ const resolvedLook = look ?? (chartType ? LOOK_FROM_CHART_TYPE[chartType] : "bar-vertical");
24300
24405
  const eventBus = useEventBus();
24301
24406
  const { t } = useTranslate();
24302
24407
  const handleAction = useCallback(
@@ -24325,7 +24430,7 @@ var init_Chart = __esm({
24325
24430
  return [];
24326
24431
  }, [simpleData, series]);
24327
24432
  const firstSeriesData = normalizedSeries[0]?.data ?? [];
24328
- 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);
24329
24434
  if (isLoading) {
24330
24435
  return /* @__PURE__ */ jsx(LoadingState, { message: "Loading chart...", className });
24331
24436
  }
@@ -24360,7 +24465,7 @@ var init_Chart = __esm({
24360
24465
  )) })
24361
24466
  ] }),
24362
24467
  /* @__PURE__ */ jsxs(Box, { className: "w-full", children: [
24363
- chartType === "bar" && /* @__PURE__ */ jsx(
24468
+ resolvedLook === "bar-vertical" && /* @__PURE__ */ jsx(
24364
24469
  BarChart,
24365
24470
  {
24366
24471
  series: normalizedSeries,
@@ -24371,7 +24476,19 @@ var init_Chart = __esm({
24371
24476
  onPointClick: handlePointClick
24372
24477
  }
24373
24478
  ),
24374
- chartType === "histogram" && /* @__PURE__ */ jsx(
24479
+ resolvedLook === "bar-horizontal" && /* @__PURE__ */ jsx(
24480
+ BarChart,
24481
+ {
24482
+ series: normalizedSeries,
24483
+ height,
24484
+ showValues,
24485
+ stack,
24486
+ timeAxis,
24487
+ horizontal: true,
24488
+ onPointClick: handlePointClick
24489
+ }
24490
+ ),
24491
+ resolvedLook === "histogram" && /* @__PURE__ */ jsx(
24375
24492
  BarChart,
24376
24493
  {
24377
24494
  series: normalizedSeries,
@@ -24383,7 +24500,7 @@ var init_Chart = __esm({
24383
24500
  onPointClick: handlePointClick
24384
24501
  }
24385
24502
  ),
24386
- chartType === "line" && /* @__PURE__ */ jsx(
24503
+ resolvedLook === "line" && /* @__PURE__ */ jsx(
24387
24504
  LineChart,
24388
24505
  {
24389
24506
  series: normalizedSeries,
@@ -24393,7 +24510,7 @@ var init_Chart = __esm({
24393
24510
  onPointClick: handlePointClick
24394
24511
  }
24395
24512
  ),
24396
- chartType === "area" && /* @__PURE__ */ jsx(
24513
+ resolvedLook === "area" && /* @__PURE__ */ jsx(
24397
24514
  LineChart,
24398
24515
  {
24399
24516
  series: normalizedSeries,
@@ -24404,7 +24521,7 @@ var init_Chart = __esm({
24404
24521
  onPointClick: handlePointClick
24405
24522
  }
24406
24523
  ),
24407
- chartType === "pie" && /* @__PURE__ */ jsx(
24524
+ resolvedLook === "pie" && /* @__PURE__ */ jsx(
24408
24525
  PieChart,
24409
24526
  {
24410
24527
  data: firstSeriesData,
@@ -24413,7 +24530,7 @@ var init_Chart = __esm({
24413
24530
  onPointClick: handlePointClick
24414
24531
  }
24415
24532
  ),
24416
- chartType === "donut" && /* @__PURE__ */ jsx(
24533
+ resolvedLook === "donut" && /* @__PURE__ */ jsx(
24417
24534
  PieChart,
24418
24535
  {
24419
24536
  data: firstSeriesData,
@@ -24423,7 +24540,7 @@ var init_Chart = __esm({
24423
24540
  onPointClick: handlePointClick
24424
24541
  }
24425
24542
  ),
24426
- chartType === "scatter" && /* @__PURE__ */ jsx(
24543
+ resolvedLook === "scatter" && /* @__PURE__ */ jsx(
24427
24544
  ScatterChart,
24428
24545
  {
24429
24546
  data: scatterData ?? [],
@@ -27846,7 +27963,7 @@ var init_useQuerySingleton = __esm({
27846
27963
  queryStores = /* @__PURE__ */ new Map();
27847
27964
  }
27848
27965
  });
27849
- var resolveFilterType, FilterGroup;
27966
+ var resolveFilterType, lookStyles5, FilterGroup;
27850
27967
  var init_FilterGroup = __esm({
27851
27968
  "components/molecules/FilterGroup.tsx"() {
27852
27969
  "use client";
@@ -27860,6 +27977,13 @@ var init_FilterGroup = __esm({
27860
27977
  init_useEventBus();
27861
27978
  init_useQuerySingleton();
27862
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
+ };
27863
27987
  FilterGroup = ({
27864
27988
  entity,
27865
27989
  filters,
@@ -27869,7 +27993,8 @@ var init_FilterGroup = __esm({
27869
27993
  variant = "default",
27870
27994
  showIcon = true,
27871
27995
  query,
27872
- isLoading
27996
+ isLoading,
27997
+ look = "toolbar"
27873
27998
  }) => {
27874
27999
  const eventBus = useEventBus();
27875
28000
  const queryState = useQuerySingleton(query);
@@ -27924,63 +28049,71 @@ var init_FilterGroup = __esm({
27924
28049
  }, [onClearAll, queryState, eventBus, entity, query]);
27925
28050
  const activeFilterCount = Object.keys(selectedValues).length;
27926
28051
  if (variant === "pills") {
27927
- return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
27928
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
27929
- filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
27930
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
27931
- filter.label,
27932
- ":"
27933
- ] }),
27934
- /* @__PURE__ */ jsxs(
27935
- HStack,
27936
- {
27937
- gap: "none",
27938
- className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
27939
- children: [
27940
- /* @__PURE__ */ jsx(
27941
- "button",
27942
- {
27943
- type: "button",
27944
- onClick: () => handleFilterSelect(filter.field, null),
27945
- className: cn(
27946
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
27947
- !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
27948
- ),
27949
- children: "All"
27950
- }
27951
- ),
27952
- filter.options?.map((option) => /* @__PURE__ */ jsx(
27953
- "button",
27954
- {
27955
- type: "button",
27956
- onClick: () => handleFilterSelect(filter.field, option),
27957
- className: cn(
27958
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
27959
- "border-l-[length:var(--border-width)] border-border",
27960
- 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
+ }
27961
28082
  ),
27962
- children: option
27963
- },
27964
- option
27965
- ))
27966
- ]
27967
- }
27968
- )
27969
- ] }, filter.field)),
27970
- activeFilterCount > 0 && /* @__PURE__ */ jsx(
27971
- Button,
27972
- {
27973
- variant: "ghost",
27974
- size: "sm",
27975
- onClick: handleClearAll,
27976
- leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
27977
- children: "Clear"
27978
- }
27979
- )
27980
- ] });
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
+ );
27981
28114
  }
27982
28115
  if (variant === "vertical") {
27983
- 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: [
27984
28117
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
27985
28118
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
27986
28119
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: "Filters" })
@@ -28063,92 +28196,100 @@ var init_FilterGroup = __esm({
28063
28196
  ] });
28064
28197
  }
28065
28198
  if (variant === "compact") {
28066
- return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
28067
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
28068
- filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
28069
- Input,
28070
- {
28071
- type: "date",
28072
- value: selectedValues[filter.field] || "",
28073
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
28074
- clearable: true,
28075
- onClear: () => handleFilterSelect(filter.field, null),
28076
- className: "text-sm"
28077
- }
28078
- ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
28079
- /* @__PURE__ */ jsx(
28080
- Input,
28081
- {
28082
- type: "date",
28083
- value: selectedValues[`${filter.field}_from`] || "",
28084
- onChange: (e) => handleFilterSelect(
28085
- `${filter.field}_from`,
28086
- e.target.value || null
28087
- ),
28088
- className: "text-sm min-w-[100px]"
28089
- }
28090
- ),
28091
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
28092
- /* @__PURE__ */ jsx(
28093
- Input,
28094
- {
28095
- type: "date",
28096
- value: selectedValues[`${filter.field}_to`] || "",
28097
- onChange: (e) => handleFilterSelect(
28098
- `${filter.field}_to`,
28099
- 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
+ }
28100
28229
  ),
28101
- className: "text-sm min-w-[100px]"
28102
- }
28103
- )
28104
- ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
28105
- Input,
28106
- {
28107
- value: selectedValues[filter.field] || "",
28108
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
28109
- placeholder: filter.label,
28110
- clearable: true,
28111
- onClear: () => handleFilterSelect(filter.field, null),
28112
- className: "text-sm"
28113
- }
28114
- ) : /* @__PURE__ */ jsx(
28115
- Select,
28116
- {
28117
- value: selectedValues[filter.field] || "all",
28118
- onChange: (e) => handleFilterSelect(filter.field, e.target.value),
28119
- options: [
28120
- { value: "all", label: `All ${filter.label}` },
28121
- ...filter.options?.map((opt) => ({
28122
- value: opt,
28123
- label: opt
28124
- })) || []
28125
- ],
28126
- className: "text-sm"
28127
- }
28128
- ) }, filter.field)),
28129
- activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
28130
- Object.entries(selectedValues).map(([field, value]) => {
28131
- const filterDef = filters.find((f3) => f3.field === field);
28132
- return /* @__PURE__ */ jsxs(
28133
- 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,
28134
28245
  {
28135
- variant: "primary",
28136
- size: "md",
28137
- className: "cursor-pointer",
28138
- onClick: () => handleFilterSelect(field, null),
28139
- children: [
28140
- filterDef?.label,
28141
- ": ",
28142
- value,
28143
- /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
28144
- ]
28145
- },
28146
- field
28147
- );
28148
- }),
28149
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
28150
- ] })
28151
- ] });
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
+ );
28152
28293
  }
28153
28294
  return /* @__PURE__ */ jsx(
28154
28295
  "div",
@@ -28157,6 +28298,7 @@ var init_FilterGroup = __esm({
28157
28298
  "p-4 rounded-container",
28158
28299
  "bg-card",
28159
28300
  "border-[length:var(--border-width)] border-border",
28301
+ lookStyles5[look],
28160
28302
  className
28161
28303
  ),
28162
28304
  children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: "flex-wrap", children: [
@@ -32630,7 +32772,7 @@ function composeDisplayValue(value, format, max, prefix, suffix) {
32630
32772
  const withMax = max != null && max > 0 ? `${formatted} / ${max}` : formatted;
32631
32773
  return `${prefix ?? ""}${withMax}${suffix ?? ""}`;
32632
32774
  }
32633
- var variantColor, StatDisplay;
32775
+ var lookStyles6, variantColor, StatDisplay;
32634
32776
  var init_StatDisplay = __esm({
32635
32777
  "components/molecules/StatDisplay.tsx"() {
32636
32778
  "use client";
@@ -32642,6 +32784,13 @@ var init_StatDisplay = __esm({
32642
32784
  init_Sparkline();
32643
32785
  init_Icon();
32644
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
+ };
32645
32794
  variantColor = {
32646
32795
  default: "text-foreground",
32647
32796
  primary: "text-primary",
@@ -32669,6 +32818,7 @@ var init_StatDisplay = __esm({
32669
32818
  size = "md",
32670
32819
  variant = "default",
32671
32820
  compact = false,
32821
+ look = "elevated",
32672
32822
  className,
32673
32823
  isLoading = false,
32674
32824
  error = null
@@ -32721,7 +32871,7 @@ var init_StatDisplay = __esm({
32721
32871
  return /* @__PURE__ */ jsx(
32722
32872
  Card,
32723
32873
  {
32724
- 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),
32725
32875
  onClick: clickEvent ? handleClick : void 0,
32726
32876
  children: /* @__PURE__ */ jsxs(HStack, { align: "start", justify: "between", children: [
32727
32877
  /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "space-y-1 flex-1", children: [
@@ -37900,7 +38050,8 @@ function DataTable({
37900
38050
  bulkActions,
37901
38051
  headerActions,
37902
38052
  showTotal = true,
37903
- className
38053
+ className,
38054
+ look = "dense"
37904
38055
  }) {
37905
38056
  const [openActionMenu, setOpenActionMenu] = useState(
37906
38057
  null
@@ -38027,6 +38178,7 @@ function DataTable({
38027
38178
  {
38028
38179
  className: cn(
38029
38180
  "bg-card border-2 border-border rounded-none overflow-hidden",
38181
+ lookStyles7[look],
38030
38182
  className
38031
38183
  ),
38032
38184
  children: [
@@ -38253,6 +38405,7 @@ function DataTable({
38253
38405
  }
38254
38406
  );
38255
38407
  }
38408
+ var lookStyles7;
38256
38409
  var init_DataTable = __esm({
38257
38410
  "components/organisms/DataTable.tsx"() {
38258
38411
  "use client";
@@ -38266,6 +38419,13 @@ var init_DataTable = __esm({
38266
38419
  init_useEventBus();
38267
38420
  init_useTranslate();
38268
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
+ };
38269
38429
  DataTable.displayName = "DataTable";
38270
38430
  }
38271
38431
  });
@@ -41424,7 +41584,7 @@ var init_GraphCanvas = __esm({
41424
41584
  GraphCanvas.displayName = "GraphCanvas";
41425
41585
  }
41426
41586
  });
41427
- var Header;
41587
+ var lookStyles8, Header;
41428
41588
  var init_Header = __esm({
41429
41589
  "components/organisms/Header.tsx"() {
41430
41590
  "use client";
@@ -41437,6 +41597,13 @@ var init_Header = __esm({
41437
41597
  init_Typography();
41438
41598
  init_cn();
41439
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
+ };
41440
41607
  Header = ({
41441
41608
  logo,
41442
41609
  logoSrc,
@@ -41454,6 +41621,7 @@ var init_Header = __esm({
41454
41621
  actions,
41455
41622
  sticky = true,
41456
41623
  variant = "mobile",
41624
+ look = "compact-bar",
41457
41625
  onLogoClick,
41458
41626
  className
41459
41627
  }) => {
@@ -41469,6 +41637,7 @@ var init_Header = __esm({
41469
41637
  "flex items-center px-4 justify-between bg-card",
41470
41638
  sticky && "sticky top-0 z-50",
41471
41639
  variant === "mobile" && "lg:hidden",
41640
+ lookStyles8[look],
41472
41641
  className
41473
41642
  ),
41474
41643
  children: [
@@ -48164,7 +48333,7 @@ var init_TeamOrganism = __esm({
48164
48333
  TeamOrganism.displayName = "TeamOrganism";
48165
48334
  }
48166
48335
  });
48167
- var STATUS_STYLES3, Timeline;
48336
+ var lookStyles9, STATUS_STYLES3, Timeline;
48168
48337
  var init_Timeline = __esm({
48169
48338
  "components/organisms/Timeline.tsx"() {
48170
48339
  "use client";
@@ -48175,6 +48344,12 @@ var init_Timeline = __esm({
48175
48344
  init_ErrorState();
48176
48345
  init_EmptyState();
48177
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
+ };
48178
48353
  STATUS_STYLES3 = {
48179
48354
  complete: {
48180
48355
  dotColor: "text-success",
@@ -48205,7 +48380,8 @@ var init_Timeline = __esm({
48205
48380
  entity,
48206
48381
  isLoading = false,
48207
48382
  error,
48208
- className
48383
+ className,
48384
+ look = "vertical-spacious"
48209
48385
  }) => {
48210
48386
  const { t } = useTranslate();
48211
48387
  const entityData = Array.isArray(entity) ? entity : [];
@@ -48261,7 +48437,7 @@ var init_Timeline = __esm({
48261
48437
  }
48262
48438
  return /* @__PURE__ */ jsx(Card, { className: cn("p-6", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
48263
48439
  title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
48264
- /* @__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) => {
48265
48441
  const status = item.status || "pending";
48266
48442
  const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
48267
48443
  const ItemIcon = item.icon || style.icon;