neko-ui 2.9.8-beta.0 → 2.9.8-beta.2

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.
@@ -1,4 +1,4 @@
1
- export type JSXElement = JSX.Element | HTMLElement | Element | string | number | boolean | symbol | null;
1
+ export type JSXElement = JSX.Element | HTMLElement | string | number | boolean | symbol | null;
2
2
  export interface BasicConfig {
3
3
  /** 组件状态
4
4
  * @default 'normal'
@@ -1 +1 @@
1
- {"version":3,"sources":["components/basic-config/index.ts"],"sourcesContent":["export type JSXElement =\n | JSX.Element\n | HTMLElement\n | Element\n | string\n | number\n | boolean\n | symbol\n | null;\nexport interface BasicConfig {\n /** 组件状态\n * @default 'normal'\n */\n status: keyof typeof Status;\n /** 组件尺寸\n * @default 'normal'\n */\n size: keyof typeof Size;\n /** 自定义 'label'、'value'、'options' 等映射的key */\n fieldName: Partial<{ [key in keyof typeof FieldName]: string }>;\n}\n\nexport enum Size {\n /** 小 */\n small = 'small',\n /** 默认: 中 */\n normal = 'normal',\n /** 大 */\n large = 'large',\n}\n\nexport enum Status {\n /** 默认 */\n normal = 'normal',\n /** 成功 */\n success = 'success',\n /** 警告 */\n warning = 'warning',\n /** 错误 */\n error = 'error',\n /** 详细 */\n info = 'info',\n /** 主要 */\n primary = 'primary',\n}\n\nexport interface BaseOption {\n /** 图标 */\n icon?: JSXElement;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSXElement;\n /** 不可用状态 */\n disabled?: boolean;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式 */\n style?: Record<string, unknown>;\n /** 选项状态\n * @default 'normal'\n */\n status?: Status;\n /** 分组子选项 */\n options?: (BaseOption | string)[];\n [key: string]: Any;\n}\n\nexport enum FieldName {\n /** 标题 */\n label = 'label',\n /** 值 */\n value = 'value',\n /** 分组子选项 */\n options = 'options',\n /** 子选项 */\n children = 'children',\n /** 图标 */\n icon = 'icon',\n /** 后缀图标 */\n suffix = 'suffix',\n /** 标题 */\n title = 'title',\n /** 副标题 */\n subTitle = 'subTitle',\n /** 键 */\n key = 'key',\n /** 名称 */\n name = 'name',\n}\n\nexport function camelToKebab(str: string) {\n return str\n .replace(/([A-Z])/g, '-$1') // 在大写字母前添加 \"-\"\n .toLowerCase(); // 转为小写\n}\nexport function clearAttribute(el: HTMLElement | ICustomElement, fields: string[]) {\n fields.forEach((key) => {\n const field = key as 'className';\n const prev = el[field];\n\n el.removeAttribute(camelToKebab(field));\n el[field] = prev;\n });\n}\n"],"names":["Size","Status","FieldName","camelToKebab","str","replace","toLowerCase","clearAttribute","el","fields","forEach","key","prev","removeAttribute"],"mappings":"IAsBYA,EASAC,EAqCAC,mBA9CAF,EAAAA,OAAAA,6EASAC,EAAAA,SAAAA,4IAqCAC,EAAAA,YAAAA,sLAuBZ,QAAO,SAASC,aAAaC,CAAW,EACtC,OAAOA,EACJC,OAAO,CAAC,WAAY,OACpBC,WAAW,EAChB,CACA,OAAO,SAASC,eAAeC,CAAgC,CAAEC,CAAgB,EAC/EA,EAAOC,OAAO,CAAC,AAACC,IAEd,IAAMC,EAAOJ,CAAE,CADDG,EACQ,CAEtBH,EAAGK,eAAe,CAACV,aAHLQ,IAIdH,CAAE,CAJYG,EAIL,CAAGC,CACd,EACF"}
1
+ {"version":3,"sources":["components/basic-config/index.ts"],"sourcesContent":["export type JSXElement = JSX.Element | HTMLElement | string | number | boolean | symbol | null;\nexport interface BasicConfig {\n /** 组件状态\n * @default 'normal'\n */\n status: keyof typeof Status;\n /** 组件尺寸\n * @default 'normal'\n */\n size: keyof typeof Size;\n /** 自定义 'label'、'value'、'options' 等映射的key */\n fieldName: Partial<{ [key in keyof typeof FieldName]: string }>;\n}\n\nexport enum Size {\n /** 小 */\n small = 'small',\n /** 默认: 中 */\n normal = 'normal',\n /** 大 */\n large = 'large',\n}\n\nexport enum Status {\n /** 默认 */\n normal = 'normal',\n /** 成功 */\n success = 'success',\n /** 警告 */\n warning = 'warning',\n /** 错误 */\n error = 'error',\n /** 详细 */\n info = 'info',\n /** 主要 */\n primary = 'primary',\n}\n\nexport interface BaseOption {\n /** 图标 */\n icon?: JSXElement;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSXElement;\n /** 不可用状态 */\n disabled?: boolean;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式 */\n style?: Record<string, unknown>;\n /** 选项状态\n * @default 'normal'\n */\n status?: Status;\n /** 分组子选项 */\n options?: (BaseOption | string)[];\n [key: string]: Any;\n}\n\nexport enum FieldName {\n /** 标题 */\n label = 'label',\n /** 值 */\n value = 'value',\n /** 分组子选项 */\n options = 'options',\n /** 子选项 */\n children = 'children',\n /** 图标 */\n icon = 'icon',\n /** 后缀图标 */\n suffix = 'suffix',\n /** 标题 */\n title = 'title',\n /** 副标题 */\n subTitle = 'subTitle',\n /** 键 */\n key = 'key',\n /** 名称 */\n name = 'name',\n}\n\nexport function camelToKebab(str: string) {\n return str\n .replace(/([A-Z])/g, '-$1') // 在大写字母前添加 \"-\"\n .toLowerCase(); // 转为小写\n}\nexport function clearAttribute(el: HTMLElement | ICustomElement, fields: string[]) {\n fields.forEach((key) => {\n const field = key as 'className';\n const prev = el[field];\n\n el.removeAttribute(camelToKebab(field));\n el[field] = prev;\n });\n}\n"],"names":["Size","Status","FieldName","camelToKebab","str","replace","toLowerCase","clearAttribute","el","fields","forEach","key","prev","removeAttribute"],"mappings":"IAcYA,EASAC,EAqCAC,mBA9CAF,EAAAA,OAAAA,6EASAC,EAAAA,SAAAA,4IAqCAC,EAAAA,YAAAA,sLAuBZ,QAAO,SAASC,aAAaC,CAAW,EACtC,OAAOA,EACJC,OAAO,CAAC,WAAY,OACpBC,WAAW,EAChB,CACA,OAAO,SAASC,eAAeC,CAAgC,CAAEC,CAAgB,EAC/EA,EAAOC,OAAO,CAAC,AAACC,IAEd,IAAMC,EAAOJ,CAAE,CADDG,EACQ,CAEtBH,EAAGK,eAAe,CAACV,aAHLQ,IAIdH,CAAE,CAJYG,EAIL,CAAGC,CACd,EACF"}
@@ -1 +1 @@
1
- var t,e;function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as l}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{effect as p}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let c=r("<style>"),u=r("<style> "),m=r("<span>"),g=r("<div>");import{createEffect as f,createMemo as h,createSignal as v,mergeProps as w,onCleanup as b,onMount as C,Show as x,splitProps as y}from"solid-js";import{Portal as j}from"solid-js/web";import M from"@moneko/common/lib/isElementInside";import k from"@moneko/common/lib/isEqual";import L from"@moneko/common/lib/isFunction";import O from"@moneko/common/lib/passiveSupported";import{css as E,cx as P}from"@moneko/css";import{customElement as T}from"solid-element";import{clearAttribute as R}from"../basic-config";import $ from"../empty";import W,{inline as S}from"../theme";import{popoverCss as z,portalCss as H}from"./style";export var TriggerOption;(t=TriggerOption||(TriggerOption={})).hover="hover",t.click="click",t.contextMenu="contextMenu",t.none="none";export var Placement;function I(t){let e,r,T,R;let{isDark:S,baseStyle:I}=W,[B]=y(w({trigger:"hover"},t),["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[D,q]=v(null),[A,F]=v({}),[N,X]=v(!1),[Y,G]=v("");function J(t){B.disabled||(B.onOpenChange&&B.onOpenChange(t),void 0===B.open&&q(t))}function K(){!1===D()&&(q(null),J(null))}function Q(t){clearTimeout(T),T=setTimeout(()=>{if(clearTimeout(T),t.target&&"false"===t.target.getAttribute("handle-closed"))return;let o=M(t.target,e);(D()&&!o||o&&"mousedown"!==t.type)&&J(!1)},"hover"===B.trigger?300:0)}f(()=>{void 0!==B.open&&q(B.open)}),f(()=>{D()&&B.dropdownMatchSelectWidth&&r&&G(`.portal {width: ${r.offsetWidth}px;}`)});let U=function(t){clearTimeout(R),R=setTimeout(()=>{if(clearTimeout(R),!e||!r||!t&&"contextMenu"===B.trigger)return;if((null==t?void 0:t.type)==="scroll"&&"contextMenu"===B.trigger){J(!1);return}let o=r.getBoundingClientRect(),n=e.getBoundingClientRect(),i=n.width/2-o.width/2,l=window.innerHeight-o.bottom,s=B.placement,p=!(null==s?void 0:s.startsWith("top"))&&l>.8*e.offsetHeight&&l>o.top||(null==s?void 0:s.startsWith("bottom")),a=B.arrow?8:4,d={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-n.width,d["--x"]=n.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}p?d.top=o.bottom+a:d.bottom=window.innerHeight-o.top+a,F(t=>k(t,d)?t:d),X(t=>!p===t?t:!p)},32)};function V(t){clearTimeout(T),t.stopPropagation(),"contextMenu"===B.trigger&&"contextmenu"===t.type&&(t.preventDefault(),F(n=>o({},n,{left:t.clientX,top:t.clientY,"--x":-((null==e?void 0:e.getBoundingClientRect().width)||0)/2+16}))),J(!0)}let Z=h(()=>L(B.getPopupContainer)?B.getPopupContainer(r):document.body),_=h(()=>{let t={},e={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[B.trigger],o={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[B.trigger];return Object.assign(t,e&&{[e]:V},o&&{[o]:Q}),t}),tt=h(()=>{let t=A();return`.portal {${Object.keys(t).map(e=>`${e}:${t[e]}px;`).join("")}z-index: 1;}`}),te=h(()=>P("portal",B.arrow&&"arrow",`${D()?"in":"out"}-${N()?"up":"down"}`,B.size,B.popupClass)),to=h(()=>`:host {--popover-bg: ${S()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return f(()=>{D()&&(U(),window.addEventListener("scroll",U,{passive:O})),b(()=>{window.removeEventListener("scroll",U,!1)})}),C(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",Q,!1)}),b(()=>{clearTimeout(T),document.documentElement.removeEventListener("mousedown",Q,!1)}),[(()=>{let t=c();return t.textContent=z,t})(),a(x,{get when(){return B.css},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.css)),t}}),(()=>{let t=m(),e=r;return"function"==typeof e?n(e,t):r=t,i(t,l({get class(){return P("popover",B.size,B.class)}},_),!1,!0),s(t,()=>B.children),t})(),a(x,{get when(){return null!==D()||!B.destroyInactive},get children(){return a(j,{useShadow:!0,get mount(){return Z()},get children(){return[(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=I()),t})(),(()=>{let t=c();return t.textContent=H,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=to()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=tt()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=Y()),t})(),a(x,{get when(){return B.popupCss},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.popupCss)),t}}),(()=>{let t=g(),o=e;return d(t,"animationend",K),"function"==typeof o?n(o,t):e=t,i(t,l({get class(){return te()}},_),!1,!0),s(t,a(x,{get when(){return B.content},get fallback(){return a($,{})},get children(){return a(x,{get when(){return"string"==typeof B.content},get fallback(){return B.content},get children(){let t=g();return p(()=>t.innerHTML=B.content),t}})}})),t})()]}})}})]}(e=Placement||(Placement={})).bottomLeft="bottomLeft",e.bottom="bottom",e.bottomRight="bottomRight",e.topLeft="topLeft",e.top="top",e.topRight="topRight",e.left="left",e.right="right";export const defaultProps={class:void 0,css:void 0,content:void 0,getPopupContainer:void 0,trigger:void 0,open:void 0,onOpenChange:void 0,popupClass:void 0,popupCss:void 0,destroyInactive:!0,disabled:void 0,arrow:void 0,placement:void 0,dropdownMatchSelectWidth:void 0};T("n-popover",defaultProps,(t,e)=>{let{baseStyle:o}=W,n=e.element,r=w({onOpenChange(t){n.dispatchEvent(new CustomEvent("openchange",{detail:t}))},children:[...n.childNodes.values()]},t);return f(()=>{R(n,["content","popupCss","css"])}),[(()=>{let t=c();return t.textContent=S,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=o()),t})(),a(I,r)]});export default I;
1
+ var t,e;function o(){return(o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(t[n]=o[n])}return t}).apply(this,arguments)}import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as l}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{effect as p}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let c=r("<style>"),u=r("<style> "),m=r("<span>"),g=r("<div>");import{createEffect as f,createMemo as h,createSignal as v,mergeProps as w,onCleanup as b,onMount as C,Show as x,splitProps as y}from"solid-js";import{Portal as j}from"solid-js/web";import M from"@moneko/common/lib/isElementInside";import k from"@moneko/common/lib/isEqual";import L from"@moneko/common/lib/isFunction";import O from"@moneko/common/lib/passiveSupported";import{css as E,cx as P}from"@moneko/css";import{customElement as T}from"solid-element";import{clearAttribute as R}from"../basic-config";import $ from"../empty";import W,{inline as S}from"../theme";import{popoverCss as z,portalCss as H}from"./style";export var TriggerOption;(t=TriggerOption||(TriggerOption={})).hover="hover",t.click="click",t.contextMenu="contextMenu",t.none="none";export var Placement;function I(t){let e,r,T,R;let{isDark:S,baseStyle:I}=W,[B]=y(w({trigger:"hover"},t),["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[D,q]=v(null),[A,F]=v({}),[N,X]=v(!1),[Y,G]=v("");function J(t){B.disabled||(B.onOpenChange&&B.onOpenChange(t),void 0===B.open&&q(t))}function K(){!1===D()&&(q(null),J(null))}function Q(t){clearTimeout(T),T=setTimeout(()=>{if(clearTimeout(T),t.target&&"false"===t.target.getAttribute("handle-closed"))return;let o=M(t.target,e);(D()&&!o||o&&"mousedown"!==t.type)&&J(!1)},"hover"===B.trigger?300:0)}f(()=>{void 0!==B.open&&q(B.open)}),f(()=>{D()&&B.dropdownMatchSelectWidth&&r&&G(`.portal {width: ${r.offsetWidth}px;}`)});let U=function(t){clearTimeout(R),R=setTimeout(()=>{if(clearTimeout(R),!e||!r||!t&&"contextMenu"===B.trigger)return;if((null==t?void 0:t.type)==="scroll"&&"contextMenu"===B.trigger){J(!1);return}let o=r.getBoundingClientRect(),n=e.getBoundingClientRect(),i=n.width/2-o.width/2,l=window.innerHeight-o.bottom,s=B.placement,p=!(null==s?void 0:s.startsWith("top"))&&l>.8*e.offsetHeight&&l>o.top||(null==s?void 0:s.startsWith("bottom")),a=B.arrow?8:4,d={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-n.width,d["--x"]=n.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}p?d.top=o.bottom+a:d.bottom=window.innerHeight-o.top+a,F(t=>k(t,d)?t:d),X(t=>!p===t?t:!p)},32)};function V(t){clearTimeout(T),t.stopPropagation(),"contextMenu"===B.trigger&&"contextmenu"===t.type&&(t.preventDefault(),F(n=>o({},n,{left:t.clientX,top:t.clientY,"--x":-((null==e?void 0:e.getBoundingClientRect().width)||0)/2+16}))),J(!0)}let Z=h(()=>L(B.getPopupContainer)?B.getPopupContainer(r):document.body),_=h(()=>{let t={},e={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[B.trigger],o={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[B.trigger];return Object.assign(t,e&&{[e]:V},o&&{[o]:Q}),t}),tt=h(()=>{let t=A();return`.portal {${Object.keys(t).map(e=>`${e}:${t[e]}px;`).join("")}z-index: 1;}`}),te=h(()=>P("portal",B.arrow&&"arrow",`${D()?"in":"out"}-${N()?"up":"down"}`,B.size,B.popupClass)),to=h(()=>`:host {--popover-bg: ${S()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);position: absolute;}`);return f(()=>{D()&&(U(),window.addEventListener("scroll",U,{passive:O})),b(()=>{window.removeEventListener("scroll",U,!1)})}),C(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",Q,!1)}),b(()=>{clearTimeout(T),document.documentElement.removeEventListener("mousedown",Q,!1)}),[(()=>{let t=c();return t.textContent=z,t})(),a(x,{get when(){return B.css},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.css)),t}}),(()=>{let t=m(),e=r;return"function"==typeof e?n(e,t):r=t,i(t,l({get class(){return P("popover",B.size,B.class)}},_),!1,!0),s(t,()=>B.children),t})(),a(x,{get when(){return null!==D()||!B.destroyInactive},get children(){return a(j,{useShadow:!0,get mount(){return Z()},get children(){return[(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=I()),t})(),(()=>{let t=c();return t.textContent=H,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=to()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=tt()),t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=Y()),t})(),a(x,{get when(){return B.popupCss},get children(){let t=u(),e=t.firstChild;return p(()=>e.data=E(B.popupCss)),t}}),(()=>{let t=g(),o=e;return d(t,"animationend",K),"function"==typeof o?n(o,t):e=t,i(t,l({get class(){return te()}},_),!1,!0),s(t,a(x,{get when(){return B.content},get fallback(){return a($,{})},get children(){return a(x,{get when(){return"string"==typeof B.content},get fallback(){return B.content},get children(){let t=g();return p(()=>t.innerHTML=B.content),t}})}})),t})()]}})}})]}(e=Placement||(Placement={})).bottomLeft="bottomLeft",e.bottom="bottom",e.bottomRight="bottomRight",e.topLeft="topLeft",e.top="top",e.topRight="topRight",e.left="left",e.right="right";export const defaultProps={class:void 0,css:void 0,content:void 0,getPopupContainer:void 0,trigger:void 0,open:void 0,onOpenChange:void 0,popupClass:void 0,popupCss:void 0,destroyInactive:!0,disabled:void 0,arrow:void 0,placement:void 0,dropdownMatchSelectWidth:void 0};T("n-popover",defaultProps,(t,e)=>{let{baseStyle:o}=W,n=e.element,r=w({onOpenChange(t){n.dispatchEvent(new CustomEvent("openchange",{detail:t}))},children:[...n.childNodes.values()]},t);return f(()=>{R(n,["content","popupCss","css"])}),[(()=>{let t=c();return t.textContent=S,t})(),(()=>{let t=u(),e=t.firstChild;return p(()=>e.data=o()),t})(),a(I,r)]});export default I;
@@ -1 +1 @@
1
- {"version":3,"sources":["components/popover/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute, type JSXElement } from '../basic-config';\nimport Empty from '../empty';\nimport theme, { inline } from '../theme';\n\nimport { popoverCss, portalCss } from './style';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSXElement) | JSXElement;\n /** 挂载到指定的元素,值为一个返回对应 DOM 元素 默认 document.body */\n getPopupContainer?: (node?: HTMLElement | null) => HTMLElement;\n /** 触发行为\n * @default 'hover'\n */\n trigger?: keyof typeof TriggerOption;\n /** 打开内容气泡 */\n open?: boolean | null;\n /** 内容打开关闭时的回调方法 */\n onOpenChange?: (open: boolean | null) => void;\n /** 气泡的自定义类名 */\n popupClass?: string;\n /** 气泡的自定义样式表 */\n popupCss?: string;\n /** 关闭后是否销毁 */\n destroyInactive?: boolean;\n /** 不可用状态 */\n disabled?: boolean;\n /** 添加一个箭头显示 */\n arrow?: boolean;\n /** 指定气泡显示的方向 */\n placement?: keyof typeof Placement;\n /** 气泡宽度与触发dom一致 */\n dropdownMatchSelectWidth?: boolean;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSXElement;\n}\n\nexport enum TriggerOption {\n /** 鼠标移入 */\n hover = 'hover',\n /** 点击 */\n click = 'click',\n /** 右键 */\n contextMenu = 'contextMenu',\n /** 无 */\n none = 'none',\n}\n\nexport enum Placement {\n /** 左下 */\n bottomLeft = 'bottomLeft',\n /** 下 */\n bottom = 'bottom',\n /** 右下 */\n bottomRight = 'bottomRight',\n /** 左上 */\n topLeft = 'topLeft',\n /** 上 */\n top = 'top',\n /** 右上 */\n topRight = 'topRight',\n /** 左 */\n left = 'left',\n /** 右 */\n right = 'right',\n}\n\ninterface Posi {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n}\n\ninterface EventMap {\n click?: string;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n}\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if (e.target && (e.target as HTMLElement).getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef.getBoundingClientRect();\n const portalRect = ref.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n return `.portal {${Object.keys(p)\n .map((k) => `${k}:${p[k as keyof Posi]}px;`)\n .join('')}z-index: 1;}`;\n });\n const portalCls = createMemo(() => {\n return cx(\n 'portal',\n local.arrow && 'arrow',\n `${open() ? 'in' : 'out'}-${up() ? 'up' : 'down'}`,\n local.size,\n local.popupClass,\n );\n });\n const hostStyle = createMemo(() => {\n return `:host {--popover-bg: ${\n isDark() ? '#1f1f1f' : 'var(--component-bg)'\n };--popover-shadow-color: rgb(0 0 0 / 5%);}`;\n });\n\n createEffect(() => {\n if (open()) {\n showPortal();\n\n window.addEventListener('scroll', showPortal, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n window.removeEventListener('scroll', showPortal, false);\n });\n });\n onMount(() => {\n if (local.trigger !== 'none') {\n document.documentElement.addEventListener('mousedown', close, false);\n }\n });\n onCleanup(() => {\n clearTimeout(closeTimer);\n document.documentElement.removeEventListener('mousedown', close, false);\n });\n\n return (\n <>\n <style textContent={popoverCss} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span ref={childRef} class={cx('popover', local.size, local.class)} {...childrenProps()}>\n {local.children}\n </span>\n <Show when={open() !== null || !local.destroyInactive}>\n <Portal useShadow mount={container()}>\n <style textContent={baseStyle()} />\n <style textContent={portalCss} />\n <style textContent={hostStyle()} />\n <style textContent={portalStyle()} />\n <style textContent={width()} />\n <Show when={local.popupCss}>\n <style textContent={css(local.popupCss)} />\n </Show>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<Empty />}>\n <Show when={typeof local.content === 'string'} fallback={local.content}>\n {/* eslint-disable-next-line solid/no-innerhtml */}\n <div innerHTML={local.content} />\n </Show>\n </Show>\n </div>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport type PopoverElement = CustomElement<PopoverProps, 'onOpenChange'>;\n\nexport const defaultProps = {\n class: void 0,\n css: void 0,\n content: void 0,\n getPopupContainer: void 0,\n trigger: void 0,\n open: void 0,\n onOpenChange: void 0,\n popupClass: void 0,\n popupCss: void 0,\n destroyInactive: true,\n disabled: void 0,\n arrow: void 0,\n placement: void 0,\n dropdownMatchSelectWidth: void 0,\n};\ncustomElement<PopoverProps>('n-popover', defaultProps, (_, opt) => {\n const { baseStyle } = theme;\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(next: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: next,\n }),\n );\n },\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content', 'popupCss', 'css']);\n });\n return (\n <>\n <style textContent={inline} />\n <style textContent={baseStyle()} />\n <Popover {...props} />\n </>\n );\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","createEffect","createMemo","createSignal","mergeProps","onCleanup","onMount","Show","splitProps","Portal","isElementInside","isEqual","isFunction","passiveSupported","css","cx","customElement","clearAttribute","Empty","theme","inline","popoverCss","portalCss","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","local","trigger","open","setOpen","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","type","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values"],"mappings":"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"}
1
+ {"version":3,"sources":["components/popover/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute, type JSXElement } from '../basic-config';\nimport Empty from '../empty';\nimport theme, { inline } from '../theme';\n\nimport { popoverCss, portalCss } from './style';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSXElement) | JSXElement;\n /** 挂载到指定的元素,值为一个返回对应 DOM 元素 默认 document.body */\n getPopupContainer?: (node?: HTMLElement | null) => HTMLElement;\n /** 触发行为\n * @default 'hover'\n */\n trigger?: keyof typeof TriggerOption;\n /** 打开内容气泡 */\n open?: boolean | null;\n /** 内容打开关闭时的回调方法 */\n onOpenChange?: (open: boolean | null) => void;\n /** 气泡的自定义类名 */\n popupClass?: string;\n /** 气泡的自定义样式表 */\n popupCss?: string;\n /** 关闭后是否销毁 */\n destroyInactive?: boolean;\n /** 不可用状态 */\n disabled?: boolean;\n /** 添加一个箭头显示 */\n arrow?: boolean;\n /** 指定气泡显示的方向 */\n placement?: keyof typeof Placement;\n /** 气泡宽度与触发dom一致 */\n dropdownMatchSelectWidth?: boolean;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSXElement;\n}\n\nexport enum TriggerOption {\n /** 鼠标移入 */\n hover = 'hover',\n /** 点击 */\n click = 'click',\n /** 右键 */\n contextMenu = 'contextMenu',\n /** 无 */\n none = 'none',\n}\n\nexport enum Placement {\n /** 左下 */\n bottomLeft = 'bottomLeft',\n /** 下 */\n bottom = 'bottom',\n /** 右下 */\n bottomRight = 'bottomRight',\n /** 左上 */\n topLeft = 'topLeft',\n /** 上 */\n top = 'top',\n /** 右上 */\n topRight = 'topRight',\n /** 左 */\n left = 'left',\n /** 右 */\n right = 'right',\n}\n\ninterface Posi {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n}\n\ninterface EventMap {\n click?: string;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n}\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if (e.target && (e.target as HTMLElement).getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef.getBoundingClientRect();\n const portalRect = ref.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n return `.portal {${Object.keys(p)\n .map((k) => `${k}:${p[k as keyof Posi]}px;`)\n .join('')}z-index: 1;}`;\n });\n const portalCls = createMemo(() => {\n return cx(\n 'portal',\n local.arrow && 'arrow',\n `${open() ? 'in' : 'out'}-${up() ? 'up' : 'down'}`,\n local.size,\n local.popupClass,\n );\n });\n const hostStyle = createMemo(() => {\n return `:host {--popover-bg: ${isDark() ? '#1f1f1f' : 'var(--component-bg)'};--popover-shadow-color: rgb(0 0 0 / 5%);position: absolute;}`;\n });\n\n createEffect(() => {\n if (open()) {\n showPortal();\n\n window.addEventListener('scroll', showPortal, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n window.removeEventListener('scroll', showPortal, false);\n });\n });\n onMount(() => {\n if (local.trigger !== 'none') {\n document.documentElement.addEventListener('mousedown', close, false);\n }\n });\n onCleanup(() => {\n clearTimeout(closeTimer);\n document.documentElement.removeEventListener('mousedown', close, false);\n });\n\n return (\n <>\n <style textContent={popoverCss} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span ref={childRef} class={cx('popover', local.size, local.class)} {...childrenProps()}>\n {local.children}\n </span>\n <Show when={open() !== null || !local.destroyInactive}>\n <Portal useShadow mount={container()}>\n <style textContent={baseStyle()} />\n <style textContent={portalCss} />\n <style textContent={hostStyle()} />\n <style textContent={portalStyle()} />\n <style textContent={width()} />\n <Show when={local.popupCss}>\n <style textContent={css(local.popupCss)} />\n </Show>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<Empty />}>\n <Show when={typeof local.content === 'string'} fallback={local.content}>\n {/* eslint-disable-next-line solid/no-innerhtml */}\n <div innerHTML={local.content} />\n </Show>\n </Show>\n </div>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport type PopoverElement = CustomElement<PopoverProps, 'onOpenChange'>;\n\nexport const defaultProps = {\n class: void 0,\n css: void 0,\n content: void 0,\n getPopupContainer: void 0,\n trigger: void 0,\n open: void 0,\n onOpenChange: void 0,\n popupClass: void 0,\n popupCss: void 0,\n destroyInactive: true,\n disabled: void 0,\n arrow: void 0,\n placement: void 0,\n dropdownMatchSelectWidth: void 0,\n};\ncustomElement<PopoverProps>('n-popover', defaultProps, (_, opt) => {\n const { baseStyle } = theme;\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(next: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: next,\n }),\n );\n },\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content', 'popupCss', 'css']);\n });\n return (\n <>\n <style textContent={inline} />\n <style textContent={baseStyle()} />\n <Popover {...props} />\n </>\n );\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","createEffect","createMemo","createSignal","mergeProps","onCleanup","onMount","Show","splitProps","Portal","isElementInside","isEqual","isFunction","passiveSupported","css","cx","customElement","clearAttribute","Empty","theme","inline","popoverCss","portalCss","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","local","trigger","open","setOpen","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","type","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values"],"mappings":"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"}
@@ -3,6 +3,7 @@ import{css as o}from"@moneko/css";export const popoverCss=o`
3
3
  position: relative;
4
4
  display: inline-block;
5
5
  box-sizing: border-box;
6
+ width: 100%;
6
7
 
7
8
  &::-webkit-scrollbar {
8
9
  inline-size: 1px;
@@ -1 +1 @@
1
- {"version":3,"sources":["components/popover/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const popoverCss = css`\n .popover {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n inline-size: 1px;\n }\n }\n`;\nexport const portalCss = css`\n .container {\n overflow-y: auto;\n /* stylelint-disable-next-line */\n max-block-size: -webkit-fill-available;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .portal {\n --direction: 1;\n\n position: fixed;\n display: inline-block;\n border-radius: var(--border-radius);\n padding: 4px;\n font-size: var(--font-size);\n white-space: break-spaces;\n color: var(--text-color);\n background-color: var(--popover-bg);\n filter: drop-shadow(0.5px calc(var(--direction) * 1px) 4px var(--popover-shadow-color))\n drop-shadow(1px calc(var(--direction) * 2px) 8px var(--popover-shadow-color))\n drop-shadow(2px calc(var(--direction) * 4px) 16px var(--popover-shadow-color));\n min-inline-size: 100px;\n backdrop-filter: blur(10px);\n box-sizing: border-box;\n }\n\n .arrow {\n &::before {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n margin: auto;\n inline-size: 12px;\n block-size: 8px;\n background: inherit;\n content: '';\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n transform: translate3d(var(--x, 0), 100%, 0);\n }\n }\n\n .in-up {\n --direction: -1;\n\n animation: popover-up-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .out-up {\n --direction: -1;\n\n animation: popover-up-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .in-down {\n --direction: 1;\n\n animation: popover-down-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n .out-down {\n --direction: 1;\n\n animation: popover-down-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n @keyframes popover-down-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n }\n\n @keyframes popover-down-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @keyframes popover-up-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n }\n\n @keyframes popover-up-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n pointer-events: none;\n }\n }\n`;\n"],"names":["css","popoverCss","portalCss"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,WAAaD,CAAG,CAAC;;;;;;;;;;AAU9B,CAAC,AAAC,AACF,QAAO,MAAME,UAAYF,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ7B,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/popover/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const popoverCss = css`\n .popover {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n width: 100%;\n\n &::-webkit-scrollbar {\n inline-size: 1px;\n }\n }\n`;\nexport const portalCss = css`\n .container {\n overflow-y: auto;\n /* stylelint-disable-next-line */\n max-block-size: -webkit-fill-available;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .portal {\n --direction: 1;\n\n position: fixed;\n display: inline-block;\n border-radius: var(--border-radius);\n padding: 4px;\n font-size: var(--font-size);\n white-space: break-spaces;\n color: var(--text-color);\n background-color: var(--popover-bg);\n filter: drop-shadow(0.5px calc(var(--direction) * 1px) 4px var(--popover-shadow-color))\n drop-shadow(1px calc(var(--direction) * 2px) 8px var(--popover-shadow-color))\n drop-shadow(2px calc(var(--direction) * 4px) 16px var(--popover-shadow-color));\n min-inline-size: 100px;\n backdrop-filter: blur(10px);\n box-sizing: border-box;\n }\n\n .arrow {\n &::before {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n margin: auto;\n inline-size: 12px;\n block-size: 8px;\n background: inherit;\n content: '';\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n transform: translate3d(var(--x, 0), 100%, 0);\n }\n }\n\n .in-up {\n --direction: -1;\n\n animation: popover-up-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .out-up {\n --direction: -1;\n\n animation: popover-up-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .in-down {\n --direction: 1;\n\n animation: popover-down-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n .out-down {\n --direction: 1;\n\n animation: popover-down-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n @keyframes popover-down-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n }\n\n @keyframes popover-down-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @keyframes popover-up-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n }\n\n @keyframes popover-up-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n pointer-events: none;\n }\n }\n`;\n"],"names":["css","popoverCss","portalCss"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,WAAaD,CAAG,CAAC;;;;;;;;;;;AAW9B,CAAC,AAAC,AACF,QAAO,MAAME,UAAYF,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ7B,CAAC,AAAC"}
package/es/tag/style.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import{css as o}from"@moneko/css";export const style=o`
2
2
  :host {
3
- display: inline-block;
3
+ display: inline-flex;
4
4
  }
5
5
 
6
6
  .tag {
@@ -1 +1 @@
1
- {"version":3,"sources":["components/tag/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: inline-block;\n }\n\n .tag {\n display: flex;\n align-items: center;\n overflow: hidden;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 0 8px;\n font-size: var(--font-size-sm);\n color: var(--text-color);\n background-color: var(--component-bg);\n gap: 5px;\n line-height: 20px;\n\n a {\n text-decoration: unset;\n color: inherit;\n }\n }\n\n .icon {\n font-size: var(--font-size-sm);\n line-height: var(--font-size-sm);\n }\n\n .bordered {\n border: 1px solid var(--border-color);\n }\n\n .close {\n font-size: var(--font-size-sm);\n cursor: pointer;\n opacity: 0.5;\n transition: var(--transition-duration) var(--transition-timing-function) opacity;\n user-select: none;\n\n &:hover {\n opacity: 1;\n }\n }\n\n ${['primary', 'success', 'error', 'warning', 'tag-custom']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--border-color: var(--${s}-secondary-bg);--component-bg: var(--${s}-details-bg);}`,\n )\n .join('')}\n\n .disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --component-bg: var(--disable-bg);\n }\n`;\n"],"names":["css","style","map","s","join"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAW,aAAa,CACvDE,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,cAAc,CAAC,EAE7HC,IAAI,CAAC,IAAI;;;;;;;AAOd,CAAC,AAAC"}
1
+ {"version":3,"sources":["components/tag/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: inline-flex;\n }\n\n .tag {\n display: flex;\n align-items: center;\n overflow: hidden;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 0 8px;\n font-size: var(--font-size-sm);\n color: var(--text-color);\n background-color: var(--component-bg);\n gap: 5px;\n line-height: 20px;\n\n a {\n text-decoration: unset;\n color: inherit;\n }\n }\n\n .icon {\n font-size: var(--font-size-sm);\n line-height: var(--font-size-sm);\n }\n\n .bordered {\n border: 1px solid var(--border-color);\n }\n\n .close {\n font-size: var(--font-size-sm);\n cursor: pointer;\n opacity: 0.5;\n transition: var(--transition-duration) var(--transition-timing-function) opacity;\n user-select: none;\n\n &:hover {\n opacity: 1;\n }\n }\n\n ${['primary', 'success', 'error', 'warning', 'tag-custom']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--border-color: var(--${s}-secondary-bg);--component-bg: var(--${s}-details-bg);}`,\n )\n .join('')}\n\n .disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --component-bg: var(--disable-bg);\n }\n`;\n"],"names":["css","style","map","s","join"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAW,aAAa,CACvDE,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,cAAc,CAAC,EAE7HC,IAAI,CAAC,IAAI;;;;;;;AAOd,CAAC,AAAC"}
@@ -1,4 +1,4 @@
1
- export type JSXElement = JSX.Element | HTMLElement | Element | string | number | boolean | symbol | null;
1
+ export type JSXElement = JSX.Element | HTMLElement | string | number | boolean | symbol | null;
2
2
  export interface BasicConfig {
3
3
  /** 组件状态
4
4
  * @default 'normal'
@@ -1 +1 @@
1
- {"version":3,"sources":["components/basic-config/index.ts"],"sourcesContent":["export type JSXElement =\n | JSX.Element\n | HTMLElement\n | Element\n | string\n | number\n | boolean\n | symbol\n | null;\nexport interface BasicConfig {\n /** 组件状态\n * @default 'normal'\n */\n status: keyof typeof Status;\n /** 组件尺寸\n * @default 'normal'\n */\n size: keyof typeof Size;\n /** 自定义 'label'、'value'、'options' 等映射的key */\n fieldName: Partial<{ [key in keyof typeof FieldName]: string }>;\n}\n\nexport enum Size {\n /** 小 */\n small = 'small',\n /** 默认: 中 */\n normal = 'normal',\n /** 大 */\n large = 'large',\n}\n\nexport enum Status {\n /** 默认 */\n normal = 'normal',\n /** 成功 */\n success = 'success',\n /** 警告 */\n warning = 'warning',\n /** 错误 */\n error = 'error',\n /** 详细 */\n info = 'info',\n /** 主要 */\n primary = 'primary',\n}\n\nexport interface BaseOption {\n /** 图标 */\n icon?: JSXElement;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSXElement;\n /** 不可用状态 */\n disabled?: boolean;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式 */\n style?: Record<string, unknown>;\n /** 选项状态\n * @default 'normal'\n */\n status?: Status;\n /** 分组子选项 */\n options?: (BaseOption | string)[];\n [key: string]: Any;\n}\n\nexport enum FieldName {\n /** 标题 */\n label = 'label',\n /** 值 */\n value = 'value',\n /** 分组子选项 */\n options = 'options',\n /** 子选项 */\n children = 'children',\n /** 图标 */\n icon = 'icon',\n /** 后缀图标 */\n suffix = 'suffix',\n /** 标题 */\n title = 'title',\n /** 副标题 */\n subTitle = 'subTitle',\n /** 键 */\n key = 'key',\n /** 名称 */\n name = 'name',\n}\n\nexport function camelToKebab(str: string) {\n return str\n .replace(/([A-Z])/g, '-$1') // 在大写字母前添加 \"-\"\n .toLowerCase(); // 转为小写\n}\nexport function clearAttribute(el: HTMLElement | ICustomElement, fields: string[]) {\n fields.forEach((key) => {\n const field = key as 'className';\n const prev = el[field];\n\n el.removeAttribute(camelToKebab(field));\n el[field] = prev;\n });\n}\n"],"names":["camelToKebab","str","replace","toLowerCase","clearAttribute","el","fields","forEach","key","prev","removeAttribute","Size","Status","FieldName"],"mappings":"0GA2FO,SAASA,EAAaC,CAAW,EACtC,OAAOA,EACJC,OAAO,CAAC,WAAY,OACpBC,WAAW,EAChB,CACO,SAASC,EAAeC,CAAgC,CAAEC,CAAgB,EAC/EA,EAAOC,OAAO,CAAC,AAACC,IAEd,IAAMC,EAAOJ,CAAE,CADDG,EACQ,CAEtBH,EAAGK,eAAe,CAACV,EAHLQ,IAIdH,CAAE,CAJYG,EAIL,CAAGC,CACd,EACF,wJAbgBT,YAAY,mBAAZA,GAKAI,cAAc,mBAAdA,cA1EJO,sDAAAA,IAAAA,gBASAC,gHAAAA,IAAAA,gBAqCAC,8KAAAA,IAAAA"}
1
+ {"version":3,"sources":["components/basic-config/index.ts"],"sourcesContent":["export type JSXElement = JSX.Element | HTMLElement | string | number | boolean | symbol | null;\nexport interface BasicConfig {\n /** 组件状态\n * @default 'normal'\n */\n status: keyof typeof Status;\n /** 组件尺寸\n * @default 'normal'\n */\n size: keyof typeof Size;\n /** 自定义 'label'、'value'、'options' 等映射的key */\n fieldName: Partial<{ [key in keyof typeof FieldName]: string }>;\n}\n\nexport enum Size {\n /** 小 */\n small = 'small',\n /** 默认: 中 */\n normal = 'normal',\n /** 大 */\n large = 'large',\n}\n\nexport enum Status {\n /** 默认 */\n normal = 'normal',\n /** 成功 */\n success = 'success',\n /** 警告 */\n warning = 'warning',\n /** 错误 */\n error = 'error',\n /** 详细 */\n info = 'info',\n /** 主要 */\n primary = 'primary',\n}\n\nexport interface BaseOption {\n /** 图标 */\n icon?: JSXElement;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSXElement;\n /** 不可用状态 */\n disabled?: boolean;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式 */\n style?: Record<string, unknown>;\n /** 选项状态\n * @default 'normal'\n */\n status?: Status;\n /** 分组子选项 */\n options?: (BaseOption | string)[];\n [key: string]: Any;\n}\n\nexport enum FieldName {\n /** 标题 */\n label = 'label',\n /** 值 */\n value = 'value',\n /** 分组子选项 */\n options = 'options',\n /** 子选项 */\n children = 'children',\n /** 图标 */\n icon = 'icon',\n /** 后缀图标 */\n suffix = 'suffix',\n /** 标题 */\n title = 'title',\n /** 副标题 */\n subTitle = 'subTitle',\n /** 键 */\n key = 'key',\n /** 名称 */\n name = 'name',\n}\n\nexport function camelToKebab(str: string) {\n return str\n .replace(/([A-Z])/g, '-$1') // 在大写字母前添加 \"-\"\n .toLowerCase(); // 转为小写\n}\nexport function clearAttribute(el: HTMLElement | ICustomElement, fields: string[]) {\n fields.forEach((key) => {\n const field = key as 'className';\n const prev = el[field];\n\n el.removeAttribute(camelToKebab(field));\n el[field] = prev;\n });\n}\n"],"names":["camelToKebab","str","replace","toLowerCase","clearAttribute","el","fields","forEach","key","prev","removeAttribute","Size","Status","FieldName"],"mappings":"0GAmFO,SAASA,EAAaC,CAAW,EACtC,OAAOA,EACJC,OAAO,CAAC,WAAY,OACpBC,WAAW,EAChB,CACO,SAASC,EAAeC,CAAgC,CAAEC,CAAgB,EAC/EA,EAAOC,OAAO,CAAC,AAACC,IAEd,IAAMC,EAAOJ,CAAE,CADDG,EACQ,CAEtBH,EAAGK,eAAe,CAACV,EAHLQ,IAIdH,CAAE,CAJYG,EAIL,CAAGC,CACd,EACF,wJAbgBT,YAAY,mBAAZA,GAKAI,cAAc,mBAAdA,cA1EJO,sDAAAA,IAAAA,gBASAC,gHAAAA,IAAAA,gBAqCAC,8KAAAA,IAAAA"}
@@ -1 +1 @@
1
- "use strict";var e,t;function n(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}Object.defineProperty(exports,"__esModule",{value:!0}),n(exports,{Placement:function(){return t},TriggerOption:function(){return e},default:function(){return P},defaultProps:function(){return x}});const o=require("solid-js/web"),r=require("solid-js"),i=m(require("@moneko/common/lib/isElementInside")),c=m(require("@moneko/common/lib/isEqual")),l=m(require("@moneko/common/lib/isFunction")),a=m(require("@moneko/common/lib/passiveSupported")),u=require("@moneko/css"),s=require("solid-element"),p=require("../basic-config"),d=m(require("../empty")),f=v(require("../theme")),g=require("./style");function m(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(h=function(e){return e?n:t})(e)}function v(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=h(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var c=r?Object.getOwnPropertyDescriptor(e,i):null;c&&(c.get||c.set)?Object.defineProperty(o,i,c):o[i]=e[i]}return o.default=e,n&&n.set(e,o),o}const w=(0,o.template)("<style>"),C=(0,o.template)("<style> "),b=(0,o.template)("<span>"),M=(0,o.template)("<div>");function y(e){let t,n,s,p;let{isDark:m,baseStyle:h}=f.default,v=(0,r.mergeProps)({trigger:"hover"},e),[y]=(0,r.splitProps)(v,["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[x,P]=(0,r.createSignal)(null),[O,k]=(0,r.createSignal)({}),[E,S]=(0,r.createSignal)(!1),[j,q]=(0,r.createSignal)("");function L(e){y.disabled||(y.onOpenChange&&y.onOpenChange(e),void 0===y.open&&P(e))}function T(){!1===x()&&(P(null),L(null))}function _(e){clearTimeout(s),s=setTimeout(()=>{if(clearTimeout(s),e.target&&"false"===e.target.getAttribute("handle-closed"))return;let n=(0,i.default)(e.target,t);(x()&&!n||n&&"mousedown"!==e.type)&&L(!1)},"hover"===y.trigger?300:0)}(0,r.createEffect)(()=>{void 0!==y.open&&P(y.open)}),(0,r.createEffect)(()=>{x()&&y.dropdownMatchSelectWidth&&n&&q(`.portal {width: ${n.offsetWidth}px;}`)});let R=function(e){clearTimeout(p),p=setTimeout(()=>{if(clearTimeout(p),!t||!n||!e&&"contextMenu"===y.trigger)return;if(e?.type==="scroll"&&"contextMenu"===y.trigger){L(!1);return}let o=n.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.width/2-o.width/2,l=window.innerHeight-o.bottom,a=y.placement,u=!a?.startsWith("top")&&l>.8*t.offsetHeight&&l>o.top||a?.startsWith("bottom"),s=y.arrow?8:4,d={};switch(y.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-r.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-r.width,d["--x"]=r.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}u?d.top=o.bottom+s:d.bottom=window.innerHeight-o.top+s,k(e=>(0,c.default)(e,d)?e:d),S(e=>!u===e?e:!u)},32)};function W(e){clearTimeout(s),e.stopPropagation(),"contextMenu"===y.trigger&&"contextmenu"===e.type&&(e.preventDefault(),k(n=>({...n,left:e.clientX,top:e.clientY,"--x":-(t?.getBoundingClientRect().width||0)/2+16}))),L(!0)}let $=(0,r.createMemo)(()=>(0,l.default)(y.getPopupContainer)?y.getPopupContainer(n):document.body),z=(0,r.createMemo)(()=>{let e={},t={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[y.trigger],n={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[y.trigger];return Object.assign(e,t&&{[t]:W},n&&{[n]:_}),e}),D=(0,r.createMemo)(()=>{let e=O();return`.portal {${Object.keys(e).map(t=>`${t}:${e[t]}px;`).join("")}z-index: 1;}`}),H=(0,r.createMemo)(()=>(0,u.cx)("portal",y.arrow&&"arrow",`${x()?"in":"out"}-${E()?"up":"down"}`,y.size,y.popupClass)),I=(0,r.createMemo)(()=>`:host {--popover-bg: ${m()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return(0,r.createEffect)(()=>{x()&&(R(),window.addEventListener("scroll",R,{passive:a.default})),(0,r.onCleanup)(()=>{window.removeEventListener("scroll",R,!1)})}),(0,r.onMount)(()=>{"none"!==y.trigger&&document.documentElement.addEventListener("mousedown",_,!1)}),(0,r.onCleanup)(()=>{clearTimeout(s),document.documentElement.removeEventListener("mousedown",_,!1)}),[(()=>{let e=w();return e.textContent=g.popoverCss,e})(),(0,o.createComponent)(r.Show,{get when(){return y.css},get children(){let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=(0,u.css)(y.css)),e}}),(()=>{let e=b(),t=n;return"function"==typeof t?(0,o.use)(t,e):n=e,(0,o.spread)(e,(0,o.mergeProps)({get class(){return(0,u.cx)("popover",y.size,y.class)}},z),!1,!0),(0,o.insert)(e,()=>y.children),e})(),(0,o.createComponent)(r.Show,{get when(){return null!==x()||!y.destroyInactive},get children(){return(0,o.createComponent)(o.Portal,{useShadow:!0,get mount(){return $()},get children(){return[(()=>{let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=h()),e})(),(()=>{let e=w();return e.textContent=g.portalCss,e})(),(()=>{let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=I()),e})(),(()=>{let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=D()),e})(),(()=>{let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=j()),e})(),(0,o.createComponent)(r.Show,{get when(){return y.popupCss},get children(){let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=(0,u.css)(y.popupCss)),e}}),(()=>{let e=M(),n=t;return(0,o.addEventListener)(e,"animationend",T),"function"==typeof n?(0,o.use)(n,e):t=e,(0,o.spread)(e,(0,o.mergeProps)({get class(){return H()}},z),!1,!0),(0,o.insert)(e,(0,o.createComponent)(r.Show,{get when(){return y.content},get fallback(){return(0,o.createComponent)(d.default,{})},get children(){return(0,o.createComponent)(r.Show,{get when(){return"string"==typeof y.content},get fallback(){return y.content},get children(){let e=M();return(0,o.effect)(()=>e.innerHTML=y.content),e}})}})),e})()]}})}})]}!function(e){e.hover="hover",e.click="click",e.contextMenu="contextMenu",e.none="none"}(e||(e={})),function(e){e.bottomLeft="bottomLeft",e.bottom="bottom",e.bottomRight="bottomRight",e.topLeft="topLeft",e.top="top",e.topRight="topRight",e.left="left",e.right="right"}(t||(t={}));const x={class:void 0,css:void 0,content:void 0,getPopupContainer:void 0,trigger:void 0,open:void 0,onOpenChange:void 0,popupClass:void 0,popupCss:void 0,destroyInactive:!0,disabled:void 0,arrow:void 0,placement:void 0,dropdownMatchSelectWidth:void 0};(0,s.customElement)("n-popover",x,(e,t)=>{let{baseStyle:n}=f.default,i=t.element,c=(0,r.mergeProps)({onOpenChange(e){i.dispatchEvent(new CustomEvent("openchange",{detail:e}))},children:[...i.childNodes.values()]},e);return(0,r.createEffect)(()=>{(0,p.clearAttribute)(i,["content","popupCss","css"])}),[(()=>{let e=w();return e.textContent=f.inline,e})(),(()=>{let e=C(),t=e.firstChild;return(0,o.effect)(()=>t.data=n()),e})(),(0,o.createComponent)(y,c)]});const P=y;
1
+ "use strict";var e,t;function n(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}Object.defineProperty(exports,"__esModule",{value:!0}),n(exports,{Placement:function(){return t},TriggerOption:function(){return e},default:function(){return P},defaultProps:function(){return x}});const o=require("solid-js/web"),r=require("solid-js"),i=m(require("@moneko/common/lib/isElementInside")),c=m(require("@moneko/common/lib/isEqual")),l=m(require("@moneko/common/lib/isFunction")),a=m(require("@moneko/common/lib/passiveSupported")),u=require("@moneko/css"),s=require("solid-element"),p=require("../basic-config"),d=m(require("../empty")),f=v(require("../theme")),g=require("./style");function m(e){return e&&e.__esModule?e:{default:e}}function h(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(h=function(e){return e?n:t})(e)}function v(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=h(t);if(n&&n.has(e))return n.get(e);var o={__proto__:null},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&Object.prototype.hasOwnProperty.call(e,i)){var c=r?Object.getOwnPropertyDescriptor(e,i):null;c&&(c.get||c.set)?Object.defineProperty(o,i,c):o[i]=e[i]}return o.default=e,n&&n.set(e,o),o}const w=(0,o.template)("<style>"),b=(0,o.template)("<style> "),C=(0,o.template)("<span>"),M=(0,o.template)("<div>");function y(e){let t,n,s,p;let{isDark:m,baseStyle:h}=f.default,v=(0,r.mergeProps)({trigger:"hover"},e),[y]=(0,r.splitProps)(v,["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[x,P]=(0,r.createSignal)(null),[O,k]=(0,r.createSignal)({}),[E,S]=(0,r.createSignal)(!1),[j,q]=(0,r.createSignal)("");function L(e){y.disabled||(y.onOpenChange&&y.onOpenChange(e),void 0===y.open&&P(e))}function T(){!1===x()&&(P(null),L(null))}function _(e){clearTimeout(s),s=setTimeout(()=>{if(clearTimeout(s),e.target&&"false"===e.target.getAttribute("handle-closed"))return;let n=(0,i.default)(e.target,t);(x()&&!n||n&&"mousedown"!==e.type)&&L(!1)},"hover"===y.trigger?300:0)}(0,r.createEffect)(()=>{void 0!==y.open&&P(y.open)}),(0,r.createEffect)(()=>{x()&&y.dropdownMatchSelectWidth&&n&&q(`.portal {width: ${n.offsetWidth}px;}`)});let R=function(e){clearTimeout(p),p=setTimeout(()=>{if(clearTimeout(p),!t||!n||!e&&"contextMenu"===y.trigger)return;if(e?.type==="scroll"&&"contextMenu"===y.trigger){L(!1);return}let o=n.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.width/2-o.width/2,l=window.innerHeight-o.bottom,a=y.placement,u=!a?.startsWith("top")&&l>.8*t.offsetHeight&&l>o.top||a?.startsWith("bottom"),s=y.arrow?8:4,d={};switch(y.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-r.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-r.width,d["--x"]=r.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}u?d.top=o.bottom+s:d.bottom=window.innerHeight-o.top+s,k(e=>(0,c.default)(e,d)?e:d),S(e=>!u===e?e:!u)},32)};function W(e){clearTimeout(s),e.stopPropagation(),"contextMenu"===y.trigger&&"contextmenu"===e.type&&(e.preventDefault(),k(n=>({...n,left:e.clientX,top:e.clientY,"--x":-(t?.getBoundingClientRect().width||0)/2+16}))),L(!0)}let $=(0,r.createMemo)(()=>(0,l.default)(y.getPopupContainer)?y.getPopupContainer(n):document.body),z=(0,r.createMemo)(()=>{let e={},t={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[y.trigger],n={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[y.trigger];return Object.assign(e,t&&{[t]:W},n&&{[n]:_}),e}),D=(0,r.createMemo)(()=>{let e=O();return`.portal {${Object.keys(e).map(t=>`${t}:${e[t]}px;`).join("")}z-index: 1;}`}),H=(0,r.createMemo)(()=>(0,u.cx)("portal",y.arrow&&"arrow",`${x()?"in":"out"}-${E()?"up":"down"}`,y.size,y.popupClass)),I=(0,r.createMemo)(()=>`:host {--popover-bg: ${m()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);position: absolute;}`);return(0,r.createEffect)(()=>{x()&&(R(),window.addEventListener("scroll",R,{passive:a.default})),(0,r.onCleanup)(()=>{window.removeEventListener("scroll",R,!1)})}),(0,r.onMount)(()=>{"none"!==y.trigger&&document.documentElement.addEventListener("mousedown",_,!1)}),(0,r.onCleanup)(()=>{clearTimeout(s),document.documentElement.removeEventListener("mousedown",_,!1)}),[(()=>{let e=w();return e.textContent=g.popoverCss,e})(),(0,o.createComponent)(r.Show,{get when(){return y.css},get children(){let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=(0,u.css)(y.css)),e}}),(()=>{let e=C(),t=n;return"function"==typeof t?(0,o.use)(t,e):n=e,(0,o.spread)(e,(0,o.mergeProps)({get class(){return(0,u.cx)("popover",y.size,y.class)}},z),!1,!0),(0,o.insert)(e,()=>y.children),e})(),(0,o.createComponent)(r.Show,{get when(){return null!==x()||!y.destroyInactive},get children(){return(0,o.createComponent)(o.Portal,{useShadow:!0,get mount(){return $()},get children(){return[(()=>{let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=h()),e})(),(()=>{let e=w();return e.textContent=g.portalCss,e})(),(()=>{let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=I()),e})(),(()=>{let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=D()),e})(),(()=>{let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=j()),e})(),(0,o.createComponent)(r.Show,{get when(){return y.popupCss},get children(){let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=(0,u.css)(y.popupCss)),e}}),(()=>{let e=M(),n=t;return(0,o.addEventListener)(e,"animationend",T),"function"==typeof n?(0,o.use)(n,e):t=e,(0,o.spread)(e,(0,o.mergeProps)({get class(){return H()}},z),!1,!0),(0,o.insert)(e,(0,o.createComponent)(r.Show,{get when(){return y.content},get fallback(){return(0,o.createComponent)(d.default,{})},get children(){return(0,o.createComponent)(r.Show,{get when(){return"string"==typeof y.content},get fallback(){return y.content},get children(){let e=M();return(0,o.effect)(()=>e.innerHTML=y.content),e}})}})),e})()]}})}})]}!function(e){e.hover="hover",e.click="click",e.contextMenu="contextMenu",e.none="none"}(e||(e={})),function(e){e.bottomLeft="bottomLeft",e.bottom="bottom",e.bottomRight="bottomRight",e.topLeft="topLeft",e.top="top",e.topRight="topRight",e.left="left",e.right="right"}(t||(t={}));const x={class:void 0,css:void 0,content:void 0,getPopupContainer:void 0,trigger:void 0,open:void 0,onOpenChange:void 0,popupClass:void 0,popupCss:void 0,destroyInactive:!0,disabled:void 0,arrow:void 0,placement:void 0,dropdownMatchSelectWidth:void 0};(0,s.customElement)("n-popover",x,(e,t)=>{let{baseStyle:n}=f.default,i=t.element,c=(0,r.mergeProps)({onOpenChange(e){i.dispatchEvent(new CustomEvent("openchange",{detail:e}))},children:[...i.childNodes.values()]},e);return(0,r.createEffect)(()=>{(0,p.clearAttribute)(i,["content","popupCss","css"])}),[(()=>{let e=w();return e.textContent=f.inline,e})(),(()=>{let e=b(),t=e.firstChild;return(0,o.effect)(()=>t.data=n()),e})(),(0,o.createComponent)(y,c)]});const P=y;
@@ -1 +1 @@
1
- {"version":3,"sources":["components/popover/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute, type JSXElement } from '../basic-config';\nimport Empty from '../empty';\nimport theme, { inline } from '../theme';\n\nimport { popoverCss, portalCss } from './style';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSXElement) | JSXElement;\n /** 挂载到指定的元素,值为一个返回对应 DOM 元素 默认 document.body */\n getPopupContainer?: (node?: HTMLElement | null) => HTMLElement;\n /** 触发行为\n * @default 'hover'\n */\n trigger?: keyof typeof TriggerOption;\n /** 打开内容气泡 */\n open?: boolean | null;\n /** 内容打开关闭时的回调方法 */\n onOpenChange?: (open: boolean | null) => void;\n /** 气泡的自定义类名 */\n popupClass?: string;\n /** 气泡的自定义样式表 */\n popupCss?: string;\n /** 关闭后是否销毁 */\n destroyInactive?: boolean;\n /** 不可用状态 */\n disabled?: boolean;\n /** 添加一个箭头显示 */\n arrow?: boolean;\n /** 指定气泡显示的方向 */\n placement?: keyof typeof Placement;\n /** 气泡宽度与触发dom一致 */\n dropdownMatchSelectWidth?: boolean;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSXElement;\n}\n\nexport enum TriggerOption {\n /** 鼠标移入 */\n hover = 'hover',\n /** 点击 */\n click = 'click',\n /** 右键 */\n contextMenu = 'contextMenu',\n /** 无 */\n none = 'none',\n}\n\nexport enum Placement {\n /** 左下 */\n bottomLeft = 'bottomLeft',\n /** 下 */\n bottom = 'bottom',\n /** 右下 */\n bottomRight = 'bottomRight',\n /** 左上 */\n topLeft = 'topLeft',\n /** 上 */\n top = 'top',\n /** 右上 */\n topRight = 'topRight',\n /** 左 */\n left = 'left',\n /** 右 */\n right = 'right',\n}\n\ninterface Posi {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n}\n\ninterface EventMap {\n click?: string;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n}\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if (e.target && (e.target as HTMLElement).getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef.getBoundingClientRect();\n const portalRect = ref.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n return `.portal {${Object.keys(p)\n .map((k) => `${k}:${p[k as keyof Posi]}px;`)\n .join('')}z-index: 1;}`;\n });\n const portalCls = createMemo(() => {\n return cx(\n 'portal',\n local.arrow && 'arrow',\n `${open() ? 'in' : 'out'}-${up() ? 'up' : 'down'}`,\n local.size,\n local.popupClass,\n );\n });\n const hostStyle = createMemo(() => {\n return `:host {--popover-bg: ${\n isDark() ? '#1f1f1f' : 'var(--component-bg)'\n };--popover-shadow-color: rgb(0 0 0 / 5%);}`;\n });\n\n createEffect(() => {\n if (open()) {\n showPortal();\n\n window.addEventListener('scroll', showPortal, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n window.removeEventListener('scroll', showPortal, false);\n });\n });\n onMount(() => {\n if (local.trigger !== 'none') {\n document.documentElement.addEventListener('mousedown', close, false);\n }\n });\n onCleanup(() => {\n clearTimeout(closeTimer);\n document.documentElement.removeEventListener('mousedown', close, false);\n });\n\n return (\n <>\n <style textContent={popoverCss} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span ref={childRef} class={cx('popover', local.size, local.class)} {...childrenProps()}>\n {local.children}\n </span>\n <Show when={open() !== null || !local.destroyInactive}>\n <Portal useShadow mount={container()}>\n <style textContent={baseStyle()} />\n <style textContent={portalCss} />\n <style textContent={hostStyle()} />\n <style textContent={portalStyle()} />\n <style textContent={width()} />\n <Show when={local.popupCss}>\n <style textContent={css(local.popupCss)} />\n </Show>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<Empty />}>\n <Show when={typeof local.content === 'string'} fallback={local.content}>\n {/* eslint-disable-next-line solid/no-innerhtml */}\n <div innerHTML={local.content} />\n </Show>\n </Show>\n </div>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport type PopoverElement = CustomElement<PopoverProps, 'onOpenChange'>;\n\nexport const defaultProps = {\n class: void 0,\n css: void 0,\n content: void 0,\n getPopupContainer: void 0,\n trigger: void 0,\n open: void 0,\n onOpenChange: void 0,\n popupClass: void 0,\n popupCss: void 0,\n destroyInactive: true,\n disabled: void 0,\n arrow: void 0,\n placement: void 0,\n dropdownMatchSelectWidth: void 0,\n};\ncustomElement<PopoverProps>('n-popover', defaultProps, (_, opt) => {\n const { baseStyle } = theme;\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(next: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: next,\n }),\n );\n },\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content', 'popupCss', 'css']);\n });\n return (\n <>\n <style textContent={inline} />\n <style textContent={baseStyle()} />\n <Popover {...props} />\n </>\n );\n});\nexport default Popover;\n"],"names":["defaultProps","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","theme","mp","mergeProps","trigger","local","splitProps","open","setOpen","createSignal","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","isElementInside","type","createEffect","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","isEqual","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","createMemo","isFunction","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","cx","size","popupClass","hostStyle","addEventListener","passive","passiveSupported","onCleanup","removeEventListener","onMount","documentElement","popoverCss","Show","css","class","children","destroyInactive","Portal","portalCss","popupCss","content","Empty","TriggerOption","Placement","customElement","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values","clearAttribute","inline"],"mappings":"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"}
1
+ {"version":3,"sources":["components/popover/index.tsx"],"sourcesContent":["import {\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n Show,\n splitProps,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\n\nimport type { BasicConfig, CustomElement } from '..';\nimport { clearAttribute, type JSXElement } from '../basic-config';\nimport Empty from '../empty';\nimport theme, { inline } from '../theme';\n\nimport { popoverCss, portalCss } from './style';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSXElement) | JSXElement;\n /** 挂载到指定的元素,值为一个返回对应 DOM 元素 默认 document.body */\n getPopupContainer?: (node?: HTMLElement | null) => HTMLElement;\n /** 触发行为\n * @default 'hover'\n */\n trigger?: keyof typeof TriggerOption;\n /** 打开内容气泡 */\n open?: boolean | null;\n /** 内容打开关闭时的回调方法 */\n onOpenChange?: (open: boolean | null) => void;\n /** 气泡的自定义类名 */\n popupClass?: string;\n /** 气泡的自定义样式表 */\n popupCss?: string;\n /** 关闭后是否销毁 */\n destroyInactive?: boolean;\n /** 不可用状态 */\n disabled?: boolean;\n /** 添加一个箭头显示 */\n arrow?: boolean;\n /** 指定气泡显示的方向 */\n placement?: keyof typeof Placement;\n /** 气泡宽度与触发dom一致 */\n dropdownMatchSelectWidth?: boolean;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSXElement;\n}\n\nexport enum TriggerOption {\n /** 鼠标移入 */\n hover = 'hover',\n /** 点击 */\n click = 'click',\n /** 右键 */\n contextMenu = 'contextMenu',\n /** 无 */\n none = 'none',\n}\n\nexport enum Placement {\n /** 左下 */\n bottomLeft = 'bottomLeft',\n /** 下 */\n bottom = 'bottom',\n /** 右下 */\n bottomRight = 'bottomRight',\n /** 左上 */\n topLeft = 'topLeft',\n /** 上 */\n top = 'top',\n /** 右上 */\n topRight = 'topRight',\n /** 左 */\n left = 'left',\n /** 右 */\n right = 'right',\n}\n\ninterface Posi {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n}\n\ninterface EventMap {\n click?: string;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n}\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if (e.target && (e.target as HTMLElement).getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef.getBoundingClientRect();\n const portalRect = ref.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n return `.portal {${Object.keys(p)\n .map((k) => `${k}:${p[k as keyof Posi]}px;`)\n .join('')}z-index: 1;}`;\n });\n const portalCls = createMemo(() => {\n return cx(\n 'portal',\n local.arrow && 'arrow',\n `${open() ? 'in' : 'out'}-${up() ? 'up' : 'down'}`,\n local.size,\n local.popupClass,\n );\n });\n const hostStyle = createMemo(() => {\n return `:host {--popover-bg: ${isDark() ? '#1f1f1f' : 'var(--component-bg)'};--popover-shadow-color: rgb(0 0 0 / 5%);position: absolute;}`;\n });\n\n createEffect(() => {\n if (open()) {\n showPortal();\n\n window.addEventListener('scroll', showPortal, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n window.removeEventListener('scroll', showPortal, false);\n });\n });\n onMount(() => {\n if (local.trigger !== 'none') {\n document.documentElement.addEventListener('mousedown', close, false);\n }\n });\n onCleanup(() => {\n clearTimeout(closeTimer);\n document.documentElement.removeEventListener('mousedown', close, false);\n });\n\n return (\n <>\n <style textContent={popoverCss} />\n <Show when={local.css}>\n <style textContent={css(local.css)} />\n </Show>\n <span ref={childRef} class={cx('popover', local.size, local.class)} {...childrenProps()}>\n {local.children}\n </span>\n <Show when={open() !== null || !local.destroyInactive}>\n <Portal useShadow mount={container()}>\n <style textContent={baseStyle()} />\n <style textContent={portalCss} />\n <style textContent={hostStyle()} />\n <style textContent={portalStyle()} />\n <style textContent={width()} />\n <Show when={local.popupCss}>\n <style textContent={css(local.popupCss)} />\n </Show>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<Empty />}>\n <Show when={typeof local.content === 'string'} fallback={local.content}>\n {/* eslint-disable-next-line solid/no-innerhtml */}\n <div innerHTML={local.content} />\n </Show>\n </Show>\n </div>\n </Portal>\n </Show>\n </>\n );\n}\n\nexport type PopoverElement = CustomElement<PopoverProps, 'onOpenChange'>;\n\nexport const defaultProps = {\n class: void 0,\n css: void 0,\n content: void 0,\n getPopupContainer: void 0,\n trigger: void 0,\n open: void 0,\n onOpenChange: void 0,\n popupClass: void 0,\n popupCss: void 0,\n destroyInactive: true,\n disabled: void 0,\n arrow: void 0,\n placement: void 0,\n dropdownMatchSelectWidth: void 0,\n};\ncustomElement<PopoverProps>('n-popover', defaultProps, (_, opt) => {\n const { baseStyle } = theme;\n const el = opt.element;\n const props = mergeProps(\n {\n onOpenChange(next: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: next,\n }),\n );\n },\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n createEffect(() => {\n clearAttribute(el, ['content', 'popupCss', 'css']);\n });\n return (\n <>\n <style textContent={inline} />\n <style textContent={baseStyle()} />\n <Popover {...props} />\n </>\n );\n});\nexport default Popover;\n"],"names":["defaultProps","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","theme","mp","mergeProps","trigger","local","splitProps","open","setOpen","createSignal","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","isElementInside","type","createEffect","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","isEqual","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","createMemo","isFunction","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","cx","size","popupClass","hostStyle","addEventListener","passive","passiveSupported","onCleanup","removeEventListener","onMount","documentElement","popoverCss","Show","css","class","children","destroyInactive","Portal","portalCss","popupCss","content","Empty","TriggerOption","Placement","customElement","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values","clearAttribute","inline"],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  position: relative;
4
4
  display: inline-block;
5
5
  box-sizing: border-box;
6
+ width: 100%;
6
7
 
7
8
  &::-webkit-scrollbar {
8
9
  inline-size: 1px;
@@ -1 +1 @@
1
- {"version":3,"sources":["components/popover/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const popoverCss = css`\n .popover {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n\n &::-webkit-scrollbar {\n inline-size: 1px;\n }\n }\n`;\nexport const portalCss = css`\n .container {\n overflow-y: auto;\n /* stylelint-disable-next-line */\n max-block-size: -webkit-fill-available;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .portal {\n --direction: 1;\n\n position: fixed;\n display: inline-block;\n border-radius: var(--border-radius);\n padding: 4px;\n font-size: var(--font-size);\n white-space: break-spaces;\n color: var(--text-color);\n background-color: var(--popover-bg);\n filter: drop-shadow(0.5px calc(var(--direction) * 1px) 4px var(--popover-shadow-color))\n drop-shadow(1px calc(var(--direction) * 2px) 8px var(--popover-shadow-color))\n drop-shadow(2px calc(var(--direction) * 4px) 16px var(--popover-shadow-color));\n min-inline-size: 100px;\n backdrop-filter: blur(10px);\n box-sizing: border-box;\n }\n\n .arrow {\n &::before {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n margin: auto;\n inline-size: 12px;\n block-size: 8px;\n background: inherit;\n content: '';\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n transform: translate3d(var(--x, 0), 100%, 0);\n }\n }\n\n .in-up {\n --direction: -1;\n\n animation: popover-up-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .out-up {\n --direction: -1;\n\n animation: popover-up-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .in-down {\n --direction: 1;\n\n animation: popover-down-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n .out-down {\n --direction: 1;\n\n animation: popover-down-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n @keyframes popover-down-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n }\n\n @keyframes popover-down-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @keyframes popover-up-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n }\n\n @keyframes popover-up-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n pointer-events: none;\n }\n }\n`;\n"],"names":["popoverCss","portalCss","css"],"mappings":"kKAEaA,UAAU,mBAAVA,GAWAC,SAAS,mBAATA,qBAbO,eAEPD,EAAaE,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;AAU9B,CAAC,CACYD,EAAYC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ7B,CAAC"}
1
+ {"version":3,"sources":["components/popover/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const popoverCss = css`\n .popover {\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n width: 100%;\n\n &::-webkit-scrollbar {\n inline-size: 1px;\n }\n }\n`;\nexport const portalCss = css`\n .container {\n overflow-y: auto;\n /* stylelint-disable-next-line */\n max-block-size: -webkit-fill-available;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .portal {\n --direction: 1;\n\n position: fixed;\n display: inline-block;\n border-radius: var(--border-radius);\n padding: 4px;\n font-size: var(--font-size);\n white-space: break-spaces;\n color: var(--text-color);\n background-color: var(--popover-bg);\n filter: drop-shadow(0.5px calc(var(--direction) * 1px) 4px var(--popover-shadow-color))\n drop-shadow(1px calc(var(--direction) * 2px) 8px var(--popover-shadow-color))\n drop-shadow(2px calc(var(--direction) * 4px) 16px var(--popover-shadow-color));\n min-inline-size: 100px;\n backdrop-filter: blur(10px);\n box-sizing: border-box;\n }\n\n .arrow {\n &::before {\n position: absolute;\n inset-inline: 0;\n inset-block-end: 0;\n margin: auto;\n inline-size: 12px;\n block-size: 8px;\n background: inherit;\n content: '';\n clip-path: polygon(0% 0%, 50% 100%, 100% 0%);\n transform: translate3d(var(--x, 0), 100%, 0);\n }\n }\n\n .in-up {\n --direction: -1;\n\n animation: popover-up-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .out-up {\n --direction: -1;\n\n animation: popover-up-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n }\n\n .in-down {\n --direction: 1;\n\n animation: popover-down-in-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n .out-down {\n --direction: 1;\n\n animation: popover-down-out-effect var(--transition-duration) forwards;\n transform: scaleY(1);\n\n &::before {\n inset-block-end: unset;\n inset-block-start: 0;\n transform: translate3d(var(--x, 0), -100%, 0) rotate(180deg);\n }\n }\n\n @keyframes popover-down-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n }\n\n @keyframes popover-down-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n @keyframes popover-up-in-effect {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n }\n\n @keyframes popover-up-out-effect {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n pointer-events: none;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n pointer-events: none;\n }\n }\n`;\n"],"names":["popoverCss","portalCss","css"],"mappings":"kKAEaA,UAAU,mBAAVA,GAYAC,SAAS,mBAATA,qBAdO,eAEPD,EAAaE,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;AAW9B,CAAC,CACYD,EAAYC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgJ7B,CAAC"}
package/lib/tag/style.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"style",{enumerable:!0,get:function(){return r}});const o=require("@moneko/css"),r=(0,o.css)`
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"style",{enumerable:!0,get:function(){return o}});const r=require("@moneko/css"),o=(0,r.css)`
2
2
  :host {
3
- display: inline-block;
3
+ display: inline-flex;
4
4
  }
5
5
 
6
6
  .tag {
@@ -42,7 +42,7 @@
42
42
  }
43
43
  }
44
44
 
45
- ${["primary","success","error","warning","tag-custom"].map(o=>`.${o} {--text-color: var(--${o}-color);--border-color: var(--${o}-secondary-bg);--component-bg: var(--${o}-details-bg);}`).join("")}
45
+ ${["primary","success","error","warning","tag-custom"].map(r=>`.${r} {--text-color: var(--${r}-color);--border-color: var(--${r}-secondary-bg);--component-bg: var(--${r}-details-bg);}`).join("")}
46
46
 
47
47
  .disabled {
48
48
  --text-color: var(--disable-color);
@@ -1 +1 @@
1
- {"version":3,"sources":["components/tag/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: inline-block;\n }\n\n .tag {\n display: flex;\n align-items: center;\n overflow: hidden;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 0 8px;\n font-size: var(--font-size-sm);\n color: var(--text-color);\n background-color: var(--component-bg);\n gap: 5px;\n line-height: 20px;\n\n a {\n text-decoration: unset;\n color: inherit;\n }\n }\n\n .icon {\n font-size: var(--font-size-sm);\n line-height: var(--font-size-sm);\n }\n\n .bordered {\n border: 1px solid var(--border-color);\n }\n\n .close {\n font-size: var(--font-size-sm);\n cursor: pointer;\n opacity: 0.5;\n transition: var(--transition-duration) var(--transition-timing-function) opacity;\n user-select: none;\n\n &:hover {\n opacity: 1;\n }\n }\n\n ${['primary', 'success', 'error', 'warning', 'tag-custom']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--border-color: var(--${s}-secondary-bg);--component-bg: var(--${s}-details-bg);}`,\n )\n .join('')}\n\n .disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --component-bg: var(--disable-bg);\n }\n`;\n"],"names":["style","css","map","s","join"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAW,aAAa,CACvDC,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,cAAc,CAAC,EAE7HC,IAAI,CAAC,IAAI;;;;;;;AAOd,CAAC"}
1
+ {"version":3,"sources":["components/tag/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n :host {\n display: inline-flex;\n }\n\n .tag {\n display: flex;\n align-items: center;\n overflow: hidden;\n border-radius: calc(var(--border-radius) / 1.5);\n padding: 0 8px;\n font-size: var(--font-size-sm);\n color: var(--text-color);\n background-color: var(--component-bg);\n gap: 5px;\n line-height: 20px;\n\n a {\n text-decoration: unset;\n color: inherit;\n }\n }\n\n .icon {\n font-size: var(--font-size-sm);\n line-height: var(--font-size-sm);\n }\n\n .bordered {\n border: 1px solid var(--border-color);\n }\n\n .close {\n font-size: var(--font-size-sm);\n cursor: pointer;\n opacity: 0.5;\n transition: var(--transition-duration) var(--transition-timing-function) opacity;\n user-select: none;\n\n &:hover {\n opacity: 1;\n }\n }\n\n ${['primary', 'success', 'error', 'warning', 'tag-custom']\n .map(\n (s) =>\n `.${s} {--text-color: var(--${s}-color);--border-color: var(--${s}-secondary-bg);--component-bg: var(--${s}-details-bg);}`,\n )\n .join('')}\n\n .disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --component-bg: var(--disable-bg);\n }\n`;\n"],"names":["style","css","map","s","join"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4CvB,EAAE,CAAC,UAAW,UAAW,QAAS,UAAW,aAAa,CACvDC,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,sBAAsB,EAAEA,EAAE,8BAA8B,EAAEA,EAAE,qCAAqC,EAAEA,EAAE,cAAc,CAAC,EAE7HC,IAAI,CAAC,IAAI;;;;;;;AAOd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neko-ui",
3
- "version": "2.9.8-beta.0",
3
+ "version": "2.9.8-beta.2",
4
4
  "description": "WebComponents UI Libraries",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",