eidotter 0.40.2 → 0.41.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.
Files changed (104) hide show
  1. package/README.md +14 -6
  2. package/dist/components/Accordion/components/AccordionFill.js +1 -1
  3. package/dist/components/Accordion/components/Section.js +1 -1
  4. package/dist/components/Alert/components/Alert.js +3 -2
  5. package/dist/components/Brand/components/Logo.d.ts +7 -7
  6. package/dist/components/Brand/components/Logo.js +10 -15
  7. package/dist/components/Brand/components/LogoGeometry.d.ts +28 -0
  8. package/dist/components/Brand/components/LogoGeometry.js +78 -0
  9. package/dist/components/Brand/components/Mark.d.ts +13 -6
  10. package/dist/components/Brand/components/Mark.js +14 -10
  11. package/dist/components/Brand/components/Wordmark.js +1 -1
  12. package/dist/components/Brand/components/markGeometry.d.ts +15 -0
  13. package/dist/components/Brand/components/markGeometry.js +20 -7
  14. package/dist/components/Breadcrumb/components/Breadcrumb.js +2 -2
  15. package/dist/components/Button/components/Button.js +1 -1
  16. package/dist/components/Card/components/Card.d.ts +5 -0
  17. package/dist/components/Card/components/Card.js +8 -2
  18. package/dist/components/CmdPalette/components/CmdPalette.d.ts +4 -3
  19. package/dist/components/CmdPalette/components/CmdPalette.js +17 -12
  20. package/dist/components/DecayStrip/components/DecayStrip.js +1 -1
  21. package/dist/components/DosDialog/components/DosDialog.d.ts +90 -0
  22. package/dist/components/DosDialog/components/DosDialog.js +68 -0
  23. package/dist/components/DosDialog/components/index.d.ts +2 -0
  24. package/dist/components/DosDialog/components/index.js +1 -0
  25. package/dist/components/DosDialog/index.d.ts +2 -0
  26. package/dist/components/DosDialog/index.js +1 -0
  27. package/dist/components/DosFigure/components/DosFigure.d.ts +2 -2
  28. package/dist/components/DosFigure/components/DosFigure.js +14 -7
  29. package/dist/components/DosWindow/components/DosWindow.d.ts +39 -0
  30. package/dist/components/DosWindow/components/DosWindow.js +23 -0
  31. package/dist/components/DosWindow/components/index.d.ts +2 -0
  32. package/dist/components/DosWindow/components/index.js +1 -0
  33. package/dist/components/DosWindow/index.d.ts +2 -0
  34. package/dist/components/DosWindow/index.js +1 -0
  35. package/dist/components/FilterBar/components/FilterBar.d.ts +7 -4
  36. package/dist/components/Footer/components/Footer.js +1 -1
  37. package/dist/components/Gauge/components/Gauge.js +13 -2
  38. package/dist/components/Header/components/Header.d.ts +29 -1
  39. package/dist/components/Header/components/Header.js +20 -5
  40. package/dist/components/Icon/components/Icon.d.ts +9 -0
  41. package/dist/components/Icon/components/Icon.js +7 -3
  42. package/dist/components/IconButton/components/IconButton.d.ts +44 -0
  43. package/dist/components/IconButton/components/IconButton.js +19 -0
  44. package/dist/components/IconButton/components/index.d.ts +2 -0
  45. package/dist/components/IconButton/components/index.js +1 -0
  46. package/dist/components/IconButton/index.d.ts +2 -0
  47. package/dist/components/IconButton/index.js +1 -0
  48. package/dist/components/Input/components/Input.js +1 -1
  49. package/dist/components/Lightbox/components/Lightbox.d.ts +10 -4
  50. package/dist/components/Lightbox/components/Lightbox.js +19 -11
  51. package/dist/components/Meter/components/Meter.js +7 -3
  52. package/dist/components/Meter/components/MeterGroup.js +3 -3
  53. package/dist/components/Modal/components/Modal.d.ts +18 -6
  54. package/dist/components/Modal/components/Modal.js +18 -9
  55. package/dist/components/Nav/components/Nav.js +5 -4
  56. package/dist/components/Notification/components/Notification.js +3 -2
  57. package/dist/components/Progress/components/Progress.js +8 -6
  58. package/dist/components/RangeBar/components/RangeBar.js +8 -5
  59. package/dist/components/SeriesBars/components/SeriesBars.d.ts +9 -1
  60. package/dist/components/SeriesBars/components/SeriesBars.js +23 -11
  61. package/dist/components/Stat/components/Stat.js +1 -1
  62. package/dist/components/Tag/components/Tag.d.ts +8 -1
  63. package/dist/components/Tag/components/Tag.js +5 -5
  64. package/dist/components/VitalsStrip/components/VitalsStrip.js +9 -7
  65. package/dist/components/registry.js +230 -19
  66. package/dist/eidotter.css +3 -2
  67. package/dist/hooks/useAnimatedDismiss.js +5 -0
  68. package/dist/index.d.ts +9 -1
  69. package/dist/index.es.js +2414 -1747
  70. package/dist/index.umd.js +1 -1
  71. package/dist/utils/cn.d.ts +2 -0
  72. package/dist/utils/cn.js +33 -1
  73. package/dist/utils/dosFontSizes.d.ts +2 -0
  74. package/dist/utils/dosFontSizes.js +17 -0
  75. package/llms.txt +15 -7
  76. package/migrations/0.41.0.md +883 -0
  77. package/migrations/README.md +46 -0
  78. package/package.json +11 -3
  79. package/public/favicon.svg +1 -1
  80. package/src/styles/dos-utilities.css +9 -1
  81. package/src/styles/shadcn.css +63 -27
  82. package/src/styles/theme.amber-mono.css +4 -2
  83. package/src/styles/theme.amber-paper.css +106 -0
  84. package/src/styles/theme.cga-amber.css +3 -1
  85. package/src/styles/theme.cga-mode4-p0.css +3 -1
  86. package/src/styles/theme.cga-mode4-p1.css +3 -1
  87. package/src/styles/theme.cga-mode5.css +3 -1
  88. package/src/styles/theme.light.css +3 -1
  89. package/src/styles/tokens.css +5 -1
  90. package/tailwind.preset.cjs +23 -1
  91. package/dist/components/Brand/components/markGeometry.test.d.ts +0 -1
  92. package/dist/components/Connector/components/connectorGeometry.test.d.ts +0 -1
  93. package/dist/components/DecayStrip/components/resample.test.d.ts +0 -1
  94. package/dist/components/TimelineContainer/components/timelineUtils.test.d.ts +0 -1
  95. package/dist/components/TimelineContainer/components/useDrillDown.test.d.ts +0 -1
  96. package/dist/components/TimelineContainer/components/useSelection.test.d.ts +0 -1
  97. package/dist/components/TimelineContainer/components/useZoom.test.d.ts +0 -1
  98. package/dist/hooks/useTextScramble.test.d.ts +0 -1
  99. package/dist/hooks/useThemePortal.test.d.ts +0 -1
  100. package/dist/utils/health/formatValue.test.d.ts +0 -1
  101. package/dist/utils/health/healthPatterns.test.d.ts +0 -1
  102. package/dist/utils/health/resolveBand.test.d.ts +0 -1
  103. package/dist/utils/isSafeHref.test.d.ts +0 -1
  104. package/dist/utils/isSafeUrl.test.d.ts +0 -1
