@tapizlabs/ui 0.2.8 → 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 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,15 @@ interface LogoMarkProps {
102
102
  bgClassName?: string;
103
103
  bgFill?: string;
104
104
  bgOpacity?: number;
105
- /** Product glyph: "lms" = T monogram, "boards" = kanban columns */
106
- variant?: "lms" | "boards";
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";
107
114
  }
108
115
  declare const LogoMark: ({ size, className, bgClassName, bgFill, bgOpacity, variant, }: LogoMarkProps) => react.JSX.Element;
109
116
 
package/dist/index.js CHANGED
@@ -491,7 +491,7 @@ 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
497
  className,
@@ -509,13 +509,70 @@ var LogoMark = ({
509
509
  fill: "none",
510
510
  children: [
511
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: [
512
+ variant === "lms" && /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
513
513
  /* @__PURE__ */ jsx6("rect", { x: "14", y: "14", width: "36", height: "10", rx: "3" }),
514
514
  /* @__PURE__ */ jsx6("rect", { x: "27", y: "14", width: "10", height: "36", rx: "3" })
515
- ] }) : /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
515
+ ] }),
516
+ variant === "boards" && /* @__PURE__ */ jsxs6("g", { fill: "#fff", children: [
516
517
  /* @__PURE__ */ jsx6("rect", { x: "13", y: "15", width: "10", height: "26", rx: "5" }),
517
518
  /* @__PURE__ */ jsx6("rect", { x: "27", y: "15", width: "10", height: "34", rx: "5" }),
518
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
+ ] })
519
576
  ] })
520
577
  ]
521
578
  }
@@ -1777,7 +1834,7 @@ function StatusBadge({ label, variant = "default", className = "" }) {
1777
1834
  // src/components/shared/ActionMenu.tsx
1778
1835
  import { useEffect as useEffect2, useLayoutEffect, useRef as useRef2, useState as useState5 } from "react";
1779
1836
  import { createPortal as createPortal4 } from "react-dom";
1780
- 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";
1781
1838
  var defaultMenuStyle = {
1782
1839
  background: "var(--color-ink-200)",
1783
1840
  border: "1px solid var(--color-border-hi)",
@@ -1861,7 +1918,7 @@ function ActionMenu({
1861
1918
  document.removeEventListener("keydown", handle);
1862
1919
  };
1863
1920
  }, [open]);
1864
- const menuNode = open && pos ? /* @__PURE__ */ jsxs28(Fragment, { children: [
1921
+ const menuNode = open && pos ? /* @__PURE__ */ jsxs28(Fragment2, { children: [
1865
1922
  /* @__PURE__ */ jsx41("div", { className: "fixed inset-0 z-9998", onClick: () => setOpen(false) }),
1866
1923
  /* @__PURE__ */ jsx41(
1867
1924
  "div",
@@ -2239,7 +2296,7 @@ function Breadcrumbs({ items, separator = "/", className = "" }) {
2239
2296
  }
2240
2297
 
2241
2298
  // src/components/navigation/SidebarNav.tsx
2242
- import { Fragment as Fragment2, jsx as jsx56, jsxs as jsxs39 } from "react/jsx-runtime";
2299
+ import { Fragment as Fragment3, jsx as jsx56, jsxs as jsxs39 } from "react/jsx-runtime";
2243
2300
  function SidebarNav({ groups, header, footer, className = "" }) {
2244
2301
  return /* @__PURE__ */ jsxs39("div", { className: `flex h-full min-h-screen flex-col bg-[var(--tapiz-bg-surface)] ${className}`, children: [
2245
2302
  header ? /* @__PURE__ */ jsx56("div", { className: "border-b border-[var(--tapiz-border-subtle)] p-4", children: header }) : null,
@@ -2256,7 +2313,7 @@ function SidebarNavLink({ item }) {
2256
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)]",
2257
2314
  item.disabled ? "pointer-events-none opacity-40" : ""
2258
2315
  ].filter(Boolean).join(" ");
2259
- const content = /* @__PURE__ */ jsxs39(Fragment2, { children: [
2316
+ const content = /* @__PURE__ */ jsxs39(Fragment3, { children: [
2260
2317
  item.icon ? /* @__PURE__ */ jsx56("span", { className: "grid size-5 place-items-center text-[var(--tapiz-text-muted)]", children: item.icon }) : null,
2261
2318
  /* @__PURE__ */ jsx56("span", { className: "min-w-0 flex-1 truncate", children: item.label }),
2262
2319
  item.badge ? /* @__PURE__ */ jsx56("span", { children: item.badge }) : null
@@ -2862,9 +2919,9 @@ function DataToolbar({ title, description, search, filters, actions, className =
2862
2919
  }
2863
2920
 
2864
2921
  // src/components/framework/ResourceCard.tsx
2865
- import { Fragment as Fragment3, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
2922
+ import { Fragment as Fragment4, jsx as jsx88, jsxs as jsxs65 } from "react/jsx-runtime";
2866
2923
  function ResourceCard({ title, description, eyebrow, icon, meta, status, actions, href, className = "" }) {
2867
- const content = /* @__PURE__ */ jsxs65(Fragment3, { children: [
2924
+ const content = /* @__PURE__ */ jsxs65(Fragment4, { children: [
2868
2925
  /* @__PURE__ */ jsxs65("div", { className: "flex items-start justify-between gap-4", children: [
2869
2926
  /* @__PURE__ */ jsxs65("div", { className: "flex min-w-0 items-start gap-3", children: [
2870
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,
@@ -3159,12 +3216,12 @@ function MasonryGrid({ children, columns = 3, gap = "md", className = "", style
3159
3216
  }
3160
3217
 
3161
3218
  // src/components/layout/PageRail.tsx
3162
- import { Fragment as Fragment4, jsx as jsx103, jsxs as jsxs79 } from "react/jsx-runtime";
3219
+ import { Fragment as Fragment5, jsx as jsx103, jsxs as jsxs79 } from "react/jsx-runtime";
3163
3220
  function PageRail({ title, items, actions, className = "", style }) {
3164
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: [
3165
3222
  title ? /* @__PURE__ */ jsx103("div", { className: "kicker mb-3 px-2", children: title }) : null,
3166
3223
  /* @__PURE__ */ jsx103("nav", { className: "flex flex-col gap-1", children: items.map((item, index) => {
3167
- const content = /* @__PURE__ */ jsxs79(Fragment4, { children: [
3224
+ const content = /* @__PURE__ */ jsxs79(Fragment5, { children: [
3168
3225
  /* @__PURE__ */ jsx103("span", { className: "truncate", children: item.label }),
3169
3226
  item.meta ? /* @__PURE__ */ jsx103("span", { className: "font-mono text-[10px] text-[var(--tapiz-text-muted)]", children: item.meta }) : null
3170
3227
  ] });