@dereekb/dbx-components-mcp 13.43.0 → 14.0.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.
@@ -10,7 +10,7 @@ var __export = (target, all) => {
10
10
  // packages/dbx-components-mcp/package.json
11
11
  var package_default = {
12
12
  name: "@dereekb/dbx-components-mcp",
13
- version: "13.43.0",
13
+ version: "14.0.0",
14
14
  type: "module",
15
15
  bin: {
16
16
  "dbx-components-mcp": "dbx-components-mcp.js"
@@ -21,8 +21,8 @@ var package_default = {
21
21
  "ts-morph": "^21.0.0"
22
22
  },
23
23
  peerDependencies: {
24
- "@dereekb/dbx-cli": "13.43.0",
25
- "@dereekb/util": "13.43.0"
24
+ "@dereekb/dbx-cli": "14.0.0",
25
+ "@dereekb/util": "14.0.0"
26
26
  }
27
27
  };
28
28
 
@@ -2139,7 +2139,15 @@ var FIREBASE_MODELS = [
2139
2139
  converter: "optionalFirestoreDate()",
2140
2140
  tsType: "Maybe<Date>",
2141
2141
  optional: true,
2142
- description: "The date the space was submitted, if it was. Its presence IS the lock."
2142
+ description: "The date the CURRENT submission was made, if the space is submitted. Its presence IS the lock."
2143
+ },
2144
+ {
2145
+ name: "fsat",
2146
+ longName: "firstSubmittedAt",
2147
+ converter: "optionalFirestoreDate()",
2148
+ tsType: "Maybe<Date>",
2149
+ optional: true,
2150
+ description: "The date the space was FIRST submitted, if it ever was."
2143
2151
  },
2144
2152
  {
2145
2153
  name: "cpat",
@@ -2156,6 +2164,46 @@ var FIREBASE_MODELS = [
2156
2164
  tsType: "Maybe<Date>",
2157
2165
  optional: true,
2158
2166
  description: "The date this space becomes eligible for the expiration sweep, if it expires at all."
2167
+ },
2168
+ {
2169
+ name: "lat",
2170
+ longName: "locksAt",
2171
+ converter: "optionalFirestoreDate()",
2172
+ tsType: "Maybe<Date>",
2173
+ optional: true,
2174
+ description: "The date reopening stops being possible \u2014 the instant the submission becomes FULLY LOCKED."
2175
+ },
2176
+ {
2177
+ name: "lby",
2178
+ longName: "lockedBy",
2179
+ converter: "optionalFirestoreUID()",
2180
+ tsType: "Maybe<FirebaseAuthUserId>",
2181
+ optional: true,
2182
+ description: "The user who locked the submission early, when a caller did rather than the deadline passing."
2183
+ },
2184
+ {
2185
+ name: "rc",
2186
+ longName: "reopenCount",
2187
+ converter: "firestoreNumber({ default: 0 })",
2188
+ tsType: "number",
2189
+ optional: false,
2190
+ description: "Monotonic count of times this space has been REOPENED after a submission."
2191
+ },
2192
+ {
2193
+ name: "rat",
2194
+ longName: "reopenedAt",
2195
+ converter: "optionalFirestoreDate()",
2196
+ tsType: "Maybe<Date>",
2197
+ optional: true,
2198
+ description: "The date the space was last reopened, if it ever was."
2199
+ },
2200
+ {
2201
+ name: "rby",
2202
+ longName: "reopenedBy",
2203
+ converter: "optionalFirestoreUID()",
2204
+ tsType: "Maybe<FirebaseAuthUserId>",
2205
+ optional: true,
2206
+ description: "The user who last reopened the space."
2159
2207
  }
2160
2208
  ],
2161
2209
  enums: [
@@ -2212,7 +2260,7 @@ var FIREBASE_MODELS = [
2212
2260
  description: "Processing state of a submitted {@link FormSpace}."
2213
2261
  }
2214
2262
  ],
2215
- detectionHints: ["t", "n", "ps", "m", "uc", "f", "pn", "pat", "uat", "sat", "cpat", "eat"],
2263
+ detectionHints: ["t", "n", "ps", "m", "uc", "f", "pn", "pat", "uat", "sat", "fsat", "cpat", "eat", "lat", "lby", "rc", "rat", "rby"],
2216
2264
  description: "A type-registered container for a client-side form: its in-progress JSON, its uploads, and its submission state.",
2217
2265
  modelGroup: "FormSpace",
2218
2266
  collectionKind: "root",
@@ -10121,6 +10169,7 @@ var PropertyAccumulator = class {
10121
10169
  constructor(context) {
10122
10170
  this.context = context;
10123
10171
  }
10172
+ context;
10124
10173
  entries = [];
10125
10174
  index = /* @__PURE__ */ new Map();
10126
10175
  add(entry) {
@@ -21510,7 +21559,6 @@ import { DbxActionConfirmConfig } from '@dereekb/dbx-web';
21510
21559
 
21511
21560
  @Component({
21512
21561
  selector: 'app-danger-zone',
21513
- standalone: true,
21514
21562
  imports: [DbxCardBoxComponent, DbxBarDirective, DbxButtonComponent, DbxActionDirective, DbxActionConfirmDirective],
21515
21563
  template: \`
21516
21564
  <dbx-card-box header="Danger zone" icon="warning">
@@ -21527,8 +21575,7 @@ import { DbxActionConfirmConfig } from '@dereekb/dbx-web';
21527
21575
  </dbx-button>
21528
21576
  </dbx-bar>
21529
21577
  </dbx-card-box>
21530
- \`,
21531
- changeDetection: ChangeDetectionStrategy.OnPush
21578
+ \`
21532
21579
  })
21533
21580
  export class DangerZoneComponent {
21534
21581
  readonly deleteAccountAction = /* DbxActionContextStoreSourceInstance<...> */ null;
@@ -21579,7 +21626,6 @@ interface Item {
21579
21626
 
21580
21627
  @Component({
21581
21628
  selector: 'app-items-page',
21582
- standalone: true,
21583
21629
  imports: [DbxSectionPageComponent, DbxListComponent, DbxListEmptyContentComponent, DbxPagebarComponent, DbxButtonComponent, DbxActionDirective],
21584
21630
  template: \`
21585
21631
  <dbx-section-page header="Items" icon="list" scroll="body">
@@ -21594,8 +21640,7 @@ interface Item {
21594
21640
  </dbx-list-empty-content>
21595
21641
  </dbx-list>
21596
21642
  </dbx-section-page>
21597
- \`,
21598
- changeDetection: ChangeDetectionStrategy.OnPush
21643
+ \`
21599
21644
  })
21600
21645
  export class ItemsPageComponent {
21601
21646
  readonly items$: Observable<ListLoadingState<Item>> = /* ... */ null!;
@@ -21641,7 +21686,6 @@ interface Item {
21641
21686
 
21642
21687
  @Component({
21643
21688
  selector: 'app-items-loaded',
21644
- standalone: true,
21645
21689
  imports: [CommonModule, DbxLoadingComponent, DbxListComponent, DbxListEmptyContentComponent, DbxIntroActionSectionComponent],
21646
21690
  template: \`
21647
21691
  <dbx-loading [state]="state$ | async" text="Loading items...">
@@ -21657,8 +21701,7 @@ interface Item {
21657
21701
  </dbx-list>
21658
21702
  </dbx-intro-action-section>
21659
21703
  </dbx-loading>
21660
- \`,
21661
- changeDetection: ChangeDetectionStrategy.OnPush
21704
+ \`
21662
21705
  })
21663
21706
  export class ItemsLoadedComponent {
21664
21707
  readonly state$: Observable<ListLoadingState<Item>> = /* ... */ null!;
@@ -21707,7 +21750,6 @@ import { MatInputModule } from '@angular/material/input';
21707
21750
 
21708
21751
  @Component({
21709
21752
  selector: 'app-account-settings',
21710
- standalone: true,
21711
21753
  imports: [DbxSectionComponent, DbxBarDirective, DbxButtonComponent, DbxButtonSpacerDirective, DbxActionDirective, ReactiveFormsModule, MatFormFieldModule, MatInputModule],
21712
21754
  template: \`
21713
21755
  <dbx-section header="Account" icon="person" hint="Update your profile">
@@ -21724,8 +21766,7 @@ import { MatInputModule } from '@angular/material/input';
21724
21766
  <dbx-button text="Cancel" stroked (btnClick)="cancel()"></dbx-button>
21725
21767
  </dbx-bar>
21726
21768
  </dbx-section>
21727
- \`,
21728
- changeDetection: ChangeDetectionStrategy.OnPush
21769
+ \`
21729
21770
  })
21730
21771
  export class AccountSettingsComponent {
21731
21772
  private readonly fb = inject(FormBuilder);
@@ -21762,7 +21803,6 @@ import { UIRouterModule } from '@uirouter/angular';
21762
21803
 
21763
21804
  @Component({
21764
21805
  selector: 'app-shell',
21765
- standalone: true,
21766
21806
  imports: [DbxSidenavPageComponent, DbxSidenavComponent, DbxContentPageDirective, UIRouterModule],
21767
21807
  template: \`
21768
21808
  <dbx-sidenav-page>
@@ -21771,8 +21811,7 @@ import { UIRouterModule } from '@uirouter/angular';
21771
21811
  <ui-view></ui-view>
21772
21812
  </div>
21773
21813
  </dbx-sidenav-page>
21774
- \`,
21775
- changeDetection: ChangeDetectionStrategy.OnPush
21814
+ \`
21776
21815
  })
21777
21816
  export class AppShellComponent {
21778
21817
  readonly navAnchors: ClickableAnchor[] = [
@@ -21823,7 +21862,6 @@ interface Member {
21823
21862
 
21824
21863
  @Component({
21825
21864
  selector: 'app-members-page',
21826
- standalone: true,
21827
21865
  imports: [CommonModule, MatButtonModule, MatIconModule, DbxSectionPageComponent, DbxTwoColumnComponent, DbxTwoColumnRightComponent, DbxListComponent],
21828
21866
  template: \`
21829
21867
  <dbx-section-page header="Members" icon="group" scroll="body">
@@ -21835,8 +21873,7 @@ interface Member {
21835
21873
  </dbx-two-column-right>
21836
21874
  </dbx-two-column>
21837
21875
  </dbx-section-page>
21838
- \`,
21839
- changeDetection: ChangeDetectionStrategy.OnPush
21876
+ \`
21840
21877
  })
21841
21878
  export class MembersPageComponent {
21842
21879
  readonly members$: Observable<ListLoadingState<Member>> = /* ... */ null!;
@@ -25365,6 +25402,96 @@ var RULE_CATALOG = [
25365
25402
  whenItApplies: "When a key on `<app>SystemStateStoredDataConverterMap` is neither a local `<NAME>_SYSTEM_STATE_TYPE` constant nor an imported identifier.",
25366
25403
  whenItDoesNotApply: "Keys imported from upstream packages \u2014 those are detected via `importedIdentifiers` and skipped.",
25367
25404
  canonicalFix: "Either declare the missing constant locally or import it from the upstream package that owns it."
25405
+ },
25406
+ {
25407
+ code: "WORKSPACE_DEPLOY_ENVIRONMENT_FILE_MISSING",
25408
+ source: "dbx_workspace_validate",
25409
+ severity: "error",
25410
+ title: "A configuration's file-replacement or esbuild-config path does not exist on disk",
25411
+ whatItFlags: "A configuration's file-replacement or esbuild-config path does not exist on disk.",
25412
+ whenItApplies: "When a `fileReplacements` `replace` / `with` path, or a configuration's `esbuildConfig` path, names a file that is absent from the working tree.",
25413
+ whenItDoesNotApply: "Generated files produced by an earlier target in the same pipeline \u2014 declare them as that target's `outputs` so the dependency is explicit, or the reference is genuinely broken.",
25414
+ canonicalFix: "Create the missing file or correct the path. An Angular build fails loudly on a missing replacement, but an esbuild `additionalProperties: true` schema accepts a bad path silently."
25415
+ },
25416
+ {
25417
+ code: "WORKSPACE_DEPLOY_ENVIRONMENT_FILE_UNREFERENCED",
25418
+ source: "dbx_workspace_validate",
25419
+ severity: "warning",
25420
+ title: "An `environment.<name>.ts` file exists but no build configuration references it",
25421
+ whatItFlags: "An `environment.<name>.ts` file exists but no build configuration references it.",
25422
+ whenItApplies: "When a file matching `environment.*.ts` sits in a project's `src/environments/` directory and appears in no configuration's `fileReplacements`, and no `esbuildConfig` file references it.",
25423
+ whenItDoesNotApply: "The base `environment.ts` (always the replacement source, never a target), and environment files imported directly by application code rather than swapped in by the build.",
25424
+ canonicalFix: "Add the configuration that consumes it, or delete the file. An unreachable environment file reads as a working deploy lane that does not exist \u2014 the file is edited, reviewed, and never compiled."
25425
+ },
25426
+ {
25427
+ code: "WORKSPACE_DEPLOY_HOSTING_TARGET_MISSING",
25428
+ source: "dbx_workspace_validate",
25429
+ severity: "error",
25430
+ title: "A deploy command targets a firebase hosting target that `firebase.json` does not declare",
25431
+ whatItFlags: "A deploy command targets a firebase hosting target that `firebase.json` does not declare.",
25432
+ whenItApplies: "When a deploy command runs `firebase deploy --only hosting:<target>` and `<target>` matches no `target` (or `site`) entry under `hosting` in `firebase.json`.",
25433
+ whenItDoesNotApply: "Workspaces that resolve hosting targets through `.firebaserc` target aliases the scanner does not read \u2014 verify manually if this misfires.",
25434
+ canonicalFix: "Add the hosting entry to `firebase.json`, or point the command at a declared target. `firebase deploy` fails on an unknown hosting target, so this breaks the lane outright."
25435
+ },
25436
+ {
25437
+ code: "WORKSPACE_DEPLOY_LANE_ASYMMETRIC",
25438
+ source: "dbx_workspace_validate",
25439
+ severity: "warning",
25440
+ title: "A deploy lane is wired on one side of the app/api pair but not the other",
25441
+ whatItFlags: "A deploy lane is wired on one side of the app/api pair but not the other.",
25442
+ whenItApplies: "When one project in the workspace declares `ci-deploy-<lane>` and a sibling project that declares at least one other `ci-deploy-*` lane does not declare this one.",
25443
+ whenItDoesNotApply: "Projects deliberately deployed on their own cadence, and workspaces with a single deployable project. Suppress by giving the sibling the lane, or accept the warning.",
25444
+ canonicalFix: "Add the missing `ci-deploy-<lane>` target to the sibling project. A lane present on the API but not the web app (or vice versa) deploys half an application and leaves the two halves on different builds."
25445
+ },
25446
+ {
25447
+ code: "WORKSPACE_DEPLOY_LANE_NO_ENVIRONMENT_SELECTION",
25448
+ source: "dbx_workspace_validate",
25449
+ severity: "error",
25450
+ title: "A deploy lane builds a configuration that selects no environment file",
25451
+ whatItFlags: "A deploy lane builds a configuration that selects no environment file.",
25452
+ whenItApplies: "When a `ci-deploy-<lane>` target builds a configuration that provides no environment-selection mechanism for its executor \u2014 no `fileReplacements` for an Angular `application` build, or no lane-specific `esbuildConfig` for an `@nx/esbuild:esbuild` build.",
25453
+ whenItDoesNotApply: "Non-deploy configurations such as `development`, which are expected to compile the base `environment.ts`. Only configurations reachable from a `ci-deploy-*` target are checked.",
25454
+ canonicalFix: "Add the `fileReplacements` entry (or the lane's `esbuildConfig`) to the configuration. Without it the lane deploys the unreplaced `environment.ts` \u2014 localhost URLs, dev credentials, and any developer-only function map \u2014 to a live project."
25455
+ },
25456
+ {
25457
+ code: "WORKSPACE_TARGET_OUTPUT_ESCAPES_ROOT",
25458
+ source: "dbx_workspace_validate",
25459
+ severity: "error",
25460
+ title: "A target's `outputs` entry resolves outside the workspace root",
25461
+ whatItFlags: "A target's `outputs` entry resolves outside the workspace root.",
25462
+ whenItApplies: 'When an `outputs` entry \u2014 after `{options.<name>}` substitution from the target\'s own options \u2014 resolves to a path above the workspace root. The common shape is `outputs: ["{options.reportsDirectory}"]` with a `../../`-relative option value.',
25463
+ whenItDoesNotApply: "Entries anchored by `{workspaceRoot}` or `{projectRoot}`, and entries whose `{options.<name>}` token has no resolvable value (skipped rather than guessed).",
25464
+ canonicalFix: 'Anchor the entry explicitly, e.g. `"{workspaceRoot}/coverage/{projectRoot}"`. Nx refuses to cache an output it cannot place inside the workspace and will report the task as flaky instead of failing loudly.'
25465
+ },
25466
+ {
25467
+ code: "WORKSPACE_TARGET_REF_CONFIGURATION_MISSING",
25468
+ source: "dbx_workspace_validate",
25469
+ severity: "error",
25470
+ title: "An `nx run <project>:<target>:<configuration>` reference names a configuration the target does not declare",
25471
+ whatItFlags: "An `nx run <project>:<target>:<configuration>` reference names a configuration the target does not declare.",
25472
+ whenItApplies: "Whenever a reference carries a configuration segment and the target's `configurations` map has no such key.",
25473
+ whenItDoesNotApply: "Targets that declare no `configurations` at all \u2014 Nx tolerates a configuration argument there, so it is not reported.",
25474
+ canonicalFix: "Rename the reference to a declared configuration (a `prod` / `production` mismatch is the usual cause), or add the configuration to the target. Nx does NOT error on an unknown configuration: `create-task-graph.js` silently substitutes `defaultConfiguration`, so a mismatch here ships whatever that default builds \u2014 and ships the base options with no configuration merged at all when no default is set."
25475
+ },
25476
+ {
25477
+ code: "WORKSPACE_TARGET_REF_PROJECT_MISSING",
25478
+ source: "dbx_workspace_validate",
25479
+ severity: "error",
25480
+ title: "An `nx run <project>:...` reference names a project that does not exist in the workspace",
25481
+ whatItFlags: "An `nx run <project>:...` reference names a project that does not exist in the workspace.",
25482
+ whenItApplies: "When a target reference in a `project.json` command, CI config, shell script, or npm script names a project with no matching entry in the workspace project graph.",
25483
+ whenItDoesNotApply: "References built from shell variables or CI interpolation the scanner cannot resolve \u2014 those are skipped rather than reported.",
25484
+ canonicalFix: "Create the project, or update the reference to the project's real name. A renamed or deleted project leaves these references behind and they only fail at deploy time."
25485
+ },
25486
+ {
25487
+ code: "WORKSPACE_TARGET_REF_TARGET_MISSING",
25488
+ source: "dbx_workspace_validate",
25489
+ severity: "error",
25490
+ title: "An `nx run <project>:<target>` reference names a target the project does not declare",
25491
+ whatItFlags: "An `nx run <project>:<target>` reference names a target the project does not declare.",
25492
+ whenItApplies: "When the referenced project exists but has no target by that name (after `nx.json` `targetDefaults` are accounted for).",
25493
+ whenItDoesNotApply: "Targets contributed by an inferred-target plugin the scanner does not evaluate \u2014 declare the plugin's targets explicitly if this misfires.",
25494
+ canonicalFix: "Add the target to the project, or point the reference at an existing one. This is the single most common way a CI lane silently stops doing anything."
25368
25495
  }
25369
25496
  ];
25370
25497
 
@@ -38745,11 +38872,12 @@ function matchKindForRadius(exact, raw) {
38745
38872
  if (exact.defaults.light === raw || exact.defaults.dark === raw) return "(exact-match design-system corner token).";
38746
38873
  return "(idiomatic full / pill radius \u2014 design system token).";
38747
38874
  }
38748
- function findExactRoleToken(registry, raw, role) {
38875
+ function findExactRoleToken(params) {
38876
+ const { registry, raw, role, isAllowed } = params;
38749
38877
  const candidates = registry.byRole.get(role) ?? [];
38750
38878
  let result;
38751
38879
  for (const entry of candidates) {
38752
- if (entry.defaults.light === raw || entry.defaults.dark === raw) {
38880
+ if ((entry.defaults.light === raw || entry.defaults.dark === raw) && (isAllowed === void 0 || isAllowed(entry))) {
38753
38881
  result = entry;
38754
38882
  break;
38755
38883
  }
@@ -38894,7 +39022,7 @@ var hardcodedRadius = (input) => {
38894
39022
  const colonIndex = input.scss.indexOf(":", match.index);
38895
39023
  if (colonIndex !== -1 && isInsideScssVarDeclaration(input.scss, colonIndex)) continue;
38896
39024
  const raw = match[1];
38897
- let exact = findExactRoleToken(input.tokenRegistry, raw, "radius");
39025
+ let exact = findExactRoleToken({ registry: input.tokenRegistry, raw, role: "radius" });
38898
39026
  if (exact === void 0 && FULL_RADIUS_SYNONYMS.has(raw)) {
38899
39027
  exact = input.tokenRegistry.findByCssVariable("--mat-sys-corner-full");
38900
39028
  }
@@ -38925,7 +39053,7 @@ var hardcodedShadow = (input) => {
38925
39053
  if (match.index === void 0) continue;
38926
39054
  const raw = match[1].trim();
38927
39055
  if (raw.startsWith("var(") || raw === "none") continue;
38928
- const exact = findExactRoleToken(input.tokenRegistry, raw, "elevation");
39056
+ const exact = findExactRoleToken({ registry: input.tokenRegistry, raw, role: "elevation" });
38929
39057
  const fix = exact === void 0 ? 'Hardcoded `box-shadow:` declarations should map to one of the `--mat-sys-level0..5` elevation tokens, or wrap the surface in `<dbx-content-box [elevate]="true">` so the shadow comes from the design system.' : `Replace this hardcoded shadow with \`box-shadow: var(${exact.cssVariable})\` or use \`<dbx-content-box [elevate]="true">\` to apply the elevation through the wrapper component.`;
38930
39058
  matches.push({
38931
39059
  id: "hardcoded-shadow",
@@ -38970,12 +39098,13 @@ var hardcodedHintColor = (input) => {
38970
39098
  return matches;
38971
39099
  };
38972
39100
  var HARDCODED_PADDING_RE = /(?:padding|margin)\s*(?:-(?:top|right|bottom|left))?\s*:\s*(\d+(?:\.\d+)?px)(?!\s*\))/gi;
39101
+ var DBX_PADDING_SCALE_RE = /^--dbx-padding-\d+$/;
38973
39102
  var hardcodedPadding = (input) => {
38974
39103
  const matches = [];
38975
39104
  for (const match of input.scss.matchAll(HARDCODED_PADDING_RE)) {
38976
39105
  if (match.index === void 0) continue;
38977
39106
  const raw = match[1];
38978
- const exact = findExactRoleToken(input.tokenRegistry, raw, "spacing");
39107
+ const exact = findExactRoleToken({ registry: input.tokenRegistry, raw, role: "spacing", isAllowed: (entry) => DBX_PADDING_SCALE_RE.test(entry.cssVariable) });
38979
39108
  if (exact !== void 0) {
38980
39109
  const utility = exact.utilityClasses?.[0];
38981
39110
  const fix = ["Replace `" + match[0].trim() + "` with `var(" + exact.cssVariable + ")`" + (utility === void 0 ? "" : ` (or use the \`${utility}\` utility class on the host element)`) + "."].join("\n");
@@ -45205,8 +45334,7 @@ import { type Work } from '@dereekb/rxjs';
45205
45334
  dbxActionForm
45206
45335
  [dbxFormSource]="settings$"></my-settings-form>
45207
45336
  </div>
45208
- \`,
45209
- standalone: true
45337
+ \`
45210
45338
  })
45211
45339
  export class SettingsAutosaveComponent {
45212
45340
  private readonly store = inject(SettingsDocumentStore);
@@ -45250,8 +45378,7 @@ import { type Work } from '@dereekb/rxjs';
45250
45378
  icon="delete"
45251
45379
  dbxActionButton></dbx-button>
45252
45380
  </ng-container>
45253
- \`,
45254
- standalone: true
45381
+ \`
45255
45382
  })
45256
45383
  export class DeleteAccountButtonComponent {
45257
45384
  private readonly accountStore = inject(AccountDocumentStore);
@@ -45315,8 +45442,7 @@ import { type Work } from '@dereekb/rxjs';
45315
45442
  <dbx-button text="Archive" dbxActionButton></dbx-button>
45316
45443
  </ng-container>
45317
45444
  </div>
45318
- \`,
45319
- standalone: true
45445
+ \`
45320
45446
  })
45321
45447
  export class ContentToolbarComponent {
45322
45448
  private readonly store = inject(ArticleDocumentStore);
@@ -45370,8 +45496,7 @@ import { type WorkUsingContext } from '@dereekb/rxjs';
45370
45496
  <dbx-button [raised]="true" text="Save" dbxActionButton></dbx-button>
45371
45497
  <dbx-error dbxActionError></dbx-error>
45372
45498
  </form>
45373
- \`,
45374
- standalone: true
45499
+ \`
45375
45500
  })
45376
45501
  export class EditProfilePageComponent {
45377
45502
  private readonly profileStore = inject(ProfileDocumentStore);
@@ -45441,8 +45566,7 @@ type ConsentDecision = { readonly outcome: 'approved'; readonly value: ConsentFo
45441
45566
  }
45442
45567
  </div>
45443
45568
  }
45444
- \`,
45445
- standalone: true
45569
+ \`
45446
45570
  })
45447
45571
  export class ConsentPageComponent {
45448
45572
  readonly defaults$ = this.store.defaults$;
@@ -45489,8 +45613,7 @@ import { DbxActionContextMachine } from '@dereekb/dbx-core';
45489
45613
  <div [dbxActionSource]="actionSource()">
45490
45614
  <child-component></child-component>
45491
45615
  </div>
45492
- \`,
45493
- standalone: true
45616
+ \`
45494
45617
  })
45495
45618
  export class ParentComponent {
45496
45619
  readonly machine = new DbxActionContextMachine<MyValue, MyResult>();
@@ -45510,8 +45633,7 @@ export class ParentComponent {
45510
45633
  <ng-container dbxAction dbxActionValue="hello">
45511
45634
  <dbx-button [raised]="true" text="Submit" dbxActionButton></dbx-button>
45512
45635
  </ng-container>
45513
- \`,
45514
- standalone: true
45636
+ \`
45515
45637
  })
45516
45638
  export class ChildComponent {}`
45517
45639
  },
@@ -45554,8 +45676,7 @@ import { type IsEqualFunction } from '@dereekb/rxjs';
45554
45676
  <my-tag-form #form></my-tag-form>
45555
45677
  <dbx-button text="Save" dbxActionButton></dbx-button>
45556
45678
  </div>
45557
- \`,
45558
- standalone: true
45679
+ \`
45559
45680
  })
45560
45681
  export class TagEditorComponent {
45561
45682
  private readonly store = inject(TagCollectionStore);
@@ -52884,7 +53005,7 @@ function relativeOrAbsolute(from, target) {
52884
53005
  const rel = relative20(from, target);
52885
53006
  if (rel.length === 0) return ".";
52886
53007
  if (rel.startsWith("..")) return target;
52887
- return rel.split("\\").join("/");
53008
+ return rel.replaceAll("\\", "/");
52888
53009
  }
52889
53010
 
52890
53011
  // packages/dbx-components-mcp/src/tools/mcp-config/init.ts
@@ -53013,19 +53134,19 @@ async function planRootConfig(input) {
53013
53134
  }
53014
53135
  function defaultOutFor(input) {
53015
53136
  const targetAbs = resolve66(input.snapshot.workspaceRoot, ".tmp/dbx-mcp", `${input.slug}.${clusterFilenameSegment(input.cluster)}.json`);
53016
- return relative21(dirname22(input.scanConfigPath), targetAbs).split("\\").join("/");
53137
+ return relative21(dirname22(input.scanConfigPath), targetAbs).replaceAll("\\", "/");
53017
53138
  }
53018
53139
  function resolveScanOut(scanConfigPath, out) {
53019
53140
  return resolve66(dirname22(scanConfigPath), out);
53020
53141
  }
53021
53142
  function relativeFromConfig(snapshot, absolute) {
53022
53143
  const configDir = snapshot.configPath === null ? snapshot.workspaceRoot : dirname22(snapshot.configPath);
53023
- return relative21(configDir, absolute).split("\\").join("/");
53144
+ return relative21(configDir, absolute).replaceAll("\\", "/");
53024
53145
  }
53025
53146
  function workspaceRel(workspaceRoot, absolute) {
53026
53147
  const rel = relative21(workspaceRoot, absolute);
53027
53148
  if (rel.length === 0) return ".";
53028
- return rel.split("\\").join("/");
53149
+ return rel.replaceAll("\\", "/");
53029
53150
  }
53030
53151
  function serializeJson(value) {
53031
53152
  return `${JSON.stringify(value, null, 2)}
@@ -22,7 +22,7 @@
22
22
  "optional": false
23
23
  }
24
24
  ],
25
- "returns": "A factory function that produces a clamped {@link DateCellRangeWithRange } from optional start/end input.",
25
+ "returns": "A factory function that produces a clamped {@link DateCellRangeWithRange} from optional start/end input.",
26
26
  "tags": [
27
27
  "date",
28
28
  "cell",
@@ -55,7 +55,7 @@
55
55
  {
56
56
  "name": "config",
57
57
  "type": "DateCellTiming | DateCallIndexRangeFromDatesFactoryConfig",
58
- "description": "- A {@link DateCellTiming } or full factory configuration.",
58
+ "description": "- A {@link DateCellTiming} or full factory configuration.",
59
59
  "optional": false
60
60
  },
61
61
  {
@@ -65,7 +65,7 @@
65
65
  "optional": true
66
66
  }
67
67
  ],
68
- "returns": "A clamped {@link DateCellRangeWithRange } derived from the timing and input.",
68
+ "returns": "A clamped {@link DateCellRangeWithRange} derived from the timing and input.",
69
69
  "tags": [
70
70
  "date",
71
71
  "cell",
@@ -104,7 +104,7 @@
104
104
  "optional": true
105
105
  }
106
106
  ],
107
- "returns": "A {@link DateCellRangeWithRange } covering only the completed day indexes.",
107
+ "returns": "A {@link DateCellRangeWithRange} covering only the completed day indexes.",
108
108
  "tags": [
109
109
  "date",
110
110
  "cell",
@@ -177,7 +177,7 @@
177
177
  "optional": false
178
178
  }
179
179
  ],
180
- "returns": "A {@link DateCellIndexRange } with exclusive `maxIndex`.",
180
+ "returns": "A {@link DateCellIndexRange} with exclusive `maxIndex`.",
181
181
  "tags": [
182
182
  "date",
183
183
  "cell",
@@ -212,7 +212,7 @@
212
212
  "optional": false
213
213
  }
214
214
  ],
215
- "returns": "A {@link DateCellRangeWithRange } with inclusive `to`.",
215
+ "returns": "A {@link DateCellRangeWithRange} with inclusive `to`.",
216
216
  "tags": [
217
217
  "date",
218
218
  "cell",
@@ -259,7 +259,7 @@
259
259
  "optional": true
260
260
  }
261
261
  ],
262
- "returns": "A {@link DateCellIndexRange } representing the computed index bounds.",
262
+ "returns": "A {@link DateCellIndexRange} representing the computed index bounds.",
263
263
  "tags": [
264
264
  "date",
265
265
  "cell",
@@ -365,7 +365,7 @@
365
365
  "optional": false
366
366
  }
367
367
  ],
368
- "returns": "A factory function that expands date cell blocks into {@link DateCellDurationSpan } arrays.",
368
+ "returns": "A factory function that expands date cell blocks into {@link DateCellDurationSpan} arrays.",
369
369
  "tags": [
370
370
  "date",
371
371
  "cell",
@@ -401,7 +401,7 @@
401
401
  "optional": false
402
402
  }
403
403
  ],
404
- "returns": "A factory that computes {@link DateCellDayTimingInfo } for any date or day index.",
404
+ "returns": "A factory that computes {@link DateCellDayTimingInfo} for any date or day index.",
405
405
  "tags": [
406
406
  "date",
407
407
  "cell",
@@ -438,7 +438,7 @@
438
438
  "optional": false
439
439
  }
440
440
  ],
