@12-apps/ui 6.76.1 → 6.77.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.
Files changed (71) hide show
  1. package/NATIVE.md +1 -1
  2. package/dist/_internal/components/data-display/Alert/Alert.content.js +20 -0
  3. package/dist/_internal/components/data-display/Alert/Alert.content.js.map +1 -0
  4. package/dist/_internal/components/data-display/Alert/Alert.js +5 -3
  5. package/dist/_internal/components/data-display/Alert/Alert.metrics.js +3 -1
  6. package/dist/_internal/components/data-display/Alert/Alert.placement.js +8 -0
  7. package/dist/_internal/components/data-display/Alert/Alert.placement.js.map +1 -0
  8. package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -2
  9. package/dist/_internal/components/data-display/Banner/Banner.js +3 -3
  10. package/dist/_internal/components/data-display/Banner/Banner.styles.js +2 -2
  11. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +6 -4
  12. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +7 -5
  13. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +7 -5
  14. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +6 -4
  15. package/dist/_internal/components/data-display/index.js +7 -5
  16. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +6 -4
  17. package/dist/_internal/components/feedback/index.js +6 -4
  18. package/dist/_internal/components/index.js +8 -6
  19. package/dist/{chunk-3VLVLZ6W.js → chunk-B34WHRKH.js} +2 -2
  20. package/dist/{chunk-JYAXTRNH.js → chunk-CCJJTLF7.js} +2 -2
  21. package/dist/{chunk-52CLMR47.js → chunk-ENXGWNCX.js} +2 -2
  22. package/dist/chunk-IVI574Y5.js +73 -0
  23. package/dist/chunk-IVI574Y5.js.map +1 -0
  24. package/dist/{chunk-3LHZCVGM.js → chunk-JNVUB2D4.js} +3 -1
  25. package/dist/chunk-JNVUB2D4.js.map +1 -0
  26. package/dist/{chunk-REEV7CLC.js → chunk-QDG6V7OC.js} +2 -2
  27. package/dist/chunk-QXUXO22M.js +9 -0
  28. package/dist/chunk-QXUXO22M.js.map +1 -0
  29. package/dist/{chunk-44AXT2SN.js → chunk-QZX43FIC.js} +2 -2
  30. package/dist/{chunk-ZBOGZLX3.js → chunk-T2KONJ45.js} +3 -3
  31. package/dist/{chunk-LY7PBZ3Z.js → chunk-UFNXYOHZ.js} +2 -2
  32. package/dist/{chunk-ERI6JC4M.js → chunk-X2SJJZFH.js} +2 -2
  33. package/dist/{chunk-DQJFCVXW.js → chunk-ZSCKXOKE.js} +32 -47
  34. package/dist/chunk-ZSCKXOKE.js.map +1 -0
  35. package/dist/data-display/Alert.js +5 -3
  36. package/dist/data-display/Banner.js +3 -3
  37. package/dist/data-display/CardKit.js +7 -5
  38. package/dist/data-display/DataViews.js +7 -5
  39. package/dist/feedback/NotificationStatusNotice.js +6 -4
  40. package/dist/native/data-display/Alert.js.map +1 -1
  41. package/dist/types/components/data-display/Alert/Alert.content.d.ts +18 -0
  42. package/dist/types/components/data-display/Alert/Alert.content.d.ts.map +1 -0
  43. package/dist/types/components/data-display/Alert/Alert.d.ts.map +1 -1
  44. package/dist/types/components/data-display/Alert/Alert.metrics.d.ts +4 -0
  45. package/dist/types/components/data-display/Alert/Alert.metrics.d.ts.map +1 -1
  46. package/dist/types/components/data-display/Alert/Alert.placement.d.ts +37 -0
  47. package/dist/types/components/data-display/Alert/Alert.placement.d.ts.map +1 -0
  48. package/dist/types/components/data-display/Alert/Alert.types.d.ts +8 -0
  49. package/dist/types/components/data-display/Alert/Alert.types.d.ts.map +1 -1
  50. package/dist/types/components/data-display/Alert/index.d.ts +1 -1
  51. package/dist/types/components/data-display/Alert/index.d.ts.map +1 -1
  52. package/dist/types-native/components/data-display/Alert/Alert.metrics.d.ts +4 -0
  53. package/dist/types-native/components/data-display/Alert/Alert.metrics.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/src/components/data-display/Alert/Alert.content.tsx +79 -0
  56. package/src/components/data-display/Alert/Alert.md +19 -0
  57. package/src/components/data-display/Alert/Alert.metrics.ts +2 -0
  58. package/src/components/data-display/Alert/Alert.placement.ts +45 -0
  59. package/src/components/data-display/Alert/Alert.tsx +41 -61
  60. package/src/components/data-display/Alert/Alert.types.ts +10 -1
  61. package/src/components/data-display/Alert/index.ts +7 -1
  62. package/dist/chunk-3LHZCVGM.js.map +0 -1
  63. package/dist/chunk-DQJFCVXW.js.map +0 -1
  64. /package/dist/{chunk-3VLVLZ6W.js.map → chunk-B34WHRKH.js.map} +0 -0
  65. /package/dist/{chunk-JYAXTRNH.js.map → chunk-CCJJTLF7.js.map} +0 -0
  66. /package/dist/{chunk-52CLMR47.js.map → chunk-ENXGWNCX.js.map} +0 -0
  67. /package/dist/{chunk-REEV7CLC.js.map → chunk-QDG6V7OC.js.map} +0 -0
  68. /package/dist/{chunk-44AXT2SN.js.map → chunk-QZX43FIC.js.map} +0 -0
  69. /package/dist/{chunk-ZBOGZLX3.js.map → chunk-T2KONJ45.js.map} +0 -0
  70. /package/dist/{chunk-LY7PBZ3Z.js.map → chunk-UFNXYOHZ.js.map} +0 -0
  71. /package/dist/{chunk-ERI6JC4M.js.map → chunk-X2SJJZFH.js.map} +0 -0
package/NATIVE.md CHANGED
@@ -86,7 +86,7 @@ Ported: **28 of 149** public subpaths carry a `react-native` condition.
86
86
 
87
87
  | subpath | shared stories run natively | skipped (`native-skip`) | known gaps |
88
88
  |---|---|---|---|
