@invana/ui 0.0.32 → 0.0.33

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/dist/index.cjs CHANGED
@@ -3174,6 +3174,14 @@ var stackVariants = classVarianceAuthority.cva("flex min-w-0", {
3174
3174
  wrap: {
3175
3175
  true: "flex-wrap",
3176
3176
  false: ""
3177
+ },
3178
+ /**
3179
+ * A page: the stack takes its parent's height and its last child grows
3180
+ * into what the others leave — a header, then a canvas or a split.
3181
+ */
3182
+ fill: {
3183
+ true: "h-full min-h-0 [&>:last-child]:min-h-0 [&>:last-child]:flex-1",
3184
+ false: ""
3177
3185
  }
3178
3186
  },
3179
3187
  defaultVariants: {
@@ -3182,7 +3190,7 @@ var stackVariants = classVarianceAuthority.cva("flex min-w-0", {
3182
3190
  }
3183
3191
  });
3184
3192
  var Stack = React25__namespace.forwardRef(
3185
- ({ className, direction, gap, align, justify, wrap, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3193
+ ({ className, direction, gap, align, justify, wrap, fill, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3186
3194
  "div",
3187
3195
  {
3188
3196
  ref,
@@ -3193,7 +3201,8 @@ var Stack = React25__namespace.forwardRef(
3193
3201
  // A row lines its items up on their centres unless told otherwise.
3194
3202
  align: align ?? (direction === "row" ? "center" : void 0),
3195
3203
  justify,
3196
- wrap
3204
+ wrap,
3205
+ fill
3197
3206
  }),
3198
3207
  className
3199
3208
  ),
@@ -3749,7 +3758,7 @@ var Eyebrow = React25__namespace.forwardRef(
3749
3758
  {
3750
3759
  ref,
3751
3760
  className: cn(
3752
- "flex items-baseline gap-2 text-sm font-semibold uppercase tracking-wide",
3761
+ "flex items-center gap-2 text-sm font-semibold uppercase tracking-wide",
3753
3762
  tone === "muted" && "text-muted-foreground",
3754
3763
  tone === "foreground" && "text-foreground",
3755
3764
  tone === "accent" && "text-primary",
@@ -4445,26 +4454,29 @@ var VARIANT = {
4445
4454
  item: "h-full rounded-none px-3 py-2",
4446
4455
  hover: "hover:text-foreground",
4447
4456
  open: "data-[state=open]:text-foreground",
4448
- active: "bg-primary/10 text-primary border-b-2 border-primary mb-[-1px]",
4457
+ active: "bg-primary/10 text-primary border-b-2 border-primary translate-y-px",
4449
4458
  strip: "items-stretch"
4450
4459
  },
4451
4460
  /**
4452
4461
  * The workbook tab: boxed on top / left / right with an *open bottom*, so it
4453
- * punches through the strip's own rule — the classic folder-tab notch.
4462
+ * punches through the strip's own rule — the classic folder-tab notch. The
4463
+ * box wears the rule's own colour and the body's fill, so the active tab and
4464
+ * its page read as one surface; the accent is the label plus a 2px line on
4465
+ * the tab's outer edge.
4454
4466
  */
4455
4467
  folder: {
4456
4468
  item: "h-full rounded-none px-3 py-2 gap-1.5",
4457
4469
  hover: "hover:text-foreground",
4458
4470
  open: "data-[state=open]:text-foreground",
4459
- active: "mb-[-1px] rounded-t-md border border-b-0 border-primary text-primary",
4471
+ active: "z-10 translate-y-px rounded-t-md border border-b-0 border-border bg-card text-primary shadow-[inset_0_2px_0_var(--color-primary)]",
4460
4472
  strip: "items-stretch"
4461
4473
  },
4462
- /** The folder tab turned over, for a strip under its pages: open at the top, rounded below. */
4474
+ /** The folder tab turned over, for a strip under its pages: open at the top, rounded below, accent line underneath. */
4463
4475
  "folder-bottom": {
4464
4476
  item: "h-full rounded-none px-3 py-2 gap-1.5",
4465
4477
  hover: "hover:text-foreground",
4466
4478
  open: "data-[state=open]:text-foreground",
4467
- active: "mt-[-1px] rounded-b-md border border-t-0 border-primary text-primary",
4479
+ active: "z-10 mt-[-1px] rounded-b-md border border-t-0 border-border bg-card text-primary shadow-[inset_0_-2px_0_var(--color-primary)]",
4468
4480
  strip: "items-stretch"
4469
4481
  }
4470
4482
  };
@@ -4814,14 +4826,14 @@ var NavBase = ({
4814
4826
  sections.start?.content && /* @__PURE__ */ jsxRuntime.jsx(
4815
4827
  "div",
4816
4828
  {
4817
- className: `${sectionWrapperClass} ${sections.start.className || ""}`,
4829
+ className: `${sectionWrapperClass} ${isVertical ? "" : "min-w-0 shrink"} ${sections.start.className || ""}`,
4818
4830
  children: sections.start.content
4819
4831
  }
4820
4832
  ),
4821
4833
  sections.center?.content ? /* @__PURE__ */ jsxRuntime.jsx(
4822
4834
  "div",
4823
4835
  {
4824
- className: `flex-1 ${isVertical ? "" : "flex justify-center items-center gap-1"} ${sections.center.className || ""}`,
4836
+ className: `flex-1 ${isVertical ? "" : "flex min-w-0 justify-center items-center gap-1"} ${sections.center.className || ""}`,
4825
4837
  children: sections.center.content
4826
4838
  }
4827
4839
  ) : (
@@ -4831,7 +4843,7 @@ var NavBase = ({
4831
4843
  sections.end?.content && /* @__PURE__ */ jsxRuntime.jsx(
4832
4844
  "div",
4833
4845
  {
4834
- className: `${sectionWrapperClass} ${isVertical ? "" : "ml-auto"} ${sections.end.className || ""}`,
4846
+ className: `${sectionWrapperClass} ${isVertical ? "" : "ml-auto shrink-0"} ${sections.end.className || ""}`,
4835
4847
  children: sections.end.content
4836
4848
  }
4837
4849
  )
@@ -6879,7 +6891,7 @@ var NestedMenu = (props) => {
6879
6891
  );
6880
6892
  };
6881
6893
  var PanelBox = React25__namespace.forwardRef(
6882
- ({ title, aside, flush, className, headerClassName, bodyClassName, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
6894
+ ({ title, aside, flush, fill, className, headerClassName, bodyClassName, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
6883
6895
  Card,
6884
6896
  {
6885
6897
  ref,
@@ -6888,6 +6900,7 @@ var PanelBox = React25__namespace.forwardRef(
6888
6900
  // these in a column would read as twenty floating things rather than
6889
6901
  // one page. Its corner is the surface dial, as a Card's is.
6890
6902
  "flex min-w-0 flex-col overflow-hidden rounded-surface shadow-none",
6903
+ fill && "h-full min-h-0",
6891
6904
  className
6892
6905
  ),
6893
6906
  ...props,
@@ -6907,6 +6920,7 @@ var PanelBox = React25__namespace.forwardRef(
6907
6920
  {
6908
6921
  className: cn(
6909
6922
  "flex min-w-0 flex-col",
6923
+ fill && "min-h-0 flex-1",
6910
6924
  flush ? "p-0" : title != null ? "px-2.5 py-2" : "p-2.5",
6911
6925
  bodyClassName
6912
6926
  ),
@@ -8127,6 +8141,45 @@ var SectionHeader = React25__namespace.forwardRef(({ icon, title, count, actions
8127
8141
  }
8128
8142
  ));
8129
8143
  SectionHeader.displayName = "SectionHeader";
8144
+ var TONE7 = { done: "success", current: "info", todo: "queued" };
8145
+ var StageTrail = React25__namespace.forwardRef(
8146
+ ({ steps, onPick, className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
8147
+ "nav",
8148
+ {
8149
+ ref,
8150
+ "aria-label": "Stages",
8151
+ className: cn("@container/trail flex w-full min-w-0 justify-center", className),
8152
+ ...props,
8153
+ children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex min-w-0 items-center gap-1", children: steps.map((step, i) => {
8154
+ const current = step.state === "current";
8155
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex min-w-0 items-center gap-1", children: [
8156
+ i ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "h-px w-3 shrink bg-border @min-[560px]/trail:w-8" }) : null,
8157
+ /* @__PURE__ */ jsxRuntime.jsxs(
8158
+ "button",
8159
+ {
8160
+ type: "button",
8161
+ disabled: !onPick,
8162
+ "aria-current": current ? "step" : void 0,
8163
+ "aria-label": `${step.label} \xB7 ${step.state === "todo" ? "not started" : step.state}`,
8164
+ title: step.label,
8165
+ onClick: () => onPick?.(step.id),
8166
+ className: cn(
8167
+ "inline-flex h-control-sm shrink-0 items-center gap-1.5 rounded-control px-2 text-muted-foreground",
8168
+ "enabled:hover:bg-accent enabled:hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-default",
8169
+ current && "bg-secondary text-foreground"
8170
+ ),
8171
+ children: [
8172
+ /* @__PURE__ */ jsxRuntime.jsx(StatusDot, { tone: TONE7[step.state] }),
8173
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("truncate", !current && "@max-[559px]/trail:sr-only"), children: step.label })
8174
+ ]
8175
+ }
8176
+ )
8177
+ ] }, step.id);
8178
+ }) })
8179
+ }
8180
+ )
8181
+ );
8182
+ StageTrail.displayName = "StageTrail";
8130
8183
  function TabbedPanel({
8131
8184
  tabs,
8132
8185
  defaultTab,
@@ -8785,6 +8838,29 @@ var Gantt = React25__namespace.forwardRef(
8785
8838
  }
8786
8839
  );
8787
8840
  Gantt.displayName = "Gantt";
8841
+ var HeaderTrail = React25__namespace.forwardRef(
8842
+ ({ brand, crumbs, className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs("nav", { ref, "aria-label": "Breadcrumb", className: cn("flex min-w-0 items-center gap-1", className), ...props, children: [
8843
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 select-none px-2 text-xl font-bold", children: brand }),
8844
+ /* @__PURE__ */ jsxRuntime.jsx(Separator, { orientation: "vertical", className: "h-4 shrink-0" }),
8845
+ /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex min-w-0 items-center gap-1.5 px-1.5 font-bold", children: crumbs.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: cn("flex min-w-0 items-center gap-1.5", i === crumbs.length - 1 ? "shrink" : "shrink-[2]"), children: [
8846
+ i ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": true, className: "shrink-0 text-muted-foreground", children: "/" }) : null,
8847
+ c.href || c.onClick ? /* @__PURE__ */ jsxRuntime.jsx(
8848
+ "a",
8849
+ {
8850
+ href: c.href ?? "#",
8851
+ onClick: c.onClick ? (e) => {
8852
+ e.preventDefault();
8853
+ c.onClick();
8854
+ } : void 0,
8855
+ "aria-current": i === crumbs.length - 1 ? "page" : void 0,
8856
+ className: "min-w-0 truncate rounded-control hover:text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
8857
+ children: c.label
8858
+ }
8859
+ ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "min-w-0 truncate", "aria-current": i === crumbs.length - 1 ? "page" : void 0, children: c.label })
8860
+ ] }, `${i}-${c.label}`)) })
8861
+ ] })
8862
+ );
8863
+ HeaderTrail.displayName = "HeaderTrail";
8788
8864
  var TaskNode = React25__namespace.forwardRef(
8789
8865
  ({
8790
8866
  taskKey,
@@ -10330,6 +10406,7 @@ exports.FilterChip = FilterChip;
10330
10406
  exports.FloatingPanel = FloatingPanel;
10331
10407
  exports.Gantt = Gantt;
10332
10408
  exports.GanttDetailCard = GanttDetailCard;
10409
+ exports.HeaderTrail = HeaderTrail;
10333
10410
  exports.HoverCard = HoverCard;
10334
10411
  exports.HoverCardContent = HoverCardContent;
10335
10412
  exports.HoverCardTrigger = HoverCardTrigger;
@@ -10482,6 +10559,7 @@ exports.Skeleton = Skeleton;
10482
10559
  exports.SliceSummary = SliceSummary;
10483
10560
  exports.Spinner = Spinner;
10484
10561
  exports.Stack = Stack;
10562
+ exports.StageTrail = StageTrail;
10485
10563
  exports.StatusDot = StatusDot;
10486
10564
  exports.StatusIcon = StatusIcon;
10487
10565
  exports.TabbedPanel = TabbedPanel;