441
- "returns": "True if the input is a {@link DateCellTimingRelativeIndexFactory }.",
441
+ "returns": "True if the input is a {@link DateCellTimingRelativeIndexFactory}.",
442
442
  "tags": [
443
443
  "date",
444
444
  "cell",
@@ -810,7 +810,7 @@
810
810
  "optional": false
811
811
  }
812
812
  ],
813
- "returns": "A new {@link FullDateCellTiming } with the requested aspects replaced.",
813
+ "returns": "A new {@link FullDateCellTiming} with the requested aspects replaced.",
814
814
  "tags": [
815
815
  "date",
816
816
  "cell",
@@ -1773,8 +1773,8 @@
1773
1773
  "required": false
1774
1774
  },
1775
1775
  {
1776
- "name": "description",
1777
- "type": "string",
1776
+ "name": "hint",
1777
+ "type": "DynamicText",
1778
1778
  "description": "",
1779
1779
  "required": false
1780
1780
  },
@@ -108,12 +108,6 @@
108
108
  "description": "",
109
109
  "required": false
110
110
  },
111
- {
112
- "name": "customButtonColor",
113
- "type": "Maybe<string>",
114
- "description": "",
115
- "required": false
116
- },
117
111
  {
118
112
  "name": "customTextColor",
119
113
  "type": "Maybe<string>",
@@ -31,7 +31,7 @@
31
31
  "className": "DocActionFormWithSecondaryFormComponent",
32
32
  "role": "form",
33
33
  "selector": "doc-action-form-with-secondary-form",
34
- "classSource": "@Component({\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n selector: 'doc-action-form-with-secondary-form',\n providers: dbxForgeFormComponentProviders(),\n standalone: true,\n imports: [DbxForgeFormComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DocActionFormWithSecondaryFormComponent extends AbstractSyncForgeFormDirective<DocActionFormWithSecondaryFormValue> {\n readonly formConfig: FormConfig = {\n fields: [\n dbxForgeTextField({\n key: 'reason',\n label: 'Reason',\n required: true,\n description: 'The Approve handler receives this value via dbxActionForm. Type something to enable Approve.'\n })\n ]\n } as FormConfig;\n}"
34
+ "classSource": "@Component({\n template: DBX_FORGE_FORM_COMPONENT_TEMPLATE,\n selector: 'doc-action-form-with-secondary-form',\n providers: dbxForgeFormComponentProviders(),\n imports: [DbxForgeFormComponentImportsModule]\n})\nexport class DocActionFormWithSecondaryFormComponent extends AbstractSyncForgeFormDirective<DocActionFormWithSecondaryFormValue> {\n readonly formConfig: FormConfig = {\n fields: [\n dbxForgeTextField({\n key: 'reason',\n label: 'Reason',\n required: true,\n hint: 'The Approve handler receives this value via dbxActionForm. Type something to enable Approve.'\n })\n ]\n } as FormConfig;\n}"
35
35
  },