89
- | `@12-apps/ui/data-display/Alert` | 41 | 2 | `glass` paints its 0.85 paper wash and hairline without the 20px backdrop blur and saturation — React Native has no backdrop filter.; `gradient` paints its first stop (`alpha(light, 0.9)`) flat and has no shimmer sweep — React Native core has no gradient fill and no pseudo-elements.; Hover (a 6% tint layer), press (a 20% one, easing back) and `:focus-visible` (the keyboard ring) have no touch equivalent; the close button's pressed state stands in for its hover.; The hairline the web draws around a `Button` placed inside the message is a descendant selector; native children are rendered as given. Consecutive text children DO flow as one sentence (`src/platform/text-children.tsx`); an element child breaks the run, as a block would on the web.; After dismissal the web keeps a collapsed, hidden node in the DOM; native unmounts once the 300ms collapse has run.; Title, description and children are set in MUI's default `body1`/`body2` numbers; a host that re-themes MUI's typography variants moves the web only. |
89
+ | `@12-apps/ui/data-display/Alert` | 42 | 2 | `glass` paints its 0.85 paper wash and hairline without the 20px backdrop blur and saturation — React Native has no backdrop filter.; `gradient` paints its first stop (`alpha(light, 0.9)`) flat and has no shimmer sweep — React Native core has no gradient fill and no pseudo-elements.; Hover (a 6% tint layer), press (a 20% one, easing back) and `:focus-visible` (the keyboard ring) have no touch equivalent; the close button's pressed state stands in for its hover.; The hairline the web draws around a `Button` placed inside the message is a descendant selector; native children are rendered as given. Consecutive text children DO flow as one sentence (`src/platform/text-children.tsx`); an element child breaks the run, as a block would on the web.; After dismissal the web keeps a collapsed, hidden node in the DOM; native unmounts once the 300ms collapse has run.; Title, description and children are set in MUI's default `body1`/`body2` numbers; a host that re-themes MUI's typography variants moves the web only. |
90
90
  | `@12-apps/ui/data-display/Avatar` | 45 | 1 | Hover has no touch equivalent: the interactive lift (`scale(1.1) translateY(-2px)`, the `0 8px 20px` shadow and the brightness), the `:active` squeeze and the `:focus-visible` ring are all web-only. The avatar still reports itself as a button and takes a tab stop.; The shimmer that runs across a loading avatar is a moving gradient; React Native core has neither, so the box keeps its accent and only the overlay and its spinner say it is loading. `backdrop-filter: blur(2px)` behind that overlay has no equivalent either — the wash is the flat `alpha(paper, 0.7)`.; `glow` paints the halo but not the `brightness(1.05)` filter that goes with it; React Native has no filters.; `pulse` is a ring behind the avatar scaling out to 10px and fading, rather than MUI's growing `box-shadow` on an `::after` — the same colour, cadence and travel, drawn by a sibling.; The status dot is a bordered circle placed at MUI's `overlap="circular"` inset; MUI's `Badge` additionally draws a `::after` ripple layer over it.; `AvatarGroup` overlaps and counts exactly as the web does, but the web ALSO gives every child a paper ring through a `& > *` descendant rule. A native renderer cannot restyle children, so an avatar in a group takes `bordered` from its own prop.; The default and broken-image glyphs are the house `Icon` at 24px, which is what MUI's `SvgIcon` draws them at here; the initials are set in the theme's own font rather than MUI's `Avatar` typography. |
91
91
  | `@12-apps/ui/data-display/Badge` | 55 | 1 | `gradient` paints the 135° run's first stop flat and `glass` keeps its 10% wash and 20% hairline without the `blur(10px) saturate(200%)` backdrop or the inset white highlight — React Native has no gradient fill, no backdrop filter and no inset shadow.; `shimmer` is a gradient sweeping across a pseudo-element and is not drawn at all; the chip keeps its variant's paint.; `glow` draws the 15px halo but not the `brightness(1.1)` filter beside it, and `glow` WITH `pulse` breathes only the scale and the opacity — the halo itself cannot be animated, because a box shadow is not an animatable style there.; Hover has no touch equivalent: the chip's `scale(1.1)` under the pointer and the glow's brighter hover halo are web-only.; `count` is drawn as a pill (`height / 2`); MUI asks for `border-radius: 50%`, which on a chip wider than it is tall is an ellipse React Native cannot express.; MUI's `transition: all 0.3s` on the chip has no equivalent: a colour or size change is drawn immediately. The mount, pulse and close animations are `Animated` and do run.; `onClick` on the badge reaches the DOM through react-native-web and fires there, as it does on the web; a device has no click, so a shared screen that needs a press should put one on its own child. |
92
92
  | `@12-apps/ui/data-display/Chip` | 25 | 0 | Hover has no touch equivalent, so a press stands in for it: the chip takes MUI's hover wash (`palette[color].dark` filled, `alpha(main, 0.04)` outlined) while pressed, but not this package's own 1px lift or the `0 4px 12px` shadow under it, which are `:hover`-only.; The keyboard contract — Enter and Space activate, Delete and Backspace remove — is shared (`chipKeyAction`) and answered under react-native-web, half by its `Pressable` and half by the chip's own handler. On a DEVICE none of it runs: React Native delivers no key events to a `View`, so a chip there is pressed and removed by touch.; MUI restyles the leading icon ELEMENT through a class — 24px, 18px when small, and `inherit` ink on a coloured chip. A native renderer cannot restyle an arbitrary node, so the slot carries MUI's margins and the glyph keeps the size and colour it was given.; An `avatarSrc` is drawn as a round `Image` at MUI's 24px (18px small) box; MUI's own `Avatar` additionally shows an initials fallback and repaints itself in `primary.dark`/`secondary.dark` for those two colours.; MUI's `transition: background-color, box-shadow` and this package's `all 0.2s cubic-bezier(0.4, 0, 0.2, 1)` have no equivalent: a colour change is drawn immediately.; A keyboard activation (Space on a selectable chip, Delete on a deletable one) fires `onClick` and `onDelete` but not `onPress`: it only exists under react-native-web, where the chip synthesizes the activation `Pressable` will not, and so has no `GestureResponderEvent` to pass. A press on a device fires both. |
@@ -0,0 +1,20 @@
1
+ import {
2
+ AlertContent
3
+ } from "../../../../chunk-IVI574Y5.js";
4
+ import "../../../../chunk-L7VH6IMR.js";
5
+ import "../../../../chunk-JNVUB2D4.js";
6
+ import "../../../../chunk-2FBGDSGC.js";
7
+ import "../../../../chunk-VBP46YP4.js";
8
+ import "../../../../chunk-44BD7SFH.js";
9
+ import "../../../../chunk-AG66JBNH.js";
10
+ import "../../../../chunk-FZXKH2ZT.js";
11
+ import "../../../../chunk-26X4CZVR.js";
12
+ import "../../../../chunk-O6MJWHU5.js";
13
+ import "../../../../chunk-F5H2ZXST.js";
14
+ import "../../../../chunk-N3GAFIXG.js";
15
+ import "../../../../chunk-YKCAJ2TN.js";
16
+ import "../../../../chunk-PZ5AY32C.js";
17
+ export {
18
+ AlertContent
19
+ };
20
+ //# sourceMappingURL=Alert.content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,10 +1,12 @@
1
1
  import {
2
2
  ALERT_ONLY_PROPS,
3
3
  Alert
4
- } from "../../../../chunk-DQJFCVXW.js";
5
- import "../../../../chunk-JYAXTRNH.js";
4
+ } from "../../../../chunk-ZSCKXOKE.js";
5
+ import "../../../../chunk-CCJJTLF7.js";
6
+ import "../../../../chunk-QXUXO22M.js";
7
+ import "../../../../chunk-IVI574Y5.js";
6
8
  import "../../../../chunk-L7VH6IMR.js";
7
- import "../../../../chunk-3LHZCVGM.js";
9
+ import "../../../../chunk-JNVUB2D4.js";
8
10
  import "../../../../chunk-TYJR4GOF.js";
9
11
  import "../../../../chunk-2FBGDSGC.js";
10
12
  import "../../../../chunk-VBP46YP4.js";
