@duro-app/cli 5.18.0 → 5.19.0

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.
Files changed (2) hide show
  1. package/package.json +5 -5
  2. package/registry.json +26 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duro-app/cli",
3
- "version": "5.18.0",
3
+ "version": "5.19.0",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Machine-queryable docs for the Duro design system: components, props, recipes, tokens and rules as CLI output, JSON, or an MCP server.",
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "peerDependencies": {
48
48
  "@modelcontextprotocol/sdk": ">=1.0.0",
49
- "@duro-app/ui": "^5.18.0"
49
+ "@duro-app/ui": "^5.19.0"
50
50
  },
51
51
  "peerDependenciesMeta": {
52
52
  "@duro-app/ui": {
@@ -61,9 +61,9 @@
61
61
  "@types/node": "^24.0.0",
62
62
  "ts-morph": "^26.0.0",
63
63
  "typescript": "^5.7.0",
64
- "@duro-app/eslint-plugin": "^5.18.0",
65
- "@duro-app/tokens": "^5.18.0",
66
- "@duro-app/ui": "^5.18.0"
64
+ "@duro-app/eslint-plugin": "^5.19.0",
65
+ "@duro-app/ui": "^5.19.0",
66
+ "@duro-app/tokens": "^5.19.0"
67
67
  },
68
68
  "scripts": {
69
69
  "registry": "node scripts/build-registry.mjs",
package/registry.json CHANGED
@@ -4911,7 +4911,7 @@
4911
4911
  ],
4912
4912
  "required": []
4913
4913
  },
4914
- "description": "Structural primitive for grouping content with header, body, and footer slots. A \"workspace surface\" for forms, settings sections, and inspectors. Sub-components are purely structural — no context required.",
4914
+ "description": "Structural primitive for grouping content with header, body, and footer slots. A \"workspace surface\" for forms, settings sections, and inspectors. Sub-components are purely structural — no context required. On native the Body does not scroll (unlike the web Body): wrap long content in ScrollArea. A TextLink inside needs onNavigate for in-app routes on native.",
4915
4915
  "example": "<Panel.Root bordered>\n <Panel.Header>\n <Heading level={3}>Section Title</Heading>\n <Button variant=\"secondary\" size=\"small\">Action</Button>\n </Panel.Header>\n <Panel.Body>\n {/* Content */}\n </Panel.Body>\n <Panel.Footer>\n <Button>Save</Button>\n </Panel.Footer>\n</Panel.Root>",
4916
4916
  "relatedTo": [
4917
4917
  {
@@ -4937,7 +4937,7 @@
4937
4937
  ]
4938
4938
  },
4939
4939
  "name": "Panel",
