@eric-emg/symphiq-components 1.2.375 → 1.2.377

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.
@@ -89074,172 +89074,172 @@ class ShopProfileQuestionAnswerComponent {
89074
89074
  ])
89075
89075
  ])
89076
89076
  ],
89077
- template: `
89078
- <div class="flex flex-col h-full">
89079
- <!-- Scrollable Content -->
89080
- <div #scrollContainer class="flex-1 overflow-y-auto">
89081
- <!-- Unanswered Questions Status -->
89082
- <div [ngClass]="statusHeaderClasses()" class="px-6 py-4 border-b">
89083
- <h4 [ngClass]="statusTitleClasses()" class="text-sm font-semibold mb-3">
89084
- Unanswered questions status
89085
- </h4>
89086
- <div class="flex items-center gap-3">
89087
- <div class="flex-1">
89088
- <div [ngClass]="progressBarContainerClasses()" class="h-2 rounded-full overflow-hidden">
89089
- <div
89090
- [ngClass]="progressBarFillClasses()"
89091
- class="h-full transition-all duration-500 ease-out rounded-full"
89092
- [style.width.%]="progressPercentage()"></div>
89093
- </div>
89094
- </div>
89095
- <div [ngClass]="progressTextClasses()" class="text-sm font-medium whitespace-nowrap">
89096
- {{ answeredCount() }} / {{ totalCount() }} answered
89097
- </div>
89098
- </div>
89099
- </div>
89100
-
89101
- <!-- Sentinel for intersection observer -->
89102
- <div #stickySentinel class="h-0"></div>
89103
-
89104
- <!-- Sticky Question Header -->
89105
- <div #stickyHeader [ngClass]="stickyHeaderClasses()" class="sticky top-0 z-10 px-6 py-4 transition-all duration-200">
89106
- <!-- Breadcrumb - hide for All Questions mode -->
89107
- @if (viewType() !== 'all') {
89108
- <div [ngClass]="breadcrumbClasses()" class="text-sm italic mb-2">
89109
- Shop > {{ breadcrumbPath() }}
89110
- </div>
89111
- }
89112
-
89113
- <!-- Question - animates from text-2xl to text-lg when sticky -->
89114
- <h2 #questionTitle [ngClass]="questionTextClasses()" class="font-bold text-2xl [&.is-sticky]:text-lg transition-all duration-200">
89115
- {{ question().question }}
89116
- </h2>
89117
- </div>
89118
-
89119
- <!-- Context and Focus Areas - scroll under sticky header -->
89120
- <div class="px-6">
89121
- <!-- Context -->
89122
- @if (question().context) {
89123
- <p [ngClass]="contextTextClasses()" class="text-sm leading-relaxed mt-3">
89124
- {{ question().context }}
89125
- </p>
89126
- }
89127
-
89128
- <!-- Related Focus Areas -->
89129
- @if (relatedFocusAreas().length > 0) {
89130
- <div class="mt-4">
89131
- <div class="flex items-center gap-2 mb-2">
89132
- <span [ngClass]="relatedLabelClasses()" class="text-xs font-semibold">
89133
- Related to {{ relatedFocusAreas().length }} focus area(s)
89134
- </span>
89135
- <svg class="w-4 h-4" [ngClass]="relatedLabelClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
89136
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
89137
- </svg>
89138
- </div>
89139
- <div class="flex flex-wrap gap-2">
89140
- @for (focusArea of relatedFocusAreas(); track focusArea) {
89141
- <span [ngClass]="focusAreaChipClasses()" class="px-3 py-1.5 rounded-full text-xs font-medium">
89142
- {{ getFocusAreaTitle(focusArea) }}
89143
- </span>
89144
- }
89145
- </div>
89146
- </div>
89147
- }
89148
- </div>
89149
-
89150
- <div class="px-6 py-6">
89151
-
89152
- <!-- Answer Options -->
89153
- <div class="space-y-3 mb-4">
89154
- @for (option of answerOptions(); track option.tempId) {
89155
- <label
89156
- [ngClass]="checkboxRowClasses()"
89157
- class="flex items-start gap-3 p-4 rounded-lg cursor-pointer transition-all duration-200 hover:scale-[1.01]">
89158
- <input
89159
- type="checkbox"
89160
- [checked]="option.isSelected"
89161
- (change)="toggleAnswer(option.text)"
89162
- [ngClass]="checkboxClasses()"
89163
- class="mt-0.5 w-5 h-5 rounded border-2 cursor-pointer transition-all duration-200 focus:ring-2 focus:ring-offset-2" />
89164
- <span [ngClass]="checkboxLabelClasses()" class="text-base flex-1">
89165
- {{ option.text }}
89166
- </span>
89167
- </label>
89168
- }
89169
- </div>
89170
-
89171
- <!-- Add Other Answers -->
89172
- <div class="mb-6">
89173
- <div
89174
- class="grid transition-[grid-template-rows] duration-300 ease-in-out"
89175
- [style.grid-template-rows]="addOtherAnswersExpanded() ? '1fr' : '0fr'">
89176
- <div class="overflow-hidden min-h-0">
89177
- <div class="pb-4">
89178
- <textarea
89179
- [(ngModel)]="customAnswerText"
89180
- [ngClass]="textareaClasses()"
89181
- class="w-full px-4 py-3 rounded-lg border-2 text-sm resize-y transition-colors duration-200 focus:ring-2 focus:ring-offset-2"
89182
- rows="5"
89183
- placeholder="Enter your answer(s) here, separated by returns."></textarea>
89184
- <div class="flex items-center gap-3 mt-3">
89185
- <button
89186
- type="button"
89187
- (click)="cancelCustomAnswers()"
89188
- [ngClass]="cancelButtonClasses()"
89189
- class="px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 hover:scale-105 active:scale-95">
89190
- Cancel
89191
- </button>
89192
- <button
89193
- type="button"
89194
- (click)="addCustomAnswers()"
89195
- [disabled]="!canAddCustomAnswers()"
89196
- [ngClass]="addButtonClasses()"
89197
- class="flex-1 px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100">
89198
- Add
89199
- </button>
89200
- </div>
89201
- </div>
89202
- </div>
89203
- </div>
89204
-
89205
- @if (!addOtherAnswersExpanded()) {
89206
- <button
89207
- type="button"
89208
- (click)="toggleAddOtherAnswers()"
89209
- [ngClass]="addOtherAnswersButtonClasses()"
89210
- class="w-full px-5 py-3 rounded-lg font-medium text-sm transition-all duration-200 border-2 hover:scale-[1.01] active:scale-[0.99]">
89211
- Add other answers
89212
- </button>
89213
- }
89214
- </div>
89215
- </div>
89216
- </div>
89217
-
89218
- <!-- Sticky Footer -->
89219
- <div [ngClass]="footerClasses()" class="px-6 py-4 border-t sticky bottom-0 z-10">
89220
- <div class="flex items-center gap-4">
89221
- <button
89222
- type="button"
89223
- (click)="onSave()"
89224
- [disabled]="saveButtonsDisabled()"
89225
- [ngClass]="saveButtonClasses()"
89226
- class="px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 border disabled:opacity-50 disabled:cursor-not-allowed hover:scale-[1.02] active:scale-95 disabled:hover:scale-100">
89227
- Save
89228
- </button>
89229
- <button
89230
- type="button"
89231
- (click)="onSaveAndNext()"
89232
- [disabled]="saveButtonsDisabled()"
89233
- [ngClass]="saveAndNextButtonClasses()"
89234
- class="flex-1 px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed hover:scale-[1.01] active:scale-[0.99] disabled:hover:scale-100">
89235
- <span>Save & next unanswered</span>
89236
- <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
89237
- <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
89238
- </svg>
89239
- </button>
89240
- </div>
89241
- </div>
89242
- </div>
89077
+ template: `
89078
+ <div class="flex flex-col h-full">
89079
+ <!-- Scrollable Content -->
89080
+ <div #scrollContainer class="flex-1 overflow-y-auto">
89081
+ <!-- Unanswered Questions Status -->
89082
+ <div [ngClass]="statusHeaderClasses()" class="px-6 py-4 border-b">
89083
+ <h4 [ngClass]="statusTitleClasses()" class="text-sm font-semibold mb-3">
89084
+ Unanswered questions status
89085
+ </h4>
89086
+ <div class="flex items-center gap-3">
89087
+ <div class="flex-1">
89088
+ <div [ngClass]="progressBarContainerClasses()" class="h-2 rounded-full overflow-hidden">
89089
+ <div
89090
+ [ngClass]="progressBarFillClasses()"
89091
+ class="h-full transition-all duration-500 ease-out rounded-full"
89092
+ [style.width.%]="progressPercentage()"></div>
89093
+ </div>
89094
+ </div>
89095
+ <div [ngClass]="progressTextClasses()" class="text-sm font-medium whitespace-nowrap">
89096
+ {{ answeredCount() }} / {{ totalCount() }} answered
89097
+ </div>
89098
+ </div>
89099
+ </div>
89100
+
89101
+ <!-- Sentinel for intersection observer -->
89102
+ <div #stickySentinel class="h-0"></div>
89103
+
89104
+ <!-- Sticky Question Header -->
89105
+ <div #stickyHeader [ngClass]="stickyHeaderClasses()" class="sticky top-0 z-10 px-6 py-4 transition-all duration-200">
89106
+ <!-- Breadcrumb - hide for All Questions mode -->
89107
+ @if (viewType() !== 'all') {
89108
+ <div [ngClass]="breadcrumbClasses()" class="text-sm italic mb-2">
89109
+ Shop > {{ breadcrumbPath() }}
89110
+ </div>
89111
+ }
89112
+
89113
+ <!-- Question - animates from text-2xl to text-lg when sticky -->
89114
+ <h2 #questionTitle [ngClass]="questionTextClasses()" class="font-bold text-2xl [&.is-sticky]:text-lg transition-all duration-200">
89115
+ {{ question().question }}
89116
+ </h2>
89117
+ </div>
89118
+
89119
+ <!-- Context and Focus Areas - scroll under sticky header -->
89120
+ <div class="px-6">
89121
+ <!-- Context -->
89122
+ @if (question().context) {
89123
+ <p [ngClass]="contextTextClasses()" class="text-sm leading-relaxed mt-3">
89124
+ {{ question().context }}
89125
+ </p>
89126
+ }
89127
+
89128
+ <!-- Related Focus Areas -->
89129
+ @if (relatedFocusAreas().length > 0) {
89130
+ <div class="mt-4">
89131
+ <div class="flex items-center gap-2 mb-2">
89132
+ <span [ngClass]="relatedLabelClasses()" class="text-xs font-semibold">
89133
+ Related to {{ relatedFocusAreas().length }} focus area(s)
89134
+ </span>
89135
+ <svg class="w-4 h-4" [ngClass]="relatedLabelClasses()" fill="none" stroke="currentColor" viewBox="0 0 24 24">
89136
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
89137
+ </svg>
89138
+ </div>
89139
+ <div class="flex flex-wrap gap-2">
89140
+ @for (focusArea of relatedFocusAreas(); track focusArea) {
89141
+ <span [ngClass]="focusAreaChipClasses()" class="px-3 py-1.5 rounded-full text-xs font-medium">
89142
+ {{ getFocusAreaTitle(focusArea) }}
89143
+ </span>
89144
+ }
89145
+ </div>
89146
+ </div>
89147
+ }
89148
+ </div>
89149
+
89150
+ <div class="px-6 py-6">
89151
+
89152
+ <!-- Answer Options -->
89153
+ <div class="space-y-3 mb-4">
89154
+ @for (option of answerOptions(); track option.tempId) {
89155
+ <label
89156
+ [ngClass]="checkboxRowClasses()"
89157
+ class="flex items-start gap-3 p-4 rounded-lg cursor-pointer transition-all duration-200 hover:scale-[1.01]">
89158
+ <input
89159
+ type="checkbox"
89160
+ [checked]="option.isSelected"
89161
+ (change)="toggleAnswer(option.text)"
89162
+ [ngClass]="checkboxClasses()"
89163
+ class="mt-0.5 w-5 h-5 rounded border-2 cursor-pointer transition-all duration-200 focus:ring-2 focus:ring-offset-2" />
89164
+ <span [ngClass]="checkboxLabelClasses()" class="text-base flex-1">
89165
+ {{ option.text }}
89166
+ </span>
89167
+ </label>
89168
+ }
89169
+ </div>
89170
+
89171
+ <!-- Add Other Answers -->
89172
+ <div class="mb-6">
89173
+ <div
89174
+ class="grid transition-[grid-template-rows] duration-300 ease-in-out"
89175
+ [style.grid-template-rows]="addOtherAnswersExpanded() ? '1fr' : '0fr'">
89176
+ <div class="overflow-hidden min-h-0">
89177
+ <div class="pb-4">
89178
+ <textarea
89179
+ [(ngModel)]="customAnswerText"
89180
+ [ngClass]="textareaClasses()"
89181
+ class="w-full px-4 py-3 rounded-lg border-2 text-sm resize-y transition-colors duration-200 focus:ring-2 focus:ring-offset-2"
89182
+ rows="5"
89183
+ placeholder="Enter your answer(s) here, separated by returns."></textarea>
89184
+ <div class="flex items-center gap-3 mt-3">
89185
+ <button
89186
+ type="button"
89187
+ (click)="cancelCustomAnswers()"
89188
+ [ngClass]="cancelButtonClasses()"
89189
+ class="px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 hover:scale-105 active:scale-95">
89190
+ Cancel
89191
+ </button>
89192
+ <button
89193
+ type="button"
89194
+ (click)="addCustomAnswers()"
89195
+ [disabled]="!canAddCustomAnswers()"
89196
+ [ngClass]="addButtonClasses()"
89197
+ class="flex-1 px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100">
89198
+ Add
89199
+ </button>
89200
+ </div>
89201
+ </div>
89202
+ </div>
89203
+ </div>
89204
+
89205
+ @if (!addOtherAnswersExpanded()) {
89206
+ <button
89207
+ type="button"
89208
+ (click)="toggleAddOtherAnswers()"
89209
+ [ngClass]="addOtherAnswersButtonClasses()"
89210
+ class="w-full px-5 py-3 rounded-lg font-medium text-sm transition-all duration-200 border-2 hover:scale-[1.01] active:scale-[0.99]">
89211
+ Add other answers
89212
+ </button>
89213
+ }
89214
+ </div>
89215
+ </div>
89216
+ </div>
89217
+
89218
+ <!-- Sticky Footer -->
89219
+ <div [ngClass]="footerClasses()" class="px-6 py-4 border-t sticky bottom-0 z-10">
89220
+ <div class="flex items-center gap-4">
89221
+ <button
89222
+ type="button"
89223
+ (click)="onSave()"
89224
+ [disabled]="saveButtonsDisabled()"
89225
+ [ngClass]="saveButtonClasses()"
89226
+ class="px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 border disabled:opacity-50 disabled:cursor-not-allowed hover:scale-[1.02] active:scale-95 disabled:hover:scale-100">
89227
+ Save
89228
+ </button>
89229
+ <button
89230
+ type="button"
89231
+ (click)="onSaveAndNext()"
89232
+ [disabled]="saveButtonsDisabled()"
89233
+ [ngClass]="saveAndNextButtonClasses()"
89234
+ class="flex-1 px-5 py-2.5 rounded-lg font-medium text-sm transition-all duration-200 flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed hover:scale-[1.01] active:scale-[0.99] disabled:hover:scale-100">
89235
+ <span>Save & next unanswered</span>
89236
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
89237
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
89238
+ </svg>
89239
+ </button>
89240
+ </div>
89241
+ </div>
89242
+ </div>
89243
89243
  `
89244
89244
  }]
89245
89245
  }], () => [], { question: [{ type: i0.Input, args: [{ isSignal: true, alias: "question", required: true }] }], viewMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewMode", required: false }] }], viewType: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewType", required: false }] }], selectedCategoryId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedCategoryId", required: false }] }], selectedFocusAreaId: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedFocusAreaId", required: false }] }], filteredQuestions: [{ type: i0.Input, args: [{ isSignal: true, alias: "filteredQuestions", required: false }] }], profileShopAnswers: [{ type: i0.Input, args: [{ isSignal: true, alias: "profileShopAnswers", required: false }] }], backClick: [{ type: i0.Output, args: ["backClick"] }], saveClick: [{ type: i0.Output, args: ["saveClick"] }], saveAndNextClick: [{ type: i0.Output, args: ["saveAndNextClick"] }], scrollContainer: [{