neko-ui 2.5.0 → 2.5.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.
Files changed (63) hide show
  1. package/README.md +2 -0
  2. package/es/basic-config/index.js +1 -1
  3. package/es/basic-config/index.js.map +1 -1
  4. package/es/code/index.d.ts +1 -0
  5. package/es/code/index.js +2 -2
  6. package/es/code/index.js.map +1 -1
  7. package/es/code/worker.js +1 -1
  8. package/es/code/worker.js.map +1 -1
  9. package/es/date-picker/index.js +1 -1
  10. package/es/date-picker/index.js.map +1 -1
  11. package/es/from-schema/index.js.map +1 -1
  12. package/es/input/index.d.ts +6 -1
  13. package/es/input/index.js +1 -1
  14. package/es/input/index.js.map +1 -1
  15. package/es/input/style.js +2 -1
  16. package/es/input/style.js.map +1 -1
  17. package/es/popover/index.js +2 -2
  18. package/es/popover/index.js.map +1 -1
  19. package/es/switch/index.d.ts +1 -1
  20. package/es/switch/index.js.map +1 -1
  21. package/es/table/index.js +1 -1
  22. package/es/table/index.js.map +1 -1
  23. package/es/theme/index.js +1 -1
  24. package/es/theme/index.js.map +1 -1
  25. package/lib/basic-config/index.js +1 -1
  26. package/lib/basic-config/index.js.map +1 -1
  27. package/lib/code/index.d.ts +1 -0
  28. package/lib/code/index.js +2 -2
  29. package/lib/code/index.js.map +1 -1
  30. package/lib/code/worker.js +1 -1
  31. package/lib/code/worker.js.map +1 -1
  32. package/lib/color-palette/index.js +1 -1
  33. package/lib/color-palette/index.js.map +1 -1
  34. package/lib/cron/style.js +1 -1
  35. package/lib/cron/style.js.map +1 -1
  36. package/lib/date-picker/index.js +1 -1
  37. package/lib/date-picker/index.js.map +1 -1
  38. package/lib/date-picker/month.js +1 -1
  39. package/lib/date-picker/month.js.map +1 -1
  40. package/lib/date-picker/time.js +1 -1
  41. package/lib/date-picker/time.js.map +1 -1
  42. package/lib/dropdown/index.js +1 -1
  43. package/lib/dropdown/index.js.map +1 -1
  44. package/lib/from-schema/index.js.map +1 -1
  45. package/lib/index.js +1 -1
  46. package/lib/index.js.map +1 -1
  47. package/lib/input/index.d.ts +6 -1
  48. package/lib/input/index.js +1 -1
  49. package/lib/input/index.js.map +1 -1
  50. package/lib/input/style.js +2 -1
  51. package/lib/input/style.js.map +1 -1
  52. package/lib/popover/index.js +2 -2
  53. package/lib/popover/index.js.map +1 -1
  54. package/lib/switch/index.d.ts +1 -1
  55. package/lib/switch/index.js.map +1 -1
  56. package/lib/table/index.js +1 -1
  57. package/lib/table/index.js.map +1 -1
  58. package/lib/tabs/style.js +1 -1
  59. package/lib/tabs/style.js.map +1 -1
  60. package/lib/theme/index.js +2 -2
  61. package/lib/theme/index.js.map +1 -1
  62. package/package.json +8 -4
  63. package/umd/index.js +1 -1
package/README.md CHANGED
@@ -12,6 +12,7 @@
12
12
  [size-tag]: https://packagephobia.com/badge?p=neko-ui@latest
13
13
  [size-url]: https://packagephobia.com/result?p=neko-ui@latest
14
14
  [download-tag]: https://img.shields.io/npm/dm/neko-ui.svg?logo=docusign
15
+ [x-tag]: https://img.shields.io/twitter/follow/moneko97.svg?style=social
15
16
 
16
17
  # Neko UI
17
18
 
@@ -25,6 +26,7 @@
25
26
  [![version][version-tag]][npm-url]
26
27
  [![install size][size-tag]][size-url]
27
28
  [![download][download-tag]][npm-url]
29
+ ![x][x-tag]
28
30
 
29
31
  [![neko-ui][install-tag]][npm-url]
30
32
 
@@ -1,2 +1,2 @@
1
- var r,a,e;export var Size;(r=Size||(Size={}))./** 小 */small="small",r./** 默认: 中 */normal="normal",r./** 大 */large="large";export var Status;(a=Status||(Status={}))./** 默认 */normal="normal",a./** 成功 */success="success",a./** 警告 */warning="warning",a./** 错误 */error="error",a./** 详细 */info="info",a./** 主要 */primary="primary";export var FieldName;(e=FieldName||(FieldName={}))./** 标题 */label="label",e./** 值 */value="value",e./** 分组子选项 */options="options",e./** 子选项 */children="children",e./** 图标 */icon="icon",e./** 后缀图标 */suffix="suffix";
1
+ var r,a,e;export var Size;(r=Size||(Size={})).small="small",r.normal="normal",r.large="large";export var Status;(a=Status||(Status={})).normal="normal",a.success="success",a.warning="warning",a.error="error",a.info="info",a.primary="primary";export var FieldName;(e=FieldName||(FieldName={})).label="label",e.value="value",e.options="options",e.children="children",e.icon="icon",e.suffix="suffix";
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/basic-config/index.ts"],"sourcesContent":["export 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?: JSX.Element;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSX.Element;\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"],"names":["Size","Status","FieldName","small","normal","large","success","warning","error","info","primary","label","value","options","children","icon","suffix"],"mappings":"IAaYA,EASAC,EAqCAC,aA9CL,MAAKF,EAAAA,OAAAA,UACV,MAAM,EACNG,MAAAA,QAFUH,EAGV,UAAU,EACVI,OAAAA,SAJUJ,EAKV,MAAM,EACNK,MAAAA,mBAGK,QAAKJ,EAAAA,SAAAA,YACV,OAAO,EACPG,OAAAA,SAFUH,EAGV,OAAO,EACPK,QAAAA,UAJUL,EAKV,OAAO,EACPM,QAAAA,UANUN,EAOV,OAAO,EACPO,MAAAA,QARUP,EASV,OAAO,EACPQ,KAAAA,OAVUR,EAWV,OAAO,EACPS,QAAAA,qBAyBK,WAAKR,EAAAA,YAAAA,eACV,OAAO,EACPS,MAAAA,QAFUT,EAGV,MAAM,EACNU,MAAAA,QAJUV,EAKV,UAAU,EACVW,QAAAA,UANUX,EAOV,QAAQ,EACRY,SAAAA,WARUZ,EASV,OAAO,EACPa,KAAAA,OAVUb,EAWV,SAAS,EACTc,OAAAA"}
1
+ {"version":3,"sources":["../../components/basic-config/index.ts"],"sourcesContent":["export 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?: JSX.Element;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSX.Element;\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"],"names":["Size","Status","FieldName"],"mappings":"IAaYA,EASAC,EAqCAC,mBA9CAF,EAAAA,OAAAA,6EASAC,EAAAA,SAAAA,4IAqCAC,EAAAA,YAAAA"}
@@ -1,3 +1,4 @@
1
+ import '../prism/prism.js';
1
2
  import type { CustomElement } from '..';
