@proveanything/smartlinks-utils-ui 0.3.0 → 0.3.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/RecordsAdmin/shell/tokens.css"],"sourcesContent":["/* Records Admin shell tokens — apps may override via :root */\r\n:root {\r\n --ra-status-own: var(--ra-emerald, 142 71% 45%);\r\n --ra-status-shared: var(--ra-amber, 38 92% 50%);\r\n --ra-status-missing: var(--muted-foreground, 0 0% 50%);\r\n --ra-accent: var(--primary, 222 47% 11%);\r\n --ra-surface: var(--card, 0 0% 100%);\r\n --ra-border: var(--border, 0 0% 90%);\r\n --ra-text: var(--foreground, 0 0% 10%);\r\n --ra-muted: var(--muted, 0 0% 96%);\r\n --ra-muted-text: var(--muted-foreground, 0 0% 40%);\r\n --ra-radius: 0.5rem;\r\n --ra-dot-size: 0.5rem;\r\n}\r\n\r\n.ra-shell {\r\n color: hsl(var(--ra-text));\r\n background: hsl(var(--ra-surface));\r\n}\r\n\r\n.ra-status-dot {\r\n display: inline-block;\r\n width: var(--ra-dot-size);\r\n height: var(--ra-dot-size);\r\n border-radius: 9999px;\r\n flex-shrink: 0;\r\n}\r\n.ra-status-own { background: hsl(var(--ra-status-own)); }\r\n.ra-status-shared { background: hsl(var(--ra-status-shared)); }\r\n.ra-status-missing { background: hsl(var(--ra-status-missing) / 0.4); border: 1px solid hsl(var(--ra-status-missing) / 0.6); }\r\n\r\n.ra-row-active {\r\n background: hsl(var(--ra-accent) / 0.08);\r\n border-color: hsl(var(--ra-accent) / 0.4) !important;\r\n}"],"mappings":";AACA;AACE,mBAAiB,IAAI,YAAY,EAAE,IAAI,IAAI;AAC3C,sBAAoB,IAAI,UAAU,EAAE,GAAG,IAAI;AAC3C,uBAAqB,IAAI,kBAAkB,EAAE,EAAE,GAAG;AAClD,eAAa,IAAI,SAAS,EAAE,IAAI,IAAI;AACpC,gBAAc,IAAI,MAAM,EAAE,EAAE,GAAG;AAC/B,eAAa,IAAI,QAAQ,EAAE,EAAE,GAAG;AAChC,aAAW,IAAI,YAAY,EAAE,EAAE,GAAG;AAClC,cAAY,IAAI,OAAO,EAAE,EAAE,GAAG;AAC9B,mBAAiB,IAAI,kBAAkB,EAAE,EAAE,GAAG;AAC9C,eAAa;AACb,iBAAe;AACjB;AAEA,CAAC;AACC,SAAO,IAAI,IAAI;AACf,cAAY,IAAI,IAAI;AACtB;AAEA,CAAC;AACC,WAAS;AACT,SAAO,IAAI;AACX,UAAQ,IAAI;AACZ,iBAAe;AACf,eAAa;AACf;AACA,CAAC;AAAgB,cAAY,IAAI,IAAI;AAAmB;AACxD,CAAC;AAAmB,cAAY,IAAI,IAAI;AAAsB;AAC9D,CAAC;AAAoB,cAAY,IAAI,IAAI,qBAAqB,EAAE;AAAM,UAAQ,IAAI,MAAM,IAAI,IAAI,qBAAqB,EAAE;AAAM;AAE7H,CAAC;AACC,cAAY,IAAI,IAAI,aAAa,EAAE;AACnC,gBAAc,IAAI,IAAI,aAAa,EAAE;AACvC;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/RecordsAdmin/shell/tokens.css","../../../src/components/RecordsAdmin/shell/shell.css"],"sourcesContent":["/* =============================================================================\r\n * RecordsAdmin tokens — v0.4\r\n * All HSL triplets, all overridable. Apps that already define the standard\r\n * shadcn tokens (--primary, --card, --background, --foreground, --border,\r\n * --muted, --muted-foreground, --radius, --font-sans, --font-display) get\r\n * the rich look automatically. Otherwise sensible neutrals + a slate accent\r\n * keep the shell looking polished out-of-the-box.\r\n * ========================================================================= */\r\n:root {\r\n /* ── Status colours (existing) ─────────────────────────────────────── */\r\n --ra-status-own: var(--ra-emerald, 142 71% 45%);\r\n --ra-status-shared: var(--ra-amber, 38 92% 50%);\r\n --ra-status-missing: var(--muted-foreground, 220 9% 46%);\r\n\r\n /* ── Brand & surfaces (existing, with friendlier fallbacks) ────────── */\r\n --ra-accent: var(--primary, 222 47% 11%);\r\n --ra-surface: var(--card, 0 0% 100%);\r\n --ra-border: var(--border, 220 13% 91%);\r\n --ra-text: var(--foreground, 222 47% 11%);\r\n --ra-muted: var(--muted, 220 14% 96%);\r\n --ra-muted-text: var(--muted-foreground, 220 9% 46%);\r\n --ra-radius: var(--radius, 0.625rem);\r\n --ra-dot-size: 0.5rem;\r\n\r\n /* ── NEW: page + layered surfaces ──────────────────────────────────── */\r\n --ra-page-bg: var(--background, 220 14% 98%);\r\n --ra-card-shadow: 0 1px 2px hsl(var(--ra-accent) / 0.04),\r\n 0 4px 12px hsl(var(--ra-accent) / 0.05);\r\n --ra-card-shadow-hover: 0 2px 4px hsl(var(--ra-accent) / 0.06),\r\n 0 8px 24px hsl(var(--ra-accent) / 0.08);\r\n\r\n /* ── NEW: interactive ──────────────────────────────────────────────── */\r\n --ra-row-hover: hsl(var(--ra-accent) / 0.05);\r\n --ra-row-active-bg: hsl(var(--ra-accent) / 0.10);\r\n --ra-row-active-bd: hsl(var(--ra-accent) / 0.45);\r\n --ra-focus-ring: hsl(var(--ra-accent) / 0.35);\r\n\r\n /* ── NEW: typography ───────────────────────────────────────────────── */\r\n --ra-font-display: var(--font-display, var(--font-sans, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif));\r\n --ra-font-ui: var(--font-sans, ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif);\r\n --ra-title-weight: 600;\r\n --ra-display-weight: 700;\r\n\r\n /* ── NEW: semantic colours for badges / chips / tones ──────────────── */\r\n --ra-info: var(--ra-blue, 214 95% 55%);\r\n --ra-success: var(--ra-emerald, 142 71% 45%);\r\n --ra-warning: var(--ra-amber, 38 92% 50%);\r\n --ra-danger: var(--destructive, 0 72% 51%);\r\n}\r\n\r\n/* ── Status dot (existing class API) ──────────────────────────────────── */\r\n.ra-status-dot {\r\n display: inline-block;\r\n width: var(--ra-dot-size);\r\n height: var(--ra-dot-size);\r\n border-radius: 9999px;\r\n flex-shrink: 0;\r\n}\r\n.ra-status-own { background: hsl(var(--ra-status-own)); }\r\n.ra-status-shared { background: hsl(var(--ra-status-shared)); }\r\n.ra-status-missing {\r\n background: hsl(var(--ra-status-missing) / 0.4);\r\n border: 1px solid hsl(var(--ra-status-missing) / 0.6);\r\n}\r\n\r\n/* Back-compat — used by RecordList default rows. */\r\n.ra-row-active {\r\n background: var(--ra-row-active-bg);\r\n border-color: var(--ra-row-active-bd) !important;\r\n}\r\n","/* =============================================================================\r\n * RecordsAdmin shell.css — v0.4\r\n * All rules scoped under .ra-shell so the package never bleeds into host UI.\r\n * ========================================================================= */\r\n\r\n.ra-shell {\r\n color: hsl(var(--ra-text));\r\n background: hsl(var(--ra-page-bg));\r\n font-family: var(--ra-font-ui);\r\n}\r\n.ra-shell *,\r\n.ra-shell *::before,\r\n.ra-shell *::after {\r\n box-sizing: border-box;\r\n}\r\n\r\n/* Re-usable primitives ----------------------------------------------------- */\r\n.ra-shell .ra-card {\r\n background: hsl(var(--ra-surface));\r\n border: 1px solid hsl(var(--ra-border));\r\n border-radius: var(--ra-radius);\r\n box-shadow: var(--ra-card-shadow);\r\n}\r\n.ra-shell .ra-card-hover {\r\n transition: box-shadow .18s ease, transform .18s ease, border-color .18s ease;\r\n}\r\n.ra-shell .ra-card-hover:hover {\r\n box-shadow: var(--ra-card-shadow-hover);\r\n}\r\n.ra-shell .ra-display {\r\n font-family: var(--ra-font-display);\r\n font-weight: var(--ra-display-weight);\r\n letter-spacing: -0.01em;\r\n}\r\n.ra-shell .ra-title { font-weight: var(--ra-title-weight); }\r\n\r\n/* Focus ring --------------------------------------------------------------- */\r\n.ra-shell :where(button, [role=\"button\"], input, select, textarea, a):focus-visible {\r\n outline: none;\r\n box-shadow: 0 0 0 3px var(--ra-focus-ring);\r\n border-radius: calc(var(--ra-radius) * 0.6);\r\n}\r\n\r\n/* Header card -------------------------------------------------------------- */\r\n.ra-shell .ra-header {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n gap: 1rem;\r\n padding: 1rem 1.25rem;\r\n border-radius: var(--ra-radius);\r\n border: 1px solid hsl(var(--ra-accent) / 0.12);\r\n background:\r\n linear-gradient(135deg,\r\n hsl(var(--ra-accent) / 0.08),\r\n hsl(var(--ra-accent) / 0.02) 60%,\r\n hsl(var(--ra-surface)) 100%);\r\n box-shadow: var(--ra-card-shadow);\r\n}\r\n.ra-shell .ra-header-icon {\r\n flex-shrink: 0;\r\n width: 2.75rem;\r\n height: 2.75rem;\r\n border-radius: calc(var(--ra-radius) * 0.9);\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: hsl(var(--ra-accent) / 0.12);\r\n color: hsl(var(--ra-accent));\r\n border: 1px solid hsl(var(--ra-accent) / 0.18);\r\n}\r\n.ra-shell .ra-header-text {\r\n flex: 1;\r\n min-width: 0;\r\n}\r\n.ra-shell .ra-header-title {\r\n font-family: var(--ra-font-display);\r\n font-weight: var(--ra-display-weight);\r\n font-size: 1.125rem;\r\n line-height: 1.2;\r\n color: hsl(var(--ra-text));\r\n letter-spacing: -0.01em;\r\n margin: 0;\r\n}\r\n.ra-shell .ra-header-subtitle {\r\n font-size: 0.8125rem;\r\n color: hsl(var(--ra-muted-text));\r\n margin-top: 0.125rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n.ra-shell .ra-header-stats {\r\n display: flex;\r\n align-items: stretch;\r\n gap: 0.25rem;\r\n padding: 0.25rem 0.5rem;\r\n border-radius: calc(var(--ra-radius) * 0.75);\r\n background: hsl(var(--ra-surface) / 0.7);\r\n border: 1px solid hsl(var(--ra-border));\r\n}\r\n.ra-shell .ra-stat {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n padding: 0.25rem 0.5rem;\r\n min-width: 3rem;\r\n}\r\n.ra-shell .ra-stat-value {\r\n font-family: var(--ra-font-display);\r\n font-weight: var(--ra-display-weight);\r\n font-size: 0.95rem;\r\n color: hsl(var(--ra-text));\r\n line-height: 1;\r\n}\r\n.ra-shell .ra-stat-label {\r\n font-size: 0.625rem;\r\n text-transform: uppercase;\r\n letter-spacing: 0.04em;\r\n color: hsl(var(--ra-muted-text));\r\n margin-top: 0.2rem;\r\n}\r\n.ra-shell .ra-stat-divider {\r\n width: 1px;\r\n background: hsl(var(--ra-border));\r\n margin: 0.25rem 0;\r\n}\r\n.ra-shell .ra-header-actions {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n}\r\n\r\n/* Tabs --------------------------------------------------------------------- */\r\n.ra-shell .ra-tabs {\r\n display: flex;\r\n gap: 0.25rem;\r\n padding: 0.25rem;\r\n background: hsl(var(--ra-muted));\r\n border-radius: calc(var(--ra-radius) * 0.85);\r\n border: 1px solid hsl(var(--ra-border));\r\n}\r\n.ra-shell .ra-tab {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.4rem;\r\n padding: 0.4rem 0.7rem;\r\n border-radius: calc(var(--ra-radius) * 0.65);\r\n font-size: 0.78rem;\r\n font-weight: 500;\r\n color: hsl(var(--ra-muted-text));\r\n background: transparent;\r\n border: 0;\r\n cursor: pointer;\r\n transition: background .15s ease, color .15s ease, transform .15s ease;\r\n white-space: nowrap;\r\n}\r\n.ra-shell .ra-tab:hover {\r\n background: hsl(var(--ra-surface));\r\n color: hsl(var(--ra-text));\r\n}\r\n.ra-shell .ra-tab[aria-selected=\"true\"] {\r\n background: hsl(var(--ra-surface));\r\n color: hsl(var(--ra-text));\r\n box-shadow: var(--ra-card-shadow);\r\n font-weight: var(--ra-title-weight);\r\n}\r\n.ra-shell .ra-tab[aria-selected=\"true\"] .ra-tab-icon {\r\n color: hsl(var(--ra-accent));\r\n}\r\n.ra-shell .ra-tab[disabled] {\r\n opacity: .5;\r\n cursor: not-allowed;\r\n}\r\n.ra-shell .ra-tab-count {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-width: 1.25rem;\r\n padding: 0 0.35rem;\r\n height: 1.1rem;\r\n border-radius: 999px;\r\n background: hsl(var(--ra-accent) / 0.12);\r\n color: hsl(var(--ra-accent));\r\n font-size: 0.625rem;\r\n font-weight: 600;\r\n line-height: 1;\r\n}\r\n.ra-shell .ra-tab[aria-selected=\"false\"] .ra-tab-count {\r\n background: hsl(var(--ra-muted-text) / 0.15);\r\n color: hsl(var(--ra-muted-text));\r\n}\r\n\r\n/* Density variants --------------------------------------------------------- */\r\n.ra-shell[data-density=\"compact\"] .ra-row { padding-block: 0.4rem; }\r\n.ra-shell[data-density=\"compact\"] .ra-header { padding: 0.75rem 1rem; }\r\n.ra-shell[data-density=\"compact\"] .ra-header-icon { width: 2.25rem; height: 2.25rem; }\r\n\r\n/* Rows --------------------------------------------------------------------- */\r\n.ra-shell .ra-row {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.65rem;\r\n width: 100%;\r\n text-align: left;\r\n padding: 0.65rem 0.85rem;\r\n border-left: 3px solid transparent;\r\n background: transparent;\r\n border-bottom: 1px solid transparent;\r\n transition: background .12s ease, border-color .12s ease;\r\n cursor: pointer;\r\n color: hsl(var(--ra-text));\r\n font-family: inherit;\r\n}\r\n.ra-shell .ra-row + .ra-row { border-top: 1px solid hsl(var(--ra-border) / 0.6); }\r\n.ra-shell .ra-row:hover { background: var(--ra-row-hover); }\r\n.ra-shell .ra-row[data-selected=\"true\"] {\r\n background: var(--ra-row-active-bg);\r\n border-left-color: var(--ra-row-active-bd);\r\n}\r\n.ra-shell .ra-row-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 1.75rem;\r\n height: 1.75rem;\r\n border-radius: calc(var(--ra-radius) * 0.6);\r\n background: hsl(var(--ra-muted));\r\n color: hsl(var(--ra-muted-text));\r\n flex-shrink: 0;\r\n}\r\n.ra-shell .ra-row[data-selected=\"true\"] .ra-row-icon {\r\n background: hsl(var(--ra-accent) / 0.15);\r\n color: hsl(var(--ra-accent));\r\n}\r\n.ra-shell .ra-row-body { flex: 1; min-width: 0; }\r\n.ra-shell .ra-row-title {\r\n font-weight: var(--ra-title-weight);\r\n font-size: 0.875rem;\r\n line-height: 1.25;\r\n color: hsl(var(--ra-text));\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n.ra-shell .ra-row-sub {\r\n font-size: 0.75rem;\r\n color: hsl(var(--ra-muted-text));\r\n margin-top: 0.15rem;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n.ra-shell .ra-row-actions {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.15rem;\r\n margin-left: auto;\r\n opacity: 0;\r\n transition: opacity .15s ease;\r\n}\r\n.ra-shell .ra-row:hover .ra-row-actions,\r\n.ra-shell .ra-row:focus-within .ra-row-actions {\r\n opacity: 1;\r\n}\r\n.ra-shell .ra-row-action {\r\n width: 1.6rem;\r\n height: 1.6rem;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n border-radius: 999px;\r\n background: transparent;\r\n color: hsl(var(--ra-muted-text));\r\n border: 0;\r\n cursor: pointer;\r\n transition: background .15s ease, color .15s ease;\r\n}\r\n.ra-shell .ra-row-action:hover {\r\n background: hsl(var(--ra-accent) / 0.10);\r\n color: hsl(var(--ra-text));\r\n}\r\n.ra-shell .ra-row-action[data-tone=\"danger\"]:hover {\r\n background: hsl(var(--ra-danger) / 0.12);\r\n color: hsl(var(--ra-danger));\r\n}\r\n\r\n/* Inheritance / status chip ------------------------------------------------ */\r\n.ra-shell .ra-chip {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.3rem;\r\n padding: 0.15rem 0.5rem;\r\n border-radius: 999px;\r\n font-size: 0.6875rem;\r\n font-weight: 500;\r\n background: hsl(var(--ra-muted));\r\n color: hsl(var(--ra-muted-text));\r\n border: 1px solid hsl(var(--ra-border));\r\n white-space: nowrap;\r\n max-width: 14rem;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n}\r\n.ra-shell .ra-chip[data-tone=\"success\"] {\r\n background: hsl(var(--ra-success) / 0.12);\r\n color: hsl(var(--ra-success));\r\n border-color: hsl(var(--ra-success) / 0.30);\r\n}\r\n.ra-shell .ra-chip[data-tone=\"warning\"] {\r\n background: hsl(var(--ra-warning) / 0.14);\r\n color: hsl(var(--ra-warning));\r\n border-color: hsl(var(--ra-warning) / 0.35);\r\n}\r\n.ra-shell .ra-chip[data-tone=\"info\"] {\r\n background: hsl(var(--ra-info) / 0.10);\r\n color: hsl(var(--ra-info));\r\n border-color: hsl(var(--ra-info) / 0.30);\r\n}\r\n.ra-shell .ra-chip[data-tone=\"danger\"] {\r\n background: hsl(var(--ra-danger) / 0.10);\r\n color: hsl(var(--ra-danger));\r\n border-color: hsl(var(--ra-danger) / 0.30);\r\n}\r\n.ra-shell .ra-chip[data-tone=\"muted\"] {\r\n background: transparent;\r\n color: hsl(var(--ra-muted-text));\r\n border-style: dashed;\r\n}\r\n\r\n/* Group / accordion -------------------------------------------------------- */\r\n.ra-shell .ra-group { border-bottom: 1px solid hsl(var(--ra-border)); }\r\n.ra-shell .ra-group:last-child { border-bottom: 0; }\r\n.ra-shell .ra-group-summary {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n width: 100%;\r\n padding: 0.5rem 0.85rem;\r\n background: hsl(var(--ra-muted) / 0.6);\r\n font-size: 0.7rem;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 0.04em;\r\n color: hsl(var(--ra-muted-text));\r\n border: 0;\r\n cursor: pointer;\r\n transition: background .12s ease;\r\n}\r\n.ra-shell .ra-group-summary:hover { background: hsl(var(--ra-muted)); }\r\n.ra-shell .ra-group-summary .ra-group-chevron {\r\n transition: transform .15s ease;\r\n}\r\n.ra-shell .ra-group[data-open=\"false\"] .ra-group-chevron {\r\n transform: rotate(-90deg);\r\n}\r\n.ra-shell .ra-group-name { flex: 1; text-align: left; }\r\n.ra-shell .ra-group-count {\r\n font-size: 0.65rem;\r\n font-weight: 600;\r\n color: hsl(var(--ra-muted-text));\r\n background: hsl(var(--ra-surface));\r\n border: 1px solid hsl(var(--ra-border));\r\n border-radius: 999px;\r\n padding: 0.05rem 0.4rem;\r\n}\r\n.ra-shell .ra-group[data-open=\"false\"] .ra-group-body { display: none; }\r\n\r\n/* Empty state -------------------------------------------------------------- */\r\n.ra-shell .ra-empty {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n text-align: center;\r\n padding: 2.5rem 1.5rem;\r\n gap: 0.75rem;\r\n}\r\n.ra-shell .ra-empty-icon {\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 3.25rem;\r\n height: 3.25rem;\r\n border-radius: 999px;\r\n background: hsl(var(--ra-accent) / 0.08);\r\n color: hsl(var(--ra-accent));\r\n margin-bottom: 0.25rem;\r\n}\r\n.ra-shell .ra-empty-title {\r\n font-family: var(--ra-font-display);\r\n font-weight: var(--ra-display-weight);\r\n font-size: 1rem;\r\n color: hsl(var(--ra-text));\r\n margin: 0;\r\n letter-spacing: -0.01em;\r\n}\r\n.ra-shell .ra-empty-body {\r\n font-size: 0.8125rem;\r\n color: hsl(var(--ra-muted-text));\r\n max-width: 22rem;\r\n line-height: 1.45;\r\n}\r\n.ra-shell .ra-empty-actions {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n margin-top: 0.25rem;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n}\r\n\r\n/* Buttons (used by empty state CTAs and bulk menu trigger) ---------------- */\r\n.ra-shell .ra-btn {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.4rem;\r\n padding: 0.45rem 0.85rem;\r\n border-radius: calc(var(--ra-radius) * 0.7);\r\n font-size: 0.8125rem;\r\n font-weight: 500;\r\n border: 1px solid hsl(var(--ra-border));\r\n background: hsl(var(--ra-surface));\r\n color: hsl(var(--ra-text));\r\n cursor: pointer;\r\n transition: background .15s ease, border-color .15s ease, box-shadow .15s ease, transform .1s ease;\r\n}\r\n.ra-shell .ra-btn:hover {\r\n background: hsl(var(--ra-muted));\r\n box-shadow: var(--ra-card-shadow);\r\n}\r\n.ra-shell .ra-btn:active { transform: translateY(1px); }\r\n.ra-shell .ra-btn[data-variant=\"primary\"] {\r\n background: hsl(var(--ra-accent));\r\n color: hsl(var(--ra-surface));\r\n border-color: hsl(var(--ra-accent));\r\n}\r\n.ra-shell .ra-btn[data-variant=\"primary\"]:hover {\r\n background: hsl(var(--ra-accent) / 0.92);\r\n}\r\n.ra-shell .ra-btn[data-variant=\"ghost\"] {\r\n background: transparent;\r\n border-color: transparent;\r\n color: hsl(var(--ra-muted-text));\r\n}\r\n.ra-shell .ra-btn[data-variant=\"ghost\"]:hover {\r\n background: hsl(var(--ra-muted));\r\n color: hsl(var(--ra-text));\r\n}\r\n.ra-shell .ra-btn[data-variant=\"danger\"] { color: hsl(var(--ra-danger)); }\r\n.ra-shell .ra-btn[data-variant=\"danger\"]:hover {\r\n background: hsl(var(--ra-danger) / 0.10);\r\n border-color: hsl(var(--ra-danger) / 0.40);\r\n}\r\n\r\n/* Intro card --------------------------------------------------------------- */\r\n.ra-shell .ra-intro {\r\n position: relative;\r\n display: flex;\r\n gap: 0.85rem;\r\n padding: 0.9rem 1rem;\r\n border-radius: var(--ra-radius);\r\n border: 1px solid hsl(var(--ra-info) / 0.30);\r\n background: hsl(var(--ra-info) / 0.08);\r\n margin-bottom: 1rem;\r\n}\r\n.ra-shell .ra-intro[data-tone=\"success\"] {\r\n border-color: hsl(var(--ra-success) / 0.30);\r\n background: hsl(var(--ra-success) / 0.08);\r\n}\r\n.ra-shell .ra-intro[data-tone=\"warning\"] {\r\n border-color: hsl(var(--ra-warning) / 0.35);\r\n background: hsl(var(--ra-warning) / 0.10);\r\n}\r\n.ra-shell .ra-intro-icon {\r\n flex-shrink: 0;\r\n width: 2rem;\r\n height: 2rem;\r\n border-radius: 999px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: hsl(var(--ra-info) / 0.18);\r\n color: hsl(var(--ra-info));\r\n}\r\n.ra-shell .ra-intro[data-tone=\"success\"] .ra-intro-icon {\r\n background: hsl(var(--ra-success) / 0.18);\r\n color: hsl(var(--ra-success));\r\n}\r\n.ra-shell .ra-intro[data-tone=\"warning\"] .ra-intro-icon {\r\n background: hsl(var(--ra-warning) / 0.20);\r\n color: hsl(var(--ra-warning));\r\n}\r\n.ra-shell .ra-intro-body { flex: 1; min-width: 0; }\r\n.ra-shell .ra-intro-title {\r\n font-family: var(--ra-font-display);\r\n font-weight: var(--ra-title-weight);\r\n font-size: 0.875rem;\r\n color: hsl(var(--ra-text));\r\n margin: 0 0 0.2rem 0;\r\n}\r\n.ra-shell .ra-intro-text {\r\n font-size: 0.8125rem;\r\n color: hsl(var(--ra-text) / 0.85);\r\n line-height: 1.45;\r\n}\r\n.ra-shell .ra-intro-dismiss {\r\n position: absolute;\r\n top: 0.5rem;\r\n right: 0.5rem;\r\n width: 1.6rem;\r\n height: 1.6rem;\r\n border-radius: 999px;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n background: transparent;\r\n border: 0;\r\n color: hsl(var(--ra-muted-text));\r\n cursor: pointer;\r\n}\r\n.ra-shell .ra-intro-dismiss:hover {\r\n background: hsl(var(--ra-text) / 0.06);\r\n color: hsl(var(--ra-text));\r\n}\r\n\r\n/* Bulk actions menu -------------------------------------------------------- */\r\n.ra-shell .ra-bulk-menu {\r\n min-width: 12rem;\r\n background: hsl(var(--ra-surface));\r\n border: 1px solid hsl(var(--ra-border));\r\n border-radius: calc(var(--ra-radius) * 0.85);\r\n box-shadow: var(--ra-card-shadow-hover);\r\n padding: 0.3rem;\r\n z-index: 30;\r\n}\r\n.ra-shell .ra-bulk-item {\r\n display: flex;\r\n align-items: center;\r\n gap: 0.55rem;\r\n width: 100%;\r\n padding: 0.45rem 0.6rem;\r\n border-radius: calc(var(--ra-radius) * 0.6);\r\n font-size: 0.8125rem;\r\n color: hsl(var(--ra-text));\r\n background: transparent;\r\n border: 0;\r\n cursor: pointer;\r\n text-align: left;\r\n transition: background .12s ease, color .12s ease;\r\n}\r\n.ra-shell .ra-bulk-item:hover { background: hsl(var(--ra-muted)); }\r\n.ra-shell .ra-bulk-item[data-tone=\"danger\"] { color: hsl(var(--ra-danger)); }\r\n.ra-shell .ra-bulk-item[data-tone=\"danger\"]:hover {\r\n background: hsl(var(--ra-danger) / 0.10);\r\n}\r\n.ra-shell .ra-bulk-divider {\r\n height: 1px;\r\n background: hsl(var(--ra-border));\r\n margin: 0.25rem 0;\r\n}\r\n\r\n/* Preview rail ------------------------------------------------------------- */\r\n.ra-shell .ra-preview-rail {\r\n background: hsl(var(--ra-surface));\r\n border-left: 1px solid hsl(var(--ra-border));\r\n box-shadow: -4px 0 16px hsl(var(--ra-accent) / 0.04);\r\n display: flex;\r\n flex-direction: column;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n.ra-shell .ra-preview-rail-header {\r\n position: sticky;\r\n top: 0;\r\n z-index: 1;\r\n display: flex;\r\n align-items: center;\r\n gap: 0.5rem;\r\n padding: 0.75rem 1rem;\r\n background:\r\n linear-gradient(180deg,\r\n hsl(var(--ra-surface)) 0%,\r\n hsl(var(--ra-surface) / 0.92) 100%);\r\n border-bottom: 1px solid hsl(var(--ra-border));\r\n backdrop-filter: blur(6px);\r\n}\r\n.ra-shell .ra-preview-rail-title {\r\n display: inline-flex;\r\n align-items: center;\r\n gap: 0.4rem;\r\n font-size: 0.7rem;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n letter-spacing: 0.06em;\r\n color: hsl(var(--ra-muted-text));\r\n}\r\n.ra-shell .ra-preview-rail-body {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 1rem;\r\n}\r\n"],"mappings":"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","names":[]}
@@ -1,5 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
+ import { LucideIcon } from 'lucide-react';
3
4
  import * as _tanstack_query_core from '@tanstack/query-core';
