@wangs-ui/skills 1.3.0-alpha.13 → 1.3.0-alpha.15

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 (64) hide show
  1. package/dist/bin.js +2 -2
  2. package/dist/index.js +1 -1
  3. package/dist/skills/{craft-theme → wangs-ui/craft-theme}/SKILL.md +1 -1
  4. package/dist/skills/{create-form → wangs-ui/create-form}/SKILL.md +11 -9
  5. package/dist/skills/{data-table → wangs-ui/data-table}/SKILL.md +8 -7
  6. package/dist/skills/{dialog-modal → wangs-ui/dialog-modal}/SKILL.md +5 -5
  7. package/dist/skills/{i18n-usage → wangs-ui/i18n-usage}/SKILL.md +7 -7
  8. package/dist/skills/wangs-ui/layout-navigation/SKILL.md +156 -0
  9. package/{skills → dist/skills/wangs-ui}/responsive-design/SKILL.md +19 -6
  10. package/{skills → dist/skills/wangs-ui}/universal-layout/SKILL.md +10 -18
  11. package/dist/skills/wangs-ui/wangs-ui-components/SKILL.md +104 -0
  12. package/dist/{src-DChgYbFi.js → src-jN6qaZYo.js} +127 -104
  13. package/package.json +1 -1
  14. package/skills/{craft-theme → wangs-ui/craft-theme}/SKILL.md +1 -1
  15. package/skills/{create-form → wangs-ui/create-form}/SKILL.md +11 -9
  16. package/skills/{data-table → wangs-ui/data-table}/SKILL.md +8 -7
  17. package/skills/{dialog-modal → wangs-ui/dialog-modal}/SKILL.md +5 -5
  18. package/skills/{i18n-usage → wangs-ui/i18n-usage}/SKILL.md +7 -7
  19. package/skills/wangs-ui/layout-navigation/SKILL.md +156 -0
  20. package/{dist/skills → skills/wangs-ui}/responsive-design/SKILL.md +19 -6
  21. package/{dist/skills → skills/wangs-ui}/universal-layout/SKILL.md +10 -18
  22. package/skills/wangs-ui/wangs-ui-components/SKILL.md +104 -0
  23. package/dist/skills/layout-navigation/SKILL.md +0 -70
  24. package/dist/skills/wangs-ui-components/SKILL.md +0 -117
  25. package/skills/layout-navigation/SKILL.md +0 -70
  26. package/skills/wangs-ui-components/SKILL.md +0 -117
  27. /package/dist/rules/{react19-checklist-and-reference.md → wangs-ui/react19-checklist-and-reference.md} +0 -0
  28. /package/dist/rules/{react19-compiler-render-patterns.md → wangs-ui/react19-compiler-render-patterns.md} +0 -0
  29. /package/dist/rules/{react19-naming-conventions.md → wangs-ui/react19-naming-conventions.md} +0 -0
  30. /package/dist/rules/{react19-no-manual-memoization.md → wangs-ui/react19-no-manual-memoization.md} +0 -0
  31. /package/dist/rules/{react19-primitives-typing.md → wangs-ui/react19-primitives-typing.md} +0 -0
  32. /package/dist/rules/{react19-props-typing.md → wangs-ui/react19-props-typing.md} +0 -0
  33. /package/dist/rules/{react19-purity-and-immutability.md → wangs-ui/react19-purity-and-immutability.md} +0 -0
  34. /package/dist/rules/{react19-tooling-and-opt-out.md → wangs-ui/react19-tooling-and-opt-out.md} +0 -0
  35. /package/dist/rules/{typescript-assertions-last-resort.md → wangs-ui/typescript-assertions-last-resort.md} +0 -0
  36. /package/dist/rules/{typescript-checklist-and-reference.md → wangs-ui/typescript-checklist-and-reference.md} +0 -0
  37. /package/dist/rules/{typescript-discriminated-unions.md → wangs-ui/typescript-discriminated-unions.md} +0 -0
  38. /package/dist/rules/{typescript-explicit-return-types.md → wangs-ui/typescript-explicit-return-types.md} +0 -0
  39. /package/dist/rules/{typescript-interface-vs-type.md → wangs-ui/typescript-interface-vs-type.md} +0 -0
  40. /package/dist/rules/{typescript-literal-unions-vs-enums.md → wangs-ui/typescript-literal-unions-vs-enums.md} +0 -0
  41. /package/dist/rules/{typescript-naming-conventions.md → wangs-ui/typescript-naming-conventions.md} +0 -0
  42. /package/dist/rules/{typescript-narrowing-over-casting.md → wangs-ui/typescript-narrowing-over-casting.md} +0 -0
  43. /package/dist/rules/{typescript-readonly-by-default.md → wangs-ui/typescript-readonly-by-default.md} +0 -0
  44. /package/dist/rules/{typescript-tsconfig-strictness.md → wangs-ui/typescript-tsconfig-strictness.md} +0 -0
  45. /package/dist/rules/{typescript-zero-any.md → wangs-ui/typescript-zero-any.md} +0 -0
  46. /package/rules/{react19-checklist-and-reference.md → wangs-ui/react19-checklist-and-reference.md} +0 -0
  47. /package/rules/{react19-compiler-render-patterns.md → wangs-ui/react19-compiler-render-patterns.md} +0 -0
  48. /package/rules/{react19-naming-conventions.md → wangs-ui/react19-naming-conventions.md} +0 -0
  49. /package/rules/{react19-no-manual-memoization.md → wangs-ui/react19-no-manual-memoization.md} +0 -0
  50. /package/rules/{react19-primitives-typing.md → wangs-ui/react19-primitives-typing.md} +0 -0
  51. /package/rules/{react19-props-typing.md → wangs-ui/react19-props-typing.md} +0 -0
  52. /package/rules/{react19-purity-and-immutability.md → wangs-ui/react19-purity-and-immutability.md} +0 -0
  53. /package/rules/{react19-tooling-and-opt-out.md → wangs-ui/react19-tooling-and-opt-out.md} +0 -0
  54. /package/rules/{typescript-assertions-last-resort.md → wangs-ui/typescript-assertions-last-resort.md} +0 -0
  55. /package/rules/{typescript-checklist-and-reference.md → wangs-ui/typescript-checklist-and-reference.md} +0 -0
  56. /package/rules/{typescript-discriminated-unions.md → wangs-ui/typescript-discriminated-unions.md} +0 -0
  57. /package/rules/{typescript-explicit-return-types.md → wangs-ui/typescript-explicit-return-types.md} +0 -0
  58. /package/rules/{typescript-interface-vs-type.md → wangs-ui/typescript-interface-vs-type.md} +0 -0
  59. /package/rules/{typescript-literal-unions-vs-enums.md → wangs-ui/typescript-literal-unions-vs-enums.md} +0 -0
  60. /package/rules/{typescript-naming-conventions.md → wangs-ui/typescript-naming-conventions.md} +0 -0
  61. /package/rules/{typescript-narrowing-over-casting.md → wangs-ui/typescript-narrowing-over-casting.md} +0 -0
  62. /package/rules/{typescript-readonly-by-default.md → wangs-ui/typescript-readonly-by-default.md} +0 -0
  63. /package/rules/{typescript-tsconfig-strictness.md → wangs-ui/typescript-tsconfig-strictness.md} +0 -0
  64. /package/rules/{typescript-zero-any.md → wangs-ui/typescript-zero-any.md} +0 -0