@@ -26,6 +26,7 @@ import {
26
26
  SEMANTIC_SURFACE,
27
27
  SEMANTIC_VARIANTS,
28
28
  TITLE,
29
+ TITLE_ICON,
29
30
  alertPalette,
30
31
  alertSurface,
31
32
  glassSurface,
@@ -33,7 +34,7 @@ import {
33
34
  gradientSurface,
34
35
  seconds,
35
36
  semanticSurface
36
- } from "../../../../chunk-3LHZCVGM.js";
37
+ } from "../../../../chunk-JNVUB2D4.js";
37
38
  import "../../../../chunk-2FBGDSGC.js";
38
39
  import "../../../../chunk-VBP46YP4.js";
39
40
  import "../../../../chunk-44BD7SFH.js";
@@ -72,6 +73,7 @@ export {
72
73
  SEMANTIC_SURFACE,
73
74
  SEMANTIC_VARIANTS,
74
75
  TITLE,
76
+ TITLE_ICON,
75
77
  alertPalette,
76
78
  alertSurface,
77
79
  glassSurface,
@@ -0,0 +1,8 @@
1
+ import {
2
+ resolveIconPlacement
3
+ } from "../../../../chunk-QXUXO22M.js";
4
+ import "../../../../chunk-PZ5AY32C.js";
5
+ export {
6
+ resolveIconPlacement
7
+ };
8
+ //# sourceMappingURL=Alert.placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -8,9 +8,9 @@ import {
8
8
  iconRotate,
9
9
  pulseAnimation,
10
10
  shimmerAnimation
11
- } from "../../../../chunk-JYAXTRNH.js";
11
+ } from "../../../../chunk-CCJJTLF7.js";
12
12
  import "../../../../chunk-L7VH6IMR.js";
13
- import "../../../../chunk-3LHZCVGM.js";
13
+ import "../../../../chunk-JNVUB2D4.js";
14
14
  import "../../../../chunk-2FBGDSGC.js";
15
15
  import "../../../../chunk-VBP46YP4.js";
16
16
  import "../../../../chunk-44BD7SFH.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Banner
3
- } from "../../../../chunk-ZBOGZLX3.js";
4
- import "../../../../chunk-44AXT2SN.js";
5
- import "../../../../chunk-3LHZCVGM.js";
3
+ } from "../../../../chunk-T2KONJ45.js";
4
+ import "../../../../chunk-QZX43FIC.js";
5
+ import "../../../../chunk-JNVUB2D4.js";
6
6
  import "../../../../chunk-2FBGDSGC.js";
7
7
  import "../../../../chunk-VBP46YP4.js";
8
8
  import "../../../../chunk-44BD7SFH.js";
@@ -4,8 +4,8 @@ import {
4
4
  bannerPointerStates,
5
5
  fadeInSlide,
6
6
  getVariantColor
7
- } from "../../../../chunk-44AXT2SN.js";
8
- import "../../../../chunk-3LHZCVGM.js";
7
+ } from "../../../../chunk-QZX43FIC.js";
8
+ import "../../../../chunk-JNVUB2D4.js";
9
9
  import "../../../../chunk-2FBGDSGC.js";
10
10
  import "../../../../chunk-VBP46YP4.js";
11
11
  import "../../../../chunk-44BD7SFH.js";
@@ -2,12 +2,14 @@
2
2
  import {
3
3
  CardActionsProvider,
4
4
  useCardActions
5
- } from "../../../../chunk-LY7PBZ3Z.js";
5
+ } from "../../../../chunk-UFNXYOHZ.js";
6
6
  import "../../../../chunk-NUGT7LMR.js";
7
- import "../../../../chunk-DQJFCVXW.js";
8
- import "../../../../chunk-JYAXTRNH.js";
7
+ import "../../../../chunk-ZSCKXOKE.js";
8
+ import "../../../../chunk-CCJJTLF7.js";
9
+ import "../../../../chunk-QXUXO22M.js";
10
+ import "../../../../chunk-IVI574Y5.js";
9
11
  import "../../../../chunk-L7VH6IMR.js";
10
- import "../../../../chunk-3LHZCVGM.js";
12
+ import "../../../../chunk-JNVUB2D4.js";
11
13
  import "../../../../chunk-TYJR4GOF.js";
12
14
  import "../../../../chunk-2FBGDSGC.js";
13
15
  import "../../../../chunk-VBP46YP4.js";
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import {
3
3
  useRemoveConfirm
4
- } from "../../../../chunk-3VLVLZ6W.js";
5
- import "../../../../chunk-LY7PBZ3Z.js";
4
+ } from "../../../../chunk-B34WHRKH.js";
5
+ import "../../../../chunk-UFNXYOHZ.js";
6
6
  import "../../../../chunk-XCBQXSTR.js";
7
7
  import "../../../../chunk-NDQJDA7O.js";
8
8
  import "../../../../chunk-QBH36OBQ.js";
@@ -12,13 +12,15 @@ import "../../../../chunk-EMYESBIT.js";
12
12
  import "../../../../chunk-LZRVUOMU.js";
13
13
  import "../../../../chunk-EEB66IVH.js";
14
14
  import "../../../../chunk-NUGT7LMR.js";
15
- import "../../../../chunk-DQJFCVXW.js";
16
- import "../../../../chunk-JYAXTRNH.js";
15
+ import "../../../../chunk-ZSCKXOKE.js";
16
+ import "../../../../chunk-CCJJTLF7.js";
17
+ import "../../../../chunk-QXUXO22M.js";
18
+ import "../../../../chunk-IVI574Y5.js";
17
19
  import "../../../../chunk-L7VH6IMR.js";
18
20
  import "../../../../chunk-2IBFEHIX.js";
19
21
  import "../../../../chunk-RZCXYKY4.js";
20
22
  import "../../../../chunk-BGTG7G54.js";
21
- import "../../../../chunk-3LHZCVGM.js";
23
+ import "../../../../chunk-JNVUB2D4.js";
22
24
  import "../../../../chunk-BA4RHQ3B.js";
23
25
  import "../../../../chunk-364NH2NY.js";
24
26
  import "../../../../chunk-PPEHBI5O.js";
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  DataViewsTableBase
4
- } from "../../../../chunk-52CLMR47.js";
4
+ } from "../../../../chunk-ENXGWNCX.js";
5
5
  import "../../../../chunk-VWVA74JY.js";
6
6
  import "../../../../chunk-MA6ENJDP.js";
7
7
  import "../../../../chunk-ZOLAYP2D.js";
@@ -30,7 +30,7 @@ import "../../../../chunk-FJ3UZ4RC.js";
30
30
  import "../../../../chunk-7D7CJRL7.js";
31
31
  import "../../../../chunk-GCZJH4XL.js";
32
32
  import "../../../../chunk-CBOB5AV6.js";
33
- import "../../../../chunk-ERI6JC4M.js";
33
+ import "../../../../chunk-X2SJJZFH.js";
34
34
  import "../../../../chunk-BF3SGOWT.js";
35
35
  import "../../../../chunk-LBEZ7A3F.js";
36
36
  import "../../../../chunk-5M4TYFR3.js";
@@ -151,13 +151,15 @@ import "../../../../chunk-ZFXTRPQO.js";
151
151
  import "../../../../chunk-ICDAYOJ6.js";
152
152
  import "../../../../chunk-G3E66C6J.js";
