inugami-ng 0.0.31 → 0.0.34

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.
Files changed (33) hide show
  1. package/fesm2022/inugami-ng-components-inu-main-header.mjs +2 -2
  2. package/fesm2022/inugami-ng-components-inu-main-header.mjs.map +1 -1
  3. package/fesm2022/inugami-ng-components-inu-panel-tabs.mjs +181 -0
  4. package/fesm2022/inugami-ng-components-inu-panel-tabs.mjs.map +1 -0
  5. package/fesm2022/inugami-ng-components-inu-panel.mjs +98 -0
  6. package/fesm2022/inugami-ng-components-inu-panel.mjs.map +1 -0
  7. package/fesm2022/inugami-ng-components-inu-progress.mjs +96 -0
  8. package/fesm2022/inugami-ng-components-inu-progress.mjs.map +1 -0
  9. package/fesm2022/inugami-ng-components-inu-svg-asset.mjs +163 -0
  10. package/fesm2022/inugami-ng-components-inu-svg-asset.mjs.map +1 -0
  11. package/fesm2022/inugami-ng-components-inu-svg-isometric.mjs +789 -0
  12. package/fesm2022/inugami-ng-components-inu-svg-isometric.mjs.map +1 -0
  13. package/fesm2022/inugami-ng-components-inu-svg-switzerland.mjs +530 -0
  14. package/fesm2022/inugami-ng-components-inu-svg-switzerland.mjs.map +1 -0
  15. package/fesm2022/inugami-ng-components-inu-table-flex.mjs +139 -0
  16. package/fesm2022/inugami-ng-components-inu-table-flex.mjs.map +1 -0
  17. package/fesm2022/inugami-ng-components-inu-tool-tips.mjs +136 -0
  18. package/fesm2022/inugami-ng-components-inu-tool-tips.mjs.map +1 -0
  19. package/fesm2022/inugami-ng-pipes.mjs +38 -0
  20. package/fesm2022/inugami-ng-pipes.mjs.map +1 -0
  21. package/fesm2022/inugami-ng-services.mjs +8 -10
  22. package/fesm2022/inugami-ng-services.mjs.map +1 -1
  23. package/package.json +1 -1
  24. package/types/inugami-ng-components-inu-panel-tabs.d.ts +38 -0
  25. package/types/inugami-ng-components-inu-panel.d.ts +26 -0
  26. package/types/inugami-ng-components-inu-progress.d.ts +26 -0
  27. package/types/inugami-ng-components-inu-svg-asset.d.ts +33 -0
  28. package/types/inugami-ng-components-inu-svg-isometric.d.ts +105 -0
  29. package/types/inugami-ng-components-inu-svg-switzerland.d.ts +109 -0
  30. package/types/inugami-ng-components-inu-table-flex.d.ts +41 -0
  31. package/types/inugami-ng-components-inu-tool-tips.d.ts +37 -0
  32. package/types/inugami-ng-pipes.d.ts +12 -0
  33. package/types/inugami-ng-services.d.ts +0 -1
@@ -16,7 +16,7 @@ class InuMainHeader {
16
16
  this.displayMenuBurger.set(!display);
17
17
  }