36
36
  {
37
37
  "kind": "interface",
@@ -72,21 +72,21 @@
72
72
  "className": "DocManualActionsItemListComponent",
73
73
  "role": "list",
74
74
  "selector": "doc-manual-actions-item-list",
75
- "classSource": "@Component({\n selector: 'doc-manual-actions-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-auto-height dbx-list-no-hover-effects dbx-list-no-item-padding'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocManualActionsItemListComponent extends AbstractDbxSelectionListWrapperDirective<ManualActionItemValue> {\n constructor() {\n super({\n componentClass: DocManualActionsItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
75
+ "classSource": "@Component({\n selector: 'doc-manual-actions-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-auto-height dbx-list-no-hover-effects dbx-list-no-item-padding'\n }\n})\nexport class DocManualActionsItemListComponent extends AbstractDbxSelectionListWrapperDirective<ManualActionItemValue> {\n constructor() {\n super({\n componentClass: DocManualActionsItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
76
76
  },
77
77
  {
78
78
  "kind": "component",
79
79
  "className": "DocManualActionsItemListViewComponent",
80
80
  "role": "view",
81
81
  "selector": "doc-manual-actions-item-list-view",
82
- "classSource": "@Component({\n selector: 'doc-manual-actions-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocManualActionsItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocManualActionsItemListViewComponent extends AbstractDbxSelectionListViewDirective<ManualActionItemValue> {\n // Drop `icon` (rows render no tile) and `anchor` (button owns it; row stays non-clickable).\n readonly config: DbxSelectionValueListViewConfig<ManualActionItemValueWithSelection> = {\n componentClass: DocManualActionsItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined, anchor: undefined })))\n };\n}"
82
+ "classSource": "@Component({\n selector: 'doc-manual-actions-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocManualActionsItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocManualActionsItemListViewComponent extends AbstractDbxSelectionListViewDirective<ManualActionItemValue> {\n // Drop `icon` (rows render no tile) and `anchor` (button owns it; row stays non-clickable).\n readonly config: DbxSelectionValueListViewConfig<ManualActionItemValueWithSelection> = {\n componentClass: DocManualActionsItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined, anchor: undefined })))\n };\n}"
83
83
  },
