@almadar/ui 2.33.2 → 2.34.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.
@@ -34006,7 +34006,8 @@ function renderContainedPortal(slot, content, onDismiss) {
34006
34006
  return /* @__PURE__ */ jsxRuntime.jsx(
34007
34007
  Box,
34008
34008
  {
34009
- className: "absolute inset-0 z-50 flex items-center justify-center bg-black/50 p-4 overflow-auto",
34009
+ className: "absolute inset-0 z-50 flex items-start justify-center overflow-auto",
34010
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)", paddingTop: "10%" },
34010
34011
  onClick: onDismiss,
34011
34012
  children: /* @__PURE__ */ jsxRuntime.jsxs(
34012
34013
  Box,
@@ -34015,7 +34016,8 @@ function renderContainedPortal(slot, content, onDismiss) {
34015
34016
  border: true,
34016
34017
  shadow: "lg",
34017
34018
  rounded: "md",
34018
- className: "pointer-events-auto max-w-[calc(100%-2rem)] max-h-full overflow-auto flex flex-col",
34019
+ className: "pointer-events-auto w-full overflow-auto flex flex-col",
34020
+ style: { minWidth: "520px", maxWidth: "700px", maxHeight: "80%" },
34019
34021
  onClick: (e) => e.stopPropagation(),
34020
34022
  children: [
34021
34023
  content.props.title ? /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center justify-between p-4 border-b border-border", children: [
@@ -34040,7 +34042,8 @@ function renderContainedPortal(slot, content, onDismiss) {
34040
34042
  return /* @__PURE__ */ jsxRuntime.jsx(
34041
34043
  Box,
34042
34044
  {
34043
- className: "absolute inset-0 z-50 bg-black/50 overflow-hidden",
34045
+ className: "absolute inset-0 z-50 overflow-hidden",
34046
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
34044
34047
  onClick: onDismiss,
34045
34048
  children: /* @__PURE__ */ jsxRuntime.jsxs(
34046
34049
  Box,
@@ -34084,7 +34087,8 @@ function renderContainedPortal(slot, content, onDismiss) {
34084
34087
  return /* @__PURE__ */ jsxRuntime.jsx(
34085
34088
  Box,
34086
34089
  {
34087
- className: "absolute inset-0 z-50 bg-foreground/50 flex items-center justify-center overflow-auto",
34090
+ className: "absolute inset-0 z-50 flex items-center justify-center overflow-auto",
34091
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
34088
34092
  onClick: onDismiss,
34089
34093
  children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "max-h-full overflow-auto", onClick: (e) => e.stopPropagation(), children: slotContent })
34090
34094
  }
@@ -34460,12 +34464,13 @@ function UISlotRenderer({
34460
34464
  const isContained = hudMode === "inline";
34461
34465
  const suspenseConfig = suspense === true ? { enabled: true } : suspense && typeof suspense === "object" ? suspense : { enabled: false };
34462
34466
  const content = /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn(
34463
- "ui-slot-renderer",
34464
- isContained && "relative",
34467
+ "ui-slot-renderer relative min-h-full",
34465
34468
  className
34466
34469
  ), children: [
34467
- /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar" }),
34468
- /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1" }),
34470
+ /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex min-h-full", children: [
34471
+ /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar min-w-0 shrink-0" }),
34472
+ /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1 min-h-[200px]" })
34473
+ ] }),
34469
34474
  /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "modal", portal: true }),
34470
34475
  /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "drawer", portal: true }),
34471
34476
  /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "overlay", portal: true }),
@@ -34476,14 +34481,14 @@ function UISlotRenderer({
34476
34481
  UISlotComponent,
34477
34482
  {
34478
34483
  slot: "hud-top",
34479
- className: isContained ? "sticky top-0 inset-x-0 z-40" : "fixed top-0 inset-x-0 z-40"
34484
+ className: isContained ? "absolute top-0 left-0 right-0 z-40" : "fixed top-0 inset-x-0 z-40"
34480
34485
  }
34481
34486
  ),
34482
34487
  /* @__PURE__ */ jsxRuntime.jsx(
34483
34488
  UISlotComponent,
34484
34489
  {
34485
34490
  slot: "hud-bottom",
34486
- className: isContained ? "sticky bottom-0 inset-x-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
34491
+ className: isContained ? "absolute bottom-0 left-0 right-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
34487
34492
  }
34488
34493
  )
34489
34494
  ] }),
@@ -34491,7 +34496,7 @@ function UISlotRenderer({
34491
34496
  UISlotComponent,
34492
34497
  {
34493
34498
  slot: "floating",
34494
- className: isContained ? "absolute z-50" : "fixed z-50",
34499
+ className: isContained ? "absolute top-2 left-2 z-50" : "fixed z-50",
34495
34500
  draggable: true
34496
34501
  }
34497
34502
  )
@@ -33976,7 +33976,8 @@ function renderContainedPortal(slot, content, onDismiss) {
33976
33976
  return /* @__PURE__ */ jsx(
33977
33977
  Box,
33978
33978
  {
33979
- className: "absolute inset-0 z-50 flex items-center justify-center bg-black/50 p-4 overflow-auto",
33979
+ className: "absolute inset-0 z-50 flex items-start justify-center overflow-auto",
33980
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)", paddingTop: "10%" },
33980
33981
  onClick: onDismiss,
33981
33982
  children: /* @__PURE__ */ jsxs(
33982
33983
  Box,
@@ -33985,7 +33986,8 @@ function renderContainedPortal(slot, content, onDismiss) {
33985
33986
  border: true,
33986
33987
  shadow: "lg",
33987
33988
  rounded: "md",
33988
- className: "pointer-events-auto max-w-[calc(100%-2rem)] max-h-full overflow-auto flex flex-col",
33989
+ className: "pointer-events-auto w-full overflow-auto flex flex-col",
33990
+ style: { minWidth: "520px", maxWidth: "700px", maxHeight: "80%" },
33989
33991
  onClick: (e) => e.stopPropagation(),
33990
33992
  children: [
33991
33993
  content.props.title ? /* @__PURE__ */ jsxs(Box, { className: "flex items-center justify-between p-4 border-b border-border", children: [
@@ -34010,7 +34012,8 @@ function renderContainedPortal(slot, content, onDismiss) {
34010
34012
  return /* @__PURE__ */ jsx(
34011
34013
  Box,
34012
34014
  {
34013
- className: "absolute inset-0 z-50 bg-black/50 overflow-hidden",
34015
+ className: "absolute inset-0 z-50 overflow-hidden",
34016
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
34014
34017
  onClick: onDismiss,
34015
34018
  children: /* @__PURE__ */ jsxs(
34016
34019
  Box,
@@ -34054,7 +34057,8 @@ function renderContainedPortal(slot, content, onDismiss) {
34054
34057
  return /* @__PURE__ */ jsx(
34055
34058
  Box,
34056
34059
  {
34057
- className: "absolute inset-0 z-50 bg-foreground/50 flex items-center justify-center overflow-auto",
34060
+ className: "absolute inset-0 z-50 flex items-center justify-center overflow-auto",
34061
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
34058
34062
  onClick: onDismiss,
34059
34063
  children: /* @__PURE__ */ jsx(Box, { className: "max-h-full overflow-auto", onClick: (e) => e.stopPropagation(), children: slotContent })
34060
34064
  }
@@ -34430,12 +34434,13 @@ function UISlotRenderer({
34430
34434
  const isContained = hudMode === "inline";
34431
34435
  const suspenseConfig = suspense === true ? { enabled: true } : suspense && typeof suspense === "object" ? suspense : { enabled: false };
34432
34436
  const content = /* @__PURE__ */ jsxs(Box, { className: cn(
34433
- "ui-slot-renderer",
34434
- isContained && "relative",
34437
+ "ui-slot-renderer relative min-h-full",
34435
34438
  className
34436
34439
  ), children: [
34437
- /* @__PURE__ */ jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar" }),
34438
- /* @__PURE__ */ jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1" }),
34440
+ /* @__PURE__ */ jsxs(Box, { className: "flex min-h-full", children: [
34441
+ /* @__PURE__ */ jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar min-w-0 shrink-0" }),
34442
+ /* @__PURE__ */ jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1 min-h-[200px]" })
34443
+ ] }),
34439
34444
  /* @__PURE__ */ jsx(UISlotComponent, { slot: "modal", portal: true }),
34440
34445
  /* @__PURE__ */ jsx(UISlotComponent, { slot: "drawer", portal: true }),
34441
34446
  /* @__PURE__ */ jsx(UISlotComponent, { slot: "overlay", portal: true }),
@@ -34446,14 +34451,14 @@ function UISlotRenderer({
34446
34451
  UISlotComponent,
34447
34452
  {
34448
34453
  slot: "hud-top",
34449
- className: isContained ? "sticky top-0 inset-x-0 z-40" : "fixed top-0 inset-x-0 z-40"
34454
+ className: isContained ? "absolute top-0 left-0 right-0 z-40" : "fixed top-0 inset-x-0 z-40"
34450
34455
  }
34451
34456
  ),
34452
34457
  /* @__PURE__ */ jsx(
34453
34458
  UISlotComponent,
34454
34459
  {
34455
34460
  slot: "hud-bottom",
34456
- className: isContained ? "sticky bottom-0 inset-x-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
34461
+ className: isContained ? "absolute bottom-0 left-0 right-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
34457
34462
  }
34458
34463
  )
34459
34464
  ] }),
@@ -34461,7 +34466,7 @@ function UISlotRenderer({
34461
34466
  UISlotComponent,
34462
34467
  {
34463
34468
  slot: "floating",
34464
- className: isContained ? "absolute z-50" : "fixed z-50",
34469
+ className: isContained ? "absolute top-2 left-2 z-50" : "fixed z-50",
34465
34470
  draggable: true
34466
34471
  }
34467
34472
  )
@@ -31980,7 +31980,8 @@ function renderContainedPortal(slot, content, onDismiss) {
31980
31980
  return /* @__PURE__ */ jsxRuntime.jsx(
31981
31981
  Box,
31982
31982
  {
31983
- className: "absolute inset-0 z-50 flex items-center justify-center bg-black/50 p-4 overflow-auto",
31983
+ className: "absolute inset-0 z-50 flex items-start justify-center overflow-auto",
31984
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)", paddingTop: "10%" },
31984
31985
  onClick: onDismiss,
31985
31986
  children: /* @__PURE__ */ jsxRuntime.jsxs(
31986
31987
  Box,
@@ -31989,7 +31990,8 @@ function renderContainedPortal(slot, content, onDismiss) {
31989
31990
  border: true,
31990
31991
  shadow: "lg",
31991
31992
  rounded: "md",
31992
- className: "pointer-events-auto max-w-[calc(100%-2rem)] max-h-full overflow-auto flex flex-col",
31993
+ className: "pointer-events-auto w-full overflow-auto flex flex-col",
31994
+ style: { minWidth: "520px", maxWidth: "700px", maxHeight: "80%" },
31993
31995
  onClick: (e) => e.stopPropagation(),
31994
31996
  children: [
31995
31997
  content.props.title ? /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center justify-between p-4 border-b border-border", children: [
@@ -32014,7 +32016,8 @@ function renderContainedPortal(slot, content, onDismiss) {
32014
32016
  return /* @__PURE__ */ jsxRuntime.jsx(
32015
32017
  Box,
32016
32018
  {
32017
- className: "absolute inset-0 z-50 bg-black/50 overflow-hidden",
32019
+ className: "absolute inset-0 z-50 overflow-hidden",
32020
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
32018
32021
  onClick: onDismiss,
32019
32022
  children: /* @__PURE__ */ jsxRuntime.jsxs(
32020
32023
  Box,
@@ -32058,7 +32061,8 @@ function renderContainedPortal(slot, content, onDismiss) {
32058
32061
  return /* @__PURE__ */ jsxRuntime.jsx(
32059
32062
  Box,
32060
32063
  {
32061
- className: "absolute inset-0 z-50 bg-foreground/50 flex items-center justify-center overflow-auto",
32064
+ className: "absolute inset-0 z-50 flex items-center justify-center overflow-auto",
32065
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
32062
32066
  onClick: onDismiss,
32063
32067
  children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "max-h-full overflow-auto", onClick: (e) => e.stopPropagation(), children: slotContent })
32064
32068
  }
@@ -32434,12 +32438,13 @@ function UISlotRenderer({
32434
32438
  const isContained = hudMode === "inline";
32435
32439
  const suspenseConfig = suspense === true ? { enabled: true } : suspense && typeof suspense === "object" ? suspense : { enabled: false };
32436
32440
  const content = /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn(
32437
- "ui-slot-renderer",
32438
- isContained && "relative",
32441
+ "ui-slot-renderer relative min-h-full",
32439
32442
  className
32440
32443
  ), children: [
32441
- /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar" }),
32442
- /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1" }),
32444
+ /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex min-h-full", children: [
32445
+ /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar min-w-0 shrink-0" }),
32446
+ /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1 min-h-[200px]" })
32447
+ ] }),
32443
32448
  /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "modal", portal: true }),
32444
32449
  /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "drawer", portal: true }),
32445
32450
  /* @__PURE__ */ jsxRuntime.jsx(UISlotComponent, { slot: "overlay", portal: true }),
@@ -32450,14 +32455,14 @@ function UISlotRenderer({
32450
32455
  UISlotComponent,
32451
32456
  {
32452
32457
  slot: "hud-top",
32453
- className: isContained ? "sticky top-0 inset-x-0 z-40" : "fixed top-0 inset-x-0 z-40"
32458
+ className: isContained ? "absolute top-0 left-0 right-0 z-40" : "fixed top-0 inset-x-0 z-40"
32454
32459
  }
32455
32460
  ),
32456
32461
  /* @__PURE__ */ jsxRuntime.jsx(
32457
32462
  UISlotComponent,
32458
32463
  {
32459
32464
  slot: "hud-bottom",
32460
- className: isContained ? "sticky bottom-0 inset-x-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
32465
+ className: isContained ? "absolute bottom-0 left-0 right-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
32461
32466
  }
32462
32467
  )
32463
32468
  ] }),
@@ -32465,7 +32470,7 @@ function UISlotRenderer({
32465
32470
  UISlotComponent,
32466
32471
  {
32467
32472
  slot: "floating",
32468
- className: isContained ? "absolute z-50" : "fixed z-50",
32473
+ className: isContained ? "absolute top-2 left-2 z-50" : "fixed z-50",
32469
32474
  draggable: true
32470
32475
  }
32471
32476
  )
@@ -31950,7 +31950,8 @@ function renderContainedPortal(slot, content, onDismiss) {
31950
31950
  return /* @__PURE__ */ jsx(
31951
31951
  Box,
31952
31952
  {
31953
- className: "absolute inset-0 z-50 flex items-center justify-center bg-black/50 p-4 overflow-auto",
31953
+ className: "absolute inset-0 z-50 flex items-start justify-center overflow-auto",
31954
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)", paddingTop: "10%" },
31954
31955
  onClick: onDismiss,
31955
31956
  children: /* @__PURE__ */ jsxs(
31956
31957
  Box,
@@ -31959,7 +31960,8 @@ function renderContainedPortal(slot, content, onDismiss) {
31959
31960
  border: true,
31960
31961
  shadow: "lg",
31961
31962
  rounded: "md",
31962
- className: "pointer-events-auto max-w-[calc(100%-2rem)] max-h-full overflow-auto flex flex-col",
31963
+ className: "pointer-events-auto w-full overflow-auto flex flex-col",
31964
+ style: { minWidth: "520px", maxWidth: "700px", maxHeight: "80%" },
31963
31965
  onClick: (e) => e.stopPropagation(),
31964
31966
  children: [
31965
31967
  content.props.title ? /* @__PURE__ */ jsxs(Box, { className: "flex items-center justify-between p-4 border-b border-border", children: [
@@ -31984,7 +31986,8 @@ function renderContainedPortal(slot, content, onDismiss) {
31984
31986
  return /* @__PURE__ */ jsx(
31985
31987
  Box,
31986
31988
  {
31987
- className: "absolute inset-0 z-50 bg-black/50 overflow-hidden",
31989
+ className: "absolute inset-0 z-50 overflow-hidden",
31990
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
31988
31991
  onClick: onDismiss,
31989
31992
  children: /* @__PURE__ */ jsxs(
31990
31993
  Box,
@@ -32028,7 +32031,8 @@ function renderContainedPortal(slot, content, onDismiss) {
32028
32031
  return /* @__PURE__ */ jsx(
32029
32032
  Box,
32030
32033
  {
32031
- className: "absolute inset-0 z-50 bg-foreground/50 flex items-center justify-center overflow-auto",
32034
+ className: "absolute inset-0 z-50 flex items-center justify-center overflow-auto",
32035
+ style: { backgroundColor: "rgba(0, 0, 0, 0.5)" },
32032
32036
  onClick: onDismiss,
32033
32037
  children: /* @__PURE__ */ jsx(Box, { className: "max-h-full overflow-auto", onClick: (e) => e.stopPropagation(), children: slotContent })
32034
32038
  }
@@ -32404,12 +32408,13 @@ function UISlotRenderer({
32404
32408
  const isContained = hudMode === "inline";
32405
32409
  const suspenseConfig = suspense === true ? { enabled: true } : suspense && typeof suspense === "object" ? suspense : { enabled: false };
32406
32410
  const content = /* @__PURE__ */ jsxs(Box, { className: cn(
32407
- "ui-slot-renderer",
32408
- isContained && "relative",
32411
+ "ui-slot-renderer relative min-h-full",
32409
32412
  className
32410
32413
  ), children: [
32411
- /* @__PURE__ */ jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar" }),
32412
- /* @__PURE__ */ jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1" }),
32414
+ /* @__PURE__ */ jsxs(Box, { className: "flex min-h-full", children: [
32415
+ /* @__PURE__ */ jsx(UISlotComponent, { slot: "sidebar", className: "ui-slot-sidebar min-w-0 shrink-0" }),
32416
+ /* @__PURE__ */ jsx(UISlotComponent, { slot: "main", className: "ui-slot-main flex-1 min-h-[200px]" })
32417
+ ] }),
32413
32418
  /* @__PURE__ */ jsx(UISlotComponent, { slot: "modal", portal: true }),
32414
32419
  /* @__PURE__ */ jsx(UISlotComponent, { slot: "drawer", portal: true }),
32415
32420
  /* @__PURE__ */ jsx(UISlotComponent, { slot: "overlay", portal: true }),
@@ -32420,14 +32425,14 @@ function UISlotRenderer({
32420
32425
  UISlotComponent,
32421
32426
  {
32422
32427
  slot: "hud-top",
32423
- className: isContained ? "sticky top-0 inset-x-0 z-40" : "fixed top-0 inset-x-0 z-40"
32428
+ className: isContained ? "absolute top-0 left-0 right-0 z-40" : "fixed top-0 inset-x-0 z-40"
32424
32429
  }
32425
32430
  ),
32426
32431
  /* @__PURE__ */ jsx(
32427
32432
  UISlotComponent,
32428
32433
  {
32429
32434
  slot: "hud-bottom",
32430
- className: isContained ? "sticky bottom-0 inset-x-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
32435
+ className: isContained ? "absolute bottom-0 left-0 right-0 z-40" : "fixed bottom-0 inset-x-0 z-40"
32431
32436
  }
32432
32437
  )
32433
32438
  ] }),
@@ -32435,7 +32440,7 @@ function UISlotRenderer({
32435
32440
  UISlotComponent,
32436
32441
  {
32437
32442
  slot: "floating",
32438
- className: isContained ? "absolute z-50" : "fixed z-50",
32443
+ className: isContained ? "absolute top-2 left-2 z-50" : "fixed z-50",
32439
32444
  draggable: true
32440
32445
  }
32441
32446
  )
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Tailwind Safelist Audit
4
+ *
5
+ * Scans all @almadar/ui source files for Tailwind classes that need
6
+ * to be in the safelist (because consuming apps can't extract them
7
+ * from compiled dist/ files). Compares against the current safelist
8
+ * in tailwind-preset.cjs and reports missing entries.
9
+ *
10
+ * Classes that need safelisting:
11
+ * 1. Arbitrary value classes: bg-[var(--color-X)], min-h-[200px], etc.
12
+ * 2. Opacity modifiers on semantic colors: bg-primary/10, text-foreground/60
13
+ * 3. Responsive prefixes on dynamic values: sm:grid-cols-2
14
+ * 4. State prefixes on CSS vars: hover:bg-[var(--color-X)]
15
+ *
16
+ * Standard utility classes (flex, p-4, rounded-lg) are fine because
17
+ * the shell template's tailwind.config.js includes the dist/ path in
18
+ * content scanning. But CSS-variable-based arbitrary classes use bracket
19
+ * notation that Tailwind can't extract from minified JS.
20
+ *
21
+ * Usage:
22
+ * npx tsx scripts/audit-tailwind-safelist.ts
23
+ * npx tsx scripts/audit-tailwind-safelist.ts --fix (appends missing to preset)
24
+ *
25
+ * @packageDocumentation
26
+ */
27
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "2.33.2",
3
+ "version": "2.34.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "main": "./dist/components/index.js",
@@ -116,6 +116,7 @@
116
116
  "@almadar/core": ">=2.6.3",
117
117
  "@almadar/evaluator": ">=2.5.4",
118
118
  "@almadar/patterns": ">=2.8.7",
119
+ "@almadar/std": ">=3.6.0",
119
120
  "@almadar/runtime": ">=2.0.0",
120
121
  "@xyflow/react": "12.10.1",
121
122
  "clsx": "^2.1.0",
@@ -142,7 +143,6 @@
142
143
  },
143
144
  "devDependencies": {
144
145
  "@almadar/eslint-plugin": ">=2.3.0",
145
- "@almadar/std": ">=3.6.0",
146
146
  "@react-three/postprocessing": "3.0.4",
147
147
  "@storybook/addon-docs": "^10.2.6",
148
148
  "@storybook/addon-links": "^10.2.6",
@@ -84,7 +84,176 @@ module.exports = {
84
84
  'duration-200',
85
85
  'ring-2',
86
86
  'ring-primary',
87
- ],
87
+
88
+ // Auto-added by audit-tailwind-safelist.ts (2026-03-28)
89
+ 'active:scale-[var(--active-scale)]',
90
+ 'animate-[combat-flash_0.2s_ease-in-out_2]',
91
+ 'animate-[combat-heal-glow_0.8s_ease-in-out]',
92
+ 'animate-[combat-pulse-red_0.5s_ease-in-out]',
93
+ 'animate-[combat-shake_0.3s_ease-in-out]',
94
+ 'animate-[shake_0.3s_ease-in-out]',
95
+ 'aspect-[3/4]',
96
+ 'bg-[radial-gradient(circle_at_center,rgba(34,197,94,0.2),transparent_70%)]',
97
+ 'bg-[radial-gradient(ellipse_at_top,var(--color-primary)/0.08,transparent_60%),',
98
+ 'radial-gradient(ellipse_at_bottom_right,var(--color-accent)/0.06,transparent_50%)]',
99
+ 'bg-[var(--color-background)]',
100
+ 'bg-[var(--color-card)]',
101
+ 'bg-[var(--color-table-header)]',
102
+ 'bg-accent/10',
103
+ 'bg-accent/20',
104
+ 'bg-background/80',
105
+ 'bg-card/80',
106
+ 'bg-error/10',
107
+ 'bg-foreground/0',
108
+ 'bg-foreground/50',
109
+ 'bg-info/10',
110
+ 'bg-muted/20',
111
+ 'bg-muted/30',
112
+ 'bg-muted/50',
113
+ 'bg-muted/60',
114
+ 'bg-primary/10',
115
+ 'bg-primary/20',
116
+ 'bg-primary/8',
117
+ 'bg-success/10',
118
+ 'bg-success/20',
119
+ 'bg-surface/60',
120
+ 'bg-surface/80',
121
+ 'bg-warning/10',
122
+ 'border-[length:2px]',
123
+ 'border-[length:var(--border-width-thin)]',
124
+ 'border-[length:var(--border-width)]',
125
+ 'border-[var(--color-border)]',
126
+ 'border-[var(--color-table-border)]',
127
+ 'border-accent/30',
128
+ 'border-b-[length:var(--border-width)]',
129
+ 'border-border/40',
130
+ 'border-error/30',
131
+ 'border-error/50',
132
+ 'border-info/30',
133
+ 'border-l-[3px]',
134
+ 'border-l-[length:var(--border-width)]',
135
+ 'border-primary/30',
136
+ 'border-r-[length:var(--border-width)]',
137
+ 'border-success/30',
138
+ 'border-t-[length:var(--border-width)]',
139
+ 'border-warning/30',
140
+ 'border-x-[length:var(--border-width)]',
141
+ 'dark:bg-foreground/70',
142
+ 'dark:hover:bg-error/20',
143
+ 'data-[active=true]',
144
+ 'duration-[var(--transition-fast)]',
145
+ 'duration-[var(--transition-normal)]',
146
+ 'focus:ring-[length:var(--focus-ring-width)]',
147
+ 'focus:ring-offset-[length:var(--focus-ring-offset)]',
148
+ 'font-[var(--font-weight-bold)]',
149
+ 'font-[var(--font-weight-medium)]',
150
+ 'from-[var(--color-primary)]',
151
+ 'group-hover:bg-foreground/20',
152
+ 'h-[18px]',
153
+ 'h-[1em]',
154
+ 'h-[80px]',
155
+ 'hover:bg-[var(--color-card)]',
156
+ 'hover:bg-[var(--color-surface-hover)]',
157
+ 'hover:bg-[var(--color-table-row-hover)]',
158
+ 'hover:bg-error/10',
159
+ 'hover:bg-error/80',
160
+ 'hover:bg-muted/50',
161
+ 'hover:bg-muted/80',
162
+ 'hover:bg-primary/10',
163
+ 'hover:border-[var(--color-border-hover)]',
164
+ 'hover:border-l-[var(--color-muted)]',
165
+ 'left-[-5px]',
166
+ 'lg:max-w-[50%]',
167
+ 'lg:min-w-[45%]',
168
+ 'max-h-[1000px]',
169
+ 'max-h-[280px]',
170
+ 'max-h-[500px]',
171
+ 'max-h-[80vh]',
172
+ 'max-w-[120px]',
173
+ 'max-w-[160px]',
174
+ 'max-w-[180px]',
175
+ 'max-w-[200px]',
176
+ 'max-w-[280px]',
177
+ 'max-w-[300px]',
178
+ 'max-w-[400px]',
179
+ 'max-w-[60%]',
180
+ 'max-w-[75%]',
181
+ 'max-w-[80%]',
182
+ 'min-h-[200px]',
183
+ 'min-h-[240px]',
184
+ 'min-h-[24px]',
185
+ 'min-h-[2rem]',
186
+ 'min-h-[400px]',
187
+ 'min-h-[44px]',
188
+ 'min-h-[4px]',
189
+ 'min-h-[600px]',
190
+ 'min-h-[60px]',
191
+ 'min-h-[60vh]',
192
+ 'min-h-[80px]',
193
+ 'min-h-[80vh]',
194
+ 'min-w-[100px]',
195
+ 'min-w-[120px]',
196
+ 'min-w-[130px]',
197
+ 'min-w-[140px]',
198
+ 'min-w-[160px]',
199
+ 'min-w-[18px]',
200
+ 'min-w-[2.5rem]',
201
+ 'min-w-[200px]',
202
+ 'min-w-[20px]',
203
+ 'min-w-[2rem]',
204
+ 'min-w-[300px]',
205
+ 'min-w-[3ch]',
206
+ 'min-w-[3rem]',
207
+ 'min-w-[40px]',
208
+ 'min-w-[44px]',
209
+ 'min-w-[60px]',
210
+ 'min-w-[65px]',
211
+ 'min-w-[800px]',
212
+ 'min-w-[80px]',
213
+ 'ml-[1px]',
214
+ 'ml-[calc(1.5rem)]',
215
+ 'peer-focus:ring-error/20',
216
+ 'peer-focus:ring-ring/20',
217
+ 'placeholder:text-[var(--color-placeholder)]',
218
+ 'ring-accent/20',
219
+ 'ring-accent/50',
220
+ 'ring-error/20',
221
+ 'ring-info/20',
222
+ 'ring-muted-foreground/20',
223
+ 'ring-primary/30',
224
+ 'ring-success/20',
225
+ 'ring-warning/20',
226
+ 'rounded-[var(--radius-md)]',
227
+ 'scale-[1.05]',
228
+ 'shadow-[0_-4px_6px_-1px_rgb(0,0,0,0.05)]',
229
+ 'shadow-[0_0_10px_rgba(251,191,36,0.5)]',
230
+ 'shadow-[0_0_6px_rgba(59,130,246,0.3)]',
231
+ 'shadow-[0_0_8px_rgba(168,85,247,0.4)]',
232
+ 'text-[0.65rem]',
233
+ 'text-[10px]',
234
+ 'text-[11px]',
235
+ 'text-[12px]',
236
+ 'text-[13px]',
237
+ 'text-[14px]',
238
+ 'text-[15px]',
239
+ 'text-[8px]',
240
+ 'text-[9px]',
241
+ 'text-[var(--color-foreground)]',
242
+ 'text-[var(--color-muted-foreground)]',
243
+ 'text-[var(--icon-color,currentColor)]',
244
+ 'text-foreground/30',
245
+ 'text-foreground/60',
246
+ 'text-foreground/70',
247
+ 'text-foreground/80',
248
+ 'text-muted-foreground/50',
249
+ 'to-[var(--color-secondary)]',
250
+ 'w-[280px]',
251
+ 'w-[2px]',
252
+ 'w-[480px]',
253
+ 'w-[640px]',
254
+ 'will-change-[opacity,transform]',
255
+ 'z-[60]',
256
+ ],
88
257
  theme: {
89
258
  fontFamily: {
90
259
  sans: ['var(--font-family)', 'ui-sans-serif', 'system-ui', 'sans-serif'],