153
153
  import "../../../../chunk-NUGT7LMR.js";
154
- import "../../../../chunk-DQJFCVXW.js";
155
- import "../../../../chunk-JYAXTRNH.js";
154
+ import "../../../../chunk-ZSCKXOKE.js";
155
+ import "../../../../chunk-CCJJTLF7.js";
156
+ import "../../../../chunk-QXUXO22M.js";
157
+ import "../../../../chunk-IVI574Y5.js";
156
158
  import "../../../../chunk-L7VH6IMR.js";
157
159
  import "../../../../chunk-2IBFEHIX.js";
158
160
  import "../../../../chunk-RZCXYKY4.js";
159
161
  import "../../../../chunk-BGTG7G54.js";
160
- import "../../../../chunk-3LHZCVGM.js";
162
+ import "../../../../chunk-JNVUB2D4.js";
161
163
  import "../../../../chunk-6DPAWXZ3.js";
162
164
  import "../../../../chunk-WEBEOBN5.js";
163
165
  import "../../../../chunk-VUHLNYAE.js";
@@ -3,7 +3,7 @@ import {
3
3
  ViewDialogs,
4
4
  ViewMutationErrorAlert,
5
5
  ViewsMenuSlot
6
- } from "../../../../chunk-ERI6JC4M.js";
6
+ } from "../../../../chunk-X2SJJZFH.js";
7
7
  import "../../../../chunk-BF3SGOWT.js";
8
8
  import "../../../../chunk-LBEZ7A3F.js";
9
9
  import "../../../../chunk-5M4TYFR3.js";
@@ -47,13 +47,15 @@ import "../../../../chunk-AL5E624U.js";
47
47
  import "../../../../chunk-GYXUCS37.js";
48
48
  import "../../../../chunk-LV7LSPBF.js";
49
49
  import "../../../../chunk-NUGT7LMR.js";
50
- import "../../../../chunk-DQJFCVXW.js";
51
- import "../../../../chunk-JYAXTRNH.js";
50
+ import "../../../../chunk-ZSCKXOKE.js";
51
+ import "../../../../chunk-CCJJTLF7.js";
52
+ import "../../../../chunk-QXUXO22M.js";
53
+ import "../../../../chunk-IVI574Y5.js";
52
54
  import "../../../../chunk-L7VH6IMR.js";
53
55
  import "../../../../chunk-2IBFEHIX.js";
54
56
  import "../../../../chunk-RZCXYKY4.js";
55
57
  import "../../../../chunk-BGTG7G54.js";
56
- import "../../../../chunk-3LHZCVGM.js";
58
+ import "../../../../chunk-JNVUB2D4.js";
57
59
  import "../../../../chunk-6DPAWXZ3.js";
58
60
  import "../../../../chunk-WEBEOBN5.js";
59
61
  import "../../../../chunk-VUHLNYAE.js";
@@ -191,8 +191,10 @@ import "../../../chunk-MWFSIB6K.js";
191
191
  import "../../../chunk-NUGT7LMR.js";
192
192
  import {
193
193
  Alert
194
- } from "../../../chunk-DQJFCVXW.js";
195
- import "../../../chunk-JYAXTRNH.js";
194
+ } from "../../../chunk-ZSCKXOKE.js";
195
+ import "../../../chunk-CCJJTLF7.js";
196
+ import "../../../chunk-QXUXO22M.js";
197
+ import "../../../chunk-IVI574Y5.js";
196
198
  import "../../../chunk-L7VH6IMR.js";
197
199
  import "../../../chunk-2IBFEHIX.js";
198
200
  import {
@@ -210,9 +212,9 @@ import "../../../chunk-3UIDKLML.js";
210
212
  import "../../../chunk-PYC4CWCQ.js";
211
213
  import {
212
214
  Banner
213
- } from "../../../chunk-ZBOGZLX3.js";
214
- import "../../../chunk-44AXT2SN.js";
215
- import "../../../chunk-3LHZCVGM.js";
215
+ } from "../../../chunk-T2KONJ45.js";
216
+ import "../../../chunk-QZX43FIC.js";
217
+ import "../../../chunk-JNVUB2D4.js";
216
218
  import "../../../chunk-5KLSLD72.js";
217
219
  import {
218
220
  SpecChart
@@ -1,12 +1,14 @@
1
1
  import {
2
2
  NotificationStatusNotice
3
- } from "../../../../chunk-REEV7CLC.js";
3
+ } from "../../../../chunk-QDG6V7OC.js";
4
4
  import "../../../../chunk-55FFONIV.js";
5
5
  import "../../../../chunk-L7BRU4UF.js";
6
- import "../../../../chunk-DQJFCVXW.js";
7
- import "../../../../chunk-JYAXTRNH.js";
6
+ import "../../../../chunk-ZSCKXOKE.js";
7
+ import "../../../../chunk-CCJJTLF7.js";
8
+ import "../../../../chunk-QXUXO22M.js";
9
+ import "../../../../chunk-IVI574Y5.js";
8
10
  import "../../../../chunk-L7VH6IMR.js";
9
- import "../../../../chunk-3LHZCVGM.js";
11
+ import "../../../../chunk-JNVUB2D4.js";
10
12
  import "../../../../chunk-364NH2NY.js";
11
13
  import "../../../../chunk-PPEHBI5O.js";
12
14
  import "../../../../chunk-G2FUZALJ.js";
@@ -23,7 +23,7 @@ import "../../../chunk-33XGVCAF.js";
23
23
  import "../../../chunk-JQRKXMSH.js";
24
24
  import {
25
25
  NotificationStatusNotice
26
- } from "../../../chunk-REEV7CLC.js";
26
+ } from "../../../chunk-QDG6V7OC.js";
27
27
  import "../../../chunk-55FFONIV.js";
28
28
  import {
29
29
  detectNotificationBrowser,
@@ -81,13 +81,15 @@ import {
81
81
  ModalStackProvider,
82
82
  useModalStack
83
83
  } from "../../../chunk-JZRSHDNY.js";
84
- import "../../../chunk-DQJFCVXW.js";
85
- import "../../../chunk-JYAXTRNH.js";
84
+ import "../../../chunk-ZSCKXOKE.js";
85
+ import "../../../chunk-CCJJTLF7.js";
86
+ import "../../../chunk-QXUXO22M.js";
87
+ import "../../../chunk-IVI574Y5.js";
86
88
  import "../../../chunk-L7VH6IMR.js";
87
89
  import "../../../chunk-2IBFEHIX.js";
88
90
  import "../../../chunk-RZCXYKY4.js";
89
91
  import "../../../chunk-BGTG7G54.js";
90
- import "../../../chunk-3LHZCVGM.js";
92
+ import "../../../chunk-JNVUB2D4.js";
91
93
  import "../../../chunk-BA4RHQ3B.js";
92
94
  import "../../../chunk-364NH2NY.js";
93
95
  import "../../../chunk-PPEHBI5O.js";
@@ -428,7 +428,7 @@ import "../../chunk-33XGVCAF.js";
428
428
  import "../../chunk-JQRKXMSH.js";
429
429
  import {
430
430
  NotificationStatusNotice
431
- } from "../../chunk-REEV7CLC.js";
431
+ } from "../../chunk-QDG6V7OC.js";
432
432
  import "../../chunk-55FFONIV.js";
