@fuse_ui/skeleton 0.0.1

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.
@@ -0,0 +1,34 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
3
+
4
+ class FuseSkeletonComponent {
5
+ // ─── Public @Input() API ────────────────────────────────────────────────────
6
+ variant = input('rect', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
7
+ width = input('100%', ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
8
+ height = input('1rem', ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
9
+ lines = input(1, ...(ngDevMode ? [{ debugName: "lines" }] : /* istanbul ignore next */ []));
10
+ // ─── Host classes ────────────────────────────────────────────────────────────
11
+ get hostClasses() {
12
+ return 'fuse-skeleton-host';
13
+ }
14
+ // ─── Derived values ─────────────────────────────────────────────────────────
15
+ lineArray = computed(() => Array.from({ length: this.lines() }, (_, i) => i), ...(ngDevMode ? [{ debugName: "lineArray" }] : /* istanbul ignore next */ []));
16
+ /** Width of the last line in a multi-line text block (shorter = more natural). */
17
+ lineWidth(index) {
18
+ const isLast = index === this.lineArray().length - 1;
19
+ return isLast ? '70%' : '100%';
20
+ }
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuseSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
22
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: FuseSkeletonComponent, isStandalone: true, selector: "fuse-skeleton", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, lines: { classPropertyName: "lines", publicName: "lines", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses" } }, ngImport: i0, template: "<!-- Multi-line text skeleton -->\n@if (variant() === 'text' && lines() > 1) {\n @for (i of lineArray(); track i) {\n <span\n class=\"fuse-skeleton fuse-skeleton--text\"\n [style.width]=\"lineWidth(i)\"\n [style.height]=\"height()\"\n ></span>\n }\n} @else {\n <!-- Single element (text line, circle, or rect) -->\n <span\n class=\"fuse-skeleton\"\n [class.fuse-skeleton--text]=\"variant() === 'text'\"\n [class.fuse-skeleton--circle]=\"variant() === 'circle'\"\n [class.fuse-skeleton--rect]=\"variant() === 'rect'\"\n [style.width]=\"variant() === 'circle' ? height() : width()\"\n [style.height]=\"height()\"\n ></span>\n}\n", styles: ["@keyframes fuse-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}:host{--fuse-skeleton-bg-base: var(--fuse-color-bg-elevated, #f1f5f9);--fuse-skeleton-bg-highlight: var(--fuse-color-border-default, #e2e8f0);--fuse-skeleton-radius-text: var(--fuse-radius-sm, 4px);--fuse-skeleton-radius-rect: var(--fuse-radius-md, 8px);--fuse-skeleton-line-gap: var(--fuse-space-2, .5rem);--fuse-skeleton-duration: 1.6s;display:flex;flex-direction:column;gap:var(--fuse-skeleton-line-gap);width:100%}.fuse-skeleton{display:block;background:linear-gradient(90deg,var(--fuse-skeleton-bg-base) 25%,var(--fuse-skeleton-bg-highlight) 50%,var(--fuse-skeleton-bg-base) 75%);background-size:200% 100%;animation:fuse-shimmer var(--fuse-skeleton-duration) linear infinite}.fuse-skeleton--text{border-radius:var(--fuse-skeleton-radius-text)}.fuse-skeleton--rect{border-radius:var(--fuse-skeleton-radius-rect)}.fuse-skeleton--circle{border-radius:50%;aspect-ratio:1}:host-context(.ios){--fuse-skeleton-radius-rect: var(--fuse-radius-lg, 12px)}:host-context(.md){--fuse-skeleton-radius-rect: var(--fuse-radius-xs, 2px);--fuse-skeleton-radius-text: 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuseSkeletonComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'fuse-skeleton', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'hostClasses' }, template: "<!-- Multi-line text skeleton -->\n@if (variant() === 'text' && lines() > 1) {\n @for (i of lineArray(); track i) {\n <span\n class=\"fuse-skeleton fuse-skeleton--text\"\n [style.width]=\"lineWidth(i)\"\n [style.height]=\"height()\"\n ></span>\n }\n} @else {\n <!-- Single element (text line, circle, or rect) -->\n <span\n class=\"fuse-skeleton\"\n [class.fuse-skeleton--text]=\"variant() === 'text'\"\n [class.fuse-skeleton--circle]=\"variant() === 'circle'\"\n [class.fuse-skeleton--rect]=\"variant() === 'rect'\"\n [style.width]=\"variant() === 'circle' ? height() : width()\"\n [style.height]=\"height()\"\n ></span>\n}\n", styles: ["@keyframes fuse-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}:host{--fuse-skeleton-bg-base: var(--fuse-color-bg-elevated, #f1f5f9);--fuse-skeleton-bg-highlight: var(--fuse-color-border-default, #e2e8f0);--fuse-skeleton-radius-text: var(--fuse-radius-sm, 4px);--fuse-skeleton-radius-rect: var(--fuse-radius-md, 8px);--fuse-skeleton-line-gap: var(--fuse-space-2, .5rem);--fuse-skeleton-duration: 1.6s;display:flex;flex-direction:column;gap:var(--fuse-skeleton-line-gap);width:100%}.fuse-skeleton{display:block;background:linear-gradient(90deg,var(--fuse-skeleton-bg-base) 25%,var(--fuse-skeleton-bg-highlight) 50%,var(--fuse-skeleton-bg-base) 75%);background-size:200% 100%;animation:fuse-shimmer var(--fuse-skeleton-duration) linear infinite}.fuse-skeleton--text{border-radius:var(--fuse-skeleton-radius-text)}.fuse-skeleton--rect{border-radius:var(--fuse-skeleton-radius-rect)}.fuse-skeleton--circle{border-radius:50%;aspect-ratio:1}:host-context(.ios){--fuse-skeleton-radius-rect: var(--fuse-radius-lg, 12px)}:host-context(.md){--fuse-skeleton-radius-rect: var(--fuse-radius-xs, 2px);--fuse-skeleton-radius-text: 0}\n"] }]
27
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], lines: [{ type: i0.Input, args: [{ isSignal: true, alias: "lines", required: false }] }] } });
28
+
29
+ /**
30
+ * Generated bundle index. Do not edit.
31
+ */
32
+
33
+ export { FuseSkeletonComponent };
34
+ //# sourceMappingURL=fuse_ui-skeleton.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuse_ui-skeleton.mjs","sources":["../../../../packages/skeleton/src/lib/skeleton/fuse-skeleton.component.ts","../../../../packages/skeleton/src/lib/skeleton/fuse-skeleton.component.html","../../../../packages/skeleton/src/fuse_ui-skeleton.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n} from '@angular/core';\n\n@Component({\n selector: 'fuse-skeleton',\n standalone: true,\n imports: [],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './fuse-skeleton.component.html',\n styleUrl: './fuse-skeleton.component.scss',\n host: { '[class]': 'hostClasses' },\n})\nexport class FuseSkeletonComponent {\n // ─── Public @Input() API ────────────────────────────────────────────────────\n\n readonly variant = input<'text' | 'circle' | 'rect'>('rect');\n readonly width = input('100%');\n readonly height = input('1rem');\n readonly lines = input(1);\n\n // ─── Host classes ────────────────────────────────────────────────────────────\n\n get hostClasses(): string {\n return 'fuse-skeleton-host';\n }\n\n // ─── Derived values ─────────────────────────────────────────────────────────\n\n protected readonly lineArray = computed(() =>\n Array.from({ length: this.lines() }, (_, i) => i)\n );\n\n /** Width of the last line in a multi-line text block (shorter = more natural). */\n lineWidth(index: number): string {\n const isLast = index === this.lineArray().length - 1;\n return isLast ? '70%' : '100%';\n }\n}\n","<!-- Multi-line text skeleton -->\n@if (variant() === 'text' && lines() > 1) {\n @for (i of lineArray(); track i) {\n <span\n class=\"fuse-skeleton fuse-skeleton--text\"\n [style.width]=\"lineWidth(i)\"\n [style.height]=\"height()\"\n ></span>\n }\n} @else {\n <!-- Single element (text line, circle, or rect) -->\n <span\n class=\"fuse-skeleton\"\n [class.fuse-skeleton--text]=\"variant() === 'text'\"\n [class.fuse-skeleton--circle]=\"variant() === 'circle'\"\n [class.fuse-skeleton--rect]=\"variant() === 'rect'\"\n [style.width]=\"variant() === 'circle' ? height() : width()\"\n [style.height]=\"height()\"\n ></span>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;MAgBa,qBAAqB,CAAA;;AAGvB,IAAA,OAAO,GAAG,KAAK,CAA6B,MAAM,8EAAC;AACnD,IAAA,KAAK,GAAG,KAAK,CAAC,MAAM,4EAAC;AACrB,IAAA,MAAM,GAAG,KAAK,CAAC,MAAM,6EAAC;AACtB,IAAA,KAAK,GAAG,KAAK,CAAC,CAAC,4EAAC;;AAIzB,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,oBAAoB;IAC7B;;AAImB,IAAA,SAAS,GAAG,QAAQ,CAAC,MACtC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,gFAClD;;AAGD,IAAA,SAAS,CAAC,KAAa,EAAA;AACrB,QAAA,MAAM,MAAM,GAAG,KAAK,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC;QACpD,OAAO,MAAM,GAAG,KAAK,GAAG,MAAM;IAChC;uGAxBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,gnBChBlC,gqBAoBA,EAAA,MAAA,EAAA,CAAA,ynCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDJa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,UAAA,EACb,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,eAAA,EACM,uBAAuB,CAAC,MAAM,EAAA,IAAA,EAGzC,EAAE,SAAS,EAAE,aAAa,EAAE,EAAA,QAAA,EAAA,gqBAAA,EAAA,MAAA,EAAA,CAAA,ynCAAA,CAAA,EAAA;;;AEdpC;;AAEG;;;;"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@fuse_ui/skeleton",
3
+ "version": "0.0.1",
4
+ "license": "MIT",
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "keywords": [
9
+ "fuse-ui",
10
+ "angular",
11
+ "ionic",
12
+ "ionic8",
13
+ "angular18",
14
+ "angular19",
15
+ "angular20",
16
+ "angular21",
17
+ "ui-components",
18
+ "design-system",
19
+ "css-variables",
20
+ "signals",
21
+ "standalone",
22
+ "multi-theme",
23
+ "dark-mode",
24
+ "fluid-typography",
25
+ "animated"
26
+ ],
27
+ "peerDependencies": {
28
+ "@angular/core": ">=18.0.0",
29
+ "@angular/common": ">=18.0.0",
30
+ "rxjs": ">=7.4.0"
31
+ },
32
+ "peerDependenciesMeta": {
33
+ "@ionic/angular": {
34
+ "optional": true
35
+ }
36
+ },
37
+ "sideEffects": [
38
+ "*.css",
39
+ "**/*.scss"
40
+ ],
41
+ "engines": {
42
+ "node": ">=20.0.0"
43
+ },
44
+ "module": "fesm2022/fuse_ui-skeleton.mjs",
45
+ "typings": "types/fuse_ui-skeleton.d.ts",
46
+ "exports": {
47
+ "./package.json": {
48
+ "default": "./package.json"
49
+ },
50
+ ".": {
51
+ "types": "./types/fuse_ui-skeleton.d.ts",
52
+ "default": "./fesm2022/fuse_ui-skeleton.mjs"
53
+ }
54
+ },
55
+ "type": "module",
56
+ "dependencies": {
57
+ "tslib": "^2.3.0"
58
+ }
59
+ }
@@ -0,0 +1,16 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare class FuseSkeletonComponent {
4
+ readonly variant: _angular_core.InputSignal<"text" | "circle" | "rect">;
5
+ readonly width: _angular_core.InputSignal<string>;
6
+ readonly height: _angular_core.InputSignal<string>;
7
+ readonly lines: _angular_core.InputSignal<number>;
8
+ get hostClasses(): string;
9
+ protected readonly lineArray: _angular_core.Signal<number[]>;
10
+ /** Width of the last line in a multi-line text block (shorter = more natural). */
11
+ lineWidth(index: number): string;
12
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FuseSkeletonComponent, never>;
13
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FuseSkeletonComponent, "fuse-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14
+ }
15
+
16
+ export { FuseSkeletonComponent };