@selimssevgi/cube-design-angular 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import { ChangeDetectionStrategy, Component, DestroyRef, Directive, ElementRef, ErrorHandler, Injectable, InjectionToken, Injector, PLATFORM_ID, Renderer2, TemplateRef, afterNextRender, computed, contentChild, effect, inject, input, output, runInInjectionContext, signal, untracked, viewChild } from "@angular/core";
3
3
  import { NgTemplateOutlet, isPlatformBrowser } from "@angular/common";
4
+ import { NavigationEnd, NavigationStart, Router } from "@angular/router";
5
+ import { Subject, catchError, map, of, tap } from "rxjs";
4
6
  import { HttpClient, HttpErrorResponse } from "@angular/common/http";
5
- import { catchError, map, of, tap } from "rxjs";
6
- import { Router } from "@angular/router";
7
7
  function sizeFor(count) {
8
8
  let s = 1;
9
9
  while (s * s * s < count && s < 7) s++;
@@ -2464,6 +2464,20 @@ function squareLayout(view, count, room, opts = {}) {
2464
2464
  open: cols * rows - n
2465
2465
  };
2466
2466
  }
2467
+ function squareCell(width, across) {
2468
+ const k = Math.max(1, Math.floor(across));
2469
+ return width > 0 ? (width - squareGap(k) * (k - 1)) / k : 0;
2470
+ }
2471
+ function squareSideAt(view, count, cell, opts = {}) {
2472
+ const l = squareLayout(view, count, {
2473
+ width: 1e6,
2474
+ tall: 1e6
2475
+ }, {
2476
+ least: opts.least ?? 0,
2477
+ maxSide: 1e6
2478
+ });
2479
+ return Math.floor(l.cols * cell + l.gap * (l.cols - 1));
2480
+ }
2467
2481
  var CubeSquareTile = class CubeSquareTile {
2468
2482
  template = inject(TemplateRef);
2469
2483
  cubeSquareTile = input(...ngDevMode ? [void 0, { debugName: "cubeSquareTile" }] : /* istanbul ignore next */ []);
@@ -2550,6 +2564,7 @@ var CubeSquare = class CubeSquare {
2550
2564
  tiles = input.required(...ngDevMode ? [{ debugName: "tiles" }] : /* istanbul ignore next */ []);
2551
2565
  view = input("square", ...ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []);
2552
2566
  maxSide = input(880, ...ngDevMode ? [{ debugName: "maxSide" }] : /* istanbul ignore next */ []);
2567
+ cell = input(null, ...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
2553
2568
  align = input("center", ...ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []);
2554
2569
  listRow = input(76, ...ngDevMode ? [{ debugName: "listRow" }] : /* istanbul ignore next */ []);
2555
2570
  dashed = input(false, ...ngDevMode ? [{ debugName: "dashed" }] : /* istanbul ignore next */ []);
@@ -2581,10 +2596,12 @@ var CubeSquare = class CubeSquare {
2581
2596
  };
2582
2597
  const least = this.least();
2583
2598
  const side = Math.min(width, room.tall, this.maxSide());
2599
+ const fewest = !this.dashed() ? 0 : least === "room" ? squareLeast(side) : least;
2600
+ const cell = this.cell();
2584
2601
  const opts = {
2585
- maxSide: this.maxSide(),
2602
+ maxSide: cell && cell > 0 ? Math.min(this.maxSide(), squareSideAt(this.view(), this.tiles().length, cell, { least: fewest })) : this.maxSide(),
2586
2603
  listRow: this.listRow(),
2587
- least: !this.dashed() ? 0 : least === "room" ? squareLeast(side) : least
2604
+ least: fewest
2588
2605
  };
2589
2606
  const front = this.front();
2590
2607
  if (!front) return squareLayout(this.view(), this.tiles().length, room, opts);
@@ -2783,16 +2800,20 @@ var CubeSquare = class CubeSquare {
2783
2800
  });
2784
2801
  let before = 0;
2785
2802
  let beforeView = null;
2803
+ let beforeCount = -1;
2786
2804
  effect(() => {
2787
2805
  const { cols, list } = this.layout();
2788
2806
  const view = this.view();
2807
+ const count = this.tiles().length;
2808
+ const measured = this.room().width > 0;
2789
2809
  const el = this.grid()?.nativeElement;
2790
- if (el && before && cols !== before && view === beforeView && !list && !reducedMotion$1() && typeof el.animate === "function") el.animate([{ transform: `scale(${cols / before})` }, { transform: "none" }], {
2810
+ if (el && before && measured && cols !== before && count !== beforeCount && beforeCount >= 0 && view === beforeView && !list && !reducedMotion$1() && typeof el.animate === "function") el.animate([{ transform: `scale(${cols / before})` }, { transform: "none" }], {
2791
2811
  duration: 420,
2792
2812
  easing: "cubic-bezier(.2,.7,.2,1)"
2793
2813
  });
2794
2814
  before = cols;
2795
2815
  beforeView = view;
2816
+ if (measured) beforeCount = count;
2796
2817
  });
2797
2818
  }
2798
2819
  static ɵfac = i0.ɵɵngDeclareFactory({
@@ -2831,6 +2852,13 @@ var CubeSquare = class CubeSquare {
2831
2852
  isRequired: false,
2832
2853
  transformFunction: null
2833
2854
  },
2855
+ cell: {
2856
+ classPropertyName: "cell",
2857
+ publicName: "cell",
2858
+ isSignal: true,
2859
+ isRequired: false,
2860
+ transformFunction: null
2861
+ },
2834
2862
  align: {
2835
2863
  classPropertyName: "align",
2836
2864
  publicName: "align",
@@ -3192,6 +3220,14 @@ i0.ɵɵngDeclareClassMetadata({
3192
3220
  required: false
3193
3221
  }]
3194
3222
  }],
3223
+ cell: [{
3224
+ type: i0.Input,
3225
+ args: [{
3226
+ isSignal: true,
3227
+ alias: "cell",
3228
+ required: false
3229
+ }]
3230
+ }],
3195
3231
  align: [{
3196
3232
  type: i0.Input,
3197
3233
  args: [{
@@ -3369,6 +3405,7 @@ var CubeContext = class CubeContext {
3369
3405
  source = input(null, ...ngDevMode ? [{ debugName: "source" }] : /* istanbul ignore next */ []);
3370
3406
  words = input(null, ...ngDevMode ? [{ debugName: "words" }] : /* istanbul ignore next */ []);
3371
3407
  maxSide = input(880, ...ngDevMode ? [{ debugName: "maxSide" }] : /* istanbul ignore next */ []);
3408
+ cell = input(null, ...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
3372
3409
  heldKey = input((held) => held, ...ngDevMode ? [{ debugName: "heldKey" }] : /* istanbul ignore next */ []);
3373
3410
  enter = output();
3374
3411
  out = output();
@@ -3491,6 +3528,13 @@ var CubeContext = class CubeContext {
3491
3528
  isRequired: false,
3492
3529
  transformFunction: null
3493
3530
  },
3531
+ cell: {
3532
+ classPropertyName: "cell",
3533
+ publicName: "cell",
3534
+ isSignal: true,
3535
+ isRequired: false,
3536
+ transformFunction: null
3537
+ },
3494
3538
  heldKey: {
3495
3539
  classPropertyName: "heldKey",
3496
3540
  publicName: "heldKey",
@@ -3511,6 +3555,7 @@ var CubeContext = class CubeContext {
3511
3555
  [tiles]="tiles()"
3512
3556
  [dashed]="adds()"
3513
3557
  [maxSide]="maxSide()"
3558
+ [cell]="cell()"
3514
3559
  [keyOf]="keyOf"
3515
3560
  [class.cc-adds]="adds()"
3516
3561
  >
@@ -3605,6 +3650,7 @@ var CubeContext = class CubeContext {
3605
3650
  "tiles",
3606
3651
  "view",
3607
3652
  "maxSide",
3653
+ "cell",
3608
3654
  "align",
3609
3655
  "listRow",
3610
3656
  "dashed",
@@ -3654,6 +3700,7 @@ i0.ɵɵngDeclareClassMetadata({
3654
3700
  [tiles]="tiles()"
3655
3701
  [dashed]="adds()"
3656
3702
  [maxSide]="maxSide()"
3703
+ [cell]="cell()"
3657
3704
  [keyOf]="keyOf"
3658
3705
  [class.cc-adds]="adds()"
3659
3706
  >
@@ -3763,6 +3810,14 @@ i0.ɵɵngDeclareClassMetadata({
3763
3810
  required: false
3764
3811
  }]
3765
3812
  }],
3813
+ cell: [{
3814
+ type: i0.Input,
3815
+ args: [{
3816
+ isSignal: true,
3817
+ alias: "cell",
3818
+ required: false
3819
+ }]
3820
+ }],
3766
3821
  heldKey: [{
3767
3822
  type: i0.Input,
3768
3823
  args: [{
@@ -3789,6 +3844,1298 @@ i0.ɵɵngDeclareClassMetadata({
3789
3844
  }]
3790
3845
  }
3791
3846
  });
3847
+ const CUBE_ROOM_NARROW = 640;
3848
+ var CubeRoom = class CubeRoom {
3849
+ width = signal(0, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
3850
+ narrow = signal(CubeRoom.isNarrow(), ...ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []);
3851
+ constructor() {
3852
+ if (typeof addEventListener !== "undefined") addEventListener("resize", () => this.narrow.set(CubeRoom.isNarrow()));
3853
+ }
3854
+ static isNarrow() {
3855
+ return typeof matchMedia !== "undefined" && matchMedia(`(max-width: 639px)`).matches;
3856
+ }
3857
+ across() {
3858
+ return this.narrow() ? 3 : 4;
3859
+ }
3860
+ cell() {
3861
+ return squareCell(this.width(), this.across());
3862
+ }
3863
+ static ɵfac = i0.ɵɵngDeclareFactory({
3864
+ minVersion: "12.0.0",
3865
+ version: "22.2.4",
3866
+ ngImport: i0,
3867
+ type: CubeRoom,
3868
+ deps: [],
3869
+ target: i0.ɵɵFactoryTarget.Injectable
3870
+ });
3871
+ static ɵprov = i0.ɵɵngDeclareInjectable({
3872
+ minVersion: "12.0.0",
3873
+ version: "22.2.4",
3874
+ ngImport: i0,
3875
+ type: CubeRoom,
3876
+ providedIn: "root"
3877
+ });
3878
+ };
3879
+ i0.ɵɵngDeclareClassMetadata({
3880
+ minVersion: "12.0.0",
3881
+ version: "22.2.4",
3882
+ ngImport: i0,
3883
+ type: CubeRoom,
3884
+ decorators: [{
3885
+ type: Injectable,
3886
+ args: [{ providedIn: "root" }]
3887
+ }],
3888
+ ctorParameters: () => []
3889
+ });
3890
+ var CubeRoomMeasure = class CubeRoomMeasure {
3891
+ room = inject(CubeRoom);
3892
+ el = inject(ElementRef).nativeElement;
3893
+ seen = typeof ResizeObserver !== "undefined" ? new ResizeObserver(() => this.measure()) : null;
3894
+ constructor() {
3895
+ this.seen?.observe(this.el);
3896
+ queueMicrotask(() => this.measure());
3897
+ }
3898
+ measure() {
3899
+ const w = this.el.clientWidth;
3900
+ if (w > 0) this.room.width.set(Math.min(w, 880));
3901
+ }
3902
+ ngOnDestroy() {
3903
+ this.seen?.disconnect();
3904
+ }
3905
+ static ɵfac = i0.ɵɵngDeclareFactory({
3906
+ minVersion: "12.0.0",
3907
+ version: "22.2.4",
3908
+ ngImport: i0,
3909
+ type: CubeRoomMeasure,
3910
+ deps: [],
3911
+ target: i0.ɵɵFactoryTarget.Directive
3912
+ });
3913
+ static ɵdir = i0.ɵɵngDeclareDirective({
3914
+ minVersion: "14.0.0",
3915
+ version: "22.2.4",
3916
+ type: CubeRoomMeasure,
3917
+ isStandalone: true,
3918
+ selector: "[cubeRoom]",
3919
+ ngImport: i0
3920
+ });
3921
+ };
3922
+ i0.ɵɵngDeclareClassMetadata({
3923
+ minVersion: "12.0.0",
3924
+ version: "22.2.4",
3925
+ ngImport: i0,
3926
+ type: CubeRoomMeasure,
3927
+ decorators: [{
3928
+ type: Directive,
3929
+ args: [{ selector: "[cubeRoom]" }]
3930
+ }],
3931
+ ctorParameters: () => []
3932
+ });
3933
+ const CUBE_ZOOM_OPTIONS = new InjectionToken("CUBE_ZOOM_OPTIONS", {
3934
+ providedIn: "root",
3935
+ factory: () => ({ keepScroll: true })
3936
+ });
3937
+ function provideCubeZoom(options) {
3938
+ return {
3939
+ provide: CUBE_ZOOM_OPTIONS,
3940
+ useValue: {
3941
+ keepScroll: true,
3942
+ ...options
3943
+ }
3944
+ };
3945
+ }
3946
+ const pathOf = (url) => url.split(/[?#]/)[0];
3947
+ const RESTORE_FOR_MS = 1500;
3948
+ const STILL_FRAMES = 12;
3949
+ const SCROLL_KEYS = /* @__PURE__ */ new Set([
3950
+ "ArrowUp",
3951
+ "ArrowDown",
3952
+ "PageUp",
3953
+ "PageDown",
3954
+ "Home",
3955
+ "End",
3956
+ " "
3957
+ ]);
3958
+ function cubeMovesThePage(e, since) {
3959
+ if (e.timeStamp < since) return false;
3960
+ if (e instanceof WheelEvent) return !e.ctrlKey;
3961
+ if (e instanceof KeyboardEvent) return SCROLL_KEYS.has(e.key);
3962
+ return true;
3963
+ }
3964
+ function cubeTrailHolds(trail, from, to) {
3965
+ if (!trail.length) return true;
3966
+ if (pathOf(trail.at(-1).url) === pathOf(from)) return true;
3967
+ return trail.some((entry) => pathOf(entry.url) === pathOf(to));
3968
+ }
3969
+ var CubeZoomService = class CubeZoomService {
3970
+ next = null;
3971
+ trail = [];
3972
+ scrolled = /* @__PURE__ */ new Map();
3973
+ restore = null;
3974
+ steppingOutTo = null;
3975
+ options = inject(CUBE_ZOOM_OPTIONS);
3976
+ router = inject(Router);
3977
+ leaving = new Subject();
3978
+ left = this.leaving.asObservable();
3979
+ constructor() {
3980
+ const router = this.router;
3981
+ router.events.subscribe((e) => {
3982
+ if (e instanceof NavigationStart) {
3983
+ this.restore = null;
3984
+ const out = this.steppingOutTo;
3985
+ this.steppingOutTo = null;
3986
+ if (e.navigationTrigger === "popstate") return;
3987
+ if (this.next?.kind === "out" && this.options.keepScroll) {
3988
+ const top = this.scrolled.get(e.url) ?? this.scrolled.get(pathOf(e.url));
3989
+ if (top) this.restore = {
3990
+ id: e.id,
3991
+ top
3992
+ };
3993
+ }
3994
+ if (router.currentNavigation()?.extras.replaceUrl) return;
3995
+ if (out !== null && pathOf(out) === pathOf(e.url)) return;
3996
+ if (!cubeTrailHolds(this.trail, router.url, e.url)) this.trail.length = 0;
3997
+ }
3998
+ if (e instanceof NavigationEnd && this.restore?.id === e.id) this.scrollBack(this.restore.top);
3999
+ });
4000
+ }
4001
+ leave(url, label) {
4002
+ this.trail.push({
4003
+ url,
4004
+ label
4005
+ });
4006
+ if (typeof window === "undefined") return;
4007
+ const top = Math.round(window.scrollY);
4008
+ this.scrolled.set(url, top);
4009
+ this.scrolled.set(pathOf(url), top);
4010
+ }
4011
+ scrollBack(top) {
4012
+ const restore = this.restore;
4013
+ const until = performance.now() + RESTORE_FOR_MS;
4014
+ let moved = false;
4015
+ let still = 0;
4016
+ let height = -1;
4017
+ const since = performance.now();
4018
+ const stop = (e) => {
4019
+ if (cubeMovesThePage(e, since)) moved = true;
4020
+ };
4021
+ const events = [
4022
+ "wheel",
4023
+ "touchstart",
4024
+ "keydown"
4025
+ ];
4026
+ events.forEach((name) => window.addEventListener(name, stop, { passive: true }));
4027
+ const done = () => {
4028
+ events.forEach((name) => window.removeEventListener(name, stop));
4029
+ if (this.restore === restore) this.restore = null;
4030
+ };
4031
+ const step = () => {
4032
+ if (moved || this.restore !== restore || performance.now() > until) return done();
4033
+ if (Math.abs(window.scrollY - top) >= 2) window.scrollTo(0, top);
4034
+ const now = document.documentElement.scrollHeight;
4035
+ still = Math.abs(window.scrollY - top) < 2 && now === height ? still + 1 : 0;
4036
+ height = now;
4037
+ if (still >= STILL_FRAMES) return done();
4038
+ requestAnimationFrame(step);
4039
+ };
4040
+ step();
4041
+ }
4042
+ previous(url) {
4043
+ const at = this.trail.findIndex((entry) => entry.url === url);
4044
+ if (at >= 0) this.trail.splice(at);
4045
+ return this.trail.at(-1) ?? null;
4046
+ }
4047
+ stepBack(to) {
4048
+ const from = this.router.url;
4049
+ this.steppingOutTo = this.trail.pop()?.url ?? null;
4050
+ this.leaving.next({
4051
+ from,
4052
+ to: this.steppingOutTo ?? to ?? null,
4053
+ via: "step"
4054
+ });
4055
+ }
4056
+ leaveAll(inside) {
4057
+ while (this.trail.length && inside(this.trail.at(-1).url)) this.trail.pop();
4058
+ const from = this.router.url;
4059
+ const to = this.trail.pop() ?? null;
4060
+ this.steppingOutTo = to?.url ?? null;
4061
+ this.leaving.next({
4062
+ from,
4063
+ to: to?.url ?? null,
4064
+ via: "all"
4065
+ });
4066
+ return to;
4067
+ }
4068
+ into(element) {
4069
+ const box = element?.getBoundingClientRect();
4070
+ this.next = {
4071
+ kind: "in",
4072
+ origin: box ? `${box.left + box.width / 2}px ${box.top + box.height / 2}px` : null
4073
+ };
4074
+ }
4075
+ outOf() {
4076
+ this.next = {
4077
+ kind: "out",
4078
+ origin: null
4079
+ };
4080
+ }
4081
+ take() {
4082
+ const next = this.next;
4083
+ this.next = null;
4084
+ if (typeof matchMedia !== "undefined" && matchMedia("(prefers-reduced-motion: reduce)").matches) return null;
4085
+ return next;
4086
+ }
4087
+ static ɵfac = i0.ɵɵngDeclareFactory({
4088
+ minVersion: "12.0.0",
4089
+ version: "22.2.4",
4090
+ ngImport: i0,
4091
+ type: CubeZoomService,
4092
+ deps: [],
4093
+ target: i0.ɵɵFactoryTarget.Injectable
4094
+ });
4095
+ static ɵprov = i0.ɵɵngDeclareInjectable({
4096
+ minVersion: "12.0.0",
4097
+ version: "22.2.4",
4098
+ ngImport: i0,
4099
+ type: CubeZoomService,
4100
+ providedIn: "root"
4101
+ });
4102
+ };
4103
+ i0.ɵɵngDeclareClassMetadata({
4104
+ minVersion: "12.0.0",
4105
+ version: "22.2.4",
4106
+ ngImport: i0,
4107
+ type: CubeZoomService,
4108
+ decorators: [{
4109
+ type: Injectable,
4110
+ args: [{ providedIn: "root" }]
4111
+ }],
4112
+ ctorParameters: () => []
4113
+ });
4114
+ var CubeZoomPinch = class CubeZoomPinch {
4115
+ host = inject(ElementRef);
4116
+ cubeZoomOut = output();
4117
+ constructor() {
4118
+ inject(CubePinch).cubePinched.subscribe((pinch) => {
4119
+ if (pinch.way === "out") this.cubeZoomOut.emit();
4120
+ else this.zoomInto(pinch.at);
4121
+ });
4122
+ }
4123
+ zoomInto(at) {
4124
+ const piece = at?.closest("[data-zoom]");
4125
+ if (piece && this.host.nativeElement.contains(piece)) piece.click();
4126
+ }
4127
+ static ɵfac = i0.ɵɵngDeclareFactory({
4128
+ minVersion: "12.0.0",
4129
+ version: "22.2.4",
4130
+ ngImport: i0,
4131
+ type: CubeZoomPinch,
4132
+ deps: [],
4133
+ target: i0.ɵɵFactoryTarget.Directive
4134
+ });
4135
+ static ɵdir = i0.ɵɵngDeclareDirective({
4136
+ minVersion: "14.0.0",
4137
+ version: "22.2.4",
4138
+ type: CubeZoomPinch,
4139
+ isStandalone: true,
4140
+ selector: "[cubeZoomPinch]",
4141
+ outputs: { cubeZoomOut: "cubeZoomOut" },
4142
+ hostDirectives: [{
4143
+ directive: CubePinch,
4144
+ inputs: [
4145
+ "cubePinchDisabled",
4146
+ "cubePinchDisabled",
4147
+ "cubePinchQuietMs",
4148
+ "cubePinchQuietMs"
4149
+ ]
4150
+ }],
4151
+ ngImport: i0
4152
+ });
4153
+ };
4154
+ i0.ɵɵngDeclareClassMetadata({
4155
+ minVersion: "12.0.0",
4156
+ version: "22.2.4",
4157
+ ngImport: i0,
4158
+ type: CubeZoomPinch,
4159
+ decorators: [{
4160
+ type: Directive,
4161
+ args: [{
4162
+ selector: "[cubeZoomPinch]",
4163
+ hostDirectives: [{
4164
+ directive: CubePinch,
4165
+ inputs: ["cubePinchDisabled", "cubePinchQuietMs"]
4166
+ }]
4167
+ }]
4168
+ }],
4169
+ ctorParameters: () => [],
4170
+ propDecorators: { cubeZoomOut: [{
4171
+ type: i0.Output,
4172
+ args: ["cubeZoomOut"]
4173
+ }] }
4174
+ });
4175
+ const CUBE_HEAD_SWIPE = 30;
4176
+ var CubeHead = class CubeHead {
4177
+ count = input(1, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
4178
+ colours = input([], ...ngDevMode ? [{ debugName: "colours" }] : /* istanbul ignore next */ []);
4179
+ art = input("stickers", ...ngDevMode ? [{ debugName: "art" }] : /* istanbul ignore next */ []);
4180
+ whole = input(false, ...ngDevMode ? [{ debugName: "whole" }] : /* istanbul ignore next */ []);
4181
+ hint = input(false, ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
4182
+ width = input(100, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
4183
+ title = input(null, ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
4184
+ line = input(null, ...ngDevMode ? [{ debugName: "line" }] : /* istanbul ignore next */ []);
4185
+ backLabel = input(null, ...ngDevMode ? [{ debugName: "backLabel" }] : /* istanbul ignore next */ []);
4186
+ backAria = input(null, ...ngDevMode ? [{ debugName: "backAria" }] : /* istanbul ignore next */ []);
4187
+ backDrop = input(null, ...ngDevMode ? [{ debugName: "backDrop" }] : /* istanbul ignore next */ []);
4188
+ carrying = input(false, ...ngDevMode ? [{ debugName: "carrying" }] : /* istanbul ignore next */ []);
4189
+ holds = input(false, ...ngDevMode ? [{ debugName: "holds" }] : /* istanbul ignore next */ []);
4190
+ holdMs = input(520, ...ngDevMode ? [{ debugName: "holdMs" }] : /* istanbul ignore next */ []);
4191
+ turns = input(false, ...ngDevMode ? [{ debugName: "turns" }] : /* istanbul ignore next */ []);
4192
+ regroups = input(false, ...ngDevMode ? [{ debugName: "regroups" }] : /* istanbul ignore next */ []);
4193
+ grew = input(false, ...ngDevMode ? [{ debugName: "grew" }] : /* istanbul ignore next */ []);
4194
+ back = output();
4195
+ held = output();
4196
+ turned = output();
4197
+ rot = signal(0, ...ngDevMode ? [{ debugName: "rot" }] : /* istanbul ignore next */ []);
4198
+ turning = signal(false, ...ngDevMode ? [{ debugName: "turning" }] : /* istanbul ignore next */ []);
4199
+ startX = null;
4200
+ timers = [];
4201
+ constructor() {
4202
+ inject(DestroyRef).onDestroy(() => this.timers.forEach(clearTimeout));
4203
+ }
4204
+ start(event) {
4205
+ this.startX = this.turns() && event.isPrimary ? event.clientX : null;
4206
+ }
4207
+ end(event) {
4208
+ if (this.startX === null) return;
4209
+ const moved = event.clientX - this.startX;
4210
+ this.startX = null;
4211
+ if (Math.abs(moved) >= 30) this.turn(moved < 0 ? 1 : -1);
4212
+ }
4213
+ key(event) {
4214
+ if (!this.turns() || event.defaultPrevented) return;
4215
+ if (event.target?.closest?.("input, textarea")) return;
4216
+ if (event.key === "ArrowRight") this.turn(1);
4217
+ if (event.key === "ArrowLeft") this.turn(-1);
4218
+ }
4219
+ turn(by) {
4220
+ if (this.count() < 2 || this.turning()) return;
4221
+ this.turning.set(true);
4222
+ this.timers.push(setTimeout(() => {
4223
+ if (this.regroups()) this.turned.emit(by);
4224
+ else this.rot.update((r) => r + (by === 1 ? 1 : Math.max(1, this.colours().length) - 1));
4225
+ }, 220));
4226
+ this.timers.push(setTimeout(() => this.turning.set(false), 440));
4227
+ }
4228
+ static ɵfac = i0.ɵɵngDeclareFactory({
4229
+ minVersion: "12.0.0",
4230
+ version: "22.2.4",
4231
+ ngImport: i0,
4232
+ type: CubeHead,
4233
+ deps: [],
4234
+ target: i0.ɵɵFactoryTarget.Component
4235
+ });
4236
+ static ɵcmp = i0.ɵɵngDeclareComponent({
4237
+ minVersion: "17.0.0",
4238
+ version: "22.2.4",
4239
+ type: CubeHead,
4240
+ isStandalone: true,
4241
+ selector: "cube-head",
4242
+ inputs: {
4243
+ count: {
4244
+ classPropertyName: "count",
4245
+ publicName: "count",
4246
+ isSignal: true,
4247
+ isRequired: false,
4248
+ transformFunction: null
4249
+ },
4250
+ colours: {
4251
+ classPropertyName: "colours",
4252
+ publicName: "colours",
4253
+ isSignal: true,
4254
+ isRequired: false,
4255
+ transformFunction: null
4256
+ },
4257
+ art: {
4258
+ classPropertyName: "art",
4259
+ publicName: "art",
4260
+ isSignal: true,
4261
+ isRequired: false,
4262
+ transformFunction: null
4263
+ },
4264
+ whole: {
4265
+ classPropertyName: "whole",
4266
+ publicName: "whole",
4267
+ isSignal: true,
4268
+ isRequired: false,
4269
+ transformFunction: null
4270
+ },
4271
+ hint: {
4272
+ classPropertyName: "hint",
4273
+ publicName: "hint",
4274
+ isSignal: true,
4275
+ isRequired: false,
4276
+ transformFunction: null
4277
+ },
4278
+ width: {
4279
+ classPropertyName: "width",
4280
+ publicName: "width",
4281
+ isSignal: true,
4282
+ isRequired: false,
4283
+ transformFunction: null
4284
+ },
4285
+ title: {
4286
+ classPropertyName: "title",
4287
+ publicName: "title",
4288
+ isSignal: true,
4289
+ isRequired: false,
4290
+ transformFunction: null
4291
+ },
4292
+ line: {
4293
+ classPropertyName: "line",
4294
+ publicName: "line",
4295
+ isSignal: true,
4296
+ isRequired: false,
4297
+ transformFunction: null
4298
+ },
4299
+ backLabel: {
4300
+ classPropertyName: "backLabel",
4301
+ publicName: "backLabel",
4302
+ isSignal: true,
4303
+ isRequired: false,
4304
+ transformFunction: null
4305
+ },
4306
+ backAria: {
4307
+ classPropertyName: "backAria",
4308
+ publicName: "backAria",
4309
+ isSignal: true,
4310
+ isRequired: false,
4311
+ transformFunction: null
4312
+ },
4313
+ backDrop: {
4314
+ classPropertyName: "backDrop",
4315
+ publicName: "backDrop",
4316
+ isSignal: true,
4317
+ isRequired: false,
4318
+ transformFunction: null
4319
+ },
4320
+ carrying: {
4321
+ classPropertyName: "carrying",
4322
+ publicName: "carrying",
4323
+ isSignal: true,
4324
+ isRequired: false,
4325
+ transformFunction: null
4326
+ },
4327
+ holds: {
4328
+ classPropertyName: "holds",
4329
+ publicName: "holds",
4330
+ isSignal: true,
4331
+ isRequired: false,
4332
+ transformFunction: null
4333
+ },
4334
+ holdMs: {
4335
+ classPropertyName: "holdMs",
4336
+ publicName: "holdMs",
4337
+ isSignal: true,
4338
+ isRequired: false,
4339
+ transformFunction: null
4340
+ },
4341
+ turns: {
4342
+ classPropertyName: "turns",
4343
+ publicName: "turns",
4344
+ isSignal: true,
4345
+ isRequired: false,
4346
+ transformFunction: null
4347
+ },
4348
+ regroups: {
4349
+ classPropertyName: "regroups",
4350
+ publicName: "regroups",
4351
+ isSignal: true,
4352
+ isRequired: false,
4353
+ transformFunction: null
4354
+ },
4355
+ grew: {
4356
+ classPropertyName: "grew",
4357
+ publicName: "grew",
4358
+ isSignal: true,
4359
+ isRequired: false,
4360
+ transformFunction: null
4361
+ }
4362
+ },
4363
+ outputs: {
4364
+ back: "back",
4365
+ held: "held",
4366
+ turned: "turned"
4367
+ },
4368
+ host: { listeners: { "document:keydown": "key($event)" } },
4369
+ ngImport: i0,
4370
+ template: `
4371
+ <div class="ch-back-row">
4372
+ @if (backLabel(); as b) {
4373
+ <button
4374
+ type="button"
4375
+ class="ch-back"
4376
+ [class.ch-drop]="!!backDrop() && carrying()"
4377
+ [attr.data-drop]="backDrop()"
4378
+ [attr.aria-label]="backAria() ?? b"
4379
+ (click)="back.emit()"
4380
+ >
4381
+ <span class="ch-arrow" aria-hidden="true">‹</span>
4382
+ <span class="ch-back-name">{{ b }}</span>
4383
+ </button>
4384
+ }
4385
+ </div>
4386
+ <div class="ch-cube-row">
4387
+ <div
4388
+ class="ch-circle"
4389
+ [class.ch-holds]="holds()"
4390
+ [class.ch-turns]="turns() && count() > 1"
4391
+ [class.ch-turning]="turning()"
4392
+ [class.ch-grew]="grew()"
4393
+ role="img"
4394
+ [attr.aria-label]="title() || null"
4395
+ [attr.tabindex]="holds() ? 0 : null"
4396
+ data-no-swipe
4397
+ cubeHold
4398
+ [cubeHoldDisabled]="!holds()"
4399
+ [cubeHoldMs]="holdMs()"
4400
+ (cubeHeld)="held.emit($event)"
4401
+ (pointerdown)="start($event)"
4402
+ (pointerup)="end($event)"
4403
+ (pointercancel)="startX = null"
4404
+ >
4405
+ <cube-picture
4406
+ [art]="art()"
4407
+ [count]="count()"
4408
+ [colours]="colours()"
4409
+ [width]="width()"
4410
+ [whole]="whole()"
4411
+ [hint]="hint()"
4412
+ [rot]="rot()"
4413
+ />
4414
+ </div>
4415
+ </div>
4416
+ @if (title() || line()) {
4417
+ <div class="ch-text">
4418
+ @if (title()) {
4419
+ <h1 class="ch-title" [attr.title]="title()">{{ title() }}</h1>
4420
+ }
4421
+ <!-- the line's place is kept on a phone, said or not, so the head is one height on every level -->
4422
+ <p class="ch-line">{{ line() }}</p>
4423
+ </div>
4424
+ }
4425
+ <ng-content />
4426
+ `,
4427
+ isInline: true,
4428
+ styles: [":host{display:contents}.ch-back-row{display:flex;min-height:40px;align-items:flex-start}.ch-back{display:flex;max-width:100%;height:40px;align-items:center;gap:4px;margin-left:-8px;padding:0 8px;border:1px dashed transparent;border-radius:8px;background:none;color:var(--cube-head-quiet, #6b7280);font:inherit;font-size:var(--cube-head-back-size, 14px);cursor:pointer}.ch-back:hover{color:var(--cube-head-ink, #111827)}.ch-arrow{font-size:18px;line-height:1}.ch-back-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ch-back.ch-drop{border-color:var(--cube-head-drop, rgb(251 191 36 / .7));color:var(--cube-head-drop-ink, rgb(252 211 77))}:host-context(.cube-carrying) .ch-back.cube-carry-over{background:var(--cube-head-drop-over, rgb(251 191 36 / .16))}.ch-cube-row{display:flex;flex-direction:column;align-items:center}.ch-circle{display:flex;align-items:center;justify-content:center;width:var(--cube-head-circle-size, 156px);height:var(--cube-head-circle-size, 156px);border-radius:999px;background:var(--cube-head-circle, #f3f4f6);box-shadow:0 0 0 1px var(--cube-head-circle-ring, #e5e7eb);touch-action:pan-y}.ch-holds{cursor:pointer}.ch-turns{cursor:grab}.ch-circle:focus-visible{outline:2px solid var(--cube-head-focus, #5f9a80);outline-offset:3px}.ch-text{text-align:center}.ch-title{margin:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--cube-head-ink, #111827);font-size:var(--cube-head-title-size, 24px);font-weight:700;line-height:1.33}.ch-line{max-width:34ch;height:20px;margin:0 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--cube-head-quiet, #6b7280);font-size:var(--cube-head-line-size, 14px);line-height:20px}@media(min-width:900px){.ch-title{white-space:normal;overflow-wrap:anywhere}.ch-line{height:auto;min-height:20px;white-space:normal}}.ch-turning cube-picture{animation:ch-turn .44s ease-in-out}@keyframes ch-turn{0%{transform:perspective(600px) rotateY(0)}49%{transform:perspective(600px) rotateY(84deg)}51%{transform:perspective(600px) rotateY(-84deg)}to{transform:perspective(600px) rotateY(0)}}.ch-grew cube-picture{animation:ch-grew .9s ease-out}@keyframes ch-grew{0%{transform:scale(.7);opacity:.4}60%{transform:scale(1.06);opacity:1}to{transform:none}}@media(prefers-reduced-motion:reduce){.ch-turning cube-picture,.ch-grew cube-picture{animation:none}}\n"],
4429
+ dependencies: [{
4430
+ kind: "component",
4431
+ type: CubePicture,
4432
+ selector: "cube-picture",
4433
+ inputs: [
4434
+ "count",
4435
+ "colours",
4436
+ "width",
4437
+ "hint",
4438
+ "whole",
4439
+ "rot",
4440
+ "art"
4441
+ ]
4442
+ }, {
4443
+ kind: "directive",
4444
+ type: CubeHold,
4445
+ selector: "[cubeHold]",
4446
+ inputs: [
4447
+ "cubeHoldDisabled",
4448
+ "cubeHoldMs",
4449
+ "cubeHoldSlop",
4450
+ "cubeHoldBuzz"
4451
+ ],
4452
+ outputs: ["cubeHeld"]
4453
+ }],
4454
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
4455
+ });
4456
+ };
4457
+ i0.ɵɵngDeclareClassMetadata({
4458
+ minVersion: "12.0.0",
4459
+ version: "22.2.4",
4460
+ ngImport: i0,
4461
+ type: CubeHead,
4462
+ decorators: [{
4463
+ type: Component,
4464
+ args: [{
4465
+ selector: "cube-head",
4466
+ imports: [CubePicture, CubeHold],
4467
+ template: `
4468
+ <div class="ch-back-row">
4469
+ @if (backLabel(); as b) {
4470
+ <button
4471
+ type="button"
4472
+ class="ch-back"
4473
+ [class.ch-drop]="!!backDrop() && carrying()"
4474
+ [attr.data-drop]="backDrop()"
4475
+ [attr.aria-label]="backAria() ?? b"
4476
+ (click)="back.emit()"
4477
+ >
4478
+ <span class="ch-arrow" aria-hidden="true">‹</span>
4479
+ <span class="ch-back-name">{{ b }}</span>
4480
+ </button>
4481
+ }
4482
+ </div>
4483
+ <div class="ch-cube-row">
4484
+ <div
4485
+ class="ch-circle"
4486
+ [class.ch-holds]="holds()"
4487
+ [class.ch-turns]="turns() && count() > 1"
4488
+ [class.ch-turning]="turning()"
4489
+ [class.ch-grew]="grew()"
4490
+ role="img"
4491
+ [attr.aria-label]="title() || null"
4492
+ [attr.tabindex]="holds() ? 0 : null"
4493
+ data-no-swipe
4494
+ cubeHold
4495
+ [cubeHoldDisabled]="!holds()"
4496
+ [cubeHoldMs]="holdMs()"
4497
+ (cubeHeld)="held.emit($event)"
4498
+ (pointerdown)="start($event)"
4499
+ (pointerup)="end($event)"
4500
+ (pointercancel)="startX = null"
4501
+ >
4502
+ <cube-picture
4503
+ [art]="art()"
4504
+ [count]="count()"
4505
+ [colours]="colours()"
4506
+ [width]="width()"
4507
+ [whole]="whole()"
4508
+ [hint]="hint()"
4509
+ [rot]="rot()"
4510
+ />
4511
+ </div>
4512
+ </div>
4513
+ @if (title() || line()) {
4514
+ <div class="ch-text">
4515
+ @if (title()) {
4516
+ <h1 class="ch-title" [attr.title]="title()">{{ title() }}</h1>
4517
+ }
4518
+ <!-- the line's place is kept on a phone, said or not, so the head is one height on every level -->
4519
+ <p class="ch-line">{{ line() }}</p>
4520
+ </div>
4521
+ }
4522
+ <ng-content />
4523
+ `,
4524
+ host: { "(document:keydown)": "key($event)" },
4525
+ changeDetection: ChangeDetectionStrategy.OnPush,
4526
+ styles: [":host{display:contents}.ch-back-row{display:flex;min-height:40px;align-items:flex-start}.ch-back{display:flex;max-width:100%;height:40px;align-items:center;gap:4px;margin-left:-8px;padding:0 8px;border:1px dashed transparent;border-radius:8px;background:none;color:var(--cube-head-quiet, #6b7280);font:inherit;font-size:var(--cube-head-back-size, 14px);cursor:pointer}.ch-back:hover{color:var(--cube-head-ink, #111827)}.ch-arrow{font-size:18px;line-height:1}.ch-back-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ch-back.ch-drop{border-color:var(--cube-head-drop, rgb(251 191 36 / .7));color:var(--cube-head-drop-ink, rgb(252 211 77))}:host-context(.cube-carrying) .ch-back.cube-carry-over{background:var(--cube-head-drop-over, rgb(251 191 36 / .16))}.ch-cube-row{display:flex;flex-direction:column;align-items:center}.ch-circle{display:flex;align-items:center;justify-content:center;width:var(--cube-head-circle-size, 156px);height:var(--cube-head-circle-size, 156px);border-radius:999px;background:var(--cube-head-circle, #f3f4f6);box-shadow:0 0 0 1px var(--cube-head-circle-ring, #e5e7eb);touch-action:pan-y}.ch-holds{cursor:pointer}.ch-turns{cursor:grab}.ch-circle:focus-visible{outline:2px solid var(--cube-head-focus, #5f9a80);outline-offset:3px}.ch-text{text-align:center}.ch-title{margin:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--cube-head-ink, #111827);font-size:var(--cube-head-title-size, 24px);font-weight:700;line-height:1.33}.ch-line{max-width:34ch;height:20px;margin:0 auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--cube-head-quiet, #6b7280);font-size:var(--cube-head-line-size, 14px);line-height:20px}@media(min-width:900px){.ch-title{white-space:normal;overflow-wrap:anywhere}.ch-line{height:auto;min-height:20px;white-space:normal}}.ch-turning cube-picture{animation:ch-turn .44s ease-in-out}@keyframes ch-turn{0%{transform:perspective(600px) rotateY(0)}49%{transform:perspective(600px) rotateY(84deg)}51%{transform:perspective(600px) rotateY(-84deg)}to{transform:perspective(600px) rotateY(0)}}.ch-grew cube-picture{animation:ch-grew .9s ease-out}@keyframes ch-grew{0%{transform:scale(.7);opacity:.4}60%{transform:scale(1.06);opacity:1}to{transform:none}}@media(prefers-reduced-motion:reduce){.ch-turning cube-picture,.ch-grew cube-picture{animation:none}}\n"]
4527
+ }]
4528
+ }],
4529
+ ctorParameters: () => [],
4530
+ propDecorators: {
4531
+ count: [{
4532
+ type: i0.Input,
4533
+ args: [{
4534
+ isSignal: true,
4535
+ alias: "count",
4536
+ required: false
4537
+ }]
4538
+ }],
4539
+ colours: [{
4540
+ type: i0.Input,
4541
+ args: [{
4542
+ isSignal: true,
4543
+ alias: "colours",
4544
+ required: false
4545
+ }]
4546
+ }],
4547
+ art: [{
4548
+ type: i0.Input,
4549
+ args: [{
4550
+ isSignal: true,
4551
+ alias: "art",
4552
+ required: false
4553
+ }]
4554
+ }],
4555
+ whole: [{
4556
+ type: i0.Input,
4557
+ args: [{
4558
+ isSignal: true,
4559
+ alias: "whole",
4560
+ required: false
4561
+ }]
4562
+ }],
4563
+ hint: [{
4564
+ type: i0.Input,
4565
+ args: [{
4566
+ isSignal: true,
4567
+ alias: "hint",
4568
+ required: false
4569
+ }]
4570
+ }],
4571
+ width: [{
4572
+ type: i0.Input,
4573
+ args: [{
4574
+ isSignal: true,
4575
+ alias: "width",
4576
+ required: false
4577
+ }]
4578
+ }],
4579
+ title: [{
4580
+ type: i0.Input,
4581
+ args: [{
4582
+ isSignal: true,
4583
+ alias: "title",
4584
+ required: false
4585
+ }]
4586
+ }],
4587
+ line: [{
4588
+ type: i0.Input,
4589
+ args: [{
4590
+ isSignal: true,
4591
+ alias: "line",
4592
+ required: false
4593
+ }]
4594
+ }],
4595
+ backLabel: [{
4596
+ type: i0.Input,
4597
+ args: [{
4598
+ isSignal: true,
4599
+ alias: "backLabel",
4600
+ required: false
4601
+ }]
4602
+ }],
4603
+ backAria: [{
4604
+ type: i0.Input,
4605
+ args: [{
4606
+ isSignal: true,
4607
+ alias: "backAria",
4608
+ required: false
4609
+ }]
4610
+ }],
4611
+ backDrop: [{
4612
+ type: i0.Input,
4613
+ args: [{
4614
+ isSignal: true,
4615
+ alias: "backDrop",
4616
+ required: false
4617
+ }]
4618
+ }],
4619
+ carrying: [{
4620
+ type: i0.Input,
4621
+ args: [{
4622
+ isSignal: true,
4623
+ alias: "carrying",
4624
+ required: false
4625
+ }]
4626
+ }],
4627
+ holds: [{
4628
+ type: i0.Input,
4629
+ args: [{
4630
+ isSignal: true,
4631
+ alias: "holds",
4632
+ required: false
4633
+ }]
4634
+ }],
4635
+ holdMs: [{
4636
+ type: i0.Input,
4637
+ args: [{
4638
+ isSignal: true,
4639
+ alias: "holdMs",
4640
+ required: false
4641
+ }]
4642
+ }],
4643
+ turns: [{
4644
+ type: i0.Input,
4645
+ args: [{
4646
+ isSignal: true,
4647
+ alias: "turns",
4648
+ required: false
4649
+ }]
4650
+ }],
4651
+ regroups: [{
4652
+ type: i0.Input,
4653
+ args: [{
4654
+ isSignal: true,
4655
+ alias: "regroups",
4656
+ required: false
4657
+ }]
4658
+ }],
4659
+ grew: [{
4660
+ type: i0.Input,
4661
+ args: [{
4662
+ isSignal: true,
4663
+ alias: "grew",
4664
+ required: false
4665
+ }]
4666
+ }],
4667
+ back: [{
4668
+ type: i0.Output,
4669
+ args: ["back"]
4670
+ }],
4671
+ held: [{
4672
+ type: i0.Output,
4673
+ args: ["held"]
4674
+ }],
4675
+ turned: [{
4676
+ type: i0.Output,
4677
+ args: ["turned"]
4678
+ }]
4679
+ }
4680
+ });
4681
+ function cubeTilePicture(level, cell) {
4682
+ return Math.round(level < 2 ? Math.min(56, Math.max(28, cell * .28)) : level < 4 ? Math.max(20, cell * .24) : cell * .6);
4683
+ }
4684
+ var CubeTile = class CubeTile {
4685
+ name = input.required(...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
4686
+ line = input(null, ...ngDevMode ? [{ debugName: "line" }] : /* istanbul ignore next */ []);
4687
+ says = input(true, ...ngDevMode ? [{ debugName: "says" }] : /* istanbul ignore next */ []);
4688
+ level = input(1, ...ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []);
4689
+ cell = input(150, ...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
4690
+ count = input(1, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
4691
+ colours = input([], ...ngDevMode ? [{ debugName: "colours" }] : /* istanbul ignore next */ []);
4692
+ art = input("stickers", ...ngDevMode ? [{ debugName: "art" }] : /* istanbul ignore next */ []);
4693
+ whole = input(null, ...ngDevMode ? [{ debugName: "whole" }] : /* istanbul ignore next */ []);
4694
+ look = input("piece", ...ngDevMode ? [{ debugName: "look" }] : /* istanbul ignore next */ []);
4695
+ ticked = input(false, ...ngDevMode ? [{ debugName: "ticked" }] : /* istanbul ignore next */ []);
4696
+ tick = input("✓", ...ngDevMode ? [{ debugName: "tick" }] : /* istanbul ignore next */ []);
4697
+ tickedWord = input(null, ...ngDevMode ? [{ debugName: "tickedWord" }] : /* istanbul ignore next */ []);
4698
+ marked = input(false, ...ngDevMode ? [{ debugName: "marked" }] : /* istanbul ignore next */ []);
4699
+ picture = computed(() => cubeTilePicture(this.level(), this.cell()), ...ngDevMode ? [{ debugName: "picture" }] : /* istanbul ignore next */ []);
4700
+ classes = computed(() => `ct-l${this.level()} ct-${this.look()}` + (this.ticked() ? " ct-ticked" : "") + (this.marked() ? " ct-marked" : ""), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
4701
+ static ɵfac = i0.ɵɵngDeclareFactory({
4702
+ minVersion: "12.0.0",
4703
+ version: "22.2.4",
4704
+ ngImport: i0,
4705
+ type: CubeTile,
4706
+ deps: [],
4707
+ target: i0.ɵɵFactoryTarget.Component
4708
+ });
4709
+ static ɵcmp = i0.ɵɵngDeclareComponent({
4710
+ minVersion: "17.0.0",
4711
+ version: "22.2.4",
4712
+ type: CubeTile,
4713
+ isStandalone: true,
4714
+ selector: "cube-tile",
4715
+ inputs: {
4716
+ name: {
4717
+ classPropertyName: "name",
4718
+ publicName: "name",
4719
+ isSignal: true,
4720
+ isRequired: true,
4721
+ transformFunction: null
4722
+ },
4723
+ line: {
4724
+ classPropertyName: "line",
4725
+ publicName: "line",
4726
+ isSignal: true,
4727
+ isRequired: false,
4728
+ transformFunction: null
4729
+ },
4730
+ says: {
4731
+ classPropertyName: "says",
4732
+ publicName: "says",
4733
+ isSignal: true,
4734
+ isRequired: false,
4735
+ transformFunction: null
4736
+ },
4737
+ level: {
4738
+ classPropertyName: "level",
4739
+ publicName: "level",
4740
+ isSignal: true,
4741
+ isRequired: false,
4742
+ transformFunction: null
4743
+ },
4744
+ cell: {
4745
+ classPropertyName: "cell",
4746
+ publicName: "cell",
4747
+ isSignal: true,
4748
+ isRequired: false,
4749
+ transformFunction: null
4750
+ },
4751
+ count: {
4752
+ classPropertyName: "count",
4753
+ publicName: "count",
4754
+ isSignal: true,
4755
+ isRequired: false,
4756
+ transformFunction: null
4757
+ },
4758
+ colours: {
4759
+ classPropertyName: "colours",
4760
+ publicName: "colours",
4761
+ isSignal: true,
4762
+ isRequired: false,
4763
+ transformFunction: null
4764
+ },
4765
+ art: {
4766
+ classPropertyName: "art",
4767
+ publicName: "art",
4768
+ isSignal: true,
4769
+ isRequired: false,
4770
+ transformFunction: null
4771
+ },
4772
+ whole: {
4773
+ classPropertyName: "whole",
4774
+ publicName: "whole",
4775
+ isSignal: true,
4776
+ isRequired: false,
4777
+ transformFunction: null
4778
+ },
4779
+ look: {
4780
+ classPropertyName: "look",
4781
+ publicName: "look",
4782
+ isSignal: true,
4783
+ isRequired: false,
4784
+ transformFunction: null
4785
+ },
4786
+ ticked: {
4787
+ classPropertyName: "ticked",
4788
+ publicName: "ticked",
4789
+ isSignal: true,
4790
+ isRequired: false,
4791
+ transformFunction: null
4792
+ },
4793
+ tick: {
4794
+ classPropertyName: "tick",
4795
+ publicName: "tick",
4796
+ isSignal: true,
4797
+ isRequired: false,
4798
+ transformFunction: null
4799
+ },
4800
+ tickedWord: {
4801
+ classPropertyName: "tickedWord",
4802
+ publicName: "tickedWord",
4803
+ isSignal: true,
4804
+ isRequired: false,
4805
+ transformFunction: null
4806
+ },
4807
+ marked: {
4808
+ classPropertyName: "marked",
4809
+ publicName: "marked",
4810
+ isSignal: true,
4811
+ isRequired: false,
4812
+ transformFunction: null
4813
+ }
4814
+ },
4815
+ host: { properties: {
4816
+ "class": "classes()",
4817
+ "attr.data-level": "level()"
4818
+ } },
4819
+ ngImport: i0,
4820
+ template: `
4821
+ @if (ticked() && level() < 4) {
4822
+ <span class="ct-tick" [attr.aria-label]="tickedWord() || null">{{ tick() }}</span>
4823
+ }
4824
+ @if (look() !== 'own') {
4825
+ <span class="ct-picture" [class.ct-push]="level() < 4">
4826
+ <cube-picture
4827
+ [art]="art()"
4828
+ [count]="count()"
4829
+ [colours]="colours()"
4830
+ [width]="picture()"
4831
+ [whole]="whole() ?? count() === 1"
4832
+ />
4833
+ </span>
4834
+ }
4835
+ @if (level() < 4 || look() === 'own') {
4836
+ <span class="ct-name">{{ look() === 'own' ? '+ ' : '' }}{{ name() }}</span>
4837
+ }
4838
+ @if (line()) {
4839
+ <span class="ct-line" [class.ct-unseen]="!(says() && level() < 3)">{{ line() }}</span>
4840
+ }
4841
+ `,
4842
+ isInline: true,
4843
+ styles: [":host{position:relative;box-sizing:border-box;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;border:1px solid var(--cube-tile-line, #e5e7eb);background:var(--cube-tile, #ffffff);color:var(--cube-tile-ink, #111827);text-align:left;user-select:none;-webkit-user-select:none;cursor:pointer;transition:transform .12s ease}:host(:active){transform:scale(.97)}:host(:focus-visible){outline:2px solid var(--cube-tile-accent, #5f9a80);outline-offset:2px}:host(.ct-l0){border-radius:28px;padding:24px;gap:10px}:host(.ct-l1){border-radius:20px;padding:14px;gap:6px}:host(.ct-l2){border-radius:16px;padding:8px 10px;gap:2px}:host(.ct-l3){border-radius:12px;padding:6px;gap:2px}:host(.ct-l4){border-radius:9px;padding:2px;align-items:center;justify-content:center}:host(.ct-own){align-items:center;justify-content:center;border-style:dashed;border-color:var(--cube-tile-own-line, color-mix(in srgb, #5f9a80 50%, transparent));background:transparent;color:var(--cube-tile-accent, #5f9a80)}:host(.ct-dashed){border-style:dashed;border-color:var(--cube-tile-own-line, color-mix(in srgb, #5f9a80 40%, transparent));background:transparent;color:var(--cube-tile-quiet-ink, #4b5563)}:host(.ct-pale){border-style:dashed;border-color:var(--cube-tile-pale-line, #d1d5db);background:transparent;color:var(--cube-tile-pale-ink, #9ca3af)}:host(.ct-marked){border-color:var(--cube-tile-marked, color-mix(in srgb, #5f9a80 35%, transparent))}:host(.ct-ticked){box-shadow:0 0 0 1px var(--cube-tile-accent, #5f9a80)}.ct-tick{position:absolute;top:8px;right:10px;color:var(--cube-tile-accent, #5f9a80);font-size:14px;font-weight:600}.ct-picture{flex:none}.ct-push{margin-bottom:auto}.ct-name{flex:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;font-weight:600;line-height:1.25}:host(.ct-own) .ct-name{font-weight:500}.ct-line{flex:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;color:var(--cube-tile-quiet, #6b7280);line-height:1.375}:host(.ct-pale) .ct-line{color:var(--cube-tile-pale-ink, #9ca3af)}.ct-unseen{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:host(.ct-l0) .ct-name{font-size:26px}:host(.ct-l1) .ct-name{font-size:17px}:host(.ct-l2) .ct-name{font-size:14px}:host(.ct-l3) .ct-name{font-size:12px}:host(.ct-l0) .ct-line{font-size:16px}:host(.ct-l1) .ct-line{font-size:13px}:host(.ct-l2) .ct-line{font-size:12px}\n"],
4844
+ dependencies: [{
4845
+ kind: "component",
4846
+ type: CubePicture,
4847
+ selector: "cube-picture",
4848
+ inputs: [
4849
+ "count",
4850
+ "colours",
4851
+ "width",
4852
+ "hint",
4853
+ "whole",
4854
+ "rot",
4855
+ "art"
4856
+ ]
4857
+ }],
4858
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
4859
+ });
4860
+ };
4861
+ i0.ɵɵngDeclareClassMetadata({
4862
+ minVersion: "12.0.0",
4863
+ version: "22.2.4",
4864
+ ngImport: i0,
4865
+ type: CubeTile,
4866
+ decorators: [{
4867
+ type: Component,
4868
+ args: [{
4869
+ selector: "cube-tile",
4870
+ imports: [CubePicture],
4871
+ template: `
4872
+ @if (ticked() && level() < 4) {
4873
+ <span class="ct-tick" [attr.aria-label]="tickedWord() || null">{{ tick() }}</span>
4874
+ }
4875
+ @if (look() !== 'own') {
4876
+ <span class="ct-picture" [class.ct-push]="level() < 4">
4877
+ <cube-picture
4878
+ [art]="art()"
4879
+ [count]="count()"
4880
+ [colours]="colours()"
4881
+ [width]="picture()"
4882
+ [whole]="whole() ?? count() === 1"
4883
+ />
4884
+ </span>
4885
+ }
4886
+ @if (level() < 4 || look() === 'own') {
4887
+ <span class="ct-name">{{ look() === 'own' ? '+ ' : '' }}{{ name() }}</span>
4888
+ }
4889
+ @if (line()) {
4890
+ <span class="ct-line" [class.ct-unseen]="!(says() && level() < 3)">{{ line() }}</span>
4891
+ }
4892
+ `,
4893
+ host: {
4894
+ "[class]": "classes()",
4895
+ "[attr.data-level]": "level()"
4896
+ },
4897
+ changeDetection: ChangeDetectionStrategy.OnPush,
4898
+ styles: [":host{position:relative;box-sizing:border-box;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;border:1px solid var(--cube-tile-line, #e5e7eb);background:var(--cube-tile, #ffffff);color:var(--cube-tile-ink, #111827);text-align:left;user-select:none;-webkit-user-select:none;cursor:pointer;transition:transform .12s ease}:host(:active){transform:scale(.97)}:host(:focus-visible){outline:2px solid var(--cube-tile-accent, #5f9a80);outline-offset:2px}:host(.ct-l0){border-radius:28px;padding:24px;gap:10px}:host(.ct-l1){border-radius:20px;padding:14px;gap:6px}:host(.ct-l2){border-radius:16px;padding:8px 10px;gap:2px}:host(.ct-l3){border-radius:12px;padding:6px;gap:2px}:host(.ct-l4){border-radius:9px;padding:2px;align-items:center;justify-content:center}:host(.ct-own){align-items:center;justify-content:center;border-style:dashed;border-color:var(--cube-tile-own-line, color-mix(in srgb, #5f9a80 50%, transparent));background:transparent;color:var(--cube-tile-accent, #5f9a80)}:host(.ct-dashed){border-style:dashed;border-color:var(--cube-tile-own-line, color-mix(in srgb, #5f9a80 40%, transparent));background:transparent;color:var(--cube-tile-quiet-ink, #4b5563)}:host(.ct-pale){border-style:dashed;border-color:var(--cube-tile-pale-line, #d1d5db);background:transparent;color:var(--cube-tile-pale-ink, #9ca3af)}:host(.ct-marked){border-color:var(--cube-tile-marked, color-mix(in srgb, #5f9a80 35%, transparent))}:host(.ct-ticked){box-shadow:0 0 0 1px var(--cube-tile-accent, #5f9a80)}.ct-tick{position:absolute;top:8px;right:10px;color:var(--cube-tile-accent, #5f9a80);font-size:14px;font-weight:600}.ct-picture{flex:none}.ct-push{margin-bottom:auto}.ct-name{flex:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;font-weight:600;line-height:1.25}:host(.ct-own) .ct-name{font-weight:500}.ct-line{flex:none;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;color:var(--cube-tile-quiet, #6b7280);line-height:1.375}:host(.ct-pale) .ct-line{color:var(--cube-tile-pale-ink, #9ca3af)}.ct-unseen{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}:host(.ct-l0) .ct-name{font-size:26px}:host(.ct-l1) .ct-name{font-size:17px}:host(.ct-l2) .ct-name{font-size:14px}:host(.ct-l3) .ct-name{font-size:12px}:host(.ct-l0) .ct-line{font-size:16px}:host(.ct-l1) .ct-line{font-size:13px}:host(.ct-l2) .ct-line{font-size:12px}\n"]
4899
+ }]
4900
+ }],
4901
+ propDecorators: {
4902
+ name: [{
4903
+ type: i0.Input,
4904
+ args: [{
4905
+ isSignal: true,
4906
+ alias: "name",
4907
+ required: true
4908
+ }]
4909
+ }],
4910
+ line: [{
4911
+ type: i0.Input,
4912
+ args: [{
4913
+ isSignal: true,
4914
+ alias: "line",
4915
+ required: false
4916
+ }]
4917
+ }],
4918
+ says: [{
4919
+ type: i0.Input,
4920
+ args: [{
4921
+ isSignal: true,
4922
+ alias: "says",
4923
+ required: false
4924
+ }]
4925
+ }],
4926
+ level: [{
4927
+ type: i0.Input,
4928
+ args: [{
4929
+ isSignal: true,
4930
+ alias: "level",
4931
+ required: false
4932
+ }]
4933
+ }],
4934
+ cell: [{
4935
+ type: i0.Input,
4936
+ args: [{
4937
+ isSignal: true,
4938
+ alias: "cell",
4939
+ required: false
4940
+ }]
4941
+ }],
4942
+ count: [{
4943
+ type: i0.Input,
4944
+ args: [{
4945
+ isSignal: true,
4946
+ alias: "count",
4947
+ required: false
4948
+ }]
4949
+ }],
4950
+ colours: [{
4951
+ type: i0.Input,
4952
+ args: [{
4953
+ isSignal: true,
4954
+ alias: "colours",
4955
+ required: false
4956
+ }]
4957
+ }],
4958
+ art: [{
4959
+ type: i0.Input,
4960
+ args: [{
4961
+ isSignal: true,
4962
+ alias: "art",
4963
+ required: false
4964
+ }]
4965
+ }],
4966
+ whole: [{
4967
+ type: i0.Input,
4968
+ args: [{
4969
+ isSignal: true,
4970
+ alias: "whole",
4971
+ required: false
4972
+ }]
4973
+ }],
4974
+ look: [{
4975
+ type: i0.Input,
4976
+ args: [{
4977
+ isSignal: true,
4978
+ alias: "look",
4979
+ required: false
4980
+ }]
4981
+ }],
4982
+ ticked: [{
4983
+ type: i0.Input,
4984
+ args: [{
4985
+ isSignal: true,
4986
+ alias: "ticked",
4987
+ required: false
4988
+ }]
4989
+ }],
4990
+ tick: [{
4991
+ type: i0.Input,
4992
+ args: [{
4993
+ isSignal: true,
4994
+ alias: "tick",
4995
+ required: false
4996
+ }]
4997
+ }],
4998
+ tickedWord: [{
4999
+ type: i0.Input,
5000
+ args: [{
5001
+ isSignal: true,
5002
+ alias: "tickedWord",
5003
+ required: false
5004
+ }]
5005
+ }],
5006
+ marked: [{
5007
+ type: i0.Input,
5008
+ args: [{
5009
+ isSignal: true,
5010
+ alias: "marked",
5011
+ required: false
5012
+ }]
5013
+ }]
5014
+ }
5015
+ });
5016
+ const levelOf = (url) => url.split(/[?#]/)[0];
5017
+ var CubeQuietLine = class {
5018
+ said = signal(null, ...ngDevMode ? [{ debugName: "said" }] : /* istanbul ignore next */ []);
5019
+ note = computed(() => this.said()?.note ?? null, ...ngDevMode ? [{ debugName: "note" }] : /* istanbul ignore next */ []);
5020
+ at = computed(() => this.said()?.at ?? null, ...ngDevMode ? [{ debugName: "at" }] : /* istanbul ignore next */ []);
5021
+ say(note, at) {
5022
+ this.said.set(note ? {
5023
+ note,
5024
+ at: levelOf(at)
5025
+ } : null);
5026
+ }
5027
+ move(at) {
5028
+ const s = this.said();
5029
+ if (s) this.said.set({
5030
+ ...s,
5031
+ at: levelOf(at)
5032
+ });
5033
+ }
5034
+ clear() {
5035
+ this.said.set(null);
5036
+ }
5037
+ on(url) {
5038
+ const s = this.said();
5039
+ return s && s.at === levelOf(url) ? s.note : null;
5040
+ }
5041
+ };
5042
+ var CubeQuiet = class CubeQuiet {
5043
+ note = input(null, ...ngDevMode ? [{ debugName: "note" }] : /* istanbul ignore next */ []);
5044
+ undoWord = input(null, ...ngDevMode ? [{ debugName: "undoWord" }] : /* istanbul ignore next */ []);
5045
+ undo = output();
5046
+ static ɵfac = i0.ɵɵngDeclareFactory({
5047
+ minVersion: "12.0.0",
5048
+ version: "22.2.4",
5049
+ ngImport: i0,
5050
+ type: CubeQuiet,
5051
+ deps: [],
5052
+ target: i0.ɵɵFactoryTarget.Component
5053
+ });
5054
+ static ɵcmp = i0.ɵɵngDeclareComponent({
5055
+ minVersion: "17.0.0",
5056
+ version: "22.2.4",
5057
+ type: CubeQuiet,
5058
+ isStandalone: true,
5059
+ selector: "cube-quiet",
5060
+ inputs: {
5061
+ note: {
5062
+ classPropertyName: "note",
5063
+ publicName: "note",
5064
+ isSignal: true,
5065
+ isRequired: false,
5066
+ transformFunction: null
5067
+ },
5068
+ undoWord: {
5069
+ classPropertyName: "undoWord",
5070
+ publicName: "undoWord",
5071
+ isSignal: true,
5072
+ isRequired: false,
5073
+ transformFunction: null
5074
+ }
5075
+ },
5076
+ outputs: { undo: "undo" },
5077
+ ngImport: i0,
5078
+ template: `
5079
+ @if (note(); as n) {
5080
+ <p class="cq-line" role="status">
5081
+ <span class="cq-says">{{ n.says }}</span>
5082
+ @if (n.undo != null && undoWord()) {
5083
+ <button type="button" class="cq-undo" (click)="undo.emit(n)">{{ undoWord() }}</button>
5084
+ }
5085
+ </p>
5086
+ }
5087
+ `,
5088
+ isInline: true,
5089
+ styles: [":host{display:block}.cq-line{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;column-gap:8px;max-width:40ch;margin:0 auto;color:var(--cube-quiet-ink, #6b7280);font-size:var(--cube-quiet-size, 14px);line-height:20px;text-align:center}.cq-says{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}@media(min-width:900px){.cq-says{-webkit-line-clamp:unset}}.cq-undo{min-height:24px;padding:0 4px;border:0;background:none;color:var(--cube-quiet-undo, #5f9a80);font:inherit;font-weight:600;cursor:pointer}\n"],
5090
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
5091
+ });
5092
+ };
5093
+ i0.ɵɵngDeclareClassMetadata({
5094
+ minVersion: "12.0.0",
5095
+ version: "22.2.4",
5096
+ ngImport: i0,
5097
+ type: CubeQuiet,
5098
+ decorators: [{
5099
+ type: Component,
5100
+ args: [{
5101
+ selector: "cube-quiet",
5102
+ template: `
5103
+ @if (note(); as n) {
5104
+ <p class="cq-line" role="status">
5105
+ <span class="cq-says">{{ n.says }}</span>
5106
+ @if (n.undo != null && undoWord()) {
5107
+ <button type="button" class="cq-undo" (click)="undo.emit(n)">{{ undoWord() }}</button>
5108
+ }
5109
+ </p>
5110
+ }
5111
+ `,
5112
+ changeDetection: ChangeDetectionStrategy.OnPush,
5113
+ styles: [":host{display:block}.cq-line{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:center;column-gap:8px;max-width:40ch;margin:0 auto;color:var(--cube-quiet-ink, #6b7280);font-size:var(--cube-quiet-size, 14px);line-height:20px;text-align:center}.cq-says{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}@media(min-width:900px){.cq-says{-webkit-line-clamp:unset}}.cq-undo{min-height:24px;padding:0 4px;border:0;background:none;color:var(--cube-quiet-undo, #5f9a80);font:inherit;font-weight:600;cursor:pointer}\n"]
5114
+ }]
5115
+ }],
5116
+ propDecorators: {
5117
+ note: [{
5118
+ type: i0.Input,
5119
+ args: [{
5120
+ isSignal: true,
5121
+ alias: "note",
5122
+ required: false
5123
+ }]
5124
+ }],
5125
+ undoWord: [{
5126
+ type: i0.Input,
5127
+ args: [{
5128
+ isSignal: true,
5129
+ alias: "undoWord",
5130
+ required: false
5131
+ }]
5132
+ }],
5133
+ undo: [{
5134
+ type: i0.Output,
5135
+ args: ["undo"]
5136
+ }]
5137
+ }
5138
+ });
3792
5139
  const CUBE_LOADING_WAYS = ["fill", "turn"];
3793
5140
  const CUBE_LOADING_LEVELS = [
3794
5141
  "page",
@@ -3962,6 +5309,7 @@ var CubeLoading = class CubeLoading {
3962
5309
  "tiles",
3963
5310
  "view",
3964
5311
  "maxSide",
5312
+ "cell",
3965
5313
  "align",
3966
5314
  "listRow",
3967
5315
  "dashed",
@@ -4332,6 +5680,6 @@ i0.ɵɵngDeclareClassMetadata({
4332
5680
  args: [{ providedIn: "root" }]
4333
5681
  }]
4334
5682
  });
4335
- export { ART_CHOICES_KEY, CONTEXT_CUBE_SOURCE, CONTEXT_CUBE_WORDS, CONTEXT_LAST_PARTS, CONTEXT_PART_ORDER, CUBE_ARTS, CUBE_CARRY_CLASSES, CUBE_CARRY_MOVE, CUBE_DROP_OUT, CUBE_HOLD_MS, CUBE_HOLD_SLOP, CUBE_ICON_NAMES, CUBE_LOADING_COLOURS, CUBE_LOADING_LEVELS, CUBE_LOADING_STEP_MS, CUBE_LOADING_STICKERS, CUBE_LOADING_WAYS, CUBE_LOADING_WIDTH, CUBE_PINCH_APART, CUBE_PINCH_TOGETHER, CUBE_WHEEL_QUIET_MS, CUBE_WHEEL_STEP, CubeArtChoices, CubeCarry, CubeContext, CubeHold, CubeIcon, CubeLoading, CubePicture, CubePinch, CubeSquare, CubeSquareTile, JUST_SAVED_MINUTES, MINE_SORT, PART_ICONS, REPORT_APP, REPORT_INCIDENTS_KEPT, REPORT_INCIDENTS_MS, REPORT_KINDS, ReportClient, ReportDiagnostics, ReportDraft, ReportErrorHandler, SQUARE_LEAST_CELL, SQUARE_LEAST_TALL, SQUARE_LIST_ROW, SQUARE_MAX_SIDE, SQUARE_ROOM_BELOW, TEXT_ORDERS, TURNING_BELOW, TURNING_NUDGE_UNTIL, TURNING_SIDES, VIEW_KEYS, addLevel, artFor, artLevel, bringLevel, bringOf, chooseArt, contextArtWidth, contextIcon, contextLevelFor, contextOf, contextSquare, cubeIconCells, directionWords, drawArt, drawCube, environmentOf, errorLine, findJustSaved, gridFor, hideLevel, insideOf, isArt, isView, loadingStickers, loadingWayFor, moveBefore, namesLevel, orderLevel, orderOf, orderParts, partsLevel, placesOf, provideReportDiagnostics, readArtChoices, refusalOf, reportContext, reportInterceptor, reportRefusal, reportRequest, routePattern, scrubbedPath, sizeFor, sortDirectionsLevel, sortItems, sortLevel, squareGap, squareLayout, squareLeast, squareLevelFor, squareTall, startsWheelGesture, stillStep, technicalLines, tellLevel, turningFront, turningRows, viewLevel, wheelWay, whereLevel, wouldLoop };
5683
+ export { ART_CHOICES_KEY, CONTEXT_CUBE_SOURCE, CONTEXT_CUBE_WORDS, CONTEXT_LAST_PARTS, CONTEXT_PART_ORDER, CUBE_ARTS, CUBE_CARRY_CLASSES, CUBE_CARRY_MOVE, CUBE_DROP_OUT, CUBE_HEAD_SWIPE, CUBE_HOLD_MS, CUBE_HOLD_SLOP, CUBE_ICON_NAMES, CUBE_LOADING_COLOURS, CUBE_LOADING_LEVELS, CUBE_LOADING_STEP_MS, CUBE_LOADING_STICKERS, CUBE_LOADING_WAYS, CUBE_LOADING_WIDTH, CUBE_PINCH_APART, CUBE_PINCH_TOGETHER, CUBE_ROOM_NARROW, CUBE_WHEEL_QUIET_MS, CUBE_WHEEL_STEP, CUBE_ZOOM_OPTIONS, CubeArtChoices, CubeCarry, CubeContext, CubeHead, CubeHold, CubeIcon, CubeLoading, CubePicture, CubePinch, CubeQuiet, CubeQuietLine, CubeRoom, CubeRoomMeasure, CubeSquare, CubeSquareTile, CubeTile, CubeZoomPinch, CubeZoomService, JUST_SAVED_MINUTES, MINE_SORT, PART_ICONS, REPORT_APP, REPORT_INCIDENTS_KEPT, REPORT_INCIDENTS_MS, REPORT_KINDS, ReportClient, ReportDiagnostics, ReportDraft, ReportErrorHandler, SQUARE_LEAST_CELL, SQUARE_LEAST_TALL, SQUARE_LIST_ROW, SQUARE_MAX_SIDE, SQUARE_ROOM_BELOW, TEXT_ORDERS, TURNING_BELOW, TURNING_NUDGE_UNTIL, TURNING_SIDES, VIEW_KEYS, addLevel, artFor, artLevel, bringLevel, bringOf, chooseArt, contextArtWidth, contextIcon, contextLevelFor, contextOf, contextSquare, cubeIconCells, cubeMovesThePage, cubeTilePicture, cubeTrailHolds, directionWords, drawArt, drawCube, environmentOf, errorLine, findJustSaved, gridFor, hideLevel, insideOf, isArt, isView, loadingStickers, loadingWayFor, moveBefore, namesLevel, orderLevel, orderOf, orderParts, partsLevel, placesOf, provideCubeZoom, provideReportDiagnostics, readArtChoices, refusalOf, reportContext, reportInterceptor, reportRefusal, reportRequest, routePattern, scrubbedPath, sizeFor, sortDirectionsLevel, sortItems, sortLevel, squareCell, squareGap, squareLayout, squareLeast, squareLevelFor, squareSideAt, squareTall, startsWheelGesture, stillStep, technicalLines, tellLevel, turningFront, turningRows, viewLevel, wheelWay, whereLevel, wouldLoop };
4336
5684
 
4337
5685
  //# sourceMappingURL=selimssevgi-cube-design-angular.mjs.map