@skdx/web-components-blocks 0.34.0 → 0.36.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 (168) hide show
  1. package/custom-elements.json +5076 -294
  2. package/dist/chat-composer/ChatComposer.cjs +41 -0
  3. package/dist/chat-composer/ChatComposer.d.cts +125 -0
  4. package/dist/chat-composer/ChatComposer.d.ts +125 -0
  5. package/dist/chat-composer/ChatComposer.js +41 -0
  6. package/dist/chat-composer/index.cjs +1 -0
  7. package/dist/chat-composer/index.d.cts +1 -0
  8. package/dist/chat-composer/index.d.ts +1 -0
  9. package/dist/chat-composer/index.js +1 -0
  10. package/dist/chat-message/ChatMessage.cjs +26 -0
  11. package/dist/chat-message/ChatMessage.d.cts +74 -0
  12. package/dist/chat-message/ChatMessage.d.ts +74 -0
  13. package/dist/chat-message/ChatMessage.js +26 -0
  14. package/dist/chat-message/index.cjs +1 -0
  15. package/dist/chat-message/index.d.cts +1 -0
  16. package/dist/chat-message/index.d.ts +1 -0
  17. package/dist/chat-message/index.js +1 -0
  18. package/dist/comment/Comment.cjs +26 -0
  19. package/dist/comment/Comment.d.cts +66 -0
  20. package/dist/comment/Comment.d.ts +66 -0
  21. package/dist/comment/Comment.js +26 -0
  22. package/dist/comment/index.cjs +1 -0
  23. package/dist/comment/index.d.cts +1 -0
  24. package/dist/comment/index.d.ts +1 -0
  25. package/dist/comment/index.js +1 -0
  26. package/dist/comment-thread/CommentThread.cjs +27 -0
  27. package/dist/comment-thread/CommentThread.d.cts +67 -0
  28. package/dist/comment-thread/CommentThread.d.ts +67 -0
  29. package/dist/comment-thread/CommentThread.js +27 -0
  30. package/dist/comment-thread/index.cjs +1 -0
  31. package/dist/comment-thread/index.d.cts +1 -0
  32. package/dist/comment-thread/index.d.ts +1 -0
  33. package/dist/comment-thread/index.js +1 -0
  34. package/dist/confirm-dialog/ConfirmDialog.cjs +38 -0
  35. package/dist/confirm-dialog/ConfirmDialog.d.cts +101 -0
  36. package/dist/confirm-dialog/ConfirmDialog.d.ts +101 -0
  37. package/dist/confirm-dialog/ConfirmDialog.js +38 -0
  38. package/dist/confirm-dialog/index.cjs +1 -0
  39. package/dist/confirm-dialog/index.d.cts +1 -0
  40. package/dist/confirm-dialog/index.d.ts +1 -0
  41. package/dist/confirm-dialog/index.js +1 -0
  42. package/dist/conversation-list/ConversationList.cjs +52 -0
  43. package/dist/conversation-list/ConversationList.d.cts +124 -0
  44. package/dist/conversation-list/ConversationList.d.ts +124 -0
  45. package/dist/conversation-list/ConversationList.js +52 -0
  46. package/dist/conversation-list/index.cjs +1 -0
  47. package/dist/conversation-list/index.d.cts +1 -0
  48. package/dist/conversation-list/index.d.ts +1 -0
  49. package/dist/conversation-list/index.js +1 -0
  50. package/dist/empty-state/EmptyState.cjs +29 -0
  51. package/dist/empty-state/EmptyState.d.cts +69 -0
  52. package/dist/empty-state/EmptyState.d.ts +69 -0
  53. package/dist/empty-state/EmptyState.js +29 -0
  54. package/dist/empty-state/index.cjs +1 -0
  55. package/dist/empty-state/index.d.cts +1 -0
  56. package/dist/empty-state/index.d.ts +1 -0
  57. package/dist/empty-state/index.js +1 -0
  58. package/dist/filter-bar/FilterBar.cjs +44 -0
  59. package/dist/filter-bar/FilterBar.d.cts +110 -0
  60. package/dist/filter-bar/FilterBar.d.ts +110 -0
  61. package/dist/filter-bar/FilterBar.js +44 -0
  62. package/dist/filter-bar/index.cjs +1 -0
  63. package/dist/filter-bar/index.d.cts +1 -0
  64. package/dist/filter-bar/index.d.ts +1 -0
  65. package/dist/filter-bar/index.js +1 -0
  66. package/dist/forgot-password-page/ForgotPasswordPage.cjs +57 -0
  67. package/dist/forgot-password-page/ForgotPasswordPage.d.cts +95 -0
  68. package/dist/forgot-password-page/ForgotPasswordPage.d.ts +95 -0
  69. package/dist/forgot-password-page/ForgotPasswordPage.js +57 -0
  70. package/dist/forgot-password-page/index.cjs +1 -0
  71. package/dist/forgot-password-page/index.d.cts +1 -0
  72. package/dist/forgot-password-page/index.d.ts +1 -0
  73. package/dist/forgot-password-page/index.js +1 -0
  74. package/dist/form-section/FormSection.cjs +28 -0
  75. package/dist/form-section/FormSection.d.cts +63 -0
  76. package/dist/form-section/FormSection.d.ts +63 -0
  77. package/dist/form-section/FormSection.js +28 -0
  78. package/dist/form-section/index.cjs +1 -0
  79. package/dist/form-section/index.d.cts +1 -0
  80. package/dist/form-section/index.d.ts +1 -0
  81. package/dist/form-section/index.js +1 -0
  82. package/dist/index.cjs +1 -1
  83. package/dist/index.d.cts +19 -0
  84. package/dist/index.d.ts +19 -0
  85. package/dist/index.js +1 -1
  86. package/dist/internal/slots.cjs +1 -1
  87. package/dist/internal/slots.d.cts +2 -0
  88. package/dist/internal/slots.d.ts +2 -0
  89. package/dist/internal/slots.js +1 -1
  90. package/dist/notification-center/NotificationCenter.cjs +74 -0
  91. package/dist/notification-center/NotificationCenter.d.cts +147 -0
  92. package/dist/notification-center/NotificationCenter.d.ts +147 -0
  93. package/dist/notification-center/NotificationCenter.js +74 -0
  94. package/dist/notification-center/index.cjs +1 -0
  95. package/dist/notification-center/index.d.cts +1 -0
  96. package/dist/notification-center/index.d.ts +1 -0
  97. package/dist/notification-center/index.js +1 -0
  98. package/dist/onboarding-checklist/OnboardingChecklist.cjs +55 -0
  99. package/dist/onboarding-checklist/OnboardingChecklist.d.cts +89 -0
  100. package/dist/onboarding-checklist/OnboardingChecklist.d.ts +89 -0
  101. package/dist/onboarding-checklist/OnboardingChecklist.js +55 -0
  102. package/dist/onboarding-checklist/index.cjs +1 -0
  103. package/dist/onboarding-checklist/index.d.cts +1 -0
  104. package/dist/onboarding-checklist/index.d.ts +1 -0
  105. package/dist/onboarding-checklist/index.js +1 -0
  106. package/dist/page-container/PageContainer.cjs +5 -5
  107. package/dist/page-container/PageContainer.js +2 -2
  108. package/dist/reset-password-page/ResetPasswordPage.cjs +59 -0
  109. package/dist/reset-password-page/ResetPasswordPage.d.cts +104 -0
  110. package/dist/reset-password-page/ResetPasswordPage.d.ts +104 -0
  111. package/dist/reset-password-page/ResetPasswordPage.js +59 -0
  112. package/dist/reset-password-page/index.cjs +1 -0
  113. package/dist/reset-password-page/index.d.cts +1 -0
  114. package/dist/reset-password-page/index.d.ts +1 -0
  115. package/dist/reset-password-page/index.js +1 -0
  116. package/dist/sign-up-page/SignUpPage.cjs +97 -0
  117. package/dist/sign-up-page/SignUpPage.d.cts +133 -0
  118. package/dist/sign-up-page/SignUpPage.d.ts +133 -0
  119. package/dist/sign-up-page/SignUpPage.js +97 -0
  120. package/dist/sign-up-page/index.cjs +1 -0
  121. package/dist/sign-up-page/index.d.cts +1 -0
  122. package/dist/sign-up-page/index.d.ts +1 -0
  123. package/dist/sign-up-page/index.js +1 -0
  124. package/dist/stat-card/StatCard.cjs +61 -0
  125. package/dist/stat-card/StatCard.d.cts +90 -0
  126. package/dist/stat-card/StatCard.d.ts +90 -0
  127. package/dist/stat-card/StatCard.js +61 -0
  128. package/dist/stat-card/index.cjs +1 -0
  129. package/dist/stat-card/index.d.cts +1 -0
  130. package/dist/stat-card/index.d.ts +1 -0
  131. package/dist/stat-card/index.js +1 -0
  132. package/dist/usage-card/UsageCard.cjs +42 -0
  133. package/dist/usage-card/UsageCard.d.cts +81 -0
  134. package/dist/usage-card/UsageCard.d.ts +81 -0
  135. package/dist/usage-card/UsageCard.js +42 -0
  136. package/dist/usage-card/index.cjs +1 -0
  137. package/dist/usage-card/index.d.cts +1 -0
  138. package/dist/usage-card/index.d.ts +1 -0
  139. package/dist/usage-card/index.js +1 -0
  140. package/dist/usage-card/usage.cjs +1 -0
  141. package/dist/usage-card/usage.d.cts +18 -0
  142. package/dist/usage-card/usage.d.ts +18 -0
  143. package/dist/usage-card/usage.js +1 -0
  144. package/dist/user-menu/UserMenu.cjs +30 -0
  145. package/dist/user-menu/UserMenu.d.cts +84 -0
  146. package/dist/user-menu/UserMenu.d.ts +84 -0
  147. package/dist/user-menu/UserMenu.js +30 -0
  148. package/dist/user-menu/index.cjs +1 -0
  149. package/dist/user-menu/index.d.cts +1 -0
  150. package/dist/user-menu/index.d.ts +1 -0
  151. package/dist/user-menu/index.js +1 -0
  152. package/dist/verification-page/VerificationPage.cjs +61 -0
  153. package/dist/verification-page/VerificationPage.d.cts +149 -0
  154. package/dist/verification-page/VerificationPage.d.ts +149 -0
  155. package/dist/verification-page/VerificationPage.js +61 -0
  156. package/dist/verification-page/index.cjs +1 -0
  157. package/dist/verification-page/index.d.cts +1 -0
  158. package/dist/verification-page/index.d.ts +1 -0
  159. package/dist/verification-page/index.js +1 -0
  160. package/dist/workspace-switcher/WorkspaceSwitcher.cjs +69 -0
  161. package/dist/workspace-switcher/WorkspaceSwitcher.d.cts +165 -0
  162. package/dist/workspace-switcher/WorkspaceSwitcher.d.ts +165 -0
  163. package/dist/workspace-switcher/WorkspaceSwitcher.js +69 -0
  164. package/dist/workspace-switcher/index.cjs +1 -0
  165. package/dist/workspace-switcher/index.d.cts +1 -0
  166. package/dist/workspace-switcher/index.d.ts +1 -0
  167. package/dist/workspace-switcher/index.js +1 -0
  168. package/package.json +272 -6