@@ -6,7 +6,14 @@ export interface TagProps {
6
6
  variant?: 'default' | 'outlined' | 'filled';
7
7
  /** Size variant. Use sm/md/lg — small/medium are @deprecated aliases. */
8
8
  size?: 'sm' | 'md' | 'lg' | 'small' | 'medium';
9
- /** CGA color token for border and text */
9
+ /**
10
+ * CGA color token for border and text (`default`, `outlined`), or the fill
11
+ * (`filled`, drawn with `text-on-brand` ink). For `filled`, pass a bright
12
+ * fill: a CGA primitive such as `--color-cga-bright-cyan`, `-bright-green`,
13
+ * `-yellow`, `-light-gray`, or `--color-semantic-background-brand`. Each
14
+ * clears 4.5:1 in every theme; text roles such as
15
+ * `--color-semantic-text-accent` drop to about 3:1 as a fill in the light theme.
16
+ */
10
17
  color?: string;
11
18
  /** Whether the tag is selected/active */
12
19
  selected?: boolean;
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button as AriaButton } from 'react-aria-components';
3
+ import { IconButton } from '../../IconButton/components/IconButton.js';
4
4
  import { cn } from '../../../utils/cn.js';
5
5
  import { useAnimatedDismiss } from '../../../hooks/useAnimatedDismiss.js';
