eidotter 0.41.3 → 0.43.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.
- package/README.md +6 -4
- package/dist/components/Bench/components/Bench.d.ts +45 -0
- package/dist/components/Bench/components/Bench.js +46 -0
- package/dist/components/Bench/components/index.d.ts +2 -0
- package/dist/components/Bench/components/index.js +1 -0
- package/dist/components/Bench/index.d.ts +2 -0
- package/dist/components/Bench/index.js +1 -0
- package/dist/components/CmdPalette/components/CmdPalette.js +5 -3
- package/dist/components/Header/components/Header.d.ts +38 -2
- package/dist/components/Header/components/Header.js +23 -5
- package/dist/components/IconButton/components/IconButton.d.ts +20 -3
- package/dist/components/IconButton/components/IconButton.js +1 -1
- package/dist/components/IconButton/components/index.d.ts +1 -1
- package/dist/components/IconButton/index.d.ts +1 -1
- package/dist/components/Lightbox/components/Lightbox.d.ts +2 -1
- package/dist/components/Lightbox/components/Lightbox.js +8 -3
- package/dist/components/Nav/components/Nav.d.ts +20 -7
- package/dist/components/Nav/components/index.d.ts +1 -1
- package/dist/components/Nav/index.d.ts +1 -1
- package/dist/components/PageShell/components/PageSection.d.ts +25 -0
- package/dist/components/PageShell/components/PageSection.js +16 -0
- package/dist/components/PageShell/components/PageShell.d.ts +58 -0
- package/dist/components/PageShell/components/PageShell.js +29 -0
- package/dist/components/PageShell/components/index.d.ts +4 -0
- package/dist/components/PageShell/components/index.js +2 -0
- package/dist/components/PageShell/index.d.ts +2 -0
- package/dist/components/PageShell/index.js +1 -0
- package/dist/components/RangeBar/components/RangeBar.js +2 -2
- package/dist/components/registry.js +39 -0
- package/dist/eidotter.css +1 -1
- package/dist/index.d.ts +7 -3
- package/dist/index.es.js +1047 -1176
- package/dist/index.umd.js +4 -4
- package/guidelines/README.md +37 -0
- package/guidelines/components.md +2 -2
- package/llms.txt +4 -4
- package/migrations/0.41.0.md +7 -4
- package/migrations/0.43.0.md +129 -0
- package/migrations/README.md +2 -0
- package/package.json +4 -4
|
@@ -85,9 +85,9 @@ export const RangeBar = forwardRef(({ segments, orientation = 'vertical', size =
|
|
|
85
85
|
[orientation === 'horizontal' ? 'left' : 'top']: `${Math.min(Math.max(target.minShare / (s.weight || 1), 0), 1) * 100}%`,
|
|
86
86
|
} })) }, s.id));
|
|
87
87
|
}) }), _jsx("div", { "aria-hidden": "true", className: cn('eidotter-range-bar__lane flex tabular-nums text-dos-text-accent', orientation === 'horizontal' ? 'flex-row w-full' : 'flex-col'), children: items.map((s) => (_jsxs("div", { className: cn('eidotter-range-bar__cell flex items-center justify-center gap-x-2 gap-y-1 min-w-0', orientation === 'horizontal' ? 'flex-col' : 'flex-row justify-start'), style: { flexGrow: Math.max(s.weight, minSegmentShare), flexBasis: 0 }, children: [s.weight >= labelThreshold && (_jsx("span", { className: "eidotter-range-bar__pct", children: pct(s.weight) })), s.weight >= labelThreshold && target?.segmentId === s.id && ' ', target?.segmentId === s.id && (_jsx("span", { className: "eidotter-range-bar__target-label text-dos-text-brand whitespace-nowrap", children: target.label }))] }, s.id))) })] }), showLegend && (_jsx("ul", { className: "eidotter-range-bar__legend flex flex-col gap-1 list-none p-0 m-0 min-w-0 max-w-full", children: items.map((s) => {
|
|
88
|
-
return (_jsxs("li", { className: "eidotter-range-bar__row
|
|
88
|
+
return (_jsxs("li", { className: "eidotter-range-bar__row flex items-baseline gap-2", children: [_jsx("span", { "aria-hidden": "true", className: cn('eidotter-range-bar__swatch inline-block shrink-0 w-[0.75rem] h-[0.75rem]', toneClasses[s.toneKey], s.patternClass), style: {
|
|
89
89
|
...(s.toneKey === 'neutral' && { '--eidotter-fill': NEUTRAL_FILL }),
|
|
90
|
-
} }), _jsxs("span", { className: "eidotter-range-bar__name text-dos-text-primary min-w-0 break-words", children: [s.label, s.bound && (_jsxs(_Fragment, { children: [' ', _jsx("span", { className: "eidotter-range-bar__bound text-dos-text-muted whitespace-nowrap", children: s.bound })] }))] }), _jsx("span", { className: "text-dos-text-accent tabular-nums", children: pct(s.weight) }), _jsx("span", { className: "text-dos-text-muted tabular-nums text-right", children: s.duration
|
|
90
|
+
} }), _jsxs("span", { className: "eidotter-range-bar__text flex flex-1 flex-wrap items-baseline gap-x-2 min-w-0", children: [_jsxs("span", { className: "eidotter-range-bar__name text-dos-text-primary flex-auto min-w-0 max-w-full break-words", children: [s.label, s.bound && (_jsxs(_Fragment, { children: [' ', _jsx("span", { className: "eidotter-range-bar__bound text-dos-text-muted whitespace-nowrap", children: s.bound })] }))] }), _jsxs("span", { className: "eidotter-range-bar__meta ml-auto flex flex-wrap items-baseline justify-end gap-x-2 max-w-full", children: [_jsx("span", { className: "text-dos-text-accent tabular-nums", children: pct(s.weight) }), s.duration && (_jsx("span", { className: "eidotter-range-bar__duration text-dos-text-muted tabular-nums text-right", children: s.duration }))] })] })] }, s.id));
|
|
91
91
|
}) }))] }));
|
|
92
92
|
});
|
|
93
93
|
RangeBar.displayName = 'RangeBar';
|
|
@@ -235,6 +235,7 @@ export const componentRegistry = {
|
|
|
235
235
|
react: { path: 'src/components/CommandPrompt', status: 'canonical' },
|
|
236
236
|
},
|
|
237
237
|
changelog: [
|
|
238
|
+
{ version: '0.42.0', type: 'changed', description: 'A placeholder (or unfocused value) wider than the input ends in an ellipsis instead of being cut mid-glyph; a consumer min-width wider than the line still clips (DMNC-1612)' },
|
|
238
239
|
{ version: '0.30.0', type: 'changed', description: 'A11y keyboard focus fixes' },
|
|
239
240
|
{ version: '0.18.0', type: 'changed', description: 'Migrate BEM to Tailwind-first; switch to Flexi IBM VGA font' },
|
|
240
241
|
{ version: '0.3.0', type: 'added', description: 'Initial CommandPrompt — prompt prop, onCommand, autoFocus, disabled' },
|
|
@@ -302,6 +303,7 @@ export const componentRegistry = {
|
|
|
302
303
|
since: '0.22.0',
|
|
303
304
|
originNote: 'Fullscreen image viewer on the DosDialog shell. Keyboard nav, prev/next, counter, swipe.',
|
|
304
305
|
changelog: [
|
|
306
|
+
{ version: '0.42.0', type: 'changed', description: 'A figure taller than the body (portrait image at phone width) scrolls from its top edge: the figure is centred with auto block margins instead of justify-content center; a single-image lightbox renders no prev/next, the [ 1 / 1 ] counter stays (DMNC-1612)' },
|
|
305
307
|
{ version: '0.41.0', type: 'changed', description: 'Close and prev/next (md 36px; pixel chevrons replacing the text arrows) are IconButtons; disabled nav opacity 0.5 (was 0.3); keyboard and swipe unchanged (DMNC-1592)' },
|
|
306
308
|
{ version: '0.41.0', type: 'changed', description: 'Rebuilt on DosDialog (size full): gains the title strip (dark, yellow title, dim-amber rule) with the [ n / N ] counter as its title and the Close icon at its end; z-index now --z-index-modal (was 60); panel pops in/out (150ms) (DMNC-1592)' },
|
|
307
309
|
],
|
|
@@ -686,8 +688,14 @@ export const componentRegistry = {
|
|
|
686
688
|
'variant:modern': { description: 'Modern header without phosphor glow' },
|
|
687
689
|
'context:categories': { description: 'Category badge row below the main row — measurable DOM target (stable eidotter-header__categories / __category classes + data-category-key) for the Mark arm-connector (DMNC-1325)', since: '0.39.0' },
|
|
688
690
|
'context:returnTo': { description: 'Breadcrumb return pill — same-tab via linkComponent by default; reuseTab navigates via window.open(href, "rizomorf-shell") named-tab reuse', since: '0.39.0' },
|
|
691
|
+
'layout:inline': { description: 'Brand left, nav (+ end) right, one row (default)', since: '0.43.0' },
|
|
692
|
+
'layout:stacked': { description: 'Brand row on top (end + MENU on its right), desktop nav on its own row below, left-aligned on the brand edge', since: '0.43.0' },
|
|
693
|
+
'brandCollapse:none': { description: 'Icon brands always show the name, wrapping when short of room (default)', since: '0.43.0' },
|
|
694
|
+
'brandCollapse:mark': { description: 'Below 480px of header width (container query) only the icon shows; the name stays the accessible name', since: '0.43.0' },
|
|
689
695
|
},
|
|
690
696
|
changelog: [
|
|
697
|
+
{ version: '0.43.0', type: 'added', description: '`layout` (inline | stacked), `rule` (false drops the bottom line and its glow), `contained` (true = 1240px column, or a CSS length, with the PageShell gutter, so the brand lines up with a page column) and `brandCollapse` (none | mark) props; all default to the previous rendering' },
|
|
698
|
+
{ version: '0.43.0', type: 'changed', description: 'The brand name wraps instead of ellipsizing: the brand link shrinks first (the end slot clips only after the brand reaches its floor of icon + about 8 tracked characters), words break at spaces, a single over-long word breaks mid-word as a last resort; the icon top-aligns beside a two-line name' },
|
|
691
699
|
{ version: '0.41.3', type: 'changed', description: 'end slot clips the inline axis only (overflow-x: clip) with a 12px inline bleed, so focus rings and phosphor glows of controls in it are no longer cut; overflow: hidden fallback without clip support (DMNC-1611)' },
|
|
692
700
|
{ version: '0.41.3', type: 'changed', description: 'items={[]} renders no nav: no empty <nav> and no MENU trigger below 768px; the brand link gets the house focus ring (2px border-focus outline, 2px offset) in both variants (DMNC-1611)' },
|
|
693
701
|
{ version: '0.41.0', type: 'changed', description: 'Mobile Nav panel close is the shared IconButton (md 36x36, outline, hover invert) (DMNC-1592)' },
|
|
@@ -703,6 +711,7 @@ export const componentRegistry = {
|
|
|
703
711
|
consumers: [],
|
|
704
712
|
originNote: 'DesktopNav + MobileNav (MENU trigger + slide-out panel) — retro/modern variants; composed by Header',
|
|
705
713
|
changelog: [
|
|
714
|
+
{ version: '0.42.0', type: 'changed', description: 'linkComponent is typed NavLinkComponent (ComponentType or ExoticComponent of NavLinkProps), so next/link is accepted directly under @types/react 18 and 19; NavLinkProps and NavLinkComponent exported (DMNC-1612)' },
|
|
706
715
|
{ version: '0.41.0', type: 'changed', description: 'Retro variant: desktop links, mobile panel links and the MENU trigger in brand amber with bright-brand-amber hover (no glow on the trigger); desktop and panel link labels render uppercase DOS. Modern variant unchanged (DMNC-1584)' },
|
|
707
716
|
],
|
|
708
717
|
},
|
|
@@ -772,9 +781,13 @@ export const componentRegistry = {
|
|
|
772
781
|
'size:window': { description: '28x28, 16px glyph, for dense chrome (no built-in adopter)', since: '0.41.0' },
|
|
773
782
|
'variant:outline': { description: '1px border-default outline at rest (default)', since: '0.41.0' },
|
|
774
783
|
'variant:bare': { description: 'No resting outline (Tag remove)', since: '0.41.0' },
|
|
784
|
+
'size:touch': { description: '44x44 touch target, 24px glyph, for stage and kiosk shells', since: '0.42.0' },
|
|
785
|
+
'tone:accent': { description: 'text-accent glyph, amber hover invert (default)', since: '0.42.0' },
|
|
786
|
+
'tone:inherit': { description: 'Glyph, outline and focus ring take the surrounding currentColor; hover tints with it, for coloured bars', since: '0.42.0' },
|
|
775
787
|
},
|
|
776
788
|
platforms: { react: { path: 'src/components/IconButton', status: 'canonical' } },
|
|
777
789
|
changelog: [
|
|
790
|
+
{ version: '0.42.0', type: 'added', description: 'size touch (44x44, 24px glyph) and tone prop: accent (default, unchanged) or inherit (currentColor glyph, outline and focus ring; hover tints with currentColor) for coloured bars (DMNC-1612)' },
|
|
778
791
|
{ version: '0.41.0', type: 'added', description: 'Initial IconButton: icon, required label (aria-label), size md/window, variant outline/bare, isDisabled, onPress, excludeFromTabOrder; adopted by Modal, Lightbox, Notification, Alert, Tag and Nav (DMNC-1592)' },
|
|
779
792
|
],
|
|
780
793
|
},
|
|
@@ -793,6 +806,30 @@ export const componentRegistry = {
|
|
|
793
806
|
{ version: '0.41.0', type: 'added', description: 'Initial DosWindow: title, marker, active, controls, footer, className; stable classes eidotter-window, __strip, __title, __controls, __body, __footer (DMNC-1592)' },
|
|
794
807
|
],
|
|
795
808
|
},
|
|
809
|
+
Bench: {
|
|
810
|
+
origin: 'eidotter',
|
|
811
|
+
consumers: [],
|
|
812
|
+
since: '0.43.0',
|
|
813
|
+
originNote: 'Compare unit on DosWindow: title strip (heading after the ▸ marker) with wrapping status chips and an optional note, then before | after panes split by a 1px gap the grid background paints (no divider elements). Pane label row + keyboard-scrollable frame (max 640px, phone frame 390px); stacks below 760px of bench width (container query). From the review-page template (page-template-review-bench).',
|
|
814
|
+
platforms: { react: { path: 'src/components/Bench', status: 'canonical' } },
|
|
815
|
+
changelog: [
|
|
816
|
+
{ version: '0.43.0', type: 'added', description: 'Initial Bench: title, headingLevel, chips, note, panes ({ label, content, tone, frame, frameLabel }), maxHeight; stable classes eidotter-bench, __panes, __pane, __label, __frame, __note' },
|
|
817
|
+
],
|
|
818
|
+
},
|
|
819
|
+
PageShell: {
|
|
820
|
+
origin: 'eidotter',
|
|
821
|
+
consumers: [],
|
|
822
|
+
since: '0.43.0',
|
|
823
|
+
originNote: 'The "one block" page layout: one centred column (1240px default) with a max(16px, safe-area) gutter, 24/64px block padding, header/intro/sections/footer on one left edge with a 40px gap and no dividers. Structured intro (eyebrow, h1, lead, meta, TOC chips). PageSection (h2 in the display face, accent, no rule; 16px gap) ships alongside. Server-safe.',
|
|
824
|
+
variants: {
|
|
825
|
+
'contentAs:main': { description: 'Content is the page main landmark (default)', since: '0.43.0' },
|
|
826
|
+
'contentAs:div': { description: 'Content is a div, for app layouts that already render <main>', since: '0.43.0' },
|
|
827
|
+
},
|
|
828
|
+
platforms: { react: { path: 'src/components/PageShell', status: 'canonical' } },
|
|
829
|
+
changelog: [
|
|
830
|
+
{ version: '0.43.0', type: 'added', description: 'Initial PageShell (header, intro, footer, maxWidth, contentAs, contentId) and PageSection (title, headingLevel, id); a Header in the header slot drops its inline padding so its brand sits on the column edge' },
|
|
831
|
+
],
|
|
832
|
+
},
|
|
796
833
|
Notification: {
|
|
797
834
|
origin: 'eidotter',
|
|
798
835
|
consumers: [],
|
|
@@ -810,6 +847,7 @@ export const componentRegistry = {
|
|
|
810
847
|
originNote: '⌘K / Ctrl+K command palette overlay. Built on React Aria ModalOverlay/Modal/Dialog (same primitives as Modal). Generic items + scored search + keyboard navigation.',
|
|
811
848
|
platforms: { react: { path: 'src/components/CmdPalette', status: 'canonical' } },
|
|
812
849
|
changelog: [
|
|
850
|
+
{ version: '0.42.0', type: 'changed', description: 'Row label keeps every character (label text in eidotter-cmdpal__item-text); the hint shrinks first and truncates with an ellipsis; default footer wraps between key hints, never inside ESC CLOSE; narrow rules are a container query on the palette (DMNC-1612)' },
|
|
813
851
|
{ version: '0.41.0', type: 'changed', description: 'Rebuilt on DosDialog (top placement, lg width, decorative strip); the JUMP TO head loses its amber fill (dark strip, yellow text); placeholder and row hints use text-muted, the selected row label and hint text-brand; the panel pops in/out (150ms) instead of the 8px drop; own cmdpal-enter/exit and backdrop keyframes removed (DMNC-1592)' },
|
|
814
852
|
{ version: '0.20.0', type: 'added', description: 'Initial CmdPalette — generic items with keywords, mod+k global hotkey, custom renderItem, useId() per-instance DOM ids, selected-clamp on items mutation' },
|
|
815
853
|
{ version: '0.41.0', type: 'changed', description: 'Fix: search input shows the 2px focus-visible ring instead of only a faint background tint (DMNC-1436)' },
|
|
@@ -1025,6 +1063,7 @@ export const componentRegistry = {
|
|
|
1025
1063
|
changelog: [
|
|
1026
1064
|
{ version: '0.40.0', type: 'added', description: 'Initial RangeBar (health metabolism family)' },
|
|
1027
1065
|
{ version: '0.41.1', type: 'changed', description: 'Vertical legend wraps under the bar in a narrow container; legend names wrap instead of truncating and a bound moves to the next line whole; percent and target label separated by a gap and a space; lane and legend text print black on white (DMNC-1610)' },
|
|
1066
|
+
{ version: '0.42.0', type: 'changed', description: 'Legend name wins width: name and the percent/duration group share a wrapping line, so percent and duration move under the name (right-aligned) before the name wraps, and a word breaks only when it alone is wider than the row; no empty duration cell; eidotter-range-bar__text, __meta and __duration hooks (DMNC-1612)' },
|
|
1028
1067
|
],
|
|
1029
1068
|
},
|
|
1030
1069
|
SeriesBars: {
|