@skdx/web-components-blocks 0.38.0 → 0.40.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.
Files changed (54) hide show
  1. package/custom-elements.json +1442 -1427
  2. package/dist/dashboard-layout/DashboardLayout.cjs +16 -16
  3. package/dist/dashboard-layout/DashboardLayout.d.cts +9 -3
  4. package/dist/dashboard-layout/DashboardLayout.d.ts +9 -3
  5. package/dist/dashboard-layout/DashboardLayout.js +14 -14
  6. package/dist/empty-state/EmptyState.cjs +2 -2
  7. package/dist/empty-state/EmptyState.d.cts +2 -2
  8. package/dist/empty-state/EmptyState.d.ts +2 -2
  9. package/dist/empty-state/EmptyState.js +2 -2
  10. package/dist/forgot-password-page/ForgotPasswordPage.cjs +3 -2
  11. package/dist/forgot-password-page/ForgotPasswordPage.d.cts +1 -1
  12. package/dist/forgot-password-page/ForgotPasswordPage.d.ts +1 -1
  13. package/dist/forgot-password-page/ForgotPasswordPage.js +7 -6
  14. package/dist/form-section/FormSection.cjs +2 -2
  15. package/dist/form-section/FormSection.d.cts +2 -2
  16. package/dist/form-section/FormSection.d.ts +2 -2
  17. package/dist/form-section/FormSection.js +2 -2
  18. package/dist/internal/define.cjs +1 -1
  19. package/dist/internal/define.js +1 -1
  20. package/dist/notification-center/NotificationCenter.cjs +1 -1
  21. package/dist/notification-center/NotificationCenter.d.cts +1 -1
  22. package/dist/notification-center/NotificationCenter.d.ts +1 -1
  23. package/dist/notification-center/NotificationCenter.js +1 -1
  24. package/dist/onboarding-checklist/OnboardingChecklist.cjs +1 -1
  25. package/dist/onboarding-checklist/OnboardingChecklist.d.cts +2 -2
  26. package/dist/onboarding-checklist/OnboardingChecklist.d.ts +2 -2
  27. package/dist/onboarding-checklist/OnboardingChecklist.js +1 -1
  28. package/dist/page-container/PageContainer.cjs +6 -6
  29. package/dist/page-container/PageContainer.d.cts +3 -3
  30. package/dist/page-container/PageContainer.d.ts +3 -3
  31. package/dist/page-container/PageContainer.js +2 -2
  32. package/dist/reset-password-page/ResetPasswordPage.cjs +3 -2
  33. package/dist/reset-password-page/ResetPasswordPage.d.cts +1 -1
  34. package/dist/reset-password-page/ResetPasswordPage.d.ts +1 -1
  35. package/dist/reset-password-page/ResetPasswordPage.js +3 -2
  36. package/dist/sign-in-page/SignInPage.cjs +4 -3
  37. package/dist/sign-in-page/SignInPage.d.cts +1 -1
  38. package/dist/sign-in-page/SignInPage.d.ts +1 -1
  39. package/dist/sign-in-page/SignInPage.js +4 -3
  40. package/dist/sign-up-page/SignUpPage.cjs +22 -17
  41. package/dist/sign-up-page/SignUpPage.d.cts +4 -1
  42. package/dist/sign-up-page/SignUpPage.d.ts +4 -1
  43. package/dist/sign-up-page/SignUpPage.js +13 -8
  44. package/dist/usage-card/UsageCard.cjs +4 -4
  45. package/dist/usage-card/UsageCard.js +9 -9
  46. package/dist/verification-page/VerificationPage.cjs +8 -3
  47. package/dist/verification-page/VerificationPage.d.cts +3 -1
  48. package/dist/verification-page/VerificationPage.d.ts +3 -1
  49. package/dist/verification-page/VerificationPage.js +8 -3
  50. package/dist/workspace-switcher/WorkspaceSwitcher.cjs +17 -17
  51. package/dist/workspace-switcher/WorkspaceSwitcher.d.cts +1 -1
  52. package/dist/workspace-switcher/WorkspaceSwitcher.d.ts +1 -1
  53. package/dist/workspace-switcher/WorkspaceSwitcher.js +14 -14
  54. package/package.json +3 -3
@@ -363,183 +363,483 @@
363
363
  },
364
364
  {
365
365
  "kind": "javascript-module",
366
- "path": "src/comment/Comment.ts",
366
+ "path": "src/chat-composer/ChatComposer.ts",
367
367
  "declarations": [
368
368
  {
369
369
  "kind": "class",
370
- "description": "One collaboration comment: author, avatar, timestamp, edited indicator,\narbitrary content, attachments and actions such as reply, edit and react.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-comment` on the host, then `__avatar`, `__main`, `__header`,\n`__author`, `__metadata`, `__time`, `__edited`, `__content`, `__attachments`\nand `__actions`.",
371
- "name": "SkdxComment",
370
+ "description": "Message composer block: an auto-growing Textarea and a send Button inside a\nfield, with consumer-supplied attachment, leading, trailing and footer\nregions and configurable Enter-to-send behaviour.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-chat-composer` on the host, then `__attachments`, `__field`,\n`__leading`, `__textarea`, `__trailing`, `__send` and `__footer`.\n`data-state` on the host reads `pending` while a send is in flight.",
371
+ "name": "SkdxChatComposer",
372
372
  "slots": [
373
373
  {
374
- "description": "The comment content, the consumer-supplied body text or markup.",
375
- "name": ""
374
+ "description": "Controls rendered inside the field before the textarea, such as an attach button.",
375
+ "name": "leading"
376
376
  },
377
377
  {
378
- "description": "Decorative avatar rendered beside the author, always `aria-hidden`.",
379
- "name": "avatar"
378
+ "description": "Controls rendered inside the field after the textarea, such as a model picker.",
379
+ "name": "trailing"
380
380
  },
381
381
  {
382
- "description": "Badges or supplementary text rendered beside the author.",
383
- "name": "metadata"
382
+ "description": "Attached files or chips rendered in a row above the field.",
383
+ "name": "attachments"
384
384
  },
385
385
  {
386
- "description": "Files or links attached to the comment, below the content.",
387
- "name": "attachments"
386
+ "description": "Usage counters or hints rendered in a row below the field.",
387
+ "name": "footer"
388
388
  },
389
389
  {
390
- "description": "Controls such as reply, edit and react, below the attachments.",
391
- "name": "actions"
390
+ "description": "Glyph rendered inside the send button in place of its text, making it icon-only.",
391
+ "name": "send-icon"
392
392
  }
393
393
  ],
394
394
  "members": [
395
395
  {
396
396
  "kind": "field",
397
- "name": "author",
397
+ "name": "value",
398
+ "type": {
399
+ "text": "string | undefined | undefined"
400
+ },
401
+ "description": "Current message text, for controlled usage paired with `value-change`.",
402
+ "default": "undefined",
403
+ "attribute": "value"
404
+ },
405
+ {
406
+ "kind": "field",
407
+ "name": "defaultValue",
398
408
  "type": {
399
409
  "text": "string"
400
410
  },
401
- "description": "Name of the person or system that wrote the comment, rendered as visible text.",
402
- "attribute": "author",
403
- "required": true
411
+ "default": "''",
412
+ "description": "Initial message text for uncontrolled usage, read only on mount.",
413
+ "attribute": "default-value"
404
414
  },
405
415
  {
406
416
  "kind": "field",
407
- "name": "timestamp",
417
+ "name": "placeholder",
408
418
  "type": {
409
- "text": "Date | string | undefined | undefined"
419
+ "text": "string | undefined | undefined"
410
420
  },
411
- "description": "Instant the comment was posted, rendered through a composed Time.",
421
+ "description": "Hint text shown in the empty textarea, rendered as the native placeholder.",
412
422
  "default": "undefined",
413
- "attribute": "timestamp"
423
+ "attribute": "placeholder"
414
424
  },
415
425
  {
416
426
  "kind": "field",
417
- "name": "now",
427
+ "name": "label",
418
428
  "type": {
419
- "text": "Date | number | undefined | undefined"
429
+ "text": "string"
420
430
  },
421
- "description": "Reference instant `timestamp` renders relative to, forwarded to Time.",
422
- "default": "undefined"
431
+ "default": "'Message'",
432
+ "description": "Accessible name of the message textarea, read by assistive technology.",
433
+ "attribute": "label"
423
434
  },
424
435
  {
425
436
  "kind": "field",
426
- "name": "edited",
437
+ "name": "sendLabel",
438
+ "type": {
439
+ "text": "string"
440
+ },
441
+ "default": "'Send'",
442
+ "description": "Text of the send button, and its accessible name when the `send-icon` slot is filled.",
443
+ "attribute": "send-label"
444
+ },
445
+ {
446
+ "kind": "field",
447
+ "name": "submitKey",
448
+ "type": {
449
+ "text": "SkdxChatComposerSubmitKey"
450
+ },
451
+ "default": "'enter'",
452
+ "description": "Which key sends from the textarea; the other Enter presses insert a newline.",
453
+ "attribute": "submit-key"
454
+ },
455
+ {
456
+ "kind": "field",
457
+ "name": "maxRows",
458
+ "type": {
459
+ "text": "number"
460
+ },
461
+ "default": "8",
462
+ "description": "Caps how far the auto-growing textarea grows, in rows, before it scrolls.",
463
+ "attribute": "max-rows"
464
+ },
465
+ {
466
+ "kind": "field",
467
+ "name": "maxLength",
468
+ "type": {
469
+ "text": "number | undefined | undefined"
470
+ },
471
+ "description": "Native `maxlength` of the textarea — the longest message it accepts.",
472
+ "default": "undefined",
473
+ "attribute": "max-length"
474
+ },
475
+ {
476
+ "kind": "field",
477
+ "name": "disabled",
427
478
  "type": {
428
479
  "text": "boolean"
429
480
  },
430
481
  "default": "false",
431
- "description": "Marks the comment as edited since it was first posted.",
432
- "attribute": "edited"
482
+ "description": "Disables the textarea and the send button, blocking every send path.",
483
+ "attribute": "disabled"
433
484
  },
434
485
  {
435
486
  "kind": "field",
436
- "name": "editedLabel",
487
+ "name": "pending",
437
488
  "type": {
438
- "text": "string"
489
+ "text": "boolean"
439
490
  },
440
- "default": "'Edited'",
441
- "description": "Text of the edited indicator, shown only when `edited` is set.",
442
- "attribute": "edited-label"
491
+ "default": "false",
492
+ "description": "Marks a send in flight: the button is busy and inert, the textarea stays editable.",
493
+ "attribute": "pending"
494
+ }
495
+ ],
496
+ "events": [
497
+ {
498
+ "description": "Fires with the new text on every edit, including the clear that follows an uncontrolled send.",
499
+ "name": "value-change"
500
+ },
501
+ {
502
+ "description": "Fires with the message text when the send button is activated or the configured submit key is pressed.",
503
+ "name": "send"
443
504
  }
444
505
  ],
445
506
  "attributes": [
446
507
  {
447
- "name": "author",
508
+ "name": "value",
509
+ "type": {
510
+ "text": "string | undefined | undefined"
511
+ },
512
+ "description": "Current message text, for controlled usage paired with `value-change`.",
513
+ "default": "undefined",
514
+ "fieldName": "value"
515
+ },
516
+ {
517
+ "name": "default-value",
448
518
  "type": {
449
519
  "text": "string"
450
520
  },
451
- "description": "Name of the person or system that wrote the comment, rendered as visible text.",
452
- "fieldName": "author",
453
- "required": true
521
+ "default": "''",
522
+ "description": "Initial message text for uncontrolled usage, read only on mount.",
523
+ "fieldName": "defaultValue"
454
524
  },
455
525
  {
456
- "name": "timestamp",
526
+ "name": "placeholder",
457
527
  "type": {
458
- "text": "Date | string | undefined | undefined"
528
+ "text": "string | undefined | undefined"
459
529
  },
460
- "description": "Instant the comment was posted, rendered through a composed Time.",
530
+ "description": "Hint text shown in the empty textarea, rendered as the native placeholder.",
461
531
  "default": "undefined",
462
- "fieldName": "timestamp"
532
+ "fieldName": "placeholder"
463
533
  },
464
534
  {
465
- "name": "edited",
535
+ "name": "label",
536
+ "type": {
537
+ "text": "string"
538
+ },
539
+ "default": "'Message'",
540
+ "description": "Accessible name of the message textarea, read by assistive technology.",
541
+ "fieldName": "label"
542
+ },
543
+ {
544
+ "name": "send-label",
545
+ "type": {
546
+ "text": "string"
547
+ },
548
+ "default": "'Send'",
549
+ "description": "Text of the send button, and its accessible name when the `send-icon` slot is filled.",
550
+ "fieldName": "sendLabel"
551
+ },
552
+ {
553
+ "name": "submit-key",
554
+ "type": {
555
+ "text": "SkdxChatComposerSubmitKey"
556
+ },
557
+ "default": "'enter'",
558
+ "description": "Which key sends from the textarea; the other Enter presses insert a newline.",
559
+ "fieldName": "submitKey"
560
+ },
561
+ {
562
+ "name": "max-rows",
563
+ "type": {
564
+ "text": "number"
565
+ },
566
+ "default": "8",
567
+ "description": "Caps how far the auto-growing textarea grows, in rows, before it scrolls.",
568
+ "fieldName": "maxRows"
569
+ },
570
+ {
571
+ "name": "max-length",
572
+ "type": {
573
+ "text": "number | undefined | undefined"
574
+ },
575
+ "description": "Native `maxlength` of the textarea — the longest message it accepts.",
576
+ "default": "undefined",
577
+ "fieldName": "maxLength"
578
+ },
579
+ {
580
+ "name": "disabled",
466
581
  "type": {
467
582
  "text": "boolean"
468
583
  },
469
584
  "default": "false",
470
- "description": "Marks the comment as edited since it was first posted.",
471
- "fieldName": "edited"
585
+ "description": "Disables the textarea and the send button, blocking every send path.",
586
+ "fieldName": "disabled"
472
587
  },
473
588
  {
474
- "name": "edited-label",
589
+ "name": "pending",
475
590
  "type": {
476
- "text": "string"
591
+ "text": "boolean"
477
592
  },
478
- "default": "'Edited'",
479
- "description": "Text of the edited indicator, shown only when `edited` is set.",
480
- "fieldName": "editedLabel"
593
+ "default": "false",
594
+ "description": "Marks a send in flight: the button is busy and inert, the textarea stays editable.",
595
+ "fieldName": "pending"
481
596
  }
482
597
  ],
483
598
  "superclass": {
484
599
  "name": "LitElement",
485
600
  "package": "lit"
486
601
  },
487
- "tagName": "skdx-comment",
602
+ "tagName": "skdx-chat-composer",
488
603
  "customElement": true
489
604
  }
490
605
  ],
491
606
  "exports": [
492
607
  {
493
608
  "kind": "js",
494
- "name": "SkdxComment",
609
+ "name": "SkdxChatComposer",
495
610
  "declaration": {
496
- "name": "SkdxComment",
497
- "module": "src/comment/Comment.ts"
611
+ "name": "SkdxChatComposer",
612
+ "module": "src/chat-composer/ChatComposer.ts"
498
613
  }
499
614
  },
500
615
  {
501
616
  "kind": "custom-element-definition",
502
- "name": "skdx-comment",
617
+ "name": "skdx-chat-composer",
503
618
  "declaration": {
504
- "name": "SkdxComment",
505
- "module": "src/comment/Comment.ts"
619
+ "name": "SkdxChatComposer",
620
+ "module": "src/chat-composer/ChatComposer.ts"
506
621
  }
507
622
  }
508
623
  ]
509
624
  },
