@inkra/react 0.3.0 → 0.4.3
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 +15 -3
- package/dist/Button.js +3 -2
- package/dist/PencilIcon.d.ts +10 -0
- package/dist/PencilIcon.js +83 -39
- package/dist/PencilLine.js +9 -1
- package/dist/PencilText.js +15 -9
- package/dist/accordion/Accordion.js +65 -5
- package/dist/alert-dialog/index.js +14 -4
- package/dist/audio-player/index.d.ts +2 -0
- package/dist/audio-player/index.js +126 -31
- package/dist/calendar/index.d.ts +4 -1
- package/dist/calendar/index.js +31 -12
- package/dist/carousel/index.js +13 -6
- package/dist/choice-grid/index.d.ts +6 -1
- package/dist/choice-grid/index.js +61 -33
- package/dist/color-picker/GradientEditor.d.ts +39 -0
- package/dist/color-picker/GradientEditor.js +63 -0
- package/dist/color-picker/gradient.d.ts +25 -0
- package/dist/color-picker/gradient.js +60 -0
- package/dist/color-picker/index.d.ts +27 -7
- package/dist/color-picker/index.js +134 -32
- package/dist/color-swatch/index.d.ts +10 -0
- package/dist/color-swatch/index.js +9 -0
- package/dist/command/index.js +27 -4
- package/dist/content/index.d.ts +5 -0
- package/dist/content/index.js +12 -3
- package/dist/context-menu/index.js +1 -1
- package/dist/data-table/index.d.ts +7 -1
- package/dist/data-table/index.js +64 -16
- package/dist/data-table/model.d.ts +2 -0
- package/dist/data-table/model.js +7 -0
- package/dist/date-picker/index.d.ts +2 -0
- package/dist/date-picker/index.js +10 -9
- package/dist/day-agenda/index.d.ts +6 -1
- package/dist/day-agenda/index.js +46 -21
- package/dist/day-agenda/layout.js +65 -9
- package/dist/display/ProgressRing.js +7 -3
- package/dist/display/index.d.ts +4 -1
- package/dist/display/index.js +3 -2
- package/dist/dockable-panel/index.js +5 -5
- package/dist/drawer/index.js +4 -3
- package/dist/editable/index.d.ts +24 -2
- package/dist/editable/index.js +142 -37
- package/dist/empty/illustrations.d.ts +8 -0
- package/dist/empty/illustrations.js +78 -0
- package/dist/empty/index.d.ts +6 -1
- package/dist/empty/index.js +11 -3
- package/dist/flip/index.js +28 -8
- package/dist/form/Field.js +11 -10
- package/dist/form/Textarea.d.ts +3 -1
- package/dist/form/Textarea.js +6 -4
- package/dist/hotkey/index.d.ts +1 -0
- package/dist/hotkey/index.js +6 -4
- package/dist/hover-card/index.js +1 -1
- package/dist/image-cropper/index.js +4 -2
- package/dist/image-viewer/VideoResource.d.ts +21 -0
- package/dist/image-viewer/VideoResource.js +194 -0
- package/dist/image-viewer/index.d.ts +14 -0
- package/dist/image-viewer/index.js +118 -65
- package/dist/image-viewer/lucideGeometry.d.ts +3 -0
- package/dist/image-viewer/lucideGeometry.js +19 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/input-number/index.js +9 -4
- package/dist/internal/cache.d.ts +4 -0
- package/dist/internal/cache.js +18 -1
- package/dist/internal/iconGeometry.d.ts +2 -0
- package/dist/internal/iconGeometry.js +32 -0
- package/dist/internal/renderTokens.d.ts +4 -0
- package/dist/internal/renderTokens.js +4 -0
- package/dist/internal/stroke.d.ts +7 -0
- package/dist/internal/stroke.js +63 -7
- package/dist/internal/surfaceBudget.d.ts +20 -0
- package/dist/internal/surfaceBudget.js +69 -0
- package/dist/internal/surfaceRenderer.js +87 -28
- package/dist/internal/surfaceVisibility.d.ts +3 -0
- package/dist/internal/surfaceVisibility.js +60 -0
- package/dist/internal/textRenderer.d.ts +2 -0
- package/dist/internal/textRenderer.js +3 -3
- package/dist/internal/usePencilSurface.js +17 -1
- package/dist/internal/wash.js +4 -3
- package/dist/journey-map/terrain.js +10 -5
- package/dist/layout/index.js +1 -1
- package/dist/log/index.js +29 -22
- package/dist/markdown/CodeBlock.d.ts +19 -0
- package/dist/markdown/CodeBlock.js +86 -0
- package/dist/markdown/Deletion.d.ts +2 -0
- package/dist/markdown/Deletion.js +69 -0
- package/dist/markdown/icons.d.ts +14 -0
- package/dist/markdown/icons.js +16 -0
- package/dist/markdown/index.d.ts +17 -0
- package/dist/markdown/index.js +175 -0
- package/dist/node-graph/index.d.ts +2 -0
- package/dist/node-graph/index.js +49 -25
- package/dist/number-ticker/precision.js +9 -2
- package/dist/overflow-list/index.js +5 -2
- package/dist/overlay/Overlay.js +1 -1
- package/dist/overlay/Popover.js +3 -3
- package/dist/overlay/themeBridge.js +14 -2
- package/dist/pagination/index.d.ts +10 -1
- package/dist/pagination/index.js +6 -4
- package/dist/pan-zoom/index.d.ts +2 -0
- package/dist/pan-zoom/index.js +7 -6
- package/dist/pencil.d.ts +1 -0
- package/dist/pencil.js +4 -4
- package/dist/radar/index.d.ts +2 -0
- package/dist/radar/index.js +40 -20
- package/dist/rating/index.d.ts +4 -0
- package/dist/rating/index.js +128 -24
- package/dist/resizable/index.js +1 -1
- package/dist/scroll-area/index.d.ts +1 -1
- package/dist/scroll-area/index.js +5 -2
- package/dist/select/MultipleSelect.js +5 -4
- package/dist/select/SearchableSelect.js +61 -6
- package/dist/select/Select.d.ts +1 -0
- package/dist/select/Select.js +3 -1
- package/dist/select/StepperSelect.d.ts +29 -0
- package/dist/select/StepperSelect.js +119 -0
- package/dist/select/index.d.ts +2 -0
- package/dist/select/index.js +1 -0
- package/dist/select/stepperModel.d.ts +7 -0
- package/dist/select/stepperModel.js +29 -0
- package/dist/selection/Checkbox.js +4 -3
- package/dist/selection/RadioGroup.js +29 -13
- package/dist/selection/Switch.js +4 -3
- package/dist/selection/useNativeChecked.d.ts +2 -1
- package/dist/selection/useNativeChecked.js +26 -8
- package/dist/slider/index.js +50 -6
- package/dist/sortable/index.js +6 -2
- package/dist/sparkline/index.js +17 -2
- package/dist/sparkline/model.js +11 -4
- package/dist/styles/accordion.css +228 -0
- package/dist/styles/alert-dialog.css +139 -0
- package/dist/styles/audio-player.css +22 -0
- package/dist/styles/base.css +638 -0
- package/dist/styles/breadcrumb.css +7 -0
- package/dist/styles/calendar.css +62 -0
- package/dist/styles/carousel.css +173 -0
- package/dist/styles/choice-grid.css +226 -0
- package/dist/styles/color-picker.css +281 -0
- package/dist/styles/color-swatch.css +47 -0
- package/dist/styles/command.css +52 -0
- package/dist/styles/content.css +79 -0
- package/dist/styles/context-menu.css +35 -0
- package/dist/styles/data-table.css +31 -0
- package/dist/styles/date-picker.css +107 -0
- package/dist/styles/day-agenda.css +30 -0
- package/dist/styles/display.css +304 -0
- package/dist/styles/dockable-panel.css +110 -0
- package/dist/styles/drawer.css +133 -0
- package/dist/styles/dropdown-menu.css +68 -0
- package/dist/styles/editable.css +145 -0
- package/dist/styles/empty.css +108 -0
- package/dist/styles/flip.css +101 -0
- package/dist/styles/form.css +634 -0
- package/dist/styles/heatmap.css +256 -0
- package/dist/styles/hotkey.css +189 -0
- package/dist/styles/hover-card.css +27 -0
- package/dist/styles/image-cropper.css +205 -0
- package/dist/styles/image-viewer.css +422 -0
- package/dist/styles/input-number.css +21 -0
- package/dist/styles/journey-map.css +19 -0
- package/dist/styles/keypad.css +92 -0
- package/dist/styles/layout.css +72 -0
- package/dist/styles/leaflet.css +661 -0
- package/dist/styles/log.css +203 -0
- package/dist/styles/markdown.css +379 -0
- package/dist/styles/node-graph.css +142 -0
- package/dist/styles/number-ticker.css +83 -0
- package/dist/styles/overflow-list.css +51 -0
- package/dist/styles/overlay.css +284 -0
- package/dist/styles/pagination.css +21 -0
- package/dist/styles/pan-zoom.css +136 -0
- package/dist/styles/radar.css +1 -0
- package/dist/styles/rating.css +121 -0
- package/dist/styles/resizable.css +108 -0
- package/dist/styles/scroll-area.css +122 -0
- package/dist/styles/select.css +557 -0
- package/dist/styles/selection.css +264 -0
- package/dist/styles/slider.css +145 -0
- package/dist/styles/slot.css +109 -0
- package/dist/styles/sortable.css +159 -0
- package/dist/styles/sparkline.css +24 -0
- package/dist/styles/steps.css +27 -0
- package/dist/styles/tabs.css +79 -0
- package/dist/styles/tag-input.css +213 -0
- package/dist/styles/time-picker.css +66 -0
- package/dist/styles/timeline.css +24 -0
- package/dist/styles/toast.css +160 -0
- package/dist/styles/toggle-group.css +107 -0
- package/dist/styles/tooltip.css +78 -0
- package/dist/styles/transfer.css +148 -0
- package/dist/styles/tree-select.css +131 -0
- package/dist/styles/tree.css +59 -0
- package/dist/styles/typewriter.css +62 -0
- package/dist/styles/upload.css +60 -0
- package/dist/styles/virtual-list.css +112 -0
- package/dist/styles.css +2094 -421
- package/dist/tabs/index.d.ts +9 -0
- package/dist/tabs/index.js +66 -16
- package/dist/tabs/useOverflow.d.ts +20 -0
- package/dist/tabs/useOverflow.js +145 -0
- package/dist/tag-input/index.d.ts +7 -2
- package/dist/tag-input/index.js +70 -26
- package/dist/time-picker/index.js +38 -20
- package/dist/toast/index.d.ts +19 -11
- package/dist/toast/index.js +48 -8
- package/dist/toast/manager.d.ts +42 -0
- package/dist/toast/manager.js +85 -0
- package/dist/toast/useToastNavigation.d.ts +3 -0
- package/dist/toast/useToastNavigation.js +75 -0
- package/dist/tokens.css +4 -0
- package/dist/tooltip/Tooltip.js +3 -3
- package/dist/transfer/index.d.ts +5 -0
- package/dist/transfer/index.js +93 -29
- package/dist/transfer/model.d.ts +4 -0
- package/dist/transfer/model.js +37 -11
- package/dist/tree/index.d.ts +5 -1
- package/dist/tree/index.js +5 -5
- package/dist/tree-select/index.js +67 -30
- package/dist/tree-select/model.d.ts +11 -5
- package/dist/tree-select/model.js +111 -83
- package/dist/typewriter/index.js +10 -10
- package/dist/upload/index.js +30 -16
- package/dist/virtual-list/index.js +7 -5
- package/package.json +413 -3
package/dist/slider/index.js
CHANGED
|
@@ -2,15 +2,21 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import * as SliderPrimitive from '@radix-ui/react-slider';
|
|
3
3
|
import { forwardRef, useEffect, useId, useImperativeHandle, useRef, useState } from 'react';
|
|
4
4
|
import { PencilSurface } from '../PencilSurface.js';
|
|
5
|
-
export const Slider = forwardRef(function Slider({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, 'aria-valuetext': ariaValueText, className, defaultValue, dir, disabled = false, getValueLabel, inverted = false, min = 0, max = 100, onValueChange, orientation = 'horizontal', seed, size = 'md', thumbLabels, value, variant = 'standard', ...props }, forwardedRef) {
|
|
5
|
+
export const Slider = forwardRef(function Slider({ 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, 'aria-valuetext': ariaValueText, className, defaultValue, dir, disabled = false, getValueLabel, inverted = false, min = 0, max = 100, name, form, onValueChange, onValueCommit, orientation = 'horizontal', seed, size = 'md', thumbLabels, value, variant = 'standard', ...props }, forwardedRef) {
|
|
6
6
|
const generatedId = useId();
|
|
7
7
|
const rootRef = useRef(null);
|
|
8
8
|
useImperativeHandle(forwardedRef, () => rootRef.current);
|
|
9
|
-
const
|
|
9
|
+
const controlled = value !== undefined;
|
|
10
|
+
const defaultValueRef = useRef([...(defaultValue ?? [min])]);
|
|
11
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(() => [...defaultValueRef.current]);
|
|
10
12
|
const [inferredDir, setInferredDir] = useState('ltr');
|
|
11
13
|
const values = value ?? uncontrolledValue;
|
|
14
|
+
const valuesRef = useRef(values);
|
|
15
|
+
const formInputRefs = useRef(new Map());
|
|
16
|
+
valuesRef.current = values;
|
|
12
17
|
const resolvedDir = dir ?? inferredDir;
|
|
13
18
|
const resolvedSeed = seed ?? `inkra-slider-${generatedId}`;
|
|
19
|
+
const radixFormId = `${generatedId}-radix-inert-form`;
|
|
14
20
|
useEffect(() => {
|
|
15
21
|
const root = rootRef.current;
|
|
16
22
|
if (dir || !root)
|
|
@@ -23,6 +29,38 @@ export const Slider = forwardRef(function Slider({ 'aria-label': ariaLabel, 'ari
|
|
|
23
29
|
}
|
|
24
30
|
return () => observer.disconnect();
|
|
25
31
|
}, [dir]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const root = rootRef.current;
|
|
34
|
+
if (!root)
|
|
35
|
+
return undefined;
|
|
36
|
+
const ownerDocument = root.ownerDocument;
|
|
37
|
+
const candidate = form ? ownerDocument.getElementById(form) : root.closest('form');
|
|
38
|
+
const FormElement = ownerDocument.defaultView?.HTMLFormElement;
|
|
39
|
+
const formElement = FormElement && candidate instanceof FormElement ? candidate : null;
|
|
40
|
+
if (!formElement)
|
|
41
|
+
return undefined;
|
|
42
|
+
let timer;
|
|
43
|
+
const reset = (event) => {
|
|
44
|
+
clearTimeout(timer);
|
|
45
|
+
timer = setTimeout(() => {
|
|
46
|
+
if (event.defaultPrevented)
|
|
47
|
+
return;
|
|
48
|
+
if (controlled) {
|
|
49
|
+
formInputRefs.current.forEach((input, index) => {
|
|
50
|
+
input.value = String(valuesRef.current[index] ?? '');
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
setUncontrolledValue([...defaultValueRef.current]);
|
|
55
|
+
}
|
|
56
|
+
}, 0);
|
|
57
|
+
};
|
|
58
|
+
formElement.addEventListener('reset', reset);
|
|
59
|
+
return () => {
|
|
60
|
+
clearTimeout(timer);
|
|
61
|
+
formElement.removeEventListener('reset', reset);
|
|
62
|
+
};
|
|
63
|
+
}, [controlled, form]);
|
|
26
64
|
const percentage = (number) => max > min ? Math.min(100, Math.max(0, (number - min) / (max - min) * 100)) : 0;
|
|
27
65
|
const low = values.length > 1 ? percentage(Math.min(...values)) : 0;
|
|
28
66
|
const high = values.length ? percentage(Math.max(...values)) : 0;
|
|
@@ -32,14 +70,20 @@ export const Slider = forwardRef(function Slider({ 'aria-label': ariaLabel, 'ari
|
|
|
32
70
|
const clip = {
|
|
33
71
|
clipPath: orientation === 'horizontal' ? `inset(0 ${end}% 0 ${start}%)` : `inset(${start}% 0 ${end}% 0)`,
|
|
34
72
|
};
|
|
35
|
-
return _jsxs(SliderPrimitive.Root, { ...props, className: ['inkra-slider', className].filter(Boolean).join(' '), "data-size": size, "data-variant": variant,
|
|
36
|
-
if (
|
|
73
|
+
return _jsxs(SliderPrimitive.Root, { ...props, className: ['inkra-slider', className].filter(Boolean).join(' '), "data-size": size, "data-variant": variant, dir: resolvedDir, disabled: disabled, form: radixFormId, inverted: inverted, min: min, max: max, onValueChange: next => {
|
|
74
|
+
if (!controlled)
|
|
37
75
|
setUncontrolledValue(next);
|
|
38
76
|
onValueChange?.(next);
|
|
39
|
-
}, orientation: orientation, ref: rootRef, value:
|
|
77
|
+
}, onValueCommit: onValueCommit, orientation: orientation, ref: rootRef, value: values, children: [_jsxs(SliderPrimitive.Track, { className: "inkra-slider__track", children: [_jsx(PencilSurface, { as: "span", "aria-hidden": "true", className: "inkra-slider__track-surface", variant: "outline", radius: variant === 'inset' ? 8 : 3, seed: `${resolvedSeed}-track` }), _jsx("span", { "aria-hidden": "true", className: "inkra-slider__range", style: clip, children: _jsx(PencilSurface, { as: "span", className: "inkra-slider__range-surface", variant: "selection", seed: `${resolvedSeed}-range` }) })] }), values.map((current, index) => {
|
|
40
78
|
const thumbLabel = thumbLabels?.[index];
|
|
41
79
|
const labelledBy = thumbLabel ? undefined : ariaLabelledBy;
|
|
42
80
|
const label = thumbLabel ?? (ariaLabel ? `${ariaLabel}${values.length > 1 ? ` ${index + 1}` : ''}` : labelledBy ? undefined : `Value${values.length > 1 ? ` ${index + 1}` : ''}`);
|
|
43
|
-
|
|
81
|
+
const inputName = name ? values.length > 1 ? `${name}[]` : name : undefined;
|
|
82
|
+
return _jsxs(SliderPrimitive.unstable_ThumbProvider, { name: inputName, children: [_jsx(SliderPrimitive.unstable_ThumbTrigger, { "aria-describedby": ariaDescribedBy, "aria-label": label, "aria-labelledby": labelledBy, "aria-valuenow": current, "aria-valuetext": getValueLabel?.(current, index) ?? ariaValueText, className: "inkra-slider__thumb", children: _jsx(PencilSurface, { as: "span", "aria-hidden": "true", className: "inkra-slider__thumb-surface", variant: "paper", radius: 8, seed: `${resolvedSeed}-thumb-${index}`, children: _jsx(PencilSurface, { as: "span", className: "inkra-slider__focus-ring", variant: "outline", radius: 8, seed: `${resolvedSeed}-focus-${index}` }) }) }), _jsx(SliderPrimitive.unstable_BubbleInput, { disabled: disabled, form: form, name: inputName, ref: input => {
|
|
83
|
+
if (input)
|
|
84
|
+
formInputRefs.current.set(index, input);
|
|
85
|
+
else
|
|
86
|
+
formInputRefs.current.delete(index);
|
|
87
|
+
} })] }, index);
|
|
44
88
|
})] });
|
|
45
89
|
});
|
package/dist/sortable/index.js
CHANGED
|
@@ -100,7 +100,7 @@ function SortableContainer({ container, getItemId, renderItem, renderContainerHe
|
|
|
100
100
|
id: engineContainerId(container.id),
|
|
101
101
|
data: { type: 'inkra-sortable-container', containerId: container.id, disabled },
|
|
102
102
|
});
|
|
103
|
-
const ids = container.items.map((item) => engineItemId(getItemId(item)));
|
|
103
|
+
const ids = useMemo(() => container.items.map((item) => engineItemId(getItemId(item))), [container.items, getItemId]);
|
|
104
104
|
const layout = container.layout ?? 'list';
|
|
105
105
|
const acceptingOver = isOver && !disabled;
|
|
106
106
|
return _jsxs(PencilSurface, { as: "section", className: ['inkra-sortable__container', containerClassName].filter(Boolean).join(' '), "data-disabled": disabled || undefined, "data-layout": layout, "data-over": acceptingOver || undefined, "aria-disabled": disabled || undefined, "aria-label": container.label ?? String(container.id), ref: setNodeRef, seed: `sortable-container-${String(container.id)}`, variant: "paper", children: [acceptingOver && _jsx(PencilSurface, { "aria-hidden": "true", as: "span", className: "inkra-sortable__container-target", seed: `sortable-container-${String(container.id)}-target`, variant: "selection" }), (renderContainerHeader || container.label) && _jsxs("div", { className: "inkra-sortable__container-header", children: [_jsx("div", { className: "inkra-sortable__container-title", children: renderContainerHeader
|
|
@@ -145,7 +145,7 @@ export function Sortable({ autoScroll = true, className, containerClassName, con
|
|
|
145
145
|
const initialRef = useRef([]);
|
|
146
146
|
const projectedRef = useRef([]);
|
|
147
147
|
const sensors = useSensors(useSensor(MouseSensor, { activationConstraint: { distance: 6 } }), useSensor(TouchSensor, { activationConstraint: { delay: 180, tolerance: 8 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
|
|
148
|
-
const visibleContainers = projected ??
|
|
148
|
+
const visibleContainers = projected ?? containers;
|
|
149
149
|
const activeLocation = activeId === null ? null : findSortableLocation(visibleContainers, activeId, getItemId);
|
|
150
150
|
const activeContainer = activeLocation === null
|
|
151
151
|
? null
|
|
@@ -227,12 +227,16 @@ export function Sortable({ autoScroll = true, className, containerClassName, con
|
|
|
227
227
|
function handleDragOver(event) {
|
|
228
228
|
const overData = getEngineData(event.over);
|
|
229
229
|
if (!event.over || overData?.disabled) {
|
|
230
|
+
if (sortableContainersEqual(projectedRef.current, initialRef.current, getItemId))
|
|
231
|
+
return;
|
|
230
232
|
const restored = cloneSortableContainers(initialRef.current);
|
|
231
233
|
projectedRef.current = restored;
|
|
232
234
|
setProjected(restored);
|
|
233
235
|
return;
|
|
234
236
|
}
|
|
235
237
|
const next = getDropProjection(projectedRef.current, event, getItemId);
|
|
238
|
+
if (sortableContainersEqual(projectedRef.current, next, getItemId))
|
|
239
|
+
return;
|
|
236
240
|
projectedRef.current = next;
|
|
237
241
|
setProjected(next);
|
|
238
242
|
}
|
package/dist/sparkline/index.js
CHANGED
|
@@ -36,10 +36,25 @@ export const Sparkline = forwardRef(function Sparkline({ data, type = 'line', wi
|
|
|
36
36
|
value: point.value === null ? null : Math.min(max ?? Infinity, Math.max(min ?? -Infinity, point.value)),
|
|
37
37
|
})), [max, min, points]);
|
|
38
38
|
const geometry = useMemo(() => createSparklineGeometry(boundedPoints, width, height), [boundedPoints, height, width]);
|
|
39
|
-
const [activeIndex, setActiveIndex] = useState(
|
|
39
|
+
const [activeIndex, setActiveIndex] = useState(() => {
|
|
40
|
+
for (let index = points.length - 1; index >= 0; index--)
|
|
41
|
+
if (points[index].value !== null)
|
|
42
|
+
return index;
|
|
43
|
+
return null;
|
|
44
|
+
});
|
|
40
45
|
const activePoint = activeIndex === null ? null : points[activeIndex] ?? null;
|
|
41
46
|
const effectiveShowPoints = showPoints || values.length === 1;
|
|
42
|
-
const summary =
|
|
47
|
+
const summary = useMemo(() => {
|
|
48
|
+
if (!values.length)
|
|
49
|
+
return 'No data';
|
|
50
|
+
let minimum = values[0];
|
|
51
|
+
let maximum = values[0];
|
|
52
|
+
for (let index = 1; index < values.length; index++) {
|
|
53
|
+
minimum = Math.min(minimum, values[index]);
|
|
54
|
+
maximum = Math.max(maximum, values[index]);
|
|
55
|
+
}
|
|
56
|
+
return `Current ${values[values.length - 1]}, min ${minimum}, max ${maximum}`;
|
|
57
|
+
}, [values]);
|
|
43
58
|
const onKeyDown = (event) => {
|
|
44
59
|
if (!points.length || !['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key))
|
|
45
60
|
return;
|
package/dist/sparkline/model.js
CHANGED
|
@@ -4,11 +4,18 @@ export function normalizeSparklineData(data) {
|
|
|
4
4
|
return data.map((value, index) => ({ index, value: typeof value === 'number' && Number.isFinite(value) ? value : null }));
|
|
5
5
|
}
|
|
6
6
|
export function sparklineDomain(points) {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
let min = Infinity;
|
|
8
|
+
let max = -Infinity;
|
|
9
|
+
let hasValue = false;
|
|
10
|
+
for (const point of points) {
|
|
11
|
+
if (point.value === null)
|
|
12
|
+
continue;
|
|
13
|
+
hasValue = true;
|
|
14
|
+
min = Math.min(min, point.value);
|
|
15
|
+
max = Math.max(max, point.value);
|
|
16
|
+
}
|
|
17
|
+
if (!hasValue)
|
|
9
18
|
return [0, 1];
|
|
10
|
-
const min = Math.min(...values);
|
|
11
|
-
const max = Math.max(...values);
|
|
12
19
|
if (min === max) {
|
|
13
20
|
const pad = Math.abs(min) * 0.12 || 1;
|
|
14
21
|
return [min - pad, max + pad];
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
.inkra-accordion {
|
|
2
|
+
color: var(--inkra-ink);
|
|
3
|
+
width: 100%;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.inkra-accordion[data-orientation="horizontal"] {
|
|
7
|
+
display: flex;
|
|
8
|
+
max-width: 100%;
|
|
9
|
+
overflow-x: auto;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.inkra-accordion__item {
|
|
13
|
+
min-width: 0;
|
|
14
|
+
position: relative;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.inkra-accordion[data-orientation="horizontal"] > .inkra-accordion__item {
|
|
18
|
+
display: flex;
|
|
19
|
+
flex: 0 0 auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.inkra-accordion__header {
|
|
23
|
+
font: inherit;
|
|
24
|
+
margin: 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.inkra-accordion__trigger {
|
|
28
|
+
align-items: center;
|
|
29
|
+
appearance: none;
|
|
30
|
+
background: transparent;
|
|
31
|
+
border: 0;
|
|
32
|
+
box-sizing: border-box;
|
|
33
|
+
color: var(--inkra-ink);
|
|
34
|
+
cursor: pointer;
|
|
35
|
+
display: flex;
|
|
36
|
+
font-family: var(--inkra-font-body);
|
|
37
|
+
font-size: var(--inkra-text-md);
|
|
38
|
+
font-weight: var(--inkra-weight-regular);
|
|
39
|
+
gap: var(--inkra-space-3);
|
|
40
|
+
justify-content: space-between;
|
|
41
|
+
letter-spacing: var(--inkra-letter-spacing);
|
|
42
|
+
line-height: var(--inkra-line-ui);
|
|
43
|
+
min-height: var(--inkra-touch-target);
|
|
44
|
+
min-width: var(--inkra-touch-target);
|
|
45
|
+
padding: var(--inkra-space-2) var(--inkra-space-3);
|
|
46
|
+
position: relative;
|
|
47
|
+
text-align: start;
|
|
48
|
+
width: 100%;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.inkra-accordion__trigger:focus-visible {
|
|
52
|
+
outline: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.inkra-accordion__trigger:disabled,
|
|
56
|
+
.inkra-accordion__item[data-disabled] .inkra-accordion__trigger {
|
|
57
|
+
cursor: not-allowed;
|
|
58
|
+
opacity: 0.55;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.inkra-accordion__focus-ring {
|
|
62
|
+
--inkra-accent-strong: var(--inkra-focus);
|
|
63
|
+
|
|
64
|
+
display: block !important;
|
|
65
|
+
inset: var(--inkra-focus-width);
|
|
66
|
+
opacity: 0;
|
|
67
|
+
pointer-events: none;
|
|
68
|
+
position: absolute !important;
|
|
69
|
+
transition: opacity var(--inkra-motion-fast) var(--inkra-ease);
|
|
70
|
+
z-index: 2;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.inkra-accordion__trigger:focus-visible .inkra-accordion__focus-ring {
|
|
74
|
+
opacity: 1;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.inkra-accordion__trigger-label {
|
|
78
|
+
min-width: 0;
|
|
79
|
+
position: relative;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.inkra-accordion__trigger-icon {
|
|
83
|
+
align-items: center;
|
|
84
|
+
color: var(--inkra-ink-muted);
|
|
85
|
+
display: inline-flex;
|
|
86
|
+
flex: 0 0 var(--inkra-icon-md);
|
|
87
|
+
height: var(--inkra-icon-md);
|
|
88
|
+
justify-content: center;
|
|
89
|
+
pointer-events: none;
|
|
90
|
+
transition: transform var(--inkra-motion-fast) var(--inkra-ease);
|
|
91
|
+
width: var(--inkra-icon-md);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.inkra-accordion__trigger[data-state="open"] .inkra-accordion__trigger-icon {
|
|
95
|
+
transform: rotate(180deg);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.inkra-accordion__trigger-glyph {
|
|
99
|
+
max-height: 100%;
|
|
100
|
+
max-width: 100%;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.inkra-accordion__content {
|
|
104
|
+
overflow: hidden;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.inkra-accordion__content[data-state="open"] {
|
|
108
|
+
animation: inkra-accordion-content-down var(--inkra-motion-normal) var(--inkra-ease);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.inkra-accordion__content[data-state="closed"] {
|
|
112
|
+
animation: inkra-accordion-content-up var(--inkra-motion-normal) var(--inkra-ease) both;
|
|
113
|
+
height: 0;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.inkra-accordion__content-body {
|
|
117
|
+
box-sizing: border-box;
|
|
118
|
+
color: var(--inkra-ink-muted);
|
|
119
|
+
font-family: var(--inkra-font-body);
|
|
120
|
+
font-size: var(--inkra-text-md);
|
|
121
|
+
line-height: var(--inkra-line-body);
|
|
122
|
+
padding: var(--inkra-space-2) var(--inkra-space-3) var(--inkra-space-4);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.inkra-accordion__content[data-state="open"] > .inkra-accordion__content-body {
|
|
126
|
+
animation: inkra-accordion-body-in var(--inkra-motion-normal) var(--inkra-ease);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
.inkra-accordion__content[data-state="closed"] > .inkra-accordion__content-body {
|
|
130
|
+
animation: inkra-accordion-body-out var(--inkra-motion-normal) var(--inkra-ease) both;
|
|
131
|
+
pointer-events: none;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.inkra-accordion__content-body.inkra-accordion__content[data-state="closed"] {
|
|
135
|
+
padding: 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@keyframes inkra-accordion-body-in {
|
|
139
|
+
from { opacity: 0; transform: translateY(calc(-1 * var(--inkra-space-1))); }
|
|
140
|
+
to { opacity: 1; transform: translateY(0); }
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
@keyframes inkra-accordion-body-out {
|
|
144
|
+
from { opacity: 1; transform: translateY(0); }
|
|
145
|
+
to { opacity: 0; transform: translateY(calc(-1 * var(--inkra-space-1))); }
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.inkra-accordion__divider {
|
|
149
|
+
color: var(--inkra-border);
|
|
150
|
+
inset-block-end: -4px;
|
|
151
|
+
inset-inline: 0;
|
|
152
|
+
pointer-events: none;
|
|
153
|
+
position: absolute;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.inkra-accordion[data-orientation="horizontal"] .inkra-accordion__divider {
|
|
157
|
+
inset-block: 0;
|
|
158
|
+
inset-inline-end: -4px;
|
|
159
|
+
inset-inline-start: auto;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@keyframes inkra-accordion-content-down {
|
|
163
|
+
from { height: 0; }
|
|
164
|
+
to { height: var(--radix-accordion-content-height); }
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@keyframes inkra-accordion-content-up {
|
|
168
|
+
from { height: var(--radix-accordion-content-height); }
|
|
169
|
+
to { height: 0; }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@keyframes inkra-accordion-content-open-horizontal {
|
|
173
|
+
from { width: 0; }
|
|
174
|
+
to { width: var(--radix-accordion-content-width); }
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
@keyframes inkra-accordion-content-close-horizontal {
|
|
178
|
+
from { width: var(--radix-accordion-content-width); }
|
|
179
|
+
to { width: 0; }
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.inkra-accordion[data-orientation="horizontal"] .inkra-accordion__content[data-state="open"] {
|
|
183
|
+
animation-name: inkra-accordion-content-open-horizontal;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.inkra-accordion[data-orientation="horizontal"] .inkra-accordion__content[data-state="closed"] {
|
|
187
|
+
animation-name: inkra-accordion-content-close-horizontal;
|
|
188
|
+
height: auto;
|
|
189
|
+
width: 0;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
@media (prefers-reduced-motion: reduce) {
|
|
193
|
+
.inkra-accordion__content,
|
|
194
|
+
.inkra-accordion__content-body {
|
|
195
|
+
animation: none !important;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.inkra-accordion__focus-ring,
|
|
199
|
+
.inkra-accordion__trigger-icon {
|
|
200
|
+
transition-duration: 0ms;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@media (forced-colors: active) {
|
|
205
|
+
.inkra-pencil-surface.inkra-accordion__focus-ring {
|
|
206
|
+
display: none !important;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
.inkra-accordion__trigger:focus-visible {
|
|
210
|
+
outline: var(--inkra-focus-width) solid Highlight;
|
|
211
|
+
outline-offset: calc(-1 * var(--inkra-focus-width));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.inkra-accordion__trigger-icon::before {
|
|
215
|
+
content: "+";
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.inkra-accordion__trigger[data-state="open"] .inkra-accordion__trigger-icon::before {
|
|
219
|
+
content: "−";
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
@media print {
|
|
224
|
+
.inkra-accordion__content,
|
|
225
|
+
.inkra-accordion__content-body {
|
|
226
|
+
animation: none !important;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
.inkra-alert-dialog__backdrop {
|
|
2
|
+
animation: inkra-alert-dialog-backdrop-in var(--inkra-motion-normal) var(--inkra-ease);
|
|
3
|
+
background: var(--inkra-overlay);
|
|
4
|
+
inset: 0;
|
|
5
|
+
position: fixed;
|
|
6
|
+
z-index: calc(var(--inkra-z-modal, 30) + var(--inkra-floating-layer-offset, 0));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.inkra-alert-dialog__backdrop[data-state="closed"] {
|
|
10
|
+
animation: inkra-alert-dialog-backdrop-out var(--inkra-motion-normal) var(--inkra-ease);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.inkra-alert-dialog__content {
|
|
14
|
+
animation: inkra-alert-dialog-content-in var(--inkra-motion-normal) var(--inkra-ease);
|
|
15
|
+
inset-block-start: 50%;
|
|
16
|
+
left: 50%;
|
|
17
|
+
max-height: min(80vh, calc(100dvh - var(--inkra-space-8)));
|
|
18
|
+
outline: 0;
|
|
19
|
+
position: fixed;
|
|
20
|
+
transform: translate(-50%, -50%);
|
|
21
|
+
width: min(32rem, calc(100vw - var(--inkra-space-8)));
|
|
22
|
+
z-index: calc(var(--inkra-z-modal, 30) + var(--inkra-floating-layer-offset, 0) + 1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.inkra-alert-dialog__content[data-state="closed"] {
|
|
26
|
+
animation: inkra-alert-dialog-content-out var(--inkra-motion-normal) var(--inkra-ease);
|
|
27
|
+
pointer-events: none;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.inkra-alert-dialog__backdrop[data-state],
|
|
31
|
+
.inkra-alert-dialog__content[data-state] { animation-fill-mode: both; }
|
|
32
|
+
|
|
33
|
+
.inkra-alert-dialog__focus-ring {
|
|
34
|
+
--inkra-accent-strong: var(--inkra-focus);
|
|
35
|
+
inset: var(--inkra-focus-width);
|
|
36
|
+
opacity: 0;
|
|
37
|
+
pointer-events: none;
|
|
38
|
+
position: absolute !important;
|
|
39
|
+
z-index: 2;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.inkra-alert-dialog__content:focus > .inkra-alert-dialog__focus-ring {
|
|
43
|
+
opacity: 1;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.inkra-alert-dialog__surface,
|
|
47
|
+
.inkra-alert-dialog__layout {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
max-height: inherit;
|
|
51
|
+
min-height: 0;
|
|
52
|
+
width: 100%;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.inkra-alert-dialog__surface { color: var(--inkra-ink); overflow: hidden; }
|
|
56
|
+
.inkra-alert-dialog__layout { overflow: auto; overscroll-behavior: contain; scrollbar-gutter: stable; }
|
|
57
|
+
.inkra-alert-dialog__layout:has(> .inkra-alert-dialog__body) { overflow: hidden; }
|
|
58
|
+
|
|
59
|
+
.inkra-alert-dialog__header,
|
|
60
|
+
.inkra-alert-dialog__body,
|
|
61
|
+
.inkra-alert-dialog__footer {
|
|
62
|
+
box-sizing: border-box;
|
|
63
|
+
min-width: 0;
|
|
64
|
+
padding: var(--inkra-space-5);
|
|
65
|
+
position: relative;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.inkra-alert-dialog__header,
|
|
69
|
+
.inkra-alert-dialog__footer { flex: none; }
|
|
70
|
+
.inkra-alert-dialog__heading { display: grid; gap: var(--inkra-space-2); min-width: 0; overflow-wrap: anywhere; }
|
|
71
|
+
.inkra-alert-dialog__body { flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; scrollbar-gutter: stable; }
|
|
72
|
+
.inkra-alert-dialog__footer { display: flex; flex-wrap: wrap; align-items: center; gap: var(--inkra-space-3); justify-content: flex-end; }
|
|
73
|
+
.inkra-alert-dialog__footer[data-align="start"] { justify-content: flex-start; }
|
|
74
|
+
.inkra-alert-dialog__footer[data-align="center"] { justify-content: center; }
|
|
75
|
+
.inkra-alert-dialog__footer > .inkra-button { max-width: 100%; }
|
|
76
|
+
|
|
77
|
+
.inkra-alert-dialog__title {
|
|
78
|
+
color: var(--inkra-ink);
|
|
79
|
+
font-family: var(--inkra-font-display);
|
|
80
|
+
font-size: var(--inkra-text-xl);
|
|
81
|
+
font-weight: var(--inkra-weight-regular);
|
|
82
|
+
line-height: var(--inkra-line-ui);
|
|
83
|
+
margin: 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.inkra-alert-dialog__description {
|
|
87
|
+
color: var(--inkra-ink-muted);
|
|
88
|
+
font-family: var(--inkra-font-body);
|
|
89
|
+
font-size: var(--inkra-text-md);
|
|
90
|
+
line-height: var(--inkra-line-body);
|
|
91
|
+
margin: 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.inkra-alert-dialog__divider { height: 8px; inset-inline: 0; pointer-events: none; position: absolute; width: 100%; }
|
|
95
|
+
.inkra-alert-dialog__header > .inkra-alert-dialog__divider { bottom: -4px; }
|
|
96
|
+
.inkra-alert-dialog__footer > .inkra-alert-dialog__divider { top: -4px; }
|
|
97
|
+
|
|
98
|
+
@keyframes inkra-alert-dialog-backdrop-in { from { opacity: 0; } to { opacity: 1; } }
|
|
99
|
+
@keyframes inkra-alert-dialog-backdrop-out { from { opacity: 1; } to { opacity: 0; } }
|
|
100
|
+
@keyframes inkra-alert-dialog-content-in {
|
|
101
|
+
from { opacity: 0; transform: translate(-50%, calc(-50% + var(--inkra-space-2))) scale(.98); }
|
|
102
|
+
to { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
|
103
|
+
}
|
|
104
|
+
@keyframes inkra-alert-dialog-content-out {
|
|
105
|
+
from { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
|
106
|
+
to { opacity: 0; transform: translate(-50%, calc(-50% + var(--inkra-space-2))) scale(.98); }
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@media (max-width: 30rem) {
|
|
110
|
+
.inkra-alert-dialog__content {
|
|
111
|
+
width: calc(100vw - var(--inkra-space-4));
|
|
112
|
+
}
|
|
113
|
+
.inkra-alert-dialog__header,
|
|
114
|
+
.inkra-alert-dialog__body,
|
|
115
|
+
.inkra-alert-dialog__footer { padding: var(--inkra-space-4); }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@media (max-height: 30rem) {
|
|
119
|
+
.inkra-alert-dialog__content { max-height: calc(100dvh - var(--inkra-space-4)); }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@media (prefers-reduced-motion: reduce) {
|
|
123
|
+
.inkra-alert-dialog__backdrop,
|
|
124
|
+
.inkra-alert-dialog__content { animation: none !important; }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@media print {
|
|
128
|
+
.inkra-alert-dialog__backdrop,
|
|
129
|
+
.inkra-alert-dialog__content { animation: none !important; }
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@media (forced-colors: active) {
|
|
133
|
+
.inkra-alert-dialog__backdrop { background: CanvasText; opacity: .25; }
|
|
134
|
+
.inkra-alert-dialog__surface { background: Canvas; border: 1px solid CanvasText; }
|
|
135
|
+
.inkra-pencil-surface.inkra-alert-dialog__focus-ring { display: none !important; }
|
|
136
|
+
.inkra-alert-dialog__content:focus { outline: var(--inkra-focus-width) solid Highlight; outline-offset: calc(-1 * var(--inkra-focus-width)); }
|
|
137
|
+
.inkra-alert-dialog__header[data-divided] { border-bottom: 1px solid CanvasText; }
|
|
138
|
+
.inkra-alert-dialog__footer[data-divided] { border-top: 1px solid CanvasText; }
|
|
139
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.inkra-audio-player { box-sizing: border-box; color: var(--inkra-ink); container-type: inline-size; display: grid; gap: var(--inkra-space-3); min-inline-size: 0; padding: var(--inkra-space-4); width: min(100%, 42rem); }
|
|
2
|
+
.inkra-audio-player > audio { height: 1px; opacity: 0; position: absolute; width: 1px; }
|
|
3
|
+
.inkra-audio-player__controls { align-items: center; display: flex; flex-wrap: wrap; gap: var(--inkra-space-2); min-inline-size: 0; }
|
|
4
|
+
.inkra-audio-player__seek { flex: 1 1 12rem; min-inline-size: 8rem; }
|
|
5
|
+
.inkra-audio-player__volume { flex: 0 1 6rem; min-inline-size: 4rem; }
|
|
6
|
+
.inkra-audio-player__seek .inkra-slider, .inkra-audio-player__volume .inkra-slider { min-inline-size: 0; width: 100%; }
|
|
7
|
+
.inkra-audio-player__seek .inkra-slider { --inkra-slider-track-size: 28px; }
|
|
8
|
+
.inkra-audio-player__volume .inkra-slider { --inkra-slider-track-size: 24px; }
|
|
9
|
+
.inkra-audio-player__settings { align-items: center; display: flex; flex: 0 1 auto; flex-wrap: wrap; gap: var(--inkra-space-2); min-inline-size: 0; }
|
|
10
|
+
.inkra-audio-player__time { color: var(--inkra-ink-muted); font-variant-numeric: tabular-nums; min-inline-size: 7rem; max-inline-size: 100%; overflow-wrap: anywhere; text-align: center; }
|
|
11
|
+
.inkra-audio-player__settings > .inkra-select__trigger { flex: none; min-width: 5.5rem; }
|
|
12
|
+
.inkra-audio-player__message { color: var(--inkra-ink-muted); margin: 0; }
|
|
13
|
+
.inkra-audio-player__sr-only { block-size: 1px; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; position: absolute; white-space: nowrap; inline-size: 1px; }
|
|
14
|
+
@container (max-width: 40rem) { .inkra-audio-player__controls { align-items: stretch; } .inkra-audio-player__time { flex: 1 0 100%; min-inline-size: 0; order: 4; text-align: start; } .inkra-audio-player__seek { flex-basis: 10rem; } .inkra-audio-player__settings { flex: 1 1 100%; order: 5; } .inkra-audio-player__volume { flex: 1 1 8rem; } }
|
|
15
|
+
@container (max-width: 20rem) { .inkra-audio-player__controls { display: grid; grid-template-columns: var(--inkra-touch-target) minmax(0, 1fr); } .inkra-audio-player__seek { min-inline-size: 0; } .inkra-audio-player__time, .inkra-audio-player__settings { grid-column: 1 / -1; } .inkra-audio-player__settings { display: grid; grid-template-columns: var(--inkra-touch-target) minmax(0, 1fr); width: 100%; } .inkra-audio-player__volume { min-inline-size: 0; } .inkra-audio-player__settings > .inkra-select__trigger { grid-column: 1 / -1; min-width: 0; width: 100%; } }
|
|
16
|
+
@media (forced-colors: active) {
|
|
17
|
+
.inkra-audio-player__controls { color: ButtonText; }
|
|
18
|
+
.inkra-audio-player__time, .inkra-audio-player__message { color: CanvasText; }
|
|
19
|
+
.inkra-audio-player__controls .inkra-slider__track-surface,
|
|
20
|
+
.inkra-audio-player__controls .inkra-slider__range-surface,
|
|
21
|
+
.inkra-audio-player__controls .inkra-slider__thumb-surface { forced-color-adjust: none; }
|
|
22
|
+
}
|