@raybase/datasheet-grid 0.0.2 → 0.1.3
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/LICENSE +21 -0
- package/LICENSE-react-datasheet-grid +21 -0
- package/README.md +32 -1
- package/dist/adapter.d.ts +34 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +2 -0
- package/dist/adapter.js.map +1 -0
- package/dist/cells.d.ts +111 -0
- package/dist/cells.d.ts.map +1 -0
- package/dist/cells.js +800 -0
- package/dist/cells.js.map +1 -0
- package/dist/colors.d.ts +10 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +42 -0
- package/dist/colors.js.map +1 -0
- package/dist/engine.d.ts +3 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +2 -0
- package/dist/engine.js.map +1 -0
- package/dist/filter-bar.d.ts +33 -0
- package/dist/filter-bar.d.ts.map +1 -0
- package/dist/filter-bar.js +304 -0
- package/dist/filter-bar.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/popover.d.ts +22 -0
- package/dist/popover.d.ts.map +1 -0
- package/dist/popover.js +67 -0
- package/dist/popover.js.map +1 -0
- package/dist/record-panel.d.ts +20 -0
- package/dist/record-panel.d.ts.map +1 -0
- package/dist/record-panel.js +193 -0
- package/dist/record-panel.js.map +1 -0
- package/dist/styles.css +2 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +28 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +108 -0
- package/dist/ui.js.map +1 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +79 -0
- package/dist/utils.js.map +1 -0
- package/dist/view.d.ts +5 -0
- package/dist/view.d.ts.map +1 -0
- package/dist/view.js +85 -0
- package/dist/view.js.map +1 -0
- package/package.json +55 -10
package/dist/popover.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React, { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
import { createPortal } from "react-dom";
|
|
3
|
+
import { cx } from "./ui.js";
|
|
4
|
+
/**
|
|
5
|
+
* Anchored floating panel rendered into document.body. Closes on outside
|
|
6
|
+
* pointer-down, Escape, window resize, and scrolling outside the popover.
|
|
7
|
+
*/
|
|
8
|
+
export function Popover({ anchor, onClose, children, minWidth = 220, maxWidth = 420, className, matchAnchorWidth }) {
|
|
9
|
+
const panelRef = useRef(null);
|
|
10
|
+
const [style, setStyle] = useState({ visibility: "hidden" });
|
|
11
|
+
useLayoutEffect(() => {
|
|
12
|
+
if (!anchor)
|
|
13
|
+
return;
|
|
14
|
+
const place = () => {
|
|
15
|
+
const box = anchor.getBoundingClientRect();
|
|
16
|
+
const panel = panelRef.current;
|
|
17
|
+
const width = Math.min(Math.max(matchAnchorWidth ? box.width : 0, minWidth), maxWidth);
|
|
18
|
+
const panelHeight = panel?.offsetHeight ?? 0;
|
|
19
|
+
let left = box.left;
|
|
20
|
+
let top = box.bottom + 4;
|
|
21
|
+
if (left + width > window.innerWidth - 8)
|
|
22
|
+
left = Math.max(8, window.innerWidth - width - 8);
|
|
23
|
+
if (panelHeight && top + panelHeight > window.innerHeight - 8 && box.top - panelHeight - 4 > 8) {
|
|
24
|
+
top = box.top - panelHeight - 4;
|
|
25
|
+
}
|
|
26
|
+
setStyle({ left, top, minWidth: width, maxWidth });
|
|
27
|
+
};
|
|
28
|
+
place();
|
|
29
|
+
// Re-place once content has rendered so flipping above accounts for real height.
|
|
30
|
+
const raf = requestAnimationFrame(place);
|
|
31
|
+
return () => cancelAnimationFrame(raf);
|
|
32
|
+
}, [anchor, minWidth, maxWidth, matchAnchorWidth]);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
// Capture phase: the grid stops mousedown propagation on cells, so a
|
|
35
|
+
// bubble-phase listener would never see clicks landing inside the grid.
|
|
36
|
+
const onPointerDown = (event) => {
|
|
37
|
+
const target = event.target;
|
|
38
|
+
if (panelRef.current?.contains(target) || anchor?.contains(target))
|
|
39
|
+
return;
|
|
40
|
+
onClose("outside");
|
|
41
|
+
};
|
|
42
|
+
const onKeyDown = (event) => {
|
|
43
|
+
if (event.key === "Escape") {
|
|
44
|
+
event.stopPropagation();
|
|
45
|
+
onClose("escape");
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const onScroll = (event) => {
|
|
49
|
+
if (panelRef.current?.contains(event.target))
|
|
50
|
+
return;
|
|
51
|
+
onClose("outside");
|
|
52
|
+
};
|
|
53
|
+
const onResize = () => onClose("outside");
|
|
54
|
+
document.addEventListener("mousedown", onPointerDown, true);
|
|
55
|
+
document.addEventListener("keydown", onKeyDown, true);
|
|
56
|
+
document.addEventListener("scroll", onScroll, true);
|
|
57
|
+
window.addEventListener("resize", onResize);
|
|
58
|
+
return () => {
|
|
59
|
+
document.removeEventListener("mousedown", onPointerDown, true);
|
|
60
|
+
document.removeEventListener("keydown", onKeyDown, true);
|
|
61
|
+
document.removeEventListener("scroll", onScroll, true);
|
|
62
|
+
window.removeEventListener("resize", onResize);
|
|
63
|
+
};
|
|
64
|
+
}, [anchor, onClose]);
|
|
65
|
+
return createPortal(React.createElement("div", { ref: panelRef, className: cx("rb-pop-in fixed z-50 rounded-lg border border-zinc-200 bg-white shadow-[0_12px_32px_rgb(9_9_11/0.16)]", className), style: style }, children), document.body);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popover.js","sourceRoot":"","sources":["../src/popover.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ReferenceOption, Row, TableMeta } from "./types.js";
|
|
3
|
+
export type RecordPanelProps = {
|
|
4
|
+
table: TableMeta;
|
|
5
|
+
row: Row;
|
|
6
|
+
rowIndex: number;
|
|
7
|
+
total: number;
|
|
8
|
+
references: Record<string, ReferenceOption[]>;
|
|
9
|
+
jsonModes: Record<string, "tags" | "json">;
|
|
10
|
+
tagSuggestions: Record<string, string[]>;
|
|
11
|
+
readOnly: boolean;
|
|
12
|
+
getRowId?: (row: Row) => string;
|
|
13
|
+
getRecordTitle?: (row: Row, table: TableMeta) => string;
|
|
14
|
+
onChange: (next: Row) => void;
|
|
15
|
+
onNavigate: (delta: number) => void;
|
|
16
|
+
onDelete: () => void;
|
|
17
|
+
onClose: () => void;
|
|
18
|
+
};
|
|
19
|
+
export declare function RecordPanel({ table, row, rowIndex, total, references, jsonModes, tagSuggestions, readOnly, getRowId, getRecordTitle, onChange, onNavigate, onDelete, onClose }: RecordPanelProps): React.JSX.Element;
|
|
20
|
+
//# sourceMappingURL=record-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-panel.d.ts","sourceRoot":"","sources":["../src/record-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAE3D,OAAO,KAAK,EAAc,eAAe,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmK9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;IAC9C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC;IACxD,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,GAAG,EACH,QAAQ,EACR,KAAK,EACL,UAAU,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACR,EAAE,gBAAgB,qBA0JlB"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
2
|
+
import { defaultRecordTitle, formatDateTime, parseStoredDate, toIsoDate } from "./utils.js";
|
|
3
|
+
import { cx, dangerButton, fieldClass, icons, iconButton, KindGlyph } from "./ui.js";
|
|
4
|
+
import { PickerPopover, PickerValue, TagPills, TagsEditorPopover, secretRedactedMarker } from "./cells.js";
|
|
5
|
+
function columnAllowsClear(column) {
|
|
6
|
+
return !column.required && !column.primaryKey && !column.auto;
|
|
7
|
+
}
|
|
8
|
+
function toLocalDateTimeInput(value) {
|
|
9
|
+
const parsed = parseStoredDate(value);
|
|
10
|
+
if (!parsed)
|
|
11
|
+
return "";
|
|
12
|
+
const pad = (part) => `${part}`.padStart(2, "0");
|
|
13
|
+
return `${toIsoDate(parsed)}T${pad(parsed.getHours())}:${pad(parsed.getMinutes())}`;
|
|
14
|
+
}
|
|
15
|
+
function PickerField({ columnData, value, disabled, onChange }) {
|
|
16
|
+
const anchorRef = useRef(null);
|
|
17
|
+
const [open, setOpen] = useState(false);
|
|
18
|
+
return (React.createElement(React.Fragment, null,
|
|
19
|
+
React.createElement("button", { ref: anchorRef, type: "button", className: cx(fieldClass, "flex items-center gap-2 text-left disabled:bg-zinc-50"), disabled: disabled, onClick: () => setOpen(true) },
|
|
20
|
+
React.createElement("span", { className: "flex min-w-0 flex-1 items-center overflow-hidden" }, value ? React.createElement(PickerValue, { value: value, columnData: columnData }) : React.createElement("span", { className: "text-zinc-400" }, "Select\u2026")),
|
|
21
|
+
React.createElement("span", { className: "shrink-0 text-zinc-400" }, icons.chevronDown)),
|
|
22
|
+
open ? (React.createElement(PickerPopover, { anchor: anchorRef.current, columnData: columnData, value: value, onPick: onChange, onClose: () => setOpen(false) })) : null));
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A secret never prefills: the field starts blank, typing stages a
|
|
26
|
+
* replacement, emptying it again restores what the record arrived with, and
|
|
27
|
+
* Clear stages removal.
|
|
28
|
+
*/
|
|
29
|
+
function SecretField({ value, allowClear, onChange }) {
|
|
30
|
+
const [original] = useState(() => (typeof value === "string" && value ? value : null));
|
|
31
|
+
const staged = typeof value === "string" && value !== secretRedactedMarker ? value : "";
|
|
32
|
+
const placeholder = value === null && original ? "Cleared — save to apply" : original ? "Set — type to replace" : "Not set";
|
|
33
|
+
return (React.createElement("div", { className: "flex items-center gap-2" },
|
|
34
|
+
React.createElement("input", { type: "password", autoComplete: "new-password", className: fieldClass, placeholder: placeholder, value: staged, onChange: (event) => onChange(event.target.value === "" ? original : event.target.value) }),
|
|
35
|
+
allowClear && value !== null ? (React.createElement("button", { type: "button", className: cx(dangerButton, "h-9 px-3 text-[13px]"), onClick: () => onChange(null) }, "Clear")) : null));
|
|
36
|
+
}
|
|
37
|
+
function TagsField({ tags, suggestions, disabled, onChange }) {
|
|
38
|
+
const anchorRef = useRef(null);
|
|
39
|
+
const [open, setOpen] = useState(false);
|
|
40
|
+
return (React.createElement(React.Fragment, null,
|
|
41
|
+
React.createElement("button", { ref: anchorRef, type: "button", className: cx(fieldClass, "flex h-auto min-h-9 flex-wrap items-center gap-1 py-1.5 text-left disabled:bg-zinc-50"), disabled: disabled, onClick: () => setOpen(true) }, tags.length ? React.createElement(TagPills, { tags: tags }) : React.createElement("span", { className: "text-zinc-400" }, "Add tags\u2026")),
|
|
42
|
+
open ? (React.createElement(TagsEditorPopover, { anchor: anchorRef.current, tags: tags, suggestions: suggestions, onCommit: (next) => {
|
|
43
|
+
onChange(next);
|
|
44
|
+
setOpen(false);
|
|
45
|
+
}, onCancel: () => setOpen(false) })) : null));
|
|
46
|
+
}
|
|
47
|
+
function JsonField({ value, allowClear, disabled, onChange }) {
|
|
48
|
+
const [draft, setDraft] = useState(() => (value === null || value === undefined ? "" : JSON.stringify(value, null, 2)));
|
|
49
|
+
const [error, setError] = useState("");
|
|
50
|
+
return (React.createElement("div", null,
|
|
51
|
+
React.createElement("textarea", { className: cx(fieldClass, "h-auto min-h-[96px] py-2 font-mono text-[12px] leading-relaxed", error && "border-red-300 focus:border-red-400 focus:ring-red-300/50"), value: draft, disabled: disabled, spellCheck: false, placeholder: "null", onChange: (event) => {
|
|
52
|
+
const text = event.target.value;
|
|
53
|
+
setDraft(text);
|
|
54
|
+
const trimmed = text.trim();
|
|
55
|
+
if (!trimmed) {
|
|
56
|
+
if (!allowClear) {
|
|
57
|
+
setError("Required");
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
setError("");
|
|
61
|
+
onChange(null);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
onChange(JSON.parse(trimmed));
|
|
66
|
+
setError("");
|
|
67
|
+
}
|
|
68
|
+
catch (parseError) {
|
|
69
|
+
setError(parseError instanceof Error ? "Invalid JSON — last valid value kept" : "Invalid JSON");
|
|
70
|
+
}
|
|
71
|
+
} }),
|
|
72
|
+
error ? React.createElement("div", { className: "mt-1 text-xs text-red-600" }, error) : null));
|
|
73
|
+
}
|
|
74
|
+
function ReadOnlyValue({ column, value, columnData }) {
|
|
75
|
+
if (value === null || value === undefined || value === "")
|
|
76
|
+
return React.createElement("span", { className: "text-sm text-zinc-300" }, "\u2014");
|
|
77
|
+
if (columnData)
|
|
78
|
+
return React.createElement(PickerValue, { value: String(value), columnData: columnData });
|
|
79
|
+
if (column.kind === "datetime")
|
|
80
|
+
return React.createElement("span", { className: "text-sm text-zinc-600" }, formatDateTime(value));
|
|
81
|
+
if (column.kind === "id")
|
|
82
|
+
return React.createElement("span", { className: "font-mono text-[12px] text-zinc-500" }, String(value));
|
|
83
|
+
if (column.kind === "secret")
|
|
84
|
+
return React.createElement("span", { className: "text-sm tracking-widest text-zinc-500" }, "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022");
|
|
85
|
+
return React.createElement("span", { className: "text-sm text-zinc-600 [overflow-wrap:anywhere]" }, String(value));
|
|
86
|
+
}
|
|
87
|
+
export function RecordPanel({ table, row, rowIndex, total, references, jsonModes, tagSuggestions, readOnly, getRowId, getRecordTitle, onChange, onNavigate, onDelete, onClose }) {
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
const onKey = (event) => {
|
|
90
|
+
if (event.key === "Escape")
|
|
91
|
+
onClose();
|
|
92
|
+
};
|
|
93
|
+
document.addEventListener("keydown", onKey);
|
|
94
|
+
return () => document.removeEventListener("keydown", onKey);
|
|
95
|
+
}, [onClose]);
|
|
96
|
+
const columns = Object.entries(table.columns);
|
|
97
|
+
const title = getRecordTitle?.(row, table) ?? defaultRecordTitle(row, getRowId?.(row) || "New record");
|
|
98
|
+
const setField = (key, value) => {
|
|
99
|
+
onChange({ ...row, [key]: value });
|
|
100
|
+
};
|
|
101
|
+
return (React.createElement("div", { className: "fixed inset-0 z-40", role: "dialog", "aria-modal": "true", "aria-label": "Record details" },
|
|
102
|
+
React.createElement("div", { className: "rb-fade-in absolute inset-0 bg-zinc-950/30", onClick: onClose }),
|
|
103
|
+
React.createElement("aside", { className: "rb-slide-in absolute bottom-0 right-0 top-0 flex w-full max-w-[460px] flex-col border-l border-zinc-200 bg-white shadow-[-24px_0_48px_rgb(9_9_11/0.12)]" },
|
|
104
|
+
React.createElement("header", { className: "flex items-center gap-2 border-b border-zinc-100 px-5 py-3.5" },
|
|
105
|
+
React.createElement("div", { className: "flex items-center gap-0.5" },
|
|
106
|
+
React.createElement("button", { className: iconButton, title: "Previous record", disabled: rowIndex <= 0, onClick: () => onNavigate(-1) }, icons.chevronUp),
|
|
107
|
+
React.createElement("button", { className: iconButton, title: "Next record", disabled: rowIndex >= total - 1, onClick: () => onNavigate(1) }, icons.chevronDown)),
|
|
108
|
+
React.createElement("div", { className: "min-w-0 flex-1" },
|
|
109
|
+
React.createElement("div", { className: "truncate text-[15px] font-semibold text-zinc-900" }, title),
|
|
110
|
+
React.createElement("div", { className: "text-xs text-zinc-400" },
|
|
111
|
+
table.label,
|
|
112
|
+
" \u00B7 record ",
|
|
113
|
+
rowIndex + 1,
|
|
114
|
+
" of ",
|
|
115
|
+
total)),
|
|
116
|
+
React.createElement("button", { className: iconButton, title: "Close", onClick: onClose }, icons.close)),
|
|
117
|
+
React.createElement("div", { className: "min-h-0 flex-1 overflow-y-auto px-5 py-4" },
|
|
118
|
+
React.createElement("div", { className: "grid gap-4" }, columns.map(([key, column]) => {
|
|
119
|
+
const value = row[key];
|
|
120
|
+
const disabled = readOnly || column.primaryKey || Boolean(column.auto);
|
|
121
|
+
const allowClear = columnAllowsClear(column);
|
|
122
|
+
const pickerData = column.enumValues?.length
|
|
123
|
+
? { variant: "enum", options: column.enumValues.map((option) => ({ id: option, label: option })), allowClear, enumValues: column.enumValues }
|
|
124
|
+
: column.references
|
|
125
|
+
? { variant: "reference", options: references[key] ?? [], allowClear }
|
|
126
|
+
: undefined;
|
|
127
|
+
let control;
|
|
128
|
+
if (disabled) {
|
|
129
|
+
control = (React.createElement("div", { className: "flex min-h-9 items-center rounded-lg bg-zinc-50 px-3 py-1.5" },
|
|
130
|
+
React.createElement(ReadOnlyValue, { column: column, value: value, columnData: pickerData })));
|
|
131
|
+
}
|
|
132
|
+
else if (pickerData) {
|
|
133
|
+
control = React.createElement(PickerField, { columnData: pickerData, value: typeof value === "string" ? value : null, disabled: false, onChange: (next) => setField(key, next) });
|
|
134
|
+
}
|
|
135
|
+
else if (column.kind === "boolean") {
|
|
136
|
+
control = (React.createElement("label", { className: "inline-flex h-9 cursor-pointer items-center gap-2 text-sm text-zinc-700" },
|
|
137
|
+
React.createElement("input", { type: "checkbox", checked: Boolean(value), onChange: (event) => setField(key, event.target.checked) }),
|
|
138
|
+
Boolean(value) ? "Yes" : "No"));
|
|
139
|
+
}
|
|
140
|
+
else if (column.kind === "integer" || column.kind === "real") {
|
|
141
|
+
control = (React.createElement("input", { type: "number", step: column.kind === "integer" ? 1 : "any", className: fieldClass, value: value === null || value === undefined ? "" : String(value), onChange: (event) => {
|
|
142
|
+
const text = event.target.value;
|
|
143
|
+
if (text === "" && !allowClear)
|
|
144
|
+
return;
|
|
145
|
+
setField(key, text === "" ? null : Number(text));
|
|
146
|
+
} }));
|
|
147
|
+
}
|
|
148
|
+
else if (column.kind === "date") {
|
|
149
|
+
control = (React.createElement("input", { type: "date", className: fieldClass, value: typeof value === "string" ? value.slice(0, 10) : "", onChange: (event) => {
|
|
150
|
+
if (!event.target.value && !allowClear)
|
|
151
|
+
return;
|
|
152
|
+
setField(key, event.target.value || null);
|
|
153
|
+
} }));
|
|
154
|
+
}
|
|
155
|
+
else if (column.kind === "datetime") {
|
|
156
|
+
control = (React.createElement("input", { type: "datetime-local", className: fieldClass, value: toLocalDateTimeInput(value), onChange: (event) => {
|
|
157
|
+
if (!event.target.value && !allowClear)
|
|
158
|
+
return;
|
|
159
|
+
setField(key, event.target.value ? new Date(event.target.value).toISOString() : null);
|
|
160
|
+
} }));
|
|
161
|
+
}
|
|
162
|
+
else if (column.kind === "json" && jsonModes[key] === "tags") {
|
|
163
|
+
const tags = Array.isArray(value) ? value.map(String) : [];
|
|
164
|
+
control = React.createElement(TagsField, { tags: tags, suggestions: tagSuggestions[key] ?? [], disabled: false, onChange: (next) => setField(key, next) });
|
|
165
|
+
}
|
|
166
|
+
else if (column.kind === "json") {
|
|
167
|
+
control = React.createElement(JsonField, { key: `${rowIndex}-${key}`, value: value, allowClear: allowClear, disabled: false, onChange: (next) => setField(key, next) });
|
|
168
|
+
}
|
|
169
|
+
else if (column.kind === "secret") {
|
|
170
|
+
control = React.createElement(SecretField, { key: `${rowIndex}-${key}`, value: value, allowClear: allowClear, onChange: (next) => setField(key, next) });
|
|
171
|
+
}
|
|
172
|
+
else if (column.kind === "longText") {
|
|
173
|
+
control = (React.createElement("textarea", { className: cx(fieldClass, "h-auto min-h-[88px] py-2 leading-relaxed"), value: typeof value === "string" ? value : "", onChange: (event) => setField(key, event.target.value) }));
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
control = (React.createElement("input", { className: fieldClass, value: typeof value === "string" ? value : value === null || value === undefined ? "" : String(value), onChange: (event) => setField(key, event.target.value) }));
|
|
177
|
+
}
|
|
178
|
+
return (React.createElement("div", { key: key, className: "grid gap-1.5" },
|
|
179
|
+
React.createElement("div", { className: "flex items-center gap-1.5 text-[12px] font-medium text-zinc-500" },
|
|
180
|
+
React.createElement("span", { className: "text-zinc-400" },
|
|
181
|
+
React.createElement(KindGlyph, { kind: column.kind, hasEnum: Boolean(column.enumValues?.length), size: 12 })),
|
|
182
|
+
column.label,
|
|
183
|
+
column.required && !column.primaryKey && !column.auto ? React.createElement("span", { className: "text-zinc-300" }, "*") : null,
|
|
184
|
+
column.auto ? React.createElement("span", { className: "rounded bg-zinc-100 px-1 py-px text-[10px] font-semibold uppercase tracking-wide text-zinc-400" }, "auto") : null),
|
|
185
|
+
control));
|
|
186
|
+
}))),
|
|
187
|
+
React.createElement("footer", { className: "flex items-center justify-between gap-2 border-t border-zinc-100 bg-zinc-50/60 px-5 py-3" },
|
|
188
|
+
React.createElement("span", { className: "text-xs text-zinc-400" }, "Edits apply when you save changes"),
|
|
189
|
+
!readOnly ? (React.createElement("button", { className: cx(dangerButton, "h-8 px-3 text-[13px]"), onClick: onDelete },
|
|
190
|
+
icons.trash,
|
|
191
|
+
"Delete record")) : null))));
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=record-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-panel.js","sourceRoot":"","sources":["../src/record-panel.tsx"],"names":[],"mappings":"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"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-orange-100:oklch(95.4% .038 75.164);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-900:oklch(41.4% .112 45.904);--color-lime-100:oklch(96.7% .067 122.328);--color-lime-900:oklch(40.5% .101 131.063);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-900:oklch(37.8% .077 168.94);--color-teal-100:oklch(95.3% .051 180.801);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-100:oklch(95.6% .045 203.388);--color-cyan-900:oklch(39.8% .07 227.392);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-900:oklch(39.1% .09 240.876);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-900:oklch(35.9% .144 278.697);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-900:oklch(38% .189 293.745);--color-fuchsia-100:oklch(95.2% .037 318.852);--color-fuchsia-900:oklch(40.1% .17 325.612);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-900:oklch(41% .159 10.272);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-600:oklch(44.2% .017 285.786);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components{.dsg-container{--dsg-border-color:#f4f4f5;--dsg-selection-border-color:#09090b;--dsg-selection-background-color:#09090b0a;--dsg-cell-background-color:#fff;--dsg-cell-disabled-background-color:#f8f8f9;--dsg-header-text-color:#71717a;--dsg-header-active-text-color:#09090b}.dsg-container input,.dsg-container select{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-outline-style:none;background-color:#0000;border-color:#0000;border-radius:0;outline-style:none}.rb-grid-select{cursor:pointer}.rb-grid-select:disabled{cursor:default}.dsg-cell-header,.dsg-cell-gutter{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-zinc-200);background-color:var(--color-zinc-50);--tw-font-weight:var(--font-weight-medium);font-size:11px;font-weight:var(--font-weight-medium);--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider);text-transform:uppercase}.rb-cell-id .dsg-input{font-family:var(--font-mono);color:var(--color-zinc-400);font-size:11px}.rb-cell-secret .dsg-input{-webkit-text-security:disc}.rb-cell-null{--dsg-cell-background-color:#f8f8f9}.rb-cell-dirty{--dsg-cell-background-color:#f5fbff}.rb-context-menu-separator{background:#f4f4f5;height:1px;margin:5px 0}.rb-context-menu-label{color:#a1a1aa;text-transform:uppercase;letter-spacing:.04em;padding:3px 20px;font-size:11px;font-weight:600}.rb-context-menu-button{text-align:left;border:0;width:100%}.rb-context-menu-button:disabled{color:#a1a1aa;cursor:not-allowed}.dsg-cell-header{position:relative}.rb-col-resize{cursor:col-resize;z-index:5;width:9px;position:absolute;top:0;bottom:0;right:0}.rb-col-resize:after{content:"";background:0 0;border-radius:2px;width:3px;transition:background-color .12s;position:absolute;top:18%;bottom:18%;right:3px}.rb-col-resize:hover:after{background:#d4d4d8}body.rb-col-resizing,body.rb-col-resizing *{-webkit-user-select:none;user-select:none;cursor:col-resize!important}.rb-row-edit-icon{opacity:0;pointer-events:none}.dsg-row:hover .rb-row-edit-icon,.dsg-row:focus-within .rb-row-edit-icon{opacity:1}.dsg-add-row{border-inline-style:var(--tw-border-style);border-inline-width:0;border-top-style:var(--tw-border-style);border-top-width:1px;border-bottom-style:var(--tw-border-style);border-bottom-width:0;border-color:var(--color-zinc-100);background-color:var(--color-white);padding:calc(var(--spacing) * 0)}.dsg-add-row>*{margin-right:0}.dsg-container{border-style:var(--tw-border-style);border-width:0}@keyframes rb-slide-in{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}@keyframes rb-fade-in{0%{opacity:0}to{opacity:1}}@keyframes rb-pop-in{0%{opacity:0;transform:scale(.97)translateY(4px)}to{opacity:1;transform:scale(1)translateY(0)}}.rb-slide-in{animation:.18s ease-out rb-slide-in}.rb-fade-in{animation:.15s ease-out rb-fade-in}.rb-pop-in{animation:.15s ease-out rb-pop-in}.rb-chevron{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23a1a1aa' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-position:right .6rem center;background-repeat:no-repeat;background-size:16px}}@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.right-0{right:calc(var(--spacing) * 0)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.z-40{z-index:40}.z-50{z-index:50}.row-1{grid-row:1}.row-2{grid-row:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.my-auto{margin-block:auto}.mt-1{margin-top:calc(var(--spacing) * 1)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-auto{height:auto}.h-full{height:100%}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-\[320px\]{max-height:320px}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-\[88px\]{min-height:88px}.min-h-\[96px\]{min-height:96px}.min-h-\[140px\]{min-height:140px}.min-h-\[160px\]{min-height:160px}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-56{width:calc(var(--spacing) * 56)}.w-full{width:100%}.max-w-44{max-width:calc(var(--spacing) * 44)}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[460px\]{max-width:460px}.max-w-full{max-width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[90px\]{min-width:90px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.cursor-context-menu{cursor:context-menu}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.rounded-b-lg{border-bottom-right-radius:var(--radius-lg);border-bottom-left-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-red-300{border-color:var(--color-red-300)}.border-zinc-100{border-color:var(--color-zinc-100)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400{border-color:var(--color-zinc-400)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-cyan-100{background-color:var(--color-cyan-100)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-fuchsia-100{background-color:var(--color-fuchsia-100)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-lime-100{background-color:var(--color-lime-100)}.bg-orange-100{background-color:var(--color-orange-100)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-teal-100{background-color:var(--color-teal-100)}.bg-transparent{background-color:#0000}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-50\/60{background-color:#fafafa99}@supports (color:color-mix(in lab, red, red)){.bg-zinc-50\/60{background-color:color-mix(in oklab, var(--color-zinc-50) 60%, transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/30{background-color:#09090b4d}@supports (color:color-mix(in lab, red, red)){.bg-zinc-950\/30{background-color:color-mix(in oklab, var(--color-zinc-950) 30%, transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-\[10px\]{padding-inline:10px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-px{padding-block:1px}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.whitespace-nowrap{white-space:nowrap}.text-amber-900{color:var(--color-amber-900)}.text-current{color:currentColor}.text-cyan-900{color:var(--color-cyan-900)}.text-emerald-900{color:var(--color-emerald-900)}.text-fuchsia-900{color:var(--color-fuchsia-900)}.text-indigo-900{color:var(--color-indigo-900)}.text-lime-900{color:var(--color-lime-900)}.text-orange-900{color:var(--color-orange-900)}.text-red-600{color:var(--color-red-600)}.text-rose-900{color:var(--color-rose-900)}.text-sky-900{color:var(--color-sky-900)}.text-teal-900{color:var(--color-teal-900)}.text-violet-900{color:var(--color-violet-900)}.text-white{color:var(--color-white)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.opacity-50{opacity:.5}.shadow-\[-24px_0_48px_rgb\(9_9_11\/0\.12\)\]{--tw-shadow:-24px 0 48px var(--tw-shadow-color,#09090b1f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_12px_32px_rgb\(9_9_11\/0\.16\)\]{--tw-shadow:0 12px 32px var(--tw-shadow-color,#09090b29);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-zinc-300{--tw-ring-color:var(--color-zinc-300)}.ring-zinc-400\/30{--tw-ring-color:#9f9fa94d}@supports (color:color-mix(in lab, red, red)){.ring-zinc-400\/30{--tw-ring-color:color-mix(in oklab, var(--color-zinc-400) 30%, transparent)}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ring-inset{--tw-ring-inset:inset}.placeholder\:text-zinc-400::placeholder{color:var(--color-zinc-400)}@media (hover:hover){.hover\:border-zinc-300:hover{border-color:var(--color-zinc-300)}.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}.hover\:border-zinc-900:hover{border-color:var(--color-zinc-900)}.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:bg-zinc-900:hover{background-color:var(--color-zinc-900)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}.hover\:text-zinc-900:hover{color:var(--color-zinc-900)}.hover\:opacity-100:hover{opacity:1}}.focus\:border-red-400:focus{border-color:var(--color-red-400)}.focus\:border-zinc-400:focus{border-color:var(--color-zinc-400)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-red-300\/50:focus{--tw-ring-color:#ffa3a380}@supports (color:color-mix(in lab, red, red)){.focus\:ring-red-300\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-red-300) 50%, transparent)}}.focus\:ring-zinc-400\/70:focus{--tw-ring-color:#9f9fa9b3}@supports (color:color-mix(in lab, red, red)){.focus\:ring-zinc-400\/70:focus{--tw-ring-color:color-mix(in oklab, var(--color-zinc-400) 70%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-zinc-400\/70:focus-visible{--tw-ring-color:#9f9fa9b3}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-zinc-400\/70:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-zinc-400) 70%, transparent)}}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:bg-zinc-50:disabled{background-color:var(--color-zinc-50)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.\[\&\:\:-webkit-search-cancel-button\]\:hidden::-webkit-search-cancel-button{display:none}.\[\&\:hover\>svg\]\:text-white:hover>svg{color:var(--color-white)}.\[\&\>svg\]\:text-zinc-500>svg{color:var(--color-zinc-500)}.\[\&\>svg\]\:transition-colors>svg{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}:root{--dsg-border-color:#e8ebed;--dsg-selection-border-color:#4580e6;--dsg-selection-border-radius:2px;--dsg-selection-border-width:2px;--dsg-selection-background-color:#4580e60a;--dsg-selection-disabled-border-color:#9da6ab;--dsg-selection-disabled-background-color:#0000000a;--dsg-corner-indicator-width:10px;--dsg-header-text-color:#9da6ab;--dsg-header-active-text-color:black;--dsg-cell-background-color:white;--dsg-cell-disabled-background-color:#fafafa;--dsg-transition-duration:.1s;--dsg-expand-rows-indicator-width:10px;--dsg-scroll-shadow-width:7px;--dsg-scroll-shadow-color:#0003}.dsg-container{border:solid 1px var(--dsg-border-color);cursor:cell;-webkit-user-select:none;user-select:none;box-sizing:border-box;color:#000;will-change:transform;direction:ltr;background:#fff;border-top:none;border-left:none;width:100%;position:relative;overflow:auto}.dsg-corner-indicator{border-bottom:solid var(--dsg-corner-indicator-width) var(--dsg-header-text-color);border-left:solid var(--dsg-corner-indicator-width) transparent;width:0;margin:auto}.dsg-row{background:var(--dsg-cell-background-color);box-shadow:0 1px var(--dsg-border-color) inset;position:absolute;top:0;left:0}.dsg-row-header{z-index:40;position:sticky;top:0}.dsg-cell{box-sizing:border-box;background:var(--dsg-cell-background-color);border:solid 1px var(--dsg-border-color);box-shadow:1px 1px var(--dsg-border-color);border-bottom:none;border-right:none;align-items:center;height:100%;display:flex;position:absolute;top:0}.dsg-hidden-cell{display:none}.dsg-cell-sticky-right{z-index:30;margin-left:auto;position:sticky;right:0;transform:translateY(-100%)}.dsg-cell-disabled{background:var(--dsg-cell-disabled-background-color)}.dsg-cell-header,.dsg-cell-gutter{color:var(--dsg-header-text-color);transition:color var(--dsg-transition-duration);box-shadow:none}.dsg-cell-header-container{padding:0 10px;line-height:15px}.dsg-cell-header.dsg-cell-gutter{box-shadow:1px 0 var(--dsg-border-color), 0 1px var(--dsg-border-color)}.dsg-cell-header.dsg-cell-sticky-right{box-shadow:0 1px var(--dsg-border-color)}.dsg-cell-gutter{z-index:30;justify-content:center;height:100%;padding:0 5px;position:sticky;left:0}.dsg-cell-header-active,.dsg-cell-gutter-active{color:var(--dsg-header-active-text-color)}.dsg-active-cell,.dsg-selection-rect{border:solid var(--dsg-selection-border-width) var(--dsg-selection-border-color);box-sizing:border-box;border-radius:var(--dsg-selection-border-radius);transition:all var(--dsg-transition-duration);pointer-events:none;z-index:20;position:absolute}.dsg-active-cell-focus{box-shadow:0 2px 5px #0000004d}.dsg-active-cell-disabled,.dsg-selection-rect-disabled{border-color:var(--dsg-selection-disabled-border-color)}.dsg-selection-rect{background:var(--dsg-selection-background-color)}.dsg-selection-rect-disabled{background:var(--dsg-selection-disabled-background-color)}.dsg-scrollable-view-container{pointer-events:none;position:absolute;top:0;left:0}.dsg-scrollable-view{z-index:10;box-sizing:border-box;border:solid 1px var(--dsg-border-color);box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset;border-bottom:none;border-right:none;transition:box-shadow .3s;position:sticky}.dsg-scrollable-view-t{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-r{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-b{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-r{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-r.dsg-scrollable-view-b{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-b.dsg-scrollable-view-l{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l.dsg-scrollable-view-t{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-b{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l.dsg-scrollable-view-r{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-r.dsg-scrollable-view-b{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-r.dsg-scrollable-view-b.dsg-scrollable-view-l{box-shadow:0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-b.dsg-scrollable-view-l.dsg-scrollable-view-t{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-l.dsg-scrollable-view-t.dsg-scrollable-view-r{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-scrollable-view-t.dsg-scrollable-view-r.dsg-scrollable-view-b.dsg-scrollable-view-l{box-shadow:0 var(--dsg-scroll-shadow-width) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, calc(0px - var(--dsg-scroll-shadow-width)) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, 0 calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset, var(--dsg-scroll-shadow-width) 0 var(--dsg-scroll-shadow-width) calc(0px - var(--dsg-scroll-shadow-width)) var(--dsg-scroll-shadow-color) inset}.dsg-selection-col-marker-container{position:absolute;top:0}.dsg-selection-col-marker{background:var(--dsg-selection-border-color);width:100%;height:var(--dsg-selection-border-width);position:sticky}.dsg-selection-row-marker-container{position:absolute;left:0}.dsg-selection-row-marker{background:var(--dsg-selection-border-color);height:100%;width:var(--dsg-selection-border-width);position:sticky}.dsg-selection-col-marker-container,.dsg-selection-col-marker,.dsg-selection-row-marker-container,.dsg-selection-row-marker{z-index:20;transition:all var(--dsg-transition-duration);pointer-events:none}.dsg-selection-col-marker-disabled,.dsg-selection-row-marker-disabled{background:var(--dsg-selection-disabled-border-color)}.dsg-add-row{border:1px solid var(--dsg-border-color);color:#000;background:#fafafa;border-top:none;align-items:center;padding:7px 10px;display:flex}.dsg-add-row>*{margin-right:10px}.dsg-add-row-btn,.dsg-add-row-input{background:#fff;border:1px solid #dcdcdc;border-radius:2px;align-items:center;padding:7px 10px;transition:all .2s;display:flex;position:relative}.dsg-add-row-input{width:55px}.dsg-add-row-btn:hover,.dsg-add-row-input:hover{border-color:#c7c7c7}.dsg-add-row-btn:focus,.dsg-add-row-input:focus{border-color:var(--dsg-selection-border-color);outline:none}.dsg-add-row-btn:before{content:"";background:#9da6ab;width:10px;height:2px;margin-right:10px;display:inline-block}.dsg-add-row-btn:after{content:"";background:#9da6ab;width:2px;height:10px;margin-right:10px;display:block;position:absolute;left:14px}.dsg-input{box-sizing:border-box;background:0 0;border:none;outline:none;flex:1;align-self:stretch;min-width:0;padding:0 10px;font-size:1rem;display:block}.dsg-input-suffix{opacity:.5;margin-left:-5px;padding-right:10px}.dsg-input-align-right{text-align:right}.dsg-hide-date-picker[type=date]::-webkit-inner-spin-button{-webkit-appearance:none;display:none}.dsg-hide-date-picker[type=date]::-webkit-calendar-picker-indicator{-webkit-appearance:none;display:none}.dsg-checkbox{margin:auto}.dsg-context-menu{z-index:10000;color:#000;background:#fff;border-radius:4px;padding:5px 0;position:fixed;box-shadow:0 2px 6px 2px #3c404326}.dsg-context-menu-item{cursor:default;padding:3px 20px}.dsg-context-menu-item:hover{background:#fafafa}.dsg-expand-rows-indicator{background:var(--dsg-cell-background-color);border:solid 1px var(--dsg-selection-border-color);box-shadow:0 0 0 1px var(--dsg-cell-background-color);width:var(--dsg-expand-rows-indicator-width);height:var(--dsg-expand-rows-indicator-width);box-sizing:border-box;transition:all var(--dsg-transition-duration);cursor:crosshair;z-index:25;position:absolute}.dsg-expand-rows-indicator-disabled{border:solid 1px var(--dsg-selection-disabled-border-color)}.dsg-expand-rows-rect{box-sizing:border-box;transition:all var(--dsg-transition-duration);pointer-events:none;background:#00000008;position:absolute}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type GridColumnMeta = {
|
|
2
|
+
kind: string;
|
|
3
|
+
required: boolean;
|
|
4
|
+
primaryKey: boolean;
|
|
5
|
+
enumValues?: string[];
|
|
6
|
+
references?: string | null;
|
|
7
|
+
auto?: string;
|
|
8
|
+
label: string;
|
|
9
|
+
};
|
|
10
|
+
export type GridTableMeta = {
|
|
11
|
+
name: string;
|
|
12
|
+
label: string;
|
|
13
|
+
system?: boolean;
|
|
14
|
+
columns: Record<string, GridColumnMeta>;
|
|
15
|
+
};
|
|
16
|
+
export type GridRow = Record<string, unknown>;
|
|
17
|
+
export type ReferenceOption = {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
};
|
|
21
|
+
export type BackendFilterCondition = {
|
|
22
|
+
op: string;
|
|
23
|
+
value?: unknown;
|
|
24
|
+
};
|
|
25
|
+
export type ColumnMeta = GridColumnMeta;
|
|
26
|
+
export type TableMeta = GridTableMeta;
|
|
27
|
+
export type Row = GridRow;
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AACxC,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AACtC,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/ui.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare function cx(...classes: Array<string | false | null | undefined>): string;
|
|
3
|
+
export declare const fieldBase = "h-9 rounded-lg border border-zinc-200 bg-white px-3 text-sm text-zinc-900 transition-colors placeholder:text-zinc-400 hover:border-zinc-300 focus:border-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-400/70";
|
|
4
|
+
export declare const fieldClass = "h-9 rounded-lg border border-zinc-200 bg-white px-3 text-sm text-zinc-900 transition-colors placeholder:text-zinc-400 hover:border-zinc-300 focus:border-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-400/70 w-full";
|
|
5
|
+
export declare const selectBase = "rb-chevron h-9 appearance-none rounded-lg border border-zinc-200 bg-white pl-3 pr-9 text-sm text-zinc-900 transition-colors hover:border-zinc-300 focus:border-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-400/70";
|
|
6
|
+
export declare const dangerButton = "inline-flex h-9 shrink-0 items-center justify-center gap-1.5 whitespace-nowrap rounded-lg border border-zinc-300 bg-white px-3.5 text-sm font-medium text-zinc-900 transition-colors hover:border-zinc-900 hover:bg-zinc-900 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400/70 disabled:pointer-events-none disabled:opacity-40 [&>svg]:text-zinc-500 [&>svg]:transition-colors [&:hover>svg]:text-white";
|
|
7
|
+
export declare const iconButton = "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400/70 disabled:pointer-events-none disabled:opacity-30";
|
|
8
|
+
export declare const icons: {
|
|
9
|
+
search: React.JSX.Element;
|
|
10
|
+
filter: React.JSX.Element;
|
|
11
|
+
close: React.JSX.Element;
|
|
12
|
+
closeSmall: React.JSX.Element;
|
|
13
|
+
chevronLeft: React.JSX.Element;
|
|
14
|
+
chevronRight: React.JSX.Element;
|
|
15
|
+
chevronUp: React.JSX.Element;
|
|
16
|
+
chevronDown: React.JSX.Element;
|
|
17
|
+
trash: React.JSX.Element;
|
|
18
|
+
checkmark: React.JSX.Element;
|
|
19
|
+
plus: React.JSX.Element;
|
|
20
|
+
calendar: React.JSX.Element;
|
|
21
|
+
};
|
|
22
|
+
/** Field-type glyphs for grid headers and the record panel, keyed by column kind. */
|
|
23
|
+
export declare function KindGlyph({ kind, hasEnum, size }: {
|
|
24
|
+
kind: string;
|
|
25
|
+
hasEnum?: boolean;
|
|
26
|
+
size?: number;
|
|
27
|
+
}): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=ui.d.ts.map
|
package/dist/ui.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAE/E;AAED,eAAO,MAAM,SAAS,6NACsM,CAAC;AAC7N,eAAO,MAAM,UAAU,oOAAwB,CAAC;AAChD,eAAO,MAAM,UAAU,mOAC2M,CAAC;AACnO,eAAO,MAAM,YAAY,2bACia,CAAC;AAC3b,eAAO,MAAM,UAAU,8QACsP,CAAC;AAW9Q,eAAO,MAAM,KAAK;;;;;;;;;;;;;CAuEjB,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAS,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,qBAkFzG"}
|
package/dist/ui.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export function cx(...classes) {
|
|
3
|
+
return classes.filter(Boolean).join(" ");
|
|
4
|
+
}
|
|
5
|
+
export const fieldBase = "h-9 rounded-lg border border-zinc-200 bg-white px-3 text-sm text-zinc-900 transition-colors placeholder:text-zinc-400 hover:border-zinc-300 focus:border-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-400/70";
|
|
6
|
+
export const fieldClass = `${fieldBase} w-full`;
|
|
7
|
+
export const selectBase = "rb-chevron h-9 appearance-none rounded-lg border border-zinc-200 bg-white pl-3 pr-9 text-sm text-zinc-900 transition-colors hover:border-zinc-300 focus:border-zinc-400 focus:outline-none focus:ring-2 focus:ring-zinc-400/70";
|
|
8
|
+
export const dangerButton = "inline-flex h-9 shrink-0 items-center justify-center gap-1.5 whitespace-nowrap rounded-lg border border-zinc-300 bg-white px-3.5 text-sm font-medium text-zinc-900 transition-colors hover:border-zinc-900 hover:bg-zinc-900 hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400/70 disabled:pointer-events-none disabled:opacity-40 [&>svg]:text-zinc-500 [&>svg]:transition-colors [&:hover>svg]:text-white";
|
|
9
|
+
export const iconButton = "inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-lg text-zinc-400 transition-colors hover:bg-zinc-100 hover:text-zinc-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-zinc-400/70 disabled:pointer-events-none disabled:opacity-30";
|
|
10
|
+
const stroke = {
|
|
11
|
+
fill: "none",
|
|
12
|
+
stroke: "currentColor",
|
|
13
|
+
strokeWidth: 1.8,
|
|
14
|
+
strokeLinecap: "round",
|
|
15
|
+
strokeLinejoin: "round",
|
|
16
|
+
"aria-hidden": true
|
|
17
|
+
};
|
|
18
|
+
export const icons = {
|
|
19
|
+
search: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
20
|
+
React.createElement("circle", { cx: "11", cy: "11", r: "8" }),
|
|
21
|
+
React.createElement("path", { d: "m21 21-4.3-4.3" }))),
|
|
22
|
+
filter: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
23
|
+
React.createElement("path", { d: "M22 3H2l8 9.46V19l4 2v-8.54L22 3z" }))),
|
|
24
|
+
close: (React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", ...stroke },
|
|
25
|
+
React.createElement("path", { d: "M18 6 6 18" }),
|
|
26
|
+
React.createElement("path", { d: "m6 6 12 12" }))),
|
|
27
|
+
closeSmall: (React.createElement("svg", { width: "11", height: "11", viewBox: "0 0 24 24", ...stroke, strokeWidth: 2.4 },
|
|
28
|
+
React.createElement("path", { d: "M18 6 6 18" }),
|
|
29
|
+
React.createElement("path", { d: "m6 6 12 12" }))),
|
|
30
|
+
chevronLeft: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
31
|
+
React.createElement("path", { d: "m15 18-6-6 6-6" }))),
|
|
32
|
+
chevronRight: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
33
|
+
React.createElement("path", { d: "m9 18 6-6-6-6" }))),
|
|
34
|
+
chevronUp: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
35
|
+
React.createElement("path", { d: "m18 15-6-6-6 6" }))),
|
|
36
|
+
chevronDown: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
37
|
+
React.createElement("path", { d: "m6 9 6 6 6-6" }))),
|
|
38
|
+
trash: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
39
|
+
React.createElement("path", { d: "M3 6h18" }),
|
|
40
|
+
React.createElement("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" }),
|
|
41
|
+
React.createElement("line", { x1: "10", x2: "10", y1: "11", y2: "17" }),
|
|
42
|
+
React.createElement("line", { x1: "14", x2: "14", y1: "11", y2: "17" }))),
|
|
43
|
+
checkmark: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke, strokeWidth: 2.2 },
|
|
44
|
+
React.createElement("path", { d: "M20 6 9 17l-5-5" }))),
|
|
45
|
+
plus: (React.createElement("svg", { width: "16", height: "16", viewBox: "0 0 24 24", ...stroke },
|
|
46
|
+
React.createElement("path", { d: "M5 12h14" }),
|
|
47
|
+
React.createElement("path", { d: "M12 5v14" }))),
|
|
48
|
+
calendar: (React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", ...stroke },
|
|
49
|
+
React.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
50
|
+
React.createElement("path", { d: "M16 2v4" }),
|
|
51
|
+
React.createElement("path", { d: "M8 2v4" }),
|
|
52
|
+
React.createElement("path", { d: "M3 10h18" })))
|
|
53
|
+
};
|
|
54
|
+
/** Field-type glyphs for grid headers and the record panel, keyed by column kind. */
|
|
55
|
+
export function KindGlyph({ kind, hasEnum, size = 13 }) {
|
|
56
|
+
const shared = { width: size, height: size, viewBox: "0 0 24 24", ...stroke, strokeWidth: 2 };
|
|
57
|
+
if (hasEnum) {
|
|
58
|
+
return (React.createElement("svg", { ...shared },
|
|
59
|
+
React.createElement("circle", { cx: "12", cy: "12", r: "9" }),
|
|
60
|
+
React.createElement("path", { d: "m9 12 2 2 4-4" })));
|
|
61
|
+
}
|
|
62
|
+
switch (kind) {
|
|
63
|
+
case "id":
|
|
64
|
+
return (React.createElement("svg", { ...shared },
|
|
65
|
+
React.createElement("path", { d: "M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z" }),
|
|
66
|
+
React.createElement("circle", { cx: "16.5", cy: "7.5", r: ".5", fill: "currentColor" })));
|
|
67
|
+
case "integer":
|
|
68
|
+
case "real":
|
|
69
|
+
return (React.createElement("svg", { ...shared },
|
|
70
|
+
React.createElement("line", { x1: "4", y1: "9", x2: "20", y2: "9" }),
|
|
71
|
+
React.createElement("line", { x1: "4", y1: "15", x2: "20", y2: "15" }),
|
|
72
|
+
React.createElement("line", { x1: "10", y1: "3", x2: "8", y2: "21" }),
|
|
73
|
+
React.createElement("line", { x1: "16", y1: "3", x2: "14", y2: "21" })));
|
|
74
|
+
case "boolean":
|
|
75
|
+
return (React.createElement("svg", { ...shared },
|
|
76
|
+
React.createElement("rect", { x: "3", y: "5", width: "18", height: "14", rx: "7" }),
|
|
77
|
+
React.createElement("circle", { cx: "16", cy: "12", r: "3" })));
|
|
78
|
+
case "date":
|
|
79
|
+
case "datetime":
|
|
80
|
+
return (React.createElement("svg", { ...shared },
|
|
81
|
+
React.createElement("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
82
|
+
React.createElement("path", { d: "M16 2v4" }),
|
|
83
|
+
React.createElement("path", { d: "M8 2v4" }),
|
|
84
|
+
React.createElement("path", { d: "M3 10h18" })));
|
|
85
|
+
case "json":
|
|
86
|
+
return (React.createElement("svg", { ...shared },
|
|
87
|
+
React.createElement("path", { d: "M9 7H7a2 2 0 0 0-2 2v1.5a1.5 1.5 0 0 1-1.5 1.5A1.5 1.5 0 0 1 5 13.5V15a2 2 0 0 0 2 2h2" }),
|
|
88
|
+
React.createElement("path", { d: "M15 7h2a2 2 0 0 1 2 2v1.5a1.5 1.5 0 0 0 1.5 1.5 1.5 1.5 0 0 0-1.5 1.5V15a2 2 0 0 1-2 2h-2" })));
|
|
89
|
+
case "ref":
|
|
90
|
+
return (React.createElement("svg", { ...shared },
|
|
91
|
+
React.createElement("path", { d: "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" }),
|
|
92
|
+
React.createElement("path", { d: "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" })));
|
|
93
|
+
case "secret":
|
|
94
|
+
return (React.createElement("svg", { ...shared },
|
|
95
|
+
React.createElement("rect", { x: "4", y: "11", width: "16", height: "10", rx: "2" }),
|
|
96
|
+
React.createElement("path", { d: "M8 11V7a4 4 0 0 1 8 0v4" })));
|
|
97
|
+
case "longText":
|
|
98
|
+
return (React.createElement("svg", { ...shared },
|
|
99
|
+
React.createElement("path", { d: "M4 6h16" }),
|
|
100
|
+
React.createElement("path", { d: "M4 12h16" }),
|
|
101
|
+
React.createElement("path", { d: "M4 18h10" })));
|
|
102
|
+
default:
|
|
103
|
+
return (React.createElement("svg", { ...shared },
|
|
104
|
+
React.createElement("path", { d: "M4 20 12 4l8 16" }),
|
|
105
|
+
React.createElement("path", { d: "M7 14h10" })));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=ui.js.map
|