6
6
  const sizeClasses = {
@@ -16,7 +16,7 @@ const sizeClasses = {
16
16
  */
17
17
  export const Tag = ({ children, variant = 'default', size = 'md', color, selected = false, closeable = false, disabled = false, onClick, onClose, className, 'aria-label': ariaLabel, ...props }) => {
18
18
  const isInteractive = !!onClick && !disabled;
19
- const { isClosing, triggerClose, handleAnimationEnd } = useAnimatedDismiss('tag-exit', onClose);
19
+ const { isClosing, triggerClose, handleAnimationEnd } = useAnimatedDismiss('eidotter-pop-out', onClose);
20
20
  const handleKeyDown = (event) => {
21
21
  if (disabled)
22
22
  return;
@@ -29,18 +29,18 @@ export const Tag = ({ children, variant = 'default', size = 'md', color, selecte
29
29
  triggerClose();
30
30
  }
31
31
  };
32
- // AriaButton's usePress isolates the press event — it calls stopPropagation
32
+ // IconButton (React Aria Button) usePress isolates the press event — it calls stopPropagation
33
33
  // internally, preventing the close from triggering the parent Tag's onClick.
34
34
  const handleClosePress = () => {
35
35
  if (!disabled)
36
36
  triggerClose();
37
37
  };
38
38
  const style = color ? { '--tag-color': 'var(' + color + ')' } : undefined;
39
- return (_jsxs("span", { className: cn('inline-flex items-center justify-center', 'font-dos leading-none whitespace-nowrap select-none', 'rounded-dos-sm uppercase tracking-wider', sizeClasses[size] || sizeClasses.md, 'eidotter-tag', 'eidotter-tag--' + variant, selected && 'eidotter-tag--selected', disabled && 'opacity-50 cursor-not-allowed', isClosing && 'eidotter-tag--closing', isInteractive && 'cursor-pointer', className), style: style, onClick: isInteractive ? (e) => !disabled && onClick?.(e) : undefined, onKeyDown: handleKeyDown, onAnimationEnd: handleAnimationEnd, "aria-label": ariaLabel, "aria-pressed": isInteractive ? (selected || false) : undefined, "aria-disabled": disabled || undefined, "data-variant": variant, ...(isInteractive ? { role: 'button', tabIndex: 0 } : {}), ...props, children: [_jsx("span", { className: "eidotter-tag__content", children: children }), closeable && (_jsx(AriaButton, { className: "eidotter-tag__close", "aria-label": 'Remove ' + (typeof children === 'string' ? children : 'tag'),
39
+ return (_jsxs("span", { className: cn('inline-flex items-center justify-center', 'font-dos leading-none whitespace-nowrap select-none', 'rounded-dos-sm uppercase tracking-wider', sizeClasses[size] || sizeClasses.md, 'eidotter-tag', 'eidotter-tag--' + variant, selected && 'eidotter-tag--selected', disabled && 'opacity-50 cursor-not-allowed', isClosing && 'eidotter-tag--closing', isInteractive && 'cursor-pointer', className), style: style, onClick: isInteractive ? (e) => !disabled && onClick?.(e) : undefined, onKeyDown: handleKeyDown, onAnimationEnd: handleAnimationEnd, "aria-label": ariaLabel, "aria-pressed": isInteractive ? (selected || false) : undefined, "aria-disabled": disabled || undefined, "data-variant": variant, ...(isInteractive ? { role: 'button', tabIndex: 0 } : {}), ...props, children: [_jsx("span", { className: "eidotter-tag__content", children: children }), closeable && (_jsx(IconButton, { icon: "Close", label: 'Remove ' + (typeof children === 'string' ? children : 'tag'), variant: "bare", className: "eidotter-tag__close",
40
40
  // Keep the close button out of the tab order only when the body is
41
41
  // itself focusable (interactive) and already offers Delete/Backspace
42
42
  // dismissal. For a closeable, non-interactive tag the body is not
43
43
  // focusable, so the close button must stay tabbable to give keyboard
44
44
  // users any dismiss path at all.
45
- excludeFromTabOrder: isInteractive, onPress: handleClosePress, isDisabled: disabled, children: "[x]" }))] }));
45
+ excludeFromTabOrder: isInteractive, onPress: handleClosePress, isDisabled: disabled }))] }));
46
46
  };
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { forwardRef } from 'react';
3
3
  import { cn } from '../../../utils/cn.js';
4
4
  import { Skeleton } from '../../Skeleton/index.js';
@@ -8,11 +8,6 @@ const sizeClasses = {
8
8
  md: 'eidotter-vitals-strip--md gap-2 text-dos-text-sm',
9
9
  lg: 'eidotter-vitals-strip--lg gap-2 text-dos-text-md',
10
10
  };
11
- const valueSizeClasses = {
12
- sm: 'text-dos-display-xs',
13
- md: 'text-dos-display-sm',
14
- lg: 'text-dos-display-md',
15
- };
16
11
  const toneClasses = {
17
12
  neutral: 'eidotter-tone--neutral',
18
13
  info: 'eidotter-tone--info',
@@ -67,7 +62,14 @@ export const VitalsStrip = forwardRef(({ tiles, size = 'md', locale = 'en', labe
67
62
  .filter(Boolean)
68
63
  .join(', ');
69
64
  return (_jsxs("div", { role: "group", "aria-label": name, "aria-busy": loading || undefined, className: cn('eidotter-vitals-strip__tile flex flex-col gap-0.5 border border-dos-border-default p-2', toneClasses[tone], statusClasses[status], tone === 'critical' &&
70
- 'eidotter-vitals-strip__marker border-l-4 border-dos-border-error'), children: [_jsxs("span", { className: "flex items-center gap-1 text-dos-text-brand uppercase tracking-wider leading-tight", children: [tone === 'critical' && (_jsx("span", { "aria-hidden": "true", className: "text-dos-text-error", children: "\u25B2" })), _jsx("span", { className: "truncate", title: t.label, children: t.label })] }), loading ? (_jsx("div", { "aria-hidden": "true", className: "w-full overflow-hidden", children: _jsx(Skeleton, { variant: "figure", lines: 1, animated: false }) })) : (_jsxs("span", { className: cn('eidotter-vitals-strip__value text-dos-text-accent leading-none tabular-nums', valueSizeClasses[size] ?? valueSizeClasses.md), children: [stale ? _jsx("span", { className: "opacity-60", children: valueText }) : (stateText ?? valueText), valueText && t.unit && (_jsx("span", { className: "eidotter-vitals-strip__unit ml-1 text-[0.5em] text-dos-text-brand", children: t.unit }))] })), stale && _jsx("span", { className: "eidotter-vitals-strip__stale", children: labels.stale }), t.secondary && !unknown && (_jsx("span", { className: "eidotter-vitals-strip__secondary text-dos-text-muted leading-tight", children: t.secondary })), resolved.label && (_jsx("span", { className: "eidotter-vitals-strip__band text-dos-text-brand leading-tight", children: resolved.label }))] }, t.id));
65
+ 'eidotter-vitals-strip__marker border-l-4 border-dos-border-error'), children: [_jsxs("span", { className: "flex items-center gap-1 text-dos-text-brand uppercase tracking-wider leading-tight", children: [tone === 'critical' && (_jsx("span", { "aria-hidden": "true", className: "text-dos-text-error", children: "\u25B2" })), _jsx("span", { className: "truncate", title: t.label, children: t.label })] }), loading ? (_jsx("div", { "aria-hidden": "true", className: "w-full overflow-hidden", children: _jsx(Skeleton, { variant: "figure", lines: 1, animated: false }) })) : (
66
+ /* Display size comes from VitalsStrip.css (a per-size custom property that
67
+ steps down in narrow strips), not a Tailwind text-* utility, which
68
+ cannot follow the container width. The reading never wraps or widens the tile; the unit
69
+ moves under it when both do not fit on one line (DMNC-1573). */
70
+ _jsxs("span", { className: "eidotter-vitals-strip__value text-dos-text-accent leading-none tabular-nums flex flex-wrap items-baseline gap-x-1 min-w-0", children: [_jsx("span", { className: "eidotter-vitals-strip__reading min-w-0 max-w-full whitespace-nowrap overflow-hidden text-ellipsis", children: stale ? (_jsx("span", { className: "opacity-60", children: valueText })) : stateText !== null ? (
71
+ // State words are prose, not a reading: body size, not display size.
72
+ _jsx("span", { className: "eidotter-vitals-strip__state text-dos-text-sm", children: stateText })) : (valueText) }), valueText && t.unit && (_jsxs(_Fragment, { children: [' ', _jsx("span", { className: "eidotter-vitals-strip__unit whitespace-nowrap text-[0.5em] text-dos-text-brand", children: t.unit })] }))] })), stale && _jsx("span", { className: "eidotter-vitals-strip__stale", children: labels.stale }), t.secondary && !unknown && (_jsx("span", { className: "eidotter-vitals-strip__secondary text-dos-text-muted leading-tight", children: t.secondary })), resolved.label && (_jsx("span", { className: "eidotter-vitals-strip__band text-dos-text-brand leading-tight", children: resolved.label }))] }, t.id));
71
73
  }) }));
72
74
  });
73
75
  VitalsStrip.displayName = 'VitalsStrip';