package/dist/bin.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
- import { i as listSkills, n as updateSkills, r as addSkills, t as removeSkills } from "./src-DChgYbFi.js";
2
+ import { i as listSkills, n as updateSkills, r as addSkills, t as removeSkills } from "./src-jN6qaZYo.js";
3
3
  import path from "node:path";
4
4
  import { parseArgs } from "node:util";
5
5
  //#region bin.ts
6
- var VERSION = "1.3.0-alpha.13";
6
+ var VERSION = "1.3.0-alpha.14";
7
7
  var HELP_TEXT = `
8
8
  \x1b[1m\x1b[36m🚀 Wangs UI Skills & Rules CLI\x1b[0m
9
9
  Install, update, and manage modular AI agent skills and rules for Wangs UI React applications.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as loadAllRules, a as getAgentRuleDirs, c as getInstalledSkills, d as isRuleInstalled, f as isSkillInstalled, g as getSkill, h as getRule, i as listSkills, l as installRule, m as removeSkill, n as updateSkills, o as getAgentSkillDirs, p as removeRule, r as addSkills, s as getInstalledRules, t as removeSkills, u as installSkill, v as loadAllSkills } from "./src-DChgYbFi.js";
1
+ import { _ as loadAllRules, a as getAgentRuleDirs, c as getInstalledSkills, d as isRuleInstalled, f as isSkillInstalled, g as getSkill, h as getRule, i as listSkills, l as installRule, m as removeSkill, n as updateSkills, o as getAgentSkillDirs, p as removeRule, r as addSkills, s as getInstalledRules, t as removeSkills, u as installSkill, v as loadAllSkills } from "./src-jN6qaZYo.js";
2
2
  export { addSkills, getAgentRuleDirs, getAgentSkillDirs, getInstalledRules, getInstalledSkills, getRule, getSkill, installRule, installSkill, isRuleInstalled, isSkillInstalled, listSkills, loadAllRules, loadAllSkills, removeRule, removeSkill, removeSkills, updateSkills };
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: craft-theme
3
- description: Generate a brand-color theme (13-shade tonal palette + M3-style semantic tokens) for a Wangs UI app via the `wangs-ui-generate-palette` CLI — never hand-write hex shade ramps.
3
+ description: Generate a brand-color theme (13-shade tonal palette + semantic tokens) for a Wangs UI app via the `wangs-ui-generate-palette` CLI — never hand-write hex shade ramps.
4
4
  metadata:
5
5
  owner: wangs-ui
6
6
  ---
@@ -17,15 +17,15 @@ Do **NOT** hardcode or guess prop names, component options, preset variations, o
17
17
  ### Component & Form API Protocol:
18
18
 
19
19
  ```json
