@skdx/web-components-blocks 0.1.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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/custom-elements.json +695 -0
  4. package/dist/dashboard-layout/DashboardLayout.cjs +50 -0
  5. package/dist/dashboard-layout/DashboardLayout.d.cts +87 -0
  6. package/dist/dashboard-layout/DashboardLayout.d.ts +87 -0
  7. package/dist/dashboard-layout/DashboardLayout.js +50 -0
  8. package/dist/dashboard-layout/index.cjs +1 -0
  9. package/dist/dashboard-layout/index.d.cts +1 -0
  10. package/dist/dashboard-layout/index.d.ts +1 -0
  11. package/dist/dashboard-layout/index.js +1 -0
  12. package/dist/index.cjs +1 -0
  13. package/dist/index.d.cts +3 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.js +1 -0
  16. package/dist/internal/define.cjs +1 -0
  17. package/dist/internal/define.d.cts +8 -0
  18. package/dist/internal/define.d.ts +8 -0
  19. package/dist/internal/define.js +1 -0
  20. package/dist/internal/events.cjs +1 -0
  21. package/dist/internal/events.d.cts +12 -0
  22. package/dist/internal/events.d.ts +12 -0
  23. package/dist/internal/events.js +1 -0
  24. package/dist/internal/part.cjs +1 -0
  25. package/dist/internal/part.d.cts +10 -0
  26. package/dist/internal/part.d.ts +10 -0
  27. package/dist/internal/part.js +1 -0
  28. package/dist/internal/slots.cjs +1 -0
  29. package/dist/internal/slots.d.cts +9 -0
  30. package/dist/internal/slots.d.ts +9 -0
  31. package/dist/internal/slots.js +1 -0
  32. package/dist/page-container/PageContainer.cjs +29 -0
  33. package/dist/page-container/PageContainer.d.cts +70 -0
  34. package/dist/page-container/PageContainer.d.ts +70 -0
  35. package/dist/page-container/PageContainer.js +29 -0
  36. package/dist/page-container/index.cjs +1 -0
  37. package/dist/page-container/index.d.cts +1 -0
  38. package/dist/page-container/index.d.ts +1 -0
  39. package/dist/page-container/index.js +1 -0
  40. package/dist/sign-in-page/SignInPage.cjs +63 -0
  41. package/dist/sign-in-page/SignInPage.d.cts +101 -0
  42. package/dist/sign-in-page/SignInPage.d.ts +101 -0
  43. package/dist/sign-in-page/SignInPage.js +63 -0
  44. package/dist/sign-in-page/index.cjs +1 -0
  45. package/dist/sign-in-page/index.d.cts +1 -0
  46. package/dist/sign-in-page/index.d.ts +1 -0
  47. package/dist/sign-in-page/index.js +1 -0
  48. package/package.json +117 -0