4940
- "native": false,
4940
+ "native": true,
4941
4941
  "parts": {
4942
4942
  "Body": {
4943
4943
  "name": "Body",
@@ -5741,6 +5741,7 @@
5741
5741
  "Top-level horizontal nav — use Inline with LinkButton"
5742
5742
  ],
5743
5743
  "whenToUse": [
5744
+ "Inside `AppShell.Rail`: the Rail is the navigation landmark, so Root renders a plain block, or `role=\"group\"` with its `aria-label` when it has one. Name the Rail \"Main\", not \"Navigation\" (screen readers would announce \"Navigation navigation\"). Outside a Rail, Root is a `nav` landmark.",
5744
5745
  "App-level sidebar navigation — flat `Section`s, every destination visible",
5745
5746
  "Settings navigation with labelled regions",
5746
5747
  "`Group` for a rare or advanced region tucked below the flat sections",
@@ -5807,7 +5808,7 @@
5807
5808
  "type": "ReactNode"
5808
5809
  },
5809
5810
  {
5810
- "description": "Names the navigation landmark (\"Main\", \"Settings\"). Give one whenever the page has another nav (a breadcrumb, a pager): screen readers list landmarks by name.",
5811
+ "description": "Names the navigation landmark (\"Main\", \"Settings\"). Give one whenever the page has another nav (a breadcrumb, a pager): screen readers list landmarks by name. Inside `AppShell.Rail` it is not a landmark (the Rail is): the name then labels a `role=\"group\"`.",
5811
5812
  "name": "aria-label",
5812
5813
  "required": false,
5813
5814
  "type": "string"
@@ -7374,7 +7375,7 @@
7374
7375
  "importPath": "@duro-app/ui",
7375
7376
  "kind": "component",
7376
7377
  "meta": {
7377
- "description": "Inline hyperlink for running text and standalone text links (\"View all\", \"Edit profile\"). Always underlined, so colour is never the only cue: default is accent text with an accent underline; subtle keeps the surrounding text colour with a muted underline and turns accent on hover. target=\"_blank\" defaults rel to noopener noreferrer. onNavigate(href, event) hands a plain primary click to a client router (the app calls event.preventDefault(), then navigates); modified clicks keep the browser default.",
7378
+ "description": "Inline hyperlink for running text and standalone text links (\"View all\", \"Edit profile\"). Always underlined, so colour is never the only cue: default is accent text with an accent underline; subtle keeps the surrounding text colour with a muted underline and turns accent on hover. target=\"_blank\" defaults rel to noopener noreferrer. onNavigate(href, event) hands a plain primary click to a client router (the app calls event.preventDefault(), then navigates); modified clicks keep the browser default. On native the link renders no href and a press goes through onNavigate, then the system (Linking.openURL): onNavigate is required for in-app routes on native, and a target set skips it.",
7378
7379
  "example": "<Text>\n Read the <TextLink href=\"/docs/migrate\">migration guide</TextLink> before you change seats, or{' '}\n <TextLink href=\"/plans\" variant=\"subtle\">compare plans</TextLink> first.\n</Text>",
7379
7380
  "relatedTo": [
7380
7381
  {
@@ -7400,7 +7401,7 @@
7400
7401
  ]
7401
7402
  },
7402
7403
  "name": "TextLink",
7403
- "native": false,
7404
+ "native": true,
7404
7405
  "props": [
7405
7406
  {
7406
7407
  "name": "href",
@@ -8253,7 +8254,7 @@
8253
8254
  "Item"
8254
8255
  ]
8255
8256
  },
8256
- "description": "Hierarchy of items with single selection and expandable branches (the WAI-ARIA tree pattern): one tab stop, arrow keys, Home/End, typeahead. An Item with href renders its row as a real link (cmd-click opens a tab) outside the tab order; Enter/Space follows it, through onNavigate(href, event) when given. Compound component — Root is required. On React Native selection, expansion and aria-level are the same; the keyboard model (arrows, Home/End, typeahead) is web only.",
8257
+ "description": "Hierarchy of items with single selection and expandable branches (the WAI-ARIA tree pattern): one tab stop, arrow keys, Home/End, typeahead. A click or Enter on a branch row with no href selects it and toggles it open or closed (a folder); a branch with href navigates, and its chevron toggles. An Item with href renders its row as a real link (cmd-click opens a tab) outside the tab order; Enter/Space follows it, through onNavigate(href, event) when given. Compound component — Root is required. On React Native each row is a pressable link (href) or button, and a branch has its own chevron control that expands it (named by the optional Root prop expandLabel(text), default the item text); selection, expansion and aria-level are the same, the keyboard model (arrows, Home/End, typeahead) is web only. On native onNavigate is required for in-app routes: without it a relative href goes to the system (Linking.openURL). On web a tree with more items than Root virtualizeThreshold (default 150, open or not) is windowed: only the rows in view mount, as flat treeitems with aria-level, aria-setsize and aria-posinset; maxHeight caps its scroll viewport. Items must be JSX descendants of Root (fragments and arrays are fine, an Item hidden inside another component is not seen by the window). Native renders every row.",
8257
8258
  "example": "<Tree.Root aria-label=\"Blocs\" defaultExpanded={['energy']} onValueChange={setSelected}>\n <Tree.Item value=\"energy\" label=\"Core business — Energy\">\n <Tree.Item value=\"generation\" label=\"Generation\" meta=\"4 apps\" />\n <Tree.Item value=\"network\" label=\"Network operations\">\n <Tree.Item value=\"scada\" label=\"SCADA supervision\" />\n </Tree.Item>\n </Tree.Item>\n <Tree.Item value=\"finance\" label=\"Finance & steering\" />\n</Tree.Root>",
8258
8259
  "relatedTo": [
8259
8260
  {
@@ -8381,6 +8382,25 @@
8381
8382
  "name": "onExpandedChange",
8382
8383
  "required": false,
8383
8384
  "type": "(expanded: string[]) => void"
8385
+ },
8386
+ {
8387
+ "description": "Native: the accessible name of a branch's chevron control, from the item's text (its `textValue`, else a string `label`). Defaults to that text.",
8388
+ "name": "expandLabel",
8389
+ "required": false,
8390
+ "type": "(label: string) => string"
8391
+ },
8392
+ {
8393
+ "default": "150",
8394
+ "description": "Web: with more items than this (open or not) the tree mounts only the rows in view. At or below it, every row is mounted. Default 150.",
8395
+ "name": "virtualizeThreshold",
8396
+ "required": false,
8397
+ "type": "number"
8398
+ },
8399
+ {
8400
+ "description": "Web, windowed: caps the scroll viewport's height; without it, it fills its parent.",
8401
+ "name": "maxHeight",
8402
+ "required": false,
8403
+ "type": "Length"
8384
8404
  }
8385
8405
  ],
8386
8406
  "sourcePath": "packages/ui/src/components/Tree/Tree.tsx"