@natec/mef-dev-ui-kit 20.1.4 → 20.1.6

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.
@@ -14265,31 +14265,140 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
14265
14265
  }]
14266
14266
  }] });
14267
14267
 
14268
+ /**
14269
+ * Individual header card component for use within md-header-card-set.
14270
+ *
14271
+ * @remarks
14272
+ * Simple container component that accepts any content via ng-content projection.
14273
+ * Styled with border, background, and padding. Use within md-header-card-set
14274
+ * for responsive grid layout.
14275
+ *
14276
+ * @example
14277
+ * ```html
14278
+ * <md-header-card>
14279
+ * <div class="title">Card Title</div>
14280
+ * <div class="content">Card content here</div>
14281
+ * </md-header-card>
14282
+ * ```
14283
+ */
14268
14284
  class MDHeaderCardComponent {
14269
14285
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDHeaderCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14270
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: MDHeaderCardComponent, isStandalone: true, selector: "md-header-card", ngImport: i0, template: "<div class=\"md-header-card\">\n <ng-content></ng-content>\n</div>\n", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.md-header-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:1px;background-color:#eaeaea;border-color:#f3f3f3;border-radius:5px;padding:16px;height:100%;font-family:Montserrat}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
14286
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: MDHeaderCardComponent, isStandalone: true, selector: "md-header-card", ngImport: i0, template: "<div class=\"md-header-card\">\n <ng-content></ng-content>\n</div>\n", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.md-header-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:1px;background-color:#eaeaea;border-color:#f3f3f3;border-radius:5px;padding:16px;height:100%;font-family:Montserrat}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14271
14287
  }
14272
14288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDHeaderCardComponent, decorators: [{
14273
14289
  type: Component,
14274
- args: [{ selector: 'md-header-card', standalone: true, imports: [CommonModule], template: "<div class=\"md-header-card\">\n <ng-content></ng-content>\n</div>\n", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.md-header-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:1px;background-color:#eaeaea;border-color:#f3f3f3;border-radius:5px;padding:16px;height:100%;font-family:Montserrat}\n"] }]
14290
+ args: [{ selector: 'md-header-card', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"md-header-card\">\n <ng-content></ng-content>\n</div>\n", styles: ["div.jqxInGridLink{cursor:pointer;color:#00f;margin:2px;text-decoration:underline}div.jqxInGridLink :hover{color:#8a2be2}.pink-text{color:pink!important}.red-text{color:red!important}.turquoise-text{color:#03a796!important}.blue-text{color:#00f!important}.md-header-card{display:flex;flex-direction:column;box-sizing:border-box;position:relative;border-style:solid;border-width:1px;background-color:#eaeaea;border-color:#f3f3f3;border-radius:5px;padding:16px;height:100%;font-family:Montserrat}\n"] }]
14275
14291
  }] });
14276
14292
 