510
625
  {
511
626
  "kind": "javascript-module",
512
- "path": "src/comment/index.ts",
627
+ "path": "src/chat-composer/index.ts",
513
628
  "declarations": [],
514
629
  "exports": [
515
630
  {
516
631
  "kind": "js",
517
- "name": "SkdxComment",
632
+ "name": "SkdxChatComposer",
518
633
  "declaration": {
519
- "name": "SkdxComment",
520
- "module": "./Comment"
634
+ "name": "SkdxChatComposer",
635
+ "module": "./ChatComposer"
521
636
  }
522
- }
523
- ]
524
- },
525
- {
526
- "kind": "javascript-module",
527
- "path": "src/chat-message/ChatMessage.ts",
528
- "declarations": [
637
+ },
529
638
  {
530
- "kind": "class",
531
- "description": "One message in a conversation — assistant, support agent, human or system —\nwith an author, avatar, timestamp, delivery status, content, attachments,\nactions and a footer, composing Time; the block parses nothing.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-chat-message` on the host, then `__avatar`, `__main`,\n`__header`, `__author`, `__time`, `__status`, `__content`, `__attachments`,\n`__footer` and `__actions`. `data-sender` and `data-status` sit on the host\nfor the skin to read.",
532
- "name": "SkdxChatMessage",
533
- "slots": [
534
- {
535
- "description": "The message content: markdown output, code, citations or tool results.",
536
- "name": ""
537
- },
538
- {
539
- "description": "Decorative avatar rendered beside the message, always `aria-hidden`.",
540
- "name": "avatar"
541
- },
542
- {
639
+ "kind": "js",
640
+ "name": "SkdxChatComposerSendDetail",
641
+ "declaration": {
642
+ "name": "SkdxChatComposerSendDetail",
643
+ "module": "./ChatComposer"
644
+ }
645
+ },
646
+ {
647
+ "kind": "js",
648
+ "name": "SkdxChatComposerSubmitKey",
649
+ "declaration": {
650
+ "name": "SkdxChatComposerSubmitKey",
651
+ "module": "./ChatComposer"
652
+ }
653
+ },
654
+ {
655
+ "kind": "js",
656
+ "name": "SkdxChatComposerValueChangeDetail",
657
+ "declaration": {
658
+ "name": "SkdxChatComposerValueChangeDetail",
659
+ "module": "./ChatComposer"
660
+ }
661
+ }
662
+ ]
663
+ },
664
+ {
665
+ "kind": "javascript-module",
666
+ "path": "src/comment/Comment.ts",
667
+ "declarations": [
668
+ {
669
+ "kind": "class",
670
+ "description": "One collaboration comment: author, avatar, timestamp, edited indicator,\narbitrary content, attachments and actions such as reply, edit and react.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-comment` on the host, then `__avatar`, `__main`, `__header`,\n`__author`, `__metadata`, `__time`, `__edited`, `__content`, `__attachments`\nand `__actions`.",
671
+ "name": "SkdxComment",
672
+ "slots": [
673
+ {
674
+ "description": "The comment content, the consumer-supplied body text or markup.",
675
+ "name": ""
676
+ },
677
+ {
678
+ "description": "Decorative avatar rendered beside the author, always `aria-hidden`.",
679
+ "name": "avatar"
680
+ },
681
+ {
682
+ "description": "Badges or supplementary text rendered beside the author.",
683
+ "name": "metadata"
684
+ },
685
+ {
686
+ "description": "Files or links attached to the comment, below the content.",
687
+ "name": "attachments"
688
+ },
689
+ {
690
+ "description": "Controls such as reply, edit and react, below the attachments.",
691
+ "name": "actions"
692
+ }
693
+ ],
694
+ "members": [
695
+ {
696
+ "kind": "field",
697
+ "name": "author",
698
+ "type": {
699
+ "text": "string"
700
+ },
701
+ "description": "Name of the person or system that wrote the comment, rendered as visible text.",
702
+ "attribute": "author",
703
+ "required": true
704
+ },
705
+ {
706
+ "kind": "field",
707
+ "name": "timestamp",
708
+ "type": {
709
+ "text": "Date | string | undefined | undefined"
710
+ },
711
+ "description": "Instant the comment was posted, rendered through a composed Time.",
712
+ "default": "undefined",
713
+ "attribute": "timestamp"
714
+ },
715
+ {
716
+ "kind": "field",
717
+ "name": "now",
718
+ "type": {
719
+ "text": "Date | number | undefined | undefined"
720
+ },
721
+ "description": "Reference instant `timestamp` renders relative to, forwarded to Time.",
722
+ "default": "undefined"
723
+ },
724
+ {
725
+ "kind": "field",
726
+ "name": "edited",
727
+ "type": {
728
+ "text": "boolean"
729
+ },
730
+ "default": "false",
731
+ "description": "Marks the comment as edited since it was first posted.",
732
+ "attribute": "edited"
733
+ },
734
+ {
735
+ "kind": "field",
736
+ "name": "editedLabel",
737
+ "type": {
738
+ "text": "string"
739
+ },
740
+ "default": "'Edited'",
741
+ "description": "Text of the edited indicator, shown only when `edited` is set.",
742
+ "attribute": "edited-label"
743
+ }
744
+ ],
745
+ "attributes": [
746
+ {
747
+ "name": "author",
748
+ "type": {
749
+ "text": "string"
750
+ },
751
+ "description": "Name of the person or system that wrote the comment, rendered as visible text.",
752
+ "fieldName": "author",
753
+ "required": true
754
+ },
755
+ {
756
+ "name": "timestamp",
757
+ "type": {
758
+ "text": "Date | string | undefined | undefined"
759
+ },
760
+ "description": "Instant the comment was posted, rendered through a composed Time.",
761
+ "default": "undefined",
762
+ "fieldName": "timestamp"
763
+ },
764
+ {
765
+ "name": "edited",
766
+ "type": {
767
+ "text": "boolean"
768
+ },
769
+ "default": "false",
770
+ "description": "Marks the comment as edited since it was first posted.",
771
+ "fieldName": "edited"
772
+ },
773
+ {
774
+ "name": "edited-label",
775
+ "type": {
776
+ "text": "string"
777
+ },
778
+ "default": "'Edited'",
779
+ "description": "Text of the edited indicator, shown only when `edited` is set.",
780
+ "fieldName": "editedLabel"
781
+ }
782
+ ],
783
+ "superclass": {
784
+ "name": "LitElement",
785
+ "package": "lit"
786
+ },
787
+ "tagName": "skdx-comment",
788
+ "customElement": true
789
+ }
790
+ ],
791
+ "exports": [
792
+ {
793
+ "kind": "js",
794
+ "name": "SkdxComment",
795
+ "declaration": {
796
+ "name": "SkdxComment",
797
+ "module": "src/comment/Comment.ts"
798
+ }
799
+ },
800
+ {
801
+ "kind": "custom-element-definition",
802
+ "name": "skdx-comment",
803
+ "declaration": {
804
+ "name": "SkdxComment",
805
+ "module": "src/comment/Comment.ts"
806
+ }
807
+ }
808
+ ]
809
+ },
810
+ {
811
+ "kind": "javascript-module",
812
+ "path": "src/comment/index.ts",
813
+ "declarations": [],
814
+ "exports": [
815
+ {
816
+ "kind": "js",
817
+ "name": "SkdxComment",
818
+ "declaration": {
819
+ "name": "SkdxComment",
820
+ "module": "./Comment"
821
+ }
822
+ }
823
+ ]
824
+ },
825
+ {
826
+ "kind": "javascript-module",
827
+ "path": "src/chat-message/ChatMessage.ts",
828
+ "declarations": [
829
+ {
830
+ "kind": "class",
831
+ "description": "One message in a conversation — assistant, support agent, human or system —\nwith an author, avatar, timestamp, delivery status, content, attachments,\nactions and a footer, composing Time; the block parses nothing.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-chat-message` on the host, then `__avatar`, `__main`,\n`__header`, `__author`, `__time`, `__status`, `__content`, `__attachments`,\n`__footer` and `__actions`. `data-sender` and `data-status` sit on the host\nfor the skin to read.",
832
+ "name": "SkdxChatMessage",
833
+ "slots": [
834
+ {
835
+ "description": "The message content: markdown output, code, citations or tool results.",
836
+ "name": ""
837
+ },
838
+ {
839
+ "description": "Decorative avatar rendered beside the message, always `aria-hidden`.",
840
+ "name": "avatar"
841
+ },
842
+ {
543
843
  "description": "Files, links or previews attached to the message, below the content.",
544
844
  "name": "attachments"
545
845
  },
@@ -704,199 +1004,45 @@
704
1004
  },
705
1005
  {
706
1006
  "kind": "javascript-module",
707
- "path": "src/comment-thread/CommentThread.ts",
1007
+ "path": "src/conversation-list/ConversationList.ts",
708
1008
  "declarations": [
709
1009
  {
710
1010
  "kind": "class",
711
- "description": "A root comment with its replies, indented one level, collapsible with the\nconsumer's own labels, plus regions for a load-more control and a composer.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-comment-thread` on the host, then `__comment`, `__toggle`,\n`__replies`, `__load-more` and `__composer`. `data-state` on the host reads\n`expanded` or `collapsed`.",
712
- "name": "SkdxCommentThread",
713
- "slots": [
714
- {
715
- "description": "The root comment this thread replies to.",
716
- "name": ""
717
- },
718
- {
719
- "description": "The reply comments, indented one level below the root comment.",
720
- "name": "replies"
721
- },
722
- {
723
- "description": "Control that requests more replies, below the replies region.",
724
- "name": "load-more"
725
- },
726
- {
727
- "description": "Reply composer rendered at the end of the thread.",
728
- "name": "composer"
729
- }
730
- ],
1011
+ "description": "Conversation navigation block: a single-select listbox of threads with a\ntitle, preview, relative timestamp, unread mark and badge, plus grouping and\nits own loading and empty states. It routes nowhere — it reports the chosen\nconversation and the consumer navigates.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-conversation-list` on the host, then `__loading`, `__empty`,\n`__list`, `__group`, `__group-label`, `__item`, `__leading`, `__body`,\n`__title`, `__preview`, `__meta`, `__time` and `__badge`. `data-unread` sits\non a row that has not been read.",
1012
+ "name": "SkdxConversationList",
731
1013
  "members": [
732
1014
  {
733
1015
  "kind": "field",
734
- "name": "expanded",
1016
+ "name": "items",
735
1017
  "type": {
736
- "text": "boolean | undefined | undefined"
1018
+ "text": "readonly SkdxConversationListItem[]"
737
1019
  },
738
- "description": "Whether the replies are shown, for controlled usage paired with `expanded-change`.",
739
- "default": "undefined",
740
- "attribute": "expanded"
1020
+ "description": "The conversations to render, in order, each one a selectable option keyed by its id.",
1021
+ "required": true
741
1022
  },
742
1023
  {
743
1024
  "kind": "field",
744
- "name": "defaultExpanded",
1025
+ "name": "value",
745
1026
  "type": {
746
- "text": "boolean"
1027
+ "text": "string | undefined | undefined"
747
1028
  },
748
- "default": "true",
749
- "description": "Whether the replies start shown, used only while uncontrolled.",
750
- "attribute": "default-expanded"
1029
+ "description": "Selected conversation's id, for controlled usage paired with `value-change`.",
1030
+ "default": "undefined",
1031
+ "attribute": "value"
751
1032
  },
752
1033
  {
753
1034
  "kind": "field",
754
- "name": "showRepliesLabel",
1035
+ "name": "defaultValue",
755
1036
  "type": {
756
1037
  "text": "string | undefined | undefined"
757
1038
  },
758
- "description": "Text of the toggle button while the replies are hidden; a toggle only renders when this is given.",
1039
+ "description": "Conversation selected on first render, used only while uncontrolled.",
759
1040
  "default": "undefined",
760
- "attribute": "show-replies-label"
1041
+ "attribute": "default-value"
761
1042
  },
762
1043
  {
763
1044
  "kind": "field",
764
- "name": "hideRepliesLabel",
765
- "type": {
766
- "text": "string | undefined | undefined"
767
- },
768
- "description": "Text of the toggle button while the replies are shown.",
769
- "default": "undefined",
770
- "attribute": "hide-replies-label"
771
- }
772
- ],
773
- "events": [
774
- {
775
- "description": "Fires with the new expanded state whenever the replies toggle is activated.",
776
- "name": "expanded-change"
777
- }
778
- ],
779
- "attributes": [
780
- {
781
- "name": "expanded",
782
- "type": {
783
- "text": "boolean | undefined | undefined"
784
- },
785
- "description": "Whether the replies are shown, for controlled usage paired with `expanded-change`.",
786
- "default": "undefined",
787
- "fieldName": "expanded"
788
- },
789
- {
790
- "name": "default-expanded",
791
- "type": {
792
- "text": "boolean"
793
- },
794
- "default": "true",
795
- "description": "Whether the replies start shown, used only while uncontrolled.",
796
- "fieldName": "defaultExpanded"
797
- },
798
- {
799
- "name": "show-replies-label",
800
- "type": {
801
- "text": "string | undefined | undefined"
802
- },
803
- "description": "Text of the toggle button while the replies are hidden; a toggle only renders when this is given.",
804
- "default": "undefined",
805
- "fieldName": "showRepliesLabel"
806
- },
807
- {
808
- "name": "hide-replies-label",
809
- "type": {
810
- "text": "string | undefined | undefined"
811
- },
812
- "description": "Text of the toggle button while the replies are shown.",
813
- "default": "undefined",
814
- "fieldName": "hideRepliesLabel"
815
- }
816
- ],
817
- "superclass": {
818
- "name": "LitElement",
819
- "package": "lit"
820
- },
821
- "tagName": "skdx-comment-thread",
822
- "customElement": true
823
- }
824
- ],
825
- "exports": [
826
- {
827
- "kind": "js",
828
- "name": "SkdxCommentThread",
829
- "declaration": {
830
- "name": "SkdxCommentThread",
831
- "module": "src/comment-thread/CommentThread.ts"
832
- }
833
- },
834
- {
835
- "kind": "custom-element-definition",
836
- "name": "skdx-comment-thread",
837
- "declaration": {
838
- "name": "SkdxCommentThread",
839
- "module": "src/comment-thread/CommentThread.ts"
840
- }
841
- }
842
- ]
843
- },
844
- {
845
- "kind": "javascript-module",
846
- "path": "src/comment-thread/index.ts",
847
- "declarations": [],
848
- "exports": [
849
- {
850
- "kind": "js",
851
- "name": "SkdxCommentThread",
852
- "declaration": {
853
- "name": "SkdxCommentThread",
854
- "module": "./CommentThread"
855
- }
856
- }
857
- ]
858
- },
859
- {
860
- "kind": "javascript-module",
861
- "path": "src/conversation-list/ConversationList.ts",
862
- "declarations": [
863
- {
864
- "kind": "class",
865
- "description": "Conversation navigation block: a single-select listbox of threads with a\ntitle, preview, relative timestamp, unread mark and badge, plus grouping and\nits own loading and empty states. It routes nowhere — it reports the chosen\nconversation and the consumer navigates.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-conversation-list` on the host, then `__loading`, `__empty`,\n`__list`, `__group`, `__group-label`, `__item`, `__leading`, `__body`,\n`__title`, `__preview`, `__meta`, `__time` and `__badge`. `data-unread` sits\non a row that has not been read.",
866
- "name": "SkdxConversationList",
867
- "members": [
868
- {
869
- "kind": "field",
870
- "name": "items",
871
- "type": {
872
- "text": "readonly SkdxConversationListItem[]"
873
- },
874
- "description": "The conversations to render, in order, each one a selectable option keyed by its id.",
875
- "required": true
876
- },
877
- {
878
- "kind": "field",
879
- "name": "value",
880
- "type": {
881
- "text": "string | undefined | undefined"
882
- },
883
- "description": "Selected conversation's id, for controlled usage paired with `value-change`.",
884
- "default": "undefined",
885
- "attribute": "value"
886
- },
887
- {
888
- "kind": "field",
889
- "name": "defaultValue",
890
- "type": {
891
- "text": "string | undefined | undefined"
892
- },
893
- "description": "Conversation selected on first render, used only while uncontrolled.",
894
- "default": "undefined",
895
- "attribute": "default-value"
896
- },
897
- {
898
- "kind": "field",
899
- "name": "label",
1045
+ "name": "label",
900
1046
  "type": {
901
1047
  "text": "string"
902
1048
  },
@@ -1094,210 +1240,174 @@
1094
1240
  },
1095
1241
  {
1096
1242
  "kind": "javascript-module",
1097
- "path": "src/dashboard-layout/DashboardLayout.ts",
1243
+ "path": "src/comment-thread/CommentThread.ts",
1098
1244
  "declarations": [
1099
1245
  {
1100
1246
  "kind": "class",
1101
- "description": "Application shell block: an app bar, a collapsible side navigation and the content region.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-dashboard-layout` on the host, then `__app-bar`,\n`__nav-toggle`, `__branding`, `__title`, `__actions`, `__body`, `__nav`,\n`__nav-list`, `__nav-item`, `__nav-header`, `__nav-divider` and `__content`.\n`data-nav-open` sits on the host while the navigation is shown.",
1102
- "name": "SkdxDashboardLayout",
1247
+ "description": "A root comment with its replies, indented one level, collapsible with the\nconsumer's own labels, plus regions for a load-more control and a composer.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-comment-thread` on the host, then `__comment`, `__toggle`,\n`__replies`, `__load-more` and `__composer`. `data-state` on the host reads\n`expanded` or `collapsed`.",
1248
+ "name": "SkdxCommentThread",
1103
1249
  "slots": [
1104
1250
  {
1105
- "description": "The page content rendered inside the `<main>` region.",
1251
+ "description": "The root comment this thread replies to.",
1106
1252
  "name": ""
1107
1253
  },
1108
1254
  {
1109
- "description": "Logo or product mark at the start of the app bar.",
1110
- "name": "branding"
1255
+ "description": "The reply comments, indented one level below the root comment.",
1256
+ "name": "replies"
1111
1257
  },
1112
1258
  {
1113
- "description": "Controls at the end of the app bar.",
1114
- "name": "actions"
1259
+ "description": "Control that requests more replies, below the replies region.",
1260
+ "name": "load-more"
1261
+ },
1262
+ {
1263
+ "description": "Reply composer rendered at the end of the thread.",
1264
+ "name": "composer"
1115
1265
  }
1116
1266
  ],
1117
1267
  "members": [
1118
1268
  {
1119
1269
  "kind": "field",
1120
- "name": "title",
1121
- "type": {
1122
- "text": "string"
1123
- },
1124
- "default": "''",
1125
- "description": "Application title shown in the app bar after the branding, shadowing the native tooltip attribute.",
1126
- "attribute": "title"
1127
- },
1128
- {
1129
- "kind": "field",
1130
- "name": "navigation",
1131
- "type": {
1132
- "text": "readonly SkdxDashboardNavigationItem[]"
1133
- },
1134
- "description": "The side navigation, one entry per row, nested through each entry's `children`.",
1135
- "required": true
1136
- },
1137
- {
1138
- "kind": "field",
1139
- "name": "navOpen",
1270
+ "name": "expanded",
1140
1271
  "type": {
1141
- "text": "boolean | undefined"
1272
+ "text": "boolean | undefined | undefined"
1142
1273
  },
1143
- "description": "Whether the side navigation is shown, for controlled usage.",
1274
+ "description": "Whether the replies are shown, for controlled usage paired with `expanded-change`.",
1144
1275
  "default": "undefined",
1145
- "attribute": "nav-open"
1276
+ "attribute": "expanded"
1146
1277
  },
1147
1278
  {
1148
1279
  "kind": "field",
1149
- "name": "defaultNavOpen",
1280
+ "name": "defaultExpanded",
1150
1281
  "type": {
1151
1282
  "text": "boolean"
1152
1283
  },
1153
1284
  "default": "true",
1154
- "description": "Whether the side navigation starts shown, for uncontrolled usage.",
1155
- "attribute": "default-nav-open"
1285
+ "description": "Whether the replies start shown, used only while uncontrolled.",
1286
+ "attribute": "default-expanded"
1156
1287
  },
1157
1288
  {
1158
1289
  "kind": "field",
1159
- "name": "navLabel",
1290
+ "name": "showRepliesLabel",
1160
1291
  "type": {
1161
- "text": "string"
1292
+ "text": "string | undefined | undefined"
1162
1293
  },
1163
- "default": "'Main navigation'",
1164
- "description": "Accessible name of the side navigation landmark.",
1165
- "attribute": "nav-label"
1294
+ "description": "Text of the toggle button while the replies are hidden; a toggle only renders when this is given.",
1295
+ "default": "undefined",
1296
+ "attribute": "show-replies-label"
1166
1297
  },
1167
1298
  {
1168
1299
  "kind": "field",
1169
- "name": "navToggleLabel",
1300
+ "name": "hideRepliesLabel",
1170
1301
  "type": {
1171
- "text": "string"
1302
+ "text": "string | undefined | undefined"
1172
1303
  },
1173
- "default": "'Toggle navigation'",
1174
- "description": "Accessible name of the icon-only button that shows and hides the navigation.",
1175
- "attribute": "nav-toggle-label"
1304
+ "description": "Text of the toggle button while the replies are shown.",
1305
+ "default": "undefined",
1306
+ "attribute": "hide-replies-label"
1176
1307
  }
1177
1308
  ],
1178
1309
  "events": [
1179
1310
  {
1180
- "description": "Fires with the new open state whenever the navigation toggle is activated.",
1181
- "name": "nav-open-change"
1311
+ "description": "Fires with the new expanded state whenever the replies toggle is activated.",
1312
+ "name": "expanded-change"
1182
1313
  }
1183
1314
  ],
1184
1315
  "attributes": [
1185
1316
  {
1186
- "name": "title",
1187
- "type": {
1188
- "text": "string"
1189
- },
1190
- "default": "''",
1191
- "description": "Application title shown in the app bar after the branding, shadowing the native tooltip attribute.",
1192
- "fieldName": "title"
1193
- },
1194
- {
1195
- "name": "nav-open",
1317
+ "name": "expanded",
1196
1318
  "type": {
1197
- "text": "boolean | undefined"
1319
+ "text": "boolean | undefined | undefined"
1198
1320
  },
1199
- "description": "Whether the side navigation is shown, for controlled usage.",
1321
+ "description": "Whether the replies are shown, for controlled usage paired with `expanded-change`.",
1200
1322
  "default": "undefined",
1201
- "fieldName": "navOpen"
1323
+ "fieldName": "expanded"
1202
1324
  },
1203
1325
  {
1204
- "name": "default-nav-open",
1326
+ "name": "default-expanded",
1205
1327
  "type": {
1206
1328
  "text": "boolean"
1207
1329
  },
1208
1330
  "default": "true",
1209
- "description": "Whether the side navigation starts shown, for uncontrolled usage.",
1210
- "fieldName": "defaultNavOpen"
1331
+ "description": "Whether the replies start shown, used only while uncontrolled.",
1332
+ "fieldName": "defaultExpanded"
1211
1333
  },
1212
1334
  {
1213
- "name": "nav-label",
1335
+ "name": "show-replies-label",
1214
1336
  "type": {
1215
- "text": "string"
1337
+ "text": "string | undefined | undefined"
1216
1338
  },
1217
- "default": "'Main navigation'",
1218
- "description": "Accessible name of the side navigation landmark.",
1219
- "fieldName": "navLabel"
1339
+ "description": "Text of the toggle button while the replies are hidden; a toggle only renders when this is given.",
1340
+ "default": "undefined",
1341
+ "fieldName": "showRepliesLabel"
1220
1342
  },
1221
1343
  {
1222
- "name": "nav-toggle-label",
1344
+ "name": "hide-replies-label",
1223
1345
  "type": {
1224
- "text": "string"
1346
+ "text": "string | undefined | undefined"
1225
1347
  },
1226
- "default": "'Toggle navigation'",
1227
- "description": "Accessible name of the icon-only button that shows and hides the navigation.",
1228
- "fieldName": "navToggleLabel"
1348
+ "description": "Text of the toggle button while the replies are shown.",
1349
+ "default": "undefined",
1350
+ "fieldName": "hideRepliesLabel"
1229
1351
  }
1230
1352
  ],
1231
1353
  "superclass": {
1232
1354
  "name": "LitElement",
1233
1355
  "package": "lit"
1234
1356
  },
1235
- "tagName": "skdx-dashboard-layout",
1357
+ "tagName": "skdx-comment-thread",
1236
1358
  "customElement": true
1237
1359
  }
1238
1360
  ],
1239
1361
  "exports": [
1240
1362
  {
1241
1363
  "kind": "js",
1242
- "name": "SkdxDashboardLayout",
1364
+ "name": "SkdxCommentThread",
1243
1365
  "declaration": {
1244
- "name": "SkdxDashboardLayout",
1245
- "module": "src/dashboard-layout/DashboardLayout.ts"
1366
+ "name": "SkdxCommentThread",
1367
+ "module": "src/comment-thread/CommentThread.ts"
1246
1368
  }
1247
1369
  },
1248
1370
  {
1249
1371
  "kind": "custom-element-definition",
1250
- "name": "skdx-dashboard-layout",
1372
+ "name": "skdx-comment-thread",
1251
1373
  "declaration": {
1252
- "name": "SkdxDashboardLayout",
1253
- "module": "src/dashboard-layout/DashboardLayout.ts"
1374
+ "name": "SkdxCommentThread",
1375
+ "module": "src/comment-thread/CommentThread.ts"
1254
1376
  }
1255
1377
  }
1256
1378
  ]
1257
1379
  },
1258
1380
  {
1259
1381
  "kind": "javascript-module",
1260
- "path": "src/dashboard-layout/index.ts",
1382
+ "path": "src/comment-thread/index.ts",
1261
1383
  "declarations": [],
1262
1384
  "exports": [
1263
1385
  {
1264
1386
  "kind": "js",
1265
- "name": "SkdxDashboardLayout",
1266
- "declaration": {
1267
- "name": "SkdxDashboardLayout",
1268
- "module": "./DashboardLayout"
1269
- }
1270
- },
1271
- {
1272
- "kind": "js",
1273
- "name": "SkdxDashboardNavigationItem",
1387
+ "name": "SkdxCommentThread",
1274
1388
  "declaration": {
1275
- "name": "SkdxDashboardNavigationItem",
1276
- "module": "./DashboardLayout"
1389
+ "name": "SkdxCommentThread",
1390
+ "module": "./CommentThread"
1277
1391
  }
1278
1392
  }
1279
1393
  ]
1280
1394
  },
1281
1395
  {
1282
1396
  "kind": "javascript-module",
1283
- "path": "src/empty-state/EmptyState.ts",
1397
+ "path": "src/forgot-password-page/ForgotPasswordPage.ts",
1284
1398
  "declarations": [
1285
1399
  {
1286
1400
  "kind": "class",
1287
- "description": "Placeholder block for a region with nothing to show no content yet, no\nresults, first use, or disconnected — composing a Heading, a Text\ndescription and consumer-supplied icon and actions.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-empty-state` on the host, then `__icon`, `__title`,\n`__description`, `__content` and `__actions`. `data-size` and `data-align`\nsit on the host for the skin to read.",
1288
- "name": "SkdxEmptyState",
1401
+ "description": "Forgot-password block: a description, one email field and a submit button,\nreplaced entirely by a success alert once the request is accepted.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-forgot-password-page` on the host, then `__panel`,\n`__title`, `__description`, `__error`, `__success`, `__form`, `__field`,\n`__submit` and `__footer`.",
1402
+ "name": "SkdxForgotPasswordPage",
1289
1403
  "slots": [
1290
1404
  {
1291
- "description": "Extra content rendered between the description and the actions region.",
1405
+ "description": "Extra fields rendered inside the form, above the submit button.",
1292
1406
  "name": ""
1293
1407
  },
1294
1408
  {
1295
- "description": "Decorative illustration or glyph rendered above the title.",
1296
- "name": "icon"
1297
- },
1298
- {
1299
- "description": "Primary and secondary controls rendered below the content.",
1300
- "name": "actions"
1409
+ "description": "Navigation below the form, such as a link back to the sign-in page.",
1410
+ "name": "footer"
1301
1411
  }
1302
1412
  ],
1303
1413
  "members": [
@@ -1307,403 +1417,417 @@
1307
1417
  "type": {
1308
1418
  "text": "string"
1309
1419
  },
1310
- "description": "Heading text naming the empty region, rendered into a derived Heading.",
1311
- "attribute": "title",
1312
- "required": true
1420
+ "default": "'Reset your password'",
1421
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
1422
+ "attribute": "heading"
1313
1423
  },
1314
1424
  {
1315
1425
  "kind": "field",
1316
1426
  "name": "description",
1317
1427
  "type": {
1318
- "text": "string | undefined | undefined"
1428
+ "text": "string | undefined"
1319
1429
  },
1320
- "description": "Supporting copy rendered below the title, explaining why the region is empty.",
1430
+ "description": "Supporting copy rendered below the title, explaining what the reset link does.",
1321
1431
  "default": "undefined",
1322
1432
  "attribute": "description"
1323
1433
  },
1324
1434
  {
1325
1435
  "kind": "field",
1326
- "name": "headingLevel",
1436
+ "name": "error",
1327
1437
  "type": {
1328
- "text": "1 | 2 | 3 | 4 | 5 | 6"
1438
+ "text": "string | undefined"
1329
1439
  },
1330
- "default": "3",
1331
- "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding outline.",
1332
- "attribute": "heading-level"
1440
+ "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
1441
+ "default": "undefined",
1442
+ "attribute": "error"
1333
1443
  },
1334
1444
  {
1335
1445
  "kind": "field",
1336
- "name": "size",
1446
+ "name": "success",
1337
1447
  "type": {
1338
- "text": "'sm' | 'md' | 'lg' | (string & {}) | undefined | undefined"
1448
+ "text": "string | undefined"
1339
1449
  },
1340
- "description": "Visual size rung, written to `data-size` on the host; the skin scales the icon, spacing and title by it.",
1450
+ "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
1341
1451
  "default": "undefined",
1342
- "attribute": "size"
1452
+ "attribute": "success"
1343
1453
  },
1344
1454
  {
1345
1455
  "kind": "field",
1346
- "name": "align",
1456
+ "name": "pending",
1347
1457
  "type": {
1348
- "text": "'center' | 'start' | (string & {})"
1458
+ "text": "boolean"
1349
1459
  },
1350
- "default": "'center'",
1351
- "description": "Text and content alignment rung, written to `data-align` on the host.",
1352
- "attribute": "align"
1460
+ "default": "false",
1461
+ "description": "Marks the request in flight, making the submit button busy while the email field stays editable.",
1462
+ "attribute": "pending"
1463
+ },
1464
+ {
1465
+ "kind": "field",
1466
+ "name": "emailLabel",
1467
+ "type": {
1468
+ "text": "string"
1469
+ },
1470
+ "default": "'Email'",
1471
+ "description": "Label of the email field the reset link is requested for.",
1472
+ "attribute": "email-label"
1473
+ },
1474
+ {
1475
+ "kind": "field",
1476
+ "name": "submitLabel",
1477
+ "type": {
1478
+ "text": "string"
1479
+ },
1480
+ "default": "'Send reset link'",
1481
+ "description": "Text of the form's submit button.",
1482
+ "attribute": "submit-label"
1483
+ }
1484
+ ],
1485
+ "events": [
1486
+ {
1487
+ "description": "Fires with `{ email }` when the form submits with an address that passes constraint validation.",
1488
+ "name": "request-reset"
1353
1489
  }
1354
1490
  ],
1355
1491
  "attributes": [
1356
1492
  {
1357
- "name": "title",
1493
+ "name": "heading",
1358
1494
  "type": {
1359
1495
  "text": "string"
1360
1496
  },
1361
- "description": "Heading text naming the empty region, rendered into a derived Heading.",
1362
- "fieldName": "title",
1363
- "required": true
1497
+ "default": "'Reset your password'",
1498
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
1499
+ "fieldName": "title"
1364
1500
  },
1365
1501
  {
1366
1502
  "name": "description",
1367
1503
  "type": {
1368
- "text": "string | undefined | undefined"
1504
+ "text": "string | undefined"
1369
1505
  },
1370
- "description": "Supporting copy rendered below the title, explaining why the region is empty.",
1506
+ "description": "Supporting copy rendered below the title, explaining what the reset link does.",
1371
1507
  "default": "undefined",
1372
1508
  "fieldName": "description"
1373
1509
  },
1374
1510
  {
1375
- "name": "heading-level",
1511
+ "name": "error",
1376
1512
  "type": {
1377
- "text": "1 | 2 | 3 | 4 | 5 | 6"
1513
+ "text": "string | undefined"
1378
1514
  },
1379
- "default": "3",
1380
- "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding outline.",
1381
- "fieldName": "headingLevel"
1515
+ "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
1516
+ "default": "undefined",
1517
+ "fieldName": "error"
1382
1518
  },
1383
1519
  {
1384
- "name": "size",
1520
+ "name": "success",
1385
1521
  "type": {
1386
- "text": "'sm' | 'md' | 'lg' | (string & {}) | undefined | undefined"
1522
+ "text": "string | undefined"
1387
1523
  },
1388
- "description": "Visual size rung, written to `data-size` on the host; the skin scales the icon, spacing and title by it.",
1524
+ "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
1389
1525
  "default": "undefined",
1390
- "fieldName": "size"
1526
+ "fieldName": "success"
1391
1527
  },
1392
1528
  {
1393
- "name": "align",
1529
+ "name": "pending",
1394
1530
  "type": {
1395
- "text": "'center' | 'start' | (string & {})"
1531
+ "text": "boolean"
1396
1532
  },
1397
- "default": "'center'",
1398
- "description": "Text and content alignment rung, written to `data-align` on the host.",
1399
- "fieldName": "align"
1533
+ "default": "false",
1534
+ "description": "Marks the request in flight, making the submit button busy while the email field stays editable.",
1535
+ "fieldName": "pending"
1536
+ },
1537
+ {
1538
+ "name": "email-label",
1539
+ "type": {
1540
+ "text": "string"
1541
+ },
1542
+ "default": "'Email'",
1543
+ "description": "Label of the email field the reset link is requested for.",
1544
+ "fieldName": "emailLabel"
1545
+ },
1546
+ {
1547
+ "name": "submit-label",
1548
+ "type": {
1549
+ "text": "string"
1550
+ },
1551
+ "default": "'Send reset link'",
1552
+ "description": "Text of the form's submit button.",
1553
+ "fieldName": "submitLabel"
1400
1554
  }
1401
1555
  ],
1402
1556
  "superclass": {
1403
1557
  "name": "LitElement",
1404
1558
  "package": "lit"
1405
1559
  },
1406
- "tagName": "skdx-empty-state",
1560
+ "tagName": "skdx-forgot-password-page",
1407
1561
  "customElement": true
1408
1562
  }
1409
1563
  ],
1410
1564
  "exports": [
1411
1565
  {
1412
1566
  "kind": "js",
1413
- "name": "SkdxEmptyState",
1567
+ "name": "SkdxForgotPasswordPage",
1414
1568
  "declaration": {
1415
- "name": "SkdxEmptyState",
1416
- "module": "src/empty-state/EmptyState.ts"
1569
+ "name": "SkdxForgotPasswordPage",
1570
+ "module": "src/forgot-password-page/ForgotPasswordPage.ts"
1417
1571
  }
1418
1572
  },
1419
1573
  {
1420
1574
  "kind": "custom-element-definition",
1421
- "name": "skdx-empty-state",
1575
+ "name": "skdx-forgot-password-page",
1422
1576
  "declaration": {
1423
- "name": "SkdxEmptyState",
1424
- "module": "src/empty-state/EmptyState.ts"
1577
+ "name": "SkdxForgotPasswordPage",
1578
+ "module": "src/forgot-password-page/ForgotPasswordPage.ts"
1425
1579
  }
1426
1580
  }
1427
1581
  ]
1428
1582
  },
1429
1583
  {
1430
1584
  "kind": "javascript-module",
1431
- "path": "src/empty-state/index.ts",
1585
+ "path": "src/forgot-password-page/index.ts",
1432
1586
  "declarations": [],
1433
1587
  "exports": [
1434
1588
  {
1435
1589
  "kind": "js",
1436
- "name": "SkdxEmptyState",
1590
+ "name": "SkdxForgotPasswordPage",
1437
1591
  "declaration": {
1438
- "name": "SkdxEmptyState",
1439
- "module": "./EmptyState"
1592
+ "name": "SkdxForgotPasswordPage",
1593
+ "module": "./ForgotPasswordPage"
1594
+ }
1595
+ },
1596
+ {
1597
+ "kind": "js",
1598
+ "name": "SkdxForgotPasswordDetail",
1599
+ "declaration": {
1600
+ "name": "SkdxForgotPasswordDetail",
1601
+ "module": "./ForgotPasswordPage"
1440
1602
  }
1441
1603
  }
1442
1604
  ]
1443
1605
  },
1444
1606
  {
1445
1607
  "kind": "javascript-module",
1446
- "path": "src/filter-bar/FilterBar.ts",
1608
+ "path": "src/dashboard-layout/DashboardLayout.ts",
1447
1609
  "declarations": [
1448
1610
  {
1449
1611
  "kind": "class",
1450
- "description": "Filtering surface above a table, list, card grid or report: a search field,\nthe consumer's filter controls, the applied filters as removable tags, and a\nclear action. Composes TextField, TagGroup and Button.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-filter-bar` on the host, then `__search`, `__filters`,\n`__actions`, `__active`, `__tags` and `__clear`.",
1451
- "name": "SkdxFilterBar",
1612
+ "description": "Application shell block: an app bar, a collapsible side navigation and the content region.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-dashboard-layout` on the host, then `__app-bar`,\n`__nav-toggle`, `__branding`, `__title`, `__actions`, `__body`, `__nav`,\n`__nav-list`, `__nav-item`, `__nav-header`, `__nav-divider` and `__content`.\n`data-nav-open` sits on the host while the navigation is shown.",
1613
+ "name": "SkdxDashboardLayout",
1452
1614
  "slots": [
1453
1615
  {
1454
- "description": "The consumer's filter controls, laid out in the filters region.",
1616
+ "description": "The page content rendered inside the `<main>` region.",
1455
1617
  "name": ""
1456
1618
  },
1457
1619
  {
1458
- "description": "Controls rendered at the end of the bar, such as a \"Save view\" button.",
1620
+ "description": "Logo or product mark at the start of the app bar.",
1621
+ "name": "branding"
1622
+ },
1623
+ {
1624
+ "description": "Controls at the end of the app bar.",
1459
1625
  "name": "actions"
1460
1626
  }
1461
1627
  ],
1462
1628
  "members": [
1463
1629
  {
1464
1630
  "kind": "field",
1465
- "name": "label",
1631
+ "name": "title",
1466
1632
  "type": {
1467
1633
  "text": "string"
1468
1634
  },
1469
- "default": "'Filters'",
1470
- "description": "Accessible name of the root region, written to `aria-label`.",
1471
- "attribute": "label"
1635
+ "default": "''",
1636
+ "description": "Application title shown in the app bar after the branding. The JavaScript property is `title`.",
1637
+ "attribute": "heading"
1472
1638
  },
1473
1639
  {
1474
1640
  "kind": "field",
1475
- "name": "searchLabel",
1641
+ "name": "navigation",
1476
1642
  "type": {
1477
- "text": "string | undefined | undefined"
1643
+ "text": "readonly SkdxDashboardNavigationItem[]"
1478
1644
  },
1479
- "description": "Accessible name of the search field; providing it renders the search region.",
1480
- "default": "undefined",
1481
- "attribute": "search-label"
1645
+ "description": "The side navigation, one entry per row, nested through each entry's `children`.",
1646
+ "required": true
1482
1647
  },
1483
1648
  {
1484
1649
  "kind": "field",
1485
- "name": "searchPlaceholder",
1650
+ "name": "contentAs",
1486
1651
  "type": {
1487
- "text": "string | undefined | undefined"
1652
+ "text": "'main' | 'div'"
1488
1653
  },
1489
- "description": "Placeholder shown in the empty search field.",
1490
- "default": "undefined",
1491
- "attribute": "search-placeholder"
1654
+ "default": "'main'",
1655
+ "description": "Content element: use `div` when embedding inside an existing page main landmark.",
1656
+ "attribute": "content-as"
1492
1657
  },
1493
1658
  {
1494
1659
  "kind": "field",
1495
- "name": "searchValue",
1660
+ "name": "navOpen",
1496
1661
  "type": {
1497
- "text": "string | undefined | undefined"
1662
+ "text": "boolean | undefined"
1498
1663
  },
1499
- "description": "Current search text, for controlled usage; pair it with `search-value-change`.",
1664
+ "description": "Whether the side navigation is shown, for controlled usage.",
1500
1665
  "default": "undefined",
1501
- "attribute": "search-value"
1666
+ "attribute": "nav-open"
1502
1667
  },
1503
1668
  {
1504
1669
  "kind": "field",
1505
- "name": "defaultSearchValue",
1670
+ "name": "defaultNavOpen",
1506
1671
  "type": {
1507
- "text": "string"
1672
+ "text": "boolean"
1508
1673
  },
1509
- "default": "''",
1510
- "description": "Initial search text, for uncontrolled usage — seeds the internally tracked value.",
1511
- "attribute": "default-search-value"
1674
+ "default": "true",
1675
+ "description": "Whether the side navigation starts shown, for uncontrolled usage.",
1676
+ "attribute": "default-nav-open"
1512
1677
  },
1513
1678
  {
1514
1679
  "kind": "field",
1515
- "name": "clearSearchLabel",
1680
+ "name": "navLabel",
1516
1681
  "type": {
1517
1682
  "text": "string"
1518
1683
  },
1519
- "default": "'Clear search'",
1520
- "description": "Accessible name of the search field's clear button.",
1521
- "attribute": "clear-search-label"
1684
+ "default": "'Main navigation'",
1685
+ "description": "Accessible name of the side navigation landmark.",
1686
+ "attribute": "nav-label"
1522
1687
  },
1523
1688
  {
1524
1689
  "kind": "field",
1525
- "name": "activeFilters",
1690
+ "name": "navToggleLabel",
1526
1691
  "type": {
1527
- "text": "readonly SkdxFilterBarFilter[] | undefined | undefined"
1692
+ "text": "string"
1528
1693
  },
1529
- "description": "The applied filters, in display order, rendered as removable tags.",
1530
- "default": "undefined"
1531
- },
1532
- {
1533
- "kind": "field",
1534
- "name": "activeFiltersLabel",
1535
- "type": {
1536
- "text": "string"
1537
- },
1538
- "default": "'Active filters'",
1539
- "description": "Accessible name of the active-filters tag list.",
1540
- "attribute": "active-filters-label"
1541
- },
1542
- {
1543
- "kind": "field",
1544
- "name": "clearLabel",
1545
- "type": {
1546
- "text": "string"
1547
- },
1548
- "default": "'Clear filters'",
1549
- "description": "Text rendered on the clear-filters button.",
1550
- "attribute": "clear-label"
1694
+ "default": "'Toggle navigation'",
1695
+ "description": "Accessible name of the icon-only button that shows and hides the navigation.",
1696
+ "attribute": "nav-toggle-label"
1551
1697
  }
1552
1698
  ],
1553
1699
  "events": [
1554
1700
  {
1555
- "description": "Fires with the new text whenever the search field changes, controlled or not.",
1556
- "name": "search-value-change"
1557
- },
1558
- {
1559
- "description": "Fires with the removed filter when its tag's remove control is activated.",
1560
- "name": "remove-filter"
1561
- },
1562
- {
1563
- "description": "Fires when the clear-filters button is activated while filters are shown.",
1564
- "name": "clear"
1701
+ "description": "Fires with the new open state whenever the navigation toggle is activated.",
1702
+ "name": "nav-open-change"
1565
1703
  }
1566
1704
  ],
1567
1705
  "attributes": [
1568
1706
  {
1569
- "name": "label",
1707
+ "name": "heading",
1570
1708
  "type": {
1571
1709
  "text": "string"
1572
1710
  },
1573
- "default": "'Filters'",
1574
- "description": "Accessible name of the root region, written to `aria-label`.",
1575
- "fieldName": "label"
1576
- },
1577
- {
1578
- "name": "search-label",
1579
- "type": {
1580
- "text": "string | undefined | undefined"
1581
- },
1582
- "description": "Accessible name of the search field; providing it renders the search region.",
1583
- "default": "undefined",
1584
- "fieldName": "searchLabel"
1711
+ "default": "''",
1712
+ "description": "Application title shown in the app bar after the branding. The JavaScript property is `title`.",
1713
+ "fieldName": "title"
1585
1714
  },
1586
1715
  {
1587
- "name": "search-placeholder",
1716
+ "name": "content-as",
1588
1717
  "type": {
1589
- "text": "string | undefined | undefined"
1718
+ "text": "'main' | 'div'"
1590
1719
  },
1591
- "description": "Placeholder shown in the empty search field.",
1592
- "default": "undefined",
1593
- "fieldName": "searchPlaceholder"
1720
+ "default": "'main'",
1721
+ "description": "Content element: use `div` when embedding inside an existing page main landmark.",
1722
+ "fieldName": "contentAs"
1594
1723
  },
1595
1724
  {
1596
- "name": "search-value",
1725
+ "name": "nav-open",
1597
1726
  "type": {
1598
- "text": "string | undefined | undefined"
1727
+ "text": "boolean | undefined"
1599
1728
  },
1600
- "description": "Current search text, for controlled usage; pair it with `search-value-change`.",
1729
+ "description": "Whether the side navigation is shown, for controlled usage.",
1601
1730
  "default": "undefined",
1602
- "fieldName": "searchValue"
1603
- },
1604
- {
1605
- "name": "default-search-value",
1606
- "type": {
1607
- "text": "string"
1608
- },
1609
- "default": "''",
1610
- "description": "Initial search text, for uncontrolled usage — seeds the internally tracked value.",
1611
- "fieldName": "defaultSearchValue"
1731
+ "fieldName": "navOpen"
1612
1732
  },
1613
1733
  {
1614
- "name": "clear-search-label",
1734
+ "name": "default-nav-open",
1615
1735
  "type": {
1616
- "text": "string"
1736
+ "text": "boolean"
1617
1737
  },
1618
- "default": "'Clear search'",
1619
- "description": "Accessible name of the search field's clear button.",
1620
- "fieldName": "clearSearchLabel"
1738
+ "default": "true",
1739
+ "description": "Whether the side navigation starts shown, for uncontrolled usage.",
1740
+ "fieldName": "defaultNavOpen"
1621
1741
  },
1622
1742
  {
1623
- "name": "active-filters-label",
1743
+ "name": "nav-label",
1624
1744
  "type": {
1625
1745
  "text": "string"
1626
1746
  },
1627
- "default": "'Active filters'",
1628
- "description": "Accessible name of the active-filters tag list.",
1629
- "fieldName": "activeFiltersLabel"
1747
+ "default": "'Main navigation'",
1748
+ "description": "Accessible name of the side navigation landmark.",
1749
+ "fieldName": "navLabel"
1630
1750
  },
1631
1751
  {
1632
- "name": "clear-label",
1752
+ "name": "nav-toggle-label",
1633
1753
  "type": {
1634
1754
  "text": "string"
1635
1755
  },
1636
- "default": "'Clear filters'",
1637
- "description": "Text rendered on the clear-filters button.",
1638
- "fieldName": "clearLabel"
1756
+ "default": "'Toggle navigation'",
1757
+ "description": "Accessible name of the icon-only button that shows and hides the navigation.",
1758
+ "fieldName": "navToggleLabel"
1639
1759
  }
1640
1760
  ],
1641
1761
  "superclass": {
1642
1762
  "name": "LitElement",
1643
1763
  "package": "lit"
1644
1764
  },
1645
- "tagName": "skdx-filter-bar",
1765
+ "tagName": "skdx-dashboard-layout",
1646
1766
  "customElement": true
1647
1767
  }
1648
1768
  ],
1649
1769
  "exports": [
1650
1770
  {
1651
1771
  "kind": "js",
1652
- "name": "SkdxFilterBar",
1772
+ "name": "SkdxDashboardLayout",
1653
1773
  "declaration": {
1654
- "name": "SkdxFilterBar",
1655
- "module": "src/filter-bar/FilterBar.ts"
1774
+ "name": "SkdxDashboardLayout",
1775
+ "module": "src/dashboard-layout/DashboardLayout.ts"
1656
1776
  }
1657
1777
  },
1658
1778
  {
1659
1779
  "kind": "custom-element-definition",
1660
- "name": "skdx-filter-bar",
1780
+ "name": "skdx-dashboard-layout",
1661
1781
  "declaration": {
1662
- "name": "SkdxFilterBar",
1663
- "module": "src/filter-bar/FilterBar.ts"
1782
+ "name": "SkdxDashboardLayout",
1783
+ "module": "src/dashboard-layout/DashboardLayout.ts"
1664
1784
  }
1665
1785
  }
1666
1786
  ]
1667
1787
  },
1668
1788
  {
1669
1789
  "kind": "javascript-module",
1670
- "path": "src/filter-bar/index.ts",
1790
+ "path": "src/dashboard-layout/index.ts",
1671
1791
  "declarations": [],
1672
1792
  "exports": [
1673
1793
  {
1674
1794
  "kind": "js",
1675
- "name": "SkdxFilterBar",
1795
+ "name": "SkdxDashboardLayout",
1676
1796
  "declaration": {
1677
- "name": "SkdxFilterBar",
1678
- "module": "./FilterBar"
1797
+ "name": "SkdxDashboardLayout",
1798
+ "module": "./DashboardLayout"
1679
1799
  }
1680
1800
  },
1681
1801
  {
1682
1802
  "kind": "js",
1683
- "name": "SkdxFilterBarFilter",
1803
+ "name": "SkdxDashboardNavigationItem",
1684
1804
  "declaration": {
1685
- "name": "SkdxFilterBarFilter",
1686
- "module": "./FilterBar"
1805
+ "name": "SkdxDashboardNavigationItem",
1806
+ "module": "./DashboardLayout"
1687
1807
  }
1688
1808
  }
1689
1809
  ]
1690
1810
  },
1691
1811
  {
1692
1812
  "kind": "javascript-module",
1693
- "path": "src/forgot-password-page/ForgotPasswordPage.ts",
1813
+ "path": "src/empty-state/EmptyState.ts",
1694
1814
  "declarations": [
1695
1815
  {
1696
1816
  "kind": "class",
1697
- "description": "Forgot-password block: a description, one email field and a submit button,\nreplaced entirely by a success alert once the request is accepted.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-forgot-password-page` on the host, then `__panel`,\n`__title`, `__description`, `__error`, `__success`, `__form`, `__field`,\n`__submit` and `__footer`.",
1698
- "name": "SkdxForgotPasswordPage",
1817
+ "description": "Placeholder block for a region with nothing to show — no content yet, no\nresults, first use, or disconnected composing a Heading, a Text\ndescription and consumer-supplied icon and actions.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-empty-state` on the host, then `__icon`, `__title`,\n`__description`, `__content` and `__actions`. `data-size` and `data-align`\nsit on the host for the skin to read.",
1818
+ "name": "SkdxEmptyState",
1699
1819
  "slots": [
1700
1820
  {
1701
- "description": "Extra fields rendered inside the form, above the submit button.",
1821
+ "description": "Extra content rendered between the description and the actions region.",
1702
1822
  "name": ""
1703
1823
  },
1704
1824
  {
1705
- "description": "Navigation below the form, such as a link back to the sign-in page.",
1706
- "name": "footer"
1825
+ "description": "Decorative illustration or glyph rendered above the title.",
1826
+ "name": "icon"
1827
+ },
1828
+ {
1829
+ "description": "Primary and secondary controls rendered below the content.",
1830
+ "name": "actions"
1707
1831
  }
1708
1832
  ],
1709
1833
  "members": [
@@ -1713,628 +1837,523 @@
1713
1837
  "type": {
1714
1838
  "text": "string"
1715
1839
  },
1716
- "default": "'Reset your password'",
1717
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
1718
- "attribute": "title"
1840
+ "description": "Heading text naming the empty region, rendered into a derived Heading. The JavaScript property is `title`.",
1841
+ "attribute": "heading",
1842
+ "required": true
1719
1843
  },
1720
1844
  {
1721
1845
  "kind": "field",
1722
1846
  "name": "description",
1723
1847
  "type": {
1724
- "text": "string | undefined"
1848
+ "text": "string | undefined | undefined"
1725
1849
  },
1726
- "description": "Supporting copy rendered below the title, explaining what the reset link does.",
1850
+ "description": "Supporting copy rendered below the title, explaining why the region is empty.",
1727
1851
  "default": "undefined",
1728
1852
  "attribute": "description"
1729
1853
  },
1730
1854
  {
1731
1855
  "kind": "field",
1732
- "name": "error",
1856
+ "name": "headingLevel",
1733
1857
  "type": {
1734
- "text": "string | undefined"
1858
+ "text": "1 | 2 | 3 | 4 | 5 | 6"
1735
1859
  },
1736
- "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
1737
- "default": "undefined",
1738
- "attribute": "error"
1860
+ "default": "3",
1861
+ "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding outline.",
1862
+ "attribute": "heading-level"
1739
1863
  },
1740
1864
  {
1741
1865
  "kind": "field",
1742
- "name": "success",
1866
+ "name": "size",
1743
1867
  "type": {
1744
- "text": "string | undefined"
1868
+ "text": "'sm' | 'md' | 'lg' | (string & {}) | undefined | undefined"
1745
1869
  },
1746
- "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
1870
+ "description": "Visual size rung, written to `data-size` on the host; the skin scales the icon, spacing and title by it.",
1747
1871
  "default": "undefined",
1748
- "attribute": "success"
1749
- },
1750
- {
1751
- "kind": "field",
1752
- "name": "pending",
1753
- "type": {
1754
- "text": "boolean"
1755
- },
1756
- "default": "false",
1757
- "description": "Marks the request in flight, making the submit button busy while the email field stays editable.",
1758
- "attribute": "pending"
1759
- },
1760
- {
1761
- "kind": "field",
1762
- "name": "emailLabel",
1763
- "type": {
1764
- "text": "string"
1765
- },
1766
- "default": "'Email'",
1767
- "description": "Label of the email field the reset link is requested for.",
1768
- "attribute": "email-label"
1872
+ "attribute": "size"
1769
1873
  },
1770
1874
  {
1771
1875
  "kind": "field",
1772
- "name": "submitLabel",
1876
+ "name": "align",
1773
1877
  "type": {
1774
- "text": "string"
1878
+ "text": "'center' | 'start' | (string & {})"
1775
1879
  },
1776
- "default": "'Send reset link'",
1777
- "description": "Text of the form's submit button.",
1778
- "attribute": "submit-label"
1779
- }
1780
- ],
1781
- "events": [
1782
- {
1783
- "description": "Fires with `{ email }` when the form submits with an address that passes constraint validation.",
1784
- "name": "request-reset"
1880
+ "default": "'center'",
1881
+ "description": "Text and content alignment rung, written to `data-align` on the host.",
1882
+ "attribute": "align"
1785
1883
  }
1786
1884
  ],
1787
1885
  "attributes": [
1788
1886
  {
1789
- "name": "title",
1887
+ "name": "heading",
1790
1888
  "type": {
1791
1889
  "text": "string"
1792
1890
  },
1793
- "default": "'Reset your password'",
1794
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
1795
- "fieldName": "title"
1891
+ "description": "Heading text naming the empty region, rendered into a derived Heading. The JavaScript property is `title`.",
1892
+ "fieldName": "title",
1893
+ "required": true
1796
1894
  },
1797
1895
  {
1798
1896
  "name": "description",
1799
1897
  "type": {
1800
- "text": "string | undefined"
1898
+ "text": "string | undefined | undefined"
1801
1899
  },
1802
- "description": "Supporting copy rendered below the title, explaining what the reset link does.",
1900
+ "description": "Supporting copy rendered below the title, explaining why the region is empty.",
1803
1901
  "default": "undefined",
1804
1902
  "fieldName": "description"
1805
1903
  },
1806
1904
  {
1807
- "name": "error",
1905
+ "name": "heading-level",
1808
1906
  "type": {
1809
- "text": "string | undefined"
1907
+ "text": "1 | 2 | 3 | 4 | 5 | 6"
1810
1908
  },
1811
- "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
1812
- "default": "undefined",
1813
- "fieldName": "error"
1909
+ "default": "3",
1910
+ "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding outline.",
1911
+ "fieldName": "headingLevel"
1814
1912
  },
1815
1913
  {
1816
- "name": "success",
1914
+ "name": "size",
1817
1915
  "type": {
1818
- "text": "string | undefined"
1916
+ "text": "'sm' | 'md' | 'lg' | (string & {}) | undefined | undefined"
1819
1917
  },
1820
- "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
1918
+ "description": "Visual size rung, written to `data-size` on the host; the skin scales the icon, spacing and title by it.",
1821
1919
  "default": "undefined",
1822
- "fieldName": "success"
1823
- },
1824
- {
1825
- "name": "pending",
1826
- "type": {
1827
- "text": "boolean"
1828
- },
1829
- "default": "false",
1830
- "description": "Marks the request in flight, making the submit button busy while the email field stays editable.",
1831
- "fieldName": "pending"
1832
- },
1833
- {
1834
- "name": "email-label",
1835
- "type": {
1836
- "text": "string"
1837
- },
1838
- "default": "'Email'",
1839
- "description": "Label of the email field the reset link is requested for.",
1840
- "fieldName": "emailLabel"
1920
+ "fieldName": "size"
1841
1921
  },
1842
1922
  {
1843
- "name": "submit-label",
1923
+ "name": "align",
1844
1924
  "type": {
1845
- "text": "string"
1925
+ "text": "'center' | 'start' | (string & {})"
1846
1926
  },
1847
- "default": "'Send reset link'",
1848
- "description": "Text of the form's submit button.",
1849
- "fieldName": "submitLabel"
1927
+ "default": "'center'",
1928
+ "description": "Text and content alignment rung, written to `data-align` on the host.",
1929
+ "fieldName": "align"
1850
1930
  }
1851
1931
  ],
1852
1932
  "superclass": {
1853
1933
  "name": "LitElement",
1854
1934
  "package": "lit"
1855
1935
  },
1856
- "tagName": "skdx-forgot-password-page",
1936
+ "tagName": "skdx-empty-state",
1857
1937
  "customElement": true
1858
1938
  }
1859
1939
  ],
1860
1940
  "exports": [
1861
1941
  {
1862
1942
  "kind": "js",
1863
- "name": "SkdxForgotPasswordPage",
1943
+ "name": "SkdxEmptyState",
1864
1944
  "declaration": {
1865
- "name": "SkdxForgotPasswordPage",
1866
- "module": "src/forgot-password-page/ForgotPasswordPage.ts"
1945
+ "name": "SkdxEmptyState",
1946
+ "module": "src/empty-state/EmptyState.ts"
1867
1947
  }
1868
1948
  },
1869
1949
  {
1870
1950
  "kind": "custom-element-definition",
1871
- "name": "skdx-forgot-password-page",
1951
+ "name": "skdx-empty-state",
1872
1952
  "declaration": {
1873
- "name": "SkdxForgotPasswordPage",
1874
- "module": "src/forgot-password-page/ForgotPasswordPage.ts"
1953
+ "name": "SkdxEmptyState",
1954
+ "module": "src/empty-state/EmptyState.ts"
1875
1955
  }
1876
1956
  }
1877
1957
  ]
1878
1958
  },
1879
1959
  {
1880
1960
  "kind": "javascript-module",
1881
- "path": "src/forgot-password-page/index.ts",
1961
+ "path": "src/empty-state/index.ts",
1882
1962
  "declarations": [],
1883
1963
  "exports": [
1884
1964
  {
1885
1965
  "kind": "js",
1886
- "name": "SkdxForgotPasswordPage",
1887
- "declaration": {
1888
- "name": "SkdxForgotPasswordPage",
1889
- "module": "./ForgotPasswordPage"
1890
- }
1891
- },
1892
- {
1893
- "kind": "js",
1894
- "name": "SkdxForgotPasswordDetail",
1966
+ "name": "SkdxEmptyState",
1895
1967
  "declaration": {
1896
- "name": "SkdxForgotPasswordDetail",
1897
- "module": "./ForgotPasswordPage"
1968
+ "name": "SkdxEmptyState",
1969
+ "module": "./EmptyState"
1898
1970
  }
1899
1971
  }
1900
1972
  ]
1901
1973
  },
1902
1974
  {
1903
1975
  "kind": "javascript-module",
1904
- "path": "src/form-section/FormSection.ts",
1976
+ "path": "src/filter-bar/FilterBar.ts",
1905
1977
  "declarations": [
1906
1978
  {
1907
1979
  "kind": "class",
1908
- "description": "Titled group inside a larger form: a heading, supporting text, the group's\nfields and a footer for the group's own actions, composing Heading and Text\naround consumer-supplied fields.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-form-section` on the host, then `__header`, `__title`,\n`__description`, `__content` and `__footer`. `data-variant` sits on the host\nfor the skin to read.",
1909
- "name": "SkdxFormSection",
1980
+ "description": "Filtering surface above a table, list, card grid or report: a search field,\nthe consumer's filter controls, the applied filters as removable tags, and a\nclear action. Composes TextField, TagGroup and Button.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-filter-bar` on the host, then `__search`, `__filters`,\n`__actions`, `__active`, `__tags` and `__clear`.",
1981
+ "name": "SkdxFilterBar",
1910
1982
  "slots": [
1911
1983
  {
1912
- "description": "The group's fields, rendered into the content region.",
1984
+ "description": "The consumer's filter controls, laid out in the filters region.",
1913
1985
  "name": ""
1914
1986
  },
1915
1987
  {
1916
- "description": "Save, cancel or other controls rendered in the footer below the fields.",
1988
+ "description": "Controls rendered at the end of the bar, such as a \"Save view\" button.",
1917
1989
  "name": "actions"
1918
1990
  }
1919
1991
  ],
1920
1992
  "members": [
1921
1993
  {
1922
1994
  "kind": "field",
1923
- "name": "title",
1995
+ "name": "label",
1924
1996
  "type": {
1925
1997
  "text": "string"
1926
1998
  },
1927
- "description": "Heading text naming the group, rendered into a derived Heading that names the section.",
1928
- "attribute": "title",
1929
- "required": true
1999
+ "default": "'Filters'",
2000
+ "description": "Accessible name of the root region, written to `aria-label`.",
2001
+ "attribute": "label"
1930
2002
  },
1931
2003
  {
1932
2004
  "kind": "field",
1933
- "name": "description",
2005
+ "name": "searchLabel",
1934
2006
  "type": {
1935
2007
  "text": "string | undefined | undefined"
1936
2008
  },
1937
- "description": "Supporting copy rendered below the title, explaining the group's fields.",
2009
+ "description": "Accessible name of the search field; providing it renders the search region.",
1938
2010
  "default": "undefined",
1939
- "attribute": "description"
2011
+ "attribute": "search-label"
1940
2012
  },
1941
2013
  {
1942
2014
  "kind": "field",
1943
- "name": "headingLevel",
2015
+ "name": "searchPlaceholder",
1944
2016
  "type": {
1945
- "text": "1 | 2 | 3 | 4 | 5 | 6"
2017
+ "text": "string | undefined | undefined"
1946
2018
  },
1947
- "default": "2",
1948
- "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding form outline.",
1949
- "attribute": "heading-level"
2019
+ "description": "Placeholder shown in the empty search field.",
2020
+ "default": "undefined",
2021
+ "attribute": "search-placeholder"
1950
2022
  },
1951
2023
  {
1952
2024
  "kind": "field",
1953
- "name": "variant",
2025
+ "name": "searchValue",
1954
2026
  "type": {
1955
- "text": "'bordered' | 'split' | (string & {}) | undefined | undefined"
2027
+ "text": "string | undefined | undefined"
1956
2028
  },
1957
- "description": "Layout rung written to `data-variant`; `bordered` draws a bounded panel and `split` places the header beside the content.",
2029
+ "description": "Current search text, for controlled usage; pair it with `search-value-change`.",
1958
2030
  "default": "undefined",
1959
- "attribute": "variant"
2031
+ "attribute": "search-value"
2032
+ },
2033
+ {
2034
+ "kind": "field",
2035
+ "name": "defaultSearchValue",
2036
+ "type": {
2037
+ "text": "string"
2038
+ },
2039
+ "default": "''",
2040
+ "description": "Initial search text, for uncontrolled usage — seeds the internally tracked value.",
2041
+ "attribute": "default-search-value"
2042
+ },
2043
+ {
2044
+ "kind": "field",
2045
+ "name": "clearSearchLabel",
2046
+ "type": {
2047
+ "text": "string"
2048
+ },
2049
+ "default": "'Clear search'",
2050
+ "description": "Accessible name of the search field's clear button.",
2051
+ "attribute": "clear-search-label"
2052
+ },
2053
+ {
2054
+ "kind": "field",
2055
+ "name": "activeFilters",
2056
+ "type": {
2057
+ "text": "readonly SkdxFilterBarFilter[] | undefined | undefined"
2058
+ },
2059
+ "description": "The applied filters, in display order, rendered as removable tags.",
2060
+ "default": "undefined"
2061
+ },
2062
+ {
2063
+ "kind": "field",
2064
+ "name": "activeFiltersLabel",
2065
+ "type": {
2066
+ "text": "string"
2067
+ },
2068
+ "default": "'Active filters'",
2069
+ "description": "Accessible name of the active-filters tag list.",
2070
+ "attribute": "active-filters-label"
2071
+ },
2072
+ {
2073
+ "kind": "field",
2074
+ "name": "clearLabel",
2075
+ "type": {
2076
+ "text": "string"
2077
+ },
2078
+ "default": "'Clear filters'",
2079
+ "description": "Text rendered on the clear-filters button.",
2080
+ "attribute": "clear-label"
2081
+ }
2082
+ ],
2083
+ "events": [
2084
+ {
2085
+ "description": "Fires with the new text whenever the search field changes, controlled or not.",
2086
+ "name": "search-value-change"
2087
+ },
2088
+ {
2089
+ "description": "Fires with the removed filter when its tag's remove control is activated.",
2090
+ "name": "remove-filter"
2091
+ },
2092
+ {
2093
+ "description": "Fires when the clear-filters button is activated while filters are shown.",
2094
+ "name": "clear"
1960
2095
  }
1961
2096
  ],
1962
2097
  "attributes": [
1963
2098
  {
1964
- "name": "title",
2099
+ "name": "label",
1965
2100
  "type": {
1966
2101
  "text": "string"
1967
2102
  },
1968
- "description": "Heading text naming the group, rendered into a derived Heading that names the section.",
1969
- "fieldName": "title",
1970
- "required": true
2103
+ "default": "'Filters'",
2104
+ "description": "Accessible name of the root region, written to `aria-label`.",
2105
+ "fieldName": "label"
1971
2106
  },
1972
2107
  {
1973
- "name": "description",
2108
+ "name": "search-label",
1974
2109
  "type": {
1975
2110
  "text": "string | undefined | undefined"
1976
2111
  },
1977
- "description": "Supporting copy rendered below the title, explaining the group's fields.",
2112
+ "description": "Accessible name of the search field; providing it renders the search region.",
1978
2113
  "default": "undefined",
1979
- "fieldName": "description"
2114
+ "fieldName": "searchLabel"
1980
2115
  },
1981
2116
  {
1982
- "name": "heading-level",
2117
+ "name": "search-placeholder",
1983
2118
  "type": {
1984
- "text": "1 | 2 | 3 | 4 | 5 | 6"
2119
+ "text": "string | undefined | undefined"
1985
2120
  },
1986
- "default": "2",
1987
- "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding form outline.",
1988
- "fieldName": "headingLevel"
2121
+ "description": "Placeholder shown in the empty search field.",
2122
+ "default": "undefined",
2123
+ "fieldName": "searchPlaceholder"
1989
2124
  },
1990
2125
  {
1991
- "name": "variant",
2126
+ "name": "search-value",
1992
2127
  "type": {
1993
- "text": "'bordered' | 'split' | (string & {}) | undefined | undefined"
2128
+ "text": "string | undefined | undefined"
1994
2129
  },
1995
- "description": "Layout rung written to `data-variant`; `bordered` draws a bounded panel and `split` places the header beside the content.",
2130
+ "description": "Current search text, for controlled usage; pair it with `search-value-change`.",
1996
2131
  "default": "undefined",
1997
- "fieldName": "variant"
2132
+ "fieldName": "searchValue"
2133
+ },
2134
+ {
2135
+ "name": "default-search-value",
2136
+ "type": {
2137
+ "text": "string"
2138
+ },
2139
+ "default": "''",
2140
+ "description": "Initial search text, for uncontrolled usage — seeds the internally tracked value.",
2141
+ "fieldName": "defaultSearchValue"
2142
+ },
2143
+ {
2144
+ "name": "clear-search-label",
2145
+ "type": {
2146
+ "text": "string"
2147
+ },
2148
+ "default": "'Clear search'",
2149
+ "description": "Accessible name of the search field's clear button.",
2150
+ "fieldName": "clearSearchLabel"
2151
+ },
2152
+ {
2153
+ "name": "active-filters-label",
2154
+ "type": {
2155
+ "text": "string"
2156
+ },
2157
+ "default": "'Active filters'",
2158
+ "description": "Accessible name of the active-filters tag list.",
2159
+ "fieldName": "activeFiltersLabel"
2160
+ },
2161
+ {
2162
+ "name": "clear-label",
2163
+ "type": {
2164
+ "text": "string"
2165
+ },
2166
+ "default": "'Clear filters'",
2167
+ "description": "Text rendered on the clear-filters button.",
2168
+ "fieldName": "clearLabel"
1998
2169
  }
1999
2170
  ],
2000
2171
  "superclass": {
2001
2172
  "name": "LitElement",
2002
2173
  "package": "lit"
2003
2174
  },
2004
- "tagName": "skdx-form-section",
2175
+ "tagName": "skdx-filter-bar",
2005
2176
  "customElement": true
2006
2177
  }
2007
2178
  ],
2008
2179
  "exports": [
2009
2180
  {
2010
2181
  "kind": "js",
2011
- "name": "SkdxFormSection",
2182
+ "name": "SkdxFilterBar",
2012
2183
  "declaration": {
2013
- "name": "SkdxFormSection",
2014
- "module": "src/form-section/FormSection.ts"
2184
+ "name": "SkdxFilterBar",
2185
+ "module": "src/filter-bar/FilterBar.ts"
2015
2186
  }
2016
2187
  },
2017
2188
  {
2018
2189
  "kind": "custom-element-definition",
2019
- "name": "skdx-form-section",
2190
+ "name": "skdx-filter-bar",
2020
2191
  "declaration": {
2021
- "name": "SkdxFormSection",
2022
- "module": "src/form-section/FormSection.ts"
2192
+ "name": "SkdxFilterBar",
2193
+ "module": "src/filter-bar/FilterBar.ts"
2023
2194
  }
2024
2195
  }
2025
2196
  ]
2026
2197
  },
2027
2198
  {
2028
2199
  "kind": "javascript-module",
2029
- "path": "src/form-section/index.ts",
2200
+ "path": "src/filter-bar/index.ts",
2030
2201
  "declarations": [],
2031
2202
  "exports": [
2032
2203
  {
2033
2204
  "kind": "js",
2034
- "name": "SkdxFormSection",
2205
+ "name": "SkdxFilterBar",
2035
2206
  "declaration": {
2036
- "name": "SkdxFormSection",
2037
- "module": "./FormSection"
2207
+ "name": "SkdxFilterBar",
2208
+ "module": "./FilterBar"
2209
+ }
2210
+ },
2211
+ {
2212
+ "kind": "js",
2213
+ "name": "SkdxFilterBarFilter",
2214
+ "declaration": {
2215
+ "name": "SkdxFilterBarFilter",
2216
+ "module": "./FilterBar"
2038
2217
  }
2039
2218
  }
2040
2219
  ]
2041
2220
  },
2042
2221
  {
2043
2222
  "kind": "javascript-module",
2044
- "path": "src/chat-composer/ChatComposer.ts",
2223
+ "path": "src/form-section/FormSection.ts",
2045
2224
  "declarations": [
2046
2225
  {
2047
2226
  "kind": "class",
2048
- "description": "Message composer block: an auto-growing Textarea and a send Button inside a\nfield, with consumer-supplied attachment, leading, trailing and footer\nregions and configurable Enter-to-send behaviour.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-chat-composer` on the host, then `__attachments`, `__field`,\n`__leading`, `__textarea`, `__trailing`, `__send` and `__footer`.\n`data-state` on the host reads `pending` while a send is in flight.",
2049
- "name": "SkdxChatComposer",
2227
+ "description": "Titled group inside a larger form: a heading, supporting text, the group's\nfields and a footer for the group's own actions, composing Heading and Text\naround consumer-supplied fields.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-form-section` on the host, then `__header`, `__title`,\n`__description`, `__content` and `__footer`. `data-variant` sits on the host\nfor the skin to read.",
2228
+ "name": "SkdxFormSection",
2050
2229
  "slots": [
2051
2230
  {
2052
- "description": "Controls rendered inside the field before the textarea, such as an attach button.",
2053
- "name": "leading"
2054
- },
2055
- {
2056
- "description": "Controls rendered inside the field after the textarea, such as a model picker.",
2057
- "name": "trailing"
2058
- },
2059
- {
2060
- "description": "Attached files or chips rendered in a row above the field.",
2061
- "name": "attachments"
2062
- },
2063
- {
2064
- "description": "Usage counters or hints rendered in a row below the field.",
2065
- "name": "footer"
2231
+ "description": "The group's fields, rendered into the content region.",
2232
+ "name": ""
2066
2233
  },
2067
2234
  {
2068
- "description": "Glyph rendered inside the send button in place of its text, making it icon-only.",
2069
- "name": "send-icon"
2235
+ "description": "Save, cancel or other controls rendered in the footer below the fields.",
2236
+ "name": "actions"
2070
2237
  }
2071
2238
  ],
2072
2239
  "members": [
2073
2240
  {
2074
2241
  "kind": "field",
2075
- "name": "value",
2076
- "type": {
2077
- "text": "string | undefined | undefined"
2078
- },
2079
- "description": "Current message text, for controlled usage paired with `value-change`.",
2080
- "default": "undefined",
2081
- "attribute": "value"
2082
- },
2083
- {
2084
- "kind": "field",
2085
- "name": "defaultValue",
2242
+ "name": "title",
2086
2243
  "type": {
2087
2244
  "text": "string"
2088
2245
  },
2089
- "default": "''",
2090
- "description": "Initial message text for uncontrolled usage, read only on mount.",
2091
- "attribute": "default-value"
2246
+ "description": "Heading text naming the group, rendered into a derived Heading that names the section. The JavaScript property is `title`.",
2247
+ "attribute": "heading",
2248
+ "required": true
2092
2249
  },
2093
2250
  {
2094
2251
  "kind": "field",
2095
- "name": "placeholder",
2252
+ "name": "description",
2096
2253
  "type": {
2097
2254
  "text": "string | undefined | undefined"
2098
2255
  },
2099
- "description": "Hint text shown in the empty textarea, rendered as the native placeholder.",
2256
+ "description": "Supporting copy rendered below the title, explaining the group's fields.",
2100
2257
  "default": "undefined",
2101
- "attribute": "placeholder"
2102
- },
2103
- {
2104
- "kind": "field",
2105
- "name": "label",
2106
- "type": {
2107
- "text": "string"
2108
- },
2109
- "default": "'Message'",
2110
- "description": "Accessible name of the message textarea, read by assistive technology.",
2111
- "attribute": "label"
2112
- },
2113
- {
2114
- "kind": "field",
2115
- "name": "sendLabel",
2116
- "type": {
2117
- "text": "string"
2118
- },
2119
- "default": "'Send'",
2120
- "description": "Text of the send button, and its accessible name when the `send-icon` slot is filled.",
2121
- "attribute": "send-label"
2122
- },
2123
- {
2124
- "kind": "field",
2125
- "name": "submitKey",
2126
- "type": {
2127
- "text": "SkdxChatComposerSubmitKey"
2128
- },
2129
- "default": "'enter'",
2130
- "description": "Which key sends from the textarea; the other Enter presses insert a newline.",
2131
- "attribute": "submit-key"
2258
+ "attribute": "description"
2132
2259
  },
2133
2260
  {
2134
2261
  "kind": "field",
2135
- "name": "maxRows",
2262
+ "name": "headingLevel",
2136
2263
  "type": {
2137
- "text": "number"
2264
+ "text": "1 | 2 | 3 | 4 | 5 | 6"
2138
2265
  },
2139
- "default": "8",
2140
- "description": "Caps how far the auto-growing textarea grows, in rows, before it scrolls.",
2141
- "attribute": "max-rows"
2266
+ "default": "2",
2267
+ "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding form outline.",
2268
+ "attribute": "heading-level"
2142
2269
  },
2143
2270
  {
2144
2271
  "kind": "field",
2145
- "name": "maxLength",
2272
+ "name": "variant",
2146
2273
  "type": {
2147
- "text": "number | undefined | undefined"
2274
+ "text": "'bordered' | 'split' | (string & {}) | undefined | undefined"
2148
2275
  },
2149
- "description": "Native `maxlength` of the textarea the longest message it accepts.",
2276
+ "description": "Layout rung written to `data-variant`; `bordered` draws a bounded panel and `split` places the header beside the content.",
2150
2277
  "default": "undefined",
2151
- "attribute": "max-length"
2152
- },
2153
- {
2154
- "kind": "field",
2155
- "name": "disabled",
2156
- "type": {
2157
- "text": "boolean"
2158
- },
2159
- "default": "false",
2160
- "description": "Disables the textarea and the send button, blocking every send path.",
2161
- "attribute": "disabled"
2162
- },
2163
- {
2164
- "kind": "field",
2165
- "name": "pending",
2166
- "type": {
2167
- "text": "boolean"
2168
- },
2169
- "default": "false",
2170
- "description": "Marks a send in flight: the button is busy and inert, the textarea stays editable.",
2171
- "attribute": "pending"
2172
- }
2173
- ],
2174
- "events": [
2175
- {
2176
- "description": "Fires with the new text on every edit, including the clear that follows an uncontrolled send.",
2177
- "name": "value-change"
2178
- },
2179
- {
2180
- "description": "Fires with the message text when the send button is activated or the configured submit key is pressed.",
2181
- "name": "send"
2278
+ "attribute": "variant"
2182
2279
  }
2183
2280
  ],
2184
2281
  "attributes": [
2185
2282
  {
2186
- "name": "value",
2187
- "type": {
2188
- "text": "string | undefined | undefined"
2189
- },
2190
- "description": "Current message text, for controlled usage paired with `value-change`.",
2191
- "default": "undefined",
2192
- "fieldName": "value"
2193
- },
2194
- {
2195
- "name": "default-value",
2283
+ "name": "heading",
2196
2284
  "type": {
2197
2285
  "text": "string"
2198
2286
  },
2199
- "default": "''",
2200
- "description": "Initial message text for uncontrolled usage, read only on mount.",
2201
- "fieldName": "defaultValue"
2287
+ "description": "Heading text naming the group, rendered into a derived Heading that names the section. The JavaScript property is `title`.",
2288
+ "fieldName": "title",
2289
+ "required": true
2202
2290
  },
2203
2291
  {
2204
- "name": "placeholder",
2292
+ "name": "description",
2205
2293
  "type": {
2206
2294
  "text": "string | undefined | undefined"
2207
2295
  },
2208
- "description": "Hint text shown in the empty textarea, rendered as the native placeholder.",
2296
+ "description": "Supporting copy rendered below the title, explaining the group's fields.",
2209
2297
  "default": "undefined",
2210
- "fieldName": "placeholder"
2211
- },
2212
- {
2213
- "name": "label",
2214
- "type": {
2215
- "text": "string"
2216
- },
2217
- "default": "'Message'",
2218
- "description": "Accessible name of the message textarea, read by assistive technology.",
2219
- "fieldName": "label"
2220
- },
2221
- {
2222
- "name": "send-label",
2223
- "type": {
2224
- "text": "string"
2225
- },
2226
- "default": "'Send'",
2227
- "description": "Text of the send button, and its accessible name when the `send-icon` slot is filled.",
2228
- "fieldName": "sendLabel"
2229
- },
2230
- {
2231
- "name": "submit-key",
2232
- "type": {
2233
- "text": "SkdxChatComposerSubmitKey"
2234
- },
2235
- "default": "'enter'",
2236
- "description": "Which key sends from the textarea; the other Enter presses insert a newline.",
2237
- "fieldName": "submitKey"
2298
+ "fieldName": "description"
2238
2299
  },
2239
2300
  {
2240
- "name": "max-rows",
2301
+ "name": "heading-level",
2241
2302
  "type": {
2242
- "text": "number"
2303
+ "text": "1 | 2 | 3 | 4 | 5 | 6"
2243
2304
  },
2244
- "default": "8",
2245
- "description": "Caps how far the auto-growing textarea grows, in rows, before it scrolls.",
2246
- "fieldName": "maxRows"
2305
+ "default": "2",
2306
+ "description": "Outline level of the derived title heading, lowered or raised to fit the surrounding form outline.",
2307
+ "fieldName": "headingLevel"
2247
2308
  },
2248
2309
  {
2249
- "name": "max-length",
2310
+ "name": "variant",
2250
2311
  "type": {
2251
- "text": "number | undefined | undefined"
2312
+ "text": "'bordered' | 'split' | (string & {}) | undefined | undefined"
2252
2313
  },
2253
- "description": "Native `maxlength` of the textarea the longest message it accepts.",
2314
+ "description": "Layout rung written to `data-variant`; `bordered` draws a bounded panel and `split` places the header beside the content.",
2254
2315
  "default": "undefined",
2255
- "fieldName": "maxLength"
2256
- },
2257
- {
2258
- "name": "disabled",
2259
- "type": {
2260
- "text": "boolean"
2261
- },
2262
- "default": "false",
2263
- "description": "Disables the textarea and the send button, blocking every send path.",
2264
- "fieldName": "disabled"
2265
- },
2266
- {
2267
- "name": "pending",
2268
- "type": {
2269
- "text": "boolean"
2270
- },
2271
- "default": "false",
2272
- "description": "Marks a send in flight: the button is busy and inert, the textarea stays editable.",
2273
- "fieldName": "pending"
2316
+ "fieldName": "variant"
2274
2317
  }
2275
2318
  ],
2276
2319
  "superclass": {
2277
2320
  "name": "LitElement",
2278
2321
  "package": "lit"
2279
2322
  },
2280
- "tagName": "skdx-chat-composer",
2323
+ "tagName": "skdx-form-section",
2281
2324
  "customElement": true
2282
2325
  }
2283
2326
  ],
2284
2327
  "exports": [
2285
2328
  {
2286
2329
  "kind": "js",
2287
- "name": "SkdxChatComposer",
2288
- "declaration": {
2289
- "name": "SkdxChatComposer",
2290
- "module": "src/chat-composer/ChatComposer.ts"
2291
- }
2292
- },
2293
- {
2294
- "kind": "custom-element-definition",
2295
- "name": "skdx-chat-composer",
2296
- "declaration": {
2297
- "name": "SkdxChatComposer",
2298
- "module": "src/chat-composer/ChatComposer.ts"
2299
- }
2300
- }
2301
- ]
2302
- },
2303
- {
2304
- "kind": "javascript-module",
2305
- "path": "src/chat-composer/index.ts",
2306
- "declarations": [],
2307
- "exports": [
2308
- {
2309
- "kind": "js",
2310
- "name": "SkdxChatComposer",
2311
- "declaration": {
2312
- "name": "SkdxChatComposer",
2313
- "module": "./ChatComposer"
2314
- }
2315
- },
2316
- {
2317
- "kind": "js",
2318
- "name": "SkdxChatComposerSendDetail",
2330
+ "name": "SkdxFormSection",
2319
2331
  "declaration": {
2320
- "name": "SkdxChatComposerSendDetail",
2321
- "module": "./ChatComposer"
2332
+ "name": "SkdxFormSection",
2333
+ "module": "src/form-section/FormSection.ts"
2322
2334
  }
2323
2335
  },
2324
2336
  {
2325
- "kind": "js",
2326
- "name": "SkdxChatComposerSubmitKey",
2337
+ "kind": "custom-element-definition",
2338
+ "name": "skdx-form-section",
2327
2339
  "declaration": {
2328
- "name": "SkdxChatComposerSubmitKey",
2329
- "module": "./ChatComposer"
2340
+ "name": "SkdxFormSection",
2341
+ "module": "src/form-section/FormSection.ts"
2330
2342
  }
2331
- },
2343
+ }
2344
+ ]
2345
+ },
2346
+ {
2347
+ "kind": "javascript-module",
2348
+ "path": "src/form-section/index.ts",
2349
+ "declarations": [],
2350
+ "exports": [
2332
2351
  {
2333
2352
  "kind": "js",
2334
- "name": "SkdxChatComposerValueChangeDetail",
2353
+ "name": "SkdxFormSection",
2335
2354
  "declaration": {
2336
- "name": "SkdxChatComposerValueChangeDetail",
2337
- "module": "./ChatComposer"
2355
+ "name": "SkdxFormSection",
2356
+ "module": "./FormSection"
2338
2357
  }
2339
2358
  }
2340
2359
  ]
@@ -2437,8 +2456,8 @@
2437
2456
  "text": "string"
2438
2457
  },
2439
2458
  "default": "'Notifications'",
2440
- "description": "Heading text, rendered into a derived Heading that names the section.",
2441
- "attribute": "title"
2459
+ "description": "Heading text, rendered into a derived Heading that names the section. The JavaScript property is `title`.",
2460
+ "attribute": "heading"
2442
2461
  },
2443
2462
  {
2444
2463
  "kind": "field",
@@ -2554,12 +2573,12 @@
2554
2573
  ],
2555
2574
  "attributes": [
2556
2575
  {
2557
- "name": "title",
2576
+ "name": "heading",
2558
2577
  "type": {
2559
2578
  "text": "string"
2560
2579
  },
2561
2580
  "default": "'Notifications'",
2562
- "description": "Heading text, rendered into a derived Heading that names the section.",
2581
+ "description": "Heading text, rendered into a derived Heading that names the section. The JavaScript property is `title`.",
2563
2582
  "fieldName": "title"
2564
2583
  },
2565
2584
  {
@@ -2707,8 +2726,8 @@
2707
2726
  "type": {
2708
2727
  "text": "string"
2709
2728
  },
2710
- "description": "Heading text naming the checklist, rendered into a derived Heading that names the section.",
2711
- "attribute": "title",
2729
+ "description": "Heading text naming the checklist, rendered into a derived Heading that names the section. The JavaScript property is `title`.",
2730
+ "attribute": "heading",
2712
2731
  "required": true
2713
2732
  },
2714
2733
  {
@@ -2778,11 +2797,11 @@
2778
2797
  ],
2779
2798
  "attributes": [
2780
2799
  {
2781
- "name": "title",
2800
+ "name": "heading",
2782
2801
  "type": {
2783
2802
  "text": "string"
2784
2803
  },
2785
- "description": "Heading text naming the checklist, rendered into a derived Heading that names the section.",
2804
+ "description": "Heading text naming the checklist, rendered into a derived Heading that names the section. The JavaScript property is `title`.",
2786
2805
  "fieldName": "title",
2787
2806
  "required": true
2788
2807
  },
@@ -2895,7 +2914,7 @@
2895
2914
  "name": ""
2896
2915
  },
2897
2916
  {
2898
- "description": "Controls placed in the toolbar beside the heading.",
2917
+ "description": "Toolbar parts placed in the toolbar beside the heading. Pass toolbar parts — a toolbar button, link, separator or toggle group; anything else stays its own Tab stop and the arrow keys skip it, since only a toolbar part joins the roving tabindex.",
2899
2918
  "name": "actions"
2900
2919
  }
2901
2920
  ],
@@ -2906,8 +2925,8 @@
2906
2925
  "type": {
2907
2926
  "text": "string"
2908
2927
  },
2909
- "description": "The page heading text, rendered into a derived Heading that also names the section.",
2910
- "attribute": "title",
2928
+ "description": "The page heading text, rendered into a derived Heading that also names the section. The JavaScript property is `title`.",
2929
+ "attribute": "heading",
2911
2930
  "required": true
2912
2931
  },
2913
2932
  {
@@ -2952,11 +2971,11 @@
2952
2971
  ],
2953
2972
  "attributes": [
2954
2973
  {
2955
- "name": "title",
2974
+ "name": "heading",
2956
2975
  "type": {
2957
2976
  "text": "string"
2958
2977
  },
2959
- "description": "The page heading text, rendered into a derived Heading that also names the section.",
2978
+ "description": "The page heading text, rendered into a derived Heading that also names the section. The JavaScript property is `title`.",
2960
2979
  "fieldName": "title",
2961
2980
  "required": true
2962
2981
  },
@@ -3007,33 +3026,267 @@
3007
3026
  },
3008
3027
  {
3009
3028
  "kind": "custom-element-definition",
3010
- "name": "skdx-page-container",
3029
+ "name": "skdx-page-container",
3030
+ "declaration": {
3031
+ "name": "SkdxPageContainer",
3032
+ "module": "src/page-container/PageContainer.ts"
3033
+ }
3034
+ }
3035
+ ]
3036
+ },
3037
+ {
3038
+ "kind": "javascript-module",
3039
+ "path": "src/page-container/index.ts",
3040
+ "declarations": [],
3041
+ "exports": [
3042
+ {
3043
+ "kind": "js",
3044
+ "name": "SkdxPageContainer",
3045
+ "declaration": {
3046
+ "name": "SkdxPageContainer",
3047
+ "module": "./PageContainer"
3048
+ }
3049
+ },
3050
+ {
3051
+ "kind": "js",
3052
+ "name": "SkdxPageContainerBreadcrumb",
3053
+ "declaration": {
3054
+ "name": "SkdxPageContainerBreadcrumb",
3055
+ "module": "./PageContainer"
3056
+ }
3057
+ }
3058
+ ]
3059
+ },
3060
+ {
3061
+ "kind": "javascript-module",
3062
+ "path": "src/reset-password-page/ResetPasswordPage.ts",
3063
+ "declarations": [
3064
+ {
3065
+ "kind": "class",
3066
+ "description": "Reset-password block: a new-password field with its rules, an optional\nconfirmation matched against it, and a submit button, replaced entirely by a\nsuccess alert once the change is accepted.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-reset-password-page` on the host, then `__panel`, `__title`,\n`__error`, `__success`, `__form`, `__field`, `__requirements`, `__submit`\nand `__footer`.",
3067
+ "name": "SkdxResetPasswordPage",
3068
+ "slots": [
3069
+ {
3070
+ "description": "Extra fields rendered inside the form, above the submit button.",
3071
+ "name": ""
3072
+ },
3073
+ {
3074
+ "description": "Password rules used as the new-password field's description.",
3075
+ "name": "requirements"
3076
+ },
3077
+ {
3078
+ "description": "Navigation below the form, such as a link back to the sign-in page.",
3079
+ "name": "footer"
3080
+ }
3081
+ ],
3082
+ "members": [
3083
+ {
3084
+ "kind": "field",
3085
+ "name": "title",
3086
+ "type": {
3087
+ "text": "string"
3088
+ },
3089
+ "default": "'Choose a new password'",
3090
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
3091
+ "attribute": "heading"
3092
+ },
3093
+ {
3094
+ "kind": "field",
3095
+ "name": "error",
3096
+ "type": {
3097
+ "text": "string | undefined"
3098
+ },
3099
+ "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
3100
+ "default": "undefined",
3101
+ "attribute": "error"
3102
+ },
3103
+ {
3104
+ "kind": "field",
3105
+ "name": "success",
3106
+ "type": {
3107
+ "text": "string | undefined"
3108
+ },
3109
+ "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
3110
+ "default": "undefined",
3111
+ "attribute": "success"
3112
+ },
3113
+ {
3114
+ "kind": "field",
3115
+ "name": "pending",
3116
+ "type": {
3117
+ "text": "boolean"
3118
+ },
3119
+ "default": "false",
3120
+ "description": "Marks the request in flight, making the submit button busy while both fields stay editable.",
3121
+ "attribute": "pending"
3122
+ },
3123
+ {
3124
+ "kind": "field",
3125
+ "name": "passwordLabel",
3126
+ "type": {
3127
+ "text": "string"
3128
+ },
3129
+ "default": "'New password'",
3130
+ "description": "Label of the field where the new password is typed.",
3131
+ "attribute": "password-label"
3132
+ },
3133
+ {
3134
+ "kind": "field",
3135
+ "name": "confirmPasswordLabel",
3136
+ "type": {
3137
+ "text": "string | undefined"
3138
+ },
3139
+ "description": "Label of the confirmation field; supplying it is what turns password matching on.",
3140
+ "default": "undefined",
3141
+ "attribute": "confirm-password-label"
3142
+ },
3143
+ {
3144
+ "kind": "field",
3145
+ "name": "passwordMismatchMessage",
3146
+ "type": {
3147
+ "text": "string"
3148
+ },
3149
+ "default": "'Passwords do not match'",
3150
+ "description": "Validation message pushed onto the confirmation field when the two passwords differ.",
3151
+ "attribute": "password-mismatch-message"
3152
+ },
3153
+ {
3154
+ "kind": "field",
3155
+ "name": "submitLabel",
3156
+ "type": {
3157
+ "text": "string"
3158
+ },
3159
+ "default": "'Update password'",
3160
+ "description": "Text of the form's submit button.",
3161
+ "attribute": "submit-label"
3162
+ }
3163
+ ],
3164
+ "events": [
3165
+ {
3166
+ "description": "Fires with `{ password }` when the form submits with a valid password that matches the confirmation.",
3167
+ "name": "reset-password"
3168
+ }
3169
+ ],
3170
+ "attributes": [
3171
+ {
3172
+ "name": "heading",
3173
+ "type": {
3174
+ "text": "string"
3175
+ },
3176
+ "default": "'Choose a new password'",
3177
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
3178
+ "fieldName": "title"
3179
+ },
3180
+ {
3181
+ "name": "error",
3182
+ "type": {
3183
+ "text": "string | undefined"
3184
+ },
3185
+ "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
3186
+ "default": "undefined",
3187
+ "fieldName": "error"
3188
+ },
3189
+ {
3190
+ "name": "success",
3191
+ "type": {
3192
+ "text": "string | undefined"
3193
+ },
3194
+ "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
3195
+ "default": "undefined",
3196
+ "fieldName": "success"
3197
+ },
3198
+ {
3199
+ "name": "pending",
3200
+ "type": {
3201
+ "text": "boolean"
3202
+ },
3203
+ "default": "false",
3204
+ "description": "Marks the request in flight, making the submit button busy while both fields stay editable.",
3205
+ "fieldName": "pending"
3206
+ },
3207
+ {
3208
+ "name": "password-label",
3209
+ "type": {
3210
+ "text": "string"
3211
+ },
3212
+ "default": "'New password'",
3213
+ "description": "Label of the field where the new password is typed.",
3214
+ "fieldName": "passwordLabel"
3215
+ },
3216
+ {
3217
+ "name": "confirm-password-label",
3218
+ "type": {
3219
+ "text": "string | undefined"
3220
+ },
3221
+ "description": "Label of the confirmation field; supplying it is what turns password matching on.",
3222
+ "default": "undefined",
3223
+ "fieldName": "confirmPasswordLabel"
3224
+ },
3225
+ {
3226
+ "name": "password-mismatch-message",
3227
+ "type": {
3228
+ "text": "string"
3229
+ },
3230
+ "default": "'Passwords do not match'",
3231
+ "description": "Validation message pushed onto the confirmation field when the two passwords differ.",
3232
+ "fieldName": "passwordMismatchMessage"
3233
+ },
3234
+ {
3235
+ "name": "submit-label",
3236
+ "type": {
3237
+ "text": "string"
3238
+ },
3239
+ "default": "'Update password'",
3240
+ "description": "Text of the form's submit button.",
3241
+ "fieldName": "submitLabel"
3242
+ }
3243
+ ],
3244
+ "superclass": {
3245
+ "name": "LitElement",
3246
+ "package": "lit"
3247
+ },
3248
+ "tagName": "skdx-reset-password-page",
3249
+ "customElement": true
3250
+ }
3251
+ ],
3252
+ "exports": [
3253
+ {
3254
+ "kind": "js",
3255
+ "name": "SkdxResetPasswordPage",
3256
+ "declaration": {
3257
+ "name": "SkdxResetPasswordPage",
3258
+ "module": "src/reset-password-page/ResetPasswordPage.ts"
3259
+ }
3260
+ },
3261
+ {
3262
+ "kind": "custom-element-definition",
3263
+ "name": "skdx-reset-password-page",
3011
3264
  "declaration": {
3012
- "name": "SkdxPageContainer",
3013
- "module": "src/page-container/PageContainer.ts"
3265
+ "name": "SkdxResetPasswordPage",
3266
+ "module": "src/reset-password-page/ResetPasswordPage.ts"
3014
3267
  }
3015
3268
  }
3016
3269
  ]
3017
3270
  },
3018
3271
  {
3019
3272
  "kind": "javascript-module",
3020
- "path": "src/page-container/index.ts",
3273
+ "path": "src/reset-password-page/index.ts",
3021
3274
  "declarations": [],
3022
3275
  "exports": [
3023
3276
  {
3024
3277
  "kind": "js",
3025
- "name": "SkdxPageContainer",
3278
+ "name": "SkdxResetPasswordPage",
3026
3279
  "declaration": {
3027
- "name": "SkdxPageContainer",
3028
- "module": "./PageContainer"
3280
+ "name": "SkdxResetPasswordPage",
3281
+ "module": "./ResetPasswordPage"
3029
3282
  }
3030
3283
  },
3031
3284
  {
3032
3285
  "kind": "js",
3033
- "name": "SkdxPageContainerBreadcrumb",
3286
+ "name": "SkdxResetPasswordDetail",
3034
3287
  "declaration": {
3035
- "name": "SkdxPageContainerBreadcrumb",
3036
- "module": "./PageContainer"
3288
+ "name": "SkdxResetPasswordDetail",
3289
+ "module": "./ResetPasswordPage"
3037
3290
  }
3038
3291
  }
3039
3292
  ]
@@ -3072,8 +3325,8 @@
3072
3325
  "text": "string"
3073
3326
  },
3074
3327
  "default": "'Sign in'",
3075
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
3076
- "attribute": "title"
3328
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
3329
+ "attribute": "heading"
3077
3330
  },