84
84
  {
85
85
  "kind": "component",
86
86
  "className": "DocManualActionsItemListViewItemComponent",
87
87
  "role": "item",
88
88
  "selector": "doc-manual-actions-item-list-view-item",
89
- "classSource": "@Component({\n selector: 'doc-manual-actions-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium\">{{ title }}</span>\n <span class=\"item-details\">{{ detail }}</span>\n </div>\n <div class=\"item-right\">\n <dbx-anchor [anchor]=\"anchor\">\n @if (buttonRaised) {\n <dbx-button [raised]=\"true\" color=\"primary\" class=\"dbx-nowrap\" [text]=\"buttonText\"></dbx-button>\n } @else {\n <dbx-button [stroked]=\"true\" class=\"dbx-nowrap\" [text]=\"buttonText\"></dbx-button>\n }\n </dbx-anchor>\n </div>\n </div>\n `,\n imports: [MatButtonModule, DbxButtonComponent, DbxAnchorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocManualActionsItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<ManualActionItemValue> {\n get title(): string {\n return this.itemValue.title;\n }\n\n get detail(): string {\n return this.itemValue.detail;\n }\n\n get buttonText(): string {\n return this.itemValue.buttonText;\n }\n\n get buttonRaised(): Maybe<boolean> {\n return this.itemValue.buttonRaised;\n }\n\n get anchor(): Maybe<ClickableAnchor> {\n return this.itemValue.anchor;\n }\n}"
89
+ "classSource": "@Component({\n selector: 'doc-manual-actions-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium\">{{ title }}</span>\n <span class=\"item-details\">{{ detail }}</span>\n </div>\n <div class=\"item-right\">\n <dbx-anchor [anchor]=\"anchor\">\n @if (buttonRaised) {\n <dbx-button [raised]=\"true\" color=\"primary\" class=\"dbx-nowrap\" [text]=\"buttonText\"></dbx-button>\n } @else {\n <dbx-button [stroked]=\"true\" class=\"dbx-nowrap\" [text]=\"buttonText\"></dbx-button>\n }\n </dbx-anchor>\n </div>\n </div>\n `,\n imports: [MatButtonModule, DbxButtonComponent, DbxAnchorComponent]\n})\nexport class DocManualActionsItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<ManualActionItemValue> {\n get title(): string {\n return this.itemValue.title;\n }\n\n get detail(): string {\n return this.itemValue.detail;\n }\n\n get buttonText(): string {\n return this.itemValue.buttonText;\n }\n\n get buttonRaised(): Maybe<boolean> {\n return this.itemValue.buttonRaised;\n }\n\n get anchor(): Maybe<ClickableAnchor> {\n return this.itemValue.anchor;\n }\n}"
90
90
  },
91
91
  {
92
92
  "kind": "interface",
@@ -128,21 +128,21 @@
128
128
  "className": "DocWorthKnowingItemListComponent",
129
129
  "role": "list",
130
130
  "selector": "doc-worth-knowing-item-list",
131
- "classSource": "@Component({\n selector: 'doc-worth-knowing-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-no-item-padding'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocWorthKnowingItemListComponent extends AbstractDbxSelectionListWrapperDirective<WorthKnowingItemValue> {\n constructor() {\n super({\n componentClass: DocWorthKnowingItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
131
+ "classSource": "@Component({\n selector: 'doc-worth-knowing-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-no-item-padding'\n }\n})\nexport class DocWorthKnowingItemListComponent extends AbstractDbxSelectionListWrapperDirective<WorthKnowingItemValue> {\n constructor() {\n super({\n componentClass: DocWorthKnowingItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
132
132
  },
