codexly-ui 0.0.16 → 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.
@@ -10880,27 +10880,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
10880
10880
  args: [ClxStepComponent]
10881
10881
  }] } });
10882
10882
 
10883
- class ClxLayoutService {
10884
- collapsed = signal(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
10885
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxLayoutService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10886
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxLayoutService });
10887
- }
10888
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxLayoutService, decorators: [{
10889
- type: Injectable
10890
- }] });
10891
-
10892
10883
  class ClxAppLayoutComponent {
10893
10884
  _zone = inject(NgZone);
10894
10885
  _document = inject(DOCUMENT);
10895
- _layout = inject(ClxLayoutService);
10896
10886
  activeColor = input('indigo', ...(ngDevMode ? [{ debugName: "activeColor" }] : []));
10897
10887
  _sidebarOpen = signal(false, ...(ngDevMode ? [{ debugName: "_sidebarOpen" }] : []));
10898
- _collapsed = this._layout.collapsed;
10888
+ collapsed = signal(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
10899
10889
  _isMobile = signal(true, ...(ngDevMode ? [{ debugName: "_isMobile" }] : []));
10890
+ collapsedChange = output();
10900
10891
  _showBackdrop = computed(() => this._sidebarOpen() && this._isMobile(), ...(ngDevMode ? [{ debugName: "_showBackdrop" }] : []));
10901
10892
  _sidebarCls = computed(() => {
10902
- const collapsed = this._collapsed() && !this._isMobile();
10903
- const width = collapsed ? 'w-16' : 'w-72';
10893
+ const col = this.collapsed() && !this._isMobile();
10894
+ const width = col ? 'w-16' : 'w-72';
10904
10895
  return [
10905
10896
  `fixed inset-y-0 left-0 z-30 ${width} flex flex-col`,
10906
10897
  'bg-slate-900 overflow-y-auto shrink-0',
@@ -10927,7 +10918,8 @@ class ClxAppLayoutComponent {
10927
10918
  }
10928
10919
  else {
10929
10920
  this._sidebarOpen.set(false);
10930
- this._collapsed.set(false);
10921
+ this.collapsed.set(false);
10922
+ this.collapsedChange.emit(false);
10931
10923
  }
10932
10924
  });
10933
10925
  };
@@ -10936,12 +10928,16 @@ class ClxAppLayoutComponent {
10936
10928
  ngOnDestroy() {
10937
10929
  this._mql?.removeEventListener('change', this._mqlListener);
10938
10930
  }
10939
- _toggleCollapsed() { this._collapsed.update(v => !v); }
10931
+ _toggleCollapsed() {
10932
+ const next = !this.collapsed();
10933
+ this.collapsed.set(next);
10934
+ this.collapsedChange.emit(next);
10935
+ }
10940
10936
  toggleSidebar() { this._sidebarOpen.update(v => !v); }
10941
10937
  openSidebar() { this._sidebarOpen.set(true); }
10942
10938
  closeSidebar() { this._sidebarOpen.set(false); }
10943
10939
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxAppLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10944
- 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: [ClxLayoutService], 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: `
10945
10941
  <!-- Mobile backdrop -->
10946
10942
  @if (_showBackdrop()) {
10947
10943
  <div
@@ -10965,7 +10961,7 @@ class ClxAppLayoutComponent {
10965
10961
  type="button"
10966
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"
10967
10963
  (click)="_toggleCollapsed()">
10968
- <span clx-icon [name]="_collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
10964
+ <span clx-icon [name]="collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
10969
10965
  </button>
10970
10966
  <!-- Toggle button mobile -->
10971
10967
  <button
@@ -10991,7 +10987,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
10991
10987
  selector: 'clx-app-layout',
10992
10988
  standalone: true,
10993
10989
  imports: [ClxIconComponent],
10994
- providers: [ClxLayoutService],
10995
10990
  template: `
10996
10991
  <!-- Mobile backdrop -->
10997
10992
  @if (_showBackdrop()) {
@@ -11016,7 +11011,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11016
11011
  type="button"
11017
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"
11018
11013
  (click)="_toggleCollapsed()">
11019
- <span clx-icon [name]="_collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
11014
+ <span clx-icon [name]="collapsed() ? 'menu_open' : 'menu'" size="sm"></span>
11020
11015
  </button>
11021
11016
  <!-- Toggle button mobile -->
11022
11017
  <button
@@ -11039,7 +11034,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11039
11034
  changeDetection: ChangeDetectionStrategy.OnPush,
11040
11035
  host: { class: 'flex h-screen overflow-hidden' },
11041
11036
  }]
11042
- }], 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"] }] } });
11043
11038
 
