@jay-framework/aiditor 0.20.0 → 0.21.0

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.
@@ -463,19 +463,31 @@
463
463
  text-transform: uppercase;
464
464
  color: var(--harmony-text-muted);
465
465
  }
466
- .harmony-routes-panel-section-title + .harmony-routes-panel-item,
467
- .harmony-routes-panel-item + .harmony-routes-panel-section-title {
466
+ .harmony-routes-panel-section-title + .harmony-routes-panel-item-row,
467
+ .harmony-routes-panel-item-row + .harmony-routes-panel-section-title {
468
468
  margin-top: 4px;
469
469
  padding-top: 14px;
470
470
  border-top: 1px solid var(--harmony-border);
471
471
  }
472
+ .harmony-routes-panel-item-row {
473
+ display: flex;
474
+ align-items: center;
475
+ width: 100%;
476
+ }
477
+ .harmony-routes-panel-item-row:hover {
478
+ background: var(--harmony-bg-hover);
479
+ }
480
+ .harmony-routes-panel-item-row--selected {
481
+ background: var(--harmony-primary-soft);
482
+ }
472
483
  .harmony-routes-panel-item {
473
484
  display: flex;
474
485
  align-items: center;
475
486
  gap: 8px;
476
- width: 100%;
487
+ flex: 1;
488
+ min-width: 0;
477
489
  box-sizing: border-box;
478
- padding: 9px 16px;
490
+ padding: 9px 8px 9px 16px;
479
491
  border: none;
480
492
  background: transparent;
481
493
  color: var(--harmony-text);
@@ -485,10 +497,9 @@
485
497
  cursor: pointer;
486
498
  }
487
499
  .harmony-routes-panel-item:hover {
488
- background: var(--harmony-bg-hover);
500
+ background: transparent;
489
501
  }
490
502
  .harmony-routes-panel-item--selected {
491
- background: var(--harmony-primary-soft);
492
503
  color: var(--harmony-primary);
493
504
  font-weight: 600;
494
505
  }
@@ -506,6 +517,35 @@
506
517
  text-overflow: ellipsis;
507
518
  white-space: nowrap;
508
519
  }
520
+ .harmony-routes-panel-open-tab {
521
+ flex-shrink: 0;
522
+ display: inline-flex;
523
+ align-items: center;
524
+ justify-content: center;
525
+ width: 32px;
526
+ height: 32px;
527
+ margin-right: 8px;
528
+ padding: 0;
529
+ border: none;
530
+ border-radius: var(--harmony-radius-sm);
531
+ background: transparent;
532
+ color: var(--harmony-text-muted);
533
+ cursor: pointer;
534
+ transition: color 0.12s ease, background 0.12s ease;
535
+ }
536
+ .harmony-routes-panel-open-tab:hover {
537
+ color: var(--harmony-text);
538
+ background: transparent;
539
+ }
540
+ .harmony-routes-panel-open-tab:focus-visible {
541
+ outline: 2px solid var(--harmony-primary);
542
+ outline-offset: 1px;
543
+ }
544
+ .harmony-routes-panel-open-tab-icon {
545
+ display: block;
546
+ width: 18px;
547
+ height: 18px;
548
+ }
509
549
  .harmony-routes-panel-empty {
510
550
  margin: 0;
511
551
  padding: 16px;
@@ -1042,14 +1082,54 @@
1042
1082
  .harmony-url-bar-wrap { flex: 1; min-width: 0; }
1043
1083
  .url-bar-wrap { flex: 1; min-width: 200px; }
1044
1084
  .url-bar {
1085
+ display: flex;
1086
+ align-items: center;
1087
+ gap: 4px;
1045
1088
  font-size: 12px;
1046
1089
  font-family: var(--harmony-mono);
1047
1090
  color: var(--harmony-text-secondary);
1048
1091
  background: var(--harmony-bg-surface);
1049
1092
  border: 1px solid var(--harmony-border);
1050
1093
  border-radius: var(--harmony-radius-sm);
1051
- padding: 7px 12px;
1052
- word-break: break-all;
1094
+ padding: 4px 4px 4px 12px;
1095
+ }
1096
+ .url-bar-text {
1097
+ flex: 1;
1098
+ min-width: 0;
1099
+ overflow: hidden;
1100
+ text-overflow: ellipsis;
1101
+ white-space: nowrap;
1102
+ }
1103
+ .url-bar-open-tab {
1104
+ flex-shrink: 0;
1105
+ display: inline-flex;
1106
+ align-items: center;
1107
+ justify-content: center;
1108
+ width: 28px;
1109
+ height: 28px;
1110
+ padding: 0;
1111
+ border: none;
1112
+ border-radius: var(--harmony-radius-sm);
1113
+ background: transparent;
1114
+ color: var(--harmony-text-muted);
1115
+ cursor: pointer;
1116
+ transition: color 0.12s ease, background 0.12s ease;
1117
+ }
1118
+ .url-bar-open-tab:hover:not(:disabled) {
1119
+ color: var(--harmony-text);
1120
+ background: var(--harmony-bg-hover);
1121
+ }
1122
+ .url-bar-open-tab:disabled {
1123
+ opacity: 0.4;
1124
+ cursor: default;
1125
+ }
1126
+ .url-bar-open-tab:focus-visible {
1127
+ outline: 2px solid var(--harmony-primary);
1128
+ outline-offset: 1px;
1129
+ }
1130
+ .url-bar-open-tab .harmony-routes-panel-open-tab-icon {
1131
+ width: 24px;
1132
+ height: 24px;
1053
1133
  }
1054
1134
 
1055
1135
  .preview-loading { font-size: 13px; color: var(--harmony-text-muted); }
@@ -1298,6 +1378,19 @@
1298
1378
  .visual-attachment-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 160px; }
