codexly-ui 0.0.17 → 0.0.18

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,7 +11034,7 @@ 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
11039
  const CLX_MENU_COLOR = new InjectionToken('CLX_MENU_COLOR');
11035
11040
  // ── Item geometry ──────────────────────────────────────────────────────────────
@@ -11048,13 +11053,12 @@ class ClxMenuItemComponent {
11048
11053
  route = input('', ...(ngDevMode ? [{ debugName: "route" }] : []));
11049
11054
  color = input('indigo', ...(ngDevMode ? [{ debugName: "color" }] : []));
11050
11055
  nested = input(false, ...(ngDevMode ? [{ debugName: "nested" }] : []));
11056
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
11051
11057
  _menuColorFn = inject(CLX_MENU_COLOR, { optional: true });
11052
- _layout = inject(ClxAppLayoutComponent, { optional: true });
11053
11058
  _hasParent = !!this._menuColorFn;
11054
- _collapsed = computed(() => this._layout?._collapsed() ?? false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
11055
11059
  _resolvedColor = computed(() => this._menuColorFn?.() ?? this.color(), ...(ngDevMode ? [{ debugName: "_resolvedColor" }] : []));
11056
11060
  _geom = computed(() => {
11057
- if (this._collapsed())
11061
+ if (this.collapsed())
11058
11062
  return 'px-0 justify-center';
11059
11063
  return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;
11060
11064
  }, ...(ngDevMode ? [{ debugName: "_geom" }] : []));
@@ -11065,25 +11069,25 @@ class ClxMenuItemComponent {
11065
11069
  }, ...(ngDevMode ? [{ debugName: "_idleCls" }] : []));
11066
11070
  _activeCls = computed(() => {
11067
11071
  const t = resolveColor(this._resolvedColor());
11068
- if (this._collapsed()) {
11072
+ if (this.collapsed()) {
11069
11073
  return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold`;
11070
11074
  }
11071
11075
  return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;
11072
11076
  }, ...(ngDevMode ? [{ debugName: "_activeCls" }] : []));
11073
11077
  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: `
11078
+ 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
11079
  <a
11076
11080
  [routerLink]="route() || null"
11077
11081
  routerLinkActive
11078
11082
  #rla="routerLinkActive"
11079
11083
  [routerLinkActiveOptions]="{ exact: false }"
11080
11084
  [class]="rla.isActive ? _activeCls() : _idleCls()"
11081
- [title]="_collapsed() ? label() : ''"
11085
+ [title]="collapsed() ? label() : ''"
11082
11086
  (click)="route() ? null : $event.preventDefault()">
11083
11087
  @if (icon()) {
11084
11088
  <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || !_hasParent ? _iconCls() : 'text-slate-500'"></span>
11085
11089
  }
11086
- @if (!_collapsed()) {
11090
+ @if (!collapsed()) {
11087
11091
  <span class="flex-1 truncate">{{ label() }}</span>
11088
11092
  }
11089
11093
  </a>
@@ -11102,12 +11106,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11102
11106
  #rla="routerLinkActive"
11103
11107
  [routerLinkActiveOptions]="{ exact: false }"
11104
11108
  [class]="rla.isActive ? _activeCls() : _idleCls()"
11105
- [title]="_collapsed() ? label() : ''"
11109
+ [title]="collapsed() ? label() : ''"
11106
11110
  (click)="route() ? null : $event.preventDefault()">
11107
11111
  @if (icon()) {
11108
11112
  <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || !_hasParent ? _iconCls() : 'text-slate-500'"></span>
11109
11113
  }
11110
- @if (!_collapsed()) {
11114
+ @if (!collapsed()) {
11111
11115
  <span class="flex-1 truncate">{{ label() }}</span>
11112
11116
  }
11113
11117
  </a>
@@ -11116,15 +11120,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11116
11120
  changeDetection: ChangeDetectionStrategy.OnPush,
11117
11121
  host: { class: 'block' },
11118
11122
  }]
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 }] }] } });
11123
+ }], 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
11124
 