11044
11039
  const CLX_MENU_COLOR = new InjectionToken('CLX_MENU_COLOR');
11045
11040
  // ── Item geometry ──────────────────────────────────────────────────────────────
@@ -11058,13 +11053,12 @@ class ClxMenuItemComponent {
11058
11053
  route = input('', ...(ngDevMode ? [{ debugName: "route" }] : []));
11059
11054
  color = input('indigo', ...(ngDevMode ? [{ debugName: "color" }] : []));
11060
11055
  nested = input(false, ...(ngDevMode ? [{ debugName: "nested" }] : []));
11056
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
11061
11057
  _menuColorFn = inject(CLX_MENU_COLOR, { optional: true });
11062
- _layout = inject(ClxLayoutService, { optional: true });
11063
11058
  _hasParent = !!this._menuColorFn;
11064
- _collapsed = computed(() => this._layout?.collapsed() ?? false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
11065
11059
  _resolvedColor = computed(() => this._menuColorFn?.() ?? this.color(), ...(ngDevMode ? [{ debugName: "_resolvedColor" }] : []));
11066
11060
  _geom = computed(() => {
11067
- if (this._collapsed())
11061
+ if (this.collapsed())
11068
11062
  return 'px-0 justify-center';
11069
11063
  return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;
11070
11064
  }, ...(ngDevMode ? [{ debugName: "_geom" }] : []));
@@ -11075,25 +11069,25 @@ class ClxMenuItemComponent {
11075
11069
  }, ...(ngDevMode ? [{ debugName: "_idleCls" }] : []));
11076
11070
  _activeCls = computed(() => {
11077
11071
  const t = resolveColor(this._resolvedColor());
11078
- if (this._collapsed()) {
11072
+ if (this.collapsed()) {
11079
11073
  return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold`;
11080
11074
  }
11081
11075
  return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;
11082
11076
  }, ...(ngDevMode ? [{ debugName: "_activeCls" }] : []));
11083
11077
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11084
- 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: `
11085
11079
  <a
11086
11080
  [routerLink]="route() || null"
11087
11081
  routerLinkActive
11088
11082
  #rla="routerLinkActive"
11089
11083
  [routerLinkActiveOptions]="{ exact: false }"
11090
11084
  [class]="rla.isActive ? _activeCls() : _idleCls()"
11091
- [title]="_collapsed() ? label() : ''"
11085
+ [title]="collapsed() ? label() : ''"
11092
11086
  (click)="route() ? null : $event.preventDefault()">
11093
11087
  @if (icon()) {
11094
11088
  <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || !_hasParent ? _iconCls() : 'text-slate-500'"></span>
11095
11089
  }
11096
- @if (!_collapsed()) {
11090
+ @if (!collapsed()) {
11097
11091
  <span class="flex-1 truncate">{{ label() }}</span>
11098
11092
  }
11099
11093
  </a>
@@ -11112,12 +11106,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11112
11106
  #rla="routerLinkActive"
11113
11107
  [routerLinkActiveOptions]="{ exact: false }"
11114
11108
  [class]="rla.isActive ? _activeCls() : _idleCls()"
11115
- [title]="_collapsed() ? label() : ''"
11109
+ [title]="collapsed() ? label() : ''"
11116
11110
  (click)="route() ? null : $event.preventDefault()">
11117
11111
  @if (icon()) {
11118
11112
  <span clx-icon [name]="icon()" size="sm" [class]="rla.isActive || !_hasParent ? _iconCls() : 'text-slate-500'"></span>
11119
11113
  }
11120
- @if (!_collapsed()) {
11114
+ @if (!collapsed()) {
11121
11115
  <span class="flex-1 truncate">{{ label() }}</span>
11122
11116
  }
11123
11117
  </a>
@@ -11126,15 +11120,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11126
11120
  changeDetection: ChangeDetectionStrategy.OnPush,
11127
11121
  host: { class: 'block' },
11128
11122
  }]
11129
- }], 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 }] }] } });
11130
11124
 
11131
11125
  class ClxMenuComponent {
11132
11126
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : []));
11133
11127
  icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
11134
11128
  color = input('indigo', ...(ngDevMode ? [{ debugName: "color" }] : []));
11129
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
11135
11130
  _isExpanded = signal(false, ...(ngDevMode ? [{ debugName: "_isExpanded" }] : []));