18
18
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuMainHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuMainHeader, isStandalone: true, selector: "inu-main-header", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disableIcon: { classPropertyName: "disableIcon", publicName: "disableIcon", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<nav>\n <div class=\"inu-main-header\">\n <div class=\"inu-main-header-nav-bar\">\n <div class=\"inu-main-header-home-icon\">\n <a routerLink=\"\" routerLinkActive=\"active\">\n @if (icon()) {\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n } @else {\n <div class=\"inu-main-header-home-icon-content\"></div>\n }\n </a>\n </div>\n <div class=\"inu-main-header-links-grp\">\n <div class=\"inu-main-header-links\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n\n <div class=\"inu-main-header-actions\">\n <div class=\"inu-main-header-actions-content\">\n <ng-content/>\n </div>\n <div class=\"inu-main-header-burger\">\n <div class=\"inu-main-header-burger-icon\">\n <inu-icon icon=\"menu\" [size]=\"2\" (click)=\"toggleDisplay()\"></inu-icon>\n </div>\n </div>\n </div>\n\n </div>\n</nav>\n@if (displayMenuBurger()) {\n <div class=\"inu-main-header-links-burger\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n\n @if (link.children) {\n <ul class=\"child-links\">\n @for (childGrp of link.children; track childGrp) {\n @if (childGrp.links) {\n @for (child of childGrp.links; track child) {\n <li>\n @if (child.external) {\n @if (child.target) {\n <a [target]=\"child.target\" [href]=\"child.path\">{{ child.title }}</a>\n } @else {\n <a [href]=\"child.path\">{{ child.title }}</a>\n }\n } @else {\n <a [routerLink]=\"child.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ child.title }}</a>\n }\n </li>\n }\n }\n }\n </ul>\n\n }\n </li>\n }\n </ul>\n </div>\n}\n", styles: ["nav{top:0rem;position:fixed;width:100vw;-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color);background-color:#fbfbfe;font-size:130%;display:flex;align-items:center}.inu-main-header{width:96%;min-height:3rem;margin:0;padding:0;padding-left:.5rem;padding-right:.5rem;align-items:center;display:flex;flex-direction:row}.inu-main-header .inu-main-header-nav-bar{display:flex;flex:1;flex-direction:row;gap:2rem;align-items:center}.inu-main-header .inu-main-header-links-grp a{text-decoration:none;color:var(--main-header-title-color);height:3rem;display:flex;align-items:center;border-bottom:.15rem solid transparent;transition:border .2s}.inu-main-header .inu-main-header-links-grp a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header .inu-main-header-links-grp a:hover{border-bottom:.15rem solid var(--primary)}.inu-main-header .inu-main-header-links-grp .inu-main-header-links ul{margin:0;padding:0;display:flex;gap:1rem;list-style:none}.inu-main-header-actions{display:flex;flex-direction:row;align-items:center;height:3rem}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon{fill:var(--neutral)}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon:hover{fill:var(--neutral-dark-extra)}.inu-main-header-burger,.inu-main-header-links-burger{display:none}@media(max-width:920px){.inu-main-header-links{display:none}.inu-main-header-burger{display:flex;align-items:center}.inu-main-header-links-burger{display:flex;width:100%;border-bottom:1px solid var(--neutral);position:fixed;top:3rem;background-color:var(--background);-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color)}.inu-main-header-links-burger a{color:var(--neutral-dark-extra);text-decoration:none}.inu-main-header-links-burger a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header-links-burger a:hover{border-bottom:.15rem solid var(--primary)}}.child-links{list-style:square!important}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuMainHeader, isStandalone: true, selector: "inu-main-header", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, disableIcon: { classPropertyName: "disableIcon", publicName: "disableIcon", isSignal: true, isRequired: false, transformFunction: null }, links: { classPropertyName: "links", publicName: "links", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<nav>\n <div class=\"inu-main-header\">\n <div class=\"inu-main-header-nav-bar\">\n <div class=\"inu-main-header-home-icon\">\n <a routerLink=\"\" routerLinkActive=\"active\">\n @if (icon()) {\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n } @else {\n <div class=\"inu-main-header-home-icon-content\"></div>\n }\n </a>\n </div>\n <div class=\"inu-main-header-links-grp\">\n <div class=\"inu-main-header-links\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n\n <div class=\"inu-main-header-actions\">\n <div class=\"inu-main-header-actions-content\">\n <ng-content/>\n </div>\n <div class=\"inu-main-header-burger\">\n <div class=\"inu-main-header-burger-icon\">\n <inu-icon icon=\"menu\" [size]=\"2\" (click)=\"toggleDisplay()\"></inu-icon>\n </div>\n </div>\n </div>\n\n </div>\n</nav>\n@if (displayMenuBurger()) {\n <div class=\"inu-main-header-links-burger\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n\n @if (link.children) {\n <ul class=\"child-links\">\n @for (childGrp of link.children; track childGrp) {\n @if (childGrp.links) {\n @for (child of childGrp.links; track child) {\n <li>\n @if (child.external) {\n @if (child.target) {\n <a [target]=\"child.target\" [href]=\"child.path\">{{ child.title }}</a>\n } @else {\n <a [href]=\"child.path\">{{ child.title }}</a>\n }\n } @else {\n <a [routerLink]=\"child.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ child.title }}</a>\n }\n </li>\n }\n }\n }\n </ul>\n\n }\n </li>\n }\n </ul>\n </div>\n}\n", styles: ["nav{top:0rem;position:fixed;width:100vw;-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color);background-color:#fbfbfe;font-size:130%;display:flex;align-items:center}.inu-main-header{width:96%;min-height:3rem;margin:0;padding:0;padding-left:.5rem;padding-right:.5rem;align-items:center;display:flex;flex-direction:row}.inu-main-header .inu-main-header-nav-bar{display:flex;flex:1;flex-direction:row;gap:2rem;align-items:center}.inu-main-header .inu-main-header-links-grp a{text-decoration:none;color:var(--main-header-title-color);height:3rem;display:flex;align-items:center;border-bottom:.15rem solid transparent;transition:border .2s}.inu-main-header .inu-main-header-links-grp a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header .inu-main-header-links-grp a:hover{border-bottom:.15rem solid var(--primary)}.inu-main-header .inu-main-header-links-grp .inu-main-header-links ul{margin:0;padding:0;display:flex;gap:1rem;list-style:none}.inu-main-header-actions{display:flex;flex-direction:row;align-items:center;height:3rem}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon{fill:var(--neutral)}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon:hover{fill:var(--neutral-dark-extra)}.inu-main-header-burger,.inu-main-header-links-burger{display:none}@media(max-width:920px){.inu-main-header-links{display:none}.inu-main-header-burger{display:flex;align-items:center}.inu-main-header-links-burger{display:flex;width:100%;border-bottom:1px solid var(--neutral);position:fixed;top:3rem;background-color:var(--background-color);-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color)}.inu-main-header-links-burger a{color:var(--neutral-dark-extra);text-decoration:none}.inu-main-header-links-burger a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header-links-burger a:hover{border-bottom:.15rem solid var(--primary)}}.child-links{list-style:square!important}\n"], dependencies: [{ kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
20
20
  }
21
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuMainHeader, decorators: [{
22
22
  type: Component,
@@ -24,7 +24,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImpor
24
24
  InuIcon,
25
25
  RouterLink,
26
26
  RouterLinkActive
27
- ], template: "<nav>\n <div class=\"inu-main-header\">\n <div class=\"inu-main-header-nav-bar\">\n <div class=\"inu-main-header-home-icon\">\n <a routerLink=\"\" routerLinkActive=\"active\">\n @if (icon()) {\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n } @else {\n <div class=\"inu-main-header-home-icon-content\"></div>\n }\n </a>\n </div>\n <div class=\"inu-main-header-links-grp\">\n <div class=\"inu-main-header-links\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n\n <div class=\"inu-main-header-actions\">\n <div class=\"inu-main-header-actions-content\">\n <ng-content/>\n </div>\n <div class=\"inu-main-header-burger\">\n <div class=\"inu-main-header-burger-icon\">\n <inu-icon icon=\"menu\" [size]=\"2\" (click)=\"toggleDisplay()\"></inu-icon>\n </div>\n </div>\n </div>\n\n </div>\n</nav>\n@if (displayMenuBurger()) {\n <div class=\"inu-main-header-links-burger\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n\n @if (link.children) {\n <ul class=\"child-links\">\n @for (childGrp of link.children; track childGrp) {\n @if (childGrp.links) {\n @for (child of childGrp.links; track child) {\n <li>\n @if (child.external) {\n @if (child.target) {\n <a [target]=\"child.target\" [href]=\"child.path\">{{ child.title }}</a>\n } @else {\n <a [href]=\"child.path\">{{ child.title }}</a>\n }\n } @else {\n <a [routerLink]=\"child.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ child.title }}</a>\n }\n </li>\n }\n }\n }\n </ul>\n\n }\n </li>\n }\n </ul>\n </div>\n}\n", styles: ["nav{top:0rem;position:fixed;width:100vw;-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color);background-color:#fbfbfe;font-size:130%;display:flex;align-items:center}.inu-main-header{width:96%;min-height:3rem;margin:0;padding:0;padding-left:.5rem;padding-right:.5rem;align-items:center;display:flex;flex-direction:row}.inu-main-header .inu-main-header-nav-bar{display:flex;flex:1;flex-direction:row;gap:2rem;align-items:center}.inu-main-header .inu-main-header-links-grp a{text-decoration:none;color:var(--main-header-title-color);height:3rem;display:flex;align-items:center;border-bottom:.15rem solid transparent;transition:border .2s}.inu-main-header .inu-main-header-links-grp a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header .inu-main-header-links-grp a:hover{border-bottom:.15rem solid var(--primary)}.inu-main-header .inu-main-header-links-grp .inu-main-header-links ul{margin:0;padding:0;display:flex;gap:1rem;list-style:none}.inu-main-header-actions{display:flex;flex-direction:row;align-items:center;height:3rem}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon{fill:var(--neutral)}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon:hover{fill:var(--neutral-dark-extra)}.inu-main-header-burger,.inu-main-header-links-burger{display:none}@media(max-width:920px){.inu-main-header-links{display:none}.inu-main-header-burger{display:flex;align-items:center}.inu-main-header-links-burger{display:flex;width:100%;border-bottom:1px solid var(--neutral);position:fixed;top:3rem;background-color:var(--background);-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color)}.inu-main-header-links-burger a{color:var(--neutral-dark-extra);text-decoration:none}.inu-main-header-links-burger a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header-links-burger a:hover{border-bottom:.15rem solid var(--primary)}}.child-links{list-style:square!important}\n"] }]
27
+ ], template: "<nav>\n <div class=\"inu-main-header\">\n <div class=\"inu-main-header-nav-bar\">\n <div class=\"inu-main-header-home-icon\">\n <a routerLink=\"\" routerLinkActive=\"active\">\n @if (icon()) {\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n } @else {\n <div class=\"inu-main-header-home-icon-content\"></div>\n }\n </a>\n </div>\n <div class=\"inu-main-header-links-grp\">\n <div class=\"inu-main-header-links\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n\n <div class=\"inu-main-header-actions\">\n <div class=\"inu-main-header-actions-content\">\n <ng-content/>\n </div>\n <div class=\"inu-main-header-burger\">\n <div class=\"inu-main-header-burger-icon\">\n <inu-icon icon=\"menu\" [size]=\"2\" (click)=\"toggleDisplay()\"></inu-icon>\n </div>\n </div>\n </div>\n\n </div>\n</nav>\n@if (displayMenuBurger()) {\n <div class=\"inu-main-header-links-burger\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n\n @if (link.children) {\n <ul class=\"child-links\">\n @for (childGrp of link.children; track childGrp) {\n @if (childGrp.links) {\n @for (child of childGrp.links; track child) {\n <li>\n @if (child.external) {\n @if (child.target) {\n <a [target]=\"child.target\" [href]=\"child.path\">{{ child.title }}</a>\n } @else {\n <a [href]=\"child.path\">{{ child.title }}</a>\n }\n } @else {\n <a [routerLink]=\"child.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ child.title }}</a>\n }\n </li>\n }\n }\n }\n </ul>\n\n }\n </li>\n }\n </ul>\n </div>\n}\n", styles: ["nav{top:0rem;position:fixed;width:100vw;-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color);background-color:#fbfbfe;font-size:130%;display:flex;align-items:center}.inu-main-header{width:96%;min-height:3rem;margin:0;padding:0;padding-left:.5rem;padding-right:.5rem;align-items:center;display:flex;flex-direction:row}.inu-main-header .inu-main-header-nav-bar{display:flex;flex:1;flex-direction:row;gap:2rem;align-items:center}.inu-main-header .inu-main-header-links-grp a{text-decoration:none;color:var(--main-header-title-color);height:3rem;display:flex;align-items:center;border-bottom:.15rem solid transparent;transition:border .2s}.inu-main-header .inu-main-header-links-grp a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header .inu-main-header-links-grp a:hover{border-bottom:.15rem solid var(--primary)}.inu-main-header .inu-main-header-links-grp .inu-main-header-links ul{margin:0;padding:0;display:flex;gap:1rem;list-style:none}.inu-main-header-actions{display:flex;flex-direction:row;align-items:center;height:3rem}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon{fill:var(--neutral)}.inu-main-header-actions .inu-main-header-burger .inu-main-header-burger-icon:hover{fill:var(--neutral-dark-extra)}.inu-main-header-burger,.inu-main-header-links-burger{display:none}@media(max-width:920px){.inu-main-header-links{display:none}.inu-main-header-burger{display:flex;align-items:center}.inu-main-header-links-burger{display:flex;width:100%;border-bottom:1px solid var(--neutral);position:fixed;top:3rem;background-color:var(--background-color);-webkit-box-shadow:0px 0px 5px 0px var(--shadow-color);box-shadow:0 0 5px 0 var(--shadow-color)}.inu-main-header-links-burger a{color:var(--neutral-dark-extra);text-decoration:none}.inu-main-header-links-burger a.active{border-bottom:.15rem solid var(--primary-dark)}.inu-main-header-links-burger a:hover{border-bottom:.15rem solid var(--primary)}}.child-links{list-style:square!important}\n"] }]
28
28
  }], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], disableIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableIcon", required: false }] }], links: [{ type: i0.Input, args: [{ isSignal: true, alias: "links", required: false }] }] } });
29
29
 
