@vegastack/design 0.7.30 → 0.7.32

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.
@@ -43,6 +43,13 @@ var prose = {
43
43
  ul: "[&_ul]:my-3 [&_ul]:ms-6 [&_ul]:list-disc [&_ul]:text-foreground [&_ul]:marker:text-muted-foreground [&_ul.contains-task-list]:list-none",
44
44
  ol: "[&_ol]:my-3 [&_ol]:ms-6 [&_ol]:list-decimal [&_ol]:text-foreground [&_ol]:marker:text-muted-foreground",
45
45
  li: "[&_li]:mt-1.5 [&_li]:leading-relaxed",
46
+ // Task lists, one shape for both producers: `MarkdownView` tags the GFM list
47
+ // `data-type="taskList"` and each item `data-type="taskItem"` with its body in a
48
+ // `data-slot="task-item-content"` box, which is exactly the DOM Tiptap's `TaskItem` node view
49
+ // renders — so the checkbox IS the marker, the body wraps beside it, and a nested list indents
50
+ // under the body in view and edit alike. A cell's or item's paragraph inherits its ink so a
51
+ // Tiptap `<td><p>` reads the same as GFM's bare `<td>`.
52
+ taskList: "[&_ul[data-type=taskList]]:ms-0 [&_ul[data-type=taskList]]:list-none [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:items-start [&_li[data-type=taskItem]]:gap-2 [&_li[data-type=taskItem]_[data-slot=checkbox]]:mt-1 [&_li[data-type=taskItem]_[data-slot=checkbox]]:me-0 [&_[data-slot=task-item-content]]:min-w-0 [&_[data-slot=task-item-content]]:flex-1 [&_td_p]:text-inherit [&_th_p]:text-inherit",
46
53
  blockquote: "[&_blockquote]:my-3 [&_blockquote]:border-s-2 [&_blockquote]:border-border [&_blockquote]:ps-4 [&_blockquote]:text-muted-foreground [&_blockquote]:italic",
47
54
  // Inline code is a chip. Code inside a `pre` is not: it inherits the panel's ground, so the chip
48
55
  // is undone at higher specificity (`[&_pre_code]` is (0,1,2) against the chip's (0,1,1)).
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  cn
4
- } from "./chunk-OHGNXG5G.js";
4
+ } from "./chunk-6CWBD6NJ.js";
5
5
 
6
6
  // src/icons/create-animated-icon.tsx
7
7
  import * as React from "react";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  cn
3
- } from "../chunk-OHGNXG5G.js";
3
+ } from "../chunk-6CWBD6NJ.js";
4
4
 
5
5
  // src/icons/icon.tsx
6
6
  import "react";