133
133
  {
134
134
  "kind": "component",
135
135
  "className": "DocWorthKnowingItemListViewComponent",
136
136
  "role": "view",
137
137
  "selector": "doc-worth-knowing-item-list-view",
138
- "classSource": "@Component({\n selector: 'doc-worth-knowing-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocWorthKnowingItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocWorthKnowingItemListViewComponent extends AbstractDbxSelectionListViewDirective<WorthKnowingItemValue> {\n // Drop `icon` (template paints its own tile) and `anchor` (button owns it; row stays non-clickable).\n readonly config: DbxSelectionValueListViewConfig<WorthKnowingItemValueWithSelection> = {\n componentClass: DocWorthKnowingItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined, anchor: undefined })))\n };\n}"
138
+ "classSource": "@Component({\n selector: 'doc-worth-knowing-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocWorthKnowingItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocWorthKnowingItemListViewComponent extends AbstractDbxSelectionListViewDirective<WorthKnowingItemValue> {\n // Drop `icon` (template paints its own tile) and `anchor` (button owns it; row stays non-clickable).\n readonly config: DbxSelectionValueListViewConfig<WorthKnowingItemValueWithSelection> = {\n componentClass: DocWorthKnowingItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined, anchor: undefined })))\n };\n}"
139
139
  },
140
140
  {
141
141
  "kind": "component",
142
142
  "className": "DocWorthKnowingItemListViewItemComponent",
143
143
  "role": "item",
144
144
  "selector": "doc-worth-knowing-item-list-view-item",
145
- "classSource": "@Component({\n selector: 'doc-worth-knowing-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-two-line-item dbx-list-two-line-item-with-icon\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium\">{{ title }}</span>\n <span class=\"item-details\">{{ detail }}</span>\n </div>\n @if (buttonText) {\n <div class=\"item-right\">\n <dbx-anchor [anchor]=\"anchor\">\n <dbx-button [stroked]=\"true\" class=\"dbx-nowrap\" [text]=\"buttonText\"></dbx-button>\n </dbx-anchor>\n </div>\n }\n </div>\n `,\n imports: [MatButtonModule, DbxColorDirective, DbxIconTileComponent, DbxButtonComponent, DbxAnchorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocWorthKnowingItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<WorthKnowingItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get detail(): string {\n return this.itemValue.detail;\n }\n\n get buttonText(): Maybe<string> {\n return this.itemValue.buttonText;\n }\n\n get anchor(): Maybe<ClickableAnchor> {\n return this.itemValue.anchor;\n }\n}"
145
+ "classSource": "@Component({\n selector: 'doc-worth-knowing-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-two-line-item dbx-list-two-line-item-with-icon\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium\">{{ title }}</span>\n <span class=\"item-details\">{{ detail }}</span>\n </div>\n @if (buttonText) {\n <div class=\"item-right\">\n <dbx-anchor [anchor]=\"anchor\">\n <dbx-button [stroked]=\"true\" class=\"dbx-nowrap\" [text]=\"buttonText\"></dbx-button>\n </dbx-anchor>\n </div>\n }\n </div>\n `,\n imports: [MatButtonModule, DbxColorDirective, DbxIconTileComponent, DbxButtonComponent, DbxAnchorComponent]\n})\nexport class DocWorthKnowingItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<WorthKnowingItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get detail(): string {\n return this.itemValue.detail;\n }\n\n get buttonText(): Maybe<string> {\n return this.itemValue.buttonText;\n }\n\n get anchor(): Maybe<ClickableAnchor> {\n return this.itemValue.anchor;\n }\n}"
146
146
  },
147
147
  {
148
148
  "kind": "interface",
@@ -241,21 +241,21 @@
241
241
  "className": "DocAnchorButtonItemListComponent",
242
242
  "role": "list",
243
243
  "selector": "doc-anchor-button-item-list",
244
- "classSource": "@Component({\n selector: 'doc-anchor-button-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocAnchorButtonItemListComponent extends AbstractDbxSelectionListWrapperDirective<AnchorButtonItemValue> {\n constructor() {\n super({\n componentClass: DocAnchorButtonItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
244
+ "classSource": "@Component({\n selector: 'doc-anchor-button-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n }\n})\nexport class DocAnchorButtonItemListComponent extends AbstractDbxSelectionListWrapperDirective<AnchorButtonItemValue> {\n constructor() {\n super({\n componentClass: DocAnchorButtonItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
245
245
  },
246
246
  {
247
247
  "kind": "component",
248
248
  "className": "DocAnchorButtonItemListViewComponent",
249
249
  "role": "view",
250
250
  "selector": "doc-anchor-button-item-list-view",
251
- "classSource": "@Component({\n selector: 'doc-anchor-button-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocAnchorButtonItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocAnchorButtonItemListViewComponent extends AbstractDbxSelectionListViewDirective<AnchorButtonItemValue> {\n // Drop `icon` (template paints its own tile) and `anchor` (button owns it; row stays non-clickable).\n readonly config: DbxSelectionValueListViewConfig<AnchorButtonItemValueWithSelection> = {\n componentClass: DocAnchorButtonItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined, anchor: undefined })))\n };\n}"
251
+ "classSource": "@Component({\n selector: 'doc-anchor-button-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocAnchorButtonItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocAnchorButtonItemListViewComponent extends AbstractDbxSelectionListViewDirective<AnchorButtonItemValue> {\n // Drop `icon` (template paints its own tile) and `anchor` (button owns it; row stays non-clickable).\n readonly config: DbxSelectionValueListViewConfig<AnchorButtonItemValueWithSelection> = {\n componentClass: DocAnchorButtonItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined, anchor: undefined })))\n };\n}"
252
252
  },
253
253
  {
254
254
  "kind": "component",
255
255
  "className": "DocAnchorButtonItemListViewItemComponent",
256
256
  "role": "item",
257
257
  "selector": "doc-anchor-button-item-list-view-item",
258
- "classSource": "@Component({\n selector: 'doc-anchor-button-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded-thick dbx-list-two-line-item dbx-list-two-line-item-with-icon\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium dbx-pb1\">{{ title }}</span>\n <span class=\"item-details dbx-pb2\">{{ progress }} of {{ total }} complete</span>\n <mat-progress-bar mode=\"determinate\" [value]=\"progressPercent\"></mat-progress-bar>\n </div>\n <div class=\"item-right\">\n <dbx-anchor [anchor]=\"anchor\">\n <button mat-flat-button>{{ buttonText }}</button>\n </dbx-anchor>\n </div>\n </div>\n `,\n imports: [MatButtonModule, MatProgressBar, DbxColorDirective, DbxIconTileComponent, DbxAnchorComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocAnchorButtonItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<AnchorButtonItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get progress(): number {\n return this.itemValue.progress;\n }\n\n get total(): number {\n return this.itemValue.total;\n }\n\n get buttonText(): string {\n return this.itemValue.buttonText;\n }\n\n get anchor(): ClickableAnchor {\n return this.itemValue.anchor;\n }\n\n get progressPercent(): number {\n return this.total > 0 ? Math.min(100, Math.round((this.progress / this.total) * 100)) : 0;\n }\n}"
258
+ "classSource": "@Component({\n selector: 'doc-anchor-button-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded-thick dbx-list-two-line-item dbx-list-two-line-item-with-icon\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium dbx-pb1\">{{ title }}</span>\n <span class=\"item-details dbx-pb2\">{{ progress }} of {{ total }} complete</span>\n <mat-progress-bar mode=\"determinate\" [value]=\"progressPercent\"></mat-progress-bar>\n </div>\n <div class=\"item-right\">\n <dbx-anchor [anchor]=\"anchor\">\n <button mat-flat-button>{{ buttonText }}</button>\n </dbx-anchor>\n </div>\n </div>\n `,\n imports: [MatButtonModule, MatProgressBar, DbxColorDirective, DbxIconTileComponent, DbxAnchorComponent]\n})\nexport class DocAnchorButtonItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<AnchorButtonItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get progress(): number {\n return this.itemValue.progress;\n }\n\n get total(): number {\n return this.itemValue.total;\n }\n\n get buttonText(): string {\n return this.itemValue.buttonText;\n }\n\n get anchor(): ClickableAnchor {\n return this.itemValue.anchor;\n }\n\n get progressPercent(): number {\n return this.total > 0 ? Math.min(100, Math.round((this.progress / this.total) * 100)) : 0;\n }\n}"
259
259
  },
260
260
  {
261
261
  "kind": "interface",
@@ -291,21 +291,21 @@
291
291
  "className": "DocAnchorRowItemListComponent",
292
292
  "role": "list",
293
293
  "selector": "doc-anchor-row-item-list",
294
- "classSource": "@Component({\n selector: 'doc-anchor-row-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'dbx-list-card-items-list'\n },\n standalone: true\n})\nexport class DocAnchorRowItemListComponent extends AbstractDbxSelectionListWrapperDirective<AnchorRowItemValue> {\n constructor() {\n super({\n componentClass: DocAnchorRowItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
294
+ "classSource": "@Component({\n selector: 'doc-anchor-row-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-card-items-list'\n }\n})\nexport class DocAnchorRowItemListComponent extends AbstractDbxSelectionListWrapperDirective<AnchorRowItemValue> {\n constructor() {\n super({\n componentClass: DocAnchorRowItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
295
295
  },
296
296
  {
297
297
  "kind": "component",
298
298
  "className": "DocAnchorRowItemListViewComponent",
299
299
  "role": "view",
300
300
  "selector": "doc-anchor-row-item-list-view",
301
- "classSource": "@Component({\n selector: 'doc-anchor-row-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocAnchorRowItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocAnchorRowItemListViewComponent extends AbstractDbxSelectionListViewDirective<AnchorRowItemValue> {\n readonly config: DbxSelectionValueListViewConfig<AnchorRowItemValueWithSelection> = {\n componentClass: DocAnchorRowItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined })))\n };\n}"
301
+ "classSource": "@Component({\n selector: 'doc-anchor-row-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocAnchorRowItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocAnchorRowItemListViewComponent extends AbstractDbxSelectionListViewDirective<AnchorRowItemValue> {\n readonly config: DbxSelectionValueListViewConfig<AnchorRowItemValueWithSelection> = {\n componentClass: DocAnchorRowItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined })))\n };\n}"
302
302
  },
