@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.
@@ -6174,7 +6174,7 @@ var init_EntitySchemaContext = __esm({
6174
6174
  EntitySchemaContext = createContext(null);
6175
6175
  }
6176
6176
  });
6177
- var sizeClasses5, minWidthClasses, Modal;
6177
+ var sizeClasses5, minWidthClasses, lookStyles2, Modal;
6178
6178
  var init_Modal = __esm({
6179
6179
  "components/molecules/Modal.tsx"() {
6180
6180
  "use client";
@@ -6199,6 +6199,12 @@ var init_Modal = __esm({
6199
6199
  xl: "min-w-[700px] max-sm:min-w-0",
6200
6200
  full: "min-w-0"
6201
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
+ };
6202
6208
  Modal = ({
6203
6209
  isOpen = true,
6204
6210
  onClose = () => {
@@ -6212,7 +6218,8 @@ var init_Modal = __esm({
6212
6218
  closeOnEscape = true,
6213
6219
  className,
6214
6220
  closeEvent,
6215
- swipeDownToClose = true
6221
+ swipeDownToClose = true,
6222
+ look = "centered-card"
6216
6223
  }) => {
6217
6224
  const eventBus = useEventBus();
6218
6225
  const modalRef = useRef(null);
@@ -6297,6 +6304,7 @@ var init_Modal = __esm({
6297
6304
  // Mobile: take the entire screen. Override desktop max-w cap,
6298
6305
  // full height, no rounded corners, no min-width.
6299
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],
6300
6308
  className
6301
6309
  ),
6302
6310
  style: dragY > 0 ? {
@@ -14818,7 +14826,7 @@ var init_BookTableOfContents = __esm({
14818
14826
  BookTableOfContents.displayName = "BookTableOfContents";
14819
14827
  }
14820
14828
  });
14821
- var ICON_NAME_ALIASES, EmptyState;
14829
+ var ICON_NAME_ALIASES, lookStyles3, EmptyState;
14822
14830
  var init_EmptyState = __esm({
14823
14831
  "components/molecules/EmptyState.tsx"() {
14824
14832
  "use client";
@@ -14835,6 +14843,12 @@ var init_EmptyState = __esm({
14835
14843
  error: "x-circle",
14836
14844
  warning: "alert-circle"
14837
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
+ };
14838
14852
  EmptyState = ({
14839
14853
  icon,
14840
14854
  title,
@@ -14845,7 +14859,8 @@ var init_EmptyState = __esm({
14845
14859
  className,
14846
14860
  destructive,
14847
14861
  variant,
14848
- actionEvent
14862
+ actionEvent,
14863
+ look = "icon-only"
14849
14864
  }) => {
14850
14865
  const eventBus = useEventBus();
14851
14866
  const { t } = useTranslate();
@@ -14865,6 +14880,7 @@ var init_EmptyState = __esm({
14865
14880
  align: "center",
14866
14881
  className: cn(
14867
14882
  "justify-center py-12 text-center",
14883
+ lookStyles3[look],
14868
14884
  className
14869
14885
  ),
14870
14886
  children: [
@@ -16105,7 +16121,7 @@ function useSafeEventBus2() {
16105
16121
  } };
16106
16122
  }
16107
16123
  }
16108
- var log6, ButtonGroup;
16124
+ var log6, lookStyles4, ButtonGroup;
16109
16125
  var init_ButtonGroup = __esm({
16110
16126
  "components/molecules/ButtonGroup.tsx"() {
16111
16127
  "use client";
@@ -16113,6 +16129,13 @@ var init_ButtonGroup = __esm({
16113
16129
  init_atoms();
16114
16130
  init_useEventBus();
16115
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
+ };
16116
16139
  ButtonGroup = ({
16117
16140
  children,
16118
16141
  primary,
@@ -16122,7 +16145,8 @@ var init_ButtonGroup = __esm({
16122
16145
  className,
16123
16146
  // Filter-group pattern props (entity and filters are used for schema-driven filtering)
16124
16147
  entity: _entity,
16125
- filters
16148
+ filters,
16149
+ look = "right-aligned-buttons"
16126
16150
  }) => {
16127
16151
  const eventBus = useSafeEventBus2();
16128
16152
  const variantClasses2 = {
@@ -16199,6 +16223,7 @@ var init_ButtonGroup = __esm({
16199
16223
  "inline-flex gap-2",
16200
16224
  variantClasses2[variant],
16201
16225
  orientationClasses[orientation],
16226
+ lookStyles4[look],
16202
16227
  className
16203
16228
  ),
16204
16229
  role: "group",
@@ -18730,7 +18755,7 @@ var init_CastleTemplate = __esm({
18730
18755
  CastleTemplate.displayName = "CastleTemplate";
18731
18756
  }
18732
18757
  });
18733
- 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;
18734
18759
  var init_Chart = __esm({
18735
18760
  "components/organisms/Chart.tsx"() {
18736
18761
  "use client";
@@ -18760,7 +18785,7 @@ var init_Chart = __esm({
18760
18785
  if (Number.isNaN(parsed.getTime())) return raw;
18761
18786
  return monthFormatter.format(parsed);
18762
18787
  };
18763
- BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, onPointClick }) => {
18788
+ BarChart = ({ series, height, showValues, stack, timeAxis, histogram = false, horizontal = false, onPointClick }) => {
18764
18789
  const categories = useMemo(() => {
18765
18790
  const set = [];
18766
18791
  const seen = /* @__PURE__ */ new Set();
@@ -18798,6 +18823,64 @@ var init_Chart = __esm({
18798
18823
  }
18799
18824
  return m;
18800
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
+ }
18801
18884
  return /* @__PURE__ */ jsx(
18802
18885
  HStack,
18803
18886
  {
@@ -19225,10 +19308,20 @@ var init_Chart = __esm({
19225
19308
  }
19226
19309
  );
19227
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
+ };
19228
19320
  Chart = ({
19229
19321
  title,
19230
19322
  subtitle,
19231
- chartType = "bar",
19323
+ chartType,
19324
+ look,
19232
19325
  series,
19233
19326
  data: simpleData,
19234
19327
  scatterData,
@@ -19244,6 +19337,7 @@ var init_Chart = __esm({
19244
19337
  error,
19245
19338
  className
19246
19339
  }) => {
19340
+ const resolvedLook = look ?? (chartType ? LOOK_FROM_CHART_TYPE[chartType] : "bar-vertical");
19247
19341
  const eventBus = useEventBus();
19248
19342
  const { t } = useTranslate();
19249
19343
  const handleAction = useCallback(
@@ -19272,7 +19366,7 @@ var init_Chart = __esm({
19272
19366
  return [];
19273
19367
  }, [simpleData, series]);
19274
19368
  const firstSeriesData = normalizedSeries[0]?.data ?? [];
19275
- 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);
19276
19370
  if (isLoading) {
19277
19371
  return /* @__PURE__ */ jsx(LoadingState, { message: "Loading chart...", className });
19278
19372
  }
@@ -19307,7 +19401,7 @@ var init_Chart = __esm({
19307
19401
  )) })
19308
19402
  ] }),
19309
19403
  /* @__PURE__ */ jsxs(Box, { className: "w-full", children: [
19310
- chartType === "bar" && /* @__PURE__ */ jsx(
19404
+ resolvedLook === "bar-vertical" && /* @__PURE__ */ jsx(
19311
19405
  BarChart,
19312
19406
  {
19313
19407
  series: normalizedSeries,
@@ -19318,7 +19412,19 @@ var init_Chart = __esm({
19318
19412
  onPointClick: handlePointClick
19319
19413
  }
19320
19414
  ),
19321
- 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(
19322
19428
  BarChart,
19323
19429
  {
19324
19430
  series: normalizedSeries,
@@ -19330,7 +19436,7 @@ var init_Chart = __esm({
19330
19436
  onPointClick: handlePointClick
19331
19437
  }
19332
19438
  ),
19333
- chartType === "line" && /* @__PURE__ */ jsx(
19439
+ resolvedLook === "line" && /* @__PURE__ */ jsx(
19334
19440
  LineChart,
19335
19441
  {
19336
19442
  series: normalizedSeries,
@@ -19340,7 +19446,7 @@ var init_Chart = __esm({
19340
19446
  onPointClick: handlePointClick
19341
19447
  }
19342
19448
  ),
19343
- chartType === "area" && /* @__PURE__ */ jsx(
19449
+ resolvedLook === "area" && /* @__PURE__ */ jsx(
19344
19450
  LineChart,
19345
19451
  {
19346
19452
  series: normalizedSeries,
@@ -19351,7 +19457,7 @@ var init_Chart = __esm({
19351
19457
  onPointClick: handlePointClick
19352
19458
  }
19353
19459
  ),
19354
- chartType === "pie" && /* @__PURE__ */ jsx(
19460
+ resolvedLook === "pie" && /* @__PURE__ */ jsx(
19355
19461
  PieChart,
19356
19462
  {
19357
19463
  data: firstSeriesData,
@@ -19360,7 +19466,7 @@ var init_Chart = __esm({
19360
19466
  onPointClick: handlePointClick
19361
19467
  }
19362
19468
  ),
19363
- chartType === "donut" && /* @__PURE__ */ jsx(
19469
+ resolvedLook === "donut" && /* @__PURE__ */ jsx(
19364
19470
  PieChart,
19365
19471
  {
19366
19472
  data: firstSeriesData,
@@ -19370,7 +19476,7 @@ var init_Chart = __esm({
19370
19476
  onPointClick: handlePointClick
19371
19477
  }
19372
19478
  ),
19373
- chartType === "scatter" && /* @__PURE__ */ jsx(
19479
+ resolvedLook === "scatter" && /* @__PURE__ */ jsx(
19374
19480
  ScatterChart,
19375
19481
  {
19376
19482
  data: scatterData ?? [],
@@ -23032,7 +23138,7 @@ var init_useQuerySingleton = __esm({
23032
23138
  queryStores = /* @__PURE__ */ new Map();
23033
23139
  }
23034
23140
  });
23035
- var resolveFilterType, FilterGroup;
23141
+ var resolveFilterType, lookStyles5, FilterGroup;
23036
23142
  var init_FilterGroup = __esm({
23037
23143
  "components/molecules/FilterGroup.tsx"() {
23038
23144
  "use client";
@@ -23046,6 +23152,13 @@ var init_FilterGroup = __esm({
23046
23152
  init_useEventBus();
23047
23153
  init_useQuerySingleton();
23048
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
+ };
23049
23162
  FilterGroup = ({
23050
23163
  entity,
23051
23164
  filters,
@@ -23055,7 +23168,8 @@ var init_FilterGroup = __esm({
23055
23168
  variant = "default",
23056
23169
  showIcon = true,
23057
23170
  query,
23058
- isLoading
23171
+ isLoading,
23172
+ look = "toolbar"
23059
23173
  }) => {
23060
23174
  const eventBus = useEventBus();
23061
23175
  const queryState = useQuerySingleton(query);
@@ -23110,63 +23224,71 @@ var init_FilterGroup = __esm({
23110
23224
  }, [onClearAll, queryState, eventBus, entity, query]);
23111
23225
  const activeFilterCount = Object.keys(selectedValues).length;
23112
23226
  if (variant === "pills") {
23113
- return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
23114
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23115
- filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23116
- /* @__PURE__ */ jsxs("span", { className: "text-sm font-medium text-muted-foreground", children: [
23117
- filter.label,
23118
- ":"
23119
- ] }),
23120
- /* @__PURE__ */ jsxs(
23121
- HStack,
23122
- {
23123
- gap: "none",
23124
- className: "rounded-sm overflow-hidden border-[length:var(--border-width)] border-border",
23125
- children: [
23126
- /* @__PURE__ */ jsx(
23127
- "button",
23128
- {
23129
- type: "button",
23130
- onClick: () => handleFilterSelect(filter.field, null),
23131
- className: cn(
23132
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
23133
- !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
23134
- ),
23135
- children: "All"
23136
- }
23137
- ),
23138
- filter.options?.map((option) => /* @__PURE__ */ jsx(
23139
- "button",
23140
- {
23141
- type: "button",
23142
- onClick: () => handleFilterSelect(filter.field, option),
23143
- className: cn(
23144
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
23145
- "border-l-[length:var(--border-width)] border-border",
23146
- 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
+ }
23147
23257
  ),
23148
- children: option
23149
- },
23150
- option
23151
- ))
23152
- ]
23153
- }
23154
- )
23155
- ] }, filter.field)),
23156
- activeFilterCount > 0 && /* @__PURE__ */ jsx(
23157
- Button,
23158
- {
23159
- variant: "ghost",
23160
- size: "sm",
23161
- onClick: handleClearAll,
23162
- leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
23163
- children: "Clear"
23164
- }
23165
- )
23166
- ] });
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
+ );
23167
23289
  }
23168
23290
  if (variant === "vertical") {
23169
- 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: [
23170
23292
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
23171
23293
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
23172
23294
  /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: "Filters" })
@@ -23249,92 +23371,100 @@ var init_FilterGroup = __esm({
23249
23371
  ] });
23250
23372
  }
23251
23373
  if (variant === "compact") {
23252
- return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
23253
- showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23254
- filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
23255
- Input,
23256
- {
23257
- type: "date",
23258
- value: selectedValues[filter.field] || "",
23259
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
23260
- clearable: true,
23261
- onClear: () => handleFilterSelect(filter.field, null),
23262
- className: "text-sm"
23263
- }
23264
- ) : resolveFilterType(filter) === "daterange" || resolveFilterType(filter) === "date-range" ? /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23265
- /* @__PURE__ */ jsx(
23266
- Input,
23267
- {
23268
- type: "date",
23269
- value: selectedValues[`${filter.field}_from`] || "",
23270
- onChange: (e) => handleFilterSelect(
23271
- `${filter.field}_from`,
23272
- e.target.value || null
23273
- ),
23274
- className: "text-sm min-w-[100px]"
23275
- }
23276
- ),
23277
- /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: "-" }),
23278
- /* @__PURE__ */ jsx(
23279
- Input,
23280
- {
23281
- type: "date",
23282
- value: selectedValues[`${filter.field}_to`] || "",
23283
- onChange: (e) => handleFilterSelect(
23284
- `${filter.field}_to`,
23285
- 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
+ }
23286
23404
  ),
23287
- className: "text-sm min-w-[100px]"
23288
- }
23289
- )
23290
- ] }) : resolveFilterType(filter) === "text" ? /* @__PURE__ */ jsx(
23291
- Input,
23292
- {
23293
- value: selectedValues[filter.field] || "",
23294
- onChange: (e) => handleFilterSelect(filter.field, e.target.value || null),
23295
- placeholder: filter.label,
23296
- clearable: true,
23297
- onClear: () => handleFilterSelect(filter.field, null),
23298
- className: "text-sm"
23299
- }
23300
- ) : /* @__PURE__ */ jsx(
23301
- Select,
23302
- {
23303
- value: selectedValues[filter.field] || "all",
23304
- onChange: (e) => handleFilterSelect(filter.field, e.target.value),
23305
- options: [
23306
- { value: "all", label: `All ${filter.label}` },
23307
- ...filter.options?.map((opt) => ({
23308
- value: opt,
23309
- label: opt
23310
- })) || []
23311
- ],
23312
- className: "text-sm"
23313
- }
23314
- ) }, filter.field)),
23315
- activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
23316
- Object.entries(selectedValues).map(([field, value]) => {
23317
- const filterDef = filters.find((f3) => f3.field === field);
23318
- return /* @__PURE__ */ jsxs(
23319
- 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,
23320
23420
  {
23321
- variant: "primary",
23322
- size: "md",
23323
- className: "cursor-pointer",
23324
- onClick: () => handleFilterSelect(field, null),
23325
- children: [
23326
- filterDef?.label,
23327
- ": ",
23328
- value,
23329
- /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
23330
- ]
23331
- },
23332
- field
23333
- );
23334
- }),
23335
- /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: handleClearAll, children: "Clear all" })
23336
- ] })
23337
- ] });
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
+ );
23338
23468
  }
23339
23469
  return /* @__PURE__ */ jsx(
23340
23470
  "div",
@@ -23343,6 +23473,7 @@ var init_FilterGroup = __esm({
23343
23473
  "p-4 rounded-container",
23344
23474
  "bg-card",
23345
23475
  "border-[length:var(--border-width)] border-border",
23476
+ lookStyles5[look],
23346
23477
  className
23347
23478
  ),
23348
23479
  children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: "flex-wrap", children: [
@@ -28100,7 +28231,7 @@ function composeDisplayValue(value, format, max, prefix, suffix) {
28100
28231
  const withMax = max != null && max > 0 ? `${formatted} / ${max}` : formatted;
28101
28232
  return `${prefix ?? ""}${withMax}${suffix ?? ""}`;
28102
28233
  }
28103
- var variantColor, StatDisplay;
28234
+ var lookStyles6, variantColor, StatDisplay;
28104
28235
  var init_StatDisplay = __esm({
28105
28236
  "components/molecules/StatDisplay.tsx"() {
28106
28237
  "use client";
@@ -28112,6 +28243,13 @@ var init_StatDisplay = __esm({
28112
28243
  init_Sparkline();
28113
28244
  init_Icon();
28114
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
+ };
28115
28253
  variantColor = {
28116
28254
  default: "text-foreground",
28117
28255
  primary: "text-primary",
@@ -28139,6 +28277,7 @@ var init_StatDisplay = __esm({
28139
28277
  size = "md",
28140
28278
  variant = "default",
28141
28279
  compact = false,
28280
+ look = "elevated",
28142
28281
  className,
28143
28282
  isLoading = false,
28144
28283
  error = null
@@ -28191,7 +28330,7 @@ var init_StatDisplay = __esm({
28191
28330
  return /* @__PURE__ */ jsx(
28192
28331
  Card,
28193
28332
  {
28194
- 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),
28195
28334
  onClick: clickEvent ? handleClick : void 0,
28196
28335
  children: /* @__PURE__ */ jsxs(HStack, { align: "start", justify: "between", children: [
28197
28336
  /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "space-y-1 flex-1", children: [
@@ -33874,7 +34013,8 @@ function DataTable({
33874
34013
  bulkActions,
33875
34014
  headerActions,
33876
34015
  showTotal = true,
33877
- className
34016
+ className,
34017
+ look = "dense"
33878
34018
  }) {
33879
34019
  const [openActionMenu, setOpenActionMenu] = useState(
33880
34020
  null
@@ -34001,6 +34141,7 @@ function DataTable({
34001
34141
  {
34002
34142
  className: cn(
34003
34143
  "bg-card border-2 border-border rounded-none overflow-hidden",
34144
+ lookStyles7[look],
34004
34145
  className
34005
34146
  ),
34006
34147
  children: [
@@ -34227,6 +34368,7 @@ function DataTable({
34227
34368
  }
34228
34369
  );
34229
34370
  }
34371
+ var lookStyles7;
34230
34372
  var init_DataTable = __esm({
34231
34373
  "components/organisms/DataTable.tsx"() {
34232
34374
  "use client";
@@ -34240,6 +34382,13 @@ var init_DataTable = __esm({
34240
34382
  init_useEventBus();
34241
34383
  init_useTranslate();
34242
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
+ };
34243
34392
  DataTable.displayName = "DataTable";
34244
34393
  }
34245
34394
  });
@@ -37493,7 +37642,7 @@ var init_GraphCanvas = __esm({
37493
37642
  GraphCanvas.displayName = "GraphCanvas";
37494
37643
  }
37495
37644
  });
37496
- var Header;
37645
+ var lookStyles8, Header;
37497
37646
  var init_Header = __esm({
37498
37647
  "components/organisms/Header.tsx"() {
37499
37648
  "use client";
@@ -37506,6 +37655,13 @@ var init_Header = __esm({
37506
37655
  init_Typography();
37507
37656
  init_cn();
37508
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
+ };
37509
37665
  Header = ({
37510
37666
  logo,
37511
37667
  logoSrc,
@@ -37523,6 +37679,7 @@ var init_Header = __esm({
37523
37679
  actions,
37524
37680
  sticky = true,
37525
37681
  variant = "mobile",
37682
+ look = "compact-bar",
37526
37683
  onLogoClick,
37527
37684
  className
37528
37685
  }) => {
@@ -37538,6 +37695,7 @@ var init_Header = __esm({
37538
37695
  "flex items-center px-4 justify-between bg-card",
37539
37696
  sticky && "sticky top-0 z-50",
37540
37697
  variant === "mobile" && "lg:hidden",
37698
+ lookStyles8[look],
37541
37699
  className
37542
37700
  ),
37543
37701
  children: [
@@ -44534,7 +44692,7 @@ var init_TeamOrganism = __esm({
44534
44692
  TeamOrganism.displayName = "TeamOrganism";
44535
44693
  }
44536
44694
  });
44537
- var STATUS_STYLES3, Timeline;
44695
+ var lookStyles9, STATUS_STYLES3, Timeline;
44538
44696
  var init_Timeline = __esm({
44539
44697
  "components/organisms/Timeline.tsx"() {
44540
44698
  "use client";
@@ -44545,6 +44703,12 @@ var init_Timeline = __esm({
44545
44703
  init_ErrorState();
44546
44704
  init_EmptyState();
44547
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
+ };
44548
44712
  STATUS_STYLES3 = {
44549
44713
  complete: {
44550
44714
  dotColor: "text-success",
@@ -44575,7 +44739,8 @@ var init_Timeline = __esm({
44575
44739
  entity,
44576
44740
  isLoading = false,
44577
44741
  error,
44578
- className
44742
+ className,
44743
+ look = "vertical-spacious"
44579
44744
  }) => {
44580
44745
  const { t } = useTranslate();
44581
44746
  const entityData = Array.isArray(entity) ? entity : [];
@@ -44631,7 +44796,7 @@ var init_Timeline = __esm({
44631
44796
  }
44632
44797
  return /* @__PURE__ */ jsx(Card, { className: cn("p-6", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
44633
44798
  title && /* @__PURE__ */ jsx(Typography, { variant: "h5", weight: "semibold", children: title }),
44634
- /* @__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) => {
44635
44800
  const status = item.status || "pending";
44636
44801
  const style = STATUS_STYLES3[status] || STATUS_STYLES3.pending;
44637
44802
  const ItemIcon = item.icon || style.icon;