@shanyucoder/flowgrid 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +194 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/IntegrationContext.cs +56 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/IntegrationGen.csproj +16 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/NameUtil.cs +18 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Program.cs +265 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/application_service.cs.scriban +27 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/handoff.md.scriban +15 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/infrastructure_mock.cs.scriban +20 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/presenter.cs.scriban +41 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/Templates/service_test.cs.scriban +17 -0
- package/adapters/dotnet-integration/codegen/runners/IntegrationGen/YamlMap.cs +49 -0
- package/adapters/dotnet-integration/registries/dotnet-integration.codegen.registry.json +8 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/LineContext.cs +43 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/LineGen.csproj +16 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/NameUtil.cs +12 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Program.cs +201 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/TemplateRenderer.cs +22 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/handoff.md.scriban +15 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/service.cs.scriban +21 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/service_interface.cs.scriban +20 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/view_model.cs.scriban +28 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/Templates/view_model_test.cs.scriban +22 -0
- package/adapters/dotnet-line/codegen/runners/LineGen/YamlMap.cs +49 -0
- package/adapters/dotnet-line/registries/dotnet-line.codegen.registry.json +8 -0
- package/adapters/fastapi/codegen/runners/fast_gen/__init__.py +1 -0
- package/adapters/fastapi/codegen/runners/fast_gen/__main__.py +3 -0
- package/adapters/fastapi/codegen/runners/fast_gen/cli.py +175 -0
- package/adapters/fastapi/codegen/runners/fast_gen/plan.py +285 -0
- package/adapters/fastapi/codegen/runners/fast_gen/read_spec.py +34 -0
- package/adapters/fastapi/codegen/runners/fast_gen/registry.py +9 -0
- package/adapters/fastapi/codegen/runners/fast_gen/wire.py +28 -0
- package/adapters/fastapi/codegen/runners/fast_gen/write_files.py +232 -0
- package/adapters/fastapi/codegen/runners/generate +5 -0
- package/adapters/fastapi/codegen/runners/validate-registry.mjs +54 -0
- package/adapters/fastapi/codegen/templates/presenter.py.j2 +11 -0
- package/adapters/fastapi/codegen/templates/router.py.j2 +69 -0
- package/adapters/fastapi/codegen/templates/schemas_request.py.j2 +26 -0
- package/adapters/fastapi/codegen/templates/schemas_response.py.j2 +7 -0
- package/adapters/fastapi/codegen/templates/service_create.py.j2 +10 -0
- package/adapters/fastapi/codegen/templates/service_delete.py.j2 +10 -0
- package/adapters/fastapi/codegen/templates/service_search.py.j2 +9 -0
- package/adapters/fastapi/codegen/templates/service_update.py.j2 +11 -0
- package/adapters/fastapi/codegen/templates/store.py.j2 +1 -0
- package/adapters/fastapi/codegen/templates/test_router.py.j2 +13 -0
- package/adapters/fastapi/registries/codegen.registry.json +47 -0
- package/adapters/fastapi/registries/common.registry.json +23 -0
- package/adapters/fastapi/registries/unit-test.registry.json +12 -0
- package/adapters/fastapi/unitgen/runners/fast_unit_gen/__init__.py +1 -0
- package/adapters/fastapi/unitgen/runners/fast_unit_gen/cli.py +188 -0
- package/adapters/fastapi/unitgen/runners/generate +5 -0
- package/adapters/fastapi/unitgen/runners/validate-registry.mjs +48 -0
- package/adapters/fastapi/unitgen/templates/test_service.py.j2 +12 -0
- package/adapters/laravel/codegen/runners/README.md +45 -0
- package/adapters/laravel/codegen/runners/generate.mjs +296 -0
- package/adapters/laravel/codegen/runners/lib/codegen-registry.mjs +60 -0
- package/adapters/laravel/codegen/runners/lib/detect-existing.mjs +84 -0
- package/adapters/laravel/codegen/runners/lib/exec-artisan.mjs +86 -0
- package/adapters/laravel/codegen/runners/lib/parse-tags.mjs +49 -0
- package/adapters/laravel/codegen/runners/lib/plan.mjs +122 -0
- package/adapters/laravel/codegen/runners/lib/read-spec.mjs +30 -0
- package/adapters/laravel/codegen/runners/lib/resolve-commands.mjs +234 -0
- package/adapters/laravel/codegen/runners/lib/stub-services.mjs +91 -0
- package/adapters/laravel/codegen/runners/lib/tag-plan.mjs +155 -0
- package/adapters/laravel/codegen/runners/lib/validate.mjs +77 -0
- package/adapters/laravel/codegen/runners/lib/workspace-analysis.mjs +202 -0
- package/adapters/laravel/codegen/runners/lib/write-handoff.mjs +149 -0
- package/adapters/laravel/codegen/runners/lib/write-manifest.mjs +81 -0
- package/adapters/laravel/codegen/runners/validate-registry.mjs +52 -0
- package/adapters/laravel/php/README.md +26 -0
- package/adapters/laravel/php/bin/unit-gen.php +307 -0
- package/adapters/laravel/php/bin/validate-registry.php +61 -0
- package/adapters/laravel/php/composer.json +16 -0
- package/adapters/laravel/php/src/ArtisanRunner.php +56 -0
- package/adapters/laravel/php/src/Autoload.php +15 -0
- package/adapters/laravel/php/src/CodegenManifest.php +28 -0
- package/adapters/laravel/php/src/ParseTags.php +62 -0
- package/adapters/laravel/php/src/ProjectResolver.php +100 -0
- package/adapters/laravel/php/src/SpecExtract.php +193 -0
- package/adapters/laravel/php/src/SpecReader.php +57 -0
- package/adapters/laravel/php/src/TemplateRenderer.php +134 -0
- package/adapters/laravel/php/src/UnitPlanner.php +396 -0
- package/adapters/laravel/php/src/UnitRegistry.php +100 -0
- package/adapters/laravel/php/src/WhenEval.php +111 -0
- package/adapters/laravel/php/src/WorkspaceInspector.php +240 -0
- package/adapters/laravel/php/src/WriteFiles.php +194 -0
- package/adapters/laravel/php/templates/actions/relationship-sync.behavior.test.php.stub +50 -0
- package/adapters/laravel/php/templates/controllers/controller-invoke.test.php.stub +34 -0
- package/adapters/laravel/php/templates/queries/chain-scope.behavior.test.php.stub +34 -0
- package/adapters/laravel/php/templates/requests/default-per-page.behavior.test.php.stub +19 -0
- package/adapters/laravel/php/templates/requests/request-enriched.test.php.stub +66 -0
- package/adapters/laravel/php/templates/requests/rules-keys.behavior.test.php.stub +19 -0
- package/adapters/laravel/php/templates/resources/nested-relations.behavior.test.php.stub +25 -0
- package/adapters/laravel/php/templates/resources/openapi-shape.behavior.test.php.stub +28 -0
- package/adapters/laravel/php/templates/support/ModuleTestSupport.php.stub +32 -0
- package/adapters/laravel/registries/codegen.registry.json +190 -0
- package/adapters/laravel/registries/unit-test.registry.json +179 -0
- package/adapters/laravel/shared/project.mjs +62 -0
- package/adapters/nestjs/README.md +16 -0
- package/adapters/nestjs/nest-unitgen/runners/README.md +17 -0
- package/adapters/nestjs/nest-unitgen/runners/generate.mjs +113 -0
- package/adapters/nestjs/nest-unitgen/runners/lib/render.mjs +14 -0
- package/adapters/nestjs/nest-unitgen/runners/lib/write-files.mjs +40 -0
- package/adapters/nestjs/nest-unitgen/runners/validate-registry.mjs +35 -0
- package/adapters/nestjs/nest-unitgen/templates/commands/create.handler.spec.ts.hbs +32 -0
- package/adapters/nestjs/nest-unitgen/templates/commands/delete.handler.spec.ts.hbs +32 -0
- package/adapters/nestjs/nest-unitgen/templates/commands/update.handler.spec.ts.hbs +32 -0
- package/adapters/nestjs/nest-unitgen/templates/handlers/search.handler.spec.ts.hbs +33 -0
- package/adapters/nestjs/nest-unitgen/templates/resource/entity.resource.spec.ts.hbs +22 -0
- package/adapters/nestjs/nestgen/runners/README.md +30 -0
- package/adapters/nestjs/nestgen/runners/generate.mjs +87 -0
- package/adapters/nestjs/nestgen/runners/lib/orm-fields.mjs +253 -0
- package/adapters/nestjs/nestgen/runners/lib/plan.mjs +124 -0
- package/adapters/nestjs/nestgen/runners/lib/read-spec.mjs +52 -0
- package/adapters/nestjs/nestgen/runners/lib/render.mjs +52 -0
- package/adapters/nestjs/nestgen/runners/lib/workspace-analysis.mjs +80 -0
- package/adapters/nestjs/nestgen/runners/lib/write-files.mjs +49 -0
- package/adapters/nestjs/nestgen/runners/validate-registry.mjs +36 -0
- package/adapters/nestjs/nestgen/templates/commands/create.command.ts.hbs +3 -0
- package/adapters/nestjs/nestgen/templates/commands/create.handler.ts.hbs +34 -0
- package/adapters/nestjs/nestgen/templates/commands/delete.command.ts.hbs +3 -0
- package/adapters/nestjs/nestgen/templates/commands/delete.handler.ts.hbs +33 -0
- package/adapters/nestjs/nestgen/templates/commands/update.command.ts.hbs +6 -0
- package/adapters/nestjs/nestgen/templates/commands/update.handler.ts.hbs +34 -0
- package/adapters/nestjs/nestgen/templates/entity.controller.ts.hbs +51 -0
- package/adapters/nestjs/nestgen/templates/entity.resource.ts.hbs +45 -0
- package/adapters/nestjs/nestgen/templates/module.module.ts.hbs +38 -0
- package/adapters/nestjs/nestgen/templates/orm/prisma.entity.ts.hbs +10 -0
- package/adapters/nestjs/nestgen/templates/orm/prisma.model.prisma.hbs +9 -0
- package/adapters/nestjs/nestgen/templates/orm/typeorm.entity.ts.hbs +20 -0
- package/adapters/nestjs/nestgen/templates/queries/search.handler.ts.hbs +36 -0
- package/adapters/nestjs/nestgen/templates/queries/search.query.ts.hbs +3 -0
- package/adapters/nestjs/registries/nest-codegen.registry.json +41 -0
- package/adapters/nestjs/registries/nest-unit-test.registry.json +31 -0
- package/adapters/nextjs/codegen/runners/README.md +68 -0
- package/adapters/nextjs/codegen/runners/generate.mjs +236 -0
- package/adapters/nextjs/codegen/runners/lib/component-resolve.mjs +79 -0
- package/adapters/nextjs/codegen/runners/lib/design-registry.mjs +333 -0
- package/adapters/nextjs/codegen/runners/lib/naming.mjs +236 -0
- package/adapters/nextjs/codegen/runners/lib/page-lifecycle.mjs +258 -0
- package/adapters/nextjs/codegen/runners/lib/plan.mjs +399 -0
- package/adapters/nextjs/codegen/runners/lib/read-spec.mjs +7 -0
- package/adapters/nextjs/codegen/runners/lib/render.mjs +47 -0
- package/adapters/nextjs/codegen/runners/lib/resolve-hub-id.mjs +288 -0
- package/adapters/nextjs/codegen/runners/lib/slots.mjs +121 -0
- package/adapters/nextjs/codegen/runners/lib/web-paths.mjs +64 -0
- package/adapters/nextjs/codegen/runners/lib/write-files.mjs +106 -0
- package/adapters/nextjs/codegen/runners/validate-registry.mjs +99 -0
- package/adapters/nextjs/codegen/templates/common/confirm-dialog.hbs +81 -0
- package/adapters/nextjs/codegen/templates/common/delete-flow.hbs +106 -0
- package/adapters/nextjs/codegen/templates/create/form.tsx.hbs +45 -0
- package/adapters/nextjs/codegen/templates/create/mock.ts.hbs +15 -0
- package/adapters/nextjs/codegen/templates/create/page.tsx.hbs +12 -0
- package/adapters/nextjs/codegen/templates/create/service.ts.hbs +25 -0
- package/adapters/nextjs/codegen/templates/create/useForm.ts.hbs +59 -0
- package/adapters/nextjs/codegen/templates/create/validation.ts.hbs +16 -0
- package/adapters/nextjs/codegen/templates/list/mock.ts.hbs +25 -0
- package/adapters/nextjs/codegen/templates/list/page.custom.tsx.hbs +65 -0
- package/adapters/nextjs/codegen/templates/list/page.tsx.hbs +37 -0
- package/adapters/nextjs/codegen/templates/list/service.ts.hbs +37 -0
- package/adapters/nextjs/codegen/templates/list/useList.ts.hbs +93 -0
- package/adapters/nextjs/codegen/templates/list/useListColumns.ts.hbs +27 -0
- package/adapters/nextjs/codegen/templates/list/useListExport.ts.hbs +31 -0
- package/adapters/nextjs/codegen/templates/list/useListFilters.ts.hbs +50 -0
- package/adapters/nextjs/codegen/templates/store/store.ts.hbs +28 -0
- package/adapters/nextjs/contractgen/runners/README.md +47 -0
- package/adapters/nextjs/contractgen/runners/generate.mjs +108 -0
- package/adapters/nextjs/contractgen/runners/lib/field-zod.mjs +83 -0
- package/adapters/nextjs/contractgen/runners/lib/naming.mjs +46 -0
- package/adapters/nextjs/contractgen/runners/lib/plan.mjs +147 -0
- package/adapters/nextjs/contractgen/runners/lib/render.mjs +57 -0
- package/adapters/nextjs/contractgen/runners/lib/write-files.mjs +54 -0
- package/adapters/nextjs/contractgen/runners/validate-registry.mjs +54 -0
- package/adapters/nextjs/contractgen/templates/index.ts.hbs +8 -0
- package/adapters/nextjs/contractgen/templates/read.schema.ts.hbs +22 -0
- package/adapters/nextjs/contractgen/templates/relationships.meta.ts.hbs +23 -0
- package/adapters/nextjs/contractgen/templates/types.ts.hbs +15 -0
- package/adapters/nextjs/contractgen/templates/write.schema.ts.hbs +11 -0
- package/adapters/nextjs/registries/contract-field.registry.json +22 -0
- package/adapters/nextjs/unitgen/runners/README.md +12 -0
- package/adapters/nextjs/unitgen/runners/generate.mjs +201 -0
- package/adapters/nextjs/unitgen/runners/lib/parse-tags.mjs +67 -0
- package/adapters/nextjs/unitgen/runners/lib/plan.mjs +563 -0
- package/adapters/nextjs/unitgen/runners/lib/read-codegen.mjs +42 -0
- package/adapters/nextjs/unitgen/runners/lib/render.mjs +32 -0
- package/adapters/nextjs/unitgen/runners/lib/resolve-model.mjs +28 -0
- package/adapters/nextjs/unitgen/runners/lib/unit-registry.mjs +52 -0
- package/adapters/nextjs/unitgen/runners/lib/write-files.mjs +103 -0
- package/adapters/nextjs/unitgen/runners/lib/write-spec-tags.mjs +37 -0
- package/adapters/nextjs/unitgen/runners/validate-registry.mjs +74 -0
- package/adapters/nextjs/unitgen/templates/hooks/use-form.test.ts.hbs +51 -0
- package/adapters/nextjs/unitgen/templates/hooks/use-list.test.ts.hbs +63 -0
- package/adapters/nextjs/unitgen/templates/models/schema.test.ts.hbs +24 -0
- package/adapters/nextjs/unitgen/templates/services/service.create.test.ts.hbs +28 -0
- package/adapters/nextjs/unitgen/templates/services/service.export.test.ts.hbs +20 -0
- package/adapters/nextjs/unitgen/templates/services/service.search.test.ts.hbs +25 -0
- package/adapters/nextjs/unitgen/templates/services/service.wire.test.ts.hbs +37 -0
- package/adapters/nextjs/unitgen/templates/validations/schemas.test.ts.hbs +19 -0
- package/adapters/nuxt4/codegen/runners/README.md +83 -0
- package/adapters/nuxt4/codegen/runners/generate.mjs +236 -0
- package/adapters/nuxt4/codegen/runners/lib/component-resolve.mjs +66 -0
- package/adapters/nuxt4/codegen/runners/lib/design-registry.mjs +332 -0
- package/adapters/nuxt4/codegen/runners/lib/naming.mjs +246 -0
- package/adapters/nuxt4/codegen/runners/lib/page-lifecycle.mjs +254 -0
- package/adapters/nuxt4/codegen/runners/lib/plan.mjs +370 -0
- package/adapters/nuxt4/codegen/runners/lib/read-spec.mjs +7 -0
- package/adapters/nuxt4/codegen/runners/lib/render.mjs +47 -0
- package/adapters/nuxt4/codegen/runners/lib/resolve-hub-id.mjs +288 -0
- package/adapters/nuxt4/codegen/runners/lib/slots.mjs +121 -0
- package/adapters/nuxt4/codegen/runners/lib/write-files.mjs +106 -0
- package/adapters/nuxt4/codegen/runners/validate-registry.mjs +121 -0
- package/adapters/nuxt4/codegen/templates/create/form.vue.hbs +26 -0
- package/adapters/nuxt4/codegen/templates/create/mock.ts.hbs +11 -0
- package/adapters/nuxt4/codegen/templates/create/model.schema.ts.hbs +14 -0
- package/adapters/nuxt4/codegen/templates/create/model.types.ts.hbs +9 -0
- package/adapters/nuxt4/codegen/templates/create/page.vue.hbs +11 -0
- package/adapters/nuxt4/codegen/templates/create/service.ts.hbs +25 -0
- package/adapters/nuxt4/codegen/templates/create/useForm.ts.hbs +29 -0
- package/adapters/nuxt4/codegen/templates/create/validation.ts.hbs +12 -0
- package/adapters/nuxt4/codegen/templates/list/mock.ts.hbs +27 -0
- package/adapters/nuxt4/codegen/templates/list/model.index.ts.hbs +2 -0
- package/adapters/nuxt4/codegen/templates/list/model.schema.ts.hbs +16 -0
- package/adapters/nuxt4/codegen/templates/list/model.types.ts.hbs +9 -0
- package/adapters/nuxt4/codegen/templates/list/page.custom.vue.hbs +105 -0
- package/adapters/nuxt4/codegen/templates/list/page.vue.hbs +55 -0
- package/adapters/nuxt4/codegen/templates/list/service.ts.hbs +37 -0
- package/adapters/nuxt4/codegen/templates/list/useList.ts.hbs +82 -0
- package/adapters/nuxt4/codegen/templates/list/useListColumns.ts.hbs +21 -0
- package/adapters/nuxt4/codegen/templates/list/useListExport.ts.hbs +26 -0
- package/adapters/nuxt4/codegen/templates/list/useListFilters.ts.hbs +45 -0
- package/adapters/nuxt4/codegen/templates/partials/component-stub.vue.hbs +44 -0
- package/adapters/nuxt4/codegen/templates/store/store.ts.hbs +30 -0
- package/adapters/nuxt4/unitgen/runners/README.md +12 -0
- package/adapters/nuxt4/unitgen/runners/generate.mjs +201 -0
- package/adapters/nuxt4/unitgen/runners/lib/parse-tags.mjs +49 -0
- package/adapters/nuxt4/unitgen/runners/lib/plan.mjs +567 -0
- package/adapters/nuxt4/unitgen/runners/lib/read-codegen.mjs +42 -0
- package/adapters/nuxt4/unitgen/runners/lib/render.mjs +32 -0
- package/adapters/nuxt4/unitgen/runners/lib/unit-registry.mjs +52 -0
- package/adapters/nuxt4/unitgen/runners/lib/write-files.mjs +103 -0
- package/adapters/nuxt4/unitgen/runners/lib/write-spec-tags.mjs +37 -0
- package/adapters/nuxt4/unitgen/runners/validate-registry.mjs +74 -0
- package/adapters/nuxt4/unitgen/templates/composables/use-form.test.ts.hbs +56 -0
- package/adapters/nuxt4/unitgen/templates/composables/use-list.test.ts.hbs +59 -0
- package/adapters/nuxt4/unitgen/templates/models/schema.test.ts.hbs +24 -0
- package/adapters/nuxt4/unitgen/templates/services/service.create.test.ts.hbs +28 -0
- package/adapters/nuxt4/unitgen/templates/services/service.export.test.ts.hbs +20 -0
- package/adapters/nuxt4/unitgen/templates/services/service.search.test.ts.hbs +25 -0
- package/adapters/nuxt4/unitgen/templates/services/service.wire.test.ts.hbs +37 -0
- package/adapters/nuxt4/unitgen/templates/validations/schemas.test.ts.hbs +19 -0
- package/adapters/shared/common-gen.mjs +599 -0
- package/adapters/shared/common-ui.catalog.json +224 -0
- package/adapters/shared/css-adapters/shadcn.mjs +56 -0
- package/adapters/shared/css-adapters/winforms.mjs +46 -0
- package/adapters/shared/css-gen.mjs +87 -0
- package/adapters/shared/fe-layout-profiles.mjs +74 -0
- package/adapters/shared/fe-ui-inventory.mjs +62 -0
- package/adapters/shared/i18n-merge.mjs +56 -0
- package/adapters/shared/read-fe-ir.mjs +64 -0
- package/adapters/shared/resolve-cli.mjs +16 -0
- package/adapters/shared/resolve-hub-id.mjs +381 -0
- package/adapters/shared/surface-common.mjs +41 -0
- package/bin/flowgrid-mcp.mjs +29 -0
- package/bin/flowgrid.mjs +915 -0
- package/bin/lib/agent-mcp.mjs +70 -0
- package/bin/lib/agent-profiles.mjs +127 -0
- package/bin/lib/audit-run.mjs +96 -0
- package/bin/lib/cli-update.mjs +254 -0
- package/bin/lib/doctor.mjs +163 -0
- package/bin/lib/harness-overlay.mjs +80 -0
- package/bin/lib/harness-sync.mjs +427 -0
- package/bin/lib/init-scaffold.mjs +158 -0
- package/bin/lib/npm-registry.mjs +45 -0
- package/bin/lib/project-gitignore.mjs +39 -0
- package/dist/codegen/adapters/run-be.d.ts +13 -0
- package/dist/codegen/adapters/run-be.js +190 -0
- package/dist/codegen/adapters/run-be.js.map +1 -0
- package/dist/codegen/adapters/run.d.ts +44 -0
- package/dist/codegen/adapters/run.js +146 -0
- package/dist/codegen/adapters/run.js.map +1 -0
- package/dist/codegen/config/project-root.d.ts +13 -0
- package/dist/codegen/config/project-root.js +64 -0
- package/dist/codegen/config/project-root.js.map +1 -0
- package/dist/codegen/mcp/tools.d.ts +2 -0
- package/dist/codegen/mcp/tools.js +138 -0
- package/dist/codegen/mcp/tools.js.map +1 -0
- package/dist/codegen/registries/common.d.ts +28 -0
- package/dist/codegen/registries/common.js +54 -0
- package/dist/codegen/registries/common.js.map +1 -0
- package/dist/dna/config/project-root.d.ts +12 -0
- package/dist/dna/config/project-root.js +41 -0
- package/dist/dna/config/project-root.js.map +1 -0
- package/dist/dna/profile/detect.d.ts +14 -0
- package/dist/dna/profile/detect.js +159 -0
- package/dist/dna/profile/detect.js.map +1 -0
- package/dist/dna/profile/manifest.d.ts +17 -0
- package/dist/dna/profile/manifest.js +10 -0
- package/dist/dna/profile/manifest.js.map +1 -0
- package/dist/docs/cli/engines.d.ts +13 -0
- package/dist/docs/cli/engines.js +53 -0
- package/dist/docs/cli/engines.js.map +1 -0
- package/dist/docs/config/docs-root.d.ts +8 -0
- package/dist/docs/config/docs-root.js +66 -0
- package/dist/docs/config/docs-root.js.map +1 -0
- package/dist/docs/mcp/tools.d.ts +2 -0
- package/dist/docs/mcp/tools.js +351 -0
- package/dist/docs/mcp/tools.js.map +1 -0
- package/dist/docs/scan/ids.d.ts +29 -0
- package/dist/docs/scan/ids.js +237 -0
- package/dist/docs/scan/ids.js.map +1 -0
- package/dist/docs/scan/links.d.ts +10 -0
- package/dist/docs/scan/links.js +98 -0
- package/dist/docs/scan/links.js.map +1 -0
- package/dist/docs/scan/route.d.ts +8 -0
- package/dist/docs/scan/route.js +114 -0
- package/dist/docs/scan/route.js.map +1 -0
- package/dist/graph/analyze/analyze-bullets.d.ts +17 -0
- package/dist/graph/analyze/analyze-bullets.js +137 -0
- package/dist/graph/analyze/analyze-bullets.js.map +1 -0
- package/dist/graph/analyze/analyze-spec.d.ts +12 -0
- package/dist/graph/analyze/analyze-spec.js +249 -0
- package/dist/graph/analyze/analyze-spec.js.map +1 -0
- package/dist/graph/analyze/api-routes.d.ts +66 -0
- package/dist/graph/analyze/api-routes.js +370 -0
- package/dist/graph/analyze/api-routes.js.map +1 -0
- package/dist/graph/analyze/context-orphan.d.ts +12 -0
- package/dist/graph/analyze/context-orphan.js +229 -0
- package/dist/graph/analyze/context-orphan.js.map +1 -0
- package/dist/graph/analyze/grill-check.d.ts +31 -0
- package/dist/graph/analyze/grill-check.js +92 -0
- package/dist/graph/analyze/grill-check.js.map +1 -0
- package/dist/graph/analyze/parity-check.d.ts +25 -0
- package/dist/graph/analyze/parity-check.js +406 -0
- package/dist/graph/analyze/parity-check.js.map +1 -0
- package/dist/graph/analyze/product-paths.d.ts +13 -0
- package/dist/graph/analyze/product-paths.js +29 -0
- package/dist/graph/analyze/product-paths.js.map +1 -0
- package/dist/graph/analyze/surface-paths.d.ts +13 -0
- package/dist/graph/analyze/surface-paths.js +29 -0
- package/dist/graph/analyze/surface-paths.js.map +1 -0
- package/dist/graph/config/load-config.d.ts +30 -0
- package/dist/graph/config/load-config.js +112 -0
- package/dist/graph/config/load-config.js.map +1 -0
- package/dist/graph/config/platform-repos.d.ts +36 -0
- package/dist/graph/config/platform-repos.js +124 -0
- package/dist/graph/config/platform-repos.js.map +1 -0
- package/dist/graph/config/resolve-paths.d.ts +45 -0
- package/dist/graph/config/resolve-paths.js +121 -0
- package/dist/graph/config/resolve-paths.js.map +1 -0
- package/dist/graph/db/index-store.d.ts +67 -0
- package/dist/graph/db/index-store.js +179 -0
- package/dist/graph/db/index-store.js.map +1 -0
- package/dist/graph/gen/run-command.d.ts +40 -0
- package/dist/graph/gen/run-command.js +110 -0
- package/dist/graph/gen/run-command.js.map +1 -0
- package/dist/graph/lexicon/infer-lane.d.ts +11 -0
- package/dist/graph/lexicon/infer-lane.js +28 -0
- package/dist/graph/lexicon/infer-lane.js.map +1 -0
- package/dist/graph/lexicon/load-lexicon.d.ts +60 -0
- package/dist/graph/lexicon/load-lexicon.js +492 -0
- package/dist/graph/lexicon/load-lexicon.js.map +1 -0
- package/dist/graph/mcp/tools.d.ts +9 -0
- package/dist/graph/mcp/tools.js +326 -0
- package/dist/graph/mcp/tools.js.map +1 -0
- package/dist/graph/registry/load-registries.d.ts +27 -0
- package/dist/graph/registry/load-registries.js +111 -0
- package/dist/graph/registry/load-registries.js.map +1 -0
- package/dist/graph/types.d.ts +208 -0
- package/dist/graph/types.js +11 -0
- package/dist/graph/types.js.map +1 -0
- package/dist/test/config/project-root.d.ts +5 -0
- package/dist/test/config/project-root.js +29 -0
- package/dist/test/config/project-root.js.map +1 -0
- package/dist/test/engines/run.d.ts +10 -0
- package/dist/test/engines/run.js +16 -0
- package/dist/test/engines/run.js.map +1 -0
- package/dist/test/mcp/tools.d.ts +2 -0
- package/dist/test/mcp/tools.js +43 -0
- package/dist/test/mcp/tools.js.map +1 -0
- package/dist/test/optional/fallback-evidence.d.ts +34 -0
- package/dist/test/optional/fallback-evidence.js +103 -0
- package/dist/test/optional/fallback-evidence.js.map +1 -0
- package/engines/cases/README.md +12 -0
- package/engines/cases/check-coverage.mjs +103 -0
- package/engines/cases/check-plans.mjs +31 -0
- package/engines/cases/gate.mjs +215 -0
- package/engines/cases/lib/audit-tc-traceability.mjs +139 -0
- package/engines/cases/lib/list-case-yaml.mjs +27 -0
- package/engines/cases/lib/parse-bundle-traceability.mjs +77 -0
- package/engines/cases/lib/render-github-catalog.mjs +141 -0
- package/engines/cases/lib/resolve-bundle-from-screen.mjs +73 -0
- package/engines/cases/lib/screen-facet-coverage.mjs +42 -0
- package/engines/cases/lib/validate-tc-schema.mjs +61 -0
- package/engines/cases/publish.mjs +4 -0
- package/engines/cases/render-cases.mjs +182 -0
- package/engines/cases/vitepress/config.ts +171 -0
- package/engines/cases/vitepress/theme/custom.css +418 -0
- package/engines/cases/vitepress/theme/index.ts +46 -0
- package/engines/codegen/adapters/shadcn.mjs +58 -0
- package/engines/codegen/adapters/winforms.mjs +46 -0
- package/engines/codegen/tokens.mjs +64 -0
- package/engines/docs/lib/load-dev-base-url.mjs +38 -0
- package/engines/docs/lib/markdown-table.mjs +65 -0
- package/engines/docs/lib/render-bundle-markdown.mjs +95 -0
- package/engines/docs/lib/render-design-tables.mjs +695 -0
- package/engines/docs/lib/render-github-catalog.mjs +194 -0
- package/engines/docs/lib/render-qa-list.mjs +57 -0
- package/engines/docs/lib/render-spec-markdown.mjs +19 -0
- package/engines/docs/lib/render-template.mjs +76 -0
- package/engines/docs/lib/route-page-probe.mjs +54 -0
- package/engines/docs/publish.mjs +4 -0
- package/engines/docs/render-docs.mjs +195 -0
- package/engines/docs/vitepress/config.ts +442 -0
- package/engines/docs/vitepress/surfaces-nav.mjs +171 -0
- package/engines/docs/vitepress/theme/custom.css +418 -0
- package/engines/docs/vitepress/theme/index.ts +46 -0
- package/engines/openapi/build-openapi-ui.mjs +72 -0
- package/engines/openapi/build-swagger-ui.mjs +72 -0
- package/engines/openapi/check-backend-spec.mjs +66 -0
- package/engines/openapi/gen-openapi.mjs +337 -0
- package/engines/openapi/render-backend-spec.mjs +170 -0
- package/engines/openapi/render-openapi.mjs +155 -0
- package/engines/shared/flowgrid-tests-docs.mjs +32 -0
- package/engines/spec/extract-i18n.mjs +74 -0
- package/engines/spec/legacy-dynamics-validate.mjs +67 -0
- package/engines/spec/lib/audit-api-gaps.mjs +198 -0
- package/engines/spec/lib/audit-bundle-gaps.mjs +582 -0
- package/engines/spec/lib/audit-e2e-coverage.mjs +381 -0
- package/engines/spec/lib/audit-fe-be-alignment.mjs +183 -0
- package/engines/spec/lib/audit-flow-gaps.mjs +151 -0
- package/engines/spec/lib/audit-legacy-gaps.mjs +73 -0
- package/engines/spec/lib/audit-scenario-coverage.mjs +175 -0
- package/engines/spec/lib/audit-testcase-bundle-cross.mjs +145 -0
- package/engines/spec/lib/audit-testcase-gaps.mjs +79 -0
- package/engines/spec/lib/audit-testcase-plan-gaps.mjs +131 -0
- package/engines/spec/lib/audit-testcase-tc.mjs +182 -0
- package/engines/spec/lib/audit-ux-affordance.mjs +269 -0
- package/engines/spec/lib/bundle-ir.mjs +360 -0
- package/engines/spec/lib/bundle-schema.mjs +199 -0
- package/engines/spec/lib/collect-screen-api-intents.mjs +69 -0
- package/engines/spec/lib/hydrate-design-api.mjs +58 -0
- package/engines/spec/lib/open-qa.mjs +66 -0
- package/engines/spec/lib/project-business-layout.mjs +214 -0
- package/engines/spec/lib/testcase-matrix-facets.mjs +9 -0
- package/engines/spec/merge-bundle.mjs +27 -0
- package/engines/spec/normalize-bundle-gen.mjs +69 -0
- package/engines/spec/split-all.mjs +78 -0
- package/engines/spec/split-bundle.mjs +45 -0
- package/engines/template-builder/runner.mjs +96 -0
- package/engines/template-builder/scanner.mjs +138 -0
- package/engines/testcase/_staging-from-portal/README-STAGING.md +13 -0
- package/engines/testcase/_staging-from-portal/runners/README.md +15 -0
- package/engines/testcase/_staging-from-portal/runners/generate.mjs +123 -0
- package/engines/testcase/_staging-from-portal/runners/lib/e2e-registry.mjs +77 -0
- package/engines/testcase/_staging-from-portal/runners/lib/plan.mjs +97 -0
- package/engines/testcase/_staging-from-portal/runners/lib/read-testcase.mjs +166 -0
- package/engines/testcase/_staging-from-portal/runners/lib/render.mjs +18 -0
- package/engines/testcase/_staging-from-portal/runners/lib/semantic-plan.mjs +178 -0
- package/engines/testcase/_staging-from-portal/runners/lib/write-files.mjs +42 -0
- package/engines/testcase/_staging-from-portal/runners/validate-registry.mjs +75 -0
- package/engines/testcase/_staging-from-portal/templates/page.ts.hbs +52 -0
- package/engines/testcase/_staging-from-portal/templates/partials/README.md +5 -0
- package/engines/testcase/_staging-from-portal/templates/spec.ts.hbs +214 -0
- package/engines/testcase/runners/README.md +27 -0
- package/engines/testcase/runners/generate-api.mjs +121 -0
- package/engines/testcase/runners/generate.mjs +161 -0
- package/engines/testcase/runners/lib/api-plan.mjs +64 -0
- package/engines/testcase/runners/lib/e2e-registry.mjs +77 -0
- package/engines/testcase/runners/lib/plan.mjs +123 -0
- package/engines/testcase/runners/lib/read-spec.mjs +37 -0
- package/engines/testcase/runners/lib/read-testcase.mjs +179 -0
- package/engines/testcase/runners/lib/render.mjs +18 -0
- package/engines/testcase/runners/lib/resolve-hub-id.mjs +324 -0
- package/engines/testcase/runners/lib/semantic-plan.mjs +178 -0
- package/engines/testcase/runners/lib/write-files.mjs +145 -0
- package/engines/testcase/runners/validate-registry.mjs +75 -0
- package/engines/testcase/templates/api.spec.ts.hbs +40 -0
- package/engines/testcase/templates/page.ts.hbs +69 -0
- package/engines/testcase/templates/partials/README.md +5 -0
- package/engines/testcase/templates/spec.ts.hbs +231 -0
- package/harness/agents/claude/rules/claude-flowgrid.mdc +9 -0
- package/harness/agents/cursor/rules/cursor-flowgrid.mdc +9 -0
- package/harness/agents/gemini_antigravity/rules/antigravity-mcp.mdc +10 -0
- package/harness/agents/kiro/rules/kiro-flowgrid.mdc +9 -0
- package/harness/be/adapters/dotnet-integration/skills/framework-rules-be/SKILL.md +21 -0
- package/harness/be/adapters/fastapi/skills/framework-rules-be/SKILL.md +27 -0
- package/harness/be/adapters/laravel/skills/framework-rules-be/SKILL.md +27 -0
- package/harness/be/extracts/artifactgraph-hooks-be.md +21 -0
- package/harness/be/extracts/risk-classes.md +69 -0
- package/harness/be/skills/api/SKILL.md +116 -0
- package/harness/be/skills/api-unit/SKILL.md +76 -0
- package/harness/be/skills/grill-api/SKILL.md +69 -0
- package/harness/be/skills/grill-api-unit/SKILL.md +57 -0
- package/harness/common/extracts/artifact-graph.md +23 -0
- package/harness/common/extracts/artifactgraph-hooks-core.md +17 -0
- package/harness/common/extracts/artifactgraph-phase-hooks.md +106 -0
- package/harness/common/extracts/core/agent-discipline.md +8 -0
- package/harness/common/extracts/docs-mark-detect.md +48 -0
- package/harness/common/extracts/docs-mark.md +62 -0
- package/harness/common/extracts/extract-registry.json +29 -0
- package/harness/common/extracts/ux-common-patterns.md +172 -0
- package/harness/common/rules/artifactgraph.mdc +26 -0
- package/harness/common/rules/cross-repo-index.mdc +47 -0
- package/harness/common/rules/flowgrid-ux-common.mdc +39 -0
- package/harness/common/rules/platform-code-size.mdc +24 -0
- package/harness/common/rules/team-flow-harness-state.mdc +12 -0
- package/harness/common/skills/business-impact-review/SKILL.md +106 -0
- package/harness/common/skills/configure-repo-maps/SKILL.md +58 -0
- package/harness/common/skills/docs-mark/SKILL.md +67 -0
- package/harness/common/skills/legacy/SKILL.md +29 -0
- package/harness/common/skills/ui-proposal/SKILL.md +28 -0
- package/harness/docs/extracts/agent-execution-protocol.md +31 -0
- package/harness/docs/extracts/architecture-core.md +71 -0
- package/harness/docs/extracts/artifactgraph-hooks-docs.md +15 -0
- package/harness/docs/extracts/artifactgraph-parity.md +10 -0
- package/harness/docs/extracts/business-process-trace.md +66 -0
- package/harness/docs/extracts/codegen/readiness.md +8 -0
- package/harness/docs/extracts/common-scope.md +65 -0
- package/harness/docs/extracts/docs-phase-hooks.md +22 -0
- package/harness/docs/extracts/extract-registry.docs.json +45 -0
- package/harness/docs/extracts/extract-registry.flowgrid-process.json +12 -0
- package/harness/docs/extracts/grill/validation.md +9 -0
- package/harness/docs/extracts/grill-docs-reconcile.md +5 -0
- package/harness/docs/extracts/qa-inbox.md +36 -0
- package/harness/docs/extracts/risk-classes.md +69 -0
- package/harness/docs/extracts/spec-core.md +5 -0
- package/harness/docs/extracts/spec-requirement.md +5 -0
- package/harness/docs/extracts/tpl-adr.md +23 -0
- package/harness/docs/extracts/tpl-arc42-chapter.md +29 -0
- package/harness/docs/extracts/tpl-cross-cutting.md +24 -0
- package/harness/docs/extracts/tpl-deployment.md +23 -0
- package/harness/docs/extracts/tpl-module.md +33 -0
- package/harness/docs/extracts/update-spec-delta.md +5 -0
- package/harness/docs/rules/agent-compliance.mdc +26 -0
- package/harness/docs/rules/docs-hub.mdc +54 -0
- package/harness/docs/rules/flowgrid-process.mdc +25 -0
- package/harness/docs/rules/team-flow-grill.mdc +31 -0
- package/harness/docs/rules/team-flow-harness-state.mdc +16 -0
- package/harness/docs/rules/team-flow-spec.mdc +36 -0
- package/harness/docs/schemas/flowgrid-docs/backend-api.schema.json +175 -0
- package/harness/docs/schemas/flowgrid-docs/missing-optional-event.schema.json +39 -0
- package/harness/docs/schemas/flowgrid-docs/spec.schema.json +643 -0
- package/harness/docs/schemas/flowgrid-docs/testcase.schema.json +29 -0
- package/harness/docs/schemas/flowgrid-process/missing-optional-event.schema.json +39 -0
- package/harness/docs/skills/adopt/SKILL.md +140 -0
- package/harness/docs/skills/api/SKILL.md +40 -0
- package/harness/docs/skills/api-integration/SKILL.md +110 -0
- package/harness/docs/skills/api-spec/SKILL.md +136 -0
- package/harness/docs/skills/api-update/SKILL.md +82 -0
- package/harness/docs/skills/architecture/SKILL.md +57 -0
- package/harness/docs/skills/architecture-grill/SKILL.md +29 -0
- package/harness/docs/skills/background-logic/SKILL.md +100 -0
- package/harness/docs/skills/build-templates/SKILL.md +47 -0
- package/harness/docs/skills/business-process/SKILL.md +109 -0
- package/harness/docs/skills/call-external/SKILL.md +32 -0
- package/harness/docs/skills/common/SKILL.md +46 -0
- package/harness/docs/skills/common-spec/SKILL.md +55 -0
- package/harness/docs/skills/cross-cutting/SKILL.md +33 -0
- package/harness/docs/skills/cross-entity-service/SKILL.md +32 -0
- package/harness/docs/skills/cross-service/SKILL.md +37 -0
- package/harness/docs/skills/db-erd/SKILL.md +29 -0
- package/harness/docs/skills/decision/SKILL.md +30 -0
- package/harness/docs/skills/deployment/SKILL.md +34 -0
- package/harness/docs/skills/docs-hub/SKILL.md +65 -0
- package/harness/docs/skills/grill/SKILL.md +46 -0
- package/harness/docs/skills/grill-api/SKILL.md +26 -0
- package/harness/docs/skills/grill-api-spec/SKILL.md +57 -0
- package/harness/docs/skills/grill-bqa/SKILL.md +119 -0
- package/harness/docs/skills/grill-common-spec/SKILL.md +43 -0
- package/harness/docs/skills/grill-dev/SKILL.md +172 -0
- package/harness/docs/skills/grill-docs/SKILL.md +79 -0
- package/harness/docs/skills/grill-integration-spec/SKILL.md +51 -0
- package/harness/docs/skills/module/SKILL.md +58 -0
- package/harness/docs/skills/openapi/SKILL.md +37 -0
- package/harness/docs/skills/overview/SKILL.md +42 -0
- package/harness/docs/skills/qa-resolve/SKILL.md +91 -0
- package/harness/docs/skills/spec/SKILL.md +240 -0
- package/harness/docs/skills/surfaces/SKILL.md +52 -0
- package/harness/docs/skills/update-spec/SKILL.md +83 -0
- package/harness/fe/adapters/dotnet-line/skills/framework-rules/SKILL.md +27 -0
- package/harness/fe/adapters/nextjs/skills/framework-rules/SKILL.md +29 -0
- package/harness/fe/adapters/nuxt4/skills/framework-rules/SKILL.md +33 -0
- package/harness/fe/extracts/artifactgraph-hooks-fe.md +15 -0
- package/harness/fe/extracts/risk-classes.md +69 -0
- package/harness/fe/rules/cross-repo-index-routing.mdc +24 -0
- package/harness/fe/rules/flowgrid-test-optional-accelerators.mdc +21 -0
- package/harness/fe/rules/platform-code-size.mdc +43 -0
- package/harness/fe/rules/platform-design-vocabulary.mdc +33 -0
- package/harness/fe/rules/team-flow-prototype.mdc +32 -0
- package/harness/fe/rules/team-flow-unit.mdc +27 -0
- package/harness/fe/skills/build-template-code/SKILL.md +42 -0
- package/harness/fe/skills/gen-common/SKILL.md +93 -0
- package/harness/fe/skills/grill-prototype/SKILL.md +41 -0
- package/harness/fe/skills/grill-test/SKILL.md +32 -0
- package/harness/fe/skills/grill-unit/SKILL.md +31 -0
- package/harness/fe/skills/model/SKILL.md +48 -0
- package/harness/fe/skills/prototype/SKILL.md +100 -0
- package/harness/fe/skills/test/SKILL.md +37 -0
- package/harness/fe/skills/unit/SKILL.md +55 -0
- package/harness/fe/skills/wire/SKILL.md +60 -0
- package/harness/shared/AGENTS.md +169 -0
- package/harness/shared/SSOT_AGENT_PROTOCOL.md +167 -0
- package/harness/shared/rules/flowgrid-code-optional-integrations.mdc +53 -0
- package/harness/shared/schemas/flowgrid-code/missing-optional-event.schema.json +62 -0
- package/harness/tests/extracts/artifactgraph-hooks-test.md +13 -0
- package/harness/tests/extracts/plans/readiness.md +14 -0
- package/harness/tests/rules/cross-repo-index-routing.mdc +24 -0
- package/harness/tests/rules/flowgrid-test-optional-accelerators.mdc +21 -0
- package/harness/tests/rules/plans-docs-first.mdc +13 -0
- package/harness/tests/skills/grill-testcase/SKILL.md +55 -0
- package/harness/tests/skills/scenario/SKILL.md +64 -0
- package/harness/tests/skills/test-api/SKILL.md +65 -0
- package/harness/tests/skills/testcase/SKILL.md +98 -0
- package/harness/tests/templates/SC.example.md +86 -0
- package/harness/tests/templates/TC.example-api.yaml +45 -0
- package/harness/tests/templates/TC.example.yaml +127 -0
- package/lexicon/registry-tags.en.txt +173 -0
- package/lexicon/testcase-taxonomy.en.txt +117 -0
- package/package.json +98 -0
- package/schemas/missing-optional-event.schema.json +37 -0
- package/schemas/testcase.schema.json +239 -0
- package/scripts/prepare-install.mjs +25 -0
- package/stacks/docs.json +21 -0
- package/stacks/dotnet-integration.json +66 -0
- package/stacks/dotnet-line.json +64 -0
- package/stacks/fastapi.json +98 -0
- package/stacks/generic.json +11 -0
- package/stacks/laravel.json +92 -0
- package/stacks/nextjs-nest.json +93 -0
- package/stacks/nextjs.json +132 -0
- package/stacks/nuxt4-nest.json +123 -0
- package/stacks/nuxt4.json +148 -0
- package/templates/project-skeleton/architecture/01-introduction/index.md +33 -0
- package/templates/project-skeleton/architecture/02-constraints/index.md +34 -0
- package/templates/project-skeleton/architecture/03-business-process/FLOW-login.md +101 -0
- package/templates/project-skeleton/architecture/03-business-process/FLOW-template.md +149 -0
- package/templates/project-skeleton/architecture/04-solution-strategy/index.md +26 -0
- package/templates/project-skeleton/architecture/07-deployment/index.md +26 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/configuration.md +18 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/index.md +27 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/observability.md +18 -0
- package/templates/project-skeleton/architecture/08-cross-cutting/security.md +18 -0
- package/templates/project-skeleton/architecture/09-decisions/ADR-001-arc42-toc.md +31 -0
- package/templates/project-skeleton/architecture/09-decisions/index.md +13 -0
- package/templates/project-skeleton/architecture/10-quality/index.md +27 -0
- package/templates/project-skeleton/architecture/11-risks/index.md +25 -0
- package/templates/project-skeleton/architecture/12-glossary/index.md +31 -0
- package/templates/project-skeleton/architecture/index.md +1 -0
- package/templates/project-skeleton/architecture/model/workspace.dsl +71 -0
- package/templates/project-skeleton/index.md +2 -0
- package/templates/project-skeleton/overview/.gitkeep +1 -0
- package/templates/project-skeleton/overview/index.md +2 -0
- package/templates/project-skeleton/qa/README.md +11 -0
- package/templates/project-skeleton/qa/open/.gitkeep +0 -0
- package/templates/project-skeleton/surfaces/common/code/API-CMN-HEALTH-001/health.api.yaml +12 -0
- package/templates/project-skeleton/surfaces/common/code/API-CMN-HEALTH-001/index.md +12 -0
- package/templates/project-skeleton/surfaces/common/code/UI-CMN-EMPTY-001/empty.ui.yaml +14 -0
- package/templates/project-skeleton/surfaces/common/code/UI-CMN-EMPTY-001/index.md +11 -0
- package/templates/project-skeleton/surfaces/common/data-model/derived-data.md +26 -0
- package/templates/project-skeleton/surfaces/common/data-model/index.md +16 -0
- package/templates/project-skeleton/surfaces/common/index.md +32 -0
- package/templates/project-skeleton/surfaces/common/md/breadcrumb-flow/common-breadcrumb-flow.md +72 -0
- package/templates/project-skeleton/surfaces/common/md/buttons/common-buttons.md +160 -0
- package/templates/project-skeleton/surfaces/common/md/confirm-dialog/common-confirm-dialog.md +98 -0
- package/templates/project-skeleton/surfaces/common/md/data-table/common-data-table.md +91 -0
- package/templates/project-skeleton/surfaces/common/md/delete-flow/common-delete-flow.md +68 -0
- package/templates/project-skeleton/surfaces/common/md/feedback/common-feedback.md +140 -0
- package/templates/project-skeleton/surfaces/common/md/flat-design/common-flat-design.md +78 -0
- package/templates/project-skeleton/surfaces/common/md/form-validation/common-form-validation.md +74 -0
- package/templates/project-skeleton/surfaces/common/md/import-csv/common-import-csv.md +89 -0
- package/templates/project-skeleton/surfaces/common/md/list-page/common-list-page.md +102 -0
- package/templates/project-skeleton/surfaces/common/md/list-toolbar/common-list-toolbar.md +81 -0
- package/templates/project-skeleton/surfaces/common/md/navigation/common-navigation.md +70 -0
- package/templates/project-skeleton/surfaces/common/md/pagination/common-pagination.md +86 -0
- package/templates/project-skeleton/surfaces/common/md/search-filter/common-search-filter.md +96 -0
- package/templates/project-skeleton/surfaces/common/md/status-chip/common-status-chip.md +93 -0
- package/templates/project-skeleton/surfaces/common/md/table-action-column/common-table-action-column.md +90 -0
- package/templates/project-skeleton/surfaces/common/patterns/breadcrumb-flow.md +83 -0
- package/templates/project-skeleton/surfaces/common/patterns/delete-flow.md +30 -0
- package/templates/project-skeleton/surfaces/common/patterns/ui-spec.md +15 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/common-breadcrumb-flow.bundle.yaml +60 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/breadcrumb-flow/ir/spec.yaml +31 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/common-buttons.bundle.yaml +147 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/buttons/ir/spec.yaml +118 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/common-confirm-dialog.bundle.yaml +89 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/confirm-dialog/ir/spec.yaml +60 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/common-data-table.bundle.yaml +85 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/data-table/ir/spec.yaml +56 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/common-delete-flow.bundle.yaml +59 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/delete-flow/ir/spec.yaml +30 -0
- package/templates/project-skeleton/surfaces/common/yaml/design-system.bundle.yaml +29 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/common-feedback.bundle.yaml +126 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/feedback/ir/spec.yaml +97 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/common-flat-design.bundle.yaml +77 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/flat-design/ir/spec.yaml +48 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/common-form-validation.bundle.yaml +66 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/form-validation/ir/spec.yaml +37 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/common-import-csv.bundle.yaml +74 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/import-csv/ir/spec.yaml +45 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/common-list-page.bundle.yaml +90 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/legacy.yaml +14 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-page/ir/spec.yaml +58 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/common-list-toolbar.bundle.yaml +86 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/legacy.yaml +12 -0
- package/templates/project-skeleton/surfaces/common/yaml/list-toolbar/ir/spec.yaml +56 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/common-navigation.bundle.yaml +68 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/navigation/ir/spec.yaml +39 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/common-pagination.bundle.yaml +84 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/legacy.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/pagination/ir/spec.yaml +53 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/common-search-filter.bundle.yaml +88 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/search-filter/ir/spec.yaml +59 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/common-status-chip.bundle.yaml +89 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/status-chip/ir/spec.yaml +60 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/common-table-action-column.bundle.yaml +81 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/design.yaml +13 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/legacy.yaml +11 -0
- package/templates/project-skeleton/surfaces/common/yaml/table-action-column/ir/spec.yaml +52 -0
- package/templates/project-skeleton/surfaces/index.md +1 -0
- package/templates/schemas/backend-api.schema.json +174 -0
- package/templates/schemas/legacy-repos.schema.json +24 -0
- package/templates/schemas/platform-repos.schema.json +29 -0
- package/templates/schemas/spec.schema.json +718 -0
- package/templates/schemas/testcase.schema.json +28 -0
- package/templates/shared/AUTHORING-COMMON.md +109 -0
- package/templates/shared/api-contract-test.yaml +33 -0
- package/templates/shared/backend-api-integration.yaml +152 -0
- package/templates/shared/backend-api.bundle.yaml +177 -0
- package/templates/shared/backend-api.yaml +188 -0
- package/templates/shared/breadcrumb-flow.ejs +45 -0
- package/templates/shared/bundle-authoring.md +288 -0
- package/templates/shared/clients-line.yaml +18 -0
- package/templates/shared/default-layout.ejs +234 -0
- package/templates/shared/design-spec.yaml +85 -0
- package/templates/shared/entity-delta.example.yaml +45 -0
- package/templates/shared/feature.bundle.yaml +575 -0
- package/templates/shared/integration-adapter.bundle.yaml +77 -0
- package/templates/shared/integration-spec.yaml +37 -0
- package/templates/shared/ir-design.yaml +34 -0
- package/templates/shared/ir-legacy.yaml +12 -0
- package/templates/shared/ir-spec.yaml +18 -0
- package/templates/shared/line-client.bundle.yaml +65 -0
- package/templates/shared/mock-data.yaml +22 -0
- package/templates/shared/openapi.yaml +144 -0
- package/templates/shared/patterns/.gitkeep +0 -0
- package/templates/shared/patterns/admin-crud.pattern.yaml +37 -0
- package/templates/shared/qa-item.yaml +15 -0
- package/templates/shared/spec.yaml +162 -0
- package/templates/shared/testcase.yaml +2 -0
- package/templates/tests-skeleton/cases/README.md +5 -0
- package/templates/tests-skeleton/catalog/locale.yaml +7 -0
- package/templates/tests-skeleton/index.md +7 -0
- package/templates/tests-skeleton/scenarios/README.md +3 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Generated from common-data-table.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-data-table
|
|
3
|
+
title: Common data table
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: Chuẩn table dữ liệu cho admin portal, tối ưu màn nhiều cột, giữ row cân bằng và action dễ thao tác.
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
layout:
|
|
14
|
+
container:
|
|
15
|
+
- Table phải nằm trong container có horizontal overflow khi nhiều cột.
|
|
16
|
+
- Không ép table co cột quá nhỏ khiến text wrap tự do.
|
|
17
|
+
table:
|
|
18
|
+
density: compact
|
|
19
|
+
minWidth: page hoặc component quyết định theo số cột
|
|
20
|
+
header: background muted nhẹ, text semibold
|
|
21
|
+
row:
|
|
22
|
+
height: 40-48px mặc định
|
|
23
|
+
hover: background muted/nhẹ
|
|
24
|
+
striped: optional, chỉ dùng khi page spec yêu cầu hoặc table nhiều dòng dễ đọc hơn
|
|
25
|
+
cell:
|
|
26
|
+
padding: px-3 py-2
|
|
27
|
+
defaultOverflow: truncate-tooltip
|
|
28
|
+
defaultAlign: left
|
|
29
|
+
columns:
|
|
30
|
+
reserved:
|
|
31
|
+
action:
|
|
32
|
+
width: fixed
|
|
33
|
+
overflow: nowrap
|
|
34
|
+
sticky: optional khi table rất rộng
|
|
35
|
+
status:
|
|
36
|
+
width: compact
|
|
37
|
+
renderer: status-chip
|
|
38
|
+
id:
|
|
39
|
+
overflow: nowrap
|
|
40
|
+
date:
|
|
41
|
+
overflow: nowrap
|
|
42
|
+
numeric:
|
|
43
|
+
align: right
|
|
44
|
+
overflowModes:
|
|
45
|
+
nowrap: Không xuống dòng, dùng cho ID/code/date/status/action.
|
|
46
|
+
truncate-tooltip: Một dòng, ellipsis, hover/focus xem full text; default cho name/email/url/title ngắn.
|
|
47
|
+
wrap-2-lines: Tối đa 2 dòng, dùng cho subject/title cần đọc thêm nhưng không phá row.
|
|
48
|
+
wrap-free: Chỉ dùng cho nội dung dài thật sự như message body/note/report detail, không dùng mặc định trong list.
|
|
49
|
+
testIds:
|
|
50
|
+
table: "{module}-table"
|
|
51
|
+
row: "{module}-row"
|
|
52
|
+
cell: optional "{module}-{column}-cell"
|
|
53
|
+
acceptance:
|
|
54
|
+
- Text dài không làm row cao bất thường nếu column không khai báo wrap.
|
|
55
|
+
- Cell bị truncate có title/tooltip hoặc cơ chế xem full text khi hover/focus.
|
|
56
|
+
- Table nhiều cột ưu tiên horizontal scroll hơn wrap làm vỡ layout.
|
package/templates/project-skeleton/surfaces/common/yaml/delete-flow/common-delete-flow.bundle.yaml
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
schema: portal-feature-bundle/v1
|
|
2
|
+
id: common-delete-flow
|
|
3
|
+
title: Common delete flow
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: Delete và bulk delete luôn dùng confirm dialog chặn + result dialog — không toast-only.
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
spec:
|
|
14
|
+
principles:
|
|
15
|
+
- Confirm trước delete — blocking modal, user phải chọn cancel hoặc confirm.
|
|
16
|
+
- Sau delete — success hoặc error đều qua result dialog blocking; user acknowledge trước khi tiếp tục.
|
|
17
|
+
- Không dùng toast/inline alert làm phản hồi duy nhất cho delete.
|
|
18
|
+
references:
|
|
19
|
+
- docs/features/common/common-confirm-dialog.spec.yaml
|
|
20
|
+
- docs/features/common/common-feedback.spec.yaml
|
|
21
|
+
- .cursor/extracts/common-delete-flow.md
|
|
22
|
+
flow:
|
|
23
|
+
- step: confirm
|
|
24
|
+
ui: AlertDialog blocking
|
|
25
|
+
copy: theo object (single / bulk)
|
|
26
|
+
- step: api
|
|
27
|
+
onSuccess: result dialog success
|
|
28
|
+
onError: result dialog error
|
|
29
|
+
grill:
|
|
30
|
+
bqa: copy confirm, button labels, navigation sau delete
|
|
31
|
+
dev: endpoint, bulk vs single, wire-only nếu API chưa có
|
|
32
|
+
legacy:
|
|
33
|
+
legacyRef:
|
|
34
|
+
module: common/common
|
|
35
|
+
function: common-delete-flow
|
|
36
|
+
slice: slices.common-delete-flow
|
|
37
|
+
behaviors: []
|
|
38
|
+
fields: []
|
|
39
|
+
ui: []
|
|
40
|
+
evidence: []
|
|
41
|
+
refs: {}
|
|
42
|
+
design:
|
|
43
|
+
inherits: admin-crud
|
|
44
|
+
shell:
|
|
45
|
+
tag: "#shell: DataPage"
|
|
46
|
+
overrideCommonPattern: false
|
|
47
|
+
patterns:
|
|
48
|
+
- "#pattern: CRUD"
|
|
49
|
+
zones:
|
|
50
|
+
- id: main
|
|
51
|
+
label: Nội dung chính
|
|
52
|
+
behavior: {}
|
|
53
|
+
actions: []
|
|
54
|
+
review:
|
|
55
|
+
summary: Delete và bulk delete luôn dùng confirm dialog chặn + result dialog — không toast-only.
|
|
56
|
+
layoutNotes: []
|
|
57
|
+
_meta:
|
|
58
|
+
generatedBy: archived-legacy-converter
|
|
59
|
+
sourceRevision: null
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Generated from common-delete-flow.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-delete-flow
|
|
3
|
+
inherits: admin-crud
|
|
4
|
+
shell:
|
|
5
|
+
tag: "#shell: DataPage"
|
|
6
|
+
overrideCommonPattern: false
|
|
7
|
+
patterns:
|
|
8
|
+
- "#pattern: CRUD"
|
|
9
|
+
zones:
|
|
10
|
+
- id: main
|
|
11
|
+
label: Nội dung chính
|
|
12
|
+
behavior: {}
|
|
13
|
+
actions: []
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Generated from common-delete-flow.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-delete-flow
|
|
3
|
+
legacyRef:
|
|
4
|
+
module: common/common
|
|
5
|
+
function: common-delete-flow
|
|
6
|
+
slice: slices.common-delete-flow
|
|
7
|
+
behaviors: []
|
|
8
|
+
fields: []
|
|
9
|
+
ui: []
|
|
10
|
+
evidence: []
|
|
11
|
+
refs: {}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Generated from common-delete-flow.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-delete-flow
|
|
3
|
+
title: Common delete flow
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: Delete và bulk delete luôn dùng confirm dialog chặn + result dialog — không toast-only.
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
principles:
|
|
14
|
+
- Confirm trước delete — blocking modal, user phải chọn cancel hoặc confirm.
|
|
15
|
+
- Sau delete — success hoặc error đều qua result dialog blocking; user acknowledge trước khi tiếp tục.
|
|
16
|
+
- Không dùng toast/inline alert làm phản hồi duy nhất cho delete.
|
|
17
|
+
references:
|
|
18
|
+
- docs/features/common/common-confirm-dialog.spec.yaml
|
|
19
|
+
- docs/features/common/common-feedback.spec.yaml
|
|
20
|
+
- .cursor/extracts/common-delete-flow.md
|
|
21
|
+
flow:
|
|
22
|
+
- step: confirm
|
|
23
|
+
ui: AlertDialog blocking
|
|
24
|
+
copy: theo object (single / bulk)
|
|
25
|
+
- step: api
|
|
26
|
+
onSuccess: result dialog success
|
|
27
|
+
onError: result dialog error
|
|
28
|
+
grill:
|
|
29
|
+
bqa: copy confirm, button labels, navigation sau delete
|
|
30
|
+
dev: endpoint, bulk vs single, wire-only nếu API chưa có
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
id: design-system-spec
|
|
2
|
+
name: Common Design System (SSOT)
|
|
3
|
+
specOrigin: requirement
|
|
4
|
+
summary:
|
|
5
|
+
- Global SSOT for UI Metrics and Design Tokens (Typography, Colors, Radii, Spacing).
|
|
6
|
+
- All feature specs must inherit from these defaults unless an explicit override is requested by Business/BQA.
|
|
7
|
+
- "Devs: Use Shadcn/Tailwind global config to implement these tokens."
|
|
8
|
+
- "Testers: Use this document to validate default UI sizes and colors when not explicitly stated in feature specs."
|
|
9
|
+
design:
|
|
10
|
+
visual:
|
|
11
|
+
typography:
|
|
12
|
+
baseFontSize: "16px"
|
|
13
|
+
smallFontSize: "14px"
|
|
14
|
+
heading1: "32px"
|
|
15
|
+
heading2: "24px"
|
|
16
|
+
fontFamily: "Inter, sans-serif"
|
|
17
|
+
colors:
|
|
18
|
+
primary: "Tailwind Blue 600 (#2563eb)"
|
|
19
|
+
secondary: "Tailwind Slate 500 (#64748b)"
|
|
20
|
+
background: "White (#ffffff)"
|
|
21
|
+
textPrimary: "Tailwind Slate 900 (#0f172a)"
|
|
22
|
+
textSecondary: "Tailwind Slate 500 (#64748b)"
|
|
23
|
+
spacing:
|
|
24
|
+
base: "16px"
|
|
25
|
+
small: "8px"
|
|
26
|
+
large: "24px"
|
|
27
|
+
radius:
|
|
28
|
+
base: "8px"
|
|
29
|
+
small: "4px"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
schema: portal-feature-bundle/v1
|
|
2
|
+
id: common-feedback
|
|
3
|
+
title: Common feedback and alerts
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: Chuẩn loading, empty, error, success feedback trong admin portal.
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
spec:
|
|
14
|
+
principles:
|
|
15
|
+
- Không lạm dụng modal/alert lớn; ưu tiên inline feedback gần nơi xảy ra action.
|
|
16
|
+
- Giao diện phẳng: border + background nhạt, không gradient/shadow.
|
|
17
|
+
- Feedback phải đến từ service/composable state, không chỉ đổi text local.
|
|
18
|
+
- Legacy dùng alert/dialog tùy hứng thì chỉ xem là evidence; project mới ưu tiên common placement.
|
|
19
|
+
terminology:
|
|
20
|
+
inlineAlert:
|
|
21
|
+
definition: Thông báo nằm trong page/block, không tự mất.
|
|
22
|
+
dismissal: Giữ nguyên cho đến khi user có action khác như submit lại, clear, refresh hoặc đổi route.
|
|
23
|
+
useFor:
|
|
24
|
+
- lỗi validation/global form
|
|
25
|
+
- lỗi tải dữ liệu page
|
|
26
|
+
- cảnh báo cần user đọc trước khi thao tác tiếp
|
|
27
|
+
alertToast:
|
|
28
|
+
definition: Thông báo nổi không có action confirm/cancel, tự biến mất sau timeout.
|
|
29
|
+
defaultDuration: 5s
|
|
30
|
+
stacking:
|
|
31
|
+
topPlacement: alert mới xuất hiện phía dưới hoặc tại đầu stack, alert cũ được đẩy lên theo animation.
|
|
32
|
+
bottomPlacement: không dùng mặc định; nếu override thì alert cũ bị đẩy xuống.
|
|
33
|
+
useFor:
|
|
34
|
+
- success sau mutation nhẹ
|
|
35
|
+
- thông báo hệ thống không cần chặn thao tác
|
|
36
|
+
actionModal:
|
|
37
|
+
definition: Dialog có button action hoặc close, chặn tương tác background cho đến khi user bấm confirm/cancel/close.
|
|
38
|
+
ownerSpec: common-confirm-dialog
|
|
39
|
+
placement:
|
|
40
|
+
defaultPageAlert:
|
|
41
|
+
position: ngay dưới page title/page header
|
|
42
|
+
surface: nền phẳng cùng content, border + background nhạt
|
|
43
|
+
useFor:
|
|
44
|
+
- lỗi tải dữ liệu page
|
|
45
|
+
- success/error sau mutation khi user vẫn ở cùng page
|
|
46
|
+
- cảnh báo điều kiện thao tác không destructive
|
|
47
|
+
contextualAlert:
|
|
48
|
+
position: gần block phát sinh lỗi
|
|
49
|
+
useFor:
|
|
50
|
+
- table list error
|
|
51
|
+
- form global error
|
|
52
|
+
- import file error
|
|
53
|
+
alertDialog:
|
|
54
|
+
useOnlyWhen:
|
|
55
|
+
- page dài phải scroll và inline alert có thể khuất khỏi viewport
|
|
56
|
+
- thông báo không cần confirm/cancel action
|
|
57
|
+
placement: top-right of viewport/page
|
|
58
|
+
avoid:
|
|
59
|
+
- center modal cho alert thông thường không có action
|
|
60
|
+
- bottom modal/toast kiểu legacy nếu không có lý do mới
|
|
61
|
+
note: Nếu dialog có button hành động như confirm/delete/overwrite/cancel thì dùng `common-confirm-dialog` và hiển thị giữa màn hình.
|
|
62
|
+
patterns:
|
|
63
|
+
loading:
|
|
64
|
+
list: skeleton rows hoặc skeleton cards trong table body area
|
|
65
|
+
form: disable submit và đổi label pending nếu cần
|
|
66
|
+
empty:
|
|
67
|
+
list: empty state trong table body, không xóa toolbar/search
|
|
68
|
+
copy: "{entity}が見つかりません。"
|
|
69
|
+
error:
|
|
70
|
+
list: alert trên table body area
|
|
71
|
+
formGlobal: alert trên form/card
|
|
72
|
+
importFile: alert trên import card, giữ message cụ thể từ validation
|
|
73
|
+
success:
|
|
74
|
+
mutation: inline success alert hoặc toast global, chọn một theo page; không dùng modal success.
|
|
75
|
+
alertStyle:
|
|
76
|
+
error:
|
|
77
|
+
border: destructive/30
|
|
78
|
+
background: destructive/10
|
|
79
|
+
text: destructive
|
|
80
|
+
success:
|
|
81
|
+
border: success/30 hoặc primary/30
|
|
82
|
+
background: success/10 hoặc primary/10
|
|
83
|
+
warning:
|
|
84
|
+
border: warning/30
|
|
85
|
+
background: warning/10
|
|
86
|
+
testIds:
|
|
87
|
+
loading: "{module}-loading"
|
|
88
|
+
empty: "{module}-empty"
|
|
89
|
+
errorAlert: "{module}-error-alert"
|
|
90
|
+
successAlert: "{module}-success-alert"
|
|
91
|
+
acceptance:
|
|
92
|
+
- Empty/error/loading states không làm layout nhảy mất search/toolbar.
|
|
93
|
+
- Alert copy là tiếng Nhật UI, spec/note có thể tiếng Việt.
|
|
94
|
+
- Không dùng modal cho lỗi validation thông thường.
|
|
95
|
+
- Alert thông thường xuất hiện dưới page title/page header hoặc trong block liên quan, không đẩy vào dialog.
|
|
96
|
+
- Alert dialog không có action nếu bắt buộc phải ở góc phải phía trên và có reason trong page spec.
|
|
97
|
+
- Dialog có action confirm/cancel không theo alert placement; dùng common confirm dialog ở giữa màn hình.
|
|
98
|
+
- Alert toast tự mất sau timeout mặc định 5s; inline alert không tự mất.
|
|
99
|
+
legacy:
|
|
100
|
+
legacyRef:
|
|
101
|
+
module: common/common
|
|
102
|
+
function: common-feedback
|
|
103
|
+
slice: slices.common-feedback
|
|
104
|
+
behaviors: []
|
|
105
|
+
fields: []
|
|
106
|
+
ui: []
|
|
107
|
+
evidence: []
|
|
108
|
+
refs: {}
|
|
109
|
+
design:
|
|
110
|
+
inherits: admin-crud
|
|
111
|
+
shell:
|
|
112
|
+
tag: "#shell: DataPage"
|
|
113
|
+
overrideCommonPattern: false
|
|
114
|
+
patterns:
|
|
115
|
+
- "#pattern: CRUD"
|
|
116
|
+
zones:
|
|
117
|
+
- id: main
|
|
118
|
+
label: Nội dung chính
|
|
119
|
+
behavior: {}
|
|
120
|
+
actions: []
|
|
121
|
+
review:
|
|
122
|
+
summary: Chuẩn loading, empty, error, success feedback trong admin portal.
|
|
123
|
+
layoutNotes: []
|
|
124
|
+
_meta:
|
|
125
|
+
generatedBy: archived-legacy-converter
|
|
126
|
+
sourceRevision: null
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Generated from common-feedback.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-feedback
|
|
3
|
+
inherits: admin-crud
|
|
4
|
+
shell:
|
|
5
|
+
tag: "#shell: DataPage"
|
|
6
|
+
overrideCommonPattern: false
|
|
7
|
+
patterns:
|
|
8
|
+
- "#pattern: CRUD"
|
|
9
|
+
zones:
|
|
10
|
+
- id: main
|
|
11
|
+
label: Nội dung chính
|
|
12
|
+
behavior: {}
|
|
13
|
+
actions: []
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Generated from common-feedback.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-feedback
|
|
3
|
+
title: Common feedback and alerts
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: Chuẩn loading, empty, error, success feedback trong admin portal.
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
principles:
|
|
14
|
+
- Không lạm dụng modal/alert lớn; ưu tiên inline feedback gần nơi xảy ra action.
|
|
15
|
+
- Giao diện phẳng: border + background nhạt, không gradient/shadow.
|
|
16
|
+
- Feedback phải đến từ service/composable state, không chỉ đổi text local.
|
|
17
|
+
- Legacy dùng alert/dialog tùy hứng thì chỉ xem là evidence; project mới ưu tiên common placement.
|
|
18
|
+
terminology:
|
|
19
|
+
inlineAlert:
|
|
20
|
+
definition: Thông báo nằm trong page/block, không tự mất.
|
|
21
|
+
dismissal: Giữ nguyên cho đến khi user có action khác như submit lại, clear, refresh hoặc đổi route.
|
|
22
|
+
useFor:
|
|
23
|
+
- lỗi validation/global form
|
|
24
|
+
- lỗi tải dữ liệu page
|
|
25
|
+
- cảnh báo cần user đọc trước khi thao tác tiếp
|
|
26
|
+
alertToast:
|
|
27
|
+
definition: Thông báo nổi không có action confirm/cancel, tự biến mất sau timeout.
|
|
28
|
+
defaultDuration: 5s
|
|
29
|
+
stacking:
|
|
30
|
+
topPlacement: alert mới xuất hiện phía dưới hoặc tại đầu stack, alert cũ được đẩy lên theo animation.
|
|
31
|
+
bottomPlacement: không dùng mặc định; nếu override thì alert cũ bị đẩy xuống.
|
|
32
|
+
useFor:
|
|
33
|
+
- success sau mutation nhẹ
|
|
34
|
+
- thông báo hệ thống không cần chặn thao tác
|
|
35
|
+
actionModal:
|
|
36
|
+
definition: Dialog có button action hoặc close, chặn tương tác background cho đến khi user bấm confirm/cancel/close.
|
|
37
|
+
ownerSpec: common-confirm-dialog
|
|
38
|
+
placement:
|
|
39
|
+
defaultPageAlert:
|
|
40
|
+
position: ngay dưới page title/page header
|
|
41
|
+
surface: nền phẳng cùng content, border + background nhạt
|
|
42
|
+
useFor:
|
|
43
|
+
- lỗi tải dữ liệu page
|
|
44
|
+
- success/error sau mutation khi user vẫn ở cùng page
|
|
45
|
+
- cảnh báo điều kiện thao tác không destructive
|
|
46
|
+
contextualAlert:
|
|
47
|
+
position: gần block phát sinh lỗi
|
|
48
|
+
useFor:
|
|
49
|
+
- table list error
|
|
50
|
+
- form global error
|
|
51
|
+
- import file error
|
|
52
|
+
alertDialog:
|
|
53
|
+
useOnlyWhen:
|
|
54
|
+
- page dài phải scroll và inline alert có thể khuất khỏi viewport
|
|
55
|
+
- thông báo không cần confirm/cancel action
|
|
56
|
+
placement: top-right of viewport/page
|
|
57
|
+
avoid:
|
|
58
|
+
- center modal cho alert thông thường không có action
|
|
59
|
+
- bottom modal/toast kiểu legacy nếu không có lý do mới
|
|
60
|
+
note: Nếu dialog có button hành động như confirm/delete/overwrite/cancel thì dùng `common-confirm-dialog` và hiển thị giữa màn hình.
|
|
61
|
+
patterns:
|
|
62
|
+
loading:
|
|
63
|
+
list: skeleton rows hoặc skeleton cards trong table body area
|
|
64
|
+
form: disable submit và đổi label pending nếu cần
|
|
65
|
+
empty:
|
|
66
|
+
list: empty state trong table body, không xóa toolbar/search
|
|
67
|
+
copy: "{entity}が見つかりません。"
|
|
68
|
+
error:
|
|
69
|
+
list: alert trên table body area
|
|
70
|
+
formGlobal: alert trên form/card
|
|
71
|
+
importFile: alert trên import card, giữ message cụ thể từ validation
|
|
72
|
+
success:
|
|
73
|
+
mutation: inline success alert hoặc toast global, chọn một theo page; không dùng modal success.
|
|
74
|
+
alertStyle:
|
|
75
|
+
error:
|
|
76
|
+
border: destructive/30
|
|
77
|
+
background: destructive/10
|
|
78
|
+
text: destructive
|
|
79
|
+
success:
|
|
80
|
+
border: success/30 hoặc primary/30
|
|
81
|
+
background: success/10 hoặc primary/10
|
|
82
|
+
warning:
|
|
83
|
+
border: warning/30
|
|
84
|
+
background: warning/10
|
|
85
|
+
testIds:
|
|
86
|
+
loading: "{module}-loading"
|
|
87
|
+
empty: "{module}-empty"
|
|
88
|
+
errorAlert: "{module}-error-alert"
|
|
89
|
+
successAlert: "{module}-success-alert"
|
|
90
|
+
acceptance:
|
|
91
|
+
- Empty/error/loading states không làm layout nhảy mất search/toolbar.
|
|
92
|
+
- Alert copy là tiếng Nhật UI, spec/note có thể tiếng Việt.
|
|
93
|
+
- Không dùng modal cho lỗi validation thông thường.
|
|
94
|
+
- Alert thông thường xuất hiện dưới page title/page header hoặc trong block liên quan, không đẩy vào dialog.
|
|
95
|
+
- Alert dialog không có action nếu bắt buộc phải ở góc phải phía trên và có reason trong page spec.
|
|
96
|
+
- Dialog có action confirm/cancel không theo alert placement; dùng common confirm dialog ở giữa màn hình.
|
|
97
|
+
- Alert toast tự mất sau timeout mặc định 5s; inline alert không tự mất.
|
package/templates/project-skeleton/surfaces/common/yaml/flat-design/common-flat-design.bundle.yaml
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
schema: portal-feature-bundle/v1
|
|
2
|
+
id: common-flat-design
|
|
3
|
+
title: Common flat design foundation
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: "Nền tảng visual chung: phẳng, rõ phân cấp, tránh hiệu ứng 3D và giữ cảm giác shadcn/admin hiện đại."
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
spec:
|
|
14
|
+
principles:
|
|
15
|
+
- Ưu tiên border, background nhạt, spacing và typography để tạo hierarchy.
|
|
16
|
+
- Không dùng gradient cho button/card/alert trong admin portal.
|
|
17
|
+
- Không dùng shadow nặng; shadow nhẹ chỉ dùng cho overlay nổi như dropdown/dialog nếu cần.
|
|
18
|
+
- Không lạm dụng modal/alert; dùng inline state gần ngữ cảnh.
|
|
19
|
+
- Không thiết kế modal chồng modal; flow phức tạp phải chuyển thành page/step/inline section hoặc đóng modal hiện tại trước.
|
|
20
|
+
- Màu semantic phải có ý nghĩa: success, danger, warning, info, muted.
|
|
21
|
+
surfaces:
|
|
22
|
+
pageBackground: neutral/muted nhẹ
|
|
23
|
+
card:
|
|
24
|
+
style: border + bg-card/bg-white
|
|
25
|
+
shadow: none hoặc very subtle
|
|
26
|
+
radius: md
|
|
27
|
+
table:
|
|
28
|
+
style: border hoặc background separation nhẹ
|
|
29
|
+
dialog:
|
|
30
|
+
style: phẳng, border, overlay tối nhẹ
|
|
31
|
+
buttons:
|
|
32
|
+
complete:
|
|
33
|
+
background: "#48b0f7"
|
|
34
|
+
text: "#ffffff"
|
|
35
|
+
outlinePrimary:
|
|
36
|
+
border: "#4EAAFF"
|
|
37
|
+
text: "#4EAAFF"
|
|
38
|
+
background: "#FFFFFF"
|
|
39
|
+
outlineSecondary:
|
|
40
|
+
border: "#C2C2C2"
|
|
41
|
+
text: "#C2C2C2"
|
|
42
|
+
background: "#FFFFFF"
|
|
43
|
+
destructive:
|
|
44
|
+
purpose: chỉ dùng cho delete/error/destructive
|
|
45
|
+
acceptance:
|
|
46
|
+
- Component mới không thêm gradient hoặc shadow nặng.
|
|
47
|
+
- Visual state dựa vào token/variant chung, không hardcode tùy hứng nếu đã có common variant.
|
|
48
|
+
- Page legacy tùy hứng về visual phải được normalize về flat design trừ khi có lý do nghiệp vụ.
|
|
49
|
+
- Spec/prototype không tạo nested modal.
|
|
50
|
+
legacy:
|
|
51
|
+
legacyRef:
|
|
52
|
+
module: common/common
|
|
53
|
+
function: common-flat-design
|
|
54
|
+
slice: slices.common-flat-design
|
|
55
|
+
behaviors: []
|
|
56
|
+
fields: []
|
|
57
|
+
ui: []
|
|
58
|
+
evidence: []
|
|
59
|
+
refs: {}
|
|
60
|
+
design:
|
|
61
|
+
inherits: admin-crud
|
|
62
|
+
shell:
|
|
63
|
+
tag: "#shell: DataPage"
|
|
64
|
+
overrideCommonPattern: false
|
|
65
|
+
patterns:
|
|
66
|
+
- "#pattern: CRUD"
|
|
67
|
+
zones:
|
|
68
|
+
- id: main
|
|
69
|
+
label: Nội dung chính
|
|
70
|
+
behavior: {}
|
|
71
|
+
actions: []
|
|
72
|
+
review:
|
|
73
|
+
summary: "Nền tảng visual chung: phẳng, rõ phân cấp, tránh hiệu ứng 3D và giữ cảm giác shadcn/admin hiện đại."
|
|
74
|
+
layoutNotes: []
|
|
75
|
+
_meta:
|
|
76
|
+
generatedBy: archived-legacy-converter
|
|
77
|
+
sourceRevision: null
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Generated from common-flat-design.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-flat-design
|
|
3
|
+
inherits: admin-crud
|
|
4
|
+
shell:
|
|
5
|
+
tag: "#shell: DataPage"
|
|
6
|
+
overrideCommonPattern: false
|
|
7
|
+
patterns:
|
|
8
|
+
- "#pattern: CRUD"
|
|
9
|
+
zones:
|
|
10
|
+
- id: main
|
|
11
|
+
label: Nội dung chính
|
|
12
|
+
behavior: {}
|
|
13
|
+
actions: []
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Generated from common-flat-design.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-flat-design
|
|
3
|
+
legacyRef:
|
|
4
|
+
module: common/common
|
|
5
|
+
function: common-flat-design
|
|
6
|
+
slice: slices.common-flat-design
|
|
7
|
+
behaviors: []
|
|
8
|
+
fields: []
|
|
9
|
+
ui: []
|
|
10
|
+
evidence: []
|
|
11
|
+
refs: {}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Generated from common-flat-design.bundle.yaml — pnpm spec:split
|
|
2
|
+
id: common-flat-design
|
|
3
|
+
title: Common flat design foundation
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: "Nền tảng visual chung: phẳng, rõ phân cấp, tránh hiệu ứng 3D và giữ cảm giác shadcn/admin hiện đại."
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
principles:
|
|
14
|
+
- Ưu tiên border, background nhạt, spacing và typography để tạo hierarchy.
|
|
15
|
+
- Không dùng gradient cho button/card/alert trong admin portal.
|
|
16
|
+
- Không dùng shadow nặng; shadow nhẹ chỉ dùng cho overlay nổi như dropdown/dialog nếu cần.
|
|
17
|
+
- Không lạm dụng modal/alert; dùng inline state gần ngữ cảnh.
|
|
18
|
+
- Không thiết kế modal chồng modal; flow phức tạp phải chuyển thành page/step/inline section hoặc đóng modal hiện tại trước.
|
|
19
|
+
- Màu semantic phải có ý nghĩa: success, danger, warning, info, muted.
|
|
20
|
+
surfaces:
|
|
21
|
+
pageBackground: neutral/muted nhẹ
|
|
22
|
+
card:
|
|
23
|
+
style: border + bg-card/bg-white
|
|
24
|
+
shadow: none hoặc very subtle
|
|
25
|
+
radius: md
|
|
26
|
+
table:
|
|
27
|
+
style: border hoặc background separation nhẹ
|
|
28
|
+
dialog:
|
|
29
|
+
style: phẳng, border, overlay tối nhẹ
|
|
30
|
+
buttons:
|
|
31
|
+
complete:
|
|
32
|
+
background: "#48b0f7"
|
|
33
|
+
text: "#ffffff"
|
|
34
|
+
outlinePrimary:
|
|
35
|
+
border: "#4EAAFF"
|
|
36
|
+
text: "#4EAAFF"
|
|
37
|
+
background: "#FFFFFF"
|
|
38
|
+
outlineSecondary:
|
|
39
|
+
border: "#C2C2C2"
|
|
40
|
+
text: "#C2C2C2"
|
|
41
|
+
background: "#FFFFFF"
|
|
42
|
+
destructive:
|
|
43
|
+
purpose: chỉ dùng cho delete/error/destructive
|
|
44
|
+
acceptance:
|
|
45
|
+
- Component mới không thêm gradient hoặc shadow nặng.
|
|
46
|
+
- Visual state dựa vào token/variant chung, không hardcode tùy hứng nếu đã có common variant.
|
|
47
|
+
- Page legacy tùy hứng về visual phải được normalize về flat design trừ khi có lý do nghiệp vụ.
|
|
48
|
+
- Spec/prototype không tạo nested modal.
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
schema: portal-feature-bundle/v1
|
|
2
|
+
id: common-form-validation
|
|
3
|
+
title: Common form validation
|
|
4
|
+
status: draft
|
|
5
|
+
owner: portal-team
|
|
6
|
+
summary: Chuẩn vị trí, copy và state validation cho form admin portal.
|
|
7
|
+
specOrigin: legacy
|
|
8
|
+
grillStatus:
|
|
9
|
+
bqaFacts: draft
|
|
10
|
+
bqaOpen: draft
|
|
11
|
+
dev: draft
|
|
12
|
+
full: not_required
|
|
13
|
+
spec:
|
|
14
|
+
fieldErrors:
|
|
15
|
+
position: ngay dưới field/input liên quan
|
|
16
|
+
style: text destructive, cỡ nhỏ, không dùng alert global cho lỗi field đơn lẻ
|
|
17
|
+
testId: "{module}-{field}-error"
|
|
18
|
+
globalErrors:
|
|
19
|
+
position: trên form/card hoặc gần submit group
|
|
20
|
+
useFor:
|
|
21
|
+
- lỗi file import
|
|
22
|
+
- lỗi server không map được field
|
|
23
|
+
- timeout/expired session của flow import/preview
|
|
24
|
+
testId: "{module}-error-alert"
|
|
25
|
+
requiredMarker:
|
|
26
|
+
default: optional
|
|
27
|
+
whenUsed: dấu `*` đỏ cạnh label, không thêm text dài.
|
|
28
|
+
pendingState:
|
|
29
|
+
submitDisabled: true
|
|
30
|
+
labelCanChange: true
|
|
31
|
+
fieldsDisabled: chỉ khi action cần lock form để tránh double submit
|
|
32
|
+
copy:
|
|
33
|
+
source: Ưu tiên message Laravel ja/validation.php khi đã có legacy/API source.
|
|
34
|
+
language: Japanese UI copy.
|
|
35
|
+
acceptance:
|
|
36
|
+
- Field validation không gom hết lên đầu nếu field cụ thể đã xác định được.
|
|
37
|
+
- File/import/global validation được phép dùng alert trên card.
|
|
38
|
+
- Error testId đủ để E2E assert message quan trọng.
|
|
39
|
+
legacy:
|
|
40
|
+
legacyRef:
|
|
41
|
+
module: common/common
|
|
42
|
+
function: common-form-validation
|
|
43
|
+
slice: slices.common-form-validation
|
|
44
|
+
behaviors: []
|
|
45
|
+
fields: []
|
|
46
|
+
ui: []
|
|
47
|
+
evidence: []
|
|
48
|
+
refs: {}
|
|
49
|
+
design:
|
|
50
|
+
inherits: admin-crud
|
|
51
|
+
shell:
|
|
52
|
+
tag: "#shell: DataPage"
|
|
53
|
+
overrideCommonPattern: false
|
|
54
|
+
patterns:
|
|
55
|
+
- "#pattern: CRUD"
|
|
56
|
+
zones:
|
|
57
|
+
- id: main
|
|
58
|
+
label: Nội dung chính
|
|
59
|
+
behavior: {}
|
|
60
|
+
actions: []
|
|
61
|
+
review:
|
|
62
|
+
summary: Chuẩn vị trí, copy và state validation cho form admin portal.
|
|
63
|
+
layoutNotes: []
|
|
64
|
+
_meta:
|
|
65
|
+
generatedBy: archived-legacy-converter
|
|
66
|
+
sourceRevision: null
|