3078
3331
  {
3079
3332
  "kind": "field",
@@ -3152,12 +3405,12 @@
3152
3405
  ],
3153
3406
  "attributes": [
3154
3407
  {
3155
- "name": "title",
3408
+ "name": "heading",
3156
3409
  "type": {
3157
3410
  "text": "string"
3158
3411
  },
3159
3412
  "default": "'Sign in'",
3160
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
3413
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
3161
3414
  "fieldName": "title"
3162
3415
  },
3163
3416
  {
@@ -3266,250 +3519,16 @@
3266
3519
  "kind": "js",
3267
3520
  "name": "SkdxSignInDetail",
3268
3521
  "declaration": {
3269
- "name": "SkdxSignInDetail",
3270
- "module": "./SignInPage"
3271
- }
3272
- },
3273
- {
3274
- "kind": "js",
3275
- "name": "SkdxSignInProvider",
3276
- "declaration": {
3277
- "name": "SkdxSignInProvider",
3278
- "module": "./SignInPage"
3279
- }
3280
- }
3281
- ]
3282
- },
3283
- {
3284
- "kind": "javascript-module",
3285
- "path": "src/reset-password-page/ResetPasswordPage.ts",
3286
- "declarations": [
3287
- {
3288
- "kind": "class",
3289
- "description": "Reset-password block: a new-password field with its rules, an optional\nconfirmation matched against it, and a submit button, replaced entirely by a\nsuccess alert once the change is accepted.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-reset-password-page` on the host, then `__panel`, `__title`,\n`__error`, `__success`, `__form`, `__field`, `__requirements`, `__submit`\nand `__footer`.",
3290
- "name": "SkdxResetPasswordPage",
3291
- "slots": [
3292
- {
3293
- "description": "Extra fields rendered inside the form, above the submit button.",
3294
- "name": ""
3295
- },
3296
- {
3297
- "description": "Password rules used as the new-password field's description.",
3298
- "name": "requirements"
3299
- },
3300
- {
3301
- "description": "Navigation below the form, such as a link back to the sign-in page.",
3302
- "name": "footer"
3303
- }
3304
- ],
3305
- "members": [
3306
- {
3307
- "kind": "field",
3308
- "name": "title",
3309
- "type": {
3310
- "text": "string"
3311
- },
3312
- "default": "'Choose a new password'",
3313
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
3314
- "attribute": "title"
3315
- },
3316
- {
3317
- "kind": "field",
3318
- "name": "error",
3319
- "type": {
3320
- "text": "string | undefined"
3321
- },
3322
- "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
3323
- "default": "undefined",
3324
- "attribute": "error"
3325
- },
3326
- {
3327
- "kind": "field",
3328
- "name": "success",
3329
- "type": {
3330
- "text": "string | undefined"
3331
- },
3332
- "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
3333
- "default": "undefined",
3334
- "attribute": "success"
3335
- },
3336
- {
3337
- "kind": "field",
3338
- "name": "pending",
3339
- "type": {
3340
- "text": "boolean"
3341
- },
3342
- "default": "false",
3343
- "description": "Marks the request in flight, making the submit button busy while both fields stay editable.",
3344
- "attribute": "pending"
3345
- },
3346
- {
3347
- "kind": "field",
3348
- "name": "passwordLabel",
3349
- "type": {
3350
- "text": "string"
3351
- },
3352
- "default": "'New password'",
3353
- "description": "Label of the field where the new password is typed.",
3354
- "attribute": "password-label"
3355
- },
3356
- {
3357
- "kind": "field",
3358
- "name": "confirmPasswordLabel",
3359
- "type": {
3360
- "text": "string | undefined"
3361
- },
3362
- "description": "Label of the confirmation field; supplying it is what turns password matching on.",
3363
- "default": "undefined",
3364
- "attribute": "confirm-password-label"
3365
- },
3366
- {
3367
- "kind": "field",
3368
- "name": "passwordMismatchMessage",
3369
- "type": {
3370
- "text": "string"
3371
- },
3372
- "default": "'Passwords do not match'",
3373
- "description": "Validation message pushed onto the confirmation field when the two passwords differ.",
3374
- "attribute": "password-mismatch-message"
3375
- },
3376
- {
3377
- "kind": "field",
3378
- "name": "submitLabel",
3379
- "type": {
3380
- "text": "string"
3381
- },
3382
- "default": "'Update password'",
3383
- "description": "Text of the form's submit button.",
3384
- "attribute": "submit-label"
3385
- }
3386
- ],
3387
- "events": [
3388
- {
3389
- "description": "Fires with `{ password }` when the form submits with a valid password that matches the confirmation.",
3390
- "name": "reset-password"
3391
- }
3392
- ],
3393
- "attributes": [
3394
- {
3395
- "name": "title",
3396
- "type": {
3397
- "text": "string"
3398
- },
3399
- "default": "'Choose a new password'",
3400
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
3401
- "fieldName": "title"
3402
- },
3403
- {
3404
- "name": "error",
3405
- "type": {
3406
- "text": "string | undefined"
3407
- },
3408
- "description": "Message rendered into a derived error Alert above the form. The block never clears it.",
3409
- "default": "undefined",
3410
- "fieldName": "error"
3411
- },
3412
- {
3413
- "name": "success",
3414
- "type": {
3415
- "text": "string | undefined"
3416
- },
3417
- "description": "Confirmation rendered into a derived success Alert that replaces the form entirely.",
3418
- "default": "undefined",
3419
- "fieldName": "success"
3420
- },
3421
- {
3422
- "name": "pending",
3423
- "type": {
3424
- "text": "boolean"
3425
- },
3426
- "default": "false",
3427
- "description": "Marks the request in flight, making the submit button busy while both fields stay editable.",
3428
- "fieldName": "pending"
3429
- },
3430
- {
3431
- "name": "password-label",
3432
- "type": {
3433
- "text": "string"
3434
- },
3435
- "default": "'New password'",
3436
- "description": "Label of the field where the new password is typed.",
3437
- "fieldName": "passwordLabel"
3438
- },
3439
- {
3440
- "name": "confirm-password-label",
3441
- "type": {
3442
- "text": "string | undefined"
3443
- },
3444
- "description": "Label of the confirmation field; supplying it is what turns password matching on.",
3445
- "default": "undefined",
3446
- "fieldName": "confirmPasswordLabel"
3447
- },
3448
- {
3449
- "name": "password-mismatch-message",
3450
- "type": {
3451
- "text": "string"
3452
- },
3453
- "default": "'Passwords do not match'",
3454
- "description": "Validation message pushed onto the confirmation field when the two passwords differ.",
3455
- "fieldName": "passwordMismatchMessage"
3456
- },
3457
- {
3458
- "name": "submit-label",
3459
- "type": {
3460
- "text": "string"
3461
- },
3462
- "default": "'Update password'",
3463
- "description": "Text of the form's submit button.",
3464
- "fieldName": "submitLabel"
3465
- }
3466
- ],
3467
- "superclass": {
3468
- "name": "LitElement",
3469
- "package": "lit"
3470
- },
3471
- "tagName": "skdx-reset-password-page",
3472
- "customElement": true
3473
- }
3474
- ],
3475
- "exports": [
3476
- {
3477
- "kind": "js",
3478
- "name": "SkdxResetPasswordPage",
3479
- "declaration": {
3480
- "name": "SkdxResetPasswordPage",
3481
- "module": "src/reset-password-page/ResetPasswordPage.ts"
3482
- }
3483
- },
3484
- {
3485
- "kind": "custom-element-definition",
3486
- "name": "skdx-reset-password-page",
3487
- "declaration": {
3488
- "name": "SkdxResetPasswordPage",
3489
- "module": "src/reset-password-page/ResetPasswordPage.ts"
3490
- }
3491
- }
3492
- ]
3493
- },
3494
- {
3495
- "kind": "javascript-module",
3496
- "path": "src/reset-password-page/index.ts",
3497
- "declarations": [],
3498
- "exports": [
3499
- {
3500
- "kind": "js",
3501
- "name": "SkdxResetPasswordPage",
3502
- "declaration": {
3503
- "name": "SkdxResetPasswordPage",
3504
- "module": "./ResetPasswordPage"
3522
+ "name": "SkdxSignInDetail",
3523
+ "module": "./SignInPage"
3505
3524
  }
3506
3525
  },
3507
3526
  {
3508
3527
  "kind": "js",
3509
- "name": "SkdxResetPasswordDetail",
3528
+ "name": "SkdxSignInProvider",
3510
3529
  "declaration": {
3511
- "name": "SkdxResetPasswordDetail",
3512
- "module": "./ResetPasswordPage"
3530
+ "name": "SkdxSignInProvider",
3531
+ "module": "./SignInPage"
3513
3532
  }
3514
3533
  }
3515
3534
  ]
@@ -3544,8 +3563,8 @@
3544
3563
  "text": "string"
3545
3564
  },
