@cat-factory/app 0.315.3 → 0.315.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +25 -4
  2. package/app/components/assistant/AssistantModal.vue +3 -2
  3. package/app/components/board/AddTaskModal.vue +3 -2
  4. package/app/components/board/CreateInitiativeModal.vue +3 -2
  5. package/app/components/board/RecurringPipelineModal.vue +3 -2
  6. package/app/components/board/ReviewFrictionDialog.vue +4 -3
  7. package/app/components/bootstrap/AdoptionReviewModal.vue +2 -0
  8. package/app/components/bootstrap/BootstrapModal.vue +3 -2
  9. package/app/components/common/AppModal.vue +50 -0
  10. package/app/components/common/ConfirmDialog.vue +5 -3
  11. package/app/components/common/KeyboardShortcutsHelp.vue +6 -4
  12. package/app/components/documents/DocumentImportModal.vue +3 -2
  13. package/app/components/documents/DocumentSourceConnectModal.vue +7 -2
  14. package/app/components/documents/DocumentTemplatesModal.vue +3 -2
  15. package/app/components/documents/SpawnPreviewModal.vue +3 -2
  16. package/app/components/documents/StartFromDesignModal.vue +3 -2
  17. package/app/components/environments/EnvironmentSetupWizard.vue +2 -0
  18. package/app/components/foundational/FoundationalServicePanel.vue +2 -0
  19. package/app/components/fragments/FragmentLibraryPanel.vue +2 -0
  20. package/app/components/github/AddServiceFromRepoModal.vue +3 -2
  21. package/app/components/github/GitHubPanel.vue +3 -2
  22. package/app/components/layout/BoardSwitcher.vue +7 -2
  23. package/app/components/layout/CommandBar.vue +3 -2
  24. package/app/components/layout/IntegrationsHub.vue +3 -6
  25. package/app/components/layout/ModelProvidersHub.vue +3 -6
  26. package/app/components/layout/PersonalSetupModal.vue +3 -6
  27. package/app/components/layout/RolePrompt.vue +3 -2
  28. package/app/components/notifications/NotificationSettingsPanel.vue +3 -6
  29. package/app/components/panels/DecisionModal.vue +3 -2
  30. package/app/components/panels/inspector/ServiceTestConfig.vue +4 -2
  31. package/app/components/pipeline/AgentPromptEditor.vue +2 -0
  32. package/app/components/pipeline/PipelineBuilder.vue +7 -2
  33. package/app/components/pipeline/PipelineHealthModal.vue +3 -2
  34. package/app/components/providers/AiPresetMismatchDialog.vue +3 -6
  35. package/app/components/providers/AiProviderOnboardingModal.vue +3 -6
  36. package/app/components/providers/PersonalCredentialModal.vue +3 -2
  37. package/app/components/providers/VendorCredentialsModal.vue +3 -6
  38. package/app/components/queue/DescribeWorkModal.vue +3 -2
  39. package/app/components/sandbox/SandboxPanel.vue +2 -0
  40. package/app/components/settings/AccountSettingsPanel.vue +1 -0
  41. package/app/components/settings/ApiTokensPanel.vue +3 -2
  42. package/app/components/settings/InfrastructureWindow.vue +3 -6
  43. package/app/components/settings/LocalModelEndpointsPanel.vue +3 -6
  44. package/app/components/settings/ModelPresetHealthModal.vue +3 -2
  45. package/app/components/settings/ObservabilityConnectionPanel.vue +3 -6
  46. package/app/components/settings/OpenRouterCatalogPanel.vue +3 -2
  47. package/app/components/settings/RiskPolicyHealthModal.vue +3 -2
  48. package/app/components/settings/UserSecretsSection.vue +3 -6
  49. package/app/components/settings/WorkspaceSettingsPanel.vue +1 -0
  50. package/app/components/setup/SetupChecklistPanel.vue +3 -2
  51. package/app/components/slack/SlackPanel.vue +3 -2
  52. package/app/components/tasks/BugHuntModal.vue +2 -0
  53. package/app/components/tasks/TaskImportModal.vue +3 -2
  54. package/app/components/tasks/TaskSourceConnectModal.vue +3 -2
  55. package/app/components/theme/ThemeImportModal.vue +4 -2
  56. package/app/components/tutorial/TutorialCatalogue.vue +4 -3
  57. package/app/components/tutorial/TutorialPrompt.vue +3 -2
  58. package/app/utils/overlaySize.ts +22 -0
  59. package/package.json +1 -1
