{"owner":"angular-ui","repo":"ui-grid","hasSkills":true,"totalSkillsCount":1,"totalTokensCount":972,"categories":["root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# UI Grid — Agent Instructions\n\nWeb data grid with a framework-neutral TypeScript core, Angular, React, SolidJS, and a vanilla web component. The compiled Rust/WASM core is consumed from `@ornery/ui-grid-wasm`.\n\n## Architecture\n\n```\nprojects/ui-grid-core/     Pure TypeScript engine (pipeline, sorting, filtering, grouping, etc.)\nprojects/ui-grid-vanilla/  <ui-grid-element> custom element — the rendering engine\nprojects/ui-grid-react/    React wrapper (mounts vanilla element, projects via portals)\nprojects/ui-grid-solid/    SolidJS wrapper (mounts vanilla element, projects via Solid roots)\nprojects/ui-grid/          Angular wrapper (mounts vanilla element, projects via ng-template)\nsrc/app/                   Angular demo/docs application\n```\n\nThe vanilla element is the single renderer. Angular and React wrappers mount `<ui-grid-element>` and project framework templates into it via `setFrameworkRenderedSlots()` + `cellSlotsChanged` events.\n\n## Build Commands\n\n```bash\nnpm start                    # Dev server (Angular demo app) at localhost:4200\nnpm run build                # Full production build (wasm + react + vanilla + angular app)\nnpm run build:core           # Build @ornery/ui-grid-core (tsup)\nnpm run build:library        # Build core + vanilla + wasm + Angular library (ng-packagr)\nnpm run build:pages          # GitHub Pages production build\nnpm test                     # All test suites\nnpm run test:angular         # Angular tests (vitest via ng)\nnpm run test:react           # React tests (vitest)\nnpm run build:solid          # Build core + vanilla + SolidJS adapter\nnpm run test:solid           # SolidJS, SSR, hydration, package, and example tests\nnpm run test:vanilla         # Vanilla tests (vitest)\nnpm run prepare:wasm         # Materialize the pinned WASM npm package into dist/\n```\n\n## Package Dependencies (build order)\n\n1. `@ornery/ui-grid-core` — no internal deps\n2. `@ornery/ui-grid-vanilla` — depends on core\n3. `@ornery/ui-grid-react` — depends on core + vanilla\n4. `@ornery/ui-grid-solid` — depends on core + vanilla\n5. `@ornery/ui-grid` (Angular) — depends on core + vanilla\n\nAlways build in this order. The `build:library` script handles this automatically.\n\n## Coding Conventions\n\n- TypeScript strict mode everywhere\n- No comments unless explaining a non-obvious \"why\"\n- No default exports — use named exports\n- Grid options use the `GridOptions` interface; columns use `GridColumnDef`\n- Row identity: `rowIdentity: (row) => String(row['id'])`\n- Feature flags: `enable*` boolean options (e.g., `enableSorting`, `enableFiltering`)\n- All user-facing strings go through the i18n label system (`resolveGridLabels`)\n- CSS custom properties prefixed `--ui-grid-*`\n- Shadow DOM encapsulation — never pierce from outside\n\n## State Management in the Controller\n\nThe `VanillaGridController` owns all mutable grid state. Key rule: `setOptions()` must NOT clobber interactive state. It tracks `lastOptions*` values and only applies declarative state (grouping, pinning, scroll directions) when the consumer's value structurally changed from the previous pass.\n\nInteractive state that survives `setOptions`: sort, filters, expanded rows, selection, pagination, cell navigation, column widths, column order.\n\n## Testing\n\n- Unit tests: vitest for all JS/TS packages\n- Test files: `*.test.ts` / `*.test.tsx` colocated with source\n- Shadow DOM testing: query via `el.shadowRoot.querySelector()`\n- jsdom lacks `adoptedStyleSheets` — polyfilled in test-setup files\n- WASM artifacts are provided by the pinned `@ornery/ui-grid-wasm` npm dependency\n\n## Do NOT\n\n- Add Angular Elements references — that build target was removed\n- Import from `dist/` paths within the monorepo during development (use tsconfig path mappings)\n- Use `zone.runOutsideAngular` for event handlers that create Angular views (they need zone for CD)\n- Call `setFrameworkRenderedSlots` on every options update — only when template columns structurally change\n- Skip `frameworkSlots.flush()` after rendering new DOM that contains slot placeholders\n- Add `node_modules/`, `dist/`, or `.angular/cache/` to commits\n- Add Rust source, Cargo manifests, or Rust toolchain steps; those belong in `orneryd/uiGrid`\n"},"files":{"AGENTS.md":"# UI Grid — Agent Instructions\n\nWeb data grid with a framework-neutral TypeScript core, Angular, React, SolidJS, and a vanilla web component. The compiled Rust/WASM core is consumed from `@ornery/ui-grid-wasm`.\n\n## Architecture\n\n```\nprojects/ui-grid-core/     Pure TypeScript engine (pipeline, sorting, filtering, grouping, etc.)\nprojects/ui-grid-vanilla/  <ui-grid-element> custom element — the rendering engine\nprojects/ui-grid-react/    React wrapper (mounts vanilla element, projects via portals)\nprojects/ui-grid-solid/    SolidJS wrapper (mounts vanilla element, projects via Solid roots)\nprojects/ui-grid/          Angular wrapper (mounts vanilla element, projects via ng-template)\nsrc/app/                   Angular demo/docs application\n```\n\nThe vanilla element is the single renderer. Angular and React wrappers mount `<ui-grid-element>` and project framework templates into it via `setFrameworkRenderedSlots()` + `cellSlotsChanged` events.\n\n## Build Commands\n\n```bash\nnpm start                    # Dev server (Angular demo app) at localhost:4200\nnpm run build                # Full production build (wasm + react + vanilla + angular app)\nnpm run build:core           # Build @ornery/ui-grid-core (tsup)\nnpm run build:library        # Build core + vanilla + wasm + Angular library (ng-packagr)\nnpm run build:pages          # GitHub Pages production build\nnpm test                     # All test suites\nnpm run test:angular         # Angular tests (vitest via ng)\nnpm run test:react           # React tests (vitest)\nnpm run build:solid          # Build core + vanilla + SolidJS adapter\nnpm run test:solid           # SolidJS, SSR, hydration, package, and example tests\nnpm run test:vanilla         # Vanilla tests (vitest)\nnpm run prepare:wasm         # Materialize the pinned WASM npm package into dist/\n```\n\n## Package Dependencies (build order)\n\n1. `@ornery/ui-grid-core` — no internal deps\n2. `@ornery/ui-grid-vanilla` — depends on core\n3. `@ornery/ui-grid-react` — depends on core + vanilla\n4. `@ornery/ui-grid-solid` — depends on core + vanilla\n5. `@ornery/ui-grid` (Angular) — depends on core + vanilla\n\nAlways build in this order. The `build:library` script handles this automatically.\n\n## Coding Conventions\n\n- TypeScript strict mode everywhere\n- No comments unless explaining a non-obvious \"why\"\n- No default exports — use named exports\n- Grid options use the `GridOptions` interface; columns use `GridColumnDef`\n- Row identity: `rowIdentity: (row) => String(row['id'])`\n- Feature flags: `enable*` boolean options (e.g., `enableSorting`, `enableFiltering`)\n- All user-facing strings go through the i18n label system (`resolveGridLabels`)\n- CSS custom properties prefixed `--ui-grid-*`\n- Shadow DOM encapsulation — never pierce from outside\n\n## State Management in the Controller\n\nThe `VanillaGridController` owns all mutable grid state. Key rule: `setOptions()` must NOT clobber interactive state. It tracks `lastOptions*` values and only applies declarative state (grouping, pinning, scroll directions) when the consumer's value structurally changed from the previous pass.\n\nInteractive state that survives `setOptions`: sort, filters, expanded rows, selection, pagination, cell navigation, column widths, column order.\n\n## Testing\n\n- Unit tests: vitest for all JS/TS packages\n- Test files: `*.test.ts` / `*.test.tsx` colocated with source\n- Shadow DOM testing: query via `el.shadowRoot.querySelector()`\n- jsdom lacks `adoptedStyleSheets` — polyfilled in test-setup files\n- WASM artifacts are provided by the pinned `@ornery/ui-grid-wasm` npm dependency\n\n## Do NOT\n\n- Add Angular Elements references — that build target was removed\n- Import from `dist/` paths within the monorepo during development (use tsconfig path mappings)\n- Use `zone.runOutsideAngular` for event handlers that create Angular views (they need zone for CD)\n- Call `setFrameworkRenderedSlots` on every options update — only when template columns structurally change\n- Skip `frameworkSlots.flush()` after rendering new DOM that contains slot placeholders\n- Add `node_modules/`, `dist/`, or `.angular/cache/` to commits\n- Add Rust source, Cargo manifests, or Rust toolchain steps; those belong in `orneryd/uiGrid`\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/angular-ui/ui-grid/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# UI Grid — Agent Instructions\n\nWeb data grid with a framework-neutral TypeScript core, Angular, React, SolidJS, and a vanilla web component. The compiled Rust/WASM core is consumed from `@ornery/ui-grid-wasm`.\n\n## Architecture\n\n```\nprojects/ui-grid-core/     Pure TypeScript engine (pipeline, sorting, filtering, grouping, etc.)\nprojects/ui-grid-vanilla/  <ui-grid-element> custom element — the rendering engine\nprojects/ui-grid-react/    React wrapper (mounts vanilla element, projects via portals)\nprojects/ui-grid-solid/    SolidJS wrapper (mounts vanilla element, projects via Solid roots)\nprojects/ui-grid/          Angular wrapper (mounts vanilla element, projects via ng-template)\nsrc/app/                   Angular demo/docs application\n```\n\nThe vanilla element is the single renderer. Angular and React wrappers mount `<ui-grid-element>` and project framework templates into it via `setFrameworkRenderedSlots()` + `cellSlotsChanged` events.\n\n## Build Commands\n\n```bash\nnpm start                    # Dev server (Angular demo app) at localhost:4200\nnpm run build                # Full production build (wasm + react + vanilla + angular app)\nnpm run build:core           # Build @ornery/ui-grid-core (tsup)\nnpm run build:library        # Build core + vanilla + wasm + Angular library (ng-packagr)\nnpm run build:pages          # GitHub Pages production build\nnpm test                     # All test suites\nnpm run test:angular         # Angular tests (vitest via ng)\nnpm run test:react           # React tests (vitest)\nnpm run build:solid          # Build core + vanilla + SolidJS adapter\nnpm run test:solid           # SolidJS, SSR, hydration, package, and example tests\nnpm run test:vanilla         # Vanilla tests (vitest)\nnpm run prepare:wasm         # Materialize the pinned WASM npm package into dist/\n```\n\n## Package Dependencies (build order)\n\n1. `@ornery/ui-grid-core` — no internal deps\n2. `@ornery/ui-grid-vanilla` — depends on core\n3. `@ornery/ui-grid-react` — depends on core + vanilla\n4. `@ornery/ui-grid-solid` — depends on core + vanilla\n5. `@ornery/ui-grid` (Angular) — depends on core + vanilla\n\nAlways build in this order. The `build:library` script handles this automatically.\n\n## Coding Conventions\n\n- TypeScript strict mode everywhere\n- No comments unless explaining a non-obvious \"why\"\n- No default exports — use named exports\n- Grid options use the `GridOptions` interface; columns use `GridColumnDef`\n- Row identity: `rowIdentity: (row) => String(row['id'])`\n- Feature flags: `enable*` boolean options (e.g., `enableSorting`, `enableFiltering`)\n- All user-facing strings go through the i18n label system (`resolveGridLabels`)\n- CSS custom properties prefixed `--ui-grid-*`\n- Shadow DOM encapsulation — never pierce from outside\n\n## State Management in the Controller\n\nThe `VanillaGridController` owns all mutable grid state. Key rule: `setOptions()` must NOT clobber interactive state. It tracks `lastOptions*` values and only applies declarative state (grouping, pinning, scroll directions) when the consumer's value structurally changed from the previous pass.\n\nInteractive state that survives `setOptions`: sort, filters, expanded rows, selection, pagination, cell navigation, column widths, column order.\n\n## Testing\n\n- Unit tests: vitest for all JS/TS packages\n- Test files: `*.test.ts` / `*.test.tsx` colocated with source\n- Shadow DOM testing: query via `el.shadowRoot.querySelector()`\n- jsdom lacks `adoptedStyleSheets` — polyfilled in test-setup files\n- WASM artifacts are provided by the pinned `@ornery/ui-grid-wasm` npm dependency\n\n## Do NOT\n\n- Add Angular Elements references — that build target was removed\n- Import from `dist/` paths within the monorepo during development (use tsconfig path mappings)\n- Use `zone.runOutsideAngular` for event handlers that create Angular views (they need zone for CD)\n- Call `setFrameworkRenderedSlots` on every options update — only when template columns structurally change\n- Skip `frameworkSlots.flush()` after rendering new DOM that contains slot placeholders\n- Add `node_modules/`, `dist/`, or `.angular/cache/` to commits\n- Add Rust source, Cargo manifests, or Rust toolchain steps; those belong in `orneryd/uiGrid`\n","isInternal":false,"tokens":972,"sizeBytes":4227}],"systemPromptSnippet":"<yakaai_skills repo=\"angular-ui/ui-grid\">\n<!-- File: AGENTS.md (Tokens: ~972 | Category: root-instruction) -->\n# UI Grid — Agent Instructions\n\nWeb data grid with a framework-neutral TypeScript core, Angular, React, SolidJS, and a vanilla web component. The compiled Rust/WASM core is consumed from `@ornery/ui-grid-wasm`.\n\n## Architecture\n\n```\nprojects/ui-grid-core/     Pure TypeScript engine (pipeline, sorting, filtering, grouping, etc.)\nprojects/ui-grid-vanilla/  <ui-grid-element> custom element — the rendering engine\nprojects/ui-grid-react/    React wrapper (mounts vanilla element, projects via portals)\nprojects/ui-grid-solid/    SolidJS wrapper (mounts vanilla element, projects via Solid roots)\nprojects/ui-grid/          Angular wrapper (mounts vanilla element, projects via ng-template)\nsrc/app/                   Angular demo/docs application\n```\n\nThe vanilla element is the single renderer. Angular and React wrappers mount `<ui-grid-element>` and project framework templates into it via `setFrameworkRenderedSlots()` + `cellSlotsChanged` events.\n\n## Build Commands\n\n```bash\nnpm start                    # Dev server (Angular demo app) at localhost:4200\nnpm run build                # Full production build (wasm + react + vanilla + angular app)\nnpm run build:core           # Build @ornery/ui-grid-core (tsup)\nnpm run build:library        # Build core + vanilla + wasm + Angular library (ng-packagr)\nnpm run build:pages          # GitHub Pages production build\nnpm test                     # All test suites\nnpm run test:angular         # Angular tests (vitest via ng)\nnpm run test:react           # React tests (vitest)\nnpm run build:solid          # Build core + vanilla + SolidJS adapter\nnpm run test:solid           # SolidJS, SSR, hydration, package, and example tests\nnpm run test:vanilla         # Vanilla tests (vitest)\nnpm run prepare:wasm         # Materialize the pinned WASM npm package into dist/\n```\n\n## Package Dependencies (build order)\n\n1. `@ornery/ui-grid-core` — no internal deps\n2. `@ornery/ui-grid-vanilla` — depends on core\n3. `@ornery/ui-grid-react` — depends on core + vanilla\n4. `@ornery/ui-grid-solid` — depends on core + vanilla\n5. `@ornery/ui-grid` (Angular) — depends on core + vanilla\n\nAlways build in this order. The `build:library` script handles this automatically.\n\n## Coding Conventions\n\n- TypeScript strict mode everywhere\n- No comments unless explaining a non-obvious \"why\"\n- No default exports — use named exports\n- Grid options use the `GridOptions` interface; columns use `GridColumnDef`\n- Row identity: `rowIdentity: (row) => String(row['id'])`\n- Feature flags: `enable*` boolean options (e.g., `enableSorting`, `enableFiltering`)\n- All user-facing strings go through the i18n label system (`resolveGridLabels`)\n- CSS custom properties prefixed `--ui-grid-*`\n- Shadow DOM encapsulation — never pierce from outside\n\n## State Management in the Controller\n\nThe `VanillaGridController` owns all mutable grid state. Key rule: `setOptions()` must NOT clobber interactive state. It tracks `lastOptions*` values and only applies declarative state (grouping, pinning, scroll directions) when the consumer's value structurally changed from the previous pass.\n\nInteractive state that survives `setOptions`: sort, filters, expanded rows, selection, pagination, cell navigation, column widths, column order.\n\n## Testing\n\n- Unit tests: vitest for all JS/TS packages\n- Test files: `*.test.ts` / `*.test.tsx` colocated with source\n- Shadow DOM testing: query via `el.shadowRoot.querySelector()`\n- jsdom lacks `adoptedStyleSheets` — polyfilled in test-setup files\n- WASM artifacts are provided by the pinned `@ornery/ui-grid-wasm` npm dependency\n\n## Do NOT\n\n- Add Angular Elements references — that build target was removed\n- Import from `dist/` paths within the monorepo during development (use tsconfig path mappings)\n- Use `zone.runOutsideAngular` for event handlers that create Angular views (they need zone for CD)\n- Call `setFrameworkRenderedSlots` on every options update — only when template columns structurally change\n- Skip `frameworkSlots.flush()` after rendering new DOM that contains slot placeholders\n- Add `node_modules/`, `dist/`, or `.angular/cache/` to commits\n- Add Rust source, Cargo manifests, or Rust toolchain steps; those belong in `orneryd/uiGrid`\n</yakaai_skills>"}