3546
3565
  "default": "'Create account'",
3547
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
3548
- "attribute": "title"
3566
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
3567
+ "attribute": "heading"
3549
3568
  },
3550
3569
  {
3551
3570
  "kind": "field",
@@ -3654,12 +3673,12 @@
3654
3673
  ],
3655
3674
  "attributes": [
3656
3675
  {
3657
- "name": "title",
3676
+ "name": "heading",
3658
3677
  "type": {
3659
3678
  "text": "string"
3660
3679
  },
3661
3680
  "default": "'Create account'",
3662
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
3681
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
3663
3682
  "fieldName": "title"
3664
3683
  },
3665
3684
  {
@@ -4233,6 +4252,256 @@
4233
4252
  "declarations": [],
4234
4253
  "exports": []
4235
4254
  },
4255
+ {
4256
+ "kind": "javascript-module",
4257
+ "path": "src/user-menu/UserMenu.ts",
4258
+ "declarations": [
4259
+ {
4260
+ "kind": "class",
4261
+ "description": "The signed-in user's menu: a derived trigger showing an avatar, name and\ndescription that opens a panel repeating the identity above the\napplication's own entries.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-user-menu` on the host, then `__avatar`, `__identity`,\n`__name`, `__description`, `__content` and `__header`. `data-variant` sits on\nthe host while the derived trigger renders.",
4262
+ "name": "SkdxUserMenu",
4263
+ "slots": [
4264
+ {
4265
+ "description": "The application's own menu entries, rendered below the repeated identity header.",
4266
+ "name": ""
4267
+ },
4268
+ {
4269
+ "description": "Content that replaces the derived avatar-and-identity trigger entirely.",
4270
+ "name": "trigger"
4271
+ },
4272
+ {
4273
+ "description": "An extra indicator rendered after the identity in the trigger.",
4274
+ "name": "status"
4275
+ }
4276
+ ],
4277
+ "members": [
4278
+ {
4279
+ "kind": "field",
4280
+ "name": "name",
4281
+ "type": {
4282
+ "text": "string"
4283
+ },
4284
+ "description": "The signed-in user's name, rendered in the trigger and repeated in the menu header.",
4285
+ "attribute": "name",
4286
+ "required": true
4287
+ },
4288
+ {
4289
+ "kind": "field",
4290
+ "name": "description",
4291
+ "type": {
4292
+ "text": "string | undefined | undefined"
4293
+ },
4294
+ "description": "Secondary text such as an email or role, rendered below the name in the trigger and the header.",
4295
+ "default": "undefined",
4296
+ "attribute": "description"
4297
+ },
4298
+ {
4299
+ "kind": "field",
4300
+ "name": "avatarSrc",
4301
+ "type": {
4302
+ "text": "string | undefined | undefined"
4303
+ },
4304
+ "description": "Source of the identity image, passed straight through to the derived Avatar.",
4305
+ "default": "undefined",
4306
+ "attribute": "avatar-src"
4307
+ },
4308
+ {
4309
+ "kind": "field",
4310
+ "name": "variant",
4311
+ "type": {
4312
+ "text": "'compact' | (string & {}) | undefined | undefined"
4313
+ },
4314
+ "description": "Visual rung written to `data-variant`; `'compact'` visually hides the identity text while keeping it as the accessible name.",
4315
+ "default": "undefined",
4316
+ "attribute": "variant"
4317
+ },
4318
+ {
4319
+ "kind": "field",
4320
+ "name": "open",
4321
+ "type": {
4322
+ "text": "boolean | undefined | undefined"
4323
+ },
4324
+ "description": "Whether the menu is open, for controlled usage paired with `open-change`.",
4325
+ "default": "undefined",
4326
+ "attribute": "open"
4327
+ },
4328
+ {
4329
+ "kind": "field",
4330
+ "name": "defaultOpen",
4331
+ "type": {
4332
+ "text": "boolean"
4333
+ },
4334
+ "default": "false",
4335
+ "description": "Whether the menu starts open, for uncontrolled usage.",
4336
+ "attribute": "default-open"
4337
+ },
4338
+ {
4339
+ "kind": "field",
4340
+ "name": "side",
4341
+ "type": {
4342
+ "text": "'top' | 'right' | 'bottom' | 'left'"
4343
+ },
4344
+ "default": "'bottom'",
4345
+ "description": "Which side of the trigger the menu panel opens on.",
4346
+ "attribute": "side"
4347
+ },
4348
+ {
4349
+ "kind": "field",
4350
+ "name": "align",
4351
+ "type": {
4352
+ "text": "'start' | 'center' | 'end'"
4353
+ },
4354
+ "default": "'end'",
4355
+ "description": "Alignment of the menu panel relative to the side it opens on.",
4356
+ "attribute": "align"
4357
+ }
4358
+ ],
4359
+ "events": [
4360
+ {
4361
+ "description": "Fires with the new open state whenever the trigger opens or closes the menu.",
4362
+ "name": "open-change"
4363
+ },
4364
+ {
4365
+ "description": "Fires with the new open state once the panel's enter or exit animation has settled.",
4366
+ "name": "open-change-complete"
4367
+ },
4368
+ {
4369
+ "description": "Fires when Escape is pressed while the menu is open; `preventDefault()` keeps it open.",
4370
+ "name": "escape-key-down"
4371
+ },
4372
+ {
4373
+ "description": "Fires on a pointer-down outside the panel while open; `preventDefault()` keeps it open.",
4374
+ "name": "pointer-down-outside"
4375
+ },
4376
+ {
4377
+ "description": "Fires when focus moves outside the panel while open; `preventDefault()` keeps it open.",
4378
+ "name": "focus-outside"
4379
+ },
4380
+ {
4381
+ "description": "Fires for either kind of outside interaction, just before the specific event.",
4382
+ "name": "interact-outside"
4383
+ },
4384
+ {
4385
+ "description": "Fires before focus returns to the trigger on close; `preventDefault()` suppresses that return.",
4386
+ "name": "close-auto-focus"
4387
+ }
4388
+ ],
4389
+ "attributes": [
4390
+ {
4391
+ "name": "name",
4392
+ "type": {
4393
+ "text": "string"
4394
+ },
4395
+ "description": "The signed-in user's name, rendered in the trigger and repeated in the menu header.",
4396
+ "fieldName": "name",
4397
+ "required": true
4398
+ },
4399
+ {
4400
+ "name": "description",
4401
+ "type": {
4402
+ "text": "string | undefined | undefined"
4403
+ },
4404
+ "description": "Secondary text such as an email or role, rendered below the name in the trigger and the header.",
4405
+ "default": "undefined",
4406
+ "fieldName": "description"
4407
+ },
4408
+ {
4409
+ "name": "avatar-src",
4410
+ "type": {
4411
+ "text": "string | undefined | undefined"
4412
+ },
4413
+ "description": "Source of the identity image, passed straight through to the derived Avatar.",
4414
+ "default": "undefined",
4415
+ "fieldName": "avatarSrc"
4416
+ },
4417
+ {
4418
+ "name": "variant",
4419
+ "type": {
4420
+ "text": "'compact' | (string & {}) | undefined | undefined"
4421
+ },
4422
+ "description": "Visual rung written to `data-variant`; `'compact'` visually hides the identity text while keeping it as the accessible name.",
4423
+ "default": "undefined",
4424
+ "fieldName": "variant"
4425
+ },
4426
+ {
4427
+ "name": "open",
4428
+ "type": {
4429
+ "text": "boolean | undefined | undefined"
4430
+ },
4431
+ "description": "Whether the menu is open, for controlled usage paired with `open-change`.",
4432
+ "default": "undefined",
4433
+ "fieldName": "open"
4434
+ },
4435
+ {
4436
+ "name": "default-open",
4437
+ "type": {
4438
+ "text": "boolean"
4439
+ },
4440
+ "default": "false",
4441
+ "description": "Whether the menu starts open, for uncontrolled usage.",
4442
+ "fieldName": "defaultOpen"
4443
+ },
4444
+ {
4445
+ "name": "side",
4446
+ "type": {
4447
+ "text": "'top' | 'right' | 'bottom' | 'left'"
4448
+ },
4449
+ "default": "'bottom'",
4450
+ "description": "Which side of the trigger the menu panel opens on.",
4451
+ "fieldName": "side"
4452
+ },
4453
+ {
4454
+ "name": "align",
4455
+ "type": {
4456
+ "text": "'start' | 'center' | 'end'"
4457
+ },
4458
+ "default": "'end'",
4459
+ "description": "Alignment of the menu panel relative to the side it opens on.",
4460
+ "fieldName": "align"
4461
+ }
4462
+ ],
4463
+ "superclass": {
4464
+ "name": "LitElement",
4465
+ "package": "lit"
4466
+ },
4467
+ "tagName": "skdx-user-menu",
4468
+ "customElement": true
4469
+ }
4470
+ ],
4471
+ "exports": [
4472
+ {
4473
+ "kind": "js",
4474
+ "name": "SkdxUserMenu",
4475
+ "declaration": {
4476
+ "name": "SkdxUserMenu",
4477
+ "module": "src/user-menu/UserMenu.ts"
4478
+ }
4479
+ },
4480
+ {
4481
+ "kind": "custom-element-definition",
4482
+ "name": "skdx-user-menu",
4483
+ "declaration": {
4484
+ "name": "SkdxUserMenu",
4485
+ "module": "src/user-menu/UserMenu.ts"
4486
+ }
4487
+ }
4488
+ ]
4489
+ },
4490
+ {
4491
+ "kind": "javascript-module",
4492
+ "path": "src/user-menu/index.ts",
4493
+ "declarations": [],
4494
+ "exports": [
4495
+ {
4496
+ "kind": "js",
4497
+ "name": "SkdxUserMenu",
4498
+ "declaration": {
4499
+ "name": "SkdxUserMenu",
4500
+ "module": "./UserMenu"
4501
+ }
4502
+ }
4503
+ ]
4504
+ },
4236
4505
  {
4237
4506
  "kind": "javascript-module",
4238
4507
  "path": "src/verification-page/VerificationPage.ts",
@@ -4259,8 +4528,8 @@
4259
4528
  "text": "string"
4260
4529
  },
4261
4530
  "default": "'Enter your verification code'",
4262
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
4263
- "attribute": "title"
4531
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
4532
+ "attribute": "heading"
4264
4533
  },