11136
- _layout = inject(ClxLayoutService, { optional: true });
11137
- _collapsed = computed(() => this._layout?.collapsed() ?? false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
11138
11131
  _childItems;
11139
11132
  _childRoutes = [];
11140
11133
  _router = inject(Router);
@@ -11150,11 +11143,11 @@ class ClxMenuComponent {
11150
11143
  }
11151
11144
  _iconCls = computed(() => resolveColor(this.color()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : []));
11152
11145
  _buttonCls = computed(() => {
11153
- const geom = this._collapsed() ? 'px-0 justify-center' : NAV_ITEM_L1;
11146
+ const geom = this.collapsed() ? 'px-0 justify-center' : NAV_ITEM_L1;
11154
11147
  const base = `${NAV_ITEM_BASE} ${geom}`;
11155
11148
  const t = resolveColor(this.color());
11156
11149
  if (this._isChildActive()) {
11157
- if (this._collapsed())
11150
+ if (this.collapsed())
11158
11151
  return `${base} ${t.textSubtle} font-semibold`;
11159
11152
  return `${base} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px]`;
11160
11153
  }
@@ -11178,18 +11171,18 @@ class ClxMenuComponent {
11178
11171
  this._isExpanded.update(v => !v);
11179
11172
  }
11180
11173
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.21", ngImport: i0, type: ClxMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
11181
- 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: [
11182
11175
  { provide: CLX_MENU_COLOR, useFactory: (self) => () => self.color(), deps: [ClxMenuComponent] },
11183
- ], queries: [{ propertyName: "_childItems", predicate: ClxMenuItemComponent }], ngImport: i0, template: `
11176
+ ], queries: [{ propertyName: "_childItems", predicate: ClxMenuItemComponent, descendants: true }], ngImport: i0, template: `
11184
11177
  <button
11185
11178
  type="button"
11186
11179
  [class]="_buttonCls()"
11187
- [title]="_collapsed() ? label() : ''"
11188
- (click)="!_collapsed() && _toggle()">
11180
+ [title]="collapsed() ? label() : ''"
11181
+ (click)="!collapsed() && _toggle()">
11189
11182
  @if (icon()) {
11190
11183
  <span clx-icon [name]="icon()" size="sm" [class]="_iconCls()"></span>
11191
11184
  }
11192
- @if (!_collapsed()) {
11185
+ @if (!collapsed()) {
11193
11186
  <span class="flex-1 text-left truncate">{{ label() }}</span>
11194
11187
  <span
11195
11188
  clx-icon
@@ -11201,7 +11194,7 @@ class ClxMenuComponent {
11201
11194
  }
11202
11195
  </button>
11203
11196
 
11204
- @if (!_collapsed()) {
11197
+ @if (!collapsed()) {
11205
11198
  <div
11206
11199
  [class]="NAV_CHILDREN_WRAPPER"
11207
11200
  [style.grid-template-rows]="_isExpanded() ? '1fr' : '0fr'">
@@ -11227,12 +11220,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11227
11220
  <button
11228
11221
  type="button"
11229
11222
  [class]="_buttonCls()"
11230
- [title]="_collapsed() ? label() : ''"
11231
- (click)="!_collapsed() && _toggle()">
11223
+ [title]="collapsed() ? label() : ''"
11224
+ (click)="!collapsed() && _toggle()">
11232
11225
  @if (icon()) {
11233
11226
  <span clx-icon [name]="icon()" size="sm" [class]="_iconCls()"></span>
11234
11227
  }
11235
- @if (!_collapsed()) {
11228
+ @if (!collapsed()) {
11236
11229
  <span class="flex-1 text-left truncate">{{ label() }}</span>
11237
11230
  <span
11238
11231
  clx-icon
@@ -11244,7 +11237,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11244
11237
  }
11245
11238
  </button>
11246
11239
 
11247
- @if (!_collapsed()) {
11240
+ @if (!collapsed()) {
11248
11241
  <div
11249
11242
  [class]="NAV_CHILDREN_WRAPPER"
11250
11243
  [style.grid-template-rows]="_isExpanded() ? '1fr' : '0fr'">
@@ -11260,9 +11253,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.21", ngImpo
11260
11253
  changeDetection: ChangeDetectionStrategy.OnPush,
11261
11254
  host: { class: 'block' },
11262
11255
  }]
11263
- }], 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: [{
11264
11257
  type: ContentChildren,
11265
- args: [ClxMenuItemComponent, { descendants: false }]
11258
+ args: [ClxMenuItemComponent, { descendants: true }]
11266
11259
  }] } });
11267
11260
 
11268
11261
  class ClxNavGroupComponent {