20
- get_component_api({ "id": "form" })
21
- get_component_api({ "id": "field" })
22
- get_component_api({ "id": "dialogform" })
23
- get_component_api({ "id": "input" })
24
- get_component_api({ "id": "numberinput" })
25
- get_component_api({ "id": "select" })
26
- get_component_api({ "id": "multiselect" })
27
- get_component_api({ "id": "datepicker" })
28
- get_component_api({ "id": "fileupload" })
20
+ get_component_api({ "component": "form" })
21
+ get_component_api({ "component": "field" })
22
+ get_component_api({ "component": "dialogform" })
23
+ get_component_api({ "component": "input" })
24
+ get_component_api({ "component": "numberinput" })
25
+ get_component_api({ "component": "select" })
26
+ get_component_api({ "component": "multiselect" })
27
+ get_component_api({ "component": "datepicker" })
28
+ get_component_api({ "component": "fileupload" })
29
29
  ```
30
30
 
31
31
  ### Curated Form Documentation:
@@ -83,6 +83,8 @@ query_graph({ "query": "useWatchField" })
83
83
  - **Children Render Callback**: `Field` yields `{ fieldProps, fieldState }`.
84
84
  - **`fieldProps`**: Pass directly to primitive inputs (`<Input {...fieldProps} />`). Contains `name`, `value`, `ref`, `onChange`.
85
85
  - **`fieldState`**: Provides `invalid`, `error`, `isDirty`, `isPending`. Pass `invalid={fieldState.invalid}` to primitive components for accessibility and validation styling.
86
+ - **⚠️ Mandatory Destructuring (Never `(field) => ...`)**: `<Field>`'s callback render prop must destructure as `{({ fieldProps, fieldState })}`. Passing a single parameter instead (`{(field) => ...}`) produces `undefined` `value`/`onChange` and permanently locks the input.
87
+ - **Pass `fieldProps.onChange` directly**: `<Field>` is generic and `fieldProps.onChange` is already typed to the field's value type. Do not wrap it in unnecessary `e?.target?.value` extractions.
86
88
 
87
89
  ---
88
90
 
@@ -14,13 +14,13 @@ Use this skill when implementing data grids, server-paginated tables, filterable
14
14
 
15
15
  Do **NOT** guess table prop names or hardcode table structures. Query the MCP server dynamically to inspect exact TypeScript signatures, live story implementations, and companion controls:
16
16
 
17
- ### Inspect Component Contracts:
17
+ ### Inspect Component Contracts (`component` parameter):
18
18
 
19
19
  ```json
20
- get_component_api({ "id": "datatable" })
21
- get_component_api({ "id": "exportbutton" })
22
- get_component_api({ "id": "filtercontainer" })
23
- get_component_api({ "id": "bulkactionbutton" })
20
+ get_component_api({ "component": "datatable" })
21
+ get_component_api({ "component": "exportbutton" })
22
+ get_component_api({ "component": "filtercontainer" })
23
+ get_component_api({ "component": "bulkactionbutton" })
24
24
  ```
25
25
 
26
26
  ### Read Curated Documentation:
@@ -55,7 +55,7 @@ query_graph({ "query": "useDataTableFetch" })
55
55
  The Wangs UI `DataTable` is built on a modular, headless-first architecture:
56
56
 
57
57
  1. **Declarative Column Definitions (`TableColumn<T>[]`)**:
58
- Columns are configured as typed array objects, not as JSX children. Check `get_component_api({ "id": "datatable" })` for column field types.
58
+ Columns are configured as typed array objects, not as JSX children. Check `get_component_api({ "component": "datatable" })` for column field types.
59
59
  2. **Table Instance Hook (`useDataTable`)**:
60
60
  Coordinates table state (sorting, pagination, selection, column ordering, pinning, visibility).
61
61
  3. **Data Fetching Hook (`useDataTableFetch`)**:
@@ -73,4 +73,5 @@ The Wangs UI `DataTable` is built on a modular, headless-first architecture:
73
73
  1. **Query MCP for Current Code Patterns**: Always run `get_component_examples` for `datatable` before drafting code.
74
74
  2. **Strict Subpath Imports**: Import via `@wangs-ui/react-core/primitive/datatable` and companion primitive paths.
75
75
  3. **Always Translate Visible Copy**: All column header labels, empty state messages, and action button labels must be wrapped in `t('...')` from `@wangs-ui/react-i18n`.
76
- 4. **Stable Row Identity**: Always configure a unique key identifier for stable selection and row identity.
76
+ 4. **Stable Row Identity**: Always configure a unique key identifier (`dataKey` / `rowId`) for stable selection and row identity.
77
+ 5. **Zero Redundant Table Wrappers**: Never wrap `<DataTable />` in an isolated `<div>` or `<Box>` solely to set width or margin. Wangs UI DataTable manages its own container scroll and layout dimensions out of the box.
@@ -14,13 +14,13 @@ Use this skill when building interactive modals, create/edit dialog forms, destr
14
14
 
15
15
  Do **NOT** guess overlay props, event names, or footer slots. Query the MCP server dynamically to inspect exact contracts and live story implementations:
16
16
 
17
- ### Inspect Overlay Contracts:
17
+ ### Inspect Overlay Contracts (`component` parameter):
18
18
 
19
19
  ```json
