@cat-factory/app 0.58.0 → 0.58.2

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.
@@ -45,6 +45,7 @@ const CONFLICT_TITLE_KEYS: Record<
45
45
  github_not_connected: 'errors.conflict.title.github_not_connected',
46
46
  bootstrap_not_retryable: 'errors.conflict.title.bootstrap_not_retryable',
47
47
  bootstrap_reference_missing: 'errors.conflict.title.bootstrap_reference_missing',
48
+ provision_type_unhandled: 'errors.conflict.title.provision_type_unhandled',
48
49
  }
49
50
 
50
51
  /**
@@ -0,0 +1,32 @@
1
+ <!-- Early SPA loading shell painted before the JS bundle parses + Vue mounts
2
+ (Nuxt removes it on mount). Self-contained: main.css/icon fonts aren't loaded
3
+ yet, so styles + spinner are inline pure-CSS. Spinner-only keeps it
4
+ locale-neutral. Wired via app.spaLoadingTemplate in nuxt.config.ts. -->
5
+ <div class="cf-spa-loader" role="status" aria-label="Loading">
6
+ <div class="cf-spa-loader__spinner"></div>
7
+ </div>
8
+ <style>
9
+ .cf-spa-loader {
10
+ position: fixed;
11
+ inset: 0;
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ /* --board-bg / slate-950, matching the board surface AuthGate renders on. */
16
+ background-color: #0b1020;
17
+ }
18
+ .cf-spa-loader__spinner {
19
+ width: 2rem;
20
+ height: 2rem;
21
+ border-radius: 9999px;
22
+ /* Track in slate-700, the active arc in indigo-500 (the app's primary). */
23
+ border: 3px solid #334155;
24
+ border-top-color: #6366f1;
25
+ animation: cf-spa-spin 1s linear infinite;
26
+ }
27
+ @keyframes cf-spa-spin {
28
+ to {
29
+ transform: rotate(360deg);
30
+ }
31
+ }
32
+ </style>
@@ -282,7 +282,8 @@
282
282
  "no_pr_to_merge": "No PR to merge",
283
283
  "github_not_connected": "GitHub not connected",
284
284
  "bootstrap_not_retryable": "Bootstrap can’t be retried",
285
- "bootstrap_reference_missing": "Reference architecture is gone"
285
+ "bootstrap_reference_missing": "Reference architecture is gone",
286
+ "provision_type_unhandled": "No handler for this provision type"
286
287
  },
287
288
  "fallbackMessage": "This action conflicts with the current state.",
288
289
  "providersUnconfigured": {
package/nuxt.config.ts CHANGED
@@ -102,6 +102,14 @@ export default defineNuxtConfig({
102
102
  },
103
103
  },
104
104
 
105
+ // Static loader shown before the JS bundle parses + Vue mounts, so the very
106
+ // first paint isn't a blank white screen. This is a Nuxt *layer*, and Nuxt's
107
+ // default `spaLoadingTemplate` resolution looks under the CONSUMER's srcDir,
108
+ // so a file dropped in this layer would be silently ignored when a deployment
109
+ // `extends` it — anchor it to this layer's dir (the same `~`/`@` rebinding
110
+ // trap the `css:` block above works around). See the comment at the top.
111
+ spaLoadingTemplate: join(layerDir, 'app/spa-loading-template.html'),
112
+
105
113
  app: {
106
114
  head: {
107
115
  title: 'Agent Architecture Board',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.58.0",
3
+ "version": "0.58.2",
4
4
  "description": "Reusable Nuxt layer for the Agent Architecture Board SPA (components, stores, composables, pages). Consume it from a thin deployment app via `extends: ['@cat-factory/app']` and point it at your backend with NUXT_PUBLIC_API_BASE. See deploy/frontend for an example.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,7 +34,7 @@
34
34
  "valibot": "^1.4.2",
35
35
  "vue": "^3.5.39",
36
36
  "wretch": "^3.0.9",
37
- "@cat-factory/contracts": "0.58.0"
37
+ "@cat-factory/contracts": "0.60.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@toad-contracts/testing": "0.3.2",