codexly-ui 0.10.99 → 0.10.100

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.
@@ -10191,17 +10191,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
10191
10191
  }], ctorParameters: () => [], propDecorators: { activeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeColor", required: false }] }], collapsedChange: [{ type: i0.Output, args: ["collapsedChange"] }], expandedChange: [{ type: i0.Output, args: ["expandedChange"] }] } });
10192
10192
 
10193
10193
  class ClxBrandComponent {
10194
+ _sanitizer = inject(DomSanitizer);
10194
10195
  logo = input.required(...(ngDevMode ? [{ debugName: "logo" }] : /* istanbul ignore next */ []));
10195
10196
  name = input.required(...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
10197
+ /** Optional rich-text brand name (e.g. per-word colored spans) — takes over from the plain
10198
+ * `name` text when set, which still backs the logo's `alt` and the fallback rendering. Caller
10199
+ * is responsible for only ever passing admin-authored content here, never unescaped user input —
10200
+ * this component trusts it as-is (bypassSecurityTrustHtml), same as ClxSocialIconComponent's
10201
+ * internal SVG markup. */
10202
+ nameHtml = input(undefined, ...(ngDevMode ? [{ debugName: "nameHtml" }] : /* istanbul ignore next */ []));
10196
10203
  description = input('', ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
10197
10204
  collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
10205
+ _safeNameHtml = computed(() => this._sanitizer.bypassSecurityTrustHtml(this.nameHtml() ?? ''), ...(ngDevMode ? [{ debugName: "_safeNameHtml" }] : /* istanbul ignore next */ []));
10198
10206
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxBrandComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10199
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxBrandComponent, isStandalone: true, selector: "clx-brand", inputs: { logo: { classPropertyName: "logo", publicName: "logo", isSignal: true, isRequired: true, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
10207
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxBrandComponent, isStandalone: true, selector: "clx-brand", inputs: { logo: { classPropertyName: "logo", publicName: "logo", isSignal: true, isRequired: true, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, nameHtml: { classPropertyName: "nameHtml", publicName: "nameHtml", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
10200
10208
  <div [class]="collapsed() ? 'flex items-center justify-center py-4' : 'flex items-center gap-3 px-4 py-4'">
10201
10209
  <img [src]="logo()" [alt]="name()" class="h-8 w-8 shrink-0 object-contain" />
10202
10210
  @if (!collapsed()) {
10203
10211
  <div class="min-w-0 overflow-hidden">
10204
- <p class="text-white text-sm font-semibold truncate leading-tight">{{ name() }}</p>
10212
+ @if (nameHtml()) {
10213
+ <p class="text-sm font-semibold truncate leading-tight" [innerHTML]="_safeNameHtml()"></p>
10214
+ } @else {
10215
+ <p class="text-white text-sm font-semibold truncate leading-tight">{{ name() }}</p>
10216
+ }
10205
10217
  @if (description()) {
10206
10218
  <p class="text-slate-400 text-xs truncate leading-tight">{{ description() }}</p>
10207
10219
  }
@@ -10220,7 +10232,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
10220
10232
  <img [src]="logo()" [alt]="name()" class="h-8 w-8 shrink-0 object-contain" />
10221
10233
  @if (!collapsed()) {
10222
10234
  <div class="min-w-0 overflow-hidden">
10223
- <p class="text-white text-sm font-semibold truncate leading-tight">{{ name() }}</p>
10235
+ @if (nameHtml()) {
10236
+ <p class="text-sm font-semibold truncate leading-tight" [innerHTML]="_safeNameHtml()"></p>
10237
+ } @else {
10238
+ <p class="text-white text-sm font-semibold truncate leading-tight">{{ name() }}</p>
10239
+ }
10224
10240
  @if (description()) {
10225
10241
  <p class="text-slate-400 text-xs truncate leading-tight">{{ description() }}</p>
10226
10242
  }
@@ -10232,7 +10248,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
10232
10248
  changeDetection: ChangeDetectionStrategy.OnPush,
10233
10249
  host: { class: 'block' },
10234
10250
  }]
10235
- }], propDecorators: { logo: [{ type: i0.Input, args: [{ isSignal: true, alias: "logo", required: true }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }] } });
10251
+ }], propDecorators: { logo: [{ type: i0.Input, args: [{ isSignal: true, alias: "logo", required: true }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], nameHtml: [{ type: i0.Input, args: [{ isSignal: true, alias: "nameHtml", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }] } });
10236
10252
 
10237
10253
  // ── Item geometry ──────────────────────────────────────────────────────────────
10238
10254
  const NAV_ITEM_BASE = 'flex items-center gap-3 cursor-pointer select-none';