@selimssevgi/cube-design-angular 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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);
@@ -2831,6 +2848,13 @@ var CubeSquare = class CubeSquare {
2831
2848
  isRequired: false,
2832
2849
  transformFunction: null
2833
2850
  },
2851
+ cell: {
2852
+ classPropertyName: "cell",
2853
+ publicName: "cell",
2854
+ isSignal: true,
2855
+ isRequired: false,
2856
+ transformFunction: null
2857
+ },
2834
2858
  align: {
2835
2859
  classPropertyName: "align",
2836
2860
  publicName: "align",
@@ -3192,6 +3216,14 @@ i0.ɵɵngDeclareClassMetadata({
3192
3216
  required: false
3193
3217
  }]
3194
3218
  }],
3219
+ cell: [{
3220
+ type: i0.Input,
3221
+ args: [{
3222
+ isSignal: true,
3223
+ alias: "cell",
3224
+ required: false
3225
+ }]
3226
+ }],
3195
3227
  align: [{
3196
3228
  type: i0.Input,
3197
3229
  args: [{
@@ -3369,6 +3401,7 @@ var CubeContext = class CubeContext {
3369
3401
  source = input(null, ...ngDevMode ? [{ debugName: "source" }] : /* istanbul ignore next */ []);
3370
3402
  words = input(null, ...ngDevMode ? [{ debugName: "words" }] : /* istanbul ignore next */ []);
3371
3403
  maxSide = input(880, ...ngDevMode ? [{ debugName: "maxSide" }] : /* istanbul ignore next */ []);
3404
+ cell = input(null, ...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
3372
3405
  heldKey = input((held) => held, ...ngDevMode ? [{ debugName: "heldKey" }] : /* istanbul ignore next */ []);
3373
3406
  enter = output();
3374
3407
  out = output();
@@ -3491,6 +3524,13 @@ var CubeContext = class CubeContext {
3491
3524
  isRequired: false,
3492
3525
  transformFunction: null
3493
3526
  },
3527
+ cell: {
3528
+ classPropertyName: "cell",
3529
+ publicName: "cell",
3530
+ isSignal: true,
3531
+ isRequired: false,
3532
+ transformFunction: null
3533
+ },
3494
3534
  heldKey: {
3495
3535
  classPropertyName: "heldKey",
3496
3536
  publicName: "heldKey",
@@ -3511,6 +3551,7 @@ var CubeContext = class CubeContext {
3511
3551
  [tiles]="tiles()"
3512
3552
  [dashed]="adds()"
3513
3553
  [maxSide]="maxSide()"
3554
+ [cell]="cell()"
3514
3555
  [keyOf]="keyOf"
3515
3556
  [class.cc-adds]="adds()"
3516
3557
  >
@@ -3605,6 +3646,7 @@ var CubeContext = class CubeContext {
3605
3646
  "tiles",
3606
3647
  "view",
3607
3648
  "maxSide",
3649
+ "cell",
3608
3650
  "align",
3609
3651
  "listRow",
3610
3652
  "dashed",
@@ -3654,6 +3696,7 @@ i0.ɵɵngDeclareClassMetadata({
3654
3696
  [tiles]="tiles()"
3655
3697
  [dashed]="adds()"
3656
3698
  [maxSide]="maxSide()"
3699
+ [cell]="cell()"
3657
3700
  [keyOf]="keyOf"
3658
3701
  [class.cc-adds]="adds()"
3659
3702
  >
@@ -3763,6 +3806,14 @@ i0.ɵɵngDeclareClassMetadata({
3763
3806
  required: false
3764
3807
  }]
3765
3808
  }],
3809
+ cell: [{
3810
+ type: i0.Input,
3811
+ args: [{
3812
+ isSignal: true,
3813
+ alias: "cell",
3814
+ required: false
3815
+ }]
3816
+ }],
3766
3817
  heldKey: [{
3767
3818
  type: i0.Input,
3768
3819
  args: [{
@@ -3789,6 +3840,1298 @@ i0.ɵɵngDeclareClassMetadata({
3789
3840
  }]
3790
3841
  }
3791
3842
  });
3843
+ const CUBE_ROOM_NARROW = 640;
3844
+ var CubeRoom = class CubeRoom {
3845
+ width = signal(0, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
3846
+ narrow = signal(CubeRoom.isNarrow(), ...ngDevMode ? [{ debugName: "narrow" }] : /* istanbul ignore next */ []);
3847
+ constructor() {
3848
+ if (typeof addEventListener !== "undefined") addEventListener("resize", () => this.narrow.set(CubeRoom.isNarrow()));
3849
+ }
3850
+ static isNarrow() {
3851
+ return typeof matchMedia !== "undefined" && matchMedia(`(max-width: 639px)`).matches;
3852
+ }
3853
+ across() {
3854
+ return this.narrow() ? 3 : 4;
3855
+ }
3856
+ cell() {
3857
+ return squareCell(this.width(), this.across());
3858
+ }
3859
+ static ɵfac = i0.ɵɵngDeclareFactory({
3860
+ minVersion: "12.0.0",
3861
+ version: "22.2.4",
3862
+ ngImport: i0,
3863
+ type: CubeRoom,
3864
+ deps: [],
3865
+ target: i0.ɵɵFactoryTarget.Injectable
3866
+ });
3867
+ static ɵprov = i0.ɵɵngDeclareInjectable({
3868
+ minVersion: "12.0.0",
3869
+ version: "22.2.4",
3870
+ ngImport: i0,
3871
+ type: CubeRoom,
3872
+ providedIn: "root"
3873
+ });
3874
+ };
3875
+ i0.ɵɵngDeclareClassMetadata({
3876
+ minVersion: "12.0.0",
3877
+ version: "22.2.4",
3878
+ ngImport: i0,
3879
+ type: CubeRoom,
3880
+ decorators: [{
3881
+ type: Injectable,
3882
+ args: [{ providedIn: "root" }]
3883
+ }],
3884
+ ctorParameters: () => []
3885
+ });
3886
+ var CubeRoomMeasure = class CubeRoomMeasure {
3887
+ room = inject(CubeRoom);
3888
+ el = inject(ElementRef).nativeElement;
3889
+ seen = typeof ResizeObserver !== "undefined" ? new ResizeObserver(() => this.measure()) : null;
3890
+ constructor() {
3891
+ this.seen?.observe(this.el);
3892
+ queueMicrotask(() => this.measure());
3893
+ }
3894
+ measure() {
3895
+ const w = this.el.clientWidth;
3896
+ if (w > 0) this.room.width.set(Math.min(w, 880));
3897
+ }
3898
+ ngOnDestroy() {
3899
+ this.seen?.disconnect();
3900
+ }
3901
+ static ɵfac = i0.ɵɵngDeclareFactory({
3902
+ minVersion: "12.0.0",
3903
+ version: "22.2.4",
3904
+ ngImport: i0,
3905
+ type: CubeRoomMeasure,
3906
+ deps: [],
3907
+ target: i0.ɵɵFactoryTarget.Directive
3908
+ });
3909
+ static ɵdir = i0.ɵɵngDeclareDirective({
3910
+ minVersion: "14.0.0",
3911
+ version: "22.2.4",
3912
+ type: CubeRoomMeasure,
3913
+ isStandalone: true,
3914
+ selector: "[cubeRoom]",
3915
+ ngImport: i0
3916
+ });
3917
+ };
3918
+ i0.ɵɵngDeclareClassMetadata({
3919
+ minVersion: "12.0.0",
3920
+ version: "22.2.4",
3921
+ ngImport: i0,
3922
+ type: CubeRoomMeasure,
3923
+ decorators: [{
3924
+ type: Directive,
3925
+ args: [{ selector: "[cubeRoom]" }]
3926
+ }],
3927
+ ctorParameters: () => []
3928
+ });
3929
+ const CUBE_ZOOM_OPTIONS = new InjectionToken("CUBE_ZOOM_OPTIONS", {
3930
+ providedIn: "root",
3931
+ factory: () => ({ keepScroll: true })
3932
+ });
3933
+ function provideCubeZoom(options) {
3934
+ return {
3935
+ provide: CUBE_ZOOM_OPTIONS,
3936
+ useValue: {
3937
+ keepScroll: true,
3938
+ ...options
3939
+ }
3940
+ };
3941
+ }
3942
+ const pathOf = (url) => url.split(/[?#]/)[0];
3943
+ const RESTORE_FOR_MS = 1500;
3944
+ const STILL_FRAMES = 12;
3945
+ const SCROLL_KEYS = /* @__PURE__ */ new Set([
3946
+ "ArrowUp",
3947
+ "ArrowDown",
3948
+ "PageUp",
3949
+ "PageDown",
3950
+ "Home",
3951
+ "End",
3952
+ " "
3953
+ ]);
3954
+ function cubeMovesThePage(e, since) {
3955
+ if (e.timeStamp < since) return false;
3956
+ if (e instanceof WheelEvent) return !e.ctrlKey;
3957
+ if (e instanceof KeyboardEvent) return SCROLL_KEYS.has(e.key);
3958
+ return true;
3959
+ }
3960
+ function cubeTrailHolds(trail, from, to) {
3961
+ if (!trail.length) return true;
3962
+ if (pathOf(trail.at(-1).url) === pathOf(from)) return true;
3963
+ return trail.some((entry) => pathOf(entry.url) === pathOf(to));
3964
+ }
3965
+ var CubeZoomService = class CubeZoomService {
3966
+ next = null;
3967
+ trail = [];
3968
+ scrolled = /* @__PURE__ */ new Map();
3969
+ restore = null;
3970
+ steppingOutTo = null;
3971
+ options = inject(CUBE_ZOOM_OPTIONS);
3972
+ router = inject(Router);
3973
+ leaving = new Subject();
3974
+ left = this.leaving.asObservable();
3975
+ constructor() {
3976
+ const router = this.router;
3977
+ router.events.subscribe((e) => {
3978
+ if (e instanceof NavigationStart) {
3979
+ this.restore = null;
3980
+ const out = this.steppingOutTo;
3981
+ this.steppingOutTo = null;
3982
+ if (e.navigationTrigger === "popstate") return;
3983
+ if (this.next?.kind === "out" && this.options.keepScroll) {
3984
+ const top = this.scrolled.get(e.url) ?? this.scrolled.get(pathOf(e.url));
3985
+ if (top) this.restore = {
3986
+ id: e.id,
3987
+ top
3988
+ };
3989
+ }
3990
+ if (router.currentNavigation()?.extras.replaceUrl) return;
3991
+ if (out !== null && pathOf(out) === pathOf(e.url)) return;
3992
+ if (!cubeTrailHolds(this.trail, router.url, e.url)) this.trail.length = 0;
3993
+ }
3994
+ if (e instanceof NavigationEnd && this.restore?.id === e.id) this.scrollBack(this.restore.top);
3995
+ });
3996
+ }
3997
+ leave(url, label) {
3998
+ this.trail.push({
3999
+ url,
4000
+ label
4001
+ });
4002
+ if (typeof window === "undefined") return;
4003
+ const top = Math.round(window.scrollY);
4004
+ this.scrolled.set(url, top);
4005
+ this.scrolled.set(pathOf(url), top);
4006
+ }
4007
+ scrollBack(top) {
4008
+ const restore = this.restore;
4009
+ const until = performance.now() + RESTORE_FOR_MS;
4010
+ let moved = false;
4011
+ let still = 0;
4012
+ let height = -1;
4013
+ const since = performance.now();
4014
+ const stop = (e) => {
4015
+ if (cubeMovesThePage(e, since)) moved = true;
4016
+ };
4017
+ const events = [
4018
+ "wheel",
4019
+ "touchstart",
4020
+ "keydown"
4021
+ ];
4022
+ events.forEach((name) => window.addEventListener(name, stop, { passive: true }));
4023
+ const done = () => {
4024
+ events.forEach((name) => window.removeEventListener(name, stop));
4025
+ if (this.restore === restore) this.restore = null;
4026
+ };
4027
+ const step = () => {
4028
+ if (moved || this.restore !== restore || performance.now() > until) return done();
4029
+ if (Math.abs(window.scrollY - top) >= 2) window.scrollTo(0, top);
4030
+ const now = document.documentElement.scrollHeight;
4031
+ still = Math.abs(window.scrollY - top) < 2 && now === height ? still + 1 : 0;
4032
+ height = now;
4033
+ if (still >= STILL_FRAMES) return done();
4034
+ requestAnimationFrame(step);
4035
+ };
4036
+ step();
4037
+ }
4038
+ previous(url) {
4039
+ const at = this.trail.findIndex((entry) => entry.url === url);
4040
+ if (at >= 0) this.trail.splice(at);
4041
+ return this.trail.at(-1) ?? null;
4042
+ }
4043
+ stepBack(to) {
4044
+ const from = this.router.url;
4045
+ this.steppingOutTo = this.trail.pop()?.url ?? null;
4046
+ this.leaving.next({
4047
+ from,
4048
+ to: this.steppingOutTo ?? to ?? null,
4049
+ via: "step"
4050
+ });
4051
+ }
4052
+ leaveAll(inside) {
4053
+ while (this.trail.length && inside(this.trail.at(-1).url)) this.trail.pop();
4054
+ const from = this.router.url;
4055
+ const to = this.trail.pop() ?? null;
4056
+ this.steppingOutTo = to?.url ?? null;
4057
+ this.leaving.next({
4058
+ from,
4059
+ to: to?.url ?? null,
4060
+ via: "all"
4061
+ });
4062
+ return to;
4063
+ }
4064
+ into(element) {
4065
+ const box = element?.getBoundingClientRect();
4066
+ this.next = {
4067
+ kind: "in",
4068
+ origin: box ? `${box.left + box.width / 2}px ${box.top + box.height / 2}px` : null
4069
+ };
4070
+ }
4071
+ outOf() {
4072
+ this.next = {
4073
+ kind: "out",
4074
+ origin: null
4075
+ };
4076
+ }
4077
+ take() {
4078
+ const next = this.next;
4079
+ this.next = null;
4080
+ if (typeof matchMedia !== "undefined" && matchMedia("(prefers-reduced-motion: reduce)").matches) return null;
4081
+ return next;
4082
+ }
4083
+ static ɵfac = i0.ɵɵngDeclareFactory({
4084
+ minVersion: "12.0.0",
4085
+ version: "22.2.4",
4086
+ ngImport: i0,
4087
+ type: CubeZoomService,
4088
+ deps: [],
4089
+ target: i0.ɵɵFactoryTarget.Injectable
4090
+ });
4091
+ static ɵprov = i0.ɵɵngDeclareInjectable({
4092
+ minVersion: "12.0.0",
4093
+ version: "22.2.4",
4094
+ ngImport: i0,
4095
+ type: CubeZoomService,
4096
+ providedIn: "root"
4097
+ });
4098
+ };
4099
+ i0.ɵɵngDeclareClassMetadata({
4100
+ minVersion: "12.0.0",
4101
+ version: "22.2.4",
4102
+ ngImport: i0,
4103
+ type: CubeZoomService,
4104
+ decorators: [{
4105
+ type: Injectable,
4106
+ args: [{ providedIn: "root" }]
4107
+ }],
4108
+ ctorParameters: () => []
4109
+ });
4110
+ var CubeZoomPinch = class CubeZoomPinch {
4111
+ host = inject(ElementRef);
4112
+ cubeZoomOut = output();
4113
+ constructor() {
4114
+ inject(CubePinch).cubePinched.subscribe((pinch) => {
4115
+ if (pinch.way === "out") this.cubeZoomOut.emit();
4116
+ else this.zoomInto(pinch.at);
4117
+ });
4118
+ }
4119
+ zoomInto(at) {
4120
+ const piece = at?.closest("[data-zoom]");
4121
+ if (piece && this.host.nativeElement.contains(piece)) piece.click();
4122
+ }
4123
+ static ɵfac = i0.ɵɵngDeclareFactory({
4124
+ minVersion: "12.0.0",
4125
+ version: "22.2.4",
4126
+ ngImport: i0,
4127
+ type: CubeZoomPinch,
4128
+ deps: [],
4129
+ target: i0.ɵɵFactoryTarget.Directive
4130
+ });
4131
+ static ɵdir = i0.ɵɵngDeclareDirective({
4132
+ minVersion: "14.0.0",
4133
+ version: "22.2.4",
4134
+ type: CubeZoomPinch,
4135
+ isStandalone: true,
4136
+ selector: "[cubeZoomPinch]",
4137
+ outputs: { cubeZoomOut: "cubeZoomOut" },
4138
+ hostDirectives: [{
4139
+ directive: CubePinch,
4140
+ inputs: [
4141
+ "cubePinchDisabled",
4142
+ "cubePinchDisabled",
4143
+ "cubePinchQuietMs",
4144
+ "cubePinchQuietMs"
4145
+ ]
4146
+ }],
4147
+ ngImport: i0
4148
+ });
4149
+ };
4150
+ i0.ɵɵngDeclareClassMetadata({
4151
+ minVersion: "12.0.0",
4152
+ version: "22.2.4",
4153
+ ngImport: i0,
4154
+ type: CubeZoomPinch,
4155
+ decorators: [{
4156
+ type: Directive,
4157
+ args: [{
4158
+ selector: "[cubeZoomPinch]",
4159
+ hostDirectives: [{
4160
+ directive: CubePinch,
4161
+ inputs: ["cubePinchDisabled", "cubePinchQuietMs"]
4162
+ }]
4163
+ }]
4164
+ }],
4165
+ ctorParameters: () => [],
4166
+ propDecorators: { cubeZoomOut: [{
4167
+ type: i0.Output,
4168
+ args: ["cubeZoomOut"]
4169
+ }] }
4170
+ });
4171
+ const CUBE_HEAD_SWIPE = 30;
4172
+ var CubeHead = class CubeHead {
4173
+ count = input(1, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
4174
+ colours = input([], ...ngDevMode ? [{ debugName: "colours" }] : /* istanbul ignore next */ []);
4175
+ art = input("stickers", ...ngDevMode ? [{ debugName: "art" }] : /* istanbul ignore next */ []);
4176
+ whole = input(false, ...ngDevMode ? [{ debugName: "whole" }] : /* istanbul ignore next */ []);
4177
+ hint = input(false, ...ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []);
4178
+ width = input(100, ...ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []);
4179
+ title = input(null, ...ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []);
4180
+ line = input(null, ...ngDevMode ? [{ debugName: "line" }] : /* istanbul ignore next */ []);
4181
+ backLabel = input(null, ...ngDevMode ? [{ debugName: "backLabel" }] : /* istanbul ignore next */ []);
4182
+ backAria = input(null, ...ngDevMode ? [{ debugName: "backAria" }] : /* istanbul ignore next */ []);
4183
+ backDrop = input(null, ...ngDevMode ? [{ debugName: "backDrop" }] : /* istanbul ignore next */ []);
4184
+ carrying = input(false, ...ngDevMode ? [{ debugName: "carrying" }] : /* istanbul ignore next */ []);
4185
+ holds = input(false, ...ngDevMode ? [{ debugName: "holds" }] : /* istanbul ignore next */ []);
4186
+ holdMs = input(520, ...ngDevMode ? [{ debugName: "holdMs" }] : /* istanbul ignore next */ []);
4187
+ turns = input(false, ...ngDevMode ? [{ debugName: "turns" }] : /* istanbul ignore next */ []);
4188
+ regroups = input(false, ...ngDevMode ? [{ debugName: "regroups" }] : /* istanbul ignore next */ []);
4189
+ grew = input(false, ...ngDevMode ? [{ debugName: "grew" }] : /* istanbul ignore next */ []);
4190
+ back = output();
4191
+ held = output();
4192
+ turned = output();
4193
+ rot = signal(0, ...ngDevMode ? [{ debugName: "rot" }] : /* istanbul ignore next */ []);
4194
+ turning = signal(false, ...ngDevMode ? [{ debugName: "turning" }] : /* istanbul ignore next */ []);
4195
+ startX = null;
4196
+ timers = [];
4197
+ constructor() {
4198
+ inject(DestroyRef).onDestroy(() => this.timers.forEach(clearTimeout));
4199
+ }
4200
+ start(event) {
4201
+ this.startX = this.turns() && event.isPrimary ? event.clientX : null;
4202
+ }
4203
+ end(event) {
4204
+ if (this.startX === null) return;
4205
+ const moved = event.clientX - this.startX;
4206
+ this.startX = null;
4207
+ if (Math.abs(moved) >= 30) this.turn(moved < 0 ? 1 : -1);
4208
+ }
4209
+ key(event) {
4210
+ if (!this.turns() || event.defaultPrevented) return;
4211
+ if (event.target?.closest?.("input, textarea")) return;
4212
+ if (event.key === "ArrowRight") this.turn(1);
4213
+ if (event.key === "ArrowLeft") this.turn(-1);
4214
+ }
4215
+ turn(by) {
4216
+ if (this.count() < 2 || this.turning()) return;
4217
+ this.turning.set(true);
4218
+ this.timers.push(setTimeout(() => {
4219
+ if (this.regroups()) this.turned.emit(by);
4220
+ else this.rot.update((r) => r + (by === 1 ? 1 : Math.max(1, this.colours().length) - 1));
4221
+ }, 220));
4222
+ this.timers.push(setTimeout(() => this.turning.set(false), 440));
4223
+ }
4224
+ static ɵfac = i0.ɵɵngDeclareFactory({
4225
+ minVersion: "12.0.0",
4226
+ version: "22.2.4",
4227
+ ngImport: i0,
4228
+ type: CubeHead,
4229
+ deps: [],
4230
+ target: i0.ɵɵFactoryTarget.Component
4231
+ });
4232
+ static ɵcmp = i0.ɵɵngDeclareComponent({
4233
+ minVersion: "17.0.0",
4234
+ version: "22.2.4",
4235
+ type: CubeHead,
4236
+ isStandalone: true,
4237
+ selector: "cube-head",
4238
+ inputs: {
4239
+ count: {
4240
+ classPropertyName: "count",
4241
+ publicName: "count",
4242
+ isSignal: true,
4243
+ isRequired: false,
4244
+ transformFunction: null
4245
+ },
4246
+ colours: {
4247
+ classPropertyName: "colours",
4248
+ publicName: "colours",
4249
+ isSignal: true,
4250
+ isRequired: false,
4251
+ transformFunction: null
4252
+ },
4253
+ art: {
4254
+ classPropertyName: "art",
4255
+ publicName: "art",
4256
+ isSignal: true,
4257
+ isRequired: false,
4258
+ transformFunction: null
4259
+ },
4260
+ whole: {
4261
+ classPropertyName: "whole",
4262
+ publicName: "whole",
4263
+ isSignal: true,
4264
+ isRequired: false,
4265
+ transformFunction: null
4266
+ },
4267
+ hint: {
4268
+ classPropertyName: "hint",
4269
+ publicName: "hint",
4270
+ isSignal: true,
4271
+ isRequired: false,
4272
+ transformFunction: null
4273
+ },
4274
+ width: {
4275
+ classPropertyName: "width",
4276
+ publicName: "width",
4277
+ isSignal: true,
4278
+ isRequired: false,
4279
+ transformFunction: null
4280
+ },
4281
+ title: {
4282
+ classPropertyName: "title",
4283
+ publicName: "title",
4284
+ isSignal: true,
4285
+ isRequired: false,
4286
+ transformFunction: null
4287
+ },
4288
+ line: {
4289
+ classPropertyName: "line",
4290
+ publicName: "line",
4291
+ isSignal: true,
4292
+ isRequired: false,
4293
+ transformFunction: null
4294
+ },
4295
+ backLabel: {
4296
+ classPropertyName: "backLabel",
4297
+ publicName: "backLabel",
4298
+ isSignal: true,
4299
+ isRequired: false,
4300
+ transformFunction: null
4301
+ },
4302
+ backAria: {
4303
+ classPropertyName: "backAria",
4304
+ publicName: "backAria",
4305
+ isSignal: true,
4306
+ isRequired: false,
4307
+ transformFunction: null
4308
+ },
4309
+ backDrop: {
4310
+ classPropertyName: "backDrop",
4311
+ publicName: "backDrop",
4312
+ isSignal: true,
4313
+ isRequired: false,
4314
+ transformFunction: null
4315
+ },
4316
+ carrying: {
4317
+ classPropertyName: "carrying",
4318
+ publicName: "carrying",
4319
+ isSignal: true,
4320
+ isRequired: false,
4321
+ transformFunction: null
4322
+ },
4323
+ holds: {
4324
+ classPropertyName: "holds",
4325
+ publicName: "holds",
4326
+ isSignal: true,
4327
+ isRequired: false,
4328
+ transformFunction: null
4329
+ },
4330
+ holdMs: {
4331
+ classPropertyName: "holdMs",
4332
+ publicName: "holdMs",
4333
+ isSignal: true,
4334
+ isRequired: false,
4335
+ transformFunction: null
4336
+ },
4337
+ turns: {
4338
+ classPropertyName: "turns",
4339
+ publicName: "turns",
4340
+ isSignal: true,
4341
+ isRequired: false,
4342
+ transformFunction: null
4343
+ },
4344
+ regroups: {
4345
+ classPropertyName: "regroups",
4346
+ publicName: "regroups",
4347
+ isSignal: true,
4348
+ isRequired: false,
4349
+ transformFunction: null
4350
+ },
4351
+ grew: {
4352
+ classPropertyName: "grew",
4353
+ publicName: "grew",
4354
+ isSignal: true,
4355
+ isRequired: false,
4356
+ transformFunction: null
4357
+ }
4358
+ },
4359
+ outputs: {
4360
+ back: "back",
4361
+ held: "held",
4362
+ turned: "turned"
4363
+ },
4364
+ host: { listeners: { "document:keydown": "key($event)" } },
4365
+ ngImport: i0,
4366
+ template: `
4367
+ <div class="ch-back-row">
4368
+ @if (backLabel(); as b) {
4369
+ <button
4370
+ type="button"
4371
+ class="ch-back"
4372
+ [class.ch-drop]="!!backDrop() && carrying()"
4373
+ [attr.data-drop]="backDrop()"
4374
+ [attr.aria-label]="backAria() ?? b"
4375
+ (click)="back.emit()"
4376
+ >
4377
+ <span class="ch-arrow" aria-hidden="true">‹</span>
4378
+ <span class="ch-back-name">{{ b }}</span>
4379
+ </button>
4380
+ }
4381
+ </div>
4382
+ <div class="ch-cube-row">
4383
+ <div
4384
+ class="ch-circle"
4385
+ [class.ch-holds]="holds()"
4386
+ [class.ch-turns]="turns() && count() > 1"
4387
+ [class.ch-turning]="turning()"
4388
+ [class.ch-grew]="grew()"
4389
+ role="img"
4390
+ [attr.aria-label]="title() || null"
4391
+ [attr.tabindex]="holds() ? 0 : null"
4392
+ data-no-swipe
4393
+ cubeHold
4394
+ [cubeHoldDisabled]="!holds()"
4395
+ [cubeHoldMs]="holdMs()"
4396
+ (cubeHeld)="held.emit($event)"
4397
+ (pointerdown)="start($event)"
4398
+ (pointerup)="end($event)"
4399
+ (pointercancel)="startX = null"
4400
+ >
4401
+ <cube-picture
4402
+ [art]="art()"
4403
+ [count]="count()"
4404
+ [colours]="colours()"
4405
+ [width]="width()"
4406
+ [whole]="whole()"
4407
+ [hint]="hint()"
4408
+ [rot]="rot()"
4409
+ />
4410
+ </div>
4411
+ </div>
4412
+ @if (title() || line()) {
4413
+ <div class="ch-text">
4414
+ @if (title()) {
4415
+ <h1 class="ch-title" [attr.title]="title()">{{ title() }}</h1>
4416
+ }
4417
+ <!-- the line's place is kept on a phone, said or not, so the head is one height on every level -->
4418
+ <p class="ch-line">{{ line() }}</p>
4419
+ </div>
4420
+ }
4421
+ <ng-content />
4422
+ `,
4423
+ isInline: true,
4424
+ 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"],
4425
+ dependencies: [{
4426
+ kind: "component",
4427
+ type: CubePicture,
4428
+ selector: "cube-picture",
4429
+ inputs: [
4430
+ "count",
4431
+ "colours",
4432
+ "width",
4433
+ "hint",
4434
+ "whole",
4435
+ "rot",
4436
+ "art"
4437
+ ]
4438
+ }, {
4439
+ kind: "directive",
4440
+ type: CubeHold,
4441
+ selector: "[cubeHold]",
4442
+ inputs: [
4443
+ "cubeHoldDisabled",
4444
+ "cubeHoldMs",
4445
+ "cubeHoldSlop",
4446
+ "cubeHoldBuzz"
4447
+ ],
4448
+ outputs: ["cubeHeld"]
4449
+ }],
4450
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
4451
+ });
4452
+ };
4453
+ i0.ɵɵngDeclareClassMetadata({
4454
+ minVersion: "12.0.0",
4455
+ version: "22.2.4",
4456
+ ngImport: i0,
4457
+ type: CubeHead,
4458
+ decorators: [{
4459
+ type: Component,
4460
+ args: [{
4461
+ selector: "cube-head",
4462
+ imports: [CubePicture, CubeHold],
4463
+ template: `
4464
+ <div class="ch-back-row">
4465
+ @if (backLabel(); as b) {
4466
+ <button
4467
+ type="button"
4468
+ class="ch-back"
4469
+ [class.ch-drop]="!!backDrop() && carrying()"
4470
+ [attr.data-drop]="backDrop()"
4471
+ [attr.aria-label]="backAria() ?? b"
4472
+ (click)="back.emit()"
4473
+ >
4474
+ <span class="ch-arrow" aria-hidden="true">‹</span>
4475
+ <span class="ch-back-name">{{ b }}</span>
4476
+ </button>
4477
+ }
4478
+ </div>
4479
+ <div class="ch-cube-row">
4480
+ <div
4481
+ class="ch-circle"
4482
+ [class.ch-holds]="holds()"
4483
+ [class.ch-turns]="turns() && count() > 1"
4484
+ [class.ch-turning]="turning()"
4485
+ [class.ch-grew]="grew()"
4486
+ role="img"
4487
+ [attr.aria-label]="title() || null"
4488
+ [attr.tabindex]="holds() ? 0 : null"
4489
+ data-no-swipe
4490
+ cubeHold
4491
+ [cubeHoldDisabled]="!holds()"
4492
+ [cubeHoldMs]="holdMs()"
4493
+ (cubeHeld)="held.emit($event)"
4494
+ (pointerdown)="start($event)"
4495
+ (pointerup)="end($event)"
4496
+ (pointercancel)="startX = null"
4497
+ >
4498
+ <cube-picture
4499
+ [art]="art()"
4500
+ [count]="count()"
4501
+ [colours]="colours()"
4502
+ [width]="width()"
4503
+ [whole]="whole()"
4504
+ [hint]="hint()"
4505
+ [rot]="rot()"
4506
+ />
4507
+ </div>
4508
+ </div>
4509
+ @if (title() || line()) {
4510
+ <div class="ch-text">
4511
+ @if (title()) {
4512
+ <h1 class="ch-title" [attr.title]="title()">{{ title() }}</h1>
4513
+ }
4514
+ <!-- the line's place is kept on a phone, said or not, so the head is one height on every level -->
4515
+ <p class="ch-line">{{ line() }}</p>
4516
+ </div>
4517
+ }
4518
+ <ng-content />
4519
+ `,
4520
+ host: { "(document:keydown)": "key($event)" },
4521
+ changeDetection: ChangeDetectionStrategy.OnPush,
4522
+ 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"]
4523
+ }]
4524
+ }],
4525
+ ctorParameters: () => [],
4526
+ propDecorators: {
4527
+ count: [{
4528
+ type: i0.Input,
4529
+ args: [{
4530
+ isSignal: true,
4531
+ alias: "count",
4532
+ required: false
4533
+ }]
4534
+ }],
4535
+ colours: [{
4536
+ type: i0.Input,
4537
+ args: [{
4538
+ isSignal: true,
4539
+ alias: "colours",
4540
+ required: false
4541
+ }]
4542
+ }],
4543
+ art: [{
4544
+ type: i0.Input,
4545
+ args: [{
4546
+ isSignal: true,
4547
+ alias: "art",
4548
+ required: false
4549
+ }]
4550
+ }],
4551
+ whole: [{
4552
+ type: i0.Input,
4553
+ args: [{
4554
+ isSignal: true,
4555
+ alias: "whole",
4556
+ required: false
4557
+ }]
4558
+ }],
4559
+ hint: [{
4560
+ type: i0.Input,
4561
+ args: [{
4562
+ isSignal: true,
4563
+ alias: "hint",
4564
+ required: false
4565
+ }]
4566
+ }],
4567
+ width: [{
4568
+ type: i0.Input,
4569
+ args: [{
4570
+ isSignal: true,
4571
+ alias: "width",
4572
+ required: false
4573
+ }]
4574
+ }],
4575
+ title: [{
4576
+ type: i0.Input,
4577
+ args: [{
4578
+ isSignal: true,
4579
+ alias: "title",
4580
+ required: false
4581
+ }]
4582
+ }],
4583
+ line: [{
4584
+ type: i0.Input,
4585
+ args: [{
4586
+ isSignal: true,
4587
+ alias: "line",
4588
+ required: false
4589
+ }]
4590
+ }],
4591
+ backLabel: [{
4592
+ type: i0.Input,
4593
+ args: [{
4594
+ isSignal: true,
4595
+ alias: "backLabel",
4596
+ required: false
4597
+ }]
4598
+ }],
4599
+ backAria: [{
4600
+ type: i0.Input,
4601
+ args: [{
4602
+ isSignal: true,
4603
+ alias: "backAria",
4604
+ required: false
4605
+ }]
4606
+ }],
4607
+ backDrop: [{
4608
+ type: i0.Input,
4609
+ args: [{
4610
+ isSignal: true,
4611
+ alias: "backDrop",
4612
+ required: false
4613
+ }]
4614
+ }],
4615
+ carrying: [{
4616
+ type: i0.Input,
4617
+ args: [{
4618
+ isSignal: true,
4619
+ alias: "carrying",
4620
+ required: false
4621
+ }]
4622
+ }],
4623
+ holds: [{
4624
+ type: i0.Input,
4625
+ args: [{
4626
+ isSignal: true,
4627
+ alias: "holds",
4628
+ required: false
4629
+ }]
4630
+ }],
4631
+ holdMs: [{
4632
+ type: i0.Input,
4633
+ args: [{
4634
+ isSignal: true,
4635
+ alias: "holdMs",
4636
+ required: false
4637
+ }]
4638
+ }],
4639
+ turns: [{
4640
+ type: i0.Input,
4641
+ args: [{
4642
+ isSignal: true,
4643
+ alias: "turns",
4644
+ required: false
4645
+ }]
4646
+ }],
4647
+ regroups: [{
4648
+ type: i0.Input,
4649
+ args: [{
4650
+ isSignal: true,
4651
+ alias: "regroups",
4652
+ required: false
4653
+ }]
4654
+ }],
4655
+ grew: [{
4656
+ type: i0.Input,
4657
+ args: [{
4658
+ isSignal: true,
4659
+ alias: "grew",
4660
+ required: false
4661
+ }]
4662
+ }],
4663
+ back: [{
4664
+ type: i0.Output,
4665
+ args: ["back"]
4666
+ }],
4667
+ held: [{
4668
+ type: i0.Output,
4669
+ args: ["held"]
4670
+ }],
4671
+ turned: [{
4672
+ type: i0.Output,
4673
+ args: ["turned"]
4674
+ }]
4675
+ }
4676
+ });
4677
+ function cubeTilePicture(level, cell) {
4678
+ return Math.round(level < 2 ? Math.min(56, Math.max(28, cell * .28)) : level < 4 ? Math.max(20, cell * .24) : cell * .6);
4679
+ }
4680
+ var CubeTile = class CubeTile {
4681
+ name = input.required(...ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []);
4682
+ line = input(null, ...ngDevMode ? [{ debugName: "line" }] : /* istanbul ignore next */ []);
4683
+ says = input(true, ...ngDevMode ? [{ debugName: "says" }] : /* istanbul ignore next */ []);
4684
+ level = input(1, ...ngDevMode ? [{ debugName: "level" }] : /* istanbul ignore next */ []);
4685
+ cell = input(150, ...ngDevMode ? [{ debugName: "cell" }] : /* istanbul ignore next */ []);
4686
+ count = input(1, ...ngDevMode ? [{ debugName: "count" }] : /* istanbul ignore next */ []);
4687
+ colours = input([], ...ngDevMode ? [{ debugName: "colours" }] : /* istanbul ignore next */ []);
4688
+ art = input("stickers", ...ngDevMode ? [{ debugName: "art" }] : /* istanbul ignore next */ []);
4689
+ whole = input(null, ...ngDevMode ? [{ debugName: "whole" }] : /* istanbul ignore next */ []);
4690
+ look = input("piece", ...ngDevMode ? [{ debugName: "look" }] : /* istanbul ignore next */ []);
4691
+ ticked = input(false, ...ngDevMode ? [{ debugName: "ticked" }] : /* istanbul ignore next */ []);
4692
+ tick = input("✓", ...ngDevMode ? [{ debugName: "tick" }] : /* istanbul ignore next */ []);
4693
+ tickedWord = input(null, ...ngDevMode ? [{ debugName: "tickedWord" }] : /* istanbul ignore next */ []);
4694
+ marked = input(false, ...ngDevMode ? [{ debugName: "marked" }] : /* istanbul ignore next */ []);
4695
+ picture = computed(() => cubeTilePicture(this.level(), this.cell()), ...ngDevMode ? [{ debugName: "picture" }] : /* istanbul ignore next */ []);
4696
+ classes = computed(() => `ct-l${this.level()} ct-${this.look()}` + (this.ticked() ? " ct-ticked" : "") + (this.marked() ? " ct-marked" : ""), ...ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []);
4697
+ static ɵfac = i0.ɵɵngDeclareFactory({
4698
+ minVersion: "12.0.0",
4699
+ version: "22.2.4",
4700
+ ngImport: i0,
4701
+ type: CubeTile,
4702
+ deps: [],
4703
+ target: i0.ɵɵFactoryTarget.Component
4704
+ });
4705
+ static ɵcmp = i0.ɵɵngDeclareComponent({
4706
+ minVersion: "17.0.0",
4707
+ version: "22.2.4",
4708
+ type: CubeTile,
4709
+ isStandalone: true,
4710
+ selector: "cube-tile",
4711
+ inputs: {
4712
+ name: {
4713
+ classPropertyName: "name",
4714
+ publicName: "name",
4715
+ isSignal: true,
4716
+ isRequired: true,
4717
+ transformFunction: null
4718
+ },
4719
+ line: {
4720
+ classPropertyName: "line",
4721
+ publicName: "line",
4722
+ isSignal: true,
4723
+ isRequired: false,
4724
+ transformFunction: null
4725
+ },
4726
+ says: {
4727
+ classPropertyName: "says",
4728
+ publicName: "says",
4729
+ isSignal: true,
4730
+ isRequired: false,
4731
+ transformFunction: null
4732
+ },
4733
+ level: {
4734
+ classPropertyName: "level",
4735
+ publicName: "level",
4736
+ isSignal: true,
4737
+ isRequired: false,
4738
+ transformFunction: null
4739
+ },
4740
+ cell: {
4741
+ classPropertyName: "cell",
4742
+ publicName: "cell",
4743
+ isSignal: true,
4744
+ isRequired: false,
4745
+ transformFunction: null
4746
+ },
4747
+ count: {
4748
+ classPropertyName: "count",
4749
+ publicName: "count",
4750
+ isSignal: true,
4751
+ isRequired: false,
4752
+ transformFunction: null
4753
+ },
4754
+ colours: {
4755
+ classPropertyName: "colours",
4756
+ publicName: "colours",
4757
+ isSignal: true,
4758
+ isRequired: false,
4759
+ transformFunction: null
4760
+ },
4761
+ art: {
4762
+ classPropertyName: "art",
4763
+ publicName: "art",
4764
+ isSignal: true,
4765
+ isRequired: false,
4766
+ transformFunction: null
4767
+ },
4768
+ whole: {
4769
+ classPropertyName: "whole",
4770
+ publicName: "whole",
4771
+ isSignal: true,
4772
+ isRequired: false,
4773
+ transformFunction: null
4774
+ },
4775
+ look: {
4776
+ classPropertyName: "look",
4777
+ publicName: "look",
4778
+ isSignal: true,
4779
+ isRequired: false,
4780
+ transformFunction: null
4781
+ },
4782
+ ticked: {
4783
+ classPropertyName: "ticked",
4784
+ publicName: "ticked",
4785
+ isSignal: true,
4786
+ isRequired: false,
4787
+ transformFunction: null
4788
+ },
4789
+ tick: {
4790
+ classPropertyName: "tick",
4791
+ publicName: "tick",
4792
+ isSignal: true,
4793
+ isRequired: false,
4794
+ transformFunction: null
4795
+ },
4796
+ tickedWord: {
4797
+ classPropertyName: "tickedWord",
4798
+ publicName: "tickedWord",
4799
+ isSignal: true,
4800
+ isRequired: false,
4801
+ transformFunction: null
4802
+ },
4803
+ marked: {
4804
+ classPropertyName: "marked",
4805
+ publicName: "marked",
4806
+ isSignal: true,
4807
+ isRequired: false,
4808
+ transformFunction: null
4809
+ }
4810
+ },
4811
+ host: { properties: {
4812
+ "class": "classes()",
4813
+ "attr.data-level": "level()"
4814
+ } },
4815
+ ngImport: i0,
4816
+ template: `
4817
+ @if (ticked() && level() < 4) {
4818
+ <span class="ct-tick" [attr.aria-label]="tickedWord() || null">{{ tick() }}</span>
4819
+ }
4820
+ @if (look() !== 'own') {
4821
+ <span class="ct-picture" [class.ct-push]="level() < 4">
4822
+ <cube-picture
4823
+ [art]="art()"
4824
+ [count]="count()"
4825
+ [colours]="colours()"
4826
+ [width]="picture()"
4827
+ [whole]="whole() ?? count() === 1"
4828
+ />
4829
+ </span>
4830
+ }
4831
+ @if (level() < 4 || look() === 'own') {
4832
+ <span class="ct-name">{{ look() === 'own' ? '+ ' : '' }}{{ name() }}</span>
4833
+ }
4834
+ @if (line()) {
4835
+ <span class="ct-line" [class.ct-unseen]="!(says() && level() < 3)">{{ line() }}</span>
4836
+ }
4837
+ `,
4838
+ isInline: true,
4839
+ 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"],
4840
+ dependencies: [{
4841
+ kind: "component",
4842
+ type: CubePicture,
4843
+ selector: "cube-picture",
4844
+ inputs: [
4845
+ "count",
4846
+ "colours",
4847
+ "width",
4848
+ "hint",
4849
+ "whole",
4850
+ "rot",
4851
+ "art"
4852
+ ]
4853
+ }],
4854
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
4855
+ });
4856
+ };
4857
+ i0.ɵɵngDeclareClassMetadata({
4858
+ minVersion: "12.0.0",
4859
+ version: "22.2.4",
4860
+ ngImport: i0,
4861
+ type: CubeTile,
4862
+ decorators: [{
4863
+ type: Component,
4864
+ args: [{
4865
+ selector: "cube-tile",
4866
+ imports: [CubePicture],
4867
+ template: `
4868
+ @if (ticked() && level() < 4) {
4869
+ <span class="ct-tick" [attr.aria-label]="tickedWord() || null">{{ tick() }}</span>
4870
+ }
4871
+ @if (look() !== 'own') {
4872
+ <span class="ct-picture" [class.ct-push]="level() < 4">
4873
+ <cube-picture
4874
+ [art]="art()"
4875
+ [count]="count()"
4876
+ [colours]="colours()"
4877
+ [width]="picture()"
4878
+ [whole]="whole() ?? count() === 1"
4879
+ />
4880
+ </span>
4881
+ }
4882
+ @if (level() < 4 || look() === 'own') {
4883
+ <span class="ct-name">{{ look() === 'own' ? '+ ' : '' }}{{ name() }}</span>
4884
+ }
4885
+ @if (line()) {
4886
+ <span class="ct-line" [class.ct-unseen]="!(says() && level() < 3)">{{ line() }}</span>
4887
+ }
4888
+ `,
4889
+ host: {
4890
+ "[class]": "classes()",
4891
+ "[attr.data-level]": "level()"
4892
+ },
4893
+ changeDetection: ChangeDetectionStrategy.OnPush,
4894
+ 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"]
4895
+ }]
4896
+ }],
4897
+ propDecorators: {
4898
+ name: [{
4899
+ type: i0.Input,
4900
+ args: [{
4901
+ isSignal: true,
4902
+ alias: "name",
4903
+ required: true
4904
+ }]
4905
+ }],
4906
+ line: [{
4907
+ type: i0.Input,
4908
+ args: [{
4909
+ isSignal: true,
4910
+ alias: "line",
4911
+ required: false
4912
+ }]
4913
+ }],
4914
+ says: [{
4915
+ type: i0.Input,
4916
+ args: [{
4917
+ isSignal: true,
4918
+ alias: "says",
4919
+ required: false
4920
+ }]
4921
+ }],
4922
+ level: [{
4923
+ type: i0.Input,
4924
+ args: [{
4925
+ isSignal: true,
4926
+ alias: "level",
4927
+ required: false
4928
+ }]
4929
+ }],
4930
+ cell: [{
4931
+ type: i0.Input,
4932
+ args: [{
4933
+ isSignal: true,
4934
+ alias: "cell",
4935
+ required: false
4936
+ }]
4937
+ }],
4938
+ count: [{
4939
+ type: i0.Input,
4940
+ args: [{
4941
+ isSignal: true,
4942
+ alias: "count",
4943
+ required: false
4944
+ }]
4945
+ }],
4946
+ colours: [{
4947
+ type: i0.Input,
4948
+ args: [{
4949
+ isSignal: true,
4950
+ alias: "colours",
4951
+ required: false
4952
+ }]
4953
+ }],
4954
+ art: [{
4955
+ type: i0.Input,
4956
+ args: [{
4957
+ isSignal: true,
4958
+ alias: "art",
4959
+ required: false
4960
+ }]
4961
+ }],
4962
+ whole: [{
4963
+ type: i0.Input,
4964
+ args: [{
4965
+ isSignal: true,
4966
+ alias: "whole",
4967
+ required: false
4968
+ }]
4969
+ }],
4970
+ look: [{
4971
+ type: i0.Input,
4972
+ args: [{
4973
+ isSignal: true,
4974
+ alias: "look",
4975
+ required: false
4976
+ }]
4977
+ }],
4978
+ ticked: [{
4979
+ type: i0.Input,
4980
+ args: [{
4981
+ isSignal: true,
4982
+ alias: "ticked",
4983
+ required: false
4984
+ }]
4985
+ }],
4986
+ tick: [{
4987
+ type: i0.Input,
4988
+ args: [{
4989
+ isSignal: true,
4990
+ alias: "tick",
4991
+ required: false
4992
+ }]
4993
+ }],
4994
+ tickedWord: [{
4995
+ type: i0.Input,
4996
+ args: [{
4997
+ isSignal: true,
4998
+ alias: "tickedWord",
4999
+ required: false
5000
+ }]
5001
+ }],
5002
+ marked: [{
5003
+ type: i0.Input,
5004
+ args: [{
5005
+ isSignal: true,
5006
+ alias: "marked",
5007
+ required: false
5008
+ }]
5009
+ }]
5010
+ }
5011
+ });
5012
+ const levelOf = (url) => url.split(/[?#]/)[0];
5013
+ var CubeQuietLine = class {
5014
+ said = signal(null, ...ngDevMode ? [{ debugName: "said" }] : /* istanbul ignore next */ []);
5015
+ note = computed(() => this.said()?.note ?? null, ...ngDevMode ? [{ debugName: "note" }] : /* istanbul ignore next */ []);
5016
+ at = computed(() => this.said()?.at ?? null, ...ngDevMode ? [{ debugName: "at" }] : /* istanbul ignore next */ []);
5017
+ say(note, at) {
5018
+ this.said.set(note ? {
5019
+ note,
5020
+ at: levelOf(at)
5021
+ } : null);
5022
+ }
5023
+ move(at) {
5024
+ const s = this.said();
5025
+ if (s) this.said.set({
5026
+ ...s,
5027
+ at: levelOf(at)
5028
+ });
5029
+ }
5030
+ clear() {
5031
+ this.said.set(null);
5032
+ }
5033
+ on(url) {
5034
+ const s = this.said();
5035
+ return s && s.at === levelOf(url) ? s.note : null;
5036
+ }
5037
+ };
5038
+ var CubeQuiet = class CubeQuiet {
5039
+ note = input(null, ...ngDevMode ? [{ debugName: "note" }] : /* istanbul ignore next */ []);
5040
+ undoWord = input(null, ...ngDevMode ? [{ debugName: "undoWord" }] : /* istanbul ignore next */ []);
5041
+ undo = output();
5042
+ static ɵfac = i0.ɵɵngDeclareFactory({
5043
+ minVersion: "12.0.0",
5044
+ version: "22.2.4",
5045
+ ngImport: i0,
5046
+ type: CubeQuiet,
5047
+ deps: [],
5048
+ target: i0.ɵɵFactoryTarget.Component
5049
+ });
5050
+ static ɵcmp = i0.ɵɵngDeclareComponent({
5051
+ minVersion: "17.0.0",
5052
+ version: "22.2.4",
5053
+ type: CubeQuiet,
5054
+ isStandalone: true,
5055
+ selector: "cube-quiet",
5056
+ inputs: {
5057
+ note: {
5058
+ classPropertyName: "note",
5059
+ publicName: "note",
5060
+ isSignal: true,
5061
+ isRequired: false,
5062
+ transformFunction: null
5063
+ },
5064
+ undoWord: {
5065
+ classPropertyName: "undoWord",
5066
+ publicName: "undoWord",
5067
+ isSignal: true,
5068
+ isRequired: false,
5069
+ transformFunction: null
5070
+ }
5071
+ },
5072
+ outputs: { undo: "undo" },
5073
+ ngImport: i0,
5074
+ template: `
5075
+ @if (note(); as n) {
5076
+ <p class="cq-line" role="status">
5077
+ <span class="cq-says">{{ n.says }}</span>
5078
+ @if (n.undo != null && undoWord()) {
5079
+ <button type="button" class="cq-undo" (click)="undo.emit(n)">{{ undoWord() }}</button>
5080
+ }
5081
+ </p>
5082
+ }
5083
+ `,
5084
+ isInline: true,
5085
+ 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"],
5086
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
5087
+ });
5088
+ };
5089
+ i0.ɵɵngDeclareClassMetadata({
5090
+ minVersion: "12.0.0",
5091
+ version: "22.2.4",
5092
+ ngImport: i0,
5093
+ type: CubeQuiet,
5094
+ decorators: [{
5095
+ type: Component,
5096
+ args: [{
5097
+ selector: "cube-quiet",
5098
+ template: `
5099
+ @if (note(); as n) {
5100
+ <p class="cq-line" role="status">
5101
+ <span class="cq-says">{{ n.says }}</span>
5102
+ @if (n.undo != null && undoWord()) {
5103
+ <button type="button" class="cq-undo" (click)="undo.emit(n)">{{ undoWord() }}</button>
5104
+ }
5105
+ </p>
5106
+ }
5107
+ `,
5108
+ changeDetection: ChangeDetectionStrategy.OnPush,
5109
+ 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"]
5110
+ }]
5111
+ }],
5112
+ propDecorators: {
5113
+ note: [{
5114
+ type: i0.Input,
5115
+ args: [{
5116
+ isSignal: true,
5117
+ alias: "note",
5118
+ required: false
5119
+ }]
5120
+ }],
5121
+ undoWord: [{
5122
+ type: i0.Input,
5123
+ args: [{
5124
+ isSignal: true,
5125
+ alias: "undoWord",
5126
+ required: false
5127
+ }]
5128
+ }],
5129
+ undo: [{
5130
+ type: i0.Output,
5131
+ args: ["undo"]
5132
+ }]
5133
+ }
5134
+ });
3792
5135
  const CUBE_LOADING_WAYS = ["fill", "turn"];
3793
5136
  const CUBE_LOADING_LEVELS = [
3794
5137
  "page",
@@ -3962,6 +5305,7 @@ var CubeLoading = class CubeLoading {
3962
5305
  "tiles",
3963
5306
  "view",
3964
5307
  "maxSide",
5308
+ "cell",
3965
5309
  "align",
3966
5310
  "listRow",
3967
5311
  "dashed",
@@ -4332,6 +5676,6 @@ i0.ɵɵngDeclareClassMetadata({
4332
5676
  args: [{ providedIn: "root" }]
4333
5677
  }]
4334
5678
  });
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 };
5679
+ 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
5680
 
4337
5681
  //# sourceMappingURL=selimssevgi-cube-design-angular.mjs.map