20
- get_component_api({ "id": "dialog" })
21
- get_component_api({ "id": "dialogform" })
22
- get_component_api({ "id": "modal" })
23
- get_component_api({ "id": "toast" })
20
+ get_component_api({ "component": "dialog" })
21
+ get_component_api({ "component": "dialogform" })
22
+ get_component_api({ "component": "modal" })
23
+ get_component_api({ "component": "toast" })
24
24
  ```
25
25
 
26
26
  ### Read Curated Overlay Documentation:
@@ -14,14 +14,14 @@ Use this skill when implementing multi-language interfaces, translating user-fac
14
14
 
15
15
  Do **NOT** guess component localization contracts, language switcher variants, or datepicker props. Query the MCP server dynamically to inspect exact props and live story implementations:
16
16
 
17
- ### Inspect Localized Component Contracts:
17
+ ### Inspect Localized Component Contracts (`component` parameter):
18
18
 
19
19
  ```json
20
- get_component_api({ "id": "languageswitcher" })
21
- get_component_api({ "id": "currencyinput" })
22
- get_component_api({ "id": "datepicker" })
23
- get_component_api({ "id": "select" })
24
- get_component_api({ "id": "datatable" })
20
+ get_component_api({ "component": "languageswitcher" })
21
+ get_component_api({ "component": "currencyinput" })
22
+ get_component_api({ "component": "datepicker" })
23
+ get_component_api({ "component": "select" })
24
+ get_component_api({ "component": "datatable" })
25
25
  ```
26
26
 
27
27
  ### Read Curated Localization Documentation:
@@ -140,7 +140,7 @@ selectedCount === 0
140
140
  Use standard supported HTML tags (`<a>`, `<b>`, `<i>`, `<u>`, `<s>`, `<br/>`, `<sub>`, `<sup>`, `<code>`, `<mark>`) for inline styling. Tags are automatically parsed into React elements without custom regex or string manipulation:
141
141
 
142
142
  ```tsx
143
- import Link from '@wangs-ui/foundation/theme/Link';
143
+ import { Link } from '@wangs-ui/foundation/theme';
144
144
 