433
433
  import {
434
434
  detectNotificationBrowser,
@@ -759,8 +759,10 @@ import "../../chunk-MWFSIB6K.js";
759
759
  import "../../chunk-NUGT7LMR.js";
760
760
  import {
761
761
  Alert
762
- } from "../../chunk-DQJFCVXW.js";
763
- import "../../chunk-JYAXTRNH.js";
762
+ } from "../../chunk-ZSCKXOKE.js";
763
+ import "../../chunk-CCJJTLF7.js";
764
+ import "../../chunk-QXUXO22M.js";
765
+ import "../../chunk-IVI574Y5.js";
764
766
  import "../../chunk-L7VH6IMR.js";
765
767
  import "../../chunk-2IBFEHIX.js";
766
768
  import {
@@ -779,9 +781,9 @@ import "../../chunk-3UIDKLML.js";
779
781
  import "../../chunk-PYC4CWCQ.js";
780
782
  import {
781
783
  Banner
782
- } from "../../chunk-ZBOGZLX3.js";
783
- import "../../chunk-44AXT2SN.js";
784
- import "../../chunk-3LHZCVGM.js";
784
+ } from "../../chunk-T2KONJ45.js";
785
+ import "../../chunk-QZX43FIC.js";
786
+ import "../../chunk-JNVUB2D4.js";
785
787
  import "../../chunk-PGGGKYWG.js";
786
788
  import "../../chunk-YEKPQAOW.js";
787
789
  import "../../chunk-TB4UTV25.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useCardActions
3
- } from "./chunk-LY7PBZ3Z.js";
3
+ } from "./chunk-UFNXYOHZ.js";
4
4
  import {
5
5
  ConfirmActionDialog
6
6
  } from "./chunk-LTLOZQPP.js";
@@ -50,4 +50,4 @@ function useRemoveConfirm({
50
50
  export {
51
51
  useRemoveConfirm
52
52
  };
53
- //# sourceMappingURL=chunk-3VLVLZ6W.js.map
53
+ //# sourceMappingURL=chunk-B34WHRKH.js.map
@@ -20,7 +20,7 @@ import {
20
20
  SEMANTIC_SURFACE,
21
21
  SEMANTIC_VARIANTS,
22
22
  seconds
23
- } from "./chunk-3LHZCVGM.js";
23
+ } from "./chunk-JNVUB2D4.js";
24
24
  import {
25
25
  sheen,
26
26
  softNeutral
@@ -267,4 +267,4 @@ export {
267
267
  alertVariantStyles,
268
268
  alertEmphasisStyles
269
269
  };
270
- //# sourceMappingURL=chunk-JYAXTRNH.js.map
270
+ //# sourceMappingURL=chunk-CCJJTLF7.js.map
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  ViewDialogs,
12
12
  ViewMutationErrorAlert
13
- } from "./chunk-ERI6JC4M.js";
13
+ } from "./chunk-X2SJJZFH.js";
14
14
  import {
15
15
  useUrlEchoGuard,
16
16
  useUrlSyncState
@@ -166,4 +166,4 @@ function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
166
166
  export {
167
167
  DataViewsTableBase
168
168
  };
169
- //# sourceMappingURL=chunk-52CLMR47.js.map
169
+ //# sourceMappingURL=chunk-ENXGWNCX.js.map
@@ -0,0 +1,73 @@
1
+ import {
2
+ testIdFor
3
+ } from "./chunk-L7VH6IMR.js";
4
+ import {
5
+ DESCRIPTION,
6
+ ICON_SLOT,
7
+ TITLE,
8
+ TITLE_ICON
9
+ } from "./chunk-JNVUB2D4.js";
10
+ import {
11
+ sxRem
12
+ } from "./chunk-YKCAJ2TN.js";
13
+
14
+ // src/components/data-display/Alert/Alert.content.tsx
15
+ import AlertTitle from "@mui/material/AlertTitle/index.js";
16
+ import Box from "@mui/material/Box/index.js";
17
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
18
+ var BREAK_WORDS = {
19
+ wordWrap: "break-word",
20
+ overflowWrap: "break-word",
21
+ wordBreak: "break-word"
22
+ };
23
+ var AlertContent = ({ title, description, titleIcon, dataTestId, children }) => {
24
+ const heading = title ? /* @__PURE__ */ jsx(
25
+ AlertTitle,
26
+ {
27
+ "data-testid": testIdFor(dataTestId, "title"),
28
+ sx: {
29
+ fontWeight: TITLE.fontWeight,
30
+ fontSize: sxRem(TITLE.fontSize),
31
+ // On the icon's row the title is centred against the glyph, so MUI's
32
+ // 2px lift would only push it off that centre.
33
+ ...titleIcon ? { margin: 0 } : { marginBottom: description ? TITLE.marginBottomUnits : 0 },
34
+ ...BREAK_WORDS
35
+ },
36
+ children: title
37
+ }
38
+ ) : null;
39
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
40
+ titleIcon && heading ? /* @__PURE__ */ jsxs(
41
+ Box,
42
+ {
43
+ "data-testid": testIdFor(dataTestId, "title-row"),
44
+ sx: {
45
+ display: "flex",
46
+ alignItems: "center",
47
+ gap: TITLE_ICON.gapUnits,
48
+ marginBottom: description ? TITLE.marginBottomUnits : 0,
49
+ "& > span": { display: "flex", flex: "none", fontSize: sxRem(ICON_SLOT.size) }
50
+ },
51
+ children: [
52
+ titleIcon,
53
+ heading
54
+ ]
55
+ }
56
+ ) : heading,
57
+ description && /* @__PURE__ */ jsx(
58
+ Box,
59
+ {
60
+ component: "div",
61
+ "data-testid": testIdFor(dataTestId, "message"),
62
+ sx: { opacity: DESCRIPTION.opacity, fontSize: sxRem(DESCRIPTION.fontSize), ...BREAK_WORDS },
63
+ children: description
64
+ }
65
+ ),
66
+ children
67
+ ] });
68
+ };
69
+
70
+ export {
71
+ AlertContent
72
+ };
73
+ //# sourceMappingURL=chunk-IVI574Y5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/Alert/Alert.content.tsx"],"sourcesContent":["import AlertTitle from '@mui/material/AlertTitle/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport React from 'react';\n\nimport { sxRem } from '../../../tokens/relative';\n\nimport { testIdFor } from './Alert.helpers';\nimport { DESCRIPTION, ICON_SLOT, TITLE, TITLE_ICON } from './Alert.metrics';\nimport type { AlertProps } from './Alert.types';\n\nconst BREAK_WORDS = {\n wordWrap: 'break-word',\n overflowWrap: 'break-word',\n wordBreak: 'break-word',\n} as const;\n\n/**\n * The message column: title, description, then whatever the caller put inside.\n *\n * `titleIcon` is the icon when it sits on the title's line\n * (`iconPlacement: 'title'`, see `Alert.placement.ts`). The title then shares\n * a row with it, and the description below is a sibling of that row — so it\n * starts at the column's own edge rather than under the title's first letter.\n */\nexport const AlertContent: React.FC<{\n title?: AlertProps['title'];\n description?: AlertProps['description'];\n titleIcon?: React.ReactNode;\n dataTestId?: string;\n children?: React.ReactNode;\n}> = ({ title, description, titleIcon, dataTestId, children }) => {\n const heading = title ? (\n <AlertTitle\n data-testid={testIdFor(dataTestId, 'title')}\n sx={{\n fontWeight: TITLE.fontWeight,\n fontSize: sxRem(TITLE.fontSize),\n // On the icon's row the title is centred against the glyph, so MUI's\n // 2px lift would only push it off that centre.\n ...(titleIcon ? { margin: 0 } : { marginBottom: description ? TITLE.marginBottomUnits : 0 }),\n ...BREAK_WORDS,\n }}\n >\n {title}\n </AlertTitle>\n ) : null;\n\n return (\n <>\n {titleIcon && heading ? (\n <Box\n data-testid={testIdFor(dataTestId, 'title-row')}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: TITLE_ICON.gapUnits,\n marginBottom: description ? TITLE.marginBottomUnits : 0,\n '& > span': { display: 'flex', flex: 'none', fontSize: sxRem(ICON_SLOT.size) },\n }}\n >\n {titleIcon}\n {heading}\n </Box>\n ) : (\n heading\n )}\n {description && (\n <Box\n component=\"div\"\n data-testid={testIdFor(dataTestId, 'message')}\n sx={{ opacity: DESCRIPTION.opacity, fontSize: sxRem(DESCRIPTION.fontSize), ...BREAK_WORDS }}\n >\n {description}\n </Box>\n )}\n {children}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,gBAAgB;AACvB,OAAO,SAAS;AA+BZ,SAgBA,UAhBA,KAkBI,YAlBJ;AAtBJ,IAAM,cAAc;AAAA,EAClB,UAAU;AAAA,EACV,cAAc;AAAA,EACd,WAAW;AACb;AAUO,IAAM,eAMR,CAAC,EAAE,OAAO,aAAa,WAAW,YAAY,SAAS,MAAM;AAChE,QAAM,UAAU,QACd;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,UAAU,YAAY,OAAO;AAAA,MAC1C,IAAI;AAAA,QACF,YAAY,MAAM;AAAA,QAClB,UAAU,MAAM,MAAM,QAAQ;AAAA;AAAA;AAAA,QAG9B,GAAI,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,cAAc,MAAM,oBAAoB,EAAE;AAAA,QAC1F,GAAG;AAAA,MACL;AAAA,MAEC;AAAA;AAAA,EACH,IACE;AAEJ,SACE,iCACG;AAAA,iBAAa,UACZ;AAAA,MAAC;AAAA;AAAA,QACC,eAAa,UAAU,YAAY,WAAW;AAAA,QAC9C,IAAI;AAAA,UACF,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK,WAAW;AAAA,UAChB,cAAc,cAAc,MAAM,oBAAoB;AAAA,UACtD,YAAY,EAAE,SAAS,QAAQ,MAAM,QAAQ,UAAU,MAAM,UAAU,IAAI,EAAE;AAAA,QAC/E;AAAA,QAEC;AAAA;AAAA,UACA;AAAA;AAAA;AAAA,IACH,IAEA;AAAA,IAED,eACC;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,eAAa,UAAU,YAAY,SAAS;AAAA,QAC5C,IAAI,EAAE,SAAS,YAAY,SAAS,UAAU,MAAM,YAAY,QAAQ,GAAG,GAAG,YAAY;AAAA,QAEzF;AAAA;AAAA,IACH;AAAA,IAED;AAAA,KACH;AAEJ;","names":[]}
@@ -25,6 +25,7 @@ var MESSAGE_LINE_HEIGHT = 1.5;
25
25
  var MESSAGE_BUTTON = { marginTopUnits: 0.5, borderAlpha: 0.45 };
