codexly-ui 0.0.17 → 0.0.19

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.
@@ -10885,12 +10885,13 @@ class ClxAppLayoutComponent {
10885
10885
  _document = inject(DOCUMENT);
10886
10886
  activeColor = input('indigo', ...(ngDevMode ? [{ debugName: "activeColor" }] : []));
10887
10887
  _sidebarOpen = signal(false, ...(ngDevMode ? [{ debugName: "_sidebarOpen" }] : []));
10888
- _collapsed = signal(false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
10888
+ collapsed = signal(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
10889
10889
  _isMobile = signal(true, ...(ngDevMode ? [{ debugName: "_isMobile" }] : []));
10890
+ collapsedChange = output();
10890
10891
  _showBackdrop = computed(() => this._sidebarOpen() && this._isMobile(), ...(ngDevMode ? [{ debugName: "_showBackdrop" }] : []));
10891
10892
  _sidebarCls = computed(() => {
10892
- const collapsed = this._collapsed() && !this._isMobile();
10893
- const width = collapsed ? 'w-16' : 'w-72';
10893
+ const col = this.collapsed() && !this._isMobile();
10894
+ const width = col ? 'w-16' : 'w-72';
10894
10895
  return [
10895
10896
  `fixed inset-y-0 left-0 z-30 ${width} flex flex-col`,
10896
10897
  'bg-slate-900 overflow-y-auto shrink-0',
@@ -10917,7 +10918,8 @@ class ClxAppLayoutComponent {
10917
10918
  }
10918
10919
  else {
10919
10920
  this._sidebarOpen.set(false);
10920
- this._collapsed.set(false);
10921
+ this.collapsed.set(false);
10922
+ this.collapsedChange.emit(false);
10921
10923
  }
10922
10924
  });
10923
10925
  };
@@ -10926,12 +10928,16 @@ class ClxAppLayoutComponent {
10926
10928
  ngOnDestroy() {
10927
10929
  this._mql?.removeEventListener('change', this._mqlListener);
10928
10930
  }
10929
- _toggleCollapsed() { this._collapsed.update(v => !v); }
10931
+ _toggleCollapsed() {
10932
+ const next = !this.collapsed();
10933
+ this.collapsed.set(next);
10934
+ this.collapsedChange.emit(next);
10935
+ }
10930
10936
  toggleSidebar() { this._sidebarOpen.update(v => !v); }
10931
10937
  openSidebar() { this._sidebarOpen.set(true); }
10932
10938
  closeSidebar() { this._sidebarOpen.set(false); }
10933
10939
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxAppLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10934
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: ClxAppLayoutComponent, isStandalone: true, selector: "clx-app-layout", inputs: { activeColor: { classPropertyName: "activeColor", publicName: "activeColor", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "flex h-screen overflow-hidden" }, providers: [{ provide: ClxAppLayoutComponent, useExisting: ClxAppLayoutComponent }], ngImport: i0, template: `
10940
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: ClxAppLayoutComponent, isStandalone: true, selector: "clx-app-layout", inputs: { activeColor: { classPropertyName: "activeColor", publicName: "activeColor", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { collapsedChange: "collapsedChange" }, host: { classAttribute: "flex h-screen overflow-hidden" }, ngImport: i0, template: `
10935
10941
  <!-- Mobile backdrop -->
10936
10942
  @if (_showBackdrop()) {
10937
10943
  <div
@@ -10955,7 +10961,7 @@ class ClxAppLayoutComponent {
10955
10961
  type="button"
10956
10962
  class="hidden lg:flex items-center justify-center w-8 h-8 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100 transition-colors shrink-0"
10957
10963
  (click)="_toggleCollapsed()">
10958
- <span clx-icon [name]="_collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
10964
+ <span clx-icon [name]="collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
10959
10965
  </button>
10960
10966
  <!-- Toggle button mobile -->
10961
10967
  <button
@@ -10981,7 +10987,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
10981
10987
  selector: 'clx-app-layout',
10982
10988
  standalone: true,
10983
10989
  imports: [ClxIconComponent],
10984
- providers: [{ provide: ClxAppLayoutComponent, useExisting: ClxAppLayoutComponent }],
10985
10990
  template: `
10986
10991
  <!-- Mobile backdrop -->
10987
10992
  @if (_showBackdrop()) {
@@ -11006,7 +11011,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11006
11011
  type="button"
11007
11012
  class="hidden lg:flex items-center justify-center w-8 h-8 rounded-md text-slate-500 hover:text-slate-700 hover:bg-slate-100 transition-colors shrink-0"
11008
11013
  (click)="_toggleCollapsed()">
11009
- <span clx-icon [name]="_collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
11014
+ <span clx-icon [name]="collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
11010
11015
  </button>
11011
11016
  <!-- Toggle button mobile -->
11012
11017
  <button
@@ -11029,9 +11034,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11029
11034
  changeDetection: ChangeDetectionStrategy.OnPush,
11030
11035
  host: { class: 'flex h-screen overflow-hidden' },
11031
11036
  }]
11032
- }], propDecorators: { activeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeColor", required: false }] }] } });
11037
+ }], propDecorators: { activeColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeColor", required: false }] }], collapsedChange: [{ type: i0.Output, args: ["collapsedChange"] }] } });
11033
11038
 
11034
- const CLX_MENU_COLOR = new InjectionToken('CLX_MENU_COLOR');
11035
11039
  // ── Item geometry ──────────────────────────────────────────────────────────────
11036
11040
  const NAV_ITEM_BASE = 'flex items-center gap-3 w-full text-sm font-medium transition-colors duration-150 cursor-pointer select-none';
11037
11041
  const NAV_ITEM_L1 = 'px-6 py-3';
@@ -11048,42 +11052,38 @@ class ClxMenuItemComponent {
11048
11052
  route = input('', ...(ngDevMode ? [{ debugName: "route" }] : []));
11049
11053
  color = input('indigo', ...(ngDevMode ? [{ debugName: "color" }] : []));
11050
11054
  nested = input(false, ...(ngDevMode ? [{ debugName: "nested" }] : []));
11051
- _menuColorFn = inject(CLX_MENU_COLOR, { optional: true });
11052
- _layout = inject(ClxAppLayoutComponent, { optional: true });
11053
- _hasParent = !!this._menuColorFn;
11054
- _collapsed = computed(() => this._layout?._collapsed() ?? false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
11055
- _resolvedColor = computed(() => this._menuColorFn?.() ?? this.color(), ...(ngDevMode ? [{ debugName: "_resolvedColor" }] : []));
11055
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
11056
11056
  _geom = computed(() => {
11057
- if (this._collapsed())
11057
+ if (this.collapsed())
11058
11058
  return 'px-0 justify-center';
11059
11059
  return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;
11060
11060
  }, ...(ngDevMode ? [{ debugName: "_geom" }] : []));
11061
- _iconCls = computed(() => resolveColor(this._resolvedColor()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : []));
11061
+ _iconCls = computed(() => resolveColor(this.color()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : []));
11062
11062
  _idleCls = computed(() => {
11063
- const t = resolveColor(this._resolvedColor());
11063
+ const t = resolveColor(this.color());
11064
11064
  return `${NAV_ITEM_BASE} ${this._geom()} ${NAV_ITEM_IDLE} ${t.hoverBgMuted}`;
11065
11065
  }, ...(ngDevMode ? [{ debugName: "_idleCls" }] : []));
11066
11066
  _activeCls = computed(() => {
11067
- const t = resolveColor(this._resolvedColor());
11068
- if (this._collapsed()) {
11067
+ const t = resolveColor(this.color());
11068
+ if (this.collapsed()) {
11069
11069
  return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold`;
11070
11070
  }
11071
11071
  return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;
11072
11072
  }, ...(ngDevMode ? [{ debugName: "_activeCls" }] : []));
11073
11073
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11074
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: ClxMenuItemComponent, isStandalone: true, selector: "clx-menu-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, route: { classPropertyName: "route", publicName: "route", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, nested: { classPropertyName: "nested", publicName: "nested", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
11074
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: ClxMenuItemComponent, isStandalone: true, selector: "clx-menu-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, route: { classPropertyName: "route", publicName: "route", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, nested: { classPropertyName: "nested", publicName: "nested", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
11075
11075
  <a
11076
11076
  [routerLink]="route() || null"
11077
11077
  routerLinkActive
11078
11078
  #rla="routerLinkActive"
11079
11079
  [routerLinkActiveOptions]="{ exact: false }"
11080
11080
  [class]="rla.isActive ? _activeCls() : _idleCls()"
11081
- [title]="_collapsed() ? label() : ''"
11081
+ [title]="collapsed() ? label() : ''"
11082
11082
  (click)="route() ? null : $event.preventDefault()">
11083
11083
  @if (icon()) {
11084
- <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || !_hasParent ? _iconCls() : 'text-slate-500'"></span>
11084
+ <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || nested() ? _iconCls() : 'text-slate-500'"></span>
11085
11085
  }
11086
- @if (!_collapsed()) {
11086
+ @if (!collapsed()) {
11087
11087
  <span class="flex-1 truncate">{{ label() }}</span>
11088
11088
  }
11089
11089
  </a>
@@ -11102,12 +11102,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11102
11102
  #rla="routerLinkActive"
11103
11103
  [routerLinkActiveOptions]="{ exact: false }"
11104
11104
  [class]="rla.isActive ? _activeCls() : _idleCls()"
11105
- [title]="_collapsed() ? label() : ''"
11105
+ [title]="collapsed() ? label() : ''"
11106
11106
  (click)="route() ? null : $event.preventDefault()">
11107
11107
  @if (icon()) {
11108
- <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || !_hasParent ? _iconCls() : 'text-slate-500'"></span>
11108
+ <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || nested() ? _iconCls() : 'text-slate-500'"></span>
11109
11109
  }
11110
- @if (!_collapsed()) {
11110
+ @if (!collapsed()) {
11111
11111
  <span class="flex-1 truncate">{{ label() }}</span>
11112
11112
  }
11113
11113
  </a>
@@ -11116,15 +11116,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11116
11116
  changeDetection: ChangeDetectionStrategy.OnPush,
11117
11117
  host: { class: 'block' },
11118
11118
  }]
11119
- }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], route: [{ type: i0.Input, args: [{ isSignal: true, alias: "route", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], nested: [{ type: i0.Input, args: [{ isSignal: true, alias: "nested", required: false }] }] } });
11119
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], route: [{ type: i0.Input, args: [{ isSignal: true, alias: "route", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], nested: [{ type: i0.Input, args: [{ isSignal: true, alias: "nested", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }] } });
11120
11120
 
11121
11121
  class ClxMenuComponent {
11122
11122
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
11123
11123
  icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
11124
11124
  color = input('indigo', ...(ngDevMode ? [{ debugName: "color" }] : []));
11125
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
11125
11126
  _isExpanded = signal(false, ...(ngDevMode ? [{ debugName: "_isExpanded" }] : []));
11126
- _layout = inject(ClxAppLayoutComponent, { optional: true });
11127
- _collapsed = computed(() => this._layout?._collapsed() ?? false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
11128
11127
  _childItems;
11129
11128
  _childRoutes = [];
11130
11129
  _router = inject(Router);
@@ -11140,11 +11139,11 @@ class ClxMenuComponent {
11140
11139
  }
11141
11140
  _iconCls = computed(() => resolveColor(this.color()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : []));
11142
11141
  _buttonCls = computed(() => {
11143
- const geom = this._collapsed() ? 'px-0 justify-center' : NAV_ITEM_L1;
11142
+ const geom = this.collapsed() ? 'px-0 justify-center' : NAV_ITEM_L1;
11144
11143
  const base = `${NAV_ITEM_BASE} ${geom}`;
11145
11144
  const t = resolveColor(this.color());
11146
11145
  if (this._isChildActive()) {
11147
- if (this._collapsed())
11146
+ if (this.collapsed())
11148
11147
  return `${base} ${t.textSubtle} font-semibold`;
11149
11148
  return `${base} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px]`;
11150
11149
  }
@@ -11168,18 +11167,16 @@ class ClxMenuComponent {
11168
11167
  this._isExpanded.update(v => !v);
11169
11168
  }
11170
11169
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11171
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: ClxMenuComponent, isStandalone: true, selector: "clx-menu", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, providers: [
11172
- { provide: CLX_MENU_COLOR, useFactory: (self) => () => self.color(), deps: [ClxMenuComponent] },
11173
- ], queries: [{ propertyName: "_childItems", predicate: ClxMenuItemComponent }], ngImport: i0, template: `
11170
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.21", type: ClxMenuComponent, isStandalone: true, selector: "clx-menu", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, queries: [{ propertyName: "_childItems", predicate: ClxMenuItemComponent, descendants: true }], ngImport: i0, template: `
11174
11171
  <button
11175
11172
  type="button"
11176
11173
  [class]="_buttonCls()"
11177
- [title]="_collapsed() ? label() : ''"
11178
- (click)="!_collapsed() && _toggle()">
11174
+ [title]="collapsed() ? label() : ''"
11175
+ (click)="!collapsed() && _toggle()">
11179
11176
  @if (icon()) {
11180
11177
  <span clx-icon [name]="icon()" size="sm" [class]="_iconCls()"></span>
11181
11178
  }
11182
- @if (!_collapsed()) {
11179
+ @if (!collapsed()) {
11183
11180
  <span class="flex-1 text-left truncate">{{ label() }}</span>
11184
11181
  <span
11185
11182
  clx-icon
@@ -11191,7 +11188,7 @@ class ClxMenuComponent {
11191
11188
  }
11192
11189
  </button>
11193
11190
 
11194
- @if (!_collapsed()) {
11191
+ @if (!collapsed()) {
11195
11192
  <div
11196
11193
  [class]="NAV_CHILDREN_WRAPPER"
11197
11194
  [style.grid-template-rows]="_isExpanded() ? '1fr' : '0fr'">
@@ -11210,19 +11207,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11210
11207
  selector: 'clx-menu',
11211
11208
  standalone: true,
11212
11209
  imports: [ClxIconComponent],
11213
- providers: [
11214
- { provide: CLX_MENU_COLOR, useFactory: (self) => () => self.color(), deps: [ClxMenuComponent] },
11215
- ],
11216
11210
  template: `
11217
11211
  <button
11218
11212
  type="button"
11219
11213
  [class]="_buttonCls()"
11220
- [title]="_collapsed() ? label() : ''"
11221
- (click)="!_collapsed() && _toggle()">
11214
+ [title]="collapsed() ? label() : ''"
11215
+ (click)="!collapsed() && _toggle()">
11222
11216
  @if (icon()) {
11223
11217
  <span clx-icon [name]="icon()" size="sm" [class]="_iconCls()"></span>
11224
11218
  }
11225
- @if (!_collapsed()) {
11219
+ @if (!collapsed()) {
11226
11220
  <span class="flex-1 text-left truncate">{{ label() }}</span>
11227
11221
  <span
11228
11222
  clx-icon
@@ -11234,7 +11228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11234
11228
  }
11235
11229
  </button>
11236
11230
 
11237
- @if (!_collapsed()) {
11231
+ @if (!collapsed()) {
11238
11232
  <div
11239
11233
  [class]="NAV_CHILDREN_WRAPPER"
11240
11234
  [style.grid-template-rows]="_isExpanded() ? '1fr' : '0fr'">
@@ -11250,9 +11244,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11250
11244
  changeDetection: ChangeDetectionStrategy.OnPush,
11251
11245
  host: { class: 'block' },
11252
11246
  }]
11253
- }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], _childItems: [{
11247
+ }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], _childItems: [{
11254
11248
  type: ContentChildren,
11255
- args: [ClxMenuItemComponent, { descendants: false }]
11249
+ args: [ClxMenuItemComponent, { descendants: true }]
11256
11250
  }] } });
11257
11251
 
11258
11252
  class ClxNavGroupComponent {