4
5
  import { RecordScope, AppRecord, RecordTarget, MatchResult } from '@proveanything/smartlinks/dist/types/appObjects';
5
6
 
@@ -212,6 +213,52 @@ interface RecordsAdminI18n {
212
213
  }
213
214
  declare const DEFAULT_I18N: RecordsAdminI18n;
214
215
 
216
+ interface RecordsAdminIcons {
217
+ scope: Record<ScopeKind | 'universal', LucideIcon>;
218
+ status: {
219
+ own: LucideIcon;
220
+ inherited: LucideIcon;
221
+ missing: LucideIcon;
222
+ };
223
+ action: {
224
+ add: LucideIcon;
225
+ edit: LucideIcon;
226
+ duplicate: LucideIcon;
227
+ delete: LucideIcon;
228
+ import: LucideIcon;
229
+ export: LucideIcon;
230
+ more: LucideIcon;
231
+ };
232
+ preview: {
233
+ eye: LucideIcon;
234
+ switch: LucideIcon;
235
+ };
236
+ empty: {
237
+ default: LucideIcon;
238
+ search: LucideIcon;
239
+ };
240
+ intro: {
241
+ info: LucideIcon;
242
+ };
243
+ /** Header — used when no `headerIcon` prop is passed. Apps can override
244
+ * `byRecordType[recordType]` for a contextual icon, or `default` as the
245
+ * catch-all. */
246
+ header: {
247
+ default: LucideIcon;
248
+ byRecordType: Record<string, LucideIcon>;
249
+ };
250
+ group: {
251
+ chevron: LucideIcon;
252
+ };
253
+ }
254
+ /** Library defaults — every consumer gets these unless `icons` is overridden. */
255
+ declare const DEFAULT_ICONS: RecordsAdminIcons;
256
+ /** Deep-merge an `icons` prop onto the defaults. */
257
+ declare function mergeIcons(override?: Partial<RecordsAdminIcons>): RecordsAdminIcons;
258
+ /** Look up the right header icon based on prop precedence:
259
+ * explicit `headerIcon` > `icons.header.byRecordType[type]` > `icons.header.default`. */
260
+ declare function pickHeaderIcon(icons: RecordsAdminIcons, recordType: string): LucideIcon;
261
+
215
262
  /** Minimal SDK shape consumed by the shell. */
