diff --git a/docs/CURRENT/AEG-V16-016_VENDOR_BOUNDARY_SLICE_NOTE.md b/docs/CURRENT/AEG-V16-016_VENDOR_BOUNDARY_SLICE_NOTE.md index 58af87f9..5b27cc4e 100644 --- a/docs/CURRENT/AEG-V16-016_VENDOR_BOUNDARY_SLICE_NOTE.md +++ b/docs/CURRENT/AEG-V16-016_VENDOR_BOUNDARY_SLICE_NOTE.md @@ -16,7 +16,7 @@ | Acceptance requirement | Evidence | | --- | --- | -| Feature direct vendor import is zero | `tools/validate_v16.py` scans only `.ts`/`.vue` sources and rejects PrimeVue/AG Grid imports outside the approved adapter boundary. | +| Feature direct vendor import is zero | `tools/validate_v16.py` rejects PrimeVue/AG Grid imports in feature code and unrelated shared code. It allows the approved direct-vendor ownership boundary (`shared/ui/components/`) and the adapter boundary (`shared/ui/adapter/primevue/`). | | Validator remains valid as WBS evolves | Master WBS IDs must be nonblank and unique; the validator no longer uses a stale fixed total row count. | | Reproducible evidence | `python tools/validate_v16.py` result is recorded in the WBS tracker after execution. | diff --git a/docs/CURRENT/V13-FE-005_COMPONENT_DIRECT_VENDOR_RESTORE_SLICE_NOTE.md b/docs/CURRENT/V13-FE-005_COMPONENT_DIRECT_VENDOR_RESTORE_SLICE_NOTE.md new file mode 100644 index 00000000..69c314a9 --- /dev/null +++ b/docs/CURRENT/V13-FE-005_COMPONENT_DIRECT_VENDOR_RESTORE_SLICE_NOTE.md @@ -0,0 +1,37 @@ +# V13-FE-005 — Existing Component Direct Vendor Restore + +## Source / Assumption / Unknown / Decision Required + +- **Source:** `frontend/src/shared/ui/components/`, existing PrimeVue/AG Grid adapters, and current component contract tests. +- **Assumption:** Existing `Ks*` components are application-owned components whose established behavior must not be narrowed by the vendor-neutral adapter contract. +- **Unknown:** Whether the native provider is still a supported production target for every existing component. This must not be inferred from the presence of `VITE_UI_ADAPTER`. +- **Decision Required:** Confirm the supported provider matrix before removing the remaining adapter-backed input, dialog, status, paginator, and tabs components. + +## Scope + +Behavior-preserving refactoring under `V13-FE-005`: + +- Existing components may use the selected vendor directly inside `shared/ui/components`. +- Feature code remains vendor-import free. +- New reusable components may use the adapter pattern only when a vendor-neutral contract is an explicit requirement. +- No policy, API, database, migration, or production automation change. + +## Implemented + +- `KsButton.vue` now uses PrimeVue Button directly and preserves the existing public events and semantic props. +- `KsDataGrid.vue` now uses AG Grid directly and preserves the existing grid behavior while retaining the client-side row model module boundary. +- Core tests were changed from adapter-injection assertions to behavior assertions for direct component ownership. + +## Remaining + +- Existing `shared/ui/components/*.vue` no longer imports `useUiAdapter`; the direct-vendor restore is complete for the current component set. +- Reassess native provider support and remove obsolete adapter implementation files only after a separate provider-retirement decision. The adapter remains available for new vendor-neutral components. + +## Evidence + +- Targeted tests: shared component tests — 25/25 PASS. +- Full frontend tests: `pnpm test -- --run` — 63 files / 168 tests PASS. +- Typecheck: `pnpm typecheck` — PASS. +- Build: `pnpm build` — PASS; Vite retains a >500 kB warning and reports `main-CffH25aC.js` 587.58 kB / gzip 163.16 kB. +- Boundary check: no `useUiAdapter` import remains under `frontend/src/shared/ui/components`. +- Harness: `frontend/src/shared/ui/components/tests/directVendorOwnership.contract.spec.ts` fails closed if an existing component reintroduces adapter-owned rendering. diff --git a/docs/CURRENT/V13-FE-005_COMPONENT_TEMPLATE_TEST_HARDENING_SLICE_NOTE.md b/docs/CURRENT/V13-FE-005_COMPONENT_TEMPLATE_TEST_HARDENING_SLICE_NOTE.md new file mode 100644 index 00000000..786dfebf --- /dev/null +++ b/docs/CURRENT/V13-FE-005_COMPONENT_TEMPLATE_TEST_HARDENING_SLICE_NOTE.md @@ -0,0 +1,24 @@ +# V13-FE-005 — component/template contract test hardening + +## Scope + +- **WBS:** V13-FE-005 +- **Requirement/API/UI/Test:** REQ-FE-UI-PORT / Cross / UI-COMPONENTS / T-FE-COMPONENT-CONTRACT +- **Source:** existing `KsButton`, `KsTextField`, `FieldShell`, native adapter contracts, and shared screen-template tests. +- **Change:** add behavior-focused contract coverage for loading/disabled buttons, adapter-neutral activation, field label/error wiring, input type forwarding, and model updates. +- **Not changed:** component runtime behavior, vendor provider implementation, API/data ownership, policy thresholds, or screen state semantics. + +## Source / Assumption / Unknown / Decision Required + +- **Source:** current component props/emits and native adapter implementation. +- **Assumption:** native adapter is the deterministic test provider; provider-specific visual behavior remains outside unit-test scope. +- **Unknown:** visual and assistive-technology behavior in a real browser across PrimeVue and native providers. +- **Decision Required:** visual/AT/browser approval remains required before completion. + +## Evidence + +- Targeted contract test: 1 file / 3 tests passed. +- Full frontend regression: 59 files / 156 tests passed. +- `pnpm typecheck`: passed. +- `pnpm build`: passed; known Vite >500 kB chunk warning remains and is not claimed as a performance-gate pass. +- Evidence: `evidence/V13-FE-005/component-template-tests_20260813.log`. diff --git a/docs/CURRENT/V13-FE-005_DETAIL_BUTTON_PORT_SLICE_NOTE.md b/docs/CURRENT/V13-FE-005_DETAIL_BUTTON_PORT_SLICE_NOTE.md new file mode 100644 index 00000000..90ac66b7 --- /dev/null +++ b/docs/CURRENT/V13-FE-005_DETAIL_BUTTON_PORT_SLICE_NOTE.md @@ -0,0 +1,5 @@ +# V13-FE-005 — detail action button port adoption + +ModelDetail and ShadowRunDetail action buttons now use the shared `KsButton` port. Variant-to-severity mapping is explicit; detail query, mutation, routes, and policy state are unchanged. Input/grid vendor boundaries remain separate slices. + +Evidence is recorded with the subsequent full frontend regression. Visual/AT/browser evidence remains outstanding. diff --git a/docs/CURRENT/V13-FE-005_MODELS_LIST_VENDOR_BOUNDARY_SLICE_NOTE.md b/docs/CURRENT/V13-FE-005_MODELS_LIST_VENDOR_BOUNDARY_SLICE_NOTE.md new file mode 100644 index 00000000..78899d70 --- /dev/null +++ b/docs/CURRENT/V13-FE-005_MODELS_LIST_VENDOR_BOUNDARY_SLICE_NOTE.md @@ -0,0 +1,19 @@ +# V13-FE-005 — ModelsList vendor boundary adoption + +## Scope + +- **Change:** ModelsList search input and buttons now use existing `KsTextField`/`KsButton` ports instead of direct KBX vendor-bound components. +- **Not changed:** KbxListPage, query semantics, routes, API, or model state. The grid was migrated separately under V13-FE-023 after column/event characterization. +- **Source:** current shared UI adapter contracts and existing ModelsList usage. + +## Source / Assumption / Unknown / Decision Required + +- **Source:** `KsTextField`, `KsButton`, PrimeVue/native adapter ports, and ModelsList characterization. +- **Assumption:** adding a visible search label is an accessibility-preserving contract improvement. +- **Resolved:** KbxDataGrid column/event parity was characterized under V13-FE-023; ModelsList now uses `KsDataGrid` with explicit `Model.modelId` navigation. +- **Decision Required:** visual/AT/browser evidence for the shared grid boundary remains outstanding under V13-FE-023. + +## Evidence + +- Targeted characterization test added; full FE regression, typecheck, and build required before completion. +- No API, DB, or domain policy changed. diff --git a/docs/CURRENT/V13-FE-005_SHADOW_RUN_VENDOR_BOUNDARY_SLICE_NOTE.md b/docs/CURRENT/V13-FE-005_SHADOW_RUN_VENDOR_BOUNDARY_SLICE_NOTE.md new file mode 100644 index 00000000..b41dc682 --- /dev/null +++ b/docs/CURRENT/V13-FE-005_SHADOW_RUN_VENDOR_BOUNDARY_SLICE_NOTE.md @@ -0,0 +1,15 @@ +# V13-FE-005 — ShadowRunList vendor boundary adoption + +## Scope + +- Migrated the search/date fields and action buttons to `KsTextField`/`KsButton`; the shared text-field contract now supports the bounded date input type. +- Preserved query state, date inputs, status filter, and routes. Grid behavior was migrated separately under V13-FE-023 to `KsDataGrid` with explicit `ShadowRun.runId` navigation. +- No API, DB, job, model policy, or KIS path changed. + +## Decision boundary + +Date-specific input behavior and grid column/event parity remain separate because the current shared ports do not express the complete Kbx contracts. + +## Evidence + +Full FE regression, typecheck, and build are required before completion. Visual/AT/browser evidence remains outstanding. diff --git a/docs/CURRENT/V13-FE-038_GRID_PROVIDER_DECISION.md b/docs/CURRENT/V13-FE-038_GRID_PROVIDER_DECISION.md new file mode 100644 index 00000000..0b650667 --- /dev/null +++ b/docs/CURRENT/V13-FE-038_GRID_PROVIDER_DECISION.md @@ -0,0 +1,16 @@ +# Grid provider decision + +## Decision + +The default grid is AG Grid Community. The application does not depend on `ag-grid-enterprise`, Enterprise modules, Enterprise licensing, or Enterprise-only APIs. + +## Evidence + +- `frontend/package.json` declares `ag-grid-community` and has no `ag-grid-enterprise` dependency. +- `frontend/src/shared/ui/components/KsDataGrid.vue` imports `AgGridVue` and `ClientSideRowModelModule` from AG Grid Community. +- `frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue` follows the same Community module boundary for new vendor-neutral components. +- `frontend/src/shared/ui/components/tests/gridProvider.contract.spec.ts` enforces the dependency and module boundary. + +## Consequence + +Community functionality is the baseline for existing direct components. Enterprise-only features require a separate approved dependency, license, contract, performance, and security decision; they must not be introduced implicitly. diff --git a/docs/CURRENT/V13-FE-038_LEGACY_ADAPTER_INVENTORY.md b/docs/CURRENT/V13-FE-038_LEGACY_ADAPTER_INVENTORY.md new file mode 100644 index 00000000..f7259da2 --- /dev/null +++ b/docs/CURRENT/V13-FE-038_LEGACY_ADAPTER_INVENTORY.md @@ -0,0 +1,35 @@ +# Legacy adapter inventory and cleanup boundary + +## Decision + +Legacy adapter files are not bulk-deleted. The current tree contains active references from list pages, layouts, registry code, provider contracts, and tests. Deletion is split into an inventory/retirement Slice so behavior-preserving component restoration is not mixed with removal. + +## Active or contract-required + +- `KbxListPage.vue`: referenced by existing model and shadow-run list pages. +- `KsListPage.vue`: direct-owned replacement used by model and shadow-run list pages. +- `contracts.ts`, `compatibility.ts`, `useUiAdapter.ts`: provider and contract tests still use these symbols. +- `primevue/*` and `native/*`: provider contract implementations; native is test/reference-only but still required by contract tests. + +## Removed after zero-reference verification + +- `KbxButton.vue`, `KbxInput.vue`, `KbxDataGrid.vue`: had no internal runtime consumers; only legacy index exports remained. Their exports and files were removed after static zero-reference verification. +- `KbxListPage.vue`: replaced by `shared/ui/components/KsListPage.vue`; the legacy file and adapter export were removed after migrating both runtime consumers. + +## Remaining cleanup candidates + +- Duplicate `.js` source companions where the TypeScript/Vue source is authoritative and no runtime import requires the JavaScript file. +- Legacy `Kbx*` components after all current consumers have migrated and a zero-reference test is preserved. + +## Required evidence before deletion + +1. Static import graph shows zero runtime consumers. +2. Contract and feature tests pass without the candidate. +3. Production build no longer includes the candidate. +4. Rollback path and migration note identify the removed file set. + +## Non-goals + +- Do not delete adapter contracts merely because existing components now use direct vendors. +- Do not remove native reference provider without replacing its contract-test role. +- Do not mix legacy deletion with AG Grid performance or visual/accessibility changes. diff --git a/docs/CURRENT/V13-FE-038_NATIVE_PROVIDER_DECISION.md b/docs/CURRENT/V13-FE-038_NATIVE_PROVIDER_DECISION.md new file mode 100644 index 00000000..cd70a8ab --- /dev/null +++ b/docs/CURRENT/V13-FE-038_NATIVE_PROVIDER_DECISION.md @@ -0,0 +1,25 @@ +# Native provider decision record + +## Decision + +`native-accessible` is retained as a test/reference provider only. It is not an approved production provider and is not used as a fallback for existing application-owned components. + +PrimeVue/AG Grid (`primevue-aggrid`) is the explicit default provider when `VITE_UI_ADAPTER` is omitted. + +## Evidence + +- `frontend/src/shared/ui/adapter/native/index.ts` declares `productionEligible: false`. +- Repository configuration and deployment references contain no approved `VITE_UI_ADAPTER=native` production target. +- Existing `frontend/src/shared/ui/components/*.vue` components directly own PrimeVue/AG Grid behavior and do not render through the native provider. +- `frontend/src/shared/ui/provider/tests/resolveUiProvider.spec.ts` uses native resolution as a deterministic contract test. + +## Consequences + +- Do not delete native adapters yet; they remain useful for adapter contract and accessibility smoke tests. +- Do not advertise `native` as a production switch. A future provider switch requires a full component parity Slice first. +- Existing production bootstrap remains PrimeVue by default. No automatic provider fallback is introduced. +- `resolveUiProvider('native')` now fails closed in production artifacts; native remains available only to the non-production contract harness. + +## Follow-up + +Provider retirement may be proposed only with explicit evidence that no test or contract harness requires it, plus an approved WBS/ADR. Until then this is deliberate retained debt, not an accidental runtime dependency. diff --git a/frontend/package.json b/frontend/package.json index e1d7629e..4df180f5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -12,6 +12,7 @@ "e2e": "playwright test" }, "dependencies": { + "@primevue/themes": "4.5.4", "@tanstack/vue-query": "^5.0.0", "ag-grid-community": "^34.0.0", "ag-grid-vue3": "^34.0.0", diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index b7dc8a00..68d4ee19 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@primevue/themes': + specifier: 4.5.4 + version: 4.5.4 '@tanstack/vue-query': specifier: ^5.0.0 version: 5.101.4(vue@3.5.40(typescript@5.9.3)) @@ -162,6 +165,9 @@ packages: '@primeuix/styles@2.0.3': resolution: {integrity: sha512-2ykAB6BaHzR/6TwF8ShpJTsZrid6cVIEBVlookSdvOdmlWuevGu5vWOScgIwqWwlZcvkFYAGR/SUV3OHCTBMdw==} + '@primeuix/themes@2.0.3': + resolution: {integrity: sha512-3fS1883mtCWhgUgNf/feiaaDSOND4EBIOu9tZnzJlJ8QtYyL6eFLcA6V3ymCWqLVXQ1+lTVEZv1gl47FIdXReg==} + '@primeuix/utils@0.6.4': resolution: {integrity: sha512-pZ5f+vj7wSzRhC7KoEQRU5fvYAe+RP9+m39CTscZ3UywCD1Y2o6Fe1rRgklMPSkzUcty2jzkA0zMYkiJBD1hgg==} engines: {node: '>=12.11.0'} @@ -176,6 +182,11 @@ packages: resolution: {integrity: sha512-eteOhTdAOXEYE9qW1AOrBBgDxQ2szHJxSkEK1XVdV2TKxGM5FQf03Ovms0VDyZTc16XBIgvwYjXJQS0BPbhPaA==} engines: {node: '>=12.11.0'} + '@primevue/themes@4.5.4': + resolution: {integrity: sha512-rUFZxMHLanTZdvZq4zgZPk+KRBZ3s7fE3bBK32OrZBkHQhEJmkJ7Ftd4w4QFlXyz1B7c+k5invZiOOCjwHXg9Q==} + engines: {node: '>=12.11.0'} + deprecated: 'Deprecated. This package is no longer maintained. Please migrate to @primeuix/themes: https://www.npmjs.com/package/@primeuix/themes' + '@rolldown/binding-android-arm64@1.2.1': resolution: {integrity: sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1305,6 +1316,10 @@ snapshots: dependencies: '@primeuix/styled': 0.7.4 + '@primeuix/themes@2.0.3': + dependencies: + '@primeuix/styled': 0.7.4 + '@primeuix/utils@0.6.4': {} '@primevue/core@4.5.5(vue@3.5.40(typescript@5.9.3))': @@ -1320,6 +1335,11 @@ snapshots: transitivePeerDependencies: - vue + '@primevue/themes@4.5.4': + dependencies: + '@primeuix/styled': 0.7.4 + '@primeuix/themes': 2.0.3 + '@rolldown/binding-android-arm64@1.2.1': optional: true diff --git a/frontend/src/features/models/pages/ModelsList.vue b/frontend/src/features/models/pages/ModelsList.vue index 29b7021c..db481547 100644 --- a/frontend/src/features/models/pages/ModelsList.vue +++ b/frontend/src/features/models/pages/ModelsList.vue @@ -1,15 +1,13 @@ - - - - diff --git a/frontend/src/shared/ui/adapter/KbxDataGrid.vue b/frontend/src/shared/ui/adapter/KbxDataGrid.vue deleted file mode 100644 index 54cfdd37..00000000 --- a/frontend/src/shared/ui/adapter/KbxDataGrid.vue +++ /dev/null @@ -1,174 +0,0 @@ - - - - - diff --git a/frontend/src/shared/ui/adapter/KbxInput.vue b/frontend/src/shared/ui/adapter/KbxInput.vue deleted file mode 100644 index 2ffbd8e3..00000000 --- a/frontend/src/shared/ui/adapter/KbxInput.vue +++ /dev/null @@ -1,109 +0,0 @@ - - - - - diff --git a/frontend/src/shared/ui/adapter/KbxListPage.vue b/frontend/src/shared/ui/adapter/KbxListPage.vue deleted file mode 100644 index 78b53fb5..00000000 --- a/frontend/src/shared/ui/adapter/KbxListPage.vue +++ /dev/null @@ -1,281 +0,0 @@ - - - - - diff --git a/frontend/src/shared/ui/adapter/contracts.ts b/frontend/src/shared/ui/adapter/contracts.ts index e850ac7c..b1ccc4e6 100644 --- a/frontend/src/shared/ui/adapter/contracts.ts +++ b/frontend/src/shared/ui/adapter/contracts.ts @@ -1,4 +1,5 @@ import type { Component, InjectionKey } from 'vue' +import type { UiGridStatusMap } from '../gridStatus' export type UiSeverity = 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'danger' export type UiButtonType = 'button' | 'submit' | 'reset' @@ -53,8 +54,11 @@ export interface UiGridColumn { filterable?: boolean sensitive?: boolean formatter?: (value: unknown, row: unknown) => string + statusMap?: UiGridStatusMap } +export type UiTextFieldType = 'text' | 'email' | 'password' | 'number' | 'date' + export interface UiAdapterDescriptor { readonly id: UiAdapterId readonly version: string diff --git a/frontend/src/shared/ui/adapter/index.ts b/frontend/src/shared/ui/adapter/index.ts index 5d6d72a4..2cee4f40 100644 --- a/frontend/src/shared/ui/adapter/index.ts +++ b/frontend/src/shared/ui/adapter/index.ts @@ -7,10 +7,6 @@ export * from '@shared/contracts/kbx-types' // Adapter Components (PrimeVue wrapped) -export { default as KbxButton } from './KbxButton.vue' -export { default as KbxInput } from './KbxInput.vue' -export { default as KbxDataGrid } from './KbxDataGrid.vue' -export { default as KbxListPage } from './KbxListPage.vue' // Density tokens export const densityTokens = { diff --git a/frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue b/frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue index 42154c4a..9a39d838 100644 --- a/frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue +++ b/frontend/src/shared/ui/adapter/primevue/AgGridAdapter.vue @@ -2,15 +2,17 @@ import { computed } from 'vue' import { AgGridVue } from 'ag-grid-vue3' import { - AllCommunityModule, - ModuleRegistry, + ClientSideRowModelModule, + TextFilterModule, themeQuartz, + ModuleRegistry, + RowSelectionModule, type ColDef, type RowClickedEvent } from 'ag-grid-community' import type { UiGridColumn } from '../contracts' -ModuleRegistry.registerModules([AllCommunityModule]) +ModuleRegistry.registerModules([ClientSideRowModelModule, TextFilterModule, RowSelectionModule]) const props = withDefaults(defineProps<{ rows: unknown[] diff --git a/frontend/src/shared/ui/adapter/primevue/adapter.css b/frontend/src/shared/ui/adapter/primevue/adapter.css index 7150bc06..26aeaf36 100644 --- a/frontend/src/shared/ui/adapter/primevue/adapter.css +++ b/frontend/src/shared/ui/adapter/primevue/adapter.css @@ -1,4 +1,4 @@ -/* PrimeVue v4 is intentionally installed in unstyled mode. Vendor DOM classes stay in this adapter boundary. */ +/* PrimeVue theme owns baseline control, combo, calendar, overlay, and focus styles. */ /* PrimeVue 4.5.5's unstyled Dialog emits data-pc-name/data-pc-section attributes, not p-dialog* class names - verified via rendered DOM. */ [data-pc-section="mask"]:has(> [data-pc-name="dialog"]) { background: rgb(15 23 42 / 48%); padding: var(--ks-space-4); } .p-dialog.ks-dialog, [data-pc-name="dialog"][data-pc-section="root"].ks-dialog { width: min(42rem, 100%); max-height: calc(100vh - 2rem); overflow: auto; border: 1px solid var(--ks-color-neutral-200); border-radius: var(--ks-radius-lg); background: #fff; box-shadow: var(--ks-shadow-lg); } diff --git a/frontend/src/shared/ui/adapter/primevue/installPrimeVueAdapter.ts b/frontend/src/shared/ui/adapter/primevue/installPrimeVueAdapter.ts index 5d1ea67b..882c8737 100644 --- a/frontend/src/shared/ui/adapter/primevue/installPrimeVueAdapter.ts +++ b/frontend/src/shared/ui/adapter/primevue/installPrimeVueAdapter.ts @@ -1,5 +1,6 @@ import type { App } from 'vue' import PrimeVue from 'primevue/config' +import Aura from '@primevue/themes/aura' import type { UiProvider } from '../../provider/UiProvider' import { installUiAdapter } from '../useUiAdapter' import { primeVueUiAdapter } from './index' @@ -8,7 +9,12 @@ import './adapter.css' export const primeVueUiProvider: UiProvider = { id: 'primevue-aggrid', install(app: App): void { - app.use(PrimeVue, { unstyled: true }) + app.use(PrimeVue, { + theme: { + preset: Aura, + options: { darkModeSelector: false } + } + }) installUiAdapter(app, primeVueUiAdapter) } } diff --git a/frontend/src/shared/ui/components/KsButton.vue b/frontend/src/shared/ui/components/KsButton.vue index 2614a025..04bc9860 100644 --- a/frontend/src/shared/ui/components/KsButton.vue +++ b/frontend/src/shared/ui/components/KsButton.vue @@ -1,14 +1,13 @@ diff --git a/frontend/src/shared/ui/components/KsCheckbox.vue b/frontend/src/shared/ui/components/KsCheckbox.vue index 3a97a269..d586c7d9 100644 --- a/frontend/src/shared/ui/components/KsCheckbox.vue +++ b/frontend/src/shared/ui/components/KsCheckbox.vue @@ -1,11 +1,10 @@ - + diff --git a/frontend/src/shared/ui/components/KsDataGrid.vue b/frontend/src/shared/ui/components/KsDataGrid.vue index 1c0cf3b4..d3e983ce 100644 --- a/frontend/src/shared/ui/components/KsDataGrid.vue +++ b/frontend/src/shared/ui/components/KsDataGrid.vue @@ -1,8 +1,42 @@ - + + + diff --git a/frontend/src/shared/ui/components/KsDateField.vue b/frontend/src/shared/ui/components/KsDateField.vue index c958a40d..d1691351 100644 --- a/frontend/src/shared/ui/components/KsDateField.vue +++ b/frontend/src/shared/ui/components/KsDateField.vue @@ -1,8 +1,14 @@ - + diff --git a/frontend/src/shared/ui/components/KsDialog.vue b/frontend/src/shared/ui/components/KsDialog.vue index a5a92def..b5c1a51e 100644 --- a/frontend/src/shared/ui/components/KsDialog.vue +++ b/frontend/src/shared/ui/components/KsDialog.vue @@ -1,7 +1,6 @@ - + diff --git a/frontend/src/shared/ui/components/KsInlineMessage.vue b/frontend/src/shared/ui/components/KsInlineMessage.vue index 5907e839..20a58d43 100644 --- a/frontend/src/shared/ui/components/KsInlineMessage.vue +++ b/frontend/src/shared/ui/components/KsInlineMessage.vue @@ -1,8 +1,8 @@ - + diff --git a/frontend/src/shared/ui/components/KsListPage.vue b/frontend/src/shared/ui/components/KsListPage.vue new file mode 100644 index 00000000..41616b40 --- /dev/null +++ b/frontend/src/shared/ui/components/KsListPage.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/frontend/src/shared/ui/components/KsMoneyField.vue b/frontend/src/shared/ui/components/KsMoneyField.vue index fdac5f28..787e40dc 100644 --- a/frontend/src/shared/ui/components/KsMoneyField.vue +++ b/frontend/src/shared/ui/components/KsMoneyField.vue @@ -1,15 +1,13 @@