@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.
@@ -2141,7 +2141,7 @@ var init_Overlay = __esm({
2141
2141
  };
2142
2142
  }
2143
2143
  });
2144
- var sizeClasses2, minWidthClasses, Modal;
2144
+ var sizeClasses2, minWidthClasses, lookStyles, Modal;
2145
2145
  var init_Modal = __esm({
2146
2146
  "components/molecules/Modal.tsx"() {
2147
2147
  "use client";
@@ -2166,6 +2166,12 @@ var init_Modal = __esm({
2166
2166
  xl: "min-w-[700px] max-sm:min-w-0",
2167
2167
  full: "min-w-0"
2168
2168
  };
2169
+ lookStyles = {
2170
+ "centered-card": "",
2171
+ "top-sheet": "top-0 rounded-t-none rounded-b-container max-w-full w-full",
2172
+ "side-drawer": "right-0 top-0 bottom-0 h-full rounded-l-container rounded-r-none w-[400px] max-w-full",
2173
+ "full-screen": "inset-0 rounded-none w-full h-full max-w-full"
2174
+ };
2169
2175
  Modal = ({
2170
2176
  isOpen = true,
2171
2177
  onClose = () => {
@@ -2179,7 +2185,8 @@ var init_Modal = __esm({
2179
2185
  closeOnEscape = true,
2180
2186
  className,
2181
2187
  closeEvent,
2182
- swipeDownToClose = true
2188
+ swipeDownToClose = true,
2189
+ look = "centered-card"
2183
2190
  }) => {
2184
2191
  const eventBus = useEventBus();
2185
2192
  const modalRef = useRef(null);
@@ -2264,6 +2271,7 @@ var init_Modal = __esm({
2264
2271
  // Mobile: take the entire screen. Override desktop max-w cap,
2265
2272
  // full height, no rounded corners, no min-width.
2266
2273
  "max-sm:max-w-none max-sm:max-h-none max-sm:w-full max-sm:h-full max-sm:rounded-none",
2274
+ lookStyles[look],
2267
2275
  className
2268
2276
  ),
2269
2277
  style: dragY > 0 ? {
@@ -3838,7 +3846,7 @@ var init_Checkbox = __esm({
3838
3846
  Checkbox.displayName = "Checkbox";
3839
3847
  }
3840
3848
  });
3841
- var variantStyles4, paddingStyles2, shadowStyles2, lookStyles, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
3849
+ var variantStyles4, paddingStyles2, shadowStyles2, lookStyles2, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
3842
3850
  var init_Card = __esm({
3843
3851
  "components/atoms/Card.tsx"() {
3844
3852
  init_cn();
@@ -3886,7 +3894,7 @@ var init_Card = __esm({
3886
3894
  md: "shadow",
3887
3895
  lg: "shadow-elevation-dialog"
3888
3896
  };
3889
- lookStyles = {
3897
+ lookStyles2 = {
3890
3898
  elevated: "",
3891
3899
  "flat-bordered": "shadow-none border-[length:var(--border-width)] border-border",
3892
3900
  "borderless-divider": "shadow-none border-0 border-b border-border rounded-none",
@@ -3916,7 +3924,7 @@ var init_Card = __esm({
3916
3924
  "transition-all duration-[var(--transition-normal)]",
3917
3925
  variantStyles4[variant],
3918
3926
  paddingStyles2[padding],
3919
- lookStyles[look],
3927
+ lookStyles2[look],
3920
3928
  shadow && shadowStyles2[shadow],
3921
3929
  className
3922
3930
  ),
@@ -16144,7 +16152,7 @@ var init_BookTableOfContents = __esm({
16144
16152
  BookTableOfContents.displayName = "BookTableOfContents";
16145
16153
  }
16146
16154
  });
16147
- var ICON_NAME_ALIASES, EmptyState;
16155
+ var ICON_NAME_ALIASES, lookStyles3, EmptyState;
16148
16156
  var init_EmptyState = __esm({
16149
16157
  "components/molecules/EmptyState.tsx"() {
16150
16158
  "use client";
@@ -16161,6 +16169,12 @@ var init_EmptyState = __esm({
16161
16169
  error: "x-circle",
16162
16170
  warning: "alert-circle"
16163
16171
  };
16172
+ lookStyles3 = {
16173
+ "icon-only": "",
16174
+ illustrated: "[&_svg]:w-32 [&_svg]:h-32",
16175
+ "text-only": "[&_svg]:hidden",
16176
+ mascot: "[&_svg]:w-24 [&_svg]:h-24 [&_svg]:rounded-pill"
16177
+ };
16164
16178
  EmptyState = ({
16165
16179
  icon,
16166
16180
  title,
@@ -16171,7 +16185,8 @@ var init_EmptyState = __esm({
16171
16185
  className,
16172
16186
  destructive,
16173
16187
  variant,
16174
- actionEvent
16188
+ actionEvent,
16189
+ look = "icon-only"
16175
16190
  }) => {
16176
16191
  const eventBus = useEventBus();
16177
16192
  const { t } = useTranslate();
@@ -16191,6 +16206,7 @@ var init_EmptyState = __esm({
16191
16206
  align: "center",
16192
16207
  className: cn(
16193
16208
  "justify-center py-12 text-center",
16209
+ lookStyles3[look],
16194
16210
  className
16195
16211
  ),
16196
16212
  children: [
@@ -17431,7 +17447,7 @@ function useSafeEventBus2() {
17431
17447
  } };
17432
17448
  }
17433
17449
  }
17434
- var log8, ButtonGroup;
17450
+ var log8, lookStyles4, ButtonGroup;
17435
17451
  var init_ButtonGroup = __esm({
17436
17452
  "components/molecules/ButtonGroup.tsx"() {
17437
17453
  "use client";
@@ -17439,6 +17455,13 @@ var init_ButtonGroup = __esm({
17439
17455
  init_atoms();
17440
17456
  init_useEventBus();
17441
17457
  log8 = createLogger("almadar:ui:button-group");
17458
+ lookStyles4 = {
17459
+ "right-aligned-buttons": "",
17460
+ "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
17461
+ "inline-row": "gap-2 inline-flex",
17462
+ "dropdown-menu": "[&>button:not(:first-child)]:hidden",
17463
+ "command-palette-trigger": "[&>button:not(:first-child)]:hidden"
17464
+ };
17442
17465
  ButtonGroup = ({
17443
17466
  children,
17444
17467
  primary,
@@ -17448,7 +17471,8 @@ var init_ButtonGroup = __esm({
17448
17471
  className,
17449
17472
  // Filter-group pattern props (entity and filters are used for schema-driven filtering)
17450
17473
  entity: _entity,
17451
- filters
17474
+ filters,
17475
+ look = "right-aligned-buttons"
17452
17476
  }) => {
17453
17477
  const eventBus = useSafeEventBus2();
17454
17478
  const variantClasses2 = {
@@ -17525,6 +17549,7 @@ var init_ButtonGroup = __esm({
17525
17549
  "inline-flex gap-2",
17526
17550
  variantClasses2[variant],
17527
17551
  orientationClasses[orientation],
17552
+ lookStyles4[look],
17528
17553
  className
17529
17554
  ),
17530
17555
  role: "group",
@@ -19989,7 +20014,7 @@ var init_CastleTemplate = __esm({
19989
20014
  CastleTemplate.displayName = "CastleTemplate";
19990
20015
  }
19991
20016
  });
19992
- var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, Chart;
20017
+ var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, LOOK_FROM_CHART_TYPE, Chart;
19993
20018
  var init_Chart = __esm({
19994
20019
  "components/organisms/Chart.tsx"() {
19995
20020
  "use client";
@@ -20019,7 +20044,7 @@ var init_Chart = __esm({
20019
20044
  if (Number.isNaN(parsed.getTime())) return raw;
20020
20045
  return monthFormatter.format(parsed);
20021
20046
  };
20022
- BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, onPointClick }) => {
20047
+ BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, horizontal = false, onPointClick }) => {
20023
20048
  const categories = useMemo(() => {
20024
20049
  const set = [];
20025
20050
  const seen = /* @__PURE__ */ new Set();
@@ -20057,6 +20082,64 @@ var init_Chart = __esm({
20057
20082
  }
20058
20083
  return m;
20059
20084
  }, [series, stack, columnTotals]);
20085
+ if (horizontal) {
20086
+ return /* @__PURE__ */ jsx(VStack, { gap: "xs", align: "stretch", className: "w-full", style: { minHeight: height }, children: categories.map((label, catIdx) => {
20087
+ const displayLabel = timeAxis ? formatTimeLabel(label) : label;
20088
+ const total = columnTotals?.[catIdx] ?? 1;
20089
+ return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "w-full", children: [
20090
+ /* @__PURE__ */ jsx(
20091
+ Typography,
20092
+ {
20093
+ variant: "caption",
20094
+ color: "secondary",
20095
+ className: "truncate text-right",
20096
+ style: { width: 80, flexShrink: 0 },
20097
+ children: displayLabel
20098
+ }
20099
+ ),
20100
+ /* @__PURE__ */ jsx(
20101
+ HStack,
20102
+ {
20103
+ gap: stack === "none" ? "xs" : "none",
20104
+ align: "center",
20105
+ className: "flex-1 min-w-0",
20106
+ style: { height: 24 },
20107
+ children: series.map((s, sIdx) => {
20108
+ const value = valueAt(s, label);
20109
+ const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
20110
+ const color = seriesColor(s, sIdx);
20111
+ return /* @__PURE__ */ jsx(
20112
+ Box,
20113
+ {
20114
+ className: "h-full rounded-r-sm transition-all duration-500 ease-out min-w-[2px] cursor-pointer hover:opacity-80",
20115
+ style: {
20116
+ width: `${ratio}%`,
20117
+ backgroundColor: color
20118
+ },
20119
+ onClick: () => onPointClick?.(
20120
+ { label, value, color },
20121
+ s.name
20122
+ ),
20123
+ title: `${s.name}: ${value}`
20124
+ },
20125
+ s.name
20126
+ );
20127
+ })
20128
+ }
20129
+ ),
20130
+ showValues && series.length === 1 && /* @__PURE__ */ jsx(
20131
+ Typography,
20132
+ {
20133
+ variant: "caption",
20134
+ color: "secondary",
20135
+ className: "tabular-nums",
20136
+ style: { width: 40, flexShrink: 0 },
20137
+ children: valueAt(series[0], label)
20138
+ }
20139
+ )
20140
+ ] }, label);
20141
+ }) });
20142
+ }
20060
20143
  return /* @__PURE__ */ jsx(
20061
20144
  HStack,
20062
20145
  {
@@ -20484,10 +20567,20 @@ var init_Chart = __esm({
20484
20567
  }
20485
20568
  );
20486
20569
  };
20570
+ LOOK_FROM_CHART_TYPE = {
20571
+ bar: "bar-vertical",
20572
+ line: "line",
20573
+ pie: "pie",
20574
+ area: "area",
20575
+ donut: "donut",
20576
+ scatter: "scatter",
20577
+ histogram: "histogram"
20578
+ };
20487
20579
  Chart = ({
20488
20580
  title,
20489
20581
  subtitle,
20490
- chartType = "bar",
20582
+ chartType,
20583
+ look,
20491
20584
  series,
20492
20585
  data: simpleData,
20493
20586
  scatterData,
@@ -20503,6 +20596,7 @@ var init_Chart = __esm({
20503
20596
  error,
20504
20597
  className
20505
20598
  }) => {
20599
+ const resolvedLook = look ?? (chartType ? LOOK_FROM_CHART_TYPE[chartType] : "bar-vertical");
20506
20600
  const eventBus = useEventBus();
20507
20601
  const { t } = useTranslate();
20508
20602
  const handleAction = useCallback(
@@ -20531,7 +20625,7 @@ var init_Chart = __esm({
20531
20625
  return [];
20532
20626
  }, [simpleData, series]);
20533
20627
  const firstSeriesData = normalizedSeries[0]?.data ?? [];
20534
- const hasContent = chartType === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
20628
+ const hasContent = resolvedLook === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
20535
20629
  if (isLoading) {
20536
20630
  return /* @__PURE__ */ jsx(LoadingState, { message: "Loading chart...", className });
20537
20631
  }
@@ -20566,7 +20660,18 @@ var init_Chart = __esm({
20566
20660
  )) })
20567
20661
  ] }),
20568
20662
  /* @__PURE__ */ jsxs(Box, { className: "w-full", children: [
20569
- chartType === "bar" && /* @__PURE__ */ jsx(
20663
+ resolvedLook === "bar-vertical" && /* @__PURE__ */ jsx(
20664
+ BarChart,
20665
+ {
20666
+ series: normalizedSeries,
20667
+ height,
20668
+ showValues,
20669
+ stack,
20670
+ timeAxis,
20671
+ onPointClick: handlePointClick
20672
+ }
20673
+ ),
20674
+ resolvedLook === "bar-horizontal" && /* @__PURE__ */ jsx(
20570
20675
  BarChart,
20571
20676
  {
20572
20677
  series: normalizedSeries,
@@ -20574,10 +20679,11 @@ var init_Chart = __esm({
20574
20679
  showValues,
20575
20680
  stack,
20576
20681
  timeAxis,
20682
+ horizontal: true,
20577
20683
  onPointClick: handlePointClick
20578
20684
  }
20579
20685
  ),
20580
- chartType === "histogram" && /* @__PURE__ */ jsx(
20686
+ resolvedLook === "histogram" && /* @__PURE__ */ jsx(
20581
20687
  BarChart,
20582
20688
  {
20583
20689
  series: normalizedSeries,
@@ -20589,7 +20695,7 @@ var init_Chart = __esm({
20589
20695
  onPointClick: handlePointClick
20590
20696
  }
20591
20697
  ),
20592
- chartType === "line" && /* @__PURE__ */ jsx(
20698
+ resolvedLook === "line" && /* @__PURE__ */ jsx(
20593
20699
  LineChart,
20594
20700
  {
20595
20701
  series: normalizedSeries,
@@ -20599,7 +20705,7 @@ var init_Chart = __esm({
20599
20705
  onPointClick: handlePointClick
20600
20706
  }
20601
20707
  ),
20602
- chartType === "area" && /* @__PURE__ */ jsx(
20708
+ resolvedLook === "area" && /* @__PURE__ */ jsx(
20603
20709
  LineChart,
20604
20710
  {
20605
20711
  series: normalizedSeries,
@@ -20610,7 +20716,7 @@ var init_Chart = __esm({
20610
20716
  onPointClick: handlePointClick
20611
20717
  }
20612
20718
  ),
20613
- chartType === "pie" && /* @__PURE__ */ jsx(
20719
+ resolvedLook === "pie" && /* @__PURE__ */ jsx(
20614
20720
  PieChart,
20615
20721
  {
20616
20722
  data: firstSeriesData,
@@ -20619,7 +20725,7 @@ var init_Chart = __esm({
20619
20725
  onPointClick: handlePointClick
20620
20726
  }
20621
20727
  ),
20622
- chartType === "donut" && /* @__PURE__ */ jsx(
20728
+ resolvedLook === "donut" && /* @__PURE__ */ jsx(
20623
20729
  PieChart,
20624
20730
  {
20625
20731
  data: firstSeriesData,
@@ -20629,7 +20735,7 @@ var init_Chart = __esm({
20629
20735
  onPointClick: handlePointClick
20630
20736
  }
20631
20737
  ),
20632
- chartType === "scatter" && /* @__PURE__ */ jsx(
20738
+ resolvedLook === "scatter" && /* @__PURE__ */ jsx(
20633
20739
  ScatterChart,
20634
20740
  {
20635
20741
  data: scatterData ?? [],
@@ -23974,7 +24080,7 @@ var init_FormField = __esm({
23974
24080
  FormField.displayName = "FormField";
23975
24081
  }
23976
24082
  });
23977
- var resolveFilterType, FilterGroup;
24083
+ var resolveFilterType, lookStyles5, FilterGroup;
23978
24084
  var init_FilterGroup = __esm({
23979
24085
  "components/molecules/FilterGroup.tsx"() {
23980
24086
  "use client";
@@ -23988,6 +24094,13 @@ var init_FilterGroup = __esm({
23988
24094
  init_useEventBus();
23989
24095
  init_useQuerySingleton();
23990
24096
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
24097
+ lookStyles5 = {
24098
+ toolbar: "",
24099
+ chips: "gap-2 [&>*]:rounded-pill [&>*]:px-3 [&>*]:py-1",
24100
+ pills: "gap-2 [&>*]:rounded-pill",
24101
+ "popover-trigger": "[&>*:not(:first-child)]:hidden",
24102
+ "inline-column-header": "hidden"
24103
+ };
23991
24104
  FilterGroup = ({
23992
24105
  entity,
23993
24106
  filters,
@@ -23997,7 +24110,8 @@ var init_FilterGroup = __esm({
23997
24110
  variant = "default",
23998
24111
  showIcon = true,
23999
24112
  query,
24000
- isLoading
24113
+ isLoading,
24114
+ look = "toolbar"
24001
24115
  }) => {
24002
24116
  const eventBus = useEventBus();
24003
24117
  const queryState = useQuerySingleton(query);
@@ -24052,63 +24166,71 @@ var init_FilterGroup = __esm({
24052
24166
  }, [onClearAll, queryState, eventBus, entity, query]);
24053
24167
  const activeFilterCount = Object.keys(selectedValues).length;
24054
24168
  if (variant === "pills") {
24055
- return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
24056
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24057
- filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24058
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
24059
- filter.label,
24060
- ":"
24061
- ] }),
24062
- /* @__PURE__ */ jsxs(
24063
- HStack,
24064
- {
24065
- gap: "none",
24066
- className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
24067
- children: [
24068
- /* @__PURE__ */ jsx(
24069
- "button",
24070
- {
24071
- type: "button",
24072
- onClick: () => handleFilterSelect(filter.field, null),
24073
- className: cn(
24074
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24075
- !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24076
- ),
24077
- children: "All"
24078
- }
24079
- ),
24080
- filter.options?.map((option) => /* @__PURE__ */ jsx(
24081
- "button",
24082
- {
24083
- type: "button",
24084
- onClick: () => handleFilterSelect(filter.field, option),
24085
- className: cn(
24086
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24087
- "border-l-[length:var(--border-width)] border-border",
24088
- selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24169
+ return /* @__PURE__ */ jsxs(
24170
+ HStack,
24171
+ {
24172
+ gap: "md",
24173
+ align: "center",
24174
+ className: cn("flex-wrap", lookStyles5[look], className),
24175
+ children: [
24176
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24177
+ filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24178
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
24179
+ filter.label,
24180
+ ":"
24181
+ ] }),
24182
+ /* @__PURE__ */ jsxs(
24183
+ HStack,
24184
+ {
24185
+ gap: "none",
24186
+ className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
24187
+ children: [
24188
+ /* @__PURE__ */ jsx(
24189
+ "button",
24190
+ {
24191
+ type: "button",
24192
+ onClick: () => handleFilterSelect(filter.field, null),
24193
+ className: cn(
24194
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24195
+ !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24196
+ ),
24197
+ children: "All"
24198
+ }
24089
24199
  ),
24090
- children: option
24091
- },
24092
- option
24093
- ))
24094
- ]
24095
- }
24096
- )
24097
- ] }, filter.field)),
24098
- activeFilterCount > 0 && /* @__PURE__ */ jsx(
24099
- Button,
24100
- {
24101
- variant: "ghost",
24102
- size: "sm",
24103
- onClick: handleClearAll,
24104
- leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
24105
- children: "Clear"
24106
- }
24107
- )
24108
- ] });
24200
+ filter.options?.map((option) => /* @__PURE__ */ jsx(
24201
+ "button",
24202
+ {
24203
+ type: "button",
24204
+ onClick: () => handleFilterSelect(filter.field, option),
24205
+ className: cn(
24206
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
24207
+ "border-l-[length:var(--border-width)] border-border",
24208
+ selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
24209
+ ),
24210
+ children: option
24211
+ },
24212
+ option
24213
+ ))
24214
+ ]
24215
+ }
24216
+ )
24217
+ ] }, filter.field)),
24218
+ activeFilterCount > 0 && /* @__PURE__ */ jsx(
24219
+ Button,
24220
+ {
24221
+ variant: "ghost",
24222
+ size: "sm",
24223
+ onClick: handleClearAll,
24224
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
24225
+ children: "Clear"
24226
+ }
24227
+ )
24228
+ ]
24229
+ }
24230
+ );
24109
24231
  }
24110
24232
  if (variant === "vertical") {
24111
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
24233
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", lookStyles5[look], className), children: [
24112
24234
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
24113
24235
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
24114
24236
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: "Filters" })
@@ -24191,92 +24313,100 @@ var init_FilterGroup = __esm({
24191
24313
  ] });
24192
24314
  }
24193
24315
  if (variant === "compact") {
24194
- return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
24195
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24196
- filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
24197
- Input,
24198
- {
24199
- type: "date",
24200
- value: selectedValues[filter.field] || "",
24201
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24202
- clearable: true,
24203
- onClear: () => handleFilterSelect(filter.field, null),
24204
- className: "text-sm"
24205
- }
24206
- ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24207
- /* @__PURE__ */ jsx(
24208
- Input,
24209
- {
24210
- type: "date",
24211
- value: selectedValues[`${filter.field}_from`] || "",
24212
- onChange: (e) => handleFilterSelect(
24213
- `${filter.field}_from`,
24214
- e.target.value || null
24215
- ),
24216
- className: "text-sm min-w-[100px]"
24217
- }
24218
- ),
24219
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
24220
- /* @__PURE__ */ jsx(
24221
- Input,
24222
- {
24223
- type: "date",
24224
- value: selectedValues[`${filter.field}_to`] || "",
24225
- onChange: (e) => handleFilterSelect(
24226
- `${filter.field}_to`,
24227
- e.target.value || null
24316
+ return /* @__PURE__ */ jsxs(
24317
+ HStack,
24318
+ {
24319
+ gap: "sm",
24320
+ align: "center",
24321
+ className: cn("flex-wrap", lookStyles5[look], className),
24322
+ children: [
24323
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
24324
+ filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
24325
+ Input,
24326
+ {
24327
+ type: "date",
24328
+ value: selectedValues[filter.field] || "",
24329
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24330
+ clearable: true,
24331
+ onClear: () => handleFilterSelect(filter.field, null),
24332
+ className: "text-sm"
24333
+ }
24334
+ ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
24335
+ /* @__PURE__ */ jsx(
24336
+ Input,
24337
+ {
24338
+ type: "date",
24339
+ value: selectedValues[`${filter.field}_from`] || "",
24340
+ onChange: (e) => handleFilterSelect(
24341
+ `${filter.field}_from`,
24342
+ e.target.value || null
24343
+ ),
24344
+ className: "text-sm min-w-[100px]"
24345
+ }
24228
24346
  ),
24229
- className: "text-sm min-w-[100px]"
24230
- }
24231
- )
24232
- ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
24233
- Input,
24234
- {
24235
- value: selectedValues[filter.field] || "",
24236
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24237
- placeholder: filter.label,
24238
- clearable: true,
24239
- onClear: () => handleFilterSelect(filter.field, null),
24240
- className: "text-sm"
24241
- }
24242
- ) : /* @__PURE__ */ jsx(
24243
- Select,
24244
- {
24245
- value: selectedValues[filter.field] || "all",
24246
- onChange: (e) => handleFilterSelect(filter.field, e.target.value),
24247
- options: [
24248
- { value: "all", label: `All ${filter.label}` },
24249
- ...filter.options?.map((opt) => ({
24250
- value: opt,
24251
- label: opt
24252
- })) || []
24253
- ],
24254
- className: "text-sm"
24255
- }
24256
- ) }, filter.field)),
24257
- activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
24258
- Object.entries(selectedValues).map(([field, value]) => {
24259
- const filterDef = filters.find((f3) => f3.field === field);
24260
- return /* @__PURE__ */ jsxs(
24261
- Badge,
24347
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
24348
+ /* @__PURE__ */ jsx(
24349
+ Input,
24350
+ {
24351
+ type: "date",
24352
+ value: selectedValues[`${filter.field}_to`] || "",
24353
+ onChange: (e) => handleFilterSelect(
24354
+ `${filter.field}_to`,
24355
+ e.target.value || null
24356
+ ),
24357
+ className: "text-sm min-w-[100px]"
24358
+ }
24359
+ )
24360
+ ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
24361
+ Input,
24262
24362
  {
24263
- variant: "primary",
24264
- size: "md",
24265
- className: "cursor-pointer",
24266
- onClick: () => handleFilterSelect(field, null),
24267
- children: [
24268
- filterDef?.label,
24269
- ": ",
24270
- value,
24271
- /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
24272
- ]
24273
- },
24274
- field
24275
- );
24276
- }),
24277
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
24278
- ] })
24279
- ] });
24363
+ value: selectedValues[filter.field] || "",
24364
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
24365
+ placeholder: filter.label,
24366
+ clearable: true,
24367
+ onClear: () => handleFilterSelect(filter.field, null),
24368
+ className: "text-sm"
24369
+ }
24370
+ ) : /* @__PURE__ */ jsx(
24371
+ Select,
24372
+ {
24373
+ value: selectedValues[filter.field] || "all",
24374
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value),
24375
+ options: [
24376
+ { value: "all", label: `All ${filter.label}` },
24377
+ ...filter.options?.map((opt) => ({
24378
+ value: opt,
24379
+ label: opt
24380
+ })) || []
24381
+ ],
24382
+ className: "text-sm"
24383
+ }
24384
+ ) }, filter.field)),
24385
+ activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
24386
+ Object.entries(selectedValues).map(([field, value]) => {
24387
+ const filterDef = filters.find((f3) => f3.field === field);
24388
+ return /* @__PURE__ */ jsxs(
24389
+ Badge,
24390
+ {
24391
+ variant: "primary",
24392
+ size: "md",
24393
+ className: "cursor-pointer",
24394
+ onClick: () => handleFilterSelect(field, null),
24395
+ children: [
24396
+ filterDef?.label,
24397
+ ": ",
24398
+ value,
24399
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
24400
+ ]
24401
+ },
24402
+ field
24403
+ );
24404
+ }),
24405
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
24406
+ ] })
24407
+ ]
24408
+ }
24409
+ );
24280
24410
  }
24281
24411
  return /* @__PURE__ */ jsx(
24282
24412
  "div",
@@ -24285,6 +24415,7 @@ var init_FilterGroup = __esm({
24285
24415
  "p-4 rounded-container",
24286
24416
  "bg-card",
24287
24417
  "border-[length:var(--border-width)] border-border",
24418
+ lookStyles5[look],
24288
24419
  className
24289
24420
  ),
24290
24421
  children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: "flex-wrap", children: [
@@ -28758,7 +28889,7 @@ function composeDisplayValue(value, format, max, prefix, suffix) {
28758
28889
  const withMax = max != null && max > 0 ? `${formatted} / ${max}` : formatted;
28759
28890
  return `${prefix ?? ""}${withMax}${suffix ?? ""}`;
28760
28891
  }
28761
- var variantColor, StatDisplay;
28892
+ var lookStyles6, variantColor, StatDisplay;
28762
28893
  var init_StatDisplay = __esm({
28763
28894
  "components/molecules/StatDisplay.tsx"() {
28764
28895
  "use client";
@@ -28770,6 +28901,13 @@ var init_StatDisplay = __esm({
28770
28901
  init_Sparkline();
28771
28902
  init_Icon();
28772
28903
  init_useEventBus();
28904
+ lookStyles6 = {
28905
+ elevated: "",
28906
+ flat: "shadow-none border-[length:var(--border-width)] border-border",
28907
+ "progress-backed": "",
28908
+ gauge: "",
28909
+ sparkline: ""
28910
+ };
28773
28911
  variantColor = {
28774
28912
  default: "text-foreground",
28775
28913
  primary: "text-primary",
@@ -28797,6 +28935,7 @@ var init_StatDisplay = __esm({
28797
28935
  size = "md",
28798
28936
  variant = "default",
28799
28937
  compact = false,
28938
+ look = "elevated",
28800
28939
  className,
28801
28940
  isLoading = false,
28802
28941
  error = null
@@ -28849,7 +28988,7 @@ var init_StatDisplay = __esm({
28849
28988
  return /* @__PURE__ */ jsx(
28850
28989
  Card,
28851
28990
  {
28852
- className: cn(padSizes[size], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
28991
+ className: cn(padSizes[size], lookStyles6[look], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
28853
28992
  onClick: clickEvent ? handleClick : void 0,
28854
28993
  children: /* @__PURE__ */ jsxs(HStack, { align: "start", justify: "between", children: [
28855
28994
  /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "space-y-1 flex-1", children: [
@@ -34293,7 +34432,8 @@ function DataTable({
34293
34432
  bulkActions,
34294
34433
  headerActions,
34295
34434
  showTotal = true,
34296
- className
34435
+ className,
34436
+ look = "dense"
34297
34437
  }) {
34298
34438
  const [openActionMenu, setOpenActionMenu] = useState(
34299
34439
  null
@@ -34420,6 +34560,7 @@ function DataTable({
34420
34560
  {
34421
34561
  className: cn(
34422
34562
  "bg-card border-2 border-border rounded-none overflow-hidden",
34563
+ lookStyles7[look],
34423
34564
  className
34424
34565
  ),
34425
34566
  children: [
@@ -34646,6 +34787,7 @@ function DataTable({
34646
34787
  }
34647
34788
  );
34648
34789
  }
34790
+ var lookStyles7;
34649
34791
  var init_DataTable = __esm({
34650
34792
  "components/organisms/DataTable.tsx"() {
34651
34793
  "use client";
@@ -34659,6 +34801,13 @@ var init_DataTable = __esm({
34659
34801
  init_useEventBus();
34660
34802
  init_useTranslate();
34661
34803
  init_types3();
34804
+ lookStyles7 = {
34805
+ dense: "",
34806
+ spacious: "[&_tbody_tr_td]:py-5 [&_thead_tr_th]:py-4",
34807
+ striped: "[&_tbody_tr:nth-child(odd)]:bg-muted/30",
34808
+ borderless: "border-0 [&_thead]:border-b-0 [&_tbody_tr]:border-b-0 [&_tbody]:divide-y-0",
34809
+ "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"
34810
+ };
34662
34811
  DataTable.displayName = "DataTable";
34663
34812
  }
34664
34813
  });
@@ -37817,7 +37966,7 @@ var init_GraphCanvas = __esm({
37817
37966
  GraphCanvas.displayName = "GraphCanvas";
37818
37967
  }
37819
37968
  });
37820
- var Header;
37969
+ var lookStyles8, Header;
37821
37970
  var init_Header = __esm({
37822
37971
  "components/organisms/Header.tsx"() {
37823
37972
  "use client";
@@ -37830,6 +37979,13 @@ var init_Header = __esm({
37830
37979
  init_Typography();
37831
37980
  init_cn();
37832
37981
  init_useTranslate();
37982
+ lookStyles8 = {
37983
+ "compact-bar": "",
37984
+ hero: "py-section min-h-[200px] [&_h1]:text-display-1",
37985
+ breadcrumb: "py-2 text-sm [&_h1]:text-base [&_h1]:font-medium",
37986
+ contextual: "py-3 [&_h1]:text-lg",
37987
+ "editorial-banner": "py-12 [&_h1]:text-display-2 [&_h1]:font-display-bold border-b border-border"
37988
+ };
37833
37989
  Header = ({
37834
37990
  logo,
37835
37991
  logoSrc,
@@ -37847,6 +38003,7 @@ var init_Header = __esm({
37847
38003
  actions,
37848
38004
  sticky = true,
37849
38005
  variant = "mobile",
38006
+ look = "compact-bar",
37850
38007
  onLogoClick,
37851
38008
  className
37852
38009
  }) => {
@@ -37862,6 +38019,7 @@ var init_Header = __esm({
37862
38019
  "flex items-center px-4 justify-between bg-card",
37863
38020
  sticky && "sticky top-0 z-50",
37864
38021
  variant === "mobile" && "lg:hidden",
38022
+ lookStyles8[look],
37865
38023
  className
37866
38024
  ),
37867
38025
  children: [
@@ -44557,7 +44715,7 @@ var init_TeamOrganism = __esm({
44557
44715
  TeamOrganism.displayName = "TeamOrganism";
44558
44716
  }
44559
44717
  });
44560
- var STATUS_STYLES3, Timeline;
44718
+ var lookStyles9, STATUS_STYLES3, Timeline;
44561
44719
  var init_Timeline = __esm({
44562
44720
  "components/organisms/Timeline.tsx"() {
44563
44721
  "use client";
@@ -44568,6 +44726,12 @@ var init_Timeline = __esm({
44568
44726
  init_ErrorState();
44569
44727
  init_EmptyState();
44570
44728
  init_useTranslate();
44729
+ lookStyles9 = {
44730
+ "vertical-compact": "gap-1 [&>*]:py-1",
44731
+ "vertical-spacious": "",
44732
+ horizontal: "flex-row [&>*]:flex-row [&>*]:items-center",
44733
+ swimlane: "flex-row gap-6 [&>*]:flex-row [&>*]:items-center"
44734
+ };
44571
44735
  STATUS_STYLES3 = {
44572
44736
  complete: {
44573
44737
  dotColor: "text-success",
@@ -44598,7 +44762,8 @@ var init_Timeline = __esm({
44598
44762
  entity,
44599
44763
  isLoading = false,
44600
44764
  error,
44601
- className
44765
+ className,
44766
+ look = "vertical-spacious"
44602
44767
  }) => {
44603
44768
  const { t } = useTranslate();
44604
44769
  const entityData = Array.isArray(entity) ? entity : [];
@@ -44654,7 +44819,7 @@ var init_Timeline = __esm({
44654
44819
  }
44655
44820
  return /* @__PURE__ */ jsx(Card, { className: cn("p-6", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
44656
44821
  title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
44657
- /* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
44822
+ /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("relative", lookStyles9[look]), children: items.map((item, idx) => {
44658
44823
  const status = item.status || "pending";
44659
44824
  const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
44660
44825
  const ItemIcon = item.icon || style.icon;