eidotter 0.40.0 → 0.40.2
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 +2 -0
- package/dist/components/Chat/components/ChatInput.js +1 -1
- package/dist/components/Chat/components/ChatMessage.d.ts +1 -1
- package/dist/components/Chat/components/ChatMessage.js +2 -2
- package/dist/components/CommandPrompt/components/CommandPrompt.js +1 -1
- package/dist/components/Terminal/components/Terminal.js +1 -1
- package/dist/components/registry.js +7 -7
- package/dist/eidotter.css +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.es.js +12 -12
- package/dist/index.umd.js +1 -1
- package/package.json +3 -1
- package/public/favicon.svg +1 -0
package/README.md
CHANGED
|
@@ -59,6 +59,8 @@ import 'eidotter/utilities'; // Optional: .dos-* typography clas
|
|
|
59
59
|
|
|
60
60
|
Granular imports are still available (`eidotter/fonts.css`, `eidotter/tokens.css`) if you want to override the font or tokens independently.
|
|
61
61
|
|
|
62
|
+
**Favicon:** the logomark favicon ships as `eidotter/favicon.svg` (SVG only). Copy it into your site's public dir or point a bundler at it, then `<link rel="icon" href="/favicon.svg" type="image/svg+xml" />`.
|
|
63
|
+
|
|
62
64
|
### With Tailwind
|
|
63
65
|
|
|
64
66
|
If you already use Tailwind, register eiDotter's preset and drop the `eidotter/styles` import (the preset compiles utilities in your build):
|
|
@@ -33,5 +33,5 @@ export const ChatInput = ({ onSend, prompt = '>', placeholder, disabled = false,
|
|
|
33
33
|
textareaRef.current.focus();
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
-
return (_jsxs("div", { className: cn('flex items-start font-dos text-dos-text-md p-2 cursor-text', 'text-dos-text-brand', 'eidotter-chat-input', disabled && 'eidotter-chat-input--disabled', className), onClick: handleContainerClick, ...props, children: [_jsx("span", { className: "text-dos-text-brand mr-2 mt-0.5 whitespace-nowrap select-none", "aria-hidden": "true", children: prompt }), _jsxs("div", { className: "flex items-start flex-1 min-w-0", children: [_jsx("textarea", { ref: textareaRef, className: "eidotter-chat-input__textarea", value: value, onChange: (e) => setValue(e.target.value), onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, rows: 1, "aria-label": "Chat input" }), _jsx("span", { className: "eidotter-chat-input__cursor", "aria-hidden": "true", children: "
|
|
36
|
+
return (_jsxs("div", { className: cn('flex items-start font-dos text-dos-text-md p-2 cursor-text', 'text-dos-text-brand', 'eidotter-chat-input', disabled && 'eidotter-chat-input--disabled', className), onClick: handleContainerClick, ...props, children: [_jsx("span", { className: "text-dos-text-brand mr-2 mt-0.5 whitespace-nowrap select-none", "aria-hidden": "true", children: prompt }), _jsxs("div", { className: "flex items-start flex-1 min-w-0", children: [_jsx("textarea", { ref: textareaRef, className: "eidotter-chat-input__textarea", value: value, onChange: (e) => setValue(e.target.value), onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, rows: 1, "aria-label": "Chat input" }), _jsx("span", { className: "eidotter-chat-input__cursor", "aria-hidden": "true", children: "_" })] })] }));
|
|
37
37
|
};
|
|
@@ -18,6 +18,6 @@ export interface ChatMessageProps {
|
|
|
18
18
|
*
|
|
19
19
|
* User messages display with a `>` prefix, assistant messages with `C:\>`,
|
|
20
20
|
* and system messages appear dimmed. When `isStreaming` is true, a blinking
|
|
21
|
-
*
|
|
21
|
+
* underscore cursor appears after the content.
|
|
22
22
|
*/
|
|
23
23
|
export declare const ChatMessage: React.FC<ChatMessageProps & React.HTMLAttributes<HTMLDivElement>>;
|
|
@@ -10,9 +10,9 @@ const roleClasses = {
|
|
|
10
10
|
*
|
|
11
11
|
* User messages display with a `>` prefix, assistant messages with `C:\>`,
|
|
12
12
|
* and system messages appear dimmed. When `isStreaming` is true, a blinking
|
|
13
|
-
*
|
|
13
|
+
* underscore cursor appears after the content.
|
|
14
14
|
*/
|
|
15
15
|
export const ChatMessage = ({ role, content, isStreaming = false, userPrefix = '>', assistantPrefix = 'C:\\>', className, ...props }) => {
|
|
16
16
|
const prefix = role === 'user' ? userPrefix : role === 'assistant' ? assistantPrefix : '';
|
|
17
|
-
return (_jsxs("div", { className: cn('flex gap-2 font-dos text-dos-text-md leading-[1.4] py-1 whitespace-pre-wrap break-words', roleClasses[role], isStreaming && 'eidotter-chat-message--streaming', className), ...props, children: [prefix && (_jsx("span", { className: "shrink-0 select-none", "aria-hidden": "true", children: prefix })), _jsx("span", { className: "min-w-0", children: content }), isStreaming && (_jsx("span", { className: "eidotter-chat-message__cursor", "aria-hidden": "true", children: "
|
|
17
|
+
return (_jsxs("div", { className: cn('flex gap-2 font-dos text-dos-text-md leading-[1.4] py-1 whitespace-pre-wrap break-words', roleClasses[role], isStreaming && 'eidotter-chat-message--streaming', className), ...props, children: [prefix && (_jsx("span", { className: "shrink-0 select-none", "aria-hidden": "true", children: prefix })), _jsx("span", { className: "min-w-0", children: content }), isStreaming && (_jsx("span", { className: "eidotter-chat-message__cursor", "aria-hidden": "true", children: "_" }))] }));
|
|
18
18
|
};
|
|
@@ -30,5 +30,5 @@ export const CommandPrompt = ({ prompt = 'C:\\>', onCommand, autoFocus = false,
|
|
|
30
30
|
inputRef.current.focus();
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
return (_jsxs("div", { className: `command-prompt ${disabled ? 'command-prompt--disabled' : ''} ${className}`.trim(), onClick: handleContainerClick, children: [_jsx("span", { className: "command-prompt__prompt", "aria-hidden": "true", children: prompt }), _jsxs("div", { className: "command-prompt__input-wrapper", children: [_jsx("input", { ref: inputRef, className: "command-prompt__input", value: value, onChange: (e) => setValue(e.target.value), onKeyDown: handleKeyDown, autoFocus: autoFocus, spellCheck: false, autoComplete: "off", autoCapitalize: "off", autoCorrect: "off", placeholder: placeholder, disabled: disabled, "aria-label": "Command input", size: value.length || placeholder?.length || 1 }), _jsx("span", { className: "command-prompt__cursor", "aria-hidden": "true", children: "
|
|
33
|
+
return (_jsxs("div", { className: `command-prompt ${disabled ? 'command-prompt--disabled' : ''} ${className}`.trim(), onClick: handleContainerClick, children: [_jsx("span", { className: "command-prompt__prompt", "aria-hidden": "true", children: prompt }), _jsxs("div", { className: "command-prompt__input-wrapper", children: [_jsx("input", { ref: inputRef, className: "command-prompt__input", value: value, onChange: (e) => setValue(e.target.value), onKeyDown: handleKeyDown, autoFocus: autoFocus, spellCheck: false, autoComplete: "off", autoCapitalize: "off", autoCorrect: "off", placeholder: placeholder, disabled: disabled, "aria-label": "Command input", size: value.length || placeholder?.length || 1 }), _jsx("span", { className: "command-prompt__cursor", "aria-hidden": "true", children: "_" })] })] }));
|
|
34
34
|
};
|
|
@@ -39,5 +39,5 @@ export const Terminal = ({ size = 'md', title = 'MS-DOS Terminal', state = 'acti
|
|
|
39
39
|
if (windowState === 'minimized') {
|
|
40
40
|
return (_jsx(AriaButton, { className: `terminal terminal--minimized ${className}`.trim(), onPress: handleFocus, "aria-label": `Restore ${title} window`, children: _jsxs("div", { className: "terminal__taskbar-item", children: [_jsx(Icon, { name: "App", size: "S" }), _jsx("span", { className: "terminal__taskbar-title", children: title })] }) }));
|
|
41
41
|
}
|
|
42
|
-
return (_jsxs("div", { ref: terminalRef, className: `terminal terminal--${normalizedSize} terminal--${windowState} ${isMaximized ? 'terminal--maximized' : ''} ${className}`.trim(), tabIndex: 0, role: "dialog", "aria-label": `${title} terminal window`, onFocus: handleFocus, onKeyDown: handleKeyDown, children: [_jsxs("div", { className: "terminal__title-bar", children: [_jsxs("div", { className: "terminal__title", children: [_jsx(Icon, { name: "App", size: "S", "aria-hidden": "true" }), _jsx("span", { className: "terminal__title-text", children: title })] }), (minimizable || maximizable || closeable) && (_jsxs("div", { className: "terminal__controls", children: [minimizable && (_jsx(AriaButton, { className: "terminal__control terminal__control--minimize", onPress: handleMinimize, "aria-label": "Minimize window", children: _jsx(Icon, { name: "Cancel", size: "S" }) })), maximizable && (_jsx(AriaButton, { className: "terminal__control terminal__control--maximize", onPress: handleMaximize, "aria-label": isMaximized ? "Restore window" : "Maximize window", children: _jsx(Icon, { name: isMaximized ? "Fullscreen" : "Add", size: "S" }) })), closeable && (_jsx(AriaButton, { className: "terminal__control terminal__control--close", onPress: handleClose, "aria-label": "Close window", children: _jsx(Icon, { name: "Close", size: "S" }) }))] }))] }), _jsx("div", { className: "terminal__content", role: "main", children: children || (_jsx("div", { className: "terminal__default-content", children: _jsxs("div", { className: "terminal__prompt", children: [_jsx("span", { className: "terminal__path", children: "C:\\\\>" }), _jsx("span", { className: "terminal__cursor",
|
|
42
|
+
return (_jsxs("div", { ref: terminalRef, className: `terminal terminal--${normalizedSize} terminal--${windowState} ${isMaximized ? 'terminal--maximized' : ''} ${className}`.trim(), tabIndex: 0, role: "dialog", "aria-label": `${title} terminal window`, onFocus: handleFocus, onKeyDown: handleKeyDown, children: [_jsxs("div", { className: "terminal__title-bar", children: [_jsxs("div", { className: "terminal__title", children: [_jsx(Icon, { name: "App", size: "S", "aria-hidden": "true" }), _jsx("span", { className: "terminal__title-text", children: title })] }), (minimizable || maximizable || closeable) && (_jsxs("div", { className: "terminal__controls", children: [minimizable && (_jsx(AriaButton, { className: "terminal__control terminal__control--minimize", onPress: handleMinimize, "aria-label": "Minimize window", children: _jsx(Icon, { name: "Cancel", size: "S" }) })), maximizable && (_jsx(AriaButton, { className: "terminal__control terminal__control--maximize", onPress: handleMaximize, "aria-label": isMaximized ? "Restore window" : "Maximize window", children: _jsx(Icon, { name: isMaximized ? "Fullscreen" : "Add", size: "S" }) })), closeable && (_jsx(AriaButton, { className: "terminal__control terminal__control--close", onPress: handleClose, "aria-label": "Close window", children: _jsx(Icon, { name: "Close", size: "S" }) }))] }))] }), _jsx("div", { className: "terminal__content", role: "main", children: children || (_jsx("div", { className: "terminal__default-content", children: _jsxs("div", { className: "terminal__prompt", children: [_jsx("span", { className: "terminal__path", children: "C:\\\\>" }), _jsx("span", { className: "terminal__cursor", "aria-hidden": "true" })] }) })) }), resizable && (_jsx("div", { className: "terminal__resize-handle", "aria-hidden": "true" }))] }));
|
|
43
43
|
};
|
|
@@ -715,7 +715,7 @@ export const componentRegistry = {
|
|
|
715
715
|
origin: 'eidotter',
|
|
716
716
|
consumers: ['doctor-portal', 'dosbts'],
|
|
717
717
|
since: '0.40.0',
|
|
718
|
-
originNote: 'Ring gauge for one metabolic value. Carries the SCUM metabolism-screen dial pattern (value, target, provenance) as used in diabetes apps. Intended consumers: doctor-portal, dosbts (not yet adopted). Figma:
|
|
718
|
+
originNote: 'Ring gauge for one metabolic value. Carries the SCUM metabolism-screen dial pattern (value, target, provenance) as used in diabetes apps. Intended consumers: doctor-portal, dosbts (not yet adopted). Figma: Web DS / Health.',
|
|
719
719
|
variants: {
|
|
720
720
|
'size:sm': { description: 'Compact gauge', since: '0.40.0' },
|
|
721
721
|
'size:md': { description: 'Standard gauge', since: '0.40.0' },
|
|
@@ -743,7 +743,7 @@ export const componentRegistry = {
|
|
|
743
743
|
origin: 'eidotter',
|
|
744
744
|
consumers: ['dosbts'],
|
|
745
745
|
since: '0.40.0',
|
|
746
|
-
originNote: 'Single labelled meter bar with tick and tone/pattern pairing. Carries the SCUM stat-bar pattern (food, water, energy) for diabetes values such as carbs on board. Intended consumer: dosbts (not yet adopted). Figma:
|
|
746
|
+
originNote: 'Single labelled meter bar with tick and tone/pattern pairing. Carries the SCUM stat-bar pattern (food, water, energy) for diabetes values such as carbs on board. Intended consumer: dosbts (not yet adopted). Figma: Web DS / Health.',
|
|
747
747
|
variants: {
|
|
748
748
|
'orientation:vertical': { description: 'Vertical bar with label beneath', since: '0.40.0' },
|
|
749
749
|
'orientation:horizontal': { description: 'Horizontal bar with label alongside', since: '0.40.0' },
|
|
@@ -772,7 +772,7 @@ export const componentRegistry = {
|
|
|
772
772
|
origin: 'eidotter',
|
|
773
773
|
consumers: ['dosbts'],
|
|
774
774
|
since: '0.40.0',
|
|
775
|
-
originNote: 'Layout wrapper for several Meters. Carries the SCUM metabolism-screen stat cluster pattern. Intended consumer: dosbts (not yet adopted). Figma:
|
|
775
|
+
originNote: 'Layout wrapper for several Meters. Carries the SCUM metabolism-screen stat cluster pattern. Intended consumer: dosbts (not yet adopted). Figma: Web DS / Health.',
|
|
776
776
|
variants: {
|
|
777
777
|
'layout:row': { description: 'Meters in a single row', since: '0.40.0' },
|
|
778
778
|
'layout:grid': { description: 'Meters in a wrapping grid', since: '0.40.0' },
|
|
@@ -789,7 +789,7 @@ export const componentRegistry = {
|
|
|
789
789
|
origin: 'eidotter',
|
|
790
790
|
consumers: ['doctor-portal', 'dosbts'],
|
|
791
791
|
since: '0.40.0',
|
|
792
|
-
originNote: 'Banded range bar showing where a value sits against target segments, as in diabetes time-in-range displays. Carries the SCUM condition-bar pattern. Intended consumers: doctor-portal, dosbts (not yet adopted). Figma:
|
|
792
|
+
originNote: 'Banded range bar showing where a value sits against target segments, as in diabetes time-in-range displays. Carries the SCUM condition-bar pattern. Intended consumers: doctor-portal, dosbts (not yet adopted). Figma: Web DS / Health.',
|
|
793
793
|
variants: {
|
|
794
794
|
'orientation:vertical': { description: 'Vertical track', since: '0.40.0' },
|
|
795
795
|
'orientation:horizontal': { description: 'Horizontal track', since: '0.40.0' },
|
|
@@ -819,7 +819,7 @@ export const componentRegistry = {
|
|
|
819
819
|
origin: 'eidotter',
|
|
820
820
|
consumers: ['doctor-portal'],
|
|
821
821
|
since: '0.40.0',
|
|
822
|
-
originNote: 'Bar series for per-period values such as daily carbs or time-in-range, as in diabetes reports. Carries the SCUM history-chart pattern. Intended consumer: doctor-portal (not yet adopted). Figma:
|
|
822
|
+
originNote: 'Bar series for per-period values such as daily carbs or time-in-range, as in diabetes reports. Carries the SCUM history-chart pattern. Intended consumer: doctor-portal (not yet adopted). Figma: Web DS / Health.',
|
|
823
823
|
variants: {
|
|
824
824
|
'size:sm': { description: 'Short plot', since: '0.40.0' },
|
|
825
825
|
'size:md': { description: 'Standard plot', since: '0.40.0' },
|
|
@@ -842,7 +842,7 @@ export const componentRegistry = {
|
|
|
842
842
|
origin: 'eidotter',
|
|
843
843
|
consumers: ['dosbts'],
|
|
844
844
|
since: '0.40.0',
|
|
845
|
-
originNote: 'Stepped block strip of consumer-supplied remaining-amount samples with a now marker (active-on-board curve in diabetes apps). Carries the SCUM timed-effect pattern; no absorption math. Intended consumer: dosbts (not yet adopted). Figma:
|
|
845
|
+
originNote: 'Stepped block strip of consumer-supplied remaining-amount samples with a now marker (active-on-board curve in diabetes apps). Carries the SCUM timed-effect pattern; no absorption math. Intended consumer: dosbts (not yet adopted). Figma: Web DS / Health.',
|
|
846
846
|
variants: {
|
|
847
847
|
'size:sm': { description: 'Compact strip', since: '0.40.0' },
|
|
848
848
|
'size:md': { description: 'Standard strip', since: '0.40.0' },
|
|
@@ -865,7 +865,7 @@ export const componentRegistry = {
|
|
|
865
865
|
origin: 'eidotter',
|
|
866
866
|
consumers: ['doctor-portal', 'dosbts'],
|
|
867
867
|
since: '0.40.0',
|
|
868
|
-
originNote: 'Server-safe row of vitals tiles with value, unit, secondary text and bands, and status. Carries the SCUM vitals header pattern for diabetes summaries. Intended consumers: doctor-portal, dosbts (not yet adopted). Figma:
|
|
868
|
+
originNote: 'Server-safe row of vitals tiles with value, unit, secondary text and bands, and status. Carries the SCUM vitals header pattern for diabetes summaries. Intended consumers: doctor-portal, dosbts (not yet adopted). Figma: Web DS / Health.',
|
|
869
869
|
variants: {
|
|
870
870
|
'size:sm': { description: 'Compact tiles', since: '0.40.0' },
|
|
871
871
|
'size:md': { description: 'Standard tiles', since: '0.40.0' },
|