@tapizlabs/ui 0.2.7 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.js +81 -20
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,11 @@ The format is based on Keep a Changelog and the package follows Semantic Version
|
|
|
10
10
|
- npm-ready README with package setup, exports, examples, and publishing guidance
|
|
11
11
|
- shared support for landing icon exports such as `Star`, `AppleIcon`, and `GooglePlayIcon`
|
|
12
12
|
|
|
13
|
+
## [0.2.9] - 2026-06-13
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
- `LogoMark` gains a `"playground"` variant — Tapiz "T" with a shell prompt `>_` glyph (chevron in signal yellow, white cursor) for the Tapiz Playground product
|
|
17
|
+
|
|
13
18
|
### Changed
|
|
14
19
|
- shared `Button` accepts icon component references in addition to rendered nodes
|
|
15
20
|
- shared `ConfirmDialog` supports both `description` and compatibility `message` props
|
package/dist/index.d.ts
CHANGED
|
@@ -102,8 +102,17 @@ interface LogoMarkProps {
|
|
|
102
102
|
bgClassName?: string;
|
|
103
103
|
bgFill?: string;
|
|
104
104
|
bgOpacity?: number;
|
|
105
|
+
/**
|
|
106
|
+
* Product glyph:
|
|
107
|
+
* - "lms" = T monogram
|
|
108
|
+
* - "boards" = kanban columns
|
|
109
|
+
* - "playground" = T + shell prompt `>_` (SQL/terminal)
|
|
110
|
+
* - "whiteboard" = tabla sa skiciranim potezom
|
|
111
|
+
* - "cloud" = oblak sa T monogramom (Tapiz Cloud Platform / status)
|
|
112
|
+
*/
|
|
113
|
+
variant?: "lms" | "boards" | "playground" | "whiteboard" | "cloud";
|
|
105
114
|
}
|
|
106
|
-
declare const LogoMark: ({ size, className, }: LogoMarkProps) => react.JSX.Element;
|
|
115
|
+
declare const LogoMark: ({ size, className, bgClassName, bgFill, bgOpacity, variant, }: LogoMarkProps) => react.JSX.Element;
|
|
107
116
|
|
|
108
117
|
declare const FormIcon: ({ size, className, style }: IconProps) => react.JSX.Element;
|
|
109
118
|
declare const CalendarWeek: ({ size, className, style }: IconProps) => react.JSX.Element;
|
package/dist/index.js
CHANGED
|
@@ -491,27 +491,88 @@ var Clock = ({ size = 13, className, style }) => /* @__PURE__ */ jsxs5("svg", {
|
|
|
491
491
|
] });
|
|
492
492
|
|
|
493
493
|
// src/components/icons/LogoIcons.tsx
|
|
494
|
-
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
494
|
+
import { Fragment, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
495
495
|
var LogoMark = ({
|
|
496
496
|
size = 28,
|
|
497
|
-
className
|
|
497
|
+
className,
|
|
498
|
+
bgClassName,
|
|
499
|
+
bgFill = "#1496b3",
|
|
500
|
+
bgOpacity = 1,
|
|
501
|
+
variant = "lms"
|
|
498
502
|
}) => /* @__PURE__ */ jsxs6(
|
|
499
503
|
"svg",
|
|
500
504
|
{
|
|
501
505
|
width: size,
|
|
502
506
|
height: size,
|
|
503
|
-
className
|
|
504
|
-
viewBox: "0 0
|
|
507
|
+
className,
|
|
508
|
+
viewBox: "0 0 64 64",
|
|
505
509
|
fill: "none",
|
|
506
510
|
children: [
|
|
507
|
-
/* @__PURE__ */ jsx6("rect", { width: "
|
|
508
|
-
/* @__PURE__ */
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
/* @__PURE__ */ jsxs6("g", { fill: "
|
|
513
|
-
/* @__PURE__ */ jsx6("rect", { x: "
|
|
514
|
-
/* @__PURE__ */ jsx6("rect", { x: "
|
|
511
|
+
/* @__PURE__ */ jsx6("rect", { width: "64", height: "64", rx: "14", fill: bgFill, opacity: bgOpacity, className: bgClassName }),
|
|
512
|
+
variant === "lms" && /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
|
|
513
|
+
/* @__PURE__ */ jsx6("rect", { x: "14", y: "14", width: "36", height: "10", rx: "3" }),
|
|
514
|
+
/* @__PURE__ */ jsx6("rect", { x: "27", y: "14", width: "10", height: "36", rx: "3" })
|
|
515
|
+
] }),
|
|
516
|
+
variant === "boards" && /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
|
|
517
|
+
/* @__PURE__ */ jsx6("rect", { x: "13", y: "15", width: "10", height: "26", rx: "5" }),
|
|
518
|
+
/* @__PURE__ */ jsx6("rect", { x: "27", y: "15", width: "10", height: "34", rx: "5" }),
|
|
519
|
+
/* @__PURE__ */ jsx6("rect", { x: "41", y: "15", width: "10", height: "20", rx: "5" })
|
|
520
|
+
] }),
|
|
521
|
+
variant === "playground" && /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
522
|
+
/* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
|
|
523
|
+
/* @__PURE__ */ jsx6("rect", { x: "13", y: "12", width: "38", height: "9", rx: "3" }),
|
|
524
|
+
/* @__PURE__ */ jsx6("rect", { x: "27", y: "12", width: "10", height: "30", rx: "3" })
|
|
525
|
+
] }),
|
|
526
|
+
/* @__PURE__ */ jsx6(
|
|
527
|
+
"path",
|
|
528
|
+
{
|
|
529
|
+
d: "M16 46 L23 51 L16 56",
|
|
530
|
+
stroke: "#d4ff3a",
|
|
531
|
+
strokeWidth: "4.5",
|
|
532
|
+
strokeLinecap: "round",
|
|
533
|
+
strokeLinejoin: "round",
|
|
534
|
+
fill: "none"
|
|
535
|
+
}
|
|
536
|
+
),
|
|
537
|
+
/* @__PURE__ */ jsx6("rect", { x: "30", y: "52.5", width: "14", height: "4.5", rx: "2.25", fill: "#fff" })
|
|
538
|
+
] }),
|
|
539
|
+
variant === "whiteboard" && /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
540
|
+
/* @__PURE__ */ jsx6("rect", { x: "12", y: "15", width: "40", height: "28", rx: "4", fill: "#fff" }),
|
|
541
|
+
/* @__PURE__ */ jsx6(
|
|
542
|
+
"path",
|
|
543
|
+
{
|
|
544
|
+
d: "M19 35 C24 24, 30 24, 33 31 C35.5 37, 41 36, 45 27",
|
|
545
|
+
stroke: "#1496b3",
|
|
546
|
+
strokeWidth: "3.4",
|
|
547
|
+
strokeLinecap: "round",
|
|
548
|
+
strokeLinejoin: "round",
|
|
549
|
+
fill: "none"
|
|
550
|
+
}
|
|
551
|
+
),
|
|
552
|
+
/* @__PURE__ */ jsx6("circle", { cx: "19", cy: "35", r: "2.6", fill: "#1496b3" }),
|
|
553
|
+
/* @__PURE__ */ jsx6("circle", { cx: "45", cy: "27", r: "2.6", fill: "#d4ff3a" }),
|
|
554
|
+
/* @__PURE__ */ jsx6(
|
|
555
|
+
"path",
|
|
556
|
+
{
|
|
557
|
+
d: "M22 43 L19 51 M42 43 L45 51",
|
|
558
|
+
stroke: "#fff",
|
|
559
|
+
strokeWidth: "4",
|
|
560
|
+
strokeLinecap: "round"
|
|
561
|
+
}
|
|
562
|
+
)
|
|
563
|
+
] }),
|
|
564
|
+
variant === "cloud" && /* @__PURE__ */ jsxs6(Fragment, { children: [
|
|
565
|
+
/* @__PURE__ */ jsx6(
|
|
566
|
+
"path",
|
|
567
|
+
{
|
|
568
|
+
fill: "#fff",
|
|
569
|
+
d: "M23 45 q-4.6 0-7.8-3.2Q12 38.6 12 34 q0-3.95 2.5-7 2.5-3.05 6.4-3.83 1.05-4.25 4.6-6.91Q29.05 13.6 33.7 13.6 q5.75 0 9.78 3.9 4.03 3.9 4.22 9.52 3.26.29 5.38 2.69 2.12 2.4 2.12 5.63 0 3.58-2.56 6.11T46 47 H23Z"
|
|
570
|
+
}
|
|
571
|
+
),
|
|
572
|
+
/* @__PURE__ */ jsxs6("g", { fill: "#1496b3", children: [
|
|
573
|
+
/* @__PURE__ */ jsx6("rect", { x: "25", y: "30", width: "16", height: "3.6", rx: "1.6" }),
|
|
574
|
+
/* @__PURE__ */ jsx6("rect", { x: "31.2", y: "30", width: "3.6", height: "12", rx: "1.6" })
|
|
575
|
+
] })
|
|
515
576
|
] })
|
|
516
577
|
]
|
|
517
578
|
}
|
|
@@ -1773,7 +1834,7 @@ function StatusBadge({ label, variant = "default", className = "" }) {
|
|
|
1773
1834
|
// src/components/shared/ActionMenu.tsx
|
|
1774
1835
|
import { useEffect as useEffect2, useLayoutEffect, useRef as useRef2, useState as useState5 } from "react";
|
|
1775
1836
|
import { createPortal as createPortal4 } from "react-dom";
|
|
1776
|
-
import { Fragment, jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
1837
|
+
import { Fragment as Fragment2, jsx as jsx41, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
1777
1838
|
var defaultMenuStyle = {
|
|
1778
1839
|
background: "var(--color-ink-200)",
|
|
1779
1840
|
border: "1px solid var(--color-border-hi)",
|
|
@@ -1857,7 +1918,7 @@ function ActionMenu({
|
|
|
1857
1918
|
document.removeEventListener("keydown", handle);
|
|
1858
1919
|
};
|
|
1859
1920
|
}, [open]);
|
|
1860
|
-
const menuNode = open && pos ? /* @__PURE__ */ jsxs28(
|
|
1921
|
+
const menuNode = open && pos ? /* @__PURE__ */ jsxs28(Fragment2, { children: [
|
|
1861
1922
|
/* @__PURE__ */ jsx41("div", { className: "fixed inset-0 z-9998", onClick: () => setOpen(false) }),
|
|
1862
1923
|
/* @__PURE__ */ jsx41(
|
|
1863
1924
|
"div",
|
|
@@ -2235,7 +2296,7 @@ function Breadcrumbs({ items, separator = "/", className = "" }) {
|
|
|
2235
2296
|
}
|
|
2236
2297
|
|
|
2237
2298
|
// src/components/navigation/SidebarNav.tsx
|
|
2238
|
-
import { Fragment as
|
|
2299
|
+
import { Fragment as Fragment3, jsx as jsx56, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
2239
2300
|
function SidebarNav({ groups, header, footer, className = "" }) {
|
|
2240
2301
|
return /* @__PURE__ */ jsxs39("div", { className: `flex h-full min-h-screen flex-col bg-[var(--tapiz-bg-surface)] ${className}`, children: [
|
|
2241
2302
|
header ? /* @__PURE__ */ jsx56("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-4", children: header }) : null,
|
|
@@ -2252,7 +2313,7 @@ function SidebarNavLink({ item }) {
|
|
|
2252
2313
|
item.active ? "border-[var(--tapiz-border-strong)] bg-[var(--tapiz-accent-soft)] text-[var(--tapiz-text-primary)] shadow-[inset_3px_0_0_var(--tapiz-accent)]" : "border-transparent text-[var(--tapiz-text-secondary)] hover:border-[var(--tapiz-border-subtle)] hover:bg-[var(--tapiz-bg-surface-muted)] hover:text-[var(--tapiz-text-primary)]",
|
|
2253
2314
|
item.disabled ? "pointer-events-none opacity-40" : ""
|
|
2254
2315
|
].filter(Boolean).join(" ");
|
|
2255
|
-
const content = /* @__PURE__ */ jsxs39(
|
|
2316
|
+
const content = /* @__PURE__ */ jsxs39(Fragment3, { children: [
|
|
2256
2317
|
item.icon ? /* @__PURE__ */ jsx56("span", { className: "grid size-5 place-items-center text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
|
|
2257
2318
|
/* @__PURE__ */ jsx56("span", { className: "min-w-0 flex-1 truncate", children: item.label }),
|
|
2258
2319
|
item.badge ? /* @__PURE__ */ jsx56("span", { children: item.badge }) : null
|
|
@@ -2858,9 +2919,9 @@ function DataToolbar({ title, description, search, filters, actions, className =
|
|
|
2858
2919
|
}
|
|
2859
2920
|
|
|
2860
2921
|
// src/components/framework/ResourceCard.tsx
|
|
2861
|
-
import { Fragment as
|
|
2922
|
+
import { Fragment as Fragment4, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
|
|
2862
2923
|
function ResourceCard({ title, description, eyebrow, icon, meta, status, actions, href, className = "" }) {
|
|
2863
|
-
const content = /* @__PURE__ */ jsxs65(
|
|
2924
|
+
const content = /* @__PURE__ */ jsxs65(Fragment4, { children: [
|
|
2864
2925
|
/* @__PURE__ */ jsxs65("div", { className: "flex items-start justify-between gap-4", children: [
|
|
2865
2926
|
/* @__PURE__ */ jsxs65("div", { className: "flex min-w-0 items-start gap-3", children: [
|
|
2866
2927
|
icon ? /* @__PURE__ */ jsx88("div", { className: "border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface-muted)] p-2 text-[var(--tapiz-accent)]", children: icon }) : null,
|
|
@@ -3155,12 +3216,12 @@ function MasonryGrid({ children, columns = 3, gap = "md", className = "", style
|
|
|
3155
3216
|
}
|
|
3156
3217
|
|
|
3157
3218
|
// src/components/layout/PageRail.tsx
|
|
3158
|
-
import { Fragment as
|
|
3219
|
+
import { Fragment as Fragment5, jsx as jsx103, jsxs as jsxs79 } from "react/jsx-runtime";
|
|
3159
3220
|
function PageRail({ title, items, actions, className = "", style }) {
|
|
3160
3221
|
return /* @__PURE__ */ jsxs79("aside", { className: ["sticky top-20 rounded-none border border-[var(--tapiz-border-subtle)] bg-[var(--tapiz-bg-surface)] p-3 shadow-[var(--tapiz-shadow-sm)]", className].filter(Boolean).join(" "), style, children: [
|
|
3161
3222
|
title ? /* @__PURE__ */ jsx103("div", { className: "kicker mb-3 px-2", children: title }) : null,
|
|
3162
3223
|
/* @__PURE__ */ jsx103("nav", { className: "flex flex-col gap-1", children: items.map((item, index) => {
|
|
3163
|
-
const content = /* @__PURE__ */ jsxs79(
|
|
3224
|
+
const content = /* @__PURE__ */ jsxs79(Fragment5, { children: [
|
|
3164
3225
|
/* @__PURE__ */ jsx103("span", { className: "truncate", children: item.label }),
|
|
3165
3226
|
item.meta ? /* @__PURE__ */ jsx103("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.meta }) : null
|
|
3166
3227
|
] });
|