@asturiu/v0-sdk 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/LICENSE +202 -0
- package/NOTICE +5 -0
- package/README.md +82 -2
- package/contract/assertion-vectors.json +90 -0
- package/contract/schemas/branding.schema.json +46 -0
- package/contract/schemas/definitions.schema.json +376 -0
- package/contract/schemas/portal.schema.json +56 -0
- package/contract/tenant-api-routes.json +165 -0
- package/dist/branding.d.ts +131 -0
- package/dist/branding.d.ts.map +1 -0
- package/dist/branding.js +206 -0
- package/dist/branding.js.map +1 -0
- package/dist/changesets.d.ts +58 -0
- package/dist/changesets.d.ts.map +1 -0
- package/dist/changesets.js +18 -0
- package/dist/changesets.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +12 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/changesets.d.ts +14 -0
- package/dist/cli/changesets.d.ts.map +1 -0
- package/dist/cli/changesets.js +252 -0
- package/dist/cli/changesets.js.map +1 -0
- package/dist/cli/cli.d.ts +37 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +415 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/context.d.ts +147 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +258 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/engine.d.ts +59 -0
- package/dist/cli/engine.d.ts.map +1 -0
- package/dist/cli/engine.js +85 -0
- package/dist/cli/engine.js.map +1 -0
- package/dist/cli/feedback.d.ts +40 -0
- package/dist/cli/feedback.d.ts.map +1 -0
- package/dist/cli/feedback.js +420 -0
- package/dist/cli/feedback.js.map +1 -0
- package/dist/cli/files.d.ts +83 -0
- package/dist/cli/files.d.ts.map +1 -0
- package/dist/cli/files.js +389 -0
- package/dist/cli/files.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/overview.d.ts +6 -0
- package/dist/cli/overview.d.ts.map +1 -0
- package/dist/cli/overview.js +379 -0
- package/dist/cli/overview.js.map +1 -0
- package/dist/cli/parts.d.ts +5 -0
- package/dist/cli/parts.d.ts.map +1 -0
- package/dist/cli/parts.js +414 -0
- package/dist/cli/parts.js.map +1 -0
- package/dist/cli/sources.d.ts +37 -0
- package/dist/cli/sources.d.ts.map +1 -0
- package/dist/cli/sources.js +91 -0
- package/dist/cli/sources.js.map +1 -0
- package/dist/cli/terminal.d.ts +135 -0
- package/dist/cli/terminal.d.ts.map +1 -0
- package/dist/cli/terminal.js +353 -0
- package/dist/cli/terminal.js.map +1 -0
- package/dist/cli/ui-page.d.ts +8 -0
- package/dist/cli/ui-page.d.ts.map +1 -0
- package/dist/cli/ui-page.js +216 -0
- package/dist/cli/ui-page.js.map +1 -0
- package/dist/cli/ui.d.ts +54 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +251 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/client.d.ts +88 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +165 -0
- package/dist/client.js.map +1 -0
- package/dist/contacts.d.ts +43 -0
- package/dist/contacts.d.ts.map +1 -0
- package/dist/contacts.js +46 -0
- package/dist/contacts.js.map +1 -0
- package/dist/definition-set.d.ts +731 -0
- package/dist/definition-set.d.ts.map +1 -0
- package/dist/definition-set.js +659 -0
- package/dist/definition-set.js.map +1 -0
- package/dist/definitions.d.ts +42 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +154 -0
- package/dist/definitions.js.map +1 -0
- package/dist/enrolment.d.ts +9 -0
- package/dist/enrolment.d.ts.map +1 -0
- package/dist/enrolment.js +8 -0
- package/dist/enrolment.js.map +1 -0
- package/dist/fill.d.ts +73 -0
- package/dist/fill.d.ts.map +1 -0
- package/dist/fill.js +46 -0
- package/dist/fill.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/notifications.d.ts +33 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +36 -0
- package/dist/notifications.js.map +1 -0
- package/dist/oidc.d.ts +122 -0
- package/dist/oidc.d.ts.map +1 -0
- package/dist/oidc.js +150 -0
- package/dist/oidc.js.map +1 -0
- package/dist/overlay.d.ts +109 -0
- package/dist/overlay.d.ts.map +1 -0
- package/dist/overlay.js +58 -0
- package/dist/overlay.js.map +1 -0
- package/dist/passes.d.ts +95 -0
- package/dist/passes.d.ts.map +1 -0
- package/dist/passes.js +140 -0
- package/dist/passes.js.map +1 -0
- package/dist/portal-options.d.ts +65 -0
- package/dist/portal-options.d.ts.map +1 -0
- package/dist/portal-options.js +120 -0
- package/dist/portal-options.js.map +1 -0
- package/dist/reads.d.ts +41 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +44 -0
- package/dist/reads.js.map +1 -0
- package/dist/recovery-words.d.ts +8 -0
- package/dist/recovery-words.d.ts.map +1 -0
- package/dist/recovery-words.js +136 -0
- package/dist/recovery-words.js.map +1 -0
- package/dist/recovery.d.ts +198 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +112 -0
- package/dist/recovery.js.map +1 -0
- package/dist/reveal.d.ts +35 -0
- package/dist/reveal.d.ts.map +1 -0
- package/dist/reveal.js +66 -0
- package/dist/reveal.js.map +1 -0
- package/dist/seal.d.ts +15 -0
- package/dist/seal.d.ts.map +1 -0
- package/dist/seal.js +0 -0
- package/dist/seal.js.map +1 -0
- package/dist/session.d.ts +66 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +61 -0
- package/dist/session.js.map +1 -0
- package/dist/signing-in-mark.d.ts +14 -0
- package/dist/signing-in-mark.d.ts.map +1 -0
- package/dist/signing-in-mark.js +24 -0
- package/dist/signing-in-mark.js.map +1 -0
- package/dist/signing-in.d.ts +22 -0
- package/dist/signing-in.d.ts.map +1 -0
- package/dist/signing-in.js +203 -0
- package/dist/signing-in.js.map +1 -0
- package/dist/tags.d.ts +96 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +88 -0
- package/dist/tags.js.map +1 -0
- package/dist/tenant-subscription.d.ts +47 -0
- package/dist/tenant-subscription.d.ts.map +1 -0
- package/dist/tenant-subscription.js +7 -0
- package/dist/tenant-subscription.js.map +1 -0
- package/dist/testing/index.d.ts +125 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +320 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/theme.d.ts +237 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +504 -0
- package/dist/theme.js.map +1 -0
- package/dist/tickets.d.ts +152 -0
- package/dist/tickets.d.ts.map +1 -0
- package/dist/tickets.js +65 -0
- package/dist/tickets.js.map +1 -0
- package/dist/tiers.d.ts +168 -0
- package/dist/tiers.d.ts.map +1 -0
- package/dist/tiers.js +341 -0
- package/dist/tiers.js.map +1 -0
- package/dist/types.d.ts +885 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/urlid.d.ts +50 -0
- package/dist/urlid.d.ts.map +1 -0
- package/dist/urlid.js +78 -0
- package/dist/urlid.js.map +1 -0
- package/dist/version.d.ts +15 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +15 -0
- package/dist/version.js.map +1 -0
- package/make/asturiu.mk +43 -0
- package/package.json +63 -4
- package/src/branding.ts +221 -0
- package/src/changesets.ts +61 -0
- package/src/cli/bin.ts +12 -0
- package/src/cli/changesets.ts +233 -0
- package/src/cli/cli.ts +425 -0
- package/src/cli/context.ts +299 -0
- package/src/cli/engine.ts +112 -0
- package/src/cli/feedback.ts +406 -0
- package/src/cli/files.ts +371 -0
- package/src/cli/index.ts +7 -0
- package/src/cli/overview.ts +343 -0
- package/src/cli/parts.ts +371 -0
- package/src/cli/sources.ts +111 -0
- package/src/cli/terminal.ts +384 -0
- package/src/cli/ui-page.ts +215 -0
- package/src/cli/ui.ts +266 -0
- package/src/client.ts +202 -0
- package/src/contacts.ts +61 -0
- package/src/definition-set.ts +965 -0
- package/src/definitions.ts +156 -0
- package/src/enrolment.ts +10 -0
- package/src/fill.ts +83 -0
- package/src/index.ts +38 -0
- package/src/notifications.ts +55 -0
- package/src/oidc.ts +199 -0
- package/src/overlay.ts +137 -0
- package/src/passes.ts +168 -0
- package/src/portal-options.ts +125 -0
- package/src/reads.ts +71 -0
- package/src/recovery-words.ts +137 -0
- package/src/recovery.ts +269 -0
- package/src/reveal.ts +72 -0
- package/src/seal.ts +0 -0
- package/src/session.ts +93 -0
- package/src/signing-in-mark.ts +23 -0
- package/src/signing-in.ts +213 -0
- package/src/tags.ts +146 -0
- package/src/tenant-subscription.ts +44 -0
- package/src/testing/index.ts +337 -0
- package/src/theme.ts +628 -0
- package/src/tickets.ts +195 -0
- package/src/tiers.ts +397 -0
- package/src/types.ts +847 -0
- package/src/urlid.ts +77 -0
- package/src/version.ts +15 -0
- package/templates/asturiu/branding.json +4 -0
- package/templates/asturiu/definitions.json +23 -0
- package/templates/asturiu/portal.json +16 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The platform's mark as outlines, in the pixels of the 1015 × 967 brand
|
|
3
|
+
* image: the arch (gold head and arms, teal towards the left drop), the stem
|
|
4
|
+
* (teal head and drop) and the gloss highlights. Generated by
|
|
5
|
+
* `scripts/trace-mark.mjs` — regenerate it, never edit it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const MARK: {
|
|
8
|
+
readonly width: 1015;
|
|
9
|
+
readonly height: 967;
|
|
10
|
+
readonly arch: "M499 1C504 1 519 0 529 1C539 3 550 6 559 10C568 14 577 20 584 26C591 32 597 40 602 47C606 54 610 61 612 68C615 75 617 83 619 90C620 97 621 97 621 110C621 123 619 156 619 170C620 184 622 185 623 192C625 199 627 205 630 212C633 220 637 229 642 238C647 247 652 256 659 265C666 275 675 286 683 295C691 305 697 311 709 322C720 333 742 351 754 360C766 370 773 373 782 379C791 384 798 388 808 392C817 396 823 400 840 405C857 409 892 415 909 419C926 424 932 428 942 434C953 440 963 448 971 456C979 463 986 472 992 481C998 490 1002 500 1006 510C1009 519 1012 527 1013 537C1014 546 1014 557 1013 567C1012 576 1010 584 1007 592C1004 600 1000 608 995 615C989 622 982 630 975 636C967 642 960 646 952 649C944 653 935 655 927 656C918 657 910 657 901 656C892 655 881 652 872 648C863 645 856 642 849 636C842 631 834 624 828 618C821 611 816 604 811 597C807 590 808 597 801 578C793 559 776 505 767 483C759 461 758 461 750 445C741 429 727 405 716 388C706 371 699 361 686 344C672 326 651 299 636 284C621 268 610 258 597 249C585 240 571 233 561 229C551 224 544 222 536 221C528 219 522 218 515 218C508 217 501 218 494 219C487 220 479 222 472 224C465 226 459 229 452 232C446 235 443 236 433 243C423 251 405 265 391 279C377 292 364 308 351 323C338 339 323 357 313 372C303 386 299 391 289 409C279 426 267 448 255 476C244 504 227 554 218 575C208 597 205 596 198 605C192 614 183 621 176 627C169 634 162 638 155 641C147 645 138 649 131 651C123 654 118 655 111 655C104 656 95 656 89 655C82 654 76 653 69 651C62 648 56 645 49 641C43 637 36 632 31 627C26 621 22 618 18 610C13 602 7 587 4 579C1 570 1 566 1 560C0 554 -1 551 1 541C2 532 5 515 10 503C15 491 24 478 30 469C36 461 39 459 44 454C50 449 53 446 61 441C69 436 82 428 92 424C102 420 104 419 121 414C137 410 172 405 192 399C212 393 226 387 242 378C258 369 274 358 289 346C303 335 317 321 328 311C339 300 348 290 355 282C363 273 368 266 373 259C379 251 384 244 388 235C392 227 397 220 400 209C403 199 407 192 408 174C409 156 405 115 405 99C405 83 408 85 410 78C413 70 416 62 420 55C424 47 430 40 435 34C441 28 446 23 453 19C460 14 469 10 476 7C484 4 494 2 498 1C501 0 493 1 499 1Z";
|
|
11
|
+
readonly stem: "M501 336C506 336 522 335 531 337C541 339 552 345 559 349C566 352 567 354 571 358C575 361 577 363 581 369C585 375 592 387 595 396C598 404 599 412 598 421C598 430 595 441 593 448C590 455 591 454 585 464C578 474 562 496 555 509C548 521 546 529 543 540C540 552 539 565 539 575C538 586 538 593 540 604C541 614 543 627 546 637C549 648 554 658 559 668C563 677 566 682 575 694C584 705 602 726 611 739C620 752 623 760 628 770C633 781 636 792 639 801C641 810 642 818 642 826C643 834 642 842 641 850C640 857 639 864 637 871C634 878 632 886 628 893C624 901 619 908 613 915C608 922 602 928 596 933C590 939 584 943 577 947C571 951 563 954 556 957C548 960 541 962 532 964C524 965 512 966 503 966C494 965 487 964 479 962C471 960 462 957 454 953C445 948 436 942 429 936C421 930 416 924 410 917C405 910 399 903 395 894C391 886 387 877 385 868C382 859 380 850 379 839C379 828 379 816 381 804C383 793 387 780 392 769C397 758 401 750 410 737C420 724 439 702 448 690C457 679 458 677 462 669C467 660 472 650 475 640C478 629 481 619 482 608C484 596 485 584 484 571C483 559 481 545 478 534C475 523 473 517 467 506C460 494 446 475 440 465C434 456 434 455 432 449C430 442 427 434 427 426C426 418 427 408 429 399C431 391 435 383 439 376C444 369 449 363 455 358C461 352 471 346 478 343C486 339 496 337 500 336C503 335 495 336 501 336Z";
|
|
12
|
+
readonly gloss: readonly ["M492 14C493 14 495 14 497 14C498 14 499 14 500 16C500 17 501 20 500 22C500 23 502 23 499 25C497 26 491 30 486 32C481 34 473 38 469 39C465 39 464 38 463 38C461 37 460 35 459 34C458 33 458 33 459 32C459 31 460 29 461 28C462 26 463 25 465 24C468 22 471 20 475 19C479 17 488 15 491 14C493 13 490 14 492 14Z", "M451 43C451 43 453 42 455 43C456 43 458 45 459 46C460 48 461 49 461 50C461 52 463 50 460 54C458 58 449 67 445 74C441 81 436 91 434 95C431 99 430 98 429 98C428 99 426 99 425 98C424 98 424 97 423 96C423 94 422 92 422 90C422 88 420 92 423 85C427 78 439 54 443 47C448 40 449 44 450 43C451 43 450 43 451 43Z", "M599 80C599 80 601 80 602 82C603 84 604 85 605 92C606 98 607 117 607 122C607 127 606 123 606 123C605 122 605 127 604 120C603 113 600 87 599 80C598 73 598 79 599 80Z", "M421 161C421 161 422 160 423 162C423 163 425 164 424 169C424 174 422 185 419 194C417 202 412 212 409 219C406 227 402 232 399 236C395 241 389 248 389 246C389 245 397 235 400 228C403 222 407 215 409 208C412 201 414 195 416 187C417 179 420 166 421 162C421 158 421 162 421 161Z", "M305 343C305 343 306 343 306 344C306 344 308 342 304 346C301 349 291 359 284 366C277 372 265 382 260 386C256 390 257 388 256 389C254 389 255 387 253 388C251 388 246 389 244 390C243 391 245 391 243 393C240 394 234 396 231 398C228 399 229 401 227 401C225 402 217 401 218 400C218 399 224 399 230 395C236 392 243 387 254 380C266 373 289 357 297 351C305 345 303 345 304 344C305 342 304 343 305 343Z", "M810 411C810 411 811 410 812 410C813 410 812 410 817 411C822 413 832 418 842 421C853 424 872 428 879 430C886 433 882 432 883 433C884 435 885 438 885 439C885 441 884 442 882 443C881 443 883 444 876 443C869 441 849 436 841 434C833 431 833 431 829 429C825 427 818 423 816 421C813 419 814 419 813 418C812 416 810 413 810 412C809 411 810 412 810 411Z", "M76 450C76 450 78 450 79 450C80 450 81 450 81 451C82 452 82 454 82 455C82 456 84 456 81 459C79 461 70 466 66 470C61 474 58 478 54 482C51 486 47 491 44 497C41 502 37 510 35 514C33 518 32 518 31 519C30 520 30 519 29 519C28 519 27 519 27 518C26 516 25 514 26 510C26 506 29 500 31 496C33 491 34 490 37 485C41 480 48 471 53 466C58 461 62 458 66 456C70 453 73 451 75 450C76 449 75 450 76 450Z", "M962 473C962 473 963 473 964 473C965 474 966 473 969 477C972 480 979 489 982 495C985 500 987 506 988 509C989 511 988 511 988 512C988 512 987 513 987 513C986 513 984 514 983 514C982 514 984 518 980 513C977 508 965 490 962 485C958 479 959 482 959 480C959 478 961 475 961 473C961 472 961 473 962 473Z", "M435 732C436 732 437 732 436 734C436 735 437 734 432 742C427 750 412 776 408 783C403 789 406 782 407 781C407 780 406 779 408 775C409 771 415 759 417 755C420 750 419 751 422 748C425 744 433 735 435 732C437 730 435 732 435 732Z"];
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=signing-in-mark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-in-mark.d.ts","sourceRoot":"","sources":["../src/signing-in-mark.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;CAgBP,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The platform's mark as outlines, in the pixels of the 1015 × 967 brand
|
|
3
|
+
* image: the arch (gold head and arms, teal towards the left drop), the stem
|
|
4
|
+
* (teal head and drop) and the gloss highlights. Generated by
|
|
5
|
+
* `scripts/trace-mark.mjs` — regenerate it, never edit it.
|
|
6
|
+
*/
|
|
7
|
+
export const MARK = {
|
|
8
|
+
width: 1015,
|
|
9
|
+
height: 967,
|
|
10
|
+
arch: "M499 1C504 1 519 0 529 1C539 3 550 6 559 10C568 14 577 20 584 26C591 32 597 40 602 47C606 54 610 61 612 68C615 75 617 83 619 90C620 97 621 97 621 110C621 123 619 156 619 170C620 184 622 185 623 192C625 199 627 205 630 212C633 220 637 229 642 238C647 247 652 256 659 265C666 275 675 286 683 295C691 305 697 311 709 322C720 333 742 351 754 360C766 370 773 373 782 379C791 384 798 388 808 392C817 396 823 400 840 405C857 409 892 415 909 419C926 424 932 428 942 434C953 440 963 448 971 456C979 463 986 472 992 481C998 490 1002 500 1006 510C1009 519 1012 527 1013 537C1014 546 1014 557 1013 567C1012 576 1010 584 1007 592C1004 600 1000 608 995 615C989 622 982 630 975 636C967 642 960 646 952 649C944 653 935 655 927 656C918 657 910 657 901 656C892 655 881 652 872 648C863 645 856 642 849 636C842 631 834 624 828 618C821 611 816 604 811 597C807 590 808 597 801 578C793 559 776 505 767 483C759 461 758 461 750 445C741 429 727 405 716 388C706 371 699 361 686 344C672 326 651 299 636 284C621 268 610 258 597 249C585 240 571 233 561 229C551 224 544 222 536 221C528 219 522 218 515 218C508 217 501 218 494 219C487 220 479 222 472 224C465 226 459 229 452 232C446 235 443 236 433 243C423 251 405 265 391 279C377 292 364 308 351 323C338 339 323 357 313 372C303 386 299 391 289 409C279 426 267 448 255 476C244 504 227 554 218 575C208 597 205 596 198 605C192 614 183 621 176 627C169 634 162 638 155 641C147 645 138 649 131 651C123 654 118 655 111 655C104 656 95 656 89 655C82 654 76 653 69 651C62 648 56 645 49 641C43 637 36 632 31 627C26 621 22 618 18 610C13 602 7 587 4 579C1 570 1 566 1 560C0 554 -1 551 1 541C2 532 5 515 10 503C15 491 24 478 30 469C36 461 39 459 44 454C50 449 53 446 61 441C69 436 82 428 92 424C102 420 104 419 121 414C137 410 172 405 192 399C212 393 226 387 242 378C258 369 274 358 289 346C303 335 317 321 328 311C339 300 348 290 355 282C363 273 368 266 373 259C379 251 384 244 388 235C392 227 397 220 400 209C403 199 407 192 408 174C409 156 405 115 405 99C405 83 408 85 410 78C413 70 416 62 420 55C424 47 430 40 435 34C441 28 446 23 453 19C460 14 469 10 476 7C484 4 494 2 498 1C501 0 493 1 499 1Z",
|
|
11
|
+
stem: "M501 336C506 336 522 335 531 337C541 339 552 345 559 349C566 352 567 354 571 358C575 361 577 363 581 369C585 375 592 387 595 396C598 404 599 412 598 421C598 430 595 441 593 448C590 455 591 454 585 464C578 474 562 496 555 509C548 521 546 529 543 540C540 552 539 565 539 575C538 586 538 593 540 604C541 614 543 627 546 637C549 648 554 658 559 668C563 677 566 682 575 694C584 705 602 726 611 739C620 752 623 760 628 770C633 781 636 792 639 801C641 810 642 818 642 826C643 834 642 842 641 850C640 857 639 864 637 871C634 878 632 886 628 893C624 901 619 908 613 915C608 922 602 928 596 933C590 939 584 943 577 947C571 951 563 954 556 957C548 960 541 962 532 964C524 965 512 966 503 966C494 965 487 964 479 962C471 960 462 957 454 953C445 948 436 942 429 936C421 930 416 924 410 917C405 910 399 903 395 894C391 886 387 877 385 868C382 859 380 850 379 839C379 828 379 816 381 804C383 793 387 780 392 769C397 758 401 750 410 737C420 724 439 702 448 690C457 679 458 677 462 669C467 660 472 650 475 640C478 629 481 619 482 608C484 596 485 584 484 571C483 559 481 545 478 534C475 523 473 517 467 506C460 494 446 475 440 465C434 456 434 455 432 449C430 442 427 434 427 426C426 418 427 408 429 399C431 391 435 383 439 376C444 369 449 363 455 358C461 352 471 346 478 343C486 339 496 337 500 336C503 335 495 336 501 336Z",
|
|
12
|
+
gloss: [
|
|
13
|
+
"M492 14C493 14 495 14 497 14C498 14 499 14 500 16C500 17 501 20 500 22C500 23 502 23 499 25C497 26 491 30 486 32C481 34 473 38 469 39C465 39 464 38 463 38C461 37 460 35 459 34C458 33 458 33 459 32C459 31 460 29 461 28C462 26 463 25 465 24C468 22 471 20 475 19C479 17 488 15 491 14C493 13 490 14 492 14Z",
|
|
14
|
+
"M451 43C451 43 453 42 455 43C456 43 458 45 459 46C460 48 461 49 461 50C461 52 463 50 460 54C458 58 449 67 445 74C441 81 436 91 434 95C431 99 430 98 429 98C428 99 426 99 425 98C424 98 424 97 423 96C423 94 422 92 422 90C422 88 420 92 423 85C427 78 439 54 443 47C448 40 449 44 450 43C451 43 450 43 451 43Z",
|
|
15
|
+
"M599 80C599 80 601 80 602 82C603 84 604 85 605 92C606 98 607 117 607 122C607 127 606 123 606 123C605 122 605 127 604 120C603 113 600 87 599 80C598 73 598 79 599 80Z",
|
|
16
|
+
"M421 161C421 161 422 160 423 162C423 163 425 164 424 169C424 174 422 185 419 194C417 202 412 212 409 219C406 227 402 232 399 236C395 241 389 248 389 246C389 245 397 235 400 228C403 222 407 215 409 208C412 201 414 195 416 187C417 179 420 166 421 162C421 158 421 162 421 161Z",
|
|
17
|
+
"M305 343C305 343 306 343 306 344C306 344 308 342 304 346C301 349 291 359 284 366C277 372 265 382 260 386C256 390 257 388 256 389C254 389 255 387 253 388C251 388 246 389 244 390C243 391 245 391 243 393C240 394 234 396 231 398C228 399 229 401 227 401C225 402 217 401 218 400C218 399 224 399 230 395C236 392 243 387 254 380C266 373 289 357 297 351C305 345 303 345 304 344C305 342 304 343 305 343Z",
|
|
18
|
+
"M810 411C810 411 811 410 812 410C813 410 812 410 817 411C822 413 832 418 842 421C853 424 872 428 879 430C886 433 882 432 883 433C884 435 885 438 885 439C885 441 884 442 882 443C881 443 883 444 876 443C869 441 849 436 841 434C833 431 833 431 829 429C825 427 818 423 816 421C813 419 814 419 813 418C812 416 810 413 810 412C809 411 810 412 810 411Z",
|
|
19
|
+
"M76 450C76 450 78 450 79 450C80 450 81 450 81 451C82 452 82 454 82 455C82 456 84 456 81 459C79 461 70 466 66 470C61 474 58 478 54 482C51 486 47 491 44 497C41 502 37 510 35 514C33 518 32 518 31 519C30 520 30 519 29 519C28 519 27 519 27 518C26 516 25 514 26 510C26 506 29 500 31 496C33 491 34 490 37 485C41 480 48 471 53 466C58 461 62 458 66 456C70 453 73 451 75 450C76 449 75 450 76 450Z",
|
|
20
|
+
"M962 473C962 473 963 473 964 473C965 474 966 473 969 477C972 480 979 489 982 495C985 500 987 506 988 509C989 511 988 511 988 512C988 512 987 513 987 513C986 513 984 514 983 514C982 514 984 518 980 513C977 508 965 490 962 485C958 479 959 482 959 480C959 478 961 475 961 473C961 472 961 473 962 473Z",
|
|
21
|
+
"M435 732C436 732 437 732 436 734C436 735 437 734 432 742C427 750 412 776 408 783C403 789 406 782 407 781C407 780 406 779 408 775C409 771 415 759 417 755C420 750 419 751 422 748C425 744 433 735 435 732C437 730 435 732 435 732Z",
|
|
22
|
+
],
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=signing-in-mark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-in-mark.js","sourceRoot":"","sources":["../src/signing-in-mark.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,yjEAAyjE;IAC/jE,IAAI,EAAE,2xCAA2xC;IACjyC,KAAK,EAAE;QACL,gTAAgT;QAChT,gTAAgT;QAChT,sKAAsK;QACtK,mRAAmR;QACnR,2YAA2Y;QAC3Y,2VAA2V;QAC3V,oYAAoY;QACpY,2SAA2S;QAC3S,mOAAmO;KACpO;CACO,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where in its loop the animation starts, as `animation-delay`: the wall
|
|
3
|
+
* clock's position in the cycle. The portal's screen and the callback's page
|
|
4
|
+
* both start there, so the mark does not jump back at the hand-over.
|
|
5
|
+
*/
|
|
6
|
+
export declare function signingInPhase(now?: number): string;
|
|
7
|
+
/**
|
|
8
|
+
* What goes inside the screen's `.signing-in` element: the mark and the label.
|
|
9
|
+
* With `href` the label is a link there, for a browser that does not follow a
|
|
10
|
+
* `<meta refresh>`.
|
|
11
|
+
*/
|
|
12
|
+
export declare function signingInMarkup(opts?: {
|
|
13
|
+
text?: string;
|
|
14
|
+
href?: string;
|
|
15
|
+
}): string;
|
|
16
|
+
/**
|
|
17
|
+
* The screen's stylesheet. `.signing-in` is a fixed cover over whatever page
|
|
18
|
+
* it sits on; `.signing-in.fade` fades it in. Light or dark follows the
|
|
19
|
+
* system, unless the page's root says `data-theme="light"`.
|
|
20
|
+
*/
|
|
21
|
+
export declare const SIGNING_IN_CSS = "\n.signing-in {\n --si-gold: #f2c230;\n --si-teal: #35a8a4;\n --si-teal-deep: #2b7f8b;\n --si-ground: #f4f4f1;\n --si-glow: 14%;\n --si-text: color-mix(in srgb, #0a0b0d 72%, var(--si-ground));\n position: fixed;\n inset: 0;\n z-index: 100;\n display: grid;\n place-content: center;\n justify-items: center;\n gap: 28px;\n padding: env(safe-area-inset-top, 0px) 24px env(safe-area-inset-bottom, 0px);\n background:\n radial-gradient(260px 230px at 50% calc(50% - 20px), color-mix(in srgb, var(--si-gold) var(--si-glow), transparent), transparent),\n var(--si-ground);\n color-scheme: light;\n}\n@media (prefers-color-scheme: dark) {\n :root:not([data-theme=\"light\"]) .signing-in {\n --si-ground: #0a0b0d;\n --si-glow: 7%;\n --si-text: #a5aab3;\n color-scheme: dark;\n }\n}\n.signing-in.fade {\n animation: signing-in-fade 0.2s cubic-bezier(0.2, 0.8, 0.2, 1) both;\n}\n@keyframes signing-in-fade {\n from {\n opacity: 0;\n }\n}\n.signing-in-mark {\n width: 156px;\n height: auto;\n overflow: visible;\n}\n@media (min-width: 720px) {\n .signing-in-mark {\n width: 176px;\n }\n}\n.signing-in-gold {\n stop-color: var(--si-gold);\n}\n.signing-in-teal {\n stop-color: var(--si-teal);\n}\n.signing-in-teal-deep {\n stop-color: var(--si-teal-deep);\n}\n.signing-in-gloss {\n fill: #fff;\n opacity: 0.5;\n}\n/*\n * One swell runs through the mark every 2.8 s: each circle grows past its drop\n * (the goo filter melts it in), overshoots back a little and rests. CSS, not\n * SMIL: Chromium starts SMIL at the load event, CSS from the first paint.\n */\n.signing-in-mark circle {\n transform-box: fill-box;\n transform-origin: center;\n /* Longhands: a shorthand here would reset the name each drop sets below. */\n animation-duration: 2800ms;\n animation-delay: var(--si-phase, 0s);\n animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1);\n animation-iteration-count: infinite;\n}\n.signing-in-head { animation-name: signing-in-head; }\n.signing-in-drop-left { animation-name: signing-in-drop-left; }\n.signing-in-drop-right { animation-name: signing-in-drop-right; }\n.signing-in-stem-head { animation-name: signing-in-stem-head; }\n.signing-in-stem-drop { animation-name: signing-in-stem-drop; }\n@keyframes signing-in-head {\n 0%, 2%, 36%, 100% { transform: none; }\n 13% { transform: translate(0, -18px) scale(1.18); }\n 27% { transform: translate(0, 4px) scale(0.98); }\n}\n@keyframes signing-in-drop-left {\n 0%, 16%, 55%, 100% { transform: none; }\n 32% { transform: translate(-34px, 28px) scale(1.08); }\n 46% { transform: translate(6px, -5px) scale(0.99); }\n}\n@keyframes signing-in-drop-right {\n 0%, 16%, 55%, 100% { transform: none; }\n 32% { transform: translate(34px, 28px) scale(1.08); }\n 46% { transform: translate(-6px, -5px) scale(0.99); }\n}\n@keyframes signing-in-stem-head {\n 0%, 34%, 66%, 100% { transform: none; }\n 46% { transform: translate(0, -6px) scale(1.25); }\n 58% { transform: translate(0, 2px) scale(0.975); }\n}\n@keyframes signing-in-stem-drop {\n 0%, 46%, 86%, 100% { transform: none; }\n 62% { transform: translate(0, 38px) scale(1.066); }\n 76% { transform: translate(0, -6px) scale(0.992); }\n}\n/* Held at rest: shortening the durations, as reduced-motion rules often do, would make the loop flicker. */\n@media (prefers-reduced-motion: reduce) {\n .signing-in-mark circle {\n animation: none !important;\n }\n}\n.signing-in-text {\n margin: 0;\n /* Letter spacing trails the last letter too: pad the start to keep the word centred. */\n padding-left: 0.28em;\n /* The portal's own stack, so the screen is the same on the portal and at a callback. */\n font: 600 12px/1.5 ui-sans-serif, -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"Inter\", \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n letter-spacing: 0.28em;\n text-transform: uppercase;\n color: var(--si-text);\n}\n.signing-in-text a {\n color: inherit;\n text-decoration: none;\n}\n";
|
|
22
|
+
//# sourceMappingURL=signing-in.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-in.d.ts","sourceRoot":"","sources":["../src/signing-in.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,SAAa,GAAG,MAAM,CAEvD;AA+CD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAInF;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,i6HA4H1B,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { MARK } from "./signing-in-mark.js";
|
|
2
|
+
/**
|
|
3
|
+
* The "Signing in" screen (components/15, ADR-032): the platform's mark moving
|
|
4
|
+
* in the platform's colours, and "Signing in" — no product name, so it suits
|
|
5
|
+
* every Tenant. The Customer Portal shows it over a flow page that is leaving,
|
|
6
|
+
* and `continuePage` shows it at the Application's callback, so the hand-over
|
|
7
|
+
* from the sign-in host to the Application looks like one screen.
|
|
8
|
+
*
|
|
9
|
+
* Plain markup and CSS, no inline `style` attribute, so a page with a strict
|
|
10
|
+
* Content-Security-Policy only has to allow the one `<style>` element.
|
|
11
|
+
*/
|
|
12
|
+
/** One swell of the mark, in milliseconds (`SIGNING_IN_CSS`). */
|
|
13
|
+
const CYCLE_MS = 2800;
|
|
14
|
+
const PAD = 50;
|
|
15
|
+
const ID = "signing-in";
|
|
16
|
+
/**
|
|
17
|
+
* Where in its loop the animation starts, as `animation-delay`: the wall
|
|
18
|
+
* clock's position in the cycle. The portal's screen and the callback's page
|
|
19
|
+
* both start there, so the mark does not jump back at the hand-over.
|
|
20
|
+
*/
|
|
21
|
+
export function signingInPhase(now = Date.now()) {
|
|
22
|
+
return `-${now % CYCLE_MS}ms`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A circle under each drop of the mark, which swells in turn (`signing-in-*`
|
|
26
|
+
* keyframes): the gold head gathers, the side drops reach out, the teal head
|
|
27
|
+
* fills and the teal drop reaches down.
|
|
28
|
+
*/
|
|
29
|
+
const DROPS = [
|
|
30
|
+
{ name: "head", fill: "arch", cx: 514, cy: 110, r: 100 },
|
|
31
|
+
{ name: "drop-left", fill: "arch", cx: 116, cy: 534, r: 100 },
|
|
32
|
+
{ name: "drop-right", fill: "arch", cx: 898, cy: 534, r: 100 },
|
|
33
|
+
{ name: "stem-head", fill: "stem", cx: 512, cy: 420, r: 80 },
|
|
34
|
+
{ name: "stem-drop", fill: "stem", cx: 510, cy: 830, r: 122 },
|
|
35
|
+
];
|
|
36
|
+
/**
|
|
37
|
+
* The traced mark, drawn as supplied, with the swelling circles. A goo filter
|
|
38
|
+
* (blur, then a hard alpha edge) melts a swollen circle into the outline
|
|
39
|
+
* around it, as a liquid would. `width` and `height` keep it small should the
|
|
40
|
+
* stylesheet be refused.
|
|
41
|
+
*/
|
|
42
|
+
function markSvg() {
|
|
43
|
+
const box = [-PAD, -PAD, MARK.width + 2 * PAD, MARK.height + 2 * PAD];
|
|
44
|
+
const drops = (fill) => DROPS.filter((d) => d.fill === fill)
|
|
45
|
+
.map((d) => `<circle class="${ID}-${d.name}" cx="${d.cx}" cy="${d.cy}" r="${d.r}"/>`)
|
|
46
|
+
.join("");
|
|
47
|
+
return (`<svg class="${ID}-mark" viewBox="${box.join(" ")}" width="156" height="${Math.round((156 * box[3]) / box[2])}" aria-hidden="true" focusable="false">` +
|
|
48
|
+
`<defs>` +
|
|
49
|
+
`<linearGradient id="${ID}-arch" gradientUnits="userSpaceOnUse" x1="140" y1="520" x2="420" y2="230"><stop offset="0.3" class="${ID}-teal"/><stop offset="0.78" class="${ID}-gold"/></linearGradient>` +
|
|
50
|
+
`<linearGradient id="${ID}-stem" gradientUnits="userSpaceOnUse" x1="0" y1="440" x2="0" y2="970"><stop offset="0.2" class="${ID}-teal"/><stop offset="1" class="${ID}-teal-deep"/></linearGradient>` +
|
|
51
|
+
`<filter id="${ID}-goo" filterUnits="userSpaceOnUse" x="${box[0]}" y="${box[1]}" width="${box[2]}" height="${box[3]}" color-interpolation-filters="sRGB">` +
|
|
52
|
+
`<feGaussianBlur in="SourceGraphic" stdDeviation="16"/><feColorMatrix values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -9"/><feComposite in="SourceGraphic" operator="over"/>` +
|
|
53
|
+
`</filter>` +
|
|
54
|
+
`</defs>` +
|
|
55
|
+
`<g filter="url(#${ID}-goo)">` +
|
|
56
|
+
`<g fill="url(#${ID}-arch)"><path d="${MARK.arch}"/>${drops("arch")}</g>` +
|
|
57
|
+
`<g fill="url(#${ID}-stem)"><path d="${MARK.stem}"/>${drops("stem")}</g>` +
|
|
58
|
+
`</g>` +
|
|
59
|
+
`<g class="${ID}-gloss">${MARK.gloss.map((d) => `<path d="${d}"/>`).join("")}</g>` +
|
|
60
|
+
`</svg>`);
|
|
61
|
+
}
|
|
62
|
+
const esc = (s) => s.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`);
|
|
63
|
+
/**
|
|
64
|
+
* What goes inside the screen's `.signing-in` element: the mark and the label.
|
|
65
|
+
* With `href` the label is a link there, for a browser that does not follow a
|
|
66
|
+
* `<meta refresh>`.
|
|
67
|
+
*/
|
|
68
|
+
export function signingInMarkup(opts = {}) {
|
|
69
|
+
const text = esc(opts.text ?? "Signing in");
|
|
70
|
+
const label = opts.href ? `<a href="${esc(opts.href)}">${text}</a>` : text;
|
|
71
|
+
return `${markSvg()}<p class="${ID}-text">${label}</p>`;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The screen's stylesheet. `.signing-in` is a fixed cover over whatever page
|
|
75
|
+
* it sits on; `.signing-in.fade` fades it in. Light or dark follows the
|
|
76
|
+
* system, unless the page's root says `data-theme="light"`.
|
|
77
|
+
*/
|
|
78
|
+
export const SIGNING_IN_CSS = `
|
|
79
|
+
.signing-in {
|
|
80
|
+
--si-gold: #f2c230;
|
|
81
|
+
--si-teal: #35a8a4;
|
|
82
|
+
--si-teal-deep: #2b7f8b;
|
|
83
|
+
--si-ground: #f4f4f1;
|
|
84
|
+
--si-glow: 14%;
|
|
85
|
+
--si-text: color-mix(in srgb, #0a0b0d 72%, var(--si-ground));
|
|
86
|
+
position: fixed;
|
|
87
|
+
inset: 0;
|
|
88
|
+
z-index: 100;
|
|
89
|
+
display: grid;
|
|
90
|
+
place-content: center;
|
|
91
|
+
justify-items: center;
|
|
92
|
+
gap: 28px;
|
|
93
|
+
padding: env(safe-area-inset-top, 0px) 24px env(safe-area-inset-bottom, 0px);
|
|
94
|
+
background:
|
|
95
|
+
radial-gradient(260px 230px at 50% calc(50% - 20px), color-mix(in srgb, var(--si-gold) var(--si-glow), transparent), transparent),
|
|
96
|
+
var(--si-ground);
|
|
97
|
+
color-scheme: light;
|
|
98
|
+
}
|
|
99
|
+
@media (prefers-color-scheme: dark) {
|
|
100
|
+
:root:not([data-theme="light"]) .signing-in {
|
|
101
|
+
--si-ground: #0a0b0d;
|
|
102
|
+
--si-glow: 7%;
|
|
103
|
+
--si-text: #a5aab3;
|
|
104
|
+
color-scheme: dark;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
.signing-in.fade {
|
|
108
|
+
animation: signing-in-fade 0.2s cubic-bezier(0.2, 0.8, 0.2, 1) both;
|
|
109
|
+
}
|
|
110
|
+
@keyframes signing-in-fade {
|
|
111
|
+
from {
|
|
112
|
+
opacity: 0;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
.signing-in-mark {
|
|
116
|
+
width: 156px;
|
|
117
|
+
height: auto;
|
|
118
|
+
overflow: visible;
|
|
119
|
+
}
|
|
120
|
+
@media (min-width: 720px) {
|
|
121
|
+
.signing-in-mark {
|
|
122
|
+
width: 176px;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
.signing-in-gold {
|
|
126
|
+
stop-color: var(--si-gold);
|
|
127
|
+
}
|
|
128
|
+
.signing-in-teal {
|
|
129
|
+
stop-color: var(--si-teal);
|
|
130
|
+
}
|
|
131
|
+
.signing-in-teal-deep {
|
|
132
|
+
stop-color: var(--si-teal-deep);
|
|
133
|
+
}
|
|
134
|
+
.signing-in-gloss {
|
|
135
|
+
fill: #fff;
|
|
136
|
+
opacity: 0.5;
|
|
137
|
+
}
|
|
138
|
+
/*
|
|
139
|
+
* One swell runs through the mark every 2.8 s: each circle grows past its drop
|
|
140
|
+
* (the goo filter melts it in), overshoots back a little and rests. CSS, not
|
|
141
|
+
* SMIL: Chromium starts SMIL at the load event, CSS from the first paint.
|
|
142
|
+
*/
|
|
143
|
+
.signing-in-mark circle {
|
|
144
|
+
transform-box: fill-box;
|
|
145
|
+
transform-origin: center;
|
|
146
|
+
/* Longhands: a shorthand here would reset the name each drop sets below. */
|
|
147
|
+
animation-duration: ${CYCLE_MS}ms;
|
|
148
|
+
animation-delay: var(--si-phase, 0s);
|
|
149
|
+
animation-timing-function: cubic-bezier(0.45, 0, 0.55, 1);
|
|
150
|
+
animation-iteration-count: infinite;
|
|
151
|
+
}
|
|
152
|
+
.signing-in-head { animation-name: signing-in-head; }
|
|
153
|
+
.signing-in-drop-left { animation-name: signing-in-drop-left; }
|
|
154
|
+
.signing-in-drop-right { animation-name: signing-in-drop-right; }
|
|
155
|
+
.signing-in-stem-head { animation-name: signing-in-stem-head; }
|
|
156
|
+
.signing-in-stem-drop { animation-name: signing-in-stem-drop; }
|
|
157
|
+
@keyframes signing-in-head {
|
|
158
|
+
0%, 2%, 36%, 100% { transform: none; }
|
|
159
|
+
13% { transform: translate(0, -18px) scale(1.18); }
|
|
160
|
+
27% { transform: translate(0, 4px) scale(0.98); }
|
|
161
|
+
}
|
|
162
|
+
@keyframes signing-in-drop-left {
|
|
163
|
+
0%, 16%, 55%, 100% { transform: none; }
|
|
164
|
+
32% { transform: translate(-34px, 28px) scale(1.08); }
|
|
165
|
+
46% { transform: translate(6px, -5px) scale(0.99); }
|
|
166
|
+
}
|
|
167
|
+
@keyframes signing-in-drop-right {
|
|
168
|
+
0%, 16%, 55%, 100% { transform: none; }
|
|
169
|
+
32% { transform: translate(34px, 28px) scale(1.08); }
|
|
170
|
+
46% { transform: translate(-6px, -5px) scale(0.99); }
|
|
171
|
+
}
|
|
172
|
+
@keyframes signing-in-stem-head {
|
|
173
|
+
0%, 34%, 66%, 100% { transform: none; }
|
|
174
|
+
46% { transform: translate(0, -6px) scale(1.25); }
|
|
175
|
+
58% { transform: translate(0, 2px) scale(0.975); }
|
|
176
|
+
}
|
|
177
|
+
@keyframes signing-in-stem-drop {
|
|
178
|
+
0%, 46%, 86%, 100% { transform: none; }
|
|
179
|
+
62% { transform: translate(0, 38px) scale(1.066); }
|
|
180
|
+
76% { transform: translate(0, -6px) scale(0.992); }
|
|
181
|
+
}
|
|
182
|
+
/* Held at rest: shortening the durations, as reduced-motion rules often do, would make the loop flicker. */
|
|
183
|
+
@media (prefers-reduced-motion: reduce) {
|
|
184
|
+
.signing-in-mark circle {
|
|
185
|
+
animation: none !important;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
.signing-in-text {
|
|
189
|
+
margin: 0;
|
|
190
|
+
/* Letter spacing trails the last letter too: pad the start to keep the word centred. */
|
|
191
|
+
padding-left: 0.28em;
|
|
192
|
+
/* The portal's own stack, so the screen is the same on the portal and at a callback. */
|
|
193
|
+
font: 600 12px/1.5 ui-sans-serif, -apple-system, BlinkMacSystemFont, "SF Pro Text", "Inter", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
194
|
+
letter-spacing: 0.28em;
|
|
195
|
+
text-transform: uppercase;
|
|
196
|
+
color: var(--si-text);
|
|
197
|
+
}
|
|
198
|
+
.signing-in-text a {
|
|
199
|
+
color: inherit;
|
|
200
|
+
text-decoration: none;
|
|
201
|
+
}
|
|
202
|
+
`;
|
|
203
|
+
//# sourceMappingURL=signing-in.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing-in.js","sourceRoot":"","sources":["../src/signing-in.ts"],"names":[],"mappings":"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"}
|
package/dist/tags.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tags (ADR-057). A tag marks a subset of Users or Tenants (the platform's
|
|
3
|
+
* scope) or of one Tenant's Customers (that Tenant's scope). It is derived —
|
|
4
|
+
* computed from what the Engine already records, never stored — or assigned
|
|
5
|
+
* by a person or by a rule from a closed list. A tag selects; it never grants.
|
|
6
|
+
*
|
|
7
|
+
* Pure and dependency-free: the Operations API stores and evaluates, the Admin
|
|
8
|
+
* UI and the Tenant's tools read the same vocabulary.
|
|
9
|
+
*/
|
|
10
|
+
export declare const TAG_SUBJECTS: readonly ["user", "customer", "tenant"];
|
|
11
|
+
export type TagSubject = (typeof TAG_SUBJECTS)[number];
|
|
12
|
+
/** Who sees a tag on a subject (§4): staff only, also the subject itself, or (a platform tag on a Tenant) also the Tenant's staff. */
|
|
13
|
+
export declare const TAG_VISIBILITIES: readonly ["staff", "subject", "tenant"];
|
|
14
|
+
export type TagVisibility = (typeof TAG_VISIBILITIES)[number];
|
|
15
|
+
/** The Admin UI's tag colours: a tag is told apart at a glance, never by colour alone. */
|
|
16
|
+
export declare const TAG_COLOURS: readonly ["slate", "gold", "teal", "green", "amber", "red", "violet", "blue"];
|
|
17
|
+
export type TagColour = (typeof TAG_COLOURS)[number];
|
|
18
|
+
/**
|
|
19
|
+
* The closed list of rules (§3). A rule assigns when its moment comes and never removes. `on_hard_bounce` and
|
|
20
|
+
* `on_complaint` (ADR-060 §5): mail to the subject's address bounced for good, or was reported as spam.
|
|
21
|
+
*/
|
|
22
|
+
export type TagRule = {
|
|
23
|
+
kind: "at_creation";
|
|
24
|
+
} | {
|
|
25
|
+
kind: "on_join";
|
|
26
|
+
} | {
|
|
27
|
+
kind: "on_tier";
|
|
28
|
+
tier: string;
|
|
29
|
+
} | {
|
|
30
|
+
kind: "on_restore";
|
|
31
|
+
} | {
|
|
32
|
+
kind: "on_hard_bounce";
|
|
33
|
+
} | {
|
|
34
|
+
kind: "on_complaint";
|
|
35
|
+
};
|
|
36
|
+
export declare const TAG_RULE_KINDS: readonly ["at_creation", "on_join", "on_tier", "on_restore", "on_hard_bounce", "on_complaint"];
|
|
37
|
+
export type TagRuleKind = (typeof TAG_RULE_KINDS)[number];
|
|
38
|
+
/**
|
|
39
|
+
* What carrying a tag does (ADR-060 §4), from a closed list, beside the rules that assign it. An effect never grants:
|
|
40
|
+
* `no_email` only takes e-mail away. Mail to a subject with such a tag is not sent; in-app Notifications and
|
|
41
|
+
* tickets still appear. A Customer's mail also stops while its User carries one.
|
|
42
|
+
*/
|
|
43
|
+
export declare const TAG_EFFECTS: readonly ["no_email"];
|
|
44
|
+
export type TagEffect = (typeof TAG_EFFECTS)[number];
|
|
45
|
+
/** An assigned tag's name (§2): lowercase letters, digits and `-`, 2 to 40 characters, never `:` or `=`. */
|
|
46
|
+
export declare const TAG_NAME: RegExp;
|
|
47
|
+
export declare function tagNameProblem(name: string): string | null;
|
|
48
|
+
/** A derived tag is written `<kind>=<value>`; an assigned one never contains `=`. */
|
|
49
|
+
export declare function isDerivedTag(name: string): boolean;
|
|
50
|
+
/** A tag as answers carry it on a subject. */
|
|
51
|
+
export interface TagRef {
|
|
52
|
+
/** The tag's id; absent for a derived tag, which is no record. */
|
|
53
|
+
id?: string;
|
|
54
|
+
name: string;
|
|
55
|
+
derived: boolean;
|
|
56
|
+
colour?: TagColour;
|
|
57
|
+
visibility?: TagVisibility;
|
|
58
|
+
}
|
|
59
|
+
/** A tag's record, as the Tags page and the Tenant API read it. */
|
|
60
|
+
export interface TagView {
|
|
61
|
+
id: string;
|
|
62
|
+
name: string;
|
|
63
|
+
/** `<slug>:<name>` for a Tenant tag, the bare name for a platform one. */
|
|
64
|
+
shown: string;
|
|
65
|
+
scope: "platform" | "tenant";
|
|
66
|
+
/** The Tenant's ARID, for a Tenant tag. */
|
|
67
|
+
tenant?: string;
|
|
68
|
+
subject: TagSubject;
|
|
69
|
+
visibility: TagVisibility;
|
|
70
|
+
description: string;
|
|
71
|
+
colour: TagColour;
|
|
72
|
+
rules: TagRule[];
|
|
73
|
+
/** What carrying it does (ADR-060 §4). */
|
|
74
|
+
effects: TagEffect[];
|
|
75
|
+
/** Kept by the Engine in every scope: cannot be deleted or renamed, its effects and rules are fixed. */
|
|
76
|
+
system: boolean;
|
|
77
|
+
subjects: number;
|
|
78
|
+
created_at: string;
|
|
79
|
+
updated_at: string;
|
|
80
|
+
}
|
|
81
|
+
/** How a tag reads on a page: `<slug>:<name>` in a Tenant's scope (§1). */
|
|
82
|
+
export declare function shownTagName(name: string, slug?: string | null): string;
|
|
83
|
+
/** A selector (§6): every tag of `all`, at least one of `any`, none of `none`. An empty selector selects everyone. */
|
|
84
|
+
export interface TagSelector {
|
|
85
|
+
all?: string[];
|
|
86
|
+
any?: string[];
|
|
87
|
+
none?: string[];
|
|
88
|
+
}
|
|
89
|
+
export declare function selectorMatches(selector: TagSelector, tags: Iterable<string>): boolean;
|
|
90
|
+
export declare function selectorTags(selector: TagSelector): string[];
|
|
91
|
+
/** Why a selector cannot be used, or null: each entry an assigned name or a derived `<kind>=<value>`, at most 20 in all. */
|
|
92
|
+
export declare function selectorProblem(selector: unknown): string | null;
|
|
93
|
+
/** A selector as a query parameter (`?tags=`): JSON, so a list filter reads it back whole. */
|
|
94
|
+
export declare function encodeSelector(selector: TagSelector): string;
|
|
95
|
+
export declare function decodeSelector(raw: string | null | undefined): TagSelector | null;
|
|
96
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"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"}
|
package/dist/tags.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tags (ADR-057). A tag marks a subset of Users or Tenants (the platform's
|
|
3
|
+
* scope) or of one Tenant's Customers (that Tenant's scope). It is derived —
|
|
4
|
+
* computed from what the Engine already records, never stored — or assigned
|
|
5
|
+
* by a person or by a rule from a closed list. A tag selects; it never grants.
|
|
6
|
+
*
|
|
7
|
+
* Pure and dependency-free: the Operations API stores and evaluates, the Admin
|
|
8
|
+
* UI and the Tenant's tools read the same vocabulary.
|
|
9
|
+
*/
|
|
10
|
+
export const TAG_SUBJECTS = ["user", "customer", "tenant"];
|
|
11
|
+
/** Who sees a tag on a subject (§4): staff only, also the subject itself, or (a platform tag on a Tenant) also the Tenant's staff. */
|
|
12
|
+
export const TAG_VISIBILITIES = ["staff", "subject", "tenant"];
|
|
13
|
+
/** The Admin UI's tag colours: a tag is told apart at a glance, never by colour alone. */
|
|
14
|
+
export const TAG_COLOURS = ["slate", "gold", "teal", "green", "amber", "red", "violet", "blue"];
|
|
15
|
+
export const TAG_RULE_KINDS = ["at_creation", "on_join", "on_tier", "on_restore", "on_hard_bounce", "on_complaint"];
|
|
16
|
+
/**
|
|
17
|
+
* What carrying a tag does (ADR-060 §4), from a closed list, beside the rules that assign it. An effect never grants:
|
|
18
|
+
* `no_email` only takes e-mail away. Mail to a subject with such a tag is not sent; in-app Notifications and
|
|
19
|
+
* tickets still appear. A Customer's mail also stops while its User carries one.
|
|
20
|
+
*/
|
|
21
|
+
export const TAG_EFFECTS = ["no_email"];
|
|
22
|
+
/** An assigned tag's name (§2): lowercase letters, digits and `-`, 2 to 40 characters, never `:` or `=`. */
|
|
23
|
+
export const TAG_NAME = /^[a-z0-9][a-z0-9-]{0,38}[a-z0-9]$/;
|
|
24
|
+
export function tagNameProblem(name) {
|
|
25
|
+
if (TAG_NAME.test(name))
|
|
26
|
+
return null;
|
|
27
|
+
return "2 to 40 lowercase letters, digits or -, starting and ending with a letter or digit";
|
|
28
|
+
}
|
|
29
|
+
/** A derived tag is written `<kind>=<value>`; an assigned one never contains `=`. */
|
|
30
|
+
export function isDerivedTag(name) {
|
|
31
|
+
return name.includes("=");
|
|
32
|
+
}
|
|
33
|
+
/** How a tag reads on a page: `<slug>:<name>` in a Tenant's scope (§1). */
|
|
34
|
+
export function shownTagName(name, slug) {
|
|
35
|
+
return slug ? `${slug}:${name}` : name;
|
|
36
|
+
}
|
|
37
|
+
export function selectorMatches(selector, tags) {
|
|
38
|
+
const has = new Set(tags);
|
|
39
|
+
if (selector.all?.some((t) => !has.has(t)))
|
|
40
|
+
return false;
|
|
41
|
+
if (selector.any?.length && !selector.any.some((t) => has.has(t)))
|
|
42
|
+
return false;
|
|
43
|
+
if (selector.none?.some((t) => has.has(t)))
|
|
44
|
+
return false;
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
export function selectorTags(selector) {
|
|
48
|
+
return Array.from(new Set([...(selector.all ?? []), ...(selector.any ?? []), ...(selector.none ?? [])]));
|
|
49
|
+
}
|
|
50
|
+
/** Why a selector cannot be used, or null: each entry an assigned name or a derived `<kind>=<value>`, at most 20 in all. */
|
|
51
|
+
export function selectorProblem(selector) {
|
|
52
|
+
if (!selector || typeof selector !== "object" || Array.isArray(selector))
|
|
53
|
+
return "a selector is { all?, any?, none? }";
|
|
54
|
+
const s = selector;
|
|
55
|
+
for (const k of Object.keys(s))
|
|
56
|
+
if (k !== "all" && k !== "any" && k !== "none")
|
|
57
|
+
return `unknown key ${k}`;
|
|
58
|
+
let n = 0;
|
|
59
|
+
for (const k of ["all", "any", "none"]) {
|
|
60
|
+
const v = s[k];
|
|
61
|
+
if (v === undefined)
|
|
62
|
+
continue;
|
|
63
|
+
if (!Array.isArray(v) || v.some((x) => typeof x !== "string"))
|
|
64
|
+
return `${k} is a list of tag names`;
|
|
65
|
+
for (const t of v) {
|
|
66
|
+
n++;
|
|
67
|
+
if (isDerivedTag(t) ? !/^[a-z_]+=[a-z0-9_.-]+$/.test(t) : !TAG_NAME.test(t))
|
|
68
|
+
return `${t} is not a tag name`;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return n > 20 ? "at most 20 tags in a selector" : null;
|
|
72
|
+
}
|
|
73
|
+
/** A selector as a query parameter (`?tags=`): JSON, so a list filter reads it back whole. */
|
|
74
|
+
export function encodeSelector(selector) {
|
|
75
|
+
return JSON.stringify(selector);
|
|
76
|
+
}
|
|
77
|
+
export function decodeSelector(raw) {
|
|
78
|
+
if (!raw)
|
|
79
|
+
return null;
|
|
80
|
+
try {
|
|
81
|
+
const s = JSON.parse(raw);
|
|
82
|
+
return selectorProblem(s) ? null : s;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=tags.js.map
|
package/dist/tags.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Tenant's own subscription to the platform (ADR-064 §11), as
|
|
3
|
+
* `GET /tenant/v0/subscription` answers it: read-only, for the Tenant's server
|
|
4
|
+
* or its agent. The catalogue and the rules stay with the Engine.
|
|
5
|
+
*/
|
|
6
|
+
export interface TenantPlatformFeatures {
|
|
7
|
+
own_signin: boolean;
|
|
8
|
+
own_domain: boolean;
|
|
9
|
+
/** How many people may hold a role in this Tenant. */
|
|
10
|
+
team_members: number;
|
|
11
|
+
/** A response time the Admin UI states, and nothing enforces. */
|
|
12
|
+
support: string;
|
|
13
|
+
}
|
|
14
|
+
/** `Tenant.overage`: off unless a Tenant opts in. `cap` limits what it adds to one month's invoice. */
|
|
15
|
+
export interface TenantOverage {
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
cap?: {
|
|
18
|
+
amount: string;
|
|
19
|
+
currency: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** What `GET /tenant/v0/subscription` answers: the Tenant's own tier and use, read-only. */
|
|
23
|
+
export interface TenantSubscriptionView {
|
|
24
|
+
/** The `sbs`, for staff and for a Tenant's own routes. */
|
|
25
|
+
arid: string | null;
|
|
26
|
+
tier: string | null;
|
|
27
|
+
label: string | null;
|
|
28
|
+
state: string | null;
|
|
29
|
+
frozen: boolean;
|
|
30
|
+
renews: boolean | null;
|
|
31
|
+
period_end: string | null;
|
|
32
|
+
trial_end: string | null;
|
|
33
|
+
allowance: TenantAllowance | null;
|
|
34
|
+
used: {
|
|
35
|
+
active_customers: number;
|
|
36
|
+
storage: number;
|
|
37
|
+
};
|
|
38
|
+
overage: TenantOverage | null;
|
|
39
|
+
closing_at: string | null;
|
|
40
|
+
features: TenantPlatformFeatures | null;
|
|
41
|
+
}
|
|
42
|
+
/** What a Tenant's tier includes before overage (ADR-064 §5). */
|
|
43
|
+
export interface TenantAllowance {
|
|
44
|
+
active_customers: number;
|
|
45
|
+
storage: number;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=tenant-subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-subscription.d.ts","sourceRoot":"","sources":["../src/tenant-subscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uGAAuG;AACvG,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,4FAA4F;AAC5F,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACzC;AAED,iEAAiE;AACjE,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Tenant's own subscription to the platform (ADR-064 §11), as
|
|
3
|
+
* `GET /tenant/v0/subscription` answers it: read-only, for the Tenant's server
|
|
4
|
+
* or its agent. The catalogue and the rules stay with the Engine.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=tenant-subscription.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-subscription.js","sourceRoot":"","sources":["../src/tenant-subscription.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|