@enfyra/mcp-server 0.0.121 → 0.0.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enfyra/mcp-server",
3
- "version": "0.0.121",
3
+ "version": "0.0.122",
4
4
  "description": "MCP server for Enfyra - manage Enfyra instances from MCP-compatible coding tools",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1574,6 +1574,8 @@ ensure_page_extension({
1574
1574
  'For general card grids inside the shell, use md:grid-cols-2 xl:grid-cols-3 instead of lg:grid-cols-3 because the desktop sidebar leaves tablet-width content at 1024px.',
1575
1575
  'Do not use Nuxt UI neutral semantic classes such as bg-default, text-muted, text-dimmed, border-default, or divide-default inside extension code; use eApp class tokens instead. Do not write text-[var(...)], bg-[var(...)], or border-[var(...)] in generated extension templates unless no class token exists for that exact primitive.',
1576
1576
  'Do not pass ui.content: "eapp-surface-card" to UModal/CommonModal; modal content uses the app modal surface and caller content classes should only append z-index or width.',
1577
+ 'CommonModal and CommonDrawer own action-only footers through cancelAction, primaryAction, dangerAction, leadingActions, and footerHint. Pass action intent through props instead of styling footer buttons manually; cancelAction defaults to error outline, Close/Done should use tone: "neutral", and Keep editing should use tone: "primary" in discard dialogs.',
1578
+ 'Use UTabs for page sections instead of custom tab bars so the app-level active/inactive indicators, spacing, focus rings, and theme contrast stay consistent.',
1577
1579
  'Do not inject global CSS, create theme guards, redefine the app palette, or solve one extension by overriding the whole app shell.',
1578
1580
  'Keep list selection local and fetch detail rows only; do not refetch the whole list after a row click unless the list data changed.',
1579
1581
  'Page extension paths are admin app UI routes. Do not verify them with test_rest_endpoint against ENFYRA_API_URL unless inspect_route shows an API route with the same path.',
@@ -1906,9 +1908,13 @@ onMounted(() => fetchOrders())
1906
1908
  ],
1907
1909
  },
1908
1910
  {
1909
- name: 'Modal and drawer buttons do not submit accidentally',
1911
+ name: 'Managed modal and drawer footer actions',
1910
1912
  code: `<template>
1911
- <CommonModal v-model:open="open">
1913
+ <CommonModal
1914
+ v-model:open="open"
1915
+ :cancel-action="{ label: 'Cancel', onClick: () => (open = false) }"
1916
+ :primary-action="{ label: 'Update version', loading: saving, disabled: !canSubmit, onClick: submit }"
1917
+ >
1912
1918
  <template #header>
1913
1919
  <h3 class="text-lg font-semibold">Update version</h3>
1914
1920
  </template>
@@ -1922,28 +1928,13 @@ onMounted(() => fetchOrders())
1922
1928
  @click.stop.prevent="checkVersion"
1923
1929
  />
1924
1930
  </template>
1925
-
1926
- <template #footer>
1927
- <UButton
1928
- type="button"
1929
- color="neutral"
1930
- variant="ghost"
1931
- label="Cancel"
1932
- @click.stop.prevent="open = false"
1933
- />
1934
- <UButton
1935
- type="button"
1936
- color="primary"
1937
- label="Update version"
1938
- :disabled="!canSubmit"
1939
- @click.stop.prevent="submit"
1940
- />
1941
- </template>
1942
1931
  </CommonModal>
1943
1932
  </template>`,
1944
1933
  notes: [
1945
- 'Every trigger/footer/action button inside CommonModal, CommonDrawer, or UModal should use type="button" unless it intentionally submits a form.',
1946
- 'Use @click.stop.prevent on modal/drawer action buttons so clicks do not bubble to row/page triggers.',
1934
+ 'For action-only footers, use CommonModal/CommonDrawer footer props: cancelAction, primaryAction, dangerAction, leadingActions, and footerHint.',
1935
+ 'cancelAction defaults to error outline because it usually backs out of a mutation. Use tone: "neutral" for Close/Done and tone: "primary" for Keep editing in discard dialogs.',
1936
+ 'Every trigger/body action button inside CommonModal, CommonDrawer, or UModal should use type="button" unless it intentionally submits a form.',
1937
+ 'Use @click.stop.prevent on body action buttons so clicks do not bubble to row/page triggers.',
1947
1938
  'Open modal/drawer shells immediately, then load content inside them; do not close and reopen after an API call.',
1948
1939
  'Keep destructive final actions disabled until all confirmation inputs are valid.',
1949
1940
  ],
@@ -347,7 +347,10 @@ function getExtensionThemeContract() {
347
347
  'Buttons should have stable geometry: hover may change color, border, or shadow but must not move the button or resize its content. Disabled buttons keep disabled cursor/visual state.',
348
348
  'Inputs and textareas should not add hover movement or decorative hover states; focus, invalid, disabled, and loading states must be explicit.',
349
349
  'Dynamic extensions resolve UModal to the app CommonModal. Do not pass ui.content: "eapp-surface-card" or "surface-card" to UModal/CommonModal; modal content uses the app modal surface and caller ui.content should only append z-index, width, or max-width classes.',
350
+ 'CommonModal and CommonDrawer own action-only footers through cancelAction, primaryAction, dangerAction, leadingActions, and footerHint. Pass footer button intent through those props instead of custom footer slots. cancelAction defaults to error outline; use tone: "neutral" for Close/Done and tone: "primary" for Keep editing in discard dialogs.',
351
+ 'Use custom #footer content only when the footer contains real custom layout or non-button content. Every modal/drawer button should use type="button" unless it intentionally submits a form.',
350
352
  'Use CommonDrawer for side-panel editing. Open drawers immediately on user action and render loading/error/content inside the drawer instead of waiting for fetch before opening.',
353
+ 'Use UTabs for page sections and large grouped forms instead of custom tab bars; the app-level Nuxt UI override owns active and inactive indicators, focus rings, spacing, and theme contrast.',
351
354
  'Use UBadge or token-backed badge spans for status. Keep badges legible in both themes with tokenized background, text, and border.',
352
355
  ],
353
356
  loadingAndLists: [