@@ -19,6 +19,7 @@ import ContextIssuePicker from '~/components/tasks/ContextIssuePicker.vue'
19
19
  import IntegrationBackTitle from '~/components/layout/IntegrationBackTitle.vue'
20
20
  import SectionLabel from '~/components/common/SectionLabel.vue'
21
21
  import EmptyState from '~/components/common/EmptyState.vue'
22
+ import AppModal from '~/components/common/AppModal.vue'
22
23
 
23
24
  const { t } = useI18n()
24
25
  const ui = useUiStore()
@@ -120,7 +121,7 @@ async function doSpawnEpic() {
120
121
  </script>
121
122
 
122
123
  <template>
123
- <UModal v-model:open="open" :title="title">
124
+ <AppModal size="form" v-model:open="open" :title="title">
124
125
  <template #title>
125
126
  <IntegrationBackTitle :title="title" @back="back" />
126
127
  </template>
@@ -215,5 +216,5 @@ async function doSpawnEpic() {
215
216
  </div>
216
217
  </div>
217
218
  </template>
218
- </UModal>
219
+ </AppModal>
219
220
  </template>
@@ -12,6 +12,7 @@
12
12
  // available (Jira connected / the GitHub App installed) — there is nothing to offer
13
13
  // before that.
14
14
  import IntegrationBackTitle from '~/components/layout/IntegrationBackTitle.vue'
15
+ import AppModal from '~/components/common/AppModal.vue'
15
16
 
16
17
  const { t } = useI18n()
17
18
  const ui = useUiStore()
@@ -116,7 +117,7 @@ async function toggleEnabled(enabled: boolean) {
116
117
  </script>
117
118
 
118
119
  <template>
119
- <UModal v-model:open="open" :title="descriptor?.label ?? t('tasks.connect.title')">
120
+ <AppModal size="form" v-model:open="open" :title="descriptor?.label ?? t('tasks.connect.title')">
120
121
  <template #title>
121
122
  <IntegrationBackTitle :title="descriptor?.label ?? t('tasks.connect.title')" @back="back" />
122
123
  </template>
@@ -212,5 +213,5 @@ async function toggleEnabled(enabled: boolean) {
212
213
  </div>
213
214
  </div>
214
215
  </template>
215
- </UModal>
216
+ </AppModal>
216
217
  </template>
@@ -2,6 +2,7 @@
2
2
  import { computed, ref, watch } from 'vue'
3
3
  import { useThemeStore } from '~/stores/theme'
4
4
  import { decodeThemeLink, type ThemeLinkDecodeResult } from '~/utils/theme/link'
5
+ import AppModal from '~/components/common/AppModal.vue'
5
6
 
6
7
  // Import a theme built in the Nuxt UI theme editor (https://ui.nuxt.com/theme): the user pastes
7
8
  // the editor's share link (or the raw document JSON), names it, and the theme is stored in this
@@ -60,7 +61,8 @@ async function submit() {
60
61
  </script>
61
62
 
62
63
  <template>
63
- <UModal
64
+ <AppModal
65
+ size="prompt"
64
66
  v-model:open="open"
65
67
  :title="t('appearance.import.title')"
66
68
  :description="t('appearance.import.description')"
@@ -111,5 +113,5 @@ async function submit() {
111
113
  </div>
112
114
  </UForm>
113
115
  </template>
114
- </UModal>
116
+ </AppModal>
115
117
  </template>
@@ -14,6 +14,7 @@ import { buildCatalogueRows, summarizeProgress } from './TutorialCatalogue.logic
14
14
  import type { TutorialCatalogueRow } from './TutorialCatalogue.logic'
15
15
  import { TUTORIAL_ACTION_KEYS, TUTORIAL_STATUS_KEYS } from '~/utils/tutorial'
16
16
  import EmptyState from '~/components/common/EmptyState.vue'
17
+ import AppModal from '~/components/common/AppModal.vue'
17
18
 
18
19
  const { t } = useI18n()
19
20
  const tutorial = useTutorialStore()
@@ -51,11 +52,11 @@ const statusColor = (row: TutorialCatalogueRow) =>
51
52
  </script>
52
53
 
53
54
  <template>
54
- <UModal
55
+ <AppModal
56
+ size="form"
55
57
  v-model:open="open"
56
58
  :title="t('tutorial.catalogue.title')"
57
59
  :description="t('tutorial.catalogue.intro')"
58
- :ui="{ content: 'max-w-2xl' }"
59
60
  >
60
61
  <template #body>
61
62
  <div class="space-y-4" data-testid="tutorial-catalogue">
@@ -162,5 +163,5 @@ const statusColor = (row: TutorialCatalogueRow) =>
162
163
  </UButton>
163
164
  </div>
164
165
  </template>
165
- </UModal>
166
+ </AppModal>
166
167
  </template>
@@ -15,6 +15,7 @@
15
15
  // prompt never auto-opens again), while closing without answering defers to next launch.
16
16
  import { TUTORIAL_ACTION_KEYS } from '~/utils/tutorial'
17
17
  import EmptyState from '~/components/common/EmptyState.vue'
18
+ import AppModal from '~/components/common/AppModal.vue'
18
19
 
19
20
  const { t } = useI18n()
20
21
  const tutorial = useTutorialStore()
@@ -34,7 +35,7 @@ const undecided = computed(() => tutorial.decision === null)
34
35
  </script>
35
36
 
36
37
  <template>
37
- <UModal v-model:open="open" :title="t('tutorial.prompt.title')" :ui="{ content: 'max-w-lg' }">
38
+ <AppModal size="prompt" v-model:open="open" :title="t('tutorial.prompt.title')">
38
39
  <template #body>
39
40
  <!-- NOTE for spec authors: this marks the modal's BODY, so it is the "prompt is
40
41
  showing" signal, not a container for everything in the prompt. The footer's
@@ -125,5 +126,5 @@ const undecided = computed(() => tutorial.decision === null)
125
126
  </div>
126
127
  </div>
127
128
  </template>
128
- </UModal>
129
+ </AppModal>
129
130
  </template>
@@ -0,0 +1,22 @@
1
+ /**
2
+ * The named overlay widths (#2251). A dialog names the KIND of content it holds, not a width:
3
+ *
4
+ * - `prompt` (448px): a confirmation, a decision, a short read, or a dialog with one or two fields.
5
+ * - `form` (576px): a form, a list or a hub to work through.
6
+ * - `wide` (672px): cards that each carry a paragraph and an action beside it, a row of tabs over
7
+ * a form, or three pickers side by side (the AI provider onboarding, the vendor credentials, the
8
+ * setup checklist, describe new work).
9
+ *
10
+ * A workbench surface (the sandbox, the agent prompt editor, the libraries
11
+ * and settings panels) is wider than `wide` on purpose and keeps its literal width until #2359
12
+ * decides its shell; it says so with a `workbench-width-ok:` comment that
13
+ * `scripts/check-frontend-geometry.mjs` reads. A `Record` over the union, so a new size fails to
14
+ * compile until it is mapped.
15
+ */
16
+ export type OverlaySize = 'prompt' | 'form' | 'wide'
17
+
18
+ export const OVERLAY_WIDTH_CLASS: Record<OverlaySize, string> = {
19
+ prompt: 'max-w-md',
20
+ form: 'max-w-xl',
21
+ wide: 'max-w-2xl',
22
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cat-factory/app",
3
- "version": "0.315.3",
3
+ "version": "0.315.4",
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",