package/dist/index.cjs CHANGED
@@ -72,6 +72,13 @@ var prose = {
72
72
  ul: "[&_ul]:my-3 [&_ul]:ms-6 [&_ul]:list-disc [&_ul]:text-foreground [&_ul]:marker:text-muted-foreground [&_ul.contains-task-list]:list-none",
73
73
  ol: "[&_ol]:my-3 [&_ol]:ms-6 [&_ol]:list-decimal [&_ol]:text-foreground [&_ol]:marker:text-muted-foreground",
74
74
  li: "[&_li]:mt-1.5 [&_li]:leading-relaxed",
75
+ // Task lists, one shape for both producers: `MarkdownView` tags the GFM list
76
+ // `data-type="taskList"` and each item `data-type="taskItem"` with its body in a
77
+ // `data-slot="task-item-content"` box, which is exactly the DOM Tiptap's `TaskItem` node view
78
+ // renders — so the checkbox IS the marker, the body wraps beside it, and a nested list indents
79
+ // under the body in view and edit alike. A cell's or item's paragraph inherits its ink so a
80
+ // Tiptap `<td><p>` reads the same as GFM's bare `<td>`.
81
+ taskList: "[&_ul[data-type=taskList]]:ms-0 [&_ul[data-type=taskList]]:list-none [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:items-start [&_li[data-type=taskItem]]:gap-2 [&_li[data-type=taskItem]_[data-slot=checkbox]]:mt-1 [&_li[data-type=taskItem]_[data-slot=checkbox]]:me-0 [&_[data-slot=task-item-content]]:min-w-0 [&_[data-slot=task-item-content]]:flex-1 [&_td_p]:text-inherit [&_th_p]:text-inherit",
75
82
  blockquote: "[&_blockquote]:my-3 [&_blockquote]:border-s-2 [&_blockquote]:border-border [&_blockquote]:ps-4 [&_blockquote]:text-muted-foreground [&_blockquote]:italic",
76
83
  // Inline code is a chip. Code inside a `pre` is not: it inherits the panel's ground, so the chip
77
84
  // is undone at higher specificity (`[&_pre_code]` is (0,1,2) against the chip's (0,1,1)).
package/dist/index.d.cts CHANGED
@@ -70,6 +70,7 @@ declare const prose: {
70
70
  readonly ul: "[&_ul]:my-3 [&_ul]:ms-6 [&_ul]:list-disc [&_ul]:text-foreground [&_ul]:marker:text-muted-foreground [&_ul.contains-task-list]:list-none";
71
71
  readonly ol: "[&_ol]:my-3 [&_ol]:ms-6 [&_ol]:list-decimal [&_ol]:text-foreground [&_ol]:marker:text-muted-foreground";
72
72
  readonly li: "[&_li]:mt-1.5 [&_li]:leading-relaxed";
73
+ readonly taskList: "[&_ul[data-type=taskList]]:ms-0 [&_ul[data-type=taskList]]:list-none [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:items-start [&_li[data-type=taskItem]]:gap-2 [&_li[data-type=taskItem]_[data-slot=checkbox]]:mt-1 [&_li[data-type=taskItem]_[data-slot=checkbox]]:me-0 [&_[data-slot=task-item-content]]:min-w-0 [&_[data-slot=task-item-content]]:flex-1 [&_td_p]:text-inherit [&_th_p]:text-inherit";
73
74
  readonly blockquote: "[&_blockquote]:my-3 [&_blockquote]:border-s-2 [&_blockquote]:border-border [&_blockquote]:ps-4 [&_blockquote]:text-muted-foreground [&_blockquote]:italic";
74
75
  readonly code: "[&_code]:rounded-sm [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-sm [&_code]:text-foreground";
75
76
  readonly pre: "[&_pre:not([data-slot='code-block-pre'])]:my-3 [&_pre:not([data-slot='code-block-pre'])]:overflow-x-auto [&_pre:not([data-slot='code-block-pre'])]:rounded-lg [&_pre:not([data-slot='code-block-pre'])]:border [&_pre:not([data-slot='code-block-pre'])]:border-border [&_pre:not([data-slot='code-block-pre'])]:bg-muted [&_pre:not([data-slot='code-block-pre'])]:p-4 [&_pre:not([data-slot='code-block-pre'])]:text-foreground";
package/dist/index.d.ts CHANGED
@@ -70,6 +70,7 @@ declare const prose: {
70
70
  readonly ul: "[&_ul]:my-3 [&_ul]:ms-6 [&_ul]:list-disc [&_ul]:text-foreground [&_ul]:marker:text-muted-foreground [&_ul.contains-task-list]:list-none";
71
71
  readonly ol: "[&_ol]:my-3 [&_ol]:ms-6 [&_ol]:list-decimal [&_ol]:text-foreground [&_ol]:marker:text-muted-foreground";
72
72
  readonly li: "[&_li]:mt-1.5 [&_li]:leading-relaxed";
73
+ readonly taskList: "[&_ul[data-type=taskList]]:ms-0 [&_ul[data-type=taskList]]:list-none [&_li[data-type=taskItem]]:flex [&_li[data-type=taskItem]]:items-start [&_li[data-type=taskItem]]:gap-2 [&_li[data-type=taskItem]_[data-slot=checkbox]]:mt-1 [&_li[data-type=taskItem]_[data-slot=checkbox]]:me-0 [&_[data-slot=task-item-content]]:min-w-0 [&_[data-slot=task-item-content]]:flex-1 [&_td_p]:text-inherit [&_th_p]:text-inherit";
73
74
  readonly blockquote: "[&_blockquote]:my-3 [&_blockquote]:border-s-2 [&_blockquote]:border-border [&_blockquote]:ps-4 [&_blockquote]:text-muted-foreground [&_blockquote]:italic";
74
75
  readonly code: "[&_code]:rounded-sm [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:font-mono [&_code]:text-sm [&_code]:text-foreground";
75
76
  readonly pre: "[&_pre:not([data-slot='code-block-pre'])]:my-3 [&_pre:not([data-slot='code-block-pre'])]:overflow-x-auto [&_pre:not([data-slot='code-block-pre'])]:rounded-lg [&_pre:not([data-slot='code-block-pre'])]:border [&_pre:not([data-slot='code-block-pre'])]:border-border [&_pre:not([data-slot='code-block-pre'])]:bg-muted [&_pre:not([data-slot='code-block-pre'])]:p-4 [&_pre:not([data-slot='code-block-pre'])]:text-foreground";
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  mergeRefs,
6
6
  prose,
7
7
  proseClassName
8
- } from "./chunk-OHGNXG5G.js";
8
+ } from "./chunk-6CWBD6NJ.js";
9
9
  export {
10
10
  FLOATING,
11
11
  TIMINGS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vegastack/design",
3
- "version": "0.7.30",
3
+ "version": "0.7.32",
4
4
  "description": "VegaStack design system — cn utility, icon runtime, Tailwind v4 preset, and the vegastack-design CLI (tokens ship separately as @vegastack/design-tokens)",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -90,8 +90,8 @@ link` (upstream's set, verbatim). `destructive` is a soft tint, not a solid red
90
90
  toggle, then views as `Tabs` (default variant, `TabsList size="sm"`, optional leading icons), then
91
91
  the layout switch (`ViewToggle`), furthest right. Filters are `FilterBarFacet` /
92
92
  `DateRangeFilter` chips (compact, rounded-md, tinted when set) on the toggled row; people facets
93
- take `itemToSecondaryLabel={(p) => p.email}`. Use Tabs for scope/views, `ViewToggle` for
94
- Grid | List | Board. Tables are `DataList` with `sortable` columns (`compare`, `sortFirst`,
93
+ take `itemToSecondaryLabel={(p) => p.email}`. Toolbar switches use default Tabs — never a ToggleGroup or line
94
+ Tabs: `Tabs` for scope, `ViewToggle` (default Tabs, icons) for Grid | List | Board. Tables are `DataList` with `sortable` columns (`compare`, `sortFirst`,
95
95
  `sortMode="client"`) and `rowActions` (the ⋯ column, always last); row links are never underlined.
96
96
  - **`alert`** for an in-content notice — `variant` is `default · destructive · success · warning ·
97
97
  info`, each an ink on the `card` surface with a required icon; **`announcement-banner`** only for
@@ -281,6 +281,13 @@ descendant rules (`[&_h1]:…`), which means an element-level class on a child *
281
281
  by setting a class on the rendered element. Under the page's own headings, `MarkdownView headingOffset={n}` moves every
282
282
  heading down `n` levels (capped at h6) so the outline never skips back up.
283
283
 
284
+ **Markdown is read with `MarkdownView` and edited with `TextEdit format="markdown"`** — never a
285
+ textarea, a local prose class, or a hand-rolled editor. For in-place editing, swap the view for
286
+ `<TextEdit format="markdown" variant="ghost" onSave onCancel />`: ghost is borderless with no inset,
287
+ so the text does not move, and Save/Cancel sit at the toolbar's end (⌘/Ctrl+Enter saves, Esc
288
+ cancels). Pick `toolbar="minimal"` for comments, `"standard"` (default) for notes and summaries,
289
+ `"full"` for documents; the schema follows the toolbar. Keep `variant="outline"` inside forms.
290
+
284
291
  `muted`, `accent` and `secondary` share one value in this base, and all three are kept: name the one
285
292
  whose ROLE you mean, so a consumer can retune one without moving the others.
286
293
 
@@ -120,7 +120,7 @@ starts with `icon-` is a component and never an icon.
120
120
  - **`pagination`** — Page navigation — previous/next, numbered page links, an ellipsis for long ranges, and the active page.
121
121
  - **`sidebar`** — A collapsible app navigation rail — header/content/footer, labelled groups, menu items with active and open (menu-trigger) states, and an expand/collapse trigger.
122
122
  - **`stepper`** — A bounded linear process as an ordered list — seven step states on a numbered rail that fills in behind you, aria-current=step, orientation chosen from the step count, and a compact summary below a container width.
123
- - **`tabs`** — Layered content sections — default (segmented) or line variants, compact size, optional leading icons and counts, horizontal or vertical, full keyboard navigation. Use Tabs for scope/views (My tasks | Team tasks); use an icon ToggleGroup for List/Board layout switches. The one component that keeps a focus ring.
123
+ - **`tabs`** — Layered content sections — default (segmented) or line variants, compact size, optional leading icons and counts, horizontal or vertical, full keyboard navigation. Toolbar switches use default Tabs: scope (My tasks | Team tasks) and views, whose List/Board/Grid switch is ViewToggle (default Tabs with icons). The one component that keeps a focus ring.
124
124
 
125
125
  ## Feedback
126
126