@mhmo91/schmancy 0.5.46 → 0.5.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ai/content-drawer.md +22 -11
- package/ai/sheet.md +32 -47
- package/dist/ai/content-drawer.md +22 -11
- package/dist/ai/sheet.md +32 -47
- package/dist/area.component-DAPQYHtN.cjs.map +1 -1
- package/dist/area.component-DUGxsL2-.js.map +1 -1
- package/dist/{avatar-CcHlQTbR.js → avatar-hoEk1kwv.js} +28 -40
- package/dist/avatar-hoEk1kwv.js.map +1 -0
- package/dist/{avatar-D93Sjal-.cjs → avatar-hzSHTXXv.cjs} +8 -8
- package/dist/avatar-hzSHTXXv.cjs.map +1 -0
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/{email-recipients-C-5ER5TU.js → email-recipients-DPpv0qRr.js} +4 -4
- package/dist/email-recipients-DPpv0qRr.js.map +1 -0
- package/dist/{email-recipients-DRxGI7gT.cjs → email-recipients-Uogc-X_3.cjs} +3 -3
- package/dist/email-recipients-Uogc-X_3.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +4 -4
- package/dist/mailbox.cjs +1 -1
- package/dist/mailbox.js +1 -1
- package/dist/nav-drawer.cjs +1 -1
- package/dist/nav-drawer.js +1 -1
- package/dist/navigation-bar.cjs +1 -1
- package/dist/navigation-bar.js +1 -1
- package/dist/{sheet-vJ5lJw8A.cjs → sheet-CcVGEdfr.cjs} +10 -6
- package/dist/sheet-CcVGEdfr.cjs.map +1 -0
- package/dist/{sheet-PXddkPIR.js → sheet-D5-XmZs5.js} +36 -28
- package/dist/sheet-D5-XmZs5.js.map +1 -0
- package/dist/sheet.cjs +1 -1
- package/dist/sheet.js +2 -2
- package/dist/sheet.service-C66WNur0.js +80 -0
- package/dist/sheet.service-C66WNur0.js.map +1 -0
- package/dist/sheet.service-iUShtJp1.cjs +2 -0
- package/dist/sheet.service-iUShtJp1.cjs.map +1 -0
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/package.json +1 -1
- package/types/src/area/router.types.d.ts +5 -1
- package/types/src/content-drawer/drawer.service.d.ts +2 -6
- package/types/src/mailbox/email-editor.d.ts +1 -1
- package/types/src/sheet/sheet.service.d.ts +2 -11
- package/dist/avatar-CcHlQTbR.js.map +0 -1
- package/dist/avatar-D93Sjal-.cjs.map +0 -1
- package/dist/email-recipients-C-5ER5TU.js.map +0 -1
- package/dist/email-recipients-DRxGI7gT.cjs.map +0 -1
- package/dist/sheet-PXddkPIR.js.map +0 -1
- package/dist/sheet-vJ5lJw8A.cjs.map +0 -1
- package/dist/sheet.service-BxvWBGsJ.cjs +0 -2
- package/dist/sheet.service-BxvWBGsJ.cjs.map +0 -1
- package/dist/sheet.service-lXqUf6n5.js +0 -87
- package/dist/sheet.service-lXqUf6n5.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const a=require("rxjs");require("rxjs/operators");const y=require("lit/directives/class-map.js");require("lit/directives/style-map.js");const h=require("lit/decorators.js"),g=require("./tailwind.mixin-CfBr6oca.cjs"),u=require("lit"),E=require("./litElement.mixin-vtpQghkf.cjs"),w=require("./area.component-DAPQYHtN.cjs"),k=require("lit/directives/cache.js"),f=require("lit/directives/if-defined.js"),v=require("lit/directives/ref.js"),d=require("./sheet.service-iUShtJp1.cjs");var x=Object.getOwnPropertyDescriptor;let b=class extends g.TailwindElement(u.css``){render(){return u.html`
|
|
2
2
|
<sch-flex class="absolute top-0 left-0 md:left-[unset] md:right-0">
|
|
3
3
|
<div class="block md:hidden flex-1 justify-start items-start">
|
|
4
4
|
<slot name="back">
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</slot>
|
|
21
21
|
</div>
|
|
22
22
|
</sch-flex>
|
|
23
|
-
`}};b=((t,e,i,
|
|
23
|
+
`}};b=((t,e,i,o)=>{for(var s,n=o>1?void 0:o?x(e,i):e,l=t.length-1;l>=0;l--)(s=t[l])&&(n=s(n)||n);return n})([h.customElement("schmancy-sheet-header")],b);var S=Object.defineProperty,$=Object.getOwnPropertyDescriptor,c=(t,e,i,o)=>{for(var s,n=o>1?void 0:o?$(e,i):e,l=t.length-1;l>=0;l--)(s=t[l])&&(n=(o?s(e,i,n):s(n))||n);return o&&n&&S(e,i,n),n};let r=class extends E.$LitElement(":host{--overlay-color: var(--schmancy-sys-color-surface-dim);--transition-timing: cubic-bezier(.16, 1, .3, 1);--transition-duration: .25s;--sheet-radius: 0;--max-height: 100vh}.sheet{position:fixed;inset:0;z-index:999;display:flex;visibility:visible;transition:visibility var(--transition-duration) var(--transition-timing)}.sheet[aria-hidden=true]{visibility:hidden;pointer-events:none}.sheet[aria-hidden=true] .content{transform:translateY(100%)}.sheet[aria-hidden=true] .content[data-position=side]{transform:translate(100%)}.sheet[aria-hidden=true] .overlay{opacity:0}.overlay{position:absolute;inset:0;background:var(--overlay-color);opacity:.8;transition:opacity var(--transition-duration) var(--transition-timing)}.content{z-index:1;transition:transform var(--transition-duration) var(--transition-timing);overflow:hidden}.content[data-position=side]{height:100vh}.content[data-position=side] #body{max-height:100vh}.content[data-position=side]{height:100%;min-width:320px;max-width:90vw;width:fit-content;margin-left:auto}.content[data-position=bottom] #body{max-height:90vh}.content[data-position=bottom]{width:100%;margin-top:auto;border-radius:16px 16px 0 0;max-height:90vh}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}"){constructor(){super(...arguments),this.open=!1,this.header="visible",this.position=d.SchmancySheetPosition.Side,this.persist=!1,this.lock=!1,this.handleHistory=!0,this.title="",this.sheetRef=v.createRef(),this.focusAttribute="autofocus",this.lastFocusedElement=null,this.handleOverlayClick=t=>{t.stopPropagation(),this.lock||d.sheet.dismiss(this.uid)},this.handleHeaderDismiss=t=>{t.stopPropagation(),d.sheet.dismiss(this.uid)}}onOpenChange(t,e){e?(this.lastFocusedElement=document.activeElement,this.setBackgroundInert(!0),this.focus()):(this.setBackgroundInert(!1),this.lastFocusedElement?.focus(),this.lastFocusedElement=null)}connectedCallback(){super.connectedCallback(),this.setupEventListeners()}disconnectedCallback(){super.disconnectedCallback(),this.disconnecting.next(!0)}setupEventListeners(){const t=this.handleHistory?a.fromEvent(window,"popstate").pipe(a.tap(s=>{s.preventDefault(),this.closeSheet()})):a.of(null).pipe(a.take(0)),e=a.fromEvent(this,"keydown").pipe(a.tap(s=>{s.key==="Escape"&&!this.lock&&this.open&&(s.preventDefault(),s.stopPropagation(),d.sheet.dismiss(this.uid))})),i=a.fromEvent(window,d.SheetWhereAreYouRicky).pipe(a.tap(s=>{s.detail.uid===this.uid&&this.dispatchEvent(new CustomEvent(d.SheetHereMorty,{detail:{sheet:this},bubbles:!0,composed:!0}))})),o=a.fromEvent(window,"schmancy-sheet-render").pipe(a.tap(s=>{const n=s.detail;n.uid===this.uid&&w.area.push({area:this.uid,component:n.component,historyStrategy:"silent"})}));a.merge(t,e,i,o).pipe(a.takeUntil(this.disconnecting)).subscribe()}setBackgroundInert(t){const e=this.parentElement;e&&Array.from(e.children).forEach(i=>{i!==this&&i instanceof HTMLElement&&(t?i.setAttribute("inert",""):i.removeAttribute("inert"))}),this.parentElement===document.body&&Array.from(document.body.children).forEach(i=>{i!==this&&i!==e&&i instanceof HTMLElement&&(t?i.setAttribute("inert",""):i.removeAttribute("inert"))})}setIsSheetShown(t){this.sheetRef.value?.setAttribute("aria-hidden",String(!t)),this.sheetRef.value?.setAttribute("aria-modal",String(t))}closeSheet(){this.open=!1,this.dispatchEvent(new CustomEvent("close"))}getFocusElement(){const t=`[${this.focusAttribute}]`;return this.assignedElements.find(e=>e.matches(t)||e.querySelector(t))??null}focus(){const t=this.querySelector("[autofocus]");t?t.focus():this.getFocusElement()?.focus()}render(){const t={sheet:!0,"sheet--open":this.open,"sheet--locked":this.lock},e={overlay:!0,"overlay--interactive":!this.lock};return u.html`
|
|
24
24
|
<div
|
|
25
25
|
class=${y.classMap(t)}
|
|
26
26
|
role="dialog"
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
class="content w-full"
|
|
37
37
|
data-position=${this.position}
|
|
38
38
|
>
|
|
39
|
-
${
|
|
39
|
+
${k.cache(this.header!=="hidden"?u.html`<schmancy-sheet-header
|
|
40
40
|
class="sticky top-0 z-50 w-full"
|
|
41
41
|
@dismiss=${this.handleHeaderDismiss}
|
|
42
42
|
id="sheet-title"
|
|
@@ -44,9 +44,13 @@
|
|
|
44
44
|
></schmancy-sheet-header>`:"")}
|
|
45
45
|
|
|
46
46
|
<schmancy-surface rounded="left" fill="all" id="body" class="overflow-auto" type="surface">
|
|
47
|
-
<schmancy-scroll>
|
|
47
|
+
<schmancy-scroll>
|
|
48
|
+
<schmancy-area name=${this.uid}>
|
|
49
|
+
<slot></slot>
|
|
50
|
+
</schmancy-area>
|
|
51
|
+
</schmancy-scroll>
|
|
48
52
|
</schmancy-surface>
|
|
49
53
|
</schmancy-grid>
|
|
50
54
|
</div>
|
|
51
|
-
`}};var p,m;
|
|
52
|
-
//# sourceMappingURL=sheet-
|
|
55
|
+
`}};var p,m;c([h.property({type:String,reflect:!0})],r.prototype,"uid",2),c([h.property({type:Boolean,reflect:!0})],r.prototype,"open",2),c([h.property({type:String,reflect:!0})],r.prototype,"header",2),c([h.property({type:String,reflect:!0})],r.prototype,"position",2),c([h.property({type:Boolean,reflect:!0})],r.prototype,"persist",2),c([h.property({type:Boolean,reflect:!0})],r.prototype,"lock",2),c([h.property({type:Boolean,reflect:!0})],r.prototype,"handleHistory",2),c([h.property({type:String,reflect:!0})],r.prototype,"title",2),c([h.queryAssignedElements({flatten:!0})],r.prototype,"assignedElements",2),c([h.property()],r.prototype,"focusAttribute",2),c([(p="open",(t,e)=>{const{willUpdate:i}=t;m=Object.assign({waitUntilFirstUpdate:!1},m),t.willUpdate=function(o){if(i.call(this,o),o.has(p)){const s=o.get(p),n=this[p];s!==n&&(m?.waitUntilFirstUpdate&&!this.hasUpdated||this[e].call(this,s,n))}}})],r.prototype,"onOpenChange",1),r=c([h.customElement("schmancy-sheet")],r);
|
|
56
|
+
//# sourceMappingURL=sheet-CcVGEdfr.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet-CcVGEdfr.cjs","sources":["../src/sheet/header.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">← </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { area } from '../area'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t// Use ref directive instead of @query\n\tprivate sheetRef = createRef<HTMLDivElement>()\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\t// Use native inert attribute to prevent focus outside sheet\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - listen on the sheet element for better event capture\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid)\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\t\t\t\tdetail: { sheet: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t}),\n\t\t)\n\n\t\t// Handle render events from sheet service\n\t\tconst render$ = fromEvent<CustomEvent>(window, 'schmancy-sheet-render').pipe(\n\t\t\ttap(e => {\n\t\t\t\tconst detail = e.detail\n\t\t\t\tif (detail.uid === this.uid) {\n\t\t\t\t\t// Use area router to handle component resolution\n\t\t\t\t\tarea.push({\n\t\t\t\t\t\tarea: this.uid,\n\t\t\t\t\t\tcomponent: detail.component,\n\t\t\t\t\t\thistoryStrategy: 'silent',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$, render$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\t// Get all sibling elements and make them inert\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tArray.from(parent.children).forEach(child => {\n\t\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t// Also handle body's direct children if sheet is attached to body\n\t\tif (this.parentElement === document.body) {\n\t\t\tArray.from(document.body.children).forEach(child => {\n\t\t\t\tif (child !== this && child !== parent && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheetRef.value?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheetRef.value?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\t// First try native autofocus attribute\n\t\tconst autofocusElement = this.querySelector('[autofocus]') as HTMLElement\n\t\tif (autofocusElement) {\n\t\t\tautofocusElement.focus()\n\t\t\treturn\n\t\t}\n\n\t\t// Fallback to custom focus attribute\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\tprivate handleHeaderDismiss = (e: CustomEvent) => {\n\t\te.stopPropagation()\n\t\tsheet.dismiss(this.uid)\n\t}\n\n\trender() {\n\t\tconst sheetClasses = {\n\t\t\tsheet: true,\n\t\t\t'sheet--open': this.open,\n\t\t\t'sheet--locked': this.lock,\n\t\t}\n\n\t\tconst overlayClasses = {\n\t\t\toverlay: true,\n\t\t\t'overlay--interactive': !this.lock,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(sheetClasses)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.header !== 'hidden' ? 'sheet-title' : undefined)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t${ref(this.sheetRef)}\n\t\t\t>\n\t\t\t\t<div class=${classMap(overlayClasses)} @click=${this.lock ? undefined : this.handleOverlayClick}></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${cache(\n\t\t\t\t\t\tthis.header !== 'hidden'\n\t\t\t\t\t\t\t? html`<schmancy-sheet-header\n\t\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t\t@dismiss=${this.handleHeaderDismiss}\n\t\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\t\ttitle=${ifDefined(this.title || undefined)}\n\t\t\t\t\t\t\t\t></schmancy-sheet-header>`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll>\n\t\t\t\t\t\t\t<schmancy-area name=${this.uid}>\n\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t</schmancy-area>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheet","$LitElement","constructor","super","arguments","open","header","position","SchmancySheetPosition","Side","persist","lock","handleHistory","title","sheetRef","createRef","focusAttribute","lastFocusedElement","handleOverlayClick","e","stopPropagation","sheet","dismiss","uid","handleHeaderDismiss","_oldValue","newValue","document","activeElement","setBackgroundInert","focus","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","next","popState$","fromEvent","window","pipe","tap","preventDefault","closeSheet","of","take","keyUp$","event","key","rickyComm$","SheetWhereAreYouRicky","detail","SheetHereMorty","render$","area","push","component","historyStrategy","merge","takeUntil","subscribe","inert","parent","parentElement","Array","from","children","forEach","child","HTMLElement","setAttribute","removeAttribute","body","isShown","value","String","getFocusElement","selector","assignedElements","find","el","matches","querySelector","autofocusElement","sheetClasses","overlayClasses","overlay","classMap","ifDefined","ref","cache","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","has","oldValue","get","hasUpdated"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fromEvent as
|
|
1
|
+
import { fromEvent as l, tap as d, of as w, take as k, merge as E, takeUntil as x } from "rxjs";
|
|
2
2
|
import "rxjs/operators";
|
|
3
3
|
import { classMap as y } from "lit/directives/class-map.js";
|
|
4
4
|
import "lit/directives/style-map.js";
|
|
@@ -6,11 +6,12 @@ import { customElement as g, property as c, queryAssignedElements as $ } from "l
|
|
|
6
6
|
import { T as S } from "./tailwind.mixin-Cx1vOdFr.js";
|
|
7
7
|
import { css as C, html as f } from "lit";
|
|
8
8
|
import { $ as A } from "./litElement.mixin-DLWHaMp5.js";
|
|
9
|
-
import {
|
|
9
|
+
import { a as O } from "./area.component-DUGxsL2-.js";
|
|
10
|
+
import { cache as B } from "lit/directives/cache.js";
|
|
10
11
|
import { ifDefined as v } from "lit/directives/if-defined.js";
|
|
11
|
-
import { createRef as
|
|
12
|
-
import { S as
|
|
13
|
-
var
|
|
12
|
+
import { createRef as F, ref as U } from "lit/directives/ref.js";
|
|
13
|
+
import { S as j, s as m, a as D, b as H } from "./sheet.service-C66WNur0.js";
|
|
14
|
+
var P = Object.getOwnPropertyDescriptor;
|
|
14
15
|
let b = class extends S(C``) {
|
|
15
16
|
render() {
|
|
16
17
|
return f`
|
|
@@ -42,17 +43,17 @@ let b = class extends S(C``) {
|
|
|
42
43
|
`;
|
|
43
44
|
}
|
|
44
45
|
};
|
|
45
|
-
b = ((t, e, s,
|
|
46
|
-
for (var
|
|
46
|
+
b = ((t, e, s, n) => {
|
|
47
|
+
for (var i, o = n > 1 ? void 0 : n ? P(e, s) : e, h = t.length - 1; h >= 0; h--) (i = t[h]) && (o = i(o) || o);
|
|
47
48
|
return o;
|
|
48
49
|
})([g("schmancy-sheet-header")], b);
|
|
49
|
-
var
|
|
50
|
-
for (var
|
|
51
|
-
return
|
|
50
|
+
var z = Object.defineProperty, R = Object.getOwnPropertyDescriptor, r = (t, e, s, n) => {
|
|
51
|
+
for (var i, o = n > 1 ? void 0 : n ? R(e, s) : e, h = t.length - 1; h >= 0; h--) (i = t[h]) && (o = (n ? i(e, s, o) : i(o)) || o);
|
|
52
|
+
return n && o && z(e, s, o), o;
|
|
52
53
|
};
|
|
53
|
-
let
|
|
54
|
+
let a = class extends A(":host{--overlay-color: var(--schmancy-sys-color-surface-dim);--transition-timing: cubic-bezier(.16, 1, .3, 1);--transition-duration: .25s;--sheet-radius: 0;--max-height: 100vh}.sheet{position:fixed;inset:0;z-index:999;display:flex;visibility:visible;transition:visibility var(--transition-duration) var(--transition-timing)}.sheet[aria-hidden=true]{visibility:hidden;pointer-events:none}.sheet[aria-hidden=true] .content{transform:translateY(100%)}.sheet[aria-hidden=true] .content[data-position=side]{transform:translate(100%)}.sheet[aria-hidden=true] .overlay{opacity:0}.overlay{position:absolute;inset:0;background:var(--overlay-color);opacity:.8;transition:opacity var(--transition-duration) var(--transition-timing)}.content{z-index:1;transition:transform var(--transition-duration) var(--transition-timing);overflow:hidden}.content[data-position=side]{height:100vh}.content[data-position=side] #body{max-height:100vh}.content[data-position=side]{height:100%;min-width:320px;max-width:90vw;width:fit-content;margin-left:auto}.content[data-position=bottom] #body{max-height:90vh}.content[data-position=bottom]{width:100%;margin-top:auto;border-radius:16px 16px 0 0;max-height:90vh}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}") {
|
|
54
55
|
constructor() {
|
|
55
|
-
super(...arguments), this.open = !1, this.header = "visible", this.position =
|
|
56
|
+
super(...arguments), this.open = !1, this.header = "visible", this.position = j.Side, this.persist = !1, this.lock = !1, this.handleHistory = !0, this.title = "", this.sheetRef = F(), this.focusAttribute = "autofocus", this.lastFocusedElement = null, this.handleOverlayClick = (t) => {
|
|
56
57
|
t.stopPropagation(), this.lock || m.dismiss(this.uid);
|
|
57
58
|
}, this.handleHeaderDismiss = (t) => {
|
|
58
59
|
t.stopPropagation(), m.dismiss(this.uid);
|
|
@@ -68,14 +69,17 @@ let n = class extends A(":host{--overlay-color: var(--schmancy-sys-color-surface
|
|
|
68
69
|
super.disconnectedCallback(), this.disconnecting.next(!0);
|
|
69
70
|
}
|
|
70
71
|
setupEventListeners() {
|
|
71
|
-
const t = this.handleHistory ?
|
|
72
|
+
const t = this.handleHistory ? l(window, "popstate").pipe(d((i) => {
|
|
72
73
|
i.preventDefault(), this.closeSheet();
|
|
73
|
-
})) : w(null).pipe(k(0)), e =
|
|
74
|
+
})) : w(null).pipe(k(0)), e = l(this, "keydown").pipe(d((i) => {
|
|
74
75
|
i.key === "Escape" && !this.lock && this.open && (i.preventDefault(), i.stopPropagation(), m.dismiss(this.uid));
|
|
75
|
-
})), s =
|
|
76
|
-
i.detail.uid === this.uid && this.dispatchEvent(new CustomEvent(
|
|
76
|
+
})), s = l(window, D).pipe(d((i) => {
|
|
77
|
+
i.detail.uid === this.uid && this.dispatchEvent(new CustomEvent(H, { detail: { sheet: this }, bubbles: !0, composed: !0 }));
|
|
78
|
+
})), n = l(window, "schmancy-sheet-render").pipe(d((i) => {
|
|
79
|
+
const o = i.detail;
|
|
80
|
+
o.uid === this.uid && O.push({ area: this.uid, component: o.component, historyStrategy: "silent" });
|
|
77
81
|
}));
|
|
78
|
-
E(t, e, s).pipe(x(this.disconnecting)).subscribe();
|
|
82
|
+
E(t, e, s, n).pipe(x(this.disconnecting)).subscribe();
|
|
79
83
|
}
|
|
80
84
|
setBackgroundInert(t) {
|
|
81
85
|
const e = this.parentElement;
|
|
@@ -109,7 +113,7 @@ let n = class extends A(":host{--overlay-color: var(--schmancy-sys-color-surface
|
|
|
109
113
|
aria-hidden=${!this.open}
|
|
110
114
|
aria-modal=${this.open}
|
|
111
115
|
tabindex="0"
|
|
112
|
-
${
|
|
116
|
+
${U(this.sheetRef)}
|
|
113
117
|
>
|
|
114
118
|
<div class=${y(e)} @click=${this.lock ? void 0 : this.handleOverlayClick}></div>
|
|
115
119
|
<schmancy-grid
|
|
@@ -117,7 +121,7 @@ let n = class extends A(":host{--overlay-color: var(--schmancy-sys-color-surface
|
|
|
117
121
|
class="content w-full"
|
|
118
122
|
data-position=${this.position}
|
|
119
123
|
>
|
|
120
|
-
${
|
|
124
|
+
${B(this.header !== "hidden" ? f`<schmancy-sheet-header
|
|
121
125
|
class="sticky top-0 z-50 w-full"
|
|
122
126
|
@dismiss=${this.handleHeaderDismiss}
|
|
123
127
|
id="sheet-title"
|
|
@@ -125,21 +129,25 @@ let n = class extends A(":host{--overlay-color: var(--schmancy-sys-color-surface
|
|
|
125
129
|
></schmancy-sheet-header>` : "")}
|
|
126
130
|
|
|
127
131
|
<schmancy-surface rounded="left" fill="all" id="body" class="overflow-auto" type="surface">
|
|
128
|
-
<schmancy-scroll>
|
|
132
|
+
<schmancy-scroll>
|
|
133
|
+
<schmancy-area name=${this.uid}>
|
|
134
|
+
<slot></slot>
|
|
135
|
+
</schmancy-area>
|
|
136
|
+
</schmancy-scroll>
|
|
129
137
|
</schmancy-surface>
|
|
130
138
|
</schmancy-grid>
|
|
131
139
|
</div>
|
|
132
140
|
`;
|
|
133
141
|
}
|
|
134
142
|
};
|
|
135
|
-
var
|
|
136
|
-
|
|
143
|
+
var p, u;
|
|
144
|
+
r([c({ type: String, reflect: !0 })], a.prototype, "uid", 2), r([c({ type: Boolean, reflect: !0 })], a.prototype, "open", 2), r([c({ type: String, reflect: !0 })], a.prototype, "header", 2), r([c({ type: String, reflect: !0 })], a.prototype, "position", 2), r([c({ type: Boolean, reflect: !0 })], a.prototype, "persist", 2), r([c({ type: Boolean, reflect: !0 })], a.prototype, "lock", 2), r([c({ type: Boolean, reflect: !0 })], a.prototype, "handleHistory", 2), r([c({ type: String, reflect: !0 })], a.prototype, "title", 2), r([$({ flatten: !0 })], a.prototype, "assignedElements", 2), r([c()], a.prototype, "focusAttribute", 2), r([(p = "open", (t, e) => {
|
|
137
145
|
const { willUpdate: s } = t;
|
|
138
|
-
u = Object.assign({ waitUntilFirstUpdate: !1 }, u), t.willUpdate = function(
|
|
139
|
-
if (s.call(this,
|
|
140
|
-
const
|
|
141
|
-
|
|
146
|
+
u = Object.assign({ waitUntilFirstUpdate: !1 }, u), t.willUpdate = function(n) {
|
|
147
|
+
if (s.call(this, n), n.has(p)) {
|
|
148
|
+
const i = n.get(p), o = this[p];
|
|
149
|
+
i !== o && (u?.waitUntilFirstUpdate && !this.hasUpdated || this[e].call(this, i, o));
|
|
142
150
|
}
|
|
143
151
|
};
|
|
144
|
-
})],
|
|
145
|
-
//# sourceMappingURL=sheet-
|
|
152
|
+
})], a.prototype, "onOpenChange", 1), a = r([g("schmancy-sheet")], a);
|
|
153
|
+
//# sourceMappingURL=sheet-D5-XmZs5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet-D5-XmZs5.js","sources":["../src/sheet/header.ts","../src/sheet/sheet.ts","../src/sheet/hook.ts"],"sourcesContent":["import { TailwindElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-sheet-header')\nexport default class SchmancySheetHeader extends TailwindElement(css``) {\n\trender() {\n\t\treturn html`\n\t\t\t<sch-flex class=\"absolute top-0 left-0 md:left-[unset] md:right-0\">\n\t\t\t\t<div class=\"block md:hidden flex-1 justify-start items-start\">\n\t\t\t\t\t<slot name=\"back\">\n\t\t\t\t\t\t<schmancy-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span class=\"text-[24px]\">← </span>\n\t\t\t\t\t\t</schmancy-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"hidden md:block flex-1 justify-end items-end\">\n\t\t\t\t\t<slot name=\"actions\">\n\t\t\t\t\t\t<schmancy-icon-button\n\t\t\t\t\t\t\t@click=${() => {\n\t\t\t\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent('dismiss', {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t</schmancy-icon-button>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\t\t\t</sch-flex>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet-header': SchmancySheetHeader\n\t}\n}\n","import { $LitElement } from '@mixins/index'\nimport { area } from '../area'\nimport { html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\nimport { cache } from 'lit/directives/cache.js'\nimport { classMap } from 'lit/directives/class-map.js'\nimport { ifDefined } from 'lit/directives/if-defined.js'\nimport { createRef, ref } from 'lit/directives/ref.js'\nimport { fromEvent, merge, of, take, takeUntil, tap } from 'rxjs'\nimport { on } from './hook'\nimport style from './sheet.scss?inline'\nimport {\n\tSchmancySheetPosition,\n\tSheetHereMorty,\n\tSheetWhereAreYouRicky,\n\tSheetWhereAreYouRickyEvent,\n\tsheet,\n} from './sheet.service'\n\n@customElement('schmancy-sheet')\nexport default class SchmancySheet extends $LitElement(style) {\n\t@property({ type: String, reflect: true }) uid!: string\n\t@property({ type: Boolean, reflect: true }) open = false\n\t@property({ type: String, reflect: true }) header: 'hidden' | 'visible' = 'visible'\n\t@property({ type: String, reflect: true }) position: SchmancySheetPosition = SchmancySheetPosition.Side\n\t@property({ type: Boolean, reflect: true }) persist = false\n\t@property({ type: Boolean, reflect: true }) lock = false\n\t@property({ type: Boolean, reflect: true }) handleHistory = true\n\t@property({ type: String, reflect: true }) title = ''\n\n\t// Use ref directive instead of @query\n\tprivate sheetRef = createRef<HTMLDivElement>()\n\t@queryAssignedElements({ flatten: true }) private assignedElements!: HTMLElement[]\n\n\t@property() focusAttribute = 'autofocus'\n\tprivate lastFocusedElement: HTMLElement | null = null\n\n\t@on('open')\n\tonOpenChange(_oldValue: boolean, newValue: boolean) {\n\t\tif (newValue) {\n\t\t\tthis.lastFocusedElement = document.activeElement as HTMLElement\n\t\t\t// Use native inert attribute to prevent focus outside sheet\n\t\t\tthis.setBackgroundInert(true)\n\t\t\tthis.focus()\n\t\t} else {\n\t\t\tthis.setBackgroundInert(false)\n\t\t\tthis.lastFocusedElement?.focus()\n\t\t\tthis.lastFocusedElement = null\n\t\t}\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback()\n\t\tthis.setupEventListeners()\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback()\n\t\tthis.disconnecting.next(true)\n\t}\n\n\tprivate setupEventListeners() {\n\t\t// Handle browser back button - only if handleHistory is true\n\t\tconst popState$ = this.handleHistory\n\t\t\t? fromEvent<PopStateEvent>(window, 'popstate').pipe(\n\t\t\t\t\ttap(e => {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\tthis.closeSheet()\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t: of(null).pipe(take(0)) // Empty observable if handleHistory is false\n\n\t\t// Handle ESC key - listen on the sheet element for better event capture\n\t\tconst keyUp$ = fromEvent<KeyboardEvent>(this, 'keydown').pipe(\n\t\t\ttap(event => {\n\t\t\t\tif (event.key === 'Escape' && !this.lock && this.open) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsheet.dismiss(this.uid)\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\t// Handle inter-component communication\n\t\tconst rickyComm$ = fromEvent<SheetWhereAreYouRickyEvent>(window, SheetWhereAreYouRicky).pipe(\n\t\t\ttap(e => {\n\t\t\t\tif (e.detail.uid === this.uid)\n\t\t\t\t\tthis.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent(SheetHereMorty, {\n\t\t\t\t\t\t\tdetail: { sheet: this },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t}),\n\t\t)\n\n\t\t// Handle render events from sheet service\n\t\tconst render$ = fromEvent<CustomEvent>(window, 'schmancy-sheet-render').pipe(\n\t\t\ttap(e => {\n\t\t\t\tconst detail = e.detail\n\t\t\t\tif (detail.uid === this.uid) {\n\t\t\t\t\t// Use area router to handle component resolution\n\t\t\t\t\tarea.push({\n\t\t\t\t\t\tarea: this.uid,\n\t\t\t\t\t\tcomponent: detail.component,\n\t\t\t\t\t\thistoryStrategy: 'silent',\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}),\n\t\t)\n\n\t\tmerge(popState$, keyUp$, rickyComm$, render$).pipe(takeUntil(this.disconnecting)).subscribe()\n\t}\n\n\tprivate setBackgroundInert(inert: boolean) {\n\t\t// Get all sibling elements and make them inert\n\t\tconst parent = this.parentElement\n\t\tif (parent) {\n\t\t\tArray.from(parent.children).forEach(child => {\n\t\t\t\tif (child !== this && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\t// Also handle body's direct children if sheet is attached to body\n\t\tif (this.parentElement === document.body) {\n\t\t\tArray.from(document.body.children).forEach(child => {\n\t\t\t\tif (child !== this && child !== parent && child instanceof HTMLElement) {\n\t\t\t\t\tif (inert) {\n\t\t\t\t\t\tchild.setAttribute('inert', '')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchild.removeAttribute('inert')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tsetIsSheetShown(isShown: boolean) {\n\t\tthis.sheetRef.value?.setAttribute('aria-hidden', String(!isShown))\n\t\tthis.sheetRef.value?.setAttribute('aria-modal', String(isShown))\n\t}\n\n\tcloseSheet() {\n\t\tthis.open = false\n\t\tthis.dispatchEvent(new CustomEvent('close'))\n\t}\n\n\tprivate getFocusElement(): HTMLElement | null {\n\t\tconst selector = `[${this.focusAttribute}]`\n\t\treturn (this.assignedElements.find(el => el.matches(selector) || el.querySelector(selector)) as HTMLElement) ?? null\n\t}\n\n\toverride focus() {\n\t\t// First try native autofocus attribute\n\t\tconst autofocusElement = this.querySelector('[autofocus]') as HTMLElement\n\t\tif (autofocusElement) {\n\t\t\tautofocusElement.focus()\n\t\t\treturn\n\t\t}\n\n\t\t// Fallback to custom focus attribute\n\t\tthis.getFocusElement()?.focus()\n\t}\n\n\tprivate handleOverlayClick = (e: Event) => {\n\t\te.stopPropagation()\n\t\tif (!this.lock) {\n\t\t\tsheet.dismiss(this.uid)\n\t\t}\n\t}\n\n\tprivate handleHeaderDismiss = (e: CustomEvent) => {\n\t\te.stopPropagation()\n\t\tsheet.dismiss(this.uid)\n\t}\n\n\trender() {\n\t\tconst sheetClasses = {\n\t\t\tsheet: true,\n\t\t\t'sheet--open': this.open,\n\t\t\t'sheet--locked': this.lock,\n\t\t}\n\n\t\tconst overlayClasses = {\n\t\t\toverlay: true,\n\t\t\t'overlay--interactive': !this.lock,\n\t\t}\n\n\t\treturn html`\n\t\t\t<div\n\t\t\t\tclass=${classMap(sheetClasses)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\taria-labelledby=${ifDefined(this.header !== 'hidden' ? 'sheet-title' : undefined)}\n\t\t\t\taria-hidden=${!this.open}\n\t\t\t\taria-modal=${this.open}\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t${ref(this.sheetRef)}\n\t\t\t>\n\t\t\t\t<div class=${classMap(overlayClasses)} @click=${this.lock ? undefined : this.handleOverlayClick}></div>\n\t\t\t\t<schmancy-grid\n\t\t\t\t\trows=${this.header === 'hidden' ? '1fr' : 'auto 1fr'}\n\t\t\t\t\tclass=\"content w-full\"\n\t\t\t\t\tdata-position=${this.position}\n\t\t\t\t>\n\t\t\t\t\t${cache(\n\t\t\t\t\t\tthis.header !== 'hidden'\n\t\t\t\t\t\t\t? html`<schmancy-sheet-header\n\t\t\t\t\t\t\t\t\tclass=\"sticky top-0 z-50 w-full\"\n\t\t\t\t\t\t\t\t\t@dismiss=${this.handleHeaderDismiss}\n\t\t\t\t\t\t\t\t\tid=\"sheet-title\"\n\t\t\t\t\t\t\t\t\ttitle=${ifDefined(this.title || undefined)}\n\t\t\t\t\t\t\t\t></schmancy-sheet-header>`\n\t\t\t\t\t\t\t: '',\n\t\t\t\t\t)}\n\n\t\t\t\t\t<schmancy-surface rounded=\"left\" fill=\"all\" id=\"body\" class=\"overflow-auto\" type=\"surface\">\n\t\t\t\t\t\t<schmancy-scroll>\n\t\t\t\t\t\t\t<schmancy-area name=${this.uid}>\n\t\t\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t\t\t</schmancy-area>\n\t\t\t\t\t\t</schmancy-scroll>\n\t\t\t\t\t</schmancy-surface>\n\t\t\t\t</schmancy-grid>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-sheet': SchmancySheet\n\t}\n}\n","// @watch decorator\n//\n// Runs when an observed property changes, e.g. @property or @state, but before the component updates.\n//\n// To wait for an update to complete after a change occurs, use `await this.updateComplete` in the handler. To start\n// watching after the initial update/render, use `{ waitUntilFirstUpdate: true }` or `this.hasUpdated` in the handler.\n//\n// Usage:\n//\n// @watch('propName')\n// handlePropChange(oldValue, newValue) {\n// ...\n// }\n//\ninterface WatchOptions {\n\twaitUntilFirstUpdate?: boolean\n}\n\nexport function on(propName: string, options?: WatchOptions) {\n\treturn (protoOrDescriptor: any, name: string): any => {\n\t\tconst { willUpdate } = protoOrDescriptor\n\n\t\toptions = Object.assign({ waitUntilFirstUpdate: false }, options) as WatchOptions\n\n\t\tprotoOrDescriptor.willUpdate = function (changedProps: Map<string, any>) {\n\t\t\twillUpdate.call(this, changedProps)\n\n\t\t\tif (changedProps.has(propName)) {\n\t\t\t\tconst oldValue = changedProps.get(propName)\n\t\t\t\tconst newValue = this[propName]\n\n\t\t\t\tif (oldValue !== newValue) {\n\t\t\t\t\tif (!options?.waitUntilFirstUpdate || this.hasUpdated) {\n\t\t\t\t\t\tthis[name].call(this, oldValue, newValue)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["SchmancySheetHeader","TailwindElement","css","render","html","this","dispatchEvent","CustomEvent","bubbles","composed","customElement","SchmancySheet","$LitElement","constructor","super","arguments","open","header","position","SchmancySheetPosition","Side","persist","lock","handleHistory","title","sheetRef","createRef","focusAttribute","lastFocusedElement","handleOverlayClick","e","stopPropagation","sheet","dismiss","uid","handleHeaderDismiss","_oldValue","newValue","document","activeElement","setBackgroundInert","focus","connectedCallback","setupEventListeners","disconnectedCallback","disconnecting","next","popState$","fromEvent","window","pipe","tap","preventDefault","closeSheet","of","take","keyUp$","event","key","rickyComm$","SheetWhereAreYouRicky","detail","SheetHereMorty","render$","area","push","component","historyStrategy","merge","takeUntil","subscribe","inert","parent","parentElement","Array","from","children","forEach","child","HTMLElement","setAttribute","removeAttribute","body","isShown","value","String","getFocusElement","selector","assignedElements","find","el","matches","querySelector","autofocusElement","sheetClasses","overlayClasses","overlay","classMap","ifDefined","ref","cache","propName","options","__decorateClass","property","type","reflect","prototype","Boolean","queryAssignedElements","flatten","protoOrDescriptor","name","willUpdate","Object","assign","waitUntilFirstUpdate","changedProps","call","has","oldValue","get","hasUpdated"],"mappings":"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"}
|
package/dist/sheet.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("./sheet-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),require("./sheet-CcVGEdfr.cjs");const e=require("./sheet.service-iUShtJp1.cjs");exports.SchmancySheetPosition=e.SchmancySheetPosition,exports.SheetHereMorty=e.SheetHereMorty,exports.SheetWhereAreYouRicky=e.SheetWhereAreYouRicky,exports.sheet=e.sheet;
|
|
2
2
|
//# sourceMappingURL=sheet.cjs.map
|
package/dist/sheet.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./sheet-
|
|
2
|
-
import { S as r, b as s, a, s as h } from "./sheet.service-
|
|
1
|
+
import "./sheet-D5-XmZs5.js";
|
|
2
|
+
import { S as r, b as s, a, s as h } from "./sheet.service-C66WNur0.js";
|
|
3
3
|
export {
|
|
4
4
|
r as SchmancySheetPosition,
|
|
5
5
|
s as SheetHereMorty,
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Subject as b, switchMap as f, forkJoin as l, fromEvent as o, of as w, takeUntil as r, timer as d, map as p, defaultIfEmpty as u, tap as n, delay as m, take as y, mergeMap as g } from "rxjs";
|
|
2
|
+
import { a as A, T as E } from "./theme.events-CPSLaOlR.js";
|
|
3
|
+
var L = ((e) => (e.Side = "side", e.Bottom = "bottom", e))(L || {});
|
|
4
|
+
const S = "are-you-there-sheet", v = "yes-here", C = new class {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.bottomSheet = new b(), this.$dismiss = new b(), this.activeSheets = /* @__PURE__ */ new Set(), this.popStateListenerActive = !1, this.setupSheetOpeningLogic(), this.setupSheetDismissLogic(), this.setupPopStateListener();
|
|
7
|
+
}
|
|
8
|
+
setupSheetOpeningLogic() {
|
|
9
|
+
this.bottomSheet.pipe(f((e) => l([o(window, v).pipe(r(d(50)), p((t) => t.detail), u(void 0)), o(window, A).pipe(r(d(50)), p((t) => t.detail.theme), u(void 0)), w(e).pipe(n(() => {
|
|
10
|
+
const t = e.uid ?? `sheet-${Date.now()}`;
|
|
11
|
+
window.dispatchEvent(new CustomEvent(S, { detail: { uid: t }, bubbles: !0, composed: !0 })), window.dispatchEvent(new CustomEvent(E, { bubbles: !0, composed: !0 }));
|
|
12
|
+
}))])), p(([e, t, i]) => {
|
|
13
|
+
let a, s = e?.sheet;
|
|
14
|
+
if (s) a = s.parentElement;
|
|
15
|
+
else {
|
|
16
|
+
a = t || document.querySelector("schmancy-theme") || document.body;
|
|
17
|
+
const c = i.uid ?? `sheet-${Date.now()}`;
|
|
18
|
+
s = document.createElement("schmancy-sheet"), s.setAttribute("uid", c), a.appendChild(s);
|
|
19
|
+
}
|
|
20
|
+
i.lock && s.setAttribute("lock", "true");
|
|
21
|
+
const h = i.position || (window.innerWidth >= 768 ? "side" : "bottom");
|
|
22
|
+
return s.setAttribute("position", h), i.persist && s.setAttribute("persist", String(i.persist)), document.body.style.overflow = "hidden", { target: i, sheet: s };
|
|
23
|
+
}), m(20), n(({ target: e, sheet: t }) => {
|
|
24
|
+
window.dispatchEvent(new CustomEvent("schmancy-sheet-render", { detail: { component: e.component, uid: t.getAttribute("uid") }, bubbles: !0, composed: !0 }));
|
|
25
|
+
}), m(1), n(({ target: e, sheet: t }) => {
|
|
26
|
+
t?.setAttribute("open", "true");
|
|
27
|
+
const i = e.uid ?? `sheet-${Date.now()}`;
|
|
28
|
+
this.activeSheets.add(i), o(t, "close").pipe(y(1)).pipe(m(300)).subscribe((a) => {
|
|
29
|
+
const s = t;
|
|
30
|
+
if (s) {
|
|
31
|
+
const h = s.getAttribute("uid");
|
|
32
|
+
h && this.activeSheets.delete(h);
|
|
33
|
+
const c = s.getAttribute("persist");
|
|
34
|
+
(!c || c === "false") && s.remove();
|
|
35
|
+
}
|
|
36
|
+
document.body.style.overflow = "auto";
|
|
37
|
+
});
|
|
38
|
+
})).subscribe();
|
|
39
|
+
}
|
|
40
|
+
setupSheetDismissLogic() {
|
|
41
|
+
this.$dismiss.pipe(g((e) => l([o(window, v).pipe(r(d(100)), p((t) => t.detail), u(void 0)), w(e).pipe(n(() => {
|
|
42
|
+
window.dispatchEvent(new CustomEvent(S, { detail: { uid: e } }));
|
|
43
|
+
}))])), n(([e, t]) => {
|
|
44
|
+
e?.sheet && (e.sheet.closeSheet(), this.activeSheets.delete(t));
|
|
45
|
+
})).subscribe();
|
|
46
|
+
}
|
|
47
|
+
setupPopStateListener() {
|
|
48
|
+
this.popStateListenerActive || (o(window, "popstate").subscribe((e) => {
|
|
49
|
+
if (this.activeSheets.size > 0) {
|
|
50
|
+
const t = Array.from(this.activeSheets).pop();
|
|
51
|
+
t && (this.dismiss(t), e.state && e.state.schmancySheet && history.pushState({}, "", window.location.href));
|
|
52
|
+
}
|
|
53
|
+
}), this.popStateListenerActive = !0);
|
|
54
|
+
}
|
|
55
|
+
dismiss(e) {
|
|
56
|
+
if (!e && this.activeSheets.size > 0) {
|
|
57
|
+
const t = Array.from(this.activeSheets);
|
|
58
|
+
e = t[t.length - 1];
|
|
59
|
+
}
|
|
60
|
+
e && this.$dismiss.next(e);
|
|
61
|
+
}
|
|
62
|
+
open(e) {
|
|
63
|
+
this.bottomSheet.next(e);
|
|
64
|
+
}
|
|
65
|
+
isOpen(e) {
|
|
66
|
+
return this.activeSheets.has(e);
|
|
67
|
+
}
|
|
68
|
+
closeAll() {
|
|
69
|
+
Array.from(this.activeSheets).forEach((e) => {
|
|
70
|
+
this.dismiss(e);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}();
|
|
74
|
+
export {
|
|
75
|
+
L as S,
|
|
76
|
+
S as a,
|
|
77
|
+
v as b,
|
|
78
|
+
C as s
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=sheet.service-C66WNur0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.service-C66WNur0.js","sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdefaultIfEmpty,\n\tdelay,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ComponentType } from '../area/router.types'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.events'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet?: SchmancySheet\n\ttheme?: HTMLElement\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\t// First check for existing sheet\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t// Then find theme container\n\t\t\t\t\t\tfromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\n\t\t\t\t\t\t\tmap(e => e.detail.theme),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\t// Determine uid - use provided uid or generate one\n\t\t\t\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t\t\t\t// First ask for existing sheet\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid },\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t// Then ask for theme container\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(ThemeWhereAreYou, {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\n\t\t\t\tmap(([existingSheet, theme, target]) => {\n\t\t\t\t\tlet sheet = existingSheet?.sheet\n\t\t\t\t\tlet targetContainer: HTMLElement\n\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\t// Use existing sheet\n\t\t\t\t\t\ttargetContainer = sheet.parentElement as HTMLElement\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use theme from discovery or fallback\n\t\t\t\t\t\ttargetContainer = theme || (document.querySelector('schmancy-theme') as HTMLElement) || document.body\n\n\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Dispatch render event - sheet component will use area router to handle component\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: { component: target.component, uid: sheet.getAttribute('uid') },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener (always, not just for new sheets)\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(_ => {\n\t\t\t\t\t\t\t// Use the sheet reference directly, not e.target\n\t\t\t\t\t\t\tconst sheetElement = sheet as SchmancySheet\n\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tif (sheetElement) {\n\t\t\t\t\t\t\t\tconst uid = sheetElement.getAttribute('uid')\n\t\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\t\tconst persistAttr = sheetElement.getAttribute('persist')\n\t\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\t\tsheetElement.remove()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([response, uid]) => {\n\t\t\t\t\tif (response?.sheet) {\n\t\t\t\t\t\tresponse.sheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t} else {\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\tthis.$dismiss.next(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\nexport const sheet = new BottomSheetService()\n"],"names":["SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","this","bottomSheet","Subject","$dismiss","activeSheets","Set","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","ThemeHereIAm","theme","of","target","tap","uid","Date","now","dispatchEvent","CustomEvent","bubbles","composed","ThemeWhereAreYou","existingSheet","targetContainer","parentElement","document","querySelector","body","createElement","setAttribute","appendChild","lock","position","innerWidth","persist","String","style","overflow","delay","component","getAttribute","add","take","subscribe","_","sheetElement","delete","persistAttr","remove","mergeMap","response","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","schmancySheet","history","pushState","location","href","sheetsArray","length","next","has","forEach"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const e=require("rxjs"),p=require("./theme.events-Car6U_SQ.cjs");var d=(t=>(t.Side="side",t.Bottom="bottom",t))(d||{});const a="are-you-there-sheet",c="yes-here",m=new class{constructor(){this.bottomSheet=new e.Subject,this.$dismiss=new e.Subject,this.activeSheets=new Set,this.popStateListenerActive=!1,this.setupSheetOpeningLogic(),this.setupSheetDismissLogic(),this.setupPopStateListener()}setupSheetOpeningLogic(){this.bottomSheet.pipe(e.switchMap(t=>e.forkJoin([e.fromEvent(window,c).pipe(e.takeUntil(e.timer(50)),e.map(i=>i.detail),e.defaultIfEmpty(void 0)),e.fromEvent(window,p.ThemeHereIAm).pipe(e.takeUntil(e.timer(50)),e.map(i=>i.detail.theme),e.defaultIfEmpty(void 0)),e.of(t).pipe(e.tap(()=>{const i=t.uid??`sheet-${Date.now()}`;window.dispatchEvent(new CustomEvent(a,{detail:{uid:i},bubbles:!0,composed:!0})),window.dispatchEvent(new CustomEvent(p.ThemeWhereAreYou,{bubbles:!0,composed:!0}))}))])),e.map(([t,i,o])=>{let n,s=t?.sheet;if(s)n=s.parentElement;else{n=i||document.querySelector("schmancy-theme")||document.body;const r=o.uid??`sheet-${Date.now()}`;s=document.createElement("schmancy-sheet"),s.setAttribute("uid",r),n.appendChild(s)}o.lock&&s.setAttribute("lock","true");const h=o.position||(window.innerWidth>=768?"side":"bottom");return s.setAttribute("position",h),o.persist&&s.setAttribute("persist",String(o.persist)),document.body.style.overflow="hidden",{target:o,sheet:s}}),e.delay(20),e.tap(({target:t,sheet:i})=>{window.dispatchEvent(new CustomEvent("schmancy-sheet-render",{detail:{component:t.component,uid:i.getAttribute("uid")},bubbles:!0,composed:!0}))}),e.delay(1),e.tap(({target:t,sheet:i})=>{i?.setAttribute("open","true");const o=t.uid??`sheet-${Date.now()}`;this.activeSheets.add(o),e.fromEvent(i,"close").pipe(e.take(1)).pipe(e.delay(300)).subscribe(n=>{const s=i;if(s){const h=s.getAttribute("uid");h&&this.activeSheets.delete(h);const r=s.getAttribute("persist");(!r||r==="false")&&s.remove()}document.body.style.overflow="auto"})})).subscribe()}setupSheetDismissLogic(){this.$dismiss.pipe(e.mergeMap(t=>e.forkJoin([e.fromEvent(window,c).pipe(e.takeUntil(e.timer(100)),e.map(i=>i.detail),e.defaultIfEmpty(void 0)),e.of(t).pipe(e.tap(()=>{window.dispatchEvent(new CustomEvent(a,{detail:{uid:t}}))}))])),e.tap(([t,i])=>{t?.sheet&&(t.sheet.closeSheet(),this.activeSheets.delete(i))})).subscribe()}setupPopStateListener(){this.popStateListenerActive||(e.fromEvent(window,"popstate").subscribe(t=>{if(this.activeSheets.size>0){const i=Array.from(this.activeSheets).pop();i&&(this.dismiss(i),t.state&&t.state.schmancySheet&&history.pushState({},"",window.location.href))}}),this.popStateListenerActive=!0)}dismiss(t){if(!t&&this.activeSheets.size>0){const i=Array.from(this.activeSheets);t=i[i.length-1]}t&&this.$dismiss.next(t)}open(t){this.bottomSheet.next(t)}isOpen(t){return this.activeSheets.has(t)}closeAll(){Array.from(this.activeSheets).forEach(t=>{this.dismiss(t)})}};exports.SchmancySheetPosition=d,exports.SheetHereMorty=c,exports.SheetWhereAreYouRicky=a,exports.sheet=m;
|
|
2
|
+
//# sourceMappingURL=sheet.service-iUShtJp1.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheet.service-iUShtJp1.cjs","sources":["../src/sheet/sheet.service.ts"],"sourcesContent":["import {\n\tdefaultIfEmpty,\n\tdelay,\n\tforkJoin,\n\tfromEvent,\n\tmap,\n\tmergeMap,\n\tof,\n\tSubject,\n\tswitchMap,\n\ttake,\n\ttakeUntil,\n\ttap,\n\ttimer,\n} from 'rxjs'\nimport { ComponentType } from '../area/router.types'\nimport { ThemeHereIAm, ThemeHereIAmEvent, ThemeWhereAreYou } from '../theme/theme.events'\nimport SchmancySheet from './sheet'\n\nexport enum SchmancySheetPosition {\n\tSide = 'side',\n\tBottom = 'bottom',\n}\n\nexport type SheetConfig = {\n\tcomponent: ComponentType\n\tuid?: string\n\tposition?: SchmancySheetPosition\n\tpersist?: boolean\n\tclose?: () => void\n\tlock?: boolean // Controls both ESC and overlay click dismissal\n\tonBeforeOpen?: (component: HTMLElement) => void\n\tonAfterOpen?: (component: HTMLElement) => void\n}\n\n// Keep old name for backward compatibility\ntype BottomSheeetTarget = SheetConfig\n\n// Events for communication between bottom-sheet component and bottom-sheet.service\nexport type SheetWhereAreYouRickyEvent = CustomEvent<{\n\tuid: string\n}>\nexport const SheetWhereAreYouRicky = 'are-you-there-sheet'\n\nexport type SheetHereMortyEvent = CustomEvent<{\n\tsheet?: SchmancySheet\n\ttheme?: HTMLElement\n}>\nexport const SheetHereMorty = 'yes-here'\n\n// Function to determine the position based on screen size\nconst getPosition = (): SchmancySheetPosition => {\n\treturn window.innerWidth >= 768 ? SchmancySheetPosition.Side : SchmancySheetPosition.Bottom // Adjust 768 as needed for your breakpoint\n}\n\nclass BottomSheetService {\n\tbottomSheet = new Subject<BottomSheeetTarget>()\n\t$dismiss = new Subject<string>()\n\t// Track currently open sheets\n\tprivate activeSheets = new Set<string>()\n\t// To track if we've set up the popstate listener\n\tprivate popStateListenerActive = false\n\n\tconstructor() {\n\t\tthis.setupSheetOpeningLogic()\n\t\tthis.setupSheetDismissLogic()\n\t\tthis.setupPopStateListener()\n\t}\n\n\t/**\n\t * Sets up the main sheet opening logic\n\t */\n\tprivate setupSheetOpeningLogic() {\n\t\tthis.bottomSheet\n\t\t\t.pipe(\n\t\t\t\tswitchMap(target =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\t// First check for existing sheet\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t// Then find theme container\n\t\t\t\t\t\tfromEvent<ThemeHereIAmEvent>(window, ThemeHereIAm).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(50)),\n\t\t\t\t\t\t\tmap(e => e.detail.theme),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(target).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\t// Determine uid - use provided uid or generate one\n\t\t\t\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\n\t\t\t\t\t\t\t\t// First ask for existing sheet\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(SheetWhereAreYouRicky, {\n\t\t\t\t\t\t\t\t\t\tdetail: { uid },\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t// Then ask for theme container\n\t\t\t\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\t\t\t\tnew CustomEvent(ThemeWhereAreYou, {\n\t\t\t\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\n\t\t\t\tmap(([existingSheet, theme, target]) => {\n\t\t\t\t\tlet sheet = existingSheet?.sheet\n\t\t\t\t\tlet targetContainer: HTMLElement\n\n\t\t\t\t\tif (sheet) {\n\t\t\t\t\t\t// Use existing sheet\n\t\t\t\t\t\ttargetContainer = sheet.parentElement as HTMLElement\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Determine container - use theme from discovery or fallback\n\t\t\t\t\t\ttargetContainer = theme || (document.querySelector('schmancy-theme') as HTMLElement) || document.body\n\n\t\t\t\t\t\t// Create new sheet\n\t\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\t\t\t\t\t\tsheet = document.createElement('schmancy-sheet')\n\t\t\t\t\t\tsheet.setAttribute('uid', uid)\n\t\t\t\t\t\ttargetContainer.appendChild(sheet)\n\t\t\t\t\t}\n\n\t\t\t\t\ttarget.lock && sheet.setAttribute('lock', 'true')\n\n\t\t\t\t\t// Use the dynamic position function here\n\t\t\t\t\tconst position = target.position || getPosition()\n\t\t\t\t\tsheet.setAttribute('position', position)\n\n\t\t\t\t\ttarget.persist && sheet.setAttribute('persist', String(target.persist))\n\n\t\t\t\t\tdocument.body.style.overflow = 'hidden' // lock the scroll of the host\n\t\t\t\t\treturn { target, sheet: sheet as SchmancySheet }\n\t\t\t\t}),\n\t\t\t\tdelay(20),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\t// Dispatch render event - sheet component will use area router to handle component\n\t\t\t\t\twindow.dispatchEvent(\n\t\t\t\t\t\tnew CustomEvent('schmancy-sheet-render', {\n\t\t\t\t\t\t\tdetail: { component: target.component, uid: sheet.getAttribute('uid') },\n\t\t\t\t\t\t\tbubbles: true,\n\t\t\t\t\t\t\tcomposed: true,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t\tdelay(1),\n\t\t\t\ttap(({ target, sheet }) => {\n\t\t\t\t\tsheet?.setAttribute('open', 'true')\n\n\t\t\t\t\t// Add to active sheets tracking\n\t\t\t\t\tconst uid = target.uid ?? `sheet-${Date.now()}`\n\t\t\t\t\tthis.activeSheets.add(uid)\n\n\t\t\t\t\t// Set up close event listener (always, not just for new sheets)\n\t\t\t\t\tfromEvent<CustomEvent>(sheet, 'close')\n\t\t\t\t\t\t.pipe(take(1))\n\t\t\t\t\t\t.pipe(delay(300))\n\t\t\t\t\t\t.subscribe(_ => {\n\t\t\t\t\t\t\t// Use the sheet reference directly, not e.target\n\t\t\t\t\t\t\tconst sheetElement = sheet as SchmancySheet\n\n\t\t\t\t\t\t\t// Remove from active sheets tracking\n\t\t\t\t\t\t\tif (sheetElement) {\n\t\t\t\t\t\t\t\tconst uid = sheetElement.getAttribute('uid')\n\t\t\t\t\t\t\t\tif (uid) {\n\t\t\t\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Only keep sheet if persist is explicitly set to a truthy value\n\t\t\t\t\t\t\t\tconst persistAttr = sheetElement.getAttribute('persist')\n\t\t\t\t\t\t\t\tconst shouldRemove = !persistAttr || persistAttr === 'false'\n\n\t\t\t\t\t\t\t\tif (shouldRemove) {\n\t\t\t\t\t\t\t\t\tsheetElement.remove()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tdocument.body.style.overflow = 'auto' // unlock the scroll of the host\n\t\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the sheet closing/dismissal logic\n\t */\n\tprivate setupSheetDismissLogic() {\n\t\tthis.$dismiss\n\t\t\t.pipe(\n\t\t\t\tmergeMap(uid =>\n\t\t\t\t\tforkJoin([\n\t\t\t\t\t\tfromEvent<SheetHereMortyEvent>(window, SheetHereMorty).pipe(\n\t\t\t\t\t\t\ttakeUntil(timer(100)),\n\t\t\t\t\t\t\tmap(e => e.detail),\n\t\t\t\t\t\t\tdefaultIfEmpty(undefined),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tof(uid).pipe(\n\t\t\t\t\t\t\ttap(() => {\n\t\t\t\t\t\t\t\twindow.dispatchEvent(new CustomEvent(SheetWhereAreYouRicky, { detail: { uid } }))\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\ttap(([response, uid]) => {\n\t\t\t\t\tif (response?.sheet) {\n\t\t\t\t\t\tresponse.sheet.closeSheet()\n\t\t\t\t\t\tthis.activeSheets.delete(uid)\n\t\t\t\t\t} else {\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe()\n\t}\n\n\t/**\n\t * Sets up the popstate listener to handle browser back button\n\t */\n\tprivate setupPopStateListener() {\n\t\tif (this.popStateListenerActive) return\n\n\t\tfromEvent<PopStateEvent>(window, 'popstate').subscribe(event => {\n\t\t\t// If we have active sheets, close the most recently opened one\n\t\t\tif (this.activeSheets.size > 0) {\n\t\t\t\t// Get the last sheet (Set maintains insertion order)\n\t\t\t\tconst lastSheet = Array.from(this.activeSheets).pop()\n\t\t\t\tif (lastSheet) {\n\t\t\t\t\tthis.dismiss(lastSheet)\n\n\t\t\t\t\t// Prevent default navigation behavior by pushing a new state\n\t\t\t\t\t// This effectively cancels out the back navigation\n\t\t\t\t\tif (event.state && event.state.schmancySheet) {\n\t\t\t\t\t\thistory.pushState({}, '', window.location.href)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tthis.popStateListenerActive = true\n\t}\n\n\t/**\n\t * Dismiss a sheet by uid, or dismiss the most recently opened sheet if no uid provided\n\t */\n\tdismiss(uid?: string) {\n\t\tif (!uid && this.activeSheets.size > 0) {\n\t\t\t// Get the last sheet opened (Set maintains insertion order)\n\t\t\tconst sheetsArray = Array.from(this.activeSheets)\n\t\t\tuid = sheetsArray[sheetsArray.length - 1]\n\t\t}\n\n\t\tif (uid) {\n\t\t\tthis.$dismiss.next(uid)\n\t\t}\n\t}\n\n\t/**\n\t * Open a sheet with the given target configuration\n\t */\n\topen(target: BottomSheeetTarget) {\n\t\tthis.bottomSheet.next(target)\n\t}\n\n\t/**\n\t * Check if a sheet is currently open by uid\n\t */\n\tisOpen(uid: string): boolean {\n\t\treturn this.activeSheets.has(uid)\n\t}\n\n\t/**\n\t * Close all open sheets\n\t */\n\tcloseAll() {\n\t\t// Copy the set to avoid modification during iteration\n\t\tArray.from(this.activeSheets).forEach(uid => {\n\t\t\tthis.dismiss(uid)\n\t\t})\n\t}\n\n}\nexport const sheet = new BottomSheetService()\n"],"names":["SchmancySheetPosition","SheetWhereAreYouRicky","SheetHereMorty","sheet","constructor","this","bottomSheet","Subject","$dismiss","activeSheets","Set","popStateListenerActive","setupSheetOpeningLogic","setupSheetDismissLogic","setupPopStateListener","pipe","switchMap","forkJoin","fromEvent","window","takeUntil","timer","map","e","detail","defaultIfEmpty","ThemeHereIAm","theme","of","target","tap","uid","Date","now","dispatchEvent","CustomEvent","bubbles","composed","ThemeWhereAreYou","existingSheet","targetContainer","parentElement","document","querySelector","body","createElement","setAttribute","appendChild","lock","position","innerWidth","persist","String","style","overflow","delay","component","getAttribute","add","take","subscribe","_","sheetElement","delete","persistAttr","remove","mergeMap","response","closeSheet","event","size","lastSheet","Array","from","pop","dismiss","state","schmancySheet","history","pushState","location","href","sheetsArray","length","next","has","closeAll","forEach"],"mappings":"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"}
|
package/dist/teleport.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./avatar-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./avatar-hzSHTXXv.cjs");exports.HereMorty=e.HereMorty,Object.defineProperty(exports,"SchmancyTeleportation",{enumerable:!0,get:()=>e.SchmancyTeleportation}),exports.WhereAreYouRicky=e.WhereAreYouRicky,exports.teleport=e.teleport;
|
|
2
2
|
//# sourceMappingURL=teleport.cjs.map
|
package/dist/teleport.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { LazyComponent } from './lazy';
|
|
2
|
+
/**
|
|
3
|
+
* Component type accepted by area router, drawer, and sheet services
|
|
4
|
+
*/
|
|
5
|
+
export type ComponentType = CustomElementConstructor | string | HTMLElement | LazyComponent<any>;
|
|
2
6
|
export type RouteAction = {
|
|
3
|
-
component:
|
|
7
|
+
component: ComponentType;
|
|
4
8
|
area: string;
|
|
5
9
|
state?: Record<string, unknown>;
|
|
6
10
|
params?: Record<string, unknown>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { ComponentType } from '../area/router.types';
|
|
1
2
|
type TRef = Element | Window;
|
|
2
|
-
type TRenderRequest =
|
|
3
|
+
type TRenderRequest = ComponentType;
|
|
3
4
|
export type TRenderCustomEvent = CustomEvent<{
|
|
4
5
|
component: TRenderRequest;
|
|
5
6
|
title?: string;
|
|
@@ -7,9 +8,6 @@ export type TRenderCustomEvent = CustomEvent<{
|
|
|
7
8
|
params?: Record<string, unknown>;
|
|
8
9
|
props?: Record<string, unknown>;
|
|
9
10
|
}>;
|
|
10
|
-
type ComponentType = string | HTMLElement | (() => HTMLElement) | (() => Promise<{
|
|
11
|
-
default: any;
|
|
12
|
-
}>);
|
|
13
11
|
export type DrawerPushOptions = {
|
|
14
12
|
component: ComponentType;
|
|
15
13
|
state?: Record<string, unknown>;
|
|
@@ -18,14 +16,12 @@ export type DrawerPushOptions = {
|
|
|
18
16
|
};
|
|
19
17
|
declare class DrawerService {
|
|
20
18
|
private $drawer;
|
|
21
|
-
private lastComponent;
|
|
22
19
|
constructor();
|
|
23
20
|
private dispatchToggleEvent;
|
|
24
21
|
private dispatchRenderEvent;
|
|
25
22
|
dimiss(ref: TRef): void;
|
|
26
23
|
render(ref: TRef, component: TRenderRequest, title?: string): void;
|
|
27
24
|
private handlePush;
|
|
28
|
-
private resolveComponent;
|
|
29
25
|
/**
|
|
30
26
|
* Push a component to the content drawer
|
|
31
27
|
* @param options - Component configuration object with optional state/params/props
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { EmailAttachment, EmailComposeConfig, EmailTemplate } from './types';
|
|
2
1
|
import './email-layout-selector';
|
|
2
|
+
import type { EmailAttachment, EmailComposeConfig, EmailTemplate } from './types';
|
|
3
3
|
declare const SchmancyEmailEditor_base: CustomElementConstructor & import("@mixins/index").Constructor<import("lit").LitElement> & import("@mixins/index").Constructor<import("@mixins/index").IBaseMixin>;
|
|
4
4
|
/**
|
|
5
5
|
* Email editor component with rich text formatting and file attachments
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { Subject } from 'rxjs';
|
|
2
|
+
import { ComponentType } from '../area/router.types';
|
|
2
3
|
import SchmancySheet from './sheet';
|
|
3
4
|
export declare enum SchmancySheetPosition {
|
|
4
5
|
Side = "side",
|
|
5
6
|
Bottom = "bottom"
|
|
6
7
|
}
|
|
7
8
|
export type SheetConfig = {
|
|
8
|
-
component:
|
|
9
|
+
component: ComponentType;
|
|
9
10
|
uid?: string;
|
|
10
11
|
position?: SchmancySheetPosition;
|
|
11
12
|
persist?: boolean;
|
|
12
13
|
close?: () => void;
|
|
13
14
|
lock?: boolean;
|
|
14
|
-
handleHistory?: boolean;
|
|
15
|
-
title?: string;
|
|
16
|
-
header?: 'hidden' | 'visible';
|
|
17
15
|
onBeforeOpen?: (component: HTMLElement) => void;
|
|
18
16
|
onAfterOpen?: (component: HTMLElement) => void;
|
|
19
17
|
};
|
|
@@ -31,7 +29,6 @@ declare class BottomSheetService {
|
|
|
31
29
|
bottomSheet: Subject<SheetConfig>;
|
|
32
30
|
$dismiss: Subject<string>;
|
|
33
31
|
private activeSheets;
|
|
34
|
-
private sheetComponents;
|
|
35
32
|
private popStateListenerActive;
|
|
36
33
|
constructor();
|
|
37
34
|
/**
|
|
@@ -62,12 +59,6 @@ declare class BottomSheetService {
|
|
|
62
59
|
* Close all open sheets
|
|
63
60
|
*/
|
|
64
61
|
closeAll(): void;
|
|
65
|
-
/**
|
|
66
|
-
* Gets the component instance for a given sheet
|
|
67
|
-
* @param uid - The unique identifier of the sheet
|
|
68
|
-
* @returns The component instance, or undefined if not found
|
|
69
|
-
*/
|
|
70
|
-
getComponent<T extends HTMLElement = HTMLElement>(uid: string): T | undefined;
|
|
71
62
|
}
|
|
72
63
|
export declare const sheet: BottomSheetService;
|
|
73
64
|
export {};
|