@k8ordo/ui 2.1.0 → 2.2.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 +4 -4
- package/dist/components/_internal/form-value.d.mts +2 -1
- package/dist/components/ai/_internal/attachment-preview.d.mts +2 -1
- package/dist/components/ai/_internal/collapsible.d.mts +2 -1
- package/dist/components/ai/_internal/icons.d.mts +2 -1
- package/dist/components/ai/attachment/attachment.d.mts +2 -1
- package/dist/components/ai/conversation/conversation.d.mts +2 -1
- package/dist/components/ai/message/message.d.mts +2 -1
- package/dist/components/ai/prompt-input/prompt-input.d.mts +2 -1
- package/dist/components/ai/reasoning/index.mjs +1 -2
- package/dist/components/ai/reasoning/reasoning.d.mts +2 -1
- package/dist/components/ai/response/index.mjs +1 -2
- package/dist/components/ai/response/response.d.mts +2 -1
- package/dist/components/ai/source/source.d.mts +2 -1
- package/dist/components/ai/suggestion/suggestion.d.mts +2 -1
- package/dist/components/ai/tool-invocation/approval-bar.d.mts +2 -1
- package/dist/components/ai/tool-invocation/index.mjs +1 -2
- package/dist/components/ai/tool-invocation/tool-invocation.d.mts +2 -1
- package/dist/components/buttons/button/button.d.mts +2 -1
- package/dist/components/buttons/button/index.mjs +1 -2
- package/dist/components/buttons/copy-button/index.mjs +1 -2
- package/dist/components/buttons/icon-button/icon-button.d.mts +2 -1
- package/dist/components/buttons/icon-button/index.mjs +1 -2
- package/dist/components/buttons/toolbar/toolbar.d.mts +2 -1
- package/dist/components/data-display/avatar/avatar.d.mts +2 -1
- package/dist/components/data-display/avatar/index.mjs +1 -2
- package/dist/components/data-display/badge/badge.d.mts +2 -1
- package/dist/components/data-display/badge/index.mjs +1 -2
- package/dist/components/data-display/card/card.d.mts +2 -1
- package/dist/components/data-display/card/index.mjs +1 -2
- package/dist/components/data-display/carousel/carousel.d.mts +2 -1
- package/dist/components/data-display/code/code.d.mts +2 -1
- package/dist/components/data-display/code/find-all-colors.d.mts +2 -1
- package/dist/components/data-display/code/index.mjs +1 -2
- package/dist/components/data-display/code-block/code-block.d.mts +2 -1
- package/dist/components/data-display/code-block/highlight.d.mts +2 -1
- package/dist/components/data-display/code-block/index.mjs +1 -2
- package/dist/components/data-display/data-table/data-table.d.mts +2 -1
- package/dist/components/data-display/data-table/index.mjs +1 -2
- package/dist/components/data-display/heading/heading.d.mts +2 -1
- package/dist/components/data-display/heading/index.mjs +1 -2
- package/dist/components/data-display/kbd/index.mjs +1 -2
- package/dist/components/data-display/kbd/kbd.d.mts +2 -1
- package/dist/components/data-display/prose/index.mjs +1 -2
- package/dist/components/data-display/prose/prose.d.mts +2 -1
- package/dist/components/data-display/table/index.mjs +1 -2
- package/dist/components/data-display/table/table.d.mts +2 -1
- package/dist/components/data-display/tree/index.mjs +1 -2
- package/dist/components/data-display/tree/tree.css +1 -15
- package/dist/components/data-display/tree/tree.d.mts +2 -1
- package/dist/components/data-display/tree/tree.mjs +49 -56
- package/dist/components/data-display/tree/tree.module.mjs +0 -1
- package/dist/components/feedback/alert/alert.d.mts +2 -1
- package/dist/components/feedback/alert/index.mjs +1 -2
- package/dist/components/feedback/callout/callout.d.mts +2 -1
- package/dist/components/feedback/callout/index.mjs +1 -2
- package/dist/components/feedback/empty-state/empty-state.d.mts +2 -1
- package/dist/components/feedback/empty-state/index.mjs +1 -2
- package/dist/components/feedback/progress/index.mjs +1 -2
- package/dist/components/feedback/progress/progress.d.mts +2 -1
- package/dist/components/feedback/skeleton/index.mjs +1 -2
- package/dist/components/feedback/skeleton/skeleton.d.mts +2 -1
- package/dist/components/feedback/spinner/index.mjs +1 -2
- package/dist/components/feedback/spinner/spinner.d.mts +2 -1
- package/dist/components/feedback/toast/toast.d.mts +2 -1
- package/dist/components/form/autocomplete/autocomplete.d.mts +2 -1
- package/dist/components/form/autocomplete/index.mjs +1 -2
- package/dist/components/form/calendar/calendar.d.mts +2 -1
- package/dist/components/form/calendar/index.mjs +1 -2
- package/dist/components/form/checkbox/checkbox.d.mts +2 -1
- package/dist/components/form/checkbox/index.mjs +1 -2
- package/dist/components/form/checkbox-card/checkbox-card.d.mts +2 -1
- package/dist/components/form/checkbox-card/index.mjs +1 -2
- package/dist/components/form/color-picker/color-picker.d.mts +2 -1
- package/dist/components/form/color-picker/index.mjs +1 -2
- package/dist/components/form/combobox/combobox.d.mts +2 -1
- package/dist/components/form/combobox/index.mjs +1 -2
- package/dist/components/form/date-field/date-field.d.mts +2 -1
- package/dist/components/form/date-field/index.mjs +1 -2
- package/dist/components/form/date-picker/date-picker.d.mts +2 -1
- package/dist/components/form/date-picker/index.mjs +1 -2
- package/dist/components/form/file-field/file-field.d.mts +2 -1
- package/dist/components/form/form/form.d.mts +2 -1
- package/dist/components/form/form/index.mjs +1 -2
- package/dist/components/form/form-control/form-control.d.mts +2 -1
- package/dist/components/form/form-control/index.mjs +1 -2
- package/dist/components/form/number-field/index.mjs +1 -2
- package/dist/components/form/number-field/number-field.d.mts +2 -1
- package/dist/components/form/password-input/index.mjs +1 -2
- package/dist/components/form/password-input/password-input.d.mts +2 -1
- package/dist/components/form/radio/index.mjs +1 -2
- package/dist/components/form/radio/radio.d.mts +2 -1
- package/dist/components/form/radio-card/index.mjs +1 -2
- package/dist/components/form/radio-card/radio-card.d.mts +2 -1
- package/dist/components/form/range-slider/index.mjs +1 -2
- package/dist/components/form/range-slider/range-slider.d.mts +2 -1
- package/dist/components/form/select/index.mjs +1 -2
- package/dist/components/form/select/select.d.mts +2 -1
- package/dist/components/form/slider/index.mjs +1 -2
- package/dist/components/form/slider/slider.d.mts +2 -1
- package/dist/components/form/switch/index.mjs +1 -2
- package/dist/components/form/switch/switch.d.mts +2 -1
- package/dist/components/form/text-field/index.mjs +1 -2
- package/dist/components/form/text-field/text-field.d.mts +2 -1
- package/dist/components/form/textarea/index.mjs +1 -2
- package/dist/components/form/textarea/textarea.d.mts +2 -1
- package/dist/components/icons/lucide.d.mts +2 -1
- package/dist/components/layout/grid/index.mjs +1 -2
- package/dist/components/layout/resizable-panels/resizable-panels.d.mts +2 -1
- package/dist/components/layout/separator/index.mjs +1 -2
- package/dist/components/layout/separator/separator.d.mts +2 -1
- package/dist/components/layout/stack/index.mjs +1 -2
- package/dist/components/navigation/anchor/anchor.d.mts +2 -1
- package/dist/components/navigation/anchor/index.mjs +1 -2
- package/dist/components/navigation/breadcrumb/breadcrumb.d.mts +2 -1
- package/dist/components/navigation/pagination/index.mjs +1 -2
- package/dist/components/navigation/pagination/pagination.d.mts +2 -1
- package/dist/components/navigation/side-nav/side-nav.d.mts +2 -1
- package/dist/components/navigation/stepper/index.mjs +1 -2
- package/dist/components/navigation/stepper/stepper.d.mts +2 -1
- package/dist/components/navigation/table-of-contents/index.mjs +1 -2
- package/dist/components/observers/in-view/index.mjs +1 -2
- package/dist/components/observers/resize/index.mjs +1 -2
- package/dist/components/overlays/command-palette/command-palette.d.mts +2 -1
- package/dist/components/overlays/command-palette/index.mjs +1 -2
- package/dist/components/overlays/drawer/index.mjs +1 -2
- package/dist/components/overlays/dropdown-menu/hooks.d.mts +2 -1
- package/dist/components/overlays/modal/index.mjs +1 -2
- package/dist/components/overlays/popover/anchor-positioning.d.mts +2 -1
- package/dist/components/overlays/popover/hooks.d.mts +2 -1
- package/dist/helpers/chain.d.mts +2 -1
- package/dist/helpers/create-safe-context.d.mts +2 -1
- package/dist/helpers/merge-props.d.mts +2 -1
- package/dist/hooks/controllable-state/index.d.mts +2 -1
- package/dist/integrations/_shared/schemas.d.mts +2 -4
- package/dist/integrations/ai-sdk/index.mjs +1 -2
- package/dist/integrations/json-render/catalog.d.mts +2 -1
- package/dist/integrations/openui/form-views.d.mts +1 -1
- package/dist/integrations/openui/library.d.mts +4 -3
- package/docs/references/components.md +3 -0
- package/docs/references/generative-ui.md +5 -4
- package/package.json +33 -33
- package/dist/_virtual/_rolldown/runtime.mjs +0 -13
package/README.md
CHANGED
|
@@ -37,15 +37,15 @@ it. Install one when you import the entry it belongs to.
|
|
|
37
37
|
| ----------------------- | --------------- | -------- | ------------------------------------------------- |
|
|
38
38
|
| `react` | ≥19.3.0 | yes | the components and hooks |
|
|
39
39
|
| `react-dom` | ≥19.3.0 | yes | portals and `useFormStatus` |
|
|
40
|
-
| `@k8ordo/i18n` | ^1.
|
|
40
|
+
| `@k8ordo/i18n` | ^1.1.0 | yes | the locale the components' own wording is read in |
|
|
41
41
|
| `typescript` | ≥7.0.0 | optional | the shipped type declarations |
|
|
42
42
|
| `@types/react` | ≥19.3.0 | optional | the shipped type declarations |
|
|
43
43
|
| `@types/react-dom` | ≥19.3.0 | optional | the shipped type declarations |
|
|
44
|
-
| `zod` | ^4.
|
|
44
|
+
| `zod` | ^4.6.6 | optional | generative-UI schemas |
|
|
45
45
|
| `@json-render/core` | ≥0.21.0 <0.22.0 | optional | `@k8ordo/ui/json-render` |
|
|
46
46
|
| `@json-render/react` | ≥0.21.0 <0.22.0 | optional | `@k8ordo/ui/json-render` |
|
|
47
|
-
| `@openuidev/lang-core` |
|
|
48
|
-
| `@openuidev/react-lang` |
|
|
47
|
+
| `@openuidev/lang-core` | ^1.0.0 | optional | `@k8ordo/ui/openui`, `@k8ordo/ui/openui/prompt` |
|
|
48
|
+
| `@openuidev/react-lang` | ^1.0.0 | optional | `@k8ordo/ui/openui` |
|
|
49
49
|
| `ai` | ≥7.0.51 | optional | `@k8ordo/ui/ai-sdk` |
|
|
50
50
|
| `streamdown` | ≥2.5.0 | optional | `@k8ordo/ui/ai/response` |
|
|
51
51
|
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Reasoning };
|
|
1
|
+
export { Reasoning } from "./reasoning.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Response };
|
|
1
|
+
export { Response } from "./response.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { ToolInvocation };
|
|
1
|
+
export { ToolInvocation } from "./tool-invocation.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Button };
|
|
1
|
+
export { Button } from "./button.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { CopyButton };
|
|
1
|
+
export { CopyButton } from "./copy-button.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { IconButton };
|
|
1
|
+
export { IconButton } from "./icon-button.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Avatar };
|
|
1
|
+
export { Avatar } from "./avatar.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Badge };
|
|
1
|
+
export { Badge } from "./badge.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Card };
|
|
1
|
+
export { Card } from "./card.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Code };
|
|
1
|
+
export { Code } from "./code.mjs";
|
|
@@ -9,4 +9,5 @@ type Props = {
|
|
|
9
9
|
callouts?: Readonly<Record<number, string | readonly string[]>>;
|
|
10
10
|
} & Omit<HTMLAttributes<HTMLElement>, 'children' | 'className' | 'lang' | 'style' | 'title'>;
|
|
11
11
|
export declare const CodeBlock: FC<Props>;
|
|
12
|
-
//#endregion
|
|
12
|
+
//#endregion
|
|
13
|
+
export {};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { CodeBlock };
|
|
1
|
+
export { CodeBlock } from "./code-block.mjs";
|
|
@@ -28,4 +28,5 @@ type Props<Row> = {
|
|
|
28
28
|
emptyState?: ReactNode;
|
|
29
29
|
};
|
|
30
30
|
export declare const DataTable: <Row>({ label, columns, rows, getRowId, sort, onSortChange, selectedIds, onSelectedIdsChange, hiddenColumnIds, onHiddenColumnIdsChange, emptyState }: Props<Row>) => import("react").JSX.Element;
|
|
31
|
-
//#endregion
|
|
31
|
+
//#endregion
|
|
32
|
+
export {};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { DataTable };
|
|
1
|
+
export { DataTable } from "./data-table.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Heading };
|
|
1
|
+
export { Heading } from "./heading.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Kbd };
|
|
1
|
+
export { Kbd } from "./kbd.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Prose };
|
|
1
|
+
export { Prose } from "./prose.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Table };
|
|
1
|
+
export { Table } from "./table.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Tree };
|
|
1
|
+
export { Tree } from "./tree.mjs";
|
|
@@ -6,21 +6,7 @@
|
|
|
6
6
|
display: flex;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
.bAFyoa_item
|
|
10
|
-
outline-style: none;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
.bAFyoa_item:focus-visible > .bAFyoa_row {
|
|
14
|
-
box-shadow: var(--shadow-ring-info);
|
|
15
|
-
outline-style: none;
|
|
16
|
-
|
|
17
|
-
@media (forced-colors: active) {
|
|
18
|
-
outline-offset: 2px;
|
|
19
|
-
outline: 2px solid #0000;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.bAFyoa_row {
|
|
9
|
+
.bAFyoa_item {
|
|
24
10
|
cursor: pointer;
|
|
25
11
|
align-items: center;
|
|
26
12
|
gap: calc(var(--spacing) * 1.5);
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import focus_ring_module_default from "../../_internal/focus-ring.module.mjs";
|
|
2
3
|
import { ChevronIcon } from "../../icons/lucide.mjs";
|
|
3
4
|
import { useControllableState } from "../../../hooks/controllable-state/index.mjs";
|
|
4
5
|
import { readWritingMode } from "../../../hooks/writing-mode/index.mjs";
|
|
5
6
|
import tree_module_default from "./tree.module.mjs";
|
|
6
7
|
import { clsx } from "clsx";
|
|
7
|
-
import {
|
|
8
|
+
import { useRef, useState } from "react";
|
|
8
9
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
10
|
//#region src/components/data-display/tree/tree.tsx
|
|
10
|
-
const visibleItemsOf = (items, expandedIds, parentId = null) => items.flatMap((item) => [{
|
|
11
|
+
const visibleItemsOf = (items, expandedIds, parentId = null, level = 1) => items.flatMap((item, index) => [{
|
|
11
12
|
item,
|
|
12
|
-
parentId
|
|
13
|
-
|
|
13
|
+
parentId,
|
|
14
|
+
level,
|
|
15
|
+
setSize: items.length,
|
|
16
|
+
posInSet: index + 1
|
|
17
|
+
}, ...item.children !== void 0 && expandedIds.includes(item.id) ? visibleItemsOf(item.children, expandedIds, item.id, level + 1) : []]);
|
|
14
18
|
const hasChildren = (item) => item.children !== void 0 && item.children.length > 0;
|
|
15
19
|
const directionOf = (key, isVertical) => {
|
|
16
20
|
return (isVertical ? {
|
|
@@ -27,7 +31,6 @@ const directionOf = (key, isVertical) => {
|
|
|
27
31
|
};
|
|
28
32
|
const NONE = [];
|
|
29
33
|
const Tree = ({ label, items, expandedIds, defaultExpandedIds, onExpandedChange, selectedId, defaultSelectedId = null, onChange, ...rest }) => {
|
|
30
|
-
const baseId = useId();
|
|
31
34
|
const [expanded, setExpanded] = useControllableState({
|
|
32
35
|
value: expandedIds,
|
|
33
36
|
defaultValue: defaultExpandedIds ?? NONE,
|
|
@@ -79,41 +82,44 @@ const Tree = ({ label, items, expandedIds, defaultExpandedIds, onExpandedChange,
|
|
|
79
82
|
event.preventDefault();
|
|
80
83
|
event.stopPropagation();
|
|
81
84
|
};
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
85
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
86
|
+
...rest,
|
|
87
|
+
"aria-label": label,
|
|
88
|
+
className: tree_module_default.root,
|
|
89
|
+
role: "tree",
|
|
90
|
+
children: visible.map((entry) => {
|
|
91
|
+
const { item, level, setSize, posInSet } = entry;
|
|
92
|
+
const isParent = hasChildren(item);
|
|
93
|
+
const isExpanded = isParent && expanded.includes(item.id);
|
|
94
|
+
const isSelected = selected === item.id;
|
|
95
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
96
|
+
"aria-expanded": isParent ? isExpanded : void 0,
|
|
97
|
+
"aria-level": level,
|
|
98
|
+
"aria-posinset": posInSet,
|
|
99
|
+
"aria-selected": isSelected,
|
|
100
|
+
"aria-setsize": setSize,
|
|
101
|
+
className: clsx(tree_module_default.item, focus_ring_module_default.ringNoBorder, isSelected ? tree_module_default.selected : tree_module_default.unselected),
|
|
102
|
+
onClick: () => {
|
|
103
|
+
setSelected(item.id);
|
|
104
|
+
focus(item.id);
|
|
105
|
+
if (isParent) toggle(item.id);
|
|
106
|
+
},
|
|
107
|
+
onFocus: () => {
|
|
108
|
+
setFocusedId(item.id);
|
|
109
|
+
},
|
|
110
|
+
onKeyDown: (event) => {
|
|
111
|
+
onKeyDown(event, entry);
|
|
112
|
+
},
|
|
113
|
+
ref: (element) => {
|
|
114
|
+
if (element === null) {
|
|
115
|
+
elements.current.delete(item.id);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
elements.current.set(item.id, element);
|
|
119
|
+
},
|
|
120
|
+
role: "treeitem",
|
|
121
|
+
style: { paddingInlineStart: `${String((level - 1) * .75 + .25)}rem` },
|
|
122
|
+
tabIndex: item.id === tabbableId ? 0 : -1,
|
|
117
123
|
children: [
|
|
118
124
|
/* @__PURE__ */ jsx("span", {
|
|
119
125
|
"aria-hidden": "true",
|
|
@@ -128,23 +134,10 @@ const Tree = ({ label, items, expandedIds, defaultExpandedIds, onExpandedChange,
|
|
|
128
134
|
className: tree_module_default.icon,
|
|
129
135
|
children: item.icon
|
|
130
136
|
}),
|
|
131
|
-
|
|
132
|
-
id: labelId,
|
|
133
|
-
children: item.label
|
|
134
|
-
})
|
|
137
|
+
item.label
|
|
135
138
|
]
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
children: renderItems(item.children, depth + 1)
|
|
139
|
-
}) : null]
|
|
140
|
-
}, item.id);
|
|
141
|
-
});
|
|
142
|
-
return /* @__PURE__ */ jsx("ul", {
|
|
143
|
-
...rest,
|
|
144
|
-
"aria-label": label,
|
|
145
|
-
className: tree_module_default.root,
|
|
146
|
-
role: "tree",
|
|
147
|
-
children: renderItems(items, 0)
|
|
139
|
+
}, item.id);
|
|
140
|
+
})
|
|
148
141
|
});
|
|
149
142
|
};
|
|
150
143
|
//#endregion
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Alert };
|
|
1
|
+
export { Alert } from "./alert.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Callout };
|
|
1
|
+
export { Callout } from "./callout.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { EmptyState };
|
|
1
|
+
export { EmptyState } from "./empty-state.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Progress };
|
|
1
|
+
export { Progress } from "./progress.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Skeleton };
|
|
1
|
+
export { Skeleton } from "./skeleton.mjs";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { Spinner };
|
|
1
|
+
export { Spinner } from "./spinner.mjs";
|