4265
4534
  {
4266
4535
  "kind": "field",
@@ -4389,12 +4658,12 @@
4389
4658
  ],
4390
4659
  "attributes": [
4391
4660
  {
4392
- "name": "title",
4661
+ "name": "heading",
4393
4662
  "type": {
4394
4663
  "text": "string"
4395
4664
  },
4396
4665
  "default": "'Enter your verification code'",
4397
- "description": "Heading text, rendered into a derived `<h1>` that names the section.",
4666
+ "description": "Heading text, rendered into a derived `<h1>` that names the section. The JavaScript property is `title`.",
4398
4667
  "fieldName": "title"
4399
4668
  },
4400
4669
  {
@@ -4555,256 +4824,6 @@
4555
4824
  }
4556
4825
  ]
4557
4826
  },
4558
- {
4559
- "kind": "javascript-module",
4560
- "path": "src/user-menu/UserMenu.ts",
4561
- "declarations": [
4562
- {
4563
- "kind": "class",
4564
- "description": "The signed-in user's menu: a derived trigger showing an avatar, name and\ndescription that opens a panel repeating the identity above the\napplication's own entries.\n\nRenders light DOM, so its parts are classes rather than shadow `::part()`\ntargets: `.skdx-user-menu` on the host, then `__avatar`, `__identity`,\n`__name`, `__description`, `__content` and `__header`. `data-variant` sits on\nthe host while the derived trigger renders.",
4565
- "name": "SkdxUserMenu",
4566
- "slots": [
4567
- {
4568
- "description": "The application's own menu entries, rendered below the repeated identity header.",
4569
- "name": ""
4570
- },
4571
- {
4572
- "description": "Content that replaces the derived avatar-and-identity trigger entirely.",
4573
- "name": "trigger"
4574
- },
4575
- {
4576
- "description": "An extra indicator rendered after the identity in the trigger.",
4577
- "name": "status"
4578
- }
4579
- ],
4580
- "members": [
4581
- {
4582
- "kind": "field",
4583
- "name": "name",
4584
- "type": {
4585
- "text": "string"
4586
- },
4587
- "description": "The signed-in user's name, rendered in the trigger and repeated in the menu header.",
4588
- "attribute": "name",
4589
- "required": true
4590
- },
4591
- {
4592
- "kind": "field",
4593
- "name": "description",
4594
- "type": {
4595
- "text": "string | undefined | undefined"
4596
- },
4597
- "description": "Secondary text such as an email or role, rendered below the name in the trigger and the header.",
4598
- "default": "undefined",
4599
- "attribute": "description"
4600
- },
4601
- {
4602
- "kind": "field",
4603
- "name": "avatarSrc",
4604
- "type": {
4605
- "text": "string | undefined | undefined"
4606
- },
4607
- "description": "Source of the identity image, passed straight through to the derived Avatar.",
4608
- "default": "undefined",
4609
- "attribute": "avatar-src"
4610
- },
4611
- {
4612
- "kind": "field",
4613
- "name": "variant",
4614
- "type": {
4615
- "text": "'compact' | (string & {}) | undefined | undefined"
4616
- },
4617
- "description": "Visual rung written to `data-variant`; `'compact'` visually hides the identity text while keeping it as the accessible name.",
4618
- "default": "undefined",
4619
- "attribute": "variant"
4620
- },
4621
- {
4622
- "kind": "field",
4623
- "name": "open",
4624
- "type": {
4625
- "text": "boolean | undefined | undefined"
4626
- },
4627
- "description": "Whether the menu is open, for controlled usage paired with `open-change`.",
4628
- "default": "undefined",
4629
- "attribute": "open"
4630
- },
4631
- {
4632
- "kind": "field",
4633
- "name": "defaultOpen",
4634
- "type": {
4635
- "text": "boolean"
4636
- },
4637
- "default": "false",
4638
- "description": "Whether the menu starts open, for uncontrolled usage.",
4639
- "attribute": "default-open"
4640
- },
4641
- {
4642
- "kind": "field",
4643
- "name": "side",
4644
- "type": {
4645
- "text": "'top' | 'right' | 'bottom' | 'left'"
4646
- },
4647
- "default": "'bottom'",
4648
- "description": "Which side of the trigger the menu panel opens on.",
4649
- "attribute": "side"
4650
- },
4651
- {
4652
- "kind": "field",
4653
- "name": "align",
4654
- "type": {
4655
- "text": "'start' | 'center' | 'end'"
4656
- },
4657
- "default": "'end'",
4658
- "description": "Alignment of the menu panel relative to the side it opens on.",
4659
- "attribute": "align"
4660
- }
4661
- ],
4662
- "events": [
4663
- {
4664
- "description": "Fires with the new open state whenever the trigger opens or closes the menu.",
4665
- "name": "open-change"
4666
- },
4667
- {
4668
- "description": "Fires with the new open state once the panel's enter or exit animation has settled.",
4669
- "name": "open-change-complete"
4670
- },
4671
- {
4672
- "description": "Fires when Escape is pressed while the menu is open; `preventDefault()` keeps it open.",
4673
- "name": "escape-key-down"
4674
- },
4675
- {
4676
- "description": "Fires on a pointer-down outside the panel while open; `preventDefault()` keeps it open.",
4677
- "name": "pointer-down-outside"
4678
- },
4679
- {
4680
- "description": "Fires when focus moves outside the panel while open; `preventDefault()` keeps it open.",
4681
- "name": "focus-outside"
4682
- },
4683
- {
4684
- "description": "Fires for either kind of outside interaction, just before the specific event.",
4685
- "name": "interact-outside"
4686
- },
4687
- {
4688
- "description": "Fires before focus returns to the trigger on close; `preventDefault()` suppresses that return.",
4689
- "name": "close-auto-focus"
4690
- }
4691
- ],
4692
- "attributes": [
4693
- {
4694
- "name": "name",
4695
- "type": {
4696
- "text": "string"
4697
- },
4698
- "description": "The signed-in user's name, rendered in the trigger and repeated in the menu header.",
4699
- "fieldName": "name",
4700
- "required": true
4701
- },
4702
- {
4703
- "name": "description",
4704
- "type": {
4705
- "text": "string | undefined | undefined"
4706
- },
4707
- "description": "Secondary text such as an email or role, rendered below the name in the trigger and the header.",
4708
- "default": "undefined",
4709
- "fieldName": "description"
4710
- },
4711
- {
4712
- "name": "avatar-src",
4713
- "type": {
4714
- "text": "string | undefined | undefined"
4715
- },
4716
- "description": "Source of the identity image, passed straight through to the derived Avatar.",
4717
- "default": "undefined",
4718
- "fieldName": "avatarSrc"
4719
- },
4720
- {
4721
- "name": "variant",
4722
- "type": {
4723
- "text": "'compact' | (string & {}) | undefined | undefined"
4724
- },
4725
- "description": "Visual rung written to `data-variant`; `'compact'` visually hides the identity text while keeping it as the accessible name.",
4726
- "default": "undefined",
4727
- "fieldName": "variant"
4728
- },
4729
- {
4730
- "name": "open",
4731
- "type": {
4732
- "text": "boolean | undefined | undefined"
4733
- },
4734
- "description": "Whether the menu is open, for controlled usage paired with `open-change`.",
4735
- "default": "undefined",
4736
- "fieldName": "open"
4737
- },
4738
- {
4739
- "name": "default-open",
4740
- "type": {
4741
- "text": "boolean"
4742
- },
4743
- "default": "false",
4744
- "description": "Whether the menu starts open, for uncontrolled usage.",
4745
- "fieldName": "defaultOpen"
4746
- },
4747
- {
4748
- "name": "side",
4749
- "type": {
4750
- "text": "'top' | 'right' | 'bottom' | 'left'"
4751
- },
4752
- "default": "'bottom'",
4753
- "description": "Which side of the trigger the menu panel opens on.",
4754
- "fieldName": "side"
4755
- },
4756
- {
4757
- "name": "align",
4758
- "type": {
4759
- "text": "'start' | 'center' | 'end'"
4760
- },
4761
- "default": "'end'",
4762
- "description": "Alignment of the menu panel relative to the side it opens on.",
4763
- "fieldName": "align"
4764
- }
4765
- ],
4766
- "superclass": {
4767
- "name": "LitElement",
4768
- "package": "lit"
4769
- },
4770
- "tagName": "skdx-user-menu",
4771
- "customElement": true
4772
- }
4773
- ],
4774
- "exports": [
4775
- {
4776
- "kind": "js",
4777
- "name": "SkdxUserMenu",
4778
- "declaration": {
4779
- "name": "SkdxUserMenu",
4780
- "module": "src/user-menu/UserMenu.ts"
4781
- }
4782
- },
4783
- {
4784
- "kind": "custom-element-definition",
4785
- "name": "skdx-user-menu",
4786
- "declaration": {
4787
- "name": "SkdxUserMenu",
4788
- "module": "src/user-menu/UserMenu.ts"
4789
- }
4790
- }
4791
- ]
4792
- },
4793
- {
4794
- "kind": "javascript-module",
4795
- "path": "src/user-menu/index.ts",
4796
- "declarations": [],
4797
- "exports": [
4798
- {
4799
- "kind": "js",
4800
- "name": "SkdxUserMenu",
4801
- "declaration": {
4802
- "name": "SkdxUserMenu",
4803
- "module": "./UserMenu"
4804
- }
4805
- }
4806
- ]
4807
- },
4808
4827
  {
4809
4828
  "kind": "javascript-module",
4810
4829
  "path": "src/workspace-switcher/WorkspaceSwitcher.ts",
@@ -4992,10 +5011,6 @@
4992
5011
  "description": "Fires for either kind of outside interaction, just before the specific event.",
4993
5012
  "name": "interact-outside"
4994
5013
  },
4995
- {
4996
- "description": "Fires before focus moves into the panel on open; `preventDefault()` leaves focus where it is.",
4997
- "name": "open-auto-focus"
4998
- },
4999
5014
  {
5000
5015
  "description": "Fires before focus returns to the trigger on close; `preventDefault()` suppresses that return.",
5001
5016
  "name": "close-auto-focus"