hermium 0.1.10 → 0.3.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 +56 -0
- package/bin/hermium.mjs +201 -136
- package/dist/api.mjs +3513 -0
- package/dist/{web-server → server}/_chunks/ssr-renderer.mjs +1 -1
- package/dist/{web-server → server}/_libs/base-ui__react.mjs +338 -34
- package/dist/{web-server → server}/_libs/base-ui__utils.mjs +38 -33
- package/dist/server/_libs/comma-separated-tokens.mjs +10 -0
- package/dist/{web-server → server}/_libs/floating-ui__core.mjs +3 -3
- package/dist/{web-server → server}/_libs/floating-ui__dom.mjs +4 -4
- package/dist/{web-server → server}/_libs/floating-ui__react-dom.mjs +3 -3
- package/dist/{web-server → server}/_libs/floating-ui__utils.mjs +38 -38
- package/dist/{web-server → server}/_libs/h3.mjs +3 -3
- package/dist/server/_libs/hast-util-is-element.mjs +75 -0
- package/dist/{web-server → server}/_libs/hast-util-to-jsx-runtime.mjs +2 -2
- package/dist/server/_libs/hast-util-to-text.mjs +305 -0
- package/dist/server/_libs/highlight.js.mjs +14756 -0
- package/dist/server/_libs/lowlight.mjs +262 -0
- package/dist/{web-server → server}/_libs/mdast-util-from-markdown.mjs +1 -1
- package/dist/{web-server → server}/_libs/mdast-util-gfm-autolink-literal+[...].mjs +2 -2
- package/dist/{web-server → server}/_libs/mdast-util-to-hast.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-core-commonmark.mjs +24 -24
- package/dist/{web-server → server}/_libs/micromark-extension-gfm-autolink-literal+[...].mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-extension-gfm-footnote+[...].mjs +2 -2
- package/dist/{web-server → server}/_libs/micromark-extension-gfm-table.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-extension-gfm-task-list-item+[...].mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-factory-destination.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-factory-label.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-factory-space.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-factory-whitespace.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-util-character.mjs +12 -12
- package/dist/{web-server → server}/_libs/micromark-util-classify-character+[...].mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark-util-html-tag-name.mjs +2 -2
- package/dist/{web-server → server}/_libs/micromark-util-sanitize-uri.mjs +1 -1
- package/dist/{web-server → server}/_libs/micromark.mjs +3 -3
- package/dist/{web-server → server}/_libs/property-information.mjs +2 -3
- package/dist/{web-server → server}/_libs/react-dom.mjs +1 -1
- package/dist/{web-server → server}/_libs/react.mjs +42 -42
- package/dist/server/_libs/rehype-highlight.mjs +94 -0
- package/dist/server/_libs/space-separated-tokens.mjs +6 -0
- package/dist/server/_libs/tabler__icons-react.mjs +140 -0
- package/dist/server/_libs/tailwind-merge.mjs +3255 -0
- package/dist/server/_libs/tanstack__history.mjs +29 -0
- package/dist/{web-server → server}/_libs/tanstack__react-router.mjs +3 -3
- package/dist/{web-server → server}/_libs/tanstack__router-core.mjs +47 -741
- package/dist/server/_libs/unist-util-find-after.mjs +41 -0
- package/dist/{web-server → server}/_libs/unist-util-position.mjs +2 -2
- package/dist/{web-server → server}/_libs/use-sync-external-store.mjs +1 -1
- package/dist/server/_libs/zustand.mjs +43 -0
- package/dist/server/_ssr/ChatInputBlock-Bu2-iop_.mjs +220 -0
- package/dist/server/_ssr/MarkdownMessage-CNS7OSKN.mjs +68 -0
- package/dist/server/_ssr/chat._sessionId-P02iSfut.mjs +477 -0
- package/dist/{web-server/_ssr/index-CoDfv1vI.mjs → server/_ssr/chat.index-BYB_48NC.mjs} +6 -8
- package/dist/server/_ssr/index-C1mT_2d8.mjs +4890 -0
- package/dist/server/_ssr/index-DFV9_oCk.mjs +43 -0
- package/dist/server/_ssr/memory-CW_fSOG9.mjs +257 -0
- package/dist/{web-server/_ssr/router-CS6Zq3md.mjs → server/_ssr/router-CUAfx91O.mjs} +1009 -1108
- package/dist/server/_ssr/settings-DoXurzvn.mjs +10 -0
- package/dist/server/_ssr/skills-Cs7A5ZwO.mjs +422 -0
- package/dist/server/_ssr/theme-BK4-7E2h.mjs +42 -0
- package/dist/server/_ssr/usage-Bs2-LXGz.mjs +298 -0
- package/dist/server/_tanstack-start-manifest_v-C7Upe2TI.mjs +4 -0
- package/dist/server/index.mjs +502 -240
- package/package.json +4 -3
- package/dist/public/assets/IconAlertCircle-BW147gsG.js +0 -1
- package/dist/public/assets/IconAlertTriangle-DCoTLVSd.js +0 -1
- package/dist/public/assets/IconCheck-DAO7Fpl9.js +0 -1
- package/dist/public/assets/IconCode-BqfTl5wU.js +0 -1
- package/dist/public/assets/IconLoader2-B_pehSXN.js +0 -1
- package/dist/public/assets/IconRefresh-BbMGoMV8.js +0 -1
- package/dist/public/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/dist/public/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/dist/public/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/dist/public/assets/index-BL9a2Xg9.js +0 -1
- package/dist/public/assets/index-BSwXjgjr.js +0 -1
- package/dist/public/assets/index-BWl8tn18.js +0 -1
- package/dist/public/assets/index-CQh8SXb2.js +0 -94
- package/dist/public/assets/index-Cxd-kSUY.js +0 -1
- package/dist/public/assets/index-DA5SH--7.js +0 -2
- package/dist/public/assets/index-DCHbvtBS.js +0 -1
- package/dist/public/assets/index-DCYXJZEe.js +0 -1
- package/dist/public/assets/index-DFDfp0ca.js +0 -1
- package/dist/public/assets/index-GuAAqSCJ.js +0 -14
- package/dist/public/assets/index-WIDirTHx.js +0 -29
- package/dist/public/assets/index-X3XZcAzy.js +0 -1
- package/dist/public/assets/input-7TQEEJq6.js +0 -1
- package/dist/public/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/dist/public/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/dist/public/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/dist/public/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/dist/public/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/dist/public/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/dist/public/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/dist/public/assets/models-BlUb1eaf.js +0 -1
- package/dist/public/assets/styles-PHtUFHUr.css +0 -1
- package/dist/public/assets/switch-B_iYUUM3.js +0 -1
- package/dist/public/assets/syntax-highlighter-DcBYfnEK.js +0 -6
- package/dist/public/assets/textarea-Dm4aaRqS.js +0 -1
- package/dist/public/favicon.ico +0 -0
- package/dist/public/favicon.png +0 -0
- package/dist/public/manifest.json +0 -25
- package/dist/public/nous-logo.png +0 -0
- package/dist/public/robots.txt +0 -3
- package/dist/web-server/_libs/babel__runtime.mjs +0 -237
- package/dist/web-server/_libs/character-entities-legacy.mjs +0 -111
- package/dist/web-server/_libs/character-reference-invalid.mjs +0 -33
- package/dist/web-server/_libs/comma-separated-tokens.mjs +0 -31
- package/dist/web-server/_libs/cookie-es.mjs +0 -44
- package/dist/web-server/_libs/hast-util-parse-selector.mjs +0 -39
- package/dist/web-server/_libs/hastscript.mjs +0 -200
- package/dist/web-server/_libs/is-alphabetical.mjs +0 -7
- package/dist/web-server/_libs/is-alphanumerical.mjs +0 -8
- package/dist/web-server/_libs/is-decimal.mjs +0 -7
- package/dist/web-server/_libs/is-hexadecimal.mjs +0 -7
- package/dist/web-server/_libs/lowlight.mjs +0 -1
- package/dist/web-server/_libs/parse-entities.mjs +0 -245
- package/dist/web-server/_libs/react-syntax-highlighter.mjs +0 -941
- package/dist/web-server/_libs/refractor.mjs +0 -2425
- package/dist/web-server/_libs/seroval-plugins.mjs +0 -58
- package/dist/web-server/_libs/seroval.mjs +0 -1775
- package/dist/web-server/_libs/space-separated-tokens.mjs +0 -11
- package/dist/web-server/_libs/tabler__icons-react.mjs +0 -233
- package/dist/web-server/_libs/tanstack__history.mjs +0 -204
- package/dist/web-server/_libs/tanstack__query-core.mjs +0 -2552
- package/dist/web-server/_libs/tanstack__react-query.mjs +0 -190
- package/dist/web-server/_libs/zod.mjs +0 -3915
- package/dist/web-server/_libs/zustand.mjs +0 -343
- package/dist/web-server/_ssr/index--Bo2_ipW.mjs +0 -277
- package/dist/web-server/_ssr/index-BEvygh5x.mjs +0 -612
- package/dist/web-server/_ssr/index-BFaKxYfN.mjs +0 -40
- package/dist/web-server/_ssr/index-BdrMzRTd.mjs +0 -513
- package/dist/web-server/_ssr/index-Cwp8Gyl1.mjs +0 -1812
- package/dist/web-server/_ssr/index-DQsfKYjV.mjs +0 -449
- package/dist/web-server/_ssr/index-Dbs9k8Ea.mjs +0 -251
- package/dist/web-server/_ssr/index-Dk93oyZD.mjs +0 -213
- package/dist/web-server/_ssr/index-KNJ7huw_.mjs +0 -369
- package/dist/web-server/_ssr/index.mjs +0 -1558
- package/dist/web-server/_ssr/input-BV1DMASc.mjs +0 -20
- package/dist/web-server/_ssr/models-MzrvbL2i.mjs +0 -43
- package/dist/web-server/_ssr/start-HYkvq4Ni.mjs +0 -4
- package/dist/web-server/_ssr/switch-Bd-Sg0HG.mjs +0 -33
- package/dist/web-server/_ssr/syntax-highlighter-5vezNTce.mjs +0 -62
- package/dist/web-server/_ssr/textarea-CB4kQp9w.mjs +0 -18
- package/dist/web-server/_tanstack-start-manifest_v-m5lY48LR.mjs +0 -4
- package/dist/web-server/index.mjs +0 -611
- /package/dist/{web-server → server}/__23tanstack-start-plugin-adapters-Cwee5PKy.mjs +0 -0
- /package/dist/{web-server → server}/_libs/bail.mjs +0 -0
- /package/dist/{web-server → server}/_libs/ccount.mjs +0 -0
- /package/dist/{web-server → server}/_libs/character-entities.mjs +0 -0
- /package/dist/{web-server → server}/_libs/class-variance-authority.mjs +0 -0
- /package/dist/{web-server → server}/_libs/clsx.mjs +0 -0
- /package/dist/{web-server/_libs/croner.mjs → server/_libs/cookie-es.mjs} +0 -0
- /package/dist/{web-server/_libs/crossws.mjs → server/_libs/croner.mjs} +0 -0
- /package/dist/{web-server/_libs/fault.mjs → server/_libs/crossws.mjs} +0 -0
- /package/dist/{web-server → server}/_libs/decode-named-character-reference+[...].mjs +0 -0
- /package/dist/{web-server → server}/_libs/devlop.mjs +0 -0
- /package/dist/{web-server → server}/_libs/escape-string-regexp.mjs +0 -0
- /package/dist/{web-server → server}/_libs/estree-util-is-identifier-name.mjs +0 -0
- /package/dist/{web-server → server}/_libs/extend.mjs +0 -0
- /package/dist/{web-server → server}/_libs/hast-util-whitespace.mjs +0 -0
- /package/dist/{web-server → server}/_libs/hookable.mjs +0 -0
- /package/dist/{web-server → server}/_libs/html-url-attributes.mjs +0 -0
- /package/dist/{web-server → server}/_libs/inline-style-parser.mjs +0 -0
- /package/dist/{web-server → server}/_libs/is-plain-obj.mjs +0 -0
- /package/dist/{web-server → server}/_libs/isbot.mjs +0 -0
- /package/dist/{web-server → server}/_libs/longest-streak.mjs +0 -0
- /package/dist/{web-server → server}/_libs/markdown-table.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-find-and-replace.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-gfm-footnote.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-gfm-strikethrough.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-gfm-table.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-gfm-task-list-item.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-gfm.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-phrasing.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-to-markdown.mjs +0 -0
- /package/dist/{web-server → server}/_libs/mdast-util-to-string.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-extension-gfm-strikethrough+[...].mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-extension-gfm-tagfilter+[...].mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-extension-gfm.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-factory-title.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-chunked.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-combine-extensions+[...].mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-decode-numeric-character-reference+[...].mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-decode-string.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-encode.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-normalize-identifier+[...].mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-resolve-all.mjs +0 -0
- /package/dist/{web-server → server}/_libs/micromark-util-subtokenize.mjs +0 -0
- /package/dist/{web-server → server}/_libs/ocache.mjs +0 -0
- /package/dist/{web-server → server}/_libs/ohash.mjs +0 -0
- /package/dist/{web-server → server}/_libs/react-markdown.mjs +0 -0
- /package/dist/{web-server → server}/_libs/remark-gfm.mjs +0 -0
- /package/dist/{web-server → server}/_libs/remark-parse.mjs +0 -0
- /package/dist/{web-server → server}/_libs/remark-rehype.mjs +0 -0
- /package/dist/{web-server → server}/_libs/reselect.mjs +0 -0
- /package/dist/{web-server → server}/_libs/rou3.mjs +0 -0
- /package/dist/{web-server/_libs/format.mjs → server/_libs/seroval-plugins.mjs} +0 -0
- /package/dist/{web-server/_libs/highlight.js.mjs → server/_libs/seroval.mjs} +0 -0
- /package/dist/{web-server → server}/_libs/srvx.mjs +0 -0
- /package/dist/{web-server → server}/_libs/style-to-js.mjs +0 -0
- /package/dist/{web-server → server}/_libs/style-to-object.mjs +0 -0
- /package/dist/{web-server → server}/_libs/tanstack__react-store.mjs +0 -0
- /package/dist/{web-server → server}/_libs/tanstack__store.mjs +0 -0
- /package/dist/{web-server → server}/_libs/trim-lines.mjs +0 -0
- /package/dist/{web-server → server}/_libs/trough.mjs +0 -0
- /package/dist/{web-server → server}/_libs/ufo.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unctx.mjs +0 -0
- /package/dist/{web-server → server}/_libs/ungap__structured-clone.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unified.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unist-util-is.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unist-util-stringify-position.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unist-util-visit-parents.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unist-util-visit.mjs +0 -0
- /package/dist/{web-server → server}/_libs/unstorage.mjs +0 -0
- /package/dist/{web-server → server}/_libs/vfile-message.mjs +0 -0
- /package/dist/{web-server → server}/_libs/vfile.mjs +0 -0
- /package/dist/{web-server → server}/_libs/zwitch.mjs +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { c as convert } from "./unist-util-is.mjs";
|
|
2
|
+
const findAfter = (
|
|
3
|
+
// Note: overloads like this are needed to support optional generics.
|
|
4
|
+
/**
|
|
5
|
+
* @type {(
|
|
6
|
+
* (<Kind extends UnistParent, Check extends Test>(parent: Kind, index: Child<Kind> | number, test: Check) => Matches<Child<Kind>, Check> | undefined) &
|
|
7
|
+
* (<Kind extends UnistParent>(parent: Kind, index: Child<Kind> | number, test?: null | undefined) => Child<Kind> | undefined)
|
|
8
|
+
* )}
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* @param {UnistParent} parent
|
|
12
|
+
* @param {UnistNode | number} index
|
|
13
|
+
* @param {Test} [test]
|
|
14
|
+
* @returns {UnistNode | undefined}
|
|
15
|
+
*/
|
|
16
|
+
(function(parent, index, test) {
|
|
17
|
+
const is = convert(test);
|
|
18
|
+
if (!parent || !parent.type || !parent.children) {
|
|
19
|
+
throw new Error("Expected parent node");
|
|
20
|
+
}
|
|
21
|
+
if (typeof index === "number") {
|
|
22
|
+
if (index < 0 || index === Number.POSITIVE_INFINITY) {
|
|
23
|
+
throw new Error("Expected positive finite number as index");
|
|
24
|
+
}
|
|
25
|
+
} else {
|
|
26
|
+
index = parent.children.indexOf(index);
|
|
27
|
+
if (index < 0) {
|
|
28
|
+
throw new Error("Expected child node or index");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
while (++index < parent.children.length) {
|
|
32
|
+
if (is(parent.children[index], index, parent)) {
|
|
33
|
+
return parent.children[index];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return void 0;
|
|
37
|
+
})
|
|
38
|
+
);
|
|
39
|
+
export {
|
|
40
|
+
findAfter as f
|
|
41
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { R as React } from "./react.mjs";
|
|
2
|
+
const createStoreImpl = (createState) => {
|
|
3
|
+
let state;
|
|
4
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
5
|
+
const setState = (partial, replace) => {
|
|
6
|
+
const nextState = typeof partial === "function" ? partial(state) : partial;
|
|
7
|
+
if (!Object.is(nextState, state)) {
|
|
8
|
+
const previousState = state;
|
|
9
|
+
state = (replace != null ? replace : typeof nextState !== "object" || nextState === null) ? nextState : Object.assign({}, state, nextState);
|
|
10
|
+
listeners.forEach((listener) => listener(state, previousState));
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
const getState = () => state;
|
|
14
|
+
const getInitialState = () => initialState;
|
|
15
|
+
const subscribe = (listener) => {
|
|
16
|
+
listeners.add(listener);
|
|
17
|
+
return () => listeners.delete(listener);
|
|
18
|
+
};
|
|
19
|
+
const api = { setState, getState, getInitialState, subscribe };
|
|
20
|
+
const initialState = state = createState(setState, getState, api);
|
|
21
|
+
return api;
|
|
22
|
+
};
|
|
23
|
+
const createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);
|
|
24
|
+
const identity = (arg) => arg;
|
|
25
|
+
function useStore(api, selector = identity) {
|
|
26
|
+
const slice = React.useSyncExternalStore(
|
|
27
|
+
api.subscribe,
|
|
28
|
+
React.useCallback(() => selector(api.getState()), [api, selector]),
|
|
29
|
+
React.useCallback(() => selector(api.getInitialState()), [api, selector])
|
|
30
|
+
);
|
|
31
|
+
React.useDebugValue(slice);
|
|
32
|
+
return slice;
|
|
33
|
+
}
|
|
34
|
+
const createImpl = (createState) => {
|
|
35
|
+
const api = createStore(createState);
|
|
36
|
+
const useBoundStore = (selector) => useStore(api, selector);
|
|
37
|
+
Object.assign(useBoundStore, api);
|
|
38
|
+
return useBoundStore;
|
|
39
|
+
};
|
|
40
|
+
const create = ((createState) => createState ? createImpl(createState) : createImpl);
|
|
41
|
+
export {
|
|
42
|
+
create as c
|
|
43
|
+
};
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { r as reactExports, j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
+
import { u as useChatStore, B as Button, c as cn } from "./router-CUAfx91O.mjs";
|
|
3
|
+
import { k as IconFile, C as IconX, o as IconPaperclip, q as IconPhotoScan, t as IconPlayerStop, a as IconArrowUp } from "../_libs/tabler__icons-react.mjs";
|
|
4
|
+
function Textarea({ className, ...props }) {
|
|
5
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
6
|
+
"textarea",
|
|
7
|
+
{
|
|
8
|
+
"data-slot": "textarea",
|
|
9
|
+
className: cn(
|
|
10
|
+
"flex field-sizing-content min-h-16 w-full rounded-lg border border-input bg-transparent px-2.5 py-2 text-base transition-colors outline-none placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",
|
|
11
|
+
className
|
|
12
|
+
),
|
|
13
|
+
...props
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
}
|
|
17
|
+
function ChatInputBlock({
|
|
18
|
+
onCreateSession
|
|
19
|
+
}) {
|
|
20
|
+
const [inputValue, setInputValue] = reactExports.useState("");
|
|
21
|
+
const [attachments, setAttachments] = reactExports.useState([]);
|
|
22
|
+
const [isDragging, setIsDragging] = reactExports.useState(false);
|
|
23
|
+
const inputRef = reactExports.useRef(null);
|
|
24
|
+
const fileInputRef = reactExports.useRef(null);
|
|
25
|
+
const sendMessage = useChatStore((s) => s.sendMessage);
|
|
26
|
+
const abortStream = useChatStore((s) => s.abortStream);
|
|
27
|
+
const isStreaming = useChatStore((s) => s.isStreaming);
|
|
28
|
+
const activeSessionId = useChatStore((s) => s.activeSessionId);
|
|
29
|
+
const handleFiles = reactExports.useCallback((files) => {
|
|
30
|
+
if (!files) return;
|
|
31
|
+
const newAttachments = [];
|
|
32
|
+
for (const file of Array.from(files)) {
|
|
33
|
+
newAttachments.push({
|
|
34
|
+
id: Math.random().toString(36).slice(2),
|
|
35
|
+
name: file.name,
|
|
36
|
+
type: file.type || "application/octet-stream",
|
|
37
|
+
size: file.size,
|
|
38
|
+
url: URL.createObjectURL(file),
|
|
39
|
+
file
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
setAttachments((prev) => [...prev, ...newAttachments]);
|
|
43
|
+
}, []);
|
|
44
|
+
const removeAttachment = reactExports.useCallback((id) => {
|
|
45
|
+
setAttachments((prev) => {
|
|
46
|
+
const att = prev.find((a) => a.id === id);
|
|
47
|
+
if (att) URL.revokeObjectURL(att.url);
|
|
48
|
+
return prev.filter((a) => a.id !== id);
|
|
49
|
+
});
|
|
50
|
+
}, []);
|
|
51
|
+
const send = async () => {
|
|
52
|
+
const raw = inputValue.trim();
|
|
53
|
+
if (!raw && attachments.length === 0) return;
|
|
54
|
+
if (onCreateSession) {
|
|
55
|
+
const id = await useChatStore.getState().createNewSession();
|
|
56
|
+
if (id) {
|
|
57
|
+
onCreateSession(id);
|
|
58
|
+
setInputValue("");
|
|
59
|
+
if (inputRef.current) inputRef.current.value = "";
|
|
60
|
+
const atts2 = attachments.length > 0 ? attachments : void 0;
|
|
61
|
+
setAttachments([]);
|
|
62
|
+
await sendMessage(raw, void 0, atts2);
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (!activeSessionId) {
|
|
67
|
+
const id = await useChatStore.getState().createNewSession();
|
|
68
|
+
if (!id) return;
|
|
69
|
+
}
|
|
70
|
+
setInputValue("");
|
|
71
|
+
if (inputRef.current) inputRef.current.value = "";
|
|
72
|
+
const atts = attachments.length > 0 ? attachments : void 0;
|
|
73
|
+
setAttachments([]);
|
|
74
|
+
await sendMessage(raw, void 0, atts);
|
|
75
|
+
};
|
|
76
|
+
const handleKeyDown = (e) => {
|
|
77
|
+
if (e.key === "Enter" && !e.shiftKey) {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
send();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const handleDragOver = (e) => {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
setIsDragging(true);
|
|
85
|
+
};
|
|
86
|
+
const handleDragLeave = (e) => {
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
setIsDragging(false);
|
|
89
|
+
};
|
|
90
|
+
const handleDrop = (e) => {
|
|
91
|
+
e.preventDefault();
|
|
92
|
+
setIsDragging(false);
|
|
93
|
+
handleFiles(e.dataTransfer.files);
|
|
94
|
+
};
|
|
95
|
+
const formatSize = (bytes) => {
|
|
96
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
97
|
+
if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
|
|
98
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
99
|
+
};
|
|
100
|
+
const isImage = (type) => type.startsWith("image/");
|
|
101
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col gap-2 w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
102
|
+
"div",
|
|
103
|
+
{
|
|
104
|
+
className: cn(
|
|
105
|
+
"flex min-h-[120px] flex-col rounded-2xl cursor-text bg-card border border-border shadow-lg transition-colors",
|
|
106
|
+
isDragging && "border-primary ring-2 ring-primary/20"
|
|
107
|
+
),
|
|
108
|
+
onDragOver: handleDragOver,
|
|
109
|
+
onDragLeave: handleDragLeave,
|
|
110
|
+
onDrop: handleDrop,
|
|
111
|
+
children: [
|
|
112
|
+
attachments.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2 p-3 pb-0", children: attachments.map((att) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
113
|
+
"div",
|
|
114
|
+
{
|
|
115
|
+
className: "group relative flex items-center gap-2 rounded-lg border bg-muted/50 px-2 py-1.5 pr-7 text-xs",
|
|
116
|
+
children: [
|
|
117
|
+
isImage(att.type) ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
118
|
+
"img",
|
|
119
|
+
{
|
|
120
|
+
src: att.url,
|
|
121
|
+
alt: att.name,
|
|
122
|
+
className: "h-6 w-6 rounded object-cover"
|
|
123
|
+
}
|
|
124
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx(IconFile, { className: "size-4 text-muted-foreground shrink-0" }),
|
|
125
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate max-w-[120px]", children: att.name }),
|
|
126
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-muted-foreground/60", children: formatSize(att.size) }),
|
|
127
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
128
|
+
"button",
|
|
129
|
+
{
|
|
130
|
+
onClick: () => removeAttachment(att.id),
|
|
131
|
+
className: "absolute right-1 top-1/2 -translate-y-1/2 flex items-center justify-center rounded p-0.5 text-muted-foreground hover:text-foreground opacity-0 group-hover:opacity-100 transition-opacity",
|
|
132
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconX, { className: "size-3" })
|
|
133
|
+
}
|
|
134
|
+
)
|
|
135
|
+
]
|
|
136
|
+
},
|
|
137
|
+
att.id
|
|
138
|
+
)) }),
|
|
139
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 relative overflow-y-auto max-h-[258px]", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
140
|
+
Textarea,
|
|
141
|
+
{
|
|
142
|
+
ref: inputRef,
|
|
143
|
+
value: inputValue,
|
|
144
|
+
onChange: (e) => setInputValue(e.target.value),
|
|
145
|
+
onKeyDown: handleKeyDown,
|
|
146
|
+
placeholder: "Ask anything",
|
|
147
|
+
className: "w-full border-0 p-3 transition-[padding] duration-200 ease-in-out min-h-[48.4px] outline-none text-[16px] text-foreground resize-none shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 bg-transparent! whitespace-pre-wrap break-words"
|
|
148
|
+
}
|
|
149
|
+
) }),
|
|
150
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex min-h-[40px] items-center gap-2 p-2 pb-1", children: [
|
|
151
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1", children: [
|
|
152
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
153
|
+
"input",
|
|
154
|
+
{
|
|
155
|
+
ref: fileInputRef,
|
|
156
|
+
type: "file",
|
|
157
|
+
multiple: true,
|
|
158
|
+
className: "hidden",
|
|
159
|
+
onChange: (e) => handleFiles(e.target.files)
|
|
160
|
+
}
|
|
161
|
+
),
|
|
162
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
163
|
+
Button,
|
|
164
|
+
{
|
|
165
|
+
variant: "ghost",
|
|
166
|
+
size: "icon-sm",
|
|
167
|
+
className: "text-muted-foreground hover:text-foreground transition-colors duration-100 ease-out",
|
|
168
|
+
title: "Attach files",
|
|
169
|
+
"aria-label": "Attach files",
|
|
170
|
+
onClick: () => fileInputRef.current?.click(),
|
|
171
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconPaperclip, { className: "h-5 w-5" })
|
|
172
|
+
}
|
|
173
|
+
),
|
|
174
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
175
|
+
Button,
|
|
176
|
+
{
|
|
177
|
+
variant: "ghost",
|
|
178
|
+
size: "icon-sm",
|
|
179
|
+
className: "text-muted-foreground hover:text-foreground transition-colors duration-100 ease-out",
|
|
180
|
+
title: "Attach images",
|
|
181
|
+
"aria-label": "Attach images",
|
|
182
|
+
onClick: () => fileInputRef.current?.click(),
|
|
183
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconPhotoScan, { className: "h-5 w-5" })
|
|
184
|
+
}
|
|
185
|
+
)
|
|
186
|
+
] }),
|
|
187
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ml-auto flex items-center gap-3", children: isStreaming ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
188
|
+
Button,
|
|
189
|
+
{
|
|
190
|
+
variant: "ghost",
|
|
191
|
+
size: "icon-sm",
|
|
192
|
+
onClick: abortStream,
|
|
193
|
+
className: "rounded-full bg-destructive hover:bg-destructive/90 text-destructive-foreground transition-colors cursor-pointer",
|
|
194
|
+
title: "Stop generating",
|
|
195
|
+
"aria-label": "Stop generating",
|
|
196
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconPlayerStop, { className: "h-4 w-4" })
|
|
197
|
+
}
|
|
198
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
199
|
+
Button,
|
|
200
|
+
{
|
|
201
|
+
variant: "ghost",
|
|
202
|
+
size: "icon-sm",
|
|
203
|
+
onClick: send,
|
|
204
|
+
className: cn(
|
|
205
|
+
"rounded-full transition-colors duration-100 ease-out cursor-pointer bg-primary",
|
|
206
|
+
(inputValue || attachments.length > 0) && "bg-primary hover:bg-primary/90!"
|
|
207
|
+
),
|
|
208
|
+
disabled: !inputValue && attachments.length === 0,
|
|
209
|
+
"aria-label": "Send message",
|
|
210
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconArrowUp, { className: "h-4 w-4 text-primary-foreground" })
|
|
211
|
+
}
|
|
212
|
+
) })
|
|
213
|
+
] })
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
) });
|
|
217
|
+
}
|
|
218
|
+
export {
|
|
219
|
+
ChatInputBlock as C
|
|
220
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { j as jsxRuntimeExports } from "../_libs/react.mjs";
|
|
2
|
+
import "./index-C1mT_2d8.mjs";
|
|
3
|
+
import { M as Markdown } from "../_libs/react-markdown.mjs";
|
|
4
|
+
import { r as rehypeHighlight } from "../_libs/rehype-highlight.mjs";
|
|
5
|
+
import { r as remarkGfm } from "../_libs/remark-gfm.mjs";
|
|
6
|
+
function MarkdownMessage({
|
|
7
|
+
content,
|
|
8
|
+
isStreaming
|
|
9
|
+
}) {
|
|
10
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "prose prose-sm dark:prose-invert max-w-none leading-relaxed", children: [
|
|
11
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
12
|
+
Markdown,
|
|
13
|
+
{
|
|
14
|
+
remarkPlugins: [remarkGfm],
|
|
15
|
+
rehypePlugins: [rehypeHighlight],
|
|
16
|
+
components: {
|
|
17
|
+
p: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "mb-3 last:mb-0", children }),
|
|
18
|
+
h1: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("h1", { className: "text-xl font-semibold mt-4 mb-2", children }),
|
|
19
|
+
h2: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-semibold mt-3 mb-2", children }),
|
|
20
|
+
h3: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-base font-semibold mt-2 mb-1", children }),
|
|
21
|
+
ul: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "list-disc pl-5 mb-3 space-y-1", children }),
|
|
22
|
+
ol: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("ol", { className: "list-decimal pl-5 mb-3 space-y-1", children }),
|
|
23
|
+
li: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("li", { className: "marker:text-muted-foreground", children }),
|
|
24
|
+
code: ({ className, children, ...props }) => {
|
|
25
|
+
const isBlock = className?.includes("hljs") || className?.includes("language-");
|
|
26
|
+
if (!isBlock) {
|
|
27
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28
|
+
"code",
|
|
29
|
+
{
|
|
30
|
+
className: "rounded bg-muted px-1.5 py-0.5 text-sm font-mono text-foreground",
|
|
31
|
+
...props,
|
|
32
|
+
children
|
|
33
|
+
}
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
const lang = className?.match(/language-(\w+)/)?.[1];
|
|
37
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative my-3 rounded-lg border bg-muted/50 overflow-hidden", children: [
|
|
38
|
+
lang && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between px-3 py-1.5 bg-muted border-b text-[10px] text-muted-foreground font-mono uppercase", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: lang }) }),
|
|
39
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "p-3 overflow-x-auto text-sm leading-relaxed m-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("code", { className, ...props, children }) })
|
|
40
|
+
] });
|
|
41
|
+
},
|
|
42
|
+
blockquote: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("blockquote", { className: "border-l-2 border-muted-foreground/30 pl-4 italic text-muted-foreground my-3", children }),
|
|
43
|
+
a: ({ href, children }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
44
|
+
"a",
|
|
45
|
+
{
|
|
46
|
+
href,
|
|
47
|
+
target: "_blank",
|
|
48
|
+
rel: "noopener noreferrer",
|
|
49
|
+
className: "text-primary underline underline-offset-2 hover:text-primary/80 transition-colors",
|
|
50
|
+
children
|
|
51
|
+
}
|
|
52
|
+
),
|
|
53
|
+
table: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "overflow-x-auto my-3 rounded-lg border", children: /* @__PURE__ */ jsxRuntimeExports.jsx("table", { className: "w-full text-sm border-collapse", children }) }),
|
|
54
|
+
thead: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("thead", { className: "bg-muted border-b", children }),
|
|
55
|
+
th: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("th", { className: "px-3 py-2 text-left font-medium text-foreground", children }),
|
|
56
|
+
td: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2 border-b border-muted", children }),
|
|
57
|
+
hr: () => /* @__PURE__ */ jsxRuntimeExports.jsx("hr", { className: "my-4 border-border" }),
|
|
58
|
+
strong: ({ children }) => /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "font-semibold text-foreground", children })
|
|
59
|
+
},
|
|
60
|
+
children: content
|
|
61
|
+
}
|
|
62
|
+
),
|
|
63
|
+
isStreaming && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "inline-block w-0.5 h-4 bg-foreground/70 ml-0.5 align-text-bottom animate-pulse" })
|
|
64
|
+
] });
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
MarkdownMessage as M
|
|
68
|
+
};
|