eidotter 0.36.0 → 0.37.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 +19 -0
- package/dist/components/AIText/components/AIText.d.ts +0 -1
- package/dist/components/AIText/components/AIText.js +23 -0
- package/dist/components/AIText/components/index.d.ts +2 -2
- package/dist/components/AIText/components/index.js +1 -0
- package/dist/components/AIText/index.d.ts +2 -2
- package/dist/components/AIText/index.js +1 -0
- package/dist/components/Accordion/components/AccordionFill.d.ts +0 -1
- package/dist/components/Accordion/components/AccordionFill.js +12 -0
- package/dist/components/Accordion/components/Section.d.ts +0 -1
- package/dist/components/Accordion/components/Section.js +22 -0
- package/dist/components/Accordion/components/index.d.ts +4 -4
- package/dist/components/Accordion/components/index.js +2 -0
- package/dist/components/Accordion/index.d.ts +1 -1
- package/dist/components/Accordion/index.js +1 -0
- package/dist/components/Alert/components/Alert.d.ts +0 -1
- package/dist/components/Alert/components/Alert.js +51 -0
- package/dist/components/Alert/components/index.d.ts +2 -2
- package/dist/components/Alert/components/index.js +1 -0
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/Alert/index.js +1 -0
- package/dist/components/Badge/components/Badge.d.ts +0 -1
- package/dist/components/Badge/components/Badge.js +31 -0
- package/dist/components/Badge/components/index.d.ts +2 -2
- package/dist/components/Badge/components/index.js +1 -0
- package/dist/components/Badge/index.d.ts +2 -2
- package/dist/components/Badge/index.js +1 -0
- package/dist/components/Brand/components/BrandLockup.js +14 -0
- package/dist/components/Brand/components/Logo.d.ts +0 -1
- package/dist/components/Brand/components/Logo.js +22 -0
- package/dist/components/Brand/components/Wordmark.d.ts +0 -1
- package/dist/components/Brand/components/Wordmark.js +13 -0
- package/dist/components/Brand/components/index.d.ts +6 -6
- package/dist/components/Brand/components/index.js +3 -0
- package/dist/components/Brand/index.d.ts +1 -1
- package/dist/components/Brand/index.js +1 -0
- package/dist/components/Breadcrumb/components/Breadcrumb.d.ts +0 -1
- package/dist/components/Breadcrumb/components/Breadcrumb.js +29 -0
- package/dist/components/Breadcrumb/components/index.d.ts +2 -2
- package/dist/components/Breadcrumb/components/index.js +1 -0
- package/dist/components/Breadcrumb/index.d.ts +2 -2
- package/dist/components/Breadcrumb/index.js +1 -0
- package/dist/components/Button/components/Button.d.ts +0 -2
- package/dist/components/Button/components/Button.js +49 -0
- package/dist/components/Button/components/index.d.ts +2 -2
- package/dist/components/Button/components/index.js +1 -0
- package/dist/components/Button/index.d.ts +2 -2
- package/dist/components/Button/index.js +1 -0
- package/dist/components/Card/components/Card.d.ts +0 -1
- package/dist/components/Card/components/Card.js +16 -0
- package/dist/components/Card/components/index.d.ts +2 -2
- package/dist/components/Card/components/index.js +1 -0
- package/dist/components/Card/index.d.ts +2 -2
- package/dist/components/Card/index.js +1 -0
- package/dist/components/Chat/components/ChatContainer.d.ts +1 -1
- package/dist/components/Chat/components/ChatContainer.js +20 -0
- package/dist/components/Chat/components/ChatHistory.d.ts +0 -1
- package/dist/components/Chat/components/ChatHistory.js +27 -0
- package/dist/components/Chat/components/ChatInput.d.ts +0 -2
- package/dist/components/Chat/components/ChatInput.js +37 -0
- package/dist/components/Chat/components/ChatMessage.d.ts +0 -2
- package/dist/components/Chat/components/ChatMessage.js +18 -0
- package/dist/components/Chat/components/index.d.ts +8 -8
- package/dist/components/Chat/components/index.js +4 -0
- package/dist/components/Chat/index.d.ts +2 -2
- package/dist/components/Chat/index.js +1 -0
- package/dist/components/Checkbox/components/Checkbox.d.ts +0 -2
- package/dist/components/Checkbox/components/Checkbox.js +11 -0
- package/dist/components/Checkbox/components/index.d.ts +2 -2
- package/dist/components/Checkbox/components/index.js +1 -0
- package/dist/components/Checkbox/index.d.ts +2 -2
- package/dist/components/Checkbox/index.js +1 -0
- package/dist/components/ChecklistRow/components/ChecklistRow.js +18 -0
- package/dist/components/ChecklistRow/components/index.d.ts +2 -2
- package/dist/components/ChecklistRow/components/index.js +1 -0
- package/dist/components/ChecklistRow/index.d.ts +2 -2
- package/dist/components/ChecklistRow/index.js +1 -0
- package/dist/components/CmdPalette/components/CmdPalette.d.ts +0 -2
- package/dist/components/CmdPalette/components/CmdPalette.js +169 -0
- package/dist/components/CmdPalette/components/index.d.ts +2 -2
- package/dist/components/CmdPalette/components/index.js +1 -0
- package/dist/components/CmdPalette/index.d.ts +2 -2
- package/dist/components/CmdPalette/index.js +1 -0
- package/dist/components/CommandPrompt/components/CommandPrompt.d.ts +0 -2
- package/dist/components/CommandPrompt/components/CommandPrompt.js +34 -0
- package/dist/components/CommandPrompt/components/index.d.ts +2 -2
- package/dist/components/CommandPrompt/components/index.js +1 -0
- package/dist/components/CommandPrompt/index.d.ts +1 -1
- package/dist/components/CommandPrompt/index.js +1 -0
- package/dist/components/CopyButton/components/CopyButton.js +50 -0
- package/dist/components/CopyButton/components/index.d.ts +2 -2
- package/dist/components/CopyButton/components/index.js +1 -0
- package/dist/components/CopyButton/index.d.ts +2 -2
- package/dist/components/CopyButton/index.js +1 -0
- package/dist/components/DosFigure/components/DosFigure.d.ts +0 -1
- package/dist/components/DosFigure/components/DosFigure.js +26 -0
- package/dist/components/DosFigure/components/index.d.ts +2 -2
- package/dist/components/DosFigure/components/index.js +1 -0
- package/dist/components/DosFigure/index.d.ts +2 -2
- package/dist/components/DosFigure/index.js +1 -0
- package/dist/components/EmptyState/components/EmptyState.js +18 -0
- package/dist/components/EmptyState/components/index.d.ts +2 -2
- package/dist/components/EmptyState/components/index.js +1 -0
- package/dist/components/EmptyState/index.d.ts +2 -2
- package/dist/components/EmptyState/index.js +1 -0
- package/dist/components/FilterBar/components/FilterBar.d.ts +0 -1
- package/dist/components/FilterBar/components/FilterBar.js +120 -0
- package/dist/components/FilterBar/components/index.d.ts +2 -2
- package/dist/components/FilterBar/components/index.js +1 -0
- package/dist/components/FilterBar/index.d.ts +2 -2
- package/dist/components/FilterBar/index.js +1 -0
- package/dist/components/Footer/components/Footer.d.ts +0 -1
- package/dist/components/Footer/components/Footer.js +18 -0
- package/dist/components/Footer/components/index.d.ts +2 -2
- package/dist/components/Footer/components/index.js +1 -0
- package/dist/components/Footer/index.d.ts +2 -2
- package/dist/components/Footer/index.js +1 -0
- package/dist/components/Header/components/Header.d.ts +1 -2
- package/dist/components/Header/components/Header.js +13 -0
- package/dist/components/Header/components/index.d.ts +2 -2
- package/dist/components/Header/components/index.js +1 -0
- package/dist/components/Header/index.d.ts +2 -2
- package/dist/components/Header/index.js +1 -0
- package/dist/components/Icon/components/Icon.d.ts +0 -1
- package/dist/components/Icon/components/Icon.js +78 -0
- package/dist/components/Icon/components/index.d.ts +2 -2
- package/dist/components/Icon/components/index.js +1 -0
- package/dist/components/Icon/index.d.ts +1 -1
- package/dist/components/Icon/index.js +1 -0
- package/dist/components/InlineExpand/components/InlineExpand.d.ts +0 -1
- package/dist/components/InlineExpand/components/InlineExpand.js +50 -0
- package/dist/components/InlineExpand/components/index.d.ts +2 -2
- package/dist/components/InlineExpand/components/index.js +1 -0
- package/dist/components/InlineExpand/index.d.ts +2 -2
- package/dist/components/InlineExpand/index.js +1 -0
- package/dist/components/InlineLink/components/InlineLink.d.ts +0 -1
- package/dist/components/InlineLink/components/InlineLink.js +61 -0
- package/dist/components/InlineLink/components/index.d.ts +2 -2
- package/dist/components/InlineLink/components/index.js +1 -0
- package/dist/components/InlineLink/index.d.ts +2 -2
- package/dist/components/InlineLink/index.js +1 -0
- package/dist/components/Input/components/Input.d.ts +0 -1
- package/dist/components/Input/components/Input.js +18 -0
- package/dist/components/Input/components/index.d.ts +2 -2
- package/dist/components/Input/components/index.js +1 -0
- package/dist/components/Input/index.d.ts +1 -1
- package/dist/components/Input/index.js +1 -0
- package/dist/components/LabeledProgress/components/LabeledProgress.d.ts +0 -1
- package/dist/components/LabeledProgress/components/LabeledProgress.js +16 -0
- package/dist/components/LabeledProgress/components/index.d.ts +2 -2
- package/dist/components/LabeledProgress/components/index.js +1 -0
- package/dist/components/LabeledProgress/index.d.ts +2 -2
- package/dist/components/LabeledProgress/index.js +1 -0
- package/dist/components/LedgerRow/components/LedgerRow.js +15 -0
- package/dist/components/LedgerRow/components/index.d.ts +2 -2
- package/dist/components/LedgerRow/components/index.js +1 -0
- package/dist/components/LedgerRow/index.d.ts +2 -2
- package/dist/components/LedgerRow/index.js +1 -0
- package/dist/components/LegalPage/components/LegalPage.d.ts +0 -1
- package/dist/components/LegalPage/components/LegalPage.js +11 -0
- package/dist/components/LegalPage/components/clauses.js +28 -0
- package/dist/components/LegalPage/components/index.d.ts +4 -4
- package/dist/components/LegalPage/components/index.js +2 -0
- package/dist/components/LegalPage/index.d.ts +2 -2
- package/dist/components/LegalPage/index.js +1 -0
- package/dist/components/Lightbox/components/Lightbox.d.ts +1 -3
- package/dist/components/Lightbox/components/Lightbox.js +97 -0
- package/dist/components/Lightbox/components/index.d.ts +2 -2
- package/dist/components/Lightbox/components/index.js +1 -0
- package/dist/components/Lightbox/index.d.ts +2 -2
- package/dist/components/Lightbox/index.js +1 -0
- package/dist/components/Modal/components/Modal.d.ts +0 -2
- package/dist/components/Modal/components/Modal.js +37 -0
- package/dist/components/Modal/components/index.d.ts +2 -2
- package/dist/components/Modal/components/index.js +1 -0
- package/dist/components/Modal/index.d.ts +2 -2
- package/dist/components/Modal/index.js +1 -0
- package/dist/components/Nav/components/Nav.d.ts +0 -1
- package/dist/components/Nav/components/Nav.js +69 -0
- package/dist/components/Nav/components/index.d.ts +2 -2
- package/dist/components/Nav/components/index.js +1 -0
- package/dist/components/Nav/index.d.ts +2 -2
- package/dist/components/Nav/index.js +1 -0
- package/dist/components/Notification/components/Notification.d.ts +1 -2
- package/dist/components/Notification/components/Notification.js +34 -0
- package/dist/components/Notification/components/index.d.ts +2 -2
- package/dist/components/Notification/components/index.js +1 -0
- package/dist/components/Notification/index.d.ts +1 -1
- package/dist/components/Notification/index.js +1 -0
- package/dist/components/Progress/components/Progress.d.ts +0 -1
- package/dist/components/Progress/components/Progress.js +72 -0
- package/dist/components/Progress/components/index.d.ts +2 -2
- package/dist/components/Progress/components/index.js +1 -0
- package/dist/components/Progress/index.d.ts +2 -2
- package/dist/components/Progress/index.js +1 -0
- package/dist/components/RetroEffects/components/RetroEffects.d.ts +0 -1
- package/dist/components/RetroEffects/components/RetroEffects.js +163 -0
- package/dist/components/RetroEffects/components/index.d.ts +2 -2
- package/dist/components/RetroEffects/components/index.js +1 -0
- package/dist/components/RetroEffects/index.d.ts +2 -2
- package/dist/components/RetroEffects/index.js +1 -0
- package/dist/components/SectionHeading/components/SectionHeading.js +18 -0
- package/dist/components/SectionHeading/components/index.d.ts +2 -2
- package/dist/components/SectionHeading/components/index.js +1 -0
- package/dist/components/SectionHeading/index.d.ts +2 -2
- package/dist/components/SectionHeading/index.js +1 -0
- package/dist/components/Select/components/Select.js +14 -0
- package/dist/components/Select/components/index.d.ts +2 -2
- package/dist/components/Select/components/index.js +1 -0
- package/dist/components/Select/index.d.ts +2 -2
- package/dist/components/Select/index.js +1 -0
- package/dist/components/Separator/components/Separator.d.ts +0 -1
- package/dist/components/Separator/components/Separator.js +11 -0
- package/dist/components/Separator/components/index.d.ts +2 -2
- package/dist/components/Separator/components/index.js +1 -0
- package/dist/components/Separator/index.d.ts +2 -2
- package/dist/components/Separator/index.js +1 -0
- package/dist/components/Skeleton/components/Skeleton.d.ts +0 -1
- package/dist/components/Skeleton/components/Skeleton.js +52 -0
- package/dist/components/Skeleton/components/index.d.ts +2 -2
- package/dist/components/Skeleton/components/index.js +1 -0
- package/dist/components/Skeleton/index.d.ts +2 -2
- package/dist/components/Skeleton/index.js +1 -0
- package/dist/components/Stat/components/Stat.d.ts +0 -1
- package/dist/components/Stat/components/Stat.js +42 -0
- package/dist/components/Stat/components/index.d.ts +2 -2
- package/dist/components/Stat/components/index.js +1 -0
- package/dist/components/Stat/index.d.ts +2 -2
- package/dist/components/Stat/index.js +1 -0
- package/dist/components/Switch/components/Switch.d.ts +0 -1
- package/dist/components/Switch/components/Switch.js +11 -0
- package/dist/components/Switch/components/index.d.ts +2 -2
- package/dist/components/Switch/components/index.js +1 -0
- package/dist/components/Switch/index.d.ts +2 -2
- package/dist/components/Switch/index.js +1 -0
- package/dist/components/Tabs/components/Tabs.d.ts +0 -1
- package/dist/components/Tabs/components/Tabs.js +54 -0
- package/dist/components/Tabs/components/index.d.ts +2 -2
- package/dist/components/Tabs/components/index.js +1 -0
- package/dist/components/Tabs/index.d.ts +2 -2
- package/dist/components/Tabs/index.js +1 -0
- package/dist/components/Tag/components/Tag.d.ts +0 -1
- package/dist/components/Tag/components/Tag.js +46 -0
- package/dist/components/Tag/components/TagGroup.js +15 -0
- package/dist/components/Tag/components/index.d.ts +4 -4
- package/dist/components/Tag/components/index.js +2 -0
- package/dist/components/Tag/index.d.ts +2 -2
- package/dist/components/Tag/index.js +1 -0
- package/dist/components/Terminal/components/Terminal.d.ts +0 -2
- package/dist/components/Terminal/components/Terminal.js +43 -0
- package/dist/components/Terminal/components/index.d.ts +2 -2
- package/dist/components/Terminal/components/index.js +1 -0
- package/dist/components/Terminal/index.d.ts +1 -1
- package/dist/components/Terminal/index.js +1 -0
- package/dist/components/TextScramble/components/TextScramble.d.ts +0 -1
- package/dist/components/TextScramble/components/TextScramble.js +14 -0
- package/dist/components/TextScramble/components/index.d.ts +2 -2
- package/dist/components/TextScramble/components/index.js +1 -0
- package/dist/components/TextScramble/index.d.ts +1 -1
- package/dist/components/TextScramble/index.js +1 -0
- package/dist/components/TimelineContainer/components/MasterDetailLayout.d.ts +1 -3
- package/dist/components/TimelineContainer/components/MasterDetailLayout.js +77 -0
- package/dist/components/TimelineContainer/components/TimelineAxis.d.ts +0 -1
- package/dist/components/TimelineContainer/components/TimelineAxis.js +8 -0
- package/dist/components/TimelineContainer/components/TimelineContainer.d.ts +1 -3
- package/dist/components/TimelineContainer/components/TimelineContainer.js +218 -0
- package/dist/components/TimelineContainer/components/TimelineContent.d.ts +1 -1
- package/dist/components/TimelineContainer/components/TimelineContent.js +23 -0
- package/dist/components/TimelineContainer/components/TimelineEntryCard.d.ts +1 -2
- package/dist/components/TimelineContainer/components/TimelineEntryCard.js +50 -0
- package/dist/components/TimelineContainer/components/ZoomControls.d.ts +2 -3
- package/dist/components/TimelineContainer/components/ZoomControls.js +16 -0
- package/dist/components/TimelineContainer/components/index.d.ts +5 -5
- package/dist/components/TimelineContainer/components/index.js +2 -0
- package/dist/components/TimelineContainer/components/timelineUtils.d.ts +1 -1
- package/dist/components/TimelineContainer/components/timelineUtils.js +185 -0
- package/dist/components/TimelineContainer/components/types.js +7 -0
- package/dist/components/TimelineContainer/components/useDrillDown.d.ts +1 -1
- package/dist/components/TimelineContainer/components/useDrillDown.js +83 -0
- package/dist/components/TimelineContainer/components/useSelection.js +51 -0
- package/dist/components/TimelineContainer/components/useZoom.d.ts +1 -1
- package/dist/components/TimelineContainer/components/useZoom.js +54 -0
- package/dist/components/TimelineContainer/components/variants/TimelineEntryCardGallery.d.ts +1 -2
- package/dist/components/TimelineContainer/components/variants/TimelineEntryCardGallery.js +67 -0
- package/dist/components/TimelineContainer/components/variants/TimelineEntryCardImage.d.ts +1 -2
- package/dist/components/TimelineContainer/components/variants/TimelineEntryCardImage.js +31 -0
- package/dist/components/TimelineContainer/components/views/DayView.d.ts +1 -1
- package/dist/components/TimelineContainer/components/views/DayView.js +20 -0
- package/dist/components/TimelineContainer/components/views/HourView.d.ts +1 -1
- package/dist/components/TimelineContainer/components/views/HourView.js +22 -0
- package/dist/components/TimelineContainer/components/views/MonthView.d.ts +1 -1
- package/dist/components/TimelineContainer/components/views/MonthView.js +18 -0
- package/dist/components/TimelineContainer/components/views/YearView.d.ts +1 -1
- package/dist/components/TimelineContainer/components/views/YearView.js +13 -0
- package/dist/components/TimelineContainer/components/views/index.d.ts +4 -4
- package/dist/components/TimelineContainer/components/views/index.js +4 -0
- package/dist/components/TimelineContainer/index.d.ts +3 -3
- package/dist/components/TimelineContainer/index.js +2 -0
- package/dist/components/TimelineNode/components/TimelineNode.d.ts +0 -1
- package/dist/components/TimelineNode/components/TimelineNode.js +49 -0
- package/dist/components/TimelineNode/components/index.d.ts +2 -2
- package/dist/components/TimelineNode/components/index.js +1 -0
- package/dist/components/TimelineNode/index.d.ts +2 -2
- package/dist/components/TimelineNode/index.js +1 -0
- package/dist/components/registry.js +247 -0
- package/dist/eidotter.css +1 -1
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/useAnimatedDismiss.d.ts +15 -0
- package/dist/hooks/useAnimatedDismiss.js +29 -0
- package/dist/hooks/useTextScramble.d.ts +21 -0
- package/dist/hooks/useTextScramble.js +91 -0
- package/dist/hooks/useTextScramble.test.d.ts +1 -0
- package/dist/hooks/useThemePortal.d.ts +12 -0
- package/dist/hooks/useThemePortal.js +62 -0
- package/dist/hooks/useThemePortal.test.d.ts +1 -0
- package/dist/utils/cn.d.ts +9 -0
- package/dist/utils/cn.js +12 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/isSafeHref.d.ts +1 -0
- package/dist/utils/isSafeHref.js +22 -0
- package/dist/utils/isSafeUrl.d.ts +8 -0
- package/dist/utils/isSafeUrl.js +18 -0
- package/dist/utils/isSafeUrl.test.d.ts +1 -0
- package/dist/utils/prefersReducedMotion.d.ts +5 -0
- package/dist/utils/prefersReducedMotion.js +8 -0
- package/package.json +9 -2
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { TimelineNode } from '../../../TimelineNode/components/TimelineNode.js';
|
|
5
|
+
import { Tag } from '../../../Tag/components/Tag.js';
|
|
6
|
+
import { TagGroup } from '../../../Tag/components/TagGroup.js';
|
|
7
|
+
import { TimelineEntryCard } from '../TimelineEntryCard.js';
|
|
8
|
+
/**
|
|
9
|
+
* Day-level zoom view: shows day labels with entry cards and content preview.
|
|
10
|
+
*/
|
|
11
|
+
export const DayView = React.memo(({ buckets, selectedEntryId, onEntrySelect, renderEntry, }) => {
|
|
12
|
+
return (_jsx("div", { className: "timeline-view timeline-view--day", role: "list", children: buckets.map((bucket) => (_jsxs("div", { className: "timeline-view__bucket timeline-view__bucket--day", role: "listitem", children: [_jsx("div", { className: "timeline-view__node", children: _jsx(TimelineNode, { shape: "circle", size: "medium", variant: "default", label: bucket.label, labelPosition: "right" }) }), _jsx("div", { className: "timeline-view__content", children: bucket.entries.map((entry) => {
|
|
13
|
+
const isSelected = selectedEntryId === entry.id;
|
|
14
|
+
const defaultRender = () => (_jsx(TimelineEntryCard, { entry: entry, isSelected: isSelected, isExpanded: isSelected, onSelect: onEntrySelect, footer: entry.tags && entry.tags.length > 0 ? (_jsx(TagGroup, { gap: "tight", "aria-label": `Tags for ${entry.title}`, children: entry.tags.map((tag) => (_jsx(Tag, { size: "small", variant: "outlined", children: tag }, tag))) })) : undefined }));
|
|
15
|
+
return (_jsx(React.Fragment, { children: renderEntry
|
|
16
|
+
? renderEntry(entry, { isExpanded: isSelected, isSelected, defaultRender })
|
|
17
|
+
: defaultRender() }, entry.id));
|
|
18
|
+
}) })] }, bucket.periodStart))) }));
|
|
19
|
+
});
|
|
20
|
+
DayView.displayName = 'DayView';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { TimelineNode } from '../../../TimelineNode/components/TimelineNode.js';
|
|
5
|
+
import { Tag } from '../../../Tag/components/Tag.js';
|
|
6
|
+
import { TagGroup } from '../../../Tag/components/TagGroup.js';
|
|
7
|
+
import { Badge } from '../../../Badge/components/Badge.js';
|
|
8
|
+
import { TimelineEntryCard } from '../TimelineEntryCard.js';
|
|
9
|
+
import { formatTimestamp } from '../timelineUtils.js';
|
|
10
|
+
/**
|
|
11
|
+
* Hour-level zoom view: full detail with timestamps and complete content.
|
|
12
|
+
*/
|
|
13
|
+
export const HourView = React.memo(({ buckets, selectedEntryId, onEntrySelect, renderEntry, }) => {
|
|
14
|
+
return (_jsx("div", { className: "timeline-view timeline-view--hour", role: "list", children: buckets.map((bucket) => (_jsxs("div", { className: "timeline-view__bucket timeline-view__bucket--hour", role: "listitem", children: [_jsx("div", { className: "timeline-view__node", children: _jsx(TimelineNode, { shape: "circle", size: "medium", variant: "default", label: bucket.label, labelPosition: "right" }) }), _jsx("div", { className: "timeline-view__content", children: bucket.entries.map((entry) => {
|
|
15
|
+
const isSelected = selectedEntryId === entry.id;
|
|
16
|
+
const defaultRender = () => (_jsxs(TimelineEntryCard, { entry: entry, isSelected: isSelected, isExpanded: true, onSelect: onEntrySelect, footer: _jsxs("div", { className: "timeline-view__entry-footer", children: [entry.tags && entry.tags.length > 0 && (_jsx(TagGroup, { gap: "tight", "aria-label": `Tags for ${entry.title}`, children: entry.tags.map((tag) => (_jsx(Tag, { size: "small", variant: "outlined", children: tag }, tag))) })), entry.type && (_jsx(Badge, { variant: "default", size: "small", children: entry.type }))] }), children: [_jsx("time", { className: "timeline-view__timestamp", dateTime: entry.date, children: formatTimestamp(entry.date) }), entry.kind === 'text' && entry.content !== undefined && (_jsx("div", { className: "timeline-view__entry-content", children: entry.content }))] }));
|
|
17
|
+
return (_jsx(React.Fragment, { children: renderEntry
|
|
18
|
+
? renderEntry(entry, { isExpanded: true, isSelected, defaultRender })
|
|
19
|
+
: defaultRender() }, entry.id));
|
|
20
|
+
}) })] }, bucket.periodStart))) }));
|
|
21
|
+
});
|
|
22
|
+
HourView.displayName = 'HourView';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { TimelineNode } from '../../../TimelineNode/components/TimelineNode.js';
|
|
5
|
+
import { TimelineEntryCard } from '../TimelineEntryCard.js';
|
|
6
|
+
/**
|
|
7
|
+
* Month-level zoom view: shows month labels with entry title lists.
|
|
8
|
+
*/
|
|
9
|
+
export const MonthView = React.memo(({ buckets, selectedEntryId, onEntrySelect, onBucketClick, renderEntry, }) => {
|
|
10
|
+
return (_jsx("div", { className: "timeline-view timeline-view--month", role: "list", children: buckets.map((bucket) => (_jsxs("div", { className: "timeline-view__bucket timeline-view__bucket--month", role: "listitem", children: [_jsx("div", { className: "timeline-view__node", children: _jsx(TimelineNode, { shape: "circle", size: "medium", variant: "default", label: bucket.label, labelPosition: "right", onClick: () => onBucketClick?.(bucket) }) }), _jsx("div", { className: "timeline-view__content", children: bucket.entries.map((entry) => {
|
|
11
|
+
const isSelected = selectedEntryId === entry.id;
|
|
12
|
+
const defaultRender = () => (_jsx(TimelineEntryCard, { entry: entry, isSelected: isSelected, isExpanded: isSelected, onSelect: onEntrySelect }));
|
|
13
|
+
return (_jsx(React.Fragment, { children: renderEntry
|
|
14
|
+
? renderEntry(entry, { isExpanded: isSelected, isSelected, defaultRender })
|
|
15
|
+
: defaultRender() }, entry.id));
|
|
16
|
+
}) })] }, bucket.periodStart))) }));
|
|
17
|
+
});
|
|
18
|
+
MonthView.displayName = 'MonthView';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Button as AriaButton } from 'react-aria-components';
|
|
5
|
+
import { TimelineNode } from '../../../TimelineNode/components/TimelineNode.js';
|
|
6
|
+
import { Badge } from '../../../Badge/components/Badge.js';
|
|
7
|
+
/**
|
|
8
|
+
* Year-level zoom view: shows year labels with entry counts per year.
|
|
9
|
+
*/
|
|
10
|
+
export const YearView = React.memo(({ buckets, onBucketClick }) => {
|
|
11
|
+
return (_jsx("div", { className: "timeline-view timeline-view--year", role: "list", children: buckets.map((bucket) => (_jsx("div", { className: "timeline-view__bucket timeline-view__bucket--year", role: "listitem", children: onBucketClick ? (_jsxs(AriaButton, { className: "timeline-view__bucket-button", onPress: () => onBucketClick(bucket), children: [_jsx("div", { className: "timeline-view__node", children: _jsx(TimelineNode, { shape: "circle", size: "medium", variant: "default", label: bucket.label, labelPosition: "right" }) }), _jsx("div", { className: "timeline-view__content", children: _jsxs(Badge, { variant: "default", size: "small", children: [bucket.entries.length, " ", bucket.entries.length === 1 ? 'entry' : 'entries'] }) })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "timeline-view__node", children: _jsx(TimelineNode, { shape: "circle", size: "medium", variant: "default", label: bucket.label, labelPosition: "right" }) }), _jsx("div", { className: "timeline-view__content", children: _jsxs(Badge, { variant: "default", size: "small", children: [bucket.entries.length, " ", bucket.entries.length === 1 ? 'entry' : 'entries'] }) })] })) }, bucket.periodStart))) }));
|
|
12
|
+
});
|
|
13
|
+
YearView.displayName = 'YearView';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { YearView } from './YearView';
|
|
2
|
-
export { MonthView } from './MonthView';
|
|
3
|
-
export { DayView } from './DayView';
|
|
4
|
-
export { HourView } from './HourView';
|
|
1
|
+
export { YearView } from './YearView.js';
|
|
2
|
+
export { MonthView } from './MonthView.js';
|
|
3
|
+
export { DayView } from './DayView.js';
|
|
4
|
+
export { HourView } from './HourView.js';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { TimelineContainer } from './components';
|
|
2
|
-
export type { TimelineContainerProps, TimelineEntryData, TimelineEntry, TimelineEntryRenderContext, TimelineRenderEntry, TimelineImage, DateBucket, ZoomLevel, } from './components';
|
|
3
|
-
export { ZOOM_LEVELS } from './components';
|
|
1
|
+
export { TimelineContainer } from './components/index.js';
|
|
2
|
+
export type { TimelineContainerProps, TimelineEntryData, TimelineEntry, TimelineEntryRenderContext, TimelineRenderEntry, TimelineImage, DateBucket, ZoomLevel, } from './components/index.js';
|
|
3
|
+
export { ZOOM_LEVELS } from './components/index.js';
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { cn } from '../../../utils/cn.js';
|
|
5
|
+
const sizeMap = {
|
|
6
|
+
sm: 'small', md: 'medium', lg: 'large',
|
|
7
|
+
small: 'small', medium: 'medium', large: 'large',
|
|
8
|
+
};
|
|
9
|
+
const shapeClasses = {
|
|
10
|
+
circle: 'eidotter-timeline-node--circle',
|
|
11
|
+
square: 'eidotter-timeline-node--square',
|
|
12
|
+
diamond: 'eidotter-timeline-node--diamond',
|
|
13
|
+
};
|
|
14
|
+
const variantClasses = {
|
|
15
|
+
default: 'eidotter-timeline-node--default',
|
|
16
|
+
primary: 'eidotter-timeline-node--primary',
|
|
17
|
+
secondary: 'eidotter-timeline-node--secondary',
|
|
18
|
+
accent: 'eidotter-timeline-node--accent',
|
|
19
|
+
};
|
|
20
|
+
const labelPositionClasses = {
|
|
21
|
+
left: 'eidotter-timeline-node--label-left',
|
|
22
|
+
right: 'eidotter-timeline-node--label-right',
|
|
23
|
+
top: 'eidotter-timeline-node--label-top',
|
|
24
|
+
bottom: 'eidotter-timeline-node--label-bottom',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* TimelineNode - Axis marker for timeline/stepper interfaces
|
|
28
|
+
*
|
|
29
|
+
* A versatile node component for timelines, steppers, and progress indicators.
|
|
30
|
+
* Features multiple shapes, glow effects on hover/active states, and optional labels.
|
|
31
|
+
*
|
|
32
|
+
* Uses DOS/CGA aesthetic with amber phosphor glow effects.
|
|
33
|
+
*/
|
|
34
|
+
export const TimelineNode = forwardRef(({ shape = 'circle', variant = 'default', isActive = false, label, labelPosition = 'right', size = 'md', className, onClick, ...props }, ref) => {
|
|
35
|
+
const normalizedSize = sizeMap[size] ?? 'medium';
|
|
36
|
+
const handleClick = () => {
|
|
37
|
+
if (onClick) {
|
|
38
|
+
onClick();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const handleKeyDown = (e) => {
|
|
42
|
+
if (onClick && (e.key === 'Enter' || e.key === ' ')) {
|
|
43
|
+
e.preventDefault();
|
|
44
|
+
onClick();
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
return (_jsxs("div", { ref: ref, className: cn('inline-flex items-center gap-2 font-dos', 'eidotter-timeline-node', shapeClasses[shape], variantClasses[variant], `eidotter-timeline-node--${normalizedSize}`, labelPositionClasses[labelPosition], isActive && 'eidotter-timeline-node--active', onClick && 'eidotter-timeline-node--interactive', className), onClick: handleClick, onKeyDown: handleKeyDown, role: onClick ? 'button' : undefined, tabIndex: onClick ? 0 : undefined, "aria-pressed": onClick ? isActive : undefined, ...props, children: [label && labelPosition === 'left' && (_jsx("span", { className: "eidotter-timeline-node__label eidotter-timeline-node__label--left", children: label })), label && labelPosition === 'top' && (_jsx("span", { className: "eidotter-timeline-node__label eidotter-timeline-node__label--top", children: label })), _jsx("span", { className: "eidotter-timeline-node__marker", "aria-hidden": "true" }), label && labelPosition === 'right' && (_jsx("span", { className: "eidotter-timeline-node__label eidotter-timeline-node__label--right", children: label })), label && labelPosition === 'bottom' && (_jsx("span", { className: "eidotter-timeline-node__label eidotter-timeline-node__label--bottom", children: label }))] }));
|
|
48
|
+
});
|
|
49
|
+
TimelineNode.displayName = 'TimelineNode';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { TimelineNode } from './TimelineNode';
|
|
2
|
-
export type { TimelineNodeProps, TimelineNodeShape, TimelineNodeVariant } from './TimelineNode';
|
|
1
|
+
export { TimelineNode } from './TimelineNode.js';
|
|
2
|
+
export type { TimelineNodeProps, TimelineNodeShape, TimelineNodeVariant } from './TimelineNode.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TimelineNode } from './TimelineNode.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { TimelineNode } from './components';
|
|
2
|
-
export type { TimelineNodeProps, TimelineNodeShape, TimelineNodeVariant } from './components';
|
|
1
|
+
export { TimelineNode } from './components/index.js';
|
|
2
|
+
export type { TimelineNodeProps, TimelineNodeShape, TimelineNodeVariant } from './components/index.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { TimelineNode } from './components/index.js';
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
export const projects = {
|
|
2
|
+
eidotter: { displayName: 'eiDotter' },
|
|
3
|
+
spacewar: { displayName: 'Spacewar!' },
|
|
4
|
+
rizomorf: { displayName: 'rizomorf' },
|
|
5
|
+
'pomodoke-calendar': { displayName: 'PomoDoke Calendar' },
|
|
6
|
+
keepcoin: { displayName: 'KeepCoin' },
|
|
7
|
+
steuerdash: { displayName: 'Steuerdash' },
|
|
8
|
+
sella: { displayName: 'sella' },
|
|
9
|
+
lifelines: { displayName: 'Lifelines' },
|
|
10
|
+
betamorf: { displayName: 'betamorf' },
|
|
11
|
+
dmnctech: { displayName: 'dmnc.tech', url: 'https://dmnc.tech' },
|
|
12
|
+
};
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Registry data
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
export const componentRegistry = {
|
|
17
|
+
Alert: {
|
|
18
|
+
origin: 'eidotter',
|
|
19
|
+
consumers: ['rizomorf', 'steuerdash'],
|
|
20
|
+
since: '0.2.0',
|
|
21
|
+
variants: {
|
|
22
|
+
'type:info': { description: 'Informational message', since: '0.2.0', usedBy: ['rizomorf'] },
|
|
23
|
+
'type:success': { description: 'Success confirmation', since: '0.2.0', usedBy: ['steuerdash'] },
|
|
24
|
+
'type:warning': { description: 'Warning notice', since: '0.2.0', usedBy: ['rizomorf', 'steuerdash'] },
|
|
25
|
+
'type:error': { description: 'Error message', since: '0.2.0', usedBy: ['steuerdash'] },
|
|
26
|
+
'size:small': { description: 'Compact alert for inline contexts', since: '0.2.0' },
|
|
27
|
+
'size:large': { description: 'Full-width alert with icon', since: '0.2.0' },
|
|
28
|
+
},
|
|
29
|
+
platforms: {
|
|
30
|
+
react: { path: 'src/components/Alert', status: 'canonical' },
|
|
31
|
+
swiftui: { status: 'planned' },
|
|
32
|
+
},
|
|
33
|
+
changelog: [
|
|
34
|
+
{ version: '0.8.0', type: 'changed', description: 'Design-craft animation polish with phosphor enter effects' },
|
|
35
|
+
{ version: '0.7.0', type: 'changed', description: 'Replace text-primary with cga-amber for theme consistency' },
|
|
36
|
+
{ version: '0.6.0', type: 'changed', description: 'Fix icon alignment and add prefers-contrast support' },
|
|
37
|
+
{ version: '0.4.0', type: 'changed', description: 'Add phosphor glow effects' },
|
|
38
|
+
{ version: '0.2.0', type: 'added', description: 'Initial Alert component with info/success/warning/error types' },
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
Accordion: {
|
|
42
|
+
origin: 'eidotter',
|
|
43
|
+
consumers: ['rizomorf'],
|
|
44
|
+
},
|
|
45
|
+
AccordionFill: {
|
|
46
|
+
origin: 'eidotter',
|
|
47
|
+
consumers: ['rizomorf'],
|
|
48
|
+
},
|
|
49
|
+
Badge: {
|
|
50
|
+
origin: 'eidotter',
|
|
51
|
+
consumers: ['rizomorf', 'steuerdash'],
|
|
52
|
+
since: '0.3.0',
|
|
53
|
+
variants: {
|
|
54
|
+
'variant:default': { description: 'Neutral badge with muted styling', since: '0.3.0', usedBy: ['rizomorf'] },
|
|
55
|
+
'variant:success': { description: 'Green success indicator', since: '0.3.0', usedBy: ['steuerdash'] },
|
|
56
|
+
'variant:warning': { description: 'Amber warning indicator', since: '0.3.0', usedBy: ['steuerdash'] },
|
|
57
|
+
'variant:error': { description: 'Red error/critical indicator', since: '0.3.0', usedBy: ['steuerdash'] },
|
|
58
|
+
'variant:info': { description: 'Blue informational indicator', since: '0.3.0' },
|
|
59
|
+
'variant:accent': { description: 'Theme accent color badge', since: '0.3.0', usedBy: ['rizomorf'] },
|
|
60
|
+
'size:small': { description: 'Compact inline badge', since: '0.3.0' },
|
|
61
|
+
'size:medium': { description: 'Standard badge size', since: '0.3.0' },
|
|
62
|
+
},
|
|
63
|
+
platforms: {
|
|
64
|
+
react: { path: 'src/components/Badge', status: 'canonical' },
|
|
65
|
+
swiftui: { status: 'planned' },
|
|
66
|
+
},
|
|
67
|
+
changelog: [
|
|
68
|
+
{ version: '0.8.0', type: 'changed', description: 'Design-craft animation polish with phosphor enter keyframes' },
|
|
69
|
+
{ version: '0.7.0', type: 'changed', description: 'Replace text-primary with cga-amber' },
|
|
70
|
+
{ version: '0.5.0', type: 'changed', description: 'Fix text vertical alignment for pixel fonts' },
|
|
71
|
+
{ version: '0.3.0', type: 'added', description: 'Initial Badge component for status indicators' },
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
Breadcrumb: {
|
|
75
|
+
origin: 'rizomorf',
|
|
76
|
+
consumers: ['rizomorf'],
|
|
77
|
+
},
|
|
78
|
+
Button: {
|
|
79
|
+
origin: 'eidotter',
|
|
80
|
+
consumers: ['spacewar', 'rizomorf', 'pomodoke-calendar', 'steuerdash'],
|
|
81
|
+
since: '0.2.0',
|
|
82
|
+
variants: {
|
|
83
|
+
'variant:primary': { description: 'Primary CTA with amber background', since: '0.2.0', usedBy: ['spacewar', 'rizomorf', 'pomodoke-calendar', 'steuerdash'] },
|
|
84
|
+
'variant:secondary': { description: 'Secondary action with border only', since: '0.2.0', usedBy: ['rizomorf', 'steuerdash'] },
|
|
85
|
+
'variant:ghost': { description: 'Minimal button with hover reveal', since: '0.2.0', usedBy: ['rizomorf'] },
|
|
86
|
+
'variant:link': { description: 'Inline link-style button', since: '0.2.0', usedBy: ['rizomorf'] },
|
|
87
|
+
'size:small': { description: 'Compact 1.5rem min-height', since: '0.2.0' },
|
|
88
|
+
'size:medium': { description: 'Standard 2rem min-height', since: '0.2.0' },
|
|
89
|
+
'size:large': { description: 'Prominent 2.5rem min-height', since: '0.2.0' },
|
|
90
|
+
},
|
|
91
|
+
platforms: {
|
|
92
|
+
react: { path: 'src/components/Button', status: 'canonical' },
|
|
93
|
+
swiftui: { path: 'platforms/swiftui/Sources/EiDotterUI/DOSButton.swift', status: 'planned', note: 'POC with primary variant only — not yet production-ready' },
|
|
94
|
+
spritekit: { status: 'token-only', note: 'Spacewar uses tokens only, no UIKit/SwiftUI button' },
|
|
95
|
+
},
|
|
96
|
+
changelog: [
|
|
97
|
+
{ version: '0.11.0', type: 'changed', description: 'Convert font-size to rem tokens for WCAG SC 1.4.4' },
|
|
98
|
+
{ version: '0.8.0', type: 'changed', description: 'Design-craft animation polish across all variants' },
|
|
99
|
+
{ version: '0.7.0', type: 'changed', description: 'Increase font size and weight for readability' },
|
|
100
|
+
{ version: '0.6.0', type: 'changed', description: 'Add phosphor warmup/energize keyframes to all variants' },
|
|
101
|
+
{ version: '0.5.0', type: 'changed', description: 'Fix secondary label visibility in pressed state' },
|
|
102
|
+
{ version: '0.4.0', type: 'changed', description: 'Add CRT phosphor interaction states for primary variant' },
|
|
103
|
+
{ version: '0.2.0', type: 'added', description: 'Initial Button with primary/secondary/ghost/link variants' },
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
Card: {
|
|
107
|
+
origin: 'eidotter',
|
|
108
|
+
consumers: ['rizomorf', 'steuerdash'],
|
|
109
|
+
since: '0.3.0',
|
|
110
|
+
variants: {
|
|
111
|
+
'variant:default': { description: 'Standard card with subtle border', since: '0.3.0', usedBy: ['rizomorf', 'steuerdash'] },
|
|
112
|
+
'variant:elevated': { description: 'Raised card with drop shadow', since: '0.3.0', usedBy: ['steuerdash'] },
|
|
113
|
+
'variant:bordered': { description: 'Strong border emphasis', since: '0.3.0' },
|
|
114
|
+
'variant:glow': { description: 'Phosphor glow border effect', since: '0.4.0', usedBy: ['rizomorf'] },
|
|
115
|
+
'variant:interactive': { description: 'Hover-reactive card for clickable surfaces', since: '0.4.0', usedBy: ['rizomorf'] },
|
|
116
|
+
'variant:minimal': { description: 'Borderless content container', since: '0.4.0' },
|
|
117
|
+
'variant:callout': { description: 'Highlighted callout with accent border', since: '0.4.0' },
|
|
118
|
+
},
|
|
119
|
+
platforms: {
|
|
120
|
+
react: { path: 'src/components/Card', status: 'canonical' },
|
|
121
|
+
swiftui: { status: 'planned' },
|
|
122
|
+
},
|
|
123
|
+
changelog: [
|
|
124
|
+
{ version: '0.11.0', type: 'changed', description: 'Convert font-size to rem tokens for WCAG SC 1.4.4' },
|
|
125
|
+
{ version: '0.8.0', type: 'changed', description: 'Design-craft animation polish with phosphor enter effects' },
|
|
126
|
+
{ version: '0.7.0', type: 'changed', description: 'Replace text-primary with cga-amber' },
|
|
127
|
+
{ version: '0.4.0', type: 'added', description: 'Add glow, interactive, minimal, callout variants' },
|
|
128
|
+
{ version: '0.4.0', type: 'changed', description: 'Add phosphor glow effects and amber dim header background' },
|
|
129
|
+
{ version: '0.3.0', type: 'added', description: 'Initial Card with default/elevated/bordered variants' },
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
Checkbox: { origin: 'eidotter', consumers: ['steuerdash'] },
|
|
133
|
+
CommandPrompt: { origin: 'eidotter', consumers: ['rizomorf'] },
|
|
134
|
+
Icon: { origin: 'eidotter', consumers: ['rizomorf'] },
|
|
135
|
+
Input: { origin: 'eidotter', consumers: ['steuerdash'] },
|
|
136
|
+
Lightbox: { origin: 'eidotter', consumers: ['dmnctech'], since: '0.22.0', originNote: 'Fullscreen image viewer extending Modal pattern. Keyboard nav, prev/next, counter, swipe.' },
|
|
137
|
+
Modal: { origin: 'eidotter', consumers: ['pomodoke-calendar'] },
|
|
138
|
+
Progress: { origin: 'eidotter', consumers: ['steuerdash'], since: '0.3.0' },
|
|
139
|
+
RetroEffects: { origin: 'spacewar', consumers: ['spacewar', 'rizomorf'], originNote: 'CRT scanline/glow effects from Spacewar!' },
|
|
140
|
+
Skeleton: { origin: 'eidotter', consumers: ['dmnctech'], originNote: 'DOS/CGA loading placeholder — shade-character rows (\u2591\u2592\u2593) with CRT hum-bar band rolling top\u2192bottom (DMNC-1018)' },
|
|
141
|
+
Stat: { origin: 'steuerdash', consumers: ['steuerdash'], originNote: 'Key-value display created for tax dashboard' },
|
|
142
|
+
Switch: { origin: 'eidotter', consumers: [] },
|
|
143
|
+
FilterBar: { origin: 'eidotter', consumers: ['lifelines', 'rizomorf'], originNote: 'Multi-select toggle group for faceted filtering' },
|
|
144
|
+
Tag: {
|
|
145
|
+
origin: 'eidotter',
|
|
146
|
+
consumers: ['lifelines', 'rizomorf'],
|
|
147
|
+
since: '0.7.0',
|
|
148
|
+
originNote: 'Interactive labels for tags, categories, and filter chips',
|
|
149
|
+
variants: {
|
|
150
|
+
'variant:default': { description: 'Standard tag with subtle background', since: '0.7.0', usedBy: ['rizomorf'] },
|
|
151
|
+
'variant:outlined': { description: 'Border-only tag', since: '0.7.0', usedBy: ['lifelines'] },
|
|
152
|
+
'variant:filled': { description: 'Solid background tag', since: '0.7.0', usedBy: ['rizomorf', 'lifelines'] },
|
|
153
|
+
'size:small': { description: 'Compact tag for dense layouts', since: '0.7.0' },
|
|
154
|
+
'size:medium': { description: 'Standard tag size', since: '0.7.0' },
|
|
155
|
+
},
|
|
156
|
+
platforms: {
|
|
157
|
+
react: { path: 'src/components/Tag', status: 'canonical' },
|
|
158
|
+
swiftui: { status: 'planned' },
|
|
159
|
+
},
|
|
160
|
+
changelog: [
|
|
161
|
+
{ version: '0.11.0', type: 'changed', description: 'Convert font-size to rem tokens for WCAG SC 1.4.4' },
|
|
162
|
+
{ version: '0.8.0', type: 'changed', description: 'Design-craft animation polish' },
|
|
163
|
+
{ version: '0.7.0', type: 'added', description: 'Initial Tag and TagGroup components' },
|
|
164
|
+
],
|
|
165
|
+
},
|
|
166
|
+
Tabs: { origin: 'eidotter', consumers: ['steuerdash'] },
|
|
167
|
+
Terminal: { origin: 'eidotter', consumers: ['rizomorf'] },
|
|
168
|
+
TimelineNode: { origin: 'lifelines', consumers: ['lifelines', 'rizomorf'], originNote: 'Timeline markers from Lifelines project' },
|
|
169
|
+
InlineExpand: { origin: 'rizomorf', consumers: ['rizomorf'], originNote: 'Inline disclosure widget for expanding text within prose' },
|
|
170
|
+
Separator: { origin: 'rizomorf', consumers: ['rizomorf'], originNote: 'Horizontal/vertical divider for content separation' },
|
|
171
|
+
TimelineContainer: { origin: 'lifelines', consumers: ['lifelines'], originNote: 'Multi-zoom timeline with year/month/day/hour views. Supports interactive, static, and feed modes.' },
|
|
172
|
+
// Chat components
|
|
173
|
+
ChatMessage: { origin: 'eidotter', consumers: [], originNote: 'Single chat message with role-based DOS styling and streaming cursor' },
|
|
174
|
+
ChatHistory: { origin: 'eidotter', consumers: [], originNote: 'Scrollable message list with auto-scroll and role="log" accessibility' },
|
|
175
|
+
ChatInput: { origin: 'eidotter', consumers: [], originNote: 'Multiline DOS-styled textarea with Enter-to-send' },
|
|
176
|
+
ChatContainer: { origin: 'eidotter', consumers: [], originNote: 'Composes ChatHistory + ChatInput into a complete chat interface' },
|
|
177
|
+
// Layout components
|
|
178
|
+
Header: { origin: 'eidotter', consumers: [], originNote: 'Sticky site header composing branding link + Nav — retro/modern variants' },
|
|
179
|
+
Footer: { origin: 'eidotter', consumers: [], originNote: 'DOS-themed footer with default legal links (Impressum + Datenschutz) for German compliance' },
|
|
180
|
+
// Imported from April 2026 design handoff (v0.20.0)
|
|
181
|
+
InlineLink: {
|
|
182
|
+
origin: 'rizomorf',
|
|
183
|
+
consumers: ['rizomorf'],
|
|
184
|
+
since: '0.20.0',
|
|
185
|
+
originNote: 'In-flow navigational anchor — dotted amber underline, phosphor-invert hover, trailing `▸` / `↗`. Distinct from InlineExpand (destination vs disclosure). Closes rizomorf parity gap #03.',
|
|
186
|
+
platforms: { react: { path: 'src/components/InlineLink', status: 'canonical' } },
|
|
187
|
+
changelog: [
|
|
188
|
+
{ version: '0.20.0', type: 'added', description: 'Initial InlineLink — internal + external variants, tabnabbing guard when consumer passes target="_blank"' },
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
DosFigure: {
|
|
192
|
+
origin: 'eidotter',
|
|
193
|
+
consumers: ['rizomorf'],
|
|
194
|
+
since: '0.20.0',
|
|
195
|
+
originNote: 'Demoscene-style painted-screen placeholder (Sierra / LucasArts title-card aesthetic). Amber chrome, 6s scanline sweep, optional annotation pins. Closes rizomorf parity gap #02.',
|
|
196
|
+
platforms: { react: { path: 'src/components/DosFigure', status: 'canonical' } },
|
|
197
|
+
changelog: [
|
|
198
|
+
{ version: '0.20.0', type: 'added', description: 'Initial DosFigure — scanline sweep, phosphor flicker, pin pulse; all animations compositor-only and reduced-motion safe' },
|
|
199
|
+
],
|
|
200
|
+
},
|
|
201
|
+
CmdPalette: {
|
|
202
|
+
origin: 'eidotter',
|
|
203
|
+
consumers: [],
|
|
204
|
+
since: '0.20.0',
|
|
205
|
+
originNote: '⌘K / Ctrl+K command palette overlay. Built on React Aria ModalOverlay/Modal/Dialog (same primitives as Modal). Generic items + scored search + keyboard navigation.',
|
|
206
|
+
platforms: { react: { path: 'src/components/CmdPalette', status: 'canonical' } },
|
|
207
|
+
changelog: [
|
|
208
|
+
{ 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' },
|
|
209
|
+
],
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
// ---------------------------------------------------------------------------
|
|
213
|
+
// Utility functions
|
|
214
|
+
// ---------------------------------------------------------------------------
|
|
215
|
+
export function getComponentMeta(name) {
|
|
216
|
+
return componentRegistry[name];
|
|
217
|
+
}
|
|
218
|
+
export function getComponentsByOrigin(projectId) {
|
|
219
|
+
return Object.entries(componentRegistry)
|
|
220
|
+
.filter(([, meta]) => meta.origin === projectId)
|
|
221
|
+
.map(([name]) => name);
|
|
222
|
+
}
|
|
223
|
+
export function getComponentsByConsumer(projectId) {
|
|
224
|
+
return Object.entries(componentRegistry)
|
|
225
|
+
.filter(([, meta]) => meta.consumers.includes(projectId))
|
|
226
|
+
.map(([name]) => name);
|
|
227
|
+
}
|
|
228
|
+
/** Returns variant names used by a specific consumer for a component */
|
|
229
|
+
export function getVariantsUsedBy(componentName, projectId) {
|
|
230
|
+
const meta = componentRegistry[componentName];
|
|
231
|
+
if (!meta?.variants)
|
|
232
|
+
return [];
|
|
233
|
+
return Object.entries(meta.variants)
|
|
234
|
+
.filter(([, v]) => v.usedBy?.includes(projectId))
|
|
235
|
+
.map(([name]) => name);
|
|
236
|
+
}
|
|
237
|
+
/** Returns a map of variant name → consumers[] for a component */
|
|
238
|
+
export function getVariantConsumerMap(componentName) {
|
|
239
|
+
const meta = componentRegistry[componentName];
|
|
240
|
+
if (!meta?.variants)
|
|
241
|
+
return {};
|
|
242
|
+
const map = {};
|
|
243
|
+
for (const [name, v] of Object.entries(meta.variants)) {
|
|
244
|
+
map[name] = v.usedBy ?? [];
|
|
245
|
+
}
|
|
246
|
+
return map;
|
|
247
|
+
}
|