145
145
  t('You have selected <b>{count} items</b>. Click <a>here</a> to review.', {
146
146
  count: selectedCount,
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: layout-navigation
3
+ description: Architecture, navigation hierarchies, and MCP discovery protocol for AppLayout, Sidebar, Breadcrumb, and Tabs in Wangs UI.
4
+ metadata:
5
+ owner: wangs-ui
6
+ ---
7
+
8
+ # Skill: Application Layout & Navigation Hierarchy
9
+
10
+ Use this skill when constructing application shells, multi-level sidebars, page headers, breadcrumbs, tabbed views, or feature routing with `@wangs-ui/react-core`, `@wangs-ui/foundation`, and `@wangs-ui/react-navigation`.
11
+
12
+ ---
13
+
14
+ ## 1. MCP Inspection Protocol (Mandatory Single Source of Truth)
15
+
16
+ Do **NOT** guess layout block slots, sidebar item interfaces, or breadcrumb props. Query the MCP server dynamically to inspect exact contracts and live story implementations:
17
+
18
+ ### Inspect Layout & Navigation Contracts (`component` parameter):
19
+
20
+ ```json
21
+ get_component_api({ "component": "applayout" })
22
+ get_component_api({ "component": "sidebar" })
23
+ get_component_api({ "component": "tabletoolbar" })
24
+ get_component_api({ "component": "breadcrumb" })
25
+ get_component_api({ "component": "tabs" })
26
+ ```
27
+
28
+
29
+ ### Read Curated Layout Documentation (`id` parameter):
30
+
31
+ ```json
32
+ get_documentation({ "id": "applayout" })
33
+ get_documentation({ "id": "sidebar" })
34
+ get_documentation({ "id": "react-navigation" })
35
+ ```
36
+
37
+ ### Inspect Live Story Implementations:
38
+
39
+ ```json
40
+ get_component_examples({ "component": "applayout", "variant": "TopNavbar" })
41
+ get_component_examples({ "component": "sidebar", "variant": "WithSubMenu" })
42
+ get_component_examples({ "component": "breadcrumb", "variant": "Default" })
43
+ get_component_examples({ "component": "tabs", "variant": "Default" })
44
+ ```
45
+
46
+ ### Inspect Knowledge Graph & Usages:
47
+
48
+ ```json
49
+ query_graph({ "query": "AppLayout" })
50
+ query_graph({ "query": "Sidebar" })
51
+ ```
52
+
53
+ ---
54
+
55
+ ## 2. Layout Architecture & Mental Model
56
+
57
+ 1. **Top-Level App Shell (`AppLayout`)**:
58
+ - Subpath: `@wangs-ui/react-core/blocks/applayout`
59
+ - Outer responsive shell arranging navigation, navbar, sidebars, main viewport, and footer. Inspect slots and layout variants via `get_component_api({ "component": "applayout" })`.
60
+ 2. **Hierarchical Menu (`Sidebar`)**:
61
+ - Subpath: `@wangs-ui/react-core/blocks/sidebar`
62
+ - Primary app navigation drawer/rail supporting nested menus, badges, and collapse states. Inspect items and events via `get_component_api({ "component": "sidebar" })`.
63
+ 3. **Breadcrumb Trail (`Breadcrumb`)**:
64
+ - Subpath: `@wangs-ui/react-core/primitive/breadcrumb`
65
+ - Secondary hierarchy navigation displaying screen depth. Inspect item structure via `get_component_api({ "component": "breadcrumb" })`.
66
+ 4. **Tabbed Sub-Views (`Tabs`)**:
67
+ - Subpath: `@wangs-ui/react-core/primitive/tabs`
68
+ - In-page view switcher for partitioning entity details into distinct panels. Inspect via `get_component_api({ "component": "tabs" })`.
69
+ 5. **Universal Routing (`@wangs-ui/react-navigation`)**:
70
+ - Platform-agnostic route graph abstraction (`buildGraph`, `paramRoute`).
71
+ - Web router bridge: `@wangs-ui/react-navigation/web` (React Router).
72
+ - Native router bridge: `@wangs-ui/react-navigation/native` (React Navigation / Expo).
73
+
74
+ ---
75
+
76
+ ## 3. Structural Page Blueprint (Standard Pattern)
77
+
78
+ ```tsx
79
+ import AppLayout from '@wangs-ui/react-core/blocks/applayout';
80
+ import Sidebar from '@wangs-ui/react-core/blocks/sidebar';
81
+ import Breadcrumb from '@wangs-ui/react-core/primitive/breadcrumb';
82
+ import { Container, Section, Stack, HStack } from '@wangs-ui/foundation/layout';
83
+ import { Text } from '@wangs-ui/foundation/theme';
84
+ import { useI18n } from '@wangs-ui/react-i18n';
85
+ import { HomeLine, Settings4Line } from '@wangs-ui/react-icons';
86
+ import { useState } from 'react';
87
+
88
+ export function ApplicationShell({ children }: { children: React.ReactNode }) {
89
+ const { t } = useI18n();
90
+ const [activeRoute, setActiveRoute] = useState('dashboard');
91
+ const [collapsed, setCollapsed] = useState(false);
92
+
93
+ const sidebarItems = [
94
+ { value: 'dashboard', label: t('Dashboard'), icon: HomeLine, to: '/' },
95
+ { value: 'settings', label: t('Settings'), icon: Settings4Line, to: '/settings' },
96
+ ];
97
+
98
+ return (
99
+ <AppLayout
100
+ variant="full-sidebar"
101
+ sidebar={
102
+ <Sidebar
103
+ items={sidebarItems}
104
+ value={activeRoute}
105
+ onValueChange={setActiveRoute}
106
+ collapsed={collapsed}
107
+ onCollapsedChange={setCollapsed}
108
+ collapseMode="rail"
109
+ />
110
+ }
111
+ >
112
+ <Container size="xl">
113
+ <Section space="md">
114
+ <Stack gap="4">
115
+ <Breadcrumb
116
+ items={[
117
+ { label: t('Home'), href: '/' },
118
+ { label: t('Dashboard') },
119
+ ]}
120
+ />
121
+ <Text variant="headlineLarge">{t('Overview')}</Text>
122
+ {children}
123
+ </Stack>
124
+ </Section>
125
+ </Container>
126
+ </AppLayout>
127
+ );
128
+ }
129
+ ```
130
+
131
+ ---
132
+
133
+ ## 4. Mandatory Implementation Rules
134
+
135
+ 1. **Query MCP First**: Always inspect `applayout` and `sidebar` stories via MCP before assembling the layout.
136
+ 2. **Strict Subpath Imports**:
137
+ - Blocks: `@wangs-ui/react-core/blocks/*` (`applayout`, `sidebar`, `tabletoolbar`)
138
+ - Primitives: `@wangs-ui/react-core/primitive/*` (`breadcrumb`, `tabs`)
139
+ - Layout Primitives: `@wangs-ui/foundation/layout` (`Container`, `Section`, `Stack`, `HStack`, `Box`, `Grid`)
140
+ - Typography: `@wangs-ui/foundation/theme` (`Text`)
141
+ 3. **Standard Layout Containers & Spacing**:
142
+ - Use `Container` (max-width rhythm) and `Section` (vertical rhythm) for page boundaries.
143
+ - Use flat numeric Tailwind spacing (`gap="4"`, `p="6"`). Never use legacy named tokens like `p-3xl` or `gap-md`.
144
+ 4. **Typography Scale**:
145
+ - Use `<Text variant="headlineLarge">` or `display*` / `title*` for page headers. Never use obsolete `.heading-*` helper classes or raw HTML heading tags without primitives.
146
+ 5. **No Redundant Layout Wrappers**:
147
+ - Do NOT insert intermediate pass-through `<div>` or `<Box>` wrappers between `<Card>`/`<Tabs>` and tab contents.
148
+ - Render active tab content directly as a child of the container:
149
+ ```tsx
150
+ // ✅ Good
151
+ <Card>
152
+ <Tabs items={tabItems} value={activeTab} onValueChange={setActiveTab} />
153
+ {activeTab === 'general' ? <GeneralTab /> : <SecurityTab />}
154
+ </Card>
155
+ ```
156
+ 6. **Translate Navigation Labels**: Wrap all sidebar item labels, breadcrumb text, and page headings in `t('...')` from `@wangs-ui/react-i18n`.
@@ -10,7 +10,17 @@ Use this skill when building responsive pages, layouts, or screen adaptations wi
10
10
 
11
11
  ---
12
12
 
13
- ## 1. Breakpoint Reference
13
+ ## 1. MCP Inspection Protocol (Mandatory Single Source of Truth)
14
+
15
+ Do **NOT** guess responsive prop types or breakpoint keys. Query the MCP server dynamically:
16
+
17
+ ```json
18
+ resolve_type_definition({ "types": ["ResponsiveValue", "Breakpoint", "SpacingKey"] })
19
+ ```
20
+
21
+ ---
22
+
23
+ ## 2. Breakpoint Reference
14
24
 
15
25
  Wangs UI uses three standardized breakpoints:
16
26
 
@@ -30,14 +40,17 @@ const { breakpoint } = useTheme(); // 'compact' | 'medium' | 'expanded'
30
40
 
31
41
  ---
32
42
 
33
- ## 2. Responsive Props (`ResponsiveValue`)
43
+ ## 3. Responsive Props (`ResponsiveValue`)
34
44
 
35
45
  Visual scale props (`size`, layout `gap`, `columns`, `p`, `m`) accept either a single value or an object mapped by breakpoint:
36
46
 
37
47
  ```tsx
48
+ import { Button } from '@wangs-ui/react-core/components/button';
49
+ import { Grid, Stack } from '@wangs-ui/foundation/layout';
50
+
38
51
  // Static (identical across all devices)
39
52
  <Button size="md" />
40
- <Stack gap={4} />
53
+ <Stack gap="4" />
41
54
 
42
55
  // Adaptive (changes across breakpoints)
43
56
  <Button size={{ compact: 'lg', expanded: 'sm' }} />
@@ -48,7 +61,7 @@ Visual scale props (`size`, layout `gap`, `columns`, `p`, `m`) accept either a s
48
61
 
49
62
  ---
50
63
 
51
- ## 3. Conditional Rendering (`<Show>`)
64
+ ## 4. Conditional Rendering (`<Show>`)
52
65
 
53
66
  Use `<Show>` when a component should be mounted or unmounted based on the active breakpoint:
54
67
 
@@ -78,7 +91,7 @@ import { Show } from '@wangs-ui/foundation/theme';
78
91
 
79
92
  ---
80
93
 
81
- ## 4. Spacing Conventions
94
+ ## 5. Spacing Conventions
82
95
 
83
96
  Spacing tokens are **flat and fixed** (1 unit = 4px):
84
97
 
@@ -87,7 +100,7 @@ Spacing tokens are **flat and fixed** (1 unit = 4px):
87
100
 
88
101
  ---
89
102
 
90
- ## 5. Anti-Patterns to Avoid
103
+ ## 6. Anti-Patterns to Avoid
91
104
 
92
105
  1. **Avoid `hidden md:block` for stateful/heavy trees**: Always prefer `<Show>` so unused components cleanly unmount.
93
106
  2. **Never pass responsive objects to behavioral props**: `<Button disabled={{ compact: true }} />` is invalid.
@@ -18,24 +18,15 @@ Do **NOT** guess layout prop names, spacing scales, or breakpoint keys. Query th
18
18
  server dynamically:
19
19
 
20
20
  ```json
21
- list_catalog({ "category": "layout" })
22
- get_component_api({ "id": "layout:box" })
23
- get_component_api({ "id": "layout:grid" })
24
- get_documentation({ "id": "layout-stack" })
25
- ```
26
-
27
- Resolve shared types before writing responsive props:
28
-
29
- ```json
30
- resolve_type_definition({ "name": "ResponsiveValue" })
31
- resolve_type_definition({ "name": "SpacingKey" })
21
+ list_catalog({ "query": "layout" })
22
+ resolve_type_definition({ "types": ["ResponsiveValue", "SpacingKey", "StackProps", "GridProps", "BoxProps", "ScrollAreaProps"] })
32
23
  ```
33
24
 
34
25
  ---
35
26
 
36
27
  ## 2. Choosing the Right Primitive
37
28
 
38
- 1. **Stack (VStack)** — default for vertical flows (forms, cards, page sections).
29
+ 1. **Stack (Vertical)** — default for vertical flows (forms, cards, page sections).
39
30
  Fixed `column` direction, uniform `gap`, optional auto-`separator`.
40
31
  2. **HStack** — horizontal rows with vertical centering (avatar + label + action,
41
32
  toolbar clusters). Fixed `row` direction.
@@ -52,25 +43,26 @@ resolve_type_definition({ "name": "SpacingKey" })
52
43
  vertical rhythm (`space: 'sm' | 'md' | 'lg'`, default `'md'`). Never nest
53
44
  `Container` inside `Container`.
54
45
  7. **ZStack** — overlays (badge on card, status dot on avatar, hero overlay).
55
- 8. **AspectRatio / Bleed / Spacer** — media frames (`ratio`), full-bleed breakouts
46
+ 8. **ScrollArea** — styled, accessible scrollable viewports (`orientation: 'vertical' | 'horizontal' | 'both'`, `variant: 'hover' | 'always' | 'scroll'`).
47
+ 9. **AspectRatio / Bleed / Spacer** — media frames (`ratio`), full-bleed breakouts
56
48
  inside padded containers (`Bleed`), and flexible fillers in stacks (`Spacer`).
57
49
 
58
50
  ---
59
51
 
60
52
  ## 3. Mandatory Implementation Rules
61
53
 
62
- 1. **ResponsiveValue everywhere**: scalar for static (`gap={4}`), object for
63
- adaptive (`gap={{ compact: 2, medium: 4, expanded: 6 }}`,
54
+ 1. **ResponsiveValue everywhere**: scalar for static (`gap="4"`), object for
55
+ adaptive (`gap={{ compact: '2', medium: '4', expanded: '6' }}`,
64
56
  `columns={{ compact: 1, medium: 2, expanded: 4 }}`). Breakpoints are
65
57
  `compact` (mobile-first base), `medium` (`md:`), `expanded` (`lg:`).
66
58
  2. **Separators, not manual dividers**: `<Stack separator={<Divider />}>` inserts
67
59
  dividers between children with no trailing element. Never hand-place a divider
68
60
  after every child.
69
- 3. **Spacing scale**: `gap`/`p`/`m` use `SpacingKey` (Tailwind numeric scale,
70
- 1 unit = 4px). Never pass raw pixel strings to spacing props.
61
+ 3. **Spacing scale**: `gap`/`p`/`m` use `SpacingKey` (Tailwind numeric scale strings,
62
+ e.g. `'0'`, `'1'`, `'2'`, `'4'`, `'6'`, `'8'`, `'12'`, `'16'`). Never pass raw pixel strings to spacing props.
71
63
  4. **Strict subpath imports**:
72
64
  ```tsx
73
- import { Stack, HStack, Grid, Container } from '@wangs-ui/foundation/layout';
65
+ import { Stack, HStack, Grid, Container, Box, Flex, ScrollArea } from '@wangs-ui/foundation/layout';
74
66
  ```
75
67
  5. **Translate visible labels** inside layout children via `t('...')` from
76
68
  `@wangs-ui/react-i18n` (layout props themselves are never translated).
@@ -0,0 +1,104 @@
1
+ ---
2
+ name: wangs-ui-components
3
+ description: MCP Discovery Protocol, modular subpath import map, and primitive substitution map for Wangs UI applications.
4
+ metadata:
5
+ owner: wangs-ui
6
+ ---
7
+
8
+ # Skill: Wangs UI Component Fundamentals & MCP Protocol
9
+
10
+ Use this skill to navigate the Wangs UI ecosystem. **MCP is the single source of truth** for all component APIs, props, variants, slots, and examples. Do not hardcode or assume props — always query MCP dynamically.
11
+
12
+ ---
13
+
14
+ ## 1. The MCP Discovery Protocol (Single Source of Truth)
15
+
16
+ Do **NOT** guess component props, Pass-Through (`pt`) slots, or event names. Always query the MCP server dynamically:
17
+
18
+ ```mermaid
19
+ graph TD
20
+ A[Identify Component / Primitive Needed] --> B[list_catalog to confirm name/id]
21
+ B --> C[get_component_api for typed contract]
22
+ B --> D[get_documentation for curated guidance]
23
+ C --> E{Need live story / variant code?}
24
+ D --> E
25
+ E -->|Yes| F[get_component_examples]
26
+ E -->|No| G[Implement with Subpath Import Map]
27
+ F --> G
28
+ ```
29
+
30
+ ### Discovery Steps:
31
+
32
+ 1. **Discover Catalog Entries**:
33
+ ```json
34
+ list_catalog({ "query": "button" })
35
+ list_catalog({ "category": "component" })
36
+ ```
37
+ 2. **Inspect Typed Contracts & Props** (`component` parameter):
38
+ ```json
39
+ get_component_api({ "component": "button" })
40
+ get_component_api({ "component": "datatable" })
41
+ get_component_api({ "component": "field" })
42
+ ```
43
+ 3. **Read Curated Narrative Documentation** (`id` parameter):
44
+ ```json
45
+ get_documentation({ "id": "button" })
46
+ get_documentation({ "id": "foundation" })
47
+ get_documentation({ "id": "form" })
48
+ ```
49
+ 4. **Fetch Live Storybook TSX Examples**:
50
+ ```json
51
+ get_component_examples({ "component": "button", "variant": "Sizes" })
52
+ get_component_examples({ "component": "datatable", "variant": "Basic" })
53
+ ```
54
+ 5. **Explore Knowledge Graph Relationships**:
55
+ ```json
56
+ query_graph({ "query": "DataTable" })
57
+ query_graph({ "query": "useForm" })
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 2. Modular Subpath Import Map
63
+
64
+ Always import via specific subpath modules to guarantee tree-shaking and avoid bundling entire packages:
65
+
66
+ | Ecosystem Layer | Subpath Pattern | Example Imports |
67
+ | :--- | :--- | :--- |
68
+ | **Core Primitives** | `@wangs-ui/react-core/primitive/<name>` | `Button`, `Input`, `Select`, `DataTable`, `Dialog`, `Modal`, `Field`, `Form`, `Card`, `Badge` |
69
+ | **Layout Primitives** | `@wangs-ui/foundation/layout` | `Stack`, `HStack`, `VStack`, `Flex`, `Grid`, `Box`, `Container`, `Section`, `ScrollArea` |
70
+ | **Typography Primitives** | `@wangs-ui/foundation/theme` | `Text`, `Code`, `Kbd`, `Link`, `Blockquote`, `List`, `Mark` |
71
+ | **Blocks & Shells** | `@wangs-ui/react-core/blocks/<name>` | `AppLayout`, `Sidebar`, `TableToolbar` |
72
+ | **Form Engine** | `@wangs-ui/form/core`, `@wangs-ui/form/react` | Headless form state, hooks, validation adapters |
73
+ | **Universal Navigation** | `@wangs-ui/react-navigation/web`, `@wangs-ui/react-navigation/native` | `buildGraph`, `paramRoute`, platform router bridges |
74
+ | **Theme & Providers** | `@wangs-ui/react-core/api`, `@wangs-ui/foundation/theme` | `WangsUiProvider`, `ThemeProvider`, `useTheme` |
75
+ | **Vector Icons** | `@wangs-ui/react-icons` | `SearchLine`, `AddLine`, `DeleteBin6Line`, `CheckLine` |
76
+ | **i18n & Localization** | `@wangs-ui/react-i18n` | `useI18n`, `t`, `WangsUiI18nProvider` |
77
+
78
+ ---
79
+
80
+ ## 3. Primitive Substitution Map
81
+
82
+ Zero raw HTML elements. Never write raw HTML tags when a Wangs UI primitive exists:
83
+
84
+ | Forbidden Raw HTML | Mandatory Wangs UI Primitive | Import Path | MCP Catalog / Doc ID |
85
+ | :--- | :--- | :--- | :--- |
86
+ | `<button>` | `Button` | `@wangs-ui/react-core/primitive/button` | `button` |
87
+ | `<input type="text">` | `Input` | `@wangs-ui/react-core/primitive/input` | `input` |
88
+ | `<input type="number">` | `NumberInput` | `@wangs-ui/react-core/primitive/numberinput` | `numberinput` |
89
+ | `<input type="checkbox">` | `Checkbox` | `@wangs-ui/react-core/primitive/checkbox` | `checkbox` |
90
+ | `<select>` | `Select` / `MultiSelect` | `@wangs-ui/react-core/primitive/select` | `select`, `multiselect` |
91
+ | `<textarea>` | `Textarea` | `@wangs-ui/react-core/primitive/textarea` | `textarea` |
92
+ | `<form>` | `Form` / `DialogForm` | `@wangs-ui/react-core/primitive/form` | `form`, `dialogform` |
93
+ | `<dialog>` / alert modal | `Modal` / `Dialog` | `@wangs-ui/react-core/primitive/modal` | `modal`, `dialog` |
94
+ | `<table>` | `DataTable` | `@wangs-ui/react-core/primitive/datatable` | `datatable` |
95
+ | `<div>` (layout / flex / grid) | `Stack`, `HStack`, `Flex`, `Grid`, `Box` | `@wangs-ui/foundation/layout` | `universal-layout` |
96
+ | `<div>` (surface card) | `Card` | `@wangs-ui/react-core/primitive/card` | `card` |
97
+ | Pill / status chip | `Badge` | `@wangs-ui/react-core/primitive/badge` | `badge` |
98
+ | `<h1>` - `<h6>` | `<Text variant="...">` | `@wangs-ui/foundation/theme` | `foundation` |
99
+ | `<p>`, `<span>` (body text) | `<Text variant="...">` | `@wangs-ui/foundation/theme` | `foundation` |
100
+ | `<a>` | `Link` | `@wangs-ui/foundation/theme` | `foundation` |
101
+ | `<code>` | `Code` | `@wangs-ui/foundation/theme` | `foundation` |
102
+ | `<kbd>` | `Kbd` | `@wangs-ui/foundation/theme` | `foundation` |
103
+ | `<blockquote>` | `Blockquote` | `@wangs-ui/foundation/theme` | `foundation` |
104
+ | `<ul>`, `<ol>` | `List` | `@wangs-ui/foundation/theme` | `foundation` |