14293
+ /**
14294
+ * Container for multiple header cards with responsive CSS Grid layout.
14295
+ *
14296
+ * @remarks
14297
+ * Uses CSS Grid with auto-fit to automatically determine optimal column count.
14298
+ * Cards flex between minCardWidth and maxCardWidth to minimize empty space.
14299
+ * Card count is automatically tracked via ContentChildren.
14300
+ *
14301
+ * Layout behavior:
14302
+ * - Mobile (<768px): horizontal scroll, single row
14303
+ * - Tablet+ (≥768px): CSS Grid with auto-fit, cards sized between min/max
14304
+ *
14305
+ * Features:
14306
+ * - Automatic card count tracking (--md-header-card-count CSS variable)
14307
+ * - Automatic column count based on available space
14308
+ * - Configurable min/max card widths
14309
+ * - Full-width layout with responsive padding
14310
+ *
14311
+ * @example
14312
+ * ```html
14313
+ * <md-header-card-set [gap]="8" [minCardWidth]="300" [maxCardWidth]="600">
14314
+ * <md-header-card>
14315
+ * <div class="service-name">Service Title</div>
14316
+ * </md-header-card>
14317
+ * <md-header-card>
14318
+ * <div class="data-item">Type: <span>Canvas</span></div>
14319
+ * </md-header-card>
14320
+ * </md-header-card-set>
14321
+ * ```
14322
+ */
14277
14323
  class MDHeaderCardSetComponent {
14278
- gap = 16;
14279
- minCardWidth = 300; // Мінімальна ширина картки в px
14280
- maxCardWidth = 600; // Максимальна ширина картки в px
14324
+ cards;
14325
+ _cdr = inject(ChangeDetectorRef);
14326
+ _cardCount = 0;
14327
+ /**
14328
+ * Gap between cards in pixels.
14329
+ * @default 8
14330
+ */
14331
+ gap = 8;
14332
+ /**
14333
+ * Horizontal padding for the container in pixels.
14334
+ * Responsive: 16px mobile, 24px tablet, 32px desktop.
14335
+ * @default 'responsive'
14336
+ */
14337
+ padding = 'responsive';
14338
+ /**
14339
+ * Minimum card width in pixels.
14340
+ * Cards won't shrink below this value.
14341
+ * @default 300
14342
+ */
14343
+ minCardWidth = 300;
14344
+ /**
14345
+ * Maximum card width in pixels.
14346
+ * Cards won't grow beyond this value.
14347
+ * @default 570
14348
+ */
14349
+ maxCardWidth = 570;
14350
+ /**
14351
+ * Disable wrapping (force single row with horizontal scroll).
14352
+ * Useful for mobile or specific layouts.
14353
+ * @default false
14354
+ */
14355
+ noWrap = false;
14356
+ ngAfterContentInit() {
14357
+ this._cardCount = this.cards.length;
14358
+ this.cards.changes.subscribe(() => {
14359
+ this._cardCount = this.cards.length;
14360
+ this._cdr.markForCheck();
14361
+ });
14362
+ }
14363
+ /**
14364
+ * Get CSS custom properties for the container.
14365
+ * @internal
14366
+ */
14367
+ get _containerStyles() {
14368
+ const styles = {
14369
+ '--md-header-card-set-gap': `${this.gap}px`,
14370
+ '--md-header-card-min-width': `${this.minCardWidth}px`,
14371
+ '--md-header-card-max-width': `${this.maxCardWidth}px`,
14372
+ '--md-header-card-count': `${this._cardCount}`
14373
+ };
14374
+ if (typeof this.padding === 'number') {
14375
+ styles['--md-header-card-set-padding'] = `${this.padding}px`;
14376
+ }
14377
+ return styles;
14378
+ }
14281
14379
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDHeaderCardSetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14282
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", type: MDHeaderCardSetComponent, isStandalone: true, selector: "md-header-card-set", inputs: { gap: "gap", minCardWidth: "minCardWidth", maxCardWidth: "maxCardWidth" }, ngImport: i0, template: "<div class=\"md-header-card-set\"\n [style.gap.px]=\"gap\"\n [style.--min-card-width.px]=\"minCardWidth\"\n [style.--max-card-width.px]=\"maxCardWidth\">\n <ng-content></ng-content>\n</div>\n", styles: [".md-header-card-set{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--min-card-width, 300px),var(--max-card-width, 600px)));gap:16px;width:100%;align-items:stretch;justify-content:start}@media (max-width: 575px){.md-header-card-set{grid-template-columns:1fr;gap:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
14380
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "20.3.6", type: MDHeaderCardSetComponent, isStandalone: true, selector: "md-header-card-set", inputs: { gap: "gap", padding: "padding", minCardWidth: "minCardWidth", maxCardWidth: "maxCardWidth", noWrap: ["noWrap", "noWrap", booleanAttribute] }, host: { properties: { "class.md-header-card-set-nowrap": "noWrap" }, classAttribute: "md-header-card-set" }, queries: [{ propertyName: "cards", predicate: MDHeaderCardComponent }], exportAs: ["mdHeaderCardSet"], ngImport: i0, template: "<div class=\"md-header-card-set-container\" [ngStyle]=\"_containerStyles\">\n <div class=\"md-header-card-set-wrapper\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".md-header-card-set{display:block;width:100%;position:relative;box-sizing:border-box}.md-header-card-set-container{position:relative;width:100%;box-sizing:border-box}.md-header-card-set-wrapper{--_card-min: var(--md-header-card-min-width, 300px);--_card-max: var(--md-header-card-max-width, 570px);--_gap: var(--md-header-card-set-gap, 16px);display:grid;min-width:0;max-width:calc(var(--md-header-card-count, 1) * var(--md-header-card-max-width, 570px));box-sizing:border-box}@media (max-width: 767px){.md-header-card-set-wrapper{display:flex;gap:var(--_gap);flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}.md-header-card-set-wrapper::-webkit-scrollbar{height:6px}.md-header-card-set-wrapper::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.md-header-card-set-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.md-header-card-set-wrapper::-webkit-scrollbar-thumb:hover{background:#555}.md-header-card-set-wrapper md-header-card{flex:0 0 auto;scroll-snap-align:start;min-width:240px;max-width:280px}}@media (min-width: 768px){.md-header-card-set-wrapper{display:grid;gap:var(--_gap);grid-template-columns:repeat(auto-fit,minmax(var(--_card-min),1fr))}.md-header-card-set-wrapper md-header-card{max-width:var(--_card-max);justify-self:stretch}}.md-header-card-set-nowrap .md-header-card-set-wrapper{display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x mandatory;grid-template-columns:unset}.md-header-card-set-nowrap .md-header-card-set-wrapper md-header-card{flex:0 0 auto;scroll-snap-align:start;min-width:var(--_card-min);max-width:var(--_card-max)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
14283
14381
  }
14284
14382
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: MDHeaderCardSetComponent, decorators: [{
14285
14383
  type: Component,
14286
- args: [{ selector: 'md-header-card-set', standalone: true, imports: [CommonModule], template: "<div class=\"md-header-card-set\"\n [style.gap.px]=\"gap\"\n [style.--min-card-width.px]=\"minCardWidth\"\n [style.--max-card-width.px]=\"maxCardWidth\">\n <ng-content></ng-content>\n</div>\n", styles: [".md-header-card-set{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--min-card-width, 300px),var(--max-card-width, 600px)));gap:16px;width:100%;align-items:stretch;justify-content:start}@media (max-width: 575px){.md-header-card-set{grid-template-columns:1fr;gap:12px}}\n"] }]
14287
- }], propDecorators: { gap: [{
14384
+ args: [{ selector: 'md-header-card-set', host: {
14385
+ class: 'md-header-card-set',
14386
+ '[class.md-header-card-set-nowrap]': 'noWrap',
14387
+ }, exportAs: 'mdHeaderCardSet', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], standalone: true, template: "<div class=\"md-header-card-set-container\" [ngStyle]=\"_containerStyles\">\n <div class=\"md-header-card-set-wrapper\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".md-header-card-set{display:block;width:100%;position:relative;box-sizing:border-box}.md-header-card-set-container{position:relative;width:100%;box-sizing:border-box}.md-header-card-set-wrapper{--_card-min: var(--md-header-card-min-width, 300px);--_card-max: var(--md-header-card-max-width, 570px);--_gap: var(--md-header-card-set-gap, 16px);display:grid;min-width:0;max-width:calc(var(--md-header-card-count, 1) * var(--md-header-card-max-width, 570px));box-sizing:border-box}@media (max-width: 767px){.md-header-card-set-wrapper{display:flex;gap:var(--_gap);flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch}.md-header-card-set-wrapper::-webkit-scrollbar{height:6px}.md-header-card-set-wrapper::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.md-header-card-set-wrapper::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.md-header-card-set-wrapper::-webkit-scrollbar-thumb:hover{background:#555}.md-header-card-set-wrapper md-header-card{flex:0 0 auto;scroll-snap-align:start;min-width:240px;max-width:280px}}@media (min-width: 768px){.md-header-card-set-wrapper{display:grid;gap:var(--_gap);grid-template-columns:repeat(auto-fit,minmax(var(--_card-min),1fr))}.md-header-card-set-wrapper md-header-card{max-width:var(--_card-max);justify-self:stretch}}.md-header-card-set-nowrap .md-header-card-set-wrapper{display:flex;flex-wrap:nowrap;overflow-x:auto;scroll-snap-type:x mandatory;grid-template-columns:unset}.md-header-card-set-nowrap .md-header-card-set-wrapper md-header-card{flex:0 0 auto;scroll-snap-align:start;min-width:var(--_card-min);max-width:var(--_card-max)}\n"] }]
14388
+ }], propDecorators: { cards: [{
14389
+ type: ContentChildren,
14390
+ args: [MDHeaderCardComponent]
14391
+ }], gap: [{
14392
+ type: Input
14393
+ }], padding: [{
14288
14394
  type: Input
14289
14395
  }], minCardWidth: [{
14290
14396
  type: Input
14291
14397
  }], maxCardWidth: [{
14292
14398
  type: Input
14399
+ }], noWrap: [{
14400
+ type: Input,
14401
+ args: [{ transform: booleanAttribute }]
14293
14402
  }] } });
14294
14403
 
14295
14404
  class MDHeaderCardModule {