216
263
  type SmartLinksSDK = any;
217
264
  /** Slot context passed to renderCard / renderListRow. */
@@ -332,6 +379,34 @@ interface RecordsAdminShellProps<TData = unknown> {
332
379
  * timestamp+random string.
333
380
  */
334
381
  generateItemId?: () => string;
382
+ /** Display title shown in the header card. Falls back to `label`, then `recordType`. */
383
+ title?: string;
384
+ /** Single-line muted subtitle under the header title. */
385
+ subtitle?: string;
386
+ /** Icon shown in the header card. Falls back to `icons.header.byRecordType[recordType]`
387
+ * or `icons.header.default`. Pass a Lucide icon component or any ReactNode. */
388
+ headerIcon?: ReactNode;
389
+ /** Right-aligned header content — typically a primary "+ New" button + secondary controls. */
390
+ headerActions?: ReactNode;
391
+ /** Show the per-scope counts strip in the header (Products · Facets · …). Default true. */
392
+ showStats?: boolean;
393
+ /** Override the default Lucide icons used by the shell (scope tabs, statuses,
394
+ * empty states, action menus, etc.). Deep-merged onto `DEFAULT_ICONS`. */
395
+ icons?: Partial<RecordsAdminIcons>;
396
+ /** When supplied, the records list is rendered as accordion-style groups.
397
+ * Return `null` to put a record in the default "Other" bucket. */
398
+ groupBy?: (record: RecordSummary) => {
399
+ key: string;
400
+ label: string;
401
+ icon?: ReactNode;
402
+ } | null;
403
+ /** Custom empty-state renderer for the records rail. Falls back to the styled
404
+ * built-in empty state (icon + title + body + optional CTAs). */
405
+ renderEmptyState?: (ctx: {
406
+ scope: ScopeKind;
407
+ }) => ReactNode;
408
+ /** Visual density. Default `comfortable`. */
409
+ density?: 'comfortable' | 'compact';
335
410
  i18n?: Partial<RecordsAdminI18n>;
336
411
  onTelemetry?: (event: TelemetryEvent) => void;
337
412
  className?: string;
@@ -372,8 +447,12 @@ interface Props$9 {
372
447
  onChange: (s: ScopeKind) => void;
373
448
  /** When true, tabs render disabled (used while collection flags are loading). */
374
449
  loading?: boolean;
450
+ /** Optional per-scope counts displayed as tiny badges. */
451
+ counts?: Partial<Record<ScopeKind, number>>;
452
+ /** Override icons used per scope. Falls back to DEFAULT_ICONS.scope. */
453
+ icons?: RecordsAdminIcons['scope'];
375
454
  }
376
- declare const ScopeTabs: ({ scopes, active, onChange, loading }: Props$9) => react_jsx_runtime.JSX.Element;
455
+ declare const ScopeTabs: ({ scopes, active, onChange, loading, counts, icons, }: Props$9) => react_jsx_runtime.JSX.Element;
377
456
 
378
457
  interface Props$8 {
379
458
  source?: RecordSource;
@@ -408,17 +487,23 @@ interface Props$6 {
408
487
  renderListRow?: (record: RecordSummary, ctx: RecordSlotContext) => ReactNode;
409
488
  /** Optional override for `grid` / `gallery` cards. */
410
489
  renderCard?: (record: RecordSummary, ctx: RecordSlotContext) => ReactNode;
490
+ /** Optional grouping function. Returning null buckets the row under "Other". */
491
+ groupBy?: (record: RecordSummary) => {
492
+ key: string;
493
+ label: string;
494
+ icon?: ReactNode;
495
+ } | null;
411
496
  }
412
- declare const RecordList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, }: Props$6) => react_jsx_runtime.JSX.Element;
413
- declare const ProductList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, }: Props$6) => react_jsx_runtime.JSX.Element;
414
- declare const FacetList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, }: Props$6) => react_jsx_runtime.JSX.Element;
415
- declare const VariantList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, }: Props$6) => react_jsx_runtime.JSX.Element;
416
- declare const BatchList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, }: Props$6) => react_jsx_runtime.JSX.Element;
497
+ declare const RecordList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, groupBy, }: Props$6) => react_jsx_runtime.JSX.Element;
498
+ declare const ProductList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, groupBy, }: Props$6) => react_jsx_runtime.JSX.Element;
499
+ declare const FacetList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, groupBy, }: Props$6) => react_jsx_runtime.JSX.Element;
500
+ declare const VariantList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, groupBy, }: Props$6) => react_jsx_runtime.JSX.Element;
501
+ declare const BatchList: ({ items, selectedRef, onSelect, dirtyRef, presentation, renderListRow, renderCard, groupBy, }: Props$6) => react_jsx_runtime.JSX.Element;
417
502
 