2
3
  export interface CodeProps {
3
4
  /** 自定义类名 */
package/es/code/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";import{setAttribute as o}from"solid-js/web";import{insert as r}from"solid-js/web";import{effect as l}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as i}from"solid-js/web";import{className as s}from"solid-js/web";import{addEventListener as a}from"solid-js/web";let d=/*#__PURE__*/t('<div class="toolbar"><button class="toolbar-copy">'),m=/*#__PURE__*/t("<pre><code>"),u=/*#__PURE__*/t("<style>"),c=/*#__PURE__*/t("<div><textarea>");import{Show as v,createComponent as p,createEffect as f,createSignal as g,mergeProps as b,untrack as h}from"solid-js";import $ from"@moneko/common/lib/isFunction";import _ from"@moneko/common/lib/setClipboard";import{css as C,cx as w}from"@moneko/css";import{customElement as j}from"solid-element";import{style as y}from"./style";import k from"../prism/css";import x from"../prism/prism.js";import E from"../theme";function N(t){let n;let{baseStyle:p}=E,[b,j]=g(""),[N,A]=g(20);function L(){_(h(b),n)}function P(){return(()=>{let u=m(),c=u.firstChild,p=n;return r(u,i(v,{get when(){return t.toolbar},get children(){let e=d(),r=e.firstChild;return a(r,"click",L,!0),l(()=>{var r;return o(e,"data-lang",null==(r=t.lang)?void 0:r.split(" ")[0])}),e}}),c),"function"==typeof p?e(p,c):n=c,l(e=>{let o=w(`language-${t.lang}`,t.lineNumber&&"line-numbers",!t.toolbar&&"not-toolbar",!t.edit&&t.class),r=`language-${t.lang}`;return o!==e._v$&&s(u,e._v$=o),r!==e._v$2&&s(c,e._v$2=r),e},{_v$:void 0,_v$2:void 0}),u})()}function R({target:e}){let o=`${e.value}${/\n$/.test(e.value)?"​":""}`;j(o),$(t.onChange)&&t.onChange(o)}return(// const work = new Worker(new URL('./worker.ts', import.meta.url));
1
+ import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";import{setAttribute as o}from"solid-js/web";import{insert as r}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{className as s}from"solid-js/web";import{addEventListener as a}from"solid-js/web";let d=/*#__PURE__*/t('<div class="toolbar"><button class="toolbar-copy">'),m=/*#__PURE__*/t("<pre><code>"),u=/*#__PURE__*/t("<style>"),c=/*#__PURE__*/t("<div><textarea>");import{Show as v,createComponent as p,createEffect as f,createSignal as g,mergeProps as b,untrack as h}from"solid-js";import w from"@moneko/common/lib/isFunction";import $ from"@moneko/common/lib/setClipboard";import{css as _,cx as C}from"@moneko/css";import{customElement as j}from"solid-element";import{style as y}from"./style";import k from"../prism/css";import"../prism/prism.js";import P from"../theme";function x(t){let n;let{baseStyle:p}=P,[b,j]=g(""),[x,E]=g(20);function N(){$(h(b),n)}function A(){return(()=>{let u=m(),c=u.firstChild,p=n;return r(u,l(v,{get when(){return t.toolbar},get children(){let e=d(),r=e.firstChild;return a(r,"click",N,!0),i(()=>{var r;return o(e,"data-lang",null==(r=t.lang)?void 0:r.split(" ")[0])}),e}}),c),"function"==typeof p?e(p,c):n=c,i(e=>{let o=C(`language-${t.lang}`,t.lineNumber&&"line-numbers",!t.toolbar&&"not-toolbar",!t.edit&&t.class),r=`language-${t.lang}`;return o!==e._v$&&s(u,e._v$=o),r!==e._v$2&&s(c,e._v$2=r),e},{_v$:void 0,_v$2:void 0}),u})()}function L({target:e}){let o=`${e.value}${/\n$/.test(e.value)?"​":""}`;j(o),w(t.onChange)&&t.onChange(o)}return(// const work = new Worker(new URL('./worker.ts', import.meta.url));
2
2
  // work.addEventListener('message', update);
3
3
  // work.postMessage({
4
4
  // lang: props.lang,
@@ -7,5 +7,5 @@ import{use as e}from"solid-js/web";import{template as t}from"solid-js/web";impor
7
7
  // onCleanup(() => {
8
8
  // work.terminate();
9
9
  // });
10
- f(()=>{if(t.code){let e=t.code.replace(/^\n/,"");try{j(decodeURIComponent(e))}catch(t){j(e)}}else j("")}),f(()=>{!function(e){var o;if(!e.code)return;let r=e.lang||"markup";/^diff-([\w-]+)/i.test(r)&&(x.languages[r]=x.languages.diff),o={data:x.highlight(e.code,x.languages[r],r)},n.innerHTML=o.data,A(n.getBoundingClientRect().height-(t.toolbar?40:16))}({lang:t.lang,code:b()})}),[(()=>{let e=u();return r(e,p,null),r(e,k,null),r(e,y,null),r(e,()=>C(t.css),null),e})(),i(v,{get when(){return t.edit},get fallback(){return P()},get children(){let e=c(),o=e.firstChild;return a(o,"input",R,!0),r(e,P,null),l(r=>{let l=w("n-editor",t.class),n=w(t.lineNumber&&"line-numbers",!t.toolbar&&"not-toolbar"),i=`${N()}px`;return l!==r._v$3&&s(e,r._v$3=l),n!==r._v$4&&s(o,r._v$4=n),i!==r._v$5&&(null!=(r._v$5=i)?o.style.setProperty("height",i):o.style.removeProperty("height")),r},{_v$3:void 0,_v$4:void 0,_v$5:void 0}),l(()=>o.value=b()),e}})])}j("n-code",{class:void 0,code:void 0,lang:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0},(e,t)=>{let o=t.element,r=b({code:o.textContent,css:o.css,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return f(()=>{o.replaceChildren(),o.removeAttribute("css")}),p(N,r)});export default N;n(["click","input"]);
10
+ f(()=>{if(t.code){let e=t.code.replace(/^\n/,"");try{j(decodeURIComponent(e))}catch(t){j(e)}}else j("")}),f(()=>{!function(e){var o;if(!e.code)return;let r=e.lang||"markup";/^diff-([\w-]+)/i.test(r)&&(window.Prism.languages[r]=window.Prism.languages.diff),o={data:window.Prism.highlight(e.code,window.Prism.languages[r],r)},n.innerHTML=o.data,E(n.getBoundingClientRect().height-(t.toolbar?40:16))}({lang:t.lang,code:b()})}),[(()=>{let e=u();return r(e,p,null),r(e,k,null),r(e,y,null),r(e,()=>_(t.css),null),e})(),l(v,{get when(){return t.edit},get fallback(){return A()},get children(){let e=c(),o=e.firstChild;return a(o,"input",L,!0),r(e,A,null),i(r=>{let i=C("n-editor",t.class),n=C(t.lineNumber&&"line-numbers",!t.toolbar&&"not-toolbar"),l=`${x()}px`;return i!==r._v$3&&s(e,r._v$3=i),n!==r._v$4&&s(o,r._v$4=n),l!==r._v$5&&(null!=(r._v$5=l)?o.style.setProperty("height",l):o.style.removeProperty("height")),r},{_v$3:void 0,_v$4:void 0,_v$5:void 0}),i(()=>o.value=b()),e}})])}j("n-code",{class:void 0,code:void 0,lang:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0},(e,t)=>{let o=t.element,r=b({code:o.textContent,css:o.css,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return f(()=>{o.replaceChildren(),o.removeAttribute("css")}),p(x,r)});export default x;n(["click","input"]);
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import { Show, createComponent, createEffect, createSignal, mergeProps, untrack } from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport prismCss from '../prism/css';\nimport Prism from '../prism/prism.js';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n lang?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function pre() {\n return (\n <pre\n class={cx(\n `language-${props.lang}`,\n props.lineNumber && 'line-numbers',\n !props.toolbar && 'not-toolbar',\n !props.edit && props.class,\n )}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-lang={props.lang?.split(' ')[0]}>\n <button class=\"toolbar-copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.lang}`} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function postMessage(opt: { lang?: string; code?: string }) {\n if (!opt.code) return;\n const _lang = opt.lang || 'markup';\n\n if (/^diff-([\\w-]+)/i.test(_lang)) {\n Prism.languages[_lang] = Prism.languages.diff;\n }\n update({\n data: Prism.highlight(opt.code, Prism.languages[_lang], _lang),\n });\n }\n\n // const work = new Worker(new URL('./worker.ts', import.meta.url));\n\n // work.addEventListener('message', update);\n\n // work.postMessage({\n // lang: props.lang,\n // code: code(),\n // });\n // onCleanup(() => {\n // work.terminate();\n // });\n createEffect(() => {\n if (props.code) {\n const _code = props.code.replace(/^\\n/, '');\n\n try {\n setCode(decodeURIComponent(_code));\n } catch (error) {\n setCode(_code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n postMessage({\n lang: props.lang,\n code: code(),\n });\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {prismCss()}\n {style}\n {css(props.css)}\n </style>\n <Show when={props.edit} fallback={pre()}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={code()}\n class={cx(props.lineNumber && 'line-numbers', !props.toolbar && 'not-toolbar')}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n {pre()}\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n lang: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return createComponent(Code, props);\n },\n);\nexport default Code;\n"],"names":["Show","createComponent","createEffect","createSignal","mergeProps","untrack","isFunction","setClipboard","css","cx","customElement","style","prismCss","Prism","theme","Code","props","codeEl","baseStyle","code","setCode","hei","setHei","copy","pre","toolbar","lang","split","lineNumber","edit","class","change","target","c","value","test","onChange","_code","replace","decodeURIComponent","error","postMessage","opt","e","_lang","languages","diff","data","highlight","innerHTML","getBoundingClientRect","height","children","_","el","element","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute"],"mappings":"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"}
1
+ {"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import { Show, createComponent, createEffect, createSignal, mergeProps, untrack } from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport prismCss from '../prism/css';\nimport '../prism/prism.js';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n lang?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function pre() {\n return (\n <pre\n class={cx(\n `language-${props.lang}`,\n props.lineNumber && 'line-numbers',\n !props.toolbar && 'not-toolbar',\n !props.edit && props.class,\n )}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-lang={props.lang?.split(' ')[0]}>\n <button class=\"toolbar-copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.lang}`} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function postMessage(opt: { lang?: string; code?: string }) {\n if (!opt.code) return;\n const _lang = opt.lang || 'markup';\n\n if (/^diff-([\\w-]+)/i.test(_lang)) {\n window.Prism.languages[_lang] = window.Prism.languages.diff;\n }\n update({\n data: window.Prism.highlight(opt.code, window.Prism.languages[_lang], _lang),\n });\n }\n\n // const work = new Worker(new URL('./worker.ts', import.meta.url));\n\n // work.addEventListener('message', update);\n\n // work.postMessage({\n // lang: props.lang,\n // code: code(),\n // });\n // onCleanup(() => {\n // work.terminate();\n // });\n createEffect(() => {\n if (props.code) {\n const _code = props.code.replace(/^\\n/, '');\n\n try {\n setCode(decodeURIComponent(_code));\n } catch (error) {\n setCode(_code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n postMessage({\n lang: props.lang,\n code: code(),\n });\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {prismCss()}\n {style}\n {css(props.css)}\n </style>\n <Show when={props.edit} fallback={pre()}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={code()}\n class={cx(props.lineNumber && 'line-numbers', !props.toolbar && 'not-toolbar')}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n {pre()}\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n lang: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return createComponent(Code, props);\n },\n);\nexport default Code;\n"],"names":["Show","createComponent","createEffect","createSignal","mergeProps","untrack","isFunction","setClipboard","css","cx","customElement","style","prismCss","theme","Code","props","codeEl","baseStyle","code","setCode","hei","setHei","copy","pre","toolbar","lang","split","lineNumber","edit","class","change","target","c","value","test","onChange","_code","replace","decodeURIComponent","error","postMessage","opt","e","_lang","window","Prism","languages","diff","data","highlight","innerHTML","getBoundingClientRect","height","children","_","el","element","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute"],"mappings":"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"}
package/es/code/worker.js CHANGED
@@ -1,3 +1,3 @@
1
- self.Prism={disableWorkerMessageHandler:!0},self.importScripts(new URL("../prism/prism.js",import.meta.url).toString()),self.addEventListener("message",function(s){let e;try{let{code:i,lang:l}=s.data;e=self.Prism.highlight&&self.Prism.languages?self.Prism.highlight(i,self.Prism.languages[l],l):i}catch(s){e=s}self.postMessage(e);// 向主线程发送消息
1
+ self.Prism={disableWorkerMessageHandler:!0,languages:{},highlight:s=>s},self.importScripts(new URL("../prism/prism.js",import.meta.url).toString()),self.addEventListener("message",function(s){let e;try{let{code:i,lang:l}=s.data;e=self.Prism.highlight&&self.Prism.languages?self.Prism.highlight(i,self.Prism.languages[l],l):i}catch(s){e=s}self.postMessage(e);// 向主线程发送消息
2
2
  },!1);
3
3
  //# sourceMappingURL=worker.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.Prism = {\n disableWorkerMessageHandler: true,\n};\nself.importScripts(new URL('../prism/prism.js', import.meta.url).toString());\nself.addEventListener(\n 'message',\n function (e) {\n let result;\n\n try {\n const { code, lang } = e.data;\n\n if (self.Prism.highlight && self.Prism.languages) {\n result = self.Prism.highlight(code, self.Prism.languages[lang], lang);\n } else {\n result = code;\n }\n } catch (error) {\n result = error;\n }\n self.postMessage(result); // 向主线程发送消息\n },\n false,\n);\n"],"names":["self","Prism","disableWorkerMessageHandler","importScripts","URL","url","toString","addEventListener","e","result","code","lang","data","highlight","languages","error","postMessage"],"mappings":"AAAAA,KAAKC,KAAK,CAAG,CACXC,4BAA6B,CAAA,CAC/B,EACAF,KAAKG,aAAa,CAAC,IAAIC,IAAI,oBAAqB,YAAYC,GAAG,EAAEC,QAAQ,IACzEN,KAAKO,gBAAgB,CACnB,UACA,SAAUC,CAAC,EACT,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEC,KAAAA,CAAI,CAAEC,KAAAA,CAAI,CAAE,CAAGH,EAAEI,IAAI,CAG3BH,EADET,KAAKC,KAAK,CAACY,SAAS,EAAIb,KAAKC,KAAK,CAACa,SAAS,CACrCd,KAAKC,KAAK,CAACY,SAAS,CAACH,EAAMV,KAAKC,KAAK,CAACa,SAAS,CAACH,EAAK,CAAEA,GAEvDD,CAEb,CAAE,MAAOK,EAAO,CACdN,EAASM,CACX,CACAf,KAAKgB,WAAW,CAACP,EAAS,YAAW;AACvC,EACA,CAAA"}
1
+ {"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.Prism = {\n disableWorkerMessageHandler: true,\n languages: {},\n highlight(code) {\n return code;\n },\n};\nself.importScripts(new URL('../prism/prism.js', import.meta.url).toString());\nself.addEventListener(\n 'message',\n function (e) {\n let result;\n\n try {\n const { code, lang } = e.data;\n\n if (self.Prism.highlight && self.Prism.languages) {\n result = self.Prism.highlight(code, self.Prism.languages[lang], lang);\n } else {\n result = code;\n }\n } catch (error) {\n result = error;\n }\n self.postMessage(result); // 向主线程发送消息\n },\n false,\n);\n"],"names":["self","Prism","disableWorkerMessageHandler","languages","highlight","code","importScripts","URL","url","toString","addEventListener","e","result","lang","data","error","postMessage"],"mappings":"AAAAA,KAAKC,KAAK,CAAG,CACXC,4BAA6B,CAAA,EAC7BC,UAAW,CAAC,EACZC,UAAAA,AAAUC,GACDA,CAEX,EACAL,KAAKM,aAAa,CAAC,IAAIC,IAAI,oBAAqB,YAAYC,GAAG,EAAEC,QAAQ,IACzET,KAAKU,gBAAgB,CACnB,UACA,SAAUC,CAAC,EACT,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEP,KAAAA,CAAI,CAAEQ,KAAAA,CAAI,CAAE,CAAGF,EAAEG,IAAI,CAG3BF,EADEZ,KAAKC,KAAK,CAACG,SAAS,EAAIJ,KAAKC,KAAK,CAACE,SAAS,CACrCH,KAAKC,KAAK,CAACG,SAAS,CAACC,EAAML,KAAKC,KAAK,CAACE,SAAS,CAACU,EAAK,CAAEA,GAEvDR,CAEb,CAAE,MAAOU,EAAO,CACdH,EAASG,CACX,CACAf,KAAKgB,WAAW,CAACJ,EAAS,YAAW;AACvC,EACA,CAAA"}
@@ -1,2 +1,2 @@
1
- var e,o;import{_ as t}from"@swc/helpers/_/_extends";import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{mergeProps as s}from"solid-js/web";import{getOwner as a}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as d}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{addEventListener as p}from"solid-js/web";let u=/*#__PURE__*/r('<n-input part="value">',!0,!1);import{createComponent as m,createEffect as f,createMemo as h,createSignal as v,mergeProps as c,splitProps as w,untrack as g}from"solid-js";import{customElement as Y}from"solid-element";import C from"./dayjs";import y from"./panel";import{styles as _}from"./style";import"../button";import"../menu";import b,{defaultProps as $}from"../popover";function H(e){let o;let t=c({type:"date",parser:"YYYY-MM-DD HH:mm:ss"},e),[r,d]=w(t,["class","css","value","defaultValue","onChange","type","content","onOpenChange","open","format","popupCss","trigger","parser","showTime","showHour","showMinute","showSecond","prefixIcon","suffixIcon","placeholder","showToday","showHeader"]),[m,Y]=v(null),[$,H]=v(C(r.defaultValue)),M=h(()=>r.format?r.format:r.showTime?"YYYY-MM-DD HH:mm:ss":({month:"YYYY-MM",date:"YYYY-MM-DD",year:"YYYY"})[r.type||"date"]);function j(e){d.disabled||(null==r.onOpenChange||r.onOpenChange.call(r,e),void 0===r.open&&Y(e))}function x(e){e.stopPropagation(),e.preventDefault(),j(!0)}function T(){g(m)&&j(!1)}function I(e){var t;e.target===(null==(t=null==o?void 0:o.shadowRoot)?void 0:t.activeElement)&&j(!g(m))}function D(e){void 0===r.value&&H(e),null==t.onChange||t.onChange.call(t,e.format(r.parser),e)}function E(e){if(e.detail){let o=C(e.detail);o.isValid()&&D(o)}}return f(()=>{void 0!==r.open&&r.open!==g(m)&&Y(r.open)}),f(()=>{let e=C(r.value||r.defaultValue);void 0!==r.value&&e.isValid()&&H(e)}),l(b,s({trigger:"none",placement:"left",get open(){return m()},onOpenChange:j,get css(){return r.css},popupCss:_,get content(){return l(y,{get type(){return r.type},get current(){return $()},get open(){return m()},onChange:D,openChange:j,get showHour(){return r.showHour},get showMinute(){return r.showMinute},get showSecond(){return r.showSecond},get showTime(){return r.showTime},get showToday(){return r.showToday},get showHeader(){return r.showHeader}})}},d,{get children(){let e=u(),t=o;return p(e,"change",E),p(e,"blur",T),p(e,"focus",x),p(e,"mousedown",I,!0),"function"==typeof t?n(t,e):o=e,e._$owner=a(),i(o=>{let t=d.disabled,n=r.suffixIcon,s=r.prefixIcon,a=r.placeholder;return t!==o._v$&&(e.disabled=o._v$=t),n!==o._v$2&&(e.suffixIcon=o._v$2=n),s!==o._v$3&&(e.prefixIcon=o._v$3=s),a!==o._v$4&&(e.placeholder=o._v$4=a),o},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),i(()=>e.value=$().format(M())),e}}))}(o=e||(e={}))./** 日期选择 */date="date",o./** 月份选择 */month="month",o./** 年份选择 */year="year",Y("n-data-picker",t({},$,{value:void 0,defaultValue:void 0,disabled:void 0,onChange:void 0,open:void 0,onOpenChange:void 0,type:void 0,format:void 0,parser:void 0,showTime:void 0,suffixIcon:"📅",prefixIcon:void 0,placeholder:void 0,showHour:!0,showMinute:!0,showSecond:!0,showToday:!0,showHeader:!0}),(e,o)=>{let t=o.element,n=c({css:t.css,onChange(e,o){t.dispatchEvent(new CustomEvent("change",{detail:[e,o]}))},onOpenChange(e){t.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return f(()=>{t.removeAttribute("css")}),m(H,n)});export default H;d(["mousedown"]);
1
+ var e,o;import{_ as t}from"@swc/helpers/_/_extends";import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{mergeProps as s}from"solid-js/web";import{getOwner as a}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as d}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{addEventListener as p}from"solid-js/web";let u=/*#__PURE__*/r('<n-input part="value">',!0,!1);import{createComponent as m,createEffect as f,createMemo as h,createSignal as v,mergeProps as c,splitProps as w,untrack as g}from"solid-js";import{customElement as Y}from"solid-element";import C from"./dayjs";import y from"./panel";import{styles as _}from"./style";import"../button";import"../menu";import b,{defaultProps as $}from"../popover";function H(e){let o;let t=c({type:"date",parser:"YYYY-MM-DD HH:mm:ss"},e),[r,d]=w(t,["class","css","value","defaultValue","onChange","type","content","onOpenChange","open","format","popupCss","trigger","parser","showTime","showHour","showMinute","showSecond","prefixIcon","suffixIcon","placeholder","showToday","showHeader"]),[m,Y]=v(null),[$,H]=v(C(r.defaultValue)),M=h(()=>r.format?r.format:r.showTime?"YYYY-MM-DD HH:mm:ss":({month:"YYYY-MM",date:"YYYY-MM-DD",year:"YYYY"})[r.type||"date"]);function j(e){d.disabled||(null==r.onOpenChange||r.onOpenChange.call(r,e),void 0===r.open&&Y(e))}function x(e){e.stopPropagation(),e.preventDefault(),j(!0)}function T(){g(m)&&j(!1)}function I(e){var t;e.target===(null==(t=null==o?void 0:o.shadowRoot)?void 0:t.activeElement)&&j(!g(m))}function D(e){void 0===r.value&&H(e),null==t.onChange||t.onChange.call(t,e.format(r.parser),e)}function E(e){if(e.detail){let o=C(e.detail);o.isValid()&&D(o)}}return f(()=>{void 0!==r.open&&r.open!==g(m)&&Y(r.open)}),f(()=>{let e=C(r.value||r.defaultValue);void 0!==r.value&&e.isValid()&&H(e)}),l(b,s({trigger:"none",placement:"left",get open(){return m()},onOpenChange:j,get css(){return r.css},popupCss:_,get content(){return l(y,{get type(){return r.type},get current(){return $()},get open(){return m()},onChange:D,openChange:j,get showHour(){return r.showHour},get showMinute(){return r.showMinute},get showSecond(){return r.showSecond},get showTime(){return r.showTime},get showToday(){return r.showToday},get showHeader(){return r.showHeader}})}},d,{get children(){let e=u(),t=o;return p(e,"change",E),p(e,"blur",T),p(e,"focus",x),p(e,"mousedown",I,!0),"function"==typeof t?n(t,e):o=e,e._$owner=a(),i(o=>{let t=d.disabled,n=r.suffixIcon,s=r.prefixIcon,a=r.placeholder;return t!==o._v$&&(e.disabled=o._v$=t),n!==o._v$2&&(e.suffixIcon=o._v$2=n),s!==o._v$3&&(e.prefixIcon=o._v$3=s),a!==o._v$4&&(e.placeholder=o._v$4=a),o},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),i(()=>e.value=$().format(M())),e}}))}(o=e||(e={})).date="date",o.month="month",o.year="year",Y("n-data-picker",t({},$,{value:void 0,defaultValue:void 0,disabled:void 0,onChange:void 0,open:void 0,onOpenChange:void 0,type:void 0,format:void 0,parser:void 0,showTime:void 0,suffixIcon:"📅",prefixIcon:void 0,placeholder:void 0,showHour:!0,showMinute:!0,showSecond:!0,showToday:!0,showHeader:!0}),(e,o)=>{let t=o.element,n=c({css:t.css,onChange(e,o){t.dispatchEvent(new CustomEvent("change",{detail:[e,o]}))},onOpenChange(e){t.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return f(()=>{t.removeAttribute("css")}),m(H,n)});export default H;d(["mousedown"]);
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/date-picker/index.tsx"],"sourcesContent":["import {\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport dayjs from './dayjs';\nimport Panel from './panel';\nimport { styles } from './style';\nimport '../button';\nimport '../menu';\nimport Popover, { defaultProps } from '../popover';\nimport type { CustomElement, InputElement, PopoverProps } from '..';\n\nfunction DatePicker(_props: DatePickerProps) {\n let ref: InputElement | undefined;\n const props = mergeProps(\n {\n type: 'date' as DatePickerProps['type'],\n parser: 'YYYY-MM-DD HH:mm:ss',\n },\n _props,\n );\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'value',\n 'defaultValue',\n 'onChange',\n 'type',\n 'content',\n 'onOpenChange',\n 'open',\n 'format',\n 'popupCss',\n 'trigger',\n 'parser',\n 'showTime',\n 'showHour',\n 'showMinute',\n 'showSecond',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'showToday',\n 'showHeader',\n ]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [current, setCurrent] = createSignal(dayjs(local.defaultValue));\n\n const format = createMemo(() => {\n if (local.format) {\n return local.format;\n }\n if (local.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return {\n month: 'YYYY-MM',\n date: 'YYYY-MM-DD',\n year: 'YYYY',\n }[local.type || 'date'];\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n local.onOpenChange?.(next);\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n\n function focus(e: FocusEvent | MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n openChange(true);\n }\n function blur() {\n if (untrack(open)) {\n openChange(false);\n }\n }\n function inputMouseDown(e: MouseEvent) {\n if (e.target === (ref?.shadowRoot as ShadowRoot)?.activeElement) {\n openChange(!untrack(open));\n }\n }\n function handleChange(next: dayjs.Dayjs) {\n if (local.value === void 0) {\n setCurrent(next);\n }\n props.onChange?.(next.format(local.parser), next);\n }\n function handleInputChange(e: CustomEvent<string | number | undefined>) {\n if (e.detail) {\n const next = dayjs(e.detail);\n\n if (next.isValid()) {\n handleChange(next);\n }\n }\n }\n\n createEffect(() => {\n if (local.open !== void 0 && local.open !== untrack(open)) {\n setOpen(local.open);\n }\n });\n createEffect(() => {\n const next = dayjs(local.value || local.defaultValue);\n\n if (local.value !== void 0 && next.isValid()) {\n setCurrent(next);\n }\n });\n return (\n <Popover\n trigger=\"none\"\n placement=\"left\"\n open={open()}\n onOpenChange={openChange}\n css={local.css}\n popupCss={styles}\n content={\n <Panel\n type={local.type}\n current={current()}\n open={open()}\n onChange={handleChange}\n openChange={openChange}\n showHour={local.showHour}\n showMinute={local.showMinute}\n showSecond={local.showSecond}\n showTime={local.showTime}\n showToday={local.showToday}\n showHeader={local.showHeader}\n />\n }\n {...other}\n >\n <n-input\n ref={ref}\n onMouseDown={inputMouseDown}\n onFocus={focus}\n onBlur={blur}\n disabled={other.disabled}\n value={current().format(format())}\n suffix-icon={local.suffixIcon}\n prefix-icon={local.prefixIcon}\n placeholder={local.placeholder}\n part=\"value\"\n onChange={handleInputChange}\n />\n </Popover>\n );\n}\n/** API\n * @since 2.1.0\n */\nexport interface DatePickerProps extends Partial<PopoverProps> {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 类型\n * @default 'date'\n */\n type?: keyof typeof PickerType;\n /** 值 */\n value?: string | number;\n /** 默认值\n * @default 当前时间\n */\n defaultValue?: string | number;\n /** 禁用 */\n disabled?: boolean;\n /** 格式化回填到输入框的内容\n * @default 'YYYY-MM-DD'\n */\n format?: string;\n /** 格式化获取的值\n * @default 'YYYY-MM-DD HH:mm:ss'\n */\n parser?: string;\n /** 前缀 */\n prefixIcon?: JSX.Element;\n /** 后缀\n * @default '📅'\n */\n suffixIcon?: JSX.Element;\n /** 变更时的回调 */\n onChange?(val: string, time: dayjs.Dayjs): void;\n /** 显示时间选择\n * @default false\n */\n showTime?: boolean;\n /** 显示小时选择\n * @default true\n **/\n showHour?: boolean;\n /** 显示分钟选择\n * @default true\n **/\n showMinute?: boolean;\n /** 显示秒选择\n * @default true\n **/\n showSecond?: boolean;\n /** 占位文本 */\n placeholder?: string;\n /** 显示今日按钮\n * @default true\n */\n showToday?: boolean;\n /** 显示顶部\n * @default true\n */\n showHeader?: boolean;\n}\n\nenum PickerType {\n /** 日期选择 */\n date = 'date',\n /** 月份选择 */\n month = 'month',\n /** 年份选择 */\n year = 'year',\n}\n\nexport type DatePickerElement = CustomElement<DatePickerProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<DatePickerProps>(\n 'n-data-picker',\n {\n ...defaultProps,\n value: void 0,\n defaultValue: void 0,\n disabled: void 0,\n onChange: void 0,\n open: void 0,\n onOpenChange: void 0,\n type: void 0,\n format: void 0,\n parser: void 0,\n showTime: void 0,\n suffixIcon: '📅',\n prefixIcon: void 0,\n placeholder: void 0,\n showHour: true,\n showMinute: true,\n showSecond: true,\n showToday: true,\n showHeader: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(val: string, time: dayjs.Dayjs) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [val, time],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(DatePicker, props);\n },\n);\nexport default DatePicker;\n"],"names":["PickerType","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","customElement","dayjs","Panel","styles","Popover","defaultProps","DatePicker","_props","ref","props","type","parser","local","other","open","setOpen","current","setCurrent","defaultValue","format","showTime","month","date","year","openChange","next","disabled","onOpenChange","focus","e","stopPropagation","preventDefault","blur","inputMouseDown","target","shadowRoot","activeElement","handleChange","value","onChange","handleInputChange","detail","isValid","css","showHour","showMinute","showSecond","showToday","showHeader","suffixIcon","prefixIcon","placeholder","_","opt","el","element","val","time","dispatchEvent","CustomEvent","removeAttribute"],"mappings":"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"}
1
+ {"version":3,"sources":["../../components/date-picker/index.tsx"],"sourcesContent":["import {\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport dayjs from './dayjs';\nimport Panel from './panel';\nimport { styles } from './style';\nimport '../button';\nimport '../menu';\nimport Popover, { defaultProps } from '../popover';\nimport type { CustomElement, InputElement, PopoverProps } from '..';\n\nfunction DatePicker(_props: DatePickerProps) {\n let ref: InputElement | undefined;\n const props = mergeProps(\n {\n type: 'date' as DatePickerProps['type'],\n parser: 'YYYY-MM-DD HH:mm:ss',\n },\n _props,\n );\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'value',\n 'defaultValue',\n 'onChange',\n 'type',\n 'content',\n 'onOpenChange',\n 'open',\n 'format',\n 'popupCss',\n 'trigger',\n 'parser',\n 'showTime',\n 'showHour',\n 'showMinute',\n 'showSecond',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'showToday',\n 'showHeader',\n ]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [current, setCurrent] = createSignal(dayjs(local.defaultValue));\n\n const format = createMemo(() => {\n if (local.format) {\n return local.format;\n }\n if (local.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return {\n month: 'YYYY-MM',\n date: 'YYYY-MM-DD',\n year: 'YYYY',\n }[local.type || 'date'];\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n local.onOpenChange?.(next);\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n\n function focus(e: FocusEvent | MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n openChange(true);\n }\n function blur() {\n if (untrack(open)) {\n openChange(false);\n }\n }\n function inputMouseDown(e: MouseEvent) {\n if (e.target === (ref?.shadowRoot as ShadowRoot)?.activeElement) {\n openChange(!untrack(open));\n }\n }\n function handleChange(next: dayjs.Dayjs) {\n if (local.value === void 0) {\n setCurrent(next);\n }\n props.onChange?.(next.format(local.parser), next);\n }\n function handleInputChange(e: CustomEvent<string | number | undefined>) {\n if (e.detail) {\n const next = dayjs(e.detail);\n\n if (next.isValid()) {\n handleChange(next);\n }\n }\n }\n\n createEffect(() => {\n if (local.open !== void 0 && local.open !== untrack(open)) {\n setOpen(local.open);\n }\n });\n createEffect(() => {\n const next = dayjs(local.value || local.defaultValue);\n\n if (local.value !== void 0 && next.isValid()) {\n setCurrent(next);\n }\n });\n return (\n <Popover\n trigger=\"none\"\n placement=\"left\"\n open={open()}\n onOpenChange={openChange}\n css={local.css}\n popupCss={styles}\n content={\n <Panel\n type={local.type}\n current={current()}\n open={open()}\n onChange={handleChange}\n openChange={openChange}\n showHour={local.showHour}\n showMinute={local.showMinute}\n showSecond={local.showSecond}\n showTime={local.showTime}\n showToday={local.showToday}\n showHeader={local.showHeader}\n />\n }\n {...other}\n >\n <n-input\n ref={ref}\n onMouseDown={inputMouseDown}\n onFocus={focus}\n onBlur={blur}\n disabled={other.disabled}\n value={current().format(format())}\n suffix-icon={local.suffixIcon}\n prefix-icon={local.prefixIcon}\n placeholder={local.placeholder}\n part=\"value\"\n onChange={handleInputChange}\n />\n </Popover>\n );\n}\n/** API\n * @since 2.1.0\n */\nexport interface DatePickerProps extends Partial<PopoverProps> {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 类型\n * @default 'date'\n */\n type?: keyof typeof PickerType;\n /** 值 */\n value?: string | number;\n /** 默认值\n * @default 当前时间\n */\n defaultValue?: string | number;\n /** 禁用 */\n disabled?: boolean;\n /** 格式化回填到输入框的内容\n * @default 'YYYY-MM-DD'\n */\n format?: string;\n /** 格式化获取的值\n * @default 'YYYY-MM-DD HH:mm:ss'\n */\n parser?: string;\n /** 前缀 */\n prefixIcon?: JSX.Element;\n /** 后缀\n * @default '📅'\n */\n suffixIcon?: JSX.Element;\n /** 变更时的回调 */\n onChange?(val: string, time: dayjs.Dayjs): void;\n /** 显示时间选择\n * @default false\n */\n showTime?: boolean;\n /** 显示小时选择\n * @default true\n **/\n showHour?: boolean;\n /** 显示分钟选择\n * @default true\n **/\n showMinute?: boolean;\n /** 显示秒选择\n * @default true\n **/\n showSecond?: boolean;\n /** 占位文本 */\n placeholder?: string;\n /** 显示今日按钮\n * @default true\n */\n showToday?: boolean;\n /** 显示顶部\n * @default true\n */\n showHeader?: boolean;\n}\n\nenum PickerType {\n /** 日期选择 */\n date = 'date',\n /** 月份选择 */\n month = 'month',\n /** 年份选择 */\n year = 'year',\n}\n\nexport type DatePickerElement = CustomElement<DatePickerProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<DatePickerProps>(\n 'n-data-picker',\n {\n ...defaultProps,\n value: void 0,\n defaultValue: void 0,\n disabled: void 0,\n onChange: void 0,\n open: void 0,\n onOpenChange: void 0,\n type: void 0,\n format: void 0,\n parser: void 0,\n showTime: void 0,\n suffixIcon: '📅',\n prefixIcon: void 0,\n placeholder: void 0,\n showHour: true,\n showMinute: true,\n showSecond: true,\n showToday: true,\n showHeader: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(val: string, time: dayjs.Dayjs) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [val, time],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(DatePicker, props);\n },\n);\nexport default DatePicker;\n"],"names":["PickerType","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","customElement","dayjs","Panel","styles","Popover","defaultProps","DatePicker","_props","ref","props","type","parser","local","other","open","setOpen","current","setCurrent","defaultValue","format","showTime","month","date","year","openChange","next","disabled","onOpenChange","focus","e","stopPropagation","preventDefault","blur","inputMouseDown","target","shadowRoot","activeElement","handleChange","value","onChange","handleInputChange","detail","isValid","css","showHour","showMinute","showSecond","showToday","showHeader","suffixIcon","prefixIcon","placeholder","_","opt","el","element","val","time","dispatchEvent","CustomEvent","removeAttribute"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/from-schema/index.ts"],"sourcesContent":["import { type TreeData } from '../tree';\n\nenum Type {\n string = 'string',\n number = 'number',\n integer = 'integer',\n boolean = 'boolean',\n object = 'object',\n array = 'array',\n}\ninterface BaseSchema {\n type?: keyof typeof Type;\n name?: string;\n title?: string;\n items?: never;\n [key: string]: Any;\n}\ninterface ArraySchema extends Omit<BaseSchema, 'type' | 'items'> {\n type: 'array';\n items: Schema;\n properties?: Record<string, Schema>;\n}\n\ninterface ObjectSchema extends Omit<BaseSchema, 'type'> {\n type?: Exclude<keyof typeof Type, 'array'>;\n properties?: Record<string, Schema>;\n}\n\nexport type Schema = ObjectSchema | ArraySchema;\n\nfunction fromSchema(schema: Schema, pid?: string): TreeData<string>[] {\n const treeData: TreeData<string>[] = [];\n const { properties } = schema;\n\n for (const k in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, k)) {\n const name = k as keyof typeof properties;\n const { properties: _properties, items, type = 'string', ...item } = properties[name];\n\n const node: TreeData<string> = {\n ...item,\n name: name,\n type,\n subTitle: type,\n key: `${pid ? `${pid}.` : ''}${name}`,\n };\n\n if (type === 'object') {\n node.children = fromSchema({ properties: _properties }, node.key);\n } else if (type === 'array') {\n node.children = fromSchema(\n {\n properties: {\n items: {\n ...(items as Schema),\n title: 'items',\n },\n },\n },\n node.key,\n );\n }\n treeData.push(node);\n }\n }\n\n return treeData;\n}\n\nexport default fromSchema;\n"],"names":["Type","string","number","integer","boolean","object","array","fromSchema","schema","pid","treeData","properties","Object","prototype","hasOwnProperty","call","_properties","items","type","item","node","name","subTitle","key","children","title","push"],"mappings":"IAEA,EAAKA,mHAAAA,EAAAA,IAAAA,OACHC,OAAAA,SADGD,EAEHE,OAAAA,SAFGF,EAGHG,QAAAA,UAHGH,EAIHI,QAAAA,UAJGJ,EAKHK,OAAAA,SALGL,EAMHM,MAAAA,OA6DF,gBAvCA,SAASC,EAAWC,CAAc,CAAEC,CAAY,EAC9C,IAAMC,EAA+B,EAAE,CACjC,CAAEC,WAAAA,CAAU,CAAE,CAAGH,EAEvB,IAAK,SAAWG,EACd,GAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,KAAgB,CAEvD,IAAqEA,EAAAA,CAAU,GAAM,CAA/E,CAAEA,WAAYK,CAAW,CAAEC,MAAAA,CAAK,CAAEC,KAAAA,EAAO,QAAQ,CAAW,CAAGP,EAATQ,IAASR,GAA7DA,aAAyBM,QAAOC,SAElCE,EAAyB,KAC1BD,GACHE,IAAI,GACJH,KAAAA,EACAI,SAAUJ,EACVK,IAAK,CAAC,EAAEd,EAAM,CAAC,EAAEA,EAAI,CAAC,CAAC,CAAG,GAAG,IAAO,CAAC,EAGnCS,AAAS,CAAA,WAATA,EACFE,EAAKI,QAAQ,CAAGjB,EAAW,CAAEI,WAAYK,CAAY,EAAGI,EAAKG,GAAG,EAC9C,UAATL,GACTE,CAAAA,EAAKI,QAAQ,CAAGjB,EACd,CACEI,WAAY,CACVM,MAAO,KACDA,GACJQ,MAAO,SAEX,CACF,EACAL,EAAKG,GAAG,CACV,EAEFb,EAASgB,IAAI,CAACN,EAChB,CAGF,OAAOV,CACT"}
1
+ {"version":3,"sources":["../../components/from-schema/index.ts"],"sourcesContent":["import { type TreeData } from '../tree';\n\nenum Type {\n string = 'string',\n number = 'number',\n integer = 'integer',\n boolean = 'boolean',\n object = 'object',\n array = 'array',\n}\ninterface BaseSchema {\n type?: keyof typeof Type;\n name?: string;\n title?: string;\n items?: never;\n [key: string]: Any;\n}\ninterface ArraySchema extends Omit<BaseSchema, 'type' | 'items'> {\n type: 'array';\n items: Schema;\n properties?: Record<string, Schema>;\n}\n\ninterface ObjectSchema extends Omit<BaseSchema, 'type'> {\n type?: Exclude<keyof typeof Type, 'array'>;\n properties?: Record<string, Schema>;\n}\n\nexport type Schema = ObjectSchema | ArraySchema;\n\nfunction fromSchema(schema: Schema, pid?: string): TreeData<string>[] {\n const treeData: TreeData<string>[] = [];\n const { properties } = schema;\n\n for (const k in properties) {\n if (Object.prototype.hasOwnProperty.call(properties, k)) {\n const name = k as keyof typeof properties;\n const { properties: _properties, items, type = 'string', ...item } = properties[name];\n\n const node: TreeData<string> = {\n ...item,\n name: name,\n type,\n subTitle: type,\n key: `${pid ? `${pid}.` : ''}${name}`,\n };\n\n if (type === 'object') {\n node.children = fromSchema({ properties: _properties }, node.key);\n } else if (type === 'array') {\n node.children = fromSchema(\n {\n properties: {\n items: {\n ...(items as Schema),\n title: 'items',\n },\n },\n },\n node.key,\n );\n }\n treeData.push(node);\n }\n }\n\n return treeData;\n}\n\nexport default fromSchema;\n"],"names":["Type","fromSchema","schema","pid","treeData","properties","Object","prototype","hasOwnProperty","call","_properties","items","type","item","node","name","subTitle","key","children","title","push"],"mappings":"MAEKA,mHAAAA,EAAAA,IAAAA,kHAmEL,gBAvCA,SAASC,EAAWC,CAAc,CAAEC,CAAY,EAC9C,IAAMC,EAA+B,EAAE,CACjC,CAAEC,WAAAA,CAAU,CAAE,CAAGH,EAEvB,IAAK,SAAWG,EACd,GAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,KAAgB,CAEvD,IAAqEA,EAAAA,CAAU,GAAM,CAA/E,CAAEA,WAAYK,CAAW,CAAEC,MAAAA,CAAK,CAAEC,KAAAA,EAAO,QAAQ,CAAW,CAAGP,EAATQ,IAASR,GAA7DA,aAAyBM,QAAOC,SAElCE,EAAyB,KAC1BD,GACHE,IAAI,GACJH,KAAAA,EACAI,SAAUJ,EACVK,IAAK,CAAC,EAAEd,EAAM,CAAC,EAAEA,EAAI,CAAC,CAAC,CAAG,GAAG,IAAO,CAAC,EAGnCS,AAAS,CAAA,WAATA,EACFE,EAAKI,QAAQ,CAAGjB,EAAW,CAAEI,WAAYK,CAAY,EAAGI,EAAKG,GAAG,EAC9C,UAATL,GACTE,CAAAA,EAAKI,QAAQ,CAAGjB,EACd,CACEI,WAAY,CACVM,MAAO,KACDA,GACJQ,MAAO,SAEX,CACF,EACAL,EAAKG,GAAG,CACV,EAEFb,EAASgB,IAAI,CAACN,EAChB,CAGF,OAAOV,CACT"}
@@ -8,6 +8,10 @@ export interface InputProps {
8
8
  prefixIcon?: JSX.Element;
9
9
  /** 后缀 */
10
10
  suffixIcon?: JSX.Element;
11
+ /** 大写锁定图标, 可以结合密码输入框使用
12
+ * @since 2.5.2
13
+ */
14
+ capsLockIcon?: JSX.Element;
11
15
  /** 禁用 */
12
16
  disabled?: boolean;
13
17
  /** 自动完成 */
@@ -26,7 +30,7 @@ export interface InputProps {
26
30
  * @default 'text'
27
31
  */
28
32
  type?: 'email' | 'hidden' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url';
29
- /** HTML input accep */
33
+ /** HTML attribute: accept */
30
34
  accept?: string;
31
35
  /** 值 */
32
36
  value?: string | number;
@@ -51,6 +55,7 @@ export declare const defaultInportProps: {
51
55
  css: undefined;
52
56
  suffixIcon: undefined;
53
57
  prefixIcon: undefined;
58
+ capsLockIcon: undefined;
54
59
  size: undefined;
55
60
  disabled: undefined;
56
61
  status: undefined;
package/es/input/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{use as e}from"solid-js/web";import{template as o}from"solid-js/web";import{setAttribute as t}from"solid-js/web";import{insert as l}from"solid-js/web";import{effect as n}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as s}from"solid-js/web";import{className as i}from"solid-js/web";import{addEventListener as a}from"solid-js/web";let u=/*#__PURE__*/o("<style>"),d=/*#__PURE__*/o('<span class="prefix">'),p=/*#__PURE__*/o('<label class="label">'),f=/*#__PURE__*/o('<span class="suffix">'),v=/*#__PURE__*/o('<fieldset><input class="input" part="input">');import{Show as c,createComponent as m,createEffect as b,createMemo as w,createSignal as y,mergeProps as h}from"solid-js";import $ from"@moneko/common/lib/isFunction";import{css as _,cx as g}from"@moneko/css";import{customElement as x}from"solid-element";import{style as j}from"./style";import C from"../theme";function I(o){let r;let{baseStyle:m}=C,[h,x]=y();function I(e){var t;null==o.onChange||o.onChange.call(o,function(e){if(o.parser)return $(o.parser)?o.parser(e):o.parser;if("number"===o.type&&"string"==typeof e){let o=e.replace(/[^\d]/g,"");return o.length?parseFloat(o):void 0}return e}(null==(t=e.target)?void 0:t.value))}function k(e){null==o.onMouseDown||o.onMouseDown.call(o,e)}function D(e){null==o.onKeyDown||o.onKeyDown.call(o,e)}function K(e){null==o.onBlur||o.onBlur.call(o,e)}function z(e){null==o.onKeyUp||o.onKeyUp.call(o,e)}let E=w(()=>o.formatter?$(o.formatter)?o.formatter(o.value):o.formatter:o.value);return b(()=>{o.label&&x(`.label {--x: ${(null==r?void 0:r.offsetLeft)||0}px;opacity:1;}`)}),[(()=>{let e=u();return l(e,m,null),l(e,j,null),l(e,h,null),l(e,()=>_(o.css),null),e})(),(()=>{let u=v(),m=u.firstChild,b=r;return l(u,s(c,{get when(){return o.prefixIcon},get children(){let e=d();return l(e,()=>o.prefixIcon),e}}),m),a(m,"blur",K),a(m,"keyup",z,!0),a(m,"keydown",D,!0),a(m,"mousedown",k,!0),a(m,"change",I),"function"==typeof b?e(b,m):r=m,l(u,s(c,{get when(){return o.label},get children(){let e=p();return l(e,()=>o.label),e}}),null),l(u,s(c,{get when(){return o.suffixIcon},get children(){let e=f();return l(e,()=>o.suffixIcon),e}}),null),n(e=>{let l=g("fieldset",o.size,o.status,o.class),n=o.disabled,r=o.type,s=o.autoComplete,a=o.accept,d=o.placeholder;return l!==e._v$&&i(u,e._v$=l),n!==e._v$2&&(u.disabled=e._v$2=n),r!==e._v$3&&t(m,"type",e._v$3=r),s!==e._v$4&&t(m,"autocomplete",e._v$4=s),a!==e._v$5&&t(m,"accept",e._v$5=a),d!==e._v$6&&t(m,"placeholder",e._v$6=d),e},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0}),n(()=>m.value=E()),u})()]}export const defaultInportProps={class:void 0,css:void 0,suffixIcon:void 0,prefixIcon:void 0,size:void 0,disabled:void 0,status:void 0,type:void 0,label:void 0,value:void 0,defaultValue:void 0,formatter:void 0,parser:void 0,onChange:void 0,onMouseDown:void 0,onKeyDown:void 0,accept:void 0,autoComplete:void 0,placeholder:"请输入"};x("n-input",defaultInportProps,(e,o)=>{let t=o.element,l=h({css:t.css,size:t.size||"normal",value:t.value||t.defaultValue||"",type:t.type||"text",onChange(e){t.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return m(I,l)});export default I;r(["keydown","keyup","mousedown"]);
1
+ import{use as e}from"solid-js/web";import{template as o}from"solid-js/web";import{setAttribute as t}from"solid-js/web";import{memo as l}from"solid-js/web";import{insert as n}from"solid-js/web";import{effect as r}from"solid-js/web";import{delegateEvents as s}from"solid-js/web";import{createComponent as i}from"solid-js/web";import{className as a}from"solid-js/web";import{addEventListener as u}from"solid-js/web";let p=/*#__PURE__*/o("<style>"),d=/*#__PURE__*/o('<span class="prefix">'),c=/*#__PURE__*/o('<label class="label">'),f=/*#__PURE__*/o('<span class="caps-lock">'),v=/*#__PURE__*/o('<span class="suffix">'),m=/*#__PURE__*/o('<fieldset><input class="input" part="input">');import{Show as w,createComponent as b,createEffect as h,createMemo as g,createSignal as y,mergeProps as $}from"solid-js";import _ from"@moneko/common/lib/isFunction";import{css as x,cx as k}from"@moneko/css";import{customElement as I}from"solid-element";import{style as j}from"./style";import C from"../theme";function L(o){let s;let{baseStyle:b}=C,[$,I]=y(),[L,D]=y(!1);function K(e){var t;null==o.onChange||o.onChange.call(o,function(e){if(o.parser)return _(o.parser)?o.parser(e):o.parser;if("number"===o.type&&"string"==typeof e){let o=e.replace(/[^\d]/g,"");return o.length?parseFloat(o):void 0}return e}(null==(t=e.target)?void 0:t.value))}function z(e){null==o.onMouseDown||o.onMouseDown.call(o,e)}function E(e){o.capsLockIcon&&D(e.getModifierState("CapsLock")),null==o.onKeyDown||o.onKeyDown.call(o,e)}function M(e){null==o.onBlur||o.onBlur.call(o,e)}function B(e){null==o.onKeyUp||o.onKeyUp.call(o,e)}let F=g(()=>o.formatter?_(o.formatter)?o.formatter(o.value):o.formatter:o.value);return h(()=>{o.label&&I(`.label {--x: ${(null==s?void 0:s.offsetLeft)||0}px;opacity:1;}`)}),[(()=>{let e=p();return n(e,b,null),n(e,j,null),n(e,$,null),n(e,()=>x(o.css),null),e})(),(()=>{let p=m(),b=p.firstChild,h=s;return n(p,i(w,{get when(){return o.prefixIcon},get children(){let e=d();return n(e,()=>o.prefixIcon),e}}),b),u(b,"blur",M),u(b,"keyup",B,!0),u(b,"keydown",E,!0),u(b,"mousedown",z,!0),u(b,"change",K),"function"==typeof h?e(h,b):s=b,n(p,i(w,{get when(){return o.label},get children(){let e=c();return n(e,()=>o.label),e}}),null),n(p,i(w,{get when(){return l(()=>!!o.capsLockIcon)()&&L()},get children(){let e=f();return n(e,()=>o.capsLockIcon),e}}),null),n(p,i(w,{get when(){return o.suffixIcon},get children(){let e=v();return n(e,()=>o.suffixIcon),e}}),null),r(e=>{let l=k("fieldset",o.size,o.status,o.class),n=o.disabled,r=o.type,s=o.autoComplete,i=o.accept,u=o.placeholder;return l!==e._v$&&a(p,e._v$=l),n!==e._v$2&&(p.disabled=e._v$2=n),r!==e._v$3&&t(b,"type",e._v$3=r),s!==e._v$4&&t(b,"autocomplete",e._v$4=s),i!==e._v$5&&t(b,"accept",e._v$5=i),u!==e._v$6&&t(b,"placeholder",e._v$6=u),e},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0}),r(()=>b.value=F()),p})()]}export const defaultInportProps={class:void 0,css:void 0,suffixIcon:void 0,prefixIcon:void 0,capsLockIcon:void 0,size:void 0,disabled:void 0,status:void 0,type:void 0,label:void 0,value:void 0,defaultValue:void 0,formatter:void 0,parser:void 0,onChange:void 0,onMouseDown:void 0,onKeyDown:void 0,accept:void 0,autoComplete:void 0,placeholder:"请输入"};I("n-input",defaultInportProps,(e,o)=>{let t=o.element,l=$({css:t.css,size:t.size||"normal",value:t.value||t.defaultValue||"",type:t.type||"text",onChange(e){t.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return b(L,l)});export default L;s(["keydown","keyup","mousedown"]);
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/input/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement } from '..';\n\nexport interface InputProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 前缀 */\n prefixIcon?: JSX.Element;\n /** 后缀 */\n suffixIcon?: JSX.Element;\n /** 禁用 */\n disabled?: boolean;\n /** 自动完成 */\n autoComplete?: string;\n /** 占位文本 */\n placeholder?: string;\n /** 组件尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 描述 */\n label?: JSX.Element;\n /** 状态 */\n status?: 'error' | 'warning' | 'success';\n /** 类型\n * @default 'text'\n */\n type?: 'email' | 'hidden' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url';\n /** HTML input accep */\n accept?: string;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 值变更时触发的函数 */\n onChange?: (value: InputProps['value']) => void;\n onKeyDown?(e: KeyboardEvent): void;\n onMouseDown?(e: MouseEvent): void;\n onFocus?(e: FocusEvent): void;\n onBlur?(e: FocusEvent): void;\n onKeyUp?(e: KeyboardEvent): void;\n /** 指定输入框展示值的格式 */\n formatter?: (value?: InputProps['value']) => InputProps['value'];\n /** 搭配 formatter 使用, 将转换后的值转回原来的值 */\n parser?: (value?: InputProps['value']) => InputProps['value'];\n}\n\nfunction Input(props: InputProps) {\n const { baseStyle } = theme;\n let inputRef: HTMLInputElement | undefined;\n const [x, setX] = createSignal<string>();\n\n function parserValue(val: InputProps['value']) {\n if (props.parser) {\n return isFunction(props.parser) ? props.parser(val) : props.parser;\n } else if (props.type === 'number' && typeof val === 'string') {\n const num = val.replace(/[^\\d]/g, '');\n\n return num.length ? parseFloat(num) : void 0;\n }\n return val;\n }\n\n function handleInput(e: Event & { target: HTMLInputElement }) {\n props.onChange?.(parserValue(e.target?.value));\n }\n function handleMouseDown(e: MouseEvent) {\n props.onMouseDown?.(e);\n }\n function handleKeyDown(e: KeyboardEvent) {\n props.onKeyDown?.(e);\n }\n function handleBlur(e: FocusEvent) {\n props.onBlur?.(e);\n }\n function handleKeyUp(e: KeyboardEvent) {\n props.onKeyUp?.(e);\n }\n\n const value = createMemo(() => {\n if (props.formatter) {\n return isFunction(props.formatter) ? props.formatter(props.value) : props.formatter;\n }\n return props.value;\n });\n\n createEffect(() => {\n if (props.label) {\n setX(`.label {--x: ${inputRef?.offsetLeft || 0}px;opacity:1;}`);\n }\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {x()}\n {css(props.css)}\n </style>\n <fieldset\n class={cx('fieldset', props.size, props.status, props.class)}\n disabled={props.disabled}\n >\n <Show when={props.prefixIcon}>\n <span class=\"prefix\">{props.prefixIcon}</span>\n </Show>\n <input\n ref={inputRef}\n class=\"input\"\n part=\"input\"\n onChange={handleInput}\n type={props.type}\n value={value()}\n autocomplete={props.autoComplete}\n accept={props.accept}\n placeholder={props.placeholder}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onBlur={handleBlur}\n />\n <Show when={props.label}>\n <label class=\"label\">{props.label}</label>\n </Show>\n <Show when={props.suffixIcon}>\n <span class=\"suffix\">{props.suffixIcon}</span>\n </Show>\n </fieldset>\n </>\n );\n}\n\nexport type InputElement = CustomElement<InputProps>;\n\nexport const defaultInportProps = {\n class: void 0,\n css: void 0,\n suffixIcon: void 0,\n prefixIcon: void 0,\n size: void 0,\n disabled: void 0,\n status: void 0,\n type: void 0,\n label: void 0,\n value: void 0,\n defaultValue: void 0,\n formatter: void 0,\n parser: void 0,\n onChange: void 0,\n onMouseDown: void 0,\n onKeyDown: void 0,\n accept: void 0,\n autoComplete: void 0,\n placeholder: '请输入',\n};\n\ncustomElement<InputProps>('n-input', defaultInportProps, (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n size: el.size || 'normal',\n value: el.value || el.defaultValue || '',\n type: el.type || 'text',\n onChange(val?: number | string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(Input, props);\n});\n\nexport default Input;\n"],"names":["Show","createComponent","createEffect","createMemo","createSignal","mergeProps","isFunction","css","cx","customElement","style","theme","Input","props","inputRef","baseStyle","x","setX","handleInput","e","onChange","parserValue","val","parser","type","num","replace","length","parseFloat","target","value","handleMouseDown","onMouseDown","handleKeyDown","onKeyDown","handleBlur","onBlur","handleKeyUp","onKeyUp","formatter","label","offsetLeft","prefixIcon","suffixIcon","size","status","class","disabled","autoComplete","accept","placeholder","defaultInportProps","defaultValue","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"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"}
1
+ {"version":3,"sources":["../../components/input/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement } from '..';\n\nexport interface InputProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 前缀 */\n prefixIcon?: JSX.Element;\n /** 后缀 */\n suffixIcon?: JSX.Element;\n /** 大写锁定图标, 可以结合密码输入框使用\n * @since 2.5.2\n */\n capsLockIcon?: JSX.Element;\n /** 禁用 */\n disabled?: boolean;\n /** 自动完成 */\n autoComplete?: string;\n /** 占位文本 */\n placeholder?: string;\n /** 组件尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 描述 */\n label?: JSX.Element;\n /** 状态 */\n status?: 'error' | 'warning' | 'success';\n /** 类型\n * @default 'text'\n */\n type?: 'email' | 'hidden' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'url';\n /** HTML attribute: accept */\n accept?: string;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 值变更时触发的函数 */\n onChange?: (value: InputProps['value']) => void;\n onKeyDown?(e: KeyboardEvent): void;\n onMouseDown?(e: MouseEvent): void;\n onFocus?(e: FocusEvent): void;\n onBlur?(e: FocusEvent): void;\n onKeyUp?(e: KeyboardEvent): void;\n /** 指定输入框展示值的格式 */\n formatter?: (value?: InputProps['value']) => InputProps['value'];\n /** 搭配 formatter 使用, 将转换后的值转回原来的值 */\n parser?: (value?: InputProps['value']) => InputProps['value'];\n}\n\nfunction Input(props: InputProps) {\n const { baseStyle } = theme;\n let inputRef: HTMLInputElement | undefined;\n const [x, setX] = createSignal<string>();\n const [capsLock, setCapsLock] = createSignal(false);\n\n function parserValue(val: InputProps['value']) {\n if (props.parser) {\n return isFunction(props.parser) ? props.parser(val) : props.parser;\n } else if (props.type === 'number' && typeof val === 'string') {\n const num = val.replace(/[^\\d]/g, '');\n\n return num.length ? parseFloat(num) : void 0;\n }\n return val;\n }\n\n function handleInput(e: Event & { target: HTMLInputElement }) {\n props.onChange?.(parserValue(e.target?.value));\n }\n function handleMouseDown(e: MouseEvent) {\n props.onMouseDown?.(e);\n }\n function handleKeyDown(e: KeyboardEvent) {\n if (props.capsLockIcon) {\n setCapsLock(e.getModifierState('CapsLock'));\n }\n props.onKeyDown?.(e);\n }\n function handleBlur(e: FocusEvent) {\n props.onBlur?.(e);\n }\n function handleKeyUp(e: KeyboardEvent) {\n props.onKeyUp?.(e);\n }\n\n const value = createMemo(() => {\n if (props.formatter) {\n return isFunction(props.formatter) ? props.formatter(props.value) : props.formatter;\n }\n return props.value;\n });\n\n createEffect(() => {\n if (props.label) {\n setX(`.label {--x: ${inputRef?.offsetLeft || 0}px;opacity:1;}`);\n }\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {x()}\n {css(props.css)}\n </style>\n <fieldset\n class={cx('fieldset', props.size, props.status, props.class)}\n disabled={props.disabled}\n >\n <Show when={props.prefixIcon}>\n <span class=\"prefix\">{props.prefixIcon}</span>\n </Show>\n <input\n ref={inputRef}\n class=\"input\"\n part=\"input\"\n onChange={handleInput}\n type={props.type}\n value={value()}\n autocomplete={props.autoComplete}\n accept={props.accept}\n placeholder={props.placeholder}\n onMouseDown={handleMouseDown}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onBlur={handleBlur}\n />\n <Show when={props.label}>\n <label class=\"label\">{props.label}</label>\n </Show>\n <Show when={props.capsLockIcon && capsLock()}>\n <span class=\"caps-lock\">{props.capsLockIcon}</span>\n </Show>\n <Show when={props.suffixIcon}>\n <span class=\"suffix\">{props.suffixIcon}</span>\n </Show>\n </fieldset>\n </>\n );\n}\n\nexport type InputElement = CustomElement<InputProps>;\n\nexport const defaultInportProps = {\n class: void 0,\n css: void 0,\n suffixIcon: void 0,\n prefixIcon: void 0,\n capsLockIcon: void 0,\n size: void 0,\n disabled: void 0,\n status: void 0,\n type: void 0,\n label: void 0,\n value: void 0,\n defaultValue: void 0,\n formatter: void 0,\n parser: void 0,\n onChange: void 0,\n onMouseDown: void 0,\n onKeyDown: void 0,\n accept: void 0,\n autoComplete: void 0,\n placeholder: '请输入',\n};\n\ncustomElement<InputProps>('n-input', defaultInportProps, (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n size: el.size || 'normal',\n value: el.value || el.defaultValue || '',\n type: el.type || 'text',\n onChange(val?: number | string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(Input, props);\n});\n\nexport default Input;\n"],"names":["Show","createComponent","createEffect","createMemo","createSignal","mergeProps","isFunction","css","cx","customElement","style","theme","Input","props","inputRef","baseStyle","x","setX","capsLock","setCapsLock","handleInput","e","onChange","parserValue","val","parser","type","num","replace","length","parseFloat","target","value","handleMouseDown","onMouseDown","handleKeyDown","capsLockIcon","getModifierState","onKeyDown","handleBlur","onBlur","handleKeyUp","onKeyUp","formatter","label","offsetLeft","prefixIcon","suffixIcon","size","status","class","disabled","autoComplete","accept","placeholder","defaultInportProps","defaultValue","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"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"}
package/es/input/style.js CHANGED
@@ -172,7 +172,8 @@ import{css as r}from"@moneko/css";export const style=r`
172
172
  margin-inline-end: 4px;
173
173
  }
174
174
 
175
- .suffix {
175
+ .suffix,
176
+ .caps-lock {
176
177
  margin-inline-start: 4px;
177
178
  }
178
179
  `;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/input/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .label {\n --x: 0;\n\n position: absolute;\n overflow: hidden;\n border-radius: var(--border-radius);\n padding: 0 4px;\n text-overflow: ellipsis;\n color: var(--text-secondary);\n opacity: 0;\n transition:\n transform var(--transition-duration),\n opacity var(--transition-duration),\n color var(--transition-duration),\n background-color var(--transition-duration);\n line-height: 1.45;\n pointer-events: none;\n transform-origin: left;\n max-inline-size: 100%;\n word-break: keep-all;\n }\n\n .normal {\n padding: 4px 10px;\n font-size: var(--font-size);\n line-height: 1.5;\n\n .label {\n transform: translate3d(calc(var(--x, 0) - 10px), 0, 1px);\n }\n }\n\n .large {\n padding: 6px 16px;\n font-size: var(--font-size-lg);\n line-height: 1.5;\n\n .label {\n transform: translate3d(calc(var(--x, 0) - 16px), 0, 1px);\n }\n }\n\n .small {\n padding: 2px;\n font-size: var(--font-size-sm);\n line-height: 20px;\n\n .label {\n transform: translate3d(calc(var(--x, 0) - 2px), 0, 1px);\n }\n }\n\n .input {\n overflow: hidden;\n border: none;\n font-size: inherit;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: inherit;\n inline-size: inherit;\n background: none;\n outline: none;\n appearance: none;\n flex: 1;\n\n &::placeholder {\n opacity: 0;\n transition:\n color var(--transition-duration),\n opacity var(--transition-duration);\n }\n\n &:focus::placeholder {\n opacity: 1;\n }\n\n &:not(:placeholder-shown) + .label,\n &:focus + .label {\n background: var(--component-bg);\n transform: translate3d(0, calc(-50% - 0.43em), 1px) scale(0.8);\n }\n\n &:focus + .label {\n color: var(--primary-color);\n }\n\n &:not(:placeholder-shown, :focus) + .label {\n color: var(--text-color);\n }\n }\n\n .fieldset {\n position: relative;\n display: flex;\n margin: 0;\n border: 1px solid var(--border-color);\n border-radius: var(--border-radius);\n color: var(--text-color);\n background-color: var(--component-bg);\n transition: all var(--transition-duration);\n inline-size: 100%;\n background-image: none;\n box-sizing: border-box;\n accent-color: var(--primary-color, #5794ff);\n\n &:hover {\n border-color: var(--primary-hover, #80b3ff);\n border-inline-end-width: 1px;\n }\n\n &:focus-within {\n border-color: var(--primary-hover, #80b3ff);\n border-inline-end-width: 1px;\n outline: 0;\n box-shadow: 0 0 0 2px var(--primary-outline);\n }\n\n &:invalid,\n &.error {\n --border-color: var(--error-border);\n --primary-hover: var(--error-hover);\n --primary-outline: var(--error-outline);\n --primary-color: var(--error-color);\n\n .label {\n --text-color: var(--error-color);\n }\n }\n\n &.success {\n --border-color: var(--success-border);\n --primary-hover: var(--success-hover);\n --primary-outline: var(--success-outline);\n --primary-color: var(--success-color);\n\n .label {\n --text-color: var(--success-color);\n }\n }\n\n &.warning {\n --border-color: var(--warning-border);\n --primary-hover: var(--warning-hover);\n --primary-outline: var(--warning-outline);\n --primary-color: var(--warning-color);\n\n .label {\n --text-color: var(--warning-color);\n }\n }\n\n &:disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --primary-hover: var(--disable-border);\n\n background-color: var(--disable-bg);\n cursor: not-allowed;\n\n .input {\n pointer-events: none;\n\n &:not(:placeholder-shown) + .label {\n background: var(--disable-border);\n }\n }\n }\n }\n\n .prefix {\n margin-inline-end: 4px;\n }\n\n .suffix {\n margin-inline-start: 4px;\n }\n`;\n"],"names":["css","style"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiLzB,CAAC,AAAC"}
1
+ {"version":3,"sources":["../../components/input/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .label {\n --x: 0;\n\n position: absolute;\n overflow: hidden;\n border-radius: var(--border-radius);\n padding: 0 4px;\n text-overflow: ellipsis;\n color: var(--text-secondary);\n opacity: 0;\n transition:\n transform var(--transition-duration),\n opacity var(--transition-duration),\n color var(--transition-duration),\n background-color var(--transition-duration);\n line-height: 1.45;\n pointer-events: none;\n transform-origin: left;\n max-inline-size: 100%;\n word-break: keep-all;\n }\n\n .normal {\n padding: 4px 10px;\n font-size: var(--font-size);\n line-height: 1.5;\n\n .label {\n transform: translate3d(calc(var(--x, 0) - 10px), 0, 1px);\n }\n }\n\n .large {\n padding: 6px 16px;\n font-size: var(--font-size-lg);\n line-height: 1.5;\n\n .label {\n transform: translate3d(calc(var(--x, 0) - 16px), 0, 1px);\n }\n }\n\n .small {\n padding: 2px;\n font-size: var(--font-size-sm);\n line-height: 20px;\n\n .label {\n transform: translate3d(calc(var(--x, 0) - 2px), 0, 1px);\n }\n }\n\n .input {\n overflow: hidden;\n border: none;\n font-size: inherit;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: inherit;\n inline-size: inherit;\n background: none;\n outline: none;\n appearance: none;\n flex: 1;\n\n &::placeholder {\n opacity: 0;\n transition:\n color var(--transition-duration),\n opacity var(--transition-duration);\n }\n\n &:focus::placeholder {\n opacity: 1;\n }\n\n &:not(:placeholder-shown) + .label,\n &:focus + .label {\n background: var(--component-bg);\n transform: translate3d(0, calc(-50% - 0.43em), 1px) scale(0.8);\n }\n\n &:focus + .label {\n color: var(--primary-color);\n }\n\n &:not(:placeholder-shown, :focus) + .label {\n color: var(--text-color);\n }\n }\n\n .fieldset {\n position: relative;\n display: flex;\n margin: 0;\n border: 1px solid var(--border-color);\n border-radius: var(--border-radius);\n color: var(--text-color);\n background-color: var(--component-bg);\n transition: all var(--transition-duration);\n inline-size: 100%;\n background-image: none;\n box-sizing: border-box;\n accent-color: var(--primary-color, #5794ff);\n\n &:hover {\n border-color: var(--primary-hover, #80b3ff);\n border-inline-end-width: 1px;\n }\n\n &:focus-within {\n border-color: var(--primary-hover, #80b3ff);\n border-inline-end-width: 1px;\n outline: 0;\n box-shadow: 0 0 0 2px var(--primary-outline);\n }\n\n &:invalid,\n &.error {\n --border-color: var(--error-border);\n --primary-hover: var(--error-hover);\n --primary-outline: var(--error-outline);\n --primary-color: var(--error-color);\n\n .label {\n --text-color: var(--error-color);\n }\n }\n\n &.success {\n --border-color: var(--success-border);\n --primary-hover: var(--success-hover);\n --primary-outline: var(--success-outline);\n --primary-color: var(--success-color);\n\n .label {\n --text-color: var(--success-color);\n }\n }\n\n &.warning {\n --border-color: var(--warning-border);\n --primary-hover: var(--warning-hover);\n --primary-outline: var(--warning-outline);\n --primary-color: var(--warning-color);\n\n .label {\n --text-color: var(--warning-color);\n }\n }\n\n &:disabled {\n --text-color: var(--disable-color);\n --border-color: var(--disable-border);\n --primary-hover: var(--disable-border);\n\n background-color: var(--disable-bg);\n cursor: not-allowed;\n\n .input {\n pointer-events: none;\n\n &:not(:placeholder-shown) + .label {\n background: var(--disable-border);\n }\n }\n }\n }\n\n .prefix {\n margin-inline-end: 4px;\n }\n\n .suffix,\n .caps-lock {\n margin-inline-start: 4px;\n }\n`;\n"],"names":["css","style"],"mappings":"AAAA,OAASA,OAAAA,CAAG,KAAQ,aAAc,AAElC,QAAO,MAAMC,MAAQD,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkLzB,CAAC,AAAC"}
@@ -1,3 +1,3 @@
1
- var e,t;import{_ as o}from"@swc/helpers/_/_extends";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{getOwner as p}from"solid-js/web";import{createComponent as u}from"solid-js/web";import{addEventListener as m}from"solid-js/web";let a=/*#__PURE__*/r("<style>"),d=/*#__PURE__*/r("<span>"),c=/*#__PURE__*/r("<div>"),g=/*#__PURE__*/r("<n-empty>",!0,!1);import{Show as f,createComponent as h,createEffect as v,createMemo as w,createSignal as b,mergeProps as x,onCleanup as C,onMount as M,splitProps as j}from"solid-js";import y from"@moneko/common/lib/isElementInside";import k from"@moneko/common/lib/isEqual";import E from"@moneko/common/lib/isFunction";import L from"@moneko/common/lib/passiveSupported";import{css as O,cx as P}from"@moneko/css";import{customElement as T}from"solid-element";import{Portal as R}from"solid-js/web";import{popoverCss as $,portalCss as W}from"./style";import"../empty";import S from"../theme";export var TriggerOption;(e=TriggerOption||(TriggerOption={}))./** 鼠标移入 */hover="hover",e./** 点击 */click="click",e./** 右键 */contextMenu="contextMenu",e./** 无 */none="none";export var Placement;function z(e){let t,r,h,T;let{isDark:z,baseStyle:I}=S,_=x({trigger:"hover"},e),[B]=j(_,["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[H,A]=b(null),[D,q]=b({}),[F,N]=b(!1),[X,Y]=b("");function G(e){B.disabled||(B.onOpenChange&&B.onOpenChange(e),void 0===B.open&&A(e))}function J(){!1===H()&&(A(null),G(null))}function K(e){clearTimeout(h),h=setTimeout(()=>{var o;if(clearTimeout(h),(null==(o=e.target)?void 0:o.getAttribute("handle-closed"))==="false")return;let n=y(e.target,t);(H()&&!n||n&&"mousedown"!==e.type)&&G(!1)},"hover"===B.trigger?300:0)}v(()=>{void 0!==B.open&&A(B.open)}),v(()=>{H()&&B.dropdownMatchSelectWidth&&r&&Y(`.portal {width: ${r.offsetWidth}px;}`)});let Q=function(e){clearTimeout(T),T=setTimeout(()=>{if(clearTimeout(T),!t||!r||!e&&"contextMenu"===B.trigger)return;if((null==e?void 0:e.type)==="scroll"&&"contextMenu"===B.trigger){G(!1);return}let o=r.getBoundingClientRect(),n=t.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*t.offsetHeight&&l>o.top||(null==s?void 0:s.startsWith("bottom")),u=B.arrow?8:4,m={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":m.left=o.left,m["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":m.left=o.right-n.width,m["--x"]=n.width/2-16;break;default:m.left=Math.abs(i>o.left?o.left:o.left-i),m["--x"]=-(m.left-o.left+i)}p?m.top=o.bottom+u:m.bottom=window.innerHeight-o.top+u,q(e=>k(e,m)?e:m),N(e=>!p===e?e:!p)},32)};function U(e){clearTimeout(h),e.stopPropagation(),"contextMenu"===B.trigger&&"contextmenu"===e.type&&(e.preventDefault(),q(n=>o({},n,{left:e.clientX,top:e.clientY,"--x":-((null==t?void 0:t.getBoundingClientRect().width)||0)/2+16}))),G(!0)}let V=w(()=>E(B.getPopupContainer)?B.getPopupContainer(r):document.body),Z=w(()=>{let e={},t={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:null}[B.trigger],o={hover:"onMouseLeave",click:null,contextMenu:null,none:null}[B.trigger];return Object.assign(e,t&&{[t]:U},o&&{[o]:K}),e}),ee=w(()=>{let e=D();// max-block-size: calc(100vb - ${(up() ? p.bottom : p.top) || 0}px);
2
- return`.portal {${Object.keys(e).map(t=>`${t}:${e[t]}px;`).join("")}z-index: 1;}`}),et=w(()=>P("portal",B.arrow&&"arrow",`${H()?"in":"out"}-${F()?"up":"down"}`,B.size,B.popupClass)),eo=w(()=>`:host {--popover-bg: ${z()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return v(()=>{H()&&(Q(),window.addEventListener("scroll",Q,{passive:L})),C(()=>{window.removeEventListener("scroll",Q,!1)})}),M(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",K,!1)}),C(()=>{clearTimeout(h),document.documentElement.removeEventListener("mousedown",K,!1)}),[(()=>{let e=a();return s(e,I,null),s(e,$,null),s(e,()=>O(B.css),null),e})(),(()=>{let e=d(),t=r;return"function"==typeof t?n(t,e):r=e,i(e,l({get class(){return P("popover",B.size,B.class)}},Z),!1,!0),s(e,()=>B.children),e})(),u(f,{get when(){return null!==H()||!B.destroyInactive},get children(){return u(R,{useShadow:!0,get mount(){return V()},get children(){return[(()=>{let e=a();return s(e,I,null),s(e,W,null),s(e,eo,null),s(e,ee,null),s(e,X,null),s(e,()=>O(B.popupCss),null),e})(),(()=>{let e=c(),o=t;return m(e,"animationend",J),"function"==typeof o?n(o,e):t=e,i(e,l({get class(){return et()}},Z),!1,!0),s(e,u(f,{get when(){return B.content},get fallback(){return(()=>{let e=g();return e._$owner=p(),e})()},get children(){return B.content}})),e})()]}})}})]}(t=Placement||(Placement={}))./** 左下 */bottomLeft="bottomLeft",t./** 下 */bottom="bottom",t./** 右下 */bottomRight="bottomRight",t./** 左上 */topLeft="topLeft",t./** 上 */top="top",t./** 右上 */topRight="topRight",t./** 左 */left="left",t./** 右 */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,(e,t)=>{let o=t.element,n=x({onOpenChange(e){o.dispatchEvent(new CustomEvent("openchange",{detail:e}))},children:[...o.childNodes.values()]},e);return v(()=>{o.removeAttribute("css")}),h(z,n)});export default z;
1
+ var e,t;import{_ as o}from"@swc/helpers/_/_extends";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{getOwner as p}from"solid-js/web";import{createComponent as u}from"solid-js/web";import{addEventListener as m}from"solid-js/web";let a=/*#__PURE__*/r("<style>"),d=/*#__PURE__*/r("<span>"),c=/*#__PURE__*/r("<div>"),g=/*#__PURE__*/r("<n-empty>",!0,!1);import{Show as f,createComponent as h,createEffect as v,createMemo as w,createSignal as b,mergeProps as x,onCleanup as C,onMount as M,splitProps as j}from"solid-js";import y from"@moneko/common/lib/isElementInside";import k from"@moneko/common/lib/isEqual";import E from"@moneko/common/lib/isFunction";import L from"@moneko/common/lib/passiveSupported";import{css as O,cx as P}from"@moneko/css";import{customElement as T}from"solid-element";import{Portal as R}from"solid-js/web";import{popoverCss as $,portalCss as W}from"./style";import"../empty";import S from"../theme";export var TriggerOption;(e=TriggerOption||(TriggerOption={})).hover="hover",e.click="click",e.contextMenu="contextMenu",e.none="none";export var Placement;function z(e){let t,r,h,T;let{isDark:z,baseStyle:I}=S,_=x({trigger:"hover"},e),[B]=j(_,["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[H,A]=b(null),[D,q]=b({}),[F,N]=b(!1),[X,Y]=b("");function G(e){B.disabled||(B.onOpenChange&&B.onOpenChange(e),void 0===B.open&&A(e))}function J(){!1===H()&&(A(null),G(null))}function K(e){clearTimeout(h),h=setTimeout(()=>{var o;if(clearTimeout(h),(null==(o=e.target)?void 0:o.getAttribute("handle-closed"))==="false")return;let n=y(e.target,t);(H()&&!n||n&&"mousedown"!==e.type)&&G(!1)},"hover"===B.trigger?300:0)}v(()=>{void 0!==B.open&&A(B.open)}),v(()=>{H()&&B.dropdownMatchSelectWidth&&r&&Y(`.portal {width: ${r.offsetWidth}px;}`)});let Q=function(e){clearTimeout(T),T=setTimeout(()=>{if(clearTimeout(T),!t||!r||!e&&"contextMenu"===B.trigger)return;if((null==e?void 0:e.type)==="scroll"&&"contextMenu"===B.trigger){G(!1);return}let o=r.getBoundingClientRect(),n=t.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*t.offsetHeight&&l>o.top||(null==s?void 0:s.startsWith("bottom")),u=B.arrow?8:4,m={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":m.left=o.left,m["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":m.left=o.right-n.width,m["--x"]=n.width/2-16;break;default:m.left=Math.abs(i>o.left?o.left:o.left-i),m["--x"]=-(m.left-o.left+i)}p?m.top=o.bottom+u:m.bottom=window.innerHeight-o.top+u,q(e=>k(e,m)?e:m),N(e=>!p===e?e:!p)},32)};function U(e){clearTimeout(h),e.stopPropagation(),"contextMenu"===B.trigger&&"contextmenu"===e.type&&(e.preventDefault(),q(n=>o({},n,{left:e.clientX,top:e.clientY,"--x":-((null==t?void 0:t.getBoundingClientRect().width)||0)/2+16}))),G(!0)}let V=w(()=>E(B.getPopupContainer)?B.getPopupContainer(r):document.body),Z=w(()=>{let e={},t={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:null}[B.trigger],o={hover:"onMouseLeave",click:null,contextMenu:null,none:null}[B.trigger];return Object.assign(e,t&&{[t]:U},o&&{[o]:K}),e}),ee=w(()=>{let e=D();// max-block-size: calc(100vb - ${(up() ? p.bottom : p.top) || 0}px);
2
+ return`.portal {${Object.keys(e).map(t=>`${t}:${e[t]}px;`).join("")}z-index: 1;}`}),et=w(()=>P("portal",B.arrow&&"arrow",`${H()?"in":"out"}-${F()?"up":"down"}`,B.size,B.popupClass)),eo=w(()=>`:host {--popover-bg: ${z()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return v(()=>{H()&&(Q(),window.addEventListener("scroll",Q,{passive:L})),C(()=>{window.removeEventListener("scroll",Q,!1)})}),M(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",K,!1)}),C(()=>{clearTimeout(h),document.documentElement.removeEventListener("mousedown",K,!1)}),[(()=>{let e=a();return s(e,I,null),s(e,$,null),s(e,()=>O(B.css),null),e})(),(()=>{let e=d(),t=r;return"function"==typeof t?n(t,e):r=e,i(e,l({get class(){return P("popover",B.size,B.class)}},Z),!1,!0),s(e,()=>B.children),e})(),u(f,{get when(){return null!==H()||!B.destroyInactive},get children(){return u(R,{useShadow:!0,get mount(){return V()},get children(){return[(()=>{let e=a();return s(e,I,null),s(e,W,null),s(e,eo,null),s(e,ee,null),s(e,X,null),s(e,()=>O(B.popupCss),null),e})(),(()=>{let e=c(),o=t;return m(e,"animationend",J),"function"==typeof o?n(o,e):t=e,i(e,l({get class(){return et()}},Z),!1,!0),s(e,u(f,{get when(){return B.content},get fallback(){return(()=>{let e=g();return e._$owner=p(),e})()},get children(){return B.content}})),e})()]}})}})]}(t=Placement||(Placement={})).bottomLeft="bottomLeft",t.bottom="bottom",t.bottomRight="bottomRight",t.topLeft="topLeft",t.top="top",t.topRight="topRight",t.left="left",t.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,(e,t)=>{let o=t.element,n=x({onOpenChange(e){o.dispatchEvent(new CustomEvent("openchange",{detail:e}))},children:[...o.childNodes.values()]},e);return v(()=>{o.removeAttribute("css")}),h(z,n)});export default z;
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/popover/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n splitProps,\n} from 'solid-js';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { Portal } from 'solid-js/web';\nimport { popoverCss, portalCss } from './style';\nimport '../empty';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement } from '..';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSX.Element) | JSX.Element;\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?: JSX.Element;\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\ntype Posi = {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n};\n\ntype EventMap = {\n click: string | null;\n hover: string | null;\n contextMenu: string | null;\n none: null;\n [key: string]: string | null;\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 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: null,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: null,\n contextMenu: null,\n none: null,\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 // max-block-size: calc(100vb - ${(up() ? p.bottom : p.top) || 0}px);\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>\n {baseStyle()}\n {popoverCss}\n {css(local.css)}\n </style>\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>\n {baseStyle()}\n {portalCss}\n {hostStyle()}\n {portalStyle()}\n {width()}\n {css(local.popupCss)}\n </style>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<n-empty />}>\n {local.content as JSX.Element}\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 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 el.removeAttribute('css');\n });\n return createComponent(Popover, props);\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","Show","createComponent","createEffect","createMemo","createSignal","mergeProps","onCleanup","onMount","splitProps","isElementInside","isEqual","isFunction","passiveSupported","css","cx","customElement","Portal","popoverCss","portalCss","theme","hover","click","contextMenu","none","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","mp","trigger","local","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","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","bottomLeft","bottomRight","topLeft","topRight","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values","removeAttribute"],"mappings":"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"}
1
+ {"version":3,"sources":["../../components/popover/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n splitProps,\n} from 'solid-js';\nimport { isElementInside, isEqual, isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { Portal } from 'solid-js/web';\nimport { popoverCss, portalCss } from './style';\nimport '../empty';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement } from '..';\n\nexport interface PopoverProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n content?: (() => JSX.Element) | JSX.Element;\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?: JSX.Element;\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\ntype Posi = {\n left?: number;\n top?: number;\n right?: number;\n bottom?: number;\n '--x'?: number;\n};\n\ntype EventMap = {\n click: string | null;\n hover: string | null;\n contextMenu: string | null;\n none: null;\n [key: string]: string | null;\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 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: null,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: null,\n contextMenu: null,\n none: null,\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 // max-block-size: calc(100vb - ${(up() ? p.bottom : p.top) || 0}px);\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>\n {baseStyle()}\n {popoverCss}\n {css(local.css)}\n </style>\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>\n {baseStyle()}\n {portalCss}\n {hostStyle()}\n {portalStyle()}\n {width()}\n {css(local.popupCss)}\n </style>\n <div ref={ref} onAnimationEnd={exit} class={portalCls()} {...childrenProps()}>\n <Show when={local.content} fallback={<n-empty />}>\n {local.content as JSX.Element}\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 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 el.removeAttribute('css');\n });\n return createComponent(Popover, props);\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","Show","createComponent","createEffect","createMemo","createSignal","mergeProps","onCleanup","onMount","splitProps","isElementInside","isEqual","isFunction","passiveSupported","css","cx","customElement","Portal","popoverCss","portalCss","theme","Popover","props","ref","childRef","closeTimer","portalTimer","isDark","baseStyle","mp","trigger","local","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","removeAttribute"],"mappings":"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"}
@@ -2,7 +2,7 @@ import type { CustomElement } from '..';
2
2
  export interface SwitchProps {
3
3
  /** 自定义类名 */
4
4
  class?: string;
5
- /** 自定义类名 */
5
+ /** 自定义样式表 */
6
6
  css?: string;
7
7
  /** 值 */
8
8
  checked?: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/switch/index.tsx"],"sourcesContent":["import { createComponent, createEffect, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface SwitchProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 值 */\n checked?: boolean;\n /** 只读 */\n disabled?: boolean;\n /** 设置 为 true 时的文案 */\n checkedText?: string;\n /** 设置 为 false 时的文案 */\n unCheckedText?: string;\n /** 加载状态 */\n loading?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n}\n\nexport type SwitchElement = CustomElement<SwitchProps>;\n\nfunction Switch(props: SwitchProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(false);\n\n function change() {\n if (!props.disabled && !props.loading) {\n setValue((prev) => !prev);\n props.onChange?.(value());\n }\n }\n\n function onKeyUp({ key }: { key: string }) {\n if (key === 'Enter') {\n change();\n }\n }\n\n createEffect(() => {\n setValue(!!props.checked);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <span\n class={cx('switch', props.class, value() && 'checked', props.loading && 'loading')}\n text-on={props.checkedText}\n text-off={props.unCheckedText}\n aria-disabled={props.disabled}\n onClick={change}\n onKeyUp={onKeyUp}\n tabindex={props.disabled || props.loading ? -1 : 0}\n />\n </>\n );\n}\n\ncustomElement<SwitchProps>(\n 'n-switch',\n {\n class: void 0,\n css: void 0,\n checked: void 0,\n disabled: void 0,\n checkedText: void 0,\n unCheckedText: void 0,\n loading: false,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n checked: el.checked,\n disabled: el.disabled,\n checkedText: el.checkedText,\n unCheckedText: el.unCheckedText,\n loading: el.loading,\n onChange(val: boolean) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(Switch, props);\n },\n);\nexport default Switch;\n"],"names":["createComponent","createEffect","createSignal","mergeProps","css","cx","customElement","style","theme","Switch","props","baseStyle","value","setValue","change","disabled","loading","prev","onChange","onKeyUp","key","checked","class","checkedText","unCheckedText","_","opt","el","element","val","dispatchEvent","CustomEvent","detail","removeAttribute"],"mappings":"iWAAA,QAASA,mBAAAA,CAAe,CAAEC,gBAAAA,CAAY,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACnF,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAASC,SAAAA,CAAK,KAAQ,SAAU,AAChC,QAAOC,MAAW,UAAW,CAwB7B,SAASC,EAAOC,CAAkB,EAChC,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGH,EAChB,CAACI,EAAOC,EAAS,CAAGX,EAAa,CAAA,GAEvC,SAASY,IACFJ,EAAMK,QAAQ,EAAKL,EAAMM,OAAO,GACnCH,EAAS,AAACI,GAAS,CAACA,SACpBP,EAAMQ,QAAQ,EAAdR,EAAMQ,QAAQ,MAAdR,EAAiBE,KAErB,CAEA,SAASO,EAAQ,CAAEC,IAAAA,CAAG,CAAmB,EAC3B,UAARA,GACFN,GAEJ,CAMA,OAJAb,EAAa,KACXY,EAAS,CAAC,CAACH,EAAMW,OAAO,CAC1B,+BAKOV,YACAJ,gBACAH,EAAIM,EAAMN,GAAG,iDAQLe,kBADAL,kBAJFT,EAAG,SAAUK,EAAMY,KAAK,CAAEV,KAAW,UAAWF,EAAMM,OAAO,EAAI,aAC/DN,EAAMa,WAAW,GAChBb,EAAMc,aAAa,GACdd,EAAMK,QAAQ,GAGnBL,EAAMK,QAAQ,EAAIL,EAAMM,OAAO,CAAG,GAAK,gQAIzD,CAEAV,EACE,WACA,CACEgB,MAAO,KAAK,EACZlB,IAAK,KAAK,EACViB,QAAS,KAAK,EACdN,SAAU,KAAK,EACfQ,YAAa,KAAK,EAClBC,cAAe,KAAK,EACpBR,QAAS,CAAA,EACTE,SAAU,KAAK,CACjB,EACA,CAACO,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBlB,EAAQP,EACZ,CACEC,IAAKuB,EAAGvB,GAAG,CACXiB,QAASM,EAAGN,OAAO,CACnBN,SAAUY,EAAGZ,QAAQ,CACrBQ,YAAaI,EAAGJ,WAAW,CAC3BC,cAAeG,EAAGH,aAAa,CAC/BR,QAASW,EAAGX,OAAO,CACnBE,SAASW,CAAY,EACnBF,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQH,CACV,GAEJ,CACF,EACAJ,GAMF,OAHAxB,EAAa,KACX0B,EAAGM,eAAe,CAAC,MACrB,GACOjC,EAAgBS,EAAQC,EACjC,EAEF,gBAAeD,CAAO"}
1
+ {"version":3,"sources":["../../components/switch/index.tsx"],"sourcesContent":["import { createComponent, createEffect, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface SwitchProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 值 */\n checked?: boolean;\n /** 只读 */\n disabled?: boolean;\n /** 设置 为 true 时的文案 */\n checkedText?: string;\n /** 设置 为 false 时的文案 */\n unCheckedText?: string;\n /** 加载状态 */\n loading?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n}\n\nexport type SwitchElement = CustomElement<SwitchProps>;\n\nfunction Switch(props: SwitchProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(false);\n\n function change() {\n if (!props.disabled && !props.loading) {\n setValue((prev) => !prev);\n props.onChange?.(value());\n }\n }\n\n function onKeyUp({ key }: { key: string }) {\n if (key === 'Enter') {\n change();\n }\n }\n\n createEffect(() => {\n setValue(!!props.checked);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <span\n class={cx('switch', props.class, value() && 'checked', props.loading && 'loading')}\n text-on={props.checkedText}\n text-off={props.unCheckedText}\n aria-disabled={props.disabled}\n onClick={change}\n onKeyUp={onKeyUp}\n tabindex={props.disabled || props.loading ? -1 : 0}\n />\n </>\n );\n}\n\ncustomElement<SwitchProps>(\n 'n-switch',\n {\n class: void 0,\n css: void 0,\n checked: void 0,\n disabled: void 0,\n checkedText: void 0,\n unCheckedText: void 0,\n loading: false,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n checked: el.checked,\n disabled: el.disabled,\n checkedText: el.checkedText,\n unCheckedText: el.unCheckedText,\n loading: el.loading,\n onChange(val: boolean) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(Switch, props);\n },\n);\nexport default Switch;\n"],"names":["createComponent","createEffect","createSignal","mergeProps","css","cx","customElement","style","theme","Switch","props","baseStyle","value","setValue","change","disabled","loading","prev","onChange","onKeyUp","key","checked","class","checkedText","unCheckedText","_","opt","el","element","val","dispatchEvent","CustomEvent","detail","removeAttribute"],"mappings":"iWAAA,QAASA,mBAAAA,CAAe,CAAEC,gBAAAA,CAAY,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACnF,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAASC,SAAAA,CAAK,KAAQ,SAAU,AAChC,QAAOC,MAAW,UAAW,CAwB7B,SAASC,EAAOC,CAAkB,EAChC,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGH,EAChB,CAACI,EAAOC,EAAS,CAAGX,EAAa,CAAA,GAEvC,SAASY,IACFJ,EAAMK,QAAQ,EAAKL,EAAMM,OAAO,GACnCH,EAAS,AAACI,GAAS,CAACA,SACpBP,EAAMQ,QAAQ,EAAdR,EAAMQ,QAAQ,MAAdR,EAAiBE,KAErB,CAEA,SAASO,EAAQ,CAAEC,IAAAA,CAAG,CAAmB,EAC3B,UAARA,GACFN,GAEJ,CAMA,OAJAb,EAAa,KACXY,EAAS,CAAC,CAACH,EAAMW,OAAO,CAC1B,+BAKOV,YACAJ,gBACAH,EAAIM,EAAMN,GAAG,iDAQLe,kBADAL,kBAJFT,EAAG,SAAUK,EAAMY,KAAK,CAAEV,KAAW,UAAWF,EAAMM,OAAO,EAAI,aAC/DN,EAAMa,WAAW,GAChBb,EAAMc,aAAa,GACdd,EAAMK,QAAQ,GAGnBL,EAAMK,QAAQ,EAAIL,EAAMM,OAAO,CAAG,GAAK,gQAIzD,CAEAV,EACE,WACA,CACEgB,MAAO,KAAK,EACZlB,IAAK,KAAK,EACViB,QAAS,KAAK,EACdN,SAAU,KAAK,EACfQ,YAAa,KAAK,EAClBC,cAAe,KAAK,EACpBR,QAAS,CAAA,EACTE,SAAU,KAAK,CACjB,EACA,CAACO,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBlB,EAAQP,EACZ,CACEC,IAAKuB,EAAGvB,GAAG,CACXiB,QAASM,EAAGN,OAAO,CACnBN,SAAUY,EAAGZ,QAAQ,CACrBQ,YAAaI,EAAGJ,WAAW,CAC3BC,cAAeG,EAAGH,aAAa,CAC/BR,QAASW,EAAGX,OAAO,CACnBE,SAASW,CAAY,EACnBF,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQH,CACV,GAEJ,CACF,EACAJ,GAMF,OAHAxB,EAAa,KACX0B,EAAGM,eAAe,CAAC,MACrB,GACOjC,EAAgBS,EAAQC,EACjC,EAEF,gBAAeD,CAAO"}