@@ -0,0 +1,149 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ import '@skdx/web-components/alert';
3
+ import '@skdx/web-components/button';
4
+ import '@skdx/web-components/field';
5
+ import '@skdx/web-components/form';
6
+ import '@skdx/web-components/heading';
7
+ import '@skdx/web-components/pin-input';
8
+ import '@skdx/web-components/text';
9
+ /** What a `verify` event carries: the complete code the form held. */
10
+ export interface SkdxVerificationDetail {
11
+ /** The full code, exactly `length` characters long. */
12
+ code: string;
13
+ }
14
+ /** What a `value-change` event carries: the new code, the one it replaced, and what drove the edit. */
15
+ export interface SkdxVerificationValueChangeDetail {
16
+ /** The code as it stands after the edit. */
17
+ value: string;
18
+ /** The code held immediately before, or `null` when nothing was. */
19
+ previousValue: string | null;
20
+ /** What drove the change: a key press, a pointer, or the application. */
21
+ reason: 'keyboard' | 'pointer' | 'programmatic';
22
+ }
23
+ /**
24
+ * Verification block: a pin input for a one-time code, a submit button and a
25
+ * resend control whose cooldown the consumer owns.
26
+ *
27
+ * Renders light DOM, so its parts are classes rather than shadow `::part()`
28
+ * targets: `.skdx-verification-page` on the host, then `__panel`, `__title`,
29
+ * `__description`, `__error`, `__form`, `__field`, `__code`, `__submit`,
30
+ * `__resend`, `__resend-hint` and `__footer`.
31
+ *
32
+ * @example
33
+ * ```html
34
+ * <skdx-verification-page
35
+ * id="verify"
36
+ * description="We sent a code to ada@example.com."
37
+ * ></skdx-verification-page>
38
+ * <script>
39
+ * const page = document.getElementById('verify');
40
+ * page.addEventListener('verify', (event) => console.log(event.detail.code));
41
+ * page.addEventListener('resend', () => send());
42
+ * </script>
43
+ * ```
44
+ *
45
+ * @slot - Extra fields rendered inside the form, above the submit button.
46
+ * @slot footer - Navigation below the resend region, such as a link back to the sign-in page.
47
+ * @fires verify - Fires with `{ code }` when the form submits with a code of exactly the declared length.
48
+ * @fires resend - Fires when the resend button is activated; listening for it is what renders the resend region.
49
+ * @fires value-change - Fires with `{ value, previousValue, reason }` whenever any code box changes.
50
+ */
51
+ export declare class SkdxVerificationPage extends LitElement {
52
+ /** Light DOM, so `@skdx/skins` and consumer CSS reach the composed core elements. */
53
+ createRenderRoot(): HTMLElement | DocumentFragment;
54
+ /**
55
+ * Heading text, rendered into a derived `<h1>` that names the section.
56
+ * @default 'Enter your verification code'
57
+ */
58
+ title: string;
59
+ /**
60
+ * Supporting copy rendered below the title, naming where the code was sent.
61
+ * @default undefined — no description region renders.
62
+ */
63
+ description?: string;
64
+ /**
65
+ * Message rendered into a derived error Alert above the form. The block never clears it.
66
+ * @default undefined — no error region renders.
67
+ */
68
+ error?: string;
69
+ /**
70
+ * Marks the request in flight, making the submit button busy while the code boxes stay editable.
71
+ * @default false
72
+ */
73
+ pending: boolean;
74
+ /**
75
+ * Legend of the code fieldset and accessible name of the derived pin input holding the code.
76
+ * @default 'Verification code'
77
+ */
78
+ codeLabel: string;
79
+ /**
80
+ * How many character boxes the code is entered into, and how long a complete code is.
81
+ * @default 6
82
+ */
83
+ length: number;
84
+ /**
85
+ * Current code, for controlled usage paired with `value-change`.
86
+ * @default undefined — uncontrolled, seeded from `defaultValue`.
87
+ */
88
+ value?: string;
89
+ /**
90
+ * Initial code for uncontrolled usage, seeding the boxes on first render.
91
+ * @default '' — the boxes start empty.
92
+ */
93
+ defaultValue: string;
94
+ /**
95
+ * Text of the form's submit button.
96
+ * @default 'Verify'
97
+ */
98
+ submitLabel: string;
99
+ /**
100
+ * Text of the resend button, which renders only alongside a resend listener.
101
+ * @default 'Resend code'
102
+ */
103
+ resendLabel: string;
104
+ /**
105
+ * Makes the resend button unusable, for a consumer running its own cooldown.
106
+ * @default false
107
+ */
108
+ resendDisabled: boolean;
109
+ /**
110
+ * Note rendered beside the resend button, such as how long the cooldown has left.
111
+ * @default undefined — no hint renders; the block runs no timer of its own.
112
+ */
113
+ resendHint?: string;
114
+ /** Generated title id, published as the section's `aria-labelledby`. */
115
+ private readonly titleId;
116
+ /** What the boxes last held; outranked by `value` whenever the consumer controls the code. */
117
+ private uncontrolledValue?;
118
+ /** How many listeners each gated event holds, so the anatomy it drives renders only while one is bound. */
119
+ private readonly gated;
120
+ /** @internal Standard DOM registration, counted so a listener-gated region knows it has one. */
121
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, event: HTMLElementEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
122
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
123
+ /** @internal Standard DOM removal, counted so a listener-gated region knows it lost one. */
124
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, event: HTMLElementEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
125
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
126
+ private countListener;
127
+ /** Whether the consumer is listening for `type` on this element, which is what renders its control. */
128
+ private handles;
129
+ /** The code right now, controlled or not. */
130
+ private get currentValue();
131
+ connectedCallback(): void;
132
+ disconnectedCallback(): void;
133
+ /** Whether the consumer supplied content for `name` — still true once it has been moved in. */
134
+ private hasSlotted;
135
+ private region;
136
+ private get contentRegion();
137
+ private get hasContent();
138
+ protected updated(): void;
139
+ private setValue;
140
+ private readonly handleValueChange;
141
+ private readonly handleSubmit;
142
+ private readonly resend;
143
+ render(): TemplateResult;
144
+ }
145
+ declare global {
146
+ interface HTMLElementTagNameMap {
147
+ 'skdx-verification-page': SkdxVerificationPage;
148
+ }
149
+ }
@@ -0,0 +1,149 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ import '@skdx/web-components/alert';
3
+ import '@skdx/web-components/button';
4
+ import '@skdx/web-components/field';
5
+ import '@skdx/web-components/form';
6
+ import '@skdx/web-components/heading';
7
+ import '@skdx/web-components/pin-input';
8
+ import '@skdx/web-components/text';
9
+ /** What a `verify` event carries: the complete code the form held. */
10
+ export interface SkdxVerificationDetail {
11
+ /** The full code, exactly `length` characters long. */
12
+ code: string;
13
+ }
14
+ /** What a `value-change` event carries: the new code, the one it replaced, and what drove the edit. */
15
+ export interface SkdxVerificationValueChangeDetail {
16
+ /** The code as it stands after the edit. */
17
+ value: string;
18
+ /** The code held immediately before, or `null` when nothing was. */
19
+ previousValue: string | null;
20
+ /** What drove the change: a key press, a pointer, or the application. */
21
+ reason: 'keyboard' | 'pointer' | 'programmatic';
22
+ }
23
+ /**
24
+ * Verification block: a pin input for a one-time code, a submit button and a
25
+ * resend control whose cooldown the consumer owns.
26
+ *
27
+ * Renders light DOM, so its parts are classes rather than shadow `::part()`
28
+ * targets: `.skdx-verification-page` on the host, then `__panel`, `__title`,
29
+ * `__description`, `__error`, `__form`, `__field`, `__code`, `__submit`,
30
+ * `__resend`, `__resend-hint` and `__footer`.
31
+ *
32
+ * @example
33
+ * ```html
34
+ * <skdx-verification-page
35
+ * id="verify"
36
+ * description="We sent a code to ada@example.com."
37
+ * ></skdx-verification-page>
38
+ * <script>
39
+ * const page = document.getElementById('verify');
40
+ * page.addEventListener('verify', (event) => console.log(event.detail.code));
41
+ * page.addEventListener('resend', () => send());
42
+ * </script>
43
+ * ```
44
+ *
45
+ * @slot - Extra fields rendered inside the form, above the submit button.
46
+ * @slot footer - Navigation below the resend region, such as a link back to the sign-in page.
47
+ * @fires verify - Fires with `{ code }` when the form submits with a code of exactly the declared length.
48
+ * @fires resend - Fires when the resend button is activated; listening for it is what renders the resend region.
49
+ * @fires value-change - Fires with `{ value, previousValue, reason }` whenever any code box changes.
50
+ */
51
+ export declare class SkdxVerificationPage extends LitElement {
52
+ /** Light DOM, so `@skdx/skins` and consumer CSS reach the composed core elements. */
53
+ createRenderRoot(): HTMLElement | DocumentFragment;
54
+ /**
55
+ * Heading text, rendered into a derived `<h1>` that names the section.
56
+ * @default 'Enter your verification code'
57
+ */
58
+ title: string;
59
+ /**
60
+ * Supporting copy rendered below the title, naming where the code was sent.
61
+ * @default undefined — no description region renders.
62
+ */
63
+ description?: string;
64
+ /**
65
+ * Message rendered into a derived error Alert above the form. The block never clears it.
66
+ * @default undefined — no error region renders.
67
+ */
68
+ error?: string;
69
+ /**
70
+ * Marks the request in flight, making the submit button busy while the code boxes stay editable.
71
+ * @default false
72
+ */
73
+ pending: boolean;
74
+ /**
75
+ * Legend of the code fieldset and accessible name of the derived pin input holding the code.
76
+ * @default 'Verification code'
77
+ */
78
+ codeLabel: string;
79
+ /**
80
+ * How many character boxes the code is entered into, and how long a complete code is.
81
+ * @default 6
82
+ */
83
+ length: number;
84
+ /**
85
+ * Current code, for controlled usage paired with `value-change`.
86
+ * @default undefined — uncontrolled, seeded from `defaultValue`.
87
+ */
88
+ value?: string;
89
+ /**
90
+ * Initial code for uncontrolled usage, seeding the boxes on first render.
91
+ * @default '' — the boxes start empty.
92
+ */
93
+ defaultValue: string;
94
+ /**
95
+ * Text of the form's submit button.
96
+ * @default 'Verify'
97
+ */
98
+ submitLabel: string;
99
+ /**
100
+ * Text of the resend button, which renders only alongside a resend listener.
101
+ * @default 'Resend code'
102
+ */
103
+ resendLabel: string;
104
+ /**
105
+ * Makes the resend button unusable, for a consumer running its own cooldown.
106
+ * @default false
107
+ */
108
+ resendDisabled: boolean;
109
+ /**
110
+ * Note rendered beside the resend button, such as how long the cooldown has left.
111
+ * @default undefined — no hint renders; the block runs no timer of its own.
112
+ */
113
+ resendHint?: string;
114
+ /** Generated title id, published as the section's `aria-labelledby`. */
115
+ private readonly titleId;
116
+ /** What the boxes last held; outranked by `value` whenever the consumer controls the code. */
117
+ private uncontrolledValue?;
118
+ /** How many listeners each gated event holds, so the anatomy it drives renders only while one is bound. */
119
+ private readonly gated;
120
+ /** @internal Standard DOM registration, counted so a listener-gated region knows it has one. */
121
+ addEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, event: HTMLElementEventMap[K]) => unknown, options?: boolean | AddEventListenerOptions): void;
122
+ addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
123
+ /** @internal Standard DOM removal, counted so a listener-gated region knows it lost one. */
124
+ removeEventListener<K extends keyof HTMLElementEventMap>(type: K, listener: (this: HTMLElement, event: HTMLElementEventMap[K]) => unknown, options?: boolean | EventListenerOptions): void;
125
+ removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
126
+ private countListener;
127
+ /** Whether the consumer is listening for `type` on this element, which is what renders its control. */
128
+ private handles;
129
+ /** The code right now, controlled or not. */
130
+ private get currentValue();
131
+ connectedCallback(): void;
132
+ disconnectedCallback(): void;
133
+ /** Whether the consumer supplied content for `name` — still true once it has been moved in. */
134
+ private hasSlotted;
135
+ private region;
136
+ private get contentRegion();
137
+ private get hasContent();
138
+ protected updated(): void;
139
+ private setValue;
140
+ private readonly handleValueChange;
141
+ private readonly handleSubmit;
142
+ private readonly resend;
143
+ render(): TemplateResult;
144
+ }
145
+ declare global {
146
+ interface HTMLElementTagNameMap {
147
+ 'skdx-verification-page': SkdxVerificationPage;
148
+ }
149
+ }
@@ -0,0 +1,61 @@
1
+ var h=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var i=(l,d,e,n)=>{for(var r=n>1?void 0:n?g(d,e):d,p=l.length-1,v;p>=0;p--)(v=l[p])&&(r=(n?v(d,e,r):v(r))||r);return n&&r&&h(d,e,r),r};import{html as a,LitElement as m,nothing as o}from"lit";import{property as s}from"lit/decorators.js";import{customElement as b}from"../internal/define.js";import{emit as u}from"../internal/events.js";import{hasUnslottedChild as E,placeSlotted as f}from"../internal/slots.js";import"@skdx/web-components/alert";import"@skdx/web-components/button";import"@skdx/web-components/field";import"@skdx/web-components/form";import"@skdx/web-components/heading";import"@skdx/web-components/pin-input";import"@skdx/web-components/text";var c="data-skdx-verification-page-generated",L="data-skdx-verification-page-content",k=["resend"],x=0,t=class extends m{constructor(){super(...arguments);this.title="Enter your verification code";this.pending=!1;this.codeLabel="Verification code";this.length=6;this.defaultValue="";this.submitLabel="Verify";this.resendLabel="Resend code";this.resendDisabled=!1;this.titleId=`skdx-verification-page-title-${++x}`;this.gated=new Map;this.handleValueChange=e=>{e.stopPropagation(),this.setValue(e.detail,"keyboard")};this.handleSubmit=e=>{e.target?.closest("skdx-form")&&(e.preventDefault(),u(this,"verify",{code:this.currentValue}))};this.resend=()=>{u(this,"resend")}}createRenderRoot(){return this}addEventListener(e,n,r){super.addEventListener(e,n,r),this.countListener(e,1)}removeEventListener(e,n,r){super.removeEventListener(e,n,r),this.countListener(e,-1)}countListener(e,n){k.includes(e)&&(this.gated.set(e,Math.max(0,(this.gated.get(e)??0)+n)),this.requestUpdate())}handles(e){return(this.gated.get(e)??0)>0}get currentValue(){return this.value??this.uncontrolledValue??this.defaultValue}connectedCallback(){super.connectedCallback(),this.setAttribute("role","region"),this.setAttribute("aria-labelledby",this.titleId),this.addEventListener("submit",this.handleSubmit),queueMicrotask(()=>this.requestUpdate())}disconnectedCallback(){this.removeEventListener("submit",this.handleSubmit),super.disconnectedCallback()}hasSlotted(e){return this.querySelector(`[slot="${e}"], [data-skdx-slot="${e}"]`)!==null}region(e){return this.querySelector(`.skdx-verification-page__${e}`)}get contentRegion(){return this.querySelector(`[${L}]`)}get hasContent(){return E(this,c)||(this.contentRegion?.hasChildNodes()??!1)}updated(){let e=this.querySelector(".skdx-verification-page__code");e&&(e.value=this.currentValue),f(this,c,{footer:this.region("footer")},this.contentRegion)}setValue(e,n){let r=this.currentValue;this.uncontrolledValue=e,this.requestUpdate(),u(this,"value-change",{value:e,previousValue:r,reason:n})}render(){return a`
2
+ <div
3
+ class="skdx-verification-page__panel"
4
+ data-skdx-verification-page-generated
5
+ >
6
+ <skdx-heading
7
+ class="skdx-verification-page__title"
8
+ as="h1"
9
+ id=${this.titleId}
10
+ >${this.title}</skdx-heading
11
+ >
12
+ ${this.error?a`<skdx-alert
13
+ class="skdx-verification-page__error"
14
+ .status=${"danger"}
15
+ >${this.error}</skdx-alert
16
+ >`:o}
17
+ ${this.description?a`<skdx-text
18
+ class="skdx-verification-page__description"
19
+ as="p"
20
+ .tone=${"muted"}
21
+ >${this.description}</skdx-text
22
+ >`:o}
23
+ <skdx-form class="skdx-verification-page__form">
24
+ <form>
25
+ <skdx-fieldset class="skdx-verification-page__field">
26
+ <skdx-field-label>${this.codeLabel}</skdx-field-label>
27
+ <skdx-pin-input
28
+ class="skdx-verification-page__code"
29
+ aria-label=${this.codeLabel}
30
+ name="code"
31
+ required
32
+ length=${this.length}
33
+ .value=${this.currentValue}
34
+ @value-change=${this.handleValueChange}
35
+ ></skdx-pin-input>
36
+ </skdx-fieldset>
37
+ ${this.hasContent?a`<div data-skdx-verification-page-content></div>`:o}
38
+ <skdx-button
39
+ class="skdx-verification-page__submit"
40
+ type="submit"
41
+ ?loading=${this.pending}
42
+ ?disabled=${this.pending}
43
+ >${this.submitLabel}</skdx-button
44
+ >
45
+ </form>
46
+ </skdx-form>
47
+ ${this.handles("resend")?a`<div class="skdx-verification-page__resend">
48
+ <skdx-button
49
+ type="button"
50
+ .variant=${"ghost"}
51
+ ?disabled=${this.resendDisabled}
52
+ @click=${this.resend}
53
+ >${this.resendLabel}</skdx-button
54
+ >
55
+ ${this.resendHint?a`<span class="skdx-verification-page__resend-hint"
56
+ >${this.resendHint}</span
57
+ >`:o}
58
+ </div>`:o}
59
+ ${this.hasSlotted("footer")?a`<div class="skdx-verification-page__footer"></div>`:o}
60
+ </div>
61
+ `}};i([s({type:String})],t.prototype,"title",2),i([s({type:String})],t.prototype,"description",2),i([s({type:String})],t.prototype,"error",2),i([s({type:Boolean})],t.prototype,"pending",2),i([s({type:String,attribute:"code-label"})],t.prototype,"codeLabel",2),i([s({type:Number})],t.prototype,"length",2),i([s({type:String})],t.prototype,"value",2),i([s({type:String,attribute:"default-value"})],t.prototype,"defaultValue",2),i([s({type:String,attribute:"submit-label"})],t.prototype,"submitLabel",2),i([s({type:String,attribute:"resend-label"})],t.prototype,"resendLabel",2),i([s({type:Boolean,attribute:"resend-disabled"})],t.prototype,"resendDisabled",2),i([s({type:String,attribute:"resend-hint"})],t.prototype,"resendHint",2),t=i([b("skdx-verification-page","verification-page","root")],t);export{t as SkdxVerificationPage};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var c=(i,e)=>{for(var t in e)o(i,t,{get:e[t],enumerable:!0})},d=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of x(e))!V.call(i,a)&&a!==t&&o(i,a,{get:()=>e[a],enumerable:!(r=n(e,a))||r.enumerable});return i};var k=i=>d(o({},"__esModule",{value:!0}),i);var l={};c(l,{SkdxVerificationPage:()=>f.SkdxVerificationPage});module.exports=k(l);var f=require("./VerificationPage.cjs");0&&(module.exports={SkdxVerificationPage});
@@ -0,0 +1 @@
1
+ export { SkdxVerificationPage, type SkdxVerificationDetail, type SkdxVerificationValueChangeDetail, } from './VerificationPage.cjs';
@@ -0,0 +1 @@
1
+ export { SkdxVerificationPage, type SkdxVerificationDetail, type SkdxVerificationValueChangeDetail, } from './VerificationPage.js';
@@ -0,0 +1 @@
1
+ import{SkdxVerificationPage as a}from"./VerificationPage.js";export{a as SkdxVerificationPage};
@@ -0,0 +1,69 @@
1
+ "use strict";var u=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var w=(i,n)=>{for(var e in n)u(i,e,{get:n[e],enumerable:!0})},x=(i,n,e,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of b(n))!f.call(i,s)&&s!==e&&u(i,s,{get:()=>n[s],enumerable:!(t=g(n,s))||t.enumerable});return i};var y=i=>x(u({},"__esModule",{value:!0}),i),o=(i,n,e,t)=>{for(var s=t>1?void 0:t?g(n,e):n,c=i.length-1,d;c>=0;c--)(d=i[c])&&(s=(t?d(n,e,s):d(s))||s);return t&&s&&u(n,e,s),s};var E={};w(E,{SkdxWorkspaceSwitcher:()=>a});module.exports=y(E);var r=require("lit"),l=require("lit/decorators.js"),v=require("../internal/define.cjs"),h=require("../internal/events.cjs"),k=require("../internal/slots.cjs"),T=require("@skdx/web-components/primitives/command"),q=require("@skdx/web-components/primitives/popover"),M=require("@skdx/web-components/visually-hidden");var $="data-skdx-workspace-switcher-generated",_={fromAttribute:i=>i!=="false"};function m(i){i.stopPropagation()}function L(i,n){let e=n.toLowerCase(),t=new Map([[void 0,[]]]);for(let d of i){let p=t.get(d.group);p?p.push(d):t.set(d.group,[d])}let s=d=>e===""||d.id.toLowerCase().includes(e)||d.label.toLowerCase().includes(e)||(d.description?.toLowerCase().includes(e)??!1),c=[];for(let[d,p]of t)p.some(s)&&c.push({heading:d,items:p});return c}var a=class extends r.LitElement{constructor(){super(...arguments);this.defaultValue="";this.placeholder="Select";this.searchLabel="Search";this.emptyMessage="No results";this.loadingMessage="Loading";this.loading=!1;this.selectedLabel="Current";this.defaultOpen=!1;this.search="";this.reason="programmatic";this.notePointer=()=>{this.reason="pointer"};this.noteKeyboard=()=>{this.reason="keyboard"};this.handleOpenChange=e=>{e.stopPropagation();let t=e.detail;t!==this.isOpen&&this.setOpen(t)};this.handleSearchChange=e=>{e.stopPropagation(),this.search=e.detail,this.requestUpdate()}}createRenderRoot(){return this}get currentValue(){return this.value??this.uncontrolledValue??this.defaultValue}get isOpen(){return this.open??this.uncontrolledOpen??this.defaultOpen}connectedCallback(){super.connectedCallback(),this.addEventListener("pointerdown",this.notePointer,!0),this.addEventListener("keydown",this.noteKeyboard,!0),queueMicrotask(()=>this.requestUpdate())}disconnectedCallback(){this.removeEventListener("pointerdown",this.notePointer,!0),this.removeEventListener("keydown",this.noteKeyboard,!0),super.disconnectedCallback()}get hasTrigger(){return this.querySelector('[slot="trigger"], [data-skdx-slot="trigger"]')!==null}get hasActions(){return this.querySelector('[slot="actions"], [data-skdx-slot="actions"]')!==null}region(e){return this.querySelector(`.skdx-workspace-switcher__${e}`)}setOpen(e){e||(this.search=""),this.uncontrolledOpen=e,this.requestUpdate(),(0,h.emit)(this,"open-change",e)}select(e,t){e.stopPropagation();let s=this.currentValue;this.uncontrolledValue=t,this.requestUpdate(),(0,h.emit)(this,"value-change",{value:t,previousValue:s,reason:this.reason}),this.setOpen(!1)}nameTrigger(){let e=this.querySelector("skdx-popover-trigger")?.shadowRoot?.querySelector('[part="trigger"]');e&&(this.label?e.setAttribute("aria-label",this.label):e.removeAttribute("aria-label"))}updated(){let e=this.querySelector(":scope > skdx-popover-root");e&&(e.open=this.isOpen),this.querySelector("skdx-popover-trigger")?.updateComplete.then(()=>this.nameTrigger());let s=this.querySelector("skdx-command-input");s?.updateComplete.then(()=>s.querySelector("input")?.setAttribute("aria-label",this.searchLabel)),(0,k.placeSlotted)(this,$,{trigger:this.querySelector("skdx-popover-trigger"),actions:this.region("footer")},null)}derivedTrigger(){let e=(this.items??[]).find(t=>t.id===this.currentValue);return r.html`${this.renderLeading&&e?r.html`<span
2
+ aria-hidden="true"
3
+ class="skdx-workspace-switcher__leading"
4
+ >${this.renderLeading(e)}</span
5
+ >`:r.nothing}
6
+ <span class="skdx-workspace-switcher__current">${e?.label??this.placeholder}</span>
7
+ ${e?.description?r.html`<span class="skdx-workspace-switcher__description">${e.description}</span>`:r.nothing}`}listedItem(e){let t=e.id===this.currentValue;return r.html`<skdx-command-item
8
+ class="skdx-workspace-switcher__item"
9
+ .value=${e.id}
10
+ .keywords=${e.description?[e.label,e.description]:[e.label]}
11
+ ?disabled=${e.disabled}
12
+ data-selected=${t?"":r.nothing}
13
+ @select=${s=>this.select(s,e.id)}
14
+ >
15
+ ${this.renderLeading?r.html`<span
16
+ aria-hidden="true"
17
+ class="skdx-workspace-switcher__item-leading"
18
+ >${this.renderLeading(e)}</span
19
+ >`:r.nothing}
20
+ <span class="skdx-workspace-switcher__item-label">${e.label}</span>
21
+ ${e.description?r.html`<span class="skdx-workspace-switcher__item-description">${e.description}</span>`:r.nothing}
22
+ ${t?r.html`<skdx-visually-hidden>${this.selectedLabel}</skdx-visually-hidden>`:r.nothing}
23
+ </skdx-command-item>`}render(){let e=L(this.items??[],this.search);return r.html`
24
+ <skdx-popover-root
25
+ data-skdx-workspace-switcher-generated
26
+ modal="none"
27
+ @open-change=${this.handleOpenChange}
28
+ >
29
+ <skdx-popover-trigger
30
+ >${this.hasTrigger?r.nothing:this.derivedTrigger()}</skdx-popover-trigger
31
+ >
32
+ <skdx-popover-content
33
+ class="skdx-workspace-switcher__content"
34
+ align="start"
35
+ aria-label=${this.label??this.placeholder}
36
+ >
37
+ <skdx-command
38
+ .search=${this.search}
39
+ ?loading=${this.loading}
40
+ @search-change=${this.handleSearchChange}
41
+ @value-change=${m}
42
+ @item-select=${m}
43
+ >
44
+ <skdx-command-input
45
+ class="skdx-workspace-switcher__search"
46
+ placeholder=${this.searchPlaceholder??r.nothing}
47
+ ></skdx-command-input>
48
+ <skdx-command-list
49
+ class="skdx-workspace-switcher__list"
50
+ aria-label=${this.label??this.placeholder}
51
+ >
52
+ ${e.map(t=>r.html`<skdx-command-group
53
+ class="skdx-workspace-switcher__group"
54
+ heading=${t.heading??r.nothing}
55
+ >
56
+ ${t.items.map(s=>this.listedItem(s))}
57
+ </skdx-command-group>`)}
58
+ </skdx-command-list>
59
+ <skdx-command-loading class="skdx-workspace-switcher__loading"
60
+ >${this.loadingMessage}</skdx-command-loading
61
+ >
62
+ <skdx-command-empty class="skdx-workspace-switcher__empty"
63
+ >${this.emptyMessage}</skdx-command-empty
64
+ >
65
+ </skdx-command>
66
+ ${this.hasActions?r.html`<div class="skdx-workspace-switcher__footer"></div>`:r.nothing}
67
+ </skdx-popover-content>
68
+ </skdx-popover-root>
69
+ `}};o([(0,l.property)({attribute:!1})],a.prototype,"items",2),o([(0,l.property)({type:String})],a.prototype,"value",2),o([(0,l.property)({type:String,attribute:"default-value"})],a.prototype,"defaultValue",2),o([(0,l.property)({type:String})],a.prototype,"placeholder",2),o([(0,l.property)({type:String})],a.prototype,"label",2),o([(0,l.property)({type:String,attribute:"search-label"})],a.prototype,"searchLabel",2),o([(0,l.property)({type:String,attribute:"search-placeholder"})],a.prototype,"searchPlaceholder",2),o([(0,l.property)({type:String,attribute:"empty-message"})],a.prototype,"emptyMessage",2),o([(0,l.property)({type:String,attribute:"loading-message"})],a.prototype,"loadingMessage",2),o([(0,l.property)({type:Boolean})],a.prototype,"loading",2),o([(0,l.property)({type:String,attribute:"selected-label"})],a.prototype,"selectedLabel",2),o([(0,l.property)({attribute:!1})],a.prototype,"renderLeading",2),o([(0,l.property)({converter:_})],a.prototype,"open",2),o([(0,l.property)({type:Boolean,attribute:"default-open"})],a.prototype,"defaultOpen",2),a=o([(0,v.customElement)("skdx-workspace-switcher","workspace-switcher","root")],a);0&&(module.exports={SkdxWorkspaceSwitcher});
@@ -0,0 +1,165 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ import '@skdx/web-components/primitives/command';
3
+ import '@skdx/web-components/primitives/popover';
4
+ import '@skdx/web-components/visually-hidden';
5
+ /** One switchable context in the list — a workspace, organisation, team, account or project. */
6
+ export interface SkdxWorkspaceSwitcherItem {
7
+ /** Stable identifier reported to the change event and matched against the current value. */
8
+ id: string;
9
+ /** Human-readable name rendered as the item's first line and in the closed trigger. */
10
+ label: string;
11
+ /** Secondary line rendered under the label, such as a plan name or member count. @default undefined */
12
+ description?: string | undefined;
13
+ /** Heading of the group this item is listed under, gathering items that share it. @default undefined */
14
+ group?: string | undefined;
15
+ /** Lists the item but withholds selection, keyboard traversal and pointer highlighting. @default false */
16
+ disabled?: boolean | undefined;
17
+ }
18
+ /** What a `value-change` event carries: the picked id, the one it replaced, and what drove the change. */
19
+ export interface SkdxWorkspaceSwitcherValueChangeDetail {
20
+ /** Id of the context the user picked. */
21
+ value: string;
22
+ /** Id that was active immediately before, or `null` when nothing was. */
23
+ previousValue: string | null;
24
+ /** What drove the change: a key press, a pointer, or the application. */
25
+ reason: 'keyboard' | 'pointer' | 'programmatic';
26
+ }
27
+ /**
28
+ * Switches the active context — workspace, organisation, team, account or
29
+ * project — from a searchable, groupable list in a popover, with loading,
30
+ * empty and footer regions.
31
+ *
32
+ * Renders light DOM, so its parts are classes rather than shadow `::part()`
33
+ * targets: `.skdx-workspace-switcher` on the host, then `__leading`,
34
+ * `__current`, `__description`, `__content`, `__search`, `__list`, `__loading`,
35
+ * `__empty`, `__group`, `__item`, `__item-leading`, `__item-label`,
36
+ * `__item-description` and `__footer`. `data-selected` marks the active item.
37
+ *
38
+ * @example
39
+ * ```html
40
+ * <skdx-workspace-switcher id="switcher" default-value="acme"></skdx-workspace-switcher>
41
+ * <script>
42
+ * const switcher = document.getElementById('switcher');
43
+ * switcher.items = [{ id: 'acme', label: 'Acme', description: 'Pro' }];
44
+ * switcher.addEventListener('value-change', (event) => switchTo(event.detail.value));
45
+ * </script>
46
+ * ```
47
+ *
48
+ * @slot trigger - Content that replaces the derived trigger button entirely.
49
+ * @slot actions - Controls placed in the panel's footer, such as create and manage buttons.
50
+ * @fires value-change - Fires with the id of the item the user picked, immediately before the panel closes.
51
+ * @fires open-change - Fires with the new open state whenever the panel opens or closes, controlled or not.
52
+ * @fires open-change-complete - Fires with the new open state once the panel's enter or exit animation has settled.
53
+ * @fires escape-key-down - Fires when Escape is pressed while the panel is open; `preventDefault()` keeps it open.
54
+ * @fires pointer-down-outside - Fires on a pointer-down outside the panel while open; `preventDefault()` keeps it open.
55
+ * @fires focus-outside - Fires when focus moves outside the panel while open; `preventDefault()` keeps it open.
56
+ * @fires interact-outside - Fires for either kind of outside interaction, just before the specific event.
57
+ * @fires open-auto-focus - Fires before focus moves into the panel on open; `preventDefault()` leaves focus where it is.
58
+ * @fires close-auto-focus - Fires before focus returns to the trigger on close; `preventDefault()` suppresses that return.
59
+ */
60
+ export declare class SkdxWorkspaceSwitcher extends LitElement {
61
+ /** Light DOM, so `@skdx/skins` and consumer CSS reach the composed core elements. */
62
+ createRenderRoot(): HTMLElement | DocumentFragment;
63
+ /** Every context the user may switch to, rendered in the order given and grouped by `group`. */
64
+ items: readonly SkdxWorkspaceSwitcherItem[];
65
+ /**
66
+ * Id of the active context, for controlled usage paired with `value-change`.
67
+ * @default undefined — uncontrolled, following `defaultValue`.
68
+ */
69
+ value?: string | undefined;
70
+ /**
71
+ * Id of the context active on first render, for uncontrolled usage.
72
+ * @default '' — the trigger shows the placeholder until one is picked.
73
+ */
74
+ defaultValue: string;
75
+ /**
76
+ * Trigger text shown while no item in the list is the active one.
77
+ * @default 'Select'
78
+ */
79
+ placeholder: string;
80
+ /**
81
+ * Accessible name for the trigger and the result list, when the visible text is not enough.
82
+ * @default undefined — the trigger is named by its own visible text.
83
+ */
84
+ label?: string | undefined;
85
+ /**
86
+ * Accessible name of the search field inside the open panel.
87
+ * @default 'Search'
88
+ */
89
+ searchLabel: string;
90
+ /**
91
+ * Placeholder text shown inside the panel's empty search field.
92
+ * @default undefined — the search field renders no placeholder.
93
+ */
94
+ searchPlaceholder?: string | undefined;
95
+ /**
96
+ * Message shown in place of the list when the search matches nothing.
97
+ * @default 'No results'
98
+ */
99
+ emptyMessage: string;
100
+ /**
101
+ * Message announced beside the list while results are still in flight.
102
+ * @default 'Loading'
103
+ */
104
+ loadingMessage: string;
105
+ /**
106
+ * Marks the results as in flight, showing the loading message instead of the empty one.
107
+ * @default false
108
+ */
109
+ loading: boolean;
110
+ /**
111
+ * Visually hidden text appended to the active item, naming it for screen readers.
112
+ * @default 'Current'
113
+ */
114
+ selectedLabel: string;
115
+ /**
116
+ * Renders a decorative glyph — an avatar or a logo — for one item and for the trigger.
117
+ * @default undefined — no leading region renders anywhere.
118
+ */
119
+ renderLeading?: ((item: SkdxWorkspaceSwitcherItem) => unknown) | undefined;
120
+ /**
121
+ * Whether the panel is open, for controlled usage paired with `open-change`.
122
+ * @default undefined — uncontrolled, following `defaultOpen`.
123
+ */
124
+ open?: boolean | undefined;
125
+ /**
126
+ * Whether the panel is open on first render, for uncontrolled usage.
127
+ * @default false
128
+ */
129
+ defaultOpen: boolean;
130
+ /** What the list last chose; outranked by `value` whenever the consumer controls it. */
131
+ private uncontrolledValue?;
132
+ /** What the trigger last chose; outranked by `open` whenever the consumer controls it. */
133
+ private uncontrolledOpen?;
134
+ /** Current search text, cleared whenever the panel closes so it reopens on the full list. */
135
+ private search;
136
+ /** What drove the gesture in flight, read when a selection is reported. */
137
+ private reason;
138
+ /** Id of the active context right now, controlled or not. */
139
+ private get currentValue();
140
+ /** Whether the panel is open right now, controlled or not. */
141
+ private get isOpen();
142
+ connectedCallback(): void;
143
+ disconnectedCallback(): void;
144
+ private readonly notePointer;
145
+ private readonly noteKeyboard;
146
+ /** Whether the consumer supplied their own trigger — still true once it has been moved in. */
147
+ private get hasTrigger();
148
+ /** Whether the consumer supplied footer controls — still true once they have been moved in. */
149
+ private get hasActions();
150
+ private region;
151
+ private readonly handleOpenChange;
152
+ private setOpen;
153
+ private readonly handleSearchChange;
154
+ private select;
155
+ private nameTrigger;
156
+ protected updated(): void;
157
+ private derivedTrigger;
158
+ private listedItem;
159
+ render(): TemplateResult;
160
+ }
161
+ declare global {
162
+ interface HTMLElementTagNameMap {
163
+ 'skdx-workspace-switcher': SkdxWorkspaceSwitcher;
164
+ }
165
+ }