418
503
  interface DefaultRecordRowProps {
419
504
  record: RecordSummary;
420
505
  ctx: RecordSlotContext;
421
- /** Drop the status dot + subtitle (used by the `compact` preset). */
506
+ /** Drop the icon + subtitle (used by the `compact` preset). */
422
507
  compact?: boolean;
423
508
  }
424
509
  declare const DefaultRecordRow: ({ record, ctx, compact }: DefaultRecordRowProps) => react_jsx_runtime.JSX.Element;
@@ -439,11 +524,17 @@ interface PresentationSwitcherProps {
439
524
  }
440
525
  declare const PresentationSwitcher: ({ options, value, onChange, i18n }: PresentationSwitcherProps) => react_jsx_runtime.JSX.Element | null;
441
526
 
442
- declare const EmptyState: ({ title, body, action }: {
527
+ interface EmptyStateProps {
443
528
  title: string;
444
529
  body?: ReactNode;
530
+ /** Primary call-to-action — typically "+ Add your first …". */
445
531
  action?: ReactNode;
446
- }) => react_jsx_runtime.JSX.Element;
532
+ /** Optional secondary action — typically "Import from CSV". */
533
+ secondaryAction?: ReactNode;
534
+ /** Lucide icon component. Defaults to `Inbox`. */
535
+ icon?: LucideIcon;
536
+ }
537
+ declare const EmptyState: ({ title, body, action, secondaryAction, icon: Icon, }: EmptyStateProps) => react_jsx_runtime.JSX.Element;
447
538
  declare const LoadingState: () => react_jsx_runtime.JSX.Element;
