@soulbatical/tetra-ui 0.1.16 → 0.1.18
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.
Potentially problematic release.
This version of @soulbatical/tetra-ui might be problematic. Click here for more details.
|
@@ -1,85 +1,40 @@
|
|
|
1
1
|
import React, { type ReactNode } from "react";
|
|
2
2
|
export interface ListDetailLayoutProps<TItem> {
|
|
3
|
-
/** Items to display in the list */
|
|
4
3
|
items: TItem[];
|
|
5
|
-
/** Extract unique ID from item */
|
|
6
4
|
getItemId: (item: TItem) => string;
|
|
7
|
-
/** Render a single list row */
|
|
8
5
|
renderListItem: (item: TItem, isSelected: boolean) => ReactNode;
|
|
9
|
-
/** Render the detail panel for the selected item */
|
|
10
6
|
renderDetail: (item: TItem) => ReactNode;
|
|
11
|
-
/** Currently selected item ID (controlled) */
|
|
12
7
|
selectedId?: string | null;
|
|
13
|
-
/** Called when an item is selected */
|
|
14
8
|
onSelect: (id: string | null) => void;
|
|
15
|
-
/** Action buttons at the bottom of the detail panel */
|
|
16
9
|
actions?: (item: TItem) => ReactNode;
|
|
17
|
-
/** Enable keyboard navigation with arrow keys (default: true) */
|
|
18
10
|
keyboardNav?: boolean;
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
|
|
23
|
-
/**
|
|
11
|
+
/** Initial list width in px when detail is open (default: 360) */
|
|
12
|
+
initialListWidth?: number;
|
|
13
|
+
/** Min list width in px (default: 240) */
|
|
14
|
+
minListWidth?: number;
|
|
15
|
+
/** Max list width in px (default: 600) */
|
|
16
|
+
maxListWidth?: number;
|
|
17
|
+
/** Enable resizable divider (default: true) */
|
|
18
|
+
resizable?: boolean;
|
|
24
19
|
title?: string;
|
|
25
|
-
/** Subtitle / count indicator */
|
|
26
20
|
subtitle?: string;
|
|
27
|
-
/** Header actions (create button, etc.) */
|
|
28
21
|
headerActions?: ReactNode;
|
|
29
|
-
/** Show loading state */
|
|
30
22
|
loading?: boolean;
|
|
31
|
-
/** Empty state when no items */
|
|
32
23
|
emptyMessage?: string;
|
|
33
|
-
/** Infinite scroll sentinel ref */
|
|
34
24
|
sentinelRef?: React.RefObject<HTMLDivElement> | ((node: HTMLDivElement | null) => void);
|
|
35
|
-
/** Whether more items can be loaded */
|
|
36
25
|
hasMore?: boolean;
|
|
37
|
-
/** Loading more indicator */
|
|
38
26
|
loadingMore?: boolean;
|
|
39
|
-
/** Additional CSS class for the outer container */
|
|
40
27
|
className?: string;
|
|
41
28
|
}
|
|
42
29
|
/**
|
|
43
|
-
* ListDetailLayout — Master-detail split view
|
|
30
|
+
* ListDetailLayout — Master-detail split view with resizable divider.
|
|
44
31
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* import { ListDetailLayout } from '@soulbatical/tetra-ui';
|
|
52
|
-
*
|
|
53
|
-
* const [selectedId, setSelectedId] = useState<string | null>(null);
|
|
54
|
-
*
|
|
55
|
-
* <ListDetailLayout
|
|
56
|
-
* items={leads}
|
|
57
|
-
* getItemId={(lead) => lead.id}
|
|
58
|
-
* selectedId={selectedId}
|
|
59
|
-
* onSelect={setSelectedId}
|
|
60
|
-
* renderListItem={(lead, isSelected) => (
|
|
61
|
-
* <div className={isSelected ? 'bg-blue-50' : ''}>
|
|
62
|
-
* <p className="font-medium">{lead.name}</p>
|
|
63
|
-
* <p className="text-sm text-gray-500">{lead.company}</p>
|
|
64
|
-
* </div>
|
|
65
|
-
* )}
|
|
66
|
-
* renderDetail={(lead) => (
|
|
67
|
-
* <div>
|
|
68
|
-
* <h2>{lead.name}</h2>
|
|
69
|
-
* <p>{lead.email}</p>
|
|
70
|
-
* <p>{lead.phone}</p>
|
|
71
|
-
* </div>
|
|
72
|
-
* )}
|
|
73
|
-
* actions={(lead) => (
|
|
74
|
-
* <>
|
|
75
|
-
* <button onClick={() => archive(lead.id)}>Archive</button>
|
|
76
|
-
* <button onClick={() => convert(lead.id)}>Convert to Deal</button>
|
|
77
|
-
* </>
|
|
78
|
-
* )}
|
|
79
|
-
* title="Leads Inbox"
|
|
80
|
-
* subtitle="198 leads"
|
|
81
|
-
* />
|
|
82
|
-
* ```
|
|
32
|
+
* Features:
|
|
33
|
+
* - Scrollable list on the left, detail panel on the right
|
|
34
|
+
* - Draggable divider to resize panels
|
|
35
|
+
* - Full dark mode support via CSS variables (bg-card, border-edge, text-heading)
|
|
36
|
+
* - Arrow key navigation between items
|
|
37
|
+
* - Smooth slide-in animation for detail panel
|
|
83
38
|
*/
|
|
84
|
-
export declare function ListDetailLayout<TItem>({ items, getItemId, renderListItem, renderDetail, selectedId, onSelect, actions, keyboardNav,
|
|
39
|
+
export declare function ListDetailLayout<TItem>({ items, getItemId, renderListItem, renderDetail, selectedId, onSelect, actions, keyboardNav, initialListWidth, minListWidth, maxListWidth, resizable, title, subtitle, headerActions, loading, emptyMessage, sentinelRef, hasMore, loadingMore, className, }: ListDetailLayoutProps<TItem>): import("react/jsx-runtime").JSX.Element;
|
|
85
40
|
//# sourceMappingURL=ListDetailLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListDetailLayout.d.ts","sourceRoot":"","sources":["../../src/components/ListDetailLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"ListDetailLayout.d.ts","sourceRoot":"","sources":["../../src/components/ListDetailLayout.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAIxF,MAAM,WAAW,qBAAqB,CAAC,KAAK;IAC1C,KAAK,EAAE,KAAK,EAAE,CAAC;IACf,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAC;IACnC,cAAc,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,KAAK,SAAS,CAAC;IAChE,YAAY,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC;IACxF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8BD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,EACtC,KAAK,EACL,SAAS,EACT,cAAc,EACd,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,OAAO,EACP,WAAkB,EAClB,gBAAsB,EACtB,YAAkB,EAClB,YAAkB,EAClB,SAAgB,EAChB,KAAK,EACL,QAAQ,EACR,aAAa,EACb,OAAe,EACf,YAA+B,EAC/B,WAAW,EACX,OAAe,EACf,WAAmB,EACnB,SAAS,GACV,EAAE,qBAAqB,CAAC,KAAK,CAAC,2CAmP9B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useCallback, useRef } from "react";
|
|
4
|
-
// ───
|
|
3
|
+
import { useEffect, useCallback, useRef, useState } from "react";
|
|
4
|
+
// ─── Icons ──────────────────────────────────────────────────
|
|
5
5
|
function CloseIcon() {
|
|
6
6
|
return (_jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", strokeWidth: 1.5, stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) }));
|
|
7
7
|
}
|
|
@@ -13,51 +13,55 @@ function ChevronDownIcon() {
|
|
|
13
13
|
}
|
|
14
14
|
// ─── Component ──────────────────────────────────────────────
|
|
15
15
|
/**
|
|
16
|
-
* ListDetailLayout — Master-detail split view
|
|
16
|
+
* ListDetailLayout — Master-detail split view with resizable divider.
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* import { ListDetailLayout } from '@soulbatical/tetra-ui';
|
|
25
|
-
*
|
|
26
|
-
* const [selectedId, setSelectedId] = useState<string | null>(null);
|
|
27
|
-
*
|
|
28
|
-
* <ListDetailLayout
|
|
29
|
-
* items={leads}
|
|
30
|
-
* getItemId={(lead) => lead.id}
|
|
31
|
-
* selectedId={selectedId}
|
|
32
|
-
* onSelect={setSelectedId}
|
|
33
|
-
* renderListItem={(lead, isSelected) => (
|
|
34
|
-
* <div className={isSelected ? 'bg-blue-50' : ''}>
|
|
35
|
-
* <p className="font-medium">{lead.name}</p>
|
|
36
|
-
* <p className="text-sm text-gray-500">{lead.company}</p>
|
|
37
|
-
* </div>
|
|
38
|
-
* )}
|
|
39
|
-
* renderDetail={(lead) => (
|
|
40
|
-
* <div>
|
|
41
|
-
* <h2>{lead.name}</h2>
|
|
42
|
-
* <p>{lead.email}</p>
|
|
43
|
-
* <p>{lead.phone}</p>
|
|
44
|
-
* </div>
|
|
45
|
-
* )}
|
|
46
|
-
* actions={(lead) => (
|
|
47
|
-
* <>
|
|
48
|
-
* <button onClick={() => archive(lead.id)}>Archive</button>
|
|
49
|
-
* <button onClick={() => convert(lead.id)}>Convert to Deal</button>
|
|
50
|
-
* </>
|
|
51
|
-
* )}
|
|
52
|
-
* title="Leads Inbox"
|
|
53
|
-
* subtitle="198 leads"
|
|
54
|
-
* />
|
|
55
|
-
* ```
|
|
18
|
+
* Features:
|
|
19
|
+
* - Scrollable list on the left, detail panel on the right
|
|
20
|
+
* - Draggable divider to resize panels
|
|
21
|
+
* - Full dark mode support via CSS variables (bg-card, border-edge, text-heading)
|
|
22
|
+
* - Arrow key navigation between items
|
|
23
|
+
* - Smooth slide-in animation for detail panel
|
|
56
24
|
*/
|
|
57
|
-
export function ListDetailLayout({ items, getItemId, renderListItem, renderDetail, selectedId, onSelect, actions, keyboardNav = true,
|
|
25
|
+
export function ListDetailLayout({ items, getItemId, renderListItem, renderDetail, selectedId, onSelect, actions, keyboardNav = true, initialListWidth = 360, minListWidth = 240, maxListWidth = 600, resizable = true, title, subtitle, headerActions, loading = false, emptyMessage = "No items found", sentinelRef, hasMore = false, loadingMore = false, className, }) {
|
|
58
26
|
const listRef = useRef(null);
|
|
27
|
+
const containerRef = useRef(null);
|
|
28
|
+
const [listWidth, setListWidth] = useState(initialListWidth);
|
|
29
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
59
30
|
const selectedItem = items.find((item) => getItemId(item) === selectedId);
|
|
60
31
|
const isDetailOpen = selectedId !== null && selectedItem !== undefined;
|
|
32
|
+
// ─── Resizable Divider ─────────────────────────────
|
|
33
|
+
const handleMouseDown = useCallback((e) => {
|
|
34
|
+
if (!resizable)
|
|
35
|
+
return;
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
setIsDragging(true);
|
|
38
|
+
}, [resizable]);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (!isDragging)
|
|
41
|
+
return;
|
|
42
|
+
const handleMouseMove = (e) => {
|
|
43
|
+
const container = containerRef.current;
|
|
44
|
+
if (!container)
|
|
45
|
+
return;
|
|
46
|
+
const rect = container.getBoundingClientRect();
|
|
47
|
+
const newWidth = Math.max(minListWidth, Math.min(maxListWidth, e.clientX - rect.left));
|
|
48
|
+
setListWidth(newWidth);
|
|
49
|
+
};
|
|
50
|
+
const handleMouseUp = () => {
|
|
51
|
+
setIsDragging(false);
|
|
52
|
+
};
|
|
53
|
+
document.addEventListener("mousemove", handleMouseMove);
|
|
54
|
+
document.addEventListener("mouseup", handleMouseUp);
|
|
55
|
+
// Prevent text selection while dragging
|
|
56
|
+
document.body.style.userSelect = "none";
|
|
57
|
+
document.body.style.cursor = "col-resize";
|
|
58
|
+
return () => {
|
|
59
|
+
document.removeEventListener("mousemove", handleMouseMove);
|
|
60
|
+
document.removeEventListener("mouseup", handleMouseUp);
|
|
61
|
+
document.body.style.userSelect = "";
|
|
62
|
+
document.body.style.cursor = "";
|
|
63
|
+
};
|
|
64
|
+
}, [isDragging, minListWidth, maxListWidth]);
|
|
61
65
|
// ─── Keyboard Navigation ──────────────────────────
|
|
62
66
|
const navigateToItem = useCallback((direction) => {
|
|
63
67
|
if (!selectedId || items.length === 0)
|
|
@@ -70,7 +74,6 @@ export function ListDetailLayout({ items, getItemId, renderListItem, renderDetai
|
|
|
70
74
|
: Math.min(items.length - 1, currentIndex + 1);
|
|
71
75
|
if (nextIndex !== currentIndex) {
|
|
72
76
|
onSelect(getItemId(items[nextIndex]));
|
|
73
|
-
// Scroll the selected item into view in the list
|
|
74
77
|
const listEl = listRef.current;
|
|
75
78
|
if (listEl) {
|
|
76
79
|
const itemEl = listEl.querySelector(`[data-item-id="${getItemId(items[nextIndex])}"]`);
|
|
@@ -102,12 +105,12 @@ export function ListDetailLayout({ items, getItemId, renderListItem, renderDetai
|
|
|
102
105
|
if (loading) {
|
|
103
106
|
return (_jsx("div", { className: `flex h-full ${className ?? ""}`, children: _jsx("div", { className: "flex-1 p-6", children: _jsx("div", { className: "space-y-3", children: Array.from({ length: 8 }).map((_, i) => (_jsx("div", { className: "h-16 animate-pulse rounded-lg bg-gray-200 dark:bg-gray-800" }, i))) }) }) }));
|
|
104
107
|
}
|
|
105
|
-
return (_jsxs("div", { className: `flex h-full overflow-hidden ${className ?? ""}`, children: [_jsxs("div", { ref: listRef, className:
|
|
108
|
+
return (_jsxs("div", { ref: containerRef, className: `flex h-full overflow-hidden rounded-lg border border-gray-200 dark:border-gray-700 ${className ?? ""}`, children: [_jsxs("div", { ref: listRef, style: isDetailOpen ? { width: `${listWidth}px`, minWidth: `${minListWidth}px`, flexShrink: 0 } : { width: "100%" }, className: "flex flex-col overflow-y-auto bg-white dark:bg-gray-900 transition-[width] duration-300", children: [(title || headerActions) && (_jsxs("div", { className: "sticky top-0 z-10 flex items-center justify-between border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 py-3", children: [_jsxs("div", { children: [title && (_jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: title })), subtitle && (_jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: subtitle }))] }), headerActions] })), items.length === 0 ? (_jsx("div", { className: "flex-1 flex items-center justify-center p-8", children: _jsx("p", { className: "text-sm text-gray-500 dark:text-gray-400", children: emptyMessage }) })) : (_jsxs("div", { className: "flex-1", children: [items.map((item) => {
|
|
106
109
|
const id = getItemId(item);
|
|
107
110
|
const isSelected = id === selectedId;
|
|
108
111
|
return (_jsx("button", { type: "button", "data-item-id": id, onClick: () => onSelect(isSelected ? null : id), className: `w-full text-left px-4 py-3 border-b border-gray-100 dark:border-gray-800 transition-colors ${isSelected
|
|
109
112
|
? "bg-blue-50 dark:bg-blue-900/30 border-l-[3px] border-l-blue-500 pl-[13px]"
|
|
110
113
|
: "hover:bg-gray-50 dark:hover:bg-gray-800/50"}`, children: renderListItem(item, isSelected) }, id));
|
|
111
|
-
}), hasMore && sentinelRef && (_jsx("div", { ref: sentinelRef, className: "py-4 flex justify-center", children: loadingMore && (_jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300 border-t-blue-500" })) }))] }))] }),
|
|
114
|
+
}), hasMore && sentinelRef && (_jsx("div", { ref: sentinelRef, className: "py-4 flex justify-center", children: loadingMore && (_jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-gray-300 dark:border-gray-600 border-t-blue-500" })) }))] }))] }), isDetailOpen && resizable && (_jsxs("div", { onMouseDown: handleMouseDown, className: `relative z-20 w-1 flex-shrink-0 cursor-col-resize group ${isDragging ? "bg-blue-500" : "bg-gray-200 dark:bg-gray-700 hover:bg-blue-400 dark:hover:bg-blue-500"} transition-colors`, children: [_jsx("div", { className: "absolute inset-y-0 -left-1 -right-1" }), _jsxs("div", { className: "absolute inset-x-0 top-1/2 -translate-y-1/2 flex flex-col items-center gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity", children: [_jsx("div", { className: "w-1 h-1 rounded-full bg-gray-400 dark:bg-gray-500" }), _jsx("div", { className: "w-1 h-1 rounded-full bg-gray-400 dark:bg-gray-500" }), _jsx("div", { className: "w-1 h-1 rounded-full bg-gray-400 dark:bg-gray-500" })] })] })), _jsx("div", { style: isDetailOpen ? { flex: "1 1 0%", minWidth: 0, opacity: 1 } : { width: 0, flex: "none", opacity: 0 }, className: `flex flex-col overflow-hidden bg-white dark:bg-gray-900 transition-all duration-300`, children: selectedItem && (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex items-center justify-between border-b border-gray-200 dark:border-gray-700 bg-white dark:bg-gray-900 px-4 py-3", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => navigateToItem("up"), className: "rounded-md p-1.5 text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 hover:text-gray-700 dark:hover:text-gray-200 disabled:opacity-30 transition-colors", disabled: items.findIndex((item) => getItemId(item) === selectedId) === 0, "aria-label": "Previous item", children: _jsx(ChevronUpIcon, {}) }), _jsx("button", { type: "button", onClick: () => navigateToItem("down"), className: "rounded-md p-1.5 text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 hover:text-gray-700 dark:hover:text-gray-200 disabled:opacity-30 transition-colors", disabled: items.findIndex((item) => getItemId(item) === selectedId) === items.length - 1, "aria-label": "Next item", children: _jsx(ChevronDownIcon, {}) })] }), _jsx("button", { type: "button", onClick: () => onSelect(null), className: "rounded-md p-1.5 text-gray-500 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-800 hover:text-gray-700 dark:hover:text-gray-200 transition-colors", "aria-label": "Close detail", children: _jsx(CloseIcon, {}) })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: renderDetail(selectedItem) }), actions && (_jsx("div", { className: "border-t border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 px-4 py-3 flex items-center gap-3", children: actions(selectedItem) }))] })) })] }));
|
|
112
115
|
}
|
|
113
116
|
//# sourceMappingURL=ListDetailLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListDetailLayout.js","sourceRoot":"","sources":["../../src/components/ListDetailLayout.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAkB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ListDetailLayout.js","sourceRoot":"","sources":["../../src/components/ListDetailLayout.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "restricted"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.1.
|
|
7
|
+
"version": "0.1.18",
|
|
8
8
|
"description": "Shared React frontend framework for Tetra platform projects (Soulbatical BV) — config-driven components, hooks, providers, and styling",
|
|
9
9
|
"type": "module",
|
|
10
10
|
"main": "dist/index.js",
|