@dbcdk/react-components 0.0.54 → 0.0.55

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.
@@ -1,7 +1,7 @@
1
1
  import type { JSX, ReactNode } from 'react';
2
2
  import type { Severity } from '../../constants/severity.types';
3
3
  import { CardMeta, CardMetaRow } from './components/CardMeta';
4
- type CardVariant = 'default' | 'subtle' | 'strong';
4
+ type CardVariant = 'default' | 'subtle';
5
5
  type CardSize = 'sm' | 'md' | 'lg';
6
6
  type CardImagePlacement = 'left' | 'right' | 'top';
7
7
  export interface CardProps {
@@ -19,8 +19,6 @@ function getVariantClass(variant, s) {
19
19
  switch (variant) {
20
20
  case 'subtle':
21
21
  return s.variantSubtle;
22
- case 'strong':
23
- return s.variantStrong;
24
22
  case 'default':
25
23
  default:
26
24
  return s.variantDefault;
@@ -31,11 +31,6 @@
31
31
  background-color: var(--card-bg-subtle, var(--color-bg-contextual-subtle));
32
32
  }
33
33
 
34
- .variantStrong {
35
- background-color: var(--card-bg-strong, var(--color-bg-surface-strong));
36
- color: var(--card-fg-on-strong, var(--color-fg-on-strong));
37
- }
38
-
39
34
  /* SIZE VARIANTS (define vars once; inner uses them) */
40
35
  .sm {
41
36
  --card-pad: var(--spacing-md);
@@ -95,15 +95,10 @@
95
95
  cursor: pointer;
96
96
  }
97
97
 
98
- .row + .row .interactive,
99
- .row + .row > .interactiveChild {
100
- box-shadow: inset 0 1px 0 var(--color-border-subtle);
101
- }
102
-
103
98
  /* Hover: support both cases (interactive element, or wrapper child) */
104
99
  .interactive:hover:not(.selected),
105
100
  .row:hover > .interactiveChild:not(.selected) {
106
- background-color: var(--color-bg-hover-subtle);
101
+ background-color: var(--color-bg-toolbar-hover);
107
102
  }
108
103
 
109
104
  /* Focus ring: support both cases */
@@ -134,6 +129,19 @@
134
129
  color: var(--color-fg-default);
135
130
  }
136
131
 
132
+ .selected:hover,
133
+ .interactive.selected:hover,
134
+ .interactive[aria-selected='true']:hover,
135
+ .row:hover > .interactiveChild.selected,
136
+ .row:hover > .interactiveChild[aria-selected='true'],
137
+ .active.selected,
138
+ .interactive.active.selected,
139
+ .interactive.active[aria-selected='true'],
140
+ .row > .interactiveChild.active.selected,
141
+ .row > .interactiveChild.active[aria-selected='true'] {
142
+ background-color: var(--color-bg-selected-hover);
143
+ }
144
+
137
145
  /* Checked (legacy support; kept in case any interactive element still uses aria-checked) */
138
146
  .interactive[aria-checked='true'],
139
147
  .row > .interactiveChild[aria-checked='true'] {
@@ -66,7 +66,8 @@ export const Popover = forwardRef(function Popover({ trigger: Trigger, children,
66
66
  setOpen(false);
67
67
  }, [setOpen]);
68
68
  const togglePopover = useCallback((e) => {
69
- triggerElRef.current = e.currentTarget;
69
+ var _a;
70
+ triggerElRef.current = (_a = containerRef.current) !== null && _a !== void 0 ? _a : e.currentTarget;
70
71
  if (isOpen)
71
72
  closePopover('trigger');
72
73
  else
@@ -86,11 +87,14 @@ export const Popover = forwardRef(function Popover({ trigger: Trigger, children,
86
87
  if (!triggerEl)
87
88
  return;
88
89
  const triggerRect = triggerEl.getBoundingClientRect();
90
+ const overlayWidthBuffer = 8;
89
91
  // Only compute a forced width when requested.
90
92
  let forcedWidthPx = null;
91
93
  if (matchTriggerWidth) {
92
94
  const minWidthPx = parseMinWidthPx(minWidth, triggerEl);
93
- forcedWidthPx = Math.max(triggerRect.width, minWidthPx || 0);
95
+ // Make the overlay slightly wider than the trigger so it reads as a
96
+ // floating layer instead of blending into adjacent form fields.
97
+ forcedWidthPx = Math.max(triggerRect.width + overlayWidthBuffer, minWidthPx || 0);
94
98
  setTriggerWidth(forcedWidthPx);
95
99
  }
96
100
  else {
@@ -154,15 +158,16 @@ export const Popover = forwardRef(function Popover({ trigger: Trigger, children,
154
158
  // eslint-disable-next-line react-hooks/exhaustive-deps
155
159
  }, [isOpen]);
156
160
  useEffect(() => {
157
- var _a;
161
+ var _a, _b;
158
162
  if (!isOpen)
159
163
  return;
160
164
  const content = contentRef.current;
161
165
  if (!content)
162
166
  return;
167
+ const triggerEl = (_a = triggerElRef.current) !== null && _a !== void 0 ? _a : containerRef.current;
163
168
  if (autoFocusContent) {
164
169
  const focusables = getFocusable(content);
165
- (_a = focusables[0]) === null || _a === void 0 ? void 0 : _a.focus();
170
+ (_b = focusables[0]) === null || _b === void 0 ? void 0 : _b.focus();
166
171
  }
167
172
  const handlePointerDownCapture = (e) => {
168
173
  const container = containerRef.current;
@@ -179,15 +184,24 @@ export const Popover = forwardRef(function Popover({ trigger: Trigger, children,
179
184
  closePopover('escape');
180
185
  };
181
186
  const handleReposition = () => computeAndSetPosition();
187
+ const resizeObserver = typeof ResizeObserver !== 'undefined'
188
+ ? new ResizeObserver(() => {
189
+ handleReposition();
190
+ })
191
+ : null;
182
192
  document.addEventListener('pointerdown', handlePointerDownCapture, true);
183
193
  document.addEventListener('keydown', handleEscape, true);
184
194
  window.addEventListener('resize', handleReposition);
185
195
  window.addEventListener('scroll', handleReposition, true);
196
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(content);
197
+ if (triggerEl)
198
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.observe(triggerEl);
186
199
  return () => {
187
200
  document.removeEventListener('pointerdown', handlePointerDownCapture, true);
188
201
  document.removeEventListener('keydown', handleEscape, true);
189
202
  window.removeEventListener('resize', handleReposition);
190
203
  window.removeEventListener('scroll', handleReposition, true);
204
+ resizeObserver === null || resizeObserver === void 0 ? void 0 : resizeObserver.disconnect();
191
205
  };
192
206
  }, [isOpen, closePopover, computeAndSetPosition, autoFocusContent]);
193
207
  useEffect(() => {
@@ -19,7 +19,9 @@
19
19
  padding: 0;
20
20
  z-index: var(--z-popover);
21
21
  overflow: auto;
22
- box-shadow: var(--shadow-md);
22
+ box-shadow:
23
+ 0 0 0 1px color-mix(in srgb, var(--color-border-subtle) 55%, transparent),
24
+ var(--shadow-lg);
23
25
  }
24
26
 
25
27
  .content[hidden] {
@@ -37,6 +37,10 @@
37
37
  border-left-color: var(--color-status-info-border);
38
38
  }
39
39
 
40
+ .brand {
41
+ border-left-color: var(--color-brand);
42
+ }
43
+
40
44
  .success {
41
45
  border-left-color: var(--color-status-success-border);
42
46
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbcdk/react-components",
3
- "version": "0.0.54",
3
+ "version": "0.0.55",
4
4
  "description": "Reusable React components for DBC projects",
5
5
  "license": "ISC",
6
6
  "author": "",