26
26
  var TITLE = { fontSize: 16.8, fontWeight: 600, marginTop: -2, marginBottomUnits: 0.5 };
27
27
  var DESCRIPTION = { fontSize: 14.8, opacity: 0.9 };
28
+ var TITLE_ICON = { gapUnits: 1.25 };
28
29
  var ICON_SLOT = { size: 22, opacity: 0.9, marginRightUnits: 1.75, paddingTopUnits: 0.25, paddingBottom: 7 };
29
30
  var ACTION_SLOT = { paddingLeftUnits: 2, paddingTop: 4, marginRight: -8 };
30
31
  var CLOSE_BUTTON = { padding: 5, iconSize: 18, opacity: 0.7, washAlpha: 0.1 };
@@ -112,6 +113,7 @@ export {
112
113
  MESSAGE_BUTTON,
113
114
  TITLE,
114
115
  DESCRIPTION,
116
+ TITLE_ICON,
115
117
  ICON_SLOT,
116
118
  ACTION_SLOT,
117
119
  CLOSE_BUTTON,
@@ -133,4 +135,4 @@ export {
133
135
  gradientSurface,
134
136
  alertSurface
135
137
  };
136
- //# sourceMappingURL=chunk-3LHZCVGM.js.map
138
+ //# sourceMappingURL=chunk-JNVUB2D4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/Alert/Alert.metrics.ts"],"sourcesContent":["import type { AlertVariant } from './Alert.base';\nimport { alpha, darken, lighten } from '../../../tokens/color';\nimport { NEUTRAL_RAMP } from '../../../tokens/ink.core';\nimport { contrastText, type UiGreyStep, type UiTheme } from '../../../tokens/theme';\n\n/**\n * THE NUMBERS BOTH `Alert` RENDERERS DRAW WITH.\n *\n * `Alert.styles.tsx` / `Alert.tsx` (MUI) and `Alert.native.tsx` (React\n * Native) read this one table. Spacing is in SPACING UNITS where the web\n * writes `theme.spacing(n)`; durations are ms (the web turns them into `s`\n * through {@link seconds} so its emitted CSS is byte-for-byte what it was);\n * everything else is px, a ratio or an alpha. The hover, active and focus\n * numbers are here too although only the DOM can honour them — a number the\n * web draws with belongs in the table whether or not native can reach it.\n */\n\n/** The root: 12px corners, 14px 16px of padding, one 300ms curve for everything. */\nexport const ALERT_RADIUS_UNITS = 1.5;\nexport const ALERT_PADDING_UNITS = { vertical: 1.75, horizontal: 2 } as const;\nexport const ALERT_TRANSITION_MS = 300;\nexport const ALERT_EASING = 'cubic-bezier(0.4, 0, 0.2, 1)';\n\n/** Mount: the web's `fadeInScale` keyframes and the icon's `iconRotate`. */\nexport const FADE_IN = { ms: 300, scale: 0.95, lift: 10 } as const;\nexport const ICON_SPIN = { ms: 600, from: 0.8, mid: 1.1 } as const;\n/** Dismiss: MUI `Collapse` runs 300ms; `onClose` fires 200ms in. */\nexport const COLLAPSE_MS = 300;\nexport const CLOSE_DELAY_MS = 200;\n\n/** The message column: 8px between title, description and children; 0.95rem body on 1.5. */\nexport const MESSAGE_GAP_UNITS = 1;\nexport const MESSAGE_FONT_SIZE = 15.2;\nexport const MESSAGE_LINE_HEIGHT = 1.5;\n/** A control inside the message gets an edge: 4px above, a hairline at 0.45 of the hue. */\nexport const MESSAGE_BUTTON = { marginTopUnits: 0.5, borderAlpha: 0.45 } as const;\n\n/** The title: 1.05rem at 600; MUI's `AlertTitle` lifts it 2px; 4px below it when a description follows. */\nexport const TITLE = { fontSize: 16.8, fontWeight: 600, marginTop: -2, marginBottomUnits: 0.5 } as const;\n/** The description: 0.925rem, slightly faded. */\nexport const DESCRIPTION = { fontSize: 14.8, opacity: 0.9 } as const;\n\n/** The icon on the title's line (`iconPlacement: 'title'`): 10px from the title. */\nexport const TITLE_ICON = { gapUnits: 1.25 } as const;\n/** The icon slot: MUI's 22px glyph at 0.9, 14px from the words, 2px down (MUI's 7px stays below). */\nexport const ICON_SLOT = { size: 22, opacity: 0.9, marginRightUnits: 1.75, paddingTopUnits: 0.25, paddingBottom: 7 } as const;\n/** The action slot: MUI's `4px 0 0 16px` with the 16px ours, pushed right, 8px into the padding. */\nexport const ACTION_SLOT = { paddingLeftUnits: 2, paddingTop: 4, marginRight: -8 } as const;\n/** The close button: MUI's small `IconButton` (5px padding, 18px glyph) at 0.7. */\nexport const CLOSE_BUTTON = { padding: 5, iconSize: 18, opacity: 0.7, washAlpha: 0.1 } as const;\n\n/**\n * A semantic Alert's surface and ink: an OPAQUE tint of the hue with a dark\n * ink of the same hue — MUI's own `standard` recipe, at its ratios. See\n * `semanticSurface` in `Alert.styles.tsx` for why not `alpha(main, 0.1)`.\n */\nexport const SEMANTIC_SURFACE = { tint: { light: 0.9, dark: 0.8 }, ink: 0.6, borderAlpha: 0.35 } as const;\n/** `glass`: 85% paper under a 20px blur, a 0.4 divider hairline. */\nexport const GLASS = { backgroundAlpha: 0.85, borderAlpha: 0.4, blur: 20, saturatePercent: 180 } as const;\n/**\n * `gradient`: light→dark at 0.9 along 135°, a 0.2 white shimmer sweeping 1000px every 3s.\n *\n * It carries no hover of its own, and that is load-bearing rather than an\n * omission. `alertVariantStyles` is spread AFTER the root's `'&:hover'` in the\n * same object literal, so a second `'&:hover'` key does not merge with it — it\n * REPLACES it. While this variant had one, `gradient` was the only alert that\n * brightened on hover while every other variant darkened, and the only one to\n * lose the shimmer reveal the root's hover performs.\n */\nexport const GRADIENT = {\n angleDeg: 135,\n stopAlpha: 0.9,\n shimmerAlpha: 0.2,\n shimmerMs: 3000,\n shimmerTravel: 1000,\n} as const;\n\n/** Emphasis: the glow's shadow and brightness, the pulse's wash. */\nexport const GLOW = { blur: 20, spread: 5, alpha: 0.3, brightness: 1.05 } as const;\nexport const PULSE = { alpha: 0.2, ms: 2000, spread: 10 } as const;\n\n/**\n * Pointer states — DOM only, kept so the web derives them.\n *\n * HOVER and ACTIVE carry NO geometry, and that is the point rather than an\n * omission. They used to lift the card 3px, scale it 1.01, grow a 20px shadow\n * and spin the icon 10deg at 1.15 — four things moving at once on a surface\n * that is not a control, which made a page of alerts twitch under the pointer.\n *\n * Both are a TINT now: a flat inset layer over the surface. Two mechanisms\n * came before it and each failed on a case the next had to fix. Dropping the\n * element's `opacity` composites toward the PAGE, so it inverted the hover on\n * a light tint (L* 95.0 idle, 89.1 hovered, 91.1 pressed) and vanished on a\n * dark one. A `filter: brightness()` fixed the direction but is MULTIPLICATIVE,\n * so it moved a near-black `glass` by four counts (ΔE76 1.71, under the JND)\n * and Banner's 10%-alpha wash by ΔE76 0.44. A layer is additive: it reads the\n * same on an opaque tint, a translucent wash and a gradient, and because it\n * paints above the background and below the content the ink keeps its own\n * contrast.\n */\nexport const HOVER = { tintAlpha: 0.06 } as const;\n\n/**\n * The press: a 20% tint LAYER, eased back fast.\n *\n * The layer is the point. The first attempt dropped the whole element's\n * opacity, which composites toward the PAGE and so behaves differently on\n * every surface it is asked about. Measured: over a light page it made a light\n * tint LIGHTER (L* 95.0 idle, 89.1 hovered, 91.1 pressed), so pushing the\n * surface looked like the pointer leaving; over a dark page it landed back on\n * the idle surface (ΔE76 0.82 on `glass`); on `gradient` it washed white body\n * copy to 2.31:1, under AA; and it diluted the ink during a text-selection\n * drag. A `brightness()` step instead of it fixed the direction but not the\n * reach — a multiplier does nothing to a near-black `glass` in dark mode\n * (ΔE76 1.71) and nothing to Banner's 10%-alpha wash (ΔE76 0.44), because it\n * scales only what the element already paints.\n *\n * An inset shadow at 100vmax is a flat tint over the whole surface: ADDITIVE,\n * so it reads the same on an opaque tint, a translucent wash and a gradient;\n * painted above the background and below the content, so the ink keeps its\n * own contrast; and animatable, which `background-image` is not.\n *\n * `ms` is 250 and not the 1000 first asked for, and the reason is that ONE\n * property carries both states. CSS runs a transition from the DESTINATION\n * state's declaration, and entering hover and releasing a press share that\n * destination — so they cannot have different durations without a second\n * animatable property, and both free pseudo-elements are already spent on the\n * `gradient` shimmer and the `pulse` wash. At 1000ms the hover inherited the\n * second: crossing an alert in 300ms peaked at a ≈ 0.024, under the JND, and\n * for ~360ms the alert you had just LEFT was darker than the one under the\n * pointer. A fast press-return is the smaller loss, and it is the call the\n * product owner made when shown both.\n */\nexport const ACTIVE = { tintAlpha: 0.2, ms: 250 } as const;\n\nexport const FOCUS = { ringWidth: 2, ringAlpha: 1, offset: 2 } as const;\n\n/** `neutral` has no palette slot; the web has always drawn it from three greys. */\nexport const NEUTRAL_GREY: Record<'main' | 'light' | 'dark', UiGreyStep> = { main: 500, light: 300, dark: 700 };\n\n/** A duration as the CSS the web has always emitted: `2000` → `2s`, `300` → `0.3s`. */\nexport const seconds = (ms: number): string => `${ms / 1000}s`;\n\n/** The palette shape the web's `getColorFromTheme` returns — a main plus optional shades. */\nexport interface AlertPalette {\n main: string;\n light?: string;\n dark?: string;\n}\n\n/**\n * The renderer-free twin of the web's `getColorFromTheme`: a variant or\n * colour name to its palette, `neutral` from the greys, anything unknown\n * (`glass`, `gradient`) to `info`.\n */\nexport function alertPalette(theme: UiTheme, key: string | undefined): AlertPalette {\n switch (key) {\n case 'info':\n case 'success':\n case 'warning':\n case 'danger':\n case 'primary':\n case 'secondary':\n return theme.palette[key];\n case 'neutral':\n return {\n main: NEUTRAL_RAMP[NEUTRAL_GREY.main],\n light: NEUTRAL_RAMP[NEUTRAL_GREY.light],\n dark: NEUTRAL_RAMP[NEUTRAL_GREY.dark],\n };\n default:\n return theme.palette.info;\n }\n}\n\n/** What a variant paints: its fill, its ink, its hairline if any, and the colour of its glyph. */\nexport interface AlertSurface {\n backgroundColor: string;\n color: string;\n borderColor?: string;\n iconColor: string;\n}\n\nexport const SEMANTIC_VARIANTS: ReadonlySet<AlertVariant> = new Set(['info', 'success', 'warning', 'danger']);\n\n/** The opaque tint and same-hue ink, inverted for dark mode; the hairline keeps its alpha. */\nexport function semanticSurface(theme: UiTheme, palette: AlertPalette): AlertSurface {\n const dark = theme.mode === 'dark';\n return {\n backgroundColor: dark\n ? darken(palette.main, SEMANTIC_SURFACE.tint.dark)\n : lighten(palette.main, SEMANTIC_SURFACE.tint.light),\n color: dark ? lighten(palette.main, SEMANTIC_SURFACE.ink) : darken(palette.main, SEMANTIC_SURFACE.ink),\n borderColor: alpha(palette.main, SEMANTIC_SURFACE.borderAlpha),\n iconColor: palette.main,\n };\n}\n\nexport function glassSurface(theme: UiTheme): AlertSurface {\n return {\n backgroundColor: alpha(theme.palette.background.paper, GLASS.backgroundAlpha),\n color: theme.palette.text.primary,\n borderColor: alpha(theme.palette.divider, GLASS.borderAlpha),\n iconColor: theme.palette.primary.main,\n };\n}\n\n/** The gradient's two stops; a renderer with no gradient fill paints `from`. */\nexport function gradientStops(palette: AlertPalette): { from: string; to: string } {\n return {\n from: alpha(palette.light || palette.main, GRADIENT.stopAlpha),\n to: alpha(palette.dark || palette.main, GRADIENT.stopAlpha),\n };\n}\n\nexport function gradientSurface(palette: AlertPalette): AlertSurface {\n const ink = contrastText(palette.main);\n return { backgroundColor: gradientStops(palette).from, color: ink, iconColor: ink };\n}\n\n/** The surface for a variant, `glass` and `gradient` included. */\nexport function alertSurface(theme: UiTheme, variant: AlertVariant, palette: AlertPalette): AlertSurface {\n if (variant === 'glass') return glassSurface(theme);\n if (variant === 'gradient') return gradientSurface(palette);\n return semanticSurface(theme, palette);\n}\n"],"mappings":"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","names":[]}
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-L7BRU4UF.js";
9
9
  import {
10
10
  Alert
11
- } from "./chunk-DQJFCVXW.js";
11
+ } from "./chunk-ZSCKXOKE.js";
12
12
  import {
13
13
  Button
14
14
  } from "./chunk-364NH2NY.js";
