@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.
@@ -2283,7 +2283,7 @@ var init_Checkbox = __esm({
2283
2283
  Checkbox.displayName = "Checkbox";
2284
2284
  }
2285
2285
  });
2286
- var variantStyles2, paddingStyles, shadowStyles, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
2286
+ var variantStyles2, paddingStyles, shadowStyles, lookStyles, Card, CardHeader, CardTitle, CardContent, CardBody, CardFooter;
2287
2287
  var init_Card = __esm({
2288
2288
  "components/atoms/Card.tsx"() {
2289
2289
  init_cn();
@@ -2331,6 +2331,15 @@ var init_Card = __esm({
2331
2331
  md: "shadow",
2332
2332
  lg: "shadow-elevation-dialog"
2333
2333
  };
2334
+ lookStyles = {
2335
+ elevated: "",
2336
+ "flat-bordered": "shadow-none border-[length:var(--border-width)] border-border",
2337
+ "borderless-divider": "shadow-none border-0 border-b border-border rounded-none",
2338
+ ticket: "shadow-none border-dashed border-[length:var(--border-width)] border-border",
2339
+ invoice: "shadow-none border-[length:var(--border-width-thick)] border-border rounded-sm",
2340
+ chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
2341
+ "tile-image-first": "p-0 overflow-hidden"
2342
+ };
2334
2343
  Card = React80__default.forwardRef(
2335
2344
  ({
2336
2345
  className,
@@ -2339,6 +2348,7 @@ var init_Card = __esm({
2339
2348
  title,
2340
2349
  subtitle,
2341
2350
  shadow,
2351
+ look = "elevated",
2342
2352
  children,
2343
2353
  ...props
2344
2354
  }, ref) => {
@@ -2351,6 +2361,7 @@ var init_Card = __esm({
2351
2361
  "transition-all duration-[var(--transition-normal)]",
2352
2362
  variantStyles2[variant],
2353
2363
  paddingStyles[padding],
2364
+ lookStyles[look],
2354
2365
  shadow && shadowStyles[shadow],
2355
2366
  className
2356
2367
  ),
@@ -6163,7 +6174,7 @@ var init_EntitySchemaContext = __esm({
6163
6174
  EntitySchemaContext = createContext(null);
6164
6175
  }
6165
6176
  });
6166
- var sizeClasses5, minWidthClasses, Modal;
6177
+ var sizeClasses5, minWidthClasses, lookStyles2, Modal;
6167
6178
  var init_Modal = __esm({
6168
6179
  "components/molecules/Modal.tsx"() {
6169
6180
  "use client";
@@ -6188,6 +6199,12 @@ var init_Modal = __esm({
6188
6199
  xl: "min-w-[700px] max-sm:min-w-0",
6189
6200
  full: "min-w-0"
6190
6201
  };
6202
+ lookStyles2 = {
6203
+ "centered-card": "",
6204
+ "top-sheet": "top-0 rounded-t-none rounded-b-container max-w-full w-full",
6205
+ "side-drawer": "right-0 top-0 bottom-0 h-full rounded-l-container rounded-r-none w-[400px] max-w-full",
6206
+ "full-screen": "inset-0 rounded-none w-full h-full max-w-full"
6207
+ };
6191
6208
  Modal = ({
6192
6209
  isOpen = true,
6193
6210
  onClose = () => {
@@ -6201,7 +6218,8 @@ var init_Modal = __esm({
6201
6218
  closeOnEscape = true,
6202
6219
  className,
6203
6220
  closeEvent,
6204
- swipeDownToClose = true
6221
+ swipeDownToClose = true,
6222
+ look = "centered-card"
6205
6223
  }) => {
6206
6224
  const eventBus = useEventBus();
6207
6225
  const modalRef = useRef(null);
@@ -6286,6 +6304,7 @@ var init_Modal = __esm({
6286
6304
  // Mobile: take the entire screen. Override desktop max-w cap,
6287
6305
  // full height, no rounded corners, no min-width.
6288
6306
  "max-sm:max-w-none max-sm:max-h-none max-sm:w-full max-sm:h-full max-sm:rounded-none",
6307
+ lookStyles2[look],
6289
6308
  className
6290
6309
  ),
6291
6310
  style: dragY > 0 ? {
@@ -14807,7 +14826,7 @@ var init_BookTableOfContents = __esm({
14807
14826
  BookTableOfContents.displayName = "BookTableOfContents";
14808
14827
  }
14809
14828
  });
14810
- var ICON_NAME_ALIASES, EmptyState;
14829
+ var ICON_NAME_ALIASES, lookStyles3, EmptyState;
14811
14830
  var init_EmptyState = __esm({
14812
14831
  "components/molecules/EmptyState.tsx"() {
14813
14832
  "use client";
@@ -14824,6 +14843,12 @@ var init_EmptyState = __esm({
14824
14843
  error: "x-circle",
14825
14844
  warning: "alert-circle"
14826
14845
  };
14846
+ lookStyles3 = {
14847
+ "icon-only": "",
14848
+ illustrated: "[&_svg]:w-32 [&_svg]:h-32",
14849
+ "text-only": "[&_svg]:hidden",
14850
+ mascot: "[&_svg]:w-24 [&_svg]:h-24 [&_svg]:rounded-pill"
14851
+ };
14827
14852
  EmptyState = ({
14828
14853
  icon,
14829
14854
  title,
@@ -14834,7 +14859,8 @@ var init_EmptyState = __esm({
14834
14859
  className,
14835
14860
  destructive,
14836
14861
  variant,
14837
- actionEvent
14862
+ actionEvent,
14863
+ look = "icon-only"
14838
14864
  }) => {
14839
14865
  const eventBus = useEventBus();
14840
14866
  const { t } = useTranslate();
@@ -14854,6 +14880,7 @@ var init_EmptyState = __esm({
14854
14880
  align: "center",
14855
14881
  className: cn(
14856
14882
  "justify-center py-12 text-center",
14883
+ lookStyles3[look],
14857
14884
  className
14858
14885
  ),
14859
14886
  children: [
@@ -16094,7 +16121,7 @@ function useSafeEventBus2() {
16094
16121
  } };
16095
16122
  }
16096
16123
  }
16097
- var log6, ButtonGroup;
16124
+ var log6, lookStyles4, ButtonGroup;
16098
16125
  var init_ButtonGroup = __esm({
16099
16126
  "components/molecules/ButtonGroup.tsx"() {
16100
16127
  "use client";
@@ -16102,6 +16129,13 @@ var init_ButtonGroup = __esm({
16102
16129
  init_atoms();
16103
16130
  init_useEventBus();
16104
16131
  log6 = createLogger("almadar:ui:button-group");
16132
+ lookStyles4 = {
16133
+ "right-aligned-buttons": "",
16134
+ "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
16135
+ "inline-row": "gap-2 inline-flex",
16136
+ "dropdown-menu": "[&>button:not(:first-child)]:hidden",
16137
+ "command-palette-trigger": "[&>button:not(:first-child)]:hidden"
16138
+ };
16105
16139
  ButtonGroup = ({
16106
16140
  children,
16107
16141
  primary,
@@ -16111,7 +16145,8 @@ var init_ButtonGroup = __esm({
16111
16145
  className,
16112
16146
  // Filter-group pattern props (entity and filters are used for schema-driven filtering)
16113
16147
  entity: _entity,
16114
- filters
16148
+ filters,
16149
+ look = "right-aligned-buttons"
16115
16150
  }) => {
16116
16151
  const eventBus = useSafeEventBus2();
16117
16152
  const variantClasses2 = {
@@ -16188,6 +16223,7 @@ var init_ButtonGroup = __esm({
16188
16223
  "inline-flex gap-2",
16189
16224
  variantClasses2[variant],
16190
16225
  orientationClasses[orientation],
16226
+ lookStyles4[look],
16191
16227
  className
16192
16228
  ),
16193
16229
  role: "group",
@@ -18719,7 +18755,7 @@ var init_CastleTemplate = __esm({
18719
18755
  CastleTemplate.displayName = "CastleTemplate";
18720
18756
  }
18721
18757
  });
18722
- var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, Chart;
18758
+ var CHART_COLORS, seriesColor, monthFormatter, formatTimeLabel, BarChart, PieChart, LineChart, ScatterChart, LOOK_FROM_CHART_TYPE, Chart;
18723
18759
  var init_Chart = __esm({
18724
18760
  "components/organisms/Chart.tsx"() {
18725
18761
  "use client";
@@ -18749,7 +18785,7 @@ var init_Chart = __esm({
18749
18785
  if (Number.isNaN(parsed.getTime())) return raw;
18750
18786
  return monthFormatter.format(parsed);
18751
18787
  };
18752
- BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, onPointClick }) => {
18788
+ BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, horizontal = false, onPointClick }) => {
18753
18789
  const categories = useMemo(() => {
18754
18790
  const set = [];
18755
18791
  const seen = /* @__PURE__ */ new Set();
@@ -18787,6 +18823,64 @@ var init_Chart = __esm({
18787
18823
  }
18788
18824
  return m;
18789
18825
  }, [series, stack, columnTotals]);
18826
+ if (horizontal) {
18827
+ return /* @__PURE__ */ jsx(VStack, { gap: "xs", align: "stretch", className: "w-full", style: { minHeight: height }, children: categories.map((label, catIdx) => {
18828
+ const displayLabel = timeAxis ? formatTimeLabel(label) : label;
18829
+ const total = columnTotals?.[catIdx] ?? 1;
18830
+ return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "w-full", children: [
18831
+ /* @__PURE__ */ jsx(
18832
+ Typography,
18833
+ {
18834
+ variant: "caption",
18835
+ color: "secondary",
18836
+ className: "truncate text-right",
18837
+ style: { width: 80, flexShrink: 0 },
18838
+ children: displayLabel
18839
+ }
18840
+ ),
18841
+ /* @__PURE__ */ jsx(
18842
+ HStack,
18843
+ {
18844
+ gap: stack === "none" ? "xs" : "none",
18845
+ align: "center",
18846
+ className: "flex-1 min-w-0",
18847
+ style: { height: 24 },
18848
+ children: series.map((s, sIdx) => {
18849
+ const value = valueAt(s, label);
18850
+ const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
18851
+ const color = seriesColor(s, sIdx);
18852
+ return /* @__PURE__ */ jsx(
18853
+ Box,
18854
+ {
18855
+ className: "h-full rounded-r-sm transition-all duration-500 ease-out min-w-[2px] cursor-pointer hover:opacity-80",
18856
+ style: {
18857
+ width: `${ratio}%`,
18858
+ backgroundColor: color
18859
+ },
18860
+ onClick: () => onPointClick?.(
18861
+ { label, value, color },
18862
+ s.name
18863
+ ),
18864
+ title: `${s.name}: ${value}`
18865
+ },
18866
+ s.name
18867
+ );
18868
+ })
18869
+ }
18870
+ ),
18871
+ showValues && series.length === 1 && /* @__PURE__ */ jsx(
18872
+ Typography,
18873
+ {
18874
+ variant: "caption",
18875
+ color: "secondary",
18876
+ className: "tabular-nums",
18877
+ style: { width: 40, flexShrink: 0 },
18878
+ children: valueAt(series[0], label)
18879
+ }
18880
+ )
18881
+ ] }, label);
18882
+ }) });
18883
+ }
18790
18884
  return /* @__PURE__ */ jsx(
18791
18885
  HStack,
18792
18886
  {
@@ -19214,10 +19308,20 @@ var init_Chart = __esm({
19214
19308
  }
19215
19309
  );
19216
19310
  };
19311
+ LOOK_FROM_CHART_TYPE = {
19312
+ bar: "bar-vertical",
19313
+ line: "line",
19314
+ pie: "pie",
19315
+ area: "area",
19316
+ donut: "donut",
19317
+ scatter: "scatter",
19318
+ histogram: "histogram"
19319
+ };
19217
19320
  Chart = ({
19218
19321
  title,
19219
19322
  subtitle,
19220
- chartType = "bar",
19323
+ chartType,
19324
+ look,
19221
19325
  series,
19222
19326
  data: simpleData,
19223
19327
  scatterData,
@@ -19233,6 +19337,7 @@ var init_Chart = __esm({
19233
19337
  error,
19234
19338
  className
19235
19339
  }) => {
19340
+ const resolvedLook = look ?? (chartType ? LOOK_FROM_CHART_TYPE[chartType] : "bar-vertical");
19236
19341
  const eventBus = useEventBus();
19237
19342
  const { t } = useTranslate();
19238
19343
  const handleAction = useCallback(
@@ -19261,7 +19366,7 @@ var init_Chart = __esm({
19261
19366
  return [];
19262
19367
  }, [simpleData, series]);
19263
19368
  const firstSeriesData = normalizedSeries[0]?.data ?? [];
19264
- const hasContent = chartType === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
19369
+ const hasContent = resolvedLook === "scatter" ? (scatterData?.length ?? 0) > 0 : normalizedSeries.some((s) => s.data.length > 0);
19265
19370
  if (isLoading) {
19266
19371
  return /* @__PURE__ */ jsx(LoadingState, { message: "Loading chart...", className });
19267
19372
  }
@@ -19296,7 +19401,7 @@ var init_Chart = __esm({
19296
19401
  )) })
19297
19402
  ] }),
19298
19403
  /* @__PURE__ */ jsxs(Box, { className: "w-full", children: [
19299
- chartType === "bar" && /* @__PURE__ */ jsx(
19404
+ resolvedLook === "bar-vertical" && /* @__PURE__ */ jsx(
19300
19405
  BarChart,
19301
19406
  {
19302
19407
  series: normalizedSeries,
@@ -19307,7 +19412,19 @@ var init_Chart = __esm({
19307
19412
  onPointClick: handlePointClick
19308
19413
  }
19309
19414
  ),
19310
- chartType === "histogram" && /* @__PURE__ */ jsx(
19415
+ resolvedLook === "bar-horizontal" && /* @__PURE__ */ jsx(
19416
+ BarChart,
19417
+ {
19418
+ series: normalizedSeries,
19419
+ height,
19420
+ showValues,
19421
+ stack,
19422
+ timeAxis,
19423
+ horizontal: true,
19424
+ onPointClick: handlePointClick
19425
+ }
19426
+ ),
19427
+ resolvedLook === "histogram" && /* @__PURE__ */ jsx(
19311
19428
  BarChart,
19312
19429
  {
19313
19430
  series: normalizedSeries,
@@ -19319,7 +19436,7 @@ var init_Chart = __esm({
19319
19436
  onPointClick: handlePointClick
19320
19437
  }
19321
19438
  ),
19322
- chartType === "line" && /* @__PURE__ */ jsx(
19439
+ resolvedLook === "line" && /* @__PURE__ */ jsx(
19323
19440
  LineChart,
19324
19441
  {
19325
19442
  series: normalizedSeries,
@@ -19329,7 +19446,7 @@ var init_Chart = __esm({
19329
19446
  onPointClick: handlePointClick
19330
19447
  }
19331
19448
  ),
19332
- chartType === "area" && /* @__PURE__ */ jsx(
19449
+ resolvedLook === "area" && /* @__PURE__ */ jsx(
19333
19450
  LineChart,
19334
19451
  {
19335
19452
  series: normalizedSeries,
@@ -19340,7 +19457,7 @@ var init_Chart = __esm({
19340
19457
  onPointClick: handlePointClick
19341
19458
  }
19342
19459
  ),
19343
- chartType === "pie" && /* @__PURE__ */ jsx(
19460
+ resolvedLook === "pie" && /* @__PURE__ */ jsx(
19344
19461
  PieChart,
19345
19462
  {
19346
19463
  data: firstSeriesData,
@@ -19349,7 +19466,7 @@ var init_Chart = __esm({
19349
19466
  onPointClick: handlePointClick
19350
19467
  }
19351
19468
  ),
19352
- chartType === "donut" && /* @__PURE__ */ jsx(
19469
+ resolvedLook === "donut" && /* @__PURE__ */ jsx(
19353
19470
  PieChart,
19354
19471
  {
19355
19472
  data: firstSeriesData,
@@ -19359,7 +19476,7 @@ var init_Chart = __esm({
19359
19476
  onPointClick: handlePointClick
19360
19477
  }
19361
19478
  ),
19362
- chartType === "scatter" && /* @__PURE__ */ jsx(
19479
+ resolvedLook === "scatter" && /* @__PURE__ */ jsx(
19363
19480
  ScatterChart,
19364
19481
  {
19365
19482
  data: scatterData ?? [],
@@ -23021,7 +23138,7 @@ var init_useQuerySingleton = __esm({
23021
23138
  queryStores = /* @__PURE__ */ new Map();
23022
23139
  }
23023
23140
  });
23024
- var resolveFilterType, FilterGroup;
23141
+ var resolveFilterType, lookStyles5, FilterGroup;
23025
23142
  var init_FilterGroup = __esm({
23026
23143
  "components/molecules/FilterGroup.tsx"() {
23027
23144
  "use client";
@@ -23035,6 +23152,13 @@ var init_FilterGroup = __esm({
23035
23152
  init_useEventBus();
23036
23153
  init_useQuerySingleton();
23037
23154
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
23155
+ lookStyles5 = {
23156
+ toolbar: "",
23157
+ chips: "gap-2 [&>*]:rounded-pill [&>*]:px-3 [&>*]:py-1",
23158
+ pills: "gap-2 [&>*]:rounded-pill",
23159
+ "popover-trigger": "[&>*:not(:first-child)]:hidden",
23160
+ "inline-column-header": "hidden"
23161
+ };
23038
23162
  FilterGroup = ({
23039
23163
  entity,
23040
23164
  filters,
@@ -23044,7 +23168,8 @@ var init_FilterGroup = __esm({
23044
23168
  variant = "default",
23045
23169
  showIcon = true,
23046
23170
  query,
23047
- isLoading
23171
+ isLoading,
23172
+ look = "toolbar"
23048
23173
  }) => {
23049
23174
  const eventBus = useEventBus();
23050
23175
  const queryState = useQuerySingleton(query);
@@ -23099,63 +23224,71 @@ var init_FilterGroup = __esm({
23099
23224
  }, [onClearAll, queryState, eventBus, entity, query]);
23100
23225
  const activeFilterCount = Object.keys(selectedValues).length;
23101
23226
  if (variant === "pills") {
23102
- return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
23103
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23104
- filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23105
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
23106
- filter.label,
23107
- ":"
23108
- ] }),
23109
- /* @__PURE__ */ jsxs(
23110
- HStack,
23111
- {
23112
- gap: "none",
23113
- className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
23114
- children: [
23115
- /* @__PURE__ */ jsx(
23116
- "button",
23117
- {
23118
- type: "button",
23119
- onClick: () => handleFilterSelect(filter.field, null),
23120
- className: cn(
23121
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
23122
- !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
23123
- ),
23124
- children: "All"
23125
- }
23126
- ),
23127
- filter.options?.map((option) => /* @__PURE__ */ jsx(
23128
- "button",
23129
- {
23130
- type: "button",
23131
- onClick: () => handleFilterSelect(filter.field, option),
23132
- className: cn(
23133
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
23134
- "border-l-[length:var(--border-width)] border-border",
23135
- selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
23227
+ return /* @__PURE__ */ jsxs(
23228
+ HStack,
23229
+ {
23230
+ gap: "md",
23231
+ align: "center",
23232
+ className: cn("flex-wrap", lookStyles5[look], className),
23233
+ children: [
23234
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23235
+ filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23236
+ /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
23237
+ filter.label,
23238
+ ":"
23239
+ ] }),
23240
+ /* @__PURE__ */ jsxs(
23241
+ HStack,
23242
+ {
23243
+ gap: "none",
23244
+ className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
23245
+ children: [
23246
+ /* @__PURE__ */ jsx(
23247
+ "button",
23248
+ {
23249
+ type: "button",
23250
+ onClick: () => handleFilterSelect(filter.field, null),
23251
+ className: cn(
23252
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
23253
+ !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
23254
+ ),
23255
+ children: "All"
23256
+ }
23136
23257
  ),
23137
- children: option
23138
- },
23139
- option
23140
- ))
23141
- ]
23142
- }
23143
- )
23144
- ] }, filter.field)),
23145
- activeFilterCount > 0 && /* @__PURE__ */ jsx(
23146
- Button,
23147
- {
23148
- variant: "ghost",
23149
- size: "sm",
23150
- onClick: handleClearAll,
23151
- leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
23152
- children: "Clear"
23153
- }
23154
- )
23155
- ] });
23258
+ filter.options?.map((option) => /* @__PURE__ */ jsx(
23259
+ "button",
23260
+ {
23261
+ type: "button",
23262
+ onClick: () => handleFilterSelect(filter.field, option),
23263
+ className: cn(
23264
+ "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
23265
+ "border-l-[length:var(--border-width)] border-border",
23266
+ selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
23267
+ ),
23268
+ children: option
23269
+ },
23270
+ option
23271
+ ))
23272
+ ]
23273
+ }
23274
+ )
23275
+ ] }, filter.field)),
23276
+ activeFilterCount > 0 && /* @__PURE__ */ jsx(
23277
+ Button,
23278
+ {
23279
+ variant: "ghost",
23280
+ size: "sm",
23281
+ onClick: handleClearAll,
23282
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
23283
+ children: "Clear"
23284
+ }
23285
+ )
23286
+ ]
23287
+ }
23288
+ );
23156
23289
  }
23157
23290
  if (variant === "vertical") {
23158
- return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
23291
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", lookStyles5[look], className), children: [
23159
23292
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
23160
23293
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
23161
23294
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: "Filters" })
@@ -23238,92 +23371,100 @@ var init_FilterGroup = __esm({
23238
23371
  ] });
23239
23372
  }
23240
23373
  if (variant === "compact") {
23241
- return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
23242
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23243
- filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
23244
- Input,
23245
- {
23246
- type: "date",
23247
- value: selectedValues[filter.field] || "",
23248
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
23249
- clearable: true,
23250
- onClear: () => handleFilterSelect(filter.field, null),
23251
- className: "text-sm"
23252
- }
23253
- ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23254
- /* @__PURE__ */ jsx(
23255
- Input,
23256
- {
23257
- type: "date",
23258
- value: selectedValues[`${filter.field}_from`] || "",
23259
- onChange: (e) => handleFilterSelect(
23260
- `${filter.field}_from`,
23261
- e.target.value || null
23262
- ),
23263
- className: "text-sm min-w-[100px]"
23264
- }
23265
- ),
23266
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
23267
- /* @__PURE__ */ jsx(
23268
- Input,
23269
- {
23270
- type: "date",
23271
- value: selectedValues[`${filter.field}_to`] || "",
23272
- onChange: (e) => handleFilterSelect(
23273
- `${filter.field}_to`,
23274
- e.target.value || null
23374
+ return /* @__PURE__ */ jsxs(
23375
+ HStack,
23376
+ {
23377
+ gap: "sm",
23378
+ align: "center",
23379
+ className: cn("flex-wrap", lookStyles5[look], className),
23380
+ children: [
23381
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23382
+ filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
23383
+ Input,
23384
+ {
23385
+ type: "date",
23386
+ value: selectedValues[filter.field] || "",
23387
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
23388
+ clearable: true,
23389
+ onClear: () => handleFilterSelect(filter.field, null),
23390
+ className: "text-sm"
23391
+ }
23392
+ ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23393
+ /* @__PURE__ */ jsx(
23394
+ Input,
23395
+ {
23396
+ type: "date",
23397
+ value: selectedValues[`${filter.field}_from`] || "",
23398
+ onChange: (e) => handleFilterSelect(
23399
+ `${filter.field}_from`,
23400
+ e.target.value || null
23401
+ ),
23402
+ className: "text-sm min-w-[100px]"
23403
+ }
23275
23404
  ),
23276
- className: "text-sm min-w-[100px]"
23277
- }
23278
- )
23279
- ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
23280
- Input,
23281
- {
23282
- value: selectedValues[filter.field] || "",
23283
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
23284
- placeholder: filter.label,
23285
- clearable: true,
23286
- onClear: () => handleFilterSelect(filter.field, null),
23287
- className: "text-sm"
23288
- }
23289
- ) : /* @__PURE__ */ jsx(
23290
- Select,
23291
- {
23292
- value: selectedValues[filter.field] || "all",
23293
- onChange: (e) => handleFilterSelect(filter.field, e.target.value),
23294
- options: [
23295
- { value: "all", label: `All ${filter.label}` },
23296
- ...filter.options?.map((opt) => ({
23297
- value: opt,
23298
- label: opt
23299
- })) || []
23300
- ],
23301
- className: "text-sm"
23302
- }
23303
- ) }, filter.field)),
23304
- activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
23305
- Object.entries(selectedValues).map(([field, value]) => {
23306
- const filterDef = filters.find((f3) => f3.field === field);
23307
- return /* @__PURE__ */ jsxs(
23308
- Badge,
23405
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
23406
+ /* @__PURE__ */ jsx(
23407
+ Input,
23408
+ {
23409
+ type: "date",
23410
+ value: selectedValues[`${filter.field}_to`] || "",
23411
+ onChange: (e) => handleFilterSelect(
23412
+ `${filter.field}_to`,
23413
+ e.target.value || null
23414
+ ),
23415
+ className: "text-sm min-w-[100px]"
23416
+ }
23417
+ )
23418
+ ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
23419
+ Input,
23309
23420
  {
23310
- variant: "primary",
23311
- size: "md",
23312
- className: "cursor-pointer",
23313
- onClick: () => handleFilterSelect(field, null),
23314
- children: [
23315
- filterDef?.label,
23316
- ": ",
23317
- value,
23318
- /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
23319
- ]
23320
- },
23321
- field
23322
- );
23323
- }),
23324
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
23325
- ] })
23326
- ] });
23421
+ value: selectedValues[filter.field] || "",
23422
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
23423
+ placeholder: filter.label,
23424
+ clearable: true,
23425
+ onClear: () => handleFilterSelect(filter.field, null),
23426
+ className: "text-sm"
23427
+ }
23428
+ ) : /* @__PURE__ */ jsx(
23429
+ Select,
23430
+ {
23431
+ value: selectedValues[filter.field] || "all",
23432
+ onChange: (e) => handleFilterSelect(filter.field, e.target.value),
23433
+ options: [
23434
+ { value: "all", label: `All ${filter.label}` },
23435
+ ...filter.options?.map((opt) => ({
23436
+ value: opt,
23437
+ label: opt
23438
+ })) || []
23439
+ ],
23440
+ className: "text-sm"
23441
+ }
23442
+ ) }, filter.field)),
23443
+ activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
23444
+ Object.entries(selectedValues).map(([field, value]) => {
23445
+ const filterDef = filters.find((f3) => f3.field === field);
23446
+ return /* @__PURE__ */ jsxs(
23447
+ Badge,
23448
+ {
23449
+ variant: "primary",
23450
+ size: "md",
23451
+ className: "cursor-pointer",
23452
+ onClick: () => handleFilterSelect(field, null),
23453
+ children: [
23454
+ filterDef?.label,
23455
+ ": ",
23456
+ value,
23457
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
23458
+ ]
23459
+ },
23460
+ field
23461
+ );
23462
+ }),
23463
+ /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
23464
+ ] })
23465
+ ]
23466
+ }
23467
+ );
23327
23468
  }
23328
23469
  return /* @__PURE__ */ jsx(
23329
23470
  "div",
@@ -23332,6 +23473,7 @@ var init_FilterGroup = __esm({
23332
23473
  "p-4 rounded-container",
23333
23474
  "bg-card",
23334
23475
  "border-[length:var(--border-width)] border-border",
23476
+ lookStyles5[look],
23335
23477
  className
23336
23478
  ),
23337
23479
  children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: "flex-wrap", children: [
@@ -28089,7 +28231,7 @@ function composeDisplayValue(value, format, max, prefix, suffix) {
28089
28231
  const withMax = max != null && max > 0 ? `${formatted} / ${max}` : formatted;
28090
28232
  return `${prefix ?? ""}${withMax}${suffix ?? ""}`;
28091
28233
  }
28092
- var variantColor, StatDisplay;
28234
+ var lookStyles6, variantColor, StatDisplay;
28093
28235
  var init_StatDisplay = __esm({
28094
28236
  "components/molecules/StatDisplay.tsx"() {
28095
28237
  "use client";
@@ -28101,6 +28243,13 @@ var init_StatDisplay = __esm({
28101
28243
  init_Sparkline();
28102
28244
  init_Icon();
28103
28245
  init_useEventBus();
28246
+ lookStyles6 = {
28247
+ elevated: "",
28248
+ flat: "shadow-none border-[length:var(--border-width)] border-border",
28249
+ "progress-backed": "",
28250
+ gauge: "",
28251
+ sparkline: ""
28252
+ };
28104
28253
  variantColor = {
28105
28254
  default: "text-foreground",
28106
28255
  primary: "text-primary",
@@ -28128,6 +28277,7 @@ var init_StatDisplay = __esm({
28128
28277
  size = "md",
28129
28278
  variant = "default",
28130
28279
  compact = false,
28280
+ look = "elevated",
28131
28281
  className,
28132
28282
  isLoading = false,
28133
28283
  error = null
@@ -28180,7 +28330,7 @@ var init_StatDisplay = __esm({
28180
28330
  return /* @__PURE__ */ jsx(
28181
28331
  Card,
28182
28332
  {
28183
- className: cn(padSizes[size], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
28333
+ className: cn(padSizes[size], lookStyles6[look], clickEvent && "cursor-pointer hover:shadow-md transition-shadow", className),
28184
28334
  onClick: clickEvent ? handleClick : void 0,
28185
28335
  children: /* @__PURE__ */ jsxs(HStack, { align: "start", justify: "between", children: [
28186
28336
  /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "space-y-1 flex-1", children: [
@@ -33863,7 +34013,8 @@ function DataTable({
33863
34013
  bulkActions,
33864
34014
  headerActions,
33865
34015
  showTotal = true,
33866
- className
34016
+ className,
34017
+ look = "dense"
33867
34018
  }) {
33868
34019
  const [openActionMenu, setOpenActionMenu] = useState(
33869
34020
  null
@@ -33990,6 +34141,7 @@ function DataTable({
33990
34141
  {
33991
34142
  className: cn(
33992
34143
  "bg-card border-2 border-border rounded-none overflow-hidden",
34144
+ lookStyles7[look],
33993
34145
  className
33994
34146
  ),
33995
34147
  children: [
@@ -34216,6 +34368,7 @@ function DataTable({
34216
34368
  }
34217
34369
  );
34218
34370
  }
34371
+ var lookStyles7;
34219
34372
  var init_DataTable = __esm({
34220
34373
  "components/organisms/DataTable.tsx"() {
34221
34374
  "use client";
@@ -34229,6 +34382,13 @@ var init_DataTable = __esm({
34229
34382
  init_useEventBus();
34230
34383
  init_useTranslate();
34231
34384
  init_types3();
34385
+ lookStyles7 = {
34386
+ dense: "",
34387
+ spacious: "[&_tbody_tr_td]:py-5 [&_thead_tr_th]:py-4",
34388
+ striped: "[&_tbody_tr:nth-child(odd)]:bg-muted/30",
34389
+ borderless: "border-0 [&_thead]:border-b-0 [&_tbody_tr]:border-b-0 [&_tbody]:divide-y-0",
34390
+ "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"
34391
+ };
34232
34392
  DataTable.displayName = "DataTable";
34233
34393
  }
34234
34394
  });
@@ -37482,7 +37642,7 @@ var init_GraphCanvas = __esm({
37482
37642
  GraphCanvas.displayName = "GraphCanvas";
37483
37643
  }
37484
37644
  });
37485
- var Header;
37645
+ var lookStyles8, Header;
37486
37646
  var init_Header = __esm({
37487
37647
  "components/organisms/Header.tsx"() {
37488
37648
  "use client";
@@ -37495,6 +37655,13 @@ var init_Header = __esm({
37495
37655
  init_Typography();
37496
37656
  init_cn();
37497
37657
  init_useTranslate();
37658
+ lookStyles8 = {
37659
+ "compact-bar": "",
37660
+ hero: "py-section min-h-[200px] [&_h1]:text-display-1",
37661
+ breadcrumb: "py-2 text-sm [&_h1]:text-base [&_h1]:font-medium",
37662
+ contextual: "py-3 [&_h1]:text-lg",
37663
+ "editorial-banner": "py-12 [&_h1]:text-display-2 [&_h1]:font-display-bold border-b border-border"
37664
+ };
37498
37665
  Header = ({
37499
37666
  logo,
37500
37667
  logoSrc,
@@ -37512,6 +37679,7 @@ var init_Header = __esm({
37512
37679
  actions,
37513
37680
  sticky = true,
37514
37681
  variant = "mobile",
37682
+ look = "compact-bar",
37515
37683
  onLogoClick,
37516
37684
  className
37517
37685
  }) => {
@@ -37527,6 +37695,7 @@ var init_Header = __esm({
37527
37695
  "flex items-center px-4 justify-between bg-card",
37528
37696
  sticky && "sticky top-0 z-50",
37529
37697
  variant === "mobile" && "lg:hidden",
37698
+ lookStyles8[look],
37530
37699
  className
37531
37700
  ),
37532
37701
  children: [
@@ -44523,7 +44692,7 @@ var init_TeamOrganism = __esm({
44523
44692
  TeamOrganism.displayName = "TeamOrganism";
44524
44693
  }
44525
44694
  });
44526
- var STATUS_STYLES3, Timeline;
44695
+ var lookStyles9, STATUS_STYLES3, Timeline;
44527
44696
  var init_Timeline = __esm({
44528
44697
  "components/organisms/Timeline.tsx"() {
44529
44698
  "use client";
@@ -44534,6 +44703,12 @@ var init_Timeline = __esm({
44534
44703
  init_ErrorState();
44535
44704
  init_EmptyState();
44536
44705
  init_useTranslate();
44706
+ lookStyles9 = {
44707
+ "vertical-compact": "gap-1 [&>*]:py-1",
44708
+ "vertical-spacious": "",
44709
+ horizontal: "flex-row [&>*]:flex-row [&>*]:items-center",
44710
+ swimlane: "flex-row gap-6 [&>*]:flex-row [&>*]:items-center"
44711
+ };
44537
44712
  STATUS_STYLES3 = {
44538
44713
  complete: {
44539
44714
  dotColor: "text-success",
@@ -44564,7 +44739,8 @@ var init_Timeline = __esm({
44564
44739
  entity,
44565
44740
  isLoading = false,
44566
44741
  error,
44567
- className
44742
+ className,
44743
+ look = "vertical-spacious"
44568
44744
  }) => {
44569
44745
  const { t } = useTranslate();
44570
44746
  const entityData = Array.isArray(entity) ? entity : [];
@@ -44620,7 +44796,7 @@ var init_Timeline = __esm({
44620
44796
  }
44621
44797
  return /* @__PURE__ */ jsx(Card, { className: cn("p-6", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
44622
44798
  title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
44623
- /* @__PURE__ */ jsx(VStack, { gap: "none", className: "relative", children: items.map((item, idx) => {
44799
+ /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("relative", lookStyles9[look]), children: items.map((item, idx) => {
44624
44800
  const status = item.status || "pending";
44625
44801
  const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
44626
44802
  const ItemIcon = item.icon || style.icon;