448
539
  declare const ErrorState: ({ error }: {
449
540
  error: Error;
@@ -599,20 +690,24 @@ declare const ScopeBreadcrumb: ({ scope }: {
599
690
  scope: ParsedRef;
600
691
  }) => react_jsx_runtime.JSX.Element | null;
601
692
 
693
+ type IntroTone = 'info' | 'success' | 'warning';
602
694
  interface Props$1 {
603
695
  title: string;
604
696
  body: ReactNode;
605
697
  onDismiss: () => void;
698
+ /** Visual tone — controls icon and surface tint. */
699
+ tone?: IntroTone;
700
+ /** Optional "Learn more" link or button rendered inline after the body. */
701
+ action?: ReactNode;
606
702
  }
607
- declare const IntroCard: ({ title, body, onDismiss }: Props$1) => react_jsx_runtime.JSX.Element;
703
+ declare const IntroCard: ({ title, body, onDismiss, tone, action }: Props$1) => react_jsx_runtime.JSX.Element;
608
704
 
609
705
  interface Props {
610
706
  label: string;
611
- recordType: string;
612
707
  introHidden: boolean;
613
708
  onShowIntro?: () => void;
614
709
  }
615
- declare const UtilityRow: ({ label, recordType, introHidden, onShowIntro }: Props) => react_jsx_runtime.JSX.Element;
710
+ declare const UtilityRow: ({ label, introHidden, onShowIntro }: Props) => react_jsx_runtime.JSX.Element | null;
616
711
 
617
712
  interface RecordsCtx {
618
713
  SL: SmartLinksSDK;
@@ -1080,4 +1175,4 @@ declare const exportCsv: <T>(records: RecordSummary<T>[], schema: CsvSchema<T>)
1080
1175
  declare const importCsv: <T>(file: File, schema: CsvSchema<T>, ctx: RecordsCtx) => Promise<ImportReport>;
1081
1176
  declare const downloadBlob: (blob: Blob, filename: string) => void;
1082
1177
 
1083
- export { ALL_PRESENTATIONS, BatchList, BulkActionsMenu, type CollectedRecord, type CollectedSort, type CsvSchema, type CsvSchemaColumn, DEFAULT_I18N, DefaultRecordCard, DefaultRecordRow, DeleteButton, type DirtyStrategy, DrawerPreview, type EditorContext, EmptyState, ErrorState, FacetList, InheritanceMarker, InheritanceProvider, InlinePreview, IntroCard, LoadingState, type MergeStrategy, type MergedRecord, type NavConfirmI18n, type ParsedRef, PresentationSwitcher, type PreviewMode, PreviewScopePicker, PreviewToggleButton, type ProductBrowseItem, type ProductChildItem, ProductDrillDown, ProductList, type RecordBadge, RecordBrowser, type RecordCardinality, RecordEditor, RecordList, type RecordPresentation, type RecordSlotContext, type RecordSource, type RecordStatus, type RecordSummary, type RecordsAdminI18n, RecordsAdminShell, type RecordsAdminShellProps, ResolvedPreview, type ResolvedRecord, ScopeBreadcrumb, type ScopeKind, ScopeTabs, SidePreview, type SmartLinksSDK, StatusDot, StatusFilterPills, TabbedPreview, type TelemetryEvent, UtilityRow, VariantList, buildRef, bulkDelete, bulkUpsert, deleteRecord, downloadBlob, exportCsv, getRecordByRef, importCsv, listRecords, matchRecords, parseRef, parsedRefToScope, parsedRefToTarget, resolutionChain, resolveRecord, restoreRecord, scopesEqual, upsertRecord, useCollectedRecords, useDirtyNavigation, useIntroDismissed, useMergedRecord, usePresentationPref, useProductBrowse, useProductChildren, useRecordEditor, useRecordList, useResolvedRecord, useScopeProbe, useUnsavedGuard };
1178
+ export { ALL_PRESENTATIONS, BatchList, BulkActionsMenu, type CollectedRecord, type CollectedSort, type CsvSchema, type CsvSchemaColumn, DEFAULT_I18N, DEFAULT_ICONS, DefaultRecordCard, DefaultRecordRow, DeleteButton, type DirtyStrategy, DrawerPreview, type EditorContext, EmptyState, ErrorState, FacetList, InheritanceMarker, InheritanceProvider, InlinePreview, IntroCard, LoadingState, type MergeStrategy, type MergedRecord, type NavConfirmI18n, type ParsedRef, PresentationSwitcher, type PreviewMode, PreviewScopePicker, PreviewToggleButton, type ProductBrowseItem, type ProductChildItem, ProductDrillDown, ProductList, type RecordBadge, RecordBrowser, type RecordCardinality, RecordEditor, RecordList, type RecordPresentation, type RecordSlotContext, type RecordSource, type RecordStatus, type RecordSummary, type RecordsAdminI18n, type RecordsAdminIcons, RecordsAdminShell, type RecordsAdminShellProps, ResolvedPreview, type ResolvedRecord, ScopeBreadcrumb, type ScopeKind, ScopeTabs, SidePreview, type SmartLinksSDK, StatusDot, StatusFilterPills, TabbedPreview, type TelemetryEvent, UtilityRow, VariantList, buildRef, bulkDelete, bulkUpsert, deleteRecord, downloadBlob, exportCsv, getRecordByRef, importCsv, listRecords, matchRecords, mergeIcons, parseRef, parsedRefToScope, parsedRefToTarget, pickHeaderIcon, resolutionChain, resolveRecord, restoreRecord, scopesEqual, upsertRecord, useCollectedRecords, useDirtyNavigation, useIntroDismissed, useMergedRecord, usePresentationPref, useProductBrowse, useProductChildren, useRecordEditor, useRecordList, useResolvedRecord, useScopeProbe, useUnsavedGuard };