@@ -106,4 +106,4 @@ NotificationStatusNotice.displayName = "NotificationStatusNotice";
106
106
  export {
107
107
  NotificationStatusNotice
108
108
  };
109
- //# sourceMappingURL=chunk-REEV7CLC.js.map
109
+ //# sourceMappingURL=chunk-QDG6V7OC.js.map
@@ -0,0 +1,9 @@
1
+ // src/components/data-display/Alert/Alert.placement.ts
2
+ function resolveIconPlacement(theme, stated) {
3
+ return stated ?? theme.uiAlert?.iconPlacement ?? "gutter";
4
+ }
5
+
6
+ export {
7
+ resolveIconPlacement
8
+ };
9
+ //# sourceMappingURL=chunk-QXUXO22M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/Alert/Alert.placement.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\n\n/**\n * WHERE THE ICON SITS — a choice the HOST makes once, in its theme.\n *\n * - `'gutter'` (the default, and what every alert did before this existed):\n * the icon has a column of its own, and the title and the description both\n * start to its right. A two-line description wraps inside that narrower\n * column and leaves an empty strip under the icon.\n * - `'title'`: the icon sits on the TITLE's line, and the description below\n * starts at the alert's own edge and uses the whole line.\n *\n * It is a theme value, like `uiSurfaces`, because it is a house style rather\n * than a per-call decision: a host that wants it wants it on every alert, and a\n * per-call prop would have to be spelled at each of them. The `iconPlacement`\n * prop still exists for the one call site that must differ, and wins.\n *\n * An alert with no title, or no icon, has no title line to put the icon on;\n * `'title'` then renders exactly as `'gutter'` does.\n */\nexport type AlertIconPlacement = 'gutter' | 'title';\n\n/** What a host may state about alerts, on its theme. */\nexport interface UiAlertTheme {\n iconPlacement?: AlertIconPlacement;\n}\n\ndeclare module '@mui/material/styles' {\n interface Theme {\n /** Alert layout the host states. See `Alert.placement.ts`. */\n uiAlert?: UiAlertTheme;\n }\n interface ThemeOptions {\n /** Alert layout, for every alert under this theme. See `Alert.placement.ts`. */\n uiAlert?: UiAlertTheme;\n }\n}\n\n/** The placement in force: the call site's, else the theme's, else `'gutter'`. */\nexport function resolveIconPlacement(\n theme: Theme,\n stated: AlertIconPlacement | undefined,\n): AlertIconPlacement {\n return stated ?? theme.uiAlert?.iconPlacement ?? 'gutter';\n}\n"],"mappings":";AAuCO,SAAS,qBACd,OACA,QACoB;AACpB,SAAO,UAAU,MAAM,SAAS,iBAAiB;AACnD;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ACTIVE,
3
3
  HOVER
