@floegence/floe-webapp-core 0.60.2 → 0.62.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/dist/chat.js +39 -37
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat/input/createInputHistoryController.d.ts +36 -0
- package/dist/components/chat/input/createInputHistoryController.js +48 -0
- package/dist/components/ui/Settings.d.ts +52 -0
- package/dist/components/ui/Settings.js +183 -0
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/full.js +280 -272
- package/dist/styles.css +1 -1
- package/dist/ui.css +86 -0
- package/dist/ui.js +77 -71
- package/package.json +1 -1
package/dist/chat.js
CHANGED
|
@@ -5,16 +5,16 @@ import { ChatInput as n } from "./components/chat/input/ChatInput.js";
|
|
|
5
5
|
import { ChatProvider as d, useChatContext as p } from "./components/chat/ChatProvider.js";
|
|
6
6
|
import { ChecklistBlock as c } from "./components/chat/blocks/ChecklistBlock.js";
|
|
7
7
|
import { CodeBlock as s } from "./components/chat/blocks/CodeBlock.js";
|
|
8
|
-
import { CodeDiffBlock as
|
|
8
|
+
import { CodeDiffBlock as u } from "./components/chat/blocks/CodeDiffBlock.js";
|
|
9
9
|
import { ConnectionStatus as h } from "./components/chat/status/ConnectionStatus.js";
|
|
10
|
-
import { DEFAULT_VIRTUAL_LIST_CONFIG as
|
|
10
|
+
import { DEFAULT_VIRTUAL_LIST_CONFIG as w } from "./components/chat/types.js";
|
|
11
11
|
import { FileBlock as W } from "./components/chat/blocks/FileBlock.js";
|
|
12
12
|
import { ImageBlock as D } from "./components/chat/blocks/ImageBlock.js";
|
|
13
|
-
import { MarkdownBlock as
|
|
13
|
+
import { MarkdownBlock as I } from "./components/chat/blocks/MarkdownBlock.js";
|
|
14
14
|
import { MarkdownMedia as L } from "./components/chat/blocks/MarkdownMedia.js";
|
|
15
|
-
import { MermaidBlock as
|
|
16
|
-
import { MessageActions as
|
|
17
|
-
import { MessageAvatar as
|
|
15
|
+
import { MermaidBlock as y } from "./components/chat/blocks/MermaidBlock.js";
|
|
16
|
+
import { MessageActions as b } from "./components/chat/message/MessageActions.js";
|
|
17
|
+
import { MessageAvatar as H } from "./components/chat/message/MessageAvatar.js";
|
|
18
18
|
import { MessageBubble as R } from "./components/chat/message/MessageBubble.js";
|
|
19
19
|
import { MessageItem as V } from "./components/chat/message/MessageItem.js";
|
|
20
20
|
import { MessageMeta as N } from "./components/chat/message/MessageMeta.js";
|
|
@@ -28,13 +28,14 @@ import { VirtualMessageList as er } from "./components/chat/message-list/Virtual
|
|
|
28
28
|
import { WorkingIndicator as tr } from "./components/chat/status/WorkingIndicator.js";
|
|
29
29
|
import { buildAssistantNoticeEvents as ir, createStreamEventBuilder as fr, isStreamEvent as mr } from "./components/chat/streamEvents.js";
|
|
30
30
|
import { computeCodeDiff as kr, computeCodeDiffSync as dr, configureDiffWorker as pr, createDiffWorker as xr, hasDiffWorker as cr, terminateDiffWorker as lr, waitForDiffWorker as sr } from "./components/chat/hooks/useCodeDiff.js";
|
|
31
|
-
import { configureMarkdownWorker as
|
|
32
|
-
import { configureMermaidWorker as Dr, configureSyncMermaid as Ar, renderMermaid as
|
|
33
|
-
import { configureShikiWorker as
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
31
|
+
import { configureMarkdownWorker as ur, createMarkdownWorker as gr, hasMarkdownWorker as hr, renderMarkdown as Cr, renderMarkdownSync as wr, terminateMarkdownWorker as Br, waitForMarkdownWorker as Wr } from "./components/chat/hooks/useMarkdown.js";
|
|
32
|
+
import { configureMermaidWorker as Dr, configureSyncMermaid as Ar, renderMermaid as Ir, terminateMermaidWorker as vr, useMermaid as Lr } from "./components/chat/hooks/useMermaid.js";
|
|
33
|
+
import { configureShikiWorker as yr, configureSyncHighlighter as Fr, highlightCode as br, terminateShikiWorker as Er, useCodeHighlight as Hr } from "./components/chat/hooks/useCodeHighlight.js";
|
|
34
|
+
import { createInputHistoryController as Rr } from "./components/chat/input/createInputHistoryController.js";
|
|
35
|
+
import { markdownMediaKind as Vr, markdownMediaPlaceholder as _r, readMarkdownMediaPlaceholder as Nr, safeMarkdownMediaURL as Gr, sandboxedMarkdownHtml as Kr } from "./components/chat/markdown/media.js";
|
|
36
|
+
import { useAttachments as jr } from "./components/chat/hooks/useAttachments.js";
|
|
37
|
+
import { useAutoScroll as zr } from "./components/chat/hooks/useAutoScroll.js";
|
|
38
|
+
import { useVirtualList as Qr } from "./components/chat/hooks/useVirtualList.js";
|
|
38
39
|
export {
|
|
39
40
|
o as AttachmentPreview,
|
|
40
41
|
a as BlockRenderer,
|
|
@@ -43,16 +44,16 @@ export {
|
|
|
43
44
|
d as ChatProvider,
|
|
44
45
|
c as ChecklistBlock,
|
|
45
46
|
s as CodeBlock,
|
|
46
|
-
|
|
47
|
+
u as CodeDiffBlock,
|
|
47
48
|
h as ConnectionStatus,
|
|
48
|
-
|
|
49
|
+
w as DEFAULT_VIRTUAL_LIST_CONFIG,
|
|
49
50
|
W as FileBlock,
|
|
50
51
|
D as ImageBlock,
|
|
51
|
-
|
|
52
|
+
I as MarkdownBlock,
|
|
52
53
|
L as MarkdownMedia,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
y as MermaidBlock,
|
|
55
|
+
b as MessageActions,
|
|
56
|
+
H as MessageAvatar,
|
|
56
57
|
R as MessageBubble,
|
|
57
58
|
V as MessageItem,
|
|
58
59
|
N as MessageMeta,
|
|
@@ -68,36 +69,37 @@ export {
|
|
|
68
69
|
kr as computeCodeDiff,
|
|
69
70
|
dr as computeCodeDiffSync,
|
|
70
71
|
pr as configureDiffWorker,
|
|
71
|
-
|
|
72
|
+
ur as configureMarkdownWorker,
|
|
72
73
|
Dr as configureMermaidWorker,
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
yr as configureShikiWorker,
|
|
75
|
+
Fr as configureSyncHighlighter,
|
|
75
76
|
Ar as configureSyncMermaid,
|
|
76
77
|
xr as createDiffWorker,
|
|
77
|
-
|
|
78
|
+
Rr as createInputHistoryController,
|
|
79
|
+
gr as createMarkdownWorker,
|
|
78
80
|
fr as createStreamEventBuilder,
|
|
79
81
|
cr as hasDiffWorker,
|
|
80
82
|
hr as hasMarkdownWorker,
|
|
81
|
-
|
|
83
|
+
br as highlightCode,
|
|
82
84
|
mr as isStreamEvent,
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
Vr as markdownMediaKind,
|
|
86
|
+
_r as markdownMediaPlaceholder,
|
|
87
|
+
Nr as readMarkdownMediaPlaceholder,
|
|
88
|
+
Cr as renderMarkdown,
|
|
89
|
+
wr as renderMarkdownSync,
|
|
90
|
+
Ir as renderMermaid,
|
|
91
|
+
Gr as safeMarkdownMediaURL,
|
|
92
|
+
Kr as sandboxedMarkdownHtml,
|
|
91
93
|
lr as terminateDiffWorker,
|
|
92
94
|
Br as terminateMarkdownWorker,
|
|
93
|
-
|
|
95
|
+
vr as terminateMermaidWorker,
|
|
94
96
|
Er as terminateShikiWorker,
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
jr as useAttachments,
|
|
98
|
+
zr as useAutoScroll,
|
|
97
99
|
p as useChatContext,
|
|
98
|
-
|
|
100
|
+
Hr as useCodeHighlight,
|
|
99
101
|
Lr as useMermaid,
|
|
100
|
-
|
|
102
|
+
Qr as useVirtualList,
|
|
101
103
|
sr as waitForDiffWorker,
|
|
102
104
|
Wr as waitForMarkdownWorker
|
|
103
105
|
};
|
|
@@ -8,5 +8,6 @@ export { VirtualMessageList, type VirtualMessageListProps } from './message-list
|
|
|
8
8
|
export { MessageItem, MessageBubble, MessageAvatar, MessageMeta, MessageActions, type MessageItemProps, type MessageBubbleProps, type MessageAvatarProps, type MessageMetaProps, type MessageActionsProps, } from './message';
|
|
9
9
|
export { BlockRenderer, TextBlock, MarkdownBlock, CodeBlock, CodeDiffBlock, ImageBlock, SvgBlock, MermaidBlock, ChecklistBlock, ShellBlock, FileBlock, ThinkingBlock, ToolCallBlock, type BlockRendererProps, type TextBlockProps, type MarkdownBlockProps, type CodeBlockProps, type CodeDiffBlockProps, type ImageBlockProps, type SvgBlockProps, type MermaidBlockProps, type ChecklistBlockProps, type ShellBlockProps, type FileBlockProps, type ThinkingBlockProps, type ToolCallBlockProps, } from './blocks';
|
|
10
10
|
export { ChatInput, AttachmentPreview, type ChatInputProps, type AttachmentPreviewProps } from './input';
|
|
11
|
+
export { createInputHistoryController, type InputHistoryEntry, type InputHistoryContext, type InputHistoryState, type InputHistoryOptions, type InputHistoryEditor, type InputHistoryController, } from './input/createInputHistoryController';
|
|
11
12
|
export { WorkingIndicator, StreamingCursor, ConnectionStatus, type WorkingIndicatorProps, type StreamingCursorProps, type ConnectionStatusProps, type ConnectionState, } from './status';
|
|
12
13
|
export { useVirtualList, useCodeHighlight, useMermaid, useAutoScroll, useAttachments, highlightCode, renderMermaid, terminateShikiWorker, terminateMermaidWorker, configureShikiWorker, configureSyncHighlighter, configureMermaidWorker, configureSyncMermaid, createMarkdownWorker, configureMarkdownWorker, hasMarkdownWorker, waitForMarkdownWorker, renderMarkdown, renderMarkdownSync, terminateMarkdownWorker, createDiffWorker, configureDiffWorker, hasDiffWorker, waitForDiffWorker, computeCodeDiff, computeCodeDiffSync, terminateDiffWorker, type UseVirtualListOptions, type UseVirtualListReturn, type VirtualItem, type UseAutoScrollOptions, type UseAttachmentsOptions, } from './hooks';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface InputHistoryEntry {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly text: string;
|
|
4
|
+
}
|
|
5
|
+
export interface InputHistoryContext {
|
|
6
|
+
readonly scope: string;
|
|
7
|
+
readonly value: string;
|
|
8
|
+
/** Changes on every host draft mutation, including writes of the same text. */
|
|
9
|
+
readonly revision: unknown;
|
|
10
|
+
/** Oldest first. IDs are unique within the scope. Empty text is skipped. */
|
|
11
|
+
readonly entries: readonly InputHistoryEntry[];
|
|
12
|
+
readonly enabled: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface InputHistoryState {
|
|
15
|
+
/** One means the newest entry in the current browsing session. */
|
|
16
|
+
readonly position: number;
|
|
17
|
+
readonly total: number;
|
|
18
|
+
}
|
|
19
|
+
export interface InputHistoryOptions {
|
|
20
|
+
readonly read: () => InputHistoryContext;
|
|
21
|
+
/** Commit to the controlled editor synchronously; never submit the text. */
|
|
22
|
+
readonly write: (text: string) => void;
|
|
23
|
+
readonly onChange?: (state: InputHistoryState | null, reason: 'navigate' | 'reset') => void;
|
|
24
|
+
}
|
|
25
|
+
export type InputHistoryEditor = Pick<HTMLTextAreaElement, 'value' | 'selectionStart' | 'selectionEnd' | 'disabled' | 'readOnly' | 'setSelectionRange'>;
|
|
26
|
+
export interface InputHistoryController {
|
|
27
|
+
readonly state: () => InputHistoryState | null;
|
|
28
|
+
/** Call when the controlled draft, scope, eligibility or candidates change. */
|
|
29
|
+
readonly synchronize: () => void;
|
|
30
|
+
/** Call on input, paste, pointer selection, composition start, blur and hide. */
|
|
31
|
+
readonly reset: () => void;
|
|
32
|
+
/** Invoke after higher-priority menus. True means the event was consumed. */
|
|
33
|
+
readonly handleKeyDown: (event: KeyboardEvent, editor: InputHistoryEditor) => boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Terminal-style recall for a host-owned controlled textarea. No persistence. */
|
|
36
|
+
export declare function createInputHistoryController(options: InputHistoryOptions): InputHistoryController;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function d(i) {
|
|
2
|
+
let t = null, c = !1;
|
|
3
|
+
const u = () => t ? { position: t.entries.length - t.index, total: t.entries.length } : null, a = () => {
|
|
4
|
+
t && (t = null, i.onChange?.(null, "reset"));
|
|
5
|
+
}, f = () => {
|
|
6
|
+
if (!t || c) return;
|
|
7
|
+
const e = i.read();
|
|
8
|
+
if (!e.enabled || e.scope !== t.scope || e.value !== t.value || !Object.is(e.revision, t.revision)) {
|
|
9
|
+
a();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const r = new Map(e.entries.map((n) => [n.id, n.text]));
|
|
13
|
+
t.entries.some((n) => r.get(n.id) !== n.text) && a();
|
|
14
|
+
}, g = (e, r) => {
|
|
15
|
+
const n = t, l = n.entries[e]?.text ?? "";
|
|
16
|
+
c = !0;
|
|
17
|
+
try {
|
|
18
|
+
i.write(l);
|
|
19
|
+
} finally {
|
|
20
|
+
c = !1;
|
|
21
|
+
}
|
|
22
|
+
const s = i.read();
|
|
23
|
+
if (!s.enabled || s.scope !== n.scope || s.value !== l) {
|
|
24
|
+
a();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
t = e < n.entries.length ? { ...n, index: e, value: l, revision: s.revision } : null, r.setSelectionRange(l.length, l.length), i.onChange?.(u(), "navigate");
|
|
28
|
+
};
|
|
29
|
+
return { state: u, synchronize: f, reset: a, handleKeyDown: (e, r) => {
|
|
30
|
+
f();
|
|
31
|
+
const n = i.read();
|
|
32
|
+
if (e.defaultPrevented || e.isComposing || e.keyCode === 229 || e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || !n.enabled || !n.scope || r.disabled || r.readOnly || r.selectionStart !== r.selectionEnd || r.value !== n.value)
|
|
33
|
+
return a(), !1;
|
|
34
|
+
if (e.key !== "ArrowUp" && e.key !== "ArrowDown" && e.key !== "Escape")
|
|
35
|
+
return ["Shift", "Control", "Alt", "Meta"].includes(e.key) || a(), !1;
|
|
36
|
+
if (!t) {
|
|
37
|
+
if (e.key !== "ArrowUp" || n.value.length !== 0) return !1;
|
|
38
|
+
const s = n.entries.filter((o) => o.text.length > 0).map((o) => ({ id: o.id, text: o.text }));
|
|
39
|
+
if (!s.length) return !1;
|
|
40
|
+
t = { scope: n.scope, entries: s, index: s.length, value: "", revision: n.revision };
|
|
41
|
+
}
|
|
42
|
+
const l = e.key === "Escape" ? t.entries.length : Math.max(0, Math.min(t.entries.length, t.index + (e.key === "ArrowUp" ? -1 : 1)));
|
|
43
|
+
return e.preventDefault(), e.stopPropagation(), l !== t.index && g(l, r), !0;
|
|
44
|
+
} };
|
|
45
|
+
}
|
|
46
|
+
export {
|
|
47
|
+
d as createInputHistoryController
|
|
48
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type JSX } from 'solid-js';
|
|
2
|
+
/** Host-owned routing and state stay outside this responsive settings frame. */
|
|
3
|
+
export declare function SettingsLayout(props: {
|
|
4
|
+
sidebar: JSX.Element;
|
|
5
|
+
mobileNavigation?: JSX.Element;
|
|
6
|
+
children: JSX.Element;
|
|
7
|
+
class?: string;
|
|
8
|
+
}): JSX.Element;
|
|
9
|
+
export interface SettingsNavigationItem {
|
|
10
|
+
id: string;
|
|
11
|
+
label: string;
|
|
12
|
+
icon?: (props: {
|
|
13
|
+
class?: string;
|
|
14
|
+
}) => JSX.Element;
|
|
15
|
+
attributes?: JSX.ButtonHTMLAttributes<HTMLButtonElement>;
|
|
16
|
+
}
|
|
17
|
+
export interface SettingsNavigationGroup {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
items: readonly SettingsNavigationItem[];
|
|
21
|
+
}
|
|
22
|
+
export interface SettingsNavigationProps {
|
|
23
|
+
label: string;
|
|
24
|
+
groups: readonly SettingsNavigationGroup[];
|
|
25
|
+
value: string;
|
|
26
|
+
onChange: (id: string) => void;
|
|
27
|
+
search?: JSX.Element;
|
|
28
|
+
empty?: JSX.Element;
|
|
29
|
+
}
|
|
30
|
+
export declare function SettingsNavigation(props: SettingsNavigationProps): JSX.Element;
|
|
31
|
+
export interface SettingsSectionProps extends Omit<JSX.HTMLAttributes<HTMLElement>, 'title'> {
|
|
32
|
+
title: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
badge?: JSX.Element;
|
|
35
|
+
actions?: JSX.Element;
|
|
36
|
+
/** A page owns its primary heading; sections are subordinate groups. */
|
|
37
|
+
variant?: 'page' | 'section';
|
|
38
|
+
}
|
|
39
|
+
export declare function SettingsSection(props: SettingsSectionProps): JSX.Element;
|
|
40
|
+
export declare function SettingsList(props: JSX.HTMLAttributes<HTMLDivElement>): JSX.Element;
|
|
41
|
+
export interface SettingRowProps {
|
|
42
|
+
title: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
icon?: (props: {
|
|
45
|
+
class?: string;
|
|
46
|
+
}) => JSX.Element;
|
|
47
|
+
control?: JSX.Element;
|
|
48
|
+
children?: JSX.Element;
|
|
49
|
+
tone?: 'default' | 'info' | 'success' | 'warning' | 'danger';
|
|
50
|
+
class?: string;
|
|
51
|
+
}
|
|
52
|
+
export declare function SettingRow(props: SettingRowProps): JSX.Element;
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { insert as n, createComponent as s, effect as v, className as b, setAttribute as h, spread as f, mergeProps as $, template as c } from "solid-js/web";
|
|
2
|
+
import { Show as d, splitProps as w, For as m } from "solid-js";
|
|
3
|
+
import { cn as u } from "../../utils/cn.js";
|
|
4
|
+
var x = /* @__PURE__ */ c("<div><aside class=floe-settings-layout__sidebar></aside><div class=floe-settings-layout__mobile></div><div class=floe-settings-layout__content>"), k = /* @__PURE__ */ c("<div class=floe-settings-navigation__search>"), N = /* @__PURE__ */ c("<nav class=floe-settings-navigation><div class=floe-settings-navigation__groups>"), L = /* @__PURE__ */ c("<div class=floe-settings-navigation__group><div class=floe-settings-navigation__label>"), P = /* @__PURE__ */ c("<button><span>"), A = /* @__PURE__ */ c("<h1>"), C = /* @__PURE__ */ c("<p>"), F = /* @__PURE__ */ c("<div class=floe-settings-section__actions>"), R = /* @__PURE__ */ c("<section><header class=floe-settings-section__header><div class=floe-settings-section__heading><div class=floe-settings-section__title></div></div></header><div class=floe-settings-section__body>"), j = /* @__PURE__ */ c("<h2>"), q = /* @__PURE__ */ c("<div>"), z = /* @__PURE__ */ c("<div class=floe-setting-row__control>"), B = /* @__PURE__ */ c("<div class=floe-setting-row__body>"), D = /* @__PURE__ */ c("<div><div class=floe-setting-row__main><div class=floe-setting-row__label><div><div class=floe-setting-row__title>");
|
|
5
|
+
function I(t) {
|
|
6
|
+
return (() => {
|
|
7
|
+
var e = x(), o = e.firstChild, i = o.nextSibling, a = i.nextSibling;
|
|
8
|
+
return n(o, () => t.sidebar), n(i, () => t.mobileNavigation), n(a, () => t.children), v(() => b(e, u("floe-settings-layout", t.class))), e;
|
|
9
|
+
})();
|
|
10
|
+
}
|
|
11
|
+
function J(t) {
|
|
12
|
+
return (() => {
|
|
13
|
+
var e = N(), o = e.firstChild;
|
|
14
|
+
return n(e, s(d, {
|
|
15
|
+
get when() {
|
|
16
|
+
return t.search;
|
|
17
|
+
},
|
|
18
|
+
get children() {
|
|
19
|
+
var i = k();
|
|
20
|
+
return n(i, () => t.search), i;
|
|
21
|
+
}
|
|
22
|
+
}), o), n(o, s(d, {
|
|
23
|
+
get when() {
|
|
24
|
+
return t.groups.some((i) => i.items.length);
|
|
25
|
+
},
|
|
26
|
+
get fallback() {
|
|
27
|
+
return t.empty;
|
|
28
|
+
},
|
|
29
|
+
get children() {
|
|
30
|
+
return s(m, {
|
|
31
|
+
get each() {
|
|
32
|
+
return t.groups;
|
|
33
|
+
},
|
|
34
|
+
children: (i) => s(d, {
|
|
35
|
+
get when() {
|
|
36
|
+
return i.items.length;
|
|
37
|
+
},
|
|
38
|
+
get children() {
|
|
39
|
+
var a = L(), _ = a.firstChild;
|
|
40
|
+
return n(_, () => i.label), n(a, s(m, {
|
|
41
|
+
get each() {
|
|
42
|
+
return i.items;
|
|
43
|
+
},
|
|
44
|
+
children: (l) => (() => {
|
|
45
|
+
var g = P(), r = g.firstChild;
|
|
46
|
+
return f(g, $(() => l.attributes, {
|
|
47
|
+
type: "button",
|
|
48
|
+
get class() {
|
|
49
|
+
return u("floe-settings-navigation__item", l.attributes?.class);
|
|
50
|
+
},
|
|
51
|
+
get "aria-current"() {
|
|
52
|
+
return t.value === l.id ? "page" : void 0;
|
|
53
|
+
},
|
|
54
|
+
onClick: () => t.onChange(l.id)
|
|
55
|
+
}), !1, !0), n(g, s(d, {
|
|
56
|
+
get when() {
|
|
57
|
+
return l.icon;
|
|
58
|
+
},
|
|
59
|
+
children: (S) => {
|
|
60
|
+
const y = S();
|
|
61
|
+
return s(y, {
|
|
62
|
+
class: "floe-settings-navigation__icon"
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}), r), n(r, () => l.label), g;
|
|
66
|
+
})()
|
|
67
|
+
}), null), v(() => h(a, "data-settings-group", i.id)), a;
|
|
68
|
+
}
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
})), v(() => h(e, "aria-label", t.label)), e;
|
|
73
|
+
})();
|
|
74
|
+
}
|
|
75
|
+
function K(t) {
|
|
76
|
+
const [e, o] = w(t, ["title", "description", "badge", "actions", "variant", "class", "children"]);
|
|
77
|
+
return (() => {
|
|
78
|
+
var i = R(), a = i.firstChild, _ = a.firstChild, l = _.firstChild, g = a.nextSibling;
|
|
79
|
+
return f(i, $(o, {
|
|
80
|
+
get class() {
|
|
81
|
+
return u("floe-settings-section", e.class);
|
|
82
|
+
},
|
|
83
|
+
get "data-settings-variant"() {
|
|
84
|
+
return e.variant ?? "section";
|
|
85
|
+
}
|
|
86
|
+
}), !1, !0), n(l, s(d, {
|
|
87
|
+
get when() {
|
|
88
|
+
return e.variant === "page";
|
|
89
|
+
},
|
|
90
|
+
get fallback() {
|
|
91
|
+
return (() => {
|
|
92
|
+
var r = j();
|
|
93
|
+
return n(r, () => e.title), r;
|
|
94
|
+
})();
|
|
95
|
+
},
|
|
96
|
+
get children() {
|
|
97
|
+
var r = A();
|
|
98
|
+
return n(r, () => e.title), r;
|
|
99
|
+
}
|
|
100
|
+
}), null), n(l, () => e.badge, null), n(_, s(d, {
|
|
101
|
+
get when() {
|
|
102
|
+
return e.description;
|
|
103
|
+
},
|
|
104
|
+
get children() {
|
|
105
|
+
var r = C();
|
|
106
|
+
return n(r, () => e.description), r;
|
|
107
|
+
}
|
|
108
|
+
}), null), n(a, s(d, {
|
|
109
|
+
get when() {
|
|
110
|
+
return e.actions;
|
|
111
|
+
},
|
|
112
|
+
get children() {
|
|
113
|
+
var r = F();
|
|
114
|
+
return n(r, () => e.actions), r;
|
|
115
|
+
}
|
|
116
|
+
}), null), n(g, () => e.children), i;
|
|
117
|
+
})();
|
|
118
|
+
}
|
|
119
|
+
function M(t) {
|
|
120
|
+
const [e, o] = w(t, ["class", "children"]);
|
|
121
|
+
return (() => {
|
|
122
|
+
var i = q();
|
|
123
|
+
return f(i, $(o, {
|
|
124
|
+
get class() {
|
|
125
|
+
return u("floe-settings-list", e.class);
|
|
126
|
+
},
|
|
127
|
+
"data-floe-surface": "card"
|
|
128
|
+
}), !1, !0), n(i, () => e.children), i;
|
|
129
|
+
})();
|
|
130
|
+
}
|
|
131
|
+
function O(t) {
|
|
132
|
+
return (() => {
|
|
133
|
+
var e = D(), o = e.firstChild, i = o.firstChild, a = i.firstChild, _ = a.firstChild;
|
|
134
|
+
return n(i, s(d, {
|
|
135
|
+
get when() {
|
|
136
|
+
return t.icon;
|
|
137
|
+
},
|
|
138
|
+
children: (l) => {
|
|
139
|
+
const g = l();
|
|
140
|
+
return s(g, {
|
|
141
|
+
class: "floe-setting-row__icon"
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}), a), n(_, () => t.title), n(a, s(d, {
|
|
145
|
+
get when() {
|
|
146
|
+
return t.description;
|
|
147
|
+
},
|
|
148
|
+
get children() {
|
|
149
|
+
var l = C();
|
|
150
|
+
return n(l, () => t.description), l;
|
|
151
|
+
}
|
|
152
|
+
}), null), n(o, s(d, {
|
|
153
|
+
get when() {
|
|
154
|
+
return t.control;
|
|
155
|
+
},
|
|
156
|
+
get children() {
|
|
157
|
+
var l = z();
|
|
158
|
+
return n(l, () => t.control), l;
|
|
159
|
+
}
|
|
160
|
+
}), null), n(e, s(d, {
|
|
161
|
+
get when() {
|
|
162
|
+
return t.children;
|
|
163
|
+
},
|
|
164
|
+
get children() {
|
|
165
|
+
var l = B();
|
|
166
|
+
return n(l, () => t.children), l;
|
|
167
|
+
}
|
|
168
|
+
}), null), v((l) => {
|
|
169
|
+
var g = u("floe-setting-row", t.class), r = t.tone ?? "default";
|
|
170
|
+
return g !== l.e && b(e, l.e = g), r !== l.t && h(e, "data-tone", l.t = r), l;
|
|
171
|
+
}, {
|
|
172
|
+
e: void 0,
|
|
173
|
+
t: void 0
|
|
174
|
+
}), e;
|
|
175
|
+
})();
|
|
176
|
+
}
|
|
177
|
+
export {
|
|
178
|
+
O as SettingRow,
|
|
179
|
+
I as SettingsLayout,
|
|
180
|
+
M as SettingsList,
|
|
181
|
+
J as SettingsNavigation,
|
|
182
|
+
K as SettingsSection
|
|
183
|
+
};
|
|
@@ -42,3 +42,4 @@ export { MobileKeyboard, type MobileKeyboardProps, type MobileKeyboardSuggestion
|
|
|
42
42
|
export { LinearProgress, CircularProgress, SegmentedProgress, StepsProgress, type LinearProgressProps, type CircularProgressProps, type SegmentedProgressProps, type StepsProgressProps, type ProgressSize, type ProgressColor, } from './Progress';
|
|
43
43
|
export { SurfaceAnchoredLayer, type SurfaceAnchoredLayerProps } from './SurfaceAnchoredLayer';
|
|
44
44
|
export { PersistentHorizontalScrollbar, type PersistentHorizontalScrollbarProps } from './PersistentHorizontalScrollbar';
|
|
45
|
+
export { SettingsLayout, SettingsNavigation, SettingsSection, SettingsList, SettingRow, type SettingsNavigationItem, type SettingsNavigationGroup, type SettingsNavigationProps, type SettingsSectionProps, type SettingRowProps, } from './Settings';
|