ng-hub-ui-skeleton 22.2.2 → 22.2.4
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.
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Carlos Morcillo Fernández
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALING IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-hub-ui-skeleton.mjs","sources":["../../../projects/skeleton/src/lib/presets/hub-skeleton-default-presets.ts","../../../projects/skeleton/src/lib/services/hub-skeleton-preset-registry.service.ts","../../../projects/skeleton/src/lib/utils/hub-skeleton-dsl.ts","../../../projects/skeleton/src/lib/hub-skeleton.component.ts","../../../projects/skeleton/src/lib/hub-skeleton.module.ts","../../../projects/skeleton/src/public-api.ts","../../../projects/skeleton/src/ng-hub-ui-skeleton.ts"],"sourcesContent":["import { HubSkeletonPreset } from '../models/hub-skeleton.types';\n\n/**\n * Bundled preset catalogue used by the skeleton library.\n */\nexport const HUB_SKELETON_DEFAULT_PRESETS: readonly HubSkeletonPreset[] = [\n\t{\n\t\tname: 'card',\n\t\tdescription: 'Generic content card with media, title and body lines.',\n\t\ttemplate:\n\t\t\t'stack(gap:16)>block(height:{{mediaHeight}},radius:{{radius}})+line(height:{{titleHeight}},width:{{titleWidth}})+stack(gap:{{bodyGap}})>line(height:{{lineHeight}},width:100%)*{{rows}}+line(height:{{lineHeight}},width:{{lastLineWidth}})',\n\t\tdefaults: {\n\t\t\tmediaHeight: 180,\n\t\t\tradius: 18,\n\t\t\ttitleHeight: 18,\n\t\t\ttitleWidth: '56%',\n\t\t\tbodyGap: 10,\n\t\t\tlineHeight: 12,\n\t\t\trows: 2,\n\t\t\tlastLineWidth: '76%'\n\t\t},\n\t\tvariants: {\n\t\t\tcompact: {\n\t\t\t\tdefaults: {\n\t\t\t\t\tmediaHeight: 120,\n\t\t\t\t\tradius: 14,\n\t\t\t\t\ttitleHeight: 16,\n\t\t\t\t\tbodyGap: 8,\n\t\t\t\t\tlineHeight: 10,\n\t\t\t\t\trows: 1,\n\t\t\t\t\tlastLineWidth: '68%'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tname: 'list-item',\n\t\tdescription: 'Avatar row with title and subtitle lines.',\n\t\ttemplate:\n\t\t\t'stack(direction:row,gap:12,align:center)>circle(size:{{avatarSize}})+stack(gap:{{gap}},grow:1)>line(height:{{titleHeight}},width:{{titleWidth}})+line(height:{{lineHeight}},width:{{lineWidth}})',\n\t\tdefaults: {\n\t\t\tavatarSize: 44,\n\t\t\tgap: 8,\n\t\t\ttitleHeight: 14,\n\t\t\ttitleWidth: '42%',\n\t\t\tlineHeight: 10,\n\t\t\tlineWidth: '68%'\n\t\t},\n\t\tvariants: {\n\t\t\tcompact: {\n\t\t\t\tdefaults: {\n\t\t\t\t\tavatarSize: 36,\n\t\t\t\t\tgap: 6,\n\t\t\t\t\ttitleHeight: 12,\n\t\t\t\t\tlineHeight: 8\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tname: 'table-row',\n\t\tdescription: 'Grid row that adapts to the configured column count.',\n\t\ttemplate: 'grid(columns:{{columns}},gap:12|md=16)>line(height:{{lineHeight}},width:{{cellWidth}})*{{columns}}',\n\t\tdefaults: {\n\t\t\tcolumns: 4,\n\t\t\tlineHeight: 12,\n\t\t\tcellWidth: '88%'\n\t\t}\n\t},\n\t{\n\t\tname: 'detail-view',\n\t\tdescription: 'Two-column detail layout with hero block and metadata rows.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|lg=2,gap:20)>block(height:220|lg=280,radius:20)+stack(gap:14)>line(height:20,width:48%)+line(height:12,width:78%)+line(height:12,width:92%)+line(height:12,width:70%)+grid(columns:2,gap:12)>block(height:64)*4'\n\t},\n\t{\n\t\tname: 'form-section',\n\t\tdescription: 'Grouped form controls with header and responsive fields.',\n\t\ttemplate:\n\t\t\t'stack(gap:18)>line(height:18,width:32%)+grid(columns:1|md=2,gap:14)>stack(gap:8)>line(height:10,width:28%)+block(height:44,radius:12)*{{fields}}',\n\t\tdefaults: {\n\t\t\tfields: 4\n\t\t}\n\t},\n\t{\n\t\tname: 'dashboard-widget',\n\t\tdescription: 'Panel header with metric rows and footer actions.',\n\t\ttemplate:\n\t\t\t'stack(gap:16)>stack(direction:row,gap:12,justify:space-between,align:center)>line(height:16,width:36%)+circle(size:20)+block(height:132,radius:18)+grid(columns:2,gap:12)>line(height:12,width:72%)*4'\n\t},\n\t{\n\t\tname: 'stat-card',\n\t\tdescription: 'Metric summary card with title, large value and trend.',\n\t\ttemplate:\n\t\t\t'stack(gap:14)>line(height:12,width:34%)+line(height:34,width:44%)+line(height:10,width:28%)+block(height:44,radius:14)'\n\t},\n\t{\n\t\tname: 'chart-panel',\n\t\tdescription: 'Chart block with legend rows.',\n\t\ttemplate:\n\t\t\t'stack(gap:16)>stack(direction:row,gap:12,justify:space-between,align:center)>line(height:16,width:40%)+line(height:10,width:18%)+block(height:220,radius:18)+grid(columns:2,gap:10)>stack(direction:row,gap:8,align:center)>circle(size:10)+line(height:10,width:60%)*4'\n\t},\n\t{\n\t\tname: 'profile-summary',\n\t\tdescription: 'Profile card with avatar, identity and summary metrics.',\n\t\ttemplate:\n\t\t\t'stack(gap:16,align:center)>circle(size:88)+line(height:18,width:46%)+line(height:12,width:62%)+grid(columns:3,gap:12)>block(height:56,radius:14)*3'\n\t},\n\t{\n\t\tname: 'master-detail',\n\t\tdescription: 'List panel and detail panel skeleton pair.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|lg=3,gap:20)>stack(gap:12)>list-item*4+stack(gap:16)>block(height:220,radius:18)+line(height:18,width:42%)+line(height:12,width:92%)*3+line(height:12,width:70%)'\n\t},\n\t{\n\t\tname: 'kanban-card',\n\t\tdescription: 'Compact board card with title, metadata and footer chips.',\n\t\ttemplate:\n\t\t\t'stack(gap:12)>line(height:14,width:58%)+line(height:10,width:80%)+stack(direction:row,gap:8)>block(height:24,width:76,radius:999)+block(height:24,width:92,radius:999)'\n\t},\n\t{\n\t\tname: 'feed-item',\n\t\tdescription: 'Activity feed row with avatar and content snippets.',\n\t\ttemplate:\n\t\t\t'stack(direction:row,gap:12,align:flex-start)>circle(size:40)+stack(gap:8,grow:1)>line(height:12,width:34%)+line(height:12,width:94%)+line(height:12,width:74%)'\n\t},\n\t{\n\t\tname: 'search-result',\n\t\tdescription: 'Search result card with title, metadata and excerpt.',\n\t\ttemplate:\n\t\t\t'stack(gap:12)>line(height:18,width:56%)+stack(direction:row,gap:10)>line(height:10,width:20%)+line(height:10,width:18%)+line(height:10,width:24%)+line(height:12,width:92%)*2+line(height:12,width:76%)'\n\t},\n\t{\n\t\tname: 'table-toolbar',\n\t\tdescription: 'Toolbar with title, filters and actions.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|md=2,gap:16,align:center)>line(height:18,width:38%)+stack(direction:row,gap:10,justify:flex-end)>block(height:38,width:180,radius:12)+block(height:38,width:110,radius:12)+block(height:38,width:92,radius:12)'\n\t},\n\t{\n\t\tname: 'filter-bar',\n\t\tdescription: 'Row of filter controls with mobile stacking.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|md=4,gap:12)>block(height:40,radius:12)*{{filters}}',\n\t\tdefaults: {\n\t\t\tfilters: 4\n\t\t}\n\t},\n\t{\n\t\tname: 'empty-state-skeleton',\n\t\tdescription: 'Illustrative empty-state placeholder with title and actions.',\n\t\ttemplate:\n\t\t\t'stack(gap:18,align:center)>block(height:160,width:240,radius:28)+line(height:18,width:36%)+line(height:12,width:64%)+line(height:12,width:52%)+stack(direction:row,gap:12)>block(height:40,width:120,radius:999)+block(height:40,width:84,radius:999)'\n\t}\n] as const;\n","import { EnvironmentProviders, Injectable, InjectionToken, computed, inject, makeEnvironmentProviders } from '@angular/core';\nimport { HUB_SKELETON_DEFAULT_PRESETS } from '../presets/hub-skeleton-default-presets';\nimport { HubSkeletonPreset } from '../models/hub-skeleton.types';\n\n/** Multi-provider token for consumer-defined skeleton preset groups. */\nexport const HUB_SKELETON_PRESETS = new InjectionToken<readonly (readonly HubSkeletonPreset[])[]>(\n\t'HUB_SKELETON_PRESETS',\n\t{\n\tfactory: () => []\n\t}\n);\n\n/**\n * Registers one or more custom presets for the active injector tree.\n *\n * @param presets Custom presets to append to the bundled catalogue.\n * @returns Environment providers ready for app-level registration.\n */\nexport function provideHubSkeletonPresets(presets: readonly HubSkeletonPreset[]): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_SKELETON_PRESETS,\n\t\t\tmulti: true,\n\t\t\tuseValue: presets\n\t\t}\n\t]);\n}\n\n/**\n * Resolves the full preset catalogue available to the current injector.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubSkeletonPresetRegistryService {\n\tprivate readonly customPresetGroups = inject(HUB_SKELETON_PRESETS);\n\n\t/** All presets merged by name, where later entries override earlier ones. */\n\treadonly presets = computed(() => {\n\t\tconst merged = new Map<string, HubSkeletonPreset>();\n\n\t\tfor (const preset of HUB_SKELETON_DEFAULT_PRESETS) {\n\t\t\tmerged.set(preset.name, preset);\n\t\t}\n\n\t\tfor (const presetGroup of this.customPresetGroups) {\n\t\t\tfor (const preset of presetGroup) {\n\t\t\t\tmerged.set(preset.name, preset);\n\t\t\t}\n\t\t}\n\n\t\treturn merged;\n\t});\n\n\t/**\n\t * Returns a single preset by name.\n\t *\n\t * @param name Preset identifier.\n\t * @returns Matching preset, when available.\n\t */\n\tgetPreset(name: string): HubSkeletonPreset | undefined {\n\t\treturn this.presets().get(name);\n\t}\n}\n","import {\n\tHubSkeletonAstNode,\n\tHubSkeletonBreakpoint,\n\tHubSkeletonParams,\n\tHubSkeletonPreset,\n\tHubSkeletonPrimitive,\n\tHubSkeletonRenderNode,\n\tHubSkeletonResponsiveValue,\n\tHubSkeletonTemplateDefinition,\n\tHubSkeletonTemplateInput\n} from '../models/hub-skeleton.types';\n\nconst BUILTIN_NODE_TYPES = new Set(['line', 'block', 'circle', 'stack', 'grid']);\nconst BREAKPOINT_ORDER: readonly HubSkeletonBreakpoint[] = ['base', 'sm', 'md', 'lg', 'xl'];\nconst BREAKPOINT_WIDTHS: Record<Exclude<HubSkeletonBreakpoint, 'base'>, number> = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1280\n};\n\n/**\n * Lightweight DSL parser for the compact skeleton syntax.\n */\nclass HubSkeletonDslParser {\n\tprivate index = 0;\n\n\tconstructor(private readonly source: string) {}\n\n\t/**\n\t * Parses the full source string into sibling root nodes.\n\t *\n\t * @returns Root nodes declared in the DSL.\n\t */\n\tparse(): readonly HubSkeletonAstNode[] {\n\t\tconst nodes = this.parseSiblings();\n\t\tthis.skipWhitespace();\n\n\t\tif (this.index < this.source.length) {\n\t\t\tthrow new Error(`Unexpected token \"${this.source[this.index]}\" at position ${this.index}.`);\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\tprivate parseSiblings(): HubSkeletonAstNode[] {\n\t\tconst nodes = [this.parseNode()];\n\n\t\twhile (true) {\n\t\t\tthis.skipWhitespace();\n\t\t\tif (this.peek() !== '+') {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.index += 1;\n\t\t\tnodes.push(this.parseNode());\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\tprivate parseNode(): HubSkeletonAstNode {\n\t\tthis.skipWhitespace();\n\t\tconst name = this.readIdentifier();\n\t\tlet variant: string | undefined;\n\n\t\tif (this.peek() === '@') {\n\t\t\tthis.index += 1;\n\t\t\tvariant = this.readIdentifier();\n\t\t}\n\n\t\tconst props = this.peek() === '(' ? this.readProps() : {};\n\t\tlet children: readonly HubSkeletonAstNode[] = [];\n\n\t\tthis.skipWhitespace();\n\t\tif (this.peek() === '>') {\n\t\t\tthis.index += 1;\n\t\t\tchildren = this.parseSiblings();\n\t\t}\n\n\t\tthis.skipWhitespace();\n\t\tlet repeat = 1;\n\t\tif (this.peek() === '*') {\n\t\t\tthis.index += 1;\n\t\t\tconst rawRepeat = this.readUntilDelimiter(['+', '>', ')']).trim();\n\t\t\trepeat = Number.parseInt(rawRepeat, 10);\n\t\t\tif (!Number.isFinite(repeat) || repeat < 1) {\n\t\t\t\tthrow new Error(`Invalid repeat value \"${rawRepeat}\" near position ${this.index}.`);\n\t\t\t}\n\t\t}\n\n\t\treturn { name, props, variant, children, repeat };\n\t}\n\n\tprivate readProps(): Record<string, string> {\n\t\tconst props: Record<string, string> = {};\n\t\tthis.expect('(');\n\t\tlet chunk = '';\n\t\tlet depth = 1;\n\n\t\twhile (this.index < this.source.length && depth > 0) {\n\t\t\tconst char = this.source[this.index++];\n\t\t\tif (char === '(') {\n\t\t\t\tdepth += 1;\n\t\t\t\tchunk += char;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === ')') {\n\t\t\t\tdepth -= 1;\n\t\t\t\tif (depth === 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tchunk += char;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchunk += char;\n\t\t}\n\n\t\tif (depth !== 0) {\n\t\t\tthrow new Error('Unclosed modifier block in skeleton DSL.');\n\t\t}\n\n\t\tfor (const entry of this.splitTopLevel(chunk, ',')) {\n\t\t\tconst trimmedEntry = entry.trim();\n\t\t\tif (!trimmedEntry) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst [rawKey, ...rawValueParts] = trimmedEntry.split(':');\n\t\t\tif (!rawKey) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tprops[rawKey.trim()] = rawValueParts.length > 0 ? rawValueParts.join(':').trim() : 'true';\n\t\t}\n\n\t\treturn props;\n\t}\n\n\tprivate splitTopLevel(value: string, separator: string): string[] {\n\t\tconst parts: string[] = [];\n\t\tlet current = '';\n\t\tlet depth = 0;\n\n\t\tfor (const char of value) {\n\t\t\tif (char === '(') {\n\t\t\t\tdepth += 1;\n\t\t\t} else if (char === ')') {\n\t\t\t\tdepth -= 1;\n\t\t\t}\n\n\t\t\tif (char === separator && depth === 0) {\n\t\t\t\tparts.push(current);\n\t\t\t\tcurrent = '';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcurrent += char;\n\t\t}\n\n\t\tif (current) {\n\t\t\tparts.push(current);\n\t\t}\n\n\t\treturn parts;\n\t}\n\n\tprivate readIdentifier(): string {\n\t\tthis.skipWhitespace();\n\t\tconst start = this.index;\n\t\twhile (this.index < this.source.length && /[a-zA-Z0-9-]/.test(this.source[this.index])) {\n\t\t\tthis.index += 1;\n\t\t}\n\n\t\tif (start === this.index) {\n\t\t\tthrow new Error(`Expected identifier near position ${this.index}.`);\n\t\t}\n\n\t\treturn this.source.slice(start, this.index);\n\t}\n\n\tprivate readUntilDelimiter(delimiters: readonly string[]): string {\n\t\tconst start = this.index;\n\t\twhile (this.index < this.source.length && !delimiters.includes(this.source[this.index])) {\n\t\t\tthis.index += 1;\n\t\t}\n\t\treturn this.source.slice(start, this.index);\n\t}\n\n\tprivate expect(char: string): void {\n\t\tthis.skipWhitespace();\n\t\tif (this.peek() !== char) {\n\t\t\tthrow new Error(`Expected \"${char}\" near position ${this.index}.`);\n\t\t}\n\t\tthis.index += 1;\n\t}\n\n\tprivate skipWhitespace(): void {\n\t\twhile (this.index < this.source.length && /\\s/.test(this.source[this.index])) {\n\t\t\tthis.index += 1;\n\t\t}\n\t}\n\n\tprivate peek(): string | undefined {\n\t\treturn this.source[this.index];\n\t}\n}\n\n/**\n * Parses a DSL string into a raw AST.\n *\n * @param dsl Source template string.\n * @returns Parsed root nodes.\n */\nexport function parseHubSkeletonDsl(dsl: string): readonly HubSkeletonAstNode[] {\n\treturn new HubSkeletonDslParser(dsl).parse();\n}\n\n/**\n * Interpolates `{{param}}` placeholders using a serializable params map.\n *\n * @param source Source DSL or modifier value.\n * @param params Runtime params.\n * @returns Interpolated string.\n */\nexport function interpolateHubSkeletonParams(source: string, params: HubSkeletonParams): string {\n\treturn source.replace(/\\{\\{\\s*([a-zA-Z0-9_-]+)\\s*\\}\\}/g, (_, key: string) => String(params[key] ?? ''));\n}\n\n/**\n * Resolves the concrete DSL string to use for the current breakpoint.\n *\n * @param template Source template definition.\n * @param breakpoint Current active breakpoint.\n * @returns DSL string to parse.\n */\nexport function resolveTemplateDsl(\n\ttemplate: HubSkeletonTemplateInput,\n\tbreakpoint: HubSkeletonBreakpoint\n): string {\n\tif (typeof template === 'string') {\n\t\treturn template;\n\t}\n\n\tif (breakpoint !== 'base' && template.responsive?.[breakpoint]) {\n\t\treturn template.responsive[breakpoint]!;\n\t}\n\n\treturn template.dsl;\n}\n\n/**\n * Resolves a primitive or responsive value token to a string for the active breakpoint.\n *\n * @param value Raw modifier value.\n * @param breakpoint Current breakpoint.\n * @returns Breakpoint-resolved string.\n */\nexport function resolveResponsiveToken(value: string, breakpoint: HubSkeletonBreakpoint): string {\n\tconst parsed = parseResponsiveToken(value);\n\tif (typeof parsed !== 'object' || parsed === null) {\n\t\treturn String(parsed);\n\t}\n\n\tlet resolved: HubSkeletonPrimitive | undefined = parsed.base;\n\tfor (const key of BREAKPOINT_ORDER) {\n\t\tif (key === 'base') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (BREAKPOINT_ORDER.indexOf(key) <= BREAKPOINT_ORDER.indexOf(breakpoint) && parsed[key] !== undefined) {\n\t\t\tresolved = parsed[key];\n\t\t}\n\t}\n\n\treturn String(resolved ?? '');\n}\n\n/**\n * Maps the current viewport width to the nearest supported breakpoint id.\n *\n * @param width Viewport width in pixels.\n * @returns Breakpoint identifier.\n */\nexport function resolveBreakpointFromWidth(width: number): HubSkeletonBreakpoint {\n\tif (width >= BREAKPOINT_WIDTHS.xl) {\n\t\treturn 'xl';\n\t}\n\tif (width >= BREAKPOINT_WIDTHS.lg) {\n\t\treturn 'lg';\n\t}\n\tif (width >= BREAKPOINT_WIDTHS.md) {\n\t\treturn 'md';\n\t}\n\tif (width >= BREAKPOINT_WIDTHS.sm) {\n\t\treturn 'sm';\n\t}\n\treturn 'base';\n}\n\n/**\n * Resolves an AST into render nodes, expanding preset aliases recursively.\n *\n * @param nodes AST nodes to resolve.\n * @param options Resolution context.\n * @returns Render nodes ready for the component template.\n */\nexport function resolveHubSkeletonNodes(\n\tnodes: readonly HubSkeletonAstNode[],\n\toptions: {\n\t\treadonly breakpoint: HubSkeletonBreakpoint;\n\t\treadonly params: HubSkeletonParams;\n\t\treadonly registry: { getPreset(name: string): HubSkeletonPreset | undefined };\n\t\treadonly fallbackVariant?: string;\n\t}\n): readonly HubSkeletonRenderNode[] {\n\tconst counter = { value: 0 };\n\n\tconst resolveNode = (\n\t\tnode: HubSkeletonAstNode,\n\t\tinheritedParams: HubSkeletonParams,\n\t\tinheritedVariant?: string\n\t): HubSkeletonRenderNode[] => {\n\t\tconst runtimeVariant = node.variant ?? inheritedVariant;\n\t\tconst runtimeParams = {\n\t\t\t...inheritedParams,\n\t\t\t...convertNodePropsToParams(node.props, options.breakpoint)\n\t\t};\n\n\t\tif (BUILTIN_NODE_TYPES.has(node.name)) {\n\t\t\tconst props = resolveProps(node.props, options.breakpoint);\n\t\t\tconst builtNode: HubSkeletonRenderNode = {\n\t\t\t\tid: `hub-skeleton-node-${counter.value++}`,\n\t\t\t\ttype: node.name as HubSkeletonRenderNode['type'],\n\t\t\t\tprops,\n\t\t\t\tchildren: resolveNodes(node.children, runtimeParams, runtimeVariant),\n\t\t\t\tisSurface: node.name === 'line' || node.name === 'block' || node.name === 'circle'\n\t\t\t};\n\n\t\t\treturn Array.from({ length: node.repeat }, () => builtNode).map((entry, index) => ({\n\t\t\t\t...entry,\n\t\t\t\tid: `${entry.id}-${index}`\n\t\t\t}));\n\t\t}\n\n\t\tconst preset = options.registry.getPreset(node.name);\n\t\tif (!preset) {\n\t\t\tthrow new Error(`Unknown skeleton node or preset alias \"${node.name}\".`);\n\t\t}\n\n\t\tconst activeVariant = runtimeVariant ?? options.fallbackVariant;\n\t\tconst variantDef = activeVariant ? preset.variants?.[activeVariant] : undefined;\n\t\tconst presetParams = {\n\t\t\t...preset.defaults,\n\t\t\t...variantDef?.defaults,\n\t\t\t...runtimeParams\n\t\t};\n\t\tconst presetTemplate = variantDef?.template ?? preset.template;\n\t\tconst presetDsl = interpolateHubSkeletonParams(\n\t\t\tresolveTemplateDsl(presetTemplate, options.breakpoint),\n\t\t\tpresetParams\n\t\t);\n\t\tconst presetAst = parseHubSkeletonDsl(presetDsl);\n\t\tconst resolvedPresetNodes = resolveNodes(presetAst, presetParams, activeVariant);\n\n\t\treturn Array.from({ length: node.repeat }, () => resolvedPresetNodes).flat();\n\t};\n\n\tconst resolveNodes = (\n\t\tinputNodes: readonly HubSkeletonAstNode[],\n\t\tparams: HubSkeletonParams,\n\t\tvariant?: string\n\t): HubSkeletonRenderNode[] => inputNodes.flatMap((node) => resolveNode(node, params, variant));\n\n\treturn resolveNodes(nodes, options.params, options.fallbackVariant);\n}\n\nfunction resolveProps(\n\tprops: Readonly<Record<string, string>>,\n\tbreakpoint: HubSkeletonBreakpoint\n): Record<string, string> {\n\treturn Object.fromEntries(\n\t\tObject.entries(props).map(([key, value]) => [key, resolveResponsiveToken(value, breakpoint)])\n\t);\n}\n\nfunction convertNodePropsToParams(\n\tprops: Readonly<Record<string, string>>,\n\tbreakpoint: HubSkeletonBreakpoint\n): HubSkeletonParams {\n\tconst entries = Object.entries(props).map(([key, value]) => {\n\t\tconst resolvedValue = resolveResponsiveToken(value, breakpoint);\n\t\treturn [key, parsePrimitiveToken(resolvedValue)];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n\nfunction parseResponsiveToken(value: string): HubSkeletonResponsiveValue {\n\tif (!value.includes('|')) {\n\t\treturn parsePrimitiveToken(value);\n\t}\n\n\tconst responsive: Partial<Record<HubSkeletonBreakpoint, HubSkeletonPrimitive>> = {};\n\tfor (const part of value.split('|')) {\n\t\tconst trimmedPart = part.trim();\n\t\tif (!trimmedPart) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!trimmedPart.includes('=')) {\n\t\t\tresponsive.base = parsePrimitiveToken(trimmedPart);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [breakpoint, rawToken] = trimmedPart.split('=');\n\t\tconst normalizedBreakpoint = breakpoint.trim();\n\t\tif (isBreakpoint(normalizedBreakpoint)) {\n\t\t\tresponsive[normalizedBreakpoint] = parsePrimitiveToken(rawToken.trim());\n\t\t}\n\t}\n\n\treturn responsive;\n}\n\nfunction isBreakpoint(value: string): value is HubSkeletonBreakpoint {\n\treturn BREAKPOINT_ORDER.includes(value as HubSkeletonBreakpoint);\n}\n\nfunction parsePrimitiveToken(value: string): HubSkeletonPrimitive {\n\tconst trimmedValue = value.trim();\n\tif (trimmedValue === 'true') {\n\t\treturn true;\n\t}\n\tif (trimmedValue === 'false') {\n\t\treturn false;\n\t}\n\tif (/^-?\\d+(\\.\\d+)?$/.test(trimmedValue)) {\n\t\treturn Number(trimmedValue);\n\t}\n\treturn trimmedValue;\n}\n","import { DOCUMENT, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tOnDestroy,\n\tOnInit,\n\tPLATFORM_ID,\n\tcomputed,\n\tinject,\n\tinput,\n\tsignal\n} from '@angular/core';\nimport {\n\tHubSkeletonAppearance,\n\tHubSkeletonParams,\n\tHubSkeletonRenderNode,\n\tHubSkeletonTemplateInput\n} from './models/hub-skeleton.types';\nimport { HubSkeletonPresetRegistryService } from './services/hub-skeleton-preset-registry.service';\nimport {\n\tinterpolateHubSkeletonParams,\n\tparseHubSkeletonDsl,\n\tresolveBreakpointFromWidth,\n\tresolveHubSkeletonNodes,\n\tresolveTemplateDsl\n} from './utils/hub-skeleton-dsl';\n\n/**\n * Dynamic skeleton component that renders bundled presets or compact inline DSL templates.\n */\n@Component({\n\tselector: 'hub-skeleton',\n\tstandalone: true,\n\timports: [NgTemplateOutlet],\n\tproviders: [HubSkeletonPresetRegistryService],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-skeleton\"\n\t\t\t[class.hub-skeleton--animated]=\"animated()\"\n\t\t\t[class.hub-skeleton--subtle]=\"appearance() === 'subtle'\"\n\t\t\t[class.hub-skeleton--contrast]=\"appearance() === 'contrast'\"\n\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\trole=\"presentation\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"renderNodes; context: { $implicit: resolvedNodes() }\"></ng-container>\n\t\t</div>\n\n\t\t<ng-template #renderNodes let-nodes>\n\t\t\t@for (node of nodes; track node.id) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-skeleton__node\"\n\t\t\t\t\t[class.hub-skeleton__node--surface]=\"node.isSurface\"\n\t\t\t\t\t[class.hub-skeleton__node--line]=\"node.type === 'line'\"\n\t\t\t\t\t[class.hub-skeleton__node--block]=\"node.type === 'block'\"\n\t\t\t\t\t[class.hub-skeleton__node--circle]=\"node.type === 'circle'\"\n\t\t\t\t\t[class.hub-skeleton__node--stack]=\"node.type === 'stack'\"\n\t\t\t\t\t[class.hub-skeleton__node--grid]=\"node.type === 'grid'\"\n\t\t\t\t\t[class.hub-skeleton__node--row]=\"node.type === 'stack' && node.props['direction'] === 'row'\"\n\t\t\t\t\t[class.hub-skeleton__node--grow]=\"node.props['grow'] === 'true'\"\n\t\t\t\t\t[style]=\"buildStyles(node)\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t@if (node.children.length > 0) {\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"renderNodes; context: { $implicit: node.children }\"></ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</ng-template>\n\t`,\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.hub-skeleton {\n\t\t\t\t--hub-skeleton-bg: rgba(148, 163, 184, 0.18);\n\t\t\t\t--hub-skeleton-highlight: rgba(255, 255, 255, 0.52);\n\t\t\t\t--hub-skeleton-radius: 12px;\n\t\t\t\t--hub-skeleton-gap: 12px;\n\t\t\t\t--hub-skeleton-animation-duration: 1.35s;\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.hub-skeleton--subtle {\n\t\t\t\t--hub-skeleton-bg: rgba(148, 163, 184, 0.12);\n\t\t\t\t--hub-skeleton-highlight: rgba(255, 255, 255, 0.38);\n\t\t\t}\n\n\t\t\t.hub-skeleton--contrast {\n\t\t\t\t--hub-skeleton-bg: rgba(71, 85, 105, 0.28);\n\t\t\t\t--hub-skeleton-highlight: rgba(255, 255, 255, 0.28);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--surface {\n\t\t\t\tbackground: linear-gradient(\n\t\t\t\t\t90deg,\n\t\t\t\t\tvar(--hub-skeleton-bg) 0%,\n\t\t\t\t\tvar(--hub-skeleton-bg) 32%,\n\t\t\t\t\tvar(--hub-skeleton-highlight) 50%,\n\t\t\t\t\tvar(--hub-skeleton-bg) 68%,\n\t\t\t\t\tvar(--hub-skeleton-bg) 100%\n\t\t\t\t);\n\t\t\t\tbackground-size: 220% 100%;\n\t\t\t\tborder-radius: var(--hub-skeleton-node-radius, var(--hub-skeleton-radius));\n\t\t\t}\n\n\t\t\t.hub-skeleton--animated .hub-skeleton__node--surface {\n\t\t\t\tanimation: hub-skeleton-shimmer var(--hub-skeleton-animation-duration) ease-in-out infinite;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--line,\n\t\t\t.hub-skeleton__node--block,\n\t\t\t.hub-skeleton__node--circle {\n\t\t\t\twidth: var(--hub-skeleton-node-width, 100%);\n\t\t\t\theight: var(--hub-skeleton-node-height, 12px);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--circle {\n\t\t\t\twidth: var(--hub-skeleton-node-size, var(--hub-skeleton-node-width, 40px));\n\t\t\t\theight: var(--hub-skeleton-node-size, var(--hub-skeleton-node-height, 40px));\n\t\t\t\tborder-radius: 999px;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--stack {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: var(--hub-skeleton-node-gap, var(--hub-skeleton-gap));\n\t\t\t\talign-items: var(--hub-skeleton-node-align, stretch);\n\t\t\t\tjustify-content: var(--hub-skeleton-node-justify, flex-start);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--row {\n\t\t\t\tflex-direction: row;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--grid {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: repeat(var(--hub-skeleton-node-columns, 2), minmax(0, 1fr));\n\t\t\t\tgap: var(--hub-skeleton-node-gap, var(--hub-skeleton-gap));\n\t\t\t\talign-items: var(--hub-skeleton-node-align, stretch);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--grow {\n\t\t\t\tflex: 1 1 auto;\n\t\t\t}\n\n\t\t\t@keyframes hub-skeleton-shimmer {\n\t\t\t\tfrom {\n\t\t\t\t\tbackground-position: 100% 0;\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\tbackground-position: -100% 0;\n\t\t\t\t}\n\t\t\t}\n\t\t`\n\t]\n})\nexport class HubSkeletonComponent implements OnInit, OnDestroy {\n\t/** Built-in or registered preset name. */\n\treadonly preset = input<string | null>(null);\n\n\t/** Inline compact DSL template or template definition object. */\n\treadonly template = input<HubSkeletonTemplateInput | null>(null);\n\n\t/** Serializable params interpolated before parsing. */\n\treadonly params = input<HubSkeletonParams>({});\n\n\t/** Optional named variant. */\n\treadonly variant = input<string | null>(null);\n\n\t/** Toggles shimmer animation. */\n\treadonly animated = input(true);\n\n\t/** Visual appearance preset. */\n\treadonly appearance = input<HubSkeletonAppearance>('default');\n\n\t/** Optional accessible label applied to the container. */\n\treadonly ariaLabel = input('Loading placeholder');\n\n\tprivate readonly document = inject(DOCUMENT);\n\tprivate readonly platformId = inject(PLATFORM_ID);\n\tprivate readonly registry = inject(HubSkeletonPresetRegistryService);\n\n\tprivate resizeCleanup: (() => void) | null = null;\n\tprivate readonly viewportWidth = signal(1200);\n\treadonly activeBreakpoint = computed(() => resolveBreakpointFromWidth(this.viewportWidth()));\n\n\t/** Resolved render nodes after preset expansion and breakpoint evaluation. */\n\treadonly resolvedNodes = computed<readonly HubSkeletonRenderNode[]>(() => {\n\t\tconst { template, params, variant } = this.resolveRuntimeTemplate();\n\t\tconst dsl = interpolateHubSkeletonParams(\n\t\t\tresolveTemplateDsl(template, this.activeBreakpoint()),\n\t\t\tparams\n\t\t);\n\t\tconst ast = parseHubSkeletonDsl(dsl);\n\n\t\treturn resolveHubSkeletonNodes(ast, {\n\t\t\tbreakpoint: this.activeBreakpoint(),\n\t\t\tparams,\n\t\t\tregistry: this.registry,\n\t\t\tfallbackVariant: variant ?? undefined\n\t\t});\n\t});\n\n\tngOnInit(): void {\n\t\tif (!isPlatformBrowser(this.platformId) || !this.document.defaultView) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = this.document.defaultView;\n\t\tthis.viewportWidth.set(win.innerWidth);\n\n\t\tconst listener = () => this.viewportWidth.set(win.innerWidth);\n\t\twin.addEventListener('resize', listener, { passive: true });\n\t\tthis.resizeCleanup = () => win.removeEventListener('resize', listener);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.resizeCleanup?.();\n\t}\n\n\t/**\n\t * Converts node props into CSS custom properties consumed by the template.\n\t *\n\t * @param node Render node.\n\t * @returns Style object.\n\t */\n\tbuildStyles(node: HubSkeletonRenderNode): Record<string, string | null> {\n\t\tconst props = node.props;\n\t\treturn {\n\t\t\t'--hub-skeleton-node-width': props['width'] ?? null,\n\t\t\t'--hub-skeleton-node-height': this.toCssSize(props['height']),\n\t\t\t'--hub-skeleton-node-size': this.toCssSize(props['size']),\n\t\t\t'--hub-skeleton-node-radius': this.toCssSize(props['radius']),\n\t\t\t'--hub-skeleton-node-gap': this.toCssSize(props['gap']),\n\t\t\t'--hub-skeleton-node-columns': props['columns'] ?? null,\n\t\t\t'--hub-skeleton-node-align': props['align'] ?? null,\n\t\t\t'--hub-skeleton-node-justify': props['justify'] ?? null\n\t\t};\n\t}\n\n\tprivate resolveRuntimeTemplate(): {\n\t\treadonly template: HubSkeletonTemplateInput;\n\t\treadonly params: HubSkeletonParams;\n\t\treadonly variant: string | null;\n\t} {\n\t\tconst presetName = this.preset();\n\t\tconst variantName = this.variant();\n\t\tconst inlineTemplate = this.template();\n\n\t\tif (presetName) {\n\t\t\tconst preset = this.registry.getPreset(presetName);\n\t\t\tif (!preset) {\n\t\t\t\tthrow new Error(`Unknown skeleton preset \"${presetName}\".`);\n\t\t\t}\n\n\t\t\tconst activeVariant = variantName ? preset.variants?.[variantName] : undefined;\n\t\t\treturn {\n\t\t\t\ttemplate: activeVariant?.template ?? preset.template,\n\t\t\t\tparams: {\n\t\t\t\t\t...preset.defaults,\n\t\t\t\t\t...activeVariant?.defaults,\n\t\t\t\t\t...this.params()\n\t\t\t\t},\n\t\t\t\tvariant: variantName\n\t\t\t};\n\t\t}\n\n\t\tif (!inlineTemplate) {\n\t\t\tthrow new Error('hub-skeleton requires either `preset` or `template`.');\n\t\t}\n\n\t\treturn {\n\t\t\ttemplate: inlineTemplate,\n\t\t\tparams: this.params(),\n\t\t\tvariant: variantName\n\t\t};\n\t}\n\n\tprivate toCssSize(value: string | undefined): string | null {\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (/^-?\\d+(\\.\\d+)?$/.test(value)) {\n\t\t\treturn `${value}px`;\n\t\t}\n\n\t\treturn value;\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { HubSkeletonComponent } from './hub-skeleton.component';\n\n/**\n * NgModule wrapper kept for compatibility with module-based Angular apps.\n */\n@NgModule({\n\timports: [HubSkeletonComponent],\n\texports: [HubSkeletonComponent]\n})\nexport class HubSkeletonModule {}\n","/*\n * Public API Surface of skeleton\n */\n\nexport * from './lib/hub-skeleton.component';\nexport * from './lib/hub-skeleton.module';\nexport * from './lib/models/hub-skeleton.types';\nexport * from './lib/presets/hub-skeleton-default-presets';\nexport * from './lib/services/hub-skeleton-preset-registry.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-hub-ui-skeleton.mjs","sources":["../../../projects/skeleton/src/lib/presets/hub-skeleton-default-presets.ts","../../../projects/skeleton/src/lib/services/hub-skeleton-preset-registry.service.ts","../../../projects/skeleton/src/lib/utils/hub-skeleton-dsl.ts","../../../projects/skeleton/src/lib/hub-skeleton.component.ts","../../../projects/skeleton/src/lib/hub-skeleton.module.ts","../../../projects/skeleton/src/public-api.ts","../../../projects/skeleton/src/ng-hub-ui-skeleton.ts"],"sourcesContent":["import { HubSkeletonPreset } from '../models/hub-skeleton.types';\n\n/**\n * Bundled preset catalogue used by the skeleton library.\n */\nexport const HUB_SKELETON_DEFAULT_PRESETS: readonly HubSkeletonPreset[] = [\n\t{\n\t\tname: 'card',\n\t\tdescription: 'Generic content card with media, title and body lines.',\n\t\ttemplate:\n\t\t\t'stack(gap:16)>block(height:{{mediaHeight}},radius:{{radius}})+line(height:{{titleHeight}},width:{{titleWidth}})+stack(gap:{{bodyGap}})>line(height:{{lineHeight}},width:100%)*{{rows}}+line(height:{{lineHeight}},width:{{lastLineWidth}})',\n\t\tdefaults: {\n\t\t\tmediaHeight: 180,\n\t\t\tradius: 18,\n\t\t\ttitleHeight: 18,\n\t\t\ttitleWidth: '56%',\n\t\t\tbodyGap: 10,\n\t\t\tlineHeight: 12,\n\t\t\trows: 2,\n\t\t\tlastLineWidth: '76%'\n\t\t},\n\t\tvariants: {\n\t\t\tcompact: {\n\t\t\t\tdefaults: {\n\t\t\t\t\tmediaHeight: 120,\n\t\t\t\t\tradius: 14,\n\t\t\t\t\ttitleHeight: 16,\n\t\t\t\t\tbodyGap: 8,\n\t\t\t\t\tlineHeight: 10,\n\t\t\t\t\trows: 1,\n\t\t\t\t\tlastLineWidth: '68%'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tname: 'list-item',\n\t\tdescription: 'Avatar row with title and subtitle lines.',\n\t\ttemplate:\n\t\t\t'stack(direction:row,gap:12,align:center)>circle(size:{{avatarSize}})+stack(gap:{{gap}},grow:1)>line(height:{{titleHeight}},width:{{titleWidth}})+line(height:{{lineHeight}},width:{{lineWidth}})',\n\t\tdefaults: {\n\t\t\tavatarSize: 44,\n\t\t\tgap: 8,\n\t\t\ttitleHeight: 14,\n\t\t\ttitleWidth: '42%',\n\t\t\tlineHeight: 10,\n\t\t\tlineWidth: '68%'\n\t\t},\n\t\tvariants: {\n\t\t\tcompact: {\n\t\t\t\tdefaults: {\n\t\t\t\t\tavatarSize: 36,\n\t\t\t\t\tgap: 6,\n\t\t\t\t\ttitleHeight: 12,\n\t\t\t\t\tlineHeight: 8\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t{\n\t\tname: 'table-row',\n\t\tdescription: 'Grid row that adapts to the configured column count.',\n\t\ttemplate: 'grid(columns:{{columns}},gap:12|md=16)>line(height:{{lineHeight}},width:{{cellWidth}})*{{columns}}',\n\t\tdefaults: {\n\t\t\tcolumns: 4,\n\t\t\tlineHeight: 12,\n\t\t\tcellWidth: '88%'\n\t\t}\n\t},\n\t{\n\t\tname: 'detail-view',\n\t\tdescription: 'Two-column detail layout with hero block and metadata rows.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|lg=2,gap:20)>block(height:220|lg=280,radius:20)+stack(gap:14)>line(height:20,width:48%)+line(height:12,width:78%)+line(height:12,width:92%)+line(height:12,width:70%)+grid(columns:2,gap:12)>block(height:64)*4'\n\t},\n\t{\n\t\tname: 'form-section',\n\t\tdescription: 'Grouped form controls with header and responsive fields.',\n\t\ttemplate:\n\t\t\t'stack(gap:18)>line(height:18,width:32%)+grid(columns:1|md=2,gap:14)>stack(gap:8)>line(height:10,width:28%)+block(height:44,radius:12)*{{fields}}',\n\t\tdefaults: {\n\t\t\tfields: 4\n\t\t}\n\t},\n\t{\n\t\tname: 'dashboard-widget',\n\t\tdescription: 'Panel header with metric rows and footer actions.',\n\t\ttemplate:\n\t\t\t'stack(gap:16)>stack(direction:row,gap:12,justify:space-between,align:center)>line(height:16,width:36%)+circle(size:20)+block(height:132,radius:18)+grid(columns:2,gap:12)>line(height:12,width:72%)*4'\n\t},\n\t{\n\t\tname: 'stat-card',\n\t\tdescription: 'Metric summary card with title, large value and trend.',\n\t\ttemplate:\n\t\t\t'stack(gap:14)>line(height:12,width:34%)+line(height:34,width:44%)+line(height:10,width:28%)+block(height:44,radius:14)'\n\t},\n\t{\n\t\tname: 'chart-panel',\n\t\tdescription: 'Chart block with legend rows.',\n\t\ttemplate:\n\t\t\t'stack(gap:16)>stack(direction:row,gap:12,justify:space-between,align:center)>line(height:16,width:40%)+line(height:10,width:18%)+block(height:220,radius:18)+grid(columns:2,gap:10)>stack(direction:row,gap:8,align:center)>circle(size:10)+line(height:10,width:60%)*4'\n\t},\n\t{\n\t\tname: 'profile-summary',\n\t\tdescription: 'Profile card with avatar, identity and summary metrics.',\n\t\ttemplate:\n\t\t\t'stack(gap:16,align:center)>circle(size:88)+line(height:18,width:46%)+line(height:12,width:62%)+grid(columns:3,gap:12)>block(height:56,radius:14)*3'\n\t},\n\t{\n\t\tname: 'master-detail',\n\t\tdescription: 'List panel and detail panel skeleton pair.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|lg=3,gap:20)>stack(gap:12)>list-item*4+stack(gap:16)>block(height:220,radius:18)+line(height:18,width:42%)+line(height:12,width:92%)*3+line(height:12,width:70%)'\n\t},\n\t{\n\t\tname: 'kanban-card',\n\t\tdescription: 'Compact board card with title, metadata and footer chips.',\n\t\ttemplate:\n\t\t\t'stack(gap:12)>line(height:14,width:58%)+line(height:10,width:80%)+stack(direction:row,gap:8)>block(height:24,width:76,radius:999)+block(height:24,width:92,radius:999)'\n\t},\n\t{\n\t\tname: 'feed-item',\n\t\tdescription: 'Activity feed row with avatar and content snippets.',\n\t\ttemplate:\n\t\t\t'stack(direction:row,gap:12,align:flex-start)>circle(size:40)+stack(gap:8,grow:1)>line(height:12,width:34%)+line(height:12,width:94%)+line(height:12,width:74%)'\n\t},\n\t{\n\t\tname: 'search-result',\n\t\tdescription: 'Search result card with title, metadata and excerpt.',\n\t\ttemplate:\n\t\t\t'stack(gap:12)>line(height:18,width:56%)+stack(direction:row,gap:10)>line(height:10,width:20%)+line(height:10,width:18%)+line(height:10,width:24%)+line(height:12,width:92%)*2+line(height:12,width:76%)'\n\t},\n\t{\n\t\tname: 'table-toolbar',\n\t\tdescription: 'Toolbar with title, filters and actions.',\n\t\ttemplate:\n\t\t\t'grid(columns:1|md=2,gap:16,align:center)>line(height:18,width:38%)+stack(direction:row,gap:10,justify:flex-end)>block(height:38,width:180,radius:12)+block(height:38,width:110,radius:12)+block(height:38,width:92,radius:12)'\n\t},\n\t{\n\t\tname: 'filter-bar',\n\t\tdescription: 'Row of filter controls with mobile stacking.',\n\t\ttemplate: 'grid(columns:1|md=4,gap:12)>block(height:40,radius:12)*{{filters}}',\n\t\tdefaults: {\n\t\t\tfilters: 4\n\t\t}\n\t},\n\t{\n\t\tname: 'empty-state-skeleton',\n\t\tdescription: 'Illustrative empty-state placeholder with title and actions.',\n\t\ttemplate:\n\t\t\t'stack(gap:18,align:center)>block(height:160,width:240,radius:28)+line(height:18,width:36%)+line(height:12,width:64%)+line(height:12,width:52%)+stack(direction:row,gap:12)>block(height:40,width:120,radius:999)+block(height:40,width:84,radius:999)'\n\t}\n] as const;\n","import { EnvironmentProviders, Injectable, InjectionToken, computed, inject, makeEnvironmentProviders } from '@angular/core';\nimport { HUB_SKELETON_DEFAULT_PRESETS } from '../presets/hub-skeleton-default-presets';\nimport { HubSkeletonPreset } from '../models/hub-skeleton.types';\n\n/** Multi-provider token for consumer-defined skeleton preset groups. */\nexport const HUB_SKELETON_PRESETS = new InjectionToken<readonly (readonly HubSkeletonPreset[])[]>('HUB_SKELETON_PRESETS', {\n\tfactory: () => []\n});\n\n/**\n * Registers one or more custom presets for the active injector tree.\n *\n * @param presets Custom presets to append to the bundled catalogue.\n * @returns Environment providers ready for app-level registration.\n */\nexport function provideHubSkeletonPresets(presets: readonly HubSkeletonPreset[]): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\t{\n\t\t\tprovide: HUB_SKELETON_PRESETS,\n\t\t\tmulti: true,\n\t\t\tuseValue: presets\n\t\t}\n\t]);\n}\n\n/**\n * Resolves the full preset catalogue available to the current injector.\n */\n@Injectable({ providedIn: 'root' })\nexport class HubSkeletonPresetRegistryService {\n\tprivate readonly customPresetGroups = inject(HUB_SKELETON_PRESETS);\n\n\t/** All presets merged by name, where later entries override earlier ones. */\n\treadonly presets = computed(() => {\n\t\tconst merged = new Map<string, HubSkeletonPreset>();\n\n\t\tfor (const preset of HUB_SKELETON_DEFAULT_PRESETS) {\n\t\t\tmerged.set(preset.name, preset);\n\t\t}\n\n\t\tfor (const presetGroup of this.customPresetGroups) {\n\t\t\tfor (const preset of presetGroup) {\n\t\t\t\tmerged.set(preset.name, preset);\n\t\t\t}\n\t\t}\n\n\t\treturn merged;\n\t});\n\n\t/**\n\t * Returns a single preset by name.\n\t *\n\t * @param name Preset identifier.\n\t * @returns Matching preset, when available.\n\t */\n\tgetPreset(name: string): HubSkeletonPreset | undefined {\n\t\treturn this.presets().get(name);\n\t}\n}\n","import {\n\tHubSkeletonAstNode,\n\tHubSkeletonBreakpoint,\n\tHubSkeletonParams,\n\tHubSkeletonPreset,\n\tHubSkeletonPrimitive,\n\tHubSkeletonRenderNode,\n\tHubSkeletonResponsiveValue,\n\tHubSkeletonTemplateDefinition,\n\tHubSkeletonTemplateInput\n} from '../models/hub-skeleton.types';\n\nconst BUILTIN_NODE_TYPES = new Set(['line', 'block', 'circle', 'stack', 'grid']);\nconst BREAKPOINT_ORDER: readonly HubSkeletonBreakpoint[] = ['base', 'sm', 'md', 'lg', 'xl'];\nconst BREAKPOINT_WIDTHS: Record<Exclude<HubSkeletonBreakpoint, 'base'>, number> = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1280\n};\n\n/**\n * Lightweight DSL parser for the compact skeleton syntax.\n */\nclass HubSkeletonDslParser {\n\tprivate index = 0;\n\n\tconstructor(private readonly source: string) {}\n\n\t/**\n\t * Parses the full source string into sibling root nodes.\n\t *\n\t * @returns Root nodes declared in the DSL.\n\t */\n\tparse(): readonly HubSkeletonAstNode[] {\n\t\tconst nodes = this.parseSiblings();\n\t\tthis.skipWhitespace();\n\n\t\tif (this.index < this.source.length) {\n\t\t\tthrow new Error(`Unexpected token \"${this.source[this.index]}\" at position ${this.index}.`);\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\tprivate parseSiblings(): HubSkeletonAstNode[] {\n\t\tconst nodes = [this.parseNode()];\n\n\t\twhile (true) {\n\t\t\tthis.skipWhitespace();\n\t\t\tif (this.peek() !== '+') {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.index += 1;\n\t\t\tnodes.push(this.parseNode());\n\t\t}\n\n\t\treturn nodes;\n\t}\n\n\tprivate parseNode(): HubSkeletonAstNode {\n\t\tthis.skipWhitespace();\n\t\tconst name = this.readIdentifier();\n\t\tlet variant: string | undefined;\n\n\t\tif (this.peek() === '@') {\n\t\t\tthis.index += 1;\n\t\t\tvariant = this.readIdentifier();\n\t\t}\n\n\t\tconst props = this.peek() === '(' ? this.readProps() : {};\n\t\tlet children: readonly HubSkeletonAstNode[] = [];\n\n\t\tthis.skipWhitespace();\n\t\tif (this.peek() === '>') {\n\t\t\tthis.index += 1;\n\t\t\tchildren = this.parseSiblings();\n\t\t}\n\n\t\tthis.skipWhitespace();\n\t\tlet repeat = 1;\n\t\tif (this.peek() === '*') {\n\t\t\tthis.index += 1;\n\t\t\tconst rawRepeat = this.readUntilDelimiter(['+', '>', ')']).trim();\n\t\t\trepeat = Number.parseInt(rawRepeat, 10);\n\t\t\tif (!Number.isFinite(repeat) || repeat < 1) {\n\t\t\t\tthrow new Error(`Invalid repeat value \"${rawRepeat}\" near position ${this.index}.`);\n\t\t\t}\n\t\t}\n\n\t\treturn { name, props, variant, children, repeat };\n\t}\n\n\tprivate readProps(): Record<string, string> {\n\t\tconst props: Record<string, string> = {};\n\t\tthis.expect('(');\n\t\tlet chunk = '';\n\t\tlet depth = 1;\n\n\t\twhile (this.index < this.source.length && depth > 0) {\n\t\t\tconst char = this.source[this.index++];\n\t\t\tif (char === '(') {\n\t\t\t\tdepth += 1;\n\t\t\t\tchunk += char;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (char === ')') {\n\t\t\t\tdepth -= 1;\n\t\t\t\tif (depth === 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tchunk += char;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tchunk += char;\n\t\t}\n\n\t\tif (depth !== 0) {\n\t\t\tthrow new Error('Unclosed modifier block in skeleton DSL.');\n\t\t}\n\n\t\tfor (const entry of this.splitTopLevel(chunk, ',')) {\n\t\t\tconst trimmedEntry = entry.trim();\n\t\t\tif (!trimmedEntry) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst [rawKey, ...rawValueParts] = trimmedEntry.split(':');\n\t\t\tif (!rawKey) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tprops[rawKey.trim()] = rawValueParts.length > 0 ? rawValueParts.join(':').trim() : 'true';\n\t\t}\n\n\t\treturn props;\n\t}\n\n\tprivate splitTopLevel(value: string, separator: string): string[] {\n\t\tconst parts: string[] = [];\n\t\tlet current = '';\n\t\tlet depth = 0;\n\n\t\tfor (const char of value) {\n\t\t\tif (char === '(') {\n\t\t\t\tdepth += 1;\n\t\t\t} else if (char === ')') {\n\t\t\t\tdepth -= 1;\n\t\t\t}\n\n\t\t\tif (char === separator && depth === 0) {\n\t\t\t\tparts.push(current);\n\t\t\t\tcurrent = '';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcurrent += char;\n\t\t}\n\n\t\tif (current) {\n\t\t\tparts.push(current);\n\t\t}\n\n\t\treturn parts;\n\t}\n\n\tprivate readIdentifier(): string {\n\t\tthis.skipWhitespace();\n\t\tconst start = this.index;\n\t\twhile (this.index < this.source.length && /[a-zA-Z0-9-]/.test(this.source[this.index])) {\n\t\t\tthis.index += 1;\n\t\t}\n\n\t\tif (start === this.index) {\n\t\t\tthrow new Error(`Expected identifier near position ${this.index}.`);\n\t\t}\n\n\t\treturn this.source.slice(start, this.index);\n\t}\n\n\tprivate readUntilDelimiter(delimiters: readonly string[]): string {\n\t\tconst start = this.index;\n\t\twhile (this.index < this.source.length && !delimiters.includes(this.source[this.index])) {\n\t\t\tthis.index += 1;\n\t\t}\n\t\treturn this.source.slice(start, this.index);\n\t}\n\n\tprivate expect(char: string): void {\n\t\tthis.skipWhitespace();\n\t\tif (this.peek() !== char) {\n\t\t\tthrow new Error(`Expected \"${char}\" near position ${this.index}.`);\n\t\t}\n\t\tthis.index += 1;\n\t}\n\n\tprivate skipWhitespace(): void {\n\t\twhile (this.index < this.source.length && /\\s/.test(this.source[this.index])) {\n\t\t\tthis.index += 1;\n\t\t}\n\t}\n\n\tprivate peek(): string | undefined {\n\t\treturn this.source[this.index];\n\t}\n}\n\n/**\n * Parses a DSL string into a raw AST.\n *\n * @param dsl Source template string.\n * @returns Parsed root nodes.\n */\nexport function parseHubSkeletonDsl(dsl: string): readonly HubSkeletonAstNode[] {\n\treturn new HubSkeletonDslParser(dsl).parse();\n}\n\n/**\n * Interpolates `{{param}}` placeholders using a serializable params map.\n *\n * @param source Source DSL or modifier value.\n * @param params Runtime params.\n * @returns Interpolated string.\n */\nexport function interpolateHubSkeletonParams(source: string, params: HubSkeletonParams): string {\n\treturn source.replace(/\\{\\{\\s*([a-zA-Z0-9_-]+)\\s*\\}\\}/g, (_, key: string) => String(params[key] ?? ''));\n}\n\n/**\n * Resolves the concrete DSL string to use for the current breakpoint.\n *\n * @param template Source template definition.\n * @param breakpoint Current active breakpoint.\n * @returns DSL string to parse.\n */\nexport function resolveTemplateDsl(template: HubSkeletonTemplateInput, breakpoint: HubSkeletonBreakpoint): string {\n\tif (typeof template === 'string') {\n\t\treturn template;\n\t}\n\n\tif (breakpoint !== 'base' && template.responsive?.[breakpoint]) {\n\t\treturn template.responsive[breakpoint]!;\n\t}\n\n\treturn template.dsl;\n}\n\n/**\n * Resolves a primitive or responsive value token to a string for the active breakpoint.\n *\n * @param value Raw modifier value.\n * @param breakpoint Current breakpoint.\n * @returns Breakpoint-resolved string.\n */\nexport function resolveResponsiveToken(value: string, breakpoint: HubSkeletonBreakpoint): string {\n\tconst parsed = parseResponsiveToken(value);\n\tif (typeof parsed !== 'object' || parsed === null) {\n\t\treturn String(parsed);\n\t}\n\n\tlet resolved: HubSkeletonPrimitive | undefined = parsed.base;\n\tfor (const key of BREAKPOINT_ORDER) {\n\t\tif (key === 'base') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (BREAKPOINT_ORDER.indexOf(key) <= BREAKPOINT_ORDER.indexOf(breakpoint) && parsed[key] !== undefined) {\n\t\t\tresolved = parsed[key];\n\t\t}\n\t}\n\n\treturn String(resolved ?? '');\n}\n\n/**\n * Maps the current viewport width to the nearest supported breakpoint id.\n *\n * @param width Viewport width in pixels.\n * @returns Breakpoint identifier.\n */\nexport function resolveBreakpointFromWidth(width: number): HubSkeletonBreakpoint {\n\tif (width >= BREAKPOINT_WIDTHS.xl) {\n\t\treturn 'xl';\n\t}\n\tif (width >= BREAKPOINT_WIDTHS.lg) {\n\t\treturn 'lg';\n\t}\n\tif (width >= BREAKPOINT_WIDTHS.md) {\n\t\treturn 'md';\n\t}\n\tif (width >= BREAKPOINT_WIDTHS.sm) {\n\t\treturn 'sm';\n\t}\n\treturn 'base';\n}\n\n/**\n * Resolves an AST into render nodes, expanding preset aliases recursively.\n *\n * @param nodes AST nodes to resolve.\n * @param options Resolution context.\n * @returns Render nodes ready for the component template.\n */\nexport function resolveHubSkeletonNodes(\n\tnodes: readonly HubSkeletonAstNode[],\n\toptions: {\n\t\treadonly breakpoint: HubSkeletonBreakpoint;\n\t\treadonly params: HubSkeletonParams;\n\t\treadonly registry: { getPreset(name: string): HubSkeletonPreset | undefined };\n\t\treadonly fallbackVariant?: string;\n\t}\n): readonly HubSkeletonRenderNode[] {\n\tconst counter = { value: 0 };\n\n\tconst resolveNode = (\n\t\tnode: HubSkeletonAstNode,\n\t\tinheritedParams: HubSkeletonParams,\n\t\tinheritedVariant?: string\n\t): HubSkeletonRenderNode[] => {\n\t\tconst runtimeVariant = node.variant ?? inheritedVariant;\n\t\tconst runtimeParams = {\n\t\t\t...inheritedParams,\n\t\t\t...convertNodePropsToParams(node.props, options.breakpoint)\n\t\t};\n\n\t\tif (BUILTIN_NODE_TYPES.has(node.name)) {\n\t\t\tconst props = resolveProps(node.props, options.breakpoint);\n\t\t\tconst builtNode: HubSkeletonRenderNode = {\n\t\t\t\tid: `hub-skeleton-node-${counter.value++}`,\n\t\t\t\ttype: node.name as HubSkeletonRenderNode['type'],\n\t\t\t\tprops,\n\t\t\t\tchildren: resolveNodes(node.children, runtimeParams, runtimeVariant),\n\t\t\t\tisSurface: node.name === 'line' || node.name === 'block' || node.name === 'circle'\n\t\t\t};\n\n\t\t\treturn Array.from({ length: node.repeat }, () => builtNode).map((entry, index) => ({\n\t\t\t\t...entry,\n\t\t\t\tid: `${entry.id}-${index}`\n\t\t\t}));\n\t\t}\n\n\t\tconst preset = options.registry.getPreset(node.name);\n\t\tif (!preset) {\n\t\t\tthrow new Error(`Unknown skeleton node or preset alias \"${node.name}\".`);\n\t\t}\n\n\t\tconst activeVariant = runtimeVariant ?? options.fallbackVariant;\n\t\tconst variantDef = activeVariant ? preset.variants?.[activeVariant] : undefined;\n\t\tconst presetParams = {\n\t\t\t...preset.defaults,\n\t\t\t...variantDef?.defaults,\n\t\t\t...runtimeParams\n\t\t};\n\t\tconst presetTemplate = variantDef?.template ?? preset.template;\n\t\tconst presetDsl = interpolateHubSkeletonParams(resolveTemplateDsl(presetTemplate, options.breakpoint), presetParams);\n\t\tconst presetAst = parseHubSkeletonDsl(presetDsl);\n\t\tconst resolvedPresetNodes = resolveNodes(presetAst, presetParams, activeVariant);\n\n\t\treturn Array.from({ length: node.repeat }, () => resolvedPresetNodes).flat();\n\t};\n\n\tconst resolveNodes = (\n\t\tinputNodes: readonly HubSkeletonAstNode[],\n\t\tparams: HubSkeletonParams,\n\t\tvariant?: string\n\t): HubSkeletonRenderNode[] => inputNodes.flatMap((node) => resolveNode(node, params, variant));\n\n\treturn resolveNodes(nodes, options.params, options.fallbackVariant);\n}\n\nfunction resolveProps(props: Readonly<Record<string, string>>, breakpoint: HubSkeletonBreakpoint): Record<string, string> {\n\treturn Object.fromEntries(Object.entries(props).map(([key, value]) => [key, resolveResponsiveToken(value, breakpoint)]));\n}\n\nfunction convertNodePropsToParams(\n\tprops: Readonly<Record<string, string>>,\n\tbreakpoint: HubSkeletonBreakpoint\n): HubSkeletonParams {\n\tconst entries = Object.entries(props).map(([key, value]) => {\n\t\tconst resolvedValue = resolveResponsiveToken(value, breakpoint);\n\t\treturn [key, parsePrimitiveToken(resolvedValue)];\n\t});\n\n\treturn Object.fromEntries(entries);\n}\n\nfunction parseResponsiveToken(value: string): HubSkeletonResponsiveValue {\n\tif (!value.includes('|')) {\n\t\treturn parsePrimitiveToken(value);\n\t}\n\n\tconst responsive: Partial<Record<HubSkeletonBreakpoint, HubSkeletonPrimitive>> = {};\n\tfor (const part of value.split('|')) {\n\t\tconst trimmedPart = part.trim();\n\t\tif (!trimmedPart) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!trimmedPart.includes('=')) {\n\t\t\tresponsive.base = parsePrimitiveToken(trimmedPart);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst [breakpoint, rawToken] = trimmedPart.split('=');\n\t\tconst normalizedBreakpoint = breakpoint.trim();\n\t\tif (isBreakpoint(normalizedBreakpoint)) {\n\t\t\tresponsive[normalizedBreakpoint] = parsePrimitiveToken(rawToken.trim());\n\t\t}\n\t}\n\n\treturn responsive;\n}\n\nfunction isBreakpoint(value: string): value is HubSkeletonBreakpoint {\n\treturn BREAKPOINT_ORDER.includes(value as HubSkeletonBreakpoint);\n}\n\nfunction parsePrimitiveToken(value: string): HubSkeletonPrimitive {\n\tconst trimmedValue = value.trim();\n\tif (trimmedValue === 'true') {\n\t\treturn true;\n\t}\n\tif (trimmedValue === 'false') {\n\t\treturn false;\n\t}\n\tif (/^-?\\d+(\\.\\d+)?$/.test(trimmedValue)) {\n\t\treturn Number(trimmedValue);\n\t}\n\treturn trimmedValue;\n}\n","import { DOCUMENT, NgTemplateOutlet, isPlatformBrowser } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tOnDestroy,\n\tOnInit,\n\tPLATFORM_ID,\n\tcomputed,\n\tinject,\n\tinput,\n\tsignal\n} from '@angular/core';\nimport {\n\tHubSkeletonAppearance,\n\tHubSkeletonParams,\n\tHubSkeletonRenderNode,\n\tHubSkeletonTemplateInput\n} from './models/hub-skeleton.types';\nimport { HubSkeletonPresetRegistryService } from './services/hub-skeleton-preset-registry.service';\nimport {\n\tinterpolateHubSkeletonParams,\n\tparseHubSkeletonDsl,\n\tresolveBreakpointFromWidth,\n\tresolveHubSkeletonNodes,\n\tresolveTemplateDsl\n} from './utils/hub-skeleton-dsl';\n\n/**\n * Dynamic skeleton component that renders bundled presets or compact inline DSL templates.\n */\n@Component({\n\tselector: 'hub-skeleton',\n\tstandalone: true,\n\timports: [NgTemplateOutlet],\n\tproviders: [HubSkeletonPresetRegistryService],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\ttemplate: `\n\t\t<div\n\t\t\tclass=\"hub-skeleton\"\n\t\t\t[class.hub-skeleton--animated]=\"animated()\"\n\t\t\t[class.hub-skeleton--subtle]=\"appearance() === 'subtle'\"\n\t\t\t[class.hub-skeleton--contrast]=\"appearance() === 'contrast'\"\n\t\t\t[attr.aria-label]=\"ariaLabel()\"\n\t\t\trole=\"presentation\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"renderNodes; context: { $implicit: resolvedNodes() }\"></ng-container>\n\t\t</div>\n\n\t\t<ng-template #renderNodes let-nodes>\n\t\t\t@for (node of nodes; track node.id) {\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hub-skeleton__node\"\n\t\t\t\t\t[class.hub-skeleton__node--surface]=\"node.isSurface\"\n\t\t\t\t\t[class.hub-skeleton__node--line]=\"node.type === 'line'\"\n\t\t\t\t\t[class.hub-skeleton__node--block]=\"node.type === 'block'\"\n\t\t\t\t\t[class.hub-skeleton__node--circle]=\"node.type === 'circle'\"\n\t\t\t\t\t[class.hub-skeleton__node--stack]=\"node.type === 'stack'\"\n\t\t\t\t\t[class.hub-skeleton__node--grid]=\"node.type === 'grid'\"\n\t\t\t\t\t[class.hub-skeleton__node--row]=\"node.type === 'stack' && node.props['direction'] === 'row'\"\n\t\t\t\t\t[class.hub-skeleton__node--grow]=\"node.props['grow'] === 'true'\"\n\t\t\t\t\t[style]=\"buildStyles(node)\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t@if (node.children.length > 0) {\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"renderNodes; context: { $implicit: node.children }\"></ng-container>\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t}\n\t\t</ng-template>\n\t`,\n\tstyles: [\n\t\t`\n\t\t\t:host {\n\t\t\t\tdisplay: block;\n\t\t\t}\n\n\t\t\t.hub-skeleton {\n\t\t\t\t--hub-skeleton-bg: rgba(148, 163, 184, 0.18);\n\t\t\t\t--hub-skeleton-highlight: rgba(255, 255, 255, 0.52);\n\t\t\t\t--hub-skeleton-radius: 12px;\n\t\t\t\t--hub-skeleton-gap: 12px;\n\t\t\t\t--hub-skeleton-animation-duration: 1.35s;\n\t\t\t\tdisplay: block;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\n\t\t\t.hub-skeleton--subtle {\n\t\t\t\t--hub-skeleton-bg: rgba(148, 163, 184, 0.12);\n\t\t\t\t--hub-skeleton-highlight: rgba(255, 255, 255, 0.38);\n\t\t\t}\n\n\t\t\t.hub-skeleton--contrast {\n\t\t\t\t--hub-skeleton-bg: rgba(71, 85, 105, 0.28);\n\t\t\t\t--hub-skeleton-highlight: rgba(255, 255, 255, 0.28);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node {\n\t\t\t\tbox-sizing: border-box;\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--surface {\n\t\t\t\tbackground: linear-gradient(\n\t\t\t\t\t90deg,\n\t\t\t\t\tvar(--hub-skeleton-bg) 0%,\n\t\t\t\t\tvar(--hub-skeleton-bg) 32%,\n\t\t\t\t\tvar(--hub-skeleton-highlight) 50%,\n\t\t\t\t\tvar(--hub-skeleton-bg) 68%,\n\t\t\t\t\tvar(--hub-skeleton-bg) 100%\n\t\t\t\t);\n\t\t\t\tbackground-size: 220% 100%;\n\t\t\t\tborder-radius: var(--hub-skeleton-node-radius, var(--hub-skeleton-radius));\n\t\t\t}\n\n\t\t\t.hub-skeleton--animated .hub-skeleton__node--surface {\n\t\t\t\tanimation: hub-skeleton-shimmer var(--hub-skeleton-animation-duration) ease-in-out infinite;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--line,\n\t\t\t.hub-skeleton__node--block,\n\t\t\t.hub-skeleton__node--circle {\n\t\t\t\twidth: var(--hub-skeleton-node-width, 100%);\n\t\t\t\theight: var(--hub-skeleton-node-height, 12px);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--circle {\n\t\t\t\twidth: var(--hub-skeleton-node-size, var(--hub-skeleton-node-width, 40px));\n\t\t\t\theight: var(--hub-skeleton-node-size, var(--hub-skeleton-node-height, 40px));\n\t\t\t\tborder-radius: 999px;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--stack {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tgap: var(--hub-skeleton-node-gap, var(--hub-skeleton-gap));\n\t\t\t\talign-items: var(--hub-skeleton-node-align, stretch);\n\t\t\t\tjustify-content: var(--hub-skeleton-node-justify, flex-start);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--row {\n\t\t\t\tflex-direction: row;\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--grid {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: repeat(var(--hub-skeleton-node-columns, 2), minmax(0, 1fr));\n\t\t\t\tgap: var(--hub-skeleton-node-gap, var(--hub-skeleton-gap));\n\t\t\t\talign-items: var(--hub-skeleton-node-align, stretch);\n\t\t\t}\n\n\t\t\t.hub-skeleton__node--grow {\n\t\t\t\tflex: 1 1 auto;\n\t\t\t}\n\n\t\t\t@keyframes hub-skeleton-shimmer {\n\t\t\t\tfrom {\n\t\t\t\t\tbackground-position: 100% 0;\n\t\t\t\t}\n\t\t\t\tto {\n\t\t\t\t\tbackground-position: -100% 0;\n\t\t\t\t}\n\t\t\t}\n\t\t`\n\t]\n})\nexport class HubSkeletonComponent implements OnInit, OnDestroy {\n\t/** Built-in or registered preset name. */\n\treadonly preset = input<string | null>(null);\n\n\t/** Inline compact DSL template or template definition object. */\n\treadonly template = input<HubSkeletonTemplateInput | null>(null);\n\n\t/** Serializable params interpolated before parsing. */\n\treadonly params = input<HubSkeletonParams>({});\n\n\t/** Optional named variant. */\n\treadonly variant = input<string | null>(null);\n\n\t/** Toggles shimmer animation. */\n\treadonly animated = input(true);\n\n\t/** Visual appearance preset. */\n\treadonly appearance = input<HubSkeletonAppearance>('default');\n\n\t/** Optional accessible label applied to the container. */\n\treadonly ariaLabel = input('Loading placeholder');\n\n\tprivate readonly document = inject(DOCUMENT);\n\tprivate readonly platformId = inject(PLATFORM_ID);\n\tprivate readonly registry = inject(HubSkeletonPresetRegistryService);\n\n\tprivate resizeCleanup: (() => void) | null = null;\n\tprivate readonly viewportWidth = signal(1200);\n\treadonly activeBreakpoint = computed(() => resolveBreakpointFromWidth(this.viewportWidth()));\n\n\t/** Resolved render nodes after preset expansion and breakpoint evaluation. */\n\treadonly resolvedNodes = computed<readonly HubSkeletonRenderNode[]>(() => {\n\t\tconst { template, params, variant } = this.resolveRuntimeTemplate();\n\t\tconst dsl = interpolateHubSkeletonParams(resolveTemplateDsl(template, this.activeBreakpoint()), params);\n\t\tconst ast = parseHubSkeletonDsl(dsl);\n\n\t\treturn resolveHubSkeletonNodes(ast, {\n\t\t\tbreakpoint: this.activeBreakpoint(),\n\t\t\tparams,\n\t\t\tregistry: this.registry,\n\t\t\tfallbackVariant: variant ?? undefined\n\t\t});\n\t});\n\n\tngOnInit(): void {\n\t\tif (!isPlatformBrowser(this.platformId) || !this.document.defaultView) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = this.document.defaultView;\n\t\tthis.viewportWidth.set(win.innerWidth);\n\n\t\tconst listener = () => this.viewportWidth.set(win.innerWidth);\n\t\twin.addEventListener('resize', listener, { passive: true });\n\t\tthis.resizeCleanup = () => win.removeEventListener('resize', listener);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.resizeCleanup?.();\n\t}\n\n\t/**\n\t * Converts node props into CSS custom properties consumed by the template.\n\t *\n\t * @param node Render node.\n\t * @returns Style object.\n\t */\n\tbuildStyles(node: HubSkeletonRenderNode): Record<string, string | null> {\n\t\tconst props = node.props;\n\t\treturn {\n\t\t\t'--hub-skeleton-node-width': props['width'] ?? null,\n\t\t\t'--hub-skeleton-node-height': this.toCssSize(props['height']),\n\t\t\t'--hub-skeleton-node-size': this.toCssSize(props['size']),\n\t\t\t'--hub-skeleton-node-radius': this.toCssSize(props['radius']),\n\t\t\t'--hub-skeleton-node-gap': this.toCssSize(props['gap']),\n\t\t\t'--hub-skeleton-node-columns': props['columns'] ?? null,\n\t\t\t'--hub-skeleton-node-align': props['align'] ?? null,\n\t\t\t'--hub-skeleton-node-justify': props['justify'] ?? null\n\t\t};\n\t}\n\n\tprivate resolveRuntimeTemplate(): {\n\t\treadonly template: HubSkeletonTemplateInput;\n\t\treadonly params: HubSkeletonParams;\n\t\treadonly variant: string | null;\n\t} {\n\t\tconst presetName = this.preset();\n\t\tconst variantName = this.variant();\n\t\tconst inlineTemplate = this.template();\n\n\t\tif (presetName) {\n\t\t\tconst preset = this.registry.getPreset(presetName);\n\t\t\tif (!preset) {\n\t\t\t\tthrow new Error(`Unknown skeleton preset \"${presetName}\".`);\n\t\t\t}\n\n\t\t\tconst activeVariant = variantName ? preset.variants?.[variantName] : undefined;\n\t\t\treturn {\n\t\t\t\ttemplate: activeVariant?.template ?? preset.template,\n\t\t\t\tparams: {\n\t\t\t\t\t...preset.defaults,\n\t\t\t\t\t...activeVariant?.defaults,\n\t\t\t\t\t...this.params()\n\t\t\t\t},\n\t\t\t\tvariant: variantName\n\t\t\t};\n\t\t}\n\n\t\tif (!inlineTemplate) {\n\t\t\tthrow new Error('hub-skeleton requires either `preset` or `template`.');\n\t\t}\n\n\t\treturn {\n\t\t\ttemplate: inlineTemplate,\n\t\t\tparams: this.params(),\n\t\t\tvariant: variantName\n\t\t};\n\t}\n\n\tprivate toCssSize(value: string | undefined): string | null {\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (/^-?\\d+(\\.\\d+)?$/.test(value)) {\n\t\t\treturn `${value}px`;\n\t\t}\n\n\t\treturn value;\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { HubSkeletonComponent } from './hub-skeleton.component';\n\n/**\n * NgModule wrapper kept for compatibility with module-based Angular apps.\n */\n@NgModule({\n\timports: [HubSkeletonComponent],\n\texports: [HubSkeletonComponent]\n})\nexport class HubSkeletonModule {}\n","/*\n * Public API Surface of skeleton\n */\n\nexport * from './lib/hub-skeleton.component';\nexport * from './lib/hub-skeleton.module';\nexport * from './lib/models/hub-skeleton.types';\nexport * from './lib/presets/hub-skeleton-default-presets';\nexport * from './lib/services/hub-skeleton-preset-registry.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ng-hub-ui-skeleton",
|
|
3
|
-
"version": "22.2.
|
|
3
|
+
"version": "22.2.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Dynamic Angular skeleton placeholders with presets, inline DSL templates, responsive variants, and programmatic preset registration.",
|
|
6
6
|
"author": "Carlos Morcillo <carlos.morcillo@me.com> (https://www.carlosmorcillo.com)",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/carlos-morcillo/ng-hub-ui-skeleton/issues"
|
|
13
13
|
},
|
|
14
|
-
"homepage": "https://hubui.dev/",
|
|
14
|
+
"homepage": "https://hubui.dev/en/skeleton/overview/",
|
|
15
15
|
"keywords": [
|
|
16
16
|
"angular",
|
|
17
17
|
"skeleton",
|
|
@@ -26,13 +26,7 @@
|
|
|
26
26
|
// }
|
|
27
27
|
//
|
|
28
28
|
// scss-docs-start hub-skeleton-theme
|
|
29
|
-
@mixin hub-skeleton-theme(
|
|
30
|
-
$bg: null,
|
|
31
|
-
$highlight: null,
|
|
32
|
-
$radius: null,
|
|
33
|
-
$gap: null,
|
|
34
|
-
$animation-duration: null
|
|
35
|
-
) {
|
|
29
|
+
@mixin hub-skeleton-theme($bg: null, $highlight: null, $radius: null, $gap: null, $animation-duration: null) {
|
|
36
30
|
@if $bg != null {
|
|
37
31
|
--hub-skeleton-bg: #{$bg};
|
|
38
32
|
}
|
|
Binary file
|