@nocoo/basalt 2.2.0 → 3.0.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 +2 -0
- package/ai/COMPATIBILITY.md +11 -1
- package/ai/DESIGN.md +342 -0
- package/ai/INTEGRATION.md +179 -128
- package/ai/RECIPES.md +51 -26
- package/ai/USAGE.md +4 -4
- package/ai/registry.json +2836 -270
- package/dist/charts/config.d.ts +11 -11
- package/dist/charts/config.js +4 -4
- package/dist/charts/config.js.map +1 -1
- package/dist/charts/date-navigation.js +10 -10
- package/dist/charts/date-navigation.js.map +1 -1
- package/dist/charts/donut.js +1 -1
- package/dist/charts/donut.js.map +1 -1
- package/dist/charts/frame.d.ts +1 -1
- package/dist/charts/frame.js +4 -4
- package/dist/charts/frame.js.map +1 -1
- package/dist/charts/gauge.js +5 -5
- package/dist/charts/gauge.js.map +1 -1
- package/dist/charts/heatmap-calendar.js +11 -11
- package/dist/charts/heatmap-calendar.js.map +1 -1
- package/dist/charts/heatmap-matrix.js +8 -8
- package/dist/charts/heatmap-matrix.js.map +1 -1
- package/dist/charts/item-list.js +1 -1
- package/dist/charts/item-list.js.map +1 -1
- package/dist/charts/legend.js +19 -19
- package/dist/charts/legend.js.map +1 -1
- package/dist/charts/palette.js +2 -2
- package/dist/charts/palette.js.map +1 -1
- package/dist/charts/slot-bar.js +2 -2
- package/dist/charts/slot-bar.js.map +1 -1
- package/dist/charts/sparkline.js +38 -23
- package/dist/charts/sparkline.js.map +1 -1
- package/dist/charts/stat-card.d.ts +2 -2
- package/dist/charts/stat-card.js +61 -58
- package/dist/charts/stat-card.js.map +1 -1
- package/dist/charts/timeline.js +18 -9
- package/dist/charts/timeline.js.map +1 -1
- package/dist/charts/tooltip.js +16 -16
- package/dist/charts/tooltip.js.map +1 -1
- package/dist/components/accordion.js +1 -1
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.js +4 -4
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/app-header.js +8 -8
- package/dist/components/app-header.js.map +1 -1
- package/dist/components/app-shell.js +1 -1
- package/dist/components/app-shell.js.map +1 -1
- package/dist/components/approval-card.d.ts +13 -0
- package/dist/components/approval-card.js +161 -0
- package/dist/components/approval-card.js.map +1 -0
- package/dist/components/avatar.d.ts +12 -0
- package/dist/components/avatar.js +39 -18
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.js +8 -8
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.d.ts +2 -2
- package/dist/components/banner.js +9 -8
- package/dist/components/banner.js.map +1 -1
- package/dist/components/basalt-mark.js +1 -1
- package/dist/components/basalt-mark.js.map +1 -1
- package/dist/components/battery-meter.js +5 -5
- package/dist/components/battery-meter.js.map +1 -1
- package/dist/components/breadcrumbs.js +6 -6
- package/dist/components/breadcrumbs.js.map +1 -1
- package/dist/components/button.js +10 -10
- package/dist/components/button.js.map +1 -1
- package/dist/components/chat-bubble.js +4 -3
- package/dist/components/chat-bubble.js.map +1 -1
- package/dist/components/chat-composer.d.ts +21 -3
- package/dist/components/chat-composer.js +126 -60
- package/dist/components/chat-composer.js.map +1 -1
- package/dist/components/chat-header.js +6 -6
- package/dist/components/chat-header.js.map +1 -1
- package/dist/components/chat-inbox.js +34 -30
- package/dist/components/chat-inbox.js.map +1 -1
- package/dist/components/chat-markdown.d.ts +8 -0
- package/dist/components/chat-markdown.js +122 -0
- package/dist/components/chat-markdown.js.map +1 -0
- package/dist/components/chat-message.d.ts +26 -0
- package/dist/components/chat-message.js +145 -0
- package/dist/components/chat-message.js.map +1 -0
- package/dist/components/checkbox.js +11 -11
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/clipboard-text.js +3 -3
- package/dist/components/clipboard-text.js.map +1 -1
- package/dist/components/code.d.ts +22 -20
- package/dist/components/code.js +94 -32
- package/dist/components/code.js.map +1 -1
- package/dist/components/collapsible.js +8 -4
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/command-palette.js +73 -47
- package/dist/components/command-palette.js.map +1 -1
- package/dist/components/context-cards.d.ts +15 -0
- package/dist/components/context-cards.js +148 -0
- package/dist/components/context-cards.js.map +1 -0
- package/dist/components/context-menu.d.ts +1 -1
- package/dist/components/context-menu.js +18 -14
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/data-table.d.ts +8 -2
- package/dist/components/data-table.js +161 -106
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.js +13 -13
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/delete-resource.js +1 -1
- package/dist/components/delete-resource.js.map +1 -1
- package/dist/components/description-list.js +3 -3
- package/dist/components/description-list.js.map +1 -1
- package/dist/components/dialog.d.ts +2 -2
- package/dist/components/dialog.js +8 -8
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/diff-table.d.ts +15 -0
- package/dist/components/diff-table.js +146 -0
- package/dist/components/diff-table.js.map +1 -0
- package/dist/components/dock.js +2 -2
- package/dist/components/dock.js.map +1 -1
- package/dist/components/dropdown-menu.js +23 -18
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/editable-nav-item.js +63 -58
- package/dist/components/editable-nav-item.js.map +1 -1
- package/dist/components/empty.js +6 -6
- package/dist/components/empty.js.map +1 -1
- package/dist/components/fab.js +1 -1
- package/dist/components/fab.js.map +1 -1
- package/dist/components/field.js +3 -3
- package/dist/components/field.js.map +1 -1
- package/dist/components/file-dropzone.js +7 -7
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/filter-bar.js +6 -6
- package/dist/components/filter-bar.js.map +1 -1
- package/dist/components/flow.js +4 -3
- package/dist/components/flow.js.map +1 -1
- package/dist/components/grid.d.ts +3 -1
- package/dist/components/grid.js +15 -8
- package/dist/components/grid.js.map +1 -1
- package/dist/components/hover-card.js +1 -1
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/icon-picker.d.ts +8 -2
- package/dist/components/icon-picker.js +75 -47
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/inline-editable.js +6 -6
- package/dist/components/inline-editable.js.map +1 -1
- package/dist/components/input-area.js +3 -3
- package/dist/components/input-area.js.map +1 -1
- package/dist/components/input-group.js +5 -5
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.js +4 -4
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.js +3 -3
- package/dist/components/label.js.map +1 -1
- package/dist/components/layer-card.d.ts +9 -4
- package/dist/components/layer-card.js +72 -67
- package/dist/components/layer-card.js.map +1 -1
- package/dist/components/loader.d.ts +16 -10
- package/dist/components/loader.js +46 -53
- package/dist/components/loader.js.map +1 -1
- package/dist/components/loading-screen.js +3 -3
- package/dist/components/loading-screen.js.map +1 -1
- package/dist/components/menu-bar.js +32 -27
- package/dist/components/menu-bar.js.map +1 -1
- package/dist/components/meter.d.ts +5 -5
- package/dist/components/meter.js +25 -12
- package/dist/components/meter.js.map +1 -1
- package/dist/components/multi-select.js +66 -62
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/navigation-menu.d.ts +2 -2
- package/dist/components/navigation-menu.js +22 -8
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/overlay.js +2 -2
- package/dist/components/overlay.js.map +1 -1
- package/dist/components/page-header.d.ts +3 -1
- package/dist/components/page-header.js +12 -12
- package/dist/components/page-header.js.map +1 -1
- package/dist/components/pagination.js +3 -3
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/popover.js +18 -23
- package/dist/components/popover.js.map +1 -1
- package/dist/components/prompt-bar.d.ts +16 -0
- package/dist/components/prompt-bar.js +49 -0
- package/dist/components/prompt-bar.js.map +1 -0
- package/dist/components/radio.js +9 -9
- package/dist/components/radio.js.map +1 -1
- package/dist/components/recommendation-card.d.ts +13 -0
- package/dist/components/recommendation-card.js +123 -0
- package/dist/components/recommendation-card.js.map +1 -0
- package/dist/components/resource-list.js +1 -1
- package/dist/components/resource-list.js.map +1 -1
- package/dist/components/responsive-master-detail.js +4 -4
- package/dist/components/responsive-master-detail.js.map +1 -1
- package/dist/components/scroll-area.js +3 -3
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/section-rule.d.ts +5 -3
- package/dist/components/section-rule.js +12 -12
- package/dist/components/section-rule.js.map +1 -1
- package/dist/components/segment-control.js +3 -3
- package/dist/components/segment-control.js.map +1 -1
- package/dist/components/select.js +47 -32
- package/dist/components/select.js.map +1 -1
- package/dist/components/sensitive-input.js +17 -19
- package/dist/components/sensitive-input.js.map +1 -1
- package/dist/components/sheet.d.ts +4 -4
- package/dist/components/sheet.js +11 -10
- package/dist/components/sheet.js.map +1 -1
- package/dist/components/sidebar.js +146 -137
- package/dist/components/sidebar.js.map +1 -1
- package/dist/components/skeleton-line.d.ts +1 -1
- package/dist/components/skeleton-line.js +2 -2
- package/dist/components/skeleton-line.js.map +1 -1
- package/dist/components/slider.js +2 -2
- package/dist/components/slider.js.map +1 -1
- package/dist/components/stat-strip.js +5 -4
- package/dist/components/stat-strip.js.map +1 -1
- package/dist/components/switch.js +6 -6
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table-of-contents.js +5 -5
- package/dist/components/table-of-contents.js.map +1 -1
- package/dist/components/table-pager.js +2 -2
- package/dist/components/table-pager.js.map +1 -1
- package/dist/components/table.js +4 -4
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +7 -6
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tag-badge.d.ts +10 -10
- package/dist/components/tag-badge.js +11 -11
- package/dist/components/tag-badge.js.map +1 -1
- package/dist/components/tag-color-picker.d.ts +8 -1
- package/dist/components/tag-color-picker.js +33 -25
- package/dist/components/tag-color-picker.js.map +1 -1
- package/dist/components/text.js +5 -5
- package/dist/components/text.js.map +1 -1
- package/dist/components/theme-toggle.js +1 -1
- package/dist/components/theme-toggle.js.map +1 -1
- package/dist/components/thinking.d.ts +16 -0
- package/dist/components/thinking.js +85 -0
- package/dist/components/thinking.js.map +1 -0
- package/dist/components/toast.js +25 -20
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toggle-group.js +6 -5
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.js +6 -6
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tool-chips.d.ts +12 -0
- package/dist/components/tool-chips.js +138 -0
- package/dist/components/tool-chips.js.map +1 -0
- package/dist/components/toolbar.js +3 -3
- package/dist/components/toolbar.js.map +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/typeahead-field.js +59 -56
- package/dist/components/typeahead-field.js.map +1 -1
- package/dist/components/upload-queue.js +15 -14
- package/dist/components/upload-queue.js.map +1 -1
- package/dist/models/agent-feedback.d.ts +44 -0
- package/dist/models/agent-feedback.js +28 -0
- package/dist/models/agent-feedback.js.map +1 -0
- package/dist/models/avatar.d.ts +2 -0
- package/dist/models/avatar.js +15 -0
- package/dist/models/avatar.js.map +1 -0
- package/dist/models/code.d.ts +6 -0
- package/dist/models/code.js +24 -0
- package/dist/models/code.js.map +1 -0
- package/dist/models/context-cards.d.ts +13 -0
- package/dist/models/context-cards.js +17 -0
- package/dist/models/context-cards.js.map +1 -0
- package/dist/models/diff-table.d.ts +12 -0
- package/dist/models/diff-table.js +9 -0
- package/dist/models/diff-table.js.map +1 -0
- package/dist/models/recommendation.d.ts +26 -0
- package/dist/models/recommendation.js +23 -0
- package/dist/models/recommendation.js.map +1 -0
- package/dist/styles/base.css +14 -2
- package/dist/styles/standalone.css +1865 -929
- package/dist/styles/tailwind.css +179 -13
- package/dist/styles/tokens.css +679 -20
- package/dist/utils/cn.js +25 -4
- package/dist/utils/cn.js.map +1 -1
- package/dist/utils/control-surface.d.ts +1 -1
- package/dist/utils/control-surface.js +1 -1
- package/dist/utils/control-surface.js.map +1 -1
- package/dist/utils/navigation.d.ts +3 -0
- package/dist/utils/navigation.js +8 -0
- package/dist/utils/navigation.js.map +1 -0
- package/dist/utils/selection-indicator.d.ts +1 -1
- package/dist/utils/selection-indicator.js +49 -72
- package/dist/utils/selection-indicator.js.map +1 -1
- package/dist/utils/use-hover-highlight.d.ts +4 -0
- package/dist/utils/use-hover-highlight.js +80 -0
- package/dist/utils/use-hover-highlight.js.map +1 -0
- package/dist/viewmodels/use-approval-card.d.ts +20 -0
- package/dist/viewmodels/use-approval-card.js +83 -0
- package/dist/viewmodels/use-approval-card.js.map +1 -0
- package/dist/viewmodels/use-chat-composer.d.ts +16 -0
- package/dist/viewmodels/use-chat-composer.js +34 -0
- package/dist/viewmodels/use-chat-composer.js.map +1 -0
- package/dist/viewmodels/use-chat-message.d.ts +16 -0
- package/dist/viewmodels/use-chat-message.js +26 -0
- package/dist/viewmodels/use-chat-message.js.map +1 -0
- package/dist/viewmodels/use-code-block.d.ts +8 -0
- package/dist/viewmodels/use-code-block.js +38 -0
- package/dist/viewmodels/use-code-block.js.map +1 -0
- package/dist/viewmodels/use-context-cards.d.ts +17 -0
- package/dist/viewmodels/use-context-cards.js +18 -0
- package/dist/viewmodels/use-context-cards.js.map +1 -0
- package/dist/viewmodels/use-diff-table.d.ts +16 -0
- package/dist/viewmodels/use-diff-table.js +42 -0
- package/dist/viewmodels/use-diff-table.js.map +1 -0
- package/dist/viewmodels/use-loader.d.ts +4 -0
- package/dist/viewmodels/use-loader.js +22 -0
- package/dist/viewmodels/use-loader.js.map +1 -0
- package/dist/viewmodels/use-recommendation-card.d.ts +17 -0
- package/dist/viewmodels/use-recommendation-card.js +41 -0
- package/dist/viewmodels/use-recommendation-card.js.map +1 -0
- package/dist/viewmodels/use-thinking.d.ts +13 -0
- package/dist/viewmodels/use-thinking.js +18 -0
- package/dist/viewmodels/use-thinking.js.map +1 -0
- package/dist/viewmodels/use-tool-chips.d.ts +10 -0
- package/dist/viewmodels/use-tool-chips.js +20 -0
- package/dist/viewmodels/use-tool-chips.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { contextSourceHref as e } from "../models/context-cards.js";
|
|
3
|
+
import { useState as t } from "react";
|
|
4
|
+
//#region src/viewmodels/use-chat-message.ts
|
|
5
|
+
function n(n, r) {
|
|
6
|
+
let [i, a] = t(null), [o, s] = t(null);
|
|
7
|
+
return {
|
|
8
|
+
copied: i === n,
|
|
9
|
+
copyError: o === n,
|
|
10
|
+
sources: r.map((t) => ({
|
|
11
|
+
...t,
|
|
12
|
+
href: e(t.href)
|
|
13
|
+
})),
|
|
14
|
+
async copy(e) {
|
|
15
|
+
try {
|
|
16
|
+
await e(n), a(n), s(null);
|
|
17
|
+
} catch {
|
|
18
|
+
s(n);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { n as useChatMessage };
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=use-chat-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-chat-message.js","names":["useChatMessage","copied","setCopied","useState","copyError","setCopyError","content","sources","source","contextSourceHref","write"],"sources":["../../src/viewmodels/use-chat-message.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { contextSourceHref } from \"../models/context-cards\";\n\nexport function useChatMessage(\n\tcontent: string,\n\tsources: readonly { id: string; name: string; type?: string; href?: string }[],\n) {\n\tconst [copied, setCopied] = useState<string | null>(null);\n\tconst [copyError, setCopyError] = useState<string | null>(null);\n\treturn {\n\t\tcopied: copied === content,\n\t\tcopyError: copyError === content,\n\t\tsources: sources.map((source) => ({ ...source, href: contextSourceHref(source.href) })),\n\t\tasync copy(write: (text: string) => Promise<void>) {\n\t\t\ttry {\n\t\t\t\tawait write(content);\n\t\t\t\tsetCopied(content);\n\t\t\t\tsetCopyError(null);\n\t\t\t} catch {\n\t\t\t\tsetCopyError(content);\n\t\t\t}\n\t\t},\n\t};\n}\n"],"mappings":";;;;AAGA,SAAgBA,EACf,GACA,GACC;CACD,IAAM,CAACC,GAAQC,KAAaC,EAAwB,IAAI,GAClD,CAACC,GAAWC,KAAgBF,EAAwB,IAAI;CAC9D,OAAO;EACN,QAAQF,MAAWK;EACnB,WAAWF,MAAcE;EACzB,SAASC,EAAQ,KAAK,OAAY;GAAE,GAAGC;GAAQ,MAAMC,EAAkBD,EAAO,IAAI;EAAE,EAAE;EACtF,MAAM,KAAK,GAAwC;GAClD,IAAI;IAGH,AAFA,MAAME,EAAMJ,CAAO,GACnBJ,EAAUI,CAAO,GACjBD,EAAa,IAAI;GAClB,QAAQ;IACP,EAAaC,CAAO;GACrB;EACD;CACD;AACD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { codeLines as e } from "../models/code.js";
|
|
3
|
+
import { useEffect as t, useMemo as n, useRef as r, useState as i } from "react";
|
|
4
|
+
//#region src/viewmodels/use-code-block.ts
|
|
5
|
+
function a(a, o) {
|
|
6
|
+
let s = n(() => e(a, o), [a, o]), [c, l] = i(null), u = r(!1), d = r(!0);
|
|
7
|
+
return t(() => (d.current = !0, () => {
|
|
8
|
+
d.current = !1;
|
|
9
|
+
}), []), {
|
|
10
|
+
lines: s,
|
|
11
|
+
status: c?.code === a ? c.status : "idle",
|
|
12
|
+
async copy(e) {
|
|
13
|
+
if (!u.current) {
|
|
14
|
+
u.current = !0, l({
|
|
15
|
+
code: a,
|
|
16
|
+
status: "pending"
|
|
17
|
+
});
|
|
18
|
+
try {
|
|
19
|
+
await e(a), d.current && l({
|
|
20
|
+
code: a,
|
|
21
|
+
status: "copied"
|
|
22
|
+
});
|
|
23
|
+
} catch {
|
|
24
|
+
d.current && l({
|
|
25
|
+
code: a,
|
|
26
|
+
status: "error"
|
|
27
|
+
});
|
|
28
|
+
} finally {
|
|
29
|
+
u.current = !1;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//#endregion
|
|
36
|
+
export { a as useCodeBlock };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=use-code-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-code-block.js","names":["useCodeBlock","lines","useMemo","codeLines","code","highlighted","feedback","setFeedback","useState","locked","useRef","mounted","useEffect","write"],"sources":["../../src/viewmodels/use-code-block.ts"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { codeLines } from \"../models/code\";\n\nexport function useCodeBlock(code: string, highlighted: boolean) {\n\tconst lines = useMemo(() => codeLines(code, highlighted), [code, highlighted]);\n\tconst [feedback, setFeedback] = useState<{\n\t\tcode: string;\n\t\tstatus: \"pending\" | \"copied\" | \"error\";\n\t} | null>(null);\n\tconst locked = useRef(false);\n\tconst mounted = useRef(true);\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t};\n\t}, []);\n\treturn {\n\t\tlines,\n\t\tstatus: feedback?.code === code ? feedback.status : \"idle\",\n\t\tasync copy(write: (text: string) => Promise<void>) {\n\t\t\tif (locked.current) return;\n\t\t\tlocked.current = true;\n\t\t\tsetFeedback({ code, status: \"pending\" });\n\t\t\ttry {\n\t\t\t\tawait write(code);\n\t\t\t\tif (mounted.current) setFeedback({ code, status: \"copied\" });\n\t\t\t} catch {\n\t\t\t\tif (mounted.current) setFeedback({ code, status: \"error\" });\n\t\t\t} finally {\n\t\t\t\tlocked.current = false;\n\t\t\t}\n\t\t},\n\t};\n}\n"],"mappings":";;;;AAGA,SAAgBA,EAAa,GAAc,GAAsB;CAChE,IAAMC,IAAQC,QAAcC,EAAUC,GAAMC,CAAW,GAAG,CAACD,GAAMC,CAAW,CAAC,GACvE,CAACC,GAAUC,KAAeC,EAGtB,IAAI,GACRC,IAASC,EAAO,EAAK,GACrBC,IAAUD,EAAO,EAAI;CAO3B,OANAE,SACC,EAAQ,UAAU,UACL;EACZ,EAAQ,UAAU;CACnB,IACE,CAAC,CAAC,GACE;EACN;EACA,QAAQN,GAAU,SAASF,IAAOE,EAAS,SAAS;EACpD,MAAM,KAAK,GAAwC;GAClD,IAAI,GAAO,SAEX;IADA,EAAO,UAAU,IACjBC,EAAY;KAAE;KAAM,QAAQ;IAAU,CAAC;IACvC,IAAI;KAEH,AADA,MAAMM,EAAMT,CAAI,GACZO,EAAQ,WAASJ,EAAY;MAAE;MAAM,QAAQ;KAAS,CAAC;IAC5D,QAAQ;KACP,AAAII,EAAQ,WAASJ,EAAY;MAAE;MAAM,QAAQ;KAAQ,CAAC;IAC3D,UAAU;KACT,EAAO,UAAU;IAClB;GARuC;EASxC;CACD;AACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ContextChunk } from "../models/context-cards.js";
|
|
2
|
+
export declare function useContextCardsViewModel(chunks: readonly ContextChunk[], totalCount?: number): {
|
|
3
|
+
count: number;
|
|
4
|
+
chunks: {
|
|
5
|
+
id: string;
|
|
6
|
+
title: string;
|
|
7
|
+
body: string;
|
|
8
|
+
source: {
|
|
9
|
+
name: string;
|
|
10
|
+
type: string;
|
|
11
|
+
href?: string;
|
|
12
|
+
};
|
|
13
|
+
characters: number;
|
|
14
|
+
href: string | undefined;
|
|
15
|
+
delay: number;
|
|
16
|
+
}[];
|
|
17
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { contextSourceHref as e } from "../models/context-cards.js";
|
|
3
|
+
//#region src/viewmodels/use-context-cards.ts
|
|
4
|
+
function t(t, n) {
|
|
5
|
+
return {
|
|
6
|
+
count: n !== void 0 && Number.isFinite(n) ? Math.max(t.length, Math.floor(n)) : t.length,
|
|
7
|
+
chunks: t.map((t, n) => ({
|
|
8
|
+
...t,
|
|
9
|
+
characters: t.characters !== void 0 && Number.isFinite(t.characters) ? Math.max(0, Math.floor(t.characters)) : Array.from(t.body).length,
|
|
10
|
+
href: e(t.source.href),
|
|
11
|
+
delay: Math.min(n, 4) * 60
|
|
12
|
+
}))
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { t as useContextCardsViewModel };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=use-context-cards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-context-cards.js","names":["useContextCardsViewModel","totalCount","chunks","chunk","contextSourceHref","index"],"sources":["../../src/viewmodels/use-context-cards.ts"],"sourcesContent":["import { type ContextChunk, contextSourceHref } from \"../models/context-cards\";\n\nexport function useContextCardsViewModel(chunks: readonly ContextChunk[], totalCount?: number) {\n\treturn {\n\t\tcount:\n\t\t\ttotalCount !== undefined && Number.isFinite(totalCount)\n\t\t\t\t? Math.max(chunks.length, Math.floor(totalCount))\n\t\t\t\t: chunks.length,\n\t\tchunks: chunks.map((chunk, index) => ({\n\t\t\t...chunk,\n\t\t\tcharacters:\n\t\t\t\tchunk.characters !== undefined && Number.isFinite(chunk.characters)\n\t\t\t\t\t? Math.max(0, Math.floor(chunk.characters))\n\t\t\t\t\t: Array.from(chunk.body).length,\n\t\t\thref: contextSourceHref(chunk.source.href),\n\t\t\tdelay: Math.min(index, 4) * 60,\n\t\t})),\n\t};\n}\n"],"mappings":";;;AAEA,SAAgBA,EAAyB,GAAiC,GAAqB;CAC9F,OAAO;EACN,OACCC,MAAe,KAAA,KAAa,OAAO,SAASA,CAAU,IACnD,KAAK,IAAIC,EAAO,QAAQ,KAAK,MAAMD,CAAU,CAAC,IAC9CC,EAAO;EACX,QAAQA,EAAO,KAAK,GAAO,OAAW;GACrC,GAAGC;GACH,YACCA,EAAM,eAAe,KAAA,KAAa,OAAO,SAASA,EAAM,UAAU,IAC/D,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAM,UAAU,CAAC,IACxC,MAAM,KAAKA,EAAM,IAAI,CAAC,CAAC;GAC3B,MAAMC,EAAkBD,EAAM,OAAO,IAAI;GACzC,OAAO,KAAK,IAAIE,GAAO,CAAC,IAAI;EAC7B,EAAE;CACH;AACD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type DiffTableRow } from "../models/diff-table.js";
|
|
2
|
+
export declare function useDiffTableViewModel({ rows, onApply, disabled, }: {
|
|
3
|
+
rows: readonly DiffTableRow[];
|
|
4
|
+
onApply: (changes: readonly DiffTableRow[]) => void | Promise<void>;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}): {
|
|
7
|
+
excluded: string[];
|
|
8
|
+
selected: DiffTableRow[];
|
|
9
|
+
status: "applied" | "applying" | "editing";
|
|
10
|
+
error: string;
|
|
11
|
+
blocked: boolean;
|
|
12
|
+
additions: number;
|
|
13
|
+
removals: number;
|
|
14
|
+
toggle(id: string): void;
|
|
15
|
+
apply(): Promise<void>;
|
|
16
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { selectedDiffRows as e } from "../models/diff-table.js";
|
|
3
|
+
import { useEffect as t, useRef as n, useState as r } from "react";
|
|
4
|
+
//#region src/viewmodels/use-diff-table.ts
|
|
5
|
+
function i({ rows: i, onApply: a, disabled: o = !1 }) {
|
|
6
|
+
let [s, c] = r([]), [l, u] = r("editing"), [d, f] = r(""), p = n(!1), m = n(!0);
|
|
7
|
+
t(() => (m.current = !0, () => {
|
|
8
|
+
m.current = !1;
|
|
9
|
+
}), []);
|
|
10
|
+
let h = e(i, s);
|
|
11
|
+
return {
|
|
12
|
+
excluded: s,
|
|
13
|
+
selected: h,
|
|
14
|
+
status: l,
|
|
15
|
+
error: d,
|
|
16
|
+
blocked: o || l !== "editing",
|
|
17
|
+
additions: h.filter((e) => e.change === "add").length,
|
|
18
|
+
removals: h.filter((e) => e.change === "remove").length,
|
|
19
|
+
toggle(e) {
|
|
20
|
+
o || p.current || l === "applied" || !i.some((t) => t.id === e && t.change !== "unchanged") || (c((t) => t.includes(e) ? t.filter((t) => t !== e) : [...t, e]), f(""));
|
|
21
|
+
},
|
|
22
|
+
async apply() {
|
|
23
|
+
if (!(o || p.current || l === "applied" || h.length === 0)) {
|
|
24
|
+
p.current = !0, u("applying"), f("");
|
|
25
|
+
try {
|
|
26
|
+
await a(h.map((e) => ({
|
|
27
|
+
...e,
|
|
28
|
+
values: { ...e.values }
|
|
29
|
+
}))), m.current && u("applied");
|
|
30
|
+
} catch (e) {
|
|
31
|
+
m.current && (f(e instanceof Error ? e.message : "Could not apply changes. Try again."), u("editing"));
|
|
32
|
+
} finally {
|
|
33
|
+
p.current = !1;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { i as useDiffTableViewModel };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=use-diff-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-diff-table.js","names":["useDiffTableViewModel","excluded","setExcluded","useState","status","setStatus","error","setError","locked","useRef","mounted","selected","selectedDiffRows","rows","disabled","row","id","current","value","onApply","reason"],"sources":["../../src/viewmodels/use-diff-table.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { type DiffTableRow, selectedDiffRows } from \"../models/diff-table\";\n\nexport function useDiffTableViewModel({\n\trows,\n\tonApply,\n\tdisabled = false,\n}: {\n\trows: readonly DiffTableRow[];\n\tonApply: (changes: readonly DiffTableRow[]) => void | Promise<void>;\n\tdisabled?: boolean;\n}) {\n\tconst [excluded, setExcluded] = useState<string[]>([]);\n\tconst [status, setStatus] = useState<\"editing\" | \"applying\" | \"applied\">(\"editing\");\n\tconst [error, setError] = useState(\"\");\n\tconst locked = useRef(false);\n\tconst mounted = useRef(true);\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t};\n\t}, []);\n\tconst selected = selectedDiffRows(rows, excluded);\n\treturn {\n\t\texcluded,\n\t\tselected,\n\t\tstatus,\n\t\terror,\n\t\tblocked: disabled || status !== \"editing\",\n\t\tadditions: selected.filter((row) => row.change === \"add\").length,\n\t\tremovals: selected.filter((row) => row.change === \"remove\").length,\n\t\ttoggle(id: string) {\n\t\t\tif (\n\t\t\t\tdisabled ||\n\t\t\t\tlocked.current ||\n\t\t\t\tstatus === \"applied\" ||\n\t\t\t\t!rows.some((row) => row.id === id && row.change !== \"unchanged\")\n\t\t\t)\n\t\t\t\treturn;\n\t\t\tsetExcluded((current) =>\n\t\t\t\tcurrent.includes(id) ? current.filter((value) => value !== id) : [...current, id],\n\t\t\t);\n\t\t\tsetError(\"\");\n\t\t},\n\t\tasync apply() {\n\t\t\tif (disabled || locked.current || status === \"applied\" || selected.length === 0) return;\n\t\t\tlocked.current = true;\n\t\t\tsetStatus(\"applying\");\n\t\t\tsetError(\"\");\n\t\t\ttry {\n\t\t\t\tawait onApply(selected.map((row) => ({ ...row, values: { ...row.values } })));\n\t\t\t\tif (mounted.current) setStatus(\"applied\");\n\t\t\t} catch (reason) {\n\t\t\t\tif (mounted.current) {\n\t\t\t\t\tsetError(\n\t\t\t\t\t\treason instanceof Error ? reason.message : \"Could not apply changes. Try again.\",\n\t\t\t\t\t);\n\t\t\t\t\tsetStatus(\"editing\");\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tlocked.current = false;\n\t\t\t}\n\t\t},\n\t};\n}\n"],"mappings":";;;;AAGA,SAAgBA,EAAsB,EACrC,SACA,YACA,cAAW,MAKT;CACF,IAAM,CAACC,GAAUC,KAAeC,EAAmB,CAAC,CAAC,GAC/C,CAACC,GAAQC,KAAaF,EAA6C,SAAS,GAC5E,CAACG,GAAOC,KAAYJ,EAAS,EAAE,GAC/BK,IAASC,EAAO,EAAK,GACrBC,IAAUD,EAAO,EAAI;CAC3B,SACC,EAAQ,UAAU,UACL;EACZ,EAAQ,UAAU;CACnB,IACE,CAAC,CAAC;CACL,IAAME,IAAWC,EAAiBC,GAAMZ,CAAQ;CAChD,OAAO;EACN;EACA;EACA;EACA;EACA,SAASa,KAAYV,MAAW;EAChC,WAAWO,EAAS,QAAQ,MAAQI,EAAI,WAAW,KAAK,CAAC,CAAC;EAC1D,UAAUJ,EAAS,QAAQ,MAAQI,EAAI,WAAW,QAAQ,CAAC,CAAC;EAC5D,OAAO,GAAY;GAClB,AACCD,KACAN,EAAO,WACPJ,MAAW,aACX,CAACS,EAAK,MAAM,MAAQE,EAAI,OAAOC,KAAMD,EAAI,WAAW,WAAW,MAGhEb,GAAa,MACZe,EAAQ,SAASD,CAAE,IAAIC,EAAQ,QAAQ,MAAUC,MAAUF,CAAE,IAAI,CAAC,GAAGC,GAASD,CAAE,CACjF,GACAT,EAAS,EAAE;EACZ;EACA,MAAM,QAAQ;GACb,IAAI,OAAYC,EAAO,WAAWJ,MAAW,aAAaO,EAAS,WAAW,IAG9E;IAFA,EAAO,UAAU,IACjBN,EAAU,UAAU,GACpBE,EAAS,EAAE;IACX,IAAI;KAEH,AADA,MAAMY,EAAQR,EAAS,KAAK,OAAS;MAAE,GAAGI;MAAK,QAAQ,EAAE,GAAGA,EAAI,OAAO;KAAE,EAAE,CAAC,GACxEL,EAAQ,WAASL,EAAU,SAAS;IACzC,SAASe,GAAQ;KAChB,AAAIV,EAAQ,YACXH,EACCa,aAAkB,QAAQA,EAAO,UAAU,qCAC5C,GACAf,EAAU,SAAS;IAErB,UAAU;KACT,EAAO,UAAU;IAClB;GAbW;EAcZ;CACD;AACD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect as e, useRef as t, useState as n } from "react";
|
|
3
|
+
//#region src/viewmodels/use-loader.ts
|
|
4
|
+
function r(r, i) {
|
|
5
|
+
let a = t(performance.now()), [o, s] = n(0);
|
|
6
|
+
e(() => {
|
|
7
|
+
if (!r) return;
|
|
8
|
+
let e = () => s(Math.max(0, performance.now() - a.current));
|
|
9
|
+
e();
|
|
10
|
+
let t = setInterval(e, 100);
|
|
11
|
+
return () => clearInterval(t);
|
|
12
|
+
}, [r]);
|
|
13
|
+
let c = Number.isFinite(i) ? Math.max(0, i) : 5e3, l = Math.floor(o / 100) / 10;
|
|
14
|
+
return {
|
|
15
|
+
visible: r && o >= c,
|
|
16
|
+
text: l < 60 ? `${l.toFixed(1)}s` : `${Math.floor(l / 60)}m ${(l % 60).toFixed(1)}s`
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { r as useLoaderViewModel };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=use-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-loader.js","names":["useLoaderViewModel","started","useRef","elapsed","setElapsed","useState","showElapsed","update","timer","delay","elapsedDelayMs","seconds"],"sources":["../../src/viewmodels/use-loader.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\nexport function useLoaderViewModel(showElapsed: boolean, elapsedDelayMs: number) {\n\tconst started = useRef(performance.now());\n\tconst [elapsed, setElapsed] = useState(0);\n\tuseEffect(() => {\n\t\tif (!showElapsed) return;\n\t\tconst update = () => setElapsed(Math.max(0, performance.now() - started.current));\n\t\tupdate();\n\t\tconst timer = setInterval(update, 100);\n\t\treturn () => clearInterval(timer);\n\t}, [showElapsed]);\n\tconst delay = Number.isFinite(elapsedDelayMs) ? Math.max(0, elapsedDelayMs) : 5000;\n\tconst seconds = Math.floor(elapsed / 100) / 10;\n\treturn {\n\t\tvisible: showElapsed && elapsed >= delay,\n\t\ttext:\n\t\t\tseconds < 60\n\t\t\t\t? `${seconds.toFixed(1)}s`\n\t\t\t\t: `${Math.floor(seconds / 60)}m ${(seconds % 60).toFixed(1)}s`,\n\t};\n}\n"],"mappings":";;;AAEA,SAAgBA,EAAmB,GAAsB,GAAwB;CAChF,IAAMC,IAAUC,EAAO,YAAY,IAAI,CAAC,GAClC,CAACC,GAASC,KAAcC,EAAS,CAAC;CACxC,QAAgB;EACf,IAAI,CAACC,GAAa;EAClB,IAAMC,UAAeH,EAAW,KAAK,IAAI,GAAG,YAAY,IAAI,IAAIH,EAAQ,OAAO,CAAC;EAChF,EAAO;EACP,IAAMO,IAAQ,YAAYD,GAAQ,GAAG;EACrC,aAAa,cAAcC,CAAK;CACjC,GAAG,CAACF,CAAW,CAAC;CAChB,IAAMG,IAAQ,OAAO,SAASC,CAAc,IAAI,KAAK,IAAI,GAAGA,CAAc,IAAI,KACxEC,IAAU,KAAK,MAAMR,IAAU,GAAG,IAAI;CAC5C,OAAO;EACN,SAASG,KAAeH,KAAWM;EACnC,MACCE,IAAU,KACP,GAAGA,EAAQ,QAAQ,CAAC,EAAE,KACtB,GAAG,KAAK,MAAMA,IAAU,EAAE,EAAE,KAAKA,IAAU,GAAA,CAAI,QAAQ,CAAC,EAAE;CAC/D;AACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RecommendationOption } from "../models/recommendation.js";
|
|
2
|
+
export declare function useRecommendationCardViewModel({ options, onAccept, disabled, }: {
|
|
3
|
+
options: readonly RecommendationOption[];
|
|
4
|
+
onAccept: (option: RecommendationOption) => void | Promise<void>;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}): {
|
|
7
|
+
active: RecommendationOption;
|
|
8
|
+
others: RecommendationOption[];
|
|
9
|
+
open: boolean;
|
|
10
|
+
pending: boolean;
|
|
11
|
+
error: string;
|
|
12
|
+
accepted: boolean;
|
|
13
|
+
blocked: boolean;
|
|
14
|
+
setOpen(next: boolean): void;
|
|
15
|
+
select(id: string): void;
|
|
16
|
+
accept(): Promise<void>;
|
|
17
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect as e, useRef as t, useState as n } from "react";
|
|
3
|
+
//#region src/viewmodels/use-recommendation-card.ts
|
|
4
|
+
function r({ options: r, onAccept: i, disabled: a = !1 }) {
|
|
5
|
+
let [o, s] = n(), [c, l] = n(!1), [u, d] = n(!1), [f, p] = n(), [m, h] = n(""), g = t(!1), _ = t(!0);
|
|
6
|
+
e(() => (_.current = !0, () => {
|
|
7
|
+
_.current = !1;
|
|
8
|
+
}), []);
|
|
9
|
+
let v = r.find((e) => e.id === o) ?? r.find((e) => !e.disabled) ?? r[0];
|
|
10
|
+
return {
|
|
11
|
+
active: v,
|
|
12
|
+
others: r.filter((e) => e.id !== v?.id),
|
|
13
|
+
open: c,
|
|
14
|
+
pending: u,
|
|
15
|
+
error: m,
|
|
16
|
+
accepted: !!(v && f === v.id),
|
|
17
|
+
blocked: a || u,
|
|
18
|
+
setOpen(e) {
|
|
19
|
+
!a && !g.current && l(e);
|
|
20
|
+
},
|
|
21
|
+
select(e) {
|
|
22
|
+
a || g.current || !r.some((t) => t.id === e && !t.disabled) || (s(e), p(void 0), h(""));
|
|
23
|
+
},
|
|
24
|
+
async accept() {
|
|
25
|
+
if (!(!v || a || v.disabled || g.current || f === v.id)) {
|
|
26
|
+
g.current = !0, d(!0), h("");
|
|
27
|
+
try {
|
|
28
|
+
await i({ ...v }), _.current && p(v.id);
|
|
29
|
+
} catch (e) {
|
|
30
|
+
_.current && h(e instanceof Error ? e.message : "Could not accept recommendation. Try again.");
|
|
31
|
+
} finally {
|
|
32
|
+
g.current = !1, _.current && d(!1);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { r as useRecommendationCardViewModel };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=use-recommendation-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-recommendation-card.js","names":["useRecommendationCardViewModel","selected","setSelected","useState","open","setOpen","pending","setPending","accepted","setAccepted","error","setError","lock","useRef","mounted","active","options","option","disabled","next","id","onAccept","reason"],"sources":["../../src/viewmodels/use-recommendation-card.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport type { RecommendationOption } from \"../models/recommendation\";\n\nexport function useRecommendationCardViewModel({\n\toptions,\n\tonAccept,\n\tdisabled = false,\n}: {\n\toptions: readonly RecommendationOption[];\n\tonAccept: (option: RecommendationOption) => void | Promise<void>;\n\tdisabled?: boolean;\n}) {\n\tconst [selected, setSelected] = useState<string>();\n\tconst [open, setOpen] = useState(false);\n\tconst [pending, setPending] = useState(false);\n\tconst [accepted, setAccepted] = useState<string>();\n\tconst [error, setError] = useState(\"\");\n\tconst lock = useRef(false);\n\tconst mounted = useRef(true);\n\tuseEffect(() => {\n\t\tmounted.current = true;\n\t\treturn () => {\n\t\t\tmounted.current = false;\n\t\t};\n\t}, []);\n\tconst active =\n\t\toptions.find((option) => option.id === selected) ??\n\t\toptions.find((option) => !option.disabled) ??\n\t\toptions[0];\n\tconst others = options.filter((option) => option.id !== active?.id);\n\treturn {\n\t\tactive,\n\t\tothers,\n\t\topen,\n\t\tpending,\n\t\terror,\n\t\taccepted: Boolean(active && accepted === active.id),\n\t\tblocked: disabled || pending,\n\t\tsetOpen(next: boolean) {\n\t\t\tif (!disabled && !lock.current) setOpen(next);\n\t\t},\n\t\tselect(id: string) {\n\t\t\tif (\n\t\t\t\tdisabled ||\n\t\t\t\tlock.current ||\n\t\t\t\t!options.some((option) => option.id === id && !option.disabled)\n\t\t\t)\n\t\t\t\treturn;\n\t\t\tsetSelected(id);\n\t\t\tsetAccepted(undefined);\n\t\t\tsetError(\"\");\n\t\t},\n\t\tasync accept() {\n\t\t\tif (!active || disabled || active.disabled || lock.current || accepted === active.id) return;\n\t\t\tlock.current = true;\n\t\t\tsetPending(true);\n\t\t\tsetError(\"\");\n\t\t\ttry {\n\t\t\t\tawait onAccept({ ...active });\n\t\t\t\tif (mounted.current) setAccepted(active.id);\n\t\t\t} catch (reason) {\n\t\t\t\tif (mounted.current)\n\t\t\t\t\tsetError(\n\t\t\t\t\t\treason instanceof Error\n\t\t\t\t\t\t\t? reason.message\n\t\t\t\t\t\t\t: \"Could not accept recommendation. Try again.\",\n\t\t\t\t\t);\n\t\t\t} finally {\n\t\t\t\tlock.current = false;\n\t\t\t\tif (mounted.current) setPending(false);\n\t\t\t}\n\t\t},\n\t};\n}\n"],"mappings":";;;AAGA,SAAgBA,EAA+B,EAC9C,YACA,aACA,cAAW,MAKT;CACF,IAAM,CAACC,GAAUC,KAAeC,EAAiB,GAC3C,CAACC,GAAMC,KAAWF,EAAS,EAAK,GAChC,CAACG,GAASC,KAAcJ,EAAS,EAAK,GACtC,CAACK,GAAUC,KAAeN,EAAiB,GAC3C,CAACO,GAAOC,KAAYR,EAAS,EAAE,GAC/BS,IAAOC,EAAO,EAAK,GACnBC,IAAUD,EAAO,EAAI;CAC3B,SACC,EAAQ,UAAU,UACL;EACZ,EAAQ,UAAU;CACnB,IACE,CAAC,CAAC;CACL,IAAME,IACLC,EAAQ,MAAM,MAAWC,EAAO,OAAOhB,CAAQ,KAC/Ce,EAAQ,MAAM,MAAW,CAACC,EAAO,QAAQ,KACzCD,EAAQ;CAET,OAAO;EACN;EACA,QAHcA,EAAQ,QAAQ,MAAWC,EAAO,OAAOF,GAAQ,EAG/D;EACA;EACA;EACA;EACA,UAAU,GAAQA,KAAUP,MAAaO,EAAO;EAChD,SAASG,KAAYZ;EACrB,QAAQ,GAAe;GACtB,AAAI,CAACY,KAAY,CAACN,EAAK,WAASP,EAAQc,CAAI;EAC7C;EACA,OAAO,GAAY;GAClB,AACCD,KACAN,EAAK,WACL,CAACI,EAAQ,MAAM,MAAWC,EAAO,OAAOG,KAAM,CAACH,EAAO,QAAQ,MAG/Df,EAAYkB,CAAE,GACdX,EAAY,KAAA,CAAS,GACrBE,EAAS,EAAE;EACZ;EACA,MAAM,SAAS;GACd,IAAI,GAACI,KAAUG,KAAYH,EAAO,YAAYH,EAAK,WAAWJ,MAAaO,EAAO,KAGlF;IAFA,EAAK,UAAU,IACfR,EAAW,EAAI,GACfI,EAAS,EAAE;IACX,IAAI;KAEH,AADA,MAAMU,EAAS,EAAE,GAAGN,EAAO,CAAC,GACxBD,EAAQ,WAASL,EAAYM,EAAO,EAAE;IAC3C,SAASO,GAAQ;KAChB,AAAIR,EAAQ,WACXH,EACCW,aAAkB,QACfA,EAAO,UACP,6CACJ;IACF,UAAU;KAET,AADA,EAAK,UAAU,IACXR,EAAQ,WAASP,EAAW,EAAK;IACtC;GAdW;EAeZ;CACD;AACD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ThinkingStep } from "../models/agent-feedback.js";
|
|
2
|
+
export declare function useThinkingViewModel({ steps, open, defaultOpen, onOpenChange, }: {
|
|
3
|
+
steps: readonly ThinkingStep[];
|
|
4
|
+
open?: boolean;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
onOpenChange?: (open: boolean) => void;
|
|
7
|
+
}): {
|
|
8
|
+
completed: number;
|
|
9
|
+
total: number;
|
|
10
|
+
status: import("../models/agent-feedback.js").AgentStepStatus;
|
|
11
|
+
open: boolean;
|
|
12
|
+
setOpen(next: boolean): void;
|
|
13
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { summarizeSteps as e } from "../models/agent-feedback.js";
|
|
3
|
+
import { useState as t } from "react";
|
|
4
|
+
//#region src/viewmodels/use-thinking.ts
|
|
5
|
+
function n({ steps: n, open: r, defaultOpen: i = !0, onOpenChange: a }) {
|
|
6
|
+
let [o, s] = t(i);
|
|
7
|
+
return {
|
|
8
|
+
...e(n),
|
|
9
|
+
open: r ?? o,
|
|
10
|
+
setOpen(e) {
|
|
11
|
+
s(e), a?.(e);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { n as useThinkingViewModel };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=use-thinking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-thinking.js","names":["useThinkingViewModel","localOpen","setLocalOpen","useState","defaultOpen","summarizeSteps","steps","open","next","onOpenChange"],"sources":["../../src/viewmodels/use-thinking.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { summarizeSteps, type ThinkingStep } from \"../models/agent-feedback\";\n\nexport function useThinkingViewModel({\n\tsteps,\n\topen,\n\tdefaultOpen = true,\n\tonOpenChange,\n}: {\n\tsteps: readonly ThinkingStep[];\n\topen?: boolean;\n\tdefaultOpen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n}) {\n\tconst [localOpen, setLocalOpen] = useState(defaultOpen);\n\treturn {\n\t\t...summarizeSteps(steps),\n\t\topen: open ?? localOpen,\n\t\tsetOpen(next: boolean) {\n\t\t\tsetLocalOpen(next);\n\t\t\tonOpenChange?.(next);\n\t\t},\n\t};\n}\n"],"mappings":";;;;AAGA,SAAgBA,EAAqB,EACpC,UACA,SACA,iBAAc,IACd,mBAME;CACF,IAAM,CAACC,GAAWC,KAAgBC,EAASC,CAAW;CACtD,OAAO;EACN,GAAGC,EAAeC,CAAK;EACvB,MAAMC,KAAQN;EACd,QAAQ,GAAe;GAEtB,AADAC,EAAaM,CAAI,GACjBC,IAAeD,CAAI;EACpB;CACD;AACD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ToolStep } from "../models/agent-feedback.js";
|
|
2
|
+
export declare function useToolChipsViewModel(steps: readonly ToolStep[], defaultOpen: boolean): {
|
|
3
|
+
completed: number;
|
|
4
|
+
total: number;
|
|
5
|
+
status: import("../models/agent-feedback.js").AgentStepStatus;
|
|
6
|
+
open: boolean;
|
|
7
|
+
setOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
8
|
+
expanded: string[];
|
|
9
|
+
setExpanded(id: string, next: boolean): void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { summarizeSteps as e } from "../models/agent-feedback.js";
|
|
3
|
+
import { useState as t } from "react";
|
|
4
|
+
//#region src/viewmodels/use-tool-chips.ts
|
|
5
|
+
function n(n, r) {
|
|
6
|
+
let [i, a] = t(r), [o, s] = t([]);
|
|
7
|
+
return {
|
|
8
|
+
...e(n),
|
|
9
|
+
open: i,
|
|
10
|
+
setOpen: a,
|
|
11
|
+
expanded: o,
|
|
12
|
+
setExpanded(e, t) {
|
|
13
|
+
s((n) => t ? [.../* @__PURE__ */ new Set([...n, e])] : n.filter((t) => t !== e));
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { n as useToolChipsViewModel };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=use-tool-chips.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-tool-chips.js","names":["useToolChipsViewModel","open","setOpen","useState","defaultOpen","expanded","setExpanded","summarizeSteps","steps","next","current","id","value"],"sources":["../../src/viewmodels/use-tool-chips.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { summarizeSteps, type ToolStep } from \"../models/agent-feedback\";\n\nexport function useToolChipsViewModel(steps: readonly ToolStep[], defaultOpen: boolean) {\n\tconst [open, setOpen] = useState(defaultOpen);\n\tconst [expanded, setExpanded] = useState<string[]>([]);\n\treturn {\n\t\t...summarizeSteps(steps),\n\t\topen,\n\t\tsetOpen,\n\t\texpanded,\n\t\tsetExpanded(id: string, next: boolean) {\n\t\t\tsetExpanded((current) =>\n\t\t\t\tnext ? [...new Set([...current, id])] : current.filter((value) => value !== id),\n\t\t\t);\n\t\t},\n\t};\n}\n"],"mappings":";;;;AAGA,SAAgBA,EAAsB,GAA4B,GAAsB;CACvF,IAAM,CAACC,GAAMC,KAAWC,EAASC,CAAW,GACtC,CAACC,GAAUC,KAAeH,EAAmB,CAAC,CAAC;CACrD,OAAO;EACN,GAAGI,EAAeC,CAAK;EACvB;EACA;EACA;EACA,YAAY,GAAY,GAAe;GACtC,GAAa,MACZC,IAAO,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAGC,GAASC,CAAE,CAAC,CAAC,IAAID,EAAQ,QAAQ,MAAUE,MAAUD,CAAE,CAC/E;EACD;CACD;AACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocoo/basalt",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -80,6 +80,8 @@
|
|
|
80
80
|
"class-variance-authority": "^0.7.1",
|
|
81
81
|
"clsx": "^2.1.1",
|
|
82
82
|
"cmdk": "^1.1.1",
|
|
83
|
+
"entities": "8.0.0",
|
|
84
|
+
"marked": "18.0.14",
|
|
83
85
|
"sonner": "2.0.8",
|
|
84
86
|
"tailwind-merge": "3.7.0"
|
|
85
87
|
},
|