create-yss-spec 1.1.1 → 1.1.3
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/package.json +1 -1
- package/template/.agents/skills/high-fidelity-html-prototype/SKILL.md +102 -0
- package/template/.codex/skills/data-analytics/.app.json +84 -0
- package/template/.codex/skills/data-analytics/.codex-plugin/plugin.json +66 -0
- package/template/.codex/skills/data-analytics/.mcp.json +30 -0
- package/template/.codex/skills/data-analytics/AGENTS.md +20 -0
- package/template/.codex/skills/data-analytics/DEPENDENCIES.MD +27 -0
- package/template/.codex/skills/data-analytics/README.md +60 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html +16 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part001 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part002 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part003 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part004 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part005 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-artifact-widget.html.gz.b64.part006 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html +16 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part001 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part002 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part003 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part004 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part005 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part006 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-chart-widget.html.gz.b64.part007 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-small.svg +5 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html +16 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part001 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part002 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part003 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience-table-widget.html.gz.b64.part004 +1 -0
- package/template/.codex/skills/data-analytics/assets/datascience.png +0 -0
- package/template/.codex/skills/data-analytics/assets/datascience.svg +10 -0
- package/template/.codex/skills/data-analytics/mcp/server.cjs +2963 -0
- package/template/.codex/skills/data-analytics/package-lock.json +3048 -0
- package/template/.codex/skills/data-analytics/package.json +43 -0
- package/template/.codex/skills/data-analytics/scripts/normalize-widget-assets.mjs +75 -0
- package/template/.codex/skills/data-analytics/skills/analyze-data-quality/SKILL.md +160 -0
- package/template/.codex/skills/data-analytics/skills/analyze-data-quality/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/SKILL.md +148 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/bi-platform-dashboard.md +18 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/html-dashboard.md +24 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/mcp-artifact-dashboard.md +71 -0
- package/template/.codex/skills/data-analytics/skills/build-dashboard/specifications/streamlit-dashboard.md +85 -0
- package/template/.codex/skills/data-analytics/skills/build-report/SKILL.md +207 -0
- package/template/.codex/skills/data-analytics/skills/build-report/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/assets/executive-report-shell.html +70 -0
- package/template/.codex/skills/data-analytics/skills/build-report/assets/technical-report-shell.html +66 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/SKILL.md +118 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/__init__.py +1 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/cli.py +57 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/constants.py +61 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/docx_writer.py +362 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/html_parser.py +829 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/model.py +30 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/plan.py +129 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/quality.py +374 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/rendering.py +613 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/table_utils.py +54 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc/utils.py +16 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-doc/scripts/report_to_google_doc_plan.py +9 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/SKILL.md +78 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-google-slides/scripts/report_to_google_slides.py +2379 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/SKILL.md +88 -0
- package/template/.codex/skills/data-analytics/skills/build-report/report-to-pdf/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/build-report/specifications/executive-report.md +97 -0
- package/template/.codex/skills/data-analytics/skills/build-report/specifications/mcp-app-report.md +59 -0
- package/template/.codex/skills/data-analytics/skills/build-report/specifications/technical-report.md +75 -0
- package/template/.codex/skills/data-analytics/skills/design-kpis/SKILL.md +103 -0
- package/template/.codex/skills/data-analytics/skills/design-kpis/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/gather-business-context/SKILL.md +68 -0
- package/template/.codex/skills/data-analytics/skills/gather-business-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/index/SKILL.md +251 -0
- package/template/.codex/skills/data-analytics/skills/index/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/SKILL.md +131 -0
- package/template/.codex/skills/data-analytics/skills/jupyter-notebooks/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/SKILL.md +141 -0
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/kpi-reporting/references/report-templates.md +32 -0
- package/template/.codex/skills/data-analytics/skills/market-sizing/SKILL.md +106 -0
- package/template/.codex/skills/data-analytics/skills/market-sizing/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/metric-diagnostics/SKILL.md +130 -0
- package/template/.codex/skills/data-analytics/skills/metric-diagnostics/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/product-business-analysis/SKILL.md +141 -0
- package/template/.codex/skills/data-analytics/skills/product-business-analysis/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/SKILL.md +178 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/agents/openai.yaml +9 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/assets/file-spreadsheet.png +0 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/charts.md +31 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/references/artifact_tool_api.md +466 -0
- package/template/.codex/skills/data-analytics/skills/spreadsheets/style_guidelines.md +99 -0
- package/template/.codex/skills/data-analytics/skills/user-context/SKILL.md +195 -0
- package/template/.codex/skills/data-analytics/skills/user-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/automation-config.md +26 -0
- package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/source-category-config.json +51 -0
- package/template/.codex/skills/data-analytics/skills/user-context/plugin-author-config/user-context-config.md +66 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/automation.md +69 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-examples.md +204 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding-state-template.json +87 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/onboarding.md +497 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/connector-playbook.md +74 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/setup.md +65 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/skill-template.md +160 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/source-intake.md +75 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/semantic-layer/weekly-polling-automation.md +96 -0
- package/template/.codex/skills/data-analytics/skills/user-context/references/source-category-runtime.md +263 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/data_analytics_preflight.py +1460 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/init_user_context_state.py +128 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/reset_user_context_state.py +101 -0
- package/template/.codex/skills/data-analytics/skills/user-context/scripts/validate_user_context_preflight.py +499 -0
- package/template/.codex/skills/data-analytics/skills/user-context/tests/test_state_helpers.py +978 -0
- package/template/.codex/skills/data-analytics/skills/validate-data/SKILL.md +190 -0
- package/template/.codex/skills/data-analytics/skills/validate-data/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/visualize-data/SKILL.md +157 -0
- package/template/.codex/skills/data-analytics/skills/visualize-data/agents/openai.yaml +6 -0
- package/template/.codex/skills/data-analytics/skills/visualize-data/references/seaborn-templates.md +774 -0
- package/template/.codex/skills/data-analytics/src/DESIGN.md +222 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/App.tsx +3666 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/analytics-layout.test.mjs +136 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartFrame.tsx +54 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartLegend.tsx +96 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartRenderer.tsx +1647 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/ChartTooltip.tsx +245 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-app-helpers.tsx +462 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-capabilities.ts +107 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-compatibility.ts +164 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-contract.ts +192 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-theme.ts +203 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-tokens.css +619 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/charting/chart-transforms.ts +402 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/fonts/SystemSansVariableVF.woff2 +0 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/imageExport.ts +370 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/layout/AnalyticsLayoutCanvas.tsx +536 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/layout/RichMarkdown.tsx +681 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/layout/analyticsLayoutCore.ts +164 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/main.tsx +21 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/chart_contract.py +472 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/check_analytics_app_runtime_links.py +75 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/design_contract.py +142 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/package_utils.py +142 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/scripts/tests/test_package_utils.py +377 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/styles.css +3468 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.d.ts +44 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tables/DataTable.jsx +639 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tables/data-table.css +327 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/tokens.css +225 -0
- package/template/.codex/skills/data-analytics/src/analytics-app/types.ts +204 -0
- package/template/.codex/skills/data-analytics/src/analytics-app-core.md +85 -0
- package/template/.codex/skills/data-analytics/src/codex-style-contract.md +30 -0
- package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.html +12 -0
- package/template/.codex/skills/data-analytics/src/datascience-artifact-widget.jsx +1008 -0
- package/template/.codex/skills/data-analytics/src/datascience-chart-widget.css +2117 -0
- package/template/.codex/skills/data-analytics/src/datascience-chart-widget.html +122 -0
- package/template/.codex/skills/data-analytics/src/datascience-chart-widget.js +3588 -0
- package/template/.codex/skills/data-analytics/src/datascience-table-widget.css +483 -0
- package/template/.codex/skills/data-analytics/src/datascience-table-widget.html +32 -0
- package/template/.codex/skills/data-analytics/src/datascience-table-widget.js +333 -0
- package/template/.codex/skills/data-analytics/src/mcp-host.js +153 -0
- package/template/.codex/skills/data-analytics/src/recharts-config.js +315 -0
- package/template/.codex/skills/data-analytics/src/recharts-renderer.jsx +294 -0
- package/template/.codex/skills/data-analytics/src/sql-source-view.css +33 -0
- package/template/.codex/skills/data-analytics/src/sql-source-view.js +157 -0
- package/template/.codex/skills/data-analytics/src/styles/codex-theme.css +121 -0
- package/template/.codex/skills/data-analytics/src/table-renderer.jsx +28 -0
- package/template/.codex/skills/data-analytics/tests/chart-transforms.test.mjs +87 -0
- package/template/.codex/skills/data-analytics/tests/funnel-smoke.html +105 -0
- package/template/.codex/skills/data-analytics/tests/inline-widget-compare.html +233 -0
- package/template/.codex/skills/data-analytics/tests/mcp-server.test.mjs +1500 -0
- package/template/.codex/skills/data-analytics/tests/native-style-contract.test.mjs +219 -0
- package/template/.codex/skills/data-analytics/tests/recharts-config.test.mjs +144 -0
- package/template/.codex/skills/data-analytics/tests/recharts-renderer.test.mjs +11 -0
- package/template/.codex/skills/data-analytics/tests/rich-markdown.test.mjs +54 -0
- package/template/.codex/skills/data-analytics/tests/widget-render-harness.html +321 -0
- package/template/.codex/skills/data-analytics/tsconfig.json +19 -0
- package/template/.codex/skills/data-analytics/vite.config.ts +46 -0
- package/template/.codex/skills/high-fidelity-html-prototype/SKILL.md +102 -0
- package/template/.codex/skills/high-fidelity-html-prototype/agents/openai.yaml +5 -0
- package/template/.codex/skills/product-design/.app.json +7 -0
- package/template/.codex/skills/product-design/.codex-plugin/plugin.json +50 -0
- package/template/.codex/skills/product-design/README.md +50 -0
- package/template/.codex/skills/product-design/agents/openai.yaml +4 -0
- package/template/.codex/skills/product-design/assets/composerIcon.svg +9 -0
- package/template/.codex/skills/product-design/assets/logo.png +0 -0
- package/template/.codex/skills/product-design/package.json +11 -0
- package/template/.codex/skills/product-design/references/browser-order.md +9 -0
- package/template/.codex/skills/product-design/references/communication-protocol.md +45 -0
- package/template/.codex/skills/product-design/references/critical-overrides.md +58 -0
- package/template/.codex/skills/product-design/references/local-prototype-preflight.md +16 -0
- package/template/.codex/skills/product-design/scripts/bootstrap-prototype.mjs +147 -0
- package/template/.codex/skills/product-design/skills/audit/SKILL.md +159 -0
- package/template/.codex/skills/product-design/skills/audit/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/audit/references/design-audit-framework.md +73 -0
- package/template/.codex/skills/product-design/skills/design-qa/SKILL.md +133 -0
- package/template/.codex/skills/product-design/skills/design-qa/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/design-qa/references/qa-rubric.md +61 -0
- package/template/.codex/skills/product-design/skills/get-context/SKILL.md +81 -0
- package/template/.codex/skills/product-design/skills/get-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/ideate/SKILL.md +179 -0
- package/template/.codex/skills/product-design/skills/ideate/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/image-to-code/SKILL.md +105 -0
- package/template/.codex/skills/product-design/skills/image-to-code/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/index/SKILL.md +126 -0
- package/template/.codex/skills/product-design/skills/index/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/prototype/SKILL.md +128 -0
- package/template/.codex/skills/product-design/skills/prototype/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/prototype/references/existing-codebase-edits.md +18 -0
- package/template/.codex/skills/product-design/skills/research/SKILL.md +92 -0
- package/template/.codex/skills/product-design/skills/research/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/share/SKILL.md +41 -0
- package/template/.codex/skills/product-design/skills/share/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/url-to-code/SKILL.md +124 -0
- package/template/.codex/skills/product-design/skills/url-to-code/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/user-context/SKILL.md +147 -0
- package/template/.codex/skills/product-design/skills/user-context/agents/openai.yaml +6 -0
- package/template/.codex/skills/product-design/skills/user-context/plugin-author-config/user-context-template.md +63 -0
- package/template/.codex/skills/product-design/skills/user-context/references/onboarding.md +66 -0
- package/template/.codex/skills/product-design/skills/user-context/scripts/init_user_context.py +86 -0
- package/template/.codex/skills/product-design/skills/user-context/scripts/user_context_preflight.py +204 -0
- package/template/.codex/skills/product-design/templates/prototype/AGENTS.md +7 -0
- package/template/.codex/skills/product-design/templates/prototype/index.html +12 -0
- package/template/.codex/skills/product-design/templates/prototype/package.json +18 -0
- package/template/.codex/skills/product-design/templates/prototype/src/App.jsx +5 -0
- package/template/.codex/skills/product-design/templates/prototype/src/main.jsx +10 -0
- package/template/.codex/skills/product-design/templates/prototype/src/styles.css +13 -0
- package/template/.codex/skills/product-design/templates/prototype/vite.config.mjs +14 -0
- package/template/.codex/skills/product-design-prototype/SKILL.md +2 -4
- package/template/.codex/skills/prototype-review/SKILL.md +7 -7
- package/template/.codex/skills/yss-design-system/SKILL.md +4 -2
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +10 -7
- package/template/.codex/skills/yss-product-lifecycle/references/artifact-checklist.md +1 -0
- package/template/.codex/skills/yss-product-lifecycle/references/stage-routing.md +1 -1
- package/template/.codex/skills/yss-ui/SKILL.md +4 -10
- package/template/.codex/skills/yss-ui/references/quick-recipes.md +1 -1
- package/template/AGENTS.md +9 -3
- package/template/CONTEXT.md +1 -0
- package/template/docs/adr/adr-product-design-prototype-entrypoint.md +54 -0
- package/template/docs/api/templates/openapi-draft-review-checklist.md +5 -1
- package/template/docs/design/README.md +13 -6
- package/template/docs/design/prototypes/.gitkeep +1 -0
- package/template/docs/design/templates/interaction-spec-template.md +8 -3
- package/template/docs/design/templates/product-overview-design-template.md +34 -5
- package/template/docs/design/templates/prototype-confirmation-template.md +57 -0
- package/template/docs/design/templates/prototype-review-checklist.md +7 -3
- package/template/docs/design/templates/state-matrix-template.md +1 -1
- package/template/docs/process/harness-executive-blueprint.md +6 -1
- package/template/docs/process/harness-process-tailoring.md +3 -3
- package/template/docs/process/harness-work-unit-map.md +1 -1
- package/template/docs/process/lifecycle-artifact-map.md +7 -5
- package/template/docs/process/product-prototype-workflow.md +82 -0
- package/template/docs/templates/requirement-freeze-template.md +4 -3
- package/template/docs/user-guide/product-lifecycle-workflow.md +2 -2
- package/template/docs/user-guide/product-rd-lifecycle-best-practices.md +54 -24
- package/template/.codex/skills/component-story-prototype/SKILL.md +0 -55
- package/template/.codex/skills/component-story-prototype/agents/openai.yaml +0 -4
- package/template/.codex/skills/mock-api-prototype/SKILL.md +0 -48
- package/template/.codex/skills/mock-api-prototype/agents/openai.yaml +0 -4
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { describe, test } from "node:test";
|
|
5
|
+
import ts from "typescript";
|
|
6
|
+
|
|
7
|
+
async function loadCore() {
|
|
8
|
+
const source = await readFile(join(process.cwd(), "src", "analyticsLayoutCore.ts"), "utf8");
|
|
9
|
+
const { outputText } = ts.transpileModule(source, {
|
|
10
|
+
compilerOptions: {
|
|
11
|
+
module: ts.ModuleKind.ES2022,
|
|
12
|
+
target: ts.ScriptTarget.ES2022
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
const url = `data:text/javascript;base64,${Buffer.from(outputText).toString("base64")}`;
|
|
16
|
+
return import(url);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("analytics layout core", () => {
|
|
20
|
+
test("normalizes stored order, removes unknown blocks, appends missing blocks, and expands orphan halves", async () => {
|
|
21
|
+
const { normalize } = await loadCore();
|
|
22
|
+
assert.deepEqual(
|
|
23
|
+
normalize(
|
|
24
|
+
[{ id: "chart-a" }, { id: "table-a" }, { id: "text-a" }],
|
|
25
|
+
[
|
|
26
|
+
{ id: "table-a", layout: "half" },
|
|
27
|
+
{ id: "ghost", layout: "full" },
|
|
28
|
+
{ id: "chart-a", layout: "half" }
|
|
29
|
+
]
|
|
30
|
+
),
|
|
31
|
+
[
|
|
32
|
+
{ id: "table-a", layout: "half" },
|
|
33
|
+
{ id: "chart-a", layout: "half" },
|
|
34
|
+
{ id: "text-a", layout: "full" }
|
|
35
|
+
]
|
|
36
|
+
);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("pairs a dragged block with a full-width target", async () => {
|
|
40
|
+
const { pairWithTarget } = await loadCore();
|
|
41
|
+
assert.deepEqual(
|
|
42
|
+
pairWithTarget(
|
|
43
|
+
[
|
|
44
|
+
{ id: "a", layout: "full" },
|
|
45
|
+
{ id: "b", layout: "full" },
|
|
46
|
+
{ id: "c", layout: "full" }
|
|
47
|
+
],
|
|
48
|
+
"c",
|
|
49
|
+
"a",
|
|
50
|
+
"after"
|
|
51
|
+
),
|
|
52
|
+
[
|
|
53
|
+
{ id: "a", layout: "half" },
|
|
54
|
+
{ id: "c", layout: "half" },
|
|
55
|
+
{ id: "b", layout: "full" }
|
|
56
|
+
]
|
|
57
|
+
);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("moving a half block above another block expands it and unpairs its previous row", async () => {
|
|
61
|
+
const { moveBlock } = await loadCore();
|
|
62
|
+
assert.deepEqual(
|
|
63
|
+
moveBlock(
|
|
64
|
+
[
|
|
65
|
+
{ id: "a", layout: "half" },
|
|
66
|
+
{ id: "b", layout: "half" },
|
|
67
|
+
{ id: "c", layout: "full" }
|
|
68
|
+
],
|
|
69
|
+
"a",
|
|
70
|
+
"c",
|
|
71
|
+
"before"
|
|
72
|
+
),
|
|
73
|
+
[
|
|
74
|
+
{ id: "b", layout: "full" },
|
|
75
|
+
{ id: "a", layout: "full" },
|
|
76
|
+
{ id: "c", layout: "full" }
|
|
77
|
+
]
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test("predicts center-zone reorder without half-width promotion", async () => {
|
|
82
|
+
const { predictPlacement } = await loadCore();
|
|
83
|
+
assert.deepEqual(
|
|
84
|
+
predictPlacement(
|
|
85
|
+
[
|
|
86
|
+
{ id: "a", layout: "full" },
|
|
87
|
+
{ id: "b", layout: "full" },
|
|
88
|
+
{ id: "c", layout: "full" }
|
|
89
|
+
],
|
|
90
|
+
{ draggedId: "c", intent: "before", targetId: "b" }
|
|
91
|
+
),
|
|
92
|
+
[
|
|
93
|
+
{ id: "a", layout: "full" },
|
|
94
|
+
{ id: "c", layout: "full" },
|
|
95
|
+
{ id: "b", layout: "full" }
|
|
96
|
+
]
|
|
97
|
+
);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test("holding in a split-intent zone keeps the current preview stable", async () => {
|
|
101
|
+
const { predictPlacement } = await loadCore();
|
|
102
|
+
const items = [
|
|
103
|
+
{ id: "a", layout: "full" },
|
|
104
|
+
{ id: "b", layout: "full" },
|
|
105
|
+
{ id: "c", layout: "full" }
|
|
106
|
+
];
|
|
107
|
+
assert.deepEqual(
|
|
108
|
+
predictPlacement(items, { draggedId: "c", intent: "hold", targetId: "a" }),
|
|
109
|
+
items
|
|
110
|
+
);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test("dragging to the end keeps mixed chart/table/text blocks packed", async () => {
|
|
114
|
+
const { moveBlock, packRows } = await loadCore();
|
|
115
|
+
const next = moveBlock(
|
|
116
|
+
[
|
|
117
|
+
{ id: "chart-a", layout: "half" },
|
|
118
|
+
{ id: "table-a", layout: "half" },
|
|
119
|
+
{ id: "text-a", layout: "full" }
|
|
120
|
+
],
|
|
121
|
+
"chart-a",
|
|
122
|
+
null,
|
|
123
|
+
"end"
|
|
124
|
+
);
|
|
125
|
+
assert.deepEqual(next, [
|
|
126
|
+
{ id: "table-a", layout: "full" },
|
|
127
|
+
{ id: "text-a", layout: "full" },
|
|
128
|
+
{ id: "chart-a", layout: "full" }
|
|
129
|
+
]);
|
|
130
|
+
assert.deepEqual(packRows(next), [
|
|
131
|
+
[{ id: "table-a", layout: "full" }],
|
|
132
|
+
[{ id: "text-a", layout: "full" }],
|
|
133
|
+
[{ id: "chart-a", layout: "full" }]
|
|
134
|
+
]);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { CSSProperties, ReactNode } from "react";
|
|
2
|
+
import type { ChartSurface } from "./chart-contract";
|
|
3
|
+
import { ChartLegend, type ChartLegendItem } from "./ChartLegend";
|
|
4
|
+
|
|
5
|
+
export function ChartFrame({
|
|
6
|
+
children,
|
|
7
|
+
className = "",
|
|
8
|
+
height,
|
|
9
|
+
interactiveLegend = false,
|
|
10
|
+
legendItems = [],
|
|
11
|
+
legendPosition = "bottom",
|
|
12
|
+
legendTitle,
|
|
13
|
+
onVisibleChange,
|
|
14
|
+
surface = "card",
|
|
15
|
+
visibleIds,
|
|
16
|
+
}: {
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
className?: string;
|
|
19
|
+
height?: number | string;
|
|
20
|
+
interactiveLegend?: boolean;
|
|
21
|
+
legendItems?: ChartLegendItem[];
|
|
22
|
+
legendPosition?: "bottom" | "right";
|
|
23
|
+
legendTitle?: string;
|
|
24
|
+
onVisibleChange?: (visible: Set<string>) => void;
|
|
25
|
+
surface?: ChartSurface;
|
|
26
|
+
visibleIds?: Set<string>;
|
|
27
|
+
}) {
|
|
28
|
+
const frameStyle = height == null ? undefined : ({ height } as CSSProperties);
|
|
29
|
+
const showLegend = legendItems.length > 0;
|
|
30
|
+
return (
|
|
31
|
+
<div
|
|
32
|
+
className={[
|
|
33
|
+
"chart-frame",
|
|
34
|
+
`chart-frame--${surface}`,
|
|
35
|
+
showLegend ? "chart-frame--with-legend" : "",
|
|
36
|
+
showLegend && legendPosition === "right" ? "chart-frame--legend-right" : "",
|
|
37
|
+
className,
|
|
38
|
+
].filter(Boolean).join(" ")}
|
|
39
|
+
style={frameStyle}
|
|
40
|
+
>
|
|
41
|
+
<div className="chart-plot">{children}</div>
|
|
42
|
+
{showLegend ? (
|
|
43
|
+
<ChartLegend
|
|
44
|
+
interactive={interactiveLegend}
|
|
45
|
+
items={legendItems}
|
|
46
|
+
position={legendPosition}
|
|
47
|
+
title={legendTitle}
|
|
48
|
+
onVisibleChange={onVisibleChange}
|
|
49
|
+
visibleIds={visibleIds}
|
|
50
|
+
/>
|
|
51
|
+
) : null}
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
|
|
3
|
+
export type ChartLegendItem = {
|
|
4
|
+
color: string;
|
|
5
|
+
id: string;
|
|
6
|
+
lineStyle?: "solid" | "dashed" | "dotted";
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
function strokeDasharrayForLegend(lineStyle: ChartLegendItem["lineStyle"]) {
|
|
11
|
+
if (lineStyle === "dotted") return "2 4";
|
|
12
|
+
if (lineStyle === "dashed") return "6 5";
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function orderedVisibleIds(items: ChartLegendItem[], visibleIds: Set<string>): Set<string> {
|
|
17
|
+
return new Set(items.map((item) => item.id).filter((id) => visibleIds.has(id)));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function ChartLegend({
|
|
21
|
+
interactive = false,
|
|
22
|
+
items,
|
|
23
|
+
onVisibleChange,
|
|
24
|
+
position = "bottom",
|
|
25
|
+
title,
|
|
26
|
+
visibleIds,
|
|
27
|
+
}: {
|
|
28
|
+
interactive?: boolean;
|
|
29
|
+
items: ChartLegendItem[];
|
|
30
|
+
onVisibleChange?: (visible: Set<string>) => void;
|
|
31
|
+
position?: "bottom" | "right";
|
|
32
|
+
title?: string;
|
|
33
|
+
visibleIds?: Set<string>;
|
|
34
|
+
}) {
|
|
35
|
+
if (!items.length) return null;
|
|
36
|
+
const activeIds = visibleIds ?? new Set(items.map((item) => item.id));
|
|
37
|
+
|
|
38
|
+
function toggle(id: string) {
|
|
39
|
+
if (!interactive || !onVisibleChange) return;
|
|
40
|
+
const next = new Set(activeIds);
|
|
41
|
+
if (next.has(id)) {
|
|
42
|
+
if (next.size === 1) return;
|
|
43
|
+
next.delete(id);
|
|
44
|
+
}
|
|
45
|
+
else next.add(id);
|
|
46
|
+
onVisibleChange(orderedVisibleIds(items, next));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<div className={`chart-legend-wrap chart-legend-wrap--${position}`}>
|
|
51
|
+
{title ? <div className="chart-legend-title">{title}</div> : null}
|
|
52
|
+
<ul className="recharts-default-legend chart-legend">
|
|
53
|
+
{items.map((item) => {
|
|
54
|
+
const isVisible = activeIds.has(item.id);
|
|
55
|
+
const markerStyle = { "--legend-color": item.color } as CSSProperties;
|
|
56
|
+
const marker = item.lineStyle ? (
|
|
57
|
+
<svg aria-hidden="true" className="chart-legend-line" style={markerStyle} viewBox="0 0 28 8">
|
|
58
|
+
<line
|
|
59
|
+
stroke="var(--legend-color)"
|
|
60
|
+
strokeDasharray={strokeDasharrayForLegend(item.lineStyle)}
|
|
61
|
+
strokeLinecap="round"
|
|
62
|
+
strokeWidth="2.5"
|
|
63
|
+
x1="1.5"
|
|
64
|
+
x2="26.5"
|
|
65
|
+
y1="4"
|
|
66
|
+
y2="4"
|
|
67
|
+
/>
|
|
68
|
+
</svg>
|
|
69
|
+
) : (
|
|
70
|
+
<span aria-hidden="true" className="chart-legend-dot" style={markerStyle} />
|
|
71
|
+
);
|
|
72
|
+
return (
|
|
73
|
+
<li className="recharts-legend-item chart-legend-item" key={item.id}>
|
|
74
|
+
{interactive ? (
|
|
75
|
+
<button
|
|
76
|
+
aria-pressed={isVisible}
|
|
77
|
+
className="chart-legend-button"
|
|
78
|
+
onClick={() => toggle(item.id)}
|
|
79
|
+
type="button"
|
|
80
|
+
>
|
|
81
|
+
{marker}
|
|
82
|
+
<span>{item.value}</span>
|
|
83
|
+
</button>
|
|
84
|
+
) : (
|
|
85
|
+
<>
|
|
86
|
+
{marker}
|
|
87
|
+
<span>{item.value}</span>
|
|
88
|
+
</>
|
|
89
|
+
)}
|
|
90
|
+
</li>
|
|
91
|
+
);
|
|
92
|
+
})}
|
|
93
|
+
</ul>
|
|
94
|
+
</div>
|
|
95
|
+
);
|
|
96
|
+
}
|