11121
11125
  class ClxMenuComponent {
11122
11126
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
11123
11127
  icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
11124
11128
  color = input('indigo', ...(ngDevMode ? [{ debugName: "color" }] : []));
11129
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
11125
11130
  _isExpanded = signal(false, ...(ngDevMode ? [{ debugName: "_isExpanded" }] : []));
11126
- _layout = inject(ClxAppLayoutComponent, { optional: true });
11127
- _collapsed = computed(() => this._layout?._collapsed() ?? false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
11128
11131
  _childItems;
11129
11132
  _childRoutes = [];
11130
11133
  _router = inject(Router);
@@ -11140,11 +11143,11 @@ class ClxMenuComponent {
11140
11143
  }
11141
11144
  _iconCls = computed(() => resolveColor(this.color()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : []));
11142
11145
  _buttonCls = computed(() => {
11143
- const geom = this._collapsed() ? 'px-0 justify-center' : NAV_ITEM_L1;
11146
+ const geom = this.collapsed() ? 'px-0 justify-center' : NAV_ITEM_L1;
11144
11147
  const base = `${NAV_ITEM_BASE} ${geom}`;
11145
11148
  const t = resolveColor(this.color());
11146
11149
  if (this._isChildActive()) {
11147
- if (this._collapsed())
11150
+ if (this.collapsed())
11148
11151
  return `${base} ${t.textSubtle} font-semibold`;
11149
11152
  return `${base} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px]`;
11150
11153
  }
@@ -11168,18 +11171,18 @@ class ClxMenuComponent {
11168
11171
  this._isExpanded.update(v => !v);
11169
11172
  }
11170
11173
  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: [
11174
+ 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" }, providers: [
11172
11175
  { provide: CLX_MENU_COLOR, useFactory: (self) => () => self.color(), deps: [ClxMenuComponent] },
11173
- ], queries: [{ propertyName: "_childItems", predicate: ClxMenuItemComponent }], ngImport: i0, template: `
11176
+ ], queries: [{ propertyName: "_childItems", predicate: ClxMenuItemComponent, descendants: true }], ngImport: i0, template: `
11174
11177
  <button
11175
11178
  type="button"
11176
11179
  [class]="_buttonCls()"
11177
- [title]="_collapsed() ? label() : ''"
11178
- (click)="!_collapsed() && _toggle()">
11180
+ [title]="collapsed() ? label() : ''"
11181
+ (click)="!collapsed() && _toggle()">
11179
11182
  @if (icon()) {
11180
11183
  <span clx-icon [name]="icon()" size="sm" [class]="_iconCls()"></span>
11181
11184
  }
11182
- @if (!_collapsed()) {
11185
+ @if (!collapsed()) {
11183
11186
  <span class="flex-1 text-left truncate">{{ label() }}</span>
11184
11187
  <span
11185
11188
  clx-icon
@@ -11191,7 +11194,7 @@ class ClxMenuComponent {
11191
11194
  }
11192
11195
  </button>
11193
11196
 
11194
- @if (!_collapsed()) {
11197
+ @if (!collapsed()) {
11195
11198
  <div
11196
11199
  [class]="NAV_CHILDREN_WRAPPER"
11197
11200
  [style.grid-template-rows]="_isExpanded() ? '1fr' : '0fr'">
@@ -11217,12 +11220,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11217
11220
  <button
11218
11221
  type="button"
11219
11222
  [class]="_buttonCls()"
11220
- [title]="_collapsed() ? label() : ''"
11221
- (click)="!_collapsed() && _toggle()">
11223
+ [title]="collapsed() ? label() : ''"
11224
+ (click)="!collapsed() && _toggle()">
11222
11225
  @if (icon()) {
11223
11226
  <span clx-icon [name]="icon()" size="sm" [class]="_iconCls()"></span>
11224
11227
  }
11225
- @if (!_collapsed()) {
11228
+ @if (!collapsed()) {
11226
11229
  <span class="flex-1 text-left truncate">{{ label() }}</span>
11227
11230
  <span
11228
11231
  clx-icon
@@ -11234,7 +11237,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11234
11237
  }
11235
11238
  </button>
11236
11239
 
11237
- @if (!_collapsed()) {
11240
+ @if (!collapsed()) {
11238
11241
  <div
11239
11242
  [class]="NAV_CHILDREN_WRAPPER"
11240
11243
  [style.grid-template-rows]="_isExpanded() ? '1fr' : '0fr'">
@@ -11250,9 +11253,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11250
11253
  changeDetection: ChangeDetectionStrategy.OnPush,
11251
11254
  host: { class: 'block' },
11252
11255
  }]
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: [{
11256
+ }], 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
11257
  type: ContentChildren,
11255
- args: [ClxMenuItemComponent, { descendants: false }]
11258
+ args: [ClxMenuItemComponent, { descendants: true }]
11256
11259
  }] } });
11257
11260
 
11258
11261
  class ClxNavGroupComponent {