303
303
  {
304
304
  "kind": "component",
305
305
  "className": "DocAnchorRowItemListViewItemComponent",
306
306
  "role": "item",
307
307
  "selector": "doc-anchor-row-item-list-view-item",
308
- "classSource": "@Component({\n selector: 'doc-anchor-row-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded-thick dbx-list-two-line-item dbx-list-two-line-item-with-icon\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium dbx-pb1\">{{ title }}</span>\n <span class=\"item-details dbx-pb2\">{{ progress }} of {{ total }} complete</span>\n <mat-progress-bar mode=\"determinate\" [value]=\"progressPercent\"></mat-progress-bar>\n </div>\n <div class=\"item-right\">\n <mat-icon>chevron_right</mat-icon>\n </div>\n </div>\n `,\n imports: [MatIconModule, MatProgressBar, DbxColorDirective, DbxIconTileComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocAnchorRowItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<AnchorRowItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get progress(): number {\n return this.itemValue.progress;\n }\n\n get total(): number {\n return this.itemValue.total;\n }\n\n get progressPercent(): number {\n return this.total > 0 ? Math.min(100, Math.round((this.progress / this.total) * 100)) : 0;\n }\n}"
308
+ "classSource": "@Component({\n selector: 'doc-anchor-row-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded-thick dbx-list-two-line-item dbx-list-two-line-item-with-icon\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium dbx-pb1\">{{ title }}</span>\n <span class=\"item-details dbx-pb2\">{{ progress }} of {{ total }} complete</span>\n <mat-progress-bar mode=\"determinate\" [value]=\"progressPercent\"></mat-progress-bar>\n </div>\n <div class=\"item-right\">\n <mat-icon>chevron_right</mat-icon>\n </div>\n </div>\n `,\n imports: [MatIconModule, MatProgressBar, DbxColorDirective, DbxIconTileComponent]\n})\nexport class DocAnchorRowItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<AnchorRowItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get progress(): number {\n return this.itemValue.progress;\n }\n\n get total(): number {\n return this.itemValue.total;\n }\n\n get progressPercent(): number {\n return this.total > 0 ? Math.min(100, Math.round((this.progress / this.total) * 100)) : 0;\n }\n}"
309
309
  },
310
310
  {
311
311
  "kind": "interface",
@@ -339,21 +339,21 @@
339
339
  "className": "DocProgressItemListComponent",
340
340
  "role": "list",
341
341
  "selector": "doc-progress-item-list",
342
- "classSource": "@Component({\n selector: 'doc-progress-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocProgressItemListComponent extends AbstractDbxSelectionListWrapperDirective<ProgressItemValue> {\n constructor() {\n super({\n componentClass: DocProgressItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
342
+ "classSource": "@Component({\n selector: 'doc-progress-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n host: {\n class: 'dbx-list-no-hover-effects dbx-list-card-items-list'\n }\n})\nexport class DocProgressItemListComponent extends AbstractDbxSelectionListWrapperDirective<ProgressItemValue> {\n constructor() {\n super({\n componentClass: DocProgressItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
343
343
  },
344
344
  {
345
345
  "kind": "component",
346
346
  "className": "DocProgressItemListViewComponent",
347
347
  "role": "view",
348
348
  "selector": "doc-progress-item-list-view",
349
- "classSource": "@Component({\n selector: 'doc-progress-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocProgressItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocProgressItemListViewComponent extends AbstractDbxSelectionListViewDirective<ProgressItemValue> {\n readonly config: DbxSelectionValueListViewConfig<ProgressItemValueWithSelection> = {\n componentClass: DocProgressItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined })))\n };\n}"
349
+ "classSource": "@Component({\n selector: 'doc-progress-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocProgressItemListViewComponent),\n host: {\n class: 'dbx-list-item-p0'\n }\n})\nexport class DocProgressItemListViewComponent extends AbstractDbxSelectionListViewDirective<ProgressItemValue> {\n readonly config: DbxSelectionValueListViewConfig<ProgressItemValueWithSelection> = {\n componentClass: DocProgressItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: undefined })))\n };\n}"
350
350
  },
351
351
  {
352
352
  "kind": "component",
353
353
  "className": "DocProgressItemListViewItemComponent",
354
354
  "role": "item",
355
355
  "selector": "doc-progress-item-list-view-item",
356
- "classSource": "@Component({\n selector: 'doc-progress-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded-thick dbx-list-two-line-item dbx-list-two-line-item-with-icon doc-progress-item\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium dbx-pb1\">{{ title }}</span>\n <span class=\"item-details dbx-pb2\">{{ progress }} of {{ total }} complete</span>\n <mat-progress-bar mode=\"determinate\" [value]=\"progressPercent\"></mat-progress-bar>\n </div>\n <div class=\"item-right\">\n <button mat-flat-button>View requirements</button>\n </div>\n </div>\n `,\n imports: [MatButtonModule, MatProgressBar, DbxColorDirective, DbxIconTileComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocProgressItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<ProgressItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get progress(): number {\n return this.itemValue.progress;\n }\n\n get total(): number {\n return this.itemValue.total;\n }\n\n get progressPercent(): number {\n return this.total > 0 ? Math.min(100, Math.round((this.progress / this.total) * 100)) : 0;\n }\n}"
356
+ "classSource": "@Component({\n selector: 'doc-progress-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded-thick dbx-list-two-line-item dbx-list-two-line-item-with-icon doc-progress-item\">\n <dbx-icon-tile class=\"item-icon\" [icon]=\"icon\" dbxColor=\"primary\" [dbxColorTone]=\"18\"></dbx-icon-tile>\n <div class=\"item-left\">\n <span class=\"dbx-text-title-medium dbx-pb1\">{{ title }}</span>\n <span class=\"item-details dbx-pb2\">{{ progress }} of {{ total }} complete</span>\n <mat-progress-bar mode=\"determinate\" [value]=\"progressPercent\"></mat-progress-bar>\n </div>\n <div class=\"item-right\">\n <button mat-flat-button>View requirements</button>\n </div>\n </div>\n `,\n imports: [MatButtonModule, MatProgressBar, DbxColorDirective, DbxIconTileComponent]\n})\nexport class DocProgressItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<ProgressItemValue> {\n get icon(): string {\n return this.itemValue.icon;\n }\n\n get title(): string {\n return this.itemValue.title;\n }\n\n get progress(): number {\n return this.itemValue.progress;\n }\n\n get total(): number {\n return this.itemValue.total;\n }\n\n get progressPercent(): number {\n return this.total > 0 ? Math.min(100, Math.round((this.progress / this.total) * 100)) : 0;\n }\n}"
357
357
  },
358
358
  {
359
359
  "kind": "interface",
@@ -386,21 +386,21 @@
386
386
  "className": "DocTwoLineItemListComponent",
387
387
  "role": "list",
388
388
  "selector": "doc-two-line-item-list",
389
- "classSource": "@Component({\n selector: 'doc-two-line-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocTwoLineItemListComponent extends AbstractDbxSelectionListWrapperDirective<TwoLineItemValue> {\n constructor() {\n super({\n componentClass: DocTwoLineItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
389
+ "classSource": "@Component({\n selector: 'doc-two-line-item-list',\n template: DEFAULT_LIST_WRAPPER_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxListWrapperComponentImportsModule]\n})\nexport class DocTwoLineItemListComponent extends AbstractDbxSelectionListWrapperDirective<TwoLineItemValue> {\n constructor() {\n super({\n componentClass: DocTwoLineItemListViewComponent,\n defaultSelectionMode: 'view'\n });\n }\n}"
390
390
  },
391
391
  {
392
392
  "kind": "component",
393
393
  "className": "DocTwoLineItemListViewComponent",
394
394
  "role": "view",
395
395
  "selector": "doc-two-line-item-list-view",
396
- "classSource": "@Component({\n selector: 'doc-two-line-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocTwoLineItemListViewComponent),\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocTwoLineItemListViewComponent extends AbstractDbxSelectionListViewDirective<TwoLineItemValue> {\n readonly config: DbxSelectionValueListViewConfig<TwoLineItemValueWithSelection> = {\n componentClass: DocTwoLineItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: value.icon })))\n };\n}"
396
+ "classSource": "@Component({\n selector: 'doc-two-line-item-list-view',\n template: DEFAULT_DBX_SELECTION_VALUE_LIST_COMPONENT_CONFIGURATION_TEMPLATE,\n imports: [DbxSelectionValueListViewComponentImportsModule],\n providers: provideDbxListView(DocTwoLineItemListViewComponent)\n})\nexport class DocTwoLineItemListViewComponent extends AbstractDbxSelectionListViewDirective<TwoLineItemValue> {\n readonly config: DbxSelectionValueListViewConfig<TwoLineItemValueWithSelection> = {\n componentClass: DocTwoLineItemListViewItemComponent,\n mapValuesToItemValues: (values) => of(values.map((value) => ({ ...value, itemValue: value, icon: value.icon })))\n };\n}"
397
397
  },
398
398
  {
399
399
  "kind": "component",
400
400
  "className": "DocTwoLineItemListViewItemComponent",
401
401
  "role": "item",
402
402
  "selector": "doc-two-line-item-list-view-item",
403
- "classSource": "@Component({\n selector: 'doc-two-line-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"item-title\">{{ title }}</span>\n @if (details) {\n <span class=\"item-details\">{{ details }}</span>\n }\n @if (footnote) {\n <span class=\"item-details-footnote\">{{ footnote }}</span>\n }\n </div>\n <dbx-spacer></dbx-spacer>\n <div class=\"item-right\">\n @if (status) {\n <dbx-chip [small]=\"true\" [color]=\"statusColor\">{{ status }}</dbx-chip>\n }\n </div>\n </div>\n `,\n imports: [DbxSpacerDirective, DbxChipDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class DocTwoLineItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<TwoLineItemValue> {\n get title(): string {\n return this.itemValue.title;\n }\n\n get details(): Maybe<string> {\n return this.itemValue.details;\n }\n\n get footnote(): Maybe<string> {\n return this.itemValue.footnote;\n }\n\n get status(): Maybe<TwoLineItemValue['status']> {\n return this.itemValue.status;\n }\n\n get statusColor(): TwoLineItemStatusColor {\n return this.status ? STATUS_COLOR[this.status] : 'grey';\n }\n}"
403
+ "classSource": "@Component({\n selector: 'doc-two-line-item-list-view-item',\n template: `\n <div class=\"dbx-list-item-padded dbx-list-two-line-item\">\n <div class=\"item-left\">\n <span class=\"item-title\">{{ title }}</span>\n @if (details) {\n <span class=\"item-details\">{{ details }}</span>\n }\n @if (footnote) {\n <span class=\"item-details-footnote\">{{ footnote }}</span>\n }\n </div>\n <dbx-spacer></dbx-spacer>\n <div class=\"item-right\">\n @if (status) {\n <dbx-chip [small]=\"true\" [color]=\"statusColor\">{{ status }}</dbx-chip>\n }\n </div>\n </div>\n `,\n imports: [DbxSpacerDirective, DbxChipDirective]\n})\nexport class DocTwoLineItemListViewItemComponent extends AbstractDbxValueListViewItemComponent<TwoLineItemValue> {\n get title(): string {\n return this.itemValue.title;\n }\n\n get details(): Maybe<string> {\n return this.itemValue.details;\n }\n\n get footnote(): Maybe<string> {\n return this.itemValue.footnote;\n }\n\n get status(): Maybe<TwoLineItemValue['status']> {\n return this.itemValue.status;\n }\n\n get statusColor(): TwoLineItemStatusColor {\n return this.status ? STATUS_COLOR[this.status] : 'grey';\n }\n}"
404
404
  },
