@keyfunc/keybricks-ds 2.4.2 → 2.4.6
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/DEPLOY.md +25 -3
- package/DESIGN.md +18 -6
- package/INTEGRATION.md +16 -6
- package/_adherence.oxlintrc.json +7 -0
- package/_scripts/build-index.mjs +2 -2
- package/assets/icons/icon-index.js +1 -1
- package/assets/icons/icon-index.json +1 -1
- package/components/_cards/activity.card.html +1 -1
- package/components/_cards/button-1-base.card.html +1 -1
- package/components/_cards/button-3-sizes-icons.card.html +1 -1
- package/components/_cards/icons-0-usage.card.html +1 -1
- package/components/_cards/icons-1-core.card.html +2 -2
- package/components/_cards/icons-2-feather.card.html +1 -1
- package/components/_cards/icons-2b-lucide.card.html +44 -0
- package/components/_cards/listrow.card.html +2 -2
- package/components/_cards/smart-table.card.html +23 -13
- package/components/_cards/table.card.html +10 -10
- package/components/_cards/tree.card.html +49 -3
- package/components/_shared/src-data.js +1 -1
- package/components/_shared/src-icons.js +1 -1
- package/components/_shared/src-navigation.js +1 -1
- package/components/_vue/index.mjs +2 -0
- package/components/buttons/buttons.prompt.md +1 -1
- package/components/data/SmartTable.d.ts +3 -2
- package/components/data/SmartTable.jsx +11 -6
- package/components/data/SmartTable.vue +10 -5
- package/components/icons/Icon.jsx +81 -5
- package/components/icons/Icon.prompt.md +1 -1
- package/components/icons/Lucide.d.ts +22 -0
- package/components/icons/Lucide.jsx +18 -0
- package/components/icons/Lucide.vue +12 -0
- package/components/icons/icon-paths.js +79 -3
- package/components/icons/lucide-loader.js +27 -0
- package/components/index.d.ts +1 -0
- package/components/index.js +1 -0
- package/components/navigation/Breadcrumb.jsx +1 -1
- package/components/navigation/Sidebar.d.ts +1 -1
- package/components/navigation/ThemeToggle.vue +1 -1
- package/components/navigation/Tree.d.ts +1 -1
- package/components/navigation/Tree.jsx +21 -5
- package/components/navigation/Tree.vue +16 -4
- package/components/navigation/nav-model.js +3 -3
- package/package.json +1 -1
- package/readme.md +1 -1
- package/readme.zh-CN.md +1 -1
- package/tokens/tokens.json +1 -1
|
@@ -11,7 +11,8 @@ const Pill = ({ hue = "gray", children }) => <span style={{ display: "inline-fle
|
|
|
11
11
|
|
|
12
12
|
/** Notion/Airtable-style database grid ("smart table"): field-type icons in headers, colored select pills, person/date/checkbox/url/progress cells, row hover + expand, inline text/number editing, + New row, add-field column, per-column footer aggregates, and a view toolbar (Hide fields · Filter · Group · Sort · search). */
|
|
13
13
|
/* A size region that defaults to sm: a database grid is a dense surface, so rows are the sm bar height (36), cells and toolbar read the sm control text (12px, 13px in CJK) and the toolbar's buttons are 28px. Pass size="md" for a roomier grid.
|
|
14
|
-
density: "default" rows are --bar-h (36 / 40 / 48) with --cell-px; "compact" rows are --control-h (28 / 32 / 40, the Spreadsheet's cell height) with the Spreadsheet's 8px padding (so at sm only the height changes). Header and footer follow. The toolbar's "Row height" menu switches it; rowHeight (a raw height) overrides density.
|
|
14
|
+
density: "default" rows are --bar-h (36 / 40 / 48) with --cell-px; "compact" rows are --control-h (28 / 32 / 40, the Spreadsheet's cell height) with the Spreadsheet's 8px padding (so at sm only the height changes). Header and footer follow. The toolbar's "Row height" menu switches it; rowHeight (a raw height) overrides density.
|
|
15
|
+
Frozen edges (like Spreadsheet): the field header row is sticky to the top and the 40px row-number column to the left; the corner cell is sticky on both axes. Sticky cells keep the --bg-inset fill so body cells never show through, and the frozen edge is a --border-subtle hairline. */
|
|
15
16
|
const DENSITY = { default: { h: "var(--bar-h)", px: "var(--cell-px)" }, compact: { h: "var(--control-h)", px: "8px" } };
|
|
16
17
|
export function SmartTable({ fields = [], rows = [], title = "Grid view", toolbar = true, height, rowHeight, density: densityProp, defaultDensity = "default", onDensityChange, size = "sm", onChange, style }) {
|
|
17
18
|
const [data, setData] = React.useState(rows);
|
|
@@ -27,6 +28,10 @@ export function SmartTable({ fields = [], rows = [], title = "Grid view", toolba
|
|
|
27
28
|
const grid = { display: "grid", gridTemplateColumns: widths.join(" "), width: "fit-content", minWidth: "100%" };
|
|
28
29
|
const cellBase = { display: "flex", alignItems: "center", gap: 5, padding: "0 " + DENSITY[density].px, borderRight: "1px solid var(--border-subtle)", borderBottom: "1px solid var(--border-subtle)", height: rowH, boxSizing: "border-box", overflow: "hidden", whiteSpace: "nowrap", fontFamily: "var(--font-sans)", fontSize: "var(--control-text)", lineHeight: "var(--control-leading)", letterSpacing: "var(--control-tracking)", color: "var(--text-primary)" };
|
|
29
30
|
const tierIcon = { width: "var(--control-icon)", height: "var(--control-icon)" };
|
|
31
|
+
// Frozen edges — zIndex 1 (row-number column) < 2 (header row) < 3 (corner, both axes); the editing input sits inside a body cell, under them.
|
|
32
|
+
const stickyTop = { position: "sticky", top: 0, zIndex: 2, background: "var(--bg-inset)" };
|
|
33
|
+
const stickyLeft = { position: "sticky", left: 0, zIndex: 1, background: "var(--bg-inset)" };
|
|
34
|
+
const stickyCorner = { ...stickyTop, left: 0, zIndex: 3 };
|
|
30
35
|
const agg = (f) => {
|
|
31
36
|
if (!f.aggregate) return "";
|
|
32
37
|
const vals = data.map(r => r[f.key]);
|
|
@@ -64,16 +69,16 @@ export function SmartTable({ fields = [], rows = [], title = "Grid view", toolba
|
|
|
64
69
|
</div>}
|
|
65
70
|
<div style={{ overflow: "auto", maxHeight: height }}>
|
|
66
71
|
<div style={grid}>
|
|
67
|
-
<span style={{ ...cellBase,
|
|
68
|
-
{fields.map(f => <span key={f.key} style={{ ...cellBase,
|
|
69
|
-
<span style={{ ...cellBase,
|
|
72
|
+
<span style={{ ...cellBase, ...stickyCorner, justifyContent: "center" }}></span>
|
|
73
|
+
{fields.map(f => <span key={f.key} style={{ ...cellBase, ...stickyTop, color: "var(--text-secondary)", fontWeight: "var(--weight-semibold)" }}><Icon name={typeIcon[f.type] || "type"} size={14} style={{ ...tierIcon, color: "var(--text-muted)" }} />{f.label}</span>)}
|
|
74
|
+
<span style={{ ...cellBase, ...stickyTop, justifyContent: "center", padding: 0 }}><IconButton icon="plus" muted label="Add field" /></span>
|
|
70
75
|
{data.map((row, r) => [
|
|
71
|
-
<span key={"n" + r} onMouseEnter={() => setHover(r)} onMouseLeave={() => setHover(-1)} style={{ ...cellBase, justifyContent: "center", color: "var(--text-muted)", fontFamily: "var(--font-sans)", fontVariantNumeric: "tabular-nums", fontSize: "var(--text-xs)", letterSpacing: 0,
|
|
76
|
+
<span key={"n" + r} onMouseEnter={() => setHover(r)} onMouseLeave={() => setHover(-1)} style={{ ...cellBase, ...stickyLeft, justifyContent: "center", color: "var(--text-muted)", fontFamily: "var(--font-sans)", fontVariantNumeric: "tabular-nums", fontSize: "var(--text-xs)", letterSpacing: 0, cursor: "pointer" }}>{hover === r ? <Icon name="maximize-2" size={14} style={{ ...tierIcon, color: "var(--action-primary)" }} /> : r + 1}</span>,
|
|
72
77
|
...fields.map(f => <span key={r + f.key} onMouseEnter={() => setHover(r)} onMouseLeave={() => setHover(-1)} onDoubleClick={() => { if (f.type === "text" || f.type === "number" || f.type === "date" || f.type === "url") { setEditing({ r, key: f.key }); setDraft(String(row[f.key] == null ? "" : row[f.key])); } }} style={{ ...cellBase, position: "relative", background: hover === r ? "var(--bg-inset)" : "transparent" }}>{renderCell(f, row, r)}</span>),
|
|
73
78
|
<span key={"a" + r} style={{ ...cellBase, background: hover === r ? "var(--bg-inset)" : "transparent" }}></span>,
|
|
74
79
|
])}
|
|
75
80
|
<button type="button" onClick={() => { const empty = {}; fields.forEach(f => empty[f.key] = f.type === "multiSelect" ? [] : f.type === "checkbox" ? false : ""); const next = [...data, empty]; setData(next); onChange && onChange(next); }} style={{ gridColumn: "1 / -1", display: "flex", alignItems: "center", gap: 6, height: rowH, padding: "0 var(--edge-pad)", border: "none", borderBottom: "1px solid var(--border-subtle)", background: "transparent", cursor: "pointer", color: "var(--text-secondary)", fontFamily: "var(--font-sans)", fontSize: "var(--control-text)", letterSpacing: "var(--control-tracking)", textAlign: "left" }} onMouseEnter={(e) => e.currentTarget.style.background = "var(--bg-inset)"} onMouseLeave={(e) => e.currentTarget.style.background = "transparent"}><Icon name="plus" size={13} />New</button>
|
|
76
|
-
<span style={{ ...cellBase, borderBottom: "none"
|
|
81
|
+
<span style={{ ...cellBase, ...stickyLeft, borderBottom: "none" }}></span>
|
|
77
82
|
{fields.map(f => <span key={"g" + f.key} style={{ ...cellBase, borderBottom: "none", background: "var(--bg-inset)", justifyContent: "flex-end", fontFamily: "var(--font-sans)", fontVariantNumeric: "tabular-nums", fontSize: "var(--text-xs)", letterSpacing: 0, color: "var(--text-secondary)" }}>{agg(f)}</span>)}
|
|
78
83
|
<span style={{ ...cellBase, borderBottom: "none", background: "var(--bg-inset)" }}></span>
|
|
79
84
|
</div>
|
|
@@ -11,8 +11,13 @@ const typeIcon = { text: 'type', longText: 'align-left', number: 'hash', select:
|
|
|
11
11
|
const props = defineProps({ fields: { type: Array, default: () => [] }, rows: { type: Array, default: () => [] }, title: { type: String, default: 'Grid view' }, toolbar: { type: Boolean, default: true }, height: [Number, String], rowHeight: [Number, String], density: String, defaultDensity: { type: String, default: 'default' }, size: { type: String, default: 'sm' }, style: Object })
|
|
12
12
|
// A size region that defaults to sm: a database grid is a dense surface, so rows are the sm bar height (36), cells and toolbar read the sm control text (12px, 13px in CJK) and the toolbar's buttons are 28px. Pass size="md" for a roomier grid.
|
|
13
13
|
// density: 'default' rows are --bar-h (36 / 40 / 48) with --cell-px; 'compact' rows are --control-h (28 / 32 / 40, the Spreadsheet's cell height) with the Spreadsheet's 8px padding (so at sm only the height changes). Header and footer follow. The toolbar's "Row height" menu switches it (emits density-change; v-model:density to control); rowHeight (a raw height) overrides density.
|
|
14
|
+
// Frozen edges (like Spreadsheet): the field header row is sticky to the top and the 40px row-number column to the left; the corner cell is sticky on both axes. Sticky cells keep the --bg-inset fill so body cells never show through, and the frozen edge is a --border-subtle hairline.
|
|
14
15
|
const DENSITY = { default: { h: 'var(--bar-h)', px: 'var(--cell-px)' }, compact: { h: 'var(--control-h)', px: '8px' } }
|
|
15
16
|
const tierIcon = { width: 'var(--control-icon)', height: 'var(--control-icon)' }
|
|
17
|
+
// Frozen edges — zIndex 1 (row-number column) < 2 (header row) < 3 (corner, both axes); the editing input sits inside a body cell, under them.
|
|
18
|
+
const stickyTop = { position: 'sticky', top: 0, zIndex: 2, background: 'var(--bg-inset)' }
|
|
19
|
+
const stickyLeft = { position: 'sticky', left: 0, zIndex: 1, background: 'var(--bg-inset)' }
|
|
20
|
+
const stickyCorner = { ...stickyTop, left: 0, zIndex: 3 }
|
|
16
21
|
const emit = defineEmits(['change', 'update:density', 'densityChange'])
|
|
17
22
|
const densityState = ref(props.defaultDensity)
|
|
18
23
|
const density = computed(() => DENSITY[props.density || densityState.value] ? (props.density || densityState.value) : 'default')
|
|
@@ -48,11 +53,11 @@ function agg(f) {
|
|
|
48
53
|
</div>
|
|
49
54
|
<div :style="{ overflow: 'auto', maxHeight: typeof height === 'number' ? height + 'px' : height }">
|
|
50
55
|
<div :style="{ display: 'grid', gridTemplateColumns: gridCols, width: 'fit-content', minWidth: '100%' }">
|
|
51
|
-
<span :style="{ ...cellBase, height: rowH,
|
|
52
|
-
<span v-for="f in fields" :key="f.key" :style="{ ...cellBase, height: rowH,
|
|
53
|
-
<span :style="{ ...cellBase, height: rowH,
|
|
56
|
+
<span :style="{ ...cellBase, height: rowH, ...stickyCorner }" />
|
|
57
|
+
<span v-for="f in fields" :key="f.key" :style="{ ...cellBase, height: rowH, ...stickyTop, color: 'var(--text-secondary)', fontWeight: 'var(--weight-semibold)' }"><Icon :name="typeIcon[f.type] || 'type'" :size="14" :style="{ ...tierIcon, color: 'var(--text-muted)' }" />{{ f.label }}</span>
|
|
58
|
+
<span :style="{ ...cellBase, height: rowH, ...stickyTop, justifyContent: 'center', padding: 0 }"><IconButton icon="plus" muted label="Add field" /></span>
|
|
54
59
|
<template v-for="(row, r) in data" :key="r">
|
|
55
|
-
<span @mouseenter="hover = r" @mouseleave="hover = -1" :style="{ ...cellBase, height: rowH, justifyContent: 'center', color: 'var(--text-muted)', fontFamily: 'var(--font-sans)', fontVariantNumeric: 'tabular-nums', fontSize: 'var(--text-xs)', letterSpacing: 0,
|
|
60
|
+
<span @mouseenter="hover = r" @mouseleave="hover = -1" :style="{ ...cellBase, height: rowH, ...stickyLeft, justifyContent: 'center', color: 'var(--text-muted)', fontFamily: 'var(--font-sans)', fontVariantNumeric: 'tabular-nums', fontSize: 'var(--text-xs)', letterSpacing: 0, cursor: 'pointer' }">
|
|
56
61
|
<Icon v-if="hover === r" name="maximize-2" :size="14" :style="{ ...tierIcon, color: 'var(--action-primary)' }" /><template v-else>{{ r + 1 }}</template>
|
|
57
62
|
</span>
|
|
58
63
|
<span v-for="f in fields" :key="r + f.key" @mouseenter="hover = r" @mouseleave="hover = -1" @dblclick="startEdit(r, f, row)" :style="{ ...cellBase, height: rowH, position: 'relative', background: hover === r ? 'var(--bg-inset)' : 'transparent' }">
|
|
@@ -69,7 +74,7 @@ function agg(f) {
|
|
|
69
74
|
<span :style="{ ...cellBase, height: rowH, background: hover === r ? 'var(--bg-inset)' : 'transparent' }" />
|
|
70
75
|
</template>
|
|
71
76
|
<button type="button" @click="addRow" class="kb-st-new" :style="{ gridColumn: '1 / -1', height: rowH }"><Icon name="plus" :size="14" :style="tierIcon" />New</button>
|
|
72
|
-
<span :style="{ ...cellBase, height: rowH, borderBottom: 'none'
|
|
77
|
+
<span :style="{ ...cellBase, height: rowH, ...stickyLeft, borderBottom: 'none' }" />
|
|
73
78
|
<span v-for="f in fields" :key="'g' + f.key" :style="{ ...cellBase, height: rowH, borderBottom: 'none', background: 'var(--bg-inset)', justifyContent: 'flex-end', fontFamily: 'var(--font-sans)', fontVariantNumeric: 'tabular-nums', fontSize: 'var(--text-xs)', letterSpacing: 0, color: 'var(--text-secondary)' }">{{ agg(f) }}</span>
|
|
74
79
|
<span :style="{ ...cellBase, height: rowH, borderBottom: 'none', background: 'var(--bg-inset)' }" />
|
|
75
80
|
</div>
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
// Keybricks icon set — the source file uses Lucide stroke glyphs (24-grid, stroke 2,
|
|
3
3
|
// round caps/joins, currentColor) rendered at 14/16px. Path data below is from the
|
|
4
|
-
// public Lucide set, matching the glyphs used across Keyfunc UI v8, plus
|
|
5
|
-
// glyphs (event …
|
|
4
|
+
// public Lucide set, matching the glyphs used across Keyfunc UI v8, plus the Keybricks
|
|
5
|
+
// glyphs (event … ai-sparkles, and the business set: dimension-*, rules-*, task-* …) drawn to the same rules.
|
|
6
6
|
export const ICON_PATHS = {
|
|
7
7
|
search: '<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',
|
|
8
8
|
bell: '<path d="M10.268 21a2 2 0 0 0 3.464 0"/><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"/>',
|
|
9
|
-
sparkles: '<path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/><path d="M20 3v4"/><path d="M22 5h-4"/><path d="M4 17v2"/><path d="M5 18H3"/>',
|
|
10
9
|
"panel-left": '<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M9 3v18"/>',
|
|
11
10
|
house: '<path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/><path d="M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>',
|
|
12
11
|
file: '<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',
|
|
@@ -23,7 +22,8 @@ export const ICON_PATHS = {
|
|
|
23
22
|
"settings-2": '<path d="M20 7h-9"/><path d="M14 17H5"/><circle cx="17" cy="17" r="3"/><circle cx="7" cy="7" r="3"/>',
|
|
24
23
|
moon: '<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/>',
|
|
25
24
|
"circle-help": '<circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/>',
|
|
26
|
-
|
|
25
|
+
model: '<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/>',
|
|
26
|
+
box: '<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/>', // legacy alias of model
|
|
27
27
|
workflow: '<rect width="8" height="8" x="3" y="3" rx="2"/><path d="M7 11v4a2 2 0 0 0 2 2h4"/><rect width="8" height="8" x="13" y="13" rx="2"/>',
|
|
28
28
|
shield: '<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>',
|
|
29
29
|
"refresh-cw": '<path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/>',
|
|
@@ -86,10 +86,86 @@ export const ICON_PATHS = {
|
|
|
86
86
|
"copy-data": '<path d="M14 22h5a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-5"/><path d="m11 16 4-4-4-4"/><path d="M3 22v-6a4 4 0 0 1 4-4h8"/>',
|
|
87
87
|
"task-execution": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="M8 14h8"/><path d="m13 11 3 3-3 3"/>',
|
|
88
88
|
"time-future": '<path d="M20 6A10 10 0 1 0 22 12"/><path d="M12 7v5h5"/><path d="M21 2v5h-5"/>',
|
|
89
|
-
"time-restatement": '<path d="
|
|
89
|
+
"time-restatement": '<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/>',
|
|
90
90
|
// AI glyphs (2.3.0) — traced from the two reference glyphs, redrawn to core rules (stroke 2, no fill, integer endpoints, >=4 between separate elements)
|
|
91
91
|
ai: '<path d="M9 4H6a4 4 0 0 0-4 4v10a4 4 0 0 0 4 4h10a4 4 0 0 0 4-4v-3"/><path d="M16 2c1.2 3 3 4.8 6 6c-3 1.2-4.8 3-6 6c-1.2-3-3-4.8-6-6c3-1.2 4.8-3 6-6Z"/><path d="M9 12c.6 1.5 1.5 2.4 3 3c-1.5.6-2.4 1.5-3 3c-.6-1.5-1.5-2.4-3-3c1.5-.6 2.4-1.5 3-3Z"/>',
|
|
92
92
|
"ai-sparkles": '<path d="M9 2c1.4 3.5 3.5 5.6 7 7c-3.5 1.4-5.6 3.5-7 7c-1.4-3.5-3.5-5.6-7-7c3.5-1.4 5.6-3.5 7-7Z"/><path d="M17 13c.8 2 2 3.2 4 4c-2 .8-3.2 2-4 4c-.8-2-2-3.2-4-4c2-.8 3.2-2 4-4Z"/>',
|
|
93
|
+
// Keybricks business glyphs (2.4.6) — dimensions, modules, rules-*, task-*; drawn to core rules or taken from Lucide
|
|
94
|
+
"dimension-account": '<path d="M12 7v14"/><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/><path d="M5 8h3"/><path d="M5 11h3"/><path d="M5 14h3"/><path d="M17 6.5v1"/><path d="M17 12.5v1"/><path d="M18.5 7.5h-2a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5h-2"/>',
|
|
95
|
+
"dimension-audit": '<path d="M11.1 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.589 3.588A2.4 2.4 0 0 1 20 8v3.25"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><path d="m21 22-2.88-2.88"/><circle cx="16" cy="17" r="3"/>',
|
|
96
|
+
"dimension-currency": '<path d="M7 2v1.5"/><path d="M7 10.5V12"/><path d="M10 3.5H5.25a1.75 1.75 0 0 0 0 3.5h3.5a1.75 1.75 0 0 1 0 3.5H4"/><path d="M13.5 12.5 17 17l3.5-4.5"/><path d="M17 17v4.5"/><path d="M14 18.5h6"/><path d="M14 3.5h3.5a2 2 0 0 1 2 2V9"/><path d="m18 7.5 1.5 1.5 1.5-1.5"/><path d="M10 20.5H6.5a2 2 0 0 1-2-2V15"/><path d="m3 16.5 1.5-1.5 1.5 1.5"/>',
|
|
97
|
+
"dimension-custom_default": '<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/>',
|
|
98
|
+
"dimension-entity": '<path d="M2 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18"/><path d="M14 10h6a2 2 0 0 1 2 2v10"/><path d="M1 22h22"/><path d="M6 6h.01"/><path d="M10 6h.01"/><path d="M6 10h.01"/><path d="M10 10h.01"/><path d="M6 14h.01"/><path d="M10 14h.01"/><path d="M18 14h.01"/><path d="M18 18h.01"/><path d="M6 22v-3h4v3"/>',
|
|
99
|
+
"dimension-group": '<rect x="16" y="16" width="6" height="6" rx="1"/><rect x="2" y="16" width="6" height="6" rx="1"/><rect x="9" y="2" width="6" height="6" rx="1"/><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"/><path d="M12 12V8"/>',
|
|
100
|
+
"dimension-intercompany": '<path d="M8 3 4 7l4 4"/><path d="M4 7h16"/><path d="m16 21 4-4-4-4"/><path d="M20 17H4"/>',
|
|
101
|
+
"dimension-subtable": '<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/><path d="M9 9v12"/><path d="M15 9v12"/>',
|
|
102
|
+
"dimension-time": '<path d="M16 14v2.2l1.6 1"/><path d="M16 2v4"/><path d="M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"/><path d="M3 10h5"/><path d="M8 2v4"/><circle cx="16" cy="16" r="6"/>',
|
|
103
|
+
"dimension-version": '<line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/>',
|
|
104
|
+
"version-exempt": '<g transform="translate(.35 .35) scale(.8)" stroke-width="2.5"><line x1="6" y1="3" x2="6" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></g><path d="m16.25 16.25 5 5"/><path d="m21.25 16.25-5 5"/>',
|
|
105
|
+
"model-exempt": '<path d="M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/><path d="m17 13 5 5"/><path d="m22 13-5 5"/>',
|
|
106
|
+
modeling: '<rect width="20" height="15" x="2" y="2" rx="2"/><path d="M8 21h8"/><path d="M12 17v4"/><path d="M12 5 16 7.25v4.5L12 14l-4-2.25v-4.5Z"/><path d="m8 7.25 4 2.25 4-2.25"/><path d="M12 9.5v4.5"/>',
|
|
107
|
+
restatement: '<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/>',
|
|
108
|
+
review: '<path d="M11.1 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.589 3.588A2.4 2.4 0 0 1 20 8v3.25"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><path d="M12 17.5a5.6 5.6 0 0 1 10 0a5.6 5.6 0 0 1-10 0"/><circle cx="17" cy="17.5" r=".75"/>',
|
|
109
|
+
admin: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/>',
|
|
110
|
+
analytics: '<rect width="20" height="14" x="2" y="3" rx="2"/><path d="M8 21h8"/><path d="M12 17v4"/><path d="M6 7h4"/><path d="M6 10h4"/><path d="M6 13h2"/><path d="m13 13 2-3 2 1 2-4"/>',
|
|
111
|
+
automation: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><polygon points="10.5 9 15 12 10.5 15 10.5 9"/>',
|
|
112
|
+
"data_integration": '<path d="m17 18-1.535 1.605a5 5 0 0 1-8-1.5"/><path d="M17 22v-4h-4"/><path d="M20.996 15.251A4.5 4.5 0 0 0 17.495 8h-1.79a7 7 0 1 0-12.709 5.607"/><path d="M7 10v4h4"/><path d="m7 14 1.535-1.605a5 5 0 0 1 8 1.5"/>',
|
|
113
|
+
"reconciliation-entity": '<path d="M2 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18"/><path d="M14 10h6a2 2 0 0 1 2 2v10"/><path d="M1 22h22"/><path d="M6 6h.01"/><path d="M10 6h.01"/><path d="M6 10h.01"/><path d="M10 10h.01"/><path d="M6 14h.01"/><path d="M10 14h.01"/><path d="M18 14h.01"/><path d="M18 18h.01"/><path d="M6 22v-3h4v3"/>',
|
|
114
|
+
"reconciliation-balance": '<path d="M13.744 17.736a6 6 0 1 1-7.48-7.48"/><path d="M15 6h1v4"/><path d="m6.134 14.768.866-.5 2 3.464"/><circle cx="16" cy="8" r="6"/>',
|
|
115
|
+
scenario: '<circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M13 6h3a2 2 0 0 1 2 2v7"/><path d="M11 18H8a2 2 0 0 1-2-2V9"/>',
|
|
116
|
+
report: '<path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="m19 9-5 5-4-4-3 3"/>',
|
|
117
|
+
spreadsheet: '<path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"/>',
|
|
118
|
+
sheet: '<path d="M12 3v18"/><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/>',
|
|
119
|
+
script: '<path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/>',
|
|
120
|
+
"workflow_group": '<path d="M3 9.5v-5A1.5 1.5 0 0 1 4.5 3h1.7a1 1 0 0 1 .8.4L8.2 5h1.3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-5A1.5 1.5 0 0 1 3 9.5Z"/><path d="M7 11v4a2 2 0 0 0 2 2h4"/><rect width="8" height="8" x="13" y="13" rx="2"/>',
|
|
121
|
+
"model_interaction": '<path d="M7 3 11 5v4L7 11l-4-2v-4Z"/><path d="M17 13 21 15v4L17 21l-4-2v-4Z"/><path d="M14 3h4a2 2 0 0 1 2 2v4"/><path d="m18 7 2 2 2-2"/><path d="M10 21H6a2 2 0 0 1-2-2v-4"/><path d="m2 17 2-2 2 2"/>',
|
|
122
|
+
announcement: '<path d="M4 20V4a2 2 0 0 1 2-2h8l6 6v1"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M4 20a2 2 0 0 0 2 2h3"/><g transform="translate(10.6 9.3) scale(.62)" stroke-width="3.23"><path d="M4.5 6H10l7-3a1 1 0 0 1 1.4.92v11.16a1 1 0 0 1-1.4.92L10 13v5a2.5 2.5 0 0 1-5 0v-5h-.5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2Z"/></g>',
|
|
123
|
+
approval: '<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z"/><path d="m9 12 2 2 4-4"/>',
|
|
124
|
+
"data-import": '<ellipse cx="12" cy="13" rx="7" ry="2.5"/><path d="M5 13v6a7 2.5 0 0 0 14 0v-6"/><path d="M12 2v6"/><path d="m9 5 3 3 3-3"/>',
|
|
125
|
+
"data-export": '<ellipse cx="12" cy="13" rx="7" ry="2.5"/><path d="M5 13v6a7 2.5 0 0 0 14 0v-6"/><path d="M12 8V2"/><path d="m9 5 3-3 3 3"/>',
|
|
126
|
+
execution: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="m9.5 12 1.75 1.75L14.5 10.5"/>',
|
|
127
|
+
submission: '<path d="M2 7h11V3l9 9-9 9v-4H2Z"/><path d="m5.5 12 2 2 4-4"/>',
|
|
128
|
+
"expense_control": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="M12 7.5v1"/><path d="M12 15.5v1"/><path d="M14 9h-2.75a1.5 1.5 0 0 0 0 3h1.5a1.5 1.5 0 0 1 0 3H10"/>',
|
|
129
|
+
"expense_control-aggregate": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="m10.5 8.5 1.5 1.5 1.5-1.5"/><path d="m10.5 15.5 1.5-1.5 1.5 1.5"/><path d="m8.5 10.5 1.5 1.5-1.5 1.5"/><path d="m15.5 10.5-1.5 1.5 1.5 1.5"/>',
|
|
130
|
+
"expense_control-limit": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="M10 8.5h4"/><path d="M12 15.5V11"/><path d="m10 13 2-2 2 2"/>',
|
|
131
|
+
"expense_control-enumerated": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="M9 10h.01"/><path d="M12 10h3"/><path d="M9 14h.01"/><path d="M12 14h3"/>',
|
|
132
|
+
"expense_control-quota": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="m14.5 9.5-5 5"/><path d="M9.5 9.5h.01"/><path d="M14.5 14.5h.01"/>',
|
|
133
|
+
"profile-access": '<path d="M20 11v6"/><path d="M20 13h2"/><path d="M3 21v-2a4 4 0 0 1 4-4h6a4 4 0 0 1 2.072.578"/><circle cx="10" cy="7" r="4"/><circle cx="20" cy="19" r="2"/>',
|
|
134
|
+
usergroup: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><path d="M16 3.128a4 4 0 0 1 0 7.744"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><circle cx="9" cy="7" r="4"/>',
|
|
135
|
+
user: '<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',
|
|
136
|
+
"profile-system": '<path d="M10 15H6a4 4 0 0 0-4 4v2"/><path d="m14.305 16.53.923-.382"/><path d="m15.228 13.852-.923-.383"/><path d="m16.852 12.228-.383-.923"/><path d="m16.852 17.772-.383.924"/><path d="m19.148 12.228.383-.923"/><path d="m19.53 18.696-.382-.924"/><path d="m20.772 13.852.924-.383"/><path d="m20.772 16.148.924.383"/><circle cx="18" cy="15" r="3"/><circle cx="9" cy="7" r="4"/>',
|
|
137
|
+
"rules-initialization": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.5v4"/><path d="M10.25 7.25a3.75 3.75 0 1 0 4.5 0"/>',
|
|
138
|
+
"rules-subsidy": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M10.5 5.5v.75"/><path d="M10.5 12.75v.75"/><path d="M12 7h-2a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5H9"/><path d="M15.5 8v3"/><path d="M14 9.5h3"/>',
|
|
139
|
+
"rules-transfer": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="m16 3 4 4-4 4"/><path d="M20 7H4"/><path d="m8 21-4-4 4-4"/><path d="M4 17h16"/></g>',
|
|
140
|
+
"rules-import": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="M12 17V3"/><path d="m6 11 6 6 6-6"/><path d="M19 21H5"/></g>',
|
|
141
|
+
"rules-reclassification": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="M16 3h5v5"/><path d="M8 3H3v5"/><path d="M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3"/><path d="m15 9 6-6"/></g>',
|
|
142
|
+
"rules-allocation": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.5v3"/><path d="M9 13.5v-3a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3"/><path d="M12.5 8.5v5"/>',
|
|
143
|
+
"rules-account": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M9 7.5h.01"/><path d="M11.5 7.5H16"/><path d="M9 11.5h.01"/><path d="M11.5 11.5H16"/>',
|
|
144
|
+
"rules-carryforward": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="m15 17 5-5-5-5"/><path d="M4 18v-2a4 4 0 0 1 4-4h12"/></g>',
|
|
145
|
+
"rules-compound": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.5 16 7.5v4l-3.5 2-3.5-2v-4Z"/>',
|
|
146
|
+
"rules-currency": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5v1"/><path d="M12.5 13v1"/><path d="M14.5 6.5h-2.75a1.5 1.5 0 0 0 0 3h1.5a1.5 1.5 0 0 1 0 3H10.5"/>',
|
|
147
|
+
"rules-deduction": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M8.5 9.5h2.5"/><path d="M15 5.5v.75"/><path d="M15 12.75v.75"/><path d="M16.25 6.75H14.5a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5h-1.75"/>',
|
|
148
|
+
"rules-depreciation": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="m8 7.5 3 3 2.25-2.25L17 12"/>',
|
|
149
|
+
"rules-eliminations_n_adjustments": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.25v4.5"/><path d="M10.25 7.5h4.5"/><path d="M10.25 13.25h4.5"/>',
|
|
150
|
+
"rules-general": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M9 6.5h7"/><path d="M9 9.5h7"/><path d="M9 12.5h4"/>',
|
|
151
|
+
"rules-intercompany": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M8.5 14V6.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V14"/><path d="M13.5 9.5H16a1 1 0 0 1 1 1V14"/><path d="M7.5 14h10"/><path d="M11 8.5h.01"/><path d="M11 11h.01"/>',
|
|
152
|
+
"rules-journal_matching": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M8.5 6h8"/><path d="M8.5 8.75h4"/><path d="m11 12 2 2 3.5-3.5"/>',
|
|
153
|
+
"rules-method": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><circle cx="9.5" cy="6" r="1"/><path d="M11 6h2a1.75 1.75 0 0 1 0 3.5h-1a1.75 1.75 0 0 0 0 3.5h4"/><path d="m14.5 11.5 1.5 1.5-1.5 1.5"/>',
|
|
154
|
+
"rules-method_coefficient": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M10 5.5H8.5v8H10"/><path d="M15 5.5h1.5v8H15"/><path d="m11.25 8.25 2.5 2.5"/><path d="m13.75 8.25-2.5 2.5"/>',
|
|
155
|
+
"rules-validation": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="m9.5 9.5 2 2 4-4"/>',
|
|
156
|
+
"rules-shared": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><circle cx="15.3" cy="6.8" r=".75"/><circle cx="9.7" cy="10" r=".75"/><circle cx="15.3" cy="13.2" r=".75"/><path d="m11.35 9.06 2.3-1.32"/><path d="m11.35 10.94 2.3 1.32"/>',
|
|
157
|
+
"task-manual": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="M14.5 9.5 16.5 11.5 11 17H9v-2Z"/>',
|
|
158
|
+
"task-reclassification": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="M16 3h5v5"/><path d="M8 3H3v5"/><path d="M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3"/><path d="m15 9 6-6"/></g></g>',
|
|
159
|
+
"task-account": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M9 7.5h.01"/><path d="M11.5 7.5H16"/><path d="M9 11.5h.01"/><path d="M11.5 11.5H16"/></g>',
|
|
160
|
+
"task-allocation": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M12.5 5.5v3"/><path d="M9 13.5v-3a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3"/><path d="M12.5 8.5v5"/></g>',
|
|
161
|
+
"task-carryforward": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="m15 17 5-5-5-5"/><path d="M4 18v-2a4 4 0 0 1 4-4h12"/></g></g>',
|
|
162
|
+
"task-currency": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M12.5 5v1"/><path d="M12.5 13v1"/><path d="M14.5 6.5h-2.75a1.5 1.5 0 0 0 0 3h1.5a1.5 1.5 0 0 1 0 3H10.5"/></g>',
|
|
163
|
+
"task-deduction": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M8.5 9.5h2.5"/><path d="M15 5.5v.75"/><path d="M15 12.75v.75"/><path d="M16.25 6.75H14.5a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5h-1.75"/></g>',
|
|
164
|
+
"task-depreciation": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="m8 7.5 3 3 2.25-2.25L17 12"/></g>',
|
|
165
|
+
"task-eliminations_n_adjustments": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M12.5 5.25v4.5"/><path d="M10.25 7.5h4.5"/><path d="M10.25 13.25h4.5"/></g>',
|
|
166
|
+
"task-etl": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><ellipse cx="12" cy="10.5" rx="3.5" ry="1.5"/><path d="M8.5 10.5v6c0 .83 1.57 1.5 3.5 1.5s3.5-.67 3.5-1.5v-6"/><path d="M8.5 13.5c0 .83 1.57 1.5 3.5 1.5s3.5-.67 3.5-1.5"/>',
|
|
167
|
+
"task-shared": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><circle cx="15.3" cy="6.8" r=".75"/><circle cx="9.7" cy="10" r=".75"/><circle cx="15.3" cy="13.2" r=".75"/><path d="m11.35 9.06 2.3-1.32"/><path d="m11.35 10.94 2.3 1.32"/></g>',
|
|
168
|
+
"task-intercompany": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M8.5 14V6.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V14"/><path d="M13.5 9.5H16a1 1 0 0 1 1 1V14"/><path d="M7.5 14h10"/><path d="M11 8.5h.01"/><path d="M11 11h.01"/></g>',
|
|
93
169
|
};
|
|
94
170
|
|
|
95
171
|
import { FEATHER_PATHS } from "./feather-paths.js";
|
|
@@ -7,4 +7,4 @@ Stroke icon component embedding the Lucide glyphs used across Keybricks; use for
|
|
|
7
7
|
|
|
8
8
|
Sizes in the product: 14 (dense chrome), 16 (nav/buttons), 18 (palette tiles), 22 (node tiles). Color inherits `currentColor`. Categories pair hue + tint bg: source `database/table/layers/grid-3x3`, join `text-search/shuffle`, transform `sliders-horizontal/split/arrow-right-left/menu/funnel/chart-no-axes-column/trending-up/code`, merge `database/merge`, output `table/layers/grid-3x3`.
|
|
9
9
|
|
|
10
|
-
Keybricks glyphs (drawn to the same grid rules): modules `reconciliation`, `consolidation`, `journal`, `event`, `view-tree`; actions `drilldown`, `add-below`, `copy-data`, `task-execution`, `time-future`, `time-restatement`. For hierarchy use `layers`; for change use `repeat`.
|
|
10
|
+
Keybricks glyphs (drawn to the same grid rules): modules `reconciliation`, `consolidation`, `journal`, `event`, `view-tree`; actions `drilldown`, `add-below`, `copy-data`, `task-execution`, `time-future`, `time-restatement`. Business glyphs (named as in the product): `dimension-*` (account, audit, currency, custom_default, entity, group, intercompany, subtable, time, version), modules (`modeling`, `analytics`, `automation`, `execution`, `approval`, `submission`, `announcement`, `data-import`, `data-export`, `expense_control*`, `profile-access`, `profile-system`, `user`, `usergroup`, …), `rules-*` (sheet frame) and `task-*` (clipboard frame). Search the gallery index for tags in English or Chinese. For hierarchy use `layers`; for change use `repeat`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
/** Full Lucide icon library (lucide.dev, ISC) — 1,700+ stroke glyphs in the core Icon style, loaded once from a pinned CDN build (lucide-static 1.61.0). Prefer Icon when the glyph is in the core set. */
|
|
4
|
+
export interface LucideProps {
|
|
5
|
+
/** Lucide icon id, e.g. "calendar-clock", "file-chart-pie" */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Rendered size in px (default 16) */
|
|
8
|
+
size?: number;
|
|
9
|
+
/** Stroke width on the 24-grid (default 2) */
|
|
10
|
+
strokeWidth?: number;
|
|
11
|
+
/** Overrides currentColor */
|
|
12
|
+
color?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
style?: React.CSSProperties;
|
|
15
|
+
}
|
|
16
|
+
export declare function Lucide(props: LucideProps): JSX.Element;
|
|
17
|
+
/** Pinned lucide-static version the CDN URL resolves to. */
|
|
18
|
+
export declare const LUCIDE_VERSION: string;
|
|
19
|
+
/** Serve the set from your own copy of lucide-static's icon-nodes.json (offline / intranet). Call before the first icon renders. */
|
|
20
|
+
export declare function setLucideSource(url: string): void;
|
|
21
|
+
/** Fetch the set ahead of first render. Resolves to { name: innerSvgMarkup }. */
|
|
22
|
+
export declare function loadLucide(): Promise<Record<string, string>>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { lucideBody, lucideReady, onLucideReady } from "./lucide-loader.js";
|
|
3
|
+
export { LUCIDE_VERSION, setLucideSource, loadLucide } from "./lucide-loader.js";
|
|
4
|
+
|
|
5
|
+
/** Full Lucide icon library (lucide.dev, ISC) — 1,700+ stroke glyphs, same 24-grid / stroke 2 / round-cap style as the core Icon set. Loaded once from a pinned CDN build (lucide-static 1.61.0); renders an empty box of the right size until it arrives. name = Lucide id, e.g. "calendar-clock". Prefer Icon when the glyph is in the core set. */
|
|
6
|
+
export function Lucide({ name, size = 16, strokeWidth = 2, color, style, className }) {
|
|
7
|
+
const [, tick] = React.useState(0);
|
|
8
|
+
React.useEffect(() => { if (!lucideReady()) onLucideReady(() => tick(t => t + 1)); }, []);
|
|
9
|
+
return (
|
|
10
|
+
<svg
|
|
11
|
+
width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
|
12
|
+
strokeWidth={strokeWidth} strokeLinecap="round" strokeLinejoin="round"
|
|
13
|
+
aria-hidden="true" className={className}
|
|
14
|
+
style={{ display: "block", flexShrink: 0, color, ...style }}
|
|
15
|
+
dangerouslySetInnerHTML={{ __html: lucideBody(name) }}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
// Full Lucide icon library (lucide.dev, ISC) — loaded once from a pinned CDN build via lucide-loader.js. name = Lucide id.
|
|
3
|
+
import { ref, onMounted } from 'vue'
|
|
4
|
+
import { lucideBody, lucideReady, onLucideReady } from './lucide-loader.js'
|
|
5
|
+
const props = defineProps({ name: String, size: { type: Number, default: 16 }, strokeWidth: { type: Number, default: 2 }, color: String, style: Object })
|
|
6
|
+
const ready = ref(lucideReady())
|
|
7
|
+
onMounted(() => { if (!ready.value) onLucideReady(() => { ready.value = true }) })
|
|
8
|
+
</script>
|
|
9
|
+
<template>
|
|
10
|
+
<svg :width="size" :height="size" viewBox="0 0 24 24" fill="none" stroke="currentColor" :stroke-width="strokeWidth" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"
|
|
11
|
+
:style="{ display: 'block', flexShrink: 0, color, ...style }" v-html="ready ? lucideBody(name) : ''" />
|
|
12
|
+
</template>
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export const VUE_ICON_PATHS = {
|
|
2
2
|
search: '<circle cx="11" cy="11" r="8"/><path d="m21 21-4.3-4.3"/>',
|
|
3
3
|
bell: '<path d="M10.268 21a2 2 0 0 0 3.464 0"/><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"/>',
|
|
4
|
-
sparkles: '<path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/><path d="M20 3v4"/><path d="M22 5h-4"/><path d="M4 17v2"/><path d="M5 18H3"/>',
|
|
5
4
|
"panel-left": '<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M9 3v18"/>',
|
|
6
5
|
house: '<path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"/><path d="M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>',
|
|
7
6
|
file: '<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',
|
|
@@ -18,7 +17,8 @@ export const VUE_ICON_PATHS = {
|
|
|
18
17
|
"settings-2": '<path d="M20 7h-9"/><path d="M14 17H5"/><circle cx="17" cy="17" r="3"/><circle cx="7" cy="7" r="3"/>',
|
|
19
18
|
moon: '<path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"/>',
|
|
20
19
|
"circle-help": '<circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/>',
|
|
21
|
-
|
|
20
|
+
model: '<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/>',
|
|
21
|
+
box: '<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/>', // legacy alias of model
|
|
22
22
|
workflow: '<rect width="8" height="8" x="3" y="3" rx="2"/><path d="M7 11v4a2 2 0 0 0 2 2h4"/><rect width="8" height="8" x="13" y="13" rx="2"/>',
|
|
23
23
|
shield: '<path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/>',
|
|
24
24
|
"refresh-cw": '<path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/><path d="M21 3v5h-5"/><path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/><path d="M8 16H3v5"/>',
|
|
@@ -81,8 +81,84 @@ export const VUE_ICON_PATHS = {
|
|
|
81
81
|
"copy-data": '<path d="M14 22h5a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2h-5"/><path d="m11 16 4-4-4-4"/><path d="M3 22v-6a4 4 0 0 1 4-4h8"/>',
|
|
82
82
|
"task-execution": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="M8 14h8"/><path d="m13 11 3 3-3 3"/>',
|
|
83
83
|
"time-future": '<path d="M20 6A10 10 0 1 0 22 12"/><path d="M12 7v5h5"/><path d="M21 2v5h-5"/>',
|
|
84
|
-
"time-restatement": '<path d="
|
|
84
|
+
"time-restatement": '<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/>',
|
|
85
85
|
// AI glyphs (2.3.0) — traced from the two reference glyphs, redrawn to core rules (stroke 2, no fill, integer endpoints, >=4 between separate elements)
|
|
86
86
|
ai: '<path d="M9 4H6a4 4 0 0 0-4 4v10a4 4 0 0 0 4 4h10a4 4 0 0 0 4-4v-3"/><path d="M16 2c1.2 3 3 4.8 6 6c-3 1.2-4.8 3-6 6c-1.2-3-3-4.8-6-6c3-1.2 4.8-3 6-6Z"/><path d="M9 12c.6 1.5 1.5 2.4 3 3c-1.5.6-2.4 1.5-3 3c-.6-1.5-1.5-2.4-3-3c1.5-.6 2.4-1.5 3-3Z"/>',
|
|
87
87
|
"ai-sparkles": '<path d="M9 2c1.4 3.5 3.5 5.6 7 7c-3.5 1.4-5.6 3.5-7 7c-1.4-3.5-3.5-5.6-7-7c3.5-1.4 5.6-3.5 7-7Z"/><path d="M17 13c.8 2 2 3.2 4 4c-2 .8-3.2 2-4 4c-.8-2-2-3.2-4-4c2-.8 3.2-2 4-4Z"/>',
|
|
88
|
+
// Keybricks business glyphs (2.4.6) — dimensions, modules, rules-*, task-*; drawn to core rules or taken from Lucide
|
|
89
|
+
"dimension-account": '<path d="M12 7v14"/><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"/><path d="M5 8h3"/><path d="M5 11h3"/><path d="M5 14h3"/><path d="M17 6.5v1"/><path d="M17 12.5v1"/><path d="M18.5 7.5h-2a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5h-2"/>',
|
|
90
|
+
"dimension-audit": '<path d="M11.1 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.589 3.588A2.4 2.4 0 0 1 20 8v3.25"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><path d="m21 22-2.88-2.88"/><circle cx="16" cy="17" r="3"/>',
|
|
91
|
+
"dimension-currency": '<path d="M7 2v1.5"/><path d="M7 10.5V12"/><path d="M10 3.5H5.25a1.75 1.75 0 0 0 0 3.5h3.5a1.75 1.75 0 0 1 0 3.5H4"/><path d="M13.5 12.5 17 17l3.5-4.5"/><path d="M17 17v4.5"/><path d="M14 18.5h6"/><path d="M14 3.5h3.5a2 2 0 0 1 2 2V9"/><path d="m18 7.5 1.5 1.5 1.5-1.5"/><path d="M10 20.5H6.5a2 2 0 0 1-2-2V15"/><path d="m3 16.5 1.5-1.5 1.5 1.5"/>',
|
|
92
|
+
"dimension-custom_default": '<path d="M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/>',
|
|
93
|
+
"dimension-entity": '<path d="M2 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18"/><path d="M14 10h6a2 2 0 0 1 2 2v10"/><path d="M1 22h22"/><path d="M6 6h.01"/><path d="M10 6h.01"/><path d="M6 10h.01"/><path d="M10 10h.01"/><path d="M6 14h.01"/><path d="M10 14h.01"/><path d="M18 14h.01"/><path d="M18 18h.01"/><path d="M6 22v-3h4v3"/>',
|
|
94
|
+
"dimension-group": '<rect x="16" y="16" width="6" height="6" rx="1"/><rect x="2" y="16" width="6" height="6" rx="1"/><rect x="9" y="2" width="6" height="6" rx="1"/><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"/><path d="M12 12V8"/>',
|
|
95
|
+
"dimension-intercompany": '<path d="M8 3 4 7l4 4"/><path d="M4 7h16"/><path d="m16 21 4-4-4-4"/><path d="M20 17H4"/>',
|
|
96
|
+
"dimension-subtable": '<rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/><path d="M9 9v12"/><path d="M15 9v12"/>',
|
|
97
|
+
"dimension-time": '<path d="M16 14v2.2l1.6 1"/><path d="M16 2v4"/><path d="M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5"/><path d="M3 10h5"/><path d="M8 2v4"/><circle cx="16" cy="16" r="6"/>',
|
|
98
|
+
"dimension-version": '<line x1="6" y1="3" x2="6" y2="15"/><circle cx="18" cy="6" r="3"/><circle cx="6" cy="18" r="3"/><path d="M18 9a9 9 0 0 1-9 9"/>',
|
|
99
|
+
"version-exempt": '<g transform="translate(.35 .35) scale(.8)" stroke-width="2.5"><line x1="6" y1="3" x2="6" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></g><path d="m16.25 16.25 5 5"/><path d="m21.25 16.25-5 5"/>',
|
|
100
|
+
"model-exempt": '<path d="M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14"/><path d="m3.3 7 8.7 5 8.7-5"/><path d="M12 22V12"/><path d="m17 13 5 5"/><path d="m22 13-5 5"/>',
|
|
101
|
+
modeling: '<rect width="20" height="15" x="2" y="2" rx="2"/><path d="M8 21h8"/><path d="M12 17v4"/><path d="M12 5 16 7.25v4.5L12 14l-4-2.25v-4.5Z"/><path d="m8 7.25 4 2.25 4-2.25"/><path d="M12 9.5v4.5"/>',
|
|
102
|
+
restatement: '<path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"/><path d="M3 3v5h5"/><path d="M12 7v5l4 2"/>',
|
|
103
|
+
review: '<path d="M11.1 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.589 3.588A2.4 2.4 0 0 1 20 8v3.25"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><path d="M12 17.5a5.6 5.6 0 0 1 10 0a5.6 5.6 0 0 1-10 0"/><circle cx="17" cy="17.5" r=".75"/>',
|
|
104
|
+
admin: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/>',
|
|
105
|
+
analytics: '<rect width="20" height="14" x="2" y="3" rx="2"/><path d="M8 21h8"/><path d="M12 17v4"/><path d="M6 7h4"/><path d="M6 10h4"/><path d="M6 13h2"/><path d="m13 13 2-3 2 1 2-4"/>',
|
|
106
|
+
automation: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><polygon points="10.5 9 15 12 10.5 15 10.5 9"/>',
|
|
107
|
+
"data_integration": '<path d="m17 18-1.535 1.605a5 5 0 0 1-8-1.5"/><path d="M17 22v-4h-4"/><path d="M20.996 15.251A4.5 4.5 0 0 0 17.495 8h-1.79a7 7 0 1 0-12.709 5.607"/><path d="M7 10v4h4"/><path d="m7 14 1.535-1.605a5 5 0 0 1 8 1.5"/>',
|
|
108
|
+
"reconciliation-entity": '<path d="M2 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18"/><path d="M14 10h6a2 2 0 0 1 2 2v10"/><path d="M1 22h22"/><path d="M6 6h.01"/><path d="M10 6h.01"/><path d="M6 10h.01"/><path d="M10 10h.01"/><path d="M6 14h.01"/><path d="M10 14h.01"/><path d="M18 14h.01"/><path d="M18 18h.01"/><path d="M6 22v-3h4v3"/>',
|
|
109
|
+
"reconciliation-balance": '<path d="M13.744 17.736a6 6 0 1 1-7.48-7.48"/><path d="M15 6h1v4"/><path d="m6.134 14.768.866-.5 2 3.464"/><circle cx="16" cy="8" r="6"/>',
|
|
110
|
+
scenario: '<circle cx="18" cy="18" r="3"/><circle cx="6" cy="6" r="3"/><path d="M13 6h3a2 2 0 0 1 2 2v7"/><path d="M11 18H8a2 2 0 0 1-2-2V9"/>',
|
|
111
|
+
report: '<path d="M3 3v16a2 2 0 0 0 2 2h16"/><path d="m19 9-5 5-4-4-3 3"/>',
|
|
112
|
+
spreadsheet: '<path d="M9 3H5a2 2 0 0 0-2 2v4m6-6h10a2 2 0 0 1 2 2v4M9 3v18m0 0h10a2 2 0 0 0 2-2V9M9 21H5a2 2 0 0 1-2-2V9m0 0h18"/>',
|
|
113
|
+
sheet: '<path d="M12 3v18"/><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/>',
|
|
114
|
+
script: '<path d="m16 18 6-6-6-6"/><path d="m8 6-6 6 6 6"/>',
|
|
115
|
+
"workflow_group": '<path d="M3 9.5v-5A1.5 1.5 0 0 1 4.5 3h1.7a1 1 0 0 1 .8.4L8.2 5h1.3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-5A1.5 1.5 0 0 1 3 9.5Z"/><path d="M7 11v4a2 2 0 0 0 2 2h4"/><rect width="8" height="8" x="13" y="13" rx="2"/>',
|
|
116
|
+
"model_interaction": '<path d="M7 3 11 5v4L7 11l-4-2v-4Z"/><path d="M17 13 21 15v4L17 21l-4-2v-4Z"/><path d="M14 3h4a2 2 0 0 1 2 2v4"/><path d="m18 7 2 2 2-2"/><path d="M10 21H6a2 2 0 0 1-2-2v-4"/><path d="m2 17 2-2 2 2"/>',
|
|
117
|
+
announcement: '<path d="M4 20V4a2 2 0 0 1 2-2h8l6 6v1"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/><path d="M4 20a2 2 0 0 0 2 2h3"/><g transform="translate(10.6 9.3) scale(.62)" stroke-width="3.23"><path d="M4.5 6H10l7-3a1 1 0 0 1 1.4.92v11.16a1 1 0 0 1-1.4.92L10 13v5a2.5 2.5 0 0 1-5 0v-5h-.5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2Z"/></g>',
|
|
118
|
+
approval: '<path d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z"/><path d="m9 12 2 2 4-4"/>',
|
|
119
|
+
"data-import": '<ellipse cx="12" cy="13" rx="7" ry="2.5"/><path d="M5 13v6a7 2.5 0 0 0 14 0v-6"/><path d="M12 2v6"/><path d="m9 5 3 3 3-3"/>',
|
|
120
|
+
"data-export": '<ellipse cx="12" cy="13" rx="7" ry="2.5"/><path d="M5 13v6a7 2.5 0 0 0 14 0v-6"/><path d="M12 8V2"/><path d="m9 5 3-3 3 3"/>',
|
|
121
|
+
execution: '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="m9.5 12 1.75 1.75L14.5 10.5"/>',
|
|
122
|
+
submission: '<path d="M2 7h11V3l9 9-9 9v-4H2Z"/><path d="m5.5 12 2 2 4-4"/>',
|
|
123
|
+
"expense_control": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="M12 7.5v1"/><path d="M12 15.5v1"/><path d="M14 9h-2.75a1.5 1.5 0 0 0 0 3h1.5a1.5 1.5 0 0 1 0 3H10"/>',
|
|
124
|
+
"expense_control-aggregate": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="m10.5 8.5 1.5 1.5 1.5-1.5"/><path d="m10.5 15.5 1.5-1.5 1.5 1.5"/><path d="m8.5 10.5 1.5 1.5-1.5 1.5"/><path d="m15.5 10.5-1.5 1.5 1.5 1.5"/>',
|
|
125
|
+
"expense_control-limit": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="M10 8.5h4"/><path d="M12 15.5V11"/><path d="m10 13 2-2 2 2"/>',
|
|
126
|
+
"expense_control-enumerated": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="M9 10h.01"/><path d="M12 10h3"/><path d="M9 14h.01"/><path d="M12 14h3"/>',
|
|
127
|
+
"expense_control-quota": '<path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><path d="m14.5 9.5-5 5"/><path d="M9.5 9.5h.01"/><path d="M14.5 14.5h.01"/>',
|
|
128
|
+
"profile-access": '<path d="M20 11v6"/><path d="M20 13h2"/><path d="M3 21v-2a4 4 0 0 1 4-4h6a4 4 0 0 1 2.072.578"/><circle cx="10" cy="7" r="4"/><circle cx="20" cy="19" r="2"/>',
|
|
129
|
+
usergroup: '<path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><path d="M16 3.128a4 4 0 0 1 0 7.744"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><circle cx="9" cy="7" r="4"/>',
|
|
130
|
+
user: '<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',
|
|
131
|
+
"profile-system": '<path d="M10 15H6a4 4 0 0 0-4 4v2"/><path d="m14.305 16.53.923-.382"/><path d="m15.228 13.852-.923-.383"/><path d="m16.852 12.228-.383-.923"/><path d="m16.852 17.772-.383.924"/><path d="m19.148 12.228.383-.923"/><path d="m19.53 18.696-.382-.924"/><path d="m20.772 13.852.924-.383"/><path d="m20.772 16.148.924.383"/><circle cx="18" cy="15" r="3"/><circle cx="9" cy="7" r="4"/>',
|
|
132
|
+
"rules-initialization": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.5v4"/><path d="M10.25 7.25a3.75 3.75 0 1 0 4.5 0"/>',
|
|
133
|
+
"rules-subsidy": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M10.5 5.5v.75"/><path d="M10.5 12.75v.75"/><path d="M12 7h-2a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5H9"/><path d="M15.5 8v3"/><path d="M14 9.5h3"/>',
|
|
134
|
+
"rules-transfer": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="m16 3 4 4-4 4"/><path d="M20 7H4"/><path d="m8 21-4-4 4-4"/><path d="M4 17h16"/></g>',
|
|
135
|
+
"rules-import": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="M12 17V3"/><path d="m6 11 6 6 6-6"/><path d="M19 21H5"/></g>',
|
|
136
|
+
"rules-reclassification": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="M16 3h5v5"/><path d="M8 3H3v5"/><path d="M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3"/><path d="m15 9 6-6"/></g>',
|
|
137
|
+
"rules-allocation": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.5v3"/><path d="M9 13.5v-3a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3"/><path d="M12.5 8.5v5"/>',
|
|
138
|
+
"rules-account": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M9 7.5h.01"/><path d="M11.5 7.5H16"/><path d="M9 11.5h.01"/><path d="M11.5 11.5H16"/>',
|
|
139
|
+
"rules-carryforward": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="m15 17 5-5-5-5"/><path d="M4 18v-2a4 4 0 0 1 4-4h12"/></g>',
|
|
140
|
+
"rules-compound": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.5 16 7.5v4l-3.5 2-3.5-2v-4Z"/>',
|
|
141
|
+
"rules-currency": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5v1"/><path d="M12.5 13v1"/><path d="M14.5 6.5h-2.75a1.5 1.5 0 0 0 0 3h1.5a1.5 1.5 0 0 1 0 3H10.5"/>',
|
|
142
|
+
"rules-deduction": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M8.5 9.5h2.5"/><path d="M15 5.5v.75"/><path d="M15 12.75v.75"/><path d="M16.25 6.75H14.5a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5h-1.75"/>',
|
|
143
|
+
"rules-depreciation": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="m8 7.5 3 3 2.25-2.25L17 12"/>',
|
|
144
|
+
"rules-eliminations_n_adjustments": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M12.5 5.25v4.5"/><path d="M10.25 7.5h4.5"/><path d="M10.25 13.25h4.5"/>',
|
|
145
|
+
"rules-general": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M9 6.5h7"/><path d="M9 9.5h7"/><path d="M9 12.5h4"/>',
|
|
146
|
+
"rules-intercompany": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M8.5 14V6.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V14"/><path d="M13.5 9.5H16a1 1 0 0 1 1 1V14"/><path d="M7.5 14h10"/><path d="M11 8.5h.01"/><path d="M11 11h.01"/>',
|
|
147
|
+
"rules-journal_matching": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M8.5 6h8"/><path d="M8.5 8.75h4"/><path d="m11 12 2 2 3.5-3.5"/>',
|
|
148
|
+
"rules-method": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><circle cx="9.5" cy="6" r="1"/><path d="M11 6h2a1.75 1.75 0 0 1 0 3.5h-1a1.75 1.75 0 0 0 0 3.5h4"/><path d="m14.5 11.5 1.5 1.5-1.5 1.5"/>',
|
|
149
|
+
"rules-method_coefficient": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="M10 5.5H8.5v8H10"/><path d="M15 5.5h1.5v8H15"/><path d="m11.25 8.25 2.5 2.5"/><path d="m13.75 8.25-2.5 2.5"/>',
|
|
150
|
+
"rules-validation": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><path d="m9.5 9.5 2 2 4-4"/>',
|
|
151
|
+
"rules-shared": '<path d="M5 17V4a2 2 0 0 1 2-2h11a2 2 0 0 1 2 2v13"/><path d="M3 20a2 2 0 0 1 2-2v0h15v4H5a2 2 0 0 1-2-2Z"/><circle cx="15.3" cy="6.8" r=".75"/><circle cx="9.7" cy="10" r=".75"/><circle cx="15.3" cy="13.2" r=".75"/><path d="m11.35 9.06 2.3-1.32"/><path d="m11.35 10.94 2.3 1.32"/>',
|
|
152
|
+
"task-manual": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><path d="M14.5 9.5 16.5 11.5 11 17H9v-2Z"/>',
|
|
153
|
+
"task-reclassification": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="M16 3h5v5"/><path d="M8 3H3v5"/><path d="M12 22v-8.3a4 4 0 0 0-1.172-2.872L3 3"/><path d="m15 9 6-6"/></g></g>',
|
|
154
|
+
"task-account": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M9 7.5h.01"/><path d="M11.5 7.5H16"/><path d="M9 11.5h.01"/><path d="M11.5 11.5H16"/></g>',
|
|
155
|
+
"task-allocation": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M12.5 5.5v3"/><path d="M9 13.5v-3a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3"/><path d="M12.5 8.5v5"/></g>',
|
|
156
|
+
"task-carryforward": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><g transform="translate(7.46 4.46) scale(0.42)" stroke-width="4.76"><path d="m15 17 5-5-5-5"/><path d="M4 18v-2a4 4 0 0 1 4-4h12"/></g></g>',
|
|
157
|
+
"task-currency": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M12.5 5v1"/><path d="M12.5 13v1"/><path d="M14.5 6.5h-2.75a1.5 1.5 0 0 0 0 3h1.5a1.5 1.5 0 0 1 0 3H10.5"/></g>',
|
|
158
|
+
"task-deduction": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M8.5 9.5h2.5"/><path d="M15 5.5v.75"/><path d="M15 12.75v.75"/><path d="M16.25 6.75H14.5a1.25 1.25 0 0 0 0 2.5h1a1.25 1.25 0 0 1 0 2.5h-1.75"/></g>',
|
|
159
|
+
"task-depreciation": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="m8 7.5 3 3 2.25-2.25L17 12"/></g>',
|
|
160
|
+
"task-eliminations_n_adjustments": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M12.5 5.25v4.5"/><path d="M10.25 7.5h4.5"/><path d="M10.25 13.25h4.5"/></g>',
|
|
161
|
+
"task-etl": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><ellipse cx="12" cy="10.5" rx="3.5" ry="1.5"/><path d="M8.5 10.5v6c0 .83 1.57 1.5 3.5 1.5s3.5-.67 3.5-1.5v-6"/><path d="M8.5 13.5c0 .83 1.57 1.5 3.5 1.5s3.5-.67 3.5-1.5"/>',
|
|
162
|
+
"task-shared": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><circle cx="15.3" cy="6.8" r=".75"/><circle cx="9.7" cy="10" r=".75"/><circle cx="15.3" cy="13.2" r=".75"/><path d="m11.35 9.06 2.3-1.32"/><path d="m11.35 10.94 2.3 1.32"/></g>',
|
|
163
|
+
"task-intercompany": '<rect width="8" height="4" x="8" y="2" rx="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/><g transform="translate(-.5 4)"><path d="M8.5 14V6.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V14"/><path d="M13.5 9.5H16a1 1 0 0 1 1 1V14"/><path d="M7.5 14h10"/><path d="M11 8.5h.01"/><path d="M11 11h.01"/></g>',
|
|
88
164
|
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Lucide icon library loader — framework-neutral, shared by the React and Vue <Lucide> components.
|
|
2
|
+
// The full Lucide set (ISC licence, lucide.dev) is fetched once from a pinned CDN build and cached in memory;
|
|
3
|
+
// nothing is bundled. Point it at a self-hosted copy of lucide-static's icon-nodes.json with setLucideSource().
|
|
4
|
+
export const LUCIDE_VERSION = "1.61.0";
|
|
5
|
+
let src = "https://cdn.jsdelivr.net/npm/lucide-static@" + LUCIDE_VERSION + "/icon-nodes.json";
|
|
6
|
+
let bodies = null, pending = null;
|
|
7
|
+
const subs = new Set();
|
|
8
|
+
const esc = (v) => String(v).replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<");
|
|
9
|
+
const toMarkup = (nodes) => nodes.map(([tag, attrs]) => "<" + tag + Object.keys(attrs).map(k => " " + k + '="' + esc(attrs[k]) + '"').join("") + "/>").join("");
|
|
10
|
+
/** Use a self-hosted icon-nodes.json (e.g. for offline / intranet deploys). Call before the first icon renders. */
|
|
11
|
+
export function setLucideSource(url) { src = url; bodies = null; pending = null; }
|
|
12
|
+
/** Fetch the set (once). Resolves to { name: innerSvgMarkup }. */
|
|
13
|
+
export function loadLucide() {
|
|
14
|
+
if (bodies) return Promise.resolve(bodies);
|
|
15
|
+
if (!pending) pending = fetch(src).then(r => r.json()).then(json => {
|
|
16
|
+
const out = {};
|
|
17
|
+
for (const n in json) out[n] = toMarkup(json[n]);
|
|
18
|
+
bodies = out; subs.forEach(f => f()); subs.clear(); return out;
|
|
19
|
+
}).catch(e => { pending = null; throw e; });
|
|
20
|
+
return pending;
|
|
21
|
+
}
|
|
22
|
+
/** Inner SVG markup for a name, or "" until the set has loaded / for unknown names. */
|
|
23
|
+
export function lucideBody(name) { return (bodies && bodies[name]) || ""; }
|
|
24
|
+
/** True once the set is in memory. */
|
|
25
|
+
export function lucideReady() { return !!bodies; }
|
|
26
|
+
/** Run fn once when the set arrives (immediately if already loaded). */
|
|
27
|
+
export function onLucideReady(fn) { if (bodies) fn(); else { subs.add(fn); loadLucide().catch(() => {}); } }
|
package/components/index.d.ts
CHANGED
|
@@ -71,6 +71,7 @@ export * from "./forms/Select";
|
|
|
71
71
|
export * from "./forms/Slider";
|
|
72
72
|
export * from "./forms/Switch";
|
|
73
73
|
export * from "./icons/Icon";
|
|
74
|
+
export * from "./icons/Lucide";
|
|
74
75
|
export * from "./icons/Unicon";
|
|
75
76
|
export * from "./navigation/Breadcrumb";
|
|
76
77
|
export * from "./navigation/DocTree";
|
package/components/index.js
CHANGED
|
@@ -88,6 +88,7 @@ export { Switch } from "./forms/Switch.jsx";
|
|
|
88
88
|
|
|
89
89
|
/* icons/ */
|
|
90
90
|
export { ICON_PATHS, Icon } from "./icons/Icon.jsx";
|
|
91
|
+
export { LUCIDE_VERSION, Lucide, loadLucide, setLucideSource } from "./icons/Lucide.jsx";
|
|
91
92
|
export { Unicon } from "./icons/Unicon.jsx";
|
|
92
93
|
|
|
93
94
|
/* navigation/ */
|
|
@@ -107,7 +107,7 @@ export function ThemeToggle({ size = 34, dark: darkProp, onToggle, style }) {
|
|
|
107
107
|
<button type="button" aria-label={dark ? "Switch to light mode" : "Switch to dark mode"} onClick={() => (controlled ? onToggle && onToggle(!dark) : setDark(!dark))}
|
|
108
108
|
onMouseEnter={() => setHover(true)} onMouseLeave={() => setHover(false)}
|
|
109
109
|
style={{ width: size, height: size, borderRadius: "var(--radius-md)", border: "none", cursor: "pointer", display: "inline-flex", alignItems: "center", justifyContent: "center", background: hover ? "var(--bg-hover)" : "transparent", color: "var(--text-body)", padding: 0, transition: "var(--t-hover)", ...style }}>
|
|
110
|
-
<Icon name={dark ? "
|
|
110
|
+
<Icon name={dark ? "sun" : "moon"} size={18} />
|
|
111
111
|
</button>
|
|
112
112
|
);
|
|
113
113
|
}
|
|
@@ -25,7 +25,7 @@ export interface SidebarProps {
|
|
|
25
25
|
onToggleCollapse?: () => void;
|
|
26
26
|
logo?: string;
|
|
27
27
|
brand?: string;
|
|
28
|
-
/** Version line under the footer items ("Version 2.4.
|
|
28
|
+
/** Version line under the footer items ("Version 2.4.4"); the rail shows "v2.4.4" */
|
|
29
29
|
version?: string;
|
|
30
30
|
tone?: "recessed" | "flush" | "contrast" | "custom";
|
|
31
31
|
/** For tone "custom": a SIDEBAR_COLORS key (slate, navy, indigo, violet, plum, wine, forest, teal, umber, charcoal) or any hex */
|
|
@@ -14,6 +14,6 @@ function toggle() { if (props.dark != null) emit('update:dark', !dark.value); el
|
|
|
14
14
|
<template>
|
|
15
15
|
<button type="button" :aria-label="dark ? 'Switch to light mode' : 'Switch to dark mode'" @click="toggle" @mouseenter="hover = true" @mouseleave="hover = false"
|
|
16
16
|
:style="{ width: px(size), height: px(size), borderRadius: 'var(--radius-md)', border: 'none', cursor: 'pointer', display: 'inline-flex', alignItems: 'center', justifyContent: 'center', background: hover ? 'var(--bg-hover)' : 'transparent', color: 'var(--text-body)', padding: 0, transition: 'var(--t-hover)', ...style }">
|
|
17
|
-
<Icon :name="dark ? '
|
|
17
|
+
<Icon :name="dark ? 'sun' : 'moon'" :size="18" />
|
|
18
18
|
</button>
|
|
19
19
|
</template>
|