@bitforgehq/ui 0.5.0-next.3 → 0.5.0-next.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -123,6 +123,8 @@ const BF_DEFAULT_LABELS = {
123
123
  chatStop: "Stop",
124
124
  mediaCardSelect: "Select",
125
125
  imageLoadFailed: "The image could not be loaded",
126
+ imageTileEmpty: "No image yet",
127
+ imageTileSelected: "Selected",
126
128
  imageViewer: "Image viewer",
127
129
  imageViewerPrevious: "Previous image",
128
130
  imageViewerNext: "Next image",
@@ -256,6 +258,8 @@ function mergeLabels(parent, o) {
256
258
  chatStop: o.chatStop ?? parent.chatStop,
257
259
  mediaCardSelect: o.mediaCardSelect ?? parent.mediaCardSelect,
258
260
  imageLoadFailed: o.imageLoadFailed ?? parent.imageLoadFailed,
261
+ imageTileEmpty: o.imageTileEmpty ?? parent.imageTileEmpty,
262
+ imageTileSelected: o.imageTileSelected ?? parent.imageTileSelected,
259
263
  imageViewer: o.imageViewer ?? parent.imageViewer,
260
264
  imageViewerPrevious: o.imageViewerPrevious ?? parent.imageViewerPrevious,
261
265
  imageViewerNext: o.imageViewerNext ?? parent.imageViewerNext,
@@ -619,7 +623,7 @@ const PILL_HIT = {
619
623
  bordered: ""
620
624
  }
621
625
  };
622
- const BASE$11 = "relative inline-flex max-w-full min-w-0 items-center justify-center gap-2 rounded-control font-bold whitespace-nowrap transition-colors duration-150 select-none focus-visible:outline-hidden focus-visible:ring-4 focus-visible:ring-ring disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled disabled:border-transparent";
626
+ const BASE$12 = "relative inline-flex max-w-full min-w-0 items-center justify-center gap-2 rounded-control font-bold whitespace-nowrap transition-colors duration-150 select-none focus-visible:outline-hidden focus-visible:ring-4 focus-visible:ring-ring disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled disabled:border-transparent";
623
627
  const VARIANT$6 = {
624
628
  primary: "bg-primary text-on-primary hover:bg-primary-hover",
625
629
  tonal: "bg-primary-soft text-primary-strong hover:bg-primary-soft-hover",
@@ -676,7 +680,7 @@ const TEXT_PADDING = {
676
680
  lg: "px-3"
677
681
  };
678
682
  const BUTTON_CLASSES = {
679
- base: BASE$11,
683
+ base: BASE$12,
680
684
  variant: VARIANT$6,
681
685
  pressed: PRESSED$2.button,
682
686
  current: CURRENT,
@@ -714,7 +718,7 @@ var BfButtonComponent = class BfButtonComponent {
714
718
  const pressed = this.isLink ? PRESSED$2.link[variant] : this.disabled() || this.loading() ? "" : PRESSED$2.button[variant];
715
719
  const current = this.isLink ? CURRENT[variant] : "";
716
720
  return [
717
- BASE$11,
721
+ BASE$12,
718
722
  VARIANT$6[variant],
719
723
  pressed,
720
724
  current,
@@ -953,7 +957,7 @@ i0.ɵɵngDeclareClassMetadata({
953
957
  }]
954
958
  }
955
959
  });
956
- const BASE$10 = "relative inline-flex shrink-0 cursor-pointer items-center justify-center rounded-control transition-colors duration-150 select-none focus-visible:outline-hidden focus-visible:ring-4 focus-visible:ring-ring disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled disabled:border-transparent";
960
+ const BASE$11 = "relative inline-flex shrink-0 cursor-pointer items-center justify-center rounded-control transition-colors duration-150 select-none focus-visible:outline-hidden focus-visible:ring-4 focus-visible:ring-ring disabled:cursor-not-allowed disabled:bg-surface-sunken disabled:text-text-disabled disabled:border-transparent";
957
961
  const VARIANT$5 = {
958
962
  tonal: "bg-primary-soft text-primary-strong hover:bg-primary-soft-hover",
959
963
  primary: "bg-primary text-on-primary hover:bg-primary-hover",
@@ -980,7 +984,7 @@ const SIZE$4 = {
980
984
  lg: "h-12 w-12"
981
985
  };
982
986
  const ICON_BUTTON_CLASSES = {
983
- base: BASE$10,
987
+ base: BASE$11,
984
988
  variant: VARIANT$5,
985
989
  pressed: PRESSED$1.button,
986
990
  size: SIZE$4
@@ -1004,7 +1008,7 @@ var BfIconButtonComponent = class BfIconButtonComponent {
1004
1008
  const hit = PILL_HIT[size][variant === "outline" ? "bordered" : "plain"];
1005
1009
  const pressed = this.isLink ? PRESSED$1.link[variant] : this.disabled() ? "" : PRESSED$1.button[variant];
1006
1010
  return [
1007
- BASE$10,
1011
+ BASE$11,
1008
1012
  VARIANT$5[variant],
1009
1013
  pressed,
1010
1014
  SIZE$4[size],
@@ -1191,6 +1195,7 @@ i0.ɵɵngDeclareClassMetadata({
1191
1195
  }
1192
1196
  });
1193
1197
  const LABEL_BASE$1 = "inline-flex items-center rounded-control px-2.5 py-1.25 text-micro font-bold leading-none";
1198
+ const LABEL_ICON = "gap-1 [&_svg]:size-3 has-[[data-badge-icon]>*]:ps-2";
1194
1199
  const COUNT_BASE = "inline-flex h-box min-w-box items-center justify-center rounded-control px-1.75 text-micro font-bold leading-none";
1195
1200
  const COUNT_SOFT = "bg-primary text-on-primary";
1196
1201
  const STRONG_FORCED = "forced-colors:outline forced-colors:outline-[CanvasText]";
@@ -1215,7 +1220,7 @@ var BfBadgeComponent = class BfBadgeComponent {
1215
1220
  emphasis = input("soft", ...ngDevMode ? [{ debugName: "emphasis" }] : /* istanbul ignore next */ []);
1216
1221
  count = input(void 0, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
1217
1222
  countLabel = input("", ...ngDevMode ? [{ debugName: "countLabel" }] : /* istanbul ignore next */ []);
1218
- classes = computed(() => this.emphasis() === "strong" ? `${LABEL_BASE$1} ${STRONG[this.variant()]} ${STRONG_FORCED}` : `${LABEL_BASE$1} ${VARIANT$4[this.variant()]}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
1223
+ classes = computed(() => this.emphasis() === "strong" ? `${LABEL_BASE$1} ${LABEL_ICON} ${STRONG[this.variant()]} ${STRONG_FORCED}` : `${LABEL_BASE$1} ${LABEL_ICON} ${VARIANT$4[this.variant()]}`, ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
1219
1224
  countText = computed(() => {
1220
1225
  const c = this.count();
1221
1226
  return c === void 0 ? null : c > 99 ? "99+" : String(c);
@@ -1276,7 +1281,10 @@ var BfBadgeComponent = class BfBadgeComponent {
1276
1281
  }
1277
1282
  </span>
1278
1283
  } @else {
1279
- <span [class]="classes()"><ng-content /></span>
1284
+ <span [class]="classes()"
1285
+ ><span data-badge-icon class="contents"><ng-content select="[bfSlot=icon-start]" /></span
1286
+ ><ng-content
1287
+ /></span>
1280
1288
  }
1281
1289
  `,
1282
1290
  isInline: true
@@ -1301,7 +1309,10 @@ i0.ɵɵngDeclareClassMetadata({
1301
1309
  }
1302
1310
  </span>
1303
1311
  } @else {
1304
- <span [class]="classes()"><ng-content /></span>
1312
+ <span [class]="classes()"
1313
+ ><span data-badge-icon class="contents"><ng-content select="[bfSlot=icon-start]" /></span
1314
+ ><ng-content
1315
+ /></span>
1305
1316
  }
1306
1317
  `
1307
1318
  }]
@@ -2420,7 +2431,7 @@ i0.ɵɵngDeclareClassMetadata({
2420
2431
  }]
2421
2432
  }
2422
2433
  });
2423
- const BASE$9 = "block w-full rounded-field border bg-surface text-text placeholder:text-text-muted transition-colors focus:outline-hidden focus:border-primary focus:ring-2 focus:ring-ring read-only:bg-surface-muted disabled:cursor-not-allowed disabled:border-surface-sunken disabled:bg-surface-muted disabled:text-text-disabled";
2434
+ const BASE$10 = "block w-full rounded-field border bg-surface text-text placeholder:text-text-muted transition-colors focus:outline-hidden focus:border-primary focus:ring-2 focus:ring-ring read-only:bg-surface-muted disabled:cursor-not-allowed disabled:border-surface-sunken disabled:bg-surface-muted disabled:text-text-disabled";
2424
2435
  const SIZE$3 = {
2425
2436
  sm: "px-3 py-1.5 text-label-xs",
2426
2437
  md: "px-3.5 py-2 text-label-sm",
@@ -2500,7 +2511,7 @@ var BfTextareaComponent = class BfTextareaComponent {
2500
2511
  ariaLabelAttr = computed(() => this.label() ? null : this.ariaLabel() || null, ...ngDevMode ? [{ debugName: "ariaLabelAttr" }] : /* istanbul ignore next */ []);
2501
2512
  ariaLabelledbyAttr = computed(() => this.label() ? null : this.ariaLabelledby() || null, ...ngDevMode ? [{ debugName: "ariaLabelledbyAttr" }] : /* istanbul ignore next */ []);
2502
2513
  classes = computed(() => [
2503
- BASE$9,
2514
+ BASE$10,
2504
2515
  SIZE$3[this.resolvedSize()],
2505
2516
  this.showError() ? "border-danger-border" : "border-border-strong",
2506
2517
  this.growing() ? GROWING : "resize-y"
@@ -6464,7 +6475,7 @@ i0.ɵɵngDeclareClassMetadata({
6464
6475
  }
6465
6476
  });
6466
6477
  const BF_CHIP_GROUP = new InjectionToken("BF_CHIP_GROUP");
6467
- const BASE$8 = "relative inline-flex max-w-full min-w-0 items-center gap-1.5 rounded-control border-[1.5px] font-bold whitespace-nowrap cursor-pointer transition-colors duration-150 select-none focus-visible:outline-hidden focus-visible:ring-4 focus-visible:ring-ring disabled:cursor-not-allowed disabled:border-transparent disabled:bg-surface-sunken disabled:text-text-disabled";
6478
+ const BASE$9 = "relative inline-flex max-w-full min-w-0 items-center gap-1.5 rounded-control border-[1.5px] font-bold whitespace-nowrap cursor-pointer transition-colors duration-150 select-none focus-visible:outline-hidden focus-visible:ring-4 focus-visible:ring-ring disabled:cursor-not-allowed disabled:border-transparent disabled:bg-surface-sunken disabled:text-text-disabled";
6468
6479
  const SIZE$2 = {
6469
6480
  sm: "h-8 px-3 text-label-xs",
6470
6481
  md: "h-10 px-3.5 text-label-sm",
@@ -6516,7 +6527,7 @@ var BfChipComponent = class BfChipComponent {
6516
6527
  const on = this.isSelected();
6517
6528
  const pressed = this.isDisabled() ? "" : on ? PRESSED_ON[variant] : PRESSED_OFF;
6518
6529
  return [
6519
- BASE$8,
6530
+ BASE$9,
6520
6531
  SIZE$2[size],
6521
6532
  PILL_HIT[size].bordered,
6522
6533
  on ? ON[variant] : OFF,
@@ -8279,7 +8290,7 @@ i0.ɵɵngDeclareClassMetadata({
8279
8290
  }]
8280
8291
  }
8281
8292
  });
8282
- const BASE$7 = "relative flex h-full w-full flex-col gap-3 rounded-card text-start [&>[bfSlot=footer]]:mt-auto";
8293
+ const BASE$8 = "relative flex h-full w-full flex-col gap-3 rounded-card text-start [&>[bfSlot=footer]]:mt-auto";
8283
8294
  const VARIANT$3 = {
8284
8295
  raised: "bg-surface text-text shadow-raised",
8285
8296
  tint: "bg-primary-soft text-text",
@@ -8307,7 +8318,7 @@ var BfCardComponent = class BfCardComponent {
8307
8318
  actions = signal(0, ...ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []);
8308
8319
  actionFocusVisible = signal(false, ...ngDevMode ? [{ debugName: "actionFocusVisible" }] : /* istanbul ignore next */ []);
8309
8320
  classes = computed(() => [
8310
- BASE$7,
8321
+ BASE$8,
8311
8322
  VARIANT$3[this.variant()],
8312
8323
  PADDING$2[this.padding()],
8313
8324
  this.interactive() ? INTERACTIVE : ACTION[this.actionState()]
@@ -8456,7 +8467,34 @@ i0.ɵɵngDeclareClassMetadata({
8456
8467
  }]
8457
8468
  }
8458
8469
  });
8459
- const BASE$6 = "transition-opacity duration-slow ease-md motion-reduce:transition-none";
8470
+ function imageLoadState(src, loading, failed) {
8471
+ const status = linkedSignal({
8472
+ ...ngDevMode ? { debugName: "status" } : /* istanbul ignore next */ {},
8473
+ source: src,
8474
+ computation: () => "pending"
8475
+ });
8476
+ const skeletonGone = linkedSignal({
8477
+ ...ngDevMode ? { debugName: "skeletonGone" } : /* istanbul ignore next */ {},
8478
+ source: src,
8479
+ computation: () => false
8480
+ });
8481
+ const phase = computed(() => {
8482
+ if (failed() || status() === "error") return "failed";
8483
+ if (!src()) return loading() ? "loading" : "empty";
8484
+ return status() === "loaded" ? "loaded" : "loading";
8485
+ }, ...ngDevMode ? [{ debugName: "phase" }] : /* istanbul ignore next */ []);
8486
+ return {
8487
+ phase,
8488
+ sources: computed(() => src() && phase() !== "failed" ? [src()] : []),
8489
+ skeletonShown: computed(() => phase() === "loading" || phase() === "loaded" && !skeletonGone()),
8490
+ loaded: () => status.set("loaded"),
8491
+ errored: () => status.set("error"),
8492
+ skeletonFaded: (event) => {
8493
+ if (event.target === event.currentTarget && phase() === "loaded") skeletonGone.set(true);
8494
+ }
8495
+ };
8496
+ }
8497
+ const BASE$7 = "transition-opacity duration-slow ease-md motion-reduce:transition-none";
8460
8498
  var BfFadeInDirective = class BfFadeInDirective {
8461
8499
  image = inject(ElementRef).nativeElement;
8462
8500
  shown = signal(false, ...ngDevMode ? [{ debugName: "shown" }] : /* istanbul ignore next */ []);
@@ -8506,7 +8544,7 @@ i0.ɵɵngDeclareClassMetadata({
8506
8544
  args: [{
8507
8545
  selector: "img[bfFadeIn]",
8508
8546
  host: {
8509
- class: BASE$6,
8547
+ class: BASE$7,
8510
8548
  "[class.opacity-0]": "!shown()",
8511
8549
  "[attr.data-loaded]": "shown() ? '' : null",
8512
8550
  "(load)": "show()",
@@ -8663,24 +8701,24 @@ i0.ɵɵngDeclareClassMetadata({
8663
8701
  }]
8664
8702
  }
8665
8703
  });
8666
- const BASE$5 = "relative flex h-full w-full flex-col rounded-card bg-surface text-text text-start shadow-raised outline-2 outline-offset-2 transition-[box-shadow,outline-color] duration-fast ease-md motion-reduce:transition-none";
8667
- const SELECTED = {
8704
+ const BASE$6 = "relative flex h-full w-full flex-col rounded-card bg-surface text-text text-start shadow-raised outline-2 outline-offset-2 transition-[box-shadow,outline-color] duration-fast ease-md motion-reduce:transition-none";
8705
+ const SELECTED$1 = {
8668
8706
  on: "outline-primary forced-colors:outline-[Highlight]",
8669
8707
  off: "outline-transparent forced-colors:outline-0"
8670
8708
  };
8671
- const CUE = {
8709
+ const CUE$1 = {
8672
8710
  none: "",
8673
8711
  action: "cursor-pointer hover:shadow-floating has-[[data-bf-action]:active]:shadow-raised has-[[data-select]:active]:shadow-raised",
8674
8712
  focused: "cursor-pointer hover:shadow-floating has-[[data-bf-action]:active]:shadow-raised has-[[data-select]:active]:shadow-raised ring-4 ring-ring"
8675
8713
  };
8676
- const ASPECT = {
8714
+ const ASPECT$1 = {
8677
8715
  "16/9": "aspect-video",
8678
8716
  "4/3": "aspect-[4/3]",
8679
8717
  "1/1": "aspect-square",
8680
8718
  "3/4": "aspect-[3/4]"
8681
8719
  };
8682
- const MEDIA = "relative w-full shrink-0 overflow-hidden rounded-t-card bg-surface-sunken";
8683
- const SKELETON_LAYER = "absolute inset-0 transition-opacity duration-slow ease-md motion-reduce:transition-none";
8720
+ const MEDIA$1 = "relative w-full shrink-0 overflow-hidden rounded-t-card bg-surface-sunken";
8721
+ const SKELETON_LAYER$1 = "absolute inset-0 transition-opacity duration-slow ease-md motion-reduce:transition-none";
8684
8722
  const SELECT = {
8685
8723
  stretched: "cursor-pointer after:absolute after:inset-0 after:content-[''] focus-visible:outline-none focus-visible:after:outline-hidden",
8686
8724
  corner: "absolute top-2 end-2 z-1 grid size-8 cursor-pointer place-items-center rounded-full focus-visible:ring-4 focus-visible:ring-ring focus-visible:outline-hidden pointer-coarse:after:absolute pointer-coarse:after:-inset-1.5 pointer-coarse:after:content-['']"
@@ -8724,24 +8762,11 @@ var BfMediaCardComponent = class BfMediaCardComponent {
8724
8762
  bodyId = uniqueId("bf-media-card-body");
8725
8763
  selectTextId = uniqueId("bf-media-card-select");
8726
8764
  labelId = uniqueId("bf-media-card-label");
8727
- skeletonLayerClasses = SKELETON_LAYER;
8728
- imageStatus = linkedSignal({
8729
- ...ngDevMode ? { debugName: "imageStatus" } : /* istanbul ignore next */ {},
8730
- source: this.src,
8731
- computation: () => "pending"
8732
- });
8733
- skeletonGone = linkedSignal({
8734
- ...ngDevMode ? { debugName: "skeletonGone" } : /* istanbul ignore next */ {},
8735
- source: this.src,
8736
- computation: () => false
8737
- });
8738
- state = computed(() => {
8739
- if (this.failed() || this.imageStatus() === "error") return "failed";
8740
- if (!this.src()) return this.loading() ? "loading" : "empty";
8741
- return this.imageStatus() === "loaded" ? "loaded" : "loading";
8742
- }, ...ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []);
8743
- imageSources = computed(() => this.src() && this.state() !== "failed" ? [this.src()] : [], ...ngDevMode ? [{ debugName: "imageSources" }] : /* istanbul ignore next */ []);
8744
- skeletonShown = computed(() => this.state() === "loading" || this.state() === "loaded" && !this.skeletonGone(), ...ngDevMode ? [{ debugName: "skeletonShown" }] : /* istanbul ignore next */ []);
8765
+ skeletonLayerClasses = SKELETON_LAYER$1;
8766
+ image = imageLoadState(this.src, this.loading, this.failed);
8767
+ state = this.image.phase;
8768
+ imageSources = this.image.sources;
8769
+ skeletonShown = this.image.skeletonShown;
8745
8770
  bodyNamesSelect = computed(() => this.selectable() && !this.label(), ...ngDevMode ? [{ debugName: "bodyNamesSelect" }] : /* istanbul ignore next */ []);
8746
8771
  failedText = computed(() => this.failedLabel() || this.labels.imageLoadFailed, ...ngDevMode ? [{ debugName: "failedText" }] : /* istanbul ignore next */ []);
8747
8772
  selectMode = computed(() => this.actions() > 0 ? "corner" : "stretched", ...ngDevMode ? [{ debugName: "selectMode" }] : /* istanbul ignore next */ []);
@@ -8751,11 +8776,11 @@ var BfMediaCardComponent = class BfMediaCardComponent {
8751
8776
  return this.actionFocusVisible() || stretched && this.selectFocusVisible() ? "focused" : "action";
8752
8777
  }, ...ngDevMode ? [{ debugName: "cue" }] : /* istanbul ignore next */ []);
8753
8778
  classes = computed(() => [
8754
- BASE$5,
8755
- SELECTED[this.selectable() && this.selected() ? "on" : "off"],
8756
- CUE[this.cue()]
8779
+ BASE$6,
8780
+ SELECTED$1[this.selectable() && this.selected() ? "on" : "off"],
8781
+ CUE$1[this.cue()]
8757
8782
  ].filter(Boolean).join(" "), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
8758
- mediaClasses = computed(() => `${MEDIA} ${ASPECT[this.aspect()]}`, ...ngDevMode ? [{ debugName: "mediaClasses" }] : /* istanbul ignore next */ []);
8783
+ mediaClasses = computed(() => `${MEDIA$1} ${ASPECT$1[this.aspect()]}`, ...ngDevMode ? [{ debugName: "mediaClasses" }] : /* istanbul ignore next */ []);
8759
8784
  selectClasses = computed(() => SELECT[this.selectMode()], ...ngDevMode ? [{ debugName: "selectClasses" }] : /* istanbul ignore next */ []);
8760
8785
  discClasses = computed(() => [DISC[this.selected() ? "on" : "off"], DISC_POSITION[this.selectMode()]].filter(Boolean).join(" "), ...ngDevMode ? [{ debugName: "discClasses" }] : /* istanbul ignore next */ []);
8761
8786
  registerAction() {
@@ -8766,15 +8791,15 @@ var BfMediaCardComponent = class BfMediaCardComponent {
8766
8791
  this.actionFocusVisible.set(visible);
8767
8792
  }
8768
8793
  imageLoaded() {
8769
- this.imageStatus.set("loaded");
8794
+ this.image.loaded();
8770
8795
  this.loaded.emit();
8771
8796
  }
8772
8797
  imageFailed() {
8773
- this.imageStatus.set("error");
8798
+ this.image.errored();
8774
8799
  this.errored.emit();
8775
8800
  }
8776
8801
  skeletonFaded(event) {
8777
- if (event.target === event.currentTarget && this.state() === "loaded") this.skeletonGone.set(true);
8802
+ this.image.skeletonFaded(event);
8778
8803
  }
8779
8804
  toggle() {
8780
8805
  const next = !this.selected();
@@ -9191,6 +9216,451 @@ i0.ɵɵngDeclareClassMetadata({
9191
9216
  }]
9192
9217
  }
9193
9218
  });
9219
+ const BASE$5 = "group/tile relative grid h-full w-full rounded-card bg-surface text-text text-start shadow-raised forced-colors:border forced-colors:border-[CanvasText] outline-2 outline-offset-2 transition-[translate,box-shadow,outline-color] duration-base ease-md motion-reduce:transition-none";
9220
+ const LAYOUT$1 = {
9221
+ below: "grid-rows-[auto_1fr]",
9222
+ overlay: "[&>*]:[grid-area:1/1]"
9223
+ };
9224
+ const SELECTED = {
9225
+ on: "outline-primary forced-colors:outline-[Highlight]",
9226
+ off: "outline-transparent forced-colors:outline-0"
9227
+ };
9228
+ const ACTION_CUE = "cursor-pointer hover:shadow-floating motion-safe:hover:-translate-y-0.5 has-[[data-bf-action]:active]:shadow-raised motion-safe:has-[[data-bf-action]:active]:translate-y-0";
9229
+ const CUE = {
9230
+ none: "",
9231
+ action: ACTION_CUE,
9232
+ focused: `${ACTION_CUE} ring-4 ring-ring`
9233
+ };
9234
+ const ASPECT = {
9235
+ "1/1": "aspect-square",
9236
+ "4/3": "aspect-[4/3]",
9237
+ "16/9": "aspect-video",
9238
+ "3/4": "aspect-[3/4]"
9239
+ };
9240
+ const MEDIA = "relative w-full overflow-hidden bg-surface-sunken";
9241
+ const MEDIA_CORNERS = {
9242
+ below: "rounded-t-card",
9243
+ overlay: "rounded-card"
9244
+ };
9245
+ const ZOOM_BASE = "absolute inset-0";
9246
+ const ZOOM_ACTION = "motion-safe:transition-[scale] motion-safe:duration-slow motion-safe:ease-md motion-safe:group-hover/tile:scale-105";
9247
+ const SKELETON_LAYER = "absolute inset-0 transition-opacity duration-slow ease-md motion-reduce:transition-none";
9248
+ const CAPTION = {
9249
+ below: "flex min-w-0 flex-col gap-0.5 p-3",
9250
+ overlay: "dark z-0 flex min-w-0 flex-col gap-0.5 self-end rounded-b-card bg-linear-to-t from-scrim/80 via-scrim/55 to-transparent p-3 pt-10 text-text"
9251
+ };
9252
+ const TITLE$1 = "min-h-[2lh] text-label-sm font-bold [&>*]:line-clamp-2 [&>*]:break-words [&_a]:text-inherit [&_button]:line-clamp-2 [&_button]:text-start";
9253
+ const META = "text-caption text-text-muted empty:hidden";
9254
+ var BfImageTileComponent = class BfImageTileComponent {
9255
+ labels = inject(BF_LABELS);
9256
+ src = input("", ...ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []);
9257
+ alt = input("", ...ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []);
9258
+ aspect = input("1/1", ...ngDevMode ? [{ debugName: "aspect" }] : /* istanbul ignore next */ []);
9259
+ captionPlacement = input("below", ...ngDevMode ? [{ debugName: "captionPlacement" }] : /* istanbul ignore next */ []);
9260
+ loading = input(false, {
9261
+ ...ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {},
9262
+ transform: booleanAttribute
9263
+ });
9264
+ failed = input(false, {
9265
+ ...ngDevMode ? { debugName: "failed" } : /* istanbul ignore next */ {},
9266
+ transform: booleanAttribute
9267
+ });
9268
+ selected = input(false, {
9269
+ ...ngDevMode ? { debugName: "selected" } : /* istanbul ignore next */ {},
9270
+ transform: booleanAttribute
9271
+ });
9272
+ placeholderLabel = input("", ...ngDevMode ? [{ debugName: "placeholderLabel" }] : /* istanbul ignore next */ []);
9273
+ failedLabel = input("", ...ngDevMode ? [{ debugName: "failedLabel" }] : /* istanbul ignore next */ []);
9274
+ loaded = output();
9275
+ errored = output();
9276
+ actions = signal(0, ...ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []);
9277
+ actionFocusVisible = signal(false, ...ngDevMode ? [{ debugName: "actionFocusVisible" }] : /* istanbul ignore next */ []);
9278
+ image = imageLoadState(this.src, this.loading, this.failed);
9279
+ state = this.image.phase;
9280
+ imageSources = this.image.sources;
9281
+ skeletonShown = this.image.skeletonShown;
9282
+ skeletonLayerClasses = SKELETON_LAYER;
9283
+ titleClasses = TITLE$1;
9284
+ metaClasses = META;
9285
+ hasAction = computed(() => this.actions() > 0, ...ngDevMode ? [{ debugName: "hasAction" }] : /* istanbul ignore next */ []);
9286
+ selectedIdValue;
9287
+ selectedId = computed(() => this.selected() ? this.selectedIdValue ??= uniqueId("bf-image-tile-selected") : null, ...ngDevMode ? [{ debugName: "selectedId" }] : /* istanbul ignore next */ []);
9288
+ actionLabelPrefix = computed(() => this.hasAction() ? this.selectedId() : null, ...ngDevMode ? [{ debugName: "actionLabelPrefix" }] : /* istanbul ignore next */ []);
9289
+ placeholderText = computed(() => this.placeholderLabel() || this.labels.imageTileEmpty, ...ngDevMode ? [{ debugName: "placeholderText" }] : /* istanbul ignore next */ []);
9290
+ failedText = computed(() => this.failedLabel() || this.labels.imageLoadFailed, ...ngDevMode ? [{ debugName: "failedText" }] : /* istanbul ignore next */ []);
9291
+ cue = computed(() => {
9292
+ if (!this.hasAction()) return "none";
9293
+ return this.actionFocusVisible() ? "focused" : "action";
9294
+ }, ...ngDevMode ? [{ debugName: "cue" }] : /* istanbul ignore next */ []);
9295
+ classes = computed(() => [
9296
+ BASE$5,
9297
+ LAYOUT$1[this.captionPlacement()],
9298
+ SELECTED[this.selected() ? "on" : "off"],
9299
+ CUE[this.cue()]
9300
+ ].filter(Boolean).join(" "), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
9301
+ mediaClasses = computed(() => `${MEDIA} ${MEDIA_CORNERS[this.captionPlacement()]} ${ASPECT[this.aspect()]}`, ...ngDevMode ? [{ debugName: "mediaClasses" }] : /* istanbul ignore next */ []);
9302
+ zoomClasses = computed(() => this.hasAction() ? `${ZOOM_BASE} ${ZOOM_ACTION}` : ZOOM_BASE, ...ngDevMode ? [{ debugName: "zoomClasses" }] : /* istanbul ignore next */ []);
9303
+ statusClasses = computed(() => ["absolute inset-x-0 top-0 flex flex-col items-center justify-center gap-2 p-3 text-center", this.captionPlacement() === "overlay" ? "bottom-1/3" : "bottom-0"].join(" "), ...ngDevMode ? [{ debugName: "statusClasses" }] : /* istanbul ignore next */ []);
9304
+ captionClasses = computed(() => CAPTION[this.captionPlacement()], ...ngDevMode ? [{ debugName: "captionClasses" }] : /* istanbul ignore next */ []);
9305
+ registerAction() {
9306
+ this.actions.update((n) => n + 1);
9307
+ return () => this.actions.update((n) => n - 1);
9308
+ }
9309
+ setActionFocusVisible(visible) {
9310
+ this.actionFocusVisible.set(visible);
9311
+ }
9312
+ imageLoaded() {
9313
+ this.image.loaded();
9314
+ this.loaded.emit();
9315
+ }
9316
+ imageFailed() {
9317
+ this.image.errored();
9318
+ this.errored.emit();
9319
+ }
9320
+ skeletonFaded(event) {
9321
+ this.image.skeletonFaded(event);
9322
+ }
9323
+ static ɵfac = i0.ɵɵngDeclareFactory({
9324
+ minVersion: "12.0.0",
9325
+ version: "22.1.7",
9326
+ ngImport: i0,
9327
+ type: BfImageTileComponent,
9328
+ deps: [],
9329
+ target: i0.ɵɵFactoryTarget.Component
9330
+ });
9331
+ static ɵcmp = i0.ɵɵngDeclareComponent({
9332
+ minVersion: "17.0.0",
9333
+ version: "22.1.7",
9334
+ type: BfImageTileComponent,
9335
+ isStandalone: true,
9336
+ selector: "bf-image-tile",
9337
+ inputs: {
9338
+ src: {
9339
+ classPropertyName: "src",
9340
+ publicName: "src",
9341
+ isSignal: true,
9342
+ isRequired: false,
9343
+ transformFunction: null
9344
+ },
9345
+ alt: {
9346
+ classPropertyName: "alt",
9347
+ publicName: "alt",
9348
+ isSignal: true,
9349
+ isRequired: false,
9350
+ transformFunction: null
9351
+ },
9352
+ aspect: {
9353
+ classPropertyName: "aspect",
9354
+ publicName: "aspect",
9355
+ isSignal: true,
9356
+ isRequired: false,
9357
+ transformFunction: null
9358
+ },
9359
+ captionPlacement: {
9360
+ classPropertyName: "captionPlacement",
9361
+ publicName: "captionPlacement",
9362
+ isSignal: true,
9363
+ isRequired: false,
9364
+ transformFunction: null
9365
+ },
9366
+ loading: {
9367
+ classPropertyName: "loading",
9368
+ publicName: "loading",
9369
+ isSignal: true,
9370
+ isRequired: false,
9371
+ transformFunction: null
9372
+ },
9373
+ failed: {
9374
+ classPropertyName: "failed",
9375
+ publicName: "failed",
9376
+ isSignal: true,
9377
+ isRequired: false,
9378
+ transformFunction: null
9379
+ },
9380
+ selected: {
9381
+ classPropertyName: "selected",
9382
+ publicName: "selected",
9383
+ isSignal: true,
9384
+ isRequired: false,
9385
+ transformFunction: null
9386
+ },
9387
+ placeholderLabel: {
9388
+ classPropertyName: "placeholderLabel",
9389
+ publicName: "placeholderLabel",
9390
+ isSignal: true,
9391
+ isRequired: false,
9392
+ transformFunction: null
9393
+ },
9394
+ failedLabel: {
9395
+ classPropertyName: "failedLabel",
9396
+ publicName: "failedLabel",
9397
+ isSignal: true,
9398
+ isRequired: false,
9399
+ transformFunction: null
9400
+ }
9401
+ },
9402
+ outputs: {
9403
+ loaded: "loaded",
9404
+ errored: "errored"
9405
+ },
9406
+ host: { classAttribute: "block" },
9407
+ providers: [{
9408
+ provide: BF_ACTION_HOST,
9409
+ useExisting: BfImageTileComponent
9410
+ }],
9411
+ ngImport: i0,
9412
+ template: `
9413
+ <div
9414
+ [class]="classes()"
9415
+ [attr.data-placement]="captionPlacement()"
9416
+ [attr.data-selected]="selected() ? '' : null"
9417
+ >
9418
+ <div
9419
+ data-media
9420
+ [class]="mediaClasses()"
9421
+ [attr.data-state]="state()"
9422
+ [attr.aria-busy]="state() === 'loading' ? 'true' : null"
9423
+ >
9424
+ <div data-zoom [class]="zoomClasses()">
9425
+ @if (skeletonShown()) {
9426
+ <div
9427
+ data-skeleton
9428
+ [class]="skeletonLayerClasses"
9429
+ [class.opacity-0]="state() === 'loaded'"
9430
+ (transitionend)="skeletonFaded($event)"
9431
+ >
9432
+ <bf-skeleton shape="rect" height="100%" />
9433
+ @if (state() === 'loading') {
9434
+ <span class="sr-only">{{ labels.loading }}</span>
9435
+ }
9436
+ </div>
9437
+ }
9438
+ @for (url of imageSources(); track url) {
9439
+ <img
9440
+ bfFadeIn
9441
+ class="absolute inset-0 size-full object-cover"
9442
+ [src]="url"
9443
+ [alt]="alt()"
9444
+ (load)="imageLoaded()"
9445
+ (error)="imageFailed()"
9446
+ />
9447
+ }
9448
+ </div>
9449
+ @if (state() === 'empty') {
9450
+ <div data-placeholder [class]="statusClasses()">
9451
+ <span class="text-text-muted inline-flex empty:hidden [&_svg]:size-6"
9452
+ ><ng-content select="[bfSlot=placeholder-icon]"
9453
+ /></span>
9454
+ <p class="text-caption text-text-muted">{{ placeholderText() }}</p>
9455
+ </div>
9456
+ }
9457
+ @if (state() === 'failed') {
9458
+ <div data-failed [class]="statusClasses()">
9459
+ <p class="text-caption text-text-muted">{{ failedText() }}</p>
9460
+ </div>
9461
+ }
9462
+ <div data-badge class="absolute start-2 top-2 flex empty:hidden">
9463
+ <ng-content select="[bfSlot=badge]" />
9464
+ </div>
9465
+ </div>
9466
+ <div data-caption [class]="captionClasses()">
9467
+ @if (selectedId(); as id) {
9468
+ <!-- Read before the title; with a bfAction the link's name takes it (aria-labelledby),
9469
+ so the text itself is hidden from the tree to be read once. -->
9470
+ <span [id]="id" class="sr-only" [attr.aria-hidden]="hasAction() ? 'true' : null"
9471
+ >{{ labels.imageTileSelected }},
9472
+ </span>
9473
+ }
9474
+ <div data-title [class]="titleClasses"><ng-content /></div>
9475
+ <div data-meta [class]="metaClasses"><ng-content select="[bfSlot=meta]" /></div>
9476
+ </div>
9477
+ </div>
9478
+ `,
9479
+ isInline: true,
9480
+ dependencies: [{
9481
+ kind: "directive",
9482
+ type: BfFadeInDirective,
9483
+ selector: "img[bfFadeIn]"
9484
+ }, {
9485
+ kind: "component",
9486
+ type: BfSkeletonComponent,
9487
+ selector: "bf-skeleton",
9488
+ inputs: [
9489
+ "shape",
9490
+ "lines",
9491
+ "width",
9492
+ "height"
9493
+ ]
9494
+ }]
9495
+ });
9496
+ };
9497
+ i0.ɵɵngDeclareClassMetadata({
9498
+ minVersion: "12.0.0",
9499
+ version: "22.1.7",
9500
+ ngImport: i0,
9501
+ type: BfImageTileComponent,
9502
+ decorators: [{
9503
+ type: Component,
9504
+ args: [{
9505
+ selector: "bf-image-tile",
9506
+ imports: [BfFadeInDirective, BfSkeletonComponent],
9507
+ host: { class: "block" },
9508
+ providers: [{
9509
+ provide: BF_ACTION_HOST,
9510
+ useExisting: BfImageTileComponent
9511
+ }],
9512
+ template: `
9513
+ <div
9514
+ [class]="classes()"
9515
+ [attr.data-placement]="captionPlacement()"
9516
+ [attr.data-selected]="selected() ? '' : null"
9517
+ >
9518
+ <div
9519
+ data-media
9520
+ [class]="mediaClasses()"
9521
+ [attr.data-state]="state()"
9522
+ [attr.aria-busy]="state() === 'loading' ? 'true' : null"
9523
+ >
9524
+ <div data-zoom [class]="zoomClasses()">
9525
+ @if (skeletonShown()) {
9526
+ <div
9527
+ data-skeleton
9528
+ [class]="skeletonLayerClasses"
9529
+ [class.opacity-0]="state() === 'loaded'"
9530
+ (transitionend)="skeletonFaded($event)"
9531
+ >
9532
+ <bf-skeleton shape="rect" height="100%" />
9533
+ @if (state() === 'loading') {
9534
+ <span class="sr-only">{{ labels.loading }}</span>
9535
+ }
9536
+ </div>
9537
+ }
9538
+ @for (url of imageSources(); track url) {
9539
+ <img
9540
+ bfFadeIn
9541
+ class="absolute inset-0 size-full object-cover"
9542
+ [src]="url"
9543
+ [alt]="alt()"
9544
+ (load)="imageLoaded()"
9545
+ (error)="imageFailed()"
9546
+ />
9547
+ }
9548
+ </div>
9549
+ @if (state() === 'empty') {
9550
+ <div data-placeholder [class]="statusClasses()">
9551
+ <span class="text-text-muted inline-flex empty:hidden [&_svg]:size-6"
9552
+ ><ng-content select="[bfSlot=placeholder-icon]"
9553
+ /></span>
9554
+ <p class="text-caption text-text-muted">{{ placeholderText() }}</p>
9555
+ </div>
9556
+ }
9557
+ @if (state() === 'failed') {
9558
+ <div data-failed [class]="statusClasses()">
9559
+ <p class="text-caption text-text-muted">{{ failedText() }}</p>
9560
+ </div>
9561
+ }
9562
+ <div data-badge class="absolute start-2 top-2 flex empty:hidden">
9563
+ <ng-content select="[bfSlot=badge]" />
9564
+ </div>
9565
+ </div>
9566
+ <div data-caption [class]="captionClasses()">
9567
+ @if (selectedId(); as id) {
9568
+ <!-- Read before the title; with a bfAction the link's name takes it (aria-labelledby),
9569
+ so the text itself is hidden from the tree to be read once. -->
9570
+ <span [id]="id" class="sr-only" [attr.aria-hidden]="hasAction() ? 'true' : null"
9571
+ >{{ labels.imageTileSelected }},
9572
+ </span>
9573
+ }
9574
+ <div data-title [class]="titleClasses"><ng-content /></div>
9575
+ <div data-meta [class]="metaClasses"><ng-content select="[bfSlot=meta]" /></div>
9576
+ </div>
9577
+ </div>
9578
+ `
9579
+ }]
9580
+ }],
9581
+ propDecorators: {
9582
+ src: [{
9583
+ type: i0.Input,
9584
+ args: [{
9585
+ isSignal: true,
9586
+ alias: "src",
9587
+ required: false
9588
+ }]
9589
+ }],
9590
+ alt: [{
9591
+ type: i0.Input,
9592
+ args: [{
9593
+ isSignal: true,
9594
+ alias: "alt",
9595
+ required: false
9596
+ }]
9597
+ }],
9598
+ aspect: [{
9599
+ type: i0.Input,
9600
+ args: [{
9601
+ isSignal: true,
9602
+ alias: "aspect",
9603
+ required: false
9604
+ }]
9605
+ }],
9606
+ captionPlacement: [{
9607
+ type: i0.Input,
9608
+ args: [{
9609
+ isSignal: true,
9610
+ alias: "captionPlacement",
9611
+ required: false
9612
+ }]
9613
+ }],
9614
+ loading: [{
9615
+ type: i0.Input,
9616
+ args: [{
9617
+ isSignal: true,
9618
+ alias: "loading",
9619
+ required: false
9620
+ }]
9621
+ }],
9622
+ failed: [{
9623
+ type: i0.Input,
9624
+ args: [{
9625
+ isSignal: true,
9626
+ alias: "failed",
9627
+ required: false
9628
+ }]
9629
+ }],
9630
+ selected: [{
9631
+ type: i0.Input,
9632
+ args: [{
9633
+ isSignal: true,
9634
+ alias: "selected",
9635
+ required: false
9636
+ }]
9637
+ }],
9638
+ placeholderLabel: [{
9639
+ type: i0.Input,
9640
+ args: [{
9641
+ isSignal: true,
9642
+ alias: "placeholderLabel",
9643
+ required: false
9644
+ }]
9645
+ }],
9646
+ failedLabel: [{
9647
+ type: i0.Input,
9648
+ args: [{
9649
+ isSignal: true,
9650
+ alias: "failedLabel",
9651
+ required: false
9652
+ }]
9653
+ }],
9654
+ loaded: [{
9655
+ type: i0.Output,
9656
+ args: ["loaded"]
9657
+ }],
9658
+ errored: [{
9659
+ type: i0.Output,
9660
+ args: ["errored"]
9661
+ }]
9662
+ }
9663
+ });
9194
9664
  const TRACK = "[grid-area:1/1] block w-full appearance-none overflow-hidden rounded-full bg-surface-sunken [&::-webkit-progress-bar]:bg-surface-sunken [&::-webkit-progress-bar]:rounded-full [&::-webkit-progress-value]:rounded-full [&::-webkit-progress-value]:transition-[width] motion-reduce:[&::-webkit-progress-value]:transition-none [&::-moz-progress-bar]:rounded-full indeterminate:[&::-moz-progress-bar]:bg-transparent";
9195
9665
  const SIZE$1 = {
9196
9666
  sm: "h-2",
@@ -14990,12 +15460,18 @@ var BfPaginationComponent = class BfPaginationComponent {
14990
15460
  ...ngDevMode ? { debugName: "compact" } : /* istanbul ignore next */ {},
14991
15461
  transform: booleanAttribute
14992
15462
  });
15463
+ positionLabel = input(void 0, ...ngDevMode ? [{ debugName: "positionLabel" }] : /* istanbul ignore next */ []);
15464
+ previousLabel = input("", ...ngDevMode ? [{ debugName: "previousLabel" }] : /* istanbul ignore next */ []);
15465
+ nextLabel = input("", ...ngDevMode ? [{ debugName: "nextLabel" }] : /* istanbul ignore next */ []);
14993
15466
  size = input(void 0, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
14994
15467
  label = input("", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
14995
15468
  labels = inject(BF_LABELS);
14996
15469
  defaults = inject(BF_DEFAULTS);
14997
15470
  resolvedSize = computed(() => this.size() ?? this.defaults.controlSize, ...ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []);
14998
15471
  name = computed(() => this.label() || this.labels.pagination, ...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
15472
+ previousName = computed(() => this.previousLabel() || this.labels.previousPage, ...ngDevMode ? [{ debugName: "previousName" }] : /* istanbul ignore next */ []);
15473
+ nextName = computed(() => this.nextLabel() || this.labels.nextPage, ...ngDevMode ? [{ debugName: "nextName" }] : /* istanbul ignore next */ []);
15474
+ position = computed(() => (this.positionLabel() ?? this.labels.pageOf)(this.current(), this.count()), ...ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []);
14999
15475
  count = computed(() => {
15000
15476
  const pageCount = Math.floor(this.pageCount());
15001
15477
  if (pageCount > 0) return pageCount;
@@ -15083,6 +15559,27 @@ var BfPaginationComponent = class BfPaginationComponent {
15083
15559
  isRequired: false,
15084
15560
  transformFunction: null
15085
15561
  },
15562
+ positionLabel: {
15563
+ classPropertyName: "positionLabel",
15564
+ publicName: "positionLabel",
15565
+ isSignal: true,
15566
+ isRequired: false,
15567
+ transformFunction: null
15568
+ },
15569
+ previousLabel: {
15570
+ classPropertyName: "previousLabel",
15571
+ publicName: "previousLabel",
15572
+ isSignal: true,
15573
+ isRequired: false,
15574
+ transformFunction: null
15575
+ },
15576
+ nextLabel: {
15577
+ classPropertyName: "nextLabel",
15578
+ publicName: "nextLabel",
15579
+ isSignal: true,
15580
+ isRequired: false,
15581
+ transformFunction: null
15582
+ },
15086
15583
  size: {
15087
15584
  classPropertyName: "size",
15088
15585
  publicName: "size",
@@ -15112,7 +15609,7 @@ var BfPaginationComponent = class BfPaginationComponent {
15112
15609
  <button
15113
15610
  type="button"
15114
15611
  data-bf-pagination-previous
15115
- [attr.aria-label]="labels.previousPage"
15612
+ [attr.aria-label]="previousName()"
15116
15613
  [attr.aria-disabled]="current() <= 1 ? 'true' : null"
15117
15614
  [class]="arrowClasses(current() <= 1)"
15118
15615
  (click)="go(current() - 1)"
@@ -15122,7 +15619,7 @@ var BfPaginationComponent = class BfPaginationComponent {
15122
15619
  </li>
15123
15620
  @if (compact()) {
15124
15621
  <li [class]="statusClasses()">
15125
- <span aria-live="polite">{{ labels.pageOf(current(), count()) }}</span>
15622
+ <span aria-live="polite">{{ position() }}</span>
15126
15623
  </li>
15127
15624
  } @else {
15128
15625
  @for (item of items(); track item) {
@@ -15148,7 +15645,7 @@ var BfPaginationComponent = class BfPaginationComponent {
15148
15645
  <button
15149
15646
  type="button"
15150
15647
  data-bf-pagination-next
15151
- [attr.aria-label]="labels.nextPage"
15648
+ [attr.aria-label]="nextName()"
15152
15649
  [attr.aria-disabled]="current() >= count() ? 'true' : null"
15153
15650
  [class]="arrowClasses(current() >= count())"
15154
15651
  (click)="go(current() + 1)"
@@ -15183,7 +15680,7 @@ i0.ɵɵngDeclareClassMetadata({
15183
15680
  <button
15184
15681
  type="button"
15185
15682
  data-bf-pagination-previous
15186
- [attr.aria-label]="labels.previousPage"
15683
+ [attr.aria-label]="previousName()"
15187
15684
  [attr.aria-disabled]="current() <= 1 ? 'true' : null"
15188
15685
  [class]="arrowClasses(current() <= 1)"
15189
15686
  (click)="go(current() - 1)"
@@ -15193,7 +15690,7 @@ i0.ɵɵngDeclareClassMetadata({
15193
15690
  </li>
15194
15691
  @if (compact()) {
15195
15692
  <li [class]="statusClasses()">
15196
- <span aria-live="polite">{{ labels.pageOf(current(), count()) }}</span>
15693
+ <span aria-live="polite">{{ position() }}</span>
15197
15694
  </li>
15198
15695
  } @else {
15199
15696
  @for (item of items(); track item) {
@@ -15219,7 +15716,7 @@ i0.ɵɵngDeclareClassMetadata({
15219
15716
  <button
15220
15717
  type="button"
15221
15718
  data-bf-pagination-next
15222
- [attr.aria-label]="labels.nextPage"
15719
+ [attr.aria-label]="nextName()"
15223
15720
  [attr.aria-disabled]="current() >= count() ? 'true' : null"
15224
15721
  [class]="arrowClasses(current() >= count())"
15225
15722
  (click)="go(current() + 1)"
@@ -15284,6 +15781,30 @@ i0.ɵɵngDeclareClassMetadata({
15284
15781
  required: false
15285
15782
  }]
15286
15783
  }],
15784
+ positionLabel: [{
15785
+ type: i0.Input,
15786
+ args: [{
15787
+ isSignal: true,
15788
+ alias: "positionLabel",
15789
+ required: false
15790
+ }]
15791
+ }],
15792
+ previousLabel: [{
15793
+ type: i0.Input,
15794
+ args: [{
15795
+ isSignal: true,
15796
+ alias: "previousLabel",
15797
+ required: false
15798
+ }]
15799
+ }],
15800
+ nextLabel: [{
15801
+ type: i0.Input,
15802
+ args: [{
15803
+ isSignal: true,
15804
+ alias: "nextLabel",
15805
+ required: false
15806
+ }]
15807
+ }],
15287
15808
  size: [{
15288
15809
  type: i0.Input,
15289
15810
  args: [{
@@ -17541,6 +18062,6 @@ function provideBfDocumentReset() {
17541
18062
  inject(DestroyRef).onDestroy(() => resetBfDocument(document));
17542
18063
  });
17543
18064
  }
17544
- export { BF_COLOR_SCHEME_STORAGE, BF_DEFAULTS, BF_DEFAULT_LABELS, BF_DEFAULT_VALUES, BF_LABELS, BF_SIDEBAR_STATE_STORAGE, BF_TABLE_SORT_SELECT, BF_TAB_BAR, BF_TAB_BAR_CONTROLLER, BF_TAB_LINKS, BfActionBarComponent, BfActionDirective, BfAlertComponent, BfAppFrameComponent, BfAvatarComponent, BfBadgeComponent, BfBreadcrumbComponent, BfBreadcrumbItemComponent, BfButtonComponent, BfCalendarComponent, BfCardComponent, BfChatMessageComponent, BfChatThreadComponent, BfCheckboxComponent, BfChipComponent, BfChipGroupComponent, BfColorSchemeService, BfDescriptionItemComponent, BfDescriptionListComponent, BfEmptyStateComponent, BfFadeInDirective, BfFieldComponent, BfFileInputComponent, BfIconButtonComponent, BfImageInputComponent, BfInputComponent, BfListComponent, BfListItemComponent, BfMediaCardComponent, BfMotionListDirective, BfNavGroupComponent, BfNavItemComponent, BfPageHeaderComponent, BfPaginationComponent, BfProgressComponent, BfProseDirective, BfRadioGroupComponent, BfSegmentedComponent, BfSidebarComponent, BfSidebarStateService, BfSkeletonComponent, BfSpinnerComponent, BfStatComponent, BfStepComponent, BfStepsComponent, BfTabBarComponent, BfTabComponent, BfTabGroupComponent, BfTabPanelComponent, BfTableCellDirective, BfTableComponent, BfTextareaComponent, BfThemeSwitchComponent, BfTimelineComponent, BfTimelineEventComponent, BfToggleComponent, BfToolbarComponent, BfTopNavComponent, bfFieldControlClass, bfValidationMessage, provideBfColorScheme, provideBfDefaults, provideBfLabels, provideBfSidebarState, BUTTON_CLASSES as ɵBF_BUTTON_CLASSES, ICON_BUTTON_CLASSES as ɵBF_ICON_BUTTON_CLASSES, BF_NAV as ɵBF_NAV, BfNativeSelectComponent as ɵBfNativeSelectComponent, FIELD_BOX as ɵFIELD_BOX, FIELD_ICON_END as ɵFIELD_ICON_END, FIELD_ICON_START as ɵFIELD_ICON_START, FIELD_PADDING_END as ɵFIELD_PADDING_END, FIELD_PADDING_START as ɵFIELD_PADDING_START, PILL_HIT as ɵPILL_HIT, choiceIndex as ɵchoiceIndex, choiceKey as ɵchoiceKey, compareIso as ɵcompareIso, createMemoryColorSchemeStorage as ɵcreateMemoryColorSchemeStorage, daysInMonth as ɵdaysInMonth, fieldDescribedBy as ɵfieldDescribedBy, fieldErrorMessageId as ɵfieldErrorMessageId, fieldErrorText as ɵfieldErrorText, fieldShowsError as ɵfieldShowsError, formatIsoDate as ɵformatIsoDate, localIsoDate as ɵlocalIsoDate, parseIsoDate as ɵparseIsoDate, provideBfDocumentReset as ɵprovideBfDocumentReset, uniqueId as ɵuniqueId, validIsoDate as ɵvalidIsoDate };
18065
+ export { BF_COLOR_SCHEME_STORAGE, BF_DEFAULTS, BF_DEFAULT_LABELS, BF_DEFAULT_VALUES, BF_LABELS, BF_SIDEBAR_STATE_STORAGE, BF_TABLE_SORT_SELECT, BF_TAB_BAR, BF_TAB_BAR_CONTROLLER, BF_TAB_LINKS, BfActionBarComponent, BfActionDirective, BfAlertComponent, BfAppFrameComponent, BfAvatarComponent, BfBadgeComponent, BfBreadcrumbComponent, BfBreadcrumbItemComponent, BfButtonComponent, BfCalendarComponent, BfCardComponent, BfChatMessageComponent, BfChatThreadComponent, BfCheckboxComponent, BfChipComponent, BfChipGroupComponent, BfColorSchemeService, BfDescriptionItemComponent, BfDescriptionListComponent, BfEmptyStateComponent, BfFadeInDirective, BfFieldComponent, BfFileInputComponent, BfIconButtonComponent, BfImageInputComponent, BfImageTileComponent, BfInputComponent, BfListComponent, BfListItemComponent, BfMediaCardComponent, BfMotionListDirective, BfNavGroupComponent, BfNavItemComponent, BfPageHeaderComponent, BfPaginationComponent, BfProgressComponent, BfProseDirective, BfRadioGroupComponent, BfSegmentedComponent, BfSidebarComponent, BfSidebarStateService, BfSkeletonComponent, BfSpinnerComponent, BfStatComponent, BfStepComponent, BfStepsComponent, BfTabBarComponent, BfTabComponent, BfTabGroupComponent, BfTabPanelComponent, BfTableCellDirective, BfTableComponent, BfTextareaComponent, BfThemeSwitchComponent, BfTimelineComponent, BfTimelineEventComponent, BfToggleComponent, BfToolbarComponent, BfTopNavComponent, bfFieldControlClass, bfValidationMessage, provideBfColorScheme, provideBfDefaults, provideBfLabels, provideBfSidebarState, BUTTON_CLASSES as ɵBF_BUTTON_CLASSES, ICON_BUTTON_CLASSES as ɵBF_ICON_BUTTON_CLASSES, BF_NAV as ɵBF_NAV, BfNativeSelectComponent as ɵBfNativeSelectComponent, FIELD_BOX as ɵFIELD_BOX, FIELD_ICON_END as ɵFIELD_ICON_END, FIELD_ICON_START as ɵFIELD_ICON_START, FIELD_PADDING_END as ɵFIELD_PADDING_END, FIELD_PADDING_START as ɵFIELD_PADDING_START, PILL_HIT as ɵPILL_HIT, choiceIndex as ɵchoiceIndex, choiceKey as ɵchoiceKey, compareIso as ɵcompareIso, createMemoryColorSchemeStorage as ɵcreateMemoryColorSchemeStorage, daysInMonth as ɵdaysInMonth, fieldDescribedBy as ɵfieldDescribedBy, fieldErrorMessageId as ɵfieldErrorMessageId, fieldErrorText as ɵfieldErrorText, fieldShowsError as ɵfieldShowsError, formatIsoDate as ɵformatIsoDate, localIsoDate as ɵlocalIsoDate, parseIsoDate as ɵparseIsoDate, provideBfDocumentReset as ɵprovideBfDocumentReset, uniqueId as ɵuniqueId, validIsoDate as ɵvalidIsoDate };
17545
18066
 
17546
18067
  //# sourceMappingURL=bitforgehq-ui.mjs.map