@commenda/pathfinder 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/components/accordion/AccordionSection.js +9 -3
- package/dist/components/address-input/AddressInput.js +1 -1
- package/dist/components/artifact-card/ArtifactCard.js +1 -1
- package/dist/components/artifact-panel/ArtifactPanel.js +81 -55
- package/dist/components/attachment/Attachment.d.ts +2 -6
- package/dist/components/attachment/Attachment.js +59 -36
- package/dist/components/attachment/AttachmentCard.d.ts +1 -1
- package/dist/components/attachment/AttachmentCard.js +56 -43
- package/dist/components/attachment/attachment-class-names.d.ts +1 -1
- package/dist/components/attachment/attachment-class-names.js +1 -1
- package/dist/components/attachment-group/AttachmentGroup.js +1 -1
- package/dist/components/avatar/avatar-helper.d.ts +1 -1
- package/dist/components/banner/Banner.js +5 -2
- package/dist/components/button/Button.js +1 -1
- package/dist/components/calendar/CalendarAgenda.js +1 -1
- package/dist/components/calendar/CalendarArtwork.js +16 -22
- package/dist/components/calendar/CalendarEventContent.js +2 -2
- package/dist/components/calendar/CalendarPopup.js +102 -82
- package/dist/components/calendar/CalendarToolbar.js +10 -10
- package/dist/components/card/Card.js +47 -41
- package/dist/components/checkbox/Checkbox.js +31 -13
- package/dist/components/choices/choice-motion.d.ts +12 -0
- package/dist/components/choices/choice-motion.js +22 -0
- package/dist/components/code-block/CodeBlock.js +3 -2
- package/dist/components/controls/control-class-names.d.ts +1 -0
- package/dist/components/controls/control-class-names.js +8 -8
- package/dist/components/controls/useHoverHighlight.d.ts +12 -0
- package/dist/components/controls/useHoverHighlight.js +51 -0
- package/dist/components/controls/useSelectionIndicator.d.ts +3 -4
- package/dist/components/controls/useSelectionIndicator.js +43 -28
- package/dist/components/data-grid/DataGrid.js +7 -7
- package/dist/components/data-grid/DataGridHeaders.js +1 -1
- package/dist/components/date-picker/DateCalendar.js +3 -3
- package/dist/components/date-picker/DatePicker.js +10 -10
- package/dist/components/date-picker/field/DateField.js +1 -1
- package/dist/components/description-list/DescriptionList.js +2 -2
- package/dist/components/dialog/ConfirmDialog.js +1 -1
- package/dist/components/dialog/Dialog.js +1 -1
- package/dist/components/distribution-bar/DistributionBar.js +45 -35
- package/dist/components/drag-handle/DragHandle.d.ts +1 -1
- package/dist/components/dropdown/Dropdown.js +27 -26
- package/dist/components/dropdown/MenuContent.js +100 -69
- package/dist/components/dropdown/dropdown-types.d.ts +1 -0
- package/dist/components/dropdown/menu-motion.d.ts +2 -0
- package/dist/components/dropdown/menu-motion.js +4 -0
- package/dist/components/feedback/FeedbackIcon.d.ts +2 -1
- package/dist/components/feedback/FeedbackIcon.js +4 -4
- package/dist/components/feedback/FeedbackSurface.d.ts +3 -3
- package/dist/components/feedback/FeedbackSurface.js +49 -21
- package/dist/components/fields/FieldAction.d.ts +1 -0
- package/dist/components/fields/FieldAction.js +2 -2
- package/dist/components/icon-button/IconButton.js +37 -37
- package/dist/components/icons/index.js +776 -776
- package/dist/components/inline-reference/InlineReference.js +1 -8
- package/dist/components/list/List.js +2 -2
- package/dist/components/list/ListGroup.js +35 -30
- package/dist/components/list/ListTask.js +1 -1
- package/dist/components/list/SettingRow.js +1 -1
- package/dist/components/markdown/Markdown.js +11 -10
- package/dist/components/markdown/MarkdownTable.d.ts +1 -1
- package/dist/components/markdown/MarkdownTable.js +71 -54
- package/dist/components/otp/OTP.js +44 -43
- package/dist/components/output-sections/OutputRow.js +2 -3
- package/dist/components/overlays/OverlayFrame.js +2 -2
- package/dist/components/overlays/overlay-class-names.d.ts +3 -3
- package/dist/components/overlays/overlay-class-names.js +1 -1
- package/dist/components/phone-input/CountryPicker.js +11 -8
- package/dist/components/popover/Popover.js +2 -2
- package/dist/components/question-card/QuestionOptions.js +3 -3
- package/dist/components/radio-group/RadioGroup.js +59 -50
- package/dist/components/search/Search.js +51 -47
- package/dist/components/segmented-control/SegmentedControl.js +7 -6
- package/dist/components/selection/ChoiceField.js +1 -1
- package/dist/components/selection/ChoiceList.js +2 -1
- package/dist/components/selection/SearchableChoice.js +129 -114
- package/dist/components/selection/SelectedTags.js +1 -1
- package/dist/components/selection/SimpleChoice.js +95 -77
- package/dist/components/selection/choice-styles.d.ts +2 -2
- package/dist/components/selection/choice-styles.js +1 -1
- package/dist/components/sheet/Sheet.js +7 -7
- package/dist/components/side-nav/SideNav.d.ts +2 -5
- package/dist/components/side-nav/SideNav.js +98 -56
- package/dist/components/side-nav/SideNavItemView.d.ts +1 -1
- package/dist/components/side-nav/SideNavItemView.js +83 -98
- package/dist/components/side-nav/index.d.ts +2 -0
- package/dist/components/side-nav/index.js +1 -1
- package/dist/components/split-button/SplitButton.js +3 -2
- package/dist/components/stepper/StepMarker.js +32 -28
- package/dist/components/stepper/Stepper.js +30 -22
- package/dist/components/suggested-prompt/SuggestedPrompt.js +1 -1
- package/dist/components/switch/Switch.d.ts +1 -1
- package/dist/components/switch/Switch.js +38 -28
- package/dist/components/table/Table.js +134 -110
- package/dist/components/table/TableColumnHeader.js +20 -2
- package/dist/components/table/TableColumnResize.js +1 -1
- package/dist/components/table/TableColumnsMenu.js +1 -0
- package/dist/components/table/TableFilterChip.js +1 -1
- package/dist/components/table/TableFilterEditor.js +6 -6
- package/dist/components/table/TableFilters.js +1 -0
- package/dist/components/table/TableOptionMenu.d.ts +1 -1
- package/dist/components/table/TableOptionMenu.js +16 -17
- package/dist/components/table/TablePagination.js +1 -0
- package/dist/components/table/TableSelectionBar.js +4 -1
- package/dist/components/table/index.js +6 -6
- package/dist/components/table/table-column-style.js +0 -1
- package/dist/components/table/table-types.d.ts +5 -0
- package/dist/components/table/useTableData.js +2 -2
- package/dist/components/tabs/Tabs.js +61 -53
- package/dist/components/tabs/tab-class-names.d.ts +1 -1
- package/dist/components/tabs/tab-class-names.js +1 -1
- package/dist/components/tabular/TableEditCell.js +3 -1
- package/dist/components/tabular/tabular-class-names.d.ts +1 -0
- package/dist/components/tabular/tabular-class-names.js +1 -0
- package/dist/components/tabular/useCellEdit.js +1 -1
- package/dist/components/tabular/useTabularPinning.js +7 -6
- package/dist/components/tag/Tag.js +1 -1
- package/dist/components/tag-input/TagInput.js +64 -53
- package/dist/components/tag-input/useTagMotion.d.ts +6 -0
- package/dist/components/tag-input/useTagMotion.js +36 -0
- package/dist/components/text-area/TextArea.js +2 -1
- package/dist/components/thread/ThreadReply.js +10 -7
- package/dist/components/tool-call/ToolCall.js +2 -2
- package/dist/components/tree/TreeItemView.js +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +37 -37
- package/dist/styles.css +1 -1
- package/package.json +5 -1
- package/dist/_virtual/_rolldown/runtime.js +0 -11
- package/dist/components/date-picker/date-values.d.ts +0 -23
- package/dist/components/date-picker/date-values.js +0 -52
- package/dist/components/table/TableHeaderPin.d.ts +0 -6
- package/dist/components/table/TableHeaderPin.js +0 -66
|
@@ -87,6 +87,7 @@ function c({ page: c, total: l, visibleCount: u, config: d, onChange: f, disable
|
|
|
87
87
|
}), /* @__PURE__ */ o(e, {
|
|
88
88
|
variant: t === c.page ? "secondary" : "tertiary",
|
|
89
89
|
size: "sm",
|
|
90
|
+
className: "pf:[&.pf-button]:w-[28px] pf:[&.pf-button]:min-w-[28px] pf:[&.pf-button]:px-0",
|
|
90
91
|
"aria-label": `Page ${String(t)}`,
|
|
91
92
|
"aria-current": t === c.page ? "page" : void 0,
|
|
92
93
|
disabled: p,
|
|
@@ -76,7 +76,10 @@ function f({ config: f, selection: p, anchorRef: m }) {
|
|
|
76
76
|
onClick: p.clear,
|
|
77
77
|
children: "Clear selection"
|
|
78
78
|
}),
|
|
79
|
-
(!!f.actions?.length || C.groups.length > 0) && /* @__PURE__ */ u(a, {
|
|
79
|
+
(!!f.actions?.length || C.groups.length > 0) && /* @__PURE__ */ u(a, {
|
|
80
|
+
orientation: "vertical",
|
|
81
|
+
className: "pf:self-center!"
|
|
82
|
+
}),
|
|
80
83
|
f.actions?.slice(0, 3).map((t) => /* @__PURE__ */ u(e, {
|
|
81
84
|
size: "sm",
|
|
82
85
|
variant: "secondary",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { Table as e } from "./Table.js";
|
|
2
|
+
import { TableNumberCell as t } from "../tabular/TableNumberCell.js";
|
|
3
|
+
import { TableCell as n } from "../tabular/TableCell.js";
|
|
4
|
+
import { TableEditCell as r } from "../tabular/TableEditCell.js";
|
|
5
|
+
import { TableRowActions as i } from "../tabular/TableRowActions.js";
|
|
6
6
|
import { TableSummary as a } from "./TableSummary.js";
|
|
7
7
|
import { TablePresetFilters as o } from "./TablePresetFilters.js";
|
|
8
|
-
export {
|
|
8
|
+
export { e as Table, n as TableCell, r as TableEditCell, t as TableNumberCell, o as TablePresetFilters, i as TableRowActions, a as TableSummary };
|
|
@@ -5,7 +5,6 @@ function e(e, t, n = 0, r = 0) {
|
|
|
5
5
|
return {
|
|
6
6
|
position: "sticky",
|
|
7
7
|
zIndex: 2,
|
|
8
|
-
...e.pin === "start" && !t.slice(i + 1).some((e) => e.pin === "start") ? { borderInlineEnd: "2px solid var(--pf-color-blue-300)" } : e.pin === "end" && !t.slice(0, i).some((e) => e.pin === "end") ? { borderInlineStart: "2px solid var(--pf-color-blue-300)" } : {},
|
|
9
8
|
...e.pin === "start" ? { insetInlineStart: s } : { insetInlineEnd: s }
|
|
10
9
|
};
|
|
11
10
|
}
|
|
@@ -105,6 +105,11 @@ export interface TableCommonProps<TRow> {
|
|
|
105
105
|
collapsedGroups?: SelectionProps<readonly string[]>;
|
|
106
106
|
};
|
|
107
107
|
container?: 'card' | 'flat';
|
|
108
|
+
/** Hide record-list chrome when embedding a read-only table. Disabling pagination renders every local row. */
|
|
109
|
+
controlsConfig?: {
|
|
110
|
+
toolbar?: boolean;
|
|
111
|
+
pagination?: boolean;
|
|
112
|
+
};
|
|
108
113
|
sortingConfig?: SelectionProps<TableSort | null>;
|
|
109
114
|
searchConfig?: SelectionProps<string> & {
|
|
110
115
|
getText?: (row: TRow) => string;
|
|
@@ -62,7 +62,7 @@ function l(l) {
|
|
|
62
62
|
getSortedRowModel: r(),
|
|
63
63
|
manualFiltering: l.dataMode === "remote",
|
|
64
64
|
manualSorting: l.dataMode === "remote",
|
|
65
|
-
manualPagination: l.dataMode === "remote" || _?.mode === "cursor",
|
|
65
|
+
manualPagination: l.dataMode === "remote" || _?.mode === "cursor" || l.controlsConfig?.pagination === !1,
|
|
66
66
|
autoResetPageIndex: !1,
|
|
67
67
|
state: {
|
|
68
68
|
sorting: x ? [{
|
|
@@ -80,7 +80,7 @@ function l(l) {
|
|
|
80
80
|
return e.matches(n, r, g[n.id], t.original);
|
|
81
81
|
}) ?? !0),
|
|
82
82
|
getColumnCanGlobalFilter: () => !0
|
|
83
|
-
}), j = l.dataMode === "remote" ? _?.mode === "cursor" ? l.rows.length : _?.totalRows ?? l.rows.length : A.getFilteredRowModel().rows.length, M = Math.max(1, Math.ceil(j / Math.max(1, C.pageSize))), N = l.dataMode === "remote" || _?.mode === "cursor" ? C.page : Math.min(Math.max(1, C.page), M), P = l.dataMode === "remote" || _?.mode === "cursor" ? A.getSortedRowModel().rows : A.getSortedRowModel().rows.slice((N - 1) * C.pageSize, N * C.pageSize);
|
|
83
|
+
}), j = l.dataMode === "remote" ? _?.mode === "cursor" ? l.rows.length : _?.totalRows ?? l.rows.length : A.getFilteredRowModel().rows.length, M = Math.max(1, Math.ceil(j / Math.max(1, C.pageSize))), N = l.dataMode === "remote" || _?.mode === "cursor" || l.controlsConfig?.pagination === !1 ? C.page : Math.min(Math.max(1, C.page), M), P = l.dataMode === "remote" || _?.mode === "cursor" || l.controlsConfig?.pagination === !1 ? A.getSortedRowModel().rows : A.getSortedRowModel().rows.slice((N - 1) * C.pageSize, N * C.pageSize);
|
|
84
84
|
return {
|
|
85
85
|
filterOperators: g,
|
|
86
86
|
changeOperator: (e, t) => {
|
|
@@ -4,57 +4,65 @@ import { ControlHint as t } from "../controls/ControlHint.js";
|
|
|
4
4
|
import { MenuContent as n } from "../dropdown/MenuContent.js";
|
|
5
5
|
import { useTabOverflow as r } from "./useTabOverflow.js";
|
|
6
6
|
import { ChevronDownIcon as i } from "../icons/ChevronDownIcon.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import l from "
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
7
|
+
import { useSelectionIndicator as a } from "../controls/useSelectionIndicator.js";
|
|
8
|
+
import { tabBaseClassNames as o, tabHorizontalClassNames as s, tabVerticalClassNames as c } from "./tab-class-names.js";
|
|
9
|
+
import { TabLabel as l } from "./TabLabel.js";
|
|
10
|
+
import u from "clsx";
|
|
11
|
+
import { forwardRef as d, useId as f, useRef as p, useState as m } from "react";
|
|
12
|
+
import { jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
13
|
+
import { Menu as _ } from "@base-ui/react/menu";
|
|
14
|
+
import { Tabs as v } from "@base-ui/react/tabs";
|
|
14
15
|
//#region src/components/tabs/Tabs.tsx
|
|
15
|
-
var
|
|
16
|
-
let [
|
|
17
|
-
|
|
16
|
+
var y = d(function({ label: d, items: y, value: b, defaultValue: x, onValueChange: S, orientation: C = "horizontal", activationMode: w = "automatic", divider: T = !0, panelConfig: E, overflowConfig: D, className: O, ...k }, A) {
|
|
17
|
+
let [j, M] = m(x), N = b === void 0 ? j === null ? null : y.some((e) => e.value === j && !e.disableConfig?.isDisabled) ? j ?? null : y.find((e) => !e.disableConfig?.isDisabled)?.value ?? null : b, P = D?.label ?? "More", { containerRef: F, measurementRef: I, visible: L } = r(y, N, C === "horizontal", P), R = y.filter((e) => L === null || L.includes(e.value) || e.value === N), z = y.filter((e) => !R.includes(e)), B = p(null), V = f(), H = a("data-active", "[role=\"tab\"]"), U = (e) => `${V}-tab-${encodeURIComponent(e)}`, W = (e) => {
|
|
18
|
+
b === void 0 && M(e), S?.(e);
|
|
18
19
|
};
|
|
19
|
-
return /* @__PURE__ */
|
|
20
|
-
...
|
|
21
|
-
ref:
|
|
22
|
-
value:
|
|
20
|
+
return /* @__PURE__ */ g(v.Root, {
|
|
21
|
+
...k,
|
|
22
|
+
ref: A,
|
|
23
|
+
value: N,
|
|
23
24
|
onValueChange: (e) => {
|
|
24
|
-
(typeof e == "string" || e === null) &&
|
|
25
|
+
(typeof e == "string" || e === null) && W(e);
|
|
25
26
|
},
|
|
26
|
-
orientation:
|
|
27
|
-
className:
|
|
28
|
-
children: [/* @__PURE__ */
|
|
29
|
-
ref:
|
|
30
|
-
className:
|
|
27
|
+
orientation: C,
|
|
28
|
+
className: u("pf:min-w-0 pf:max-w-full pf:w-full", C === "vertical" && "pf:flex pf:items-start pf:gap-xl", O),
|
|
29
|
+
children: [/* @__PURE__ */ g("div", {
|
|
30
|
+
ref: F,
|
|
31
|
+
className: u("pf:relative pf:min-w-0 pf:box-border", C === "horizontal" ? "pf:flex pf:items-end pf:gap-lg pf:w-full" : "pf:w-[180px] pf:max-w-[45%] pf:shrink-0", T && C === "horizontal" && "pf:border-0 pf:border-b-[0.5px] pf:border-solid pf:border-soft-pearl-300"),
|
|
31
32
|
children: [
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
/* @__PURE__ */ g(v.List, {
|
|
34
|
+
ref: H.rootRef,
|
|
35
|
+
"aria-label": d,
|
|
36
|
+
activateOnFocus: w === "automatic",
|
|
37
|
+
className: u("pf:group/tabs pf:relative pf:flex pf:min-w-0", C === "horizontal" ? "pf:gap-lg pf:overflow-x-auto pf:[scrollbar-width:none]" : "pf:flex-col pf:gap-xxs pf:w-full"),
|
|
38
|
+
children: [R.map((e) => /* @__PURE__ */ h(t, {
|
|
37
39
|
label: e.disableConfig?.isDisabled ? e.disableConfig.reason : void 0,
|
|
38
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ h(v.Tab, {
|
|
39
41
|
"aria-label": e.count === void 0 ? e.label : `${e.label} ${String(e.count)}`,
|
|
40
|
-
id:
|
|
42
|
+
id: U(e.value),
|
|
41
43
|
"data-tab-value": e.value,
|
|
42
44
|
title: e.label,
|
|
43
45
|
value: e.value,
|
|
44
46
|
disabled: e.disableConfig?.isDisabled,
|
|
45
|
-
className:
|
|
46
|
-
children: /* @__PURE__ */
|
|
47
|
+
className: u(o, C === "horizontal" ? s : c),
|
|
48
|
+
children: /* @__PURE__ */ h(l, { item: e })
|
|
47
49
|
})
|
|
48
|
-
}, e.value)),
|
|
50
|
+
}, e.value)), /* @__PURE__ */ h("span", {
|
|
51
|
+
ref: H.indicatorRef,
|
|
52
|
+
hidden: !0,
|
|
53
|
+
"aria-hidden": "true",
|
|
54
|
+
className: "pf:absolute pf:top-0 pf:left-0 pf:origin-top-left pf:pointer-events-none",
|
|
55
|
+
children: /* @__PURE__ */ h("span", { className: u("pf:absolute pf:inset-x-0", C === "vertical" ? "pf:inset-y-0 pf:rounded-sm pf:bg-soft-pearl-200" : "pf:bottom-0 pf:h-[2px] pf:rounded-t-[1px] pf:bg-blue-700") })
|
|
56
|
+
})]
|
|
49
57
|
}),
|
|
50
|
-
|
|
51
|
-
className:
|
|
52
|
-
"aria-label":
|
|
53
|
-
children: [
|
|
54
|
-
}), /* @__PURE__ */
|
|
58
|
+
z.length > 0 && /* @__PURE__ */ g(_.Root, { children: [/* @__PURE__ */ g(_.Trigger, {
|
|
59
|
+
className: u(o, "pf:max-w-[min(240px,100%)] pf:h-[28px] pf:px-xxs pf:py-0 pf:text-label-12", "pf:shrink-0"),
|
|
60
|
+
"aria-label": P,
|
|
61
|
+
children: [P, /* @__PURE__ */ h(i, { size: 12 })]
|
|
62
|
+
}), /* @__PURE__ */ h(n, {
|
|
55
63
|
menu: { groups: [{
|
|
56
64
|
id: "overflow",
|
|
57
|
-
items:
|
|
65
|
+
items: z.map((e) => ({
|
|
58
66
|
id: e.value,
|
|
59
67
|
type: "action",
|
|
60
68
|
label: e.label,
|
|
@@ -62,40 +70,40 @@ var v = u(function({ label: u, items: v, value: y, defaultValue: b, onValueChang
|
|
|
62
70
|
disabled: e.disableConfig?.isDisabled,
|
|
63
71
|
disabledReason: e.disableConfig?.reason,
|
|
64
72
|
onClick: () => {
|
|
65
|
-
|
|
73
|
+
B.current = e.value, W(e.value);
|
|
66
74
|
}
|
|
67
75
|
}))
|
|
68
76
|
}] },
|
|
69
77
|
finalFocus: () => {
|
|
70
|
-
let e =
|
|
71
|
-
return
|
|
78
|
+
let e = B.current;
|
|
79
|
+
return B.current = null, e ? F.current?.ownerDocument.getElementById(U(e)) ?? !0 : !0;
|
|
72
80
|
}
|
|
73
81
|
})] }),
|
|
74
|
-
|
|
75
|
-
ref:
|
|
82
|
+
C === "horizontal" && /* @__PURE__ */ g("div", {
|
|
83
|
+
ref: I,
|
|
76
84
|
"aria-hidden": "true",
|
|
77
85
|
className: "pf:absolute pf:inset-x-0 pf:top-0 pf:invisible pf:pointer-events-none pf:flex pf:gap-lg pf:h-0 pf:overflow-hidden",
|
|
78
|
-
children: [
|
|
86
|
+
children: [y.map((e) => /* @__PURE__ */ h("span", {
|
|
79
87
|
"data-measure-tab": !0,
|
|
80
|
-
className:
|
|
81
|
-
children: /* @__PURE__ */
|
|
82
|
-
}, e.value)), /* @__PURE__ */
|
|
88
|
+
className: u(o, "pf:max-w-[min(240px,100%)] pf:h-[28px] pf:px-xxs pf:py-0 pf:text-label-12"),
|
|
89
|
+
children: /* @__PURE__ */ h(l, { item: e })
|
|
90
|
+
}, e.value)), /* @__PURE__ */ g("span", {
|
|
83
91
|
"data-measure-more": !0,
|
|
84
|
-
className:
|
|
85
|
-
children: [
|
|
92
|
+
className: u(o, "pf:max-w-[min(240px,100%)] pf:h-[28px] pf:px-xxs pf:py-0 pf:text-label-12"),
|
|
93
|
+
children: [P, /* @__PURE__ */ h(i, { size: 12 })]
|
|
86
94
|
})]
|
|
87
95
|
})
|
|
88
96
|
]
|
|
89
|
-
}), /* @__PURE__ */
|
|
90
|
-
className:
|
|
91
|
-
children:
|
|
97
|
+
}), /* @__PURE__ */ h("div", {
|
|
98
|
+
className: u("pf:min-w-0 pf:flex-1", C === "horizontal" && "pf:pt-xl"),
|
|
99
|
+
children: y.map((t) => /* @__PURE__ */ h(v.Panel, {
|
|
92
100
|
value: t.value,
|
|
93
|
-
keepMounted:
|
|
94
|
-
className:
|
|
101
|
+
keepMounted: E?.keepMounted ?? !1,
|
|
102
|
+
className: u("pf:min-w-0 pf:font-body pf:text-copy-13 pf:text-soft-pearl-1000 pf:wrap-anywhere", e, E?.className),
|
|
95
103
|
children: t.content
|
|
96
104
|
}, t.value))
|
|
97
105
|
})]
|
|
98
106
|
});
|
|
99
107
|
});
|
|
100
108
|
//#endregion
|
|
101
|
-
export {
|
|
109
|
+
export { y as Tabs };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export declare const tabBaseClassNames: string;
|
|
2
2
|
export declare const tabHorizontalClassNames = "pf:max-w-[min(240px,100%)] pf:h-[28px] pf:px-xxs pf:py-0 pf:text-label-12";
|
|
3
|
-
export declare const tabVerticalClassNames = "pf:w-full pf:min-h-[28px] pf:px-md pf:py-sm pf:text-label-13 pf:rounded-sm pf:gap-md pf:hover:bg-soft-pearl-100 pf:data-active:bg-soft-pearl-200";
|
|
3
|
+
export declare const tabVerticalClassNames = "pf:w-full pf:justify-between pf:min-h-[28px] pf:px-md pf:py-sm pf:text-label-13 pf:rounded-sm pf:gap-md pf:hover:not-data-active:bg-soft-pearl-100 pf:group-not-data-indicator/tabs:data-active:bg-soft-pearl-200";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { controlFocusClassNames as e } from "../controls/control-class-names.js";
|
|
2
2
|
import t from "clsx";
|
|
3
3
|
//#region src/components/tabs/tab-class-names.ts
|
|
4
|
-
var n = t("pf:box-border pf:flex pf:items-center pf:gap-xs pf:shrink-0 pf:font-body pf:font-medium pf:text-soft-pearl-800 pf:border-0 pf:bg-transparent pf:cursor-pointer pf:whitespace-nowrap pf:hover:text-soft-pearl-1000 pf:data-active:text-soft-pearl-1000 pf:data-disabled:text-soft-pearl-600 pf:data-disabled:cursor-not-allowed", e), r = "pf:max-w-[min(240px,100%)] pf:h-[28px] pf:px-xxs pf:py-0 pf:text-label-12", i = "pf:w-full pf:min-h-[28px] pf:px-md pf:py-sm pf:text-label-13 pf:rounded-sm pf:gap-md pf:hover:bg-soft-pearl-100 pf:data-active:bg-soft-pearl-200";
|
|
4
|
+
var n = t("pf:relative pf:z-[1] pf:box-border pf:flex pf:items-center pf:gap-xs pf:shrink-0 pf:font-body pf:font-medium pf:text-soft-pearl-800 pf:border-0 pf:bg-transparent pf:cursor-pointer pf:whitespace-nowrap pf:hover:text-soft-pearl-1000 pf:data-active:text-soft-pearl-1000 pf:data-disabled:text-soft-pearl-600 pf:data-disabled:cursor-not-allowed", e), r = "pf:max-w-[min(240px,100%)] pf:h-[28px] pf:px-xxs pf:py-0 pf:text-label-12", i = "pf:w-full pf:justify-between pf:min-h-[28px] pf:px-md pf:py-sm pf:text-label-13 pf:rounded-sm pf:gap-md pf:hover:not-data-active:bg-soft-pearl-100 pf:group-not-data-indicator/tabs:data-active:bg-soft-pearl-200";
|
|
5
5
|
//#endregion
|
|
6
6
|
export { n as tabBaseClassNames, r as tabHorizontalClassNames, i as tabVerticalClassNames };
|
|
@@ -10,7 +10,9 @@ import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
|
10
10
|
//#region src/components/tabular/TableEditCell.tsx
|
|
11
11
|
function d(d) {
|
|
12
12
|
let f = o((e) => {
|
|
13
|
-
e
|
|
13
|
+
e && (e.focus(), e.type === "number" && e.addEventListener("wheel", (e) => {
|
|
14
|
+
e.preventDefault();
|
|
15
|
+
}, { passive: !1 }));
|
|
14
16
|
}, []), p = c(null), m = () => {
|
|
15
17
|
requestAnimationFrame(() => {
|
|
16
18
|
let e = p.current;
|
|
@@ -3,6 +3,7 @@ var e = {
|
|
|
3
3
|
shell: "pf:font-body pf:text-label-13 pf:text-soft-pearl-1000 pf:min-w-0 pf:max-w-full pf:bg-background",
|
|
4
4
|
card: "pf:border-[0.5px] pf:border-solid pf:border-soft-pearl-300 pf:rounded-[12px] pf:overflow-hidden",
|
|
5
5
|
scroll: "pf:relative pf:max-w-full pf:overflow-auto pf:overscroll-contain",
|
|
6
|
+
pinnedEdge: "pf:after:pointer-events-none pf:after:absolute pf:after:inset-y-0 pf:after:-end-px pf:after:w-[2px] pf:after:bg-inherit pf:after:border-0 pf:after:border-e-[0.5px] pf:after:border-solid pf:after:border-soft-pearl-300 pf:after:content-['']",
|
|
6
7
|
table: "pf:border-separate pf:border-spacing-0 pf:w-full pf:table-fixed",
|
|
7
8
|
header: "pf:box-border pf:h-[36px] pf:px-lg pf:py-sm pf:font-medium pf:text-label-12 pf:text-soft-pearl-800 pf:border-0 pf:border-b-[0.5px] pf:border-solid pf:border-soft-pearl-300",
|
|
8
9
|
cell: "pf:box-border pf:px-lg pf:py-[7.5px] pf:border-0 pf:border-b-[0.5px] pf:border-solid pf:border-soft-pearl-300 pf:align-middle pf:text-label-13 pf:font-normal",
|
|
@@ -5,12 +5,13 @@ function r(r) {
|
|
|
5
5
|
return e(() => {
|
|
6
6
|
let e = i.current;
|
|
7
7
|
if (!e || typeof ResizeObserver > "u") return;
|
|
8
|
-
let t =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
let t = e.querySelector("table"), n = () => {
|
|
9
|
+
o(e.clientWidth), e.style.setProperty("--pf-table-height", `${String(Math.max(0, (t?.offsetHeight ?? 0) - (t?.tFoot?.offsetHeight ?? 0)))}px`);
|
|
10
|
+
let n = Math.abs(e.scrollLeft);
|
|
11
|
+
e.parentElement?.toggleAttribute("data-scroll-start", n > 1), e.parentElement?.toggleAttribute("data-scroll-end", n + e.clientWidth < e.scrollWidth - 1);
|
|
12
|
+
}, r = new ResizeObserver(n);
|
|
13
|
+
return r.observe(e), t && r.observe(t), e.addEventListener("scroll", n, { passive: !0 }), n(), () => {
|
|
14
|
+
r.disconnect(), e.removeEventListener("scroll", n);
|
|
14
15
|
};
|
|
15
16
|
}, []), {
|
|
16
17
|
ref: i,
|
|
@@ -32,7 +32,7 @@ var c = a(function({ label: a, tone: c = "neutral", leadingIcon: l, removeConfig
|
|
|
32
32
|
onClick: (e) => {
|
|
33
33
|
e.stopPropagation(), u.onRemove();
|
|
34
34
|
},
|
|
35
|
-
className: "pf:flex pf:shrink-0 pf:items-center pf:justify-center pf:size-[12px] pf:border-0 pf:p-0 pf:rounded-xs pf:bg-transparent pf:text-soft-pearl-700 pf:hover:text-soft-pearl-1000 pf:focus-visible:outline-2 pf:focus-visible:outline-blue-700 pf:disabled:opacity-50 pf:disabled:cursor-not-allowed",
|
|
35
|
+
className: "pf:flex pf:shrink-0 pf:items-center pf:justify-center pf:size-[12px] pf:cursor-pointer pf:border-0 pf:p-0 pf:rounded-xs pf:bg-transparent pf:text-soft-pearl-700 pf:hover:text-soft-pearl-1000 pf:focus-visible:outline-2 pf:focus-visible:outline-blue-700 pf:disabled:opacity-50 pf:disabled:cursor-not-allowed",
|
|
36
36
|
children: /* @__PURE__ */ o(t, { size: 12 })
|
|
37
37
|
})
|
|
38
38
|
]
|
|
@@ -3,81 +3,92 @@ import { XCloseIcon as e } from "../icons/XCloseIcon.js";
|
|
|
3
3
|
import { FieldFrame as t, fieldInputClass as n, fieldShellClass as r } from "../fields/FieldFrame.js";
|
|
4
4
|
import { neutralTagClass as i, tagShellClass as a } from "../tag/tag-styles.js";
|
|
5
5
|
import { useTagInput as o } from "./useTagInput.js";
|
|
6
|
-
import s from "
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
6
|
+
import { useTagMotion as s } from "./useTagMotion.js";
|
|
7
|
+
import c from "clsx";
|
|
8
|
+
import { forwardRef as l } from "react";
|
|
9
|
+
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
10
|
+
import { useDirection as f } from "@base-ui/react/direction-provider";
|
|
11
|
+
import * as p from "@diceui/tags-input";
|
|
11
12
|
//#region src/components/tag-input/TagInput.tsx
|
|
12
|
-
var
|
|
13
|
-
let
|
|
14
|
-
return /* @__PURE__ */
|
|
15
|
-
field:
|
|
16
|
-
id:
|
|
17
|
-
supportId:
|
|
18
|
-
error:
|
|
19
|
-
className:
|
|
20
|
-
children: [/* @__PURE__ */
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
13
|
+
var m = l(function(l, m) {
|
|
14
|
+
let h = o(l), g = s(h.value), _ = f(), v = `${h.id}-support`, y = h.error || l.description || l.disableConfig?.isDisabled && l.disableConfig.reason, b = l.disableConfig?.isDisabled;
|
|
15
|
+
return /* @__PURE__ */ d(t, {
|
|
16
|
+
field: l,
|
|
17
|
+
id: h.id,
|
|
18
|
+
supportId: v,
|
|
19
|
+
error: h.error,
|
|
20
|
+
className: l.className,
|
|
21
|
+
children: [/* @__PURE__ */ d(p.Root, {
|
|
22
|
+
...g,
|
|
23
|
+
dir: _,
|
|
24
|
+
value: [...h.value],
|
|
25
|
+
onValueChange: h.change,
|
|
26
|
+
disabled: b,
|
|
27
|
+
readOnly: l.readOnly,
|
|
28
|
+
editable: l.entryConfig?.editable,
|
|
29
|
+
addOnPaste: l.entryConfig?.addOnPaste,
|
|
30
|
+
addOnTab: l.entryConfig?.addOnTab,
|
|
31
|
+
delimiter: l.entryConfig?.delimiter ?? ",",
|
|
32
|
+
max: l.entryConfig?.maxTags,
|
|
33
|
+
onValidate: (e) => !l.entryConfig?.validate?.(e),
|
|
32
34
|
onInvalid: (e) => {
|
|
33
|
-
|
|
35
|
+
h.input.current && !h.input.current.value && (h.input.current.value = e), h.setInvalid(h.value.includes(e) ? "This tag has already been added." : l.entryConfig?.validate?.(e) ?? "This tag could not be added. Check the tag limit.");
|
|
34
36
|
},
|
|
35
|
-
"data-disabled":
|
|
36
|
-
"data-invalid": !!
|
|
37
|
-
className:
|
|
38
|
-
children: [
|
|
37
|
+
"data-disabled": b || void 0,
|
|
38
|
+
"data-invalid": !!h.error || void 0,
|
|
39
|
+
className: c(r, "pf:flex-wrap pf:gap-xs pf:min-h-[32px] pf:px-md pf:py-xs"),
|
|
40
|
+
children: [h.value.map((t) => /* @__PURE__ */ d(p.Item, {
|
|
39
41
|
value: t,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
"data-tag-value": t,
|
|
43
|
+
className: c(a, i, "pf:h-auto pf:min-h-[20px] pf:max-w-full pf:outline-none pf:data-highlighted:bg-blue-100 pf:data-highlighted:border-blue-700 pf:data-editing:bg-background pf:[&_input]:min-w-0 pf:[&_input]:max-w-full"),
|
|
44
|
+
children: [/* @__PURE__ */ u(p.ItemText, {
|
|
42
45
|
className: "pf:min-w-0 pf:wrap-anywhere",
|
|
43
46
|
children: t
|
|
44
|
-
}), !
|
|
47
|
+
}), !l.readOnly && /* @__PURE__ */ u(p.ItemDelete, {
|
|
45
48
|
"aria-label": `Remove ${t}`,
|
|
46
49
|
"aria-labelledby": void 0,
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
onClick: (e) => {
|
|
51
|
+
e.stopPropagation();
|
|
52
|
+
},
|
|
53
|
+
className: "pf:cursor-pointer pf:disabled:cursor-not-allowed pf:flex pf:size-[16px] pf:shrink-0 pf:items-center pf:justify-center pf:border-0 pf:p-0 pf:bg-transparent pf:text-soft-pearl-800 pf:rounded-xs pf:focus-visible:outline-2 pf:focus-visible:outline-blue-700",
|
|
54
|
+
children: /* @__PURE__ */ u(e, { size: 12 })
|
|
49
55
|
})]
|
|
50
|
-
}, t)), /* @__PURE__ */
|
|
51
|
-
id:
|
|
52
|
-
form:
|
|
56
|
+
}, t)), /* @__PURE__ */ u(p.Input, {
|
|
57
|
+
id: h.id,
|
|
58
|
+
form: l.form,
|
|
53
59
|
ref: (e) => {
|
|
54
|
-
|
|
60
|
+
h.input.current = e, typeof m == "function" ? m(e) : m && (m.current = e);
|
|
55
61
|
},
|
|
56
|
-
"aria-label":
|
|
62
|
+
"aria-label": l["aria-label"],
|
|
57
63
|
"aria-labelledby": void 0,
|
|
58
|
-
"aria-describedby":
|
|
59
|
-
"aria-invalid": !!
|
|
60
|
-
"aria-required":
|
|
61
|
-
placeholder:
|
|
62
|
-
className:
|
|
64
|
+
"aria-describedby": y ? v : void 0,
|
|
65
|
+
"aria-invalid": !!h.error || void 0,
|
|
66
|
+
"aria-required": l.required,
|
|
67
|
+
placeholder: l.placeholder ?? "Add a tag…",
|
|
68
|
+
className: c(n, "pf:flex-1 pf:basis-[100px] pf:h-[24px] pf:border-0 pf:p-0 pf:text-label-13"),
|
|
63
69
|
onKeyDown: (e) => {
|
|
64
|
-
e.nativeEvent.isComposing && e.key === "Enter"
|
|
70
|
+
if (e.nativeEvent.isComposing && e.key === "Enter") e.preventDefault();
|
|
71
|
+
else if (e.key === "Enter" && !l.entryConfig?.editable && !l.readOnly && !b) {
|
|
72
|
+
let t = (e.currentTarget.parentElement?.querySelector("[data-highlighted]"))?.querySelector("button");
|
|
73
|
+
t && (e.preventDefault(), t.click());
|
|
74
|
+
}
|
|
65
75
|
},
|
|
66
76
|
onChange: (e) => {
|
|
67
|
-
e.nativeEvent instanceof InputEvent && e.nativeEvent.isComposing && e.preventDefault(),
|
|
77
|
+
e.nativeEvent instanceof InputEvent && e.nativeEvent.isComposing && e.preventDefault(), h.setInvalid(void 0);
|
|
68
78
|
},
|
|
69
79
|
onBlur: (e) => {
|
|
70
|
-
|
|
80
|
+
h.setTouched(!0), l.onBlur?.(e);
|
|
71
81
|
}
|
|
72
82
|
})]
|
|
73
|
-
}),
|
|
83
|
+
}), l.name && h.value.map((e) => /* @__PURE__ */ u("input", {
|
|
74
84
|
type: "hidden",
|
|
75
|
-
name:
|
|
76
|
-
form:
|
|
85
|
+
name: l.name,
|
|
86
|
+
form: l.form,
|
|
77
87
|
value: e,
|
|
78
|
-
|
|
88
|
+
"data-tag-value": e,
|
|
89
|
+
disabled: b
|
|
79
90
|
}, e))]
|
|
80
91
|
});
|
|
81
92
|
});
|
|
82
93
|
//#endregion
|
|
83
|
-
export {
|
|
94
|
+
export { m as TagInput };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Pointer removals let remaining tags settle; keyboard editing stays immediate. */
|
|
2
|
+
export declare const useTagMotion: (values: readonly string[]) => {
|
|
3
|
+
ref: import("react").RefObject<HTMLDivElement>;
|
|
4
|
+
onPointerDownCapture: () => void;
|
|
5
|
+
onKeyDownCapture: () => void;
|
|
6
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { useLayoutEffect as e, useRef as t } from "react";
|
|
2
|
+
//#region src/components/tag-input/useTagMotion.ts
|
|
3
|
+
var n = (n) => {
|
|
4
|
+
let r = t(null), i = t(/* @__PURE__ */ new Map()), a = t([]), o = () => {
|
|
5
|
+
a.current.forEach((e) => {
|
|
6
|
+
e.cancel();
|
|
7
|
+
}), a.current = [], i.current.clear();
|
|
8
|
+
};
|
|
9
|
+
return e(() => {
|
|
10
|
+
r.current?.querySelectorAll("[data-tag-value]").forEach((e) => {
|
|
11
|
+
let t = i.current.get(e.dataset.tagValue ?? "");
|
|
12
|
+
if (!t || typeof e.animate != "function") return;
|
|
13
|
+
let n = e.getBoundingClientRect();
|
|
14
|
+
(t.x !== n.x || t.y !== n.y) && a.current.push(e.animate([{ transform: `translate(${String(t.x - n.x)}px, ${String(t.y - n.y)}px)` }, { transform: "none" }], {
|
|
15
|
+
duration: 160,
|
|
16
|
+
easing: "cubic-bezier(0.23, 1, 0.32, 1)"
|
|
17
|
+
}));
|
|
18
|
+
}), i.current.clear();
|
|
19
|
+
}, [n]), e(() => () => {
|
|
20
|
+
a.current.forEach((e) => {
|
|
21
|
+
e.cancel();
|
|
22
|
+
});
|
|
23
|
+
}, []), {
|
|
24
|
+
ref: r,
|
|
25
|
+
onPointerDownCapture: () => {
|
|
26
|
+
if (typeof matchMedia != "function" || matchMedia("(prefers-reduced-motion: reduce)").matches) return;
|
|
27
|
+
let e = /* @__PURE__ */ new Map();
|
|
28
|
+
r.current?.querySelectorAll("[data-tag-value]").forEach((t) => {
|
|
29
|
+
e.set(t.dataset.tagValue ?? "", t.getBoundingClientRect());
|
|
30
|
+
}), o(), i.current = e;
|
|
31
|
+
},
|
|
32
|
+
onKeyDownCapture: o
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
//#endregion
|
|
36
|
+
export { n as useTagMotion };
|
|
@@ -12,7 +12,8 @@ var u = new Intl.Segmenter(void 0, { granularity: "grapheme" }), d = o(function(
|
|
|
12
12
|
let e = f.controlRef.current;
|
|
13
13
|
if (!e || j !== "auto") return;
|
|
14
14
|
let t = () => {
|
|
15
|
-
|
|
15
|
+
let t = e.offsetHeight - e.clientHeight;
|
|
16
|
+
e.style.height = "0px", e.style.height = `${String(Math.max(M, Math.min(e.scrollHeight + t, N)))}px`;
|
|
16
17
|
};
|
|
17
18
|
t();
|
|
18
19
|
let n = e.getBoundingClientRect().width, r = typeof ResizeObserver > "u" ? void 0 : new ResizeObserver(() => {
|
|
@@ -27,12 +27,15 @@ function u({ label: u, identity: d, value: f, onValueChange: p, onSubmit: m, kin
|
|
|
27
27
|
children: S
|
|
28
28
|
}),
|
|
29
29
|
/* @__PURE__ */ l("div", {
|
|
30
|
-
className: "pf:flex pf:flex-wrap pf:items-
|
|
30
|
+
className: "pf:flex pf:flex-wrap pf:items-start pf:gap-md pf:ps-xl pf:pe-md pf:py-md",
|
|
31
31
|
children: [
|
|
32
|
-
/* @__PURE__ */ c(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
/* @__PURE__ */ c("span", {
|
|
33
|
+
className: "pf:pt-xs pf:shrink-0",
|
|
34
|
+
children: /* @__PURE__ */ c(r, {
|
|
35
|
+
identity: d,
|
|
36
|
+
size: 20,
|
|
37
|
+
decorative: !0
|
|
38
|
+
})
|
|
36
39
|
}),
|
|
37
40
|
/* @__PURE__ */ c(o, {
|
|
38
41
|
label: u,
|
|
@@ -40,7 +43,7 @@ function u({ label: u, identity: d, value: f, onValueChange: p, onSubmit: m, kin
|
|
|
40
43
|
variant: "plain",
|
|
41
44
|
resizeConfig: {
|
|
42
45
|
mode: "auto",
|
|
43
|
-
minHeight:
|
|
46
|
+
minHeight: 28,
|
|
44
47
|
maxHeight: 160
|
|
45
48
|
},
|
|
46
49
|
placeholder: g,
|
|
@@ -51,7 +54,7 @@ function u({ label: u, identity: d, value: f, onValueChange: p, onSubmit: m, kin
|
|
|
51
54
|
onKeyDown: (e) => {
|
|
52
55
|
e.key === "Enter" && !e.shiftKey && !e.nativeEvent.isComposing && (e.preventDefault(), T || m(f));
|
|
53
56
|
},
|
|
54
|
-
className: "pf:flex-1 pf:min-w-[80px]"
|
|
57
|
+
className: "pf:flex-1 pf:min-w-[80px] pf:[&_textarea]:py-xs"
|
|
55
58
|
}),
|
|
56
59
|
/* @__PURE__ */ l("div", {
|
|
57
60
|
className: "pf:flex pf:items-center pf:gap-xs",
|
|
@@ -10,10 +10,10 @@ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
|
10
10
|
//#region src/components/tool-call/ToolCall.tsx
|
|
11
11
|
var l = ({ name: l, status: u, label: d, meta: f, description: p, error: m, input: h, output: g, disclosureConfig: _, className: v }) => {
|
|
12
12
|
let y = t(!1, _), b = d ?? i.getLabel(l, u), x = /* @__PURE__ */ c("span", {
|
|
13
|
-
className: "pf:flex pf:min-w-0 pf:items-
|
|
13
|
+
className: "pf:flex pf:min-w-0 pf:items-start pf:gap-sm",
|
|
14
14
|
children: [/* @__PURE__ */ s("span", {
|
|
15
15
|
"aria-hidden": "true",
|
|
16
|
-
className: "pf:shrink-0",
|
|
16
|
+
className: "pf:flex pf:h-[16px] pf:items-center pf:shrink-0",
|
|
17
17
|
children: /* @__PURE__ */ s(r, {
|
|
18
18
|
size: 12,
|
|
19
19
|
tone: "inherit"
|