@archetypeai/ds-cli 0.18.0 → 0.18.1
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/files/ds-manifest.json +70 -9
- package/package.json +1 -1
package/files/ds-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archetypeai-design-system",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"name": "alert",
|
|
@@ -277,6 +277,32 @@
|
|
|
277
277
|
}
|
|
278
278
|
}
|
|
279
279
|
},
|
|
280
|
+
{
|
|
281
|
+
"name": "command",
|
|
282
|
+
"import": "@archetypeai/ds-ui-svelte-console/primitives/command",
|
|
283
|
+
"source": "https://design-system-console.archetypeai.workers.dev/r/command.json",
|
|
284
|
+
"description": "Searchable menu: a text field over a filtered, keyboard-navigable list of items, with groups, an empty state and a footer that stays in view. Reads as a DropdownMenu.",
|
|
285
|
+
"usage": [
|
|
286
|
+
"`<Command.Root>` holds a `Command.Input`, a `Command.List` of `Command.Group`s (each a `Command.GroupHeading` and a `Command.GroupItems` of `Command.Item`s, with `Command.Separator`s between), a `Command.Empty`, and an optional `Command.Footer`. Put it in a `Popover.Content class=\"w-120 p-0\"` for a searchable menu, or on the page as a standalone search list.",
|
|
287
|
+
"Filtering: by default Command filters and ranks the items itself against each item's `value` (plus any `keywords`). When the caller filters (its own match rule, a sort, a server search), pass `shouldFilter={false}` and render only the matching items; bind the input with `bind:value` to read the query.",
|
|
288
|
+
"`Command.Input` is an `InputGroup` with the search icon at its start. Controls that belong in the field, such as a sort toggle (`Tabs` `variant=\"toggle\"` with icon-only triggers and an `aria-label` on each), go in as its children and sit at its end.",
|
|
289
|
+
"`Command.Item` takes `onSelect` (Enter or click) and `disabled`, which skips it in arrow-key navigation and dims it; say why in a `title`. The arrow keys move the highlight; pass `loop` on the root to wrap from the last item to the first. It takes DropdownMenu.Item's `variant` (`destructive`), `inset`, `typography` and `justify`, so a row is built the same way in both menus.",
|
|
290
|
+
"Mark the current pick with `data-checked={item.value === current}`: the item's trailing check shows on it, so the menu opens showing what's picked. Every item reserves the check's width, so rows line up whether or not one is checked.",
|
|
291
|
+
"`Command.Empty` shows when no item is left: \"No file matches “report”.\" names the query. With the built-in filter that happens on its own. With `shouldFilter={false}` Command counts every mounted item, so while a query is typed leave out the static rows (an \"All files\" row, the footer) or Empty never shows.",
|
|
292
|
+
"`Command.Footer` sits below the list, outside its scroll, so it stays in view however long the list is (\"Show all 240 files\"). A `Command.Item` in the footer is still reached by the arrow keys; give it `forceMount` if it should stay while a built-in filter runs.",
|
|
293
|
+
"Headings, items and separators take DropdownMenu's own variants (`dropdownMenuGroupHeadingVariants`, `dropdownMenuItemVariants` through `commandItemVariants`, `dropdownMenuSeparatorVariants`), so the two menus can't drift apart. Style an item's row layout with `class`; don't restyle the highlight."
|
|
294
|
+
],
|
|
295
|
+
"variants": {
|
|
296
|
+
"commandItemVariants": {
|
|
297
|
+
"axes": {
|
|
298
|
+
"variant": [
|
|
299
|
+
"default",
|
|
300
|
+
"destructive"
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
},
|
|
280
306
|
{
|
|
281
307
|
"name": "console-utils",
|
|
282
308
|
"import": "@archetypeai/ds-ui-svelte-console/primitives/utils",
|
|
@@ -797,6 +823,18 @@
|
|
|
797
823
|
"Top of every dashboard shell; children render as right-side actions — `Button variant=\"link\" class=\"text-muted-foreground no-underline hover:underline\"`."
|
|
798
824
|
]
|
|
799
825
|
},
|
|
826
|
+
{
|
|
827
|
+
"name": "popover",
|
|
828
|
+
"import": "@archetypeai/ds-ui-svelte-console/primitives/popover",
|
|
829
|
+
"source": "https://design-system-console.archetypeai.workers.dev/r/popover.json",
|
|
830
|
+
"description": "A floating panel anchored to a trigger, on DropdownMenu's surface and motion. Padded by default; hosts a Command for a searchable menu.",
|
|
831
|
+
"usage": [
|
|
832
|
+
"DropdownMenu vs Popover + Command: a plain list of actions or choices is a `DropdownMenu`. Reach for `Popover` + `Command` only when the list needs a search field, which DropdownMenu can't host (its typeahead takes the keystrokes), or a footer that stays in view while the list scrolls.",
|
|
833
|
+
"`<Popover.Root bind:open>` with a `Popover.Trigger` and a `Popover.Content`. The trigger is unstyled: pass a `Button` through its `child` snippet (`{#snippet child({ props })}<Button variant=\"outline\" {...props}>…</Button>{/snippet}`) so it looks like every other trigger.",
|
|
834
|
+
"`Popover.Content` is portalled, offset 4px, `w-72` and padded (`p-4`, children `gap-4`) for free-form content. For a searchable menu, put a `Command` inside and pass `class=\"w-120 p-0\"` (any width, no padding) so the Command sits flush. `align=\"start\"` lines it up with a trigger at the start of a row.",
|
|
835
|
+
"A searchable menu's trigger is a combobox: give the `Button` `role=\"combobox\"`, `aria-expanded={open}` and an `aria-label` naming what it picks (a combobox isn't named by its text, unlike a button), and bind its `ref`. On a pick, close and hand focus back to the trigger: `open = false; tick().then(() => triggerRef?.focus())`. `Popover.Close` wraps a control that should close it directly."
|
|
836
|
+
]
|
|
837
|
+
},
|
|
800
838
|
{
|
|
801
839
|
"name": "progress",
|
|
802
840
|
"import": "@archetypeai/ds-ui-svelte-console/primitives/progress",
|
|
@@ -851,12 +889,13 @@
|
|
|
851
889
|
"name": "score-bento",
|
|
852
890
|
"import": "@archetypeai/ds-ui-svelte-console/primitives/score-bento",
|
|
853
891
|
"source": "https://design-system-console.archetypeai.workers.dev/r/score-bento.json",
|
|
854
|
-
"description": "Score hero: a 0..1 score as a field of one hundred cells
|
|
892
|
+
"description": "Score hero: a 0..1 score as a field of one hundred cells painted in the tone, revealed from the bottom-right corner while the figure rolls up to its value.",
|
|
855
893
|
"usage": [
|
|
856
|
-
"`ScoreBento value={0.97} label=\"Macro F1\"`
|
|
857
|
-
"Unscored vs in flight vs scored: `value={null}` renders the empty field and an em dash (no score yet, or a failed run). While the run is going, pass `status=\"running\"` with `value={null}`: a single diagonal sweeps the empty field back and forth without claiming a score, and `valueText` + `meta` carry what is known (`valueText=\"1,276\" meta=\"rows scored\"`). `status=\"completed\"` with a value
|
|
894
|
+
"`ScoreBento value={0.97} label=\"Macro F1\"` paints the whole field and rolls the figure to `0.97` (a bare `Counter` with `decimals={2}`). The value is 0..1 and shown to two decimals; round the same way (`Math.round(v * 100) / 100`) anywhere else the page prints this score, so the hero and a list can't disagree on a digit.",
|
|
895
|
+
"Unscored vs in flight vs scored: `value={null}` renders the empty field and an em dash (no score yet, or a failed run). While the run is going, pass `status=\"running\"` with `value={null}`: a single diagonal sweeps the empty field back and forth without claiming a score, and `valueText` + `meta` carry what is known (`valueText=\"1,276\" meta=\"rows scored\"`). `status=\"completed\"` with a value reveals the field from the corner on first paint and lands the `eyebrow` once the last cell does.",
|
|
858
896
|
"`status` takes the agent service's eval and optimization statuses as they come (`pending`, `running`, `completed`, `failed`, `cancelled`); only `running` and `completed` move, the rest are still. Reduced motion stills both.",
|
|
859
|
-
"`tone` picks the colour: `neutral` (the default) paints from the theme's foreground and works for any score; `babyblue` and `yellow` are brand fills; `warning` is the system's warning colour, for a score that needs attention. Which tone a score wears is the caller's decision, e.g. a band map kept beside the thresholds.
|
|
897
|
+
"`tone` picks the colour: `neutral` (the default) paints from the theme's foreground and works for any score; `babyblue` and `yellow` are brand fills; `warning` is the system's warning colour, for a score that needs attention; `slate` is graded, so the score picks its step (below). Which tone a score wears is the caller's decision, e.g. a band map kept beside the thresholds. A score paints every cell in the tone's token at full strength in both themes, so the colour and the figure carry it, not an amount of cells; with no score the cells show the bento's background. A new colour is a new tone in `scoreBentoFieldVariants` and `scoreBentoInkVariants`, not a call-site override.",
|
|
898
|
+
"`tone=\"slate\"` is the one graded tone: the score's tenth picks a step on the slate scale, 50 at 0.05 up to 900 at 0.95, run the other way in dark (950 up to 100) so a high score still stands furthest from the page, with the ink flipping to white from 500. Use it where the score itself should colour the bento; the fixed tones paint the same colour at every score.",
|
|
860
899
|
"Around the figure: `eyebrow` is a short line above it (a verdict such as \"Great\"), `meta` a line under it, `valueText` replaces the two-decimal figure with a caller-formatted string, and `trailing` is a top-right line such as a delta against the previous run. `help` is a plain-words explanation of the label, behind an info disc in the top-right corner. `help` renders a Tooltip, so the page needs a `Tooltip.Provider` above it; put one in the app layout rather than wrapping each bento.",
|
|
861
900
|
"`size=\"compact\"` fits a side panel or another narrow column (a shorter field, `text-7xl` figure); `default` is the page hero. The bento sets no width or grid placement of its own: lay it out with `class` (`md:col-span-7 md:row-span-2` beside two `StatBento`s at `md:col-span-2`)."
|
|
862
901
|
],
|
|
@@ -878,7 +917,8 @@
|
|
|
878
917
|
"neutral",
|
|
879
918
|
"babyblue",
|
|
880
919
|
"yellow",
|
|
881
|
-
"warning"
|
|
920
|
+
"warning",
|
|
921
|
+
"slate"
|
|
882
922
|
]
|
|
883
923
|
},
|
|
884
924
|
"defaults": {
|
|
@@ -891,13 +931,33 @@
|
|
|
891
931
|
"neutral",
|
|
892
932
|
"babyblue",
|
|
893
933
|
"yellow",
|
|
894
|
-
"warning"
|
|
934
|
+
"warning",
|
|
935
|
+
"slate"
|
|
895
936
|
]
|
|
896
937
|
},
|
|
897
938
|
"defaults": {
|
|
898
939
|
"tone": "neutral"
|
|
899
940
|
}
|
|
900
941
|
},
|
|
942
|
+
"scoreBentoSlateVariants": {
|
|
943
|
+
"axes": {
|
|
944
|
+
"step": [
|
|
945
|
+
"0",
|
|
946
|
+
"1",
|
|
947
|
+
"2",
|
|
948
|
+
"3",
|
|
949
|
+
"4",
|
|
950
|
+
"5",
|
|
951
|
+
"6",
|
|
952
|
+
"7",
|
|
953
|
+
"8",
|
|
954
|
+
"9"
|
|
955
|
+
]
|
|
956
|
+
},
|
|
957
|
+
"defaults": {
|
|
958
|
+
"step": "0"
|
|
959
|
+
}
|
|
960
|
+
},
|
|
901
961
|
"scoreBentoValueVariants": {
|
|
902
962
|
"axes": {
|
|
903
963
|
"size": [
|
|
@@ -997,7 +1057,7 @@
|
|
|
997
1057
|
"It never renders an overlay or scrim and never traps focus or scroll: the list behind stays fully interactive, clicking outside does nothing, Escape closes. If the task needs the page blocked, use Dialog instead.",
|
|
998
1058
|
"One panel at a time. Drilling in replaces Body's content and adds an in-panel back; it never opens a second SidePanel.",
|
|
999
1059
|
"Read-mostly: actions inside are fine, but destructive confirmations spawn a Dialog over the panel. The panel does not own confirmation.",
|
|
1000
|
-
"`size=\"sm\"` (384px) for a record and its fields; `size=\"md\"` (576px) when Body carries a preview, a chart or a code block. `side=\"left\"` only when the list itself lives on the right.",
|
|
1060
|
+
"`size=\"sm\"` (384px) for a record and its fields; `size=\"md\"` (576px) when Body carries a preview, a chart or a code block; `size=\"lg\"` (768px, capped at the window's width) when Body holds a full-size page section such as a scorecard or a confusion grid. `side=\"left\"` only when the list itself lives on the right.",
|
|
1001
1061
|
"Header layout follows Dialog: a `space-y-2` block, so `SidePanel.Title` and then either `SidePanel.Description` (plain text) or `SidePanel.Meta` (badges, a status line, key/value metadata) stack full width. The `actions` cluster and the close sit absolutely at the top right, so the header reserves right padding and a long Title truncates rather than running under them. Give header actions the same bare icon treatment as the close via `sidePanelCloseButtonVariants`; keep `Description` when the subtitle is text, because it is what wires `aria-describedby` and `Meta` cannot.",
|
|
1002
1062
|
"Content renders in place (no portal) so Tab reaches it after the list; do not mount it inside a transformed ancestor, where `fixed` misplaces. Focus does not move on open. Header renders an outline icon Close by default (`showCloseButton={false}` to place `SidePanel.Close` yourself). `SidePanel.Footer` is optional: it holds the actions on the data being viewed, never Close or the full-page handoff. One primary action sits right; with `justify=\"between\"` secondary actions (copy an id, compare) go first and land left."
|
|
1003
1063
|
],
|
|
@@ -1010,7 +1070,8 @@
|
|
|
1010
1070
|
],
|
|
1011
1071
|
"size": [
|
|
1012
1072
|
"sm",
|
|
1013
|
-
"md"
|
|
1073
|
+
"md",
|
|
1074
|
+
"so it still fits a window narrower than the panel\n lg"
|
|
1014
1075
|
],
|
|
1015
1076
|
"mode": [
|
|
1016
1077
|
"overlay"
|