create-yss-spec 3.5.3 → 3.5.4
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/src/template/asset-runtime.js +20 -5
- package/template/.agents/skills/.strategic-design-skills-manifest.json +5 -5
- package/template/.agents/skills/archify/SKILL.md +4 -52
- package/template/.agents/skills/archify/references/authoring-notes.md +12 -0
- package/template/.agents/skills/archify/references/authoring-workflow.md +25 -0
- package/template/.agents/skills/archify/references/delivery-workflow.md +25 -0
- package/template/.agents/skills/archify/references/upstream-updates.md +12 -0
- package/template/.agents/skills/code-review/SKILL.md +3 -34
- package/template/.agents/skills/code-review/references/legacy-convergence.md +5 -0
- package/template/.agents/skills/code-review/references/review-axis-checklists.md +18 -0
- package/template/.agents/skills/code-review/references/smell-baseline.md +23 -0
- package/template/.agents/skills/diagnosing-bugs/SKILL.md +3 -91
- package/template/.agents/skills/diagnosing-bugs/references/feedback-loop.md +53 -0
- package/template/.agents/skills/diagnosing-bugs/references/investigation.md +49 -0
- package/template/.agents/skills/git-commit-core/agents/openai.yaml +2 -0
- package/template/.agents/skills/maintaining-skills/references/authoring.md +6 -0
- package/template/.agents/skills/prototype-review/SKILL.md +11 -0
- package/template/.agents/skills/prototype-review/references/component-qa.md +32 -0
- package/template/.agents/skills/setup-matt-pocock-skills/SKILL.md +3 -73
- package/template/.agents/skills/setup-matt-pocock-skills/references/configuration-decisions.md +42 -0
- package/template/.agents/skills/setup-matt-pocock-skills/references/write-configuration.md +42 -0
- package/template/.agents/skills/to-spec/SKILL.md +9 -62
- package/template/.agents/skills/to-tickets/SKILL.md +20 -86
- package/template/.agents/skills/using-git-worktrees/SKILL.md +5 -122
- package/template/.agents/skills/using-git-worktrees/references/git-fallback.md +46 -0
- package/template/.agents/skills/using-git-worktrees/references/setup-and-baseline.md +45 -0
- package/template/.agents/skills/using-git-worktrees/references/troubleshooting.md +47 -0
- package/template/.agents/skills/wayfinder/SKILL.md +7 -86
- package/template/.agents/skills/wayfinder/references/chart-map.md +14 -0
- package/template/.agents/skills/wayfinder/references/map-format.md +49 -0
- package/template/.agents/skills/wayfinder/references/scope-and-frontier.md +24 -0
- package/template/.agents/skills/wayfinder/references/ticket-types.md +12 -0
- package/template/.agents/skills/wayfinder/references/work-map.md +15 -0
- package/template/.agents/skills/writing-for-agents/SKILL-MECHANICS.md +20 -11
- package/template/.agents/skills/yedit-table-usage/SKILL.md +5 -172
- package/template/.agents/skills/yedit-table-usage/references/editable-table-example.md +141 -0
- package/template/.agents/skills/yedit-table-usage/references/select-and-filter-examples.md +38 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/SKILL.md +4 -25
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/engineering-checks.md +11 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/generation-workflow.md +14 -0
- package/template/.agents/skills/yss-ddd-scaffold-generator/references/platform-selection.md +16 -0
- package/template/.agents/skills/yss-design-system/SKILL.md +13 -3
- package/template/.agents/skills/yss-design-system/assets/enterprise-craft/app.js +53 -0
- package/template/.agents/skills/yss-design-system/assets/enterprise-craft/index.html +2 -0
- package/template/.agents/skills/yss-design-system/assets/enterprise-craft/scenarios.js +14 -0
- package/template/.agents/skills/yss-design-system/assets/enterprise-craft/styles.css +32 -0
- package/template/.agents/skills/yss-design-system/references/data-quality-theme.md +2 -2
- package/template/.agents/skills/yss-design-system/references/design-qa-theme.md +1 -1
- package/template/.agents/skills/yss-design-system/references/design-system.md +3 -3
- package/template/.agents/skills/yss-design-system/references/enterprise-craft.md +33 -0
- package/template/.agents/skills/yss-design-system/references/page-composition.md +24 -0
- package/template/.agents/skills/yss-design-system/references/prototype-default-theme.md +26 -0
- package/template/.agents/skills/yss-design-system/references/search-date-theme.md +19 -0
- package/template/.agents/skills/yss-design-system/scripts/export-craft-examples.mjs +30 -0
- package/template/.agents/skills/yss-hook/SKILL.md +8 -102
- package/template/.agents/skills/yss-hook/references/async-actions.md +49 -0
- package/template/.agents/skills/yss-hook/references/list-pagination.md +46 -0
- package/template/.agents/skills/yss-hook/references/polling.md +20 -0
- package/template/.agents/skills/yss-implementation-contract-compiler/SKILL.md +6 -3
- package/template/.agents/skills/yss-implementation-contract-compiler/references/scaffold-compilation.md +7 -0
- package/template/.agents/skills/yss-openapi-draft-review/SKILL.md +2 -49
- package/template/.agents/skills/yss-openapi-draft-review/references/review-output.md +45 -0
- package/template/.agents/skills/yss-openapi-draft-review/references/semantic-review.md +16 -0
- package/template/.agents/skills/yss-openapi-governance/SKILL.md +2 -48
- package/template/.agents/skills/yss-openapi-governance/references/governance-workflow.md +38 -0
- package/template/.agents/skills/yss-openapi-governance/references/locked-toolchain.md +22 -0
- package/template/.agents/skills/yss-product-lifecycle/SKILL.md +20 -16
- package/template/.agents/skills/yss-product-lifecycle/references/orchestration-contract.yaml +415 -386
- package/template/.agents/skills/yss-product-lifecycle/references/plan-requirements.md +2 -0
- package/template/.agents/skills/yss-product-lifecycle/references/state-model.md +2 -2
- package/template/.agents/skills/yss-prototype-stage/SKILL.md +27 -8
- package/template/.agents/skills/yss-prototype-stage/assets/comparison/comparison.css +12 -0
- package/template/.agents/skills/yss-prototype-stage/assets/comparison/comparison.js +52 -0
- package/template/.agents/skills/yss-prototype-stage/assets/comparison/index.html +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/comparison/review-ready.js +2 -0
- package/template/.agents/skills/yss-prototype-stage/assets/low-fidelity-exercise/app.js +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/low-fidelity-exercise/index.html +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/low-fidelity-exercise/styles.css +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/app.js +12 -6
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/index.html +1 -1
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/scenarios.json +297 -0
- package/template/.agents/skills/yss-prototype-stage/assets/native-workbench/styles.css +2 -0
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/app.js +7 -5
- package/template/.agents/skills/yss-prototype-stage/assets/offline-html/scenarios.json +297 -0
- package/template/.agents/skills/yss-prototype-stage/assets/prototype-theme.css +92 -0
- package/template/.agents/skills/yss-prototype-stage/assets/scenario-runtime.js +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/SHADCN-LICENSE.txt +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/package.json +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/pnpm-lock.yaml +1278 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/registry-manifest.json +936 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/theme.css +107 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/Alert.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertDescription.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertTitle.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/index.ts +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialog.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogAction.vue +18 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogCancel.vue +25 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogContent.vue +44 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogDescription.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogFooter.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogHeader.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTitle.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTrigger.vue +12 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/index.ts +9 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/Badge.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/index.ts +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/Breadcrumb.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbItem.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbLink.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbList.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbPage.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/index.ts +7 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/Button.vue +31 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/index.ts +40 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/Card.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardAction.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardContent.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardDescription.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardFooter.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardHeader.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardTitle.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/index.ts +7 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/Checkbox.vue +35 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/Combobox.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxAnchor.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxEmpty.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxGroup.vue +27 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxInput.vue +42 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItem.vue +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItemIndicator.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxList.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxSeparator.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxTrigger.vue +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxViewport.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/index.ts +13 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/Dialog.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogClose.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogContent.vue +53 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogDescription.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogFooter.vue +27 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogHeader.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogOverlay.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogScrollContent.vue +59 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTitle.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTrigger.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/index.ts +10 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuGroup.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuItem.vue +31 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSub.vue +18 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubContent.vue +27 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/index.ts +16 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/Empty.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyContent.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyDescription.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyHeader.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyMedia.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyTitle.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/index.ts +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/Field.vue +25 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldContent.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldDescription.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldError.vue +53 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldGroup.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLabel.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLegend.vue +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSeparator.vue +29 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSet.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldTitle.vue +20 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/index.ts +39 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/Input.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroup.vue +35 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupAddon.vue +36 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupButton.vue +29 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupInput.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupText.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupTextarea.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/index.ts +51 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/Label.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/Pagination.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationContent.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationEllipsis.vue +25 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationFirst.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationItem.vue +34 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationLast.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationNext.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationPrevious.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/index.ts +8 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/Popover.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverAnchor.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverContent.vue +45 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverTrigger.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/index.ts +4 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendar.vue +62 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCell.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCellTrigger.vue +41 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGrid.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridBody.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridHead.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridRow.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeadCell.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeader.vue +23 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeading.vue +30 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarNextButton.vue +32 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarPrevButton.vue +32 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/index.ts +12 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/Select.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectContent.vue +51 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectGroup.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItem.vue +44 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItemText.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectLabel.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollDownButton.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollUpButton.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectSeparator.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectTrigger.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectValue.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/index.ts +11 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/Separator.vue +29 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/Sheet.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetClose.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetContent.vue +62 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetDescription.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetFooter.vue +16 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetHeader.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetOverlay.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTitle.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTrigger.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/index.ts +8 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/Skeleton.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/Spinner.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/Table.vue +16 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableBody.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCaption.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCell.vue +22 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableEmpty.vue +34 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableFooter.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHead.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHeader.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableRow.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/index.ts +9 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/Tabs.vue +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsContent.vue +21 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsList.vue +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsTrigger.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/index.ts +4 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/Textarea.vue +28 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/index.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/Tooltip.vue +19 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipContent.vue +34 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipProvider.vue +14 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipTrigger.vue +15 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/index.ts +4 -0
- package/template/.agents/skills/yss-prototype-stage/assets/shadcn-vue-authoring/utils.ts +7 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/Analysis.vue +16 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/Approval.vue +14 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/CombinedQuery.vue +17 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/ComponentStates.vue +41 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/Conflict.vue +33 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/DateRange.vue +29 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/Frame.vue +7 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/ListDetail.vue +47 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/MultiStep.vue +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/Notice.vue +5 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/OwnerValidity.vue +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/SearchSelect.vue +32 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/Workspace.vue +174 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/analysis.scenarios.json +276 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/approval.scenarios.json +207 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.css +14 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.js +24 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query.scenarios.json +298 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/conflict.scenarios.json +229 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail.scenarios.json +185 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/mount.ts +4 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step.scenarios.json +188 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity.scenarios.json +298 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/patterns.css +26 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/refinement.css +129 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workbench.ts +1 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-definition.ts +40 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-model.js +75 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-page.ts +18 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.config.json +6 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.ts +3 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.css +101 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.scenarios.json +2015 -0
- package/template/.agents/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.ts +26 -0
- package/template/.agents/skills/yss-prototype-stage/references/business-patterns.md +42 -0
- package/template/.agents/skills/yss-prototype-stage/references/comparison-tool.md +48 -0
- package/template/.agents/skills/yss-prototype-stage/references/component-recipes.md +41 -0
- package/template/.agents/skills/yss-prototype-stage/references/concept-comparison.md +26 -0
- package/template/.agents/skills/yss-prototype-stage/references/enterprise-workspace.md +53 -0
- package/template/.agents/skills/yss-prototype-stage/references/low-fidelity-exercise.md +32 -0
- package/template/.agents/skills/yss-prototype-stage/references/product-design-adapter.md +11 -5
- package/template/.agents/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -6
- package/template/.agents/skills/yss-prototype-stage/references/prototype-verification.md +25 -0
- package/template/.agents/skills/yss-prototype-stage/references/resource-lifecycle.md +20 -0
- package/template/.agents/skills/yss-prototype-stage/references/search-date-patterns.md +28 -0
- package/template/.agents/skills/yss-prototype-stage/references/shadcn-integration.md +5 -0
- package/template/.agents/skills/yss-prototype-stage/references/shadcn-vue-integration.md +46 -0
- package/template/.agents/skills/yss-prototype-stage/references/usability-research.md +26 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/browser-session.mjs +57 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/build-shadcn-vue-prototype.mjs +137 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/compose-workspace-scenarios.mjs +22 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/export-business-patterns.mjs +7 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/export-low-fidelity-exercise.mjs +18 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/export-vue-patterns.mjs +21 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/offline-html.mjs +60 -23
- package/template/.agents/skills/yss-prototype-stage/scripts/prototype-comparison.mjs +208 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/prototype-contract.mjs +19 -14
- package/template/.agents/skills/yss-prototype-stage/scripts/scenario-contract.mjs +31 -0
- package/template/.agents/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +97 -0
- package/template/.agents/skills/yss-prototype-stage/tests/antd-reference.test.mjs +4 -24
- package/template/.agents/skills/yss-prototype-stage/tests/browser-harness.mjs +37 -0
- package/template/.agents/skills/yss-prototype-stage/tests/browser-visual.mjs +22 -0
- package/template/.agents/skills/yss-prototype-stage/tests/business-controls-browser.mjs +43 -0
- package/template/.agents/skills/yss-prototype-stage/tests/business-controls.test.mjs +20 -0
- package/template/.agents/skills/yss-prototype-stage/tests/compact-theme-browser.mjs +53 -0
- package/template/.agents/skills/yss-prototype-stage/tests/comparison-browser-smoke.mjs +77 -0
- package/template/.agents/skills/yss-prototype-stage/tests/comparison-fixture.mjs +16 -0
- package/template/.agents/skills/yss-prototype-stage/tests/comparison.test.mjs +46 -0
- package/template/.agents/skills/yss-prototype-stage/tests/components-browser.mjs +60 -0
- package/template/.agents/skills/yss-prototype-stage/tests/patterns-browser.mjs +84 -0
- package/template/.agents/skills/yss-prototype-stage/tests/reliability.test.mjs +34 -0
- package/template/.agents/skills/yss-prototype-stage/tests/retirement.test.mjs +8 -0
- package/template/.agents/skills/yss-prototype-stage/tests/run-scenarios.mjs +19 -2
- package/template/.agents/skills/yss-prototype-stage/tests/shadcn-vue.test.mjs +43 -0
- package/template/.agents/skills/yss-prototype-stage/tests/verification-entry.test.mjs +16 -0
- package/template/.agents/skills/yss-prototype-stage/tests/workbench-smoke.mjs +36 -21
- package/template/.agents/skills/yss-prototype-stage/tests/workspace-browser.mjs +50 -0
- package/template/.agents/skills/yss-prototype-stage/tests/workspace.test.mjs +70 -0
- package/template/.agents/skills/yss-prototype-stage/tests/zoom-browser.mjs +26 -0
- package/template/.agents/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.agents/skills/yss-technical-design/SKILL.md +4 -0
- package/template/.agents/skills/yss-ui-business-page-generation/SKILL.md +4 -61
- package/template/.agents/skills/yss-ui-business-page-generation/references/page-composition-example.md +50 -0
- package/template/.agents/skills/yss-ui-business-page-generation/references/page-layout-example.md +19 -0
- package/template/.agents/skills/ytable-usage/SKILL.md +3 -191
- package/template/.agents/skills/ytable-usage/references/selection-and-batch.md +30 -0
- package/template/.agents/skills/ytable-usage/references/table-pagination-examples.md +170 -0
- package/template/.codex/skills/archify/SKILL.md +4 -52
- package/template/.codex/skills/archify/references/authoring-notes.md +12 -0
- package/template/.codex/skills/archify/references/authoring-workflow.md +25 -0
- package/template/.codex/skills/archify/references/delivery-workflow.md +25 -0
- package/template/.codex/skills/archify/references/upstream-updates.md +12 -0
- package/template/.codex/skills/code-review/SKILL.md +3 -34
- package/template/.codex/skills/code-review/references/legacy-convergence.md +5 -0
- package/template/.codex/skills/code-review/references/review-axis-checklists.md +18 -0
- package/template/.codex/skills/code-review/references/smell-baseline.md +23 -0
- package/template/.codex/skills/diagnosing-bugs/SKILL.md +3 -91
- package/template/.codex/skills/diagnosing-bugs/references/feedback-loop.md +53 -0
- package/template/.codex/skills/diagnosing-bugs/references/investigation.md +49 -0
- package/template/.codex/skills/git-commit-core/agents/openai.yaml +2 -0
- package/template/.codex/skills/maintaining-skills/references/authoring.md +6 -0
- package/template/.codex/skills/prototype-review/SKILL.md +11 -0
- package/template/.codex/skills/prototype-review/references/component-qa.md +32 -0
- package/template/.codex/skills/setup-matt-pocock-skills/SKILL.md +3 -73
- package/template/.codex/skills/setup-matt-pocock-skills/references/configuration-decisions.md +42 -0
- package/template/.codex/skills/setup-matt-pocock-skills/references/write-configuration.md +42 -0
- package/template/.codex/skills/to-spec/SKILL.md +9 -62
- package/template/.codex/skills/to-tickets/SKILL.md +20 -86
- package/template/.codex/skills/using-git-worktrees/SKILL.md +5 -122
- package/template/.codex/skills/using-git-worktrees/references/git-fallback.md +46 -0
- package/template/.codex/skills/using-git-worktrees/references/setup-and-baseline.md +45 -0
- package/template/.codex/skills/using-git-worktrees/references/troubleshooting.md +47 -0
- package/template/.codex/skills/wayfinder/SKILL.md +7 -86
- package/template/.codex/skills/wayfinder/references/chart-map.md +14 -0
- package/template/.codex/skills/wayfinder/references/map-format.md +49 -0
- package/template/.codex/skills/wayfinder/references/scope-and-frontier.md +24 -0
- package/template/.codex/skills/wayfinder/references/ticket-types.md +12 -0
- package/template/.codex/skills/wayfinder/references/work-map.md +15 -0
- package/template/.codex/skills/writing-for-agents/SKILL-MECHANICS.md +20 -11
- package/template/.codex/skills/yedit-table-usage/SKILL.md +5 -172
- package/template/.codex/skills/yedit-table-usage/references/editable-table-example.md +141 -0
- package/template/.codex/skills/yedit-table-usage/references/select-and-filter-examples.md +38 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/SKILL.md +4 -25
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/engineering-checks.md +11 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/generation-workflow.md +14 -0
- package/template/.codex/skills/yss-ddd-scaffold-generator/references/platform-selection.md +16 -0
- package/template/.codex/skills/yss-design-system/SKILL.md +13 -3
- package/template/.codex/skills/yss-design-system/assets/enterprise-craft/app.js +53 -0
- package/template/.codex/skills/yss-design-system/assets/enterprise-craft/index.html +2 -0
- package/template/.codex/skills/yss-design-system/assets/enterprise-craft/scenarios.js +14 -0
- package/template/.codex/skills/yss-design-system/assets/enterprise-craft/styles.css +32 -0
- package/template/.codex/skills/yss-design-system/references/data-quality-theme.md +2 -2
- package/template/.codex/skills/yss-design-system/references/design-qa-theme.md +1 -1
- package/template/.codex/skills/yss-design-system/references/design-system.md +3 -3
- package/template/.codex/skills/yss-design-system/references/enterprise-craft.md +33 -0
- package/template/.codex/skills/yss-design-system/references/page-composition.md +24 -0
- package/template/.codex/skills/yss-design-system/references/prototype-default-theme.md +26 -0
- package/template/.codex/skills/yss-design-system/references/search-date-theme.md +19 -0
- package/template/.codex/skills/yss-design-system/scripts/export-craft-examples.mjs +30 -0
- package/template/.codex/skills/yss-hook/SKILL.md +8 -102
- package/template/.codex/skills/yss-hook/references/async-actions.md +49 -0
- package/template/.codex/skills/yss-hook/references/list-pagination.md +46 -0
- package/template/.codex/skills/yss-hook/references/polling.md +20 -0
- package/template/.codex/skills/yss-implementation-contract-compiler/SKILL.md +6 -3
- package/template/.codex/skills/yss-implementation-contract-compiler/references/scaffold-compilation.md +7 -0
- package/template/.codex/skills/yss-openapi-draft-review/SKILL.md +2 -49
- package/template/.codex/skills/yss-openapi-draft-review/references/review-output.md +45 -0
- package/template/.codex/skills/yss-openapi-draft-review/references/semantic-review.md +16 -0
- package/template/.codex/skills/yss-openapi-governance/SKILL.md +2 -48
- package/template/.codex/skills/yss-openapi-governance/references/governance-workflow.md +38 -0
- package/template/.codex/skills/yss-openapi-governance/references/locked-toolchain.md +22 -0
- package/template/.codex/skills/yss-product-lifecycle/SKILL.md +20 -16
- package/template/.codex/skills/yss-product-lifecycle/references/orchestration-contract.yaml +415 -386
- package/template/.codex/skills/yss-product-lifecycle/references/plan-requirements.md +2 -0
- package/template/.codex/skills/yss-product-lifecycle/references/state-model.md +2 -2
- package/template/.codex/skills/yss-prototype-stage/SKILL.md +27 -8
- package/template/.codex/skills/yss-prototype-stage/assets/comparison/comparison.css +12 -0
- package/template/.codex/skills/yss-prototype-stage/assets/comparison/comparison.js +52 -0
- package/template/.codex/skills/yss-prototype-stage/assets/comparison/index.html +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/comparison/review-ready.js +2 -0
- package/template/.codex/skills/yss-prototype-stage/assets/low-fidelity-exercise/app.js +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/low-fidelity-exercise/index.html +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/low-fidelity-exercise/styles.css +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/app.js +12 -6
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/index.html +1 -1
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/scenarios.json +297 -0
- package/template/.codex/skills/yss-prototype-stage/assets/native-workbench/styles.css +2 -0
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/app.js +7 -5
- package/template/.codex/skills/yss-prototype-stage/assets/offline-html/scenarios.json +297 -0
- package/template/.codex/skills/yss-prototype-stage/assets/prototype-theme.css +92 -0
- package/template/.codex/skills/yss-prototype-stage/assets/scenario-runtime.js +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/SHADCN-LICENSE.txt +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/package.json +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/pnpm-lock.yaml +1278 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/registry-manifest.json +936 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/theme.css +107 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/Alert.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertDescription.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertTitle.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/index.ts +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialog.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogAction.vue +18 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogCancel.vue +25 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogContent.vue +44 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogDescription.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogFooter.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogHeader.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTitle.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTrigger.vue +12 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/index.ts +9 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/Badge.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/index.ts +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/Breadcrumb.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbItem.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbLink.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbList.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbPage.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/index.ts +7 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/Button.vue +31 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/index.ts +40 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/Card.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardAction.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardContent.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardDescription.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardFooter.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardHeader.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardTitle.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/index.ts +7 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/Checkbox.vue +35 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/Combobox.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxAnchor.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxEmpty.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxGroup.vue +27 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxInput.vue +42 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItem.vue +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItemIndicator.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxList.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxSeparator.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxTrigger.vue +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxViewport.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/index.ts +13 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/Dialog.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogClose.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogContent.vue +53 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogDescription.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogFooter.vue +27 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogHeader.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogOverlay.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogScrollContent.vue +59 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTitle.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTrigger.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/index.ts +10 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuGroup.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuItem.vue +31 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSub.vue +18 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubContent.vue +27 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/index.ts +16 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/Empty.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyContent.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyDescription.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyHeader.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyMedia.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyTitle.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/index.ts +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/Field.vue +25 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldContent.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldDescription.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldError.vue +53 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldGroup.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLabel.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLegend.vue +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSeparator.vue +29 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSet.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldTitle.vue +20 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/index.ts +39 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/Input.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroup.vue +35 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupAddon.vue +36 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupButton.vue +29 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupInput.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupText.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupTextarea.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/index.ts +51 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/Label.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/Pagination.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationContent.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationEllipsis.vue +25 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationFirst.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationItem.vue +34 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationLast.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationNext.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationPrevious.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/index.ts +8 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/Popover.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverAnchor.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverContent.vue +45 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverTrigger.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/index.ts +4 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendar.vue +62 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCell.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCellTrigger.vue +41 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGrid.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridBody.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridHead.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridRow.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeadCell.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeader.vue +23 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeading.vue +30 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarNextButton.vue +32 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarPrevButton.vue +32 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/index.ts +12 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/Select.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectContent.vue +51 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectGroup.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItem.vue +44 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItemText.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectLabel.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollDownButton.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollUpButton.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectSeparator.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectTrigger.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectValue.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/index.ts +11 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/Separator.vue +29 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/Sheet.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetClose.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetContent.vue +62 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetDescription.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetFooter.vue +16 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetHeader.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetOverlay.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTitle.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTrigger.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/index.ts +8 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/Skeleton.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/Spinner.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/Table.vue +16 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableBody.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCaption.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCell.vue +22 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableEmpty.vue +34 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableFooter.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHead.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHeader.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableRow.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/index.ts +9 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/Tabs.vue +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsContent.vue +21 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsList.vue +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsTrigger.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/index.ts +4 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/Textarea.vue +28 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/index.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/Tooltip.vue +19 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipContent.vue +34 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipProvider.vue +14 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipTrigger.vue +15 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/index.ts +4 -0
- package/template/.codex/skills/yss-prototype-stage/assets/shadcn-vue-authoring/utils.ts +7 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/Analysis.vue +16 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/Approval.vue +14 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/CombinedQuery.vue +17 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/ComponentStates.vue +41 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/Conflict.vue +33 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/DateRange.vue +29 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/Frame.vue +7 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/ListDetail.vue +47 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/MultiStep.vue +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/Notice.vue +5 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/OwnerValidity.vue +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/SearchSelect.vue +32 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/Workspace.vue +174 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/analysis.scenarios.json +276 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/approval.scenarios.json +207 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.css +14 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.js +24 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query.scenarios.json +298 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/conflict.scenarios.json +229 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail.scenarios.json +185 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/mount.ts +4 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step.scenarios.json +188 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity.scenarios.json +298 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/patterns.css +26 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/refinement.css +129 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workbench.ts +1 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-definition.ts +40 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-model.js +75 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-page.ts +18 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.config.json +6 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.ts +3 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.css +101 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.scenarios.json +2015 -0
- package/template/.codex/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.ts +26 -0
- package/template/.codex/skills/yss-prototype-stage/references/business-patterns.md +42 -0
- package/template/.codex/skills/yss-prototype-stage/references/comparison-tool.md +48 -0
- package/template/.codex/skills/yss-prototype-stage/references/component-recipes.md +41 -0
- package/template/.codex/skills/yss-prototype-stage/references/concept-comparison.md +26 -0
- package/template/.codex/skills/yss-prototype-stage/references/enterprise-workspace.md +53 -0
- package/template/.codex/skills/yss-prototype-stage/references/low-fidelity-exercise.md +32 -0
- package/template/.codex/skills/yss-prototype-stage/references/product-design-adapter.md +11 -5
- package/template/.codex/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -6
- package/template/.codex/skills/yss-prototype-stage/references/prototype-verification.md +25 -0
- package/template/.codex/skills/yss-prototype-stage/references/resource-lifecycle.md +20 -0
- package/template/.codex/skills/yss-prototype-stage/references/search-date-patterns.md +28 -0
- package/template/.codex/skills/yss-prototype-stage/references/shadcn-integration.md +5 -0
- package/template/.codex/skills/yss-prototype-stage/references/shadcn-vue-integration.md +46 -0
- package/template/.codex/skills/yss-prototype-stage/references/usability-research.md +26 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/browser-session.mjs +57 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/build-shadcn-vue-prototype.mjs +137 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/compose-workspace-scenarios.mjs +22 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/export-business-patterns.mjs +7 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/export-low-fidelity-exercise.mjs +18 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/export-vue-patterns.mjs +21 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/offline-html.mjs +60 -23
- package/template/.codex/skills/yss-prototype-stage/scripts/prototype-comparison.mjs +208 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/prototype-contract.mjs +19 -14
- package/template/.codex/skills/yss-prototype-stage/scripts/scenario-contract.mjs +31 -0
- package/template/.codex/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +97 -0
- package/template/.codex/skills/yss-prototype-stage/tests/antd-reference.test.mjs +4 -24
- package/template/.codex/skills/yss-prototype-stage/tests/browser-harness.mjs +37 -0
- package/template/.codex/skills/yss-prototype-stage/tests/browser-visual.mjs +22 -0
- package/template/.codex/skills/yss-prototype-stage/tests/business-controls-browser.mjs +43 -0
- package/template/.codex/skills/yss-prototype-stage/tests/business-controls.test.mjs +20 -0
- package/template/.codex/skills/yss-prototype-stage/tests/compact-theme-browser.mjs +53 -0
- package/template/.codex/skills/yss-prototype-stage/tests/comparison-browser-smoke.mjs +77 -0
- package/template/.codex/skills/yss-prototype-stage/tests/comparison-fixture.mjs +16 -0
- package/template/.codex/skills/yss-prototype-stage/tests/comparison.test.mjs +46 -0
- package/template/.codex/skills/yss-prototype-stage/tests/components-browser.mjs +60 -0
- package/template/.codex/skills/yss-prototype-stage/tests/patterns-browser.mjs +84 -0
- package/template/.codex/skills/yss-prototype-stage/tests/reliability.test.mjs +34 -0
- package/template/.codex/skills/yss-prototype-stage/tests/retirement.test.mjs +8 -0
- package/template/.codex/skills/yss-prototype-stage/tests/run-scenarios.mjs +19 -2
- package/template/.codex/skills/yss-prototype-stage/tests/shadcn-vue.test.mjs +43 -0
- package/template/.codex/skills/yss-prototype-stage/tests/verification-entry.test.mjs +16 -0
- package/template/.codex/skills/yss-prototype-stage/tests/workbench-smoke.mjs +36 -21
- package/template/.codex/skills/yss-prototype-stage/tests/workspace-browser.mjs +50 -0
- package/template/.codex/skills/yss-prototype-stage/tests/workspace.test.mjs +70 -0
- package/template/.codex/skills/yss-prototype-stage/tests/zoom-browser.mjs +26 -0
- package/template/.codex/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.codex/skills/yss-technical-design/SKILL.md +4 -0
- package/template/.codex/skills/yss-ui-business-page-generation/SKILL.md +4 -61
- package/template/.codex/skills/yss-ui-business-page-generation/references/page-composition-example.md +50 -0
- package/template/.codex/skills/yss-ui-business-page-generation/references/page-layout-example.md +19 -0
- package/template/.codex/skills/ytable-usage/SKILL.md +3 -191
- package/template/.codex/skills/ytable-usage/references/selection-and-batch.md +30 -0
- package/template/.codex/skills/ytable-usage/references/table-pagination-examples.md +170 -0
- package/template/.cursor/skills/archify/SKILL.md +4 -52
- package/template/.cursor/skills/archify/references/authoring-notes.md +12 -0
- package/template/.cursor/skills/archify/references/authoring-workflow.md +25 -0
- package/template/.cursor/skills/archify/references/delivery-workflow.md +25 -0
- package/template/.cursor/skills/archify/references/upstream-updates.md +12 -0
- package/template/.cursor/skills/code-review/SKILL.md +3 -34
- package/template/.cursor/skills/code-review/references/legacy-convergence.md +5 -0
- package/template/.cursor/skills/code-review/references/review-axis-checklists.md +18 -0
- package/template/.cursor/skills/code-review/references/smell-baseline.md +23 -0
- package/template/.cursor/skills/diagnosing-bugs/SKILL.md +3 -91
- package/template/.cursor/skills/diagnosing-bugs/references/feedback-loop.md +53 -0
- package/template/.cursor/skills/diagnosing-bugs/references/investigation.md +49 -0
- package/template/.cursor/skills/git-commit-core/agents/openai.yaml +2 -0
- package/template/.cursor/skills/maintaining-skills/references/authoring.md +6 -0
- package/template/.cursor/skills/prototype-review/SKILL.md +11 -0
- package/template/.cursor/skills/prototype-review/references/component-qa.md +32 -0
- package/template/.cursor/skills/setup-matt-pocock-skills/SKILL.md +3 -73
- package/template/.cursor/skills/setup-matt-pocock-skills/references/configuration-decisions.md +42 -0
- package/template/.cursor/skills/setup-matt-pocock-skills/references/write-configuration.md +42 -0
- package/template/.cursor/skills/to-spec/SKILL.md +9 -62
- package/template/.cursor/skills/to-tickets/SKILL.md +20 -86
- package/template/.cursor/skills/using-git-worktrees/SKILL.md +5 -122
- package/template/.cursor/skills/using-git-worktrees/references/git-fallback.md +46 -0
- package/template/.cursor/skills/using-git-worktrees/references/setup-and-baseline.md +45 -0
- package/template/.cursor/skills/using-git-worktrees/references/troubleshooting.md +47 -0
- package/template/.cursor/skills/wayfinder/SKILL.md +7 -86
- package/template/.cursor/skills/wayfinder/references/chart-map.md +14 -0
- package/template/.cursor/skills/wayfinder/references/map-format.md +49 -0
- package/template/.cursor/skills/wayfinder/references/scope-and-frontier.md +24 -0
- package/template/.cursor/skills/wayfinder/references/ticket-types.md +12 -0
- package/template/.cursor/skills/wayfinder/references/work-map.md +15 -0
- package/template/.cursor/skills/writing-for-agents/SKILL-MECHANICS.md +20 -11
- package/template/.cursor/skills/yedit-table-usage/SKILL.md +5 -172
- package/template/.cursor/skills/yedit-table-usage/references/editable-table-example.md +141 -0
- package/template/.cursor/skills/yedit-table-usage/references/select-and-filter-examples.md +38 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/SKILL.md +4 -25
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/engineering-checks.md +11 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/generation-workflow.md +14 -0
- package/template/.cursor/skills/yss-ddd-scaffold-generator/references/platform-selection.md +16 -0
- package/template/.cursor/skills/yss-design-system/SKILL.md +13 -3
- package/template/.cursor/skills/yss-design-system/assets/enterprise-craft/app.js +53 -0
- package/template/.cursor/skills/yss-design-system/assets/enterprise-craft/index.html +2 -0
- package/template/.cursor/skills/yss-design-system/assets/enterprise-craft/scenarios.js +14 -0
- package/template/.cursor/skills/yss-design-system/assets/enterprise-craft/styles.css +32 -0
- package/template/.cursor/skills/yss-design-system/references/data-quality-theme.md +2 -2
- package/template/.cursor/skills/yss-design-system/references/design-qa-theme.md +1 -1
- package/template/.cursor/skills/yss-design-system/references/design-system.md +3 -3
- package/template/.cursor/skills/yss-design-system/references/enterprise-craft.md +33 -0
- package/template/.cursor/skills/yss-design-system/references/page-composition.md +24 -0
- package/template/.cursor/skills/yss-design-system/references/prototype-default-theme.md +26 -0
- package/template/.cursor/skills/yss-design-system/references/search-date-theme.md +19 -0
- package/template/.cursor/skills/yss-design-system/scripts/export-craft-examples.mjs +30 -0
- package/template/.cursor/skills/yss-hook/SKILL.md +8 -102
- package/template/.cursor/skills/yss-hook/references/async-actions.md +49 -0
- package/template/.cursor/skills/yss-hook/references/list-pagination.md +46 -0
- package/template/.cursor/skills/yss-hook/references/polling.md +20 -0
- package/template/.cursor/skills/yss-implementation-contract-compiler/SKILL.md +6 -3
- package/template/.cursor/skills/yss-implementation-contract-compiler/references/scaffold-compilation.md +7 -0
- package/template/.cursor/skills/yss-openapi-draft-review/SKILL.md +2 -49
- package/template/.cursor/skills/yss-openapi-draft-review/references/review-output.md +45 -0
- package/template/.cursor/skills/yss-openapi-draft-review/references/semantic-review.md +16 -0
- package/template/.cursor/skills/yss-openapi-governance/SKILL.md +2 -48
- package/template/.cursor/skills/yss-openapi-governance/references/governance-workflow.md +38 -0
- package/template/.cursor/skills/yss-openapi-governance/references/locked-toolchain.md +22 -0
- package/template/.cursor/skills/yss-product-lifecycle/SKILL.md +20 -16
- package/template/.cursor/skills/yss-product-lifecycle/references/orchestration-contract.yaml +415 -386
- package/template/.cursor/skills/yss-product-lifecycle/references/plan-requirements.md +2 -0
- package/template/.cursor/skills/yss-product-lifecycle/references/state-model.md +2 -2
- package/template/.cursor/skills/yss-prototype-stage/SKILL.md +27 -8
- package/template/.cursor/skills/yss-prototype-stage/assets/comparison/comparison.css +12 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/comparison/comparison.js +52 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/comparison/index.html +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/comparison/review-ready.js +2 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/low-fidelity-exercise/app.js +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/low-fidelity-exercise/index.html +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/low-fidelity-exercise/styles.css +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/app.js +12 -6
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/index.html +1 -1
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/scenarios.json +297 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/native-workbench/styles.css +2 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/app.js +7 -5
- package/template/.cursor/skills/yss-prototype-stage/assets/offline-html/scenarios.json +297 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/prototype-theme.css +92 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/scenario-runtime.js +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/SHADCN-LICENSE.txt +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/package.json +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/pnpm-lock.yaml +1278 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/registry-manifest.json +936 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/theme.css +107 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/Alert.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertDescription.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertTitle.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/index.ts +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialog.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogAction.vue +18 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogCancel.vue +25 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogContent.vue +44 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogDescription.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogFooter.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogHeader.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTitle.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTrigger.vue +12 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/index.ts +9 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/Badge.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/index.ts +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/Breadcrumb.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbItem.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbLink.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbList.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbPage.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/index.ts +7 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/Button.vue +31 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/index.ts +40 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/Card.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardAction.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardContent.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardDescription.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardFooter.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardHeader.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardTitle.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/index.ts +7 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/Checkbox.vue +35 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/Combobox.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxAnchor.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxEmpty.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxGroup.vue +27 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxInput.vue +42 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItem.vue +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItemIndicator.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxList.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxSeparator.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxTrigger.vue +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxViewport.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/index.ts +13 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/Dialog.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogClose.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogContent.vue +53 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogDescription.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogFooter.vue +27 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogHeader.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogOverlay.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogScrollContent.vue +59 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTitle.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTrigger.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/index.ts +10 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuGroup.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuItem.vue +31 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSub.vue +18 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubContent.vue +27 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/index.ts +16 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/Empty.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyContent.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyDescription.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyHeader.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyMedia.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyTitle.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/index.ts +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/Field.vue +25 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldContent.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldDescription.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldError.vue +53 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldGroup.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLabel.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLegend.vue +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSeparator.vue +29 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSet.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldTitle.vue +20 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/index.ts +39 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/Input.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroup.vue +35 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupAddon.vue +36 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupButton.vue +29 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupInput.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupText.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupTextarea.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/index.ts +51 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/Label.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/Pagination.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationContent.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationEllipsis.vue +25 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationFirst.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationItem.vue +34 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationLast.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationNext.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationPrevious.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/index.ts +8 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/Popover.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverAnchor.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverContent.vue +45 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverTrigger.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/index.ts +4 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendar.vue +62 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCell.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCellTrigger.vue +41 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGrid.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridBody.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridHead.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridRow.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeadCell.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeader.vue +23 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeading.vue +30 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarNextButton.vue +32 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarPrevButton.vue +32 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/index.ts +12 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/Select.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectContent.vue +51 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectGroup.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItem.vue +44 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItemText.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectLabel.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollDownButton.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollUpButton.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectSeparator.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectTrigger.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectValue.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/index.ts +11 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/Separator.vue +29 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/Sheet.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetClose.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetContent.vue +62 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetDescription.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetFooter.vue +16 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetHeader.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetOverlay.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTitle.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTrigger.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/index.ts +8 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/Skeleton.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/Spinner.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/Table.vue +16 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableBody.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCaption.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCell.vue +22 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableEmpty.vue +34 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableFooter.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHead.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHeader.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableRow.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/index.ts +9 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/Tabs.vue +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsContent.vue +21 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsList.vue +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsTrigger.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/index.ts +4 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/Textarea.vue +28 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/index.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/Tooltip.vue +19 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipContent.vue +34 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipProvider.vue +14 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipTrigger.vue +15 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/index.ts +4 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/shadcn-vue-authoring/utils.ts +7 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/Analysis.vue +16 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/Approval.vue +14 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/CombinedQuery.vue +17 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/ComponentStates.vue +41 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/Conflict.vue +33 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/DateRange.vue +29 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/Frame.vue +7 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/ListDetail.vue +47 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/MultiStep.vue +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/Notice.vue +5 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/OwnerValidity.vue +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/SearchSelect.vue +32 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/Workspace.vue +174 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/analysis.scenarios.json +276 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/approval.scenarios.json +207 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.css +14 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.js +24 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query.scenarios.json +298 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/conflict.scenarios.json +229 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail.scenarios.json +185 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/mount.ts +4 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step.scenarios.json +188 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity.scenarios.json +298 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/patterns.css +26 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/refinement.css +129 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workbench.ts +1 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-definition.ts +40 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-model.js +75 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-page.ts +18 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.config.json +6 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.ts +3 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.css +101 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.scenarios.json +2015 -0
- package/template/.cursor/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.ts +26 -0
- package/template/.cursor/skills/yss-prototype-stage/references/business-patterns.md +42 -0
- package/template/.cursor/skills/yss-prototype-stage/references/comparison-tool.md +48 -0
- package/template/.cursor/skills/yss-prototype-stage/references/component-recipes.md +41 -0
- package/template/.cursor/skills/yss-prototype-stage/references/concept-comparison.md +26 -0
- package/template/.cursor/skills/yss-prototype-stage/references/enterprise-workspace.md +53 -0
- package/template/.cursor/skills/yss-prototype-stage/references/low-fidelity-exercise.md +32 -0
- package/template/.cursor/skills/yss-prototype-stage/references/product-design-adapter.md +11 -5
- package/template/.cursor/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -6
- package/template/.cursor/skills/yss-prototype-stage/references/prototype-verification.md +25 -0
- package/template/.cursor/skills/yss-prototype-stage/references/resource-lifecycle.md +20 -0
- package/template/.cursor/skills/yss-prototype-stage/references/search-date-patterns.md +28 -0
- package/template/.cursor/skills/yss-prototype-stage/references/shadcn-integration.md +5 -0
- package/template/.cursor/skills/yss-prototype-stage/references/shadcn-vue-integration.md +46 -0
- package/template/.cursor/skills/yss-prototype-stage/references/usability-research.md +26 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/browser-session.mjs +57 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/build-shadcn-vue-prototype.mjs +137 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/compose-workspace-scenarios.mjs +22 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/export-business-patterns.mjs +7 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/export-low-fidelity-exercise.mjs +18 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/export-vue-patterns.mjs +21 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/offline-html.mjs +60 -23
- package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-comparison.mjs +208 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/prototype-contract.mjs +19 -14
- package/template/.cursor/skills/yss-prototype-stage/scripts/scenario-contract.mjs +31 -0
- package/template/.cursor/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +97 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/antd-reference.test.mjs +4 -24
- package/template/.cursor/skills/yss-prototype-stage/tests/browser-harness.mjs +37 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/browser-visual.mjs +22 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/business-controls-browser.mjs +43 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/business-controls.test.mjs +20 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/compact-theme-browser.mjs +53 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/comparison-browser-smoke.mjs +77 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/comparison-fixture.mjs +16 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/comparison.test.mjs +46 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/components-browser.mjs +60 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/patterns-browser.mjs +84 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/reliability.test.mjs +34 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/retirement.test.mjs +8 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/run-scenarios.mjs +19 -2
- package/template/.cursor/skills/yss-prototype-stage/tests/shadcn-vue.test.mjs +43 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/verification-entry.test.mjs +16 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/workbench-smoke.mjs +36 -21
- package/template/.cursor/skills/yss-prototype-stage/tests/workspace-browser.mjs +50 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/workspace.test.mjs +70 -0
- package/template/.cursor/skills/yss-prototype-stage/tests/zoom-browser.mjs +26 -0
- package/template/.cursor/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.cursor/skills/yss-technical-design/SKILL.md +4 -0
- package/template/.cursor/skills/yss-ui-business-page-generation/SKILL.md +4 -61
- package/template/.cursor/skills/yss-ui-business-page-generation/references/page-composition-example.md +50 -0
- package/template/.cursor/skills/yss-ui-business-page-generation/references/page-layout-example.md +19 -0
- package/template/.cursor/skills/ytable-usage/SKILL.md +3 -191
- package/template/.cursor/skills/ytable-usage/references/selection-and-batch.md +30 -0
- package/template/.cursor/skills/ytable-usage/references/table-pagination-examples.md +170 -0
- package/template/.pi/skills/archify/SKILL.md +4 -52
- package/template/.pi/skills/archify/references/authoring-notes.md +12 -0
- package/template/.pi/skills/archify/references/authoring-workflow.md +25 -0
- package/template/.pi/skills/archify/references/delivery-workflow.md +25 -0
- package/template/.pi/skills/archify/references/upstream-updates.md +12 -0
- package/template/.pi/skills/code-review/SKILL.md +3 -34
- package/template/.pi/skills/code-review/references/legacy-convergence.md +5 -0
- package/template/.pi/skills/code-review/references/review-axis-checklists.md +18 -0
- package/template/.pi/skills/code-review/references/smell-baseline.md +23 -0
- package/template/.pi/skills/diagnosing-bugs/SKILL.md +3 -91
- package/template/.pi/skills/diagnosing-bugs/references/feedback-loop.md +53 -0
- package/template/.pi/skills/diagnosing-bugs/references/investigation.md +49 -0
- package/template/.pi/skills/git-commit-core/agents/openai.yaml +2 -0
- package/template/.pi/skills/maintaining-skills/references/authoring.md +6 -0
- package/template/.pi/skills/prototype-review/SKILL.md +11 -0
- package/template/.pi/skills/prototype-review/references/component-qa.md +32 -0
- package/template/.pi/skills/setup-matt-pocock-skills/SKILL.md +3 -73
- package/template/.pi/skills/setup-matt-pocock-skills/references/configuration-decisions.md +42 -0
- package/template/.pi/skills/setup-matt-pocock-skills/references/write-configuration.md +42 -0
- package/template/.pi/skills/to-spec/SKILL.md +9 -62
- package/template/.pi/skills/to-tickets/SKILL.md +20 -86
- package/template/.pi/skills/using-git-worktrees/SKILL.md +5 -122
- package/template/.pi/skills/using-git-worktrees/references/git-fallback.md +46 -0
- package/template/.pi/skills/using-git-worktrees/references/setup-and-baseline.md +45 -0
- package/template/.pi/skills/using-git-worktrees/references/troubleshooting.md +47 -0
- package/template/.pi/skills/wayfinder/SKILL.md +7 -86
- package/template/.pi/skills/wayfinder/references/chart-map.md +14 -0
- package/template/.pi/skills/wayfinder/references/map-format.md +49 -0
- package/template/.pi/skills/wayfinder/references/scope-and-frontier.md +24 -0
- package/template/.pi/skills/wayfinder/references/ticket-types.md +12 -0
- package/template/.pi/skills/wayfinder/references/work-map.md +15 -0
- package/template/.pi/skills/writing-for-agents/SKILL-MECHANICS.md +20 -11
- package/template/.pi/skills/yedit-table-usage/SKILL.md +5 -172
- package/template/.pi/skills/yedit-table-usage/references/editable-table-example.md +141 -0
- package/template/.pi/skills/yedit-table-usage/references/select-and-filter-examples.md +38 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/SKILL.md +4 -25
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/engineering-checks.md +11 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/generation-workflow.md +14 -0
- package/template/.pi/skills/yss-ddd-scaffold-generator/references/platform-selection.md +16 -0
- package/template/.pi/skills/yss-design-system/SKILL.md +13 -3
- package/template/.pi/skills/yss-design-system/assets/enterprise-craft/app.js +53 -0
- package/template/.pi/skills/yss-design-system/assets/enterprise-craft/index.html +2 -0
- package/template/.pi/skills/yss-design-system/assets/enterprise-craft/scenarios.js +14 -0
- package/template/.pi/skills/yss-design-system/assets/enterprise-craft/styles.css +32 -0
- package/template/.pi/skills/yss-design-system/references/data-quality-theme.md +2 -2
- package/template/.pi/skills/yss-design-system/references/design-qa-theme.md +1 -1
- package/template/.pi/skills/yss-design-system/references/design-system.md +3 -3
- package/template/.pi/skills/yss-design-system/references/enterprise-craft.md +33 -0
- package/template/.pi/skills/yss-design-system/references/page-composition.md +24 -0
- package/template/.pi/skills/yss-design-system/references/prototype-default-theme.md +26 -0
- package/template/.pi/skills/yss-design-system/references/search-date-theme.md +19 -0
- package/template/.pi/skills/yss-design-system/scripts/export-craft-examples.mjs +30 -0
- package/template/.pi/skills/yss-hook/SKILL.md +8 -102
- package/template/.pi/skills/yss-hook/references/async-actions.md +49 -0
- package/template/.pi/skills/yss-hook/references/list-pagination.md +46 -0
- package/template/.pi/skills/yss-hook/references/polling.md +20 -0
- package/template/.pi/skills/yss-implementation-contract-compiler/SKILL.md +6 -3
- package/template/.pi/skills/yss-implementation-contract-compiler/references/scaffold-compilation.md +7 -0
- package/template/.pi/skills/yss-openapi-draft-review/SKILL.md +2 -49
- package/template/.pi/skills/yss-openapi-draft-review/references/review-output.md +45 -0
- package/template/.pi/skills/yss-openapi-draft-review/references/semantic-review.md +16 -0
- package/template/.pi/skills/yss-openapi-governance/SKILL.md +2 -48
- package/template/.pi/skills/yss-openapi-governance/references/governance-workflow.md +38 -0
- package/template/.pi/skills/yss-openapi-governance/references/locked-toolchain.md +22 -0
- package/template/.pi/skills/yss-product-lifecycle/SKILL.md +20 -16
- package/template/.pi/skills/yss-product-lifecycle/references/orchestration-contract.yaml +415 -386
- package/template/.pi/skills/yss-product-lifecycle/references/plan-requirements.md +2 -0
- package/template/.pi/skills/yss-product-lifecycle/references/state-model.md +2 -2
- package/template/.pi/skills/yss-prototype-stage/SKILL.md +27 -8
- package/template/.pi/skills/yss-prototype-stage/assets/comparison/comparison.css +12 -0
- package/template/.pi/skills/yss-prototype-stage/assets/comparison/comparison.js +52 -0
- package/template/.pi/skills/yss-prototype-stage/assets/comparison/index.html +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/comparison/review-ready.js +2 -0
- package/template/.pi/skills/yss-prototype-stage/assets/low-fidelity-exercise/app.js +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/low-fidelity-exercise/index.html +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/low-fidelity-exercise/styles.css +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/app.js +12 -6
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/index.html +1 -1
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/scenarios.json +297 -0
- package/template/.pi/skills/yss-prototype-stage/assets/native-workbench/styles.css +2 -0
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/app.js +7 -5
- package/template/.pi/skills/yss-prototype-stage/assets/offline-html/scenarios.json +297 -0
- package/template/.pi/skills/yss-prototype-stage/assets/prototype-theme.css +92 -0
- package/template/.pi/skills/yss-prototype-stage/assets/scenario-runtime.js +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/SHADCN-LICENSE.txt +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/package.json +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/pnpm-lock.yaml +1278 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/registry-manifest.json +936 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/theme.css +107 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/Alert.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertDescription.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/AlertTitle.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert/index.ts +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialog.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogAction.vue +18 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogCancel.vue +25 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogContent.vue +44 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogDescription.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogFooter.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogHeader.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTitle.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/AlertDialogTrigger.vue +12 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/alert-dialog/index.ts +9 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/Badge.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/badge/index.ts +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/Breadcrumb.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbItem.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbLink.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbList.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbPage.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/breadcrumb/index.ts +7 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/Button.vue +31 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/button/index.ts +40 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/Card.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardAction.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardContent.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardDescription.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardFooter.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardHeader.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/CardTitle.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/card/index.ts +7 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/Checkbox.vue +35 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/checkbox/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/Combobox.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxAnchor.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxEmpty.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxGroup.vue +27 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxInput.vue +42 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItem.vue +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxItemIndicator.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxList.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxSeparator.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxTrigger.vue +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/ComboboxViewport.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/combobox/index.ts +13 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/Dialog.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogClose.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogContent.vue +53 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogDescription.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogFooter.vue +27 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogHeader.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogOverlay.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogScrollContent.vue +59 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTitle.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/DialogTrigger.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dialog/index.ts +10 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenu.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +39 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuGroup.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuItem.vue +31 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioGroup.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuShortcut.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSub.vue +18 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubContent.vue +27 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/DropdownMenuTrigger.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/dropdown-menu/index.ts +16 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/Empty.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyContent.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyDescription.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyHeader.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyMedia.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/EmptyTitle.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/empty/index.ts +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/Field.vue +25 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldContent.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldDescription.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldError.vue +53 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldGroup.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLabel.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldLegend.vue +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSeparator.vue +29 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldSet.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/FieldTitle.vue +20 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/field/index.ts +39 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/Input.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroup.vue +35 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupAddon.vue +36 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupButton.vue +29 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupInput.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupText.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/InputGroupTextarea.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/input-group/index.ts +51 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/Label.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/label/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/Pagination.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationContent.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationEllipsis.vue +25 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationFirst.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationItem.vue +34 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationLast.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationNext.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/PaginationPrevious.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/pagination/index.ts +8 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/Popover.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverAnchor.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverContent.vue +45 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/PopoverTrigger.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/popover/index.ts +4 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendar.vue +62 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCell.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarCellTrigger.vue +41 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGrid.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridBody.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridHead.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarGridRow.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeadCell.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeader.vue +23 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarHeading.vue +30 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarNextButton.vue +32 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/RangeCalendarPrevButton.vue +32 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/range-calendar/index.ts +12 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/Select.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectContent.vue +51 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectGroup.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItem.vue +44 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectItemText.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectLabel.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollDownButton.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectScrollUpButton.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectSeparator.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectTrigger.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/SelectValue.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/select/index.ts +11 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/Separator.vue +29 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/separator/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/Sheet.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetClose.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetContent.vue +62 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetDescription.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetFooter.vue +16 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetHeader.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetOverlay.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTitle.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/SheetTrigger.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/sheet/index.ts +8 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/Skeleton.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/skeleton/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/Spinner.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/spinner/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/Table.vue +16 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableBody.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCaption.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableCell.vue +22 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableEmpty.vue +34 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableFooter.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHead.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableHeader.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/TableRow.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/table/index.ts +9 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/Tabs.vue +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsContent.vue +21 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsList.vue +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/TabsTrigger.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tabs/index.ts +4 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/Textarea.vue +28 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/textarea/index.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/Tooltip.vue +19 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipContent.vue +34 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipProvider.vue +14 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/TooltipTrigger.vue +15 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/ui/tooltip/index.ts +4 -0
- package/template/.pi/skills/yss-prototype-stage/assets/shadcn-vue-authoring/utils.ts +7 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/Analysis.vue +16 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/Approval.vue +14 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/CombinedQuery.vue +17 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/ComponentStates.vue +41 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/Conflict.vue +33 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/DateRange.vue +29 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/Frame.vue +7 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/ListDetail.vue +47 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/MultiStep.vue +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/Notice.vue +5 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/OwnerValidity.vue +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/SearchSelect.vue +32 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/Workspace.vue +174 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/analysis-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/analysis.scenarios.json +276 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/approval-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/approval.scenarios.json +207 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.css +14 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/business-controls.js +24 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/combined-query.scenarios.json +298 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/conflict-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/conflict.scenarios.json +229 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-glass.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/list-detail.scenarios.json +185 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/mount.ts +4 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-glass.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/multi-step.scenarios.json +188 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/owner-validity.scenarios.json +298 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/patterns.css +26 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/refinement.css +129 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workbench.ts +1 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-definition.ts +40 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-glass.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-model.js +75 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-page.ts +18 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.config.json +6 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace-standard.ts +3 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.css +101 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.scenarios.json +2015 -0
- package/template/.pi/skills/yss-prototype-stage/assets/vue-business-patterns/workspace.ts +26 -0
- package/template/.pi/skills/yss-prototype-stage/references/business-patterns.md +42 -0
- package/template/.pi/skills/yss-prototype-stage/references/comparison-tool.md +48 -0
- package/template/.pi/skills/yss-prototype-stage/references/component-recipes.md +41 -0
- package/template/.pi/skills/yss-prototype-stage/references/concept-comparison.md +26 -0
- package/template/.pi/skills/yss-prototype-stage/references/enterprise-workspace.md +53 -0
- package/template/.pi/skills/yss-prototype-stage/references/low-fidelity-exercise.md +32 -0
- package/template/.pi/skills/yss-prototype-stage/references/product-design-adapter.md +11 -5
- package/template/.pi/skills/yss-prototype-stage/references/prototype-profile-routing.md +10 -6
- package/template/.pi/skills/yss-prototype-stage/references/prototype-verification.md +25 -0
- package/template/.pi/skills/yss-prototype-stage/references/resource-lifecycle.md +20 -0
- package/template/.pi/skills/yss-prototype-stage/references/search-date-patterns.md +28 -0
- package/template/.pi/skills/yss-prototype-stage/references/shadcn-integration.md +5 -0
- package/template/.pi/skills/yss-prototype-stage/references/shadcn-vue-integration.md +46 -0
- package/template/.pi/skills/yss-prototype-stage/references/usability-research.md +26 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/browser-session.mjs +57 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/build-shadcn-vue-prototype.mjs +137 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/compose-workspace-scenarios.mjs +22 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/export-business-patterns.mjs +7 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/export-low-fidelity-exercise.mjs +18 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/export-vue-patterns.mjs +21 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/offline-html.mjs +60 -23
- package/template/.pi/skills/yss-prototype-stage/scripts/prototype-comparison.mjs +208 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/prototype-contract.mjs +19 -14
- package/template/.pi/skills/yss-prototype-stage/scripts/scenario-contract.mjs +31 -0
- package/template/.pi/skills/yss-prototype-stage/scripts/verify-prototype-design.mjs +97 -0
- package/template/.pi/skills/yss-prototype-stage/tests/antd-reference.test.mjs +4 -24
- package/template/.pi/skills/yss-prototype-stage/tests/browser-harness.mjs +37 -0
- package/template/.pi/skills/yss-prototype-stage/tests/browser-visual.mjs +22 -0
- package/template/.pi/skills/yss-prototype-stage/tests/business-controls-browser.mjs +43 -0
- package/template/.pi/skills/yss-prototype-stage/tests/business-controls.test.mjs +20 -0
- package/template/.pi/skills/yss-prototype-stage/tests/compact-theme-browser.mjs +53 -0
- package/template/.pi/skills/yss-prototype-stage/tests/comparison-browser-smoke.mjs +77 -0
- package/template/.pi/skills/yss-prototype-stage/tests/comparison-fixture.mjs +16 -0
- package/template/.pi/skills/yss-prototype-stage/tests/comparison.test.mjs +46 -0
- package/template/.pi/skills/yss-prototype-stage/tests/components-browser.mjs +60 -0
- package/template/.pi/skills/yss-prototype-stage/tests/patterns-browser.mjs +84 -0
- package/template/.pi/skills/yss-prototype-stage/tests/reliability.test.mjs +34 -0
- package/template/.pi/skills/yss-prototype-stage/tests/retirement.test.mjs +8 -0
- package/template/.pi/skills/yss-prototype-stage/tests/run-scenarios.mjs +19 -2
- package/template/.pi/skills/yss-prototype-stage/tests/shadcn-vue.test.mjs +43 -0
- package/template/.pi/skills/yss-prototype-stage/tests/verification-entry.test.mjs +16 -0
- package/template/.pi/skills/yss-prototype-stage/tests/workbench-smoke.mjs +36 -21
- package/template/.pi/skills/yss-prototype-stage/tests/workspace-browser.mjs +50 -0
- package/template/.pi/skills/yss-prototype-stage/tests/workspace.test.mjs +70 -0
- package/template/.pi/skills/yss-prototype-stage/tests/zoom-browser.mjs +26 -0
- package/template/.pi/skills/yss-stage-decision/SKILL.md +2 -0
- package/template/.pi/skills/yss-technical-design/SKILL.md +4 -0
- package/template/.pi/skills/yss-ui-business-page-generation/SKILL.md +4 -61
- package/template/.pi/skills/yss-ui-business-page-generation/references/page-composition-example.md +50 -0
- package/template/.pi/skills/yss-ui-business-page-generation/references/page-layout-example.md +19 -0
- package/template/.pi/skills/ytable-usage/SKILL.md +3 -191
- package/template/.pi/skills/ytable-usage/references/selection-and-batch.md +30 -0
- package/template/.pi/skills/ytable-usage/references/table-pagination-examples.md +170 -0
- package/template/.template-spec/agents/digital-human-roles.yaml +2 -2
- package/template/.template-spec/agents/issue-tracker.md +10 -1
- package/template/.template-spec/agents/yss-skill-registry.yaml +41 -0
- package/template/.template-spec/design/README.md +7 -2
- package/template/.template-spec/design/design.md +30 -35
- package/template/.template-spec/design/templates/examples/model-publishing-interaction.example.md +2 -2
- package/template/.template-spec/design/templates/interaction-spec-template.md +24 -0
- package/template/.template-spec/design/templates/prototype-evidence-template.yaml +18 -5
- package/template/.template-spec/design/templates/prototype-review-checklist.md +8 -0
- package/template/.template-spec/design/tokens/.design-md-projection.json +2 -2
- package/template/.template-spec/design/tokens/variables.css +162 -0
- package/template/.template-spec/plan/templates/plan-template.md +25 -1
- package/template/.template-spec/process/business-tickets.md +48 -0
- package/template/.template-spec/process/checkpoint-boundary.yaml +73 -0
- package/template/.template-spec/process/contract-reading.md +35 -0
- package/template/.template-spec/process/document-writing.md +2 -0
- package/template/.template-spec/process/feature-assets.md +38 -0
- package/template/.template-spec/process/lifecycle-artifact-map.md +1 -0
- package/template/.template-spec/process/lifecycle-registry-baseline.json +9 -5
- package/template/.template-spec/process/lifecycle-registry.yaml +15 -5
- package/template/.template-spec/process/plan-spec-quality.md +69 -0
- package/template/.template-spec/process/project-ci.md +21 -0
- package/template/.template-spec/process/reading-policy.yaml +4 -0
- package/template/.template-spec/process/schemas/business-tickets-v1.schema.json +449 -0
- package/template/.template-spec/process/schemas/domain-strategy-reading.schema.json +216 -0
- package/template/.template-spec/process/schemas/lifecycle-checkpoint.schema.json +203 -11
- package/template/.template-spec/process/schemas/reading-manifest.schema.json +14 -0
- package/template/.template-spec/process/schemas/reading-policy.schema.json +10 -0
- package/template/.template-spec/process/schemas/stage-decision-package-reading.schema.json +148 -0
- package/template/.template-spec/process/stage-tracking.md +8 -0
- package/template/.template-spec/process/strategic-handoff-package.md +3 -1
- package/template/.template-spec/process/templates/stage-checkpoint-template.md +6 -1
- package/template/.template-spec/templates/business-ticket-review-template.yaml +11 -0
- package/template/.template-spec/templates/business-ticket-set-template.yaml +16 -0
- package/template/.template-spec/templates/business-ticket-template.md +38 -0
- package/template/.template-spec/templates/examples/lifecycle-writing-examples.md +16 -0
- package/template/.template-spec/templates/examples/plan-spec/complex-defective.md +38 -0
- package/template/.template-spec/templates/examples/plan-spec/complex-source.md +12 -0
- package/template/.template-spec/templates/examples/plan-spec/complex-valid.md +38 -0
- package/template/.template-spec/templates/examples/plan-spec/expectations.json +46 -0
- package/template/.template-spec/templates/examples/plan-spec/high-risk-before.md +32 -0
- package/template/.template-spec/templates/examples/plan-spec/high-risk-defective.md +39 -0
- package/template/.template-spec/templates/examples/plan-spec/high-risk-source.md +11 -0
- package/template/.template-spec/templates/examples/plan-spec/high-risk-valid.md +39 -0
- package/template/.template-spec/templates/examples/plan-spec/ordinary-defective.md +36 -0
- package/template/.template-spec/templates/examples/plan-spec/ordinary-plan.md +27 -0
- package/template/.template-spec/templates/examples/plan-spec/ordinary-source.md +14 -0
- package/template/.template-spec/templates/examples/plan-spec/ordinary-valid.md +36 -0
- package/template/.template-spec/templates/local-parent-ticket-template.md +23 -15
- package/template/.template-spec/templates/spec-delta-template.md +7 -5
- package/template/.template-spec/templates/spec-template.md +31 -15
- package/template/.template-spec/templates/vertical-slice-ticket-template.md +4 -0
- package/template/AGENTS.md +1 -1
- package/template/CONTEXT.md +1 -0
- package/template/DESIGN.md +23 -4
- package/template/scripts/contract +14 -2
- package/template/scripts/feature-assets +23 -0
- package/template/scripts/inspect-plan-spec +32 -0
- package/template/scripts/inspect-skill-discovery +24 -0
- package/template/scripts/lib/business-ticket-lifecycle.mjs +34 -0
- package/template/scripts/lib/business-tickets.mjs +273 -0
- package/template/scripts/lib/checkpoint-boundary.mjs +40 -0
- package/template/scripts/lib/contract-views.mjs +21 -8
- package/template/scripts/lib/feature-assets.mjs +274 -0
- package/template/scripts/lib/governance-io.mjs +40 -0
- package/template/scripts/lib/lifecycle-status.mjs +17 -1
- package/template/scripts/lib/lifecycle-transition.mjs +12 -3
- package/template/scripts/lib/plan-spec-markdown.mjs +97 -0
- package/template/scripts/lib/plan-spec-quality.mjs +289 -0
- package/template/scripts/lib/project-ci-install.mjs +98 -0
- package/template/scripts/lib/project-governance.mjs +189 -0
- package/template/scripts/lib/reading-view-adapters.mjs +62 -0
- package/template/scripts/lib/reading-view-bundle.mjs +201 -0
- package/template/scripts/lib/reading-view-diff.mjs +29 -0
- package/template/scripts/lib/reading-view-markdown.mjs +39 -0
- package/template/scripts/lib/reading-view-model.mjs +13 -0
- package/template/scripts/lib/reading-view-policy.mjs +16 -0
- package/template/scripts/lib/skill-discovery.mjs +150 -0
- package/template/scripts/lib/skill-registry.mjs +41 -1
- package/template/scripts/lib/skill-supply-chain.mjs +1 -1
- package/template/scripts/lib/slice-contract-preparation.mjs +8 -2
- package/template/scripts/lib/slice-contract.mjs +15 -1
- package/template/scripts/lib/stage-tracking-migration.mjs +9 -1
- package/template/scripts/lib/stage-tracking.mjs +10 -5
- package/template/scripts/lib/strategic-handoff-consumption.mjs +14 -2
- package/template/scripts/lib/strategic-handoff-io.mjs +6 -2
- package/template/scripts/lib/strategic-handoff.mjs +26 -5
- package/template/scripts/lib/task-package.mjs +14 -3
- package/template/scripts/lib/testing/user-decision-fixture.mjs +33 -0
- package/template/scripts/lib/user-decision-reuse.mjs +1 -1
- package/template/scripts/lifecycle-status +12 -2
- package/template/scripts/project-ci +20 -0
- package/template/scripts/project-ci-transition +13 -0
- package/template/scripts/query-lifecycle-context +4 -0
- package/template/scripts/stage-tracking +1 -0
- package/template/scripts/vendor/NOTICES.md +237 -0
- package/template/scripts/vendor/manifest.json +1216 -65
- package/template/scripts/vendor/markdown.mjs +11783 -0
- package/template/scripts/verify-approval-record +4 -1
- package/template/scripts/verify-business-tickets +11 -0
- package/template/scripts/verify-context-contract +4 -1
- package/template/scripts/verify-digital-human-task-package +4 -1
- package/template/scripts/verify-lifecycle-checkpoint +17 -2
- package/template/scripts/verify-prototype-design +3 -0
- package/template/skills-lock.json +34 -34
- package/template.manifest.json +2 -1
- package/template.snapshot.json +5 -5
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/package.json +0 -16
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +0 -1678
- package/template/.agents/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +0 -23
- package/template/.agents/skills/yss-prototype-stage/references/antd-component-catalog.json +0 -736
- package/template/.agents/skills/yss-prototype-stage/references/antd-integration.md +0 -61
- package/template/.agents/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +0 -71
- package/template/.agents/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +0 -26
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/package.json +0 -16
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +0 -1678
- package/template/.codex/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +0 -23
- package/template/.codex/skills/yss-prototype-stage/references/antd-component-catalog.json +0 -736
- package/template/.codex/skills/yss-prototype-stage/references/antd-integration.md +0 -61
- package/template/.codex/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +0 -71
- package/template/.codex/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +0 -26
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/package.json +0 -16
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +0 -1678
- package/template/.cursor/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +0 -23
- package/template/.cursor/skills/yss-prototype-stage/references/antd-component-catalog.json +0 -736
- package/template/.cursor/skills/yss-prototype-stage/references/antd-integration.md +0 -61
- package/template/.cursor/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +0 -71
- package/template/.cursor/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +0 -26
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/package.json +0 -16
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/pnpm-lock.yaml +0 -1678
- package/template/.pi/skills/yss-prototype-stage/assets/antd-authoring/workbench.jsx +0 -23
- package/template/.pi/skills/yss-prototype-stage/references/antd-component-catalog.json +0 -736
- package/template/.pi/skills/yss-prototype-stage/references/antd-integration.md +0 -61
- package/template/.pi/skills/yss-prototype-stage/scripts/build-antd-prototype.mjs +0 -71
- package/template/.pi/skills/yss-prototype-stage/scripts/collect-antd-reference.mjs +0 -26
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import { mkdtemp, mkdir, writeFile, readFile, cp, symlink, rm } from 'node:fs/promises';
|
|
4
|
+
import os from 'node:os';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
import { sealComparison, validateComparison } from '../scripts/prototype-comparison.mjs';
|
|
7
|
+
|
|
8
|
+
import { comparisonFixture } from './comparison-fixture.mjs';
|
|
9
|
+
|
|
10
|
+
test('portable review package binds sources, refuses overwrite and detects resource/source drift',async()=>{
|
|
11
|
+
const fixture=await comparisonFixture();const output=await fixture.prepare();
|
|
12
|
+
assert.deepEqual(await validateComparison(output.root,fixture.root),{errors:[]});
|
|
13
|
+
await assert.rejects(fixture.prepare(),/拒绝覆盖/);
|
|
14
|
+
const html=path.join(output.root,'variants/a/index.html');await writeFile(html,(await readFile(html,'utf8'))+'\n<!-- review change -->');
|
|
15
|
+
assert.match((await validateComparison(output.root)).errors.join(),/摘要/);
|
|
16
|
+
await sealComparison(output.root);assert.deepEqual(await validateComparison(output.root),{errors:[]});
|
|
17
|
+
await writeFile(path.join(fixture.root,'interaction.md'),'changed source');
|
|
18
|
+
assert.match((await validateComparison(output.root,fixture.root)).errors.join(),/漂移/);
|
|
19
|
+
assert.deepEqual(await validateComparison(output.root),{errors:[]});
|
|
20
|
+
const portable=await mkdtemp(path.join(os.tmpdir(),'yss-comparison-portable-'));await cp(output.root,path.join(portable,'package'),{recursive:true});
|
|
21
|
+
assert.deepEqual(await validateComparison(path.join(portable,'package')),{errors:[]});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test('invalid cases, differing data, missing entries, remote resources and escaping paths fail before output',async()=>{
|
|
25
|
+
const f=await comparisonFixture();
|
|
26
|
+
for (const mutate of [i=>i.cases[0].scenario='unknown',i=>i.variants[1].cases.pop(),i=>i.variants[1].entry='missing.html',i=>i.variants[1].root='../escape',i=>i.variants[1].entry='%2e%2e/index.html',i=>i.approved=true]) {
|
|
27
|
+
const input=structuredClone(f.input);mutate(input);await writeFile(path.join(f.root,'input.json'),JSON.stringify(input));await assert.rejects(f.prepare());
|
|
28
|
+
}
|
|
29
|
+
await writeFile(path.join(f.root,'input.json'),JSON.stringify(f.input));
|
|
30
|
+
const source=path.join(f.root,f.input.variants[1].root);const scenarios=await readFile(path.join(source,'scenarios.json'));
|
|
31
|
+
await writeFile(path.join(source,'scenarios.json'),'different data');await assert.rejects(f.prepare(),/共同来源/);await writeFile(path.join(source,'scenarios.json'),scenarios);
|
|
32
|
+
const html=await readFile(path.join(source,'index.html'),'utf8');
|
|
33
|
+
for (const extra of ['<img src="https://example.com/a.png">','<img src="../outside.png">','<script>fetch("/api")</script>']) {
|
|
34
|
+
await writeFile(path.join(source,'index.html'),html+extra);await assert.rejects(f.prepare(),/非离线/);
|
|
35
|
+
}
|
|
36
|
+
await writeFile(path.join(source,'index.html'),html);
|
|
37
|
+
await symlink(path.join(f.root,'interaction.md'),path.join(source,'linked.md'));await assert.rejects(f.prepare(),/符号链接/);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
test('manifest, scenario and missing-file mutations cannot masquerade as sealed comparison',async()=>{
|
|
41
|
+
const f=await comparisonFixture();const output=await f.prepare();
|
|
42
|
+
const manifestPath=path.join(output.root,'comparison-manifest.json');const original=await readFile(manifestPath,'utf8');const m=JSON.parse(original);
|
|
43
|
+
m.variants[0].entry='variants/b/index.html';await writeFile(manifestPath,JSON.stringify(m));assert.match((await validateComparison(output.root)).errors.join(),/越界/);
|
|
44
|
+
await writeFile(manifestPath,original);await writeFile(path.join(output.root,'variants/b/scenarios.json'),'drift');await assert.rejects(sealComparison(output.root),/场景数据不一致/);
|
|
45
|
+
await cp(path.join(output.root,'sources/scenarios.json'),path.join(output.root,'variants/b/scenarios.json'));await rm(path.join(output.root,'variants/b/index.html'));assert.match((await validateComparison(output.root)).errors.join(),/入口缺失/);
|
|
46
|
+
});
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Real browser checks for the maintenance catalog and enhanced patterns; no user approval.
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {readFile,writeFile,mkdtemp,cp,mkdir} from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';import os from 'node:os';import {pathToFileURL} from 'node:url';
|
|
5
|
+
import {parseDocument} from '../../../../scripts/vendor/yaml.mjs';
|
|
6
|
+
import {buildShadcnVuePrototype} from '../scripts/build-shadcn-vue-prototype.mjs';
|
|
7
|
+
const {chromium,webkit}=await import(process.env.YSS_PLAYWRIGHT_MODULE||'playwright');
|
|
8
|
+
const root=new URL('../../../../',import.meta.url).pathname,patterns=path.resolve(process.argv[2]),out=await mkdtemp(path.join(os.tmpdir(),'yss-components-check-'));
|
|
9
|
+
const md=await readFile(path.join(root,'DESIGN.md'),'utf8'),spec=parseDocument(md.slice(4,md.indexOf('\n---',4))).toJS();
|
|
10
|
+
const report={result:'running',cases:[],output:out},errors=[];
|
|
11
|
+
const go=(page,mode,scene='primary')=>page.goto(pathToFileURL(path.join(patterns,mode,'index.html')).href+'#scenario='+scene);
|
|
12
|
+
import {visual} from './browser-visual.mjs';
|
|
13
|
+
|
|
14
|
+
try{
|
|
15
|
+
for(const [engine,type] of [['chromium',chromium],['webkit',webkit]]){
|
|
16
|
+
const browser=await type.launch();try{
|
|
17
|
+
const context=await browser.newContext({offline:engine==='chromium',reducedMotion:'reduce',locale:'zh-CN'});
|
|
18
|
+
if(engine==='webkit')await context.route(/^https?:/,r=>r.abort('internetdisconnected'));
|
|
19
|
+
const page=await context.newPage();page.on('pageerror',e=>errors.push(e.message));page.on('console',m=>{if(['error','warning'].includes(m.type()))errors.push(m.text());});page.on('requestfailed',r=>errors.push(r.url()));
|
|
20
|
+
for(const width of [1440,390]){
|
|
21
|
+
await page.setViewportSize({width,height:width===390?844:900});await go(page,'component-states');await page.locator('#catalog-input').waitFor();await visual(page);
|
|
22
|
+
const expected=parseFloat(spec.components[width===390?'button-primary':'button-compact'].height);
|
|
23
|
+
const group=page.locator('[data-slot="input-group"]'),input=page.locator('#catalog-input');
|
|
24
|
+
assert.equal(await group.evaluate(e=>e.getBoundingClientRect().height),expected);
|
|
25
|
+
assert.equal(await input.evaluate(e=>getComputedStyle(e).borderTopWidth),'0px');assert.equal(await input.evaluate(e=>getComputedStyle(e).fontSize),spec.typography.body.fontSize);
|
|
26
|
+
await page.getByRole('button',{name:'验证字段',exact:true}).click();assert.equal(await page.evaluate(()=>document.activeElement.id),'catalog-input');assert.equal(await input.getAttribute('aria-describedby'),'catalog-help catalog-error');await page.locator('#catalog-error').waitFor();
|
|
27
|
+
await input.fill('临时资料');await page.getByRole('button',{name:'清除资料标记',exact:true}).click();assert.equal(await input.inputValue(),'');await input.fill('保留输入');
|
|
28
|
+
await page.locator('#catalog-select').focus();await page.keyboard.press('Space');await page.getByRole('listbox').waitFor();await page.waitForFunction(()=>document.activeElement?.getAttribute('role')==='option');await page.keyboard.press('End');await page.waitForFunction(()=>document.activeElement?.textContent==='选中');await page.keyboard.press('Enter');await page.getByRole('combobox').filter({hasText:'选中'}).waitFor();
|
|
29
|
+
await page.locator('#catalog-check').focus();await page.keyboard.press('Space');assert.equal(await page.locator('#catalog-check').getAttribute('data-state'),'checked');
|
|
30
|
+
const check=await page.locator('#catalog-check').evaluate(el=>{const r=el.getBoundingClientRect(),p=getComputedStyle(el,'::after');return {w:r.width-parseFloat(p.left)-parseFloat(p.right),h:r.height-parseFloat(p.top)-parseFloat(p.bottom),x:r.x-parseFloat(p.left),y:r.y-parseFloat(p.top)};});assert(check.w>=24&&check.h>=24);
|
|
31
|
+
const menu=page.getByRole('button',{name:'更多操作',exact:true});await menu.focus();await page.keyboard.press('Enter');await page.getByRole('menu').waitFor();await visual(page);await page.keyboard.press('Escape');await page.waitForFunction(()=>document.activeElement?.textContent==='更多操作');await menu.click();assert.equal(await page.getByRole('menuitem',{name:'导出(未模拟)'}).getAttribute('data-disabled'),'');await page.getByRole('menuitem',{name:'执行本地演示'}).click();await page.getByText('菜单演示完成',{exact:true}).waitFor();
|
|
32
|
+
for(const [trigger,title,close] of [['打开详情侧栏','演示详情','关闭详情'],['打开对话框','演示对话框','关闭对话框']]){
|
|
33
|
+
await page.getByRole('button',{name:trigger,exact:true}).click();await page.getByRole('dialog',{name:title,exact:true}).waitFor();await visual(page);await page.keyboard.press('Escape');await page.waitForFunction(t=>document.activeElement?.textContent===t,trigger);
|
|
34
|
+
await page.getByRole('button',{name:trigger,exact:true}).click();await page.getByRole('button',{name:close,exact:true}).click();await page.waitForFunction(t=>document.activeElement?.textContent===t,trigger);
|
|
35
|
+
}
|
|
36
|
+
for(let tab=0;tab<30;tab++){await page.keyboard.press('Tab');if(await page.getByRole('button',{name:'帮助说明',exact:true}).evaluate(el=>el===document.activeElement))break;}assert(await page.getByRole('button',{name:'帮助说明',exact:true}).evaluate(el=>el===document.activeElement));await page.locator('[data-slot=tooltip-content]').waitFor();const description=await page.getByRole('button',{name:'帮助说明',exact:true}).getAttribute('aria-describedby');assert(description);assert.equal(await page.locator(`[id="${description}"]`).textContent(),'提示补充说明,关键操作无需依赖提示。');await page.keyboard.press('Escape');await page.locator('[data-slot=tooltip-content]').waitFor({state:'hidden'});
|
|
37
|
+
await page.getByRole('button',{name:'确认动作演示',exact:true}).click();await page.getByRole('alertdialog').waitFor();await page.getByRole('button',{name:'取消',exact:true}).click();assert.equal(await input.inputValue(),'保留输入');
|
|
38
|
+
await menu.click();await page.evaluate(()=>location.hash='scenario=no-permission');await page.waitForFunction(()=>!document.querySelector('[role="menu"]'));assert.equal(await input.inputValue(),'');assert.equal(await page.locator('#catalog-check').getAttribute('data-state'),'unchecked');
|
|
39
|
+
await page.getByRole('button',{name:'打开详情侧栏',exact:true}).click();await page.evaluate(()=>location.hash='scenario=primary');await page.waitForFunction(()=>!document.querySelector('[role="dialog"]'));
|
|
40
|
+
await page.locator('summary').click();await page.locator('#reset').click();await page.locator('#reset').click();await visual(page);
|
|
41
|
+
await page.screenshot({path:path.join(out,`${engine}-catalog-${width}.png`),fullPage:true});
|
|
42
|
+
await go(page,'list-detail');await page.getByRole('checkbox',{name:'选择 M-001',exact:true}).click();await page.getByRole('button',{name:'下一页',exact:true}).click();await page.getByRole('checkbox',{name:'选择 M-003',exact:true}).click();await page.getByText('已选择 2 项',{exact:true}).waitFor();await page.locator('#keyword').fill('不存在');assert(await page.getByRole('button',{name:'下一页',exact:true}).isDisabled());assert(await page.getByRole('button',{name:'上一页',exact:true}).isDisabled());await page.getByText('第 1 页 / 共 1 页',{exact:true}).waitFor();await page.getByRole('button',{name:'重置筛选',exact:true}).click();assert.equal(await page.getByRole('checkbox',{name:'选择 M-001',exact:true}).getAttribute('data-state'),'checked');
|
|
43
|
+
await page.getByRole('button',{name:'更多 M-001',exact:true}).focus();await page.keyboard.press('Enter');await page.getByRole('menu').waitFor();await page.getByRole('menuitem',{name:'查看详情'}).focus();await page.keyboard.press('Enter');if(width>=1200){await page.locator('.inline-detail').waitFor();await page.getByRole('button',{name:'关闭详情',exact:true}).click();}else{await page.getByRole('dialog',{name:'资料详情'}).waitFor();await page.keyboard.press('Escape');}await page.waitForFunction(()=>document.activeElement?.id==='more-M-001');await visual(page);
|
|
44
|
+
report.cases.push({engine,version:browser.version(),width,status:'passed',checks:['catalog-27-components','field-association-focus','input-group-computed-style','keyboard-select-menu-tooltip','overlay-escape-close-focus','pagination-selection-empty','hash-clears-overlays-and-input','repeated-reset','target-bounds','contrast','reduced-motion','offline']});
|
|
45
|
+
}
|
|
46
|
+
await context.close();}finally{await browser.close();}
|
|
47
|
+
}
|
|
48
|
+
// Comfortable is built through the supported author configuration, not patched CSS.
|
|
49
|
+
const fixture=path.join(out,'comfortable-fixture');await mkdir(path.join(fixture,'.template-spec/design/tokens'),{recursive:true});
|
|
50
|
+
for(const ref of ['DESIGN.md','.template-spec/design/tokens/variables.css'])await cp(path.join(root,ref),path.join(fixture,ref));
|
|
51
|
+
const comfortable=path.join(fixture,'docs/.scratch/catalog/design/prototypes');
|
|
52
|
+
await buildShadcnVuePrototype({projectRoot:fixture,root:comfortable,feature:'catalog',toolchain:process.env.YSS_VUE_TOOLCHAIN,config:path.join(root,'.agents/skills/yss-prototype-stage/assets/vue-business-patterns/component-states-standard.config.json'),density:'comfortable'});
|
|
53
|
+
const browser=await chromium.launch();try{const context=await browser.newContext({offline:true,reducedMotion:'reduce'}),page=await context.newPage();
|
|
54
|
+
for(const width of [1440,390]){await page.setViewportSize({width,height:width===390?844:900});await page.goto(pathToFileURL(path.join(comfortable,'index.html')).href);await page.locator('#catalog-input').waitFor();
|
|
55
|
+
assert.equal(await page.locator('[data-slot="input-group"]').evaluate(e=>e.getBoundingClientRect().height),parseFloat(spec.components['button-primary'].height));
|
|
56
|
+
assert.equal(await page.locator('[data-slot="card"]').first().evaluate(e=>getComputedStyle(e).paddingTop),width===390?spec.spacing.sm:spec.spacing.card);
|
|
57
|
+
assert.equal(await page.locator('body').evaluate(e=>getComputedStyle(e).fontSize),spec.typography.body.fontSize);await visual(page);report.cases.push({engine:'chromium',width,density:'comfortable',status:'passed',checks:['author-config-build','computed-control-card-body','contrast','target-bounds','reduced-motion']});}
|
|
58
|
+
}finally{await browser.close();}
|
|
59
|
+
assert.deepEqual(errors,[]);report.result='passed';
|
|
60
|
+
}catch(error){report.result='failed';report.failure=error.stack;throw error;}finally{await writeFile(path.join(out,'result.json'),JSON.stringify(report,null,2));console.log(path.join(out,'result.json'));}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Deterministic maintenance exercise, not a product approval or Agent effectiveness result.
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {mkdtemp,writeFile,readFile} from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';import os from 'node:os';import {pathToFileURL} from 'node:url';
|
|
5
|
+
import {exportBusinessPatterns} from '../scripts/export-business-patterns.mjs';
|
|
6
|
+
import {exportLowFidelityExercise} from '../scripts/export-low-fidelity-exercise.mjs';
|
|
7
|
+
const {chromium,webkit}=await import(process.env.YSS_PLAYWRIGHT_MODULE||'playwright');
|
|
8
|
+
const temp=await mkdtemp(path.join(os.tmpdir(),'yss-patterns-browser-'));
|
|
9
|
+
const source=new URL('../../../../',import.meta.url).pathname;
|
|
10
|
+
const exported=process.argv[2]?{root:path.resolve(process.argv[2]),patterns:['list-detail','multi-step','approval','conflict','analysis']}:await exportBusinessPatterns({projectRoot:source,output:path.join(temp,'patterns'),toolchain:process.env.YSS_VUE_TOOLCHAIN});
|
|
11
|
+
const lowfi=await exportLowFidelityExercise({projectRoot:source,output:path.join(temp,'low-fidelity')});
|
|
12
|
+
const report={scope:'maintenance fixtures',result:'passed',engines:[],cases:[],artifacts:temp};
|
|
13
|
+
async function checkPage(page){
|
|
14
|
+
assert.equal(await page.evaluate(()=>document.documentElement.scrollWidth>innerWidth),false,'whole-page overflow');
|
|
15
|
+
const failures=await page.evaluate(()=>{
|
|
16
|
+
const canvas=document.createElement('canvas');canvas.width=canvas.height=1;const ctx=canvas.getContext('2d',{willReadFrequently:true});
|
|
17
|
+
const rgba=c=>{ctx.clearRect(0,0,1,1);ctx.fillStyle=c;ctx.fillRect(0,0,1,1);const a=[...ctx.getImageData(0,0,1,1).data];return [...a.slice(0,3),a[3]/255];},blend=(front,back)=>{const a=front[3]??1;return front.slice(0,3).map((v,i)=>v*a+back[i]*(1-a));};
|
|
18
|
+
const luminance=c=>c.map(v=>{v/=255;return v<=.04045?v/12.92:((v+.055)/1.055)**2.4;}).reduce((s,v,i)=>s+v*[.2126,.7152,.0722][i],0);
|
|
19
|
+
const failures=[];
|
|
20
|
+
for(const el of document.querySelectorAll('h1,h2,p,label,button,td,th,[role="tab"]')){
|
|
21
|
+
const rect=el.getBoundingClientRect();if(!rect.width||!rect.height||!el.textContent.trim()||el.matches(':disabled,[aria-disabled="true"]')||el.closest('[hidden],[inert]'))continue;
|
|
22
|
+
const style=getComputedStyle(el);if(style.visibility==='hidden')continue;
|
|
23
|
+
const chain=[];for(let p=el;p;p=p.parentElement)chain.unshift(p);
|
|
24
|
+
let bg=[255,255,255];for(const p of chain)bg=blend(rgba(getComputedStyle(p).backgroundColor),bg);
|
|
25
|
+
const fg=blend(rgba(style.color),bg),l=[luminance(fg),luminance(bg)].sort((a,b)=>b-a),ratio=(l[0]+.05)/(l[1]+.05),large=parseFloat(style.fontSize)>=24||(parseFloat(style.fontSize)>=18.666&&Number(style.fontWeight)>=700);
|
|
26
|
+
if(ratio<(large?3:4.5))failures.push({text:el.textContent.slice(0,50),ratio,foreground:style.color,background:bg});
|
|
27
|
+
}return failures;
|
|
28
|
+
});
|
|
29
|
+
assert.deepEqual(failures,[],'computed text contrast');
|
|
30
|
+
const motion=await page.evaluate(()=>[...document.querySelectorAll('*')].filter(el=>{const s=getComputedStyle(el);return s.animationName!=='none'||s.transitionDuration.split(',').some(x=>parseFloat(x)>0);}).map(e=>e.tagName));assert.deepEqual(motion,[],'reduced motion applied');
|
|
31
|
+
}
|
|
32
|
+
for(const [engine,type] of [['chromium',chromium],['webkit',webkit]]){
|
|
33
|
+
const browser=await type.launch();report.engines.push({engine,version:browser.version()});
|
|
34
|
+
try{const context=await browser.newContext({offline:engine==='chromium',reducedMotion:'reduce',locale:'zh-CN'}),page=await context.newPage(),errors=[];
|
|
35
|
+
if(engine==='webkit')await context.route(/^https?:/,route=>route.abort('internetdisconnected'));
|
|
36
|
+
report.engines.at(-1).network=engine==='chromium'?'offline=true':'HTTP(S) blocked by routing; WebKit offline flag rejects file navigation';
|
|
37
|
+
page.on('pageerror',e=>errors.push(e.message));page.on('console',m=>{if(['error','warning'].includes(m.type()))errors.push(m.text());});page.on('requestfailed',r=>errors.push(r.url()));page.on('request',r=>{if(/^https?:/.test(r.url()))errors.push(r.url());});
|
|
38
|
+
for(const width of [1440,390]){
|
|
39
|
+
await page.setViewportSize({width,height:width===390?844:900});
|
|
40
|
+
for(const mode of exported.patterns){
|
|
41
|
+
const url=pathToFileURL(path.join(exported.root,mode,'index.html')).href;
|
|
42
|
+
await page.goto(url+'#scenario=primary');await page.locator('h1').waitFor();await checkPage(page);
|
|
43
|
+
if(mode==='list-detail'){
|
|
44
|
+
await page.getByRole('button',{name:'下一页',exact:true}).click();await page.getByRole('button',{name:'查看 M-003',exact:true}).click();if(width>=1200){await page.locator('.inline-detail').waitFor();await page.getByRole('button',{name:'关闭详情',exact:true}).click();}else{await page.getByRole('dialog').waitFor();await page.keyboard.press('Escape');}await page.waitForFunction(()=>document.activeElement?.getAttribute('aria-label')==='查看 M-003');
|
|
45
|
+
await page.locator('#keyword').fill('M-001');await page.getByRole('checkbox',{name:'选择 M-001',exact:true}).focus();await page.keyboard.press('Space');await page.getByText('已选择 1 项',{exact:true}).waitFor();await page.locator('#keyword').fill('不存在');await page.getByText('暂无符合条件的资料',{exact:true}).waitFor();
|
|
46
|
+
}else if(mode==='multi-step'){
|
|
47
|
+
await page.goto(url+'#scenario=failure');await page.getByRole('button',{name:'下一步',exact:true}).click();assert.equal(await page.evaluate(()=>document.activeElement.id),'name');await page.locator('#name').fill('分步资料');await page.locator('#note').fill('保留的说明');await page.getByRole('button',{name:'下一步',exact:true}).click();await page.locator('#owner').fill('测试负责人');await page.getByRole('button',{name:'上一步',exact:true}).click();assert.equal(await page.locator('#note').inputValue(),'保留的说明');await page.getByRole('button',{name:'下一步',exact:true}).click();assert.equal(await page.locator('#owner').inputValue(),'测试负责人');await page.getByRole('button',{name:'确认提交',exact:true}).click();await page.getByRole('alert').waitFor();await page.getByRole('button',{name:'重试提交',exact:true}).click();await page.getByText('提交成功(本地模拟)。',{exact:true}).waitFor();
|
|
48
|
+
}else if(mode==='approval'){
|
|
49
|
+
await page.goto(url+'#scenario=failure');assert(await page.getByRole('button',{name:'通过 M-002',exact:true}).isDisabled());for(const id of ['M-001','M-003'])await page.getByRole('checkbox',{name:`选择 ${id}`,exact:true}).click();await page.getByRole('button',{name:'批量通过',exact:true}).click();await page.getByRole('alert').waitFor();assert.equal(await page.getByRole('button',{name:'通过 M-001',exact:true}).count(),0);await page.getByRole('button',{name:'批量通过',exact:true}).click();assert.equal(await page.getByRole('button',{name:'通过 M-003',exact:true}).count(),0);
|
|
50
|
+
}else if(mode==='conflict'){
|
|
51
|
+
await page.goto(url+'#scenario=conflict');await page.getByRole('button',{name:'编辑 M-001',exact:true}).click();await page.locator('#name').fill('保留草稿');await page.locator('#save').click();await page.locator('#reload').click();await page.getByRole('button',{name:'保留草稿',exact:true}).click();assert.equal(await page.locator('#name').inputValue(),'保留草稿');await page.locator('#reload').click();await page.getByRole('button',{name:'放弃并重新加载',exact:true}).click();assert.equal(await page.locator('#name').inputValue(),'服务端最新资料名称');assert.equal(await page.locator('#version').textContent(),'2');await page.locator('#save').click();await page.getByText('保存成功(本地模拟)。',{exact:true}).waitFor();
|
|
52
|
+
}else{
|
|
53
|
+
await page.locator('#keyword').fill('张明');assert.equal(await page.locator('.metric-value').first().textContent(),'8');await page.getByRole('button',{name:'定位 M-001',exact:true}).click();await page.getByRole('region',{name:'定位资料',exact:true}).waitFor();await page.getByRole('tab',{name:'概览',exact:true}).focus();await page.keyboard.press('ArrowRight');await page.getByRole('tabpanel').filter({hasText:'表格可横向滚动'}).waitFor();assert.equal(await page.locator('tbody tr').count(),8);if(width===390){await page.locator('.dense-region').focus();await page.keyboard.press('ArrowRight');await page.waitForFunction(()=>document.querySelector('.dense-region').scrollLeft>0);}
|
|
54
|
+
}
|
|
55
|
+
await checkPage(page);
|
|
56
|
+
const scenes=JSON.parse(await readFile(path.join(exported.root,mode,'scenarios.json'),'utf8')).scenarios;
|
|
57
|
+
for(const scene of scenes){
|
|
58
|
+
await page.goto(url+'#scenario='+scene.id);await page.locator('h1').waitFor();await checkPage(page);
|
|
59
|
+
if(scene.id==='no-permission'){
|
|
60
|
+
if(mode==='list-detail'){assert(await page.getByRole('checkbox').first().isDisabled());await page.getByRole('button',{name:'查看 M-001',exact:true}).click();if(width>=1200){await page.locator('.inline-detail').waitFor();await page.getByRole('button',{name:'关闭详情',exact:true}).click();}else{await page.getByRole('dialog').waitFor();await page.keyboard.press('Escape');}}
|
|
61
|
+
if(mode==='multi-step'){assert(await page.locator('#name').isDisabled());assert(await page.getByRole('button',{name:'下一步',exact:true}).isDisabled());}
|
|
62
|
+
if(mode==='approval'){assert(await page.getByRole('button',{name:'批量通过',exact:true}).isDisabled());assert(await page.getByRole('button',{name:'通过 M-001',exact:true}).isDisabled());}
|
|
63
|
+
if(mode==='conflict')assert(await page.getByRole('button',{name:'编辑 M-001',exact:true}).isDisabled());
|
|
64
|
+
}
|
|
65
|
+
if(scene.id==='empty')await page.getByText(/暂无符合条件|当前没有待处理/).waitFor();
|
|
66
|
+
if(scene.id==='loading')await page.getByText('正在加载(固定评审状态)',{exact:true}).waitFor();
|
|
67
|
+
const reset=page.locator('#reset');if(!await reset.isVisible())await page.locator('summary').click();await reset.click();await reset.click();await checkPage(page);
|
|
68
|
+
report.cases.push({engine,mode,width,scenario:scene.id,status:'passed',checks:['declared-state','repeated-reset','contrast','reduced-motion','layout']});
|
|
69
|
+
}
|
|
70
|
+
await page.goto(url+'#scenario=unknown');await page.getByRole('alert').filter({hasText:'未知或缺失'}).waitFor();
|
|
71
|
+
await page.goto(url+'#scenario=primary');await page.locator('h1').filter({hasText:'场景入口错误'}).waitFor({state:'hidden'});
|
|
72
|
+
await page.goto('about:blank');await page.goto(url);await page.locator('h1').waitFor();await page.screenshot({path:path.join(temp,`${engine}-${mode}-${width}.png`),animations:'disabled'});report.cases.push({engine,mode,width,status:'passed',checks:['state-results','keyboard','contrast','reduced-motion','layout']});
|
|
73
|
+
}
|
|
74
|
+
const url=pathToFileURL(lowfi.entry).href;
|
|
75
|
+
for(const variant of ['single','batch','queue']){
|
|
76
|
+
await page.goto(`${url}#variant=${variant}&case=retry`);await page.getByText('场景已初始化;实际业务行为仍须评审。',{exact:true}).waitFor();const frame=page.frameLocator('iframe');
|
|
77
|
+
if(variant==='batch')await frame.getByRole('button',{name:'选择全部',exact:true}).click();
|
|
78
|
+
const action=()=>frame.getByRole('button',{name:variant==='batch'?'通过所选':variant==='single'?'通过 M-001':'通过并继续',exact:true}).click();await action();await frame.getByText('处理失败,选择与资料已保留,请重试。',{exact:true}).waitFor();await action();if(variant==='batch')await frame.getByText('全部资料已处理。',{exact:true}).waitFor();else if(variant==='single'){for(const id of ['M-002','M-003'])await frame.getByRole('button',{name:`通过 ${id}`,exact:true}).click();}else{await action();await action();}await frame.getByText('全部资料已处理。',{exact:true}).waitFor();await page.locator('#reset').click();await page.getByText('场景已初始化;实际业务行为仍须评审。',{exact:true}).waitFor();report.cases.push({engine,mode:`lowfi-${variant}`,width,status:'passed'});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
assert.deepEqual(errors,[]);await context.close();
|
|
82
|
+
}finally{await browser.close();}
|
|
83
|
+
}
|
|
84
|
+
await writeFile(path.join(temp,'result.json'),JSON.stringify(report,null,2));console.log(path.join(temp,'result.json'));
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {spawnSync} from 'node:child_process';
|
|
2
|
+
import test from 'node:test';import assert from 'node:assert/strict';
|
|
3
|
+
import {readFile,writeFile,mkdtemp,mkdir,cp,readdir,symlink} from 'node:fs/promises';import path from 'node:path';import os from 'node:os';
|
|
4
|
+
import {parseScenarios,scenarioScript} from '../scripts/scenario-contract.mjs';
|
|
5
|
+
import {prepareFlowPrototype,validatePrototypeProject} from '../scripts/prototype-contract.mjs';
|
|
6
|
+
import {comparisonFixture} from './comparison-fixture.mjs';
|
|
7
|
+
import {validateComparison,sealComparison} from '../scripts/prototype-comparison.mjs';
|
|
8
|
+
async function project(){const root=await mkdtemp(path.join(os.tmpdir(),'prototype-reliability-'));await mkdir(path.join(root,'.template-spec/design/tokens'),{recursive:true});for(const ref of ['DESIGN.md','.template-spec/design/tokens/variables.css'])await cp(new URL(`../../../../${ref}`,import.meta.url),path.join(root,ref));return root;}
|
|
9
|
+
test('scenario data is parsed without execution; IDs and generated script bind exact JSON',async()=>{
|
|
10
|
+
const bytes=await readFile(new URL('../assets/native-workbench/scenarios.json',import.meta.url));const doc=parseScenarios(bytes);assert(doc.scenarios.some(s=>s.id==='conflict'));assert.throws(()=>parseScenarios('globalThis.touched=true'));doc.scenarios.push(doc.scenarios[0]);assert.throws(()=>parseScenarios(JSON.stringify(doc)),/重复/);
|
|
11
|
+
const f=await comparisonFixture();const input=structuredClone(f.input);input.cases[0].scenario='missing';await writeFile(path.join(f.root,'input.json'),JSON.stringify(input));await assert.rejects(f.prepare(),/场景 ID 不存在/);
|
|
12
|
+
});
|
|
13
|
+
test('portable integrity and current project freshness are distinct checks',async()=>{
|
|
14
|
+
const projectRoot=await project(),root=path.join(projectRoot,'docs/.scratch/test/design/prototypes');await prepareFlowPrototype({projectRoot,root,feature:'test',pattern:'workbench'});assert.deepEqual((await validatePrototypeProject({root,projectRoot})).errors,[]);
|
|
15
|
+
await writeFile(path.join(projectRoot,'DESIGN.md'),'changed DESIGN');assert.equal((await validatePrototypeProject({root})).errors.length,0);assert.match((await validatePrototypeProject({root,projectRoot})).errors.join(),/来源已漂移/);
|
|
16
|
+
await writeFile(path.join(root,'scenarios.js'),'window.prototypeScenarios=[]');assert.match((await validatePrototypeProject({root})).errors.join(),/派生脚本不一致/);
|
|
17
|
+
});
|
|
18
|
+
test('CLI scripts execute through a filesystem alias instead of silently returning success',async()=>{
|
|
19
|
+
const dir=await mkdtemp(path.join(os.tmpdir(),'prototype-cli-alias-'));
|
|
20
|
+
for(const script of ['build-shadcn-vue-prototype.mjs','prototype-comparison.mjs','prototype-contract.mjs']){
|
|
21
|
+
const link=path.join(dir,script);await symlink(new URL('../scripts/'+script,import.meta.url),link);
|
|
22
|
+
const result=spawnSync(process.execPath,[link,'--invalid-argument'],{encoding:'utf8'});assert.notEqual(result.status,0,script);assert(result.stderr.trim(),script+' must report an error');
|
|
23
|
+
const imported=spawnSync(process.execPath,['--input-type=module','-e',`await import(${JSON.stringify(new URL('../scripts/'+script,import.meta.url).href)})`],{encoding:'utf8'});assert.equal(imported.status,0,script+' imports without a CLI argv: '+imported.stderr);
|
|
24
|
+
const stdinImport=spawnSync(process.execPath,['--input-type=module','-'],{input:`await import(${JSON.stringify(new URL('../scripts/'+script,import.meta.url).href)})`,encoding:'utf8'});assert.equal(stdinImport.status,0,script+' imports from stdin: '+stdinImport.stderr);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('new compact preset is explicit, invalid density is rejected and old manifest stays readable',async()=>{
|
|
29
|
+
const projectRoot=await project(),root=path.join(projectRoot,'docs/.scratch/density/design/prototypes'),options={projectRoot,root,feature:'density',pattern:'workbench'};
|
|
30
|
+
await assert.rejects(prepareFlowPrototype({...options,density:'tiny'}),/density/);await assert.rejects(readdir(root),{code:'ENOENT'});
|
|
31
|
+
await prepareFlowPrototype(options);const file=path.join(root,'yss-prototype-adapter.json'),manifest=JSON.parse(await readFile(file,'utf8'));
|
|
32
|
+
assert.equal(manifest.visual_preset.density,'compact');manifest.visual_preset.density='comfortable';await writeFile(file,JSON.stringify(manifest));assert.match((await validatePrototypeProject({root})).errors.join(),/密度不一致/);
|
|
33
|
+
delete manifest.visual_preset;await writeFile(file,JSON.stringify(manifest));assert.deepEqual((await validatePrototypeProject({root})).errors,[]);
|
|
34
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {test} from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {existsSync} from 'node:fs';
|
|
4
|
+
import {prepareFlowPrototype} from '../scripts/prototype-contract.mjs';
|
|
5
|
+
test('retired React authoring has no generation, collection or authoring entrypoint',async()=>{
|
|
6
|
+
for(const ref of ['../scripts/build-shadcn-prototype.mjs','../assets/shadcn-authoring','../assets/business-patterns','../scripts/build-antd-prototype.mjs','../scripts/collect-antd-reference.mjs','../assets/antd-authoring','../references/antd-component-catalog.json','../references/antd-integration.md'])assert.equal(existsSync(new URL(ref,import.meta.url)),false,ref);
|
|
7
|
+
for(const basis of ['react-antd-prebuilt','react-shadcn-prebuilt'])await assert.rejects(prepareFlowPrototype({componentBasis:basis}),/已退役/);
|
|
8
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
-
import { buildDecisionFixture } from "../../../../scripts/
|
|
3
|
+
import { buildDecisionFixture } from "../../../../scripts/lib/testing/user-decision-fixture.mjs";
|
|
4
4
|
import { mkdtemp, mkdir, readFile, writeFile, rm, cp, symlink } from "node:fs/promises";
|
|
5
5
|
import os from "node:os";
|
|
6
6
|
import path from "node:path";
|
|
@@ -176,7 +176,8 @@ assert(validatePrototypeEvidence(incompleteFlow).errors.some(message => message.
|
|
|
176
176
|
const prebuiltEvidence = structuredClone(htmlEvidence);
|
|
177
177
|
Object.assign(prebuiltEvidence.profile_evidence.flow_review.implementation, { framework: "react-antd-prebuilt", selection_reason: "日期与受控表单影响评审结论" });
|
|
178
178
|
prebuiltEvidence.profile_evidence.flow_review.prototype_library_facts = { applicable: true, component_basis: "react-antd-prebuilt", library_package: "antd", library_version: "6.6.4", source: "fact-pack", manifest_ref: "reference/manifest.json", manifest_digest: "sha256:" + "c".repeat(64), canonical_design_digest: prebuiltEvidence.design_baseline.canonical_design_digest, project_token_baseline_digest: prebuiltEvidence.design_baseline.project_token_baseline_digest, new_api_uncertainty: false, components_covered: ["Table", "Select"], build_provenance_ref: "build-provenance.json" };
|
|
179
|
-
assert
|
|
179
|
+
assert(validatePrototypeEvidence(prebuiltEvidence).errors.some(x => x.includes("已退役")));
|
|
180
|
+
assert.deepEqual(validatePrototypeEvidence(prebuiltEvidence, {allowLegacy: true}).errors, []);
|
|
180
181
|
for (const field of ["build_provenance_ref", "library_version"]) {
|
|
181
182
|
const invalid = structuredClone(prebuiltEvidence); delete invalid.profile_evidence.flow_review.prototype_library_facts[field];
|
|
182
183
|
assert(validatePrototypeEvidence(invalid).errors.length > 0);
|
|
@@ -184,6 +185,16 @@ for (const field of ["build_provenance_ref", "library_version"]) {
|
|
|
184
185
|
const noPrebuiltReason = structuredClone(prebuiltEvidence); delete noPrebuiltReason.profile_evidence.flow_review.implementation.selection_reason;
|
|
185
186
|
assert(validatePrototypeEvidence(noPrebuiltReason).errors.some(x => x.includes("selection_reason")));
|
|
186
187
|
|
|
188
|
+
const shadcnEvidence = structuredClone(htmlEvidence);
|
|
189
|
+
shadcnEvidence.profile_evidence.flow_review.implementation.framework = "react-shadcn-prebuilt";
|
|
190
|
+
shadcnEvidence.profile_evidence.flow_review.prototype_library_facts = { ...prebuiltEvidence.profile_evidence.flow_review.prototype_library_facts, component_basis: "react-shadcn-prebuilt", library_package: "shadcn/ui", source: "source-snapshot", registry_revision: "d".repeat(40) };
|
|
191
|
+
delete shadcnEvidence.profile_evidence.flow_review.prototype_library_facts.library_version;
|
|
192
|
+
assert(validatePrototypeEvidence(shadcnEvidence).errors.some(x=>x.includes("已退役")));
|
|
193
|
+
assert.deepEqual(validatePrototypeEvidence(shadcnEvidence,{allowLegacy:true}).errors, []);
|
|
194
|
+
const vueEvidence=structuredClone(shadcnEvidence);vueEvidence.profile_evidence.flow_review.implementation.framework="vue-shadcn-prebuilt";Object.assign(vueEvidence.profile_evidence.flow_review.prototype_library_facts,{component_basis:"vue-shadcn-prebuilt",library_package:"shadcn-vue"});
|
|
195
|
+
assert.deepEqual(validatePrototypeEvidence(vueEvidence).errors, []);
|
|
196
|
+
for (const field of ["registry_revision", "build_provenance_ref"]) {const invalid=structuredClone(vueEvidence);delete invalid.profile_evidence.flow_review.prototype_library_facts[field];assert(validatePrototypeEvidence(invalid).errors.length);}
|
|
197
|
+
|
|
187
198
|
function pngHeader(width, height) {
|
|
188
199
|
const value = Buffer.alloc(24);
|
|
189
200
|
Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]).copy(value, 0);
|
|
@@ -231,3 +242,9 @@ await writeFile(path.join(bundleRoot, "capture/unregistered.log"), "unexpected\n
|
|
|
231
242
|
assert((await validateVisualBaseline(sealed, { bundleRoot })).errors.some((message) => message.includes("未登记 payload")));
|
|
232
243
|
|
|
233
244
|
process.stdout.write("YSS prototype profile contract scenarios passed\n");
|
|
245
|
+
|
|
246
|
+
// Review-only comparison behavior is part of the prototype contract regression entry.
|
|
247
|
+
await import("./comparison.test.mjs");
|
|
248
|
+
|
|
249
|
+
// Shared scenario and freshness regressions run through the registered entrypoint.
|
|
250
|
+
await import("./reliability.test.mjs");
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {readFile,writeFile,mkdtemp,mkdir,cp,readdir,symlink} from 'node:fs/promises';
|
|
4
|
+
import path from 'node:path';import os from 'node:os';
|
|
5
|
+
import {verifyShadcnVueSources,buildShadcnVuePrototype} from '../scripts/build-shadcn-vue-prototype.mjs';
|
|
6
|
+
import {validatePrototypeProject} from '../scripts/prototype-contract.mjs';
|
|
7
|
+
import {resourceErrors} from '../scripts/offline-html.mjs';
|
|
8
|
+
const groups='button input label badge table select dialog checkbox textarea tabs alert-dialog card separator breadcrumb field input-group alert empty skeleton spinner sheet dropdown-menu tooltip pagination combobox range-calendar popover'.split(' ').sort();
|
|
9
|
+
test('Vue components have fixed original sources, exact dependencies and closed imports',async()=>{
|
|
10
|
+
const r=await verifyShadcnVueSources(),base=new URL('../assets/shadcn-vue-authoring/',import.meta.url),pkg=JSON.parse(await readFile(new URL('package.json',base)));
|
|
11
|
+
assert.equal(r.revision,'67c9a3926dc0a854507b325c6337ff2210d16379');assert.deepEqual([...r.component_groups].sort(),groups);assert.deepEqual([...new Set(r.components.map(c=>c.path.split('/')[1]))].sort(),groups);
|
|
12
|
+
for(const c of r.components){assert(c.source_url.includes(`/blob/${r.revision}/apps/v4/registry/new-york-v4/${c.path}`));const s=await readFile(new URL(c.path,base),'utf8');for(const m of s.matchAll(/from\s+["']([^"']+)["']/g)){const ref=m[1];if(ref.startsWith('.'))assert(r.components.some(x=>["", ".ts", "/index.ts"].some(ext=>x.path===path.posix.normalize(path.posix.join(path.posix.dirname(c.path),ref))+ext)),`${c.path}: ${ref}`);else if(ref.startsWith('@/registry/'))assert(groups.includes(ref.split('/').at(-1)));else assert(ref==='@/lib/utils'||Object.hasOwn(pkg.dependencies,ref),ref);}}
|
|
13
|
+
assert.equal(pkg.dependencies.vue,pkg.devDependencies['@vue/compiler-sfc']);for(const v of Object.values({...pkg.dependencies,...pkg.devDependencies}))assert.match(v,/^\d+\.\d+\.\d+$/);assert(!pkg.dependencies.react);assert.match(await readFile(new URL('SHADCN-LICENSE.txt',base),'utf8'),/MIT License/);
|
|
14
|
+
assert(resourceErrors('App.vue','<script setup>fetch("https://example.test")</script>',{}).length);assert(resourceErrors('App.vue','<template><img src="https://example.test/x.png"/></template>',{}).length);
|
|
15
|
+
});
|
|
16
|
+
async function fixture(){const r=await mkdtemp(path.join(os.tmpdir(),'yss-vue-test-'));await mkdir(path.join(r,'.template-spec/design/tokens'),{recursive:true});for(const f of ['DESIGN.md','.template-spec/design/tokens/variables.css'])await cp(new URL(`../../../../${f}`,import.meta.url),path.join(r,f));return r;}
|
|
17
|
+
test('Vue multi-file SFC build: asset closure, scoped CSS, schema, rejection and cleanup',{},async()=>{
|
|
18
|
+
const projectRoot=await fixture(),author=path.join(projectRoot,'author');await mkdir(author);
|
|
19
|
+
const config=path.join(author,'config.json');await cp(new URL('../assets/vue-business-patterns/list-detail.scenarios.json',import.meta.url),path.join(author,'scenarios.json'));
|
|
20
|
+
await writeFile(config,JSON.stringify({schema_version:1,title:'Vue <title>',entry:'entry.ts',scenarios:'scenarios.json',density:'comfortable'}));
|
|
21
|
+
const entry='import {createApp} from "vue";import App from "./App.vue";import "./styles.css";createApp(App).mount("#app");';
|
|
22
|
+
const app='<script setup lang="ts">import {Button} from "@/components/ui/button";import image from "./mark.svg";import data from "./data.json";import type {Props} from "./types";defineProps<Props>();</script><template><Button>{{data.title}}</Button><img :src="image" alt="local"/></template><style scoped>img{width:var(--brand-size);background:url("./mark.svg")}</style>';
|
|
23
|
+
await writeFile(path.join(author,'types.ts'),'export interface Props { note?: string }');
|
|
24
|
+
await writeFile(path.join(author,'entry.ts'),entry);await writeFile(path.join(author,'App.vue'),app);await writeFile(path.join(author,'data.json'),'{"title":"本地"}');await writeFile(path.join(author,'mark.svg'),'<svg xmlns="http://www.w3.org/2000/svg" width="8" height="8"/>');await writeFile(path.join(author,'unused.svg'),'<svg/>');await writeFile(path.join(author,'styles.css'),'img{height:var(--brand-size)}');
|
|
25
|
+
const options={projectRoot,feature:'sfc',root:path.join(projectRoot,'docs/.scratch/sfc/design/prototypes'),toolchain:process.env.YSS_VUE_TOOLCHAIN,config,density:'compact'};
|
|
26
|
+
await buildShadcnVuePrototype(options);assert.deepEqual((await validatePrototypeProject({root:options.root,projectRoot})).errors,[]);
|
|
27
|
+
const manifest=JSON.parse(await readFile(path.join(options.root,'yss-prototype-adapter.json')));assert.equal(manifest.component_basis,'vue-shadcn-prebuilt');assert.equal(manifest.visual_preset.density,'compact');assert.equal(manifest.build_provenance.browser_runtime,'vue');assert(manifest.build_provenance.authored_files['authoring-sources/types.ts'],'type-only inputs must be recorded');assert(Object.keys(manifest.build_provenance.authored_files).includes('authoring-sources/App.vue'));assert(!Object.keys(manifest.files).some(p=>p.includes('unused.svg')));assert((await readFile(path.join(options.root,'styles.css'),'utf8')).includes('[data-v-'));assert((await readdir(path.join(options.root,'assets'))).some(x=>x.endsWith('.svg')));
|
|
28
|
+
await assert.rejects(buildShadcnVuePrototype(options),/已存在内容/);
|
|
29
|
+
const bad={...options,feature:'bad',root:path.join(projectRoot,'docs/.scratch/bad/design/prototypes')};
|
|
30
|
+
await assert.rejects(buildShadcnVuePrototype({...bad,entry:path.join(author,'entry.ts')}),/互斥/);
|
|
31
|
+
for(const [source,pattern] of [['import "react"',/未登记依赖/],['import "react-dom\/client"',/未登记依赖/],['import "./missing.ts"',/resolve/],['import "https://example.test/module.js"',/未登记依赖/],['import "@\/components/ui/calendar"',/未收录组件/],['import "../outside.ts"',/相对路径/]]){await writeFile(path.join(projectRoot,'outside.ts'),'export const x=1');await writeFile(path.join(author,'entry.ts'),source);await assert.rejects(buildShadcnVuePrototype(bad),pattern);await assert.rejects(readdir(bad.root),{code:'ENOENT'});}
|
|
32
|
+
await symlink(path.join(projectRoot,'outside.ts'),path.join(author,'linked.ts'));await writeFile(path.join(author,'entry.ts'),'import "./linked.ts"');await assert.rejects(buildShadcnVuePrototype(bad));
|
|
33
|
+
await writeFile(path.join(author,'entry.ts'),entry);
|
|
34
|
+
await writeFile(path.join(projectRoot,'outside.ts'),'export interface Props { outside?: string }');
|
|
35
|
+
for(const source of ['<script setup lang="ts">import type {Props} from "../outside";defineProps<Props>();</script><template><p>outside</p></template>','<script setup lang="ts">import type {Props} from "./linked";defineProps<Props>();</script><template><p>linked</p></template>']){await writeFile(path.join(author,'App.vue'),source);await assert.rejects(buildShadcnVuePrototype(bad));await assert.rejects(readdir(bad.root),{code:'ENOENT'});}
|
|
36
|
+
for(const source of ['<script setup>fetch("https://example.test")</script>', '<template><img src="https://example.test/x.png"/></template>', '<template><p>safe</p></template><style>p{background:url(https://example.test/x.png)}</style>', '<template lang="pug">p bad</template>']){await writeFile(path.join(author,'App.vue'),source);await assert.rejects(buildShadcnVuePrototype(bad));await assert.rejects(readdir(bad.root),{code:'ENOENT'});}
|
|
37
|
+
// Validation-stage failure still cleans staging, with no half-published artifact.
|
|
38
|
+
await writeFile(path.join(author,'App.vue'),app);await writeFile(path.join(projectRoot,'.template-spec/design/tokens/variables.css'),'@import "https://example.test/font.css";');await assert.rejects(buildShadcnVuePrototype(bad),/非本地/);assert.deepEqual(await readdir(path.join(projectRoot,'docs/.scratch/bad/design/build')),[]);await assert.rejects(readdir(bad.root),{code:'ENOENT'});
|
|
39
|
+
await writeFile(path.join(options.root,'authoring-sources/App.vue'),app+'<!-- drift -->');assert.match((await validatePrototypeProject({root:options.root})).errors.join(),/漂移|摘要/);
|
|
40
|
+
});
|
|
41
|
+
test('all 27 Vue groups compile, including unused-route components',{},async()=>{
|
|
42
|
+
const projectRoot=await fixture(),author=path.join(projectRoot,'author');await mkdir(author);await writeFile(path.join(author,'entry.ts'),groups.map((g,i)=>`import * as c${i} from '@/components/ui/${g}';`).join('\n')+'\nconsole.log('+groups.map((_,i)=>`Object.keys(c${i})`).join(',')+');');const root=path.join(projectRoot,'docs/.scratch/all-components/design/prototypes');const m=await buildShadcnVuePrototype({projectRoot,root,feature:'all-components',toolchain:process.env.YSS_VUE_TOOLCHAIN,entry:path.join(author,'entry.ts'),profile:'H1'});assert.deepEqual([...new Set(m.build_provenance.used_component_files.map(p=>p.split('/')[1]))].sort(),groups);assert.deepEqual((await validatePrototypeProject({root,profile:'H1'})).errors,[]);
|
|
43
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import test from 'node:test';
|
|
2
|
+
import assert from 'node:assert/strict';
|
|
3
|
+
import {mkdtemp,mkdir,cp,writeFile,readFile} from 'node:fs/promises';
|
|
4
|
+
import os from 'node:os';import path from 'node:path';
|
|
5
|
+
import {verifyPrototypeDesign} from '../scripts/verify-prototype-design.mjs';
|
|
6
|
+
test('selected checks fail closed for missing tools, mismatched lock/version and browser',async()=>{
|
|
7
|
+
const temp=await mkdtemp(path.join(os.tmpdir(),'yss-verification-negative-'));
|
|
8
|
+
const missing=await verifyPrototypeDesign({scope:'all',toolchain:path.join(temp,'absent'),browserTools:path.join(temp,'missing-browser')});
|
|
9
|
+
assert.equal(missing.status,'failed');assert(missing.counts['not-executed']>0);assert(missing.checks.some(c=>c.id==='browser-preflight'&&c.status==='failed'));
|
|
10
|
+
const fake=path.join(temp,'fake');await mkdir(fake);await writeFile(path.join(fake,'pnpm-lock.yaml'),'wrong');
|
|
11
|
+
const lock=await verifyPrototypeDesign({scope:'contract',toolchain:fake});assert(lock.checks.some(c=>c.reason?.includes('锁文件不符')));
|
|
12
|
+
await cp(new URL('../assets/shadcn-vue-authoring/pnpm-lock.yaml',import.meta.url),path.join(fake,'pnpm-lock.yaml'));await mkdir(path.join(fake,'node_modules/vue'),{recursive:true});await writeFile(path.join(fake,'node_modules/vue/package.json'),'{"version":"0.0.0"}');
|
|
13
|
+
const version=await verifyPrototypeDesign({scope:'contract',toolchain:fake});assert(version.checks.some(c=>c.reason?.includes('版本不符')));assert.equal(version.counts.passed,1,'only input-drift can pass when tools are invalid');
|
|
14
|
+
await assert.rejects(verifyPrototypeDesign({scope:'unknown'}),/scope/);
|
|
15
|
+
const report=JSON.parse(await readFile(path.join(version.output,'report.json')));assert.equal(report.status,'failed');assert.equal(report.counts['not-applicable'],0);
|
|
16
|
+
});
|
|
@@ -5,53 +5,68 @@ import path from 'node:path';
|
|
|
5
5
|
import os from 'node:os';
|
|
6
6
|
import {pathToFileURL} from 'node:url';
|
|
7
7
|
import {prepareFlowPrototype,validatePrototypeProject} from '../scripts/prototype-contract.mjs';
|
|
8
|
-
import {
|
|
9
|
-
const
|
|
8
|
+
import {buildShadcnVuePrototype} from '../scripts/build-shadcn-vue-prototype.mjs';
|
|
9
|
+
const engines=await import(process.env.YSS_PLAYWRIGHT_MODULE||'playwright');const engine=process.env.YSS_BROWSER_ENGINE||'chromium';const chromium=engines[engine];
|
|
10
10
|
const temp=await mkdtemp(path.join(os.tmpdir(),'yss-workbench-browser-'));const source=path.join(temp,'source');
|
|
11
11
|
await mkdir(path.join(source,'.template-spec/design/tokens'),{recursive:true});for(const ref of ['DESIGN.md','.template-spec/design/tokens/variables.css'])await cp(new URL(`../../../../${ref}`,import.meta.url),path.join(source,ref));
|
|
12
12
|
const results=[];const browser=await chromium.launch(process.env.YSS_BROWSER_CHANNEL?{channel:process.env.YSS_BROWSER_CHANNEL}:{});
|
|
13
13
|
try{
|
|
14
|
-
for(const kind of ['native','
|
|
14
|
+
for(const kind of ['native','shadcn']){
|
|
15
15
|
const root=path.join(source,`docs/.scratch/${kind}/design/prototypes`);
|
|
16
16
|
if(kind==='native')await prepareFlowPrototype({projectRoot:source,root,feature:kind,pattern:'workbench'});
|
|
17
|
-
else{await assert.rejects(
|
|
18
|
-
assert.deepEqual((await validatePrototypeProject({root,componentBasis:kind==='
|
|
19
|
-
if(kind==='
|
|
17
|
+
else{await assert.rejects(buildShadcnVuePrototype({projectRoot:source,root,feature:kind}),/toolchain/);await buildShadcnVuePrototype({projectRoot:source,root,feature:kind,toolchain:process.env.YSS_VUE_TOOLCHAIN,config:new URL('../assets/vue-business-patterns/conflict-standard.config.json',import.meta.url).pathname,profile:'H2'});}
|
|
18
|
+
assert.deepEqual((await validatePrototypeProject({root,componentBasis:kind==='shadcn'?'vue-shadcn-prebuilt':'html-css-js'})).errors,[]);
|
|
19
|
+
if(kind==='shadcn'){
|
|
20
20
|
assert((await validatePrototypeProject({root,componentBasis:'html-css-js'})).errors.length);
|
|
21
21
|
const ref=path.join(root,'build-provenance.json'),original=await readFile(ref,'utf8');
|
|
22
22
|
await writeFile(ref,'{broken');assert((await validatePrototypeProject({root})).errors.some(e=>e.includes('有效 JSON')));await writeFile(ref,original);
|
|
23
|
-
const sourceRef=path.join(root,'authoring-source.
|
|
23
|
+
const sourceRef=path.join(root,'authoring-source.ts'),sourceBytes=await readFile(sourceRef);
|
|
24
24
|
await writeFile(sourceRef,sourceBytes+'\n// drift');assert((await validatePrototypeProject({root})).errors.some(e=>e.includes('源文件')));await writeFile(sourceRef,sourceBytes);
|
|
25
|
-
await assert.rejects(
|
|
25
|
+
await assert.rejects(buildShadcnVuePrototype({projectRoot:source,root,feature:kind,toolchain:process.env.YSS_VUE_TOOLCHAIN}),/已存在内容/);
|
|
26
26
|
assert.deepEqual((await validatePrototypeProject({root})).errors,[]);
|
|
27
27
|
}
|
|
28
28
|
const portable=path.join(temp,kind);await cp(root,portable,{recursive:true});const url=pathToFileURL(path.join(portable,'index.html')).href;
|
|
29
|
-
const context=await browser.newContext({offline:
|
|
29
|
+
const context=await browser.newContext({offline:engine==='chromium',deviceScaleFactor:1,locale:'zh-CN',timezoneId:'Asia/Shanghai',reducedMotion:'reduce'});
|
|
30
|
+
if(engine==='webkit')await context.route(/^https?:/,route=>route.abort('internetdisconnected'));
|
|
30
31
|
const page=await context.newPage();const failures=[];
|
|
31
32
|
page.on('pageerror',e=>failures.push(e.message));page.on('console',m=>{if(['warning','error'].includes(m.type()))failures.push(m.text());});page.on('requestfailed',r=>failures.push(r.url()));page.on('request',r=>{if(/^https?:/.test(r.url()))failures.push(r.url());});
|
|
32
33
|
for(const width of [1440,390]){
|
|
33
34
|
await page.setViewportSize({width,height:width===390?844:900});await page.goto('about:blank');await page.goto(url+'#scenario=failure');
|
|
34
35
|
await page.getByRole('button',{name:'查看 M-001',exact:true}).click();await page.getByRole('dialog').waitFor();await page.keyboard.press('Escape');await page.getByRole('dialog').waitFor({state:'hidden'});
|
|
36
|
+
if(kind==='shadcn')assert.equal(await page.getByRole('button',{name:'查看 M-001',exact:true}).evaluate(el=>el===document.activeElement),true);
|
|
35
37
|
await page.getByRole('button',{name:'编辑 M-001',exact:true}).click();await page.locator('#name').fill('维护测试:跨部门资料更新');await page.locator('#save').click();await page.getByText('保存失败,输入已保留,请重试。',{exact:true}).waitFor();assert.equal(await page.locator('#name').inputValue(),'维护测试:跨部门资料更新');await page.locator('#retry').click();await page.getByText('保存成功(本地模拟)。',{exact:true}).waitFor();
|
|
36
38
|
assert.equal(await page.evaluate(()=>document.documentElement.scrollWidth>innerWidth),false);
|
|
37
|
-
await page.locator('.table-scroll,
|
|
39
|
+
await page.locator('.table-scroll, [data-slot="table-container"]').evaluateAll(elements=>elements.forEach(el=>{el.scrollLeft=0;}));await page.evaluate(()=>scrollTo(0,0));
|
|
40
|
+
await page.goto(url+'#scenario=primary');await page.getByRole('button',{name:'查看 M-001',exact:true}).waitFor();
|
|
38
41
|
const screenshot=path.join(temp,`${kind}-${width}.png`);await page.screenshot({path:screenshot,animations:'disabled'});
|
|
39
42
|
await page.locator('summary').click();await page.locator('#reset').click();assert.equal(await page.locator('table').getByText('季度经营分析资料',{exact:true}).count(),1);
|
|
40
43
|
await page.locator('#scenario').selectOption('no-permission');assert.equal(await page.getByRole('button',{name:'编辑 M-001',exact:true}).isDisabled(),true);
|
|
41
|
-
await page.locator('#scenario').selectOption('empty');await page.getByText('暂无符合条件的资料',{exact:true}).waitFor();
|
|
42
|
-
await page.locator('#scenario').selectOption('loading');
|
|
43
|
-
await page.locator('#scenario').selectOption('conflict');await page.getByRole('button',{name:'编辑 M-001',exact:true}).click();await page.locator('#name').fill('冲突时保留的输入');await page.locator('#save').click();assert.equal(await page.locator('#name').inputValue(),'冲突时保留的输入');await page.locator('#reload').click();
|
|
44
|
-
const control=await page.locator('#save').evaluate(el=>({height:el.getBoundingClientRect().height,color:getComputedStyle(el).backgroundColor}));
|
|
45
|
-
if(kind==='
|
|
46
|
-
if(kind==='
|
|
47
|
-
await page.locator('#
|
|
48
|
-
|
|
44
|
+
if(kind==='native'){await page.locator('#scenario').selectOption('empty');await page.getByText('暂无符合条件的资料',{exact:true}).waitFor();
|
|
45
|
+
await page.locator('#scenario').selectOption('loading');await page.getByText('正在加载(固定评审状态)',{exact:true}).waitFor();}
|
|
46
|
+
await page.locator('#scenario').selectOption('conflict');await page.getByRole('button',{name:'编辑 M-001',exact:true}).click();await page.locator('#name').fill('冲突时保留的输入');await page.locator('#save').click();assert.equal(await page.locator('#name').inputValue(),'冲突时保留的输入');if(kind==='native'){page.once('dialog',d=>d.dismiss());await page.locator('#reload').click();assert.equal(await page.locator('#name').inputValue(),'冲突时保留的输入');page.once('dialog',d=>d.accept());await page.locator('#reload').click();}else{await page.locator('#reload').click();await page.getByRole('button',{name:'保留草稿',exact:true}).click();assert.equal(await page.locator('#name').inputValue(),'冲突时保留的输入');await page.locator('#reload').click();await page.getByRole('button',{name:'放弃并重新加载',exact:true}).click();assert.equal(await page.locator('#version').textContent(),'2');}assert.equal(await page.locator('#name').inputValue(),'服务端最新资料名称');assert.equal(await page.locator('#version').textContent(),'2');assert.equal(kind==='native'?await page.locator('#owner').inputValue():await page.locator('#owner').textContent(),'最新负责人');
|
|
47
|
+
const control=await page.locator('#save').evaluate(el=>({height:el.getBoundingClientRect().height,color:getComputedStyle(el).backgroundColor}));const token=await page.evaluate(width=>{const el=document.createElement('div');el.style.cssText=`height:var(${width===390?'--yss-control-height':'--yss-control-height-compact'});background:var(--yss-color-primary-control)`;document.body.append(el);const v={height:el.getBoundingClientRect().height,color:getComputedStyle(el).backgroundColor};el.remove();return v;},width);assert.deepEqual(control,token);
|
|
48
|
+
if(kind==='shadcn'){const theme=await page.locator('#name').evaluate(el=>({background:getComputedStyle(el).backgroundColor,color:getComputedStyle(el).color}));const tokenTheme=await page.evaluate(()=>{const el=document.createElement('div');el.style.cssText='background:var(--brand-color-bg-container);color:var(--brand-color-text)';document.body.append(el);const v={background:getComputedStyle(el).backgroundColor,color:getComputedStyle(el).color};el.remove();return v;});assert.deepEqual(theme,tokenTheme);}
|
|
49
|
+
if(kind==='shadcn'){
|
|
50
|
+
await page.locator('#name').focus();for(let i=0;i<7;i++){await page.keyboard.press('Tab');assert(await page.getByRole('dialog').evaluate(el=>el.contains(document.activeElement)));}
|
|
51
|
+
await page.locator('#owner').focus();await page.keyboard.press('Enter');await page.getByRole('listbox').waitFor();await page.waitForFunction(()=>document.activeElement?.getAttribute('role')==='option');await page.keyboard.press('Home');await page.waitForFunction(()=>document.activeElement?.textContent==='张明');await page.keyboard.press('Enter');
|
|
52
|
+
await page.waitForFunction(()=>document.getElementById('owner')?.textContent==='张明');
|
|
49
53
|
}
|
|
50
|
-
await page.locator('#save').
|
|
54
|
+
await page.locator('#save').click();await page.getByRole('dialog').waitFor({state:'hidden'});await page.getByRole('button',{name:'查看 M-001',exact:true}).click();await page.getByRole('dialog').getByText('服务端最新资料名称',{exact:true}).waitFor();await page.getByRole('dialog').locator('dd').filter({hasText:/^2$/}).waitFor();await page.keyboard.press('Escape');await page.getByRole('dialog').waitFor({state:'hidden'});
|
|
51
55
|
await page.locator('#scenario').selectOption('primary');await page.locator('#keyword').fill('M-003');await page.getByRole('button',{name:'查询',exact:true}).click();await page.getByRole('button',{name:'查看 M-003',exact:true}).waitFor();
|
|
52
|
-
|
|
56
|
+
{
|
|
57
|
+
for(const fragment of ['#scenario=unknown','#scenario=','#bad=primary']){await page.goto(url+fragment);await page.getByRole('alert').filter({hasText:'未知或缺失的场景'}).waitFor();}
|
|
58
|
+
await page.goto(url+'#scenario=primary');await page.getByRole('button',{name:'编辑 M-001',exact:true}).waitFor();
|
|
59
|
+
}
|
|
60
|
+
results.push({kind,width,result:'passed',control,screenshot,scenarios:['query','detail-escape','edit-failure-retry','reset','no-permission',...(kind==='native'?['empty','loading']:[]),'conflict-reload',...(kind==='shadcn'?['select']:[])]});
|
|
53
61
|
}
|
|
54
62
|
assert.deepEqual(failures,[]);await context.close();
|
|
55
63
|
}
|
|
56
|
-
const
|
|
64
|
+
const h1Root=path.join(source,'docs/.scratch/shadcn-h1/design/prototypes');
|
|
65
|
+
await buildShadcnVuePrototype({projectRoot:source,root:h1Root,feature:'shadcn-h1',profile:'H1',toolchain:process.env.YSS_VUE_TOOLCHAIN});
|
|
66
|
+
assert.deepEqual((await validatePrototypeProject({root:h1Root,profile:'H1'})).errors,[]);
|
|
67
|
+
assert((await validatePrototypeProject({root:h1Root,profile:'H2'})).errors.length);
|
|
68
|
+
const h1Copy=path.join(temp,'h1-portable');await cp(h1Root,h1Copy,{recursive:true});
|
|
69
|
+
const h1Context=await browser.newContext({offline:engine==='chromium',viewport:{width:390,height:844}});const h1Page=await h1Context.newPage();const h1Errors=[];h1Page.on('pageerror',e=>h1Errors.push(e.message));
|
|
70
|
+
if(engine==='webkit')await h1Context.route(/^https?:/,route=>route.abort('internetdisconnected'));for(const width of [1440,390]){await h1Page.setViewportSize({width,height:width===390?844:900});await h1Page.goto('about:blank');await h1Page.goto(pathToFileURL(path.join(h1Copy,'index.html')).href);await h1Page.getByRole('button',{name:'查看 M-001',exact:true}).click();if(width>=1200){await h1Page.locator('.inline-detail').waitFor();await h1Page.getByRole('button',{name:'关闭详情',exact:true}).click();}else{await h1Page.getByRole('dialog').waitFor();await h1Page.keyboard.press('Escape');}assert.equal(await h1Page.evaluate(()=>document.documentElement.scrollWidth>innerWidth),false);}assert.deepEqual(h1Errors,[]);await h1Context.close();
|
|
71
|
+
const report={h1:'passed',result:'passed',scope:'maintenance starters only; not product QA or approval',engine,browser:browser.version(),os:process.platform,delivery:engine==='chromium'?'file:// isolated directory offline=true':'file:// HTTP(S) blocked; offline flag exception recorded',results};await writeFile(path.join(temp,'result.json'),JSON.stringify(report,null,2));console.log(path.join(temp,'result.json'));
|
|
57
72
|
}finally{await browser.close();}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import {browserHarness,entry,layout,reset} from './browser-harness.mjs';
|
|
3
|
+
await browserHarness('workspace',async({page,width,check,capture})=>{
|
|
4
|
+
const go=async(scene='primary',id='')=>{await page.goto('about:blank');await page.goto(entry('workspace',scene,id));};
|
|
5
|
+
async function nav(title,module='资料管理'){
|
|
6
|
+
if(width<768){await page.getByRole('button',{name:'切换模块',exact:true}).click();await page.getByRole('menuitem',{name:module,exact:true}).click();await page.getByRole('button',{name:'打开导航',exact:true}).click();await page.getByRole('navigation',{name:'窄屏页面导航',exact:true}).getByRole('button',{name:title,exact:true}).click();}
|
|
7
|
+
else{await page.getByRole('navigation',{name:'模块导航',exact:true}).getByRole('button',{name:module,exact:true}).click();await page.locator('aside[aria-label="页面导航"]').getByRole('button',{name:title,exact:true}).click();}
|
|
8
|
+
await page.getByRole('heading',{level:1,name:title,exact:true}).waitFor();
|
|
9
|
+
}
|
|
10
|
+
const tag=id=>page.locator(`[data-workspace-page="${id}"]`);
|
|
11
|
+
await check('W01-W02-T01-T02-T04-draft-close-reopen',async()=>{
|
|
12
|
+
await go();await nav('分步表单');await page.locator('#name').fill('跨页草稿');await page.locator('#note').fill('保留说明');await page.getByRole('button',{name:'下一步',exact:true}).click();await page.locator('#owner').fill('张明');await nav('查询与详情');await nav('分步表单');assert.equal(await tag('multi-step').count(),1);assert.equal(await page.locator('#owner').inputValue(),'张明');
|
|
13
|
+
await page.getByRole('button',{name:'关闭 分步表单',exact:true}).click();await page.getByRole('button',{name:'保留页面',exact:true}).click();assert.equal(await page.locator('#owner').inputValue(),'张明');await page.waitForFunction(()=>document.activeElement?.getAttribute('aria-label')==='关闭 分步表单');
|
|
14
|
+
await page.getByRole('button',{name:'关闭 分步表单',exact:true}).click();await page.getByRole('button',{name:'放弃修改并关闭',exact:true}).click();assert.equal(await tag('multi-step').count(),0);await nav('分步表单');assert.equal(await page.locator('#name').inputValue(),'');
|
|
15
|
+
if(width>=768){const toggle=page.getByRole('button',{name:width>=1200?'收起导航':'展开导航',exact:true});await toggle.click();await page.locator('aside[aria-label="页面导航"]').getByRole('button',{name:'组合查询',exact:true}).focus();if(width>=1200){await page.locator('[data-slot=tooltip-content]').filter({hasText:'组合查询'}).waitFor();await capture('collapsed-tooltip');}await nav('组合查询');assert.equal(await page.locator('[data-slot=tooltip-content]').count(),0);}
|
|
16
|
+
});
|
|
17
|
+
await check('W03-T03-T06-tag-keyboard-neighbor-overflow',async()=>{
|
|
18
|
+
await go();await nav('分步表单');await nav('审批与权限','工作事项');await nav('高密度分析','分析中心');
|
|
19
|
+
if(width>=768){await tag('multi-step').focus();await page.keyboard.press('ArrowRight');assert.equal(await page.evaluate(()=>document.activeElement.dataset.workspacePage),'approval');assert.equal(await tag('analysis').getAttribute('aria-current'),'page');await page.keyboard.press('Home');assert.equal(await page.evaluate(()=>document.activeElement.dataset.workspacePage),'list-detail');await page.keyboard.press('End');assert.equal(await page.evaluate(()=>document.activeElement.dataset.workspacePage),'analysis');
|
|
20
|
+
await page.keyboard.press('ArrowLeft');await page.keyboard.press('Enter');}else{await page.getByRole('button',{name:'已打开页面菜单',exact:true}).click();await page.getByRole('menuitem',{name:'审批与权限',exact:true}).click();await tag('approval').focus();}await page.getByRole('heading',{level:1,name:'审批与权限',exact:true}).waitFor();await page.keyboard.press('Delete');assert.equal(await tag('approval').count(),0);assert.equal(await tag('multi-step').getAttribute('aria-current'),'page');
|
|
21
|
+
if(width<768){await page.getByRole('button',{name:'已打开页面菜单',exact:true}).click();await page.getByRole('menuitem',{name:'查询与详情',exact:true}).click();}await tag('list-detail').focus();await page.keyboard.press('Delete');assert.equal(await tag('list-detail').count(),1);await page.getByRole('button',{name:'已打开页面菜单',exact:true}).click();await page.getByRole('menuitem',{name:'高密度分析',exact:true}).click();await page.getByRole('heading',{level:1,name:'高密度分析',exact:true}).waitFor();await layout(page);await capture('tags');
|
|
22
|
+
});
|
|
23
|
+
await check('W04-W05-W06-list-retention-detail-focus',async()=>{
|
|
24
|
+
await go();await page.getByRole('button',{name:'下一页',exact:true}).click();await page.getByRole('checkbox',{name:'选择 M-003',exact:true}).click();await page.getByRole('button',{name:'查看 M-003',exact:true}).click();
|
|
25
|
+
if(width>=1200){assert.equal(await page.locator('.inline-detail').evaluate(e=>e.getBoundingClientRect().width),384);await page.getByRole('button',{name:'关闭详情',exact:true}).click();}else{await page.getByRole('dialog').waitFor();await page.keyboard.press('Escape');}
|
|
26
|
+
await page.waitForFunction(()=>document.activeElement?.getAttribute('aria-label')==='查看 M-003');await nav('分步表单');await nav('查询与详情');assert(await page.getByRole('checkbox',{name:'选择 M-003',exact:true}).isChecked());await page.getByText('第 2 页 / 共 2 页',{exact:true}).waitFor();
|
|
27
|
+
await page.locator('#keyword').fill('归档');await nav('分步表单');await nav('查询与详情');assert.equal(await page.locator('#keyword').inputValue(),'归档');assert.equal(await page.locator('[data-slot="sheet-content"]').count(),0);await layout(page);await capture('query-detail');
|
|
28
|
+
});
|
|
29
|
+
await check('W07-form-error-retry',async()=>{
|
|
30
|
+
await go('exceptions','multi-step');await page.getByRole('button',{name:'下一步',exact:true}).click();assert.equal(await page.evaluate(()=>document.activeElement.id),'name');await page.locator('#name').fill('异常任务');await page.locator('#note').fill('返回保留');await page.getByRole('button',{name:'下一步',exact:true}).click();await page.locator('#owner').fill('张明');await page.getByRole('button',{name:'上一步',exact:true}).click();assert.equal(await page.locator('#note').inputValue(),'返回保留');await page.getByRole('button',{name:'下一步',exact:true}).click();await page.getByRole('button',{name:'确认提交',exact:true}).click();await page.getByRole('alert').waitFor();await page.getByRole('button',{name:'重试提交',exact:true}).click();await page.getByText('提交成功(本地模拟)。',{exact:true}).waitFor();
|
|
31
|
+
});
|
|
32
|
+
await check('W08-W09-approval-conflict-recovery',async()=>{
|
|
33
|
+
await go('exceptions','approval');assert(await page.getByRole('button',{name:'通过 M-002',exact:true}).isDisabled());for(const id of ['M-001','M-003'])await page.getByRole('checkbox',{name:`选择 ${id}`,exact:true}).click();await page.getByRole('button',{name:'批量通过',exact:true}).click();await page.getByRole('alert').waitFor();assert.equal(await page.getByRole('button',{name:'通过 M-001',exact:true}).count(),0);await page.getByRole('button',{name:'批量通过',exact:true}).click();assert.equal(await page.getByRole('button',{name:'通过 M-003',exact:true}).count(),0);
|
|
34
|
+
await nav('冲突与恢复','工作事项');await page.getByRole('button',{name:'编辑 M-001',exact:true}).click();await page.locator('#name').fill('恢复草稿');await page.locator('#save').click();await page.locator('#reload').click();await page.getByRole('button',{name:'保留草稿',exact:true}).click();await page.keyboard.press('Escape');await nav('查询与详情');await nav('冲突与恢复','工作事项');await page.getByRole('button',{name:'继续编辑草稿',exact:true}).click();assert.equal(await page.locator('#name').inputValue(),'恢复草稿');await page.locator('#reload').click();await page.getByRole('button',{name:'放弃并重新加载',exact:true}).click();assert.equal(await page.locator('#version').textContent(),'2');await page.locator('#save').click();await page.getByText('保存成功(本地模拟)。',{exact:true}).waitFor();
|
|
35
|
+
});
|
|
36
|
+
await check('W10-T05-analysis-tabs',async()=>{
|
|
37
|
+
await go('primary','analysis');await page.locator('#keyword').fill('张明');assert.equal(await page.locator('.metric-value').first().textContent(),'8');await page.getByRole('button',{name:'定位 M-001',exact:true}).click();await page.getByRole('region',{name:'定位资料',exact:true}).waitFor();await page.getByRole('tab',{name:'概览',exact:true}).focus();await page.keyboard.press('ArrowRight');await page.getByRole('tabpanel').filter({hasText:'表格可横向滚动'}).waitFor();assert.equal(await page.locator('tbody tr').count(),8);if(width<768){await page.locator('.dense-region').focus();await page.keyboard.press('ArrowRight');await page.waitForFunction(()=>document.querySelector('.dense-region').scrollLeft>0);}await layout(page);await capture('analysis');
|
|
38
|
+
});
|
|
39
|
+
await check('W11-new-controls-cache-overlay-reset',async()=>{
|
|
40
|
+
await go('primary','owner-validity');await page.locator('#validity-name').fill('负责人草稿');await page.locator('#form-owner').fill('U-002');await page.getByRole('option',{name:'张明 · U-002',exact:true}).click();await nav('组合查询');await page.locator('#query-owner').fill('U-001');await page.getByRole('option',{name:'张明 · U-001',exact:true}).click();await page.getByRole('button',{name:'应用查询',exact:true}).click();
|
|
41
|
+
await page.locator('#query-range').click();if(width>=768){await tag('owner-validity').click();}else{await page.goBack();await page.locator('#validity-name').waitFor();}await page.waitForFunction(()=>!document.querySelector('[data-slot="popover-content"]'));assert.equal(await page.locator('#validity-name').inputValue(),'负责人草稿');assert.match(await page.locator('#form-owner-selected').textContent(),/U-002/);await nav('组合查询');assert.match(await page.locator('#applied-query').textContent(),/U-001/);
|
|
42
|
+
await reset(page);await reset(page);assert.equal(await tag('owner-validity').count(),0);await nav('负责人及有效期表单');assert.equal(await page.locator('#validity-name').inputValue(),'');await page.reload();assert.equal(await page.locator('#validity-name').inputValue(),'');
|
|
43
|
+
});
|
|
44
|
+
await check('W12-strict-entry-history',async()=>{
|
|
45
|
+
await go('exceptions','multi-step');await page.locator('#name').fill('历史草稿');await nav('查询与详情');await page.goBack();assert.equal(await page.locator('#name').inputValue(),'历史草稿');await page.goForward();await page.locator('#keyword').waitFor();
|
|
46
|
+
for(const query of ['?page=','?page=unknown','?page=multi-step&page=list-detail','?other=x']){await page.goto(entry('workspace').replace('#scenario=primary',query+'#scenario=primary'));await page.getByRole('alert').waitFor();}
|
|
47
|
+
await go('unknown');await page.getByRole('alert').waitFor();await go();await page.locator('#keyword').waitFor();
|
|
48
|
+
});
|
|
49
|
+
await check('W13-W14-T07-offline-layout-reset',async()=>{await go();await layout(page);assert.equal(await page.evaluate(()=>matchMedia('(prefers-reduced-motion: reduce)').matches),true);await capture('workspace');});
|
|
50
|
+
});
|