30
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"inugami-ng-components-inu-main-header.mjs","sources":["../../../projects/inugami-ng/components/inu-main-header/inu-main-header.ts","../../../projects/inugami-ng/components/inu-main-header/inu-main-header.html","../../../projects/inugami-ng/components/inu-main-header/inugami-ng-components-inu-main-header.ts"],"sourcesContent":["import {Component, input, signal} from '@angular/core';\nimport {InuIcon} from 'inugami-icons'\nimport {RouterLink, RouterLinkActive} from '@angular/router'\nimport {InuSiteLink} from 'inugami-ng/models'\n\n@Component({\n selector : 'inu-main-header',\n standalone : true,\n imports : [\n InuIcon,\n RouterLink,\n RouterLinkActive\n ],\n templateUrl: './inu-main-header.html',\n styleUrl : './inu-main-header.scss',\n })\nexport class InuMainHeader {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n icon = input<string>('');\n disableIcon = input<boolean>(false);\n links = input<InuSiteLink[]>([]);\n displayMenuBurger = signal<boolean>(false);\n\n protected toggleDisplay() {\n const display = this.displayMenuBurger();\n this.displayMenuBurger.set(!display);\n }\n}\n","<nav>\n <div class=\"inu-main-header\">\n <div class=\"inu-main-header-nav-bar\">\n <div class=\"inu-main-header-home-icon\">\n <a routerLink=\"\" routerLinkActive=\"active\">\n @if (icon()) {\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n } @else {\n <div class=\"inu-main-header-home-icon-content\"></div>\n }\n </a>\n </div>\n <div class=\"inu-main-header-links-grp\">\n <div class=\"inu-main-header-links\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n\n <div class=\"inu-main-header-actions\">\n <div class=\"inu-main-header-actions-content\">\n <ng-content/>\n </div>\n <div class=\"inu-main-header-burger\">\n <div class=\"inu-main-header-burger-icon\">\n <inu-icon icon=\"menu\" [size]=\"2\" (click)=\"toggleDisplay()\"></inu-icon>\n </div>\n </div>\n </div>\n\n </div>\n</nav>\n@if (displayMenuBurger()) {\n <div class=\"inu-main-header-links-burger\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n\n @if (link.children) {\n <ul class=\"child-links\">\n @for (childGrp of link.children; track childGrp) {\n @if (childGrp.links) {\n @for (child of childGrp.links; track child) {\n <li>\n @if (child.external) {\n @if (child.target) {\n <a [target]=\"child.target\" [href]=\"child.path\">{{ child.title }}</a>\n } @else {\n <a [href]=\"child.path\">{{ child.title }}</a>\n }\n } @else {\n <a [routerLink]=\"child.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ child.title }}</a>\n }\n </li>\n }\n }\n }\n </ul>\n\n }\n </li>\n }\n </ul>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAgBa,aAAa,CAAA;;;;AAKxB,IAAA,IAAI,GAAgB,KAAK,CAAS,EAAE,gDAAC;AACrC,IAAA,WAAW,GAAS,KAAK,CAAU,KAAK,uDAAC;AACzC,IAAA,KAAK,GAAe,KAAK,CAAgB,EAAE,iDAAC;AAC5C,IAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,6DAAC;IAEhC,aAAa,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACtC;uGAbW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,8cChB1B,mnGA4FA,EAAA,MAAA,EAAA,CAAA,4+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnFe,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,UAAU,oOACV,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKlB,aAAa,EAAA,UAAA,EAAA,CAAA;kBAXzB,SAAS;+BACgB,iBAAiB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACJ;wBACX,OAAO;wBACP,UAAU;wBACV;AACD,qBAAA,EAAA,QAAA,EAAA,mnGAAA,EAAA,MAAA,EAAA,CAAA,4+DAAA,CAAA,EAAA;;;AEZd;;AAEG;;;;"}
1
+ {"version":3,"file":"inugami-ng-components-inu-main-header.mjs","sources":["../../../projects/inugami-ng/components/inu-main-header/inu-main-header.ts","../../../projects/inugami-ng/components/inu-main-header/inu-main-header.html","../../../projects/inugami-ng/components/inu-main-header/inugami-ng-components-inu-main-header.ts"],"sourcesContent":["import {Component, input, signal} from '@angular/core';\nimport {InuIcon} from 'inugami-icons'\nimport {RouterLink, RouterLinkActive} from '@angular/router'\nimport {InuSiteLink} from 'inugami-ng/models'\n\n@Component({\n selector : 'inu-main-header',\n standalone : true,\n imports : [\n InuIcon,\n RouterLink,\n RouterLinkActive\n ],\n templateUrl: './inu-main-header.html',\n styleUrl : './inu-main-header.scss',\n })\nexport class InuMainHeader {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n icon = input<string>('');\n disableIcon = input<boolean>(false);\n links = input<InuSiteLink[]>([]);\n displayMenuBurger = signal<boolean>(false);\n\n protected toggleDisplay() {\n const display = this.displayMenuBurger();\n this.displayMenuBurger.set(!display);\n }\n}\n","<nav>\n <div class=\"inu-main-header\">\n <div class=\"inu-main-header-nav-bar\">\n <div class=\"inu-main-header-home-icon\">\n <a routerLink=\"\" routerLinkActive=\"active\">\n @if (icon()) {\n <inu-icon [icon]=\"icon()\" [size]=\"2.5\"></inu-icon>\n } @else {\n <div class=\"inu-main-header-home-icon-content\"></div>\n }\n </a>\n </div>\n <div class=\"inu-main-header-links-grp\">\n <div class=\"inu-main-header-links\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n\n\n <div class=\"inu-main-header-actions\">\n <div class=\"inu-main-header-actions-content\">\n <ng-content/>\n </div>\n <div class=\"inu-main-header-burger\">\n <div class=\"inu-main-header-burger-icon\">\n <inu-icon icon=\"menu\" [size]=\"2\" (click)=\"toggleDisplay()\"></inu-icon>\n </div>\n </div>\n </div>\n\n </div>\n</nav>\n@if (displayMenuBurger()) {\n <div class=\"inu-main-header-links-burger\">\n <ul>\n @for (link of links(); track link.path; ) {\n <li>\n @if (link.external) {\n @if (link.target) {\n <a [target]=\"link.target\" [href]=\"link.path\">{{ link.title }}</a>\n } @else {\n <a [href]=\"link.path\">{{ link.title }}</a>\n }\n } @else {\n <a [routerLink]=\"link.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ link.title }}</a>\n }\n\n @if (link.children) {\n <ul class=\"child-links\">\n @for (childGrp of link.children; track childGrp) {\n @if (childGrp.links) {\n @for (child of childGrp.links; track child) {\n <li>\n @if (child.external) {\n @if (child.target) {\n <a [target]=\"child.target\" [href]=\"child.path\">{{ child.title }}</a>\n } @else {\n <a [href]=\"child.path\">{{ child.title }}</a>\n }\n } @else {\n <a [routerLink]=\"child.path\" routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: false }\">{{ child.title }}</a>\n }\n </li>\n }\n }\n }\n </ul>\n\n }\n </li>\n }\n </ul>\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;MAgBa,aAAa,CAAA;;;;AAKxB,IAAA,IAAI,GAAgB,KAAK,CAAS,EAAE,gDAAC;AACrC,IAAA,WAAW,GAAS,KAAK,CAAU,KAAK,uDAAC;AACzC,IAAA,KAAK,GAAe,KAAK,CAAgB,EAAE,iDAAC;AAC5C,IAAA,iBAAiB,GAAG,MAAM,CAAU,KAAK,6DAAC;IAEhC,aAAa,GAAA;AACrB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IACtC;uGAbW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,8cChB1B,mnGA4FA,EAAA,MAAA,EAAA,CAAA,k/DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDnFe,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,UAAU,oOACV,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKlB,aAAa,EAAA,UAAA,EAAA,CAAA;kBAXzB,SAAS;+BACgB,iBAAiB,EAAA,UAAA,EACjB,IAAI,EAAA,OAAA,EACJ;wBACX,OAAO;wBACP,UAAU;wBACV;AACD,qBAAA,EAAA,QAAA,EAAA,mnGAAA,EAAA,MAAA,EAAA,CAAA,k/DAAA,CAAA,EAAA;;;AEZd;;AAEG;;;;"}
@@ -0,0 +1,181 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, viewChild, signal, effect, Component, contentChildren, output } from '@angular/core';
3
+ import { NgTemplateOutlet } from '@angular/common';
4
+ import { InuIcon } from 'inugami-icons';
5
+
6
+ class InuPanelTab {
7
+ //==================================================================================================================
8
+ // ATTRIBUTES
9
+ //==================================================================================================================
10
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : []));
11
+ hasAccess = input(true, ...(ngDevMode ? [{ debugName: "hasAccess" }] : []));
12
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
13
+ name = input.required(...(ngDevMode ? [{ debugName: "name" }] : []));
14
+ styleClass = input('', ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
15
+ valid = input(true, ...(ngDevMode ? [{ debugName: "valid" }] : []));
16
+ //
17
+ templateRef = viewChild.required('content');
18
+ //
19
+ display = signal(false, ...(ngDevMode ? [{ debugName: "display" }] : []));
20
+ _styleClass = signal('', ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
21
+ //==================================================================================================================
22
+ // INIT
23
+ //==================================================================================================================
24
+ constructor() {
25
+ effect(() => {
26
+ const styles = ['inu-panel-tab'];
27
+ const style = this.styleClass();
28
+ if (style) {
29
+ styles.push(style);
30
+ }
31
+ this._styleClass.set(styles.join(" "));
32
+ });
33
+ }
34
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanelTab, deps: [], target: i0.ɵɵFactoryTarget.Component });
35
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.0.8", type: InuPanelTab, isStandalone: true, selector: "inu-panel-tab", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, hasAccess: { classPropertyName: "hasAccess", publicName: "hasAccess", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, valid: { classPropertyName: "valid", publicName: "valid", isSignal: true, isRequired: false, transformFunction: null } }, providers: [], viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["content"], descendants: true, isSignal: true }], ngImport: i0, template: `
36
+ <ng-template #content>
37
+ <div [class]="_styleClass()">
38
+ <ng-content/>
39
+ </div>
40
+ </ng-template>
41
+ `, isInline: true });
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanelTab, decorators: [{
44
+ type: Component,
45
+ args: [{
46
+ selector: 'inu-panel-tab',
47
+ standalone: true,
48
+ providers: [],
49
+ imports: [],
50
+ template: `
51
+ <ng-template #content>
52
+ <div [class]="_styleClass()">
53
+ <ng-content/>
54
+ </div>
55
+ </ng-template>
56
+ `
57
+ }]
58
+ }], ctorParameters: () => [], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], hasAccess: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasAccess", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], valid: [{ type: i0.Input, args: [{ isSignal: true, alias: "valid", required: false }] }], templateRef: [{ type: i0.ViewChild, args: ['content', { isSignal: true }] }] } });
59
+
60
+ class InuPanelTabs {
61
+ //==================================================================================================================
62
+ // ATTRIBUTES
63
+ //==================================================================================================================
64
+ activeTab = input(undefined, ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
65
+ styleClass = input('', ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
66
+ vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : []));
67
+ childrenTabs = contentChildren(InuPanelTab, ...(ngDevMode ? [{ debugName: "childrenTabs" }] : []));
68
+ changed = output();
69
+ //
70
+ _styleClass = signal('', ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
71
+ valid = signal(true, ...(ngDevMode ? [{ debugName: "valid" }] : []));
72
+ tabs = signal([], ...(ngDevMode ? [{ debugName: "tabs" }] : []));
73
+ //==================================================================================================================
74
+ // INIT
75
+ //==================================================================================================================
76
+ constructor() {
77
+ effect(() => {
78
+ this.initStyleClass();
79
+ });
80
+ }
81
+ initStyleClass() {
82
+ const styles = ['inu-panel-tabs'];
83
+ const style = this.styleClass();
84
+ if (style) {
85
+ styles.push(style);
86
+ }
87
+ if (this.vertical()) {
88
+ styles.push('vertical');
89
+ }
90
+ this._styleClass.set(styles.join(" "));
91
+ }
92
+ ngAfterViewInit() {
93
+ this.initTabs();
94
+ }
95
+ initTabs() {
96
+ const result = [];
97
+ const children = this.childrenTabs();
98
+ for (let child of children) {
99
+ result.push(child);
100
+ }
101
+ let found = false;
102
+ const activeTab = this.activeTab();
103
+ if (activeTab) {
104
+ for (let child of children) {
105
+ if (activeTab == child.name()) {
106
+ child.display.set(true);
107
+ this.changed.emit(child.name());
108
+ this.valid.set(child.valid());
109
+ found = true;
110
+ }
111
+ }
112
+ }
113
+ if (!found) {
114
+ let first = true;
115
+ for (let child of children) {
116
+ if (first) {
117
+ child.display.set(true);
118
+ this.changed.emit(child.name());
119
+ this.valid.set(child.valid());
120
+ first = false;
121
+ }
122
+ }
123
+ }
124
+ this.tabs.set(result);
125
+ }
126
+ //==================================================================================================================
127
+ // ACTIONS
128
+ //==================================================================================================================
129
+ openTab(panel) {
130
+ if (!panel.hasAccess()) {
131
+ return;
132
+ }
133
+ this.valid.set(true);
134
+ const children = this.childrenTabs();
135
+ if (!children) {
136
+ return;
137
+ }
138
+ for (let child of children) {
139
+ if (child.name() === panel.name()) {
140
+ child.display.set(true);
141
+ this.valid.set(child.valid());
142
+ this.changed.emit(child.name());
143
+ }
144
+ else {
145
+ child.display.set(false);
146
+ }
147
+ }
148
+ }
149
+ //==================================================================================================================
150
+ // TOOLS
151
+ //==================================================================================================================
152
+ checkValidity() {
153
+ const children = this.childrenTabs();
154
+ if (!children) {
155
+ return;
156
+ }
157
+ this.valid.set(true);
158
+ for (let child of children) {
159
+ if (!child.valid()) {
160
+ this.valid.set(false);
161
+ break;
162
+ }
163
+ }
164
+ }
165
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanelTabs, deps: [], target: i0.ɵɵFactoryTarget.Component });
166
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuPanelTabs, isStandalone: true, selector: "inu-panel-tabs", inputs: { activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed" }, providers: [], queries: [{ propertyName: "childrenTabs", predicate: InuPanelTab, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n", styles: [".inu-panel-tabs{display:flex;flex-direction:column}.inu-panel-tabs .inu-panel-tabs-headers{display:flex}.inu-panel-tabs .inu-panel-tabs-headers ul{list-style:none;padding:0;margin:0;display:flex;gap:.25rem;width:100%;border-bottom:1px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul.noValid{border-bottom:1px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li{cursor:pointer;display:flex;border:1px solid var(--neutral-light);transition:background-color .25s}.inu-panel-tabs .inu-panel-tabs-headers ul li .inu-panel-tabs-headers-child-tab{display:flex;gap:1rem;align-items:baseline}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid{border:1px solid var(--danger-light-extra-extra);background-color:var(--danger-light-extra-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.display{background-color:var(--secondary-light-extra);border:1px solid var(--secondary-light-extra);border-bottom:2px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid.display{background-color:var(--danger-light);border:1px solid var(--danger-light);border-bottom:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li:hover{background-color:var(--secondary-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid:hover{background-color:var(--danger-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noAccess{cursor:not-allowed;color:var(--neutral);background-color:var(--neutral-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li{padding:.25rem 1rem}.inu-panel-tabs.vertical{gap:1rem}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul{flex-direction:column;border-right:2px solid var(--secondary);border-bottom:none}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul.noValid{border-right:2px solid var(--danger)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.display{border-bottom:none;border-right:2px solid var(--secondary)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.noValid.display{border-bottom:none;border-right:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-content{flex:1}.inu-panel-tabs.vertical{flex-direction:row}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
167
+ }
168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanelTabs, decorators: [{
169
+ type: Component,
170
+ args: [{ selector: 'inu-panel-tabs', standalone: true, providers: [], imports: [
171
+ NgTemplateOutlet,
172
+ InuIcon
173
+ ], template: "<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n", styles: [".inu-panel-tabs{display:flex;flex-direction:column}.inu-panel-tabs .inu-panel-tabs-headers{display:flex}.inu-panel-tabs .inu-panel-tabs-headers ul{list-style:none;padding:0;margin:0;display:flex;gap:.25rem;width:100%;border-bottom:1px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul.noValid{border-bottom:1px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li{cursor:pointer;display:flex;border:1px solid var(--neutral-light);transition:background-color .25s}.inu-panel-tabs .inu-panel-tabs-headers ul li .inu-panel-tabs-headers-child-tab{display:flex;gap:1rem;align-items:baseline}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid{border:1px solid var(--danger-light-extra-extra);background-color:var(--danger-light-extra-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.display{background-color:var(--secondary-light-extra);border:1px solid var(--secondary-light-extra);border-bottom:2px solid var(--secondary)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid.display{background-color:var(--danger-light);border:1px solid var(--danger-light);border-bottom:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-headers ul li:hover{background-color:var(--secondary-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noValid:hover{background-color:var(--danger-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li.noAccess{cursor:not-allowed;color:var(--neutral);background-color:var(--neutral-light-extra)}.inu-panel-tabs .inu-panel-tabs-headers ul li{padding:.25rem 1rem}.inu-panel-tabs.vertical{gap:1rem}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul{flex-direction:column;border-right:2px solid var(--secondary);border-bottom:none}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul.noValid{border-right:2px solid var(--danger)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.display{border-bottom:none;border-right:2px solid var(--secondary)}.inu-panel-tabs.vertical .inu-panel-tabs-headers ul li.noValid.display{border-bottom:none;border-right:2px solid var(--danger)}.inu-panel-tabs .inu-panel-tabs-content{flex:1}.inu-panel-tabs.vertical{flex-direction:row}\n"] }]
174
+ }], ctorParameters: () => [], propDecorators: { activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], childrenTabs: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => InuPanelTab), { isSignal: true }] }], changed: [{ type: i0.Output, args: ["changed"] }] } });
175
+
176
+ /**
177
+ * Generated bundle index. Do not edit.
178
+ */
179
+
180
+ export { InuPanelTab, InuPanelTabs };
181
+ //# sourceMappingURL=inugami-ng-components-inu-panel-tabs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-panel-tabs.mjs","sources":["../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tab/inu-panel-tab.component.ts","../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tabs.ts","../../../projects/inugami-ng/components/inu-panel-tabs/inu-panel-tabs.html","../../../projects/inugami-ng/components/inu-panel-tabs/inugami-ng-components-inu-panel-tabs.ts"],"sourcesContent":["import {Component, effect, input, signal, TemplateRef, viewChild} from '@angular/core';\n\n@Component({\n selector: 'inu-panel-tab',\n standalone: true,\n providers: [],\n imports: [],\n template: `\n <ng-template #content>\n <div [class]=\"_styleClass()\">\n <ng-content/>\n </div>\n </ng-template>\n `\n})\nexport class InuPanelTab {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n icon = input<string>('');\n hasAccess = input<boolean>(true);\n label = input<string>('');\n name = input.required<string>();\n styleClass = input<string | undefined | null>('');\n valid = input<boolean>(true);\n //\n readonly templateRef = viewChild.required<TemplateRef<any>>('content');\n //\n display = signal<boolean>(false);\n _styleClass = signal<string>('');\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n const styles: string[] = ['inu-panel-tab'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n this._styleClass.set(styles.join(\" \"));\n });\n }\n}\n","import {AfterViewInit, Component, contentChildren, effect, input, output, signal} from '@angular/core';\nimport {InuPanelTab} from './inu-panel-tab/inu-panel-tab.component';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n selector: 'inu-panel-tabs',\n standalone: true,\n providers: [],\n imports: [\n NgTemplateOutlet,\n InuIcon\n ],\n templateUrl: './inu-panel-tabs.html',\n styleUrl: './inu-panel-tabs.scss',\n})\nexport class InuPanelTabs implements AfterViewInit {\n\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n readonly activeTab = input<string|undefined>(undefined);\n styleClass = input<string | undefined | null>('');\n readonly vertical = input(false);\n readonly childrenTabs = contentChildren(InuPanelTab);\n changed = output<string>();\n\n //\n _styleClass = signal<string>('');\n valid = signal<boolean>(true);\n tabs = signal<InuPanelTab[]>([]);\n\n //==================================================================================================================\n // INIT\n //==================================================================================================================\n constructor() {\n effect(() => {\n this.initStyleClass();\n });\n }\n\n private initStyleClass() {\n const styles: string[] = ['inu-panel-tabs'];\n const style = this.styleClass();\n if (style) {\n styles.push(style);\n }\n if (this.vertical()) {\n styles.push('vertical');\n }\n this._styleClass.set(styles.join(\" \"));\n }\n\n\n ngAfterViewInit(): void {\n this.initTabs();\n }\n\n private initTabs() {\n const result: InuPanelTab[] = [];\n const children = this.childrenTabs();\n\n\n\n for (let child of children) {\n result.push(child);\n }\n\n let found = false;\n const activeTab = this.activeTab();\n if(activeTab){\n for (let child of children) {\n if (activeTab == child.name()) {\n child.display.set(true);\n this.changed.emit(child.name());\n this.valid.set(child.valid());\n found = true;\n }\n }\n }\n\n if(!found){\n let first = true;\n for (let child of children) {\n if (first) {\n child.display.set(true);\n this.changed.emit(child.name());\n this.valid.set(child.valid());\n first = false;\n }\n }\n }\n\n this.tabs.set(result);\n }\n\n //==================================================================================================================\n // ACTIONS\n //==================================================================================================================\n openTab(panel: InuPanelTab) {\n if (!panel.hasAccess()) {\n return;\n }\n this.valid.set(true);\n const children = this.childrenTabs();\n if (!children) {\n return;\n }\n for (let child of children) {\n if (child.name() === panel.name()) {\n child.display.set(true);\n this.valid.set(child.valid());\n this.changed.emit(child.name());\n } else {\n child.display.set(false);\n }\n }\n }\n\n //==================================================================================================================\n // TOOLS\n //==================================================================================================================\n private checkValidity() {\n const children = this.childrenTabs();\n if (!children) {\n return;\n }\n this.valid.set(true);\n for (let child of children) {\n if(!child.valid()){\n this.valid.set(false);\n break;\n }\n }\n }\n}\n","<div [class]=\"_styleClass()\">\n\n\n <div class=\"inu-panel-tabs-headers\">\n <ul [class.noValid]=\"!valid()\">\n @for (tab of tabs(); track tab) {\n <li [class.display]=\"tab.display()\"\n [class.noAccess]=\"!tab.hasAccess()\"\n [class.noValid]=\"!tab.valid()\"\n (click)=\"openTab(tab)\">\n <div class=\"inu-panel-tabs-headers-child\">\n <div class=\"inu-panel-tabs-headers-child-tab\">\n <div class=\"inu-panel-tabs-headers-child-tab-icon\">\n @if(tab.icon()){\n <inu-icon [icon]=\"tab.icon()\" [size]=\"1\"></inu-icon>\n }\n </div>\n <div class=\"inu-panel-tabs-headers-child-tab-label\">{{tab.label()!}}</div>\n </div>\n </div>\n </li>\n }\n </ul>\n </div>\n <div class=\"inu-panel-tabs-content\">\n @for (tab of tabs(); track tab) {\n <div class=\"tab-panel\">\n @if(tab.display() && tab.hasAccess()){\n @if(tab.templateRef()){\n <ng-container [ngTemplateOutlet]=\"tab.templateRef()\" />\n }\n }\n </div>\n }\n </div>\n\n\n\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, inject, viewChild, computed, signal, effect, Component } from '@angular/core';
3
+ import { InuLabel } from 'inugami-ng/components/inu-label';
4
+ import { InuButton } from 'inugami-ng/components/inu-button';
5
+ import { SVG_MATH, SVG } from 'inugami-ng/services';
6
+ import { InuTemplateRegistryService } from 'inugami-ng/directives';
7
+ import { NgTemplateOutlet } from '@angular/common';
8
+ import { InuIcon } from 'inugami-icons';
9
+
10
+ class InuPanel {
11
+ //==================================================================================================================
12
+ // ATTRIBUTES
13
+ //==================================================================================================================
14
+ duration = input(500, ...(ngDevMode ? [{ debugName: "duration" }] : []));
15
+ icon = input(undefined, ...(ngDevMode ? [{ debugName: "icon" }] : []));
16
+ title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : []));
17
+ titleKey = input(undefined, ...(ngDevMode ? [{ debugName: "titleKey" }] : []));
18
+ styleClass = input(undefined, ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
19
+ collapsible = input(true, ...(ngDevMode ? [{ debugName: "collapsible" }] : []));
20
+ collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : []));
21
+ //
22
+ registry = inject(InuTemplateRegistryService);
23
+ main = viewChild('main', ...(ngDevMode ? [{ debugName: "main" }] : []));
24
+ footerTemplate = computed(() => this.registry.getTemplate('footer'), ...(ngDevMode ? [{ debugName: "footerTemplate" }] : []));
25
+ titleTemplate = computed(() => this.registry.getTemplate('title'), ...(ngDevMode ? [{ debugName: "titleTemplate" }] : []));
26
+ //
27
+ _styleClass = computed(() => [
28
+ 'inu-panel',
29
+ this.styleClass() ?? '',
30
+ this._collapsed() ? 'inu-panel-collapsed' : 'inu-panel-expanded'
31
+ ].join(' '), ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
32
+ _animeInProgress = signal(false, ...(ngDevMode ? [{ debugName: "_animeInProgress" }] : []));
33
+ _collapsed = signal(false, ...(ngDevMode ? [{ debugName: "_collapsed" }] : []));
34
+ constructor() {
35
+ effect(() => {
36
+ this._collapsed.set(this.collapsed());
37
+ });
38
+ }
39
+ //==================================================================================================================
40
+ // ACTIONS
41
+ //==================================================================================================================
42
+ toggleCollapse(event) {
43
+ event.stopPropagation();
44
+ event.preventDefault();
45
+ const node = this.main()?.nativeElement;
46
+ if (!this.collapsible() || this._animeInProgress() || !node) {
47
+ return;
48
+ }
49
+ const currentStyle = node.getAttribute('style') || '';
50
+ node.style.height = 'auto';
51
+ const computedHeight = SVG_MATH.size(node).height;
52
+ node.setAttribute('style', currentStyle);
53
+ const wasCollapsed = this._collapsed();
54
+ const startHeight = wasCollapsed ? 0 : computedHeight;
55
+ const endHeight = wasCollapsed ? computedHeight : 0;
56
+ const delta = endHeight - startHeight;
57
+ this._animeInProgress.set(true);
58
+ node.setAttribute('class', `animated`);
59
+ SVG.ANIMATION.animate((progress) => {
60
+ const currentProgressHeight = startHeight + (delta * progress);
61
+ node.style.height = `${currentProgressHeight}px`;
62
+ }, {
63
+ duration: this.duration(),
64
+ timer: SVG.ANIMATION.TYPES.easeOutCubic,
65
+ onDone: () => {
66
+ if (wasCollapsed) {
67
+ node.style.removeProperty('height');
68
+ }
69
+ else {
70
+ node.style.height = '0px';
71
+ }
72
+ this._collapsed.set(!this._collapsed());
73
+ requestAnimationFrame(() => {
74
+ this._animeInProgress.set(false);
75
+ node.setAttribute('class', ``);
76
+ });
77
+ }
78
+ });
79
+ }
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuPanel, isStandalone: true, selector: "inu-panel", inputs: { duration: { classPropertyName: "duration", publicName: "duration", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, titleKey: { classPropertyName: "titleKey", publicName: "titleKey", isSignal: true, isRequired: false, transformFunction: null }, styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, providers: [InuTemplateRegistryService], viewQueries: [{ propertyName: "main", first: true, predicate: ["main"], descendants: true, isSignal: true }], ngImport: i0, template: "<article [class]=\"_styleClass()\">\n <header (click)=\"toggleCollapse($event)\">\n @if(icon()){\n <inu-icon [icon]=\"icon()\" [size]=\"1.5\"></inu-icon>\n }\n\n <div class=\"inu-panel-title\">\n @if(titleTemplate()){\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @else{\n @if (title() || titleKey()) {\n @if (titleKey()) {\n <label>\n <inu-label [key]=\"titleKey()\" [defaultValue]=\"title()!\"></inu-label>\n </label>\n } @else {\n <label>{{ title()! }}</label>\n }\n }\n }\n\n </div>\n @if(collapsible()){\n <ul class=\"inu-panel-title-collapsible\">\n <li>\n <inu-button [icon]=\"_collapsed()?'chevron_down':'chevron_up'\"\n [disabled]=\"_animeInProgress()\"></inu-button>\n </li>\n </ul>\n }\n </header>\n <main #main>\n <div class=\"inu-panel-main\">\n <ng-content/>\n </div>\n </main>\n @if(footerTemplate()){\n <footer>\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </footer>\n }\n\n</article>\n", styles: [".inu-panel{border:.125rem solid var(--neutral-light)}.inu-panel header{display:flex;padding:.5rem;background-color:var(--neutral-light);border-bottom:.125rem solid var(--neutral-light);font-weight:700;gap:.5rem;align-items:center}.inu-panel header .inu-panel-title{flex:1;display:flex;align-items:center}.inu-panel header .inu-panel-title label{display:flex;align-items:center}.inu-panel header .inu-panel-title-collapsible{margin:0;padding:0;display:flex}.inu-panel header .inu-panel-title-collapsible li{list-style:none}.inu-panel.inu-panel-expanded main{display:flex}.inu-panel.inu-panel-collapsed main{visibility:hidden;height:0}.inu-panel main .inu-panel-main{padding:.5rem}.inu-panel main.animated{visibility:visible;overflow:hidden}.inu-panel ::ng-deep inu-button button{background:transparent;border:none}.inu-panel ::ng-deep inu-button button:hover{border-color:transparent;-webkit-box-shadow:none;box-shadow:none;fill:var(--secondary)}.inu-panel ::ng-deep inu-button button.disabled{background-color:transparent;border:none!important;-webkit-box-shadow:none;box-shadow:none;color:var(--neutral);fill:var(--neutral)}.inu-panel footer{border-top:.125rem solid var(--neutral-light);padding:.5rem}\n"], dependencies: [{ kind: "component", type: InuLabel, selector: "inu-label", inputs: ["key", "defaultValue"] }, { kind: "component", type: InuButton, selector: "inu-button", inputs: ["label", "icon", "iconSize", "type", "link", "disabled", "processing", "processingIcon"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: InuIcon, selector: "inu-icon", inputs: ["icon", "defaultIcon", "styleclass", "size"] }] });
82
+ }
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuPanel, decorators: [{
84
+ type: Component,
85
+ args: [{ selector: 'inu-panel', standalone: true, imports: [
86
+ InuLabel,
87
+ InuButton,
88
+ NgTemplateOutlet,
89
+ InuIcon
90
+ ], providers: [InuTemplateRegistryService], template: "<article [class]=\"_styleClass()\">\n <header (click)=\"toggleCollapse($event)\">\n @if(icon()){\n <inu-icon [icon]=\"icon()\" [size]=\"1.5\"></inu-icon>\n }\n\n <div class=\"inu-panel-title\">\n @if(titleTemplate()){\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @else{\n @if (title() || titleKey()) {\n @if (titleKey()) {\n <label>\n <inu-label [key]=\"titleKey()\" [defaultValue]=\"title()!\"></inu-label>\n </label>\n } @else {\n <label>{{ title()! }}</label>\n }\n }\n }\n\n </div>\n @if(collapsible()){\n <ul class=\"inu-panel-title-collapsible\">\n <li>\n <inu-button [icon]=\"_collapsed()?'chevron_down':'chevron_up'\"\n [disabled]=\"_animeInProgress()\"></inu-button>\n </li>\n </ul>\n }\n </header>\n <main #main>\n <div class=\"inu-panel-main\">\n <ng-content/>\n </div>\n </main>\n @if(footerTemplate()){\n <footer>\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </footer>\n }\n\n</article>\n", styles: [".inu-panel{border:.125rem solid var(--neutral-light)}.inu-panel header{display:flex;padding:.5rem;background-color:var(--neutral-light);border-bottom:.125rem solid var(--neutral-light);font-weight:700;gap:.5rem;align-items:center}.inu-panel header .inu-panel-title{flex:1;display:flex;align-items:center}.inu-panel header .inu-panel-title label{display:flex;align-items:center}.inu-panel header .inu-panel-title-collapsible{margin:0;padding:0;display:flex}.inu-panel header .inu-panel-title-collapsible li{list-style:none}.inu-panel.inu-panel-expanded main{display:flex}.inu-panel.inu-panel-collapsed main{visibility:hidden;height:0}.inu-panel main .inu-panel-main{padding:.5rem}.inu-panel main.animated{visibility:visible;overflow:hidden}.inu-panel ::ng-deep inu-button button{background:transparent;border:none}.inu-panel ::ng-deep inu-button button:hover{border-color:transparent;-webkit-box-shadow:none;box-shadow:none;fill:var(--secondary)}.inu-panel ::ng-deep inu-button button.disabled{background-color:transparent;border:none!important;-webkit-box-shadow:none;box-shadow:none;color:var(--neutral);fill:var(--neutral)}.inu-panel footer{border-top:.125rem solid var(--neutral-light);padding:.5rem}\n"] }]
91
+ }], ctorParameters: () => [], propDecorators: { duration: [{ type: i0.Input, args: [{ isSignal: true, alias: "duration", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], titleKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "titleKey", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], main: [{ type: i0.ViewChild, args: ['main', { isSignal: true }] }] } });
92
+
93
+ /**
94
+ * Generated bundle index. Do not edit.
95
+ */
96
+
97
+ export { InuPanel };
98
+ //# sourceMappingURL=inugami-ng-components-inu-panel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-panel.mjs","sources":["../../../projects/inugami-ng/components/inu-panel/inu-panel.ts","../../../projects/inugami-ng/components/inu-panel/inu-panel.html","../../../projects/inugami-ng/components/inu-panel/inugami-ng-components-inu-panel.ts"],"sourcesContent":["import {Component, computed, effect, ElementRef, inject, input, signal, viewChild} from '@angular/core';\nimport {InuLabel} from 'inugami-ng/components/inu-label';\nimport {InuButton} from 'inugami-ng/components/inu-button';\nimport {SVG, SVG_MATH} from 'inugami-ng/services';\nimport {InuTemplateRegistryService} from 'inugami-ng/directives';\nimport {NgTemplateOutlet} from '@angular/common';\nimport {InuIcon} from 'inugami-icons';\n\n@Component({\n selector : 'inu-panel',\n standalone : true,\n imports : [\n InuLabel,\n InuButton,\n NgTemplateOutlet,\n InuIcon\n ],\n providers : [InuTemplateRegistryService],\n templateUrl: './inu-panel.html',\n styleUrl : './inu-panel.scss',\n })\nexport class InuPanel {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n duration = input<number>(500);\n icon = input<string | undefined>(undefined);\n title = input<string | undefined>(undefined);\n titleKey = input<string | undefined>(undefined);\n styleClass = input<string | undefined>(undefined);\n collapsible = input<boolean>(true);\n collapsed = input<boolean>(false);\n\n //\n registry: InuTemplateRegistryService = inject(InuTemplateRegistryService);\n main = viewChild<ElementRef<HTMLElement>>('main');\n footerTemplate = computed(() => this.registry.getTemplate('footer'));\n titleTemplate = computed(() => this.registry.getTemplate('title'));\n //\n _styleClass = computed<string>(() => [\n 'inu-panel',\n this.styleClass() ?? '',\n this._collapsed() ? 'inu-panel-collapsed' : 'inu-panel-expanded'\n ].join(' '));\n _animeInProgress = signal<boolean>(false);\n _collapsed = signal<boolean>(false);\n\n constructor() {\n effect(() => {\n this._collapsed.set(this.collapsed());\n });\n }\n\n //==================================================================================================================\n // ACTIONS\n //==================================================================================================================\n protected toggleCollapse(event: PointerEvent) {\n event.stopPropagation();\n event.preventDefault();\n const node = this.main()?.nativeElement;\n\n if (!this.collapsible() || this._animeInProgress() || !node) {\n return;\n }\n const currentStyle = node.getAttribute('style') || '';\n node.style.height = 'auto';\n const computedHeight = SVG_MATH.size(node).height;\n node.setAttribute('style', currentStyle);\n\n const wasCollapsed = this._collapsed();\n const startHeight = wasCollapsed ? 0 : computedHeight;\n const endHeight = wasCollapsed ? computedHeight : 0;\n const delta = endHeight - startHeight;\n\n this._animeInProgress.set(true);\n node.setAttribute('class', `animated`);\n\n SVG.ANIMATION.animate((progress: number) => {\n const currentProgressHeight = startHeight + (delta * progress);\n node.style.height = `${currentProgressHeight}px`;\n },\n {\n duration: this.duration(),\n timer : SVG.ANIMATION.TYPES.easeOutCubic,\n onDone : () => {\n if (wasCollapsed) {\n node.style.removeProperty('height');\n } else {\n node.style.height = '0px';\n }\n this._collapsed.set(!this._collapsed());\n requestAnimationFrame(() => {\n this._animeInProgress.set(false);\n node.setAttribute('class', ``);\n });\n }\n });\n }\n}\n","<article [class]=\"_styleClass()\">\n <header (click)=\"toggleCollapse($event)\">\n @if(icon()){\n <inu-icon [icon]=\"icon()\" [size]=\"1.5\"></inu-icon>\n }\n\n <div class=\"inu-panel-title\">\n @if(titleTemplate()){\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @else{\n @if (title() || titleKey()) {\n @if (titleKey()) {\n <label>\n <inu-label [key]=\"titleKey()\" [defaultValue]=\"title()!\"></inu-label>\n </label>\n } @else {\n <label>{{ title()! }}</label>\n }\n }\n }\n\n </div>\n @if(collapsible()){\n <ul class=\"inu-panel-title-collapsible\">\n <li>\n <inu-button [icon]=\"_collapsed()?'chevron_down':'chevron_up'\"\n [disabled]=\"_animeInProgress()\"></inu-button>\n </li>\n </ul>\n }\n </header>\n <main #main>\n <div class=\"inu-panel-main\">\n <ng-content/>\n </div>\n </main>\n @if(footerTemplate()){\n <footer>\n <ng-container *ngTemplateOutlet=\"footerTemplate()\"></ng-container>\n </footer>\n }\n\n</article>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;MAqBa,QAAQ,CAAA;;;;AAKnB,IAAA,QAAQ,GAAM,KAAK,CAAS,GAAG,oDAAC;AAChC,IAAA,IAAI,GAAU,KAAK,CAAqB,SAAS,gDAAC;AAClD,IAAA,KAAK,GAAS,KAAK,CAAqB,SAAS,iDAAC;AAClD,IAAA,QAAQ,GAAM,KAAK,CAAqB,SAAS,oDAAC;AAClD,IAAA,UAAU,GAAI,KAAK,CAAqB,SAAS,sDAAC;AAClD,IAAA,WAAW,GAAG,KAAK,CAAU,IAAI,uDAAC;AAClC,IAAA,SAAS,GAAK,KAAK,CAAU,KAAK,qDAAC;;AAGnC,IAAA,QAAQ,GAA+B,MAAM,CAAC,0BAA0B,CAAC;AACzE,IAAA,IAAI,GAAmC,SAAS,CAA0B,MAAM,gDAAC;AACjF,IAAA,cAAc,GAAyB,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,0DAAC;AAC1F,IAAA,aAAa,GAA0B,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,yDAAC;;AAEzF,IAAA,WAAW,GAA4B,QAAQ,CAAS,MAAM;QAC5D,WAAW;AACX,QAAA,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;QACvB,IAAI,CAAC,UAAU,EAAE,GAAG,qBAAqB,GAAG;AAC7C,KAAA,CAAC,IAAI,CAAC,GAAG,CAAC,uDAAC;AACZ,IAAA,gBAAgB,GAAuB,MAAM,CAAU,KAAK,4DAAC;AAC7D,IAAA,UAAU,GAA6B,MAAM,CAAU,KAAK,sDAAC;AAE7D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;;;;AAKU,IAAA,cAAc,CAAC,KAAmB,EAAA;QAC1C,KAAK,CAAC,eAAe,EAAE;QACvB,KAAK,CAAC,cAAc,EAAE;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE;YAC3D;QACF;QACA,MAAM,YAAY,GAAK,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;AACvD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAM,MAAM;QAC7B,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;AACjD,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC;AAExC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;QACtC,MAAM,WAAW,GAAI,YAAY,GAAG,CAAC,GAAG,cAAc;QACtD,MAAM,SAAS,GAAM,YAAY,GAAG,cAAc,GAAG,CAAC;AACtD,QAAA,MAAM,KAAK,GAAU,SAAS,GAAG,WAAW;AAE5C,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;AAC/B,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA,QAAA,CAAU,CAAC;QAEtC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAgB,KAAI;YACnB,MAAM,qBAAqB,GAAG,WAAW,IAAI,KAAK,GAAG,QAAQ,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,GAAa,CAAA,EAAG,qBAAqB,IAAI;AAC5D,QAAA,CAAC,EACD;AACE,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAK,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,YAAY;YAC1C,MAAM,EAAI,MAAK;gBACb,IAAI,YAAY,EAAE;AAChB,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;gBACrC;qBAAO;AACL,oBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;gBAC3B;gBACA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,qBAAqB,CAAC,MAAK;AACzB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;AAChC,oBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA,CAAE,CAAC;AAChC,gBAAA,CAAC,CAAC;YACJ;AACD,SAAA,CAAC;IAC1B;uGA7EW,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAR,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,SAAA,EAJK,CAAC,0BAA0B,CAAC,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBtD,6pCA4CA,EAAA,MAAA,EAAA,CAAA,urCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDhCe,QAAQ,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,SAAS,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,gBAAgB,oJAChB,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,aAAA,EAAA,YAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAMT,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAbpB,SAAS;+BACgB,WAAW,EAAA,UAAA,EACX,IAAI,EAAA,OAAA,EACJ;wBACX,QAAQ;wBACR,SAAS;wBACT,gBAAgB;wBAChB;qBACD,EAAA,SAAA,EACY,CAAC,0BAA0B,CAAC,EAAA,QAAA,EAAA,6pCAAA,EAAA,MAAA,EAAA,CAAA,urCAAA,CAAA,EAAA;0vBAmBsB,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpClF;;AAEG;;;;"}
@@ -0,0 +1,96 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, viewChild, computed, signal, effect, Component } from '@angular/core';
3
+ import { SVG } from 'inugami-ng/services';
4
+
5
+ class InuProgress {
6
+ //==================================================================================================================
7
+ // ATTRIBUTES
8
+ //==================================================================================================================
9
+ styleClass = input(undefined, ...(ngDevMode ? [{ debugName: "styleClass" }] : []));
10
+ value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : []));
11
+ min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : []));
12
+ max = input(1, ...(ngDevMode ? [{ debugName: "max" }] : []));
13
+ unit = input('%', ...(ngDevMode ? [{ debugName: "unit" }] : []));
14
+ showValue = input(true, ...(ngDevMode ? [{ debugName: "showValue" }] : []));
15
+ nbDigit = input(2, ...(ngDevMode ? [{ debugName: "nbDigit" }] : []));
16
+ //
17
+ main = viewChild('cursor', ...(ngDevMode ? [{ debugName: "main" }] : []));
18
+ //
19
+ _node = computed(() => this.main()?.nativeElement, ...(ngDevMode ? [{ debugName: "_node" }] : []));
20
+ _percentage = signal(0, ...(ngDevMode ? [{ debugName: "_percentage" }] : []));
21
+ _previousValue = signal(undefined, ...(ngDevMode ? [{ debugName: "_previousValue" }] : []));
22
+ _styleClass = computed(() => [
23
+ 'inu-progress',
24
+ this.styleClass() ?? ''
25
+ ].join(' '), ...(ngDevMode ? [{ debugName: "_styleClass" }] : []));
26
+ _value = signal('', ...(ngDevMode ? [{ debugName: "_value" }] : []));
27
+ _animatedPercentage = signal(0, ...(ngDevMode ? [{ debugName: "_animatedPercentage" }] : []));
28
+ currentAnimationId = 0;
29
+ constructor() {
30
+ this.updateValue();
31
+ effect(() => this.updateValue());
32
+ }
33
+ //==================================================================================================================
34
+ // ACTIONS
35
+ //==================================================================================================================
36
+ updateValue() {
37
+ let current = this.value() ?? 0;
38
+ const minimum = this.min() ?? 0;
39
+ const maximum = this.max() ?? 1;
40
+ const node = this._node();
41
+ if (!node || minimum >= maximum) {
42
+ return;
43
+ }
44
+ if (current > maximum)
45
+ current = maximum;
46
+ if (current < minimum)
47
+ current = minimum;
48
+ const clampedRatio = Math.max(0, Math.min(1, (current - minimum) / (maximum - minimum)));
49
+ const targetPct = clampedRatio * 100;
50
+ const hasPrevious = this._previousValue() !== undefined;
51
+ const startPct = hasPrevious ? this._animatedPercentage() : targetPct;
52
+ const deltaPct = targetPct - startPct;
53
+ this._percentage.set(targetPct);
54
+ this._previousValue.set(current);
55
+ this._value.set(targetPct.toFixed(this.nbDigit()));
56
+ if (!hasPrevious || deltaPct === 0) {
57
+ this._animatedPercentage.set(targetPct);
58
+ node.style.transform = `scaleX(${clampedRatio})`;
59
+ return;
60
+ }
61
+ this.currentAnimationId++;
62
+ const animationId = this.currentAnimationId;
63
+ SVG.ANIMATION.animate((progress) => {
64
+ if (animationId !== this.currentAnimationId) {
65
+ return;
66
+ }
67
+ const currentPct = startPct + (deltaPct * progress);
68
+ const currentRatio = currentPct / 100;
69
+ this._animatedPercentage.set(currentPct);
70
+ node.style.transform = `scaleX(${currentRatio})`;
71
+ }, {
72
+ duration: 300,
73
+ timer: SVG.ANIMATION.TYPES.easeOutCubic,
74
+ onDone: () => {
75
+ if (animationId !== this.currentAnimationId) {
76
+ return;
77
+ }
78
+ this._animatedPercentage.set(targetPct);
79
+ node.style.transform = `scaleX(${clampedRatio})`;
80
+ }
81
+ });
82
+ }
83
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuProgress, deps: [], target: i0.ɵɵFactoryTarget.Component });
84
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.8", type: InuProgress, isStandalone: true, selector: "inu-progress", inputs: { styleClass: { classPropertyName: "styleClass", publicName: "styleClass", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, nbDigit: { classPropertyName: "nbDigit", publicName: "nbDigit", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "main", first: true, predicate: ["cursor"], descendants: true, isSignal: true }], ngImport: i0, template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-progress-cursor\" #cursor></div>\n @if(showValue()){\n <div class=\"inu-progress-value-grp text-under\">\n <div class=\"inu-progress-value\">{{ _value() }}</div>\n <div class=\"inu-progress-unit\">{{ unit() }}</div>\n </div>\n }\n\n @if(showValue()){\n <div class=\"inu-progress-value-grp text-over\" [style.--progress-pct.%]=\"_percentage()\">\n <div class=\"inu-progress-value\">{{ _value() }}</div>\n <div class=\"inu-progress-unit\">{{ unit() }}</div>\n </div>\n }\n</div>\n", styles: [".inu-progress{position:relative;width:100%;height:1.5rem;background-color:var(--neutral-light);border-radius:.25rem;overflow:hidden}.inu-progress .inu-progress-cursor{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--secondary);transform-origin:left;will-change:transform}.inu-progress .inu-progress-value-grp{position:absolute;inset:0;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.25rem;width:100%;height:100%;font-weight:700;font-size:.85rem;pointer-events:none}.inu-progress .inu-progress-value-grp.text-under{z-index:1;color:var(--secondary)}.inu-progress .inu-progress-value-grp.text-over{z-index:2;color:var(--neutral-light-extra-plus);clip-path:inset(0 calc(100% - var(--progress-pct, 0%)) 0 0);will-change:clip-path}\n"] });
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: InuProgress, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'inu-progress', standalone: true, imports: [], template: "<div [class]=\"_styleClass()\">\n <div class=\"inu-progress-cursor\" #cursor></div>\n @if(showValue()){\n <div class=\"inu-progress-value-grp text-under\">\n <div class=\"inu-progress-value\">{{ _value() }}</div>\n <div class=\"inu-progress-unit\">{{ unit() }}</div>\n </div>\n }\n\n @if(showValue()){\n <div class=\"inu-progress-value-grp text-over\" [style.--progress-pct.%]=\"_percentage()\">\n <div class=\"inu-progress-value\">{{ _value() }}</div>\n <div class=\"inu-progress-unit\">{{ unit() }}</div>\n </div>\n }\n</div>\n", styles: [".inu-progress{position:relative;width:100%;height:1.5rem;background-color:var(--neutral-light);border-radius:.25rem;overflow:hidden}.inu-progress .inu-progress-cursor{position:absolute;top:0;left:0;width:100%;height:100%;background-color:var(--secondary);transform-origin:left;will-change:transform}.inu-progress .inu-progress-value-grp{position:absolute;inset:0;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:.25rem;width:100%;height:100%;font-weight:700;font-size:.85rem;pointer-events:none}.inu-progress .inu-progress-value-grp.text-under{z-index:1;color:var(--secondary)}.inu-progress .inu-progress-value-grp.text-over{z-index:2;color:var(--neutral-light-extra-plus);clip-path:inset(0 calc(100% - var(--progress-pct, 0%)) 0 0);will-change:clip-path}\n"] }]
89
+ }], ctorParameters: () => [], propDecorators: { styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], unit: [{ type: i0.Input, args: [{ isSignal: true, alias: "unit", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], nbDigit: [{ type: i0.Input, args: [{ isSignal: true, alias: "nbDigit", required: false }] }], main: [{ type: i0.ViewChild, args: ['cursor', { isSignal: true }] }] } });
90
+
91
+ /**
92
+ * Generated bundle index. Do not edit.
93
+ */
94
+
95
+ export { InuProgress };
96
+ //# sourceMappingURL=inugami-ng-components-inu-progress.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inugami-ng-components-inu-progress.mjs","sources":["../../../projects/inugami-ng/components/inu-progress/inu-progress.ts","../../../projects/inugami-ng/components/inu-progress/inu-progress.html","../../../projects/inugami-ng/components/inu-progress/inugami-ng-components-inu-progress.ts"],"sourcesContent":["import {Component, computed, effect, ElementRef, input, signal, viewChild} from '@angular/core';\nimport {SVG} from 'inugami-ng/services'\n\n@Component({\n selector : 'inu-progress',\n standalone : true,\n imports : [],\n templateUrl: './inu-progress.html',\n styleUrl : './inu-progress.scss',\n })\nexport class InuProgress {\n\n //==================================================================================================================\n // ATTRIBUTES\n //==================================================================================================================\n styleClass = input<string | undefined>(undefined);\n value = input<number>(0);\n min = input<number>(0);\n max = input<number>(1);\n unit = input<string>('%');\n showValue = input<boolean>(true);\n nbDigit = input<number>(2);\n\n //\n main = viewChild<ElementRef<HTMLElement>>('cursor');\n\n //\n _node = computed(() => this.main()?.nativeElement);\n _percentage = signal<number>(0);\n _previousValue = signal<number | undefined>(undefined);\n _styleClass = computed<string>(() => [\n 'inu-progress',\n this.styleClass() ?? ''\n ].join(' '));\n\n _value = signal<string>('');\n _animatedPercentage = signal<number>(0);\n currentAnimationId: number = 0;\n\n constructor() {\n this.updateValue();\n effect(() => this.updateValue());\n }\n\n //==================================================================================================================\n // ACTIONS\n //==================================================================================================================\n private updateValue() {\n let current = this.value() ?? 0;\n const minimum = this.min() ?? 0;\n const maximum = this.max() ?? 1;\n const node = this._node();\n\n if (!node || minimum >= maximum) {\n return;\n }\n\n if (current > maximum) current = maximum;\n if (current < minimum) current = minimum;\n\n const clampedRatio = Math.max(0, Math.min(1, (current - minimum) / (maximum - minimum)));\n const targetPct = clampedRatio * 100;\n const hasPrevious = this._previousValue() !== undefined;\n const startPct = hasPrevious ? this._animatedPercentage() : targetPct;\n const deltaPct = targetPct - startPct;\n\n this._percentage.set(targetPct);\n this._previousValue.set(current);\n this._value.set(targetPct.toFixed(this.nbDigit()));\n\n if (!hasPrevious || deltaPct === 0) {\n this._animatedPercentage.set(targetPct);\n node.style.transform = `scaleX(${clampedRatio})`;\n return;\n }\n\n this.currentAnimationId++;\n const animationId = this.currentAnimationId;\n\n SVG.ANIMATION.animate(\n (progress: number) => {\n if (animationId !== this.currentAnimationId) {\n return;\n }\n\n const currentPct = startPct + (deltaPct * progress);\n const currentRatio = currentPct / 100;\n\n this._animatedPercentage.set(currentPct);\n node.style.transform = `scaleX(${currentRatio})`;\n },\n {\n duration: 300,\n timer : SVG.ANIMATION.TYPES.easeOutCubic,\n onDone : () => {\n if (animationId !== this.currentAnimationId) {\n return;\n }\n\n this._animatedPercentage.set(targetPct);\n node.style.transform = `scaleX(${clampedRatio})`;\n }\n }\n );\n }\n}\n","<div [class]=\"_styleClass()\">\n <div class=\"inu-progress-cursor\" #cursor></div>\n @if(showValue()){\n <div class=\"inu-progress-value-grp text-under\">\n <div class=\"inu-progress-value\">{{ _value() }}</div>\n <div class=\"inu-progress-unit\">{{ unit() }}</div>\n </div>\n }\n\n @if(showValue()){\n <div class=\"inu-progress-value-grp text-over\" [style.--progress-pct.%]=\"_percentage()\">\n <div class=\"inu-progress-value\">{{ _value() }}</div>\n <div class=\"inu-progress-unit\">{{ unit() }}</div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}