@saasicat/ui-vue 1.0.0-rc.21 → 1.0.0-rc.23
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.
- package/dist/.build-stamp +1 -1
- package/dist/assets/ui-vue.css +90 -60
- package/dist/{batch-column-fetcher-DQ89o95K.d.cts → batch-column-fetcher-D6gEXpSs.d.cts} +1 -1
- package/dist/{batch-column-fetcher-Sr48UWEX.d.ts → batch-column-fetcher-D7E69Iai.d.ts} +1 -1
- package/dist/{catalog-0eZwciPW.d.cts → catalog-Bcl-6zMY.d.cts} +162 -2
- package/dist/{catalog-0eZwciPW.d.ts → catalog-Bcl-6zMY.d.ts} +162 -2
- package/dist/{chunk-CZIVA536.js → chunk-4CJ3LXQX.js} +292 -4
- package/dist/{chunk-7CHT2ATN.js → chunk-7EZUINOM.js} +1 -1
- package/dist/{chunk-RFJ4UGOE.js → chunk-LOMCQINC.js} +40 -4
- package/dist/{chunk-VLGEOPZH.js → chunk-YE54YIYZ.js} +375 -168
- package/dist/{chunk-47HDYN35.js → chunk-YROWQWX4.js} +26 -1
- package/dist/client/index.cjs +365 -7
- package/dist/client/index.d.cts +45 -6
- package/dist/client/index.d.ts +45 -6
- package/dist/client/index.js +21 -3
- package/dist/index.cjs +750 -181
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +37 -5
- package/dist/layouts/AdminLayout.js +74 -4
- package/dist/pages/MaintenancePage.js +415 -0
- package/dist/pages/TenantDetailPage.js +98 -15
- package/dist/pages/index.js +3 -1
- package/dist/quasar/index.cjs +290 -4
- package/dist/quasar/index.d.cts +2 -2
- package/dist/quasar/index.d.ts +2 -2
- package/dist/quasar/index.js +2 -2
- package/dist/{resource-registry-GAxu2kn6.d.ts → resource-registry--50bk_vo.d.ts} +1 -1
- package/dist/{resource-registry-zfCLvEgx.d.cts → resource-registry-GSRUS6Qa.d.cts} +1 -1
- package/dist/vue/index.cjs +691 -181
- package/dist/vue/index.d.cts +122 -54
- package/dist/vue/index.d.ts +122 -54
- package/dist/vue/index.js +18 -4
- package/package.json +3 -3
- package/src/client/i18n/messages/maintenance.ts +181 -0
- package/src/client/i18n/messages/nav.ts +2 -0
- package/src/client/i18n/messages/tenants.ts +52 -0
- package/src/client/i18n/messages.ts +3 -0
- package/src/client/index.ts +2 -0
- package/src/client/maintenance-refusal.ts +64 -0
- package/src/client/maintenance-times.ts +52 -0
- package/src/client/nav-builder.ts +3 -0
- package/src/client/resources/index.ts +3 -0
- package/src/client/resources/maintenance.resource.ts +138 -0
- package/src/client/resources/tenants.resource.ts +20 -3
- package/src/index.ts +4 -0
- package/src/internal/maintenance/MaintenanceLockBanner.vue +71 -0
- package/src/internal/maintenance/MaintenanceWindowDialog.vue +112 -0
- package/src/internal/tenant-detail/TenantCharges.vue +73 -0
- package/src/layouts/AdminLayout.vue +17 -2
- package/src/pages/MaintenancePage.vue +289 -0
- package/src/pages/TenantDetailPage.vue +22 -0
- package/src/pages/index.ts +2 -0
- package/src/vue/index.ts +4 -0
- package/src/vue/use-maintenance-lock-watch.ts +66 -0
- package/src/vue/use-maintenance-status.ts +105 -0
- package/src/vue/use-maintenance.ts +164 -0
- package/src/vue/use-tenant-account.ts +37 -0
- package/src/vue/use-tenant-billing.ts +8 -0
package/dist/.build-stamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
41b3b5f88a4092f224945275383bb128b4c272fe2c7757eef112b64d89849c4b
|
package/dist/assets/ui-vue.css
CHANGED
|
@@ -316,7 +316,13 @@
|
|
|
316
316
|
letter-spacing: var(--sa-tracking-wider);
|
|
317
317
|
}
|
|
318
318
|
|
|
319
|
-
.sa-
|
|
319
|
+
.sa-maintenance-lock__link[data-v-2a83407e] {
|
|
320
|
+
margin-left: var(--sa-space-2);
|
|
321
|
+
color: inherit;
|
|
322
|
+
font-weight: 600;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.sa-admin-banner[data-v-06c8fec8] {
|
|
320
326
|
display: flex;
|
|
321
327
|
align-items: center;
|
|
322
328
|
justify-content: center;
|
|
@@ -326,7 +332,7 @@
|
|
|
326
332
|
letter-spacing: var(--sa-tracking-wider);
|
|
327
333
|
text-transform: uppercase;
|
|
328
334
|
}
|
|
329
|
-
.sa-admin-banner--prod[data-v-
|
|
335
|
+
.sa-admin-banner--prod[data-v-06c8fec8] {
|
|
330
336
|
/* Invariant on purpose: this strip says "you are on production", and its
|
|
331
337
|
* white text has to stay readable in both themes. The `negative` roles
|
|
332
338
|
* lighten in dark — for text ON dark surfaces — and would take this one to
|
|
@@ -338,7 +344,7 @@
|
|
|
338
344
|
);
|
|
339
345
|
color: var(--sa-color-inverse-fg);
|
|
340
346
|
}
|
|
341
|
-
.sa-admin-header[data-v-
|
|
347
|
+
.sa-admin-header[data-v-06c8fec8] {
|
|
342
348
|
background: var(
|
|
343
349
|
--sa-admin-header-bg,
|
|
344
350
|
linear-gradient(90deg, var(--sa-color-inverse-bg), var(--sa-color-inverse-surface))
|
|
@@ -350,7 +356,7 @@
|
|
|
350
356
|
* box. Measured at 390px with the platform's own strings: 11px over, which is
|
|
351
357
|
* a fixed header, so nothing scrolls it back into view. Both lines shrink now,
|
|
352
358
|
* which is what a title is for and a control is not. */
|
|
353
|
-
.sa-admin-header[data-v-
|
|
359
|
+
.sa-admin-header[data-v-06c8fec8] .q-toolbar__title {
|
|
354
360
|
min-width: 0;
|
|
355
361
|
/* Quasar pads the title 12px on each side, and padding does not shrink: at
|
|
356
362
|
* the narrow end the title itself was already down to nothing while those
|
|
@@ -360,7 +366,7 @@
|
|
|
360
366
|
padding-left: 0;
|
|
361
367
|
padding-right: var(--sa-space-3);
|
|
362
368
|
}
|
|
363
|
-
.sa-admin-header__sub[data-v-
|
|
369
|
+
.sa-admin-header__sub[data-v-06c8fec8] {
|
|
364
370
|
font-size: var(--sa-text-xs);
|
|
365
371
|
color: var(--sa-admin-header-sub, var(--sa-color-inverse-accent));
|
|
366
372
|
font-weight: 400;
|
|
@@ -368,7 +374,7 @@
|
|
|
368
374
|
text-overflow: ellipsis;
|
|
369
375
|
white-space: nowrap;
|
|
370
376
|
}
|
|
371
|
-
.sa-admin-badge[data-v-
|
|
377
|
+
.sa-admin-badge[data-v-06c8fec8] {
|
|
372
378
|
background: var(--sa-admin-badge-bg, var(--sa-color-inverse-accent));
|
|
373
379
|
color: var(--sa-admin-badge-fg, var(--sa-color-inverse-accent-fg));
|
|
374
380
|
font-weight: 800;
|
|
@@ -376,7 +382,7 @@
|
|
|
376
382
|
font-size: var(--sa-text-2xs);
|
|
377
383
|
padding: var(--sa-space-2) var(--sa-space-3);
|
|
378
384
|
}
|
|
379
|
-
.sa-admin-user[data-v-
|
|
385
|
+
.sa-admin-user[data-v-06c8fec8] {
|
|
380
386
|
display: flex;
|
|
381
387
|
align-items: center;
|
|
382
388
|
gap: var(--sa-space-3);
|
|
@@ -385,31 +391,31 @@
|
|
|
385
391
|
* end of a `nowrap` toolbar instead of being shortened. */
|
|
386
392
|
min-width: 0;
|
|
387
393
|
}
|
|
388
|
-
.sa-admin-user__avatar[data-v-
|
|
394
|
+
.sa-admin-user__avatar[data-v-06c8fec8] {
|
|
389
395
|
background: var(--sa-admin-user-avatar-bg, var(--sa-color-inverse-accent));
|
|
390
396
|
color: var(--sa-admin-user-avatar-fg, var(--sa-color-inverse-accent-fg));
|
|
391
397
|
}
|
|
392
|
-
.sa-admin-user__avatar[data-v-
|
|
393
|
-
.sa-admin-user .q-btn[data-v-
|
|
398
|
+
.sa-admin-user__avatar[data-v-06c8fec8],
|
|
399
|
+
.sa-admin-user .q-btn[data-v-06c8fec8] {
|
|
394
400
|
/* The two things in this group that are controls or fixed squares. A flex
|
|
395
401
|
* item shrinks from its own basis, so without this the avatar and the
|
|
396
402
|
* sign-out button donate width to a name they should be donating none to —
|
|
397
403
|
* the same shrink that squeezed the login mark to 0px at 320. */
|
|
398
404
|
flex: none;
|
|
399
405
|
}
|
|
400
|
-
.sa-admin-user__name[data-v-
|
|
406
|
+
.sa-admin-user__name[data-v-06c8fec8] {
|
|
401
407
|
line-height: 1.05;
|
|
402
408
|
min-width: 0;
|
|
403
409
|
}
|
|
404
410
|
/* Text is what shrinking is for; a control is not. Both lines therefore
|
|
405
411
|
* shorten rather than widen the group. */
|
|
406
|
-
.sa-admin-user__name > div[data-v-
|
|
412
|
+
.sa-admin-user__name > div[data-v-06c8fec8] {
|
|
407
413
|
max-width: 100%;
|
|
408
414
|
overflow: hidden;
|
|
409
415
|
text-overflow: ellipsis;
|
|
410
416
|
white-space: nowrap;
|
|
411
417
|
}
|
|
412
|
-
.sa-admin-user__email[data-v-
|
|
418
|
+
.sa-admin-user__email[data-v-06c8fec8] {
|
|
413
419
|
color: var(--sa-admin-user-email, var(--sa-color-inverse-accent));
|
|
414
420
|
}
|
|
415
421
|
|
|
@@ -445,13 +451,13 @@
|
|
|
445
451
|
* to it however long the selector gets. Same reason the active drawer item
|
|
446
452
|
* above carries one. */
|
|
447
453
|
@media (max-width: 1439.98px) {
|
|
448
|
-
.sa-admin-header[data-v-
|
|
449
|
-
.sa-admin-header[data-v-
|
|
454
|
+
.sa-admin-header[data-v-06c8fec8] .sa-locale-switcher .q-btn__content > .block,
|
|
455
|
+
.sa-admin-header[data-v-06c8fec8] .sa-theme-switcher .q-btn__content > .block {
|
|
450
456
|
display: none !important;
|
|
451
457
|
}
|
|
452
458
|
}
|
|
453
459
|
@media (max-width: 599.98px) {
|
|
454
|
-
.sa-admin-badge[data-v-
|
|
460
|
+
.sa-admin-badge[data-v-06c8fec8] {
|
|
455
461
|
display: none;
|
|
456
462
|
}
|
|
457
463
|
/* And the operator's own name and address, which at this width would be
|
|
@@ -460,29 +466,29 @@
|
|
|
460
466
|
* came to the page to read. The avatar keeps the identity present and the
|
|
461
467
|
* full text is one breakpoint away. The truncation above is what covers
|
|
462
468
|
* the band where the block is shown and space is still tight. */
|
|
463
|
-
.sa-admin-user__name[data-v-
|
|
469
|
+
.sa-admin-user__name[data-v-06c8fec8] {
|
|
464
470
|
display: none;
|
|
465
471
|
}
|
|
466
472
|
}
|
|
467
|
-
.sa-admin-drawer[data-v-
|
|
468
|
-
.sa-admin-drawer[data-v-
|
|
469
|
-
.sa-admin-drawer__stack[data-v-
|
|
473
|
+
.sa-admin-drawer[data-v-06c8fec8] .q-drawer,
|
|
474
|
+
.sa-admin-drawer[data-v-06c8fec8] .q-drawer__content,
|
|
475
|
+
.sa-admin-drawer__stack[data-v-06c8fec8] {
|
|
470
476
|
background: var(--sa-admin-drawer-bg, var(--sa-color-inverse-bg));
|
|
471
477
|
color: var(--sa-admin-drawer-fg, var(--sa-color-inverse-fg-muted));
|
|
472
478
|
}
|
|
473
|
-
.sa-admin-drawer__stack[data-v-
|
|
479
|
+
.sa-admin-drawer__stack[data-v-06c8fec8] {
|
|
474
480
|
display: flex;
|
|
475
481
|
flex-direction: column;
|
|
476
482
|
height: 100%;
|
|
477
483
|
}
|
|
478
|
-
.sa-admin-drawer__brand[data-v-
|
|
484
|
+
.sa-admin-drawer__brand[data-v-06c8fec8] {
|
|
479
485
|
display: flex;
|
|
480
486
|
align-items: center;
|
|
481
487
|
gap: var(--sa-space-4);
|
|
482
488
|
padding: var(--sa-space-5) var(--sa-space-5);
|
|
483
489
|
border-bottom: 1px solid var(--sa-color-inverse-border);
|
|
484
490
|
}
|
|
485
|
-
.sa-admin-drawer__logo[data-v-
|
|
491
|
+
.sa-admin-drawer__logo[data-v-06c8fec8] {
|
|
486
492
|
width: 36px;
|
|
487
493
|
height: 36px;
|
|
488
494
|
border-radius: var(--sa-radius-tile);
|
|
@@ -500,21 +506,21 @@
|
|
|
500
506
|
align-items: center;
|
|
501
507
|
justify-content: center;
|
|
502
508
|
}
|
|
503
|
-
.sa-admin-drawer__brand-name[data-v-
|
|
509
|
+
.sa-admin-drawer__brand-name[data-v-06c8fec8] {
|
|
504
510
|
font-weight: 800;
|
|
505
511
|
color: var(--sa-color-inverse-fg);
|
|
506
512
|
}
|
|
507
|
-
.sa-admin-drawer__brand-tag[data-v-
|
|
513
|
+
.sa-admin-drawer__brand-tag[data-v-06c8fec8] {
|
|
508
514
|
font-size: var(--sa-text-xs);
|
|
509
515
|
color: var(--sa-admin-drawer-brand-tag, var(--sa-color-inverse-accent));
|
|
510
516
|
text-transform: uppercase;
|
|
511
517
|
letter-spacing: var(--sa-tracking-wider);
|
|
512
518
|
}
|
|
513
|
-
.sa-admin-drawer__list[data-v-
|
|
519
|
+
.sa-admin-drawer__list[data-v-06c8fec8] {
|
|
514
520
|
flex: 1;
|
|
515
521
|
padding: var(--sa-space-2) var(--sa-space-2);
|
|
516
522
|
}
|
|
517
|
-
.sa-admin-drawer__section[data-v-
|
|
523
|
+
.sa-admin-drawer__section[data-v-06c8fec8] {
|
|
518
524
|
font-size: var(--sa-text-2xs);
|
|
519
525
|
text-transform: uppercase;
|
|
520
526
|
letter-spacing: var(--sa-tracking-wider);
|
|
@@ -522,7 +528,7 @@
|
|
|
522
528
|
padding: var(--sa-space-4) var(--sa-space-5) var(--sa-space-2);
|
|
523
529
|
font-weight: 600;
|
|
524
530
|
}
|
|
525
|
-
.sa-admin-drawer__list[data-v-
|
|
531
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .q-item {
|
|
526
532
|
color: var(--sa-admin-drawer-item-fg, var(--sa-color-inverse-fg-muted));
|
|
527
533
|
border-radius: var(--sa-radius-control);
|
|
528
534
|
margin: var(--sa-space-0) var(--sa-space-2);
|
|
@@ -531,21 +537,21 @@
|
|
|
531
537
|
font-size: var(--sa-text-md);
|
|
532
538
|
font-weight: 500;
|
|
533
539
|
}
|
|
534
|
-
.sa-admin-drawer__list[data-v-
|
|
540
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .q-item__section--avatar {
|
|
535
541
|
min-width: 28px;
|
|
536
542
|
padding-right: var(--sa-space-3);
|
|
537
543
|
}
|
|
538
|
-
.sa-admin-drawer__list[data-v-
|
|
544
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .q-item .q-icon {
|
|
539
545
|
color: var(--sa-color-inverse-fg-subtle);
|
|
540
546
|
}
|
|
541
|
-
.sa-admin-drawer__list[data-v-
|
|
547
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .q-item:hover {
|
|
542
548
|
background: var(--sa-admin-drawer-hover-bg, var(--sa-color-inverse-accent-surface));
|
|
543
549
|
color: var(--sa-admin-drawer-hover-fg, var(--sa-color-inverse-accent));
|
|
544
550
|
}
|
|
545
|
-
.sa-admin-drawer__list[data-v-
|
|
551
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .q-item:hover .q-icon {
|
|
546
552
|
color: var(--sa-admin-drawer-hover-fg, var(--sa-color-inverse-accent));
|
|
547
553
|
}
|
|
548
|
-
.sa-admin-drawer__list[data-v-
|
|
554
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .sa-admin-drawer__item--active {
|
|
549
555
|
background: var(
|
|
550
556
|
--sa-admin-drawer-active-bg,
|
|
551
557
|
var(--sa-color-inverse-accent-surface-strong)
|
|
@@ -553,16 +559,16 @@
|
|
|
553
559
|
color: var(--sa-admin-drawer-active-fg, var(--sa-color-inverse-accent)) !important;
|
|
554
560
|
font-weight: 600;
|
|
555
561
|
}
|
|
556
|
-
.sa-admin-drawer__list[data-v-
|
|
562
|
+
.sa-admin-drawer__list[data-v-06c8fec8] .sa-admin-drawer__item--active .q-icon {
|
|
557
563
|
color: var(--sa-admin-drawer-active-fg, var(--sa-color-inverse-accent));
|
|
558
564
|
}
|
|
559
|
-
.sa-admin-drawer__footer[data-v-
|
|
565
|
+
.sa-admin-drawer__footer[data-v-06c8fec8] {
|
|
560
566
|
padding: var(--sa-space-4) var(--sa-space-5);
|
|
561
567
|
border-top: 1px solid var(--sa-color-inverse-border);
|
|
562
568
|
font-size: var(--sa-text-xs);
|
|
563
569
|
color: var(--sa-color-inverse-fg-muted);
|
|
564
570
|
}
|
|
565
|
-
.sa-admin-drawer__doc[data-v-
|
|
571
|
+
.sa-admin-drawer__doc[data-v-06c8fec8] {
|
|
566
572
|
display: inline-flex;
|
|
567
573
|
align-items: center;
|
|
568
574
|
gap: var(--sa-space-2);
|
|
@@ -570,15 +576,15 @@
|
|
|
570
576
|
color: var(--sa-color-inverse-fg-muted);
|
|
571
577
|
text-decoration: none;
|
|
572
578
|
}
|
|
573
|
-
.sa-admin-drawer__doc[data-v-
|
|
579
|
+
.sa-admin-drawer__doc[data-v-06c8fec8]:hover {
|
|
574
580
|
color: var(--sa-admin-drawer-hover-fg, var(--sa-color-inverse-accent));
|
|
575
581
|
}
|
|
576
|
-
.sa-admin-content[data-v-
|
|
582
|
+
.sa-admin-content[data-v-06c8fec8] {
|
|
577
583
|
max-width: 1600px;
|
|
578
584
|
margin: 0 auto;
|
|
579
585
|
padding: var(--sa-space-5) var(--sa-space-7) var(--sa-space-8);
|
|
580
586
|
}
|
|
581
|
-
.sa-admin-content--fullbleed[data-v-
|
|
587
|
+
.sa-admin-content--fullbleed[data-v-06c8fec8] {
|
|
582
588
|
max-width: none;
|
|
583
589
|
padding: 0;
|
|
584
590
|
}
|
|
@@ -2405,6 +2411,50 @@ code[data-v-aab75c67] {
|
|
|
2405
2411
|
word-break: break-word;
|
|
2406
2412
|
}
|
|
2407
2413
|
|
|
2414
|
+
.kv[data-v-a465048d] {
|
|
2415
|
+
background: var(--sa-color-bg-sunken);
|
|
2416
|
+
border: 1px solid var(--sa-color-border);
|
|
2417
|
+
border-radius: var(--sa-radius-tile);
|
|
2418
|
+
padding: var(--sa-space-3) var(--sa-space-4);
|
|
2419
|
+
}
|
|
2420
|
+
.kv__label[data-v-a465048d] {
|
|
2421
|
+
color: var(--sa-color-fg-muted);
|
|
2422
|
+
font-size: var(--sa-text-xs);
|
|
2423
|
+
text-transform: uppercase;
|
|
2424
|
+
letter-spacing: var(--sa-tracking-wider);
|
|
2425
|
+
font-weight: 700;
|
|
2426
|
+
}
|
|
2427
|
+
.kv__value[data-v-a465048d] {
|
|
2428
|
+
font-size: var(--sa-text-lg);
|
|
2429
|
+
font-weight: 600;
|
|
2430
|
+
color: var(--sa-color-fg-heading);
|
|
2431
|
+
margin-top: var(--sa-space-2);
|
|
2432
|
+
}
|
|
2433
|
+
|
|
2434
|
+
.sa-maintenance__facts[data-v-87d6bb16] {
|
|
2435
|
+
display: grid;
|
|
2436
|
+
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
2437
|
+
gap: var(--sa-space-3);
|
|
2438
|
+
margin-top: var(--sa-space-3);
|
|
2439
|
+
}
|
|
2440
|
+
/* A message is one long word as often as not; the tile must not push the
|
|
2441
|
+
grid wider than the page. */
|
|
2442
|
+
.sa-maintenance__facts[data-v-87d6bb16] > * {
|
|
2443
|
+
min-width: 0;
|
|
2444
|
+
overflow-wrap: anywhere;
|
|
2445
|
+
}
|
|
2446
|
+
.sa-maintenance__actions[data-v-87d6bb16] {
|
|
2447
|
+
display: flex;
|
|
2448
|
+
flex-wrap: wrap;
|
|
2449
|
+
gap: var(--sa-space-2);
|
|
2450
|
+
margin-top: var(--sa-space-4);
|
|
2451
|
+
}
|
|
2452
|
+
.sa-maintenance__hint[data-v-87d6bb16] {
|
|
2453
|
+
margin: var(--sa-space-3) 0 0;
|
|
2454
|
+
color: var(--sa-color-fg-muted);
|
|
2455
|
+
font-size: var(--sa-text-sm);
|
|
2456
|
+
}
|
|
2457
|
+
|
|
2408
2458
|
.mc-promo[data-v-4df738db] {
|
|
2409
2459
|
display: flex;
|
|
2410
2460
|
flex-direction: column;
|
|
@@ -6713,26 +6763,6 @@ code[data-v-aab75c67] {
|
|
|
6713
6763
|
font-family: var(--sa-font-mono);
|
|
6714
6764
|
}
|
|
6715
6765
|
|
|
6716
|
-
.kv[data-v-a465048d] {
|
|
6717
|
-
background: var(--sa-color-bg-sunken);
|
|
6718
|
-
border: 1px solid var(--sa-color-border);
|
|
6719
|
-
border-radius: var(--sa-radius-tile);
|
|
6720
|
-
padding: var(--sa-space-3) var(--sa-space-4);
|
|
6721
|
-
}
|
|
6722
|
-
.kv__label[data-v-a465048d] {
|
|
6723
|
-
color: var(--sa-color-fg-muted);
|
|
6724
|
-
font-size: var(--sa-text-xs);
|
|
6725
|
-
text-transform: uppercase;
|
|
6726
|
-
letter-spacing: var(--sa-tracking-wider);
|
|
6727
|
-
font-weight: 700;
|
|
6728
|
-
}
|
|
6729
|
-
.kv__value[data-v-a465048d] {
|
|
6730
|
-
font-size: var(--sa-text-lg);
|
|
6731
|
-
font-weight: 600;
|
|
6732
|
-
color: var(--sa-color-fg-heading);
|
|
6733
|
-
margin-top: var(--sa-space-2);
|
|
6734
|
-
}
|
|
6735
|
-
|
|
6736
6766
|
.sa-settings__facts[data-v-e41dc72f] {
|
|
6737
6767
|
display: grid;
|
|
6738
6768
|
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
@@ -6791,7 +6821,7 @@ code[data-v-aab75c67] {
|
|
|
6791
6821
|
font-size: var(--sa-text-md);
|
|
6792
6822
|
}
|
|
6793
6823
|
|
|
6794
|
-
code[data-v-
|
|
6824
|
+
code[data-v-481c2843] {
|
|
6795
6825
|
background: var(--sa-color-bg-sunken);
|
|
6796
6826
|
padding: var(--sa-space-0) var(--sa-space-2);
|
|
6797
6827
|
border-radius: var(--sa-radius-badge);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a8 as SaMessages, H as HttpClient, l as KvStore, a5 as SaLocale, aI as SaNavMessages } from './catalog-Bcl-6zMY.cjs';
|
|
2
2
|
import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { a8 as SaMessages, H as HttpClient, l as KvStore, a5 as SaLocale, aI as SaNavMessages } from './catalog-Bcl-6zMY.js';
|
|
2
2
|
import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _saasicat_core from '@saasicat/core';
|
|
2
|
-
import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
|
|
2
|
+
import { MaintenanceOverview, MaintenanceWindowView, MaintenanceLockView, MaintenanceUnlockView, AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, AdminSubscriberAccount, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Minimal abstraction over `fetch`. Consumers may pass their own
|
|
@@ -222,6 +222,42 @@ declare function defineResource<const TOps extends ResourceOps>(key: string, ops
|
|
|
222
222
|
*/
|
|
223
223
|
declare function bindResource<TOps extends ResourceOps>(def: ResourceDef<TOps>, http: HttpClient, ctx: ResourceContext | (() => ResourceContext)): Bound<TOps>;
|
|
224
224
|
|
|
225
|
+
/** What an operator announces: both times as ISO strings with their zone. */
|
|
226
|
+
interface MaintenanceAnnouncementInput {
|
|
227
|
+
startsAt: string;
|
|
228
|
+
endsAt: string;
|
|
229
|
+
message?: string | null;
|
|
230
|
+
}
|
|
231
|
+
/** What an operator moves; what is left out stays, `message: null` takes it away. */
|
|
232
|
+
interface MaintenanceRevisionInput {
|
|
233
|
+
startsAt?: string;
|
|
234
|
+
endsAt?: string;
|
|
235
|
+
message?: string | null;
|
|
236
|
+
}
|
|
237
|
+
/** What an operator locks with; `windowId` is the window they are looking at. */
|
|
238
|
+
interface MaintenanceLockInput {
|
|
239
|
+
windowId?: string;
|
|
240
|
+
endsAt?: string;
|
|
241
|
+
message?: string | null;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Whether a body is the overview it claims to be. Read at the boundary rather
|
|
245
|
+
* than trusted: an older backend, a proxy's JSON error page or a stub answers
|
|
246
|
+
* 200 with something else, and a page that read `recent.length` off it took its
|
|
247
|
+
* route down instead of showing its error (`SC-UI-020`).
|
|
248
|
+
*/
|
|
249
|
+
declare function isMaintenanceOverview(value: unknown): value is MaintenanceOverview;
|
|
250
|
+
declare const maintenanceResource: ResourceDef<{
|
|
251
|
+
readonly overview: (http: HttpClient, ctx: ResourceContext) => Promise<MaintenanceOverview>;
|
|
252
|
+
readonly announce: (http: HttpClient, ctx: ResourceContext, input: MaintenanceAnnouncementInput) => Promise<MaintenanceWindowView>;
|
|
253
|
+
readonly reschedule: (http: HttpClient, ctx: ResourceContext, id: string, input: MaintenanceRevisionInput) => Promise<MaintenanceWindowView>;
|
|
254
|
+
readonly cancel: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<MaintenanceWindowView>;
|
|
255
|
+
readonly lock: (http: HttpClient, ctx: ResourceContext, input: MaintenanceLockInput, mfaCode?: string) => Promise<MaintenanceLockView>;
|
|
256
|
+
readonly unlock: (http: HttpClient, ctx: ResourceContext, input: {
|
|
257
|
+
windowId?: string;
|
|
258
|
+
}, mfaCode?: string) => Promise<MaintenanceUnlockView>;
|
|
259
|
+
}>;
|
|
260
|
+
|
|
225
261
|
/**
|
|
226
262
|
* One leaf that differs between two starts, as the server names it.
|
|
227
263
|
*
|
|
@@ -387,6 +423,11 @@ declare const tenantsResource: ResourceDef<{
|
|
|
387
423
|
*/
|
|
388
424
|
readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string, mfaCode?: string) => Promise<void>;
|
|
389
425
|
readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string, mfaCode?: string) => Promise<void>;
|
|
426
|
+
/**
|
|
427
|
+
* The charges of the tenant's subscriber, newest first. Served only where
|
|
428
|
+
* the manifest announces `charges.read`.
|
|
429
|
+
*/
|
|
430
|
+
readonly charges: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<AdminSubscriberAccount>;
|
|
390
431
|
}>;
|
|
391
432
|
|
|
392
433
|
/** What the promo list can be narrowed by, including its "all" state. */
|
|
@@ -684,6 +725,7 @@ declare const platformResources: {
|
|
|
684
725
|
readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminTenantDetail | null>;
|
|
685
726
|
readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string, mfaCode?: string) => Promise<void>;
|
|
686
727
|
readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string, mfaCode?: string) => Promise<void>;
|
|
728
|
+
readonly charges: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminSubscriberAccount>;
|
|
687
729
|
}>;
|
|
688
730
|
users: ResourceDef<{
|
|
689
731
|
readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_core.AdminUserListFilter) => Promise<_saasicat_core.AdminUserListRow[]>;
|
|
@@ -702,6 +744,16 @@ declare const platformResources: {
|
|
|
702
744
|
readonly read: (http: HttpClient, ctx: ResourceContext) => Promise<AppliedSettingsView>;
|
|
703
745
|
readonly acknowledgeChange: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<SettingsChangeView>;
|
|
704
746
|
}>;
|
|
747
|
+
maintenance: ResourceDef<{
|
|
748
|
+
readonly overview: (http: HttpClient, ctx: ResourceContext) => Promise<_saasicat_core.MaintenanceOverview>;
|
|
749
|
+
readonly announce: (http: HttpClient, ctx: ResourceContext, input: MaintenanceAnnouncementInput) => Promise<_saasicat_core.MaintenanceWindowView>;
|
|
750
|
+
readonly reschedule: (http: HttpClient, ctx: ResourceContext, id: string, input: MaintenanceRevisionInput) => Promise<_saasicat_core.MaintenanceWindowView>;
|
|
751
|
+
readonly cancel: (http: HttpClient, ctx: ResourceContext, id: string) => Promise<_saasicat_core.MaintenanceWindowView>;
|
|
752
|
+
readonly lock: (http: HttpClient, ctx: ResourceContext, input: MaintenanceLockInput, mfaCode?: string) => Promise<_saasicat_core.MaintenanceLockView>;
|
|
753
|
+
readonly unlock: (http: HttpClient, ctx: ResourceContext, input: {
|
|
754
|
+
windowId?: string;
|
|
755
|
+
}, mfaCode?: string) => Promise<_saasicat_core.MaintenanceUnlockView>;
|
|
756
|
+
}>;
|
|
705
757
|
pilots: ResourceDef<{
|
|
706
758
|
readonly list: (http: HttpClient, ctx: ResourceContext) => Promise<PilotRow[]>;
|
|
707
759
|
readonly reviewSoon: (http: HttpClient, ctx: ResourceContext) => Promise<PilotRow[]>;
|
|
@@ -1276,6 +1328,87 @@ declare const errorsMessages: Record<SaBuiltinLocale, {
|
|
|
1276
1328
|
unexpected: string;
|
|
1277
1329
|
}>;
|
|
1278
1330
|
|
|
1331
|
+
declare const maintenanceMessages: Record<SaBuiltinLocale, {
|
|
1332
|
+
title: string;
|
|
1333
|
+
subtitle: string;
|
|
1334
|
+
announce: string;
|
|
1335
|
+
lockNow: string;
|
|
1336
|
+
loadFailed: string;
|
|
1337
|
+
open: {
|
|
1338
|
+
title: string;
|
|
1339
|
+
none: string;
|
|
1340
|
+
noneHint: string;
|
|
1341
|
+
startsAt: string;
|
|
1342
|
+
endsAt: string;
|
|
1343
|
+
message: string;
|
|
1344
|
+
announcedBy: string;
|
|
1345
|
+
lockedAt: string;
|
|
1346
|
+
lockedBy: string;
|
|
1347
|
+
notAnnounced: string;
|
|
1348
|
+
lapsed: string;
|
|
1349
|
+
locked: string;
|
|
1350
|
+
overrun: string;
|
|
1351
|
+
takesEffect: string;
|
|
1352
|
+
lock: string;
|
|
1353
|
+
unlock: string;
|
|
1354
|
+
reschedule: string;
|
|
1355
|
+
cancel: string;
|
|
1356
|
+
};
|
|
1357
|
+
status: {
|
|
1358
|
+
announced: string;
|
|
1359
|
+
locked: string;
|
|
1360
|
+
ended: string;
|
|
1361
|
+
cancelled: string;
|
|
1362
|
+
};
|
|
1363
|
+
recent: {
|
|
1364
|
+
title: string;
|
|
1365
|
+
empty: string;
|
|
1366
|
+
status: string;
|
|
1367
|
+
startsAt: string;
|
|
1368
|
+
lockedAt: string;
|
|
1369
|
+
endedAt: string;
|
|
1370
|
+
by: string;
|
|
1371
|
+
};
|
|
1372
|
+
form: {
|
|
1373
|
+
announceTitle: string;
|
|
1374
|
+
rescheduleTitle: string;
|
|
1375
|
+
lockTitle: string;
|
|
1376
|
+
lockSubtitle: string;
|
|
1377
|
+
startsAt: string;
|
|
1378
|
+
endsAt: string;
|
|
1379
|
+
message: string;
|
|
1380
|
+
zone: string;
|
|
1381
|
+
submitAnnounce: string;
|
|
1382
|
+
submitSave: string;
|
|
1383
|
+
announced: string;
|
|
1384
|
+
rescheduled: string;
|
|
1385
|
+
};
|
|
1386
|
+
confirm: {
|
|
1387
|
+
lockTitle: string;
|
|
1388
|
+
lockMessage: string;
|
|
1389
|
+
lockConfirm: string;
|
|
1390
|
+
unlockTitle: string;
|
|
1391
|
+
unlockMessage: string;
|
|
1392
|
+
unlockConfirm: string;
|
|
1393
|
+
cancelTitle: string;
|
|
1394
|
+
cancelMessage: string;
|
|
1395
|
+
cancelConfirm: string;
|
|
1396
|
+
locked: string;
|
|
1397
|
+
alreadyLocked: string;
|
|
1398
|
+
unlocked: string;
|
|
1399
|
+
nothingLocked: string;
|
|
1400
|
+
cancelled: string;
|
|
1401
|
+
mfaLock: string;
|
|
1402
|
+
mfaUnlock: string;
|
|
1403
|
+
};
|
|
1404
|
+
banner: {
|
|
1405
|
+
locked: string;
|
|
1406
|
+
lockedUntil: string;
|
|
1407
|
+
overrun: string;
|
|
1408
|
+
open: string;
|
|
1409
|
+
};
|
|
1410
|
+
}>;
|
|
1411
|
+
|
|
1279
1412
|
declare const marketingMessages: Record<SaBuiltinLocale, {
|
|
1280
1413
|
topFeatures: string;
|
|
1281
1414
|
tabs: {
|
|
@@ -2247,6 +2380,32 @@ declare const tenantsMessages: Record<SaBuiltinLocale, {
|
|
|
2247
2380
|
title: string;
|
|
2248
2381
|
columnEndsAt: string;
|
|
2249
2382
|
};
|
|
2383
|
+
charges: {
|
|
2384
|
+
title: string;
|
|
2385
|
+
holder: string;
|
|
2386
|
+
noHolder: string;
|
|
2387
|
+
empty: string;
|
|
2388
|
+
loadFailed: string;
|
|
2389
|
+
columnDue: string;
|
|
2390
|
+
columnPeriod: string;
|
|
2391
|
+
columnItem: string;
|
|
2392
|
+
columnKind: string;
|
|
2393
|
+
columnOrigin: string;
|
|
2394
|
+
columnAmount: string;
|
|
2395
|
+
source: {
|
|
2396
|
+
plan: string;
|
|
2397
|
+
bundle: string;
|
|
2398
|
+
discount: string;
|
|
2399
|
+
};
|
|
2400
|
+
origin: {
|
|
2401
|
+
activation: string;
|
|
2402
|
+
renewal: string;
|
|
2403
|
+
planChange: string;
|
|
2404
|
+
bundleBooking: string;
|
|
2405
|
+
credit: string;
|
|
2406
|
+
correction: string;
|
|
2407
|
+
};
|
|
2408
|
+
};
|
|
2250
2409
|
draft: {
|
|
2251
2410
|
planModules: string;
|
|
2252
2411
|
};
|
|
@@ -2311,6 +2470,7 @@ type SaMessages = {
|
|
|
2311
2470
|
readonly pilots: (typeof pilotsMessages)['de'];
|
|
2312
2471
|
readonly email: (typeof emailMessages)['de'];
|
|
2313
2472
|
readonly settings: (typeof settingsMessages)['de'];
|
|
2473
|
+
readonly maintenance: (typeof maintenanceMessages)['de'];
|
|
2314
2474
|
};
|
|
2315
2475
|
/** Shape of app-side string overrides (deep partial of the catalog). */
|
|
2316
2476
|
type SaMessagesOverrides = PartialMessages<SaMessages>;
|
|
@@ -2425,4 +2585,4 @@ interface SaCatalog {
|
|
|
2425
2585
|
*/
|
|
2426
2586
|
declare function createSaCatalog(options?: SaCatalogOptions): SaCatalog;
|
|
2427
2587
|
|
|
2428
|
-
export {
|
|
2588
|
+
export { SA_LOCALES as $, ActionDefNotInManifestError as A, type Bound as B, type PilotEditResult as C, DEFAULT_SA_LOCALE as D, type EmailHistoryDetail as E, type PilotRow as F, type PlatformEmailProvider as G, type HttpClient as H, type PlatformEmailTestInput as I, type PlatformEmailTestResult as J, type KpiReading as K, LIST_FIRST_PAGE as L, type MaintenanceAnnouncementInput as M, type PlatformEmailWriteInput as N, type PlatformResources as O, type PartialMessages as P, type PromoCodesFilter as Q, type PromoDetail as R, type PublishBundleVersionOptions as S, type PublishPlanVersionOptions as T, type ResolvedAction as U, type ResourceContext as V, type ResourceDef as W, type ResourceListPage as X, type ResourceOp as Y, type ResourceOps as Z, SA_INTL_LOCALES as _, type ActionHandler as a, SA_LOCALE_LABELS as a0, SA_MESSAGES as a1, type SaBuiltinLocale as a2, type SaCatalog as a3, type SaCatalogOptions as a4, type SaLocale as a5, type SaLocaleDefinition as a6, type SaLocaleOption as a7, type SaMessages as a8, type SaMessagesOverrides as a9, planVersionsResource as aA, plansResource as aB, platformResources as aC, promoCodesResource as aD, readListPage as aE, resolveMessages as aF, settingsResource as aG, tenantsResource as aH, type SaNavMessages as aI, type SettingsChangeView as aa, type SettingsDifferenceView as ab, type TenantsListFilter as ac, type TranslationOf as ad, auditResource as ae, bindResource as af, bundleVersionsResource as ag, bundlesResource as ah, clampListPage as ai, clampListPageSize as aj, createSaCatalog as ak, dashboardResource as al, defaultHttpClient as am, defaultKvStore as an, defineListOp as ao, defineMessages as ap, defineResource as aq, discoveryResource as ar, filterQueryString as as, isMaintenanceOverview as at, isSaBuiltinLocale as au, isSentInQuery as av, listUrl as aw, maintenanceResource as ax, marketingResource as ay, mergeMessages as az, ActionRegistry as b, type AppliedSettingsView as c, type AuditListFilter as d, type DiscoveryRead as e, type EmailHistoryFilter as f, type EmailHistoryListResult as g, type EmailHistoryResendResult as h, type EmailHistoryRow as i, type EmailHistoryStatus as j, type HttpResponse as k, type KvStore as l, LIST_PAGE_SIZE_DEFAULT as m, LIST_PAGE_SIZE_MAX as n, LIST_PAGINATION_PARAMS as o, type ListFilterOf as p, type ListOp as q, type ListQuery as r, type MaintenanceLockInput as s, type MaintenanceRevisionInput as t, type MarketingProjectionsFilter as u, type MessageTree as v, MissingHandlerError as w, type PilotCreatePayload as x, type PilotCreateResult as y, type PilotEditPayload as z };
|