4
- } from "./chunk-3LHZCVGM.js";
4
+ } from "./chunk-JNVUB2D4.js";
5
5
  import {
6
6
  modeInk
7
7
  } from "./chunk-XJAD6E3V.js";
@@ -140,4 +140,4 @@ export {
140
140
  bannerPointerStates,
141
141
  BANNER_TINT_S
142
142
  };
143
- //# sourceMappingURL=chunk-44AXT2SN.js.map
143
+ //# sourceMappingURL=chunk-QZX43FIC.js.map
@@ -4,10 +4,10 @@ import {
4
4
  bannerPointerStates,
5
5
  fadeInSlide,
6
6
  getVariantColor
7
- } from "./chunk-44AXT2SN.js";
7
+ } from "./chunk-QZX43FIC.js";
8
8
  import {
9
9
  FOCUS
10
- } from "./chunk-3LHZCVGM.js";
10
+ } from "./chunk-JNVUB2D4.js";
11
11
  import {
12
12
  rem
13
13
  } from "./chunk-YKCAJ2TN.js";
@@ -263,4 +263,4 @@ Banner.displayName = "Banner";
263
263
  export {
264
264
  Banner
265
265
  };
266
- //# sourceMappingURL=chunk-ZBOGZLX3.js.map
266
+ //# sourceMappingURL=chunk-T2KONJ45.js.map