@mhmo91/schmancy 0.10.16 → 0.10.17
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/dist/active-host-BP0zy_Y9.js.map +1 -1
- package/dist/agent/flow-CvG1fLW5.js.map +1 -1
- package/dist/agent/schmancy.agent.js +3704 -3704
- package/dist/agent/schmancy.agent.js.map +1 -1
- package/dist/agent/vendor-material-color-DcL7ZPxx.js.map +1 -1
- package/dist/animation-DCznELuT.js.map +1 -1
- package/dist/area-ChxsDTu_.js.map +1 -1
- package/dist/area-Qt6yUnuA.cjs.map +1 -1
- package/dist/audio-DS43uoRA.js.map +1 -1
- package/dist/autocomplete-CXvUjMD-.js.map +1 -1
- package/dist/autocomplete-Ck2zbdF9.cjs.map +1 -1
- package/dist/avatar.cjs +1 -1
- package/dist/avatar.js +1 -1
- package/dist/avatar.js.map +1 -1
- package/dist/badge.cjs +1 -1
- package/dist/badge.js +1 -1
- package/dist/boat-Bj0wVcZi.js.map +1 -1
- package/dist/breadcrumb.js.map +1 -1
- package/dist/busy-CyZSBnZP.js.map +1 -1
- package/dist/button.js.map +1 -1
- package/dist/card-nYZCKmOO.js.map +1 -1
- package/dist/checkbox-DiUrZiyc.js.map +1 -1
- package/dist/chips-CfPFXv7Z.js.map +1 -1
- package/dist/chips-DK6m-VCM.cjs.map +1 -1
- package/dist/connectivity.js.map +1 -1
- package/dist/content-drawer.cjs +1 -1
- package/dist/content-drawer.js +1 -1
- package/dist/cursor-glow-Cs2XLDB9.js.map +1 -1
- package/dist/date-range-DA6anfcF.cjs.map +1 -1
- package/dist/date-range-DjlF2u7o.js.map +1 -1
- package/dist/date-range-inline-BfYK795W.cjs.map +1 -1
- package/dist/date-range-inline-n7y_H6PJ.js.map +1 -1
- package/dist/delay.js.map +1 -1
- package/dist/details-BdAVsLl-.cjs.map +1 -1
- package/dist/details-CS_ToAOj.js.map +1 -1
- package/dist/directives.cjs.map +1 -1
- package/dist/directives.js.map +1 -1
- package/dist/discovery.js.map +1 -1
- package/dist/divider-COLK0RbT.js.map +1 -1
- package/dist/dropdown.js.map +1 -1
- package/dist/expand-D9LzmpoV.js.map +1 -1
- package/dist/expand-r2sATPUJ.cjs.map +1 -1
- package/dist/{form-DhjedCWm.js → form-D1iJOLVb.js} +9 -0
- package/dist/{form-DhjedCWm.js.map → form-D1iJOLVb.js.map} +1 -1
- package/dist/form-D9K1GhlP.cjs +42 -0
- package/dist/{form-g5c70rac.cjs.map → form-D9K1GhlP.cjs.map} +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.js +9 -2
- package/dist/handover/agent-runtime-followups.md +1 -1
- package/dist/handover/agent-runtime-v1.md +3 -3
- package/dist/hashContent-dJrI-9sc.js.map +1 -1
- package/dist/{icons-1HIENBco.cjs.map → icons-BXp4vbnW.cjs.map} +1 -1
- package/dist/{icons-3y0kr1aB.js.map → icons-COrlmBPB.js.map} +1 -1
- package/dist/icons.cjs +1 -1
- package/dist/icons.js +1 -1
- package/dist/{iframe-CjqYuZG5.cjs.map → iframe-BwXj6mLp.cjs.map} +1 -1
- package/dist/{iframe-Z5gTK-gd.js.map → iframe-CPNsIy7k.js.map} +1 -1
- package/dist/iframe.cjs +1 -1
- package/dist/iframe.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +32 -32
- package/dist/{input-BtcIhu0Q.cjs.map → input-BGrF2qVq.cjs.map} +1 -1
- package/dist/{input-B-fw6f_r.js.map → input-C1SnMNuQ.js.map} +1 -1
- package/dist/input-chip-CtQ0pH5b.js.map +1 -1
- package/dist/input-chip-DZktYohr.cjs.map +1 -1
- package/dist/input.cjs +1 -1
- package/dist/input.js +1 -1
- package/dist/json.cjs +1 -1
- package/dist/json.js +1 -1
- package/dist/json.js.map +1 -1
- package/dist/kbd.js.map +1 -1
- package/dist/layout-BH28sKGc.js.map +1 -1
- package/dist/layout.cjs +1 -1
- package/dist/layout.js +1 -1
- package/dist/lazy-D-bO2r4m.js.map +1 -1
- package/dist/{lightbox-BL3LWp-P.js.map → lightbox-CLwpaiai.js.map} +1 -1
- package/dist/{lightbox-BHTZOn8K.cjs.map → lightbox-Ck6BpN5u.cjs.map} +1 -1
- package/dist/lightbox.cjs +1 -1
- package/dist/lightbox.js +1 -1
- package/dist/{list-DLJL1JQj.js.map → list-Bmce1Rb8.js.map} +1 -1
- package/dist/{list-CHYa5VGY.cjs.map → list-EmRwSpTU.cjs.map} +1 -1
- package/dist/list.cjs +1 -1
- package/dist/list.js +1 -1
- package/dist/magnetic-DxvoEz8_.js.map +1 -1
- package/dist/{menu-BNq93w6X.js.map → menu-BA_B7QOG.js.map} +1 -1
- package/dist/{menu-DAikvkeV.cjs.map → menu-BTU3wGP6.cjs.map} +1 -1
- package/dist/menu.cjs +1 -1
- package/dist/menu.js +1 -1
- package/dist/mixins-BOOu6q2n.cjs.map +1 -1
- package/dist/mixins-BWb9_e1s.js.map +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/navigation-rail.js.map +1 -1
- package/dist/{notification-Dy2azMyt.cjs → notification-CliGbcfU.cjs} +1 -1
- package/dist/{notification-Dy2azMyt.cjs.map → notification-CliGbcfU.cjs.map} +1 -1
- package/dist/{notification-CUmb9c3Y.js → notification-R2_Mf1HR.js} +1 -1
- package/dist/{notification-CUmb9c3Y.js.map → notification-R2_Mf1HR.js.map} +1 -1
- package/dist/notification.cjs +1 -1
- package/dist/notification.js +1 -1
- package/dist/{option-DFvQ551b.js.map → option-DU1X4SDu.js.map} +1 -1
- package/dist/{option-CDgIKifG.cjs.map → option-Db98Ndzv.cjs.map} +1 -1
- package/dist/option.cjs +1 -1
- package/dist/option.js +1 -1
- package/dist/overlay-stack-BR4iYivO.js.map +1 -1
- package/dist/overlay.cjs.map +1 -1
- package/dist/overlay.confirm-body-uFp-0Zfh.js.map +1 -1
- package/dist/overlay.js.map +1 -1
- package/dist/overlay.service-1YWfUD2S.cjs.map +1 -1
- package/dist/overlay.service-BcF12kGb.js.map +1 -1
- package/dist/page.cjs +1 -1
- package/dist/page.js +1 -1
- package/dist/page.js.map +1 -1
- package/dist/{progress-bLbGRuQ1.js.map → progress-C9Y2D5cm.js.map} +1 -1
- package/dist/{progress-C02sWkmE.cjs.map → progress-DiVTGAXa.cjs.map} +1 -1
- package/dist/progress.cjs +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-DA4eIGCj.js.map → radio-group-CAzjBI2n.js.map} +1 -1
- package/dist/{radio-group-BA-jRct5.cjs.map → radio-group-DIRJyYv6.cjs.map} +1 -1
- package/dist/radio-group.cjs +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/range.js.map +1 -1
- package/dist/reduced-motion-D7LqTUMn.js.map +1 -1
- package/dist/{rxjs-utils-kWPShgKu.cjs.map → rxjs-utils-BKB2UM_j.cjs.map} +1 -1
- package/dist/{rxjs-utils-D9U4MW0Q.js.map → rxjs-utils-Dv9T9IpA.js.map} +1 -1
- package/dist/rxjs-utils.cjs +1 -1
- package/dist/rxjs-utils.js +1 -1
- package/dist/{scroll-CG5up5oy.js.map → scroll-BFHUtZOa.js.map} +1 -1
- package/dist/{scroll-D8vBF_gY.cjs.map → scroll-nIZyoEMt.cjs.map} +1 -1
- package/dist/search-MvIBA93K.js.map +1 -1
- package/dist/{select-BrK1BJoU.js → select-7WqaUWBU.js} +1 -1
- package/dist/{select-BrK1BJoU.js.map → select-7WqaUWBU.js.map} +1 -1
- package/dist/{select-Dh2j7Qc-.cjs → select-DTuf6p6T.cjs} +1 -1
- package/dist/{select-Dh2j7Qc-.cjs.map → select-DTuf6p6T.cjs.map} +1 -1
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.js.map +1 -1
- package/dist/skills/SKILL.md +3 -0
- package/dist/skills/schmancy/SKILL.md +3 -0
- package/dist/slider.js.map +1 -1
- package/dist/sound.service-BIN2W7Rv.js.map +1 -1
- package/dist/splash-screen-BcjjJSlK.js.map +1 -1
- package/dist/{src-B2-CU8fu.cjs → src-BbMJeLk9.cjs} +1 -1
- package/dist/{src-B2-CU8fu.cjs.map → src-BbMJeLk9.cjs.map} +1 -1
- package/dist/{src-DvywUq7l.js → src-DCu_mEk4.js} +18 -18
- package/dist/{src-DvywUq7l.js.map → src-DCu_mEk4.js.map} +1 -1
- package/dist/state-avic94Ft.cjs.map +1 -1
- package/dist/state-nm8yzMPp.js.map +1 -1
- package/dist/steps.js.map +1 -1
- package/dist/surface-BtMMHKol.js.map +1 -1
- package/dist/switch.js.map +1 -1
- package/dist/table.js.map +1 -1
- package/dist/{tabs-CikPr7by.js.map → tabs-81ADWQqa.js.map} +1 -1
- package/dist/{tabs-CitVls3_.cjs.map → tabs-DnG3K0bu.cjs.map} +1 -1
- package/dist/tabs.cjs +1 -1
- package/dist/tabs.js +1 -1
- package/dist/teleport.cjs +1 -1
- package/dist/teleport.js +1 -1
- package/dist/{textarea-DVkwQSis.js.map → textarea-3mWewuAf.js.map} +1 -1
- package/dist/{textarea-CqV1wvmB.cjs.map → textarea-BenjiTXB.cjs.map} +1 -1
- package/dist/textarea.cjs +1 -1
- package/dist/textarea.js +1 -1
- package/dist/{theme-BIWS4TOW.js → theme-CFPJW933.js} +1 -1
- package/dist/{theme-BIWS4TOW.js.map → theme-CFPJW933.js.map} +1 -1
- package/dist/{theme-DMgjiKda.cjs → theme-DNymrucy.cjs} +1 -1
- package/dist/{theme-DMgjiKda.cjs.map → theme-DNymrucy.cjs.map} +1 -1
- package/dist/theme-button-DC_shZ_7.js.map +1 -1
- package/dist/theme.cjs +1 -1
- package/dist/{theme.interface-C8OHheXg.js.map → theme.interface-C2XNgsLB.js.map} +1 -1
- package/dist/{theme.interface-CYo4UpWK.cjs.map → theme.interface-D4NeufQA.cjs.map} +1 -1
- package/dist/theme.js +2 -2
- package/dist/theme.service-BOWIT_5k.js.map +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/tree.js.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/typewriter.cjs.map +1 -1
- package/dist/typewriter.js.map +1 -1
- package/dist/typography.js.map +1 -1
- package/dist/utils-Cj_nRRyx.js.map +1 -1
- package/dist/visually-hidden.js.map +1 -1
- package/dist/window-BTecgE_U.js.map +1 -1
- package/package.json +1 -1
- package/skills/schmancy/SKILL.md +3 -0
- package/src/form/fields/index.ts +9 -0
- package/src/form/index.ts +1 -0
- package/types/src/form/fields/index.d.ts +9 -0
- package/types/src/form/index.d.ts +1 -0
- package/dist/form-g5c70rac.cjs +0 -42
- /package/dist/{icons-1HIENBco.cjs → icons-BXp4vbnW.cjs} +0 -0
- /package/dist/{icons-3y0kr1aB.js → icons-COrlmBPB.js} +0 -0
- /package/dist/{iframe-CjqYuZG5.cjs → iframe-BwXj6mLp.cjs} +0 -0
- /package/dist/{iframe-Z5gTK-gd.js → iframe-CPNsIy7k.js} +0 -0
- /package/dist/{input-BtcIhu0Q.cjs → input-BGrF2qVq.cjs} +0 -0
- /package/dist/{input-B-fw6f_r.js → input-C1SnMNuQ.js} +0 -0
- /package/dist/{lightbox-BL3LWp-P.js → lightbox-CLwpaiai.js} +0 -0
- /package/dist/{lightbox-BHTZOn8K.cjs → lightbox-Ck6BpN5u.cjs} +0 -0
- /package/dist/{list-DLJL1JQj.js → list-Bmce1Rb8.js} +0 -0
- /package/dist/{list-CHYa5VGY.cjs → list-EmRwSpTU.cjs} +0 -0
- /package/dist/{menu-BNq93w6X.js → menu-BA_B7QOG.js} +0 -0
- /package/dist/{menu-DAikvkeV.cjs → menu-BTU3wGP6.cjs} +0 -0
- /package/dist/{option-DFvQ551b.js → option-DU1X4SDu.js} +0 -0
- /package/dist/{option-CDgIKifG.cjs → option-Db98Ndzv.cjs} +0 -0
- /package/dist/{progress-bLbGRuQ1.js → progress-C9Y2D5cm.js} +0 -0
- /package/dist/{progress-C02sWkmE.cjs → progress-DiVTGAXa.cjs} +0 -0
- /package/dist/{radio-group-DA4eIGCj.js → radio-group-CAzjBI2n.js} +0 -0
- /package/dist/{radio-group-BA-jRct5.cjs → radio-group-DIRJyYv6.cjs} +0 -0
- /package/dist/{rxjs-utils-kWPShgKu.cjs → rxjs-utils-BKB2UM_j.cjs} +0 -0
- /package/dist/{rxjs-utils-D9U4MW0Q.js → rxjs-utils-Dv9T9IpA.js} +0 -0
- /package/dist/{scroll-CG5up5oy.js → scroll-BFHUtZOa.js} +0 -0
- /package/dist/{scroll-D8vBF_gY.cjs → scroll-nIZyoEMt.cjs} +0 -0
- /package/dist/{tabs-CikPr7by.js → tabs-81ADWQqa.js} +0 -0
- /package/dist/{tabs-CitVls3_.cjs → tabs-DnG3K0bu.cjs} +0 -0
- /package/dist/{textarea-DVkwQSis.js → textarea-3mWewuAf.js} +0 -0
- /package/dist/{textarea-CqV1wvmB.cjs → textarea-BenjiTXB.cjs} +0 -0
- /package/dist/{theme.interface-C8OHheXg.js → theme.interface-C2XNgsLB.js} +0 -0
- /package/dist/{theme.interface-CYo4UpWK.cjs → theme.interface-D4NeufQA.cjs} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-Bmce1Rb8.js","names":[],"sources":["../src/list/context.ts","../src/surface/context.ts","../src/list/list-item.ts","../src/list/list.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancyListTypeContext = createContext<TSurfaceColor>(undefined)\n","import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SchmancySurfaceTypeContext } from '@schmancy/surface/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\n\n/**\n * @element schmancy-list-item\n * @slot leading - leading content\n * @slot trailing - trailing content\n * @slot - default content\n */\n@customElement('schmancy-list-item')\nexport class SchmancyListItem extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tborder-radius: 0.5rem;\n\t\ttransition:\n\t\t\tbackground 200ms ease,\n\t\t\tbox-shadow 300ms ease,\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host(:hover:not([readonly])) {\n\t\tbackground: color-mix(in srgb, var(--schmancy-sys-color-surface-on) 8%, transparent);\n\t\tbox-shadow: 0 2px 8px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t}\n\t:host(:active:not([readonly])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\t:host([selected]) {\n\t\tbackground: color-mix(in srgb, var(--schmancy-sys-color-secondary-container) 30%, transparent);\n\t\tbox-shadow: 0 0 10px -3px color-mix(in srgb, var(--schmancy-sys-color-secondary-default) 12%, transparent);\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: background 200ms ease; }\n\t\t:host(:active:not([readonly])) { transform: none; }\n\t}\n`];\n\t@consume({ context: SchmancySurfaceTypeContext, subscribe: true })\n\t@property()\n\tvariant: TSurfaceColor\n\n\t@property({ type: Boolean, reflect: true })\n\trounded: boolean\n\n\t@property({ type: Boolean, reflect: true }) readonly: boolean\n\n\t@property({ type: Boolean, reflect: true }) selected: boolean = false\n\n\t@queryAssignedElements({\n\t\tslot: 'leading',\n\t\tflatten: true,\n\t})\n\tprivate leading!: HTMLElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'trailing',\n\t\tflatten: true,\n\t})\n\tprivate trailing!: HTMLElement[]\n\n\tprotected get imgClasses(): string[] {\n\t\treturn ['h-4', 'w-4', 'sm:h-5', 'sm:w-5', 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\tthis.leading?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t\tthis.trailing?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'w-full flex items-center min-h-[36px] sm:min-h-[40px] py-1 px-2 sm:px-3 text-sm': true,\n\t\t\t'focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden': true,\n\t\t\t'cursor-pointer': !this.readonly,\n\t\t}\n\n\t\treturn html`<li .tabIndex=${this.readonly ? -1 : 0} class=${this.classMap(classes)}>\n\t\t\t<slot></slot>\n\t\t</li>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list-item': SchmancyListItem\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SchmancySurfaceFill } from '@schmancy/surface'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyListTypeContext } from './context'\n\n/**\n * `<schmancy-list>` component.\n *\n * A list component that wraps its content within a customizable surface.\n * It allows you to set the surface type and fill style, and can optionally\n * enable scrolling behavior by delegating the scroller attribute to the surface.\n *\n * @element schmancy-list\n * @slot - The default slot for list items.\n *\n * @example\n * <schmancy-list surface=\"container\" scroller>\n * <schmancy-list-item>List Item 1</schmancy-list-item>\n * </schmancy-list>\n */\n@customElement('schmancy-list')\nexport class List extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding-top: 8px;\n\t\tpadding-bottom: 8px;\n\t}\n`];\n\t/**\n\t * Defines the type or color of the surface used by the component.\n\t * This value is provided to descendant components via context.\n\t *\n\t * @attr surface\n\t * @type {TSurfaceColor}\n\t * @default 'surface'\n\t */\n\t@provide({ context: SchmancyListTypeContext })\n\t@property()\n\tsurface: TSurfaceColor\n\n\t/**\n\t * Determines the fill style of the underlying surface.\n\t *\n\t * @attr fill\n\t * @type {SchmancySurfaceFill}\n\t * @default 'auto'\n\t */\n\t@property({ type: String, reflect: true })\n\tfill: SchmancySurfaceFill = 'auto'\n\n\t/**\n\t * Defines the elevation level of the surface.\n\t *\n\t * @attr elevation\n\t * @type {number}\n\t * @default 0\n\t */\n\t@property({ type: Number })\n\televation: 0 | 1 | 2 | 3 | 4 | 5 = 0\n\n\t/**\n\t * Renders the component's template.\n\t * The list content is wrapped inside a `<schmancy-surface>` element.\n\t * The scroller property is delegated to the surface so that it controls\n\t * the scrollable behavior.\n\t *\n\t * @returns The HTML template for the component.\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-surface .elevation=${this.elevation} .fill=${this.fill} type=${this.surface}>\n\t\t\t\t<ul>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ul>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list': List\n\t}\n}\n"],"mappings":";;;;;AAEA,IAAa,IAA0B,EAAA,KAA6B,EAAA,ECAvD,IAA6B,EAA6B,UAAA,ECYhE,IAAA,cAA+B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,WAAA,CAoC2B;;CAAA;EAAA,KAAA,SAnChD,CAAC,CAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDpB,IAAA,aAAc;EACb,OAAO;GAAC;GAAO;GAAO;GAAU;GAAU;GAAA;;CAG3C,eAAA;EACC,KAAK,SAAS,SAAQ,MAAA;GACrB,EAAI,UAAU,IAAA,GAAO,KAAK,WAAA;IAAA,EAE3B,KAAK,UAAU,SAAQ,MAAA;GACtB,EAAI,UAAU,IAAA,GAAO,KAAK,WAAA;IAAA;;CAI5B,SAAA;EACC,IAAM,IAAU;GACf,mFAAA,CAAmF;GACnF,iJAAA,CAAiJ;GACjJ,kBAAA,CAAmB,KAAK;GAAA;EAGzB,OAAO,CAAI,iBAAiB,KAAK,WAAA,KAAgB,EAAA,SAAW,KAAK,SAAS,EAAA,CAAA;;;;;GA3C1E,EAAQ;CAAE,SAAS;CAA4B,WAAA,CAAW;CAAA,CAAA,EAC1D,GAAA,CAAA,EAAU,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAGV,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAG1C,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,YAAA,KAAA,EAAA,EAAA,EAAA,CAE1C,EAAS;CAAE,MAAM;CAAS,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,YAAA,KAAA,EAAA,EAAA,EAAA,CAE1C,EAAsB;CACtB,MAAM;CACN,SAAA,CAAS;CAAA,CAAA,CAAA,EACR,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAGD,EAAsB;CACtB,MAAM;CACN,SAAA,CAAS;CAAA,CAAA,CAAA,EACR,EAAA,WAAA,YAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAhDF,EAAc,qBAAA,CAAA,EAAqB,EAAA;ACW7B,IAAA,IAAA,cAAmB,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,OA4BG,QAAA,KAAA,YAUO;;CAAA;EAAA,KAAA,SArCnB,CAAC,CAAG;;;;;;;;CA+CpB,SAAA;EACC,OAAO,CAAI;kCACqB,KAAK,UAAA,SAAmB,KAAK,KAAA,QAAa,KAAK,QAAA;;;;;;;;GAlC/E,EAAQ,EAAE,SAAS,GAAA,CAAA,EACnB,GAAA,CAAA,EAAU,EAAA,WAAA,WAAA,KAAA,EAAA,EAAA,EAAA,CAUV,EAAS;CAAE,MAAM;CAAQ,SAAA,CAAS;CAAA,CAAA,CAAA,EAAO,EAAA,WAAA,QAAA,KAAA,EAAA,EAAA,EAAA,CAUzC,EAAS,EAAE,MAAM,QAAA,CAAA,CAAA,EAAS,EAAA,WAAA,aAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAtC3B,EAAc,gBAAA,CAAA,EAAgB,EAAA;AAAA,SAAA,KAAA,GAAA,KAAA,GAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-
|
|
1
|
+
{"version":3,"file":"list-EmRwSpTU.cjs","names":[],"sources":["../src/list/context.ts","../src/surface/context.ts","../src/list/list-item.ts","../src/list/list.ts"],"sourcesContent":["import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancyListTypeContext = createContext<TSurfaceColor>(undefined)\n","import { createContext } from '@lit/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nexport const SchmancySurfaceTypeContext = createContext<TSurfaceColor>('surface')\n","import { consume } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SchmancySurfaceTypeContext } from '@schmancy/surface/context'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property, queryAssignedElements } from 'lit/decorators.js'\n\n/**\n * @element schmancy-list-item\n * @slot leading - leading content\n * @slot trailing - trailing content\n * @slot - default content\n */\n@customElement('schmancy-list-item')\nexport class SchmancyListItem extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tborder-radius: 0.5rem;\n\t\ttransition:\n\t\t\tbackground 200ms ease,\n\t\t\tbox-shadow 300ms ease,\n\t\t\ttransform 200ms cubic-bezier(0.34, 1.56, 0.64, 1);\n\t}\n\t:host(:hover:not([readonly])) {\n\t\tbackground: color-mix(in srgb, var(--schmancy-sys-color-surface-on) 8%, transparent);\n\t\tbox-shadow: 0 2px 8px -4px color-mix(in srgb, var(--schmancy-sys-color-primary-default) 10%, transparent);\n\t}\n\t:host(:active:not([readonly])) {\n\t\ttransform: scale(0.98);\n\t\ttransition-duration: 100ms;\n\t}\n\t:host([selected]) {\n\t\tbackground: color-mix(in srgb, var(--schmancy-sys-color-secondary-container) 30%, transparent);\n\t\tbox-shadow: 0 0 10px -3px color-mix(in srgb, var(--schmancy-sys-color-secondary-default) 12%, transparent);\n\t}\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host { transition: background 200ms ease; }\n\t\t:host(:active:not([readonly])) { transform: none; }\n\t}\n`];\n\t@consume({ context: SchmancySurfaceTypeContext, subscribe: true })\n\t@property()\n\tvariant: TSurfaceColor\n\n\t@property({ type: Boolean, reflect: true })\n\trounded: boolean\n\n\t@property({ type: Boolean, reflect: true }) readonly: boolean\n\n\t@property({ type: Boolean, reflect: true }) selected: boolean = false\n\n\t@queryAssignedElements({\n\t\tslot: 'leading',\n\t\tflatten: true,\n\t})\n\tprivate leading!: HTMLElement[]\n\n\t@queryAssignedElements({\n\t\tslot: 'trailing',\n\t\tflatten: true,\n\t})\n\tprivate trailing!: HTMLElement[]\n\n\tprotected get imgClasses(): string[] {\n\t\treturn ['h-4', 'w-4', 'sm:h-5', 'sm:w-5', 'object-contain']\n\t}\n\n\tfirstUpdated() {\n\t\tthis.leading?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t\tthis.trailing?.forEach(img => {\n\t\t\timg.classList.add(...this.imgClasses)\n\t\t})\n\t}\n\n\trender() {\n\t\tconst classes = {\n\t\t\t'w-full flex items-center min-h-[36px] sm:min-h-[40px] py-1 px-2 sm:px-3 text-sm': true,\n\t\t\t'focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:z-1 outline-secondary-default outline-hidden': true,\n\t\t\t'cursor-pointer': !this.readonly,\n\t\t}\n\n\t\treturn html`<li .tabIndex=${this.readonly ? -1 : 0} class=${this.classMap(classes)}>\n\t\t\t<slot></slot>\n\t\t</li>`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list-item': SchmancyListItem\n\t}\n}\n","import { provide } from '@lit/context'\nimport { SchmancyElement } from '@mixins/index'\nimport { SchmancySurfaceFill } from '@schmancy/surface'\nimport { TSurfaceColor } from '@schmancy/types/surface'\nimport { css, html } from 'lit'\nimport { customElement, property } from 'lit/decorators.js'\nimport { SchmancyListTypeContext } from './context'\n\n/**\n * `<schmancy-list>` component.\n *\n * A list component that wraps its content within a customizable surface.\n * It allows you to set the surface type and fill style, and can optionally\n * enable scrolling behavior by delegating the scroller attribute to the surface.\n *\n * @element schmancy-list\n * @slot - The default slot for list items.\n *\n * @example\n * <schmancy-list surface=\"container\" scroller>\n * <schmancy-list-item>List Item 1</schmancy-list-item>\n * </schmancy-list>\n */\n@customElement('schmancy-list')\nexport class List extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t\tpadding-top: 8px;\n\t\tpadding-bottom: 8px;\n\t}\n`];\n\t/**\n\t * Defines the type or color of the surface used by the component.\n\t * This value is provided to descendant components via context.\n\t *\n\t * @attr surface\n\t * @type {TSurfaceColor}\n\t * @default 'surface'\n\t */\n\t@provide({ context: SchmancyListTypeContext })\n\t@property()\n\tsurface: TSurfaceColor\n\n\t/**\n\t * Determines the fill style of the underlying surface.\n\t *\n\t * @attr fill\n\t * @type {SchmancySurfaceFill}\n\t * @default 'auto'\n\t */\n\t@property({ type: String, reflect: true })\n\tfill: SchmancySurfaceFill = 'auto'\n\n\t/**\n\t * Defines the elevation level of the surface.\n\t *\n\t * @attr elevation\n\t * @type {number}\n\t * @default 0\n\t */\n\t@property({ type: Number })\n\televation: 0 | 1 | 2 | 3 | 4 | 5 = 0\n\n\t/**\n\t * Renders the component's template.\n\t * The list content is wrapped inside a `<schmancy-surface>` element.\n\t * The scroller property is delegated to the surface so that it controls\n\t * the scrollable behavior.\n\t *\n\t * @returns The HTML template for the component.\n\t */\n\trender() {\n\t\treturn html`\n\t\t\t<schmancy-surface .elevation=${this.elevation} .fill=${this.fill} type=${this.surface}>\n\t\t\t\t<ul>\n\t\t\t\t\t<slot></slot>\n\t\t\t\t</ul>\n\t\t\t</schmancy-surface>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-list': List\n\t}\n}\n"],"mappings":"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"}
|
package/dist/list.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./list-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./list-EmRwSpTU.cjs`);Object.defineProperty(exports,`List`,{enumerable:!0,get:function(){return e.t}}),Object.defineProperty(exports,`SchmancyListItem`,{enumerable:!0,get:function(){return e.n}}),exports.SchmancyListTypeContext=e.r;
|
package/dist/list.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, r as t, t as n } from "./list-
|
|
1
|
+
import { n as e, r as t, t as n } from "./list-Bmce1Rb8.js";
|
|
2
2
|
export { n as List, e as SchmancyListItem, t as SchmancyListTypeContext };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"magnetic-DxvoEz8_.js","names":[],"sources":["../src/directives/magnetic.ts"],"sourcesContent":["import { directive, type ElementPart, PartType } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { animationFrameScheduler, fromEvent, merge, Subject } from 'rxjs'\nimport { auditTime, map, takeUntil } from 'rxjs/operators'\nimport { SPRING_SNAPPY } from '../utils/animation'\nimport { reducedMotion$ } from './reduced-motion'\n\nexport interface MagneticOptions {\n\t/** Max displacement in pixels (default: 4) */\n\tstrength?: number\n\t/** Activation radius in pixels (default: 100) */\n\tradius?: number\n}\n\n/**\n * Magnetic directive — elements lean toward the cursor with spring physics.\n *\n * Uses `style.translate` (CSS individual transform) so it composes\n * with existing transforms on the element.\n *\n * @example\n * ```html\n * <schmancy-button ${magnetic()}>Submit</schmancy-button>\n * <schmancy-icon-button ${magnetic({ strength: 6, radius: 120 })}>add</schmancy-icon-button>\n * ```\n */\nclass MagneticDirective extends AsyncDirective {\n\tprivate element!: HTMLElement\n\tprivate readonly teardown$ = new Subject<void>()\n\tprivate strength = 4\n\tprivate radius = 100\n\tprivate prevKey?: string\n\tprivate cachedRect?: DOMRect\n\n\trender(_options?: MagneticOptions) {\n\t\treturn undefined\n\t}\n\n\toverride update(part: ElementPart, [options]: [MagneticOptions?]) {\n\t\tif (part.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('magnetic directive must be used on an element')\n\t\t}\n\n\t\tconst key = JSON.stringify(options ?? {})\n\t\tif (this.element && key === this.prevKey) return undefined\n\t\tthis.prevKey = key\n\n\t\tthis.element = part.element as HTMLElement\n\t\tthis.strength = options?.strength ?? 4\n\t\tthis.radius = options?.radius ?? 100\n\n\t\tthis.element.style.transition = `translate ${SPRING_SNAPPY.duration}ms ${SPRING_SNAPPY.easingFallback}`\n\n\t\tthis.teardown$.next()\n\t\tthis.setupMagnetic()\n\n\t\treturn undefined\n\t}\n\n\toverride reconnected() {\n\t\tthis.teardown$.next()\n\t\tthis.setupMagnetic()\n\t}\n\n\tprivate setupMagnetic() {\n\t\tif (reducedMotion$.value) return\n\n\t\tconst target = this.element.parentElement ?? document\n\n\t\tconst enter$ = fromEvent(this.element, 'mouseenter').pipe(\n\t\t\tmap(() => {\n\t\t\t\tthis.element.style.willChange = 'translate'\n\t\t\t\tthis.cachedRect = this.element.getBoundingClientRect()\n\t\t\t\treturn null\n\t\t\t}),\n\t\t)\n\n\t\tconst move$ = fromEvent<MouseEvent>(target, 'mousemove').pipe(\n\t\t\tauditTime(0, animationFrameScheduler),\n\t\t\tmap(e => {\n\t\t\t\tconst rect = this.cachedRect ?? this.element.getBoundingClientRect()\n\t\t\t\tconst centerX = rect.left + rect.width / 2\n\t\t\t\tconst centerY = rect.top + rect.height / 2\n\t\t\t\tconst dx = e.clientX - centerX\n\t\t\t\tconst dy = e.clientY - centerY\n\t\t\t\tconst distance = Math.sqrt(dx * dx + dy * dy)\n\n\t\t\t\tif (distance < this.radius && distance > 0) {\n\t\t\t\t\tconst pull = (1 - distance / this.radius) * this.strength\n\t\t\t\t\treturn { x: (dx / distance) * pull, y: (dy / distance) * pull }\n\t\t\t\t}\n\t\t\t\treturn { x: 0, y: 0 }\n\t\t\t}),\n\t\t)\n\n\t\tconst leave$ = fromEvent(target, 'mouseleave').pipe(\n\t\t\tmap(() => {\n\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\tthis.cachedRect = undefined\n\t\t\t\treturn { x: 0, y: 0 }\n\t\t\t}),\n\t\t)\n\n\t\t// Also tear down if user enables reduced motion\n\t\tconst motionChange$ = reducedMotion$.pipe(\n\t\t\tmap(reduced => {\n\t\t\t\tif (reduced) {\n\t\t\t\t\tthis.element.style.translate = ''\n\t\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}),\n\t\t)\n\n\t\tmerge(enter$, move$, leave$, motionChange$)\n\t\t\t.pipe(takeUntil(this.teardown$))\n\t\t\t.subscribe(pos => {\n\t\t\t\tif (pos) {\n\t\t\t\t\tthis.element.style.translate = `${pos.x}px ${pos.y}px`\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\toverride disconnected() {\n\t\tthis.teardown$.next()\n\t\tif (this.element) {\n\t\t\tthis.element.style.translate = ''\n\t\t\tthis.element.style.willChange = ''\n\t\t}\n\t}\n}\n\nexport const magnetic = directive(MagneticDirective)\n"],"mappings":";;;;;;AA0BA,IA0Ga,IAAW,EA1GxB,cAAgC,EAAA;CAAA,YAAA,GAAA,GAAA;
|
|
1
|
+
{"version":3,"file":"magnetic-DxvoEz8_.js","names":[],"sources":["../src/directives/magnetic.ts"],"sourcesContent":["import { directive, type ElementPart, PartType } from 'lit/directive.js'\nimport { AsyncDirective } from 'lit/async-directive.js'\nimport { animationFrameScheduler, fromEvent, merge, Subject } from 'rxjs'\nimport { auditTime, map, takeUntil } from 'rxjs/operators'\nimport { SPRING_SNAPPY } from '../utils/animation'\nimport { reducedMotion$ } from './reduced-motion'\n\nexport interface MagneticOptions {\n\t/** Max displacement in pixels (default: 4) */\n\tstrength?: number\n\t/** Activation radius in pixels (default: 100) */\n\tradius?: number\n}\n\n/**\n * Magnetic directive — elements lean toward the cursor with spring physics.\n *\n * Uses `style.translate` (CSS individual transform) so it composes\n * with existing transforms on the element.\n *\n * @example\n * ```html\n * <schmancy-button ${magnetic()}>Submit</schmancy-button>\n * <schmancy-icon-button ${magnetic({ strength: 6, radius: 120 })}>add</schmancy-icon-button>\n * ```\n */\nclass MagneticDirective extends AsyncDirective {\n\tprivate element!: HTMLElement\n\tprivate readonly teardown$ = new Subject<void>()\n\tprivate strength = 4\n\tprivate radius = 100\n\tprivate prevKey?: string\n\tprivate cachedRect?: DOMRect\n\n\trender(_options?: MagneticOptions) {\n\t\treturn undefined\n\t}\n\n\toverride update(part: ElementPart, [options]: [MagneticOptions?]) {\n\t\tif (part.type !== PartType.ELEMENT) {\n\t\t\tthrow new Error('magnetic directive must be used on an element')\n\t\t}\n\n\t\tconst key = JSON.stringify(options ?? {})\n\t\tif (this.element && key === this.prevKey) return undefined\n\t\tthis.prevKey = key\n\n\t\tthis.element = part.element as HTMLElement\n\t\tthis.strength = options?.strength ?? 4\n\t\tthis.radius = options?.radius ?? 100\n\n\t\tthis.element.style.transition = `translate ${SPRING_SNAPPY.duration}ms ${SPRING_SNAPPY.easingFallback}`\n\n\t\tthis.teardown$.next()\n\t\tthis.setupMagnetic()\n\n\t\treturn undefined\n\t}\n\n\toverride reconnected() {\n\t\tthis.teardown$.next()\n\t\tthis.setupMagnetic()\n\t}\n\n\tprivate setupMagnetic() {\n\t\tif (reducedMotion$.value) return\n\n\t\tconst target = this.element.parentElement ?? document\n\n\t\tconst enter$ = fromEvent(this.element, 'mouseenter').pipe(\n\t\t\tmap(() => {\n\t\t\t\tthis.element.style.willChange = 'translate'\n\t\t\t\tthis.cachedRect = this.element.getBoundingClientRect()\n\t\t\t\treturn null\n\t\t\t}),\n\t\t)\n\n\t\tconst move$ = fromEvent<MouseEvent>(target, 'mousemove').pipe(\n\t\t\tauditTime(0, animationFrameScheduler),\n\t\t\tmap(e => {\n\t\t\t\tconst rect = this.cachedRect ?? this.element.getBoundingClientRect()\n\t\t\t\tconst centerX = rect.left + rect.width / 2\n\t\t\t\tconst centerY = rect.top + rect.height / 2\n\t\t\t\tconst dx = e.clientX - centerX\n\t\t\t\tconst dy = e.clientY - centerY\n\t\t\t\tconst distance = Math.sqrt(dx * dx + dy * dy)\n\n\t\t\t\tif (distance < this.radius && distance > 0) {\n\t\t\t\t\tconst pull = (1 - distance / this.radius) * this.strength\n\t\t\t\t\treturn { x: (dx / distance) * pull, y: (dy / distance) * pull }\n\t\t\t\t}\n\t\t\t\treturn { x: 0, y: 0 }\n\t\t\t}),\n\t\t)\n\n\t\tconst leave$ = fromEvent(target, 'mouseleave').pipe(\n\t\t\tmap(() => {\n\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\tthis.cachedRect = undefined\n\t\t\t\treturn { x: 0, y: 0 }\n\t\t\t}),\n\t\t)\n\n\t\t// Also tear down if user enables reduced motion\n\t\tconst motionChange$ = reducedMotion$.pipe(\n\t\t\tmap(reduced => {\n\t\t\t\tif (reduced) {\n\t\t\t\t\tthis.element.style.translate = ''\n\t\t\t\t\tthis.element.style.willChange = ''\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}),\n\t\t)\n\n\t\tmerge(enter$, move$, leave$, motionChange$)\n\t\t\t.pipe(takeUntil(this.teardown$))\n\t\t\t.subscribe(pos => {\n\t\t\t\tif (pos) {\n\t\t\t\t\tthis.element.style.translate = `${pos.x}px ${pos.y}px`\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\toverride disconnected() {\n\t\tthis.teardown$.next()\n\t\tif (this.element) {\n\t\t\tthis.element.style.translate = ''\n\t\t\tthis.element.style.willChange = ''\n\t\t}\n\t}\n}\n\nexport const magnetic = directive(MagneticDirective)\n"],"mappings":";;;;;;AA0BA,IA0Ga,IAAW,EA1GxB,cAAgC,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,YAEF,IAAI,GAAA,EAAA,KAAA,WACd,GAAA,KAAA,SACF;;CAIjB,OAAO,GAAA;CAIP,OAAgB,GAAA,CAAoB,IAAA;EACnC,IAAI,EAAK,SAAS,EAAS,SAC1B,MAAU,MAAM,gDAAA;EAGjB,IAAM,IAAM,KAAK,UAAU,KAAW,EAAA,CAAA;EAClC,KAAK,WAAW,MAAQ,KAAK,YACjC,KAAK,UAAU,GAEf,KAAK,UAAU,EAAK,SACpB,KAAK,WAAW,GAAS,YAAY,GACrC,KAAK,SAAS,GAAS,UAAU,KAEjC,KAAK,QAAQ,MAAM,aAAa,aAAa,EAAc,SAAA,KAAc,EAAc,kBAEvF,KAAK,UAAU,MAAA,EACf,KAAK,eAAA;;CAKN,cAAA;EACC,KAAK,UAAU,MAAA,EACf,KAAK,eAAA;;CAGN,gBAAA;EACC,IAAI,EAAe,OAAO;EAE1B,IAAM,IAAS,KAAK,QAAQ,iBAAiB;EA+C7C,EA7Ce,EAAU,KAAK,SAAS,aAAA,CAAc,KACpD,SACC,KAAK,QAAQ,MAAM,aAAa,aAChC,KAAK,aAAa,KAAK,QAAQ,uBAAA,EACxB,MAAA,CAAA,EAIK,EAAsB,GAAQ,YAAA,CAAa,KACxD,EAAU,GAAG,EAAA,EACb,GAAI,MAAA;GACH,IAAM,IAAO,KAAK,cAAc,KAAK,QAAQ,uBAAA,EACvC,IAAU,EAAK,OAAO,EAAK,QAAQ,GACnC,IAAU,EAAK,MAAM,EAAK,SAAS,GACnC,IAAK,EAAE,UAAU,GACjB,IAAK,EAAE,UAAU,GACjB,IAAW,KAAK,KAAK,IAAK,IAAK,IAAK,EAAA;GAE1C,IAAI,IAAW,KAAK,UAAU,IAAW,GAAG;IAC3C,IAAM,KAAQ,IAAI,IAAW,KAAK,UAAU,KAAK;IACjD,OAAO;KAAE,GAAI,IAAK,IAAY;KAAM,GAAI,IAAK,IAAY;KAAA;;GAE1D,OAAO;IAAE,GAAG;IAAG,GAAG;IAAA;IAAA,CAAA,EAIL,EAAU,GAAQ,aAAA,CAAc,KAC9C,SACC,KAAK,QAAQ,MAAM,aAAa,IAChC,KAAK,aAAA,KAAa,GACX;GAAE,GAAG;GAAG,GAAG;GAAA,EAAA,CAAA,EAKE,EAAe,KACpC,GAAI,OACC,MACH,KAAK,QAAQ,MAAM,YAAY,IAC/B,KAAK,QAAQ,MAAM,aAAa,KAE1B,MAAA,CAAA,CAAA,CAKP,KAAK,EAAU,KAAK,UAAA,CAAA,CACpB,WAAU,MAAA;GACN,MACH,KAAK,QAAQ,MAAM,YAAY,GAAG,EAAI,EAAA,KAAO,EAAI,EAAA;IAAA;;CAKrD,eAAA;EACC,KAAK,UAAU,MAAA,EACX,KAAK,YACR,KAAK,QAAQ,MAAM,YAAY,IAC/B,KAAK,QAAQ,MAAM,aAAa;;EAAA;AAAA,SAAA,KAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-
|
|
1
|
+
{"version":3,"file":"menu-BA_B7QOG.js","names":[],"sources":["../src/menu/menu-item.ts","../src/menu/menu.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-menu-item')\nexport default class SchmancyMenuItem extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`]\n\n\tprivate dismissParentMenu = (): void => {\n\t\t// Bubbling 'close' is the protocol the overlay `show()` watches; the\n\t\t// enclosing `<schmancy-menu>` opens the menu via `show()` and this\n\t\t// completes the subscription, so the overlay tears itself down.\n\t\tthis.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))\n\t}\n\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<schmancy-list-item @click=${this.dismissParentMenu}>\n\t\t\t\t<slot></slot>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-menu-item': SchmancyMenuItem\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\nimport { takeUntil } from 'rxjs'\nimport { show } from '../overlay/overlay.service'\n\n/**\n * Menu Component\n *\n * The overlay renders ONLY the raw menu items passed via the default slot.\n * NO <ul> wrapper, NO classes, NO additional markup. The overlay system\n * handles positioning (anchored at the trigger click) and dismissal.\n *\n * @example Basic menu with auto-dismiss\n * ```typescript\n * <schmancy-menu>\n * <schmancy-button slot=\"trigger\">Actions</schmancy-button>\n * <schmancy-menu-item @click=${() => editItem()}>Edit</schmancy-menu-item>\n * <schmancy-menu-item @click=${() => deleteItem()}>Delete</schmancy-menu-item>\n * </schmancy-menu>\n * ```\n * Note: `<schmancy-menu-item>` dispatches a bubbling 'close' event on click;\n * the overlay `show()` observable completes and the menu tears down.\n *\n * @example Custom component (manual dismiss)\n * ```typescript\n * <schmancy-menu>\n * <schmancy-icon-button slot=\"trigger\">settings</schmancy-icon-button>\n * <my-settings-form\n * @submit=${(e) => e.target.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))}\n * ></my-settings-form>\n * </schmancy-menu>\n * ```\n *\n * @slot trigger - Button to open menu (new naming)\n * @slot button - Button to open menu (backward compatible)\n * @slot default - Menu items or any custom component to display in the overlay\n */\n@customElement('schmancy-menu')\nexport default class SchmancyMenu extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n`]\n\n\t@query('slot:not([name])')\n\tprivate menuSlot!: HTMLSlotElement\n\n\tprivate showMenu = (event: MouseEvent): void => {\n\t\tconst menuItems = this.menuSlot?.assignedElements() || []\n\t\tif (menuItems.length === 0) return\n\n\t\t// Move slot items into a fresh container so the overlay can adopt them\n\t\t// without leaving stale references in our shadow tree.\n\t\tconst overlayContainer = document.createElement('div')\n\t\tmenuItems.forEach(item => overlayContainer.appendChild(item))\n\n\t\t// Anchor at the click so the overlay system positions the menu\n\t\t// adjacent to the trigger; subscription completion (any dismissal —\n\t\t// item click → bubbling 'close', backdrop, Esc, disconnect) restores\n\t\t// the items as light DOM so the next open re-projects them.\n\t\tshow(overlayContainer, { anchor: event })\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe({\n\t\t\t\tcomplete: () => menuItems.forEach(item => this.appendChild(item)),\n\t\t\t})\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<slot name=\"trigger\" @click=${this.showMenu}>\n\t\t\t\t<slot name=\"button\" @click=${this.showMenu}>\n\t\t\t\t\t<schmancy-icon-button>more_vert</schmancy-icon-button>\n\t\t\t\t</slot>\n\t\t\t</slot>\n\t\t\t<div hidden>\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-menu': SchmancyMenu\n\t}\n}\n"],"mappings":";;;;;;AAKe,IAAA,IAAA,cAA+B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,0BAAA;GAW5C,KAAK,cAAc,IAAI,YAAY,SAAS;IAAE,SAAA,CAAS;IAAM,UAAA,CAAU;IAAA,CAAA,CAAA;;;CAAA;EAAA,KAAA,SAVxD,CAAC,CAAG;;;;;;CAapB,SAAA;EACC,OAAO,CAAI;gCACmB,KAAK,kBAAA;;;;;;OAjBpC,EAAc,qBAAA,CAAA,EAAqB,EAAA;ACmCrB,IAAA,IAAA,cAA2B,EAAA;CAAA,YAAA,GAAA,GAAA;EAAA,MAAA,GAAA,EAAA,EAAA,KAAA,YAWrB,MAAA;GACnB,IAAM,IAAY,KAAK,UAAU,kBAAA,IAAsB,EAAA;GACvD,IAAI,EAAU,WAAW,GAAG;GAI5B,IAAM,IAAmB,SAAS,cAAc,MAAA;GAChD,EAAU,SAAQ,MAAQ,EAAiB,YAAY,EAAA,CAAA,EAMvD,EAAK,GAAkB,EAAE,QAAQ,GAAA,CAAA,CAC/B,KAAK,EAAU,KAAK,cAAA,CAAA,CACpB,UAAU,EACV,gBAAgB,EAAU,SAAQ,MAAQ,KAAK,YAAY,EAAA,CAAA,EAAA,CAAA;;;CAAA;EAAA,KAAA,SA1B9C,CAAC,CAAG;;;;;;;CA8BpB,SAAA;EACC,OAAO,CAAI;iCACoB,KAAK,SAAA;iCACL,KAAK,SAAA;;;;;;;;;;GA1BpC,EAAM,mBAAA,CAAA,EAAmB,EAAA,WAAA,YAAA,KAAA,EAAA,EAAA,IAAA,EAAA,CAT1B,EAAc,gBAAA,CAAA,EAAgB,EAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-
|
|
1
|
+
{"version":3,"file":"menu-BTU3wGP6.cjs","names":[],"sources":["../src/menu/menu-item.ts","../src/menu/menu.ts"],"sourcesContent":["import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement } from 'lit/decorators.js'\n\n@customElement('schmancy-menu-item')\nexport default class SchmancyMenuItem extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tdisplay: block;\n\t}\n`]\n\n\tprivate dismissParentMenu = (): void => {\n\t\t// Bubbling 'close' is the protocol the overlay `show()` watches; the\n\t\t// enclosing `<schmancy-menu>` opens the menu via `show()` and this\n\t\t// completes the subscription, so the overlay tears itself down.\n\t\tthis.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))\n\t}\n\n\tprotected render(): unknown {\n\t\treturn html`\n\t\t\t<schmancy-list-item @click=${this.dismissParentMenu}>\n\t\t\t\t<slot></slot>\n\t\t\t</schmancy-list-item>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-menu-item': SchmancyMenuItem\n\t}\n}\n","import { SchmancyElement } from '@mixins/index'\nimport { css, html } from 'lit'\nimport { customElement, query } from 'lit/decorators.js'\nimport { takeUntil } from 'rxjs'\nimport { show } from '../overlay/overlay.service'\n\n/**\n * Menu Component\n *\n * The overlay renders ONLY the raw menu items passed via the default slot.\n * NO <ul> wrapper, NO classes, NO additional markup. The overlay system\n * handles positioning (anchored at the trigger click) and dismissal.\n *\n * @example Basic menu with auto-dismiss\n * ```typescript\n * <schmancy-menu>\n * <schmancy-button slot=\"trigger\">Actions</schmancy-button>\n * <schmancy-menu-item @click=${() => editItem()}>Edit</schmancy-menu-item>\n * <schmancy-menu-item @click=${() => deleteItem()}>Delete</schmancy-menu-item>\n * </schmancy-menu>\n * ```\n * Note: `<schmancy-menu-item>` dispatches a bubbling 'close' event on click;\n * the overlay `show()` observable completes and the menu tears down.\n *\n * @example Custom component (manual dismiss)\n * ```typescript\n * <schmancy-menu>\n * <schmancy-icon-button slot=\"trigger\">settings</schmancy-icon-button>\n * <my-settings-form\n * @submit=${(e) => e.target.dispatchEvent(new CustomEvent('close', { bubbles: true, composed: true }))}\n * ></my-settings-form>\n * </schmancy-menu>\n * ```\n *\n * @slot trigger - Button to open menu (new naming)\n * @slot button - Button to open menu (backward compatible)\n * @slot default - Menu items or any custom component to display in the overlay\n */\n@customElement('schmancy-menu')\nexport default class SchmancyMenu extends SchmancyElement {\n\tstatic styles = [css`\n\t:host {\n\t\tposition: relative;\n\t\tdisplay: flex;\n\t}\n`]\n\n\t@query('slot:not([name])')\n\tprivate menuSlot!: HTMLSlotElement\n\n\tprivate showMenu = (event: MouseEvent): void => {\n\t\tconst menuItems = this.menuSlot?.assignedElements() || []\n\t\tif (menuItems.length === 0) return\n\n\t\t// Move slot items into a fresh container so the overlay can adopt them\n\t\t// without leaving stale references in our shadow tree.\n\t\tconst overlayContainer = document.createElement('div')\n\t\tmenuItems.forEach(item => overlayContainer.appendChild(item))\n\n\t\t// Anchor at the click so the overlay system positions the menu\n\t\t// adjacent to the trigger; subscription completion (any dismissal —\n\t\t// item click → bubbling 'close', backdrop, Esc, disconnect) restores\n\t\t// the items as light DOM so the next open re-projects them.\n\t\tshow(overlayContainer, { anchor: event })\n\t\t\t.pipe(takeUntil(this.disconnecting))\n\t\t\t.subscribe({\n\t\t\t\tcomplete: () => menuItems.forEach(item => this.appendChild(item)),\n\t\t\t})\n\t}\n\n\trender() {\n\t\treturn html`\n\t\t\t<slot name=\"trigger\" @click=${this.showMenu}>\n\t\t\t\t<slot name=\"button\" @click=${this.showMenu}>\n\t\t\t\t\t<schmancy-icon-button>more_vert</schmancy-icon-button>\n\t\t\t\t</slot>\n\t\t\t</slot>\n\t\t\t<div hidden>\n\t\t\t\t<slot></slot>\n\t\t\t</div>\n\t\t`\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'schmancy-menu': SchmancyMenu\n\t}\n}\n"],"mappings":"mOAKe,IAAA,EAAA,cAA+B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,sBAAA,CAW5C,KAAK,cAAc,IAAI,YAAY,QAAS,CAAE,QAAA,CAAS,EAAM,SAAA,CAAU,EAAA,CAAA,CAAA,EAAA,OAAA,KAAA,OAVxD,CAAC,EAAA,GAAG;;;;GAapB,QAAA,CACC,MAAO,GAAA,IAAI;gCACmB,KAAK,kBAAA;;;iCAjBtB,qBAAA,CAAA,CAAqB,EAAA,CCmCrB,IAAA,EAAA,cAA2B,EAAA,CAAA,CAAA,YAAA,GAAA,EAAA,CAAA,MAAA,GAAA,EAAA,CAAA,KAAA,SAWrB,GAAA,CACnB,IAAM,EAAY,KAAK,UAAU,kBAAA,EAAsB,EAAA,CACvD,GAAI,EAAU,SAAW,EAAG,OAI5B,IAAM,EAAmB,SAAS,cAAc,MAAA,CAChD,EAAU,QAAQ,GAAQ,EAAiB,YAAY,EAAA,CAAA,CAMvD,EAAA,EAAK,EAAkB,CAAE,OAAQ,EAAA,CAAA,CAC/B,MAAA,EAAA,EAAA,WAAe,KAAK,cAAA,CAAA,CACpB,UAAU,CACV,aAAgB,EAAU,QAAQ,GAAQ,KAAK,YAAY,EAAA,CAAA,CAAA,CAAA,EAAA,OAAA,KAAA,OA1B9C,CAAC,EAAA,GAAG;;;;;GA8BpB,QAAA,CACC,MAAO,GAAA,IAAI;iCACoB,KAAK,SAAA;iCACL,KAAK,SAAA;;;;;;;uBA1B9B,mBAAA,CAAA,CAAmB,EAAA,UAAA,WAAA,IAAA,GAAA,CAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,eATZ,gBAAA,CAAA,CAAgB,EAAA"}
|
package/dist/menu.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./menu-
|
|
1
|
+
require(`./menu-BTU3wGP6.cjs`);
|
package/dist/menu.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import "./menu-
|
|
1
|
+
import "./menu-BA_B7QOG.js";
|