405
405
  {
406
406
  "kind": "interface",
@@ -452,7 +452,7 @@
452
452
  "dbx-link-hover"
453
453
  ],
454
454
  "info": "<p>\n Composes a marketing-style support page out of Angular Material cards plus dbx-web's\n <code>&lt;dbx-button&gt;</code>\n ,\n <code>&lt;dbx-anchor&gt;</code>\n , and\n <code>&lt;dbx-icon-tile&gt;</code>\n : an outlined hero\n <code>&lt;mat-card&gt;</code>\n for the search/CTA row and a responsive grid of outlined topic\n <code>&lt;mat-card&gt;</code>\n boxes whose rows are individual\n <code>&lt;dbx-anchor [anchor]&gt;</code>\n click targets.\n</p>\n<p>\n The topic grid uses Angular Flex Layout's CSS-Grid directives —\n <code>gdColumns=\"repeat(auto-fit, minmax(320px, 1fr))\"</code>\n +\n <code>gdGap</code>\n — so the cards auto-collapse 3 → 2 → 1 columns as the viewport narrows, with no breakpoint media queries or wrapping\n <code>fxFlex</code>\n shells needed. The hero CTA + search row uses\n <code>fxLayout=\"row\"</code>\n with\n <code>fxLayout.lt-md=\"column\"</code>\n so it stacks below the tablet breakpoint. The CTA itself composes the\n <code>.dbx-grow-button</code>\n +\n <code>.dbx-button-big</code>\n utilities (full-width, taller mat-button) instead of hand-rolled\n <code>::ng-deep</code>\n width / height overrides.\n</p>\n<p>\n Topic-card avatars are\n <code>&lt;dbx-icon-tile [round]&gt;</code>\n with\n <code>dbxColor=\"primary\"</code>\n +\n <code>[dbxColorTone]=\"18\"</code>\n for the tonal swatch. Each card body is a plain\n <code>&lt;ul&gt;</code>\n /\n <code>&lt;li&gt;</code>\n so the browser's default disc marker supplies the bullet, and topic links use\n <code>[dbxTextColor]=\"'primary'\"</code>\n for the link color plus a\n <code>&lt;span class=\"dbx-link-hover\"&gt;</code>\n wrapper around the projected label for the hover-only-underline affordance. The\n <code>.dbx-link-hover</code>\n /\n <code>.dbx-link</code>\n utilities pair with\n <code>.dbx-u</code>\n —\n <code>.dbx-link</code>\n is always underlined,\n <code>.dbx-link-hover</code>\n underlines on hover, both keep a pointer cursor. The class lives on the projected\n <code>&lt;span&gt;</code>\n rather than the\n <code>&lt;dbx-anchor&gt;</code>\n host because\n <code>dbx-anchor</code>\n 's internal\n <code>&lt;a class=\"dbx-anchor-a\"&gt;</code>\n bakes in\n <code>text-decoration: none</code>\n and would strip a host-level\n <code>.dbx-link</code>\n .\n</p>\n<p>\n Each topic row supplies a\n <code>ClickableAnchor</code>\n with an\n <code>onClick</code>\n callback to\n <code>dbx-anchor</code>\n ; the callback opens a\n <code>MatSnackBar</code>\n with a \"Dismiss\" action so every link demonstrably triggers a button-bearing popup. Swap the\n <code>onClick</code>\n for a\n <code>ref</code>\n /\n <code>url</code>\n to route or open externally instead.\n</p>",
455
- "snippet": "<div class=\"dbx-p4 doc-support-page\">\n <h1 class=\"dbx-text-headline-large dbx-mb1\">Lorem Ipsum Support</h1>\n <p class=\"dbx-text-body-large dbx-mb4\">Dolor sit amet — we're here to help you succeed!</p>\n\n <mat-card appearance=\"outlined\" class=\"dbx-mb4\">\n <mat-card-content>\n <h3 class=\"dbx-text-title-medium dbx-mb3\">Need help? We're here.</h3>\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap=\"var(--dbx-padding-3)\" fxLayoutAlign=\"start stretch\">\n <dbx-button class=\"dbx-grow-button dbx-button-form-field-height\" fxFlex=\"1 1 50%\" flat icon=\"help_outline\" text=\"Chat with Support\" customButtonColor=\"var(--mat-sys-inverse-surface)\" customTextColor=\"var(--mat-sys-inverse-on-surface)\" (buttonClick)=\"onChatClick()\"></dbx-button>\n <mat-form-field class=\"dbx-p0\" appearance=\"outline\" fxFlex=\"1 1 50%\" subscriptSizing=\"dynamic\">\n <input matInput placeholder=\"Search for a topic or question…\" />\n </mat-form-field>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div gdColumns=\"repeat(auto-fit, minmax(320px, 1fr))\" gdGap=\"var(--dbx-padding-5)\">\n @for (group of topics; track group.title) {\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"var(--dbx-padding-2)\" class=\"dbx-mb3\">\n <dbx-icon-tile class=\"doc-support-topic-avatar\" [icon]=\"group.icon\" [round]=\"true\"></dbx-icon-tile>\n <span class=\"dbx-text-title-medium\">{{ group.title }}</span>\n </div>\n <ul class=\"doc-support-topic-links\">\n @for (link of group.links; track link.label) {\n <li class=\"dbx-pb2\">\n <dbx-anchor [dbxTextColor]=\"'primary'\" [anchor]=\"anchorFor(link)\">\n <span class=\"dbx-link-hover\">{{ link.label }}</span>\n </dbx-anchor>\n </li>\n }\n </ul>\n </mat-card-content>\n </mat-card>\n }\n </div>\n</div>",
455
+ "snippet": "<div class=\"dbx-p4 doc-support-page\">\n <h1 class=\"dbx-text-headline-large dbx-mb1\">Lorem Ipsum Support</h1>\n <p class=\"dbx-text-body-large dbx-mb4\">Dolor sit amet — we're here to help you succeed!</p>\n\n <mat-card appearance=\"outlined\" class=\"dbx-mb4\">\n <mat-card-content>\n <h3 class=\"dbx-text-title-medium dbx-mb3\">Need help? We're here.</h3>\n <div fxLayout=\"row\" fxLayout.lt-md=\"column\" fxLayoutGap=\"var(--dbx-padding-3)\" fxLayoutAlign=\"start stretch\">\n <dbx-button class=\"dbx-grow-button dbx-button-form-field-height\" fxFlex=\"1 1 50%\" flat icon=\"help_outline\" text=\"Chat with Support\" [buttonStyle]=\"chatButtonStyle\" (buttonClick)=\"onChatClick()\"></dbx-button>\n <mat-form-field class=\"dbx-p0\" appearance=\"outline\" fxFlex=\"1 1 50%\" subscriptSizing=\"dynamic\">\n <input matInput placeholder=\"Search for a topic or question…\" />\n </mat-form-field>\n </div>\n </mat-card-content>\n </mat-card>\n\n <div gdColumns=\"repeat(auto-fit, minmax(320px, 1fr))\" gdGap=\"var(--dbx-padding-5)\">\n @for (group of topics; track group.title) {\n <mat-card appearance=\"outlined\">\n <mat-card-content>\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"var(--dbx-padding-2)\" class=\"dbx-mb3\">\n <dbx-icon-tile class=\"doc-support-topic-avatar\" [icon]=\"group.icon\" [round]=\"true\"></dbx-icon-tile>\n <span class=\"dbx-text-title-medium\">{{ group.title }}</span>\n </div>\n <ul class=\"doc-support-topic-links\">\n @for (link of group.links; track link.label) {\n <li class=\"dbx-pb2\">\n <dbx-anchor [dbxTextColor]=\"'primary'\" [anchor]=\"anchorFor(link)\">\n <span class=\"dbx-link-hover\">{{ link.label }}</span>\n </dbx-anchor>\n </li>\n }\n </ul>\n </mat-card-content>\n </mat-card>\n }\n </div>\n</div>",
456
456
  "uses": []
457
457
  }
458
458
  ]
@@ -22,7 +22,7 @@
22
22
  "optional": false
23
23
  }
24
24
  ],
25
- "returns": "`true` if the input is a Firebase {@link HttpsError }.",
25
+ "returns": "`true` if the input is a Firebase {@link HttpsError}.",
26
26
  "tags": [
27
27
  "firebase",
28
28
  "https",
@@ -56,7 +56,7 @@
56
56
  "optional": false
57
57
  }
58
58
  ],
59
- "returns": "`true` if the input is a Firebase Admin {@link admin.FirebaseError }.",
59
+ "returns": "`true` if the input is a Firebase Admin {@link admin.FirebaseError}.",
60
60
  "tags": [
61
61
  "firebase",
62
62
  "admin",
@@ -89,7 +89,7 @@
89
89
  "optional": false
90
90
  }
91
91
  ],
