diff --git a/plugins/ms-ai-architect/playground/ms-ai-architect-v3.html b/plugins/ms-ai-architect/playground/ms-ai-architect-v3.html index 923a463..7f70b13 100644 --- a/plugins/ms-ai-architect/playground/ms-ai-architect-v3.html +++ b/plugins/ms-ai-architect/playground/ms-ai-architect-v3.html @@ -86,9 +86,40 @@ /* Modal */ .modal-backdrop { position: fixed; inset: 0; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 100; padding: var(--space-4); } .modal { background: var(--color-surface); border-radius: var(--radius-lg); padding: var(--space-5); max-width: 560px; width: 100%; max-height: 90vh; overflow-y: auto; box-shadow: var(--shadow-lg); display: flex; flex-direction: column; gap: var(--space-4); } + .modal--wide { max-width: 760px; } .modal__title { margin: 0; font-size: var(--font-size-xl); } .modal__actions { display: flex; gap: var(--space-2); justify-content: flex-end; padding-top: var(--space-3); border-top: 1px solid var(--color-border-subtle); } [data-theme="dark"] .modal-backdrop { background: rgba(0,0,0,0.7); } + + /* Command form (Step 8) */ + .command-form { display: flex; flex-direction: column; gap: var(--space-3); } + .command-form__fields { display: flex; flex-direction: column; gap: var(--space-3); } + .command-form__actions { display: flex; gap: var(--space-2); align-items: center; flex-wrap: wrap; padding-top: var(--space-2); border-top: 1px dashed var(--color-border-subtle); } + .command-form__hint { font-size: var(--font-size-xs); color: var(--color-text-tertiary); } + .command-form__copy-confirm { font-size: var(--font-size-xs); color: var(--color-text-secondary); } + .field-from-tag { display: inline-block; padding: 1px 6px; background: var(--color-bg-soft); color: var(--color-text-tertiary); border-radius: var(--radius-sm); font-size: 10px; font-weight: var(--font-weight-medium); margin-left: 6px; letter-spacing: 0.04em; text-transform: uppercase; } + .form-preview { padding: var(--space-3); background: var(--color-bg-soft); border-radius: var(--radius-sm); margin-top: var(--space-2); overflow-x: auto; } + .form-preview__heading { font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.06em; color: var(--color-text-tertiary); margin: 0 0 var(--space-2); } + .code-block { font-family: var(--font-family-mono); font-size: var(--font-size-xs); color: var(--color-text-primary); white-space: pre-wrap; word-break: break-all; margin: 0; } + + /* Catalog (Step 9) */ + .catalog-header { display: flex; flex-direction: column; gap: var(--space-2); margin: var(--space-3) 0 var(--space-4); } + .catalog-header h1 { font-size: var(--font-size-2xl); margin: 0; } + .catalog-header p { color: var(--color-text-secondary); margin: 0; max-width: 70ch; } + .catalog-toolbar { display: flex; gap: var(--space-3); align-items: center; margin-bottom: var(--space-4); flex-wrap: wrap; } + .catalog-toolbar .input { max-width: 480px; flex: 1 1 280px; } + .catalog-toolbar__count { font-size: var(--font-size-sm); color: var(--color-text-tertiary); } + .catalog-groups { display: flex; flex-direction: column; gap: var(--space-3); } + .catalog-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: var(--space-3); padding: var(--space-2) 0; } + .catalog-card { background: var(--color-surface); border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); padding: var(--space-4); display: flex; flex-direction: column; gap: var(--space-2); } + .catalog-card__head { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--space-2); } + .catalog-card__title { font-size: var(--font-size-md); margin: 0; font-weight: var(--font-weight-semibold); } + .catalog-card__desc { font-size: var(--font-size-sm); color: var(--color-text-secondary); margin: 4px 0 0; } + .catalog-card__pill { padding: 2px 8px; background: var(--color-bg-soft); color: var(--color-text-secondary); border-radius: var(--radius-sm); font-size: 10px; font-weight: var(--font-weight-medium); flex-shrink: 0; text-transform: uppercase; letter-spacing: 0.04em; } + .catalog-card__meta { display: flex; gap: var(--space-2); flex-wrap: wrap; align-items: center; } + .catalog-card__hint { font-size: var(--font-size-xs); color: var(--color-text-tertiary); font-family: var(--font-family-mono); } + .catalog-card__actions { display: flex; gap: var(--space-2); margin-top: auto; padding-top: var(--space-2); } + .catalog-tool-notice { padding: var(--space-2) var(--space-3); background: var(--color-bg-soft); border-left: 3px solid var(--color-primary-500); border-radius: var(--radius-sm); font-size: var(--font-size-xs); color: var(--color-text-secondary); }
@@ -1131,6 +1162,244 @@ } function escapeAttr(str) { return escapeHtml(str); } + // ============================================================ + // COMMAND FORM RENDERER + __buildCommand (Step 8) + // ============================================================ + // + // renderCommandForm(commandId, opts) genererer HTML for ett command-skjema + // basert på CATALOG[id].input_fields. Brukes både i prosjekt-detalj + // (Step 7 form-zone) og i katalog-modal (Step 9). Felter med from='shared' + // pre-fylles fra state.shared via field.shared_path; lokale felter + // pre-fylles fra project.reports[id].input når opts.projectId er gitt. + // + // window.__buildCommand(commandId, formData) bygger '/architect:Ukjent command: ' + escapeHtml(commandId) + '