@@ -0,0 +1,29 @@
1
+ var p=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var r=(o,a,i,s)=>{for(var t=s>1?void 0:s?m(a,i):a,l=o.length-1,d;l>=0;l--)(d=o[l])&&(t=(s?d(a,i,t):d(t))||t);return s&&t&&p(a,i,t),t};import{html as c,LitElement as u,nothing as b}from"lit";import{property as n}from"lit/decorators.js";import{customElement as g}from"../internal/define.js";import{placeSlotted as h}from"../internal/slots.js";import"@skdx/web-components/breadcrumb";import"@skdx/web-components/heading";import"@skdx/web-components/toolbar";var k="data-skdx-page-container-generated",v=0,e=class extends u{constructor(){super(...arguments);this.headingLevel=1;this.breadcrumbLabel="Breadcrumb";this.actionsLabel="Page actions";this.titleId=`skdx-page-container-title-${++v}`}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.setAttribute("role","region"),this.setAttribute("aria-labelledby",this.titleId),queueMicrotask(()=>this.requestUpdate())}get hasActions(){return this.querySelector('[slot="actions"]')!==null}region(i){return this.querySelector(`.skdx-page-container__${i}`)}updated(){h(this,k,{actions:this.region("actions")},this.region("content"))}render(){return c`
2
+ <header
3
+ class="skdx-page-container__header"
4
+ data-skdx-page-container-generated
5
+ role="none"
6
+ >
7
+ ${this.breadcrumbs?.length?c`<skdx-breadcrumb
8
+ class="skdx-page-container__breadcrumbs"
9
+ label=${this.breadcrumbLabel}
10
+ .items=${this.breadcrumbs}
11
+ ></skdx-breadcrumb>`:b}
12
+ <div class="skdx-page-container__heading-row">
13
+ <skdx-heading
14
+ class="skdx-page-container__title"
15
+ as=${`h${this.headingLevel}`}
16
+ id=${this.titleId}
17
+ >${this.title??""}</skdx-heading
18
+ >
19
+ ${this.hasActions?c`<skdx-toolbar
20
+ class="skdx-page-container__actions"
21
+ aria-label=${this.actionsLabel}
22
+ ></skdx-toolbar>`:b}
23
+ </div>
24
+ </header>
25
+ <div
26
+ class="skdx-page-container__content"
27
+ data-skdx-page-container-generated
28
+ ></div>
29
+ `}};r([n({type:String})],e.prototype,"title",2),r([n({type:Number,attribute:"heading-level"})],e.prototype,"headingLevel",2),r([n({attribute:!1})],e.prototype,"breadcrumbs",2),r([n({type:String,attribute:"breadcrumb-label"})],e.prototype,"breadcrumbLabel",2),r([n({type:String,attribute:"actions-label"})],e.prototype,"actionsLabel",2),e=r([g("skdx-page-container","page-container","root")],e);export{e as SkdxPageContainer};
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var k=(r,e)=>{for(var n in e)o(r,n,{get:e[n],enumerable:!0})},m=(r,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of g(e))!i.call(r,a)&&a!==n&&o(r,a,{get:()=>e[a],enumerable:!(t=x(e,a))||t.enumerable});return r};var p=r=>m(o({},"__esModule",{value:!0}),r);var C={};k(C,{SkdxPageContainer:()=>d.SkdxPageContainer});module.exports=p(C);var d=require("./PageContainer.cjs");0&&(module.exports={SkdxPageContainer});
@@ -0,0 +1 @@
1
+ export { SkdxPageContainer, type SkdxPageContainerBreadcrumb } from './PageContainer.cjs';
@@ -0,0 +1 @@
1
+ export { SkdxPageContainer, type SkdxPageContainerBreadcrumb } from './PageContainer.js';
@@ -0,0 +1 @@
1
+ import{SkdxPageContainer as a}from"./PageContainer.js";export{a as SkdxPageContainer};
@@ -0,0 +1,63 @@
1
+ "use strict";var m=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var f=(s,r)=>{for(var e in r)m(s,e,{get:r[e],enumerable:!0})},_=(s,r,e,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of x(r))!h.call(s,t)&&t!==e&&m(s,t,{get:()=>r[t],enumerable:!(i=c(r,t))||i.enumerable});return s};var L=s=>_(m({},"__esModule",{value:!0}),s),l=(s,r,e,i)=>{for(var t=i>1?void 0:i?c(r,e):r,p=s.length-1,a;p>=0;p--)(a=s[p])&&(t=(i?a(r,e,t):a(t))||t);return i&&t&&m(r,e,t),t};var y={};f(y,{SkdxSignInPage:()=>d,defaultProviderLabel:()=>k});module.exports=L(y);var n=require("lit"),o=require("lit/decorators.js"),v=require("../internal/define.cjs"),g=require("../internal/events.cjs"),E=require("@skdx/web-components/alert"),S=require("@skdx/web-components/button"),I=require("@skdx/web-components/divider"),R=require("@skdx/web-components/field"),T=require("@skdx/web-components/form"),D=require("@skdx/web-components/heading"),q=require("@skdx/web-components/password-input"),M=require("@skdx/web-components/text-field");function k(s){return`Sign in with ${s.name}`}var u=new Set(["credentials","magic-link"]),$=0,d=class extends n.LitElement{constructor(){super(...arguments);this.title="Sign in";this.emailLabel="Email";this.passwordLabel="Password";this.submitLabel="Sign in";this.magicLinkLabel="Send magic link";this.titleId=`skdx-sign-in-page-title-${++$}`;this.handleSubmit=e=>{let i=e.target?.closest("skdx-form[data-provider]");if(!i)return;e.preventDefault();let t=i.getAttribute("data-provider")??"",p=b(i,"email");(0,g.emit)(this,"sign-in",t==="credentials"?{providerId:t,email:p,password:b(i,"password")}:{providerId:t,email:p})}}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.setAttribute("role","region"),this.setAttribute("aria-labelledby",this.titleId),this.addEventListener("submit",this.handleSubmit)}disconnectedCallback(){this.removeEventListener("submit",this.handleSubmit),super.disconnectedCallback()}signInWithProvider(e){(0,g.emit)(this,"sign-in",{providerId:e})}signInForm(e){let i=e.id==="credentials";return n.html`<skdx-form
2
+ class="skdx-sign-in-page__form"
3
+ data-provider=${e.id}
4
+ >
5
+ <form>
6
+ <skdx-field
7
+ class="skdx-sign-in-page__field"
8
+ label=${this.emailLabel}
9
+ required
10
+ >
11
+ <skdx-text-field
12
+ name="email"
13
+ type="email"
14
+ required
15
+ >
16
+ <skdx-text-field-input
17
+ type="email"
18
+ autocomplete="email"
19
+ ></skdx-text-field-input>
20
+ </skdx-text-field>
21
+ </skdx-field>
22
+ ${i?n.html`<skdx-field
23
+ class="skdx-sign-in-page__field"
24
+ label=${this.passwordLabel}
25
+ required
26
+ >
27
+ <skdx-password-input
28
+ name="password"
29
+ required
30
+ ></skdx-password-input>
31
+ </skdx-field>`:n.nothing}
32
+ <skdx-button
33
+ class="skdx-sign-in-page__submit"
34
+ type="submit"
35
+ >${i?this.submitLabel:this.magicLinkLabel}</skdx-button
36
+ >
37
+ </form>
38
+ </skdx-form>`}render(){let e=this.providers??[],i=e.filter(a=>!u.has(a.id)),t=e.filter(a=>u.has(a.id)),p=this.getProviderLabel??k;return n.html`
39
+ <div class="skdx-sign-in-page__panel">
40
+ <skdx-heading
41
+ class="skdx-sign-in-page__title"
42
+ as="h1"
43
+ id=${this.titleId}
44
+ >${this.title}</skdx-heading
45
+ >
46
+ ${this.error?n.html`<skdx-alert
47
+ class="skdx-sign-in-page__error"
48
+ data-status="danger"
49
+ >${this.error}</skdx-alert
50
+ >`:n.nothing}
51
+ ${i.length?n.html`<div class="skdx-sign-in-page__providers">
52
+ ${i.map(a=>n.html`<skdx-button
53
+ class="skdx-sign-in-page__provider"
54
+ type="button"
55
+ data-provider=${a.id}
56
+ @click=${()=>this.signInWithProvider(a.id)}
57
+ >${p(a)}</skdx-button
58
+ >`)}
59
+ </div>`:n.nothing}
60
+ ${i.length&&t.length?n.html`<skdx-divider class="skdx-sign-in-page__divider"></skdx-divider>`:n.nothing}
61
+ ${t.map(a=>this.signInForm(a))}
62
+ </div>
63
+ `}};l([(0,o.property)({type:String})],d.prototype,"title",2),l([(0,o.property)({attribute:!1})],d.prototype,"providers",2),l([(0,o.property)({type:String})],d.prototype,"error",2),l([(0,o.property)({type:String,attribute:"email-label"})],d.prototype,"emailLabel",2),l([(0,o.property)({type:String,attribute:"password-label"})],d.prototype,"passwordLabel",2),l([(0,o.property)({type:String,attribute:"submit-label"})],d.prototype,"submitLabel",2),l([(0,o.property)({type:String,attribute:"magic-link-label"})],d.prototype,"magicLinkLabel",2),l([(0,o.property)({attribute:!1})],d.prototype,"getProviderLabel",2),d=l([(0,v.customElement)("skdx-sign-in-page","sign-in-page","root")],d);function b(s,r){return s.querySelector(`[name="${r}"]`)?.value??""}0&&(module.exports={SkdxSignInPage,defaultProviderLabel});
@@ -0,0 +1,101 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ import '@skdx/web-components/alert';
3
+ import '@skdx/web-components/button';
4
+ import '@skdx/web-components/divider';
5
+ import '@skdx/web-components/field';
6
+ import '@skdx/web-components/form';
7
+ import '@skdx/web-components/heading';
8
+ import '@skdx/web-components/password-input';
9
+ import '@skdx/web-components/text-field';
10
+ /** One way to sign in, rendered as a provider button or as one of the two forms. */
11
+ export interface SkdxSignInProvider {
12
+ /** The provider's id; `'credentials'` and `'magic-link'` render forms, anything else a button. */
13
+ id: string;
14
+ /** The provider's display name, which the default button label reads. */
15
+ name: string;
16
+ }
17
+ /** What a `sign-in` event carries: the chosen provider, plus the values of the form that submitted. */
18
+ export interface SkdxSignInDetail {
19
+ /** The `id` of the provider the user chose. */
20
+ providerId: string;
21
+ /** The email the submitted form held; absent for a provider button. */
22
+ email?: string;
23
+ /** The password the credentials form held; absent otherwise. */
24
+ password?: string;
25
+ }
26
+ /** Default provider button text, reading "Sign in with Google" for a provider named Google. */
27
+ export declare function defaultProviderLabel(provider: SkdxSignInProvider): string;
28
+ /**
29
+ * Sign-in block: provider buttons, an email and password form, and a magic-link form.
30
+ *
31
+ * Renders light DOM, so its parts are classes rather than shadow `::part()`
32
+ * targets: `.skdx-sign-in-page` on the host, then `__panel`, `__title`,
33
+ * `__error`, `__providers`, `__provider`, `__divider`, `__form`, `__field`
34
+ * and `__submit`.
35
+ *
36
+ * @example
37
+ * ```html
38
+ * <skdx-sign-in-page id="sign-in"></skdx-sign-in-page>
39
+ * <script>
40
+ * const page = document.getElementById('sign-in');
41
+ * page.providers = [{ id: 'credentials', name: 'Email' }];
42
+ * page.addEventListener('sign-in', (event) => console.log(event.detail));
43
+ * </script>
44
+ * ```
45
+ *
46
+ * @fires sign-in - Fires with `{ providerId, email?, password? }` when a provider button is activated or a form submits with valid fields.
47
+ */
48
+ export declare class SkdxSignInPage extends LitElement {
49
+ /** Light DOM, so `@skdx/skins` and consumer CSS reach the composed core elements. */
50
+ createRenderRoot(): HTMLElement | DocumentFragment;
51
+ /**
52
+ * Heading text, rendered into a derived `<h1>` that names the section.
53
+ * @default 'Sign in'
54
+ */
55
+ title: string;
56
+ /** The ways to sign in, in render order; `'credentials'` and `'magic-link'` render their forms. */
57
+ providers: readonly SkdxSignInProvider[];
58
+ /**
59
+ * Message rendered into a derived error Alert above the providers. The block never clears it.
60
+ * @default undefined — no alert renders.
61
+ */
62
+ error?: string;
63
+ /**
64
+ * Label of the email field in both forms.
65
+ * @default 'Email'
66
+ */
67
+ emailLabel: string;
68
+ /**
69
+ * Label of the password field in the credentials form.
70
+ * @default 'Password'
71
+ */
72
+ passwordLabel: string;
73
+ /**
74
+ * Text of the credentials form submit button.
75
+ * @default 'Sign in'
76
+ */
77
+ submitLabel: string;
78
+ /**
79
+ * Text of the magic-link form submit button.
80
+ * @default 'Send magic link'
81
+ */
82
+ magicLinkLabel: string;
83
+ /**
84
+ * Formats a provider button's text from its entry.
85
+ * @default defaultProviderLabel — reads "Sign in with Google".
86
+ */
87
+ getProviderLabel?: (provider: SkdxSignInProvider) => string;
88
+ /** Generated title id, published as the section's `aria-labelledby`. */
89
+ private readonly titleId;
90
+ connectedCallback(): void;
91
+ disconnectedCallback(): void;
92
+ private readonly handleSubmit;
93
+ private signInWithProvider;
94
+ private signInForm;
95
+ render(): TemplateResult;
96
+ }
97
+ declare global {
98
+ interface HTMLElementTagNameMap {
99
+ 'skdx-sign-in-page': SkdxSignInPage;
100
+ }
101
+ }
@@ -0,0 +1,101 @@
1
+ import { LitElement, type TemplateResult } from 'lit';
2
+ import '@skdx/web-components/alert';
3
+ import '@skdx/web-components/button';
4
+ import '@skdx/web-components/divider';
5
+ import '@skdx/web-components/field';
6
+ import '@skdx/web-components/form';
7
+ import '@skdx/web-components/heading';
8
+ import '@skdx/web-components/password-input';
9
+ import '@skdx/web-components/text-field';
10
+ /** One way to sign in, rendered as a provider button or as one of the two forms. */
11
+ export interface SkdxSignInProvider {
12
+ /** The provider's id; `'credentials'` and `'magic-link'` render forms, anything else a button. */
13
+ id: string;
14
+ /** The provider's display name, which the default button label reads. */
15
+ name: string;
16
+ }
17
+ /** What a `sign-in` event carries: the chosen provider, plus the values of the form that submitted. */
18
+ export interface SkdxSignInDetail {
19
+ /** The `id` of the provider the user chose. */
20
+ providerId: string;
21
+ /** The email the submitted form held; absent for a provider button. */
22
+ email?: string;
23
+ /** The password the credentials form held; absent otherwise. */
24
+ password?: string;
25
+ }
26
+ /** Default provider button text, reading "Sign in with Google" for a provider named Google. */
27
+ export declare function defaultProviderLabel(provider: SkdxSignInProvider): string;
28
+ /**
29
+ * Sign-in block: provider buttons, an email and password form, and a magic-link form.
30
+ *
31
+ * Renders light DOM, so its parts are classes rather than shadow `::part()`
32
+ * targets: `.skdx-sign-in-page` on the host, then `__panel`, `__title`,
33
+ * `__error`, `__providers`, `__provider`, `__divider`, `__form`, `__field`
34
+ * and `__submit`.
35
+ *
36
+ * @example
37
+ * ```html
38
+ * <skdx-sign-in-page id="sign-in"></skdx-sign-in-page>
39
+ * <script>
40
+ * const page = document.getElementById('sign-in');
41
+ * page.providers = [{ id: 'credentials', name: 'Email' }];
42
+ * page.addEventListener('sign-in', (event) => console.log(event.detail));
43
+ * </script>
44
+ * ```
45
+ *
46
+ * @fires sign-in - Fires with `{ providerId, email?, password? }` when a provider button is activated or a form submits with valid fields.
47
+ */
48
+ export declare class SkdxSignInPage extends LitElement {
49
+ /** Light DOM, so `@skdx/skins` and consumer CSS reach the composed core elements. */
50
+ createRenderRoot(): HTMLElement | DocumentFragment;
51
+ /**
52
+ * Heading text, rendered into a derived `<h1>` that names the section.
53
+ * @default 'Sign in'
54
+ */
55
+ title: string;
56
+ /** The ways to sign in, in render order; `'credentials'` and `'magic-link'` render their forms. */
57
+ providers: readonly SkdxSignInProvider[];
58
+ /**
59
+ * Message rendered into a derived error Alert above the providers. The block never clears it.
60
+ * @default undefined — no alert renders.
61
+ */
62
+ error?: string;
63
+ /**
64
+ * Label of the email field in both forms.
65
+ * @default 'Email'
66
+ */
67
+ emailLabel: string;
68
+ /**
69
+ * Label of the password field in the credentials form.
70
+ * @default 'Password'
71
+ */
72
+ passwordLabel: string;
73
+ /**
74
+ * Text of the credentials form submit button.
75
+ * @default 'Sign in'
76
+ */
77
+ submitLabel: string;
78
+ /**
79
+ * Text of the magic-link form submit button.
80
+ * @default 'Send magic link'
81
+ */
82
+ magicLinkLabel: string;
83
+ /**
84
+ * Formats a provider button's text from its entry.
85
+ * @default defaultProviderLabel — reads "Sign in with Google".
86
+ */
87
+ getProviderLabel?: (provider: SkdxSignInProvider) => string;
88
+ /** Generated title id, published as the section's `aria-labelledby`. */
89
+ private readonly titleId;
90
+ connectedCallback(): void;
91
+ disconnectedCallback(): void;
92
+ private readonly handleSubmit;
93
+ private signInWithProvider;
94
+ private signInForm;
95
+ render(): TemplateResult;
96
+ }
97
+ declare global {
98
+ interface HTMLElementTagNameMap {
99
+ 'skdx-sign-in-page': SkdxSignInPage;
100
+ }
101
+ }
@@ -0,0 +1,63 @@
1
+ var b=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var n=(l,o,t,e)=>{for(var i=e>1?void 0:e?v(o,t):o,a=l.length-1,r;a>=0;a--)(r=l[a])&&(i=(e?r(o,t,i):r(i))||i);return e&&i&&b(o,t,i),i};import{html as p,LitElement as k,nothing as m}from"lit";import{property as d}from"lit/decorators.js";import{customElement as x}from"../internal/define.js";import{emit as g}from"../internal/events.js";import"@skdx/web-components/alert";import"@skdx/web-components/button";import"@skdx/web-components/divider";import"@skdx/web-components/field";import"@skdx/web-components/form";import"@skdx/web-components/heading";import"@skdx/web-components/password-input";import"@skdx/web-components/text-field";function h(l){return`Sign in with ${l.name}`}var c=new Set(["credentials","magic-link"]),f=0,s=class extends k{constructor(){super(...arguments);this.title="Sign in";this.emailLabel="Email";this.passwordLabel="Password";this.submitLabel="Sign in";this.magicLinkLabel="Send magic link";this.titleId=`skdx-sign-in-page-title-${++f}`;this.handleSubmit=t=>{let e=t.target?.closest("skdx-form[data-provider]");if(!e)return;t.preventDefault();let i=e.getAttribute("data-provider")??"",a=u(e,"email");g(this,"sign-in",i==="credentials"?{providerId:i,email:a,password:u(e,"password")}:{providerId:i,email:a})}}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.setAttribute("role","region"),this.setAttribute("aria-labelledby",this.titleId),this.addEventListener("submit",this.handleSubmit)}disconnectedCallback(){this.removeEventListener("submit",this.handleSubmit),super.disconnectedCallback()}signInWithProvider(t){g(this,"sign-in",{providerId:t})}signInForm(t){let e=t.id==="credentials";return p`<skdx-form
2
+ class="skdx-sign-in-page__form"
3
+ data-provider=${t.id}
4
+ >
5
+ <form>
6
+ <skdx-field
7
+ class="skdx-sign-in-page__field"
8
+ label=${this.emailLabel}
9
+ required
10
+ >
11
+ <skdx-text-field
12
+ name="email"
13
+ type="email"
14
+ required
15
+ >
16
+ <skdx-text-field-input
17
+ type="email"
18
+ autocomplete="email"
19
+ ></skdx-text-field-input>
20
+ </skdx-text-field>
21
+ </skdx-field>
22
+ ${e?p`<skdx-field
23
+ class="skdx-sign-in-page__field"
24
+ label=${this.passwordLabel}
25
+ required
26
+ >
27
+ <skdx-password-input
28
+ name="password"
29
+ required
30
+ ></skdx-password-input>
31
+ </skdx-field>`:m}
32
+ <skdx-button
33
+ class="skdx-sign-in-page__submit"
34
+ type="submit"
35
+ >${e?this.submitLabel:this.magicLinkLabel}</skdx-button
36
+ >
37
+ </form>
38
+ </skdx-form>`}render(){let t=this.providers??[],e=t.filter(r=>!c.has(r.id)),i=t.filter(r=>c.has(r.id)),a=this.getProviderLabel??h;return p`
39
+ <div class="skdx-sign-in-page__panel">
40
+ <skdx-heading
41
+ class="skdx-sign-in-page__title"
42
+ as="h1"
43
+ id=${this.titleId}
44
+ >${this.title}</skdx-heading
45
+ >
46
+ ${this.error?p`<skdx-alert
47
+ class="skdx-sign-in-page__error"
48
+ data-status="danger"
49
+ >${this.error}</skdx-alert
50
+ >`:m}
51
+ ${e.length?p`<div class="skdx-sign-in-page__providers">
52
+ ${e.map(r=>p`<skdx-button
53
+ class="skdx-sign-in-page__provider"
54
+ type="button"
55
+ data-provider=${r.id}
56
+ @click=${()=>this.signInWithProvider(r.id)}
57
+ >${a(r)}</skdx-button
58
+ >`)}
59
+ </div>`:m}
60
+ ${e.length&&i.length?p`<skdx-divider class="skdx-sign-in-page__divider"></skdx-divider>`:m}
61
+ ${i.map(r=>this.signInForm(r))}
62
+ </div>
63
+ `}};n([d({type:String})],s.prototype,"title",2),n([d({attribute:!1})],s.prototype,"providers",2),n([d({type:String})],s.prototype,"error",2),n([d({type:String,attribute:"email-label"})],s.prototype,"emailLabel",2),n([d({type:String,attribute:"password-label"})],s.prototype,"passwordLabel",2),n([d({type:String,attribute:"submit-label"})],s.prototype,"submitLabel",2),n([d({type:String,attribute:"magic-link-label"})],s.prototype,"magicLinkLabel",2),n([d({attribute:!1})],s.prototype,"getProviderLabel",2),s=n([x("skdx-sign-in-page","sign-in-page","root")],s);function u(l,o){return l.querySelector(`[name="${o}"]`)?.value??""}export{s as SkdxSignInPage,h as defaultProviderLabel};
@@ -0,0 +1 @@
1
+ "use strict";var S=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var x=(d,e)=>{for(var n in e)S(d,n,{get:e[n],enumerable:!0})},k=(d,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of g(e))!o.call(d,i)&&i!==n&&S(d,i,{get:()=>e[i],enumerable:!(t=a(e,i))||t.enumerable});return d};var l=d=>k(S({},"__esModule",{value:!0}),d);var p={};x(p,{SkdxSignInPage:()=>r.SkdxSignInPage,defaultProviderLabel:()=>r.defaultProviderLabel});module.exports=l(p);var r=require("./SignInPage.cjs");0&&(module.exports={SkdxSignInPage,defaultProviderLabel});
@@ -0,0 +1 @@
1
+ export { defaultProviderLabel, SkdxSignInPage, type SkdxSignInDetail, type SkdxSignInProvider, } from './SignInPage.cjs';
@@ -0,0 +1 @@
1
+ export { defaultProviderLabel, SkdxSignInPage, type SkdxSignInDetail, type SkdxSignInProvider, } from './SignInPage.js';
@@ -0,0 +1 @@
1
+ import{defaultProviderLabel as i,SkdxSignInPage as n}from"./SignInPage.js";export{n as SkdxSignInPage,i as defaultProviderLabel};
package/package.json ADDED
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "@skdx/web-components-blocks",
3
+ "version": "0.1.0",
4
+ "description": "Web Components blocks for the SkandaDX design system — page-level compositions of @skdx/web-components styled by @skdx/skins",
5
+ "license": "MIT",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "homepage": "https://github.com/SkandaDX/ui.skdx/tree/main/packages/web-components-blocks#readme",
10
+ "repository": {
11
+ "directory": "packages/web-components-blocks",
12
+ "type": "git",
13
+ "url": "git+https://github.com/SkandaDX/ui.skdx.git"
14
+ },
15
+ "bugs": {
16
+ "url": "https://github.com/SkandaDX/ui.skdx/issues"
17
+ },
18
+ "type": "module",
19
+ "engines": {
20
+ "node": ">=18.18.0"
21
+ },
22
+ "main": "./dist/index.cjs",
23
+ "module": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "customElements": "custom-elements.json",
26
+ "exports": {
27
+ ".": {
28
+ "import": {
29
+ "types": "./dist/index.d.ts",
30
+ "default": "./dist/index.js"
31
+ },
32
+ "require": {
33
+ "types": "./dist/index.d.cts",
34
+ "default": "./dist/index.cjs"
35
+ }
36
+ },
37
+ "./dashboard-layout": {
38
+ "import": {
39
+ "types": "./dist/dashboard-layout/index.d.ts",
40
+ "default": "./dist/dashboard-layout/index.js"
41
+ },
42
+ "require": {
43
+ "types": "./dist/dashboard-layout/index.d.cts",
44
+ "default": "./dist/dashboard-layout/index.cjs"
45
+ }
46
+ },
47
+ "./package.json": "./package.json",
48
+ "./page-container": {
49
+ "import": {
50
+ "types": "./dist/page-container/index.d.ts",
51
+ "default": "./dist/page-container/index.js"
52
+ },
53
+ "require": {
54
+ "types": "./dist/page-container/index.d.cts",
55
+ "default": "./dist/page-container/index.cjs"
56
+ }
57
+ },
58
+ "./sign-in-page": {
59
+ "import": {
60
+ "types": "./dist/sign-in-page/index.d.ts",
61
+ "default": "./dist/sign-in-page/index.js"
62
+ },
63
+ "require": {
64
+ "types": "./dist/sign-in-page/index.d.cts",
65
+ "default": "./dist/sign-in-page/index.cjs"
66
+ }
67
+ }
68
+ },
69
+ "files": [
70
+ "dist",
71
+ "custom-elements.json",
72
+ "!dist/**/*.md",
73
+ "!dist/**/*.test.*",
74
+ "!dist/**/*.map"
75
+ ],
76
+ "sideEffects": [
77
+ "./dist/dashboard-layout/DashboardLayout.cjs",
78
+ "./dist/dashboard-layout/DashboardLayout.js",
79
+ "./dist/dashboard-layout/index.cjs",
80
+ "./dist/dashboard-layout/index.js",
81
+ "./dist/index.cjs",
82
+ "./dist/index.js",
83
+ "./dist/page-container/PageContainer.cjs",
84
+ "./dist/page-container/PageContainer.js",
85
+ "./dist/page-container/index.cjs",
86
+ "./dist/page-container/index.js",
87
+ "./dist/sign-in-page/SignInPage.cjs",
88
+ "./dist/sign-in-page/SignInPage.js",
89
+ "./dist/sign-in-page/index.cjs",
90
+ "./dist/sign-in-page/index.js"
91
+ ],
92
+ "peerDependencies": {
93
+ "lit": "^3.3.0",
94
+ "@skdx/web-components": "^0.33.0"
95
+ },
96
+ "devDependencies": {
97
+ "@custom-elements-manifest/analyzer": "^0.10.4",
98
+ "@vitest/coverage-v8": "^4.1.10",
99
+ "axe-core": "^4.12.1",
100
+ "jsdom": "^29.1.1",
101
+ "lit": "^3.3.0",
102
+ "tsup": "^8.5.1",
103
+ "typescript": "^6.0.3",
104
+ "vitest": "^4.1.10",
105
+ "@skdx/web-components": "0.33.0"
106
+ },
107
+ "scripts": {
108
+ "lint": "eslint . --cache --cache-location node_modules/.cache/eslint/",
109
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsup && tsc -p tsconfig.build.json --emitDeclarationOnly && node ../../scripts/declarations-cjs.mjs",
110
+ "analyze": "cem analyze --litelement --globs \"src/**/*.ts\" --exclude \"src/**/*.test.ts\" --outdir .",
111
+ "dev": "tsup --watch",
112
+ "typecheck": "tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/tsc/typecheck.tsbuildinfo",
113
+ "test": "vitest run",
114
+ "test:watch": "vitest",
115
+ "test:coverage": "vitest run --coverage"
116
+ }
117
+ }