92
- "returns": "Structured {@link FirebaseServerErrorInfo } with classified error details.",
92
+ "returns": "Structured {@link FirebaseServerErrorInfo} with classified error details.",
93
93
  "tags": [
94
94
  "firebase",
95
95
  "error",
@@ -246,7 +246,7 @@
246
246
  {
247
247
  "name": "handleFirebaseErrorFn",
248
248
  "type": "ThrowErrorFunction<admin.FirebaseError>",
249
- "description": "- Handler that receives the typed {@link admin.FirebaseError }.",
249
+ "description": "- Handler that receives the typed {@link admin.FirebaseError}.",
250
250
  "optional": false
251
251
  }
252
252
  ],
@@ -99,7 +99,7 @@
99
99
  "optional": false
100
100
  }
101
101
  ],
102
- "returns": "A {@link FirebaseServerError } if the error has structured details, or a generic readable error otherwise.",
102
+ "returns": "A {@link FirebaseServerError} if the error has structured details, or a generic readable error otherwise.",
103
103
  "tags": [
104
104
  "firebase",
105
105
  "https",
@@ -137,7 +137,7 @@
137
137
  "optional": false
138
138
  }
139
139
  ],
140
- "returns": "A {@link ReadableError } with a human-readable message suitable for display.",
140
+ "returns": "A {@link ReadableError} with a human-readable message suitable for display.",
141
141
  "tags": [
142
142
  "firebase",
143
143
  "auth",
@@ -1433,7 +1433,7 @@
1433
1433
  "optional": false
1434
1434
  }
1435
1435
  ],
1436
- "returns": "The same data object, now typed as {@link DocumentDataWithIdAndKey }",
1436
+ "returns": "The same data object, now typed as {@link DocumentDataWithIdAndKey}",
1437
1437
  "tags": [
1438
1438
  "firestore",
1439
1439
  "data",
@@ -1478,7 +1478,7 @@
1478
1478
  "optional": false
1479
1479
  }
1480
1480
  ],
1481
- "returns": "The same data object, now typed as {@link DocumentDataWithIdAndKey }",
1481
+ "returns": "The same data object, now typed as {@link DocumentDataWithIdAndKey}",
1482
1482
  "tags": [
1483
1483
  "firestore",
1484
1484
  "data",
@@ -1553,7 +1553,7 @@
1553
1553
  "category": "firestore",
1554
1554
  "module": "@dereekb/firebase",
1555
1555
  "subpath": "common/firestore/accessor/document.utility",
1556
- "signature": "useDocumentSnapshotData(): <D extends import(\"/home/circleci/code/packages/firebase/src/lib/common/firestore/accessor/document\").FirestoreDocument<any, import(\"/home/circleci/code/packages/firebase/src/lib/common/firestore/collection/collection\").FirestoreModelIdentity>, O = void>(document: Maybe<D>, use: UseAsync<import(\"/home/circleci/code/packages/firebase/src/lib/common/firestore/accessor/document\").FirestoreDocumentData<D>, O>, defaultValue?: Maybe<AsyncGetterOrValue<O>>) => Promise<Maybe<O>>",
1556
+ "signature": "useDocumentSnapshotData(): <D extends FirestoreDocument<any>, O = void>(document: Maybe<D>, use: UseAsync<import(\"/home/circleci/code/packages/firebase/src/lib/common/firestore/accessor/document\").FirestoreDocumentData<D>, O>, defaultValue?: any) => Promise<Maybe<O>>",
1557
1557
  "description": "Fetches a document's snapshot data (via `snapshot.data()`) and passes it to a `use` callback.\n\nWraps {@link useDocumentSnapshot} with a mapping step that extracts raw data from the snapshot.\nIf the document doesn't exist (data is `undefined`), the `use` callback is not invoked\nand `defaultValue` is returned instead.",
1558
1558
  "params": [],
1559
1559
  "returns": "The result of `use`, or the default value",
@@ -1798,7 +1798,7 @@
1798
1798
  "optional": false
1799
1799
  }
1800
1800
  ],
1801
- "returns": "A {@link LimitedFirestoreDocumentAccessorSnapshotCache } backed by the given accessor.",
1801
+ "returns": "A {@link LimitedFirestoreDocumentAccessorSnapshotCache} backed by the given accessor.",
1802
1802
  "tags": [
1803
1803
  "firestore",
1804
1804
  "cache",
@@ -313,7 +313,7 @@
313
313
  "optional": false
314
314
  }
315
315
  ],
316
- "returns": "A {@link BatchCalc } with computed batch counts and remainder.",
316
+ "returns": "A {@link BatchCalc} with computed batch counts and remainder.",
317
317
  "tags": [
318
318
  "batch",
319
319
  "calculate",
@@ -437,7 +437,7 @@
437
437
  "optional": false
438
438
  }
439
439
  ],
440
- "returns": "A {@link SeparateResult } with included and excluded arrays.",
440
+ "returns": "A {@link SeparateResult} with included and excluded arrays.",
441
441
  "tags": [
442
442
  "array",
443
443
  "separate",
@@ -1002,7 +1002,7 @@
1002
1002
  "optional": false
1003
1003
  }
1004
1004
  ],
1005
- "returns": "The {@link FunctionType }, or `null` for non-functions.",
1005
+ "returns": "The {@link FunctionType}, or `null` for non-functions.",
1006
1006
  "tags": [
1007
1007
  "type",
1008
1008
  "function",
@@ -2728,7 +2728,7 @@
2728
2728
  "optional": false
2729
2729
  }
2730
2730
  ],
2731
- "returns": "An {@link AsyncValueCache } that proxies the inner cache with a single-load memoization layer.",
2731
+ "returns": "An {@link AsyncValueCache} that proxies the inner cache with a single-load memoization layer.",
2732
2732
  "tags": [
2733
2733
  "memoize",
2734
2734
  "memo",
@@ -2761,7 +2761,7 @@
2761
2761
  "optional": false
2762
2762
  }
2763
2763
  ],
2764
- "returns": "An {@link AsyncKeyedValueCache } that proxies the inner cache with a record-level memoization layer.",
2764
+ "returns": "An {@link AsyncKeyedValueCache} that proxies the inner cache with a record-level memoization layer.",
2765
2765
  "tags": [
2766
2766
  "memoize",
2767
2767
  "memo",
@@ -7450,7 +7450,7 @@
7450
7450
  {
7451
7451
  "name": "filter",
7452
7452
  "type": "FilterKeyValueTuplesInput<T>",
7453
- "description": "- A {@link FilterKeyValueTuplesInput } controlling which values match. Required (no default).",
7453
+ "description": "- A {@link FilterKeyValueTuplesInput} controlling which values match. Required (no default).",
7454
7454
  "optional": false
7455
7455
  }
7456
7456
  ],
@@ -7485,7 +7485,7 @@
7485
7485
  {
7486
7486
  "name": "filter",
7487
7487
  "type": "FilterKeyValueTuplesInput<T>",
7488
- "description": "- A {@link FilterKeyValueTuplesInput } controlling which values are counted. Defaults to `KeyValueTypleValueFilter.UNDEFINED`.",
7488
+ "description": "- A {@link FilterKeyValueTuplesInput} controlling which values are counted. Defaults to `KeyValueTypleValueFilter.UNDEFINED`.",
7489
7489
  "optional": true
7490
7490
  }
7491
7491
  ],
@@ -7591,7 +7591,7 @@
7591
7591
  {
7592
7592
  "name": "filter",
7593
7593
  "type": "FilterKeyValueTuplesInput<I>",
7594
- "description": "- A {@link FilterKeyValueTuplesInput } controlling which values are included. Defaults to `KeyValueTypleValueFilter.UNDEFINED`.",
7594
+ "description": "- A {@link FilterKeyValueTuplesInput} controlling which values are included. Defaults to `KeyValueTypleValueFilter.UNDEFINED`.",
7595
7595
  "optional": true
7596
7596
  }
7597
7597
  ],
@@ -9778,7 +9778,7 @@
9778
9778
  "signature": "makeDefaultNonConcurrentTaskKeyFactory(): StringFactory<any>",
9779
9779
  "description": "Creates a default non-concurrent task key factory that generates unique incrementing number strings.",
9780
9780
  "params": [],
9781
- "returns": "A {@link StringFactory } that produces unique keys for identifying non-concurrent tasks.",
9781
+ "returns": "A {@link StringFactory} that produces unique keys for identifying non-concurrent tasks.",
9782
9782
  "tags": [
9783
9783
  "promise",
9784
9784
  "parallel",
@@ -13155,7 +13155,7 @@
13155
13155
  {
13156
13156
  "name": "valueOrFunction",
13157
13157
  "type": "Maybe<boolean | DecisionFunction<T>>",
13158
- "description": "- Boolean constant, {@link DecisionFunction }, or undefined to use the default.",
13158
+ "description": "- Boolean constant, {@link DecisionFunction}, or undefined to use the default.",
13159
13159
  "optional": false
13160
13160
  },
13161
13161
  {
@@ -13165,7 +13165,7 @@
13165
13165
  "optional": true
13166
13166
  }
13167
13167
  ],
13168
- "returns": "A {@link DecisionFunction } derived from the input.",
13168
+ "returns": "A {@link DecisionFunction} derived from the input.",
13169
13169
  "tags": [
13170
13170
  "decision",
13171
13171
  "normalize",
@@ -14615,7 +14615,7 @@
14615
14615
  "optional": false
14616
14616
  }
14617
14617
  ],
14618
- "returns": "A new {@link Modifier } pairing the key with the modify function.",
14618
+ "returns": "A new {@link Modifier} pairing the key with the modify function.",
14619
14619
  "tags": [
14620
14620
  "modifier",
14621
14621
  "mutate",
@@ -14647,7 +14647,7 @@
14647
14647
  "optional": false
14648
14648
  }
14649
14649
  ],
14650
- "returns": "A single modifier function that applies all mapped modifiers, or {@link NOOP_MODIFIER } if empty.",
14650
+ "returns": "A single modifier function that applies all mapped modifiers, or {@link NOOP_MODIFIER} if empty.",
14651
14651
  "tags": [
14652
14652
  "modifier",
14653
14653
  "map",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-components-mcp",
3
- "version": "13.43.0",
3
+ "version": "14.0.0",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "dbx-components-mcp": "dbx-components-mcp.js"
@@ -11,7 +11,7 @@
11
11
  "ts-morph": "^21.0.0"
12
12
  },
13
13
  "peerDependencies": {
14
- "@dereekb/dbx-cli": "13.43.0",
15
- "@dereekb/util": "13.43.0"
14
+ "@dereekb/dbx-cli": "14.0.0",
15
+ "@dereekb/util": "14.0.0"
16
16
  }
17
17
  }