1299
1379
  .visual-attachment-remove-file { background: transparent; border: none; color: var(--harmony-text-muted); cursor: pointer; font-size: 14px; line-height: 1; padding: 0 4px; }
1300
1380
  .visual-attachment-remove-file:hover { color: var(--harmony-danger); }
1381
+ .visual-attachment-chip-actions {
1382
+ display: flex;
1383
+ flex-direction: column;
1384
+ align-items: center;
1385
+ gap: 2px;
1386
+ flex-shrink: 0;
1387
+ }
1388
+ .visual-attachment-number {
1389
+ font-size: 10px;
1390
+ font-weight: 600;
1391
+ color: var(--harmony-primary);
1392
+ line-height: 1;
1393
+ }
1301
1394
  .file-input-hidden { display: none; }
1302
1395
  .visual-error { font-size: 12px; color: var(--harmony-danger); }
1303
1396
  .visual-submit-error { font-size: 12px; color: var(--harmony-danger); margin: 0; padding: 0 2px; }
@@ -2424,6 +2517,71 @@
2424
2517
  color: var(--harmony-text);
2425
2518
  border-bottom-color: var(--harmony-primary);
2426
2519
  }
2520
+ .add-page-tab--generating {
2521
+ color: var(--harmony-primary);
2522
+ }
2523
+ .add-page-brief-generating-overlay {
2524
+ position: absolute;
2525
+ inset: 0;
2526
+ z-index: 3;
2527
+ display: flex;
2528
+ flex-direction: column;
2529
+ align-items: center;
2530
+ justify-content: center;
2531
+ gap: 10px;
2532
+ background: rgba(255, 255, 255, 0.78);
2533
+ backdrop-filter: blur(6px);
2534
+ -webkit-backdrop-filter: blur(6px);
2535
+ border-radius: var(--harmony-radius-sm);
2536
+ pointer-events: auto;
2537
+ }
2538
+ .add-page-brief-generating-overlay .add-page-hint {
2539
+ margin: 0;
2540
+ font-size: 13px;
2541
+ color: var(--harmony-text-secondary);
2542
+ }
2543
+ .add-page-brief-generating-stop {
2544
+ flex: 0;
2545
+ padding: 4px 12px;
2546
+ font-size: 12px;
2547
+ }
2548
+ .add-page-textarea:disabled {
2549
+ opacity: 0.55;
2550
+ cursor: not-allowed;
2551
+ }
2552
+ .add-page-discard-confirm-overlay {
2553
+ position: absolute;
2554
+ inset: 0;
2555
+ z-index: 30;
2556
+ background: rgba(22, 45, 61, 0.45);
2557
+ display: flex;
2558
+ align-items: center;
2559
+ justify-content: center;
2560
+ padding: 24px;
2561
+ box-sizing: border-box;
2562
+ }
2563
+ .add-page-discard-confirm-dialog {
2564
+ background: var(--harmony-bg-surface);
2565
+ border: 1px solid var(--harmony-border);
2566
+ border-radius: var(--harmony-radius-lg);
2567
+ width: min(400px, 100%);
2568
+ padding: 20px 24px;
2569
+ box-shadow: var(--harmony-shadow-lg);
2570
+ display: flex;
2571
+ flex-direction: column;
2572
+ gap: 16px;
2573
+ }
2574
+ .add-page-discard-confirm-msg {
2575
+ margin: 0;
2576
+ font-size: 14px;
2577
+ line-height: 1.45;
2578
+ color: var(--harmony-text);
2579
+ }
2580
+ .add-page-discard-confirm-actions {
2581
+ display: flex;
2582
+ justify-content: flex-end;
2583
+ gap: 8px;
2584
+ }
2427
2585
  .add-page-tab-panel {
2428
2586
  display: flex;
2429
2587
  flex-direction: column;
@@ -2461,6 +2619,9 @@
2461
2619
  .asset-mention-autocomplete[hidden] {
2462
2620
  display: none !important;
2463
2621
  }
2622
+ .asset-mention-autocomplete--above {
2623
+ transform: translateY(-100%);
2624
+ }
2464
2625
  .asset-mention-header {
2465
2626
  display: flex;
2466
2627
  align-items: center;
@@ -2689,12 +2850,28 @@
2689
2850
  padding: 24px;
2690
2851
  box-sizing: border-box;
2691
2852
  }
2853
+ .add-page-brief-fill-popover-stack {
2854
+ display: flex;
2855
+ flex-direction: column;
2856
+ align-items: center;
2857
+ gap: 10px;
2858
+ width: min(420px, 100%);
2859
+ max-height: 90%;
2860
+ }
2861
+ .add-page-brief-fill-stop-confirm {
2862
+ align-self: center;
2863
+ max-width: 100%;
2864
+ white-space: normal;
2865
+ text-align: center;
2866
+ flex-wrap: wrap;
2867
+ justify-content: center;
2868
+ }
2692
2869
  .add-page-brief-fill-panel {
2693
2870
  background: var(--harmony-bg-surface);
2694
2871
  border: 1px solid var(--harmony-border);
2695
2872
  border-radius: var(--harmony-radius-md);
2696
- width: min(420px, 100%);
2697
- max-height: 90%;
2873
+ width: 100%;
2874
+ max-height: 100%;
2698
2875
  overflow: auto;
2699
2876
  padding: 14px 16px;
2700
2877
  display: flex;
@@ -2858,6 +3035,11 @@
2858
3035
  .add-page-dropzone .add-page-btn--compact {
2859
3036
  flex: 0 0 auto;
2860
3037
  }
3038
+ .add-page-dropzone--disabled {
3039
+ opacity: 0.45;
3040
+ cursor: not-allowed;
3041
+ pointer-events: none;
3042
+ }
2861
3043
  .add-page-chips { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
2862
3044
  .add-page-chip {
2863
3045
  display: flex;
@@ -3772,6 +3954,7 @@ data:
3772
3954
  isSelected: boolean
3773
3955
  checkGlyph: string
3774
3956
  cssClass: string
3957
+ rowCssClass: string
3775
3958
  showPagesPanelEmptySearch: boolean
3776
3959
  showInstanceSwitcher: boolean
3777
3960
  showInstanceSwitcherMenu: boolean
@@ -3997,6 +4180,7 @@ data:
3997
4180
  showAssetMentionPanel: boolean
3998
4181
  assetMentionLeft: number
3999
4182
  assetMentionTop: number
4183
+ assetMentionOpensAbove: boolean
4000
4184
  assetMentionHeaderTitle: string
4001
4185
  showAssetMentionHeaderBack: boolean
4002
4186
  showAssetMentionSearchField: boolean
@@ -4017,6 +4201,7 @@ data:
4017
4201
  toastMessage: string
4018
4202
  isPreviewMode: boolean
4019
4203
  previewUrlBar: string
4204
+ previewUrlBarOpenTabDisabled: boolean
4020
4205
  previewLoading: boolean
4021
4206
  previewError: string
4022
4207
  selectedPreviewPath: string
@@ -4083,6 +4268,7 @@ data:
4083
4268
  name: string
4084
4269
  thumbUrl: string
4085
4270
  annotationId: string
4271
+ numberLabel: string
4086
4272
  addMenuSectionOpen: boolean
4087
4273
  showAddMenuControls: boolean
4088
4274
  showMarkerAddMenuChips: boolean
@@ -4119,11 +4305,13 @@ data:
4119
4305
  name: string
4120
4306
  thumbUrl: string
4121
4307
  annotationId: string
4308
+ numberLabel: string
4122
4309
  recordingDraftAttachmentChips:
4123
4310
  - key: string
4124
4311
  name: string
4125
4312
  thumbUrl: string
4126
4313
  annotationId: string
4314
+ numberLabel: string
4127
4315
  showRecordingDraftPopover: boolean
4128
4316
  showVisualAnnotationsPanel: boolean
4129
4317
  showVisualSubmitError: boolean
@@ -4185,6 +4373,7 @@ data:
4185
4373
  name: string
4186
4374
  thumbUrl: string
4187
4375
  annotationId: string
4376
+ numberLabel: string
4188
4377
  addMenuSectionOpen: boolean
4189
4378
  showAddMenuControls: boolean
4190
4379
  showMarkerAddMenuChips: boolean
@@ -4272,6 +4461,7 @@ data:
4272
4461
  name: string
4273
4462
  thumbUrl: string
4274
4463
  annotationId: string
4464
+ numberLabel: string
4275
4465
  addMenuSectionOpen: boolean
4276
4466
  showAddMenuControls: boolean
4277
4467
  showMarkerAddMenuChips: boolean
@@ -4396,12 +4586,24 @@ data:
4396
4586
  briefFillContextNotes: string
4397
4587
  briefFillPopoverError: string
4398
4588
  showBriefFillPopoverError: boolean
4399
- briefFillDisabled: boolean
4589
+ briefFillContentDisabled: boolean
4590
+ briefFillDesignDisabled: boolean
4400
4591
  briefFillInputDisabled: boolean
4401
4592
  briefFillDropzoneClass: string
4402
4593
  addPageBriefFillGenerateDisabled: boolean
4403
- briefFillStatusHint: string
4404
- showBriefFillStatusHint: boolean
4594
+ contentTabGeneratingHint: string
4595
+ designTabGeneratingHint: string
4596
+ showContentTabGeneratingHint: boolean
4597
+ showDesignTabGeneratingHint: boolean
4598
+ contentGenError: string
4599
+ designGenError: string
4600
+ showContentTabGenError: boolean
4601
+ showDesignTabGenError: boolean
4602
+ addPageContentMdDisabled: boolean
4603
+ addPageDesignMdDisabled: boolean
4604
+ addPageReferencesDisabled: boolean
4605
+ addPageReferencesDropzoneClass: string
4606
+ showAddPageDiscardConfirm: boolean
4405
4607
  showBriefFillThumbnails: boolean
4406
4608
  addPageBriefFillThumbRows:
4407
4609
  - rowKey: string
@@ -4495,17 +4697,31 @@ data:
4495
4697
  </div>
4496
4698
  <div class="harmony-routes-panel-body">
4497
4699
  <p class="harmony-routes-panel-empty" if="showPagesPanelEmptySearch">No routes match your search.</p>
4498
- <button
4499
- type="button"
4700
+ <div
4500
4701
  forEach="filteredPageRouteRows"
4501
4702
  trackBy="url"
4502
- class="{cssClass}"
4503
- data-route-url="{url}"
4504
- data-routes-panel-route=""
4703
+ class="{rowCssClass}"
4505
4704
  >
4506
- <span class="harmony-routes-panel-check">{checkGlyph}</span>
4507
- <span class="harmony-routes-panel-item-label">{label}</span>
4508
- </button>
4705
+ <button
4706
+ type="button"
4707
+ class="{cssClass}"
4708
+ data-route-url="{url}"
4709
+ data-routes-panel-route=""
4710
+ >
4711
+ <span class="harmony-routes-panel-check">{checkGlyph}</span>
4712
+ <span class="harmony-routes-panel-item-label">{label}</span>
4713
+ </button>
4714
+ <button
4715
+ type="button"
4716
+ class="harmony-routes-panel-open-tab"
4717
+ data-route-url="{url}"
4718
+ data-routes-panel-open-tab=""
4719
+ aria-label="Open route in new tab"
4720
+ title="Open in new tab"
4721
+ >
4722
+ <span class="harmony-routes-panel-open-tab-icon" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.25 5C11.6642 5 12 5.33579 12 5.75C12 6.16421 11.6642 6.5 11.25 6.5H7C6.72421 6.5 6.5 6.72421 6.5 7V17C6.5 17.2758 6.72421 17.5 7 17.5H17C17.2758 17.5 17.5 17.2758 17.5 17V12.75C17.5 12.3358 17.8358 12 18.25 12C18.6642 12 19 12.3358 19 12.75V17C19 18.1042 18.1042 19 17 19H7C5.89579 19 5 18.1042 5 17V7C5 5.89579 5.89579 5 7 5H11.25Z" fill="currentColor"/><path d="M18.25 5C18.6642 5 19 5.33579 19 5.75V9.25C19 9.66421 18.6642 10 18.25 10C17.8358 10 17.5 9.66421 17.5 9.25V7.56055L15.2803 9.78027C14.9874 10.0732 14.5126 10.0732 14.2197 9.78027C13.9268 9.48738 13.9268 9.01262 14.2197 8.71973L16.4395 6.5H14.75C14.3358 6.5 14 6.16421 14 5.75C14 5.33579 14.3358 5 14.75 5H18.25Z" fill="currentColor"/></svg></span>
4723
+ </button>
4724
+ </div>
4509
4725
  </div>
4510
4726
  </div>
4511
4727
  </div>
@@ -4607,7 +4823,19 @@ data:
4607
4823
  </button>
4608
4824
  </div>
4609
4825
  <div class="url-bar-wrap harmony-url-bar-wrap">
4610
- <div class="url-bar">{previewUrlBar}</div>
4826
+ <div class="url-bar">
4827
+ <span class="url-bar-text">{previewUrlBar}</span>
4828
+ <button
4829
+ type="button"
4830
+ class="url-bar-open-tab"
4831
+ ref="previewUrlBarOpenTabBtn"
4832
+ disabled="previewUrlBarOpenTabDisabled"
4833
+ aria-label="Open preview in new tab"
4834
+ title="Open in new tab"
4835
+ >
4836
+ <span class="harmony-routes-panel-open-tab-icon" aria-hidden="true"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M11.25 5C11.6642 5 12 5.33579 12 5.75C12 6.16421 11.6642 6.5 11.25 6.5H7C6.72421 6.5 6.5 6.72421 6.5 7V17C6.5 17.2758 6.72421 17.5 7 17.5H17C17.2758 17.5 17.5 17.2758 17.5 17V12.75C17.5 12.3358 17.8358 12 18.25 12C18.6642 12 19 12.3358 19 12.75V17C19 18.1042 18.1042 19 17 19H7C5.89579 19 5 18.1042 5 17V7C5 5.89579 5.89579 5 7 5H11.25Z" fill="currentColor"/><path d="M18.25 5C18.6642 5 19 5.33579 19 5.75V9.25C19 9.66421 18.6642 10 18.25 10C17.8358 10 17.5 9.66421 17.5 9.25V7.56055L15.2803 9.78027C14.9874 10.0732 14.5126 10.0732 14.2197 9.78027C13.9268 9.48738 13.9268 9.01262 14.2197 8.71973L16.4395 6.5H14.75C14.3358 6.5 14 6.16421 14 5.75C14 5.33579 14.3358 5 14.75 5H18.25Z" fill="currentColor"/></svg></span>
4837
+ </button>
4838
+ </div>
4611
4839
  </div>
4612
4840
  <div class="canvas-chrome-right harmony-breakpoint-tools" if="showVisualToolbar">
4613
4841
  <button type="button" class="{breakpointDesktopOn ? visual-tool-on} visual-tool-btn" ref="breakpointDesktopBtn" title="Desktop (1280px)"><svg width="16" height="13" viewBox="0 0 16 13" fill="none"><rect x="0.7" y="0.7" width="14.6" height="9.1" rx="1.1" stroke="currentColor" stroke-width="1.4"/><path d="M5.5 9.8v2M10.5 9.8v2M3.5 11.8h9" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></button>
@@ -4687,13 +4915,16 @@ data:
4687
4915
  <div class="visual-attachment-chip">
4688
4916
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
4689
4917
  <span class="visual-attachment-name">{name}</span>
4690
- <button
4691
- type="button"
4692
- class="visual-attachment-remove-file"
4693
- data-annotation-id="{annotationId}"
4694
- data-att-key="{key}"
4695
- aria-label="Remove attachment"
4696
- >×</button>
4918
+ <div class="visual-attachment-chip-actions">
4919
+ <button
4920
+ type="button"
4921
+ class="visual-attachment-remove-file"
4922
+ data-annotation-id="{annotationId}"
4923
+ data-att-key="{key}"
4924
+ aria-label="Remove attachment"
4925
+ >×</button>
4926
+ <span class="visual-attachment-number">{numberLabel}</span>
4927
+ </div>
4697
4928
  </div>
4698
4929
  </div>
4699
4930
  </div>
@@ -4734,13 +4965,16 @@ data:
4734
4965
  <div class="visual-attachment-chip">
4735
4966
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
4736
4967
  <span class="visual-attachment-name">{name}</span>
4737
- <button
4738
- type="button"
4739
- class="visual-attachment-remove-file"
4740
- data-annotation-id="{annotationId}"
4741
- data-att-key="{key}"
4742
- aria-label="Remove attachment"
4743
- >×</button>
4968
+ <div class="visual-attachment-chip-actions">
4969
+ <button
4970
+ type="button"
4971
+ class="visual-attachment-remove-file"
4972
+ data-annotation-id="{annotationId}"
4973
+ data-att-key="{key}"
4974
+ aria-label="Remove attachment"
4975
+ >×</button>
4976
+ <span class="visual-attachment-number">{numberLabel}</span>
4977
+ </div>
4744
4978
  </div>
4745
4979
  </div>
4746
4980
  </div>
@@ -5012,9 +5246,14 @@ data:
5012
5246
  <div class="add-page-section-label">Content</div>
5013
5247
  <p class="add-page-hint">Behavior, plugins, contracts, interactions, copy.</p>
5014
5248
  <div class="add-page-textarea-wrap">
5015
- <textarea class="add-page-textarea" ref="addPageContentMd" placeholder="# Pricing page&#10;- Headless: none (static marketing page)&#10;- Show 3 tiers: Starter / Pro / Enterprise" value="{addPageContentMd}"></textarea>
5016
- <button type="button" class="add-page-fill-image-btn" ref="addPageFillContentFromImageBtn" title="Fill content from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill content from images" disabled="briefFillDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5249
+ <textarea class="add-page-textarea" ref="addPageContentMd" placeholder="# Pricing page&#10;- Headless: none (static marketing page)&#10;- Show 3 tiers: Starter / Pro / Enterprise" value="{addPageContentMd}" disabled="addPageContentMdDisabled"></textarea>
5250
+ <div class="add-page-brief-generating-overlay" if="showContentTabGeneratingHint">
5251
+ <p class="add-page-hint">{contentTabGeneratingHint}</p>
5252
+ <button type="button" class="add-page-btn add-page-btn-cancel add-page-brief-generating-stop" ref="addPageBriefFillStopContentBtn">Stop</button>
5253
+ </div>
5254
+ <button type="button" class="add-page-fill-image-btn" ref="addPageFillContentFromImageBtn" title="Fill content from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill content from images" disabled="briefFillContentDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5017
5255
  </div>
5256
+ <p class="add-page-field-error" if="showContentTabGenError">{contentGenError}</p>
5018
5257
  </div>
5019
5258
  </section>
5020
5259
  <section class="add-page-tab-panel" if="showAddPageDesignTab" role="tabpanel">
@@ -5022,21 +5261,26 @@ data:
5022
5261
  <div class="add-page-section-label">Design</div>
5023
5262
  <p class="add-page-hint">Layout, colors, typography, breakpoints.</p>
5024
5263
  <div class="add-page-textarea-wrap">
5025
- <textarea class="add-page-textarea" ref="addPageDesignMd" placeholder="- Match site header from home&#10;- Hero: centered H1, muted subtitle (#888)" value="{addPageDesignMd}"></textarea>
5026
- <button type="button" class="add-page-fill-image-btn" ref="addPageFillDesignFromImageBtn" title="Fill design from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill design from images" disabled="briefFillDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5264
+ <textarea class="add-page-textarea" ref="addPageDesignMd" placeholder="- Match site header from home&#10;- Hero: centered H1, muted subtitle (#888)" value="{addPageDesignMd}" disabled="addPageDesignMdDisabled"></textarea>
5265
+ <div class="add-page-brief-generating-overlay" if="showDesignTabGeneratingHint">
5266
+ <p class="add-page-hint">{designTabGeneratingHint}</p>
5267
+ <button type="button" class="add-page-btn add-page-btn-cancel add-page-brief-generating-stop" ref="addPageBriefFillStopDesignBtn">Stop</button>
5268
+ </div>
5269
+ <button type="button" class="add-page-fill-image-btn" ref="addPageFillDesignFromImageBtn" title="Fill design from images to inspire the new page — page snapshot, Figma export, or any reference site" aria-label="Fill design from images" disabled="briefFillDesignDisabled"><svg class="add-page-fill-image-icon" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" overflow="visible" aria-hidden="true"><path d="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></button>
5027
5270
  </div>
5271
+ <p class="add-page-field-error" if="showDesignTabGenError">{designGenError}</p>
5028
5272
  <p class="add-page-hint" if="addPageShowDesignHint">Add a mock or screenshot for better layout fidelity.</p>
5029
5273
  </div>
5030
5274
  </section>
5031
5275
  <section class="add-page-references">
5032
5276
  <div class="add-page-references-row">
5033
- <div class="add-page-dropzone" ref="addPageReferenceDrop">
5277
+ <div class="{addPageReferencesDropzoneClass}" ref="addPageReferenceDrop">
5034
5278
  <span class="add-page-dropzone-text">Drop <strong>REFERENCES</strong> files here</span>
5035
5279
  <span class="add-page-dropzone-separator">or</span>
5036
- <button type="button" class="add-page-btn add-page-btn-cancel add-page-btn--compact" ref="addPageAttachReferenceBtn">Upload from Computer</button>
5280
+ <button type="button" class="add-page-btn add-page-btn-cancel add-page-btn--compact" ref="addPageAttachReferenceBtn" disabled="addPageReferencesDisabled">Upload from Computer</button>
5037
5281
  </div>
5038
5282
  </div>
5039
- <input type="file" class="add-page-hidden-file" ref="addPageReferenceFileInput" multiple />
5283
+ <input type="file" class="add-page-hidden-file" ref="addPageReferenceFileInput" multiple disabled="addPageReferencesDisabled" />
5040
5284
  <p class="add-page-hint" if="showAddPageUploadHint">{addPageUploadHint}</p>
5041
5285
  <div class="add-page-chips" ref="addPageAttachmentsList" if="showAddPageAttachments">
5042
5286
  <div class="add-page-chip" forEach="addPageAttachmentRows" trackBy="rowKey">
@@ -5060,28 +5304,38 @@ data:
5060
5304
  <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageCreateBtn" disabled="addPageCreateDisabled">Create page</button>
5061
5305
  </div>
5062
5306
  <div class="add-page-brief-fill-popover" if="showBriefFillPopover" ref="addPageBriefFillPopover">
5063
- <div class="add-page-brief-fill-panel">
5064
- <div class="add-page-brief-fill-header">
5065
- <span class="add-page-brief-fill-title">Fill from image</span>
5066
- <button type="button" class="add-page-close" ref="addPageBriefFillCloseBtn" aria-label="Close">×</button>
5067
- </div>
5068
- <p class="add-page-hint">Add at least one screenshot. Optional notes help the AI (e.g. Image 1 = desktop, Image 2 = mobile).</p>
5069
- <label class="add-page-hint">Context notes
5070
- <textarea class="add-page-brief-fill-context" ref="addPageBriefFillContextNotes" placeholder="Route: /pricing&#10;Match header from home&#10;Image 2 = mobile frame" value="{briefFillContextNotes}" disabled="briefFillInputDisabled"></textarea>
5071
- </label>
5072
- <div class="{briefFillDropzoneClass}" ref="addPageBriefFillDropzone" tabindex="0">Paste (⌘V), drag-drop, or click to upload (max 5 images)</div>
5073
- <input type="file" class="add-page-hidden-file" ref="addPageBriefFillFileInput" accept="image/*" multiple disabled="briefFillInputDisabled" />
5074
- <div class="add-page-brief-fill-thumbs" ref="addPageBriefFillThumbnails" if="showBriefFillThumbnails">
5075
- <div class="add-page-brief-fill-thumb" forEach="addPageBriefFillThumbRows" trackBy="rowKey">
5076
- <img src="{thumbUrl}" alt="{name}" />
5077
- <button type="button" class="add-page-brief-fill-thumb-remove" data-brief-fill-remove="{index}" disabled="removeDisabled">×</button>
5307
+ <div class="add-page-brief-fill-popover-stack">
5308
+ <div class="add-page-brief-fill-panel">
5309
+ <div class="add-page-brief-fill-header">
5310
+ <span class="add-page-brief-fill-title">Fill from image</span>
5311
+ <button type="button" class="add-page-close" ref="addPageBriefFillCloseBtn" aria-label="Close">×</button>
5312
+ </div>
5313
+ <p class="add-page-hint">Add at least one screenshot. Optional notes help the AI (e.g. Image 1 = desktop, Image 2 = mobile).</p>
5314
+ <label class="add-page-hint">Context notes
5315
+ <textarea class="add-page-brief-fill-context" ref="addPageBriefFillContextNotes" placeholder="Route: /pricing&#10;Match header from home&#10;Image 2 = mobile frame" value="{briefFillContextNotes}" disabled="briefFillInputDisabled"></textarea>
5316
+ </label>
5317
+ <div class="{briefFillDropzoneClass}" ref="addPageBriefFillDropzone" tabindex="0">Paste (⌘V), drag-drop, or click to upload (max 5 images)</div>
5318
+ <input type="file" class="add-page-hidden-file" ref="addPageBriefFillFileInput" accept="image/*" multiple disabled="briefFillInputDisabled" />
5319
+ <div class="add-page-brief-fill-thumbs" ref="addPageBriefFillThumbnails" if="showBriefFillThumbnails">
5320
+ <div class="add-page-brief-fill-thumb" forEach="addPageBriefFillThumbRows" trackBy="rowKey">
5321
+ <img src="{thumbUrl}" alt="{name}" />
5322
+ <button type="button" class="add-page-brief-fill-thumb-remove" data-brief-fill-remove="{index}" disabled="removeDisabled">×</button>
5323
+ </div>
5324
+ </div>
5325
+ <p class="add-page-field-error" if="showBriefFillPopoverError">{briefFillPopoverError}</p>
5326
+ <div class="add-page-brief-fill-actions">
5327
+ <button type="button" class="add-page-btn add-page-btn-cancel" ref="addPageBriefFillCancelBtn">Cancel</button>
5328
+ <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageBriefFillGenerateBtn" disabled="addPageBriefFillGenerateDisabled" style="flex:0">Generate</button>
5078
5329
  </div>
5079
5330
  </div>
5080
- <p class="add-page-field-error" if="showBriefFillPopoverError">{briefFillPopoverError}</p>
5081
- <p class="add-page-hint" if="showBriefFillStatusHint">{briefFillStatusHint}</p>
5082
- <div class="add-page-brief-fill-actions">
5083
- <button type="button" class="add-page-btn add-page-btn-cancel" ref="addPageBriefFillCancelBtn">Cancel</button>
5084
- <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageBriefFillGenerateBtn" disabled="addPageBriefFillGenerateDisabled" style="flex:0">Generate</button>
5331
+ </div>
5332
+ </div>
5333
+ <div class="add-page-discard-confirm-overlay" if="showAddPageDiscardConfirm" ref="addPageDiscardConfirmOverlay" role="alertdialog" aria-modal="true" aria-live="polite" aria-label="Confirm discard Add Page draft">
5334
+ <div class="add-page-discard-confirm-dialog">
5335
+ <p class="add-page-discard-confirm-msg">Discard Add Page draft? Unsaved content, design notes, and attachments will be lost.</p>
5336
+ <div class="add-page-discard-confirm-actions">
5337
+ <button type="button" class="add-page-btn add-page-btn-cancel" ref="addPageDiscardDismissBtn">Keep editing</button>
5338
+ <button type="button" class="add-page-btn add-page-btn-primary" ref="addPageDiscardConfirmBtn" style="flex:0">Discard</button>
5085
5339
  </div>
5086
5340
  </div>
5087
5341
  </div>
@@ -5185,11 +5439,11 @@ data:
5185
5439
  if="showAddMenuDock"
5186
5440
  ref="addMenuDockPanel"
5187
5441
  role="dialog"
5188
- aria-label="Add elements"
5442
+ aria-label="+ Add Requests"
5189
5443
  style="left: {addMenuDockLeft}px; top: {addMenuDockTop}px;"
5190
5444
  >
5191
5445
  <div class="add-menu-dock-header" ref="addMenuDockHeader">
5192
- <span class="add-menu-dock-title">Add Elements</span>
5446
+ <span class="add-menu-dock-title">+ Add Requests</span>
5193
5447
  <button type="button" class="add-menu-picker-close" ref="addMenuDockCloseBtn" aria-label="Close">×</button>
5194
5448
  </div>
5195
5449
  <p class="add-menu-dock-subhint">Drag elements onto the page preview to place them. Click reference items to add @mentions when a marker is focused.</p>
@@ -5243,7 +5497,7 @@ data:
5243
5497
  <div class="aiditor-toast" if="showToastMessage" role="status" aria-live="polite">{toastMessage}</div>
5244
5498
 
5245
5499
  <div
5246
- class="asset-mention-autocomplete"
5500
+ class="{assetMentionOpensAbove ? asset-mention-autocomplete--above} asset-mention-autocomplete"
5247
5501
  if="showAssetMentionPanel"
5248
5502
  ref="assetMentionPanel"
5249
5503
  role="listbox"
@@ -5499,13 +5753,16 @@ data:
5499
5753
  <div class="visual-attachment-chip">
5500
5754
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
5501
5755
  <span class="visual-attachment-name">{name}</span>
5502
- <button
5503
- type="button"
5504
- class="visual-attachment-remove-file"
5505
- data-annotation-id="{annotationId}"
5506
- data-att-key="{key}"
5507
- aria-label="Remove attachment"
5508
- >×</button>
5756
+ <div class="visual-attachment-chip-actions">
5757
+ <button
5758
+ type="button"
5759
+ class="visual-attachment-remove-file"
5760
+ data-annotation-id="{annotationId}"
5761
+ data-att-key="{key}"
5762
+ aria-label="Remove attachment"
5763
+ >×</button>
5764
+ <span class="visual-attachment-number">{numberLabel}</span>
5765
+ </div>
5509
5766
  </div>
5510
5767
  </div>
5511
5768
  </div>
@@ -5640,13 +5897,16 @@ data:
5640
5897
  <div class="visual-attachment-chip">
5641
5898
  <img if="thumbUrl" class="visual-attachment-thumb" src="{thumbUrl}" alt="" />
5642
5899
  <span class="visual-attachment-name">{name}</span>
5643
- <button
5644
- type="button"
5645
- class="visual-attachment-remove-file"
5646
- data-annotation-id="{annotationId}"
5647
- data-att-key="{key}"
5648
- aria-label="Remove attachment"
5649
- >×</button>
5900
+ <div class="visual-attachment-chip-actions">
5901
+ <button
5902
+ type="button"
5903
+ class="visual-attachment-remove-file"
5904
+ data-annotation-id="{annotationId}"
5905
+ data-att-key="{key}"
5906
+ aria-label="Remove attachment"
5907
+ >×</button>
5908
+ <span class="visual-attachment-number">{numberLabel}</span>
5909
+ </div>
5650
5910
  </div>
5651
5911
  </div>
5652
5912
  </div>