@dereekb/dbx-web 13.17.0 → 13.18.0

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 (40) hide show
  1. package/_index.scss +4 -1
  2. package/eslint/package.json +4 -4
  3. package/fesm2022/dereekb-dbx-web-mapbox.mjs +2 -2
  4. package/fesm2022/dereekb-dbx-web-mapbox.mjs.map +1 -1
  5. package/fesm2022/dereekb-dbx-web-style-demo.mjs +1698 -0
  6. package/fesm2022/dereekb-dbx-web-style-demo.mjs.map +1 -0
  7. package/fesm2022/dereekb-dbx-web-table.mjs +1 -1
  8. package/fesm2022/dereekb-dbx-web-table.mjs.map +1 -1
  9. package/fesm2022/dereekb-dbx-web.mjs +460 -333
  10. package/fesm2022/dereekb-dbx-web.mjs.map +1 -1
  11. package/lib/button/_button.scss +74 -98
  12. package/lib/extension/pdf/_pdf.scss +5 -5
  13. package/lib/extension/table/_table.scss +2 -2
  14. package/lib/interaction/detach/_detach.scss +22 -2
  15. package/lib/interaction/dialog/_dialog.scss +4 -8
  16. package/lib/interaction/popup/_popup.scss +1 -2
  17. package/lib/interaction/prompt/_prompt.scss +7 -2
  18. package/lib/layout/avatar/_avatar.scss +8 -0
  19. package/lib/layout/bar/_bar.scss +41 -2
  20. package/lib/layout/card/_card.scss +191 -3
  21. package/lib/layout/column/_column.scss +3 -3
  22. package/lib/layout/content/_content.scss +24 -9
  23. package/lib/layout/list/_list.scss +83 -6
  24. package/lib/layout/section/_section.scss +7 -8
  25. package/lib/layout/style/_style.scss +44 -9
  26. package/lib/layout/text/_text.scss +73 -29
  27. package/lib/loading/_loading.scss +9 -2
  28. package/lib/router/layout/navbar/_navbar.scss +14 -0
  29. package/lib/router/layout/sidenav/_sidenav.scss +2 -2
  30. package/lib/style/_core.scss +4 -0
  31. package/lib/style/_corners.scss +79 -0
  32. package/lib/style/_root-variables.scss +17 -0
  33. package/lib/style/_shapes.scss +56 -0
  34. package/lib/style/_style-demo.scss +183 -0
  35. package/lib/style/_variables.scss +8 -1
  36. package/package.json +11 -7
  37. package/style-demo/README.md +12 -0
  38. package/types/dereekb-dbx-web-style-demo.d.ts +883 -0
  39. package/types/dereekb-dbx-web.d.ts +170 -79
  40. package/lib/style/_m2-visual-compat.scss +0 -120
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dereekb-dbx-web-style-demo.mjs","sources":["../../../../packages/dbx-web/style-demo/src/lib/style-loader/style.template.ts","../../../../packages/dbx-web/style-demo/src/lib/style-loader/style.loader.service.ts","../../../../packages/dbx-web/style-demo/src/lib/style-loader/style.loader.directive.ts","../../../../packages/dbx-web/style-demo/src/lib/section/section.providers.ts","../../../../packages/dbx-web/style-demo/src/lib/section/section.registry.service.ts","../../../../packages/dbx-web/style-demo/src/lib/template-toggle/template.toggle.ts","../../../../packages/dbx-web/style-demo/src/lib/template-toggle/template.toggle.providers.ts","../../../../packages/dbx-web/style-demo/src/lib/playground/dbx.style.demo.ts","../../../../packages/dbx-web/style-demo/src/lib/controls/controls.service.ts","../../../../packages/dbx-web/style-demo/src/lib/playground/dbx.style.demo.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/buttons.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/cards.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/color-templates.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/color-tones.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/navigation.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/shape-scale.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/surfaces.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/type-roles.section.component.ts","../../../../packages/dbx-web/style-demo/src/lib/sections/web.sections.providers.ts","../../../../packages/dbx-web/style-demo/src/lib/dbx.style.demo.providers.ts","../../../../packages/dbx-web/style-demo/src/dereekb-dbx-web-style-demo.ts"],"sourcesContent":["import { type ArrayOrValue, type CssClass, type CssStyleObject, type Maybe, asArray, cssClassesSet } from '@dereekb/util';\n\n/**\n * Identifier for a {@link DbxStyleDemoStyleTemplate} registered with the {@link DbxStyleDemoStyleLoaderService}.\n *\n * Use a kebab-case string (e.g. `'corner-shape-large'`) to reference a template by key.\n */\nexport type DbxStyleDemoStyleTemplateKey = string;\n\n/**\n * A named bundle of CSS-token overrides (and/or debug classes) the style-demo playground can toggle on a rendered region.\n *\n * Templates are the \"levers\" flipped in the showcase: applying one re-points CSS custom properties (e.g. `--mat-sys-*`)\n * and/or attaches debug classes so that every dbx component beneath the loader host repaints live via the cascade.\n *\n * This type is demo/debug-only and disposable — it is not a dbx-web core runtime primitive.\n */\nexport interface DbxStyleDemoStyleTemplate {\n /**\n * Unique key identifying this template.\n */\n readonly key: DbxStyleDemoStyleTemplateKey;\n /**\n * Inline CSS-token overrides applied to the loader host's `[style]` (e.g. `{ '--mat-sys-primary': '#ff0066' }`).\n *\n * When several templates are merged, later templates' style keys win.\n */\n readonly style?: Maybe<CssStyleObject>;\n /**\n * Debug class(es) applied to the loader host (e.g. `'dbx-style-demo-template-corner-shape-large'`).\n *\n * When several templates are merged, classes accumulate and de-duplicate (order-preserving).\n */\n readonly className?: Maybe<ArrayOrValue<CssClass>>;\n /**\n * Optional human-readable label shown in the controls UI. Falls back to the {@link key} when unset.\n */\n readonly label?: Maybe<string>;\n /**\n * When true, the template participates in the \"curated\" set surfaced as a default lever in the controls UI.\n */\n readonly curated?: Maybe<boolean>;\n}\n\n/**\n * Configuration object accepted by the `[dbxStyleDemoStyleLoader]` directive when an inline list of templates\n * (rather than a list of registered keys) should be applied.\n *\n * @example\n * ```html\n * <div [dbxStyleDemoStyleLoader]=\"{ templates: [{ key: 'pink', style: { '--mat-sys-primary': '#ff0066' } }] }\">…</div>\n * ```\n */\nexport interface DbxStyleDemoStyleLoaderConfig {\n /**\n * Template keys to resolve through the service, and/or inline template objects to merge directly.\n */\n readonly templates: ArrayOrValue<DbxStyleDemoStyleTemplateKey | DbxStyleDemoStyleTemplate>;\n}\n\n/**\n * Union accepted by the `[dbxStyleDemoStyleLoader]` directive input: one or more template keys, or a config object.\n */\nexport type DbxStyleDemoStyleLoaderInput = ArrayOrValue<DbxStyleDemoStyleTemplateKey> | DbxStyleDemoStyleLoaderConfig;\n\n/**\n * The flattened result of merging one or more {@link DbxStyleDemoStyleTemplate} entries.\n *\n * Ready to bind to a host element's `[style]` (the {@link style} POJO) and `[class]` (the {@link classes}).\n */\nexport interface DbxStyleDemoStyleSet {\n /**\n * Merged inline CSS-token overrides (later templates win on conflicting keys).\n */\n readonly style: CssStyleObject;\n /**\n * Merged debug classes (de-duplicated, order-preserving).\n */\n readonly classes: CssClass[];\n}\n\n/**\n * Merges an ordered list of {@link DbxStyleDemoStyleTemplate} entries into a single {@link DbxStyleDemoStyleSet}.\n *\n * Style POJOs are merged with `{ ...acc, ...template.style }` so later templates override earlier ones on\n * conflicting token keys; classes accumulate across all templates and are de-duplicated order-preserving via\n * {@link cssClassesSet}.\n *\n * @param templates - The templates to merge, in precedence order (earliest first, latest wins).\n * @returns The merged style set.\n *\n * @example\n * ```ts\n * mergeDbxStyleDemoStyleTemplates([\n * { key: 'a', style: { '--mat-sys-primary': 'red' }, className: 'x' },\n * { key: 'b', style: { '--mat-sys-primary': 'blue' }, className: ['x', 'y'] }\n * ]);\n * // -> { style: { '--mat-sys-primary': 'blue' }, classes: ['x', 'y'] }\n * ```\n */\nexport function mergeDbxStyleDemoStyleTemplates(templates: DbxStyleDemoStyleTemplate[]): DbxStyleDemoStyleSet {\n let style: CssStyleObject = {};\n const classInputs: CssClass[] = [];\n\n templates.forEach((template) => {\n if (template.style) {\n style = { ...style, ...template.style };\n }\n\n if (template.className != null) {\n classInputs.push(...asArray(template.className));\n }\n });\n\n return { style, classes: [...cssClassesSet(classInputs)] };\n}\n\n/**\n * Type guard: true when the value is a {@link DbxStyleDemoStyleTemplate} object (not a bare template-key string).\n *\n * @param value - The value to test.\n * @returns `true` when the value is an object carrying a string `key`.\n *\n * @example\n * ```ts\n * isDbxStyleDemoStyleTemplate('corner-shape-large'); // false\n * isDbxStyleDemoStyleTemplate({ key: 'corner-shape-large' }); // true\n * ```\n */\nexport function isDbxStyleDemoStyleTemplate(value: Maybe<DbxStyleDemoStyleTemplateKey | DbxStyleDemoStyleTemplate>): value is DbxStyleDemoStyleTemplate {\n return typeof value === 'object' && value !== null && typeof value.key === 'string';\n}\n\n/**\n * Type guard: true when the directive input is a {@link DbxStyleDemoStyleLoaderConfig} (rather than a key / array of keys).\n *\n * @param value - The value to test.\n * @returns `true` when the value is a non-array object carrying a `templates` property.\n *\n * @example\n * ```ts\n * isDbxStyleDemoStyleLoaderConfig('corner-shape-large'); // false\n * isDbxStyleDemoStyleLoaderConfig(['a', 'b']); // false\n * isDbxStyleDemoStyleLoaderConfig({ templates: ['a'] }); // true\n * ```\n */\nexport function isDbxStyleDemoStyleLoaderConfig(value: Maybe<DbxStyleDemoStyleLoaderInput>): value is DbxStyleDemoStyleLoaderConfig {\n return typeof value === 'object' && value !== null && !Array.isArray(value) && 'templates' in value;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { type ArrayOrValue, type Maybe, asArray, useIterableOrValue } from '@dereekb/util';\nimport { type DbxStyleDemoStyleSet, type DbxStyleDemoStyleTemplate, type DbxStyleDemoStyleTemplateKey, isDbxStyleDemoStyleTemplate, mergeDbxStyleDemoStyleTemplates } from './style.template';\n\n/**\n * Configuration provided in the root environment for seeding {@link DbxStyleDemoStyleLoaderService} with initial templates.\n *\n * Registered via `provideDbxStyleDemo({ templates: [...] })`.\n */\nexport abstract class DbxStyleDemoStyleLoaderServiceConfig {\n /**\n * Templates to register at service construction time.\n */\n abstract readonly templates?: Maybe<DbxStyleDemoStyleTemplate[]>;\n}\n\n/**\n * Registry of named {@link DbxStyleDemoStyleTemplate} levers used by the style-demo playground.\n *\n * Mirrors the shape of `DbxColorService`: app-provided templates are seeded from an optional\n * {@link DbxStyleDemoStyleLoaderServiceConfig}, then resolved by key at render time by the\n * `[dbxStyleDemoStyleLoader]` directive. Ships with no built-in templates — every lever is contributed by an app.\n *\n * This service is demo/debug-only and disposable — it is not a dbx-web core runtime primitive.\n *\n * @example\n * ```ts\n * const loader = inject(DbxStyleDemoStyleLoaderService);\n * loader.register({ key: 'pink', style: { '--mat-sys-primary': '#ff0066' } });\n * loader.mergeTemplates(['pink']);\n * // -> { style: { '--mat-sys-primary': '#ff0066' }, classes: [] }\n * ```\n */\n@Injectable()\nexport class DbxStyleDemoStyleLoaderService {\n private readonly _templates = new Map<DbxStyleDemoStyleTemplateKey, DbxStyleDemoStyleTemplate>();\n\n constructor() {\n const initialConfig = inject(DbxStyleDemoStyleLoaderServiceConfig, { optional: true });\n\n if (initialConfig?.templates) {\n this.register(initialConfig.templates);\n }\n }\n\n /**\n * Registers one or more {@link DbxStyleDemoStyleTemplate} entries.\n *\n * @param templates - The template(s) to register.\n * @param override - Whether existing entries with the same key should be replaced (default true)\n */\n register(templates: ArrayOrValue<DbxStyleDemoStyleTemplate>, override: boolean = true): void {\n useIterableOrValue(templates, (template) => {\n if (override || !this._templates.has(template.key)) {\n this._templates.set(template.key, template);\n }\n });\n }\n\n /**\n * Returns whether a template with the given key has been registered.\n *\n * @param key - The template key to check.\n * @returns True when a template is registered under the given key.\n */\n hasTemplate(key: DbxStyleDemoStyleTemplateKey): boolean {\n return this._templates.has(key);\n }\n\n /**\n * Returns the {@link DbxStyleDemoStyleTemplate} registered under the given key, or undefined if none.\n *\n * @param key - The template key to look up.\n * @returns The registered template, or undefined when no template matches.\n */\n getTemplate(key: DbxStyleDemoStyleTemplateKey): Maybe<DbxStyleDemoStyleTemplate> {\n return this._templates.get(key);\n }\n\n /**\n * Returns all currently registered template keys, in registration order.\n *\n * @returns Array of all registered template keys.\n */\n getAllRegisteredTemplateKeys(): DbxStyleDemoStyleTemplateKey[] {\n return [...this._templates.keys()];\n }\n\n /**\n * Returns all registered templates flagged {@link DbxStyleDemoStyleTemplate.curated}, in registration order.\n *\n * @returns The curated templates in insertion order.\n */\n getCuratedTemplates(): DbxStyleDemoStyleTemplate[] {\n return [...this._templates.values()].filter((template) => template.curated === true);\n }\n\n /**\n * Resolves a mix of template keys and inline templates into a single merged {@link DbxStyleDemoStyleSet}.\n *\n * String keys are resolved through the registry; unknown keys are skipped. Inline template objects are\n * used as-is. Resolution preserves input order so later entries win on conflicting style keys.\n *\n * @param keysOrTemplates - Template keys and/or inline templates to merge, in precedence order.\n * @returns The merged style set.\n *\n * @example\n * ```ts\n * loader.register({ key: 'pink', style: { '--mat-sys-primary': '#ff0066' } });\n * loader.mergeTemplates(['pink', 'unknown', { key: 'inline', className: 'demo' }]);\n * // -> { style: { '--mat-sys-primary': '#ff0066' }, classes: ['demo'] }\n * ```\n */\n mergeTemplates(keysOrTemplates: ArrayOrValue<DbxStyleDemoStyleTemplateKey | DbxStyleDemoStyleTemplate>): DbxStyleDemoStyleSet {\n const resolved: DbxStyleDemoStyleTemplate[] = [];\n\n asArray(keysOrTemplates).forEach((keyOrTemplate) => {\n if (isDbxStyleDemoStyleTemplate(keyOrTemplate)) {\n resolved.push(keyOrTemplate);\n } else {\n const template = this._templates.get(keyOrTemplate);\n\n if (template) {\n resolved.push(template);\n }\n }\n });\n\n return mergeDbxStyleDemoStyleTemplates(resolved);\n }\n}\n","import { Directive, computed, inject, input } from '@angular/core';\nimport { type CssStyleObject, type Maybe, type SpaceSeparatedCssClasses, asArray, spaceSeparatedCssClasses } from '@dereekb/util';\nimport { type DbxStyleDemoStyleLoaderInput, type DbxStyleDemoStyleSet, isDbxStyleDemoStyleLoaderConfig, isDbxStyleDemoStyleTemplate, mergeDbxStyleDemoStyleTemplates } from './style.template';\nimport { DbxStyleDemoStyleLoaderService } from './style.loader.service';\n\n/**\n * Applies a merged bundle of style-demo template levers to its host element, repainting every dbx component\n * beneath it via the CSS custom-property cascade.\n *\n * The input accepts either one or more registered template keys (`ArrayOrValue<DbxStyleDemoStyleTemplateKey>`) or a\n * {@link DbxStyleDemoStyleLoaderConfig} carrying inline template objects. The {@link DbxStyleDemoStyleLoaderService} is\n * optional-injected: when present, string keys are resolved through the registry (unknown keys skipped); when absent,\n * only inline template objects are merged (string keys are unresolvable and skipped). Merged inline CSS-token overrides\n * bind to the host `[style]` and merged debug classes bind to the host `[class]`.\n *\n * This directive is demo/debug-only and disposable — it is not a dbx-web core runtime primitive.\n *\n * @example\n * ```html\n * <div [dbxStyleDemoStyleLoader]=\"['corner-shape-large', 'surface-tint']\">…</div>\n * <div [dbxStyleDemoStyleLoader]=\"{ templates: [{ key: 'pink', style: { '--mat-sys-primary': '#ff0066' } }] }\">…</div>\n * ```\n */\n@Directive({\n selector: '[dbxStyleDemoStyleLoader]',\n host: {\n '[class]': 'classesSignal()',\n '[style]': 'styleSignal()'\n },\n standalone: true\n})\nexport class DbxStyleDemoStyleLoaderDirective {\n private readonly _loaderService = inject(DbxStyleDemoStyleLoaderService, { optional: true });\n\n /**\n * Template keys to resolve through the service, or a config object carrying inline templates.\n */\n readonly dbxStyleDemoStyleLoader = input<Maybe<DbxStyleDemoStyleLoaderInput>>(undefined);\n\n private readonly _mergedSignal = computed<DbxStyleDemoStyleSet>(() => {\n const input = this.dbxStyleDemoStyleLoader();\n const keysOrTemplates = isDbxStyleDemoStyleLoaderConfig(input) ? input.templates : input;\n const service = this._loaderService;\n\n let result: DbxStyleDemoStyleSet;\n\n if (service) {\n result = service.mergeTemplates(keysOrTemplates ?? []);\n } else {\n // No service: only inline template objects can be merged; string keys are unresolvable and skipped.\n result = mergeDbxStyleDemoStyleTemplates(asArray(keysOrTemplates).filter(isDbxStyleDemoStyleTemplate));\n }\n\n return result;\n });\n\n readonly styleSignal = computed<Maybe<CssStyleObject>>(() => {\n const { style } = this._mergedSignal();\n return Object.keys(style).length > 0 ? style : null;\n });\n\n readonly classesSignal = computed<SpaceSeparatedCssClasses>(() => spaceSeparatedCssClasses(this._mergedSignal().classes));\n}\n","import { type EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\nimport { type DbxStyleDemoSectionGroup } from './section';\n\n/**\n * Multi-provider injection token collecting every {@link DbxStyleDemoSectionGroup} contributed by an app's libraries.\n *\n * Injected by {@link DbxStyleDemoSectionRegistry} (as an array) to assemble the full set of showcase sections.\n */\nexport const DBX_STYLE_DEMO_SECTION_GROUP = new InjectionToken<DbxStyleDemoSectionGroup>('DbxStyleDemoSectionGroup');\n\n/**\n * Registers a library's {@link DbxStyleDemoSectionGroup} with the style-demo playground.\n *\n * Each call contributes one group via the {@link DBX_STYLE_DEMO_SECTION_GROUP} multi-provider, so several libraries\n * (e.g. `provideDbxWebStyleDemo()`, `provideDbxFormStyleDemo()`) can each add their own sections.\n *\n * @param group - The section group to register.\n * @returns EnvironmentProviders contributing the group.\n *\n * @__NO_SIDE_EFFECTS__\n */\nexport function provideDbxStyleDemoSections(group: DbxStyleDemoSectionGroup): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: DBX_STYLE_DEMO_SECTION_GROUP,\n useValue: group,\n multi: true\n }\n ]);\n}\n","import { Injectable, type Signal, inject, signal } from '@angular/core';\nimport { type DbxStyleDemoSection, type DbxStyleDemoSectionGroup } from './section';\nimport { DBX_STYLE_DEMO_SECTION_GROUP } from './section.providers';\n\n/**\n * Root service that flattens every {@link DbxStyleDemoSectionGroup} registered via {@link provideDbxStyleDemoSections}\n * into a single ordered list of {@link DbxStyleDemoSection} entries.\n *\n * Consumed by the `<dbx-style-demo>` playground to determine which sections are available to render.\n */\n@Injectable({ providedIn: 'root' })\nexport class DbxStyleDemoSectionRegistry {\n /**\n * All registered sections, in library-registration then section-declaration order.\n */\n readonly sectionsSignal: Signal<DbxStyleDemoSection[]>;\n\n constructor() {\n const groups = inject<DbxStyleDemoSectionGroup[]>(DBX_STYLE_DEMO_SECTION_GROUP, { optional: true }) ?? [];\n this.sectionsSignal = signal(groups.flatMap((group) => group.sections));\n }\n}\n","import { type Maybe, makeValuesGroupMap } from '@dereekb/util';\nimport { type DbxStyleDemoStyleTemplateKey } from '../style-loader/style.template';\n\n/**\n * A user-facing lever in the style-demo controls that toggles a registered {@link DbxStyleDemoStyleTemplate} on/off.\n *\n * Active toggles are collected by the playground and fed to the `[dbxStyleDemoStyleLoader]` host so their token\n * overrides ripple through every rendered section.\n */\nexport interface DbxStyleDemoTemplateToggle {\n /**\n * Key of the registered {@link DbxStyleDemoStyleTemplate} this toggle activates.\n */\n readonly templateName: DbxStyleDemoStyleTemplateKey;\n /**\n * Human-readable label shown in the controls UI.\n */\n readonly label: string;\n /**\n * Optional grouping label used to cluster toggles in the controls UI (e.g. `'Shape'`, `'Surface'`).\n *\n * Toggles sharing a non-null group are treated as mutually exclusive (radio-like): activating one in the controls\n * deactivates the others in the same group. Ungrouped toggles (`null`/`undefined` group) toggle independently.\n */\n readonly group?: Maybe<string>;\n}\n\n/**\n * A cluster of {@link DbxStyleDemoTemplateToggle}s sharing the same {@link DbxStyleDemoTemplateToggle.group} label.\n *\n * Produced by {@link groupDbxStyleDemoTemplateToggles} so the controls UI can render each group under a sub-label.\n */\nexport interface DbxStyleDemoTemplateToggleGroup {\n /**\n * The shared group label, or `null` for the leading cluster of ungrouped toggles.\n */\n readonly label: Maybe<string>;\n /**\n * The toggles in this cluster, in their original registration order.\n */\n readonly toggles: DbxStyleDemoTemplateToggle[];\n}\n\n/**\n * Clusters template toggles by their {@link DbxStyleDemoTemplateToggle.group} label for grouped rendering.\n *\n * The ungrouped cluster (`label: null`) is emitted first when any ungrouped toggle exists, followed by each named\n * group in first-seen order. Toggle order within a cluster is preserved.\n *\n * @param toggles - The toggles to cluster.\n * @returns The clusters in render order.\n *\n * @example\n * ```ts\n * groupDbxStyleDemoTemplateToggles([\n * { templateName: 'a', label: 'A' },\n * { templateName: 'b', label: 'B', group: 'Shape' },\n * { templateName: 'c', label: 'C', group: 'Shape' }\n * ]);\n * // -> [{ label: null, toggles: [A] }, { label: 'Shape', toggles: [B, C] }]\n * ```\n */\nexport function groupDbxStyleDemoTemplateToggles(toggles: DbxStyleDemoTemplateToggle[]): DbxStyleDemoTemplateToggleGroup[] {\n const groupMap = makeValuesGroupMap(toggles, (toggle) => toggle.group ?? null);\n const result: DbxStyleDemoTemplateToggleGroup[] = [];\n\n const ungrouped = groupMap.get(null);\n\n if (ungrouped != null) {\n result.push({ label: null, toggles: ungrouped });\n }\n\n groupMap.forEach((groupToggles, label) => {\n if (label != null) {\n result.push({ label, toggles: groupToggles });\n }\n });\n\n return result;\n}\n","import { type EnvironmentProviders, InjectionToken, type Provider, makeEnvironmentProviders } from '@angular/core';\nimport { type DbxStyleDemoTemplateToggle } from './template.toggle';\n\n/**\n * Multi-provider injection token collecting every {@link DbxStyleDemoTemplateToggle} contributed by an app's libraries.\n *\n * Injected by the `<dbx-style-demo>` playground (as an array) to populate the template-lever list in the controls UI.\n */\nexport const DBX_STYLE_DEMO_TEMPLATE_TOGGLE = new InjectionToken<DbxStyleDemoTemplateToggle>('DbxStyleDemoTemplateToggle');\n\n/**\n * Registers one or more {@link DbxStyleDemoTemplateToggle} levers with the style-demo playground.\n *\n * Each toggle is contributed via the {@link DBX_STYLE_DEMO_TEMPLATE_TOGGLE} multi-provider, so several libraries can\n * each add their own levers.\n *\n * @param toggles - The template toggles to register.\n * @returns EnvironmentProviders contributing the toggles.\n *\n * @__NO_SIDE_EFFECTS__\n */\nexport function provideDbxStyleDemoTemplateToggles(...toggles: DbxStyleDemoTemplateToggle[]): EnvironmentProviders {\n const providers: Provider[] = toggles.map((toggle) => ({\n provide: DBX_STYLE_DEMO_TEMPLATE_TOGGLE,\n useValue: toggle,\n multi: true\n }));\n\n return makeEnvironmentProviders(providers);\n}\n","import { InjectionToken, type Signal, type Type } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { type DbxStyleDemoSection, type DbxStyleDemoSectionId } from '../section/section';\nimport { type DbxStyleDemoStyleTemplateKey } from '../style-loader/style.template';\nimport { type DbxStyleDemoTemplateToggle } from '../template-toggle/template.toggle';\n\n/**\n * Detach key used by the style-demo controls detach panel.\n */\nexport const DBX_STYLE_DEMO_CONTROLS_DETACH_KEY = 'dbx-style-demo-controls';\n\n/**\n * Injection token carrying the component class rendered inside the style-demo controls detach panel.\n *\n * `DbxStyleDemoControlsService` opens this component via `DbxDetachService` (so it survives navigation and is available\n * app-wide) reading the service's {@link DbxStyleDemoControls} state. When unregistered, the controls buttons are hidden.\n *\n * `@dereekb/dbx-form/style-demo` registers `DbxFormStyleDemoControlsDetachComponent` (a presets chip-field controls UI)\n * here — the controls UI lives in dbx-form because it depends on `@dereekb/dbx-form`'s pickable chip field, which dbx-web\n * cannot import.\n */\nexport const DBX_STYLE_DEMO_CONTROLS_COMPONENT = new InjectionToken<Type<unknown>>('DbxStyleDemoControlsComponent');\n\n/**\n * Popover key used by the style-demo sections popover, opened from the playground header.\n */\nexport const DBX_STYLE_DEMO_SECTIONS_POPOVER_KEY = 'dbx-style-demo-sections';\n\n/**\n * Injection token carrying the component class rendered inside the style-demo sections popover.\n *\n * `DbxStyleDemoControlsService` opens this component via `DbxPopoverService`, anchored to the playground header's\n * \"Sections\" button, because sections only affect the `<dbx-style-demo>` playground page (unlike presets, which restyle\n * the whole app). When unregistered, the playground's \"Sections\" button is hidden.\n *\n * `@dereekb/dbx-form/style-demo` registers `DbxFormStyleDemoSectionsPopoverComponent` (a sections chip-field controls\n * UI) here — the controls UI lives in dbx-form because it depends on `@dereekb/dbx-form`'s pickable chip field, which\n * dbx-web cannot import.\n */\nexport const DBX_STYLE_DEMO_SECTIONS_COMPONENT = new InjectionToken<Type<unknown>>('DbxStyleDemoSectionsComponent');\n\n/**\n * Configuration for the `<dbx-style-demo>` playground.\n */\nexport interface DbxStyleDemoConfig {\n /**\n * When set, only sections whose tags intersect this list are rendered. When unset, all registered sections render.\n */\n readonly tags?: Maybe<string[]>;\n /**\n * Reserved for Phase 2 drag/drop section reordering. Accepted but ignored in v1.\n */\n readonly enableDragDrop?: Maybe<boolean>;\n /**\n * Template keys to activate by default when the playground first renders.\n */\n readonly defaultActiveTemplates?: Maybe<DbxStyleDemoStyleTemplateKey[]>;\n}\n\n/**\n * The reactive control surface a `<dbx-style-demo>` playground exposes to its controls popover.\n *\n * The popover reads the signals to render its toggle lists and calls the setters to write the user's choices\n * back to the playground, where they drive the rendered sections and the active style-loader templates.\n */\nexport interface DbxStyleDemoControls {\n /**\n * The sections available to render (already filtered by the playground's configured tags).\n */\n readonly sectionsSignal: Signal<DbxStyleDemoSection[]>;\n /**\n * The ids of the currently-enabled (visible) sections.\n */\n readonly enabledIdsSignal: Signal<Set<DbxStyleDemoSectionId>>;\n /**\n * The registered template-lever toggles.\n */\n readonly templateTogglesSignal: Signal<DbxStyleDemoTemplateToggle[]>;\n /**\n * The keys of the currently-active template levers.\n */\n readonly activeTemplateKeysSignal: Signal<Set<DbxStyleDemoStyleTemplateKey>>;\n /**\n * Enables or disables a section by id.\n */\n setSectionEnabled(id: DbxStyleDemoSectionId, enabled: boolean): void;\n /**\n * Activates or deactivates a template lever by key.\n *\n * Activating a lever that belongs to a non-null toggle group deactivates the other active levers in that group\n * (radio-like), so only one lever per group is active at a time.\n */\n setTemplateActive(key: DbxStyleDemoStyleTemplateKey, active: boolean): void;\n}\n","import { type ElementRef, Injectable, type Signal, type Type, computed, inject, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxDetachService, DbxPopoverService, DbxStyleService, type DbxStyleSupplement } from '@dereekb/dbx-web';\nimport { type DbxStyleDemoSection, type DbxStyleDemoSectionId } from '../section/section';\nimport { DbxStyleDemoSectionRegistry } from '../section/section.registry.service';\nimport { type DbxStyleDemoStyleTemplateKey } from '../style-loader/style.template';\nimport { DbxStyleDemoStyleLoaderService } from '../style-loader/style.loader.service';\nimport { type DbxStyleDemoTemplateToggle } from '../template-toggle/template.toggle';\nimport { DBX_STYLE_DEMO_TEMPLATE_TOGGLE } from '../template-toggle/template.toggle.providers';\nimport { DBX_STYLE_DEMO_CONTROLS_COMPONENT, DBX_STYLE_DEMO_CONTROLS_DETACH_KEY, DBX_STYLE_DEMO_SECTIONS_COMPONENT, DBX_STYLE_DEMO_SECTIONS_POPOVER_KEY, type DbxStyleDemoControls } from '../playground/dbx.style.demo';\n\n/**\n * Configuration for the {@link DbxStyleDemoControlsService}, provided in the root environment via `provideDbxStyleDemo()`.\n */\nexport abstract class DbxStyleDemoControlsServiceConfig {\n /**\n * When false, the service does not forward its active style levers into the {@link DbxStyleService} as a body\n * supplement, so levers only repaint the playground subtree. Defaults to true.\n */\n abstract readonly applyStylesToApp?: Maybe<boolean>;\n}\n\n/**\n * Root-level state holder for the `<dbx-style-demo>` controls, implementing {@link DbxStyleDemoControls}.\n *\n * Owning the enabled-sections / active-template state here (rather than in the playground component) lets the controls\n * panel open through {@link DbxDetachService} so it survives navigation and is available app-wide. When a\n * {@link DbxStyleService} is available (and {@link DbxStyleDemoControlsServiceConfig.applyStylesToApp} is not false), the\n * active levers are forwarded into the style service as a body supplement so they repaint the entire app.\n *\n * This service is demo/debug-only and disposable — it is not a dbx-web core runtime primitive.\n */\n@Injectable()\nexport class DbxStyleDemoControlsService implements DbxStyleDemoControls {\n private readonly _registry = inject(DbxStyleDemoSectionRegistry);\n private readonly _toggles = inject<DbxStyleDemoTemplateToggle[]>(DBX_STYLE_DEMO_TEMPLATE_TOGGLE, { optional: true }) ?? [];\n private readonly _loaderService = inject(DbxStyleDemoStyleLoaderService);\n private readonly _detachService = inject(DbxDetachService);\n private readonly _popoverService = inject(DbxPopoverService, { optional: true });\n private readonly _controlsComponentClass = inject<Type<unknown>>(DBX_STYLE_DEMO_CONTROLS_COMPONENT, { optional: true });\n private readonly _sectionsComponentClass = inject<Type<unknown>>(DBX_STYLE_DEMO_SECTIONS_COMPONENT, { optional: true });\n private readonly _styleService = inject(DbxStyleService, { optional: true });\n private readonly _config = inject(DbxStyleDemoControlsServiceConfig, { optional: true });\n\n private readonly _sectionEnabledOverrides = signal<Map<DbxStyleDemoSectionId, boolean>>(new Map());\n private readonly _activeTemplateKeysOverride = signal<Maybe<Set<DbxStyleDemoStyleTemplateKey>>>(undefined);\n private readonly _defaultActiveTemplateKeys = signal<DbxStyleDemoStyleTemplateKey[]>([]);\n\n /**\n * True when a controls component is registered, gating the controls buttons.\n */\n readonly hasControlsSignal: Signal<boolean> = signal(this._controlsComponentClass != null);\n\n /**\n * True when a sections component is registered (and a popover service is available), gating the playground's\n * \"Sections\" button.\n */\n readonly hasSectionsSignal: Signal<boolean> = signal(this._sectionsComponentClass != null && this._popoverService != null);\n\n /**\n * All registered sections, unfiltered (the global controls list every section).\n */\n readonly sectionsSignal: Signal<DbxStyleDemoSection[]> = this._registry.sectionsSignal;\n\n readonly templateTogglesSignal: Signal<DbxStyleDemoTemplateToggle[]> = signal(this._toggles);\n\n readonly enabledIdsSignal = computed<Set<DbxStyleDemoSectionId>>(() => {\n const overrides = this._sectionEnabledOverrides();\n return new Set(\n this.sectionsSignal()\n .filter((section) => overrides.get(section.id) ?? section.defaultEnabled !== false)\n .map((section) => section.id)\n );\n });\n\n readonly activeTemplateKeysSignal = computed<Set<DbxStyleDemoStyleTemplateKey>>(() => {\n const _defaultActiveTemplateKeys = this._defaultActiveTemplateKeys();\n const override = this._activeTemplateKeysOverride();\n return override ?? new Set(_defaultActiveTemplateKeys);\n });\n\n readonly activeTemplateKeysArraySignal = computed<DbxStyleDemoStyleTemplateKey[]>(() => [...this.activeTemplateKeysSignal()]);\n\n constructor() {\n const styleService = this._styleService;\n\n if (styleService != null && this._config?.applyStylesToApp !== false) {\n const supplementSignal = computed<DbxStyleSupplement>(() => {\n const { style, classes } = this._loaderService.mergeTemplates([...this.activeTemplateKeysSignal()]);\n return { style, classes };\n });\n\n styleService.setSupplement(toObservable(supplementSignal));\n }\n }\n\n setSectionEnabled(id: DbxStyleDemoSectionId, enabled: boolean): void {\n const next = new Map(this._sectionEnabledOverrides());\n next.set(id, enabled);\n this._sectionEnabledOverrides.set(next);\n }\n\n setTemplateActive(key: DbxStyleDemoStyleTemplateKey, active: boolean): void {\n const next = new Set(this.activeTemplateKeysSignal());\n\n if (active) {\n // Levers sharing a non-null group are mutually exclusive (radio-like): deactivate the others before activating this one.\n const group = this._toggles.find((toggle) => toggle.templateName === key)?.group;\n\n if (group != null) {\n this._toggles.forEach((toggle) => {\n if (toggle.group === group && toggle.templateName !== key) {\n next.delete(toggle.templateName);\n }\n });\n }\n\n next.add(key);\n } else {\n next.delete(key);\n }\n\n this._activeTemplateKeysOverride.set(next);\n }\n\n /**\n * Seeds the default active template keys. Has no effect once the user has set an override via {@link setTemplateActive}.\n *\n * @param keys - The template keys to activate by default.\n */\n setDefaultActiveTemplates(keys: DbxStyleDemoStyleTemplateKey[]): void {\n this._defaultActiveTemplateKeys.set(keys);\n }\n\n /**\n * Opens the registered controls component in a draggable detached overlay. No-op when no controls component is registered.\n */\n openControls(): void {\n const componentClass = this._controlsComponentClass;\n\n if (componentClass != null) {\n this._detachService\n .init({\n key: DBX_STYLE_DEMO_CONTROLS_DETACH_KEY,\n componentClass,\n overlay: { width: '420px', height: '560px', isDraggable: true }\n })\n .detach();\n }\n }\n\n /**\n * Opens the registered sections component in a popover anchored to the given origin. No-op when no sections component\n * is registered (or no popover service is available). Symmetric with {@link openControls}.\n *\n * @param config - The popover configuration.\n * @param config.origin - The element the popover anchors to (the playground header's \"Sections\" button).\n */\n openSectionsPopover(config: { readonly origin: ElementRef }): void {\n const componentClass = this._sectionsComponentClass;\n const popoverService = this._popoverService;\n\n if (componentClass != null && popoverService != null) {\n popoverService.open({\n key: DBX_STYLE_DEMO_SECTIONS_POPOVER_KEY,\n origin: config.origin,\n componentClass\n });\n }\n }\n}\n","import { NgComponentOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, type Signal, computed, effect, inject, input, viewChild } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxButtonComponent, DbxFlexGroupDirective, DbxFlexSizeDirective } from '@dereekb/dbx-web';\nimport { type DbxStyleDemoSection } from '../section/section';\nimport { DbxStyleDemoSectionRegistry } from '../section/section.registry.service';\nimport { DbxStyleDemoStyleLoaderDirective } from '../style-loader/style.loader.directive';\nimport { DbxStyleDemoControlsService } from '../controls/controls.service';\nimport { type DbxStyleDemoConfig } from './dbx.style.demo';\n\n/**\n * Drop-in styling showcase for dbx-components apps.\n *\n * Renders the registered {@link DbxStyleDemoSection} components beneath a `[dbxStyleDemoStyleLoader]` host so they\n * paint purely through the host app's `--mat-sys-*` / `--dbx-*` tokens and `.dbx-*` utilities — the playground emits\n * no theme of its own. The \"Style controls\" button opens the shared {@link DbxStyleDemoControlsService} detach panel\n * (also reachable from the app toolbar); flipping a lever re-points CSS tokens that ripple through every rendered\n * section live via the custom-property cascade. The button only appears when a controls component is registered.\n *\n * Section enablement and active levers are held globally in {@link DbxStyleDemoControlsService}; this playground only\n * adds its own tag filtering on top of the global enabled state.\n *\n * This component is demo/debug-only and disposable — it is not a dbx-web core runtime primitive.\n *\n * @example\n * ```html\n * <dbx-style-demo [config]=\"{ defaultActiveTemplates: ['corner-shape-full'] }\"></dbx-style-demo>\n * ```\n */\n@Component({\n selector: 'dbx-style-demo',\n template: `\n <div class=\"dbx-style-demo dbx-flex-column dbx-p3\">\n <div class=\"dbx-flex-bar dbx-pb3\">\n <span class=\"dbx-text-title-large\">Style Demo</span>\n <span class=\"dbx-flex-fill\"></span>\n @if (hasSectionsSignal()) {\n <dbx-button class=\"dbx-button-spacer\" #sectionsButton stroked icon=\"tune\" text=\"Sections\" (buttonClick)=\"openSectionsPopover()\"></dbx-button>\n }\n @if (hasControlsSignal()) {\n <dbx-button stroked icon=\"palette\" text=\"Style controls\" (buttonClick)=\"openControls()\"></dbx-button>\n }\n </div>\n <div [dbxStyleDemoStyleLoader]=\"activeTemplatesSignal()\">\n <div dbxFlexGroup>\n @for (section of visibleSectionsSignal(); track section.id) {\n <div [dbxFlexSize]=\"3\">\n <mat-card appearance=\"outlined\" class=\"dbx-mb3\">\n <mat-card-content class=\"dbx-p3\">\n <ng-container *ngComponentOutlet=\"section.component\"></ng-container>\n </mat-card-content>\n </mat-card>\n </div>\n } @empty {\n <p class=\"dbx-hint\">No sections enabled.</p>\n }\n </div>\n </div>\n </div>\n `,\n standalone: true,\n imports: [NgComponentOutlet, MatCardModule, DbxButtonComponent, DbxFlexGroupDirective, DbxFlexSizeDirective, DbxStyleDemoStyleLoaderDirective],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DbxStyleDemoComponent {\n private readonly _registry = inject(DbxStyleDemoSectionRegistry);\n private readonly _controlsService = inject(DbxStyleDemoControlsService);\n\n /**\n * Playground configuration.\n */\n readonly config = input<Maybe<DbxStyleDemoConfig>>(undefined);\n\n /**\n * True when a controls component is registered, gating the \"Style controls\" button.\n */\n readonly hasControlsSignal: Signal<boolean> = this._controlsService.hasControlsSignal;\n\n /**\n * True when a sections component is registered, gating the \"Sections\" button (which opens the sections popover).\n */\n readonly hasSectionsSignal: Signal<boolean> = this._controlsService.hasSectionsSignal;\n\n /**\n * The \"Sections\" button element, used as the sections popover's anchor origin (present only while the button renders).\n */\n readonly sectionsButton = viewChild<string, Maybe<ElementRef>>('sectionsButton', { read: ElementRef });\n\n /**\n * The active template keys held by the controls service, applied to this playground's style-loader host.\n */\n readonly activeTemplatesSignal: Signal<string[]> = this._controlsService.activeTemplateKeysArraySignal;\n\n /**\n * The registry sections this playground instance considers, filtered by its configured tags (enablement stays global).\n */\n readonly sectionsSignal = computed<DbxStyleDemoSection[]>(() => {\n const tags = this.config()?.tags;\n const sections = this._registry.sectionsSignal();\n\n let result: DbxStyleDemoSection[];\n\n if (tags && tags.length > 0) {\n const tagSet = new Set(tags);\n result = sections.filter((section) => (section.tags ?? []).some((tag) => tagSet.has(tag)));\n } else {\n result = sections;\n }\n\n return result;\n });\n\n readonly visibleSectionsSignal = computed<DbxStyleDemoSection[]>(() => {\n const enabledIds = this._controlsService.enabledIdsSignal();\n return this.sectionsSignal().filter((section) => enabledIds.has(section.id));\n });\n\n /**\n * Seeds the controls service with this playground's configured default active templates.\n */\n protected readonly _seedDefaultTemplatesEffect = effect(() => {\n const defaults = this.config()?.defaultActiveTemplates;\n this._controlsService.setDefaultActiveTemplates(defaults ?? []);\n });\n\n openControls(): void {\n this._controlsService.openControls();\n }\n\n openSectionsPopover(): void {\n const origin = this.sectionsButton();\n\n if (origin != null) {\n this._controlsService.openSectionsPopover({ origin });\n }\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { type DbxThemeColor, DbxButtonComponent, DbxButtonSpacerDirective } from '@dereekb/dbx-web';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * One Material button appearance shown in the {@link DbxStyleDemoButtonsSectionComponent} grid.\n */\ntype DbxStyleDemoButtonVariant = 'basic' | 'stroked' | 'flat' | 'raised' | 'tonal';\n\n/**\n * Style-demo section showing every `dbx-button` appearance (basic, stroked, flat, raised, tonal) across the core\n * theme colors, plus an icon-only and a FAB button. Buttons paint their container colour and corner radius from the\n * `--mat-button-*` tokens, so they respond live to the playground's Shape levers and flip with light/dark.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-buttons\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary dbx-button appearances across theme colors, plus icon-only and FAB modes.\n * @dbxDocsUiExampleRelated button, icon-button\n */\n@Component({\n selector: 'dbx-style-demo-buttons-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent, DbxButtonComponent, DbxButtonSpacerDirective],\n template: `\n <dbx-docs-ui-example header=\"Buttons\" hint=\"dbx-button appearances across theme colors.\">\n <dbx-docs-ui-example-info>\n <p>\n Each row is one Material button appearance —\n <code>basic</code>\n ,\n <code>stroked</code>\n ,\n <code>flat</code>\n ,\n <code>raised</code>\n ,\n <code>tonal</code>\n — rendered across the core theme colors. Buttons draw their container colour and corner radius from the\n <code>--mat-button-*</code>\n tokens, so they respond live to the Shape levers and flip with light/dark.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div class=\"dbx-flex-column\">\n @for (variant of variants; track variant) {\n <div class=\"dbx-pb2\">\n <div class=\"dbx-text-label-small dbx-hint dbx-pb1\">{{ variant }}</div>\n <div class=\"dbx-flex\">\n @for (color of colors; track color; let last = $last) {\n <dbx-button [basic]=\"variant === 'basic'\" [stroked]=\"variant === 'stroked'\" [flat]=\"variant === 'flat'\" [raised]=\"variant === 'raised'\" [tonal]=\"variant === 'tonal'\" [color]=\"color\" [text]=\"color ?? 'default'\"></dbx-button>\n @if (!last) {\n <dbx-button-spacer></dbx-button-spacer>\n }\n }\n </div>\n </div>\n }\n <div class=\"dbx-flex\">\n <dbx-button iconOnly icon=\"palette\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button fab icon=\"add\"></dbx-button>\n </div>\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoButtonsSectionComponent {\n readonly variants: DbxStyleDemoButtonVariant[] = ['basic', 'stroked', 'flat', 'raised', 'tonal'];\n readonly colors: Maybe<DbxThemeColor>[] = [undefined, 'primary', 'accent', 'warn', 'success'];\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\nimport { DbxButtonComponent, DbxFlexGroupDirective, DbxFlexSizeDirective } from '@dereekb/dbx-web';\n\n/**\n * Style-demo section showing the three Material 3 card appearances (outlined, raised, filled) painted purely\n * from `--mat-sys-*` surface tokens, so they respond live to the playground's surface-tint and corner-shape levers.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-cards\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary Material 3 card appearances (outlined, elevated, filled) painted from system surface tokens.\n * @dbxDocsUiExampleRelated mat-card, dbx-card-box\n */\n@Component({\n selector: 'dbx-style-demo-cards-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent, MatCardModule, DbxButtonComponent, DbxFlexGroupDirective, DbxFlexSizeDirective],\n template: `\n <dbx-docs-ui-example header=\"Cards\" hint=\"Material 3 card appearances painted from system surface tokens.\">\n <dbx-docs-ui-example-info>\n <p>\n The three M3 card appearances —\n <code>outlined</code>\n ,\n <code>raised</code>\n , and\n <code>filled</code>\n — draw their container colour and shape from\n <code>--mat-sys-surface*</code>\n and the\n <code>--mat-card-*-container-shape</code>\n tokens. No hard-coded colours or radii, so they flip with light/dark and respond live to the surface-tint and corner-shape levers.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div dbxFlexGroup>\n <div [dbxFlexSize]=\"2\">\n <mat-card appearance=\"outlined\">\n <mat-card-content class=\"dbx-p3\">\n <div class=\"dbx-text-title-medium dbx-mb1\">Outlined</div>\n <p class=\"dbx-text-body-medium\">Surface with a hairline outline.</p>\n <dbx-button stroked text=\"Action\"></dbx-button>\n </mat-card-content>\n </mat-card>\n </div>\n <div [dbxFlexSize]=\"2\">\n <mat-card appearance=\"raised\">\n <mat-card-content class=\"dbx-p3\">\n <div class=\"dbx-text-title-medium dbx-mb1\">Raised</div>\n <p class=\"dbx-text-body-medium\">Surface lifted by a shadow.</p>\n <dbx-button flat text=\"Action\"></dbx-button>\n </mat-card-content>\n </mat-card>\n </div>\n <div [dbxFlexSize]=\"2\">\n <mat-card appearance=\"filled\">\n <mat-card-content class=\"dbx-p3\">\n <div class=\"dbx-text-title-medium dbx-mb1\">Filled</div>\n <p class=\"dbx-text-body-medium\">Tonal surface container.</p>\n <dbx-button basic text=\"Action\"></dbx-button>\n </mat-card-content>\n </mat-card>\n </div>\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoCardsSectionComponent {}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { DbxColorDirective, DbxColorService } from '@dereekb/dbx-web';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * A registered color template surfaced as a swatch in the {@link DbxStyleDemoColorTemplatesSectionComponent}.\n */\ninterface DbxStyleDemoColorTemplate {\n readonly key: string;\n readonly curated: boolean;\n}\n\n/**\n * Style-demo section that dumps every template registered with the host app's {@link DbxColorService} as a\n * `[dbxColor]` swatch, marking the curated ones. This makes both the built-in curated set and any app-seeded\n * templates visible in one place; when the service is not provided, an empty-state hint is shown instead.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-color-templates\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary Every registered DbxColorService template dumped as a [dbxColor] swatch, curated ones marked.\n * @dbxDocsUiExampleRelated color, color-service\n */\n@Component({\n selector: 'dbx-style-demo-color-templates-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent, DbxColorDirective],\n template: `\n <dbx-docs-ui-example header=\"Color Templates\" hint=\"Registered DbxColorService templates.\">\n <dbx-docs-ui-example-info>\n <p>\n A\n <code>DbxColorConfigTemplate</code>\n is a named, reusable color preset registered with\n <code>DbxColorService</code>\n — via\n <code>provideDbxStyleService(&#123; dbxColorServiceConfig: &#123; templates &#125; &#125;)</code>\n at the app root or\n <code>DbxColorService.register(...)</code>\n at runtime. Each swatch below is painted with\n <code>[dbxColor]=\"&#123; template: key &#125;\"</code>\n ; the\n <code>curated</code>\n ones also feed the deterministic name-derived color pickers.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n @if (templates.length > 0) {\n <div class=\"dbx-flex\" [style.flex-wrap]=\"'wrap'\">\n @for (template of templates; track template.key) {\n <div class=\"dbx-pr1 dbx-pb1\">\n <div class=\"dbx-p2 dbx-color-bg\" [dbxColor]=\"{ template: template.key }\">\n <span class=\"dbx-text-label-small\">{{ template.key }}</span>\n @if (template.curated) {\n <span class=\"dbx-text-label-small\">· curated</span>\n }\n </div>\n </div>\n }\n </div>\n } @else {\n <p class=\"dbx-hint\">No DbxColorService templates are registered (or the service is not provided by the host app).</p>\n }\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoColorTemplatesSectionComponent {\n private readonly _colorService = inject(DbxColorService, { optional: true });\n\n readonly templates: DbxStyleDemoColorTemplate[] = (this._colorService?.getAllRegisteredTemplateKeys() ?? []).map((key) => ({ key, curated: this._colorService?.getTemplate(key)?.curated === true }));\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type DbxColorTone, type DbxThemeColor, DBX_THEME_COLORS_EXTRA, DBX_THEME_COLORS_MAIN, DbxColorDirective, DbxFlexGroupDirective, DbxFlexSizeDirective } from '@dereekb/dbx-web';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * Style-demo section showing `[dbxColor]` themed backgrounds at full strength and as `[dbxColorTone]` tonal washes,\n * across the core and extra theme colors, so the color tokens are easy to compare under the host app's theme.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-color-tones\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary Themed [dbxColor] backgrounds at full strength and as [dbxColorTone] tonal washes.\n * @dbxDocsUiExampleRelated color, text-color, color-service\n */\n@Component({\n selector: 'dbx-style-demo-color-tones-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent, DbxColorDirective, DbxFlexGroupDirective, DbxFlexSizeDirective],\n template: `\n <dbx-docs-ui-example header=\"Color & Tones\" hint=\"Themed [dbxColor] backgrounds, full and tonal.\">\n <dbx-docs-ui-example-info>\n <p>\n <code>[dbxColor]</code>\n paints an element from a named theme color token; adding\n <code>[dbxColorTone]</code>\n (0–100) mixes it toward the surface for a muted tonal wash. Every core and extra theme color is shown below at full strength and at tones of 40, 18, and 8, so each token reads correctly under any theme.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div dbxFlexGroup>\n @for (color of colors; track color) {\n <div [dbxFlexSize]=\"3\">\n <div class=\"dbx-p3 dbx-mb1 dbx-color-bg\" [dbxColor]=\"color\">\n <span class=\"dbx-text-label-large\">{{ color }}</span>\n </div>\n @for (tone of tones; track tone) {\n <div class=\"dbx-p3 dbx-mb1 dbx-color-bg\" [dbxColor]=\"color\" [dbxColorTone]=\"tone\">\n <span class=\"dbx-text-label-large\">{{ color }} · tone {{ tone }}</span>\n </div>\n }\n </div>\n }\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoColorTonesSectionComponent {\n readonly colors: DbxThemeColor[] = [...DBX_THEME_COLORS_MAIN, ...DBX_THEME_COLORS_EXTRA];\n readonly tones: DbxColorTone[] = [40, 18, 8];\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { type ClickableAnchorLinkTree } from '@dereekb/dbx-core';\nimport { DbxAnchorListComponent, DbxBarDirective, DbxBarHeaderComponent, DbxButtonComponent, DbxButtonSpacerDirective, DbxPagebarComponent } from '@dereekb/dbx-web';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * Style-demo section showing the router-free navigation building blocks — `dbx-pagebar`, `dbx-bar` + `dbx-bar-header`,\n * and a nested `dbx-anchor-list` — painted from the host theme's bar / surface tokens. The anchors are click-only, so\n * this section needs no router; the route-bound `dbx-navbar` demo is contributed by the host app instead.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-navigation\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary Router-free navigation building blocks — pagebar, bar, bar-header, and a nested anchor list.\n * @dbxDocsUiExampleRelated pagebar, bar, bar-header, anchor-list\n */\n@Component({\n selector: 'dbx-style-demo-navigation-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent, DbxPagebarComponent, DbxBarDirective, DbxBarHeaderComponent, DbxAnchorListComponent, DbxButtonComponent, DbxButtonSpacerDirective],\n template: `\n <dbx-docs-ui-example header=\"Navigation\" hint=\"Router-free navigation building blocks.\">\n <dbx-docs-ui-example-info>\n <p>\n <code>dbx-pagebar</code>\n ,\n <code>dbx-bar</code>\n ,\n <code>dbx-bar-header</code>\n , and\n <code>dbx-anchor-list</code>\n all paint from the host theme's bar / surface tokens. The anchors here are click-only (no\n <code>ref</code>\n ), so the section is router-free; the route-bound\n <code>dbx-navbar</code>\n tab demo is the app-contributed Navbar section.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div class=\"dbx-flex-column\">\n <dbx-pagebar>\n <span left class=\"dbx-text-title-medium\">Page title</span>\n <span right>\n <dbx-button iconOnly icon=\"search\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button iconOnly icon=\"more_vert\"></dbx-button>\n </span>\n </dbx-pagebar>\n <dbx-bar-header class=\"dbx-pt2\" text=\"Section divider\" icon=\"folder\"></dbx-bar-header>\n <dbx-bar class=\"dbx-pt2\">\n <dbx-button stroked text=\"Cancel\"></dbx-button>\n <dbx-button-spacer></dbx-button-spacer>\n <dbx-button flat color=\"primary\" text=\"Save\"></dbx-button>\n </dbx-bar>\n <dbx-anchor-list class=\"dbx-pt2\" [anchors]=\"navAnchors\"></dbx-anchor-list>\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoNavigationSectionComponent {\n readonly navAnchors: ClickableAnchorLinkTree[] = [\n { title: 'Dashboard', icon: 'dashboard', onClick: () => undefined },\n {\n title: 'Settings',\n icon: 'settings',\n onClick: () => undefined,\n children: [\n { title: 'Profile', icon: 'person', onClick: () => undefined },\n { title: 'Security', icon: 'lock', onClick: () => undefined }\n ]\n },\n { title: 'Help', icon: 'help', onClick: () => undefined }\n ];\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxButtonComponent } from '@dereekb/dbx-web';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * A single step of the Material 3 corner-radius scale shown in the {@link DbxStyleDemoShapeScaleSectionComponent}.\n */\ninterface DbxStyleDemoShapeStep {\n readonly label: string;\n /**\n * The radius applied to the sample tile — a `var(--mat-sys-corner-*)` reference where a web token exists,\n * otherwise the literal px value from the spec.\n */\n readonly radius: string;\n /**\n * The `--mat-sys-corner-*` token backing this step, or `null` when the M3 spec step has no web token.\n */\n readonly webToken?: Maybe<string>;\n}\n\n/**\n * Style-demo section showing the full Material 3 corner-radius scale (per\n * https://m3.material.io/styles/shape/corner-radius-scale) as fixed-size tiles, flagging the spec steps that have no\n * web token. A live outlined card + stroked button below follow whichever Shape lever is active, demonstrating that\n * the levers override the component shape tokens (`--mat-card-*` / `--mat-button-*`), not `--mat-sys-corner-*`.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-shape-scale\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary The Material 3 corner-radius scale as fixed tiles, flagging spec steps with no web token.\n * @dbxDocsUiExampleRelated cards, button\n */\n@Component({\n selector: 'dbx-style-demo-shape-scale-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent, MatCardModule, DbxButtonComponent],\n template: `\n <dbx-docs-ui-example header=\"Shape Scale\" hint=\"The Material 3 corner-radius scale.\">\n <dbx-docs-ui-example-info>\n <p>\n The\n <a href=\"https://m3.material.io/styles/shape/corner-radius-scale\" target=\"_blank\" rel=\"noopener\">M3 corner-radius scale</a>\n runs from\n <code>none</code>\n to\n <code>full</code>\n . Each tile below is rounded by the matching\n <code>--mat-sys-corner-*</code>\n token; a few spec steps (large-increased, extra-large-increased, extra-extra-large) have no web token and use a literal value. The Shape levers in the controls do not change these\n <code>--mat-sys-corner-*</code>\n values — they re-point the per-component shape tokens (\n <code>--mat-card-*-container-shape</code>\n ,\n <code>--mat-button-*-container-shape</code>\n ), which is why the card and button below re-round while the tiles stay fixed.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div class=\"dbx-flex\" [style.flex-wrap]=\"'wrap'\">\n @for (step of steps; track step.label) {\n <div class=\"dbx-pr3 dbx-pb3\">\n <div [style.border-radius]=\"step.radius\" [style.width.px]=\"64\" [style.height.px]=\"64\" [style.background]=\"'var(--mat-sys-surface-container-high)'\" [style.border]=\"'1px solid var(--mat-sys-outline-variant)'\"></div>\n <div class=\"dbx-text-label-small dbx-pt1\">{{ step.label }}</div>\n @if (step.webToken) {\n <div class=\"dbx-text-label-small dbx-hint\">\n <code>{{ step.webToken }}</code>\n </div>\n } @else {\n <div class=\"dbx-text-label-small dbx-hint\">no web token</div>\n }\n </div>\n }\n </div>\n <div class=\"dbx-pt2\">\n <p class=\"dbx-hint\">The card and button below follow the active Shape lever:</p>\n <mat-card appearance=\"outlined\">\n <mat-card-content class=\"dbx-p3\">\n <div class=\"dbx-text-title-medium dbx-mb1\">Outlined card</div>\n <dbx-button stroked text=\"Action\"></dbx-button>\n </mat-card-content>\n </mat-card>\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoShapeScaleSectionComponent {\n readonly steps: DbxStyleDemoShapeStep[] = [\n { label: 'none', radius: 'var(--mat-sys-corner-none)', webToken: '--mat-sys-corner-none' },\n { label: 'extra-small', radius: 'var(--mat-sys-corner-extra-small)', webToken: '--mat-sys-corner-extra-small' },\n { label: 'small', radius: 'var(--mat-sys-corner-small)', webToken: '--mat-sys-corner-small' },\n { label: 'medium', radius: 'var(--mat-sys-corner-medium)', webToken: '--mat-sys-corner-medium' },\n { label: 'large', radius: 'var(--mat-sys-corner-large)', webToken: '--mat-sys-corner-large' },\n { label: 'large-increased', radius: '20px' },\n { label: 'extra-large', radius: 'var(--mat-sys-corner-extra-large)', webToken: '--mat-sys-corner-extra-large' },\n { label: 'extra-large-increased', radius: '32px' },\n { label: 'extra-extra-large', radius: '48px' },\n { label: 'full', radius: 'var(--mat-sys-corner-full)', webToken: '--mat-sys-corner-full' }\n ];\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * A single labeled swatch in the {@link DbxStyleDemoSurfacesSectionComponent} ramp.\n */\ninterface DbxStyleDemoSurface {\n readonly label: string;\n readonly background: string;\n readonly color: string;\n}\n\n/**\n * A single bordered outline sample in the {@link DbxStyleDemoSurfacesSectionComponent}.\n */\ninterface DbxStyleDemoOutline {\n readonly label: string;\n readonly border: string;\n}\n\n/**\n * Style-demo section showing the full Material 3 surface ramp (`surface-dim` → `surface-container-highest`, plus\n * `inverse-surface`) painted straight from the `--mat-sys-*` tokens, so the host theme's neutral palette and the\n * playground's surface-tint lever are easy to read under light and dark.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-surfaces\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary The Material 3 surface ramp painted from --mat-sys-surface* tokens, plus outline samples.\n * @dbxDocsUiExampleRelated cards, color\n */\n@Component({\n selector: 'dbx-style-demo-surfaces-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent],\n template: `\n <dbx-docs-ui-example header=\"Surfaces\" hint=\"The Material 3 surface ramp from system tokens.\">\n <dbx-docs-ui-example-info>\n <p>\n The M3 neutral ramp —\n <code>--mat-sys-surface-dim</code>\n through\n <code>--mat-sys-surface-container-highest</code>\n , plus the\n <code>inverse-surface</code>\n pair — is what every dbx surface (cards, menus, sheets) is layered from. Each swatch reads its colour straight from the token, so the surface-tint lever shifts the\n <code>surface</code>\n /\n <code>-container</code>\n /\n <code>-container-high</code>\n rows live, and all of them flip with light/dark.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div class=\"dbx-flex-column\">\n @for (surface of surfaces; track surface.label) {\n <div class=\"dbx-p2\" [style.background]=\"surface.background\" [style.color]=\"surface.color\">\n <span class=\"dbx-text-label-medium\">{{ surface.label }}</span>\n </div>\n }\n <p class=\"dbx-pt2\" [style.color]=\"'var(--mat-sys-on-surface-variant)'\">\n Secondary text uses\n <code>--mat-sys-on-surface-variant</code>\n against these surfaces.\n </p>\n <div class=\"dbx-flex\">\n @for (outline of outlines; track outline.label) {\n <div class=\"dbx-p2 dbx-pr3\" [style.border]=\"outline.border\">\n <span class=\"dbx-text-label-small\">{{ outline.label }}</span>\n </div>\n }\n </div>\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoSurfacesSectionComponent {\n readonly surfaces: DbxStyleDemoSurface[] = [\n { label: 'surface-dim', background: 'var(--mat-sys-surface-dim)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface', background: 'var(--mat-sys-surface)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface-bright', background: 'var(--mat-sys-surface-bright)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface-container-lowest', background: 'var(--mat-sys-surface-container-lowest)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface-container-low', background: 'var(--mat-sys-surface-container-low)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface-container', background: 'var(--mat-sys-surface-container)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface-container-high', background: 'var(--mat-sys-surface-container-high)', color: 'var(--mat-sys-on-surface)' },\n { label: 'surface-container-highest', background: 'var(--mat-sys-surface-container-highest)', color: 'var(--mat-sys-on-surface)' },\n { label: 'inverse-surface', background: 'var(--mat-sys-inverse-surface)', color: 'var(--mat-sys-inverse-on-surface)' }\n ];\n\n readonly outlines: DbxStyleDemoOutline[] = [\n { label: 'outline', border: '1px solid var(--mat-sys-outline)' },\n { label: 'outline-variant', border: '1px solid var(--mat-sys-outline-variant)' }\n ];\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { DbxDocsUiExampleComponent, DbxDocsUiExampleContentComponent, DbxDocsUiExampleInfoComponent } from '@dereekb/dbx-web/docs';\n\n/**\n * A single M3 typescale role rendered in the {@link DbxStyleDemoTypeRolesSectionComponent} sample.\n */\ninterface DbxStyleDemoTypeRole {\n readonly cssClass: string;\n readonly label: string;\n}\n\n/**\n * Style-demo section showing the Material 3 typescale roles via the `.dbx-text-<role>` utility classes, so the\n * host theme's type ramp (family, size, weight, tracking) is visible at a glance.\n *\n * @dbxDocsUiExample\n * @dbxDocsUiExampleSlug style-demo-type-roles\n * @dbxDocsUiExampleCategory style-demo\n * @dbxDocsUiExampleSummary Material 3 typescale roles rendered via the .dbx-text-<role> utility classes.\n * @dbxDocsUiExampleRelated text\n */\n@Component({\n selector: 'dbx-style-demo-type-roles-section',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DbxDocsUiExampleComponent, DbxDocsUiExampleInfoComponent, DbxDocsUiExampleContentComponent],\n template: `\n <dbx-docs-ui-example header=\"Type Roles\" hint=\"Material 3 typescale via .dbx-text-* utilities.\">\n <dbx-docs-ui-example-info>\n <p>\n The\n <code>.dbx-text-&lt;role&gt;</code>\n utilities map to the M3 typescale tokens (\n <code>--mat-sys-headline-large</code>\n ,\n <code>--mat-sys-title-medium</code>\n , …). They inherit the host theme's plain/brand families and weights, so a downstream app changing its typography ramp updates every role here without any local font rules.\n </p>\n </dbx-docs-ui-example-info>\n <dbx-docs-ui-example-content>\n <div class=\"dbx-flex-column\">\n @for (role of roles; track role.cssClass) {\n <div class=\"dbx-pb1\" [class]=\"role.cssClass\">{{ role.label }}</div>\n }\n </div>\n </dbx-docs-ui-example-content>\n </dbx-docs-ui-example>\n `\n})\nexport class DbxStyleDemoTypeRolesSectionComponent {\n readonly roles: DbxStyleDemoTypeRole[] = [\n { cssClass: 'dbx-text-display-small', label: 'Display Small' },\n { cssClass: 'dbx-text-headline-medium', label: 'Headline Medium' },\n { cssClass: 'dbx-text-title-large', label: 'Title Large' },\n { cssClass: 'dbx-text-body-large', label: 'Body Large — the quick brown fox jumps over the lazy dog.' },\n { cssClass: 'dbx-text-label-medium', label: 'Label Medium' }\n ];\n}\n","import { type EnvironmentProviders, type Provider, inject, makeEnvironmentProviders, provideEnvironmentInitializer } from '@angular/core';\nimport { type DbxStyleDemoSectionGroup } from '../section/section';\nimport { DBX_STYLE_DEMO_SECTION_GROUP } from '../section/section.providers';\nimport { type DbxStyleDemoStyleTemplate } from '../style-loader/style.template';\nimport { DbxStyleDemoStyleLoaderService } from '../style-loader/style.loader.service';\nimport { type DbxStyleDemoTemplateToggle } from '../template-toggle/template.toggle';\nimport { DBX_STYLE_DEMO_TEMPLATE_TOGGLE } from '../template-toggle/template.toggle.providers';\nimport { DbxStyleDemoButtonsSectionComponent } from './buttons.section.component';\nimport { DbxStyleDemoCardsSectionComponent } from './cards.section.component';\nimport { DbxStyleDemoColorTemplatesSectionComponent } from './color-templates.section.component';\nimport { DbxStyleDemoColorTonesSectionComponent } from './color-tones.section.component';\nimport { DbxStyleDemoNavigationSectionComponent } from './navigation.section.component';\nimport { DbxStyleDemoShapeScaleSectionComponent } from './shape-scale.section.component';\nimport { DbxStyleDemoSurfacesSectionComponent } from './surfaces.section.component';\nimport { DbxStyleDemoTypeRolesSectionComponent } from './type-roles.section.component';\n\n/**\n * The starter set of style-lever templates contributed by `@dereekb/dbx-web/style-demo`.\n *\n * The five `corner-shape-*` levers, the controls-only `pill-controls`, the component-scoped `button-corner-*` /\n * `list-corner-*` / `anchor-list-corner-*` levers, and `surface-tint` reference the disposable\n * `.dbx-style-demo-template-*` debug classes (emitted by the `dbx-style-demo-debug-classes()` SCSS mixin); the\n * `vivid-primary` `style` lever applies an inline CSS-token override directly. The `corner-shape-*` levers share the\n * `'Shape'` toggle group, so only one is active at a time; `pill-controls` (`'Controls'`), `button-corner-*`\n * (`'Button Shape'`), `list-corner-*` (`'List Shape'`) and `anchor-list-corner-*` (`'Anchor List Shape'`) each live in\n * their own group so they compose on top of a corner lever instead of radio-excluding it — their debug classes are\n * emitted after `corner-shape-*` / `pill-controls` so they win the shape tokens they share.\n */\nexport const DBX_WEB_STYLE_DEMO_TEMPLATES: DbxStyleDemoStyleTemplate[] = [\n { key: 'corner-shape-none', className: 'dbx-style-demo-template-corner-shape-none', label: 'Corners: none', curated: true },\n { key: 'corner-shape-extra-small', className: 'dbx-style-demo-template-corner-shape-extra-small', label: 'Corners: extra-small', curated: true },\n { key: 'corner-shape-medium', className: 'dbx-style-demo-template-corner-shape-medium', label: 'Corners: medium', curated: true },\n { key: 'corner-shape-large', className: 'dbx-style-demo-template-corner-shape-large', label: 'Corners: large', curated: true },\n { key: 'corner-shape-extra-large', className: 'dbx-style-demo-template-corner-shape-extra-large', label: 'Corners: extra-large', curated: true },\n { key: 'pill-controls', className: 'dbx-style-demo-template-pill-controls', label: 'Pill controls', curated: true },\n // Button-only corner levers ('Button Shape' group) — compose on top of a corner-shape-* lever.\n { key: 'button-corner-none', className: 'dbx-style-demo-template-button-corner-none', label: 'Button corners: none', curated: true },\n { key: 'button-corner-extra-small', className: 'dbx-style-demo-template-button-corner-extra-small', label: 'Button corners: extra-small', curated: true },\n { key: 'button-corner-medium', className: 'dbx-style-demo-template-button-corner-medium', label: 'Button corners: medium', curated: true },\n { key: 'button-corner-large', className: 'dbx-style-demo-template-button-corner-large', label: 'Button corners: large', curated: true },\n { key: 'button-corner-extra-large', className: 'dbx-style-demo-template-button-corner-extra-large', label: 'Button corners: extra-large', curated: true },\n // dbx-list-only corner levers ('List Shape' group) — re-round selection/standard + card list rows.\n { key: 'list-corner-none', className: 'dbx-style-demo-template-list-corner-none', label: 'List corners: none', curated: true },\n { key: 'list-corner-small', className: 'dbx-style-demo-template-list-corner-small', label: 'List corners: small', curated: true },\n { key: 'list-corner-medium', className: 'dbx-style-demo-template-list-corner-medium', label: 'List corners: medium', curated: true },\n { key: 'list-corner-large', className: 'dbx-style-demo-template-list-corner-large', label: 'List corners: large', curated: true },\n { key: 'list-corner-extra-large', className: 'dbx-style-demo-template-list-corner-extra-large', label: 'List corners: extra-large', curated: true },\n // dbx-anchor-list-only corner levers ('Anchor List Shape' group) — re-round nav/anchor list rows, independent of List Shape.\n { key: 'anchor-list-corner-none', className: 'dbx-style-demo-template-anchor-list-corner-none', label: 'Anchor list corners: none', curated: true },\n { key: 'anchor-list-corner-small', className: 'dbx-style-demo-template-anchor-list-corner-small', label: 'Anchor list corners: small', curated: true },\n { key: 'anchor-list-corner-medium', className: 'dbx-style-demo-template-anchor-list-corner-medium', label: 'Anchor list corners: medium', curated: true },\n { key: 'anchor-list-corner-large', className: 'dbx-style-demo-template-anchor-list-corner-large', label: 'Anchor list corners: large', curated: true },\n { key: 'anchor-list-corner-extra-large', className: 'dbx-style-demo-template-anchor-list-corner-extra-large', label: 'Anchor list corners: extra-large', curated: true },\n { key: 'surface-tint', className: 'dbx-style-demo-template-surface-tint', label: 'Surface tint', curated: true },\n // Inline-style POJO lever — an intentional demo override value, no debug class needed.\n { key: 'vivid-primary', style: { '--mat-sys-primary': '#ff0066', '--mat-sys-on-primary': '#ffffff' }, label: 'Vivid primary', curated: true }\n];\n\n/**\n * The controls levers exposed for {@link DBX_WEB_STYLE_DEMO_TEMPLATES}.\n *\n * The `corner-shape-*` levers share the `'Shape'` group (mutually exclusive); the component-scoped `button-corner-*`\n * (`'Button Shape'`), `list-corner-*` (`'List Shape'`) and `anchor-list-corner-*` (`'Anchor List Shape'`) levers are\n * mutually exclusive within their own groups but compose with `'Shape'` and `'Controls'`, letting a global corner\n * preset be overridden for just buttons, just `dbx-list` rows, or just `dbx-anchor-list` (nav) rows. `pill-controls`\n * (`'Controls'`), `surface-tint` and `vivid-primary` are independent toggles in their own groups.\n */\nexport const DBX_WEB_STYLE_DEMO_TEMPLATE_TOGGLES: DbxStyleDemoTemplateToggle[] = [\n { templateName: 'corner-shape-none', label: 'Corners: none', group: 'Shape' },\n { templateName: 'corner-shape-extra-small', label: 'Corners: extra-small', group: 'Shape' },\n { templateName: 'corner-shape-medium', label: 'Corners: medium', group: 'Shape' },\n { templateName: 'corner-shape-large', label: 'Corners: large', group: 'Shape' },\n { templateName: 'corner-shape-extra-large', label: 'Corners: extra-large', group: 'Shape' },\n { templateName: 'pill-controls', label: 'Pill controls', group: 'Controls' },\n { templateName: 'button-corner-none', label: 'Button corners: none', group: 'Button Shape' },\n { templateName: 'button-corner-extra-small', label: 'Button corners: extra-small', group: 'Button Shape' },\n { templateName: 'button-corner-medium', label: 'Button corners: medium', group: 'Button Shape' },\n { templateName: 'button-corner-large', label: 'Button corners: large', group: 'Button Shape' },\n { templateName: 'button-corner-extra-large', label: 'Button corners: extra-large', group: 'Button Shape' },\n { templateName: 'list-corner-none', label: 'List corners: none', group: 'List Shape' },\n { templateName: 'list-corner-small', label: 'List corners: small', group: 'List Shape' },\n { templateName: 'list-corner-medium', label: 'List corners: medium', group: 'List Shape' },\n { templateName: 'list-corner-large', label: 'List corners: large', group: 'List Shape' },\n { templateName: 'list-corner-extra-large', label: 'List corners: extra-large', group: 'List Shape' },\n { templateName: 'anchor-list-corner-none', label: 'Anchor list corners: none', group: 'Anchor List Shape' },\n { templateName: 'anchor-list-corner-small', label: 'Anchor list corners: small', group: 'Anchor List Shape' },\n { templateName: 'anchor-list-corner-medium', label: 'Anchor list corners: medium', group: 'Anchor List Shape' },\n { templateName: 'anchor-list-corner-large', label: 'Anchor list corners: large', group: 'Anchor List Shape' },\n { templateName: 'anchor-list-corner-extra-large', label: 'Anchor list corners: extra-large', group: 'Anchor List Shape' },\n { templateName: 'surface-tint', label: 'Surface tint', group: 'Surface' },\n { templateName: 'vivid-primary', label: 'Vivid primary', group: 'Color' }\n];\n\n/**\n * The `@dereekb/dbx-web/style-demo` section group.\n */\nexport const DBX_WEB_STYLE_DEMO_SECTION_GROUP: DbxStyleDemoSectionGroup = {\n libId: 'dbx-web',\n sections: [\n { id: 'dbx-web-cards', title: 'Cards', group: 'cards', tags: ['dbx-web', 'cards', 'surface'], component: DbxStyleDemoCardsSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-buttons', title: 'Buttons', group: 'buttons', tags: ['dbx-web', 'button'], component: DbxStyleDemoButtonsSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-surfaces', title: 'Surfaces', group: 'surface', tags: ['dbx-web', 'surface'], component: DbxStyleDemoSurfacesSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-color-tones', title: 'Color & Tones', group: 'color', tags: ['dbx-web', 'color'], component: DbxStyleDemoColorTonesSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-color-templates', title: 'Color Templates', group: 'color', tags: ['dbx-web', 'color'], component: DbxStyleDemoColorTemplatesSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-type-roles', title: 'Type Roles', group: 'type', tags: ['dbx-web', 'type'], component: DbxStyleDemoTypeRolesSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-shape-scale', title: 'Shape Scale', group: 'shape', tags: ['dbx-web', 'shape'], component: DbxStyleDemoShapeScaleSectionComponent, defaultEnabled: true },\n { id: 'dbx-web-navigation', title: 'Navigation', group: 'navigation', tags: ['dbx-web', 'navigation'], component: DbxStyleDemoNavigationSectionComponent, defaultEnabled: true }\n ]\n};\n\n/**\n * Registers the `@dereekb/dbx-web/style-demo` sections and style levers with the `<dbx-style-demo>` playground.\n *\n * Contributes the web section group and template toggles via their multi-providers, and seeds the\n * {@link DbxStyleDemoStyleLoaderService} with the matching templates via an environment initializer.\n *\n * Pair with `provideDbxStyleDemo()` (the shell).\n *\n * @returns EnvironmentProviders contributing the web sections and levers.\n *\n * @__NO_SIDE_EFFECTS__\n */\nexport function provideDbxWebStyleDemo(): EnvironmentProviders {\n const toggleProviders: Provider[] = DBX_WEB_STYLE_DEMO_TEMPLATE_TOGGLES.map((toggle) => ({\n provide: DBX_STYLE_DEMO_TEMPLATE_TOGGLE,\n useValue: toggle,\n multi: true\n }));\n\n return makeEnvironmentProviders([\n {\n provide: DBX_STYLE_DEMO_SECTION_GROUP,\n useValue: DBX_WEB_STYLE_DEMO_SECTION_GROUP,\n multi: true\n },\n ...toggleProviders,\n provideEnvironmentInitializer(() => {\n inject(DbxStyleDemoStyleLoaderService).register(DBX_WEB_STYLE_DEMO_TEMPLATES);\n })\n ]);\n}\n","import { type EnvironmentProviders, type Provider, makeEnvironmentProviders } from '@angular/core';\nimport { type Maybe } from '@dereekb/util';\nimport { DbxStyleDemoStyleLoaderService, DbxStyleDemoStyleLoaderServiceConfig } from './style-loader/style.loader.service';\nimport { type DbxStyleDemoStyleTemplate } from './style-loader/style.template';\nimport { DbxStyleDemoControlsService, DbxStyleDemoControlsServiceConfig } from './controls/controls.service';\n\n/**\n * Configuration for {@link provideDbxStyleDemo}.\n */\nexport interface ProvideDbxStyleDemoConfig {\n /**\n * Templates to seed the {@link DbxStyleDemoStyleLoaderService} with at construction time.\n *\n * Libraries typically register their own templates via their own provider (e.g. `provideDbxWebStyleDemo()`); this\n * app-level seed is for one-off templates an app defines directly.\n */\n readonly templates?: Maybe<DbxStyleDemoStyleTemplate[]>;\n /**\n * When false, the {@link DbxStyleDemoControlsService} does not forward its active style levers into the\n * `DbxStyleService` as a body supplement, so levers only repaint the playground subtree. Defaults to true.\n */\n readonly applyStylesToApp?: Maybe<boolean>;\n}\n\n/**\n * Provides the `<dbx-style-demo>` showcase shell: the {@link DbxStyleDemoStyleLoaderService}, the\n * {@link DbxStyleDemoControlsService}, and an optional seed config.\n *\n * Pair with `provideDbxWebStyleDemo()` (and the per-library plumbing providers) to register the sections and style levers.\n *\n * @param config - Optional configuration seeding the loader service with templates and toggling app-wide style forwarding.\n * @returns EnvironmentProviders for the showcase shell.\n *\n * @__NO_SIDE_EFFECTS__\n */\nexport function provideDbxStyleDemo(config?: ProvideDbxStyleDemoConfig): EnvironmentProviders {\n const providers: Provider[] = [DbxStyleDemoStyleLoaderService, DbxStyleDemoControlsService];\n\n if (config?.templates) {\n providers.push({\n provide: DbxStyleDemoStyleLoaderServiceConfig,\n useValue: { templates: config.templates }\n });\n }\n\n if (config?.applyStylesToApp != null) {\n providers.push({\n provide: DbxStyleDemoControlsServiceConfig,\n useValue: { applyStylesToApp: config.applyStylesToApp }\n });\n }\n\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -883,7 +883,7 @@ class DbxTableViewComponent {
883
883
  provide: DBX_TABLE_COLUMN_SIZE_PARENT_ELEMENT_REF_TOKEN,
884
884
  useExisting: ElementRef
885
885
  }
886
- ], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, isSignal: true }], ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <div class=\"dbx-table-view\" [ngClass]=\"tableCssClasses()\">\n <section class=\"dbx-table-view-table-wrapper\" dbxTableColumnSize #columnSize=\"dbxTableColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n </div>\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "color", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }, { kind: "directive", type: DbxTableColumnSizeDirective, selector: "[dbxTableColumnSize]", exportAs: ["dbxTableColumnSize"] }, { kind: "directive", type: DbxColumnSizeColumnDirective, selector: "[dbx-column-size-column]", inputs: ["dbx-column-size-column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
886
+ ], viewQueries: [{ propertyName: "table", first: true, predicate: MatTable, descendants: true, isSignal: true }], ngImport: i0, template: "<dbx-loading [context]=\"context\">\n <dbx-loading class=\"dbx-table-view-loading\" [linear]=\"true\" [context]=\"dataLoadingContext\"></dbx-loading>\n <div class=\"dbx-table-view\" [ngClass]=\"tableCssClasses()\">\n <section class=\"dbx-table-view-table-wrapper\" dbxTableColumnSize #columnSize=\"dbxTableColumnSize\" infinite-scroll [infiniteScrollDistance]=\"scrollDistance()\" [infiniteScrollThrottle]=\"throttleScroll()\" [scrollWindow]=\"false\" (scrolled)=\"onScrollDown()\">\n <table class=\"dbx-table-view-table\" mat-table [dataSource]=\"elementsSignal()\" [trackBy]=\"trackElementByFunctionSignal()\" multiTemplateDataRows>\n <!-- Groups -->\n <!-- Group Header column -->\n <ng-container matColumnDef=\"groupHeaderColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-header [group]=\"element.group\"></dbx-table-group-header>\n </td>\n </ng-container>\n\n <!-- Group Footer column -->\n <ng-container matColumnDef=\"groupFooterColumn\" [sticky]=\"true\">\n <td mat-cell [attr.colspan]=\"columnSize.visibleColumnsSignal()\" *matCellDef=\"let element\">\n <dbx-table-group-footer [group]=\"element.group\"></dbx-table-group-footer>\n </td>\n </ng-container>\n\n <!-- Items -->\n <!-- Header/Item column -->\n <ng-container [matColumnDef]=\"itemsColumnName\" [sticky]=\"true\">\n <th dbx-column-size-column=\"head\" mat-header-cell *matHeaderCellDef>\n <dbx-table-input-cell></dbx-table-input-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-header [item]=\"element.item\"></dbx-table-item-header>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-start-cell></dbx-table-summary-start-cell>\n </td>\n </ng-container>\n\n <!-- Column Definitions -->\n @for (column of innerColumnsSignal(); track column.columnName) {\n <ng-container [matColumnDef]=\"column.columnName\" [sticky]=\"false\">\n <th [dbx-column-size-column]=\"$index\" mat-header-cell *matHeaderCellDef>\n <dbx-table-column-header [column]=\"column\"></dbx-table-column-header>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-cell [item]=\"element.item\" [column]=\"column\"></dbx-table-item-cell>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-column-footer [column]=\"column\"></dbx-table-column-footer>\n </td>\n </ng-container>\n }\n\n <!-- Tail/Action column -->\n <ng-container [matColumnDef]=\"actionsColumnName\" [stickyEnd]=\"true\">\n <th dbx-column-size-column=\"tail\" mat-header-cell *matHeaderCellDef>\n <dbx-table-action-cell></dbx-table-action-cell>\n </th>\n <td mat-cell *matCellDef=\"let element\">\n <dbx-table-item-action [item]=\"element.item\"></dbx-table-item-action>\n </td>\n <td mat-footer-cell *matFooterCellDef>\n <dbx-table-summary-end-cell></dbx-table-summary-end-cell>\n </td>\n </ng-container>\n\n <!-- Table View -->\n <tr mat-header-row *matHeaderRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n\n <tr mat-row *matRowDef=\"let row; columns: ['groupHeaderColumn']; when: showGroupHeaderRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumnsSignal(); when: showItemRow\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['groupFooterColumn']; when: showGroupFooterRow\"></tr>\n\n <tr [ngClass]=\"{ 'dbx-hide': !showFooterRowSignal() }\" mat-footer-row *matFooterRowDef=\"displayedColumnsSignal(); sticky: true\"></tr>\n </table>\n </section>\n <!-- Full summary row -->\n @if (showFullSummaryRowSignal()) {\n <div class=\"mat-mdc-table dbx-table-view-full-summary-row-container\">\n <div class=\"mdc-data-table__cell mat-mdc-row\">\n <dbx-table-full-summary-row></dbx-table-full-summary-row>\n </div>\n </div>\n }\n </div>\n</dbx-loading>\n", dependencies: [{ kind: "component", type: DbxLoadingComponent, selector: "dbx-loading", inputs: ["padding", "show", "text", "mode", "diameter", "linear", "loading", "error", "context"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i1$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i1$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i1$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i1$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i1$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: DbxTableInputCellComponent, selector: "dbx-table-input-cell" }, { kind: "component", type: DbxTableItemHeaderComponent, selector: "dbx-table-item-header" }, { kind: "component", type: DbxTableItemCellComponent, selector: "dbx-table-item-cell", inputs: ["column"] }, { kind: "component", type: DbxTableItemActionComponent, selector: "dbx-table-item-action" }, { kind: "component", type: DbxTableActionCellComponent, selector: "dbx-table-action-cell" }, { kind: "component", type: DbxTableColumnHeaderComponent, selector: "dbx-table-column-header" }, { kind: "component", type: DbxTableColumnFooterComponent, selector: "dbx-table-column-footer" }, { kind: "component", type: DbxTableSummaryStartCellComponent, selector: "dbx-table-summary-start-cell" }, { kind: "component", type: DbxTableSummaryEndCellComponent, selector: "dbx-table-summary-end-cell" }, { kind: "component", type: DbxTableGroupHeaderComponent, selector: "dbx-table-group-header" }, { kind: "component", type: DbxTableGroupFooterComponent, selector: "dbx-table-group-footer" }, { kind: "component", type: DbxTableFullSummaryRowComponent, selector: "dbx-table-full-summary-row" }, { kind: "directive", type: DbxTableColumnSizeDirective, selector: "[dbxTableColumnSize]", exportAs: ["dbxTableColumnSize"] }, { kind: "directive", type: DbxColumnSizeColumnDirective, selector: "[dbx-column-size-column]", inputs: ["dbx-column-size-column"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
887
887
  }
888
888
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: DbxTableViewComponent, decorators: [{
889
889
  type: Component,