neko-ui 2.8.1 → 2.8.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 (159) hide show
  1. package/README.md +2 -0
  2. package/es/back-top/index.js +1 -1
  3. package/es/back-top/index.js.map +1 -1
  4. package/es/button/index.d.ts +1 -0
  5. package/es/button/index.js +1 -1
  6. package/es/button/index.js.map +1 -1
  7. package/es/capture-screen/index.js +1 -1
  8. package/es/capture-screen/index.js.map +1 -1
  9. package/es/carousel/index.js +1 -1
  10. package/es/carousel/index.js.map +1 -1
  11. package/es/checkbox/index.js +1 -1
  12. package/es/checkbox/index.js.map +1 -1
  13. package/es/code/index.js +1 -1
  14. package/es/code/index.js.map +1 -1
  15. package/es/color-palette/index.js +1 -1
  16. package/es/color-palette/index.js.map +1 -1
  17. package/es/color-picker/index.js +1 -1
  18. package/es/color-picker/index.js.map +1 -1
  19. package/es/cron/index.js +1 -1
  20. package/es/cron/index.js.map +1 -1
  21. package/es/date-picker/date.js +1 -1
  22. package/es/date-picker/date.js.map +1 -1
  23. package/es/date-picker/dayjs.js +1 -1
  24. package/es/date-picker/dayjs.js.map +1 -1
  25. package/es/date-picker/index.js +1 -1
  26. package/es/date-picker/index.js.map +1 -1
  27. package/es/date-picker/month.js +1 -1
  28. package/es/date-picker/month.js.map +1 -1
  29. package/es/date-picker/panel.js +1 -1
  30. package/es/date-picker/panel.js.map +1 -1
  31. package/es/date-picker/year.js +1 -1
  32. package/es/date-picker/year.js.map +1 -1
  33. package/es/dropdown/index.js +1 -1
  34. package/es/dropdown/index.js.map +1 -1
  35. package/es/img/index.js +1 -1
  36. package/es/img/index.js.map +1 -1
  37. package/es/input/index.js +1 -1
  38. package/es/input/index.js.map +1 -1
  39. package/es/input-number/index.js +2 -2
  40. package/es/input-number/index.js.map +1 -1
  41. package/es/md/index.js +1 -1
  42. package/es/md/index.js.map +1 -1
  43. package/es/menu/index.js +1 -1
  44. package/es/menu/index.js.map +1 -1
  45. package/es/modal/index.js +1 -1
  46. package/es/modal/index.js.map +1 -1
  47. package/es/notification/notification.js +1 -1
  48. package/es/notification/notification.js.map +1 -1
  49. package/es/pagination/index.js +1 -1
  50. package/es/pagination/index.js.map +1 -1
  51. package/es/popover/index.js +1 -1
  52. package/es/popover/index.js.map +1 -1
  53. package/es/provider/index.js +1 -1
  54. package/es/provider/index.js.map +1 -1
  55. package/es/radio/index.js +1 -1
  56. package/es/radio/index.js.map +1 -1
  57. package/es/segmented/index.js +3 -3
  58. package/es/segmented/index.js.map +1 -1
  59. package/es/select/index.js +1 -1
  60. package/es/select/index.js.map +1 -1
  61. package/es/skeleton/index.js +3 -3
  62. package/es/skeleton/index.js.map +1 -1
  63. package/es/spin/index.js +2 -2
  64. package/es/spin/index.js.map +1 -1
  65. package/es/switch/index.js +1 -1
  66. package/es/switch/index.js.map +1 -1
  67. package/es/table/index.js +1 -1
  68. package/es/table/index.js.map +1 -1
  69. package/es/tabs/index.d.ts +5 -0
  70. package/es/tabs/index.js +2 -2
  71. package/es/tabs/index.js.map +1 -1
  72. package/es/tag/index.js +3 -3
  73. package/es/tag/index.js.map +1 -1
  74. package/es/tree/index.js +1 -1
  75. package/es/tree/index.js.map +1 -1
  76. package/es/tree/register.js +1 -1
  77. package/es/tree/register.js.map +1 -1
  78. package/es/typography/index.js +3 -3
  79. package/es/typography/index.js.map +1 -1
  80. package/lib/back-top/index.js +1 -1
  81. package/lib/back-top/index.js.map +1 -1
  82. package/lib/button/index.d.ts +1 -0
  83. package/lib/button/index.js +1 -1
  84. package/lib/button/index.js.map +1 -1
  85. package/lib/capture-screen/index.js +1 -1
  86. package/lib/capture-screen/index.js.map +1 -1
  87. package/lib/carousel/index.js +1 -1
  88. package/lib/carousel/index.js.map +1 -1
  89. package/lib/checkbox/index.js +1 -1
  90. package/lib/checkbox/index.js.map +1 -1
  91. package/lib/code/index.js +1 -1
  92. package/lib/code/index.js.map +1 -1
  93. package/lib/color-palette/index.js +1 -1
  94. package/lib/color-palette/index.js.map +1 -1
  95. package/lib/color-picker/index.js +1 -1
  96. package/lib/color-picker/index.js.map +1 -1
  97. package/lib/cron/index.js +1 -1
  98. package/lib/cron/index.js.map +1 -1
  99. package/lib/date-picker/date.js +1 -1
  100. package/lib/date-picker/date.js.map +1 -1
  101. package/lib/date-picker/dayjs.js +1 -1
  102. package/lib/date-picker/dayjs.js.map +1 -1
  103. package/lib/date-picker/index.js +1 -1
  104. package/lib/date-picker/index.js.map +1 -1
  105. package/lib/date-picker/month.js +1 -1
  106. package/lib/date-picker/month.js.map +1 -1
  107. package/lib/date-picker/panel.js +1 -1
  108. package/lib/date-picker/panel.js.map +1 -1
  109. package/lib/date-picker/year.js +1 -1
  110. package/lib/date-picker/year.js.map +1 -1
  111. package/lib/dropdown/index.js +1 -1
  112. package/lib/dropdown/index.js.map +1 -1
  113. package/lib/img/index.js +1 -1
  114. package/lib/img/index.js.map +1 -1
  115. package/lib/input/index.js +1 -1
  116. package/lib/input/index.js.map +1 -1
  117. package/lib/input-number/index.js +1 -1
  118. package/lib/input-number/index.js.map +1 -1
  119. package/lib/md/index.js +1 -1
  120. package/lib/md/index.js.map +1 -1
  121. package/lib/menu/index.js +1 -1
  122. package/lib/menu/index.js.map +1 -1
  123. package/lib/modal/index.js +1 -1
  124. package/lib/modal/index.js.map +1 -1
  125. package/lib/notification/notification.js +1 -1
  126. package/lib/notification/notification.js.map +1 -1
  127. package/lib/pagination/index.js +1 -1
  128. package/lib/pagination/index.js.map +1 -1
  129. package/lib/popover/index.js +1 -1
  130. package/lib/popover/index.js.map +1 -1
  131. package/lib/provider/index.js +1 -1
  132. package/lib/provider/index.js.map +1 -1
  133. package/lib/radio/index.js +1 -1
  134. package/lib/radio/index.js.map +1 -1
  135. package/lib/segmented/index.js +1 -1
  136. package/lib/segmented/index.js.map +1 -1
  137. package/lib/select/index.js +1 -1
  138. package/lib/select/index.js.map +1 -1
  139. package/lib/skeleton/index.js +4 -4
  140. package/lib/skeleton/index.js.map +1 -1
  141. package/lib/spin/index.js +1 -1
  142. package/lib/spin/index.js.map +1 -1
  143. package/lib/switch/index.js +1 -1
  144. package/lib/switch/index.js.map +1 -1
  145. package/lib/table/index.js +1 -1
  146. package/lib/table/index.js.map +1 -1
  147. package/lib/tabs/index.d.ts +5 -0
  148. package/lib/tabs/index.js +2 -2
  149. package/lib/tabs/index.js.map +1 -1
  150. package/lib/tag/index.js +2 -2
  151. package/lib/tag/index.js.map +1 -1
  152. package/lib/tree/index.js +1 -1
  153. package/lib/tree/index.js.map +1 -1
  154. package/lib/tree/register.js +1 -1
  155. package/lib/tree/register.js.map +1 -1
  156. package/lib/typography/index.js +1 -1
  157. package/lib/typography/index.js.map +1 -1
  158. package/package.json +10 -11
  159. package/umd/index.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/modal/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n untrack,\n} from 'solid-js';\nimport { cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { Portal } from 'solid-js/web';\nimport modalStore from './store';\nimport { style } from './style';\nimport '../button';\nimport type { CustomElement } from '..';\n\n/**\n * API\n * @since 2.6.0\n */\nexport interface ModalProps {\n /** 是否打开模态框 */\n open?: OpenStateKey;\n /** 开启关闭的回调函数 */\n onOpenChange?: (open: OpenStateKey) => void;\n /** 点击遮罩关闭\n * @default true\n */\n maskClosable?: boolean;\n /** 通过 `esc` 按键关闭\n * @default true\n */\n escClosable?: boolean;\n /**\n * 自定义关闭图标, 设置为 null 或 false 时隐藏关闭按钮\n */\n closeIcon?: JSX.Element | null;\n /** 内容 */\n content: JSX.Element;\n /** 标题 */\n title?: JSX.Element;\n /** 遮罩模糊\n * @default false\n */\n maskBlur?: boolean;\n}\n\n/**\n * OpenStateKey\n */\nexport enum OpenState {\n /** 完全关闭 */\n closed = 'closed',\n /** 正在关闭 */\n closeing = 'closeing',\n /** 打开 */\n open = 'open',\n}\nexport type OpenStateKey = keyof typeof OpenState;\nexport type ModalElement = CustomElement<ModalProps, 'onOpenChange'>;\n\nfunction Modal(props: ModalProps) {\n const doc = document.documentElement;\n const { setNum } = modalStore;\n const [open, setOpen] = createSignal<OpenStateKey>('closed');\n const [posi, setPosi] = createSignal({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n let portal: HTMLDivElement | undefined;\n\n const getCss = createMemo(() => {\n const { x, y, width, height } = posi();\n\n return `.portal { --y: ${-(y - height / 2)}px;--x: ${-(x - width / 2)}px;}`;\n });\n\n function openChange(visi: OpenStateKey) {\n setOpen(visi);\n props.onOpenChange?.(visi);\n }\n function preventDefault(e: Event) {\n e.preventDefault();\n }\n function close(e: KeyboardEvent | Event) {\n preventDefault(e);\n if (e.type === 'keydown') {\n if (props.escClosable && (e as KeyboardEvent).key === 'Escape') {\n openChange(OpenState.closeing);\n }\n } else {\n openChange(OpenState.closeing);\n }\n }\n function handleDestroy() {\n if (open() === OpenState.closeing) {\n openChange(OpenState.closed);\n }\n }\n function portalClick(e: Event) {\n preventDefault(e);\n if (props.maskClosable && e.target === portal) {\n openChange(OpenState.closeing);\n }\n }\n\n createEffect(() => {\n if (props.open !== void 0 && props.open !== untrack(open)) {\n setOpen(props.open);\n }\n });\n\n function point(e: MouseEvent) {\n setPosi((prev) => ({\n ...prev,\n x: doc.clientWidth / 2 - e.clientX,\n y: doc.clientHeight / 2 - e.clientY,\n }));\n }\n createEffect(() => {\n if (open() === OpenState.open) {\n setNum((prev) => prev + 1);\n doc.addEventListener('mousewheel', preventDefault, {\n passive: false,\n });\n\n if (props.escClosable) {\n doc.addEventListener('keydown', close, false);\n }\n } else if (open() === OpenState.closeing) {\n setNum((prev) => prev - 1);\n } else {\n doc.addEventListener('click', point, true);\n }\n\n onCleanup(() => {\n doc.removeEventListener('mousewheel', preventDefault, false);\n doc.removeEventListener('keydown', close, false);\n doc.removeEventListener('click', point, true);\n });\n });\n const closeIcon = createMemo(() => {\n if (props.closeIcon === null || props.closeIcon === false) {\n return null;\n }\n if (['function', 'object'].includes(typeof props.closeIcon)) {\n return () => <span class=\"modal-close\">{props.closeIcon}</span>;\n }\n return () => (\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n {props.closeIcon}\n </n-button>\n );\n });\n\n return (\n <Show when={open() !== OpenState.closed}>\n <Portal useShadow={true}>\n <style>\n {getCss()}\n {style}\n </style>\n <div\n ref={portal}\n class={cx(\n 'portal',\n open() === OpenState.open ? 'open' : 'closeing',\n props.maskBlur && 'mask-blur',\n )}\n onAnimationEnd={handleDestroy}\n onClick={portalClick}\n >\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <strong class=\"modal-title\">{props.title}</strong>\n </div>\n <Show when={props.closeIcon === void 0} fallback={closeIcon() as JSXElement}>\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n ⛌\n </n-button>\n </Show>\n <div class=\"modal-body\">{props.content}</div>\n {/* <div class=\"modal-footer\">{props.footer}</div> */}\n </div>\n </div>\n </Portal>\n </Show>\n );\n}\n\ncustomElement<ModalProps>(\n 'n-modal',\n {\n open: 'closed' as OpenStateKey,\n maskClosable: true,\n escClosable: true,\n onOpenChange: void 0,\n closeIcon: void 0,\n content: void 0,\n title: void 0,\n maskBlur: void 0,\n },\n (_, opt) => {\n const props = mergeProps(\n {\n onOpenChange(open: OpenStateKey) {\n opt.element.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(Modal, props);\n },\n);\nexport default Modal;\n"],"names":["OpenState","Show","createComponent","createEffect","createMemo","createSignal","mergeProps","onCleanup","untrack","cx","customElement","Portal","modalStore","style","Modal","props","portal","doc","document","documentElement","setNum","open","setOpen","posi","setPosi","x","y","width","height","getCss","openChange","visi","onOpenChange","preventDefault","e","close","type","escClosable","key","handleDestroy","portalClick","maskClosable","target","point","prev","clientWidth","clientX","clientHeight","clientY","addEventListener","passive","removeEventListener","closeIcon","includes","title","content","maskBlur","_","opt","element","dispatchEvent","CustomEvent","detail"],"rangeMappings":"","mappings":"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"}
1
+ {"version":3,"sources":["../../components/modal/index.tsx"],"sourcesContent":["import {\n Show,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport { Portal } from 'solid-js/web';\nimport modalStore from './store';\nimport { style } from './style';\nimport '../button';\nimport type { CustomElement } from '..';\n\n/**\n * API\n * @since 2.6.0\n */\nexport interface ModalProps {\n /** 是否打开模态框 */\n open?: OpenStateKey;\n /** 开启关闭的回调函数 */\n onOpenChange?: (open: OpenStateKey) => void;\n /** 点击遮罩关闭\n * @default true\n */\n maskClosable?: boolean;\n /** 通过 `esc` 按键关闭\n * @default true\n */\n escClosable?: boolean;\n /**\n * 自定义关闭图标, 设置为 null 或 false 时隐藏关闭按钮\n */\n closeIcon?: JSX.Element | null;\n /** 内容 */\n content: JSX.Element;\n /** 标题 */\n title?: JSX.Element;\n /** 遮罩模糊\n * @default false\n */\n maskBlur?: boolean;\n}\n\n/**\n * OpenStateKey\n */\nexport enum OpenState {\n /** 完全关闭 */\n closed = 'closed',\n /** 正在关闭 */\n closeing = 'closeing',\n /** 打开 */\n open = 'open',\n}\nexport type OpenStateKey = keyof typeof OpenState;\nexport type ModalElement = CustomElement<ModalProps, 'onOpenChange'>;\n\nfunction Modal(props: ModalProps) {\n const doc = document.documentElement;\n const { setNum } = modalStore;\n const [open, setOpen] = createSignal<OpenStateKey>('closed');\n const [posi, setPosi] = createSignal({\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n });\n let portal: HTMLDivElement | undefined;\n\n const getCss = createMemo(() => {\n const { x, y, width, height } = posi();\n\n return `.portal { --y: ${-(y - height / 2)}px;--x: ${-(x - width / 2)}px;}`;\n });\n\n function openChange(visi: OpenStateKey) {\n setOpen(visi);\n props.onOpenChange?.(visi);\n }\n function preventDefault(e: Event) {\n e.preventDefault();\n }\n function close(e: KeyboardEvent | Event) {\n preventDefault(e);\n if (e.type === 'keydown') {\n if (props.escClosable && (e as KeyboardEvent).key === 'Escape') {\n openChange(OpenState.closeing);\n }\n } else {\n openChange(OpenState.closeing);\n }\n }\n function handleDestroy() {\n if (open() === OpenState.closeing) {\n openChange(OpenState.closed);\n }\n }\n function portalClick(e: Event) {\n preventDefault(e);\n if (props.maskClosable && e.target === portal) {\n openChange(OpenState.closeing);\n }\n }\n\n createEffect(() => {\n if (props.open !== void 0 && props.open !== untrack(open)) {\n setOpen(props.open);\n }\n });\n\n function point(e: MouseEvent) {\n setPosi((prev) => ({\n ...prev,\n x: doc.clientWidth / 2 - e.clientX,\n y: doc.clientHeight / 2 - e.clientY,\n }));\n }\n createEffect(() => {\n if (open() === OpenState.open) {\n setNum((prev) => prev + 1);\n doc.addEventListener('mousewheel', preventDefault, {\n passive: false,\n });\n\n if (props.escClosable) {\n doc.addEventListener('keydown', close, false);\n }\n } else if (open() === OpenState.closeing) {\n setNum((prev) => prev - 1);\n } else {\n doc.addEventListener('click', point, true);\n }\n\n onCleanup(() => {\n doc.removeEventListener('mousewheel', preventDefault, false);\n doc.removeEventListener('keydown', close, false);\n doc.removeEventListener('click', point, true);\n });\n });\n const closeIcon = createMemo(() => {\n if (props.closeIcon === null || props.closeIcon === false) {\n return null;\n }\n if (['function', 'object'].includes(typeof props.closeIcon)) {\n return () => <span class=\"modal-close\">{props.closeIcon}</span>;\n }\n return () => (\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n {props.closeIcon}\n </n-button>\n );\n });\n\n return (\n <Show when={open() !== OpenState.closed}>\n <Portal useShadow={true}>\n <style>\n {getCss()}\n {style}\n </style>\n <div\n ref={portal}\n class=\"portal\"\n classList={{\n open: open() === OpenState.open,\n closeing: open() !== OpenState.open,\n 'mask-blur': props.maskBlur,\n }}\n onAnimationEnd={handleDestroy}\n onClick={portalClick}\n >\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <strong class=\"modal-title\">{props.title}</strong>\n </div>\n <Show when={props.closeIcon === void 0} fallback={closeIcon() as JSXElement}>\n <n-button class=\"modal-close\" danger={true} circle={true} flat={true} onClick={close}>\n ⛌\n </n-button>\n </Show>\n <div class=\"modal-body\">{props.content}</div>\n {/* <div class=\"modal-footer\">{props.footer}</div> */}\n </div>\n </div>\n </Portal>\n </Show>\n );\n}\n\ncustomElement<ModalProps>(\n 'n-modal',\n {\n open: 'closed' as OpenStateKey,\n maskClosable: true,\n escClosable: true,\n onOpenChange: void 0,\n closeIcon: void 0,\n content: void 0,\n title: void 0,\n maskBlur: void 0,\n },\n (_, opt) => {\n const props = mergeProps(\n {\n onOpenChange(open: OpenStateKey) {\n opt.element.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n return <Modal {...props} />;\n },\n);\nexport default Modal;\n"],"names":["OpenState","Show","createEffect","createMemo","createSignal","mergeProps","onCleanup","untrack","customElement","Portal","modalStore","style","Modal","props","portal","doc","document","documentElement","setNum","open","setOpen","posi","setPosi","x","y","width","height","getCss","openChange","visi","onOpenChange","preventDefault","e","close","type","escClosable","key","handleDestroy","portalClick","maskClosable","target","point","prev","clientWidth","clientX","clientHeight","clientY","addEventListener","passive","removeEventListener","closeIcon","includes","title","content","maskBlur","_","opt","element","dispatchEvent","CustomEvent","detail"],"rangeMappings":"","mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as o}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{className as i}from"solid-js/web";let n=e("<style>"),s=e('<span class="close">'),m=e('<div><div class="content">');import{For as c,Show as d,createEffect as a,createUniqueId as u}from"solid-js";import{cx as f}from"@moneko/css";import{render as p}from"solid-js/web";import h from"./queque";import{styles as g}from"./styles";import w from"../theme";let b="n-notification-box";export default((e,r,y=3e3,j,v)=>{let k=u(),{list:x,add:q,remove:C}=h,{baseStyle:E}=w,I=document.getElementById(b);if(q({type:e,icon:v,children:r,close:j,uniqueId:k}),y&&y>0){let e=setTimeout(()=>{C(k),clearTimeout(e)},y)}if(!I){(I=document.createElement("div")).id=b,I.style.position="fixed",I.style.insetBlockStart="16px",I.style.insetInlineStart="50%",I.style.transform="translateX(-50%)",I.attachShadow({mode:"open"});let e=p(()=>(a(()=>{0===x().length&&(e(),null==I||I.remove())}),l(d,{get when(){return x().length},get children(){return[(()=>{let e=n();return t(e,E,null),t(e,g,null),e})(),l(c,{get each(){return x()},children:e=>(()=>{let r=m(),n=r.firstChild;return t(r,l(d,{get when(){return e.icon},get children(){return e.icon}}),n),t(n,()=>e.children),t(r,l(d,{get when(){return e.close},get children(){let t=s();return t.$$click=()=>C(e.uniqueId),t}}),null),o(()=>i(r,f("notification",e.type,e.closeing&&"closeing"))),r})()})]}})),I.shadowRoot);document.body.appendChild(I)}return k});r(["click"]);
1
+ import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as o}from"solid-js/web";import{delegateEvents as r}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{className as i}from"solid-js/web";let n=e("<style>"),s=e('<span class="close">'),m=e('<div><div class="content">');import{For as d,Show as c,createEffect as a,createUniqueId as u}from"solid-js";import{cx as f}from"@moneko/css";import{render as p}from"solid-js/web";import h from"./queque";import{styles as g}from"./styles";import v from"../theme";let w="n-notification-box";export default((e,r,b=3e3,y,j)=>{let $=u(),{list:_,add:k,remove:x}=h,{baseStyle:q}=v,C=document.getElementById(w);if(k({type:e,icon:j,children:r,close:y,uniqueId:$}),b&&b>0){let e=setTimeout(()=>{x($),clearTimeout(e)},b)}if(!C){(C=document.createElement("div")).id=w,C.style.position="fixed",C.style.insetBlockStart="16px",C.style.insetInlineStart="50%",C.style.transform="translateX(-50%)",C.attachShadow({mode:"open"});let e=p(()=>(a(()=>{0===_().length&&(e(),null==C||C.remove())}),l(c,{get when(){return _().length},get children(){return[(()=>{let e=n();return t(e,q,null),t(e,g,null),e})(),l(d,{get each(){return _()},children:e=>(()=>{let r=m(),n=r.firstChild;return t(r,l(c,{get when(){return e.icon},get children(){return e.icon}}),n),t(n,()=>e.children),t(r,l(c,{get when(){return e.close},get children(){let t=s();return t.$$click=()=>x(e.uniqueId),t}}),null),o(t=>{let o=f("notification",e.type),l=!!e.closeing;return o!==t._v$&&i(r,t._v$=o),l!==t._v$2&&r.classList.toggle("closeing",t._v$2=l),t},{_v$:void 0,_v$2:void 0}),r})()})]}})),C.shadowRoot);document.body.appendChild(C)}return $});r(["click"]);
2
2
  //# sourceMappingURL=notification.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/notification/notification.tsx"],"sourcesContent":["import { For, Show, createEffect, createUniqueId } from 'solid-js';\nimport { cx } from '@moneko/css';\nimport { render } from 'solid-js/web';\nimport queque, { type NotificationType } from './queque';\nimport { styles } from './styles';\nimport theme from '../theme';\n\nconst mountId = 'n-notification-box';\n\nconst notification = (\n type: keyof typeof NotificationType,\n children: JSX.Element,\n duration = 3000,\n close?: boolean,\n icon?: JSX.Element,\n) => {\n const uniqueId = createUniqueId();\n const { list, add, remove } = queque;\n const { baseStyle } = theme;\n let mount = document.getElementById(mountId);\n\n add({\n type,\n icon,\n children,\n close,\n uniqueId,\n });\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n remove(uniqueId);\n clearTimeout(timer);\n }, duration);\n }\n if (!mount) {\n mount = document.createElement('div');\n mount.id = mountId;\n mount.style.position = 'fixed';\n mount.style.insetBlockStart = '16px';\n mount.style.insetInlineStart = '50%';\n mount.style.transform = 'translateX(-50%)';\n mount.attachShadow({ mode: 'open' });\n\n const unmount = render(() => {\n createEffect(() => {\n if (list().length === 0) {\n unmount();\n mount?.remove();\n }\n });\n return (\n <Show when={list().length}>\n <style>\n {baseStyle()}\n {styles}\n </style>\n <For each={list()}>\n {(item) => {\n return (\n <div class={cx('notification', item.type, item.closeing && 'closeing')}>\n <Show when={item.icon}>{item.icon}</Show>\n <div class=\"content\">{item.children}</div>\n <Show when={item.close}>\n <span class=\"close\" onClick={() => remove(item.uniqueId)} />\n </Show>\n </div>\n );\n }}\n </For>\n </Show>\n );\n }, mount!.shadowRoot!);\n\n document.body.appendChild(mount);\n }\n return uniqueId;\n};\n\nexport default notification;\n"],"names":["For","Show","createEffect","createUniqueId","cx","render","queque","styles","theme","mountId","type","children","duration","close","icon","uniqueId","list","add","remove","baseStyle","mount","document","getElementById","timer","setTimeout","clearTimeout","createElement","id","style","position","insetBlockStart","insetInlineStart","transform","attachShadow","mode","unmount","length","item","closeing","shadowRoot","body","appendChild"],"rangeMappings":"","mappings":"0UAAA,QAASA,OAAAA,CAAG,CAAEC,QAAAA,CAAI,CAAEC,gBAAAA,CAAY,CAAEC,kBAAAA,CAAc,KAAQ,UAAW,AACnE,QAASC,MAAAA,CAAE,KAAQ,aAAc,AACjC,QAASC,UAAAA,CAAM,KAAQ,cAAe,AACtC,QAAOC,MAAuC,UAAW,AACzD,QAASC,UAAAA,CAAM,KAAQ,UAAW,AAClC,QAAOC,MAAW,UAAW,CAE7B,IAAMC,EAAU,oBAuEhB,eArEqB,CAAA,CACnBC,EACAC,EACAC,EAAW,GAAI,CACfC,EACAC,KAEA,IAAMC,EAAWZ,IACX,CAAEa,KAAAA,CAAI,CAAEC,IAAAA,CAAG,CAAEC,OAAAA,CAAM,CAAE,CAAGZ,EACxB,CAAEa,UAAAA,CAAS,CAAE,CAAGX,EAClBY,EAAQC,SAASC,cAAc,CAACb,GASpC,GAPAQ,EAAI,CACFP,KAAAA,EACAI,KAAAA,EACAH,SAAAA,EACAE,MAAAA,EACAE,SAAAA,CACF,GACIH,GAAYA,EAAW,EAAG,CAC5B,IAAMW,EAAQC,WAAW,KACvBN,EAAOH,GACPU,aAAaF,EACf,EAAGX,EACL,CACA,GAAI,CAACQ,EAAO,CAEVA,AADAA,CAAAA,EAAQC,SAASK,aAAa,CAAC,MAAK,EAC9BC,EAAE,CAAGlB,EACXW,EAAMQ,KAAK,CAACC,QAAQ,CAAG,QACvBT,EAAMQ,KAAK,CAACE,eAAe,CAAG,OAC9BV,EAAMQ,KAAK,CAACG,gBAAgB,CAAG,MAC/BX,EAAMQ,KAAK,CAACI,SAAS,CAAG,mBACxBZ,EAAMa,YAAY,CAAC,CAAEC,KAAM,MAAO,GAElC,IAAMC,EAAU9B,EAAO,KACrBH,EAAa,KACW,IAAlBc,IAAOoB,MAAM,GACfD,UACAf,GAAAA,EAAOF,MAAM,GAEjB,KAEGjB,qBAAWe,IAAOoB,MAAM,mDAEpBjB,YACAZ,gBAEFP,qBAAUgB,cACR,AAACqB,+CAGKpC,qBAAWoC,EAAKvB,IAAI,wBAAGuB,EAAKvB,IAAI,eACXuB,EAAK1B,QAAQ,QAClCV,qBAAWoC,EAAKxB,KAAK,4CACS,IAAMK,EAAOmB,EAAKtB,QAAQ,uBAJ/CX,EAAG,eAAgBiC,EAAK3B,IAAI,CAAE2B,EAAKC,QAAQ,EAAI,2BAYpElB,EAAOmB,UAAU,EAEpBlB,SAASmB,IAAI,CAACC,WAAW,CAACrB,EAC5B,CACA,OAAOL,CACT,CAAA,CAE4B"}
1
+ {"version":3,"sources":["../../components/notification/notification.tsx"],"sourcesContent":["import { For, Show, createEffect, createUniqueId } from 'solid-js';\nimport { cx } from '@moneko/css';\nimport { render } from 'solid-js/web';\nimport queque, { type NotificationType } from './queque';\nimport { styles } from './styles';\nimport theme from '../theme';\n\nconst mountId = 'n-notification-box';\n\nconst notification = (\n type: keyof typeof NotificationType,\n children: JSX.Element,\n duration = 3000,\n close?: boolean,\n icon?: JSX.Element,\n) => {\n const uniqueId = createUniqueId();\n const { list, add, remove } = queque;\n const { baseStyle } = theme;\n let mount = document.getElementById(mountId);\n\n add({\n type,\n icon,\n children,\n close,\n uniqueId,\n });\n if (duration && duration > 0) {\n const timer = setTimeout(() => {\n remove(uniqueId);\n clearTimeout(timer);\n }, duration);\n }\n if (!mount) {\n mount = document.createElement('div');\n mount.id = mountId;\n mount.style.position = 'fixed';\n mount.style.insetBlockStart = '16px';\n mount.style.insetInlineStart = '50%';\n mount.style.transform = 'translateX(-50%)';\n mount.attachShadow({ mode: 'open' });\n\n const unmount = render(() => {\n createEffect(() => {\n if (list().length === 0) {\n unmount();\n mount?.remove();\n }\n });\n return (\n <Show when={list().length}>\n <style>\n {baseStyle()}\n {styles}\n </style>\n <For each={list()}>\n {(item) => {\n return (\n <div\n class={cx('notification', item.type)}\n classList={{\n closeing: item.closeing,\n }}\n >\n <Show when={item.icon}>{item.icon}</Show>\n <div class=\"content\">{item.children}</div>\n <Show when={item.close}>\n <span class=\"close\" onClick={() => remove(item.uniqueId)} />\n </Show>\n </div>\n );\n }}\n </For>\n </Show>\n );\n }, mount!.shadowRoot!);\n\n document.body.appendChild(mount);\n }\n return uniqueId;\n};\n\nexport default notification;\n"],"names":["For","Show","createEffect","createUniqueId","cx","render","queque","styles","theme","mountId","type","children","duration","close","icon","uniqueId","list","add","remove","baseStyle","mount","document","getElementById","timer","setTimeout","clearTimeout","createElement","id","style","position","insetBlockStart","insetInlineStart","transform","attachShadow","mode","unmount","length","item","closeing","shadowRoot","body","appendChild"],"rangeMappings":"","mappings":"0UAAA,QAASA,OAAAA,CAAG,CAAEC,QAAAA,CAAI,CAAEC,gBAAAA,CAAY,CAAEC,kBAAAA,CAAc,KAAQ,UAAW,AACnE,QAASC,MAAAA,CAAE,KAAQ,aAAc,AACjC,QAASC,UAAAA,CAAM,KAAQ,cAAe,AACtC,QAAOC,MAAuC,UAAW,AACzD,QAASC,UAAAA,CAAM,KAAQ,UAAW,AAClC,QAAOC,MAAW,UAAW,CAE7B,IAAMC,EAAU,oBA4EhB,eA1EqB,CAAA,CACnBC,EACAC,EACAC,EAAW,GAAI,CACfC,EACAC,KAEA,IAAMC,EAAWZ,IACX,CAAEa,KAAAA,CAAI,CAAEC,IAAAA,CAAG,CAAEC,OAAAA,CAAM,CAAE,CAAGZ,EACxB,CAAEa,UAAAA,CAAS,CAAE,CAAGX,EAClBY,EAAQC,SAASC,cAAc,CAACb,GASpC,GAPAQ,EAAI,CACFP,KAAAA,EACAI,KAAAA,EACAH,SAAAA,EACAE,MAAAA,EACAE,SAAAA,CACF,GACIH,GAAYA,EAAW,EAAG,CAC5B,IAAMW,EAAQC,WAAW,KACvBN,EAAOH,GACPU,aAAaF,EACf,EAAGX,EACL,CACA,GAAI,CAACQ,EAAO,CAEVA,AADAA,CAAAA,EAAQC,SAASK,aAAa,CAAC,MAAK,EAC9BC,EAAE,CAAGlB,EACXW,EAAMQ,KAAK,CAACC,QAAQ,CAAG,QACvBT,EAAMQ,KAAK,CAACE,eAAe,CAAG,OAC9BV,EAAMQ,KAAK,CAACG,gBAAgB,CAAG,MAC/BX,EAAMQ,KAAK,CAACI,SAAS,CAAG,mBACxBZ,EAAMa,YAAY,CAAC,CAAEC,KAAM,MAAO,GAElC,IAAMC,EAAU9B,EAAO,KACrBH,EAAa,KACW,IAAlBc,IAAOoB,MAAM,GACfD,UACAf,GAAAA,EAAOF,MAAM,GAEjB,KAEGjB,qBAAWe,IAAOoB,MAAM,mDAEpBjB,YACAZ,gBAEFP,qBAAUgB,cACR,AAACqB,+CAQKpC,qBAAWoC,EAAKvB,IAAI,wBAAGuB,EAAKvB,IAAI,eACXuB,EAAK1B,QAAQ,QAClCV,qBAAWoC,EAAKxB,KAAK,4CACS,IAAMK,EAAOmB,EAAKtB,QAAQ,yBARlDX,EAAG,eAAgBiC,EAAK3B,IAAI,MAEvB2B,EAAKC,QAAQ,8HAcpClB,EAAOmB,UAAU,EAEpBlB,SAASmB,IAAI,CAACC,WAAW,CAACrB,EAC5B,CACA,OAAOL,CACT,CAAA,CAE4B"}
@@ -1,2 +1,2 @@
1
- import{template as t}from"solid-js/web";import{memo as e}from"solid-js/web";import{insert as i}from"solid-js/web";import{getOwner as o}from"solid-js/web";import{effect as l}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{className as a}from"solid-js/web";let s=t("<li>"),p=t(`<li><slot name="total-text"><n-typography>共 <!> 项`,!0,!1),m=t("<style>"),v=t(`<nav aria-label="pagination" class="pagination"><ul><li><n-button class="pagination-item pagination-prev">〈</n-button></li><li><n-button class="pagination-item pagination-next">〉`,!0,!1),u=t("<li><n-button>",!0,!1);import{For as d,Show as f,batch as c,createComponent as g,createEffect as $,createMemo as h,createSignal as _,mergeProps as b,splitProps as w,untrack as x}from"solid-js";import C from"@moneko/common/lib/isFunction";import{css as y,cx as z}from"@moneko/css";import{customElement as j}from"solid-element";import{styles as S}from"./styles";import"../button";import T from"../theme";import"../typography";function k(t){let{baseStyle:n}=T,[g,b]=w(t,["page","pageSize","total","css","totalText"]),[j,k]=_(1),[M,E]=_(20),[q,A]=_(0);$(()=>{c(()=>{"number"==typeof g.page&&g.page!==x(j)&&k(g.page),"number"==typeof g.pageSize&&g.pageSize!==x(M)&&E(g.pageSize),"number"==typeof g.total&&g.total!==x(q)&&A(g.total)})});let F=h(()=>Math.ceil(q()/M())),N=h(()=>{let t=F(),e=[];if(t<=5)for(let i=1;i<=t;i++)e.push(i);else{let i=Math.min(t,Math.max(1,j()-Math.floor(2.5))+5-1);for(let t=i-5+1;t<=i;t++)e.push(t)}if(e.length){let i=e[e.length-1],o=e[0];o>=2&&(2===o?e.splice(0,1,"p"):e.unshift("p"),e.unshift(1),i<t&&(i+=1,e.push(i))),i===t-1?(e.splice(e.length-1,1,"n"),e.push(t)):i<t-1&&(e.push("n"),e.push(t))}return e});function O(t){let e=x(j),i="n"===t?e+5:"p"===t?e-5:t;i<1?i=1:i>x(F)&&(i=x(F)),e!==i&&(void 0===g.page&&k(i),null==b.onChange||b.onChange.call(b,i,x(M)))}let B=()=>{let t=h(()=>[(j()-1)*M()+1,j()*M()]);return r(f,{get when(){return!1!==g.totalText},get children(){let l=s();return i(l,(()=>{let l=e(()=>!!C(g.totalText));return()=>l()?g.totalText(q(),t()):(()=>{let t=p(),e=t.firstChild,l=e.firstChild,n=l.firstChild.nextSibling;return n.nextSibling,e._$owner=o(),l._$owner=o(),i(l,q,n),t})()})()),l}})};return r(f,{get when(){return N().length},get children(){return[(()=>{let t=m();return i(t,n,null),i(t,S,null),i(t,()=>y(g.css),null),t})(),(()=>{let t=v(),e=t.firstChild,n=e.firstChild,s=n.firstChild,p=n.nextSibling,m=p.firstChild;return i(e,r(B,{}),n),s.$$click=()=>O(x(j)-1),s.flat=!0,s.circle=!0,s._$owner=o(),i(e,r(d,{get each(){return N()},children:t=>{let e=h(()=>t===j());return(()=>{let n=u(),r=n.firstChild;return r.$$click=()=>O(t),r.circle="number"!=typeof t,r._$owner=o(),i(r,t),l(i=>{let o=z("pagination-item","number"!=typeof t&&`pagination-${t}`),l=b.size,n=!e(),s=e()?"primary":"default",p=e(),m=e()&&"page";return o!==i._v$5&&a(r,i._v$5=o),l!==i._v$6&&(r.size=i._v$6=l),n!==i._v$7&&(r.flat=i._v$7=n),s!==i._v$8&&(r.type=i._v$8=s),p!==i._v$9&&(r.fill=i._v$9=p),m!==i._v$10&&(r.ariaCurrent=i._v$10=m),i},{_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0}),n})()}}),p),m.$$click=()=>O(x(j)+1),m.flat=!0,m.circle=!0,m._$owner=o(),l(t=>{let e=b.size,i=1===j(),o=b.size,l=j()===F();return e!==t._v$&&(s.size=t._v$=e),i!==t._v$2&&(s.disabled=t._v$2=i),o!==t._v$3&&(m.size=t._v$3=o),l!==t._v$4&&(m.disabled=t._v$4=l),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),t})()]}})}j("n-pagination",{class:void 0,css:void 0,page:void 0,pageSize:void 0,total:0,size:void 0,onChange:void 0,totalText:void 0},(t,e)=>{let i=e.element,o=b({css:i.css,onChange(t,e){i.dispatchEvent(new CustomEvent("change",{detail:[t,e]}))}},t,{totalText:!!i.querySelector("[slot='total-text']")||t.totalText});return $(()=>{i.removeAttribute("css")}),g(k,o)});export default k;n(["click"]);
1
+ import{template as t}from"solid-js/web";import{memo as e}from"solid-js/web";import{insert as i}from"solid-js/web";import{getOwner as o}from"solid-js/web";import{effect as l}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{classList as a}from"solid-js/web";let s=t("<li>"),p=t(`<li><slot name="total-text"><n-typography>共 <!> 项`,!0,!1),m=t("<style>"),v=t(`<nav aria-label="pagination" class="pagination"><ul><li><n-button class="pagination-item pagination-prev">〈</n-button></li><li><n-button class="pagination-item pagination-next">〉`,!0,!1),u=t('<li><n-button class="pagination-item">',!0,!1);import{For as d,Show as c,batch as f,createEffect as g,createMemo as $,createSignal as h,mergeProps as _,splitProps as b,untrack as w}from"solid-js";import x from"@moneko/common/lib/isFunction";import{css as C}from"@moneko/css";import{customElement as y}from"solid-element";import{styles as z}from"./styles";import"../button";import j from"../theme";import"../typography";function S(t){let{baseStyle:n}=j,[_,y]=b(t,["page","pageSize","total","css","totalText"]),[S,T]=h(1),[k,M]=h(20),[E,q]=h(0);g(()=>{f(()=>{"number"==typeof _.page&&_.page!==w(S)&&T(_.page),"number"==typeof _.pageSize&&_.pageSize!==w(k)&&M(_.pageSize),"number"==typeof _.total&&_.total!==w(E)&&q(_.total)})});let A=$(()=>Math.ceil(E()/k())),F=$(()=>{let t=A(),e=[];if(t<=5)for(let i=1;i<=t;i++)e.push(i);else{let i=Math.min(t,Math.max(1,S()-Math.floor(2.5))+5-1);for(let t=i-5+1;t<=i;t++)e.push(t)}if(e.length){let i=e[e.length-1],o=e[0];o>=2&&(2===o?e.splice(0,1,"p"):e.unshift("p"),e.unshift(1),i<t&&(i+=1,e.push(i))),i===t-1?(e.splice(e.length-1,1,"n"),e.push(t)):i<t-1&&(e.push("n"),e.push(t))}return e});function L(t){let e=w(S),i="n"===t?e+5:"p"===t?e-5:t;i<1?i=1:i>w(A)&&(i=w(A)),e!==i&&(void 0===_.page&&T(i),null==y.onChange||y.onChange.call(y,i,w(k)))}let O=()=>{let t=$(()=>[(S()-1)*k()+1,S()*k()]);return r(c,{get when(){return!1!==_.totalText},get children(){let l=s();return i(l,(()=>{let l=e(()=>!!x(_.totalText));return()=>l()?_.totalText(E(),t()):(()=>{let t=p(),e=t.firstChild,l=e.firstChild,n=l.firstChild.nextSibling;return n.nextSibling,e._$owner=o(),l._$owner=o(),i(l,E,n),t})()})()),l}})};return r(c,{get when(){return F().length},get children(){return[(()=>{let t=m();return i(t,n,null),i(t,z,null),i(t,()=>C(_.css),null),t})(),(()=>{let t=v(),e=t.firstChild,n=e.firstChild,s=n.firstChild,p=n.nextSibling,m=p.firstChild;return i(e,r(O,{}),n),s.$$click=()=>L(w(S)-1),s.flat=!0,s.circle=!0,s._$owner=o(),i(e,r(d,{get each(){return F()},children:t=>{let e=$(()=>t===S());return(()=>{let n=u(),r=n.firstChild;return r.$$click=()=>L(t),r.circle="number"!=typeof t,r._$owner=o(),i(r,t),l(i=>{let o={[`pagination-${t}`]:"number"!=typeof t},l=y.size,n=!e(),s=e()?"primary":"default",p=e(),m=e()&&"page";return i._v$5=a(r,o,i._v$5),l!==i._v$6&&(r.size=i._v$6=l),n!==i._v$7&&(r.flat=i._v$7=n),s!==i._v$8&&(r.type=i._v$8=s),p!==i._v$9&&(r.fill=i._v$9=p),m!==i._v$10&&(r.ariaCurrent=i._v$10=m),i},{_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0,_v$9:void 0,_v$10:void 0}),n})()}}),p),m.$$click=()=>L(w(S)+1),m.flat=!0,m.circle=!0,m._$owner=o(),l(t=>{let e=y.size,i=1===S(),o=y.size,l=S()===A();return e!==t._v$&&(s.size=t._v$=e),i!==t._v$2&&(s.disabled=t._v$2=i),o!==t._v$3&&(m.size=t._v$3=o),l!==t._v$4&&(m.disabled=t._v$4=l),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),t})()]}})}y("n-pagination",{class:void 0,css:void 0,page:void 0,pageSize:void 0,total:0,size:void 0,onChange:void 0,totalText:void 0},(t,e)=>{let i=e.element,o=_({css:i.css,onChange(t,e){i.dispatchEvent(new CustomEvent("change",{detail:[t,e]}))}},t,{totalText:!!i.querySelector("[slot='total-text']")||t.totalText});return g(()=>{i.removeAttribute("css")}),r(S,o)});export default S;n(["click"]);
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/pagination/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n batch,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { styles } from './styles';\nimport '../button';\nimport theme from '../theme';\nimport '../typography';\nimport type { BasicConfig, CustomElement } from '..';\n\nfunction Pagination(_: PaginationProps) {\n const { baseStyle } = theme;\n const maxCount = 5;\n const [local, other] = splitProps(_, ['page', 'pageSize', 'total', 'css', 'totalText']);\n const [page, setPage] = createSignal(1);\n const [pageSize, setPageSize] = createSignal(20);\n const [total, setTotal] = createSignal(0);\n\n createEffect(() => {\n batch(() => {\n if (typeof local.page === 'number' && local.page !== untrack(page)) {\n setPage(local.page);\n }\n if (typeof local.pageSize === 'number' && local.pageSize !== untrack(pageSize)) {\n setPageSize(local.pageSize);\n }\n if (typeof local.total === 'number' && local.total !== untrack(total)) {\n setTotal(local.total);\n }\n });\n });\n const totalPages = createMemo(() => Math.ceil(total() / pageSize()));\n const pages = createMemo(() => {\n const totals = totalPages();\n const arr: (number | 'p' | 'n')[] = [];\n\n if (totals <= maxCount) {\n for (let i = 1; i <= totals; i++) {\n arr.push(i);\n }\n } else {\n const right = Math.min(totals, Math.max(1, page() - Math.floor(maxCount / 2)) + maxCount - 1);\n\n for (let i = right - maxCount + 1; i <= right; i++) {\n arr.push(i);\n }\n }\n\n if (arr.length) {\n let last = arr[arr.length - 1] as number;\n const fast = arr[0] as number;\n\n if (fast >= 2) {\n if (fast === 2) {\n arr.splice(0, 1, 'p');\n } else {\n arr.unshift('p');\n }\n arr.unshift(1);\n if (last < totals) {\n last += 1;\n arr.push(last);\n }\n }\n if (last === totals - 1) {\n arr.splice(arr.length - 1, 1, 'n');\n arr.push(totals);\n } else if (last < totals - 1) {\n arr.push('n');\n arr.push(totals);\n }\n }\n return arr;\n });\n\n function changePage(curr: number | 'p' | 'n') {\n const p = untrack(page);\n let next = curr === 'n' ? p + maxCount : curr === 'p' ? p - maxCount : curr;\n\n if (next < 1) {\n next = 1;\n } else if (next > untrack(totalPages)) {\n next = untrack(totalPages);\n }\n if (p !== next) {\n if (local.page === void 0) {\n setPage(next);\n }\n other.onChange?.(next, untrack(pageSize));\n }\n }\n const TotalText = () => {\n const ranges = createMemo(() => [(page() - 1) * pageSize() + 1, page() * pageSize()]);\n\n return (\n <Show when={local.totalText !== false}>\n <li>\n {isFunction(local.totalText) ? (\n local.totalText(total(), ranges())\n ) : (\n <li>\n <slot name=\"total-text\">\n <n-typography>共 {total()} 项</n-typography>\n </slot>\n </li>\n )}\n </li>\n </Show>\n );\n };\n\n return (\n <Show when={pages().length}>\n <style>\n {baseStyle()}\n {styles}\n {css(local.css)}\n </style>\n <nav aria-label=\"pagination\" class=\"pagination\">\n <ul>\n <TotalText />\n <li>\n <n-button\n class=\"pagination-item pagination-prev\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === 1}\n onClick={() => changePage(untrack(page) - 1)}\n >\n 〈\n </n-button>\n </li>\n <For each={pages()}>\n {(curr) => {\n const isCurrent = createMemo(() => curr === page());\n\n return (\n <li>\n <n-button\n class={cx('pagination-item', typeof curr !== 'number' && `pagination-${curr}`)}\n size={other.size}\n flat={!isCurrent()}\n circle={typeof curr !== 'number'}\n type={isCurrent() ? 'primary' : 'default'}\n fill={isCurrent()}\n aria-current={isCurrent() && 'page'}\n onClick={() => changePage(curr)}\n >\n {curr}\n </n-button>\n </li>\n );\n }}\n </For>\n <li>\n <n-button\n class=\"pagination-item pagination-next\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === totalPages()}\n onClick={() => changePage(untrack(page) + 1)}\n >\n 〉\n </n-button>\n </li>\n </ul>\n </nav>\n </Show>\n );\n}\n\n/** API */\nexport interface PaginationProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 当前页数\n * @default 1\n */\n page?: number;\n /** 每页显示的数据条目数量\n * @default 20\n */\n pageSize?: number;\n /** 总数\n * @default 0\n */\n total?: number;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 用于显示数据总量和当前数据顺序;\n * 支持直接赋值给 'totalText' 属性\n * 或者通过[slot=\"total-text\"]插槽\n * @default true\n */\n totalText?: ((total: number, range: [start: number, end: number]) => JSX.Element) | false;\n /** 值修改时的回调方法 */\n onChange?(page: number, pageSize: number): void;\n children?: JSX.Element;\n}\nexport type PaginationElement = CustomElement<PaginationProps>;\n\ncustomElement<PaginationProps>(\n 'n-pagination',\n {\n class: void 0,\n css: void 0,\n page: void 0,\n pageSize: void 0,\n total: 0,\n size: void 0,\n onChange: void 0,\n totalText: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(page: number, pageSize: number) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [page, pageSize],\n }),\n );\n },\n },\n _,\n {\n totalText: (!!el.querySelector(\"[slot='total-text']\") as false) || _.totalText,\n },\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(Pagination, props);\n },\n);\nexport default Pagination;\n"],"names":["For","Show","batch","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","isFunction","css","cx","customElement","styles","theme","Pagination","_","baseStyle","local","other","page","setPage","pageSize","setPageSize","total","setTotal","totalPages","Math","ceil","pages","totals","arr","i","push","right","min","max","floor","maxCount","length","last","fast","splice","unshift","changePage","curr","p","next","onChange","TotalText","ranges","totalText","isCurrent","size","class","opt","el","element","props","dispatchEvent","CustomEvent","detail","querySelector","removeAttribute"],"rangeMappings":"","mappings":"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"}
1
+ {"version":3,"sources":["../../components/pagination/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n batch,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { styles } from './styles';\nimport '../button';\nimport theme from '../theme';\nimport '../typography';\nimport type { BasicConfig, CustomElement } from '..';\n\nfunction Pagination(_: PaginationProps) {\n const { baseStyle } = theme;\n const maxCount = 5;\n const [local, other] = splitProps(_, ['page', 'pageSize', 'total', 'css', 'totalText']);\n const [page, setPage] = createSignal(1);\n const [pageSize, setPageSize] = createSignal(20);\n const [total, setTotal] = createSignal(0);\n\n createEffect(() => {\n batch(() => {\n if (typeof local.page === 'number' && local.page !== untrack(page)) {\n setPage(local.page);\n }\n if (typeof local.pageSize === 'number' && local.pageSize !== untrack(pageSize)) {\n setPageSize(local.pageSize);\n }\n if (typeof local.total === 'number' && local.total !== untrack(total)) {\n setTotal(local.total);\n }\n });\n });\n const totalPages = createMemo(() => Math.ceil(total() / pageSize()));\n const pages = createMemo(() => {\n const totals = totalPages();\n const arr: (number | 'p' | 'n')[] = [];\n\n if (totals <= maxCount) {\n for (let i = 1; i <= totals; i++) {\n arr.push(i);\n }\n } else {\n const right = Math.min(totals, Math.max(1, page() - Math.floor(maxCount / 2)) + maxCount - 1);\n\n for (let i = right - maxCount + 1; i <= right; i++) {\n arr.push(i);\n }\n }\n\n if (arr.length) {\n let last = arr[arr.length - 1] as number;\n const fast = arr[0] as number;\n\n if (fast >= 2) {\n if (fast === 2) {\n arr.splice(0, 1, 'p');\n } else {\n arr.unshift('p');\n }\n arr.unshift(1);\n if (last < totals) {\n last += 1;\n arr.push(last);\n }\n }\n if (last === totals - 1) {\n arr.splice(arr.length - 1, 1, 'n');\n arr.push(totals);\n } else if (last < totals - 1) {\n arr.push('n');\n arr.push(totals);\n }\n }\n return arr;\n });\n\n function changePage(curr: number | 'p' | 'n') {\n const p = untrack(page);\n let next = curr === 'n' ? p + maxCount : curr === 'p' ? p - maxCount : curr;\n\n if (next < 1) {\n next = 1;\n } else if (next > untrack(totalPages)) {\n next = untrack(totalPages);\n }\n if (p !== next) {\n if (local.page === void 0) {\n setPage(next);\n }\n other.onChange?.(next, untrack(pageSize));\n }\n }\n const TotalText = () => {\n const ranges = createMemo(() => [(page() - 1) * pageSize() + 1, page() * pageSize()]);\n\n return (\n <Show when={local.totalText !== false}>\n <li>\n {isFunction(local.totalText) ? (\n local.totalText(total(), ranges())\n ) : (\n <li>\n <slot name=\"total-text\">\n <n-typography>共 {total()} 项</n-typography>\n </slot>\n </li>\n )}\n </li>\n </Show>\n );\n };\n\n return (\n <Show when={pages().length}>\n <style>\n {baseStyle()}\n {styles}\n {css(local.css)}\n </style>\n <nav aria-label=\"pagination\" class=\"pagination\">\n <ul>\n <TotalText />\n <li>\n <n-button\n class=\"pagination-item pagination-prev\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === 1}\n onClick={() => changePage(untrack(page) - 1)}\n >\n 〈\n </n-button>\n </li>\n <For each={pages()}>\n {(curr) => {\n const isCurrent = createMemo(() => curr === page());\n\n return (\n <li>\n <n-button\n class=\"pagination-item\"\n classList={{\n [`pagination-${curr}`]: typeof curr !== 'number',\n }}\n size={other.size}\n flat={!isCurrent()}\n circle={typeof curr !== 'number'}\n type={isCurrent() ? 'primary' : 'default'}\n fill={isCurrent()}\n aria-current={isCurrent() && 'page'}\n onClick={() => changePage(curr)}\n >\n {curr}\n </n-button>\n </li>\n );\n }}\n </For>\n <li>\n <n-button\n class=\"pagination-item pagination-next\"\n size={other.size}\n flat={true}\n circle={true}\n disabled={page() === totalPages()}\n onClick={() => changePage(untrack(page) + 1)}\n >\n 〉\n </n-button>\n </li>\n </ul>\n </nav>\n </Show>\n );\n}\n\n/** API */\nexport interface PaginationProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 当前页数\n * @default 1\n */\n page?: number;\n /** 每页显示的数据条目数量\n * @default 20\n */\n pageSize?: number;\n /** 总数\n * @default 0\n */\n total?: number;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 用于显示数据总量和当前数据顺序;\n * 支持直接赋值给 'totalText' 属性\n * 或者通过[slot=\"total-text\"]插槽\n * @default true\n */\n totalText?: ((total: number, range: [start: number, end: number]) => JSX.Element) | false;\n /** 值修改时的回调方法 */\n onChange?(page: number, pageSize: number): void;\n children?: JSX.Element;\n}\nexport type PaginationElement = CustomElement<PaginationProps>;\n\ncustomElement<PaginationProps>(\n 'n-pagination',\n {\n class: void 0,\n css: void 0,\n page: void 0,\n pageSize: void 0,\n total: 0,\n size: void 0,\n onChange: void 0,\n totalText: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(page: number, pageSize: number) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [page, pageSize],\n }),\n );\n },\n },\n _,\n {\n totalText: (!!el.querySelector(\"[slot='total-text']\") as false) || _.totalText,\n },\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return <Pagination {...props} />;\n },\n);\nexport default Pagination;\n"],"names":["For","Show","batch","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","isFunction","css","customElement","styles","theme","Pagination","_","baseStyle","local","other","page","setPage","pageSize","setPageSize","total","setTotal","totalPages","Math","ceil","pages","totals","arr","i","push","right","min","max","floor","maxCount","length","last","fast","splice","unshift","changePage","curr","p","next","onChange","TotalText","ranges","totalText","isCurrent","size","class","opt","el","element","props","dispatchEvent","CustomEvent","detail","querySelector","removeAttribute"],"rangeMappings":"","mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e,t;function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e}).apply(this,arguments)}import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as l}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{getOwner as p}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let u=r("<style>"),c=r("<span>"),m=r("<div>"),g=r("<n-empty>",!0,!1);import{Show as f,createComponent as h,createEffect as v,createMemo as w,createSignal as b,mergeProps as C,onCleanup as x,onMount as y,splitProps as j}from"solid-js";import M from"@moneko/common/lib/isElementInside";import O from"@moneko/common/lib/isEqual";import k from"@moneko/common/lib/isFunction";import E from"@moneko/common/lib/passiveSupported";import{css as L,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,[B]=j(C({trigger:"hover"},e),["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 _(e){B.disabled||(B.onOpenChange&&B.onOpenChange(e),void 0===B.open&&A(e))}function G(){!1===H()&&(A(null),_(null))}function J(e){clearTimeout(h),h=setTimeout(()=>{var o;if(clearTimeout(h),(null==(o=e.target)?void 0:o.getAttribute("handle-closed"))==="false")return;let n=M(e.target,t);(H()&&!n||n&&"mousedown"!==e.type)&&_(!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 K=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){_(!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")),a=B.arrow?8:4,d={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-n.width,d["--x"]=n.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}p?d.top=o.bottom+a:d.bottom=window.innerHeight-o.top+a,q(e=>O(e,d)?e:d),N(e=>!p===e?e:!p)},32)};function Q(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}))),_(!0)}let U=w(()=>k(B.getPopupContainer)?B.getPopupContainer(r):document.body),V=w(()=>{let e={},t={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[B.trigger],o={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[B.trigger];return Object.assign(e,t&&{[t]:Q},o&&{[o]:J}),e}),Z=w(()=>{let e=D();return`.portal {${Object.keys(e).map(t=>`${t}:${e[t]}px;`).join("")}z-index: 1;}`}),ee=w(()=>P("portal",B.arrow&&"arrow",`${H()?"in":"out"}-${F()?"up":"down"}`,B.size,B.popupClass)),et=w(()=>`:host {--popover-bg: ${z()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return v(()=>{H()&&(K(),window.addEventListener("scroll",K,{passive:E})),x(()=>{window.removeEventListener("scroll",K,!1)})}),y(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",J,!1)}),x(()=>{clearTimeout(h),document.documentElement.removeEventListener("mousedown",J,!1)}),[(()=>{let e=u();return s(e,I,null),s(e,$,null),s(e,()=>L(B.css),null),e})(),(()=>{let e=c(),t=r;return"function"==typeof t?n(t,e):r=e,i(e,l({get class(){return P("popover",B.size,B.class)}},V),!1,!0),s(e,()=>B.children),e})(),a(f,{get when(){return null!==H()||!B.destroyInactive},get children(){return a(R,{useShadow:!0,get mount(){return U()},get children(){return[(()=>{let e=u();return s(e,I,null),s(e,W,null),s(e,et,null),s(e,Z,null),s(e,X,null),s(e,()=>L(B.popupCss),null),e})(),(()=>{let e=m(),o=t;return d(e,"animationend",G),"function"==typeof o?n(o,e):t=e,i(e,l({get class(){return ee()}},V),!1,!0),s(e,a(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=C({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;function o(){return(o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var o=arguments[t];for(var n in o)Object.prototype.hasOwnProperty.call(o,n)&&(e[n]=o[n])}return e}).apply(this,arguments)}import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as l}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{getOwner as p}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let u=r("<style>"),c=r("<span>"),m=r("<div>"),g=r("<n-empty>",!0,!1);import{Show as f,createEffect as h,createMemo as v,createSignal as w,mergeProps as b,onCleanup as C,onMount as x,splitProps as y}from"solid-js";import j from"@moneko/common/lib/isElementInside";import M from"@moneko/common/lib/isEqual";import O from"@moneko/common/lib/isFunction";import k from"@moneko/common/lib/passiveSupported";import{css as E,cx as L}from"@moneko/css";import{customElement as P}from"solid-element";import{Portal as T}from"solid-js/web";import{popoverCss as R,portalCss as $}from"./style";import"../empty";import W from"../theme";export var TriggerOption;(e=TriggerOption||(TriggerOption={})).hover="hover",e.click="click",e.contextMenu="contextMenu",e.none="none";export var Placement;function S(e){let t,r,P,S;let{isDark:z,baseStyle:I}=W,[B]=y(b({trigger:"hover"},e),["class","css","popupClass","popupCss","size","trigger","open","disabled","onOpenChange","dropdownMatchSelectWidth","destroyInactive","arrow","placement","getPopupContainer","children","content"]),[H,A]=w(null),[D,q]=w({}),[F,N]=w(!1),[X,Y]=w("");function _(e){B.disabled||(B.onOpenChange&&B.onOpenChange(e),void 0===B.open&&A(e))}function G(){!1===H()&&(A(null),_(null))}function J(e){clearTimeout(P),P=setTimeout(()=>{var o;if(clearTimeout(P),(null==(o=e.target)?void 0:o.getAttribute("handle-closed"))==="false")return;let n=j(e.target,t);(H()&&!n||n&&"mousedown"!==e.type)&&_(!1)},"hover"===B.trigger?300:0)}h(()=>{void 0!==B.open&&A(B.open)}),h(()=>{H()&&B.dropdownMatchSelectWidth&&r&&Y(`.portal {width: ${r.offsetWidth}px;}`)});let K=function(e){clearTimeout(S),S=setTimeout(()=>{if(clearTimeout(S),!t||!r||!e&&"contextMenu"===B.trigger)return;if((null==e?void 0:e.type)==="scroll"&&"contextMenu"===B.trigger){_(!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")),a=B.arrow?8:4,d={};switch(B.placement){case"bottomLeft":case"left":case"topLeft":d.left=o.left,d["--x"]=-n.width/2+16;break;case"bottomRight":case"right":case"topRight":d.left=o.right-n.width,d["--x"]=n.width/2-16;break;default:d.left=Math.abs(i>o.left?o.left:o.left-i),d["--x"]=-(d.left-o.left+i)}p?d.top=o.bottom+a:d.bottom=window.innerHeight-o.top+a,q(e=>M(e,d)?e:d),N(e=>!p===e?e:!p)},32)};function Q(e){clearTimeout(P),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}))),_(!0)}let U=v(()=>O(B.getPopupContainer)?B.getPopupContainer(r):document.body),V=v(()=>{let e={},t={click:"onMouseDown",hover:"onMouseEnter",contextMenu:"onContextMenu",none:void 0}[B.trigger],o={hover:"onMouseLeave",click:void 0,contextMenu:void 0,none:void 0}[B.trigger];return Object.assign(e,t&&{[t]:Q},o&&{[o]:J}),e}),Z=v(()=>{let e=D();return`.portal {${Object.keys(e).map(t=>`${t}:${e[t]}px;`).join("")}z-index: 1;}`}),ee=v(()=>L("portal",B.arrow&&"arrow",`${H()?"in":"out"}-${F()?"up":"down"}`,B.size,B.popupClass)),et=v(()=>`:host {--popover-bg: ${z()?"#1f1f1f":"var(--component-bg)"};--popover-shadow-color: rgb(0 0 0 / 5%);}`);return h(()=>{H()&&(K(),window.addEventListener("scroll",K,{passive:k})),C(()=>{window.removeEventListener("scroll",K,!1)})}),x(()=>{"none"!==B.trigger&&document.documentElement.addEventListener("mousedown",J,!1)}),C(()=>{clearTimeout(P),document.documentElement.removeEventListener("mousedown",J,!1)}),[(()=>{let e=u();return s(e,I,null),s(e,R,null),s(e,()=>E(B.css),null),e})(),(()=>{let e=c(),t=r;return"function"==typeof t?n(t,e):r=e,i(e,l({get class(){return L("popover",B.size,B.class)}},V),!1,!0),s(e,()=>B.children),e})(),a(f,{get when(){return null!==H()||!B.destroyInactive},get children(){return a(T,{useShadow:!0,get mount(){return U()},get children(){return[(()=>{let e=u();return s(e,I,null),s(e,$,null),s(e,et,null),s(e,Z,null),s(e,X,null),s(e,()=>E(B.popupCss),null),e})(),(()=>{let e=m(),o=t;return d(e,"animationend",G),"function"==typeof o?n(o,e):t=e,i(e,l({get class(){return ee()}},V),!1,!0),s(e,a(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};P("n-popover",defaultProps,(e,t)=>{let o=t.element,n=b({onOpenChange(e){o.dispatchEvent(new CustomEvent("openchange",{detail:e}))},children:[...o.childNodes.values()]},e);return h(()=>{o.removeAttribute("css")}),a(S,n)});export default S;
2
2
  //# 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;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n};\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if ((e.target as HTMLElement)?.getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef!.getBoundingClientRect();\n const portalRect = ref!.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref!.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n // 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","local","trigger","open","setOpen","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","type","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values","removeAttribute"],"rangeMappings":"","mappings":"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"}
1
+ {"version":3,"sources":["../../components/popover/index.tsx"],"sourcesContent":["import {\n Show,\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;\n hover?: string;\n contextMenu?: string;\n none?: never;\n [key: string]: string | undefined;\n};\nfunction Popover(props: PopoverProps) {\n const { isDark, baseStyle } = theme;\n const mp = mergeProps(\n {\n trigger: 'hover',\n },\n props,\n );\n const [local] = splitProps(mp, [\n 'class',\n 'css',\n 'popupClass',\n 'popupCss',\n 'size',\n 'trigger',\n 'open',\n 'disabled',\n 'onOpenChange',\n 'dropdownMatchSelectWidth',\n 'destroyInactive',\n 'arrow',\n 'placement',\n 'getPopupContainer',\n 'children',\n 'content',\n ]);\n let ref: HTMLDivElement | undefined;\n let childRef: HTMLSpanElement | undefined;\n let closeTimer: NodeJS.Timeout | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [posi, setPosi] = createSignal<Posi>({});\n const [up, setUp] = createSignal<boolean>(false);\n const [width, setWidth] = createSignal('');\n\n createEffect(() => {\n if (local.open !== void 0) {\n setOpen(local.open);\n }\n });\n function openChange(next: boolean | null) {\n if (!local.disabled) {\n if (local.onOpenChange) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function exit() {\n if (open() === false) {\n setOpen(null);\n openChange(null);\n }\n }\n createEffect(() => {\n if (open() && local.dropdownMatchSelectWidth && childRef) {\n setWidth(`.portal {width: ${childRef.offsetWidth}px;}`);\n }\n });\n\n function close(e: MouseEvent | Event) {\n clearTimeout(closeTimer);\n closeTimer = setTimeout(\n () => {\n clearTimeout(closeTimer);\n if ((e.target as HTMLElement)?.getAttribute('handle-closed') === 'false') {\n return;\n }\n const isContains = isElementInside(e.target as Element, ref);\n\n if ((open() && !isContains) || (isContains && e.type !== 'mousedown')) {\n openChange(false);\n }\n },\n local.trigger === 'hover' ? 300 : 0,\n );\n }\n let portalTimer: NodeJS.Timeout | undefined;\n const showPortal = function (e?: Event): void {\n clearTimeout(portalTimer);\n portalTimer = setTimeout(() => {\n clearTimeout(portalTimer);\n if (!ref || !childRef || (!e && local.trigger === 'contextMenu')) {\n return;\n }\n if (e?.type === 'scroll' && local.trigger === 'contextMenu') {\n openChange(false);\n return;\n }\n const elRect = childRef!.getBoundingClientRect();\n const portalRect = ref!.getBoundingClientRect();\n const offsetX = portalRect.width / 2 - elRect.width / 2;\n const margin = window.innerHeight - elRect.bottom;\n const _placement = local.placement;\n\n const _isBottom =\n (!_placement?.startsWith('top') &&\n margin > ref!.offsetHeight * 0.8 &&\n margin > elRect.top) ||\n _placement?.startsWith('bottom');\n const arrowHeight = local.arrow ? 8 : 4;\n const _posi: Posi = {};\n\n switch (local.placement) {\n case 'bottomLeft':\n case 'left':\n case 'topLeft':\n _posi.left = elRect.left;\n _posi['--x'] = -portalRect.width / 2 + 16;\n break;\n case 'bottomRight':\n case 'right':\n case 'topRight':\n _posi.left = elRect.right - portalRect.width;\n _posi['--x'] = portalRect.width / 2 - 16;\n break;\n case 'bottom':\n case 'top':\n default:\n _posi.left = Math.abs(offsetX > elRect.left ? elRect.left : elRect.left - offsetX);\n _posi['--x'] = -(_posi.left - elRect.left + offsetX);\n break;\n }\n if (_isBottom) {\n _posi.top = elRect.bottom + arrowHeight;\n } else {\n _posi.bottom = window.innerHeight - elRect.top + arrowHeight;\n }\n setPosi((prev) => {\n return isEqual(prev, _posi) ? prev : _posi;\n });\n setUp((prev) => {\n return prev === !_isBottom ? prev : !_isBottom;\n });\n }, 32);\n };\n\n function handleOpen(e: MouseEvent) {\n clearTimeout(closeTimer);\n e.stopPropagation();\n if (local.trigger === 'contextMenu' && e.type === 'contextmenu') {\n e.preventDefault();\n setPosi((prev) => ({\n ...prev,\n left: e.clientX,\n top: e.clientY,\n ['--x']: -(ref?.getBoundingClientRect().width || 0) / 2 + 16,\n }));\n }\n openChange(true);\n }\n\n const container = createMemo(() => {\n if (isFunction(local.getPopupContainer)) {\n return local.getPopupContainer(childRef);\n }\n return document.body;\n });\n const childrenProps = createMemo(() => {\n const _props: Partial<Record<keyof EventMap, void>> = {};\n\n const openEvent: EventMap = {\n click: 'onMouseDown',\n hover: 'onMouseEnter',\n contextMenu: 'onContextMenu',\n none: void 0,\n };\n const closeEvent: EventMap = {\n hover: 'onMouseLeave',\n click: void 0,\n contextMenu: void 0,\n none: void 0,\n };\n\n const openFn = openEvent[local.trigger];\n const closeFn = closeEvent[local.trigger];\n\n Object.assign(\n _props,\n openFn && {\n [openFn]: handleOpen,\n },\n closeFn && {\n [closeFn]: close,\n },\n );\n\n return _props;\n });\n\n const portalStyle = createMemo(() => {\n const p = posi();\n\n // 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 <Popover {...props} />;\n});\nexport default Popover;\n"],"names":["TriggerOption","Placement","Show","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","local","trigger","open","setOpen","posi","setPosi","up","setUp","width","setWidth","openChange","next","disabled","onOpenChange","exit","close","e","clearTimeout","setTimeout","target","getAttribute","isContains","type","dropdownMatchSelectWidth","offsetWidth","showPortal","elRect","getBoundingClientRect","portalRect","offsetX","margin","window","innerHeight","bottom","_placement","placement","_isBottom","startsWith","offsetHeight","top","arrowHeight","arrow","_posi","left","right","Math","abs","prev","handleOpen","stopPropagation","preventDefault","clientX","clientY","container","getPopupContainer","document","body","childrenProps","_props","openFn","openEvent","click","hover","contextMenu","none","closeFn","closeEvent","Object","assign","portalStyle","p","keys","map","k","join","portalCls","size","popupClass","hostStyle","addEventListener","passive","removeEventListener","documentElement","class","children","destroyInactive","popupCss","content","defaultProps","_","opt","el","element","dispatchEvent","CustomEvent","detail","childNodes","values","removeAttribute"],"rangeMappings":"","mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{template as e}from"solid-js/web";import{memo as t}from"solid-js/web";import{insert as m}from"solid-js/web";let o=e("<style>");import{createComponent as r,createEffect as l,mergeProps as s}from"solid-js";import{customElement as i,noShadowDOM as n}from"solid-element";import c from"../theme";function d(e){let{baseStyle:r,scheme:s,setScheme:i}=c;return n(),l(()=>{null==e.onScheme||e.onScheme.call(e,s())}),l(()=>{e.scheme&&i(e.scheme)}),[(()=>{let e=o();return m(e,r),e})(),t(()=>e.children)]}i("n-provider",(e,t)=>{let m=t.element;return r(d,s({onScheme(e){m.dispatchEvent(new CustomEvent("scheme",{detail:e}))}},e))});export default d;
1
+ import{template as e}from"solid-js/web";import{memo as t}from"solid-js/web";import{insert as o}from"solid-js/web";import{createComponent as m}from"solid-js/web";let r=e("<style>");import{createEffect as s,mergeProps as l}from"solid-js";import{customElement as i,noShadowDOM as n}from"solid-element";import p from"../theme";function c(e){let{baseStyle:m,scheme:l,setScheme:i}=p;return n(),s(()=>{null==e.onScheme||e.onScheme.call(e,l())}),s(()=>{e.scheme&&i(e.scheme)}),[(()=>{let e=r();return o(e,m),e})(),t(()=>e.children)]}i("n-provider",(e,t)=>{let o=t.element;return m(c,l({onScheme(e){o.dispatchEvent(new CustomEvent("scheme",{detail:e}))}},e))});export default c;
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/provider/index.tsx"],"sourcesContent":["import { createComponent, createEffect, mergeProps } from 'solid-js';\nimport { customElement, noShadowDOM } from 'solid-element';\nimport theme, { ColorScheme } from '../theme';\nimport type { CustomElement } from '..';\n\nfunction Provider(props: ProviderProps) {\n const { baseStyle, scheme, setScheme } = theme;\n\n noShadowDOM();\n createEffect(() => {\n props.onScheme?.(scheme());\n });\n createEffect(() => {\n if (props.scheme) {\n setScheme(props.scheme);\n }\n });\n return (\n <>\n <style>{baseStyle()}</style>\n {props.children}\n </>\n );\n}\nexport interface ProviderProps {\n /** 主题, 等同于使用 setScheme\n * @default 'auto'\n */\n scheme?: keyof typeof ColorScheme;\n /** 包裹的子项 */\n children?: JSX.Element;\n /** 响应 scheme 变化 */\n onScheme?(scheme: keyof typeof ColorScheme): void;\n}\nexport type ProviderElement = CustomElement<ProviderProps, 'onScheme'>;\n\ncustomElement<ProviderProps>('n-provider', (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onScheme(scheme: keyof typeof ColorScheme) {\n el.dispatchEvent(\n new CustomEvent('scheme', {\n detail: scheme,\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(Provider, props);\n});\nexport default Provider;\n"],"names":["createComponent","createEffect","mergeProps","customElement","noShadowDOM","theme","Provider","props","baseStyle","scheme","setScheme","onScheme","children","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"rangeMappings":"","mappings":"oIAAA,QAASA,mBAAAA,CAAe,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACrE,QAASC,iBAAAA,CAAa,CAAEC,eAAAA,CAAW,KAAQ,eAAgB,AAC3D,QAAOC,MAA4B,UAAW,CAG9C,SAASC,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGL,EAWzC,OATAD,IACAH,EAAa,WACXM,EAAMI,QAAQ,EAAdJ,EAAMI,QAAQ,MAAdJ,EAAiBE,IACnB,GACAR,EAAa,KACPM,EAAME,MAAM,EACdC,EAAUH,EAAME,MAAM,CAE1B,+BAGYD,eACPD,EAAMK,QAAQ,EAGrB,CAaAT,EAA6B,aAAc,CAACU,EAAGC,KAC7C,IAAMC,EAAKD,EAAIE,OAAO,CActB,OAAOhB,EAAgBM,EAbTJ,EACZ,CACES,SAASF,CAAgC,EACvCM,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQV,CACV,GAEJ,CACF,EACAI,GAIJ,EACA,gBAAeP,CAAS"}
1
+ {"version":3,"sources":["../../components/provider/index.tsx"],"sourcesContent":["import { createEffect, mergeProps } from 'solid-js';\nimport { customElement, noShadowDOM } from 'solid-element';\nimport theme, { ColorScheme } from '../theme';\nimport type { CustomElement } from '..';\n\nfunction Provider(props: ProviderProps) {\n const { baseStyle, scheme, setScheme } = theme;\n\n noShadowDOM();\n createEffect(() => {\n props.onScheme?.(scheme());\n });\n createEffect(() => {\n if (props.scheme) {\n setScheme(props.scheme);\n }\n });\n return (\n <>\n <style>{baseStyle()}</style>\n {props.children}\n </>\n );\n}\nexport interface ProviderProps {\n /** 主题, 等同于使用 setScheme\n * @default 'auto'\n */\n scheme?: keyof typeof ColorScheme;\n /** 包裹的子项 */\n children?: JSX.Element;\n /** 响应 scheme 变化 */\n onScheme?(scheme: keyof typeof ColorScheme): void;\n}\nexport type ProviderElement = CustomElement<ProviderProps, 'onScheme'>;\n\ncustomElement<ProviderProps>('n-provider', (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onScheme(scheme: keyof typeof ColorScheme) {\n el.dispatchEvent(\n new CustomEvent('scheme', {\n detail: scheme,\n }),\n );\n },\n },\n _,\n );\n\n return <Provider {...props} />;\n});\nexport default Provider;\n"],"names":["createEffect","mergeProps","customElement","noShadowDOM","theme","Provider","props","baseStyle","scheme","setScheme","onScheme","children","_","opt","el","element","dispatchEvent","CustomEvent","detail"],"rangeMappings":"","mappings":"mLAAA,QAASA,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACpD,QAASC,iBAAAA,CAAa,CAAEC,eAAAA,CAAW,KAAQ,eAAgB,AAC3D,QAAOC,MAA4B,UAAW,CAG9C,SAASC,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGL,EAWzC,OATAD,IACAH,EAAa,WACXM,EAAMI,QAAQ,EAAdJ,EAAMI,QAAQ,MAAdJ,EAAiBE,IACnB,GACAR,EAAa,KACPM,EAAME,MAAM,EACdC,EAAUH,EAAME,MAAM,CAE1B,+BAGYD,eACPD,EAAMK,QAAQ,EAGrB,CAaAT,EAA6B,aAAc,CAACU,EAAGC,KAC7C,IAAMC,EAAKD,EAAIE,OAAO,CActB,SAAQV,EAbMJ,EACZ,CACES,SAASF,CAAgC,EACvCM,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQV,CACV,GAEJ,CACF,EACAI,GAIJ,EACA,gBAAeP,CAAS"}
package/es/radio/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{template as e}from"solid-js/web";import{setAttribute as t}from"solid-js/web";import{insert as o}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as l}from"solid-js/web";import{createComponent as s}from"solid-js/web";import{className as a}from"solid-js/web";import{addEventListener as r}from"solid-js/web";let n=e("<style>"),d=e('<section part="box">'),m=e('<div part="item"><input class="radio" type="radio"><label class="label" part="label">');import{For as u,createComponent as b,createEffect as c,createMemo as v,createSignal as p,mergeProps as f}from"solid-js";import{css as h,cx as g}from"@moneko/css";import{customElement as j}from"solid-element";import{style as y}from"./style";import{FieldName as w}from"../basic-config";import k from"../get-options";import C from"../theme";function x(e){let{baseStyle:l}=C,[b,f]=p(e.defaultValue),j=v(()=>Object.assign({},w,e.fieldNames));function x(t){if(!e.disabled&&!t.disabled){let o=t[j().value];f(o),null==e.onChange||e.onChange.call(e,o)}}function $(e,t){"Enter"===t.key&&x(e)}let _=v(()=>k(e.options,j()));return c(()=>{f(e.value)}),[(()=>{let t=n();return o(t,l,null),o(t,y,null),o(t,()=>h(e.css),null),t})(),(()=>{let l=d();return o(l,s(u,{get each(){return _()},children:l=>{let s=e.disabled||l.disabled,n=()=>{x(l)},d=j();return(()=>{let u=m(),c=u.firstChild,v=c.nextSibling;return r(u,"click",n,!0),r(u,"keyup",$.bind(null,l),!0),t(u,"tabindex",s?-1:0),t(u,"aria-disabled",s),r(c,"change",n),c.disabled=s,t(c,"tabindex",-1),o(v,()=>l[d.label]),i(o=>{let i=g("item",l.class,l.status),s=e.name;return i!==o._v$&&a(u,o._v$=i),s!==o._v$2&&t(c,"name",o._v$2=s),o},{_v$:void 0,_v$2:void 0}),i(()=>c.value=l[d.value]),i(()=>c.checked=l[d.value]===b()),u})()}})),i(()=>a(l,g("box",e.layout,e.class))),l})()]}j("n-radio",{class:void 0,css:void 0,name:void 0,disabled:void 0,value:void 0,defaultValue:void 0,options:[],onChange:void 0,fieldNames:void 0,layout:void 0},(e,t)=>{let o=t.element,i=f({layout:o.layout||"horizontal",onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return c(()=>{o.removeAttribute("options"),o.removeAttribute("field-names"),o.removeAttribute("css")}),b(x,i)});export default x;l(["click","keyup"]);
1
+ import{template as e}from"solid-js/web";import{setAttribute as t}from"solid-js/web";import{insert as o}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as l}from"solid-js/web";import{createComponent as s}from"solid-js/web";import{className as a}from"solid-js/web";import{addEventListener as r}from"solid-js/web";let n=e("<style>"),d=e('<section part="box">'),m=e('<div part="item"><input class="radio" type="radio"><label class="label" part="label">');import{For as u,createEffect as b,createMemo as c,createSignal as v,mergeProps as p}from"solid-js";import{css as f,cx as h}from"@moneko/css";import{customElement as g}from"solid-element";import{style as j}from"./style";import{FieldName as y}from"../basic-config";import w from"../get-options";import k from"../theme";function C(e){let{baseStyle:l}=k,[p,g]=v(e.defaultValue),C=c(()=>Object.assign({},y,e.fieldNames));function x(t){if(!e.disabled&&!t.disabled){let o=t[C().value];g(o),null==e.onChange||e.onChange.call(e,o)}}function $(e,t){"Enter"===t.key&&x(e)}let _=c(()=>w(e.options,C()));return b(()=>{g(e.value)}),[(()=>{let t=n();return o(t,l,null),o(t,j,null),o(t,()=>f(e.css),null),t})(),(()=>{let l=d();return o(l,s(u,{get each(){return _()},children:l=>{let s=e.disabled||l.disabled,n=()=>{x(l)},d=C();return(()=>{let u=m(),b=u.firstChild,c=b.nextSibling;return r(u,"click",n,!0),r(u,"keyup",$.bind(null,l),!0),t(u,"tabindex",s?-1:0),t(u,"aria-disabled",s),r(b,"change",n),b.disabled=s,t(b,"tabindex",-1),o(c,()=>l[d.label]),i(o=>{let i=h("item",l.class,l.status),s=e.name;return i!==o._v$&&a(u,o._v$=i),s!==o._v$2&&t(b,"name",o._v$2=s),o},{_v$:void 0,_v$2:void 0}),i(()=>b.value=l[d.value]),i(()=>b.checked=l[d.value]===p()),u})()}})),i(()=>a(l,h("box",e.layout,e.class))),l})()]}g("n-radio",{class:void 0,css:void 0,name:void 0,disabled:void 0,value:void 0,defaultValue:void 0,options:[],onChange:void 0,fieldNames:void 0,layout:void 0},(e,t)=>{let o=t.element,i=p({layout:o.layout||"horizontal",onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return b(()=>{o.removeAttribute("options"),o.removeAttribute("field-names"),o.removeAttribute("css")}),s(C,i)});export default C;l(["click","keyup"]);
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/radio/index.tsx"],"sourcesContent":["import { For, createComponent, createEffect, createMemo, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface RadioOption extends Omit<BaseOption, 'icon'> {\n /** 值 */\n value?: string;\n}\n\nexport interface RadioProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 选项数据 */\n options?: (RadioOption | string)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string): void;\n /** 选项排列方式\n * @default 'horizontal'\n */\n layout?: 'vertical' | 'horizontal';\n}\n\nfunction Radio(props: RadioProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: RadioOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value]!;\n\n setValue(next);\n props.onChange?.(next);\n }\n }\n function onKeyUp(item: RadioOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue(props.value);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <section class={cx('box', props.layout, props.class)} part=\"box\">\n <For each={options()}>\n {(item) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => {\n onChange(item);\n };\n const fieldName = fieldNames();\n\n return (\n <div\n class={cx('item', item.class, item.status)}\n part=\"item\"\n tabindex={readOnly ? -1 : 0}\n aria-disabled={readOnly}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={handleChange}\n >\n <input\n class=\"radio\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n tabindex={-1}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label class=\"label\" part=\"label\">\n {item[fieldName.label]}\n </label>\n </div>\n );\n }}\n </For>\n </section>\n </>\n );\n}\n\nexport type RadioElement = CustomElement<RadioProps>;\n\ncustomElement<RadioProps>(\n 'n-radio',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n layout: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n layout: el.layout || 'horizontal',\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Radio, props);\n },\n);\nexport default Radio;\n"],"names":["For","createComponent","createEffect","createMemo","createSignal","mergeProps","css","cx","customElement","style","FieldName","getOptions","theme","Radio","props","baseStyle","value","setValue","defaultValue","fieldNames","Object","assign","onChange","item","disabled","next","onKeyUp","e","key","options","readOnly","handleChange","fieldName","bind","label","class","status","name","layout","_","opt","el","element","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":"","mappings":"ieAAA,QAASA,OAAAA,CAAG,CAAEC,mBAAAA,CAAe,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACpG,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAASC,SAAAA,CAAK,KAAQ,SAAU,AAChC,QAASC,aAAAA,CAAS,KAAQ,iBAAkB,AAC5C,QAAOC,MAAgB,gBAAiB,AACxC,QAAOC,MAAW,UAAW,CAiC7B,SAASC,EAAMC,CAAiB,EAC9B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGH,EAChB,CAACI,EAAOC,EAAS,CAAGb,EAAaU,EAAMI,YAAY,EACnDC,EAAahB,EAAW,IAAMiB,OAAOC,MAAM,CAAC,CAAC,EAAGX,EAAWI,EAAMK,UAAU,GAEjF,SAASG,EAASC,CAAiB,EACjC,GAAI,CAACT,EAAMU,QAAQ,EAAI,CAACD,EAAKC,QAAQ,CAAE,CACrC,IAAMC,EAAOF,CAAI,CAACJ,IAAaH,KAAK,CAAC,CAErCC,EAASQ,SACTX,EAAMQ,QAAQ,EAAdR,EAAMQ,QAAQ,MAAdR,EAAiBW,EACnB,CACF,CACA,SAASC,EAAQH,CAAiB,CAAEI,CAAgB,EACpC,UAAVA,EAAEC,GAAG,EACPN,EAASC,EAEb,CACA,IAAMM,EAAU1B,EAAW,IAClBQ,EAAWG,EAAMe,OAAO,CAAEV,MAOnC,OAJAjB,EAAa,KACXe,EAASH,EAAME,KAAK,CACtB,+BAKOD,YACAN,gBACAH,EAAIQ,EAAMR,GAAG,2CAGbN,qBAAU6B,cACR,AAACN,IACA,IAAMO,EAAWhB,EAAMU,QAAQ,EAAID,EAAKC,QAAQ,CAC1CO,EAAe,KACnBT,EAASC,EACX,EACMS,EAAYb,IAElB,wEAOaY,kBADAL,EAAQO,IAAI,CAAC,KAAMV,sBAFlBO,EAAW,GAAK,uBACXA,gBAYHC,cAHAD,iBACA,YAKTP,CAAI,CAACS,EAAUE,KAAK,CAAC,cAlBjB3B,EAAG,OAAQgB,EAAKY,KAAK,CAAEZ,EAAKa,MAAM,IAUjCtB,EAAMuB,IAAI,4GACTd,CAAI,CAACS,EAAUhB,KAAK,CAAC,kBAGnBO,CAAI,CAACS,EAAUhB,KAAK,CAAC,GAAKA,UAQ3C,eAjCYT,EAAG,MAAOO,EAAMwB,MAAM,CAAExB,EAAMqB,KAAK,UAsCzD,CAIA3B,EACE,UACA,CACE2B,MAAO,KAAK,EACZ7B,IAAK,KAAK,EACV+B,KAAM,KAAK,EACXb,SAAU,KAAK,EACfR,MAAO,KAAK,EACZE,aAAc,KAAK,EACnBW,QAAS,EAAE,CACXP,SAAU,KAAK,EACfH,WAAY,KAAK,EACjBmB,OAAQ,KAAK,CACf,EACA,CAACC,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChB5B,EAAQT,EACZ,CACEiC,OAAQG,EAAGH,MAAM,EAAI,aACrBhB,SAASG,CAAY,EACnBgB,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQpB,CACV,GAEJ,CACF,EACAc,GAQF,OALArC,EAAa,KACXuC,EAAGK,eAAe,CAAC,WACnBL,EAAGK,eAAe,CAAC,eACnBL,EAAGK,eAAe,CAAC,MACrB,GACO7C,EAAgBY,EAAOC,EAChC,EAEF,gBAAeD,CAAM"}
1
+ {"version":3,"sources":["../../components/radio/index.tsx"],"sourcesContent":["import { For, createEffect, createMemo, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface RadioOption extends Omit<BaseOption, 'icon'> {\n /** 值 */\n value?: string;\n}\n\nexport interface RadioProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 选项数据 */\n options?: (RadioOption | string)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string): void;\n /** 选项排列方式\n * @default 'horizontal'\n */\n layout?: 'vertical' | 'horizontal';\n}\n\nfunction Radio(props: RadioProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: RadioOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value]!;\n\n setValue(next);\n props.onChange?.(next);\n }\n }\n function onKeyUp(item: RadioOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue(props.value);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <section class={cx('box', props.layout, props.class)} part=\"box\">\n <For each={options()}>\n {(item) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => {\n onChange(item);\n };\n const fieldName = fieldNames();\n\n return (\n <div\n class={cx('item', item.class, item.status)}\n part=\"item\"\n tabindex={readOnly ? -1 : 0}\n aria-disabled={readOnly}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={handleChange}\n >\n <input\n class=\"radio\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n tabindex={-1}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label class=\"label\" part=\"label\">\n {item[fieldName.label]}\n </label>\n </div>\n );\n }}\n </For>\n </section>\n </>\n );\n}\n\nexport type RadioElement = CustomElement<RadioProps>;\n\ncustomElement<RadioProps>(\n 'n-radio',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n layout: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n layout: el.layout || 'horizontal',\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return <Radio {...props} />;\n },\n);\nexport default Radio;\n"],"names":["For","createEffect","createMemo","createSignal","mergeProps","css","cx","customElement","style","FieldName","getOptions","theme","Radio","props","baseStyle","value","setValue","defaultValue","fieldNames","Object","assign","onChange","item","disabled","next","onKeyUp","e","key","options","readOnly","handleChange","fieldName","bind","label","class","status","name","layout","_","opt","el","element","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":"","mappings":"ieAAA,QAASA,OAAAA,CAAG,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,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,QAASC,aAAAA,CAAS,KAAQ,iBAAkB,AAC5C,QAAOC,MAAgB,gBAAiB,AACxC,QAAOC,MAAW,UAAW,CAiC7B,SAASC,EAAMC,CAAiB,EAC9B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGH,EAChB,CAACI,EAAOC,EAAS,CAAGb,EAAaU,EAAMI,YAAY,EACnDC,EAAahB,EAAW,IAAMiB,OAAOC,MAAM,CAAC,CAAC,EAAGX,EAAWI,EAAMK,UAAU,GAEjF,SAASG,EAASC,CAAiB,EACjC,GAAI,CAACT,EAAMU,QAAQ,EAAI,CAACD,EAAKC,QAAQ,CAAE,CACrC,IAAMC,EAAOF,CAAI,CAACJ,IAAaH,KAAK,CAAC,CAErCC,EAASQ,SACTX,EAAMQ,QAAQ,EAAdR,EAAMQ,QAAQ,MAAdR,EAAiBW,EACnB,CACF,CACA,SAASC,EAAQH,CAAiB,CAAEI,CAAgB,EACpC,UAAVA,EAAEC,GAAG,EACPN,EAASC,EAEb,CACA,IAAMM,EAAU1B,EAAW,IAClBQ,EAAWG,EAAMe,OAAO,CAAEV,MAOnC,OAJAjB,EAAa,KACXe,EAASH,EAAME,KAAK,CACtB,+BAKOD,YACAN,gBACAH,EAAIQ,EAAMR,GAAG,2CAGbL,qBAAU4B,cACR,AAACN,IACA,IAAMO,EAAWhB,EAAMU,QAAQ,EAAID,EAAKC,QAAQ,CAC1CO,EAAe,KACnBT,EAASC,EACX,EACMS,EAAYb,IAElB,wEAOaY,kBADAL,EAAQO,IAAI,CAAC,KAAMV,sBAFlBO,EAAW,GAAK,uBACXA,gBAYHC,cAHAD,iBACA,YAKTP,CAAI,CAACS,EAAUE,KAAK,CAAC,cAlBjB3B,EAAG,OAAQgB,EAAKY,KAAK,CAAEZ,EAAKa,MAAM,IAUjCtB,EAAMuB,IAAI,4GACTd,CAAI,CAACS,EAAUhB,KAAK,CAAC,kBAGnBO,CAAI,CAACS,EAAUhB,KAAK,CAAC,GAAKA,UAQ3C,eAjCYT,EAAG,MAAOO,EAAMwB,MAAM,CAAExB,EAAMqB,KAAK,UAsCzD,CAIA3B,EACE,UACA,CACE2B,MAAO,KAAK,EACZ7B,IAAK,KAAK,EACV+B,KAAM,KAAK,EACXb,SAAU,KAAK,EACfR,MAAO,KAAK,EACZE,aAAc,KAAK,EACnBW,QAAS,EAAE,CACXP,SAAU,KAAK,EACfH,WAAY,KAAK,EACjBmB,OAAQ,KAAK,CACf,EACA,CAACC,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChB5B,EAAQT,EACZ,CACEiC,OAAQG,EAAGH,MAAM,EAAI,aACrBhB,SAASG,CAAY,EACnBgB,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQpB,CACV,GAEJ,CACF,EACAc,GAQF,OALArC,EAAa,KACXuC,EAAGK,eAAe,CAAC,WACnBL,EAAGK,eAAe,CAAC,eACnBL,EAAGK,eAAe,CAAC,MACrB,KACQjC,EAAUC,EACpB,EAEF,gBAAeD,CAAM"}
@@ -1,12 +1,12 @@
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 l}from"solid-js/web";import{getOwner as s}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{className as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let m=t("<style>"),u=t("<div>"),f=t('<input class="segmented" type="radio">'),p=t('<span class="icon">'),c=t('<n-typography type="secondary">',!0,!1),b=t("<label>");import{For as v,Show as g,createComponent as h,createEffect as w,createMemo as y,createSignal as j,mergeProps as x}from"solid-js";import k from"@moneko/common/lib/isFunction";import{css as C,cx as $}from"@moneko/css";import{customElement as E}from"solid-element";import{style as N}from"./style";import{FieldName as V}from"../basic-config";import A from"../get-options";import L from"../theme";import"../typography";function O(t){let n;let{baseStyle:h,isDark:x}=L,[E,O]=j(t.defaultValue),[T,F]=j(""),H=y(()=>x()?C`
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 l}from"solid-js/web";import{getOwner as s}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as n}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{className as a}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let m=t("<style>"),u=t("<div>"),f=t('<input class="segmented" type="radio">'),p=t('<span class="icon">'),c=t('<n-typography type="secondary">',!0,!1),b=t("<label>");import{For as v,Show as g,createEffect as h,createMemo as w,createSignal as y,mergeProps as j}from"solid-js";import x from"@moneko/common/lib/isFunction";import{css as k,cx as C}from"@moneko/css";import{customElement as $}from"solid-element";import{style as E}from"./style";import{FieldName as N}from"../basic-config";import V from"../get-options";import A from"../theme";import"../typography";function L(t){let n;let{baseStyle:j,isDark:$}=A,[L,O]=y(t.defaultValue),[T,F]=y(""),H=w(()=>$()?k`
2
2
  :host {
3
3
  --segmented-bg: #000;
4
4
  --segmented-current-bg: #1f1f1f;
5
5
  }
6
- `:C`
6
+ `:k`
7
7
  :host {
8
8
  --segmented-bg: var(--primary-details-bg);
9
9
  --segmented-current-bg: #fff;
10
10
  }
11
- `),W=y(()=>Object.assign({},V,t.fieldNames));function _(e){if(!t.disabled&&!e.disabled){let o=e[W().value];k(t.onChange)&&t.onChange(o),void 0===t.value&&O(o)}}let q=y(()=>A(t.options,W()));return w(()=>{O(void 0!==t.value&&t.value||t.defaultValue)}),w(()=>{let e=q().find(e=>e[W().value]===E()),t=setTimeout(()=>{clearTimeout(t);let o=null==e?void 0:e.ref;o?F(`.box {--w: ${o.offsetWidth}px;--h: ${o.offsetHeight}px;--left: ${o.offsetLeft}px;}`):F("")},0)}),[(()=>{let e=m();return l(e,h,null),l(e,H,null),l(e,N,null),l(e,T,null),l(e,()=>C(t.css),null),e})(),(()=>{let m=u(),h=n;return"function"==typeof h?e(h,m):n=m,l(m,r(v,{get each(){return q()},children:(n,m)=>{let u=t.disabled||n.disabled,v=()=>_(n),h=W();return[(()=>{let e=f();return d(e,"change",v),e.disabled=u,i(()=>o(e,"name",t.name)),i(()=>e.value=n[h.value]),i(()=>e.checked=n[h.value]===E()),e})(),(()=>{let t=b(),f=q()[m()].ref;return"function"==typeof f?e(f,t):q()[m()].ref=t,d(t,"click",v,!0),t.$$keyup=({key:e})=>{"Enter"===e&&_(n)},o(t,"tabindex",u?-1:0),o(t,"aria-disabled",u),l(t,r(g,{get when(){return n[h.icon]},get children(){let e=p();return l(e,()=>n[h.icon]),e}}),null),l(t,()=>n[h.label],null),l(t,r(g,{get when(){return n[h.suffix]},get children(){let e=c();return e._$owner=s(),l(e,()=>n[h.suffix]),e}}),null),i(()=>a(t,$("label",n.class))),t})()]}})),i(()=>a(m,$("box",t.class))),m})()]}E("n-segmented",{class:void 0,css:void 0,name:void 0,disabled:void 0,value:void 0,defaultValue:void 0,options:[],onChange:void 0,fieldNames:void 0},(e,t)=>{let o=t.element,l=x({css:o.css,name:o.name,disabled:o.disabled,value:o.value,defaultValue:o.defaultValue,options:o.options,fieldNames:o.fieldNames,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return w(()=>{o.removeAttribute("options"),o.removeAttribute("field-names"),o.removeAttribute("css")}),h(O,l)});export default O;n(["click","keyup"]);
11
+ `),W=w(()=>Object.assign({},N,t.fieldNames));function _(e){if(!t.disabled&&!e.disabled){let o=e[W().value];x(t.onChange)&&t.onChange(o),void 0===t.value&&O(o)}}let q=w(()=>V(t.options,W()));return h(()=>{O(void 0!==t.value&&t.value||t.defaultValue)}),h(()=>{let e=q().find(e=>e[W().value]===L()),t=setTimeout(()=>{clearTimeout(t);let o=null==e?void 0:e.ref;o?F(`.box {--w: ${o.offsetWidth}px;--h: ${o.offsetHeight}px;--left: ${o.offsetLeft}px;}`):F("")},0)}),[(()=>{let e=m();return l(e,j,null),l(e,H,null),l(e,E,null),l(e,T,null),l(e,()=>k(t.css),null),e})(),(()=>{let m=u(),h=n;return"function"==typeof h?e(h,m):n=m,l(m,r(v,{get each(){return q()},children:(n,m)=>{let u=t.disabled||n.disabled,v=()=>_(n),h=W();return[(()=>{let e=f();return d(e,"change",v),e.disabled=u,i(()=>o(e,"name",t.name)),i(()=>e.value=n[h.value]),i(()=>e.checked=n[h.value]===L()),e})(),(()=>{let t=b(),f=q()[m()].ref;return"function"==typeof f?e(f,t):q()[m()].ref=t,d(t,"click",v,!0),t.$$keyup=({key:e})=>{"Enter"===e&&_(n)},o(t,"tabindex",u?-1:0),o(t,"aria-disabled",u),l(t,r(g,{get when(){return n[h.icon]},get children(){let e=p();return l(e,()=>n[h.icon]),e}}),null),l(t,()=>n[h.label],null),l(t,r(g,{get when(){return n[h.suffix]},get children(){let e=c();return e._$owner=s(),l(e,()=>n[h.suffix]),e}}),null),i(()=>a(t,C("label",n.class))),t})()]}})),i(()=>a(m,C("box",t.class))),m})()]}$("n-segmented",{class:void 0,css:void 0,name:void 0,disabled:void 0,value:void 0,defaultValue:void 0,options:[],onChange:void 0,fieldNames:void 0},(e,t)=>{let o=t.element,l=j({css:o.css,name:o.name,disabled:o.disabled,value:o.value,defaultValue:o.defaultValue,options:o.options,fieldNames:o.fieldNames,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return h(()=>{o.removeAttribute("options"),o.removeAttribute("field-names"),o.removeAttribute("css")}),r(L,l)});export default L;n(["click","keyup"]);
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/segmented/index.tsx"],"sourcesContent":["import {\n For,\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 { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport '../typography';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface SegmentedProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n options?: (BaseOption | string | number)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string | number): void;\n}\n\nfunction Segmented(props: SegmentedProps) {\n const { baseStyle, isDark } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const [offsetStyle, setOffsetStyle] = createSignal('');\n let box: HTMLDivElement | undefined;\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --segmented-bg: #000;\n --segmented-current-bg: #1f1f1f;\n }\n `;\n }\n\n return css`\n :host {\n --segmented-bg: var(--primary-details-bg);\n --segmented-current-bg: #fff;\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: BaseOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (isFunction(props.onChange)) {\n props.onChange(next);\n }\n if (props.value === void 0) {\n setValue(next);\n }\n }\n }\n function onKeyUp(key: string, item: BaseOption) {\n if (key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue((props.value !== void 0 && props.value) || props.defaultValue);\n });\n\n createEffect(() => {\n const val = options().find((o) => o[fieldNames().value] === value());\n const timer = setTimeout(() => {\n clearTimeout(timer);\n const el = val?.ref;\n\n if (el) {\n setOffsetStyle(\n `.box {--w: ${el.offsetWidth}px;--h: ${el.offsetHeight}px;--left: ${el.offsetLeft}px;}`,\n );\n } else {\n setOffsetStyle('');\n }\n }, 0);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {offsetStyle()}\n {css(props.css)}\n </style>\n <div ref={box} class={cx('box', props.class)}>\n <For each={options()}>\n {(item, i) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => onChange(item);\n const fieldName = fieldNames();\n\n return (\n <>\n <input\n class=\"segmented\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label\n class={cx('label', item.class)}\n tabindex={readOnly ? -1 : 0}\n onKeyUp={({ key }) => onKeyUp(key, item)}\n onClick={handleChange}\n aria-disabled={readOnly}\n ref={options()[i()].ref}\n >\n <Show when={item[fieldName.icon]}>\n <span class=\"icon\">{item[fieldName.icon]}</span>\n </Show>\n {item[fieldName.label]}\n <Show when={item[fieldName.suffix]}>\n <n-typography type=\"secondary\">{item[fieldName.suffix]}</n-typography>\n </Show>\n </label>\n </>\n );\n }}\n </For>\n </div>\n </>\n );\n}\n\nexport type SegmentedElement = CustomElement<SegmentedProps>;\n\ncustomElement<SegmentedProps>(\n 'n-segmented',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n name: el.name,\n disabled: el.disabled,\n value: el.value,\n defaultValue: el.defaultValue,\n options: el.options,\n fieldNames: el.fieldNames,\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Segmented, props);\n },\n);\nexport default Segmented;\n"],"names":["For","Show","createComponent","createEffect","createMemo","createSignal","mergeProps","isFunction","css","cx","customElement","style","FieldName","getOptions","theme","Segmented","props","box","baseStyle","isDark","value","setValue","defaultValue","offsetStyle","setOffsetStyle","cssVar","fieldNames","Object","assign","onChange","item","disabled","next","options","val","find","o","timer","setTimeout","clearTimeout","el","ref","offsetWidth","offsetHeight","offsetLeft","i","readOnly","handleChange","fieldName","name","key","icon","label","suffix","class","_","opt","element","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":";;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../components/segmented/index.tsx"],"sourcesContent":["import { For, Show, createEffect, createMemo, createSignal, mergeProps } from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport '../typography';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface SegmentedProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n options?: (BaseOption | string | number)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string | number): void;\n}\n\nfunction Segmented(props: SegmentedProps) {\n const { baseStyle, isDark } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const [offsetStyle, setOffsetStyle] = createSignal('');\n let box: HTMLDivElement | undefined;\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --segmented-bg: #000;\n --segmented-current-bg: #1f1f1f;\n }\n `;\n }\n\n return css`\n :host {\n --segmented-bg: var(--primary-details-bg);\n --segmented-current-bg: #fff;\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: BaseOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (isFunction(props.onChange)) {\n props.onChange(next);\n }\n if (props.value === void 0) {\n setValue(next);\n }\n }\n }\n function onKeyUp(key: string, item: BaseOption) {\n if (key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue((props.value !== void 0 && props.value) || props.defaultValue);\n });\n\n createEffect(() => {\n const val = options().find((o) => o[fieldNames().value] === value());\n const timer = setTimeout(() => {\n clearTimeout(timer);\n const el = val?.ref;\n\n if (el) {\n setOffsetStyle(\n `.box {--w: ${el.offsetWidth}px;--h: ${el.offsetHeight}px;--left: ${el.offsetLeft}px;}`,\n );\n } else {\n setOffsetStyle('');\n }\n }, 0);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {offsetStyle()}\n {css(props.css)}\n </style>\n <div ref={box} class={cx('box', props.class)}>\n <For each={options()}>\n {(item, i) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => onChange(item);\n const fieldName = fieldNames();\n\n return (\n <>\n <input\n class=\"segmented\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label\n class={cx('label', item.class)}\n tabindex={readOnly ? -1 : 0}\n onKeyUp={({ key }) => onKeyUp(key, item)}\n onClick={handleChange}\n aria-disabled={readOnly}\n ref={options()[i()].ref}\n >\n <Show when={item[fieldName.icon]}>\n <span class=\"icon\">{item[fieldName.icon]}</span>\n </Show>\n {item[fieldName.label]}\n <Show when={item[fieldName.suffix]}>\n <n-typography type=\"secondary\">{item[fieldName.suffix]}</n-typography>\n </Show>\n </label>\n </>\n );\n }}\n </For>\n </div>\n </>\n );\n}\n\nexport type SegmentedElement = CustomElement<SegmentedProps>;\n\ncustomElement<SegmentedProps>(\n 'n-segmented',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n name: el.name,\n disabled: el.disabled,\n value: el.value,\n defaultValue: el.defaultValue,\n options: el.options,\n fieldNames: el.fieldNames,\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return <Segmented {...props} />;\n },\n);\nexport default Segmented;\n"],"names":["For","Show","createEffect","createMemo","createSignal","mergeProps","isFunction","css","cx","customElement","style","FieldName","getOptions","theme","Segmented","props","box","baseStyle","isDark","value","setValue","defaultValue","offsetStyle","setOffsetStyle","cssVar","fieldNames","Object","assign","onChange","item","disabled","next","options","val","find","o","timer","setTimeout","clearTimeout","el","ref","offsetWidth","offsetHeight","offsetLeft","i","readOnly","handleChange","fieldName","name","key","icon","label","suffix","class","_","opt","element","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":";;;;;;;;;;","mappings":"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"}
@@ -1,2 +1,2 @@
1
- function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}import{use as t}from"solid-js/web";import{template as n}from"solid-js/web";import{setAttribute as r}from"solid-js/web";import{mergeProps as o}from"solid-js/web";import"solid-js/web";import{insert as l}from"solid-js/web";import{getOwner as i}from"solid-js/web";import{effect as a}from"solid-js/web";import{delegateEvents as s}from"solid-js/web";import{createComponent as d}from"solid-js/web";import{className as c}from"solid-js/web";import{addEventListener as u}from"solid-js/web";let p=n('<span class="prefix">'),v=n('<label class="label">'),f=n('<span class="suffix">'),m=n('<div class="select"><div class="tags">'),g=n("<span>"),b=n('<span class="placeholder">'),h=n("<n-tag>",!0,!1);import{For as w,Show as $,batch as _,createComponent as y,createEffect as j,createMemo as x,createSignal as A,mergeProps as C,onMount as O,splitProps as k,untrack as I}from"solid-js";import E from"@moneko/common/lib/isFunction";import{cx as N}from"@moneko/css";import{customElement as P}from"solid-element";import{style as D}from"./style";import{FieldName as L}from"../basic-config";import B,{defaultProps as F}from"../dropdown";import M from"../get-options";import"../tag";function S(e){let n,s;let[y,C]=k(e,["css","value","onChange","open","onOpenChange","label","prefixIcon","suffixIcon","placeholder","trigger","options"]),[P,F]=A(null),[S,U]=A([]),[V,W]=A(""),[q,z]=A([]),[G,H]=A({}),J=x(()=>Object.assign({},L,C.fieldNames));function K(e){C.disabled||(E(y.onOpenChange)&&y.onOpenChange(e),void 0===y.open&&F(e))}function Q(e){var t,r,o;(null==(t=e.target)?void 0:t.parentElement)===(null==n?void 0:null==(o=n.parentNode)?void 0:null==(r=o.parentNode)?void 0:r.activeElement)&&K(!I(P))}function R(e,t){void 0===y.value&&U(e?Array.isArray(e)?e:[e]:[]),E(y.onChange)&&y.onChange(e,t)}function T({key:e}){switch(e){case"ArrowDown":case"ArrowUp":break;case"Backspace":if(C.multiple){let e=[...I(S)];e.splice(-1,1),R(e,I(G)[I(S).length-1])}else R(void 0,I(G)[I(S)[0]]);break;case"Enter":K(!I(P));break;case"Escape":K(!1)}}function X(e){e.stopPropagation(),e.preventDefault()}function Y(e,t){X(t),R(I(S).filter(t=>t!==e),I(G)[e])}function Z(e){X(e),K(!0)}function ee(e){X(e),I(P)&&K(!1)}j(()=>{_(()=>{let e=J(),t=M(y.options,e);z(t),H(function e(t,n){let r={};for(let o=0,l=t.length;o<l;o++){let l=t[o],i=l[n.options];r[l[n.value]]=l,Array.isArray(i)&&Object.assign(r,e(i,n));let a=l[n.children];r[l[n.value]]=l,Array.isArray(a)&&Object.assign(r,e(a,n))}return r}(t,e))})}),j(()=>{_(()=>{y.open!==I(P)&&void 0!==y.open&&F(y.open),void 0!==y.value&&null!==y.value?U(Array.isArray(y.value)?y.value:[y.value]):U([])})}),O(()=>{if(void 0===y.value){let e=C.defaultValue;U(e?Array.isArray(e)?e:[e]:[])}}),j(()=>{y.label&&W(`.label {--x: ${(null==s?void 0:s.offsetLeft)||0}px; }`)});let et=x(()=>E(y.prefixIcon)?y.prefixIcon():y.prefixIcon),en=x(()=>E(y.label)?y.label():y.label),er=x(()=>E(y.suffixIcon)?y.suffixIcon():y.suffixIcon);return d(B,o({placement:"left",get css(){return D+V()+(y.css||"")},trigger:"none",get items(){return q()},get value(){return S()},onChange:R,get open(){return P()},onOpenChange:K},C,{get children(){let e=m(),o=n,_=e.firstChild,j=s;return u(e,"blur",ee),u(e,"focus",Z),u(e,"keydown",T,!0),"function"==typeof o?t(o,e):n=e,l(e,d($,{get when(){return et()},get children(){let e=p();return l(e,et),e}}),_),l(e,d($,{get when(){return en()},get children(){let e=v();return l(e,en),e}}),_),u(_,"mousedown",Q,!0),"function"==typeof j?t(j,_):s=_,l(_,d($,{get when(){return C.multiple},get fallback(){return d($,{get when(){return S().length},get fallback(){return d($,{get when(){return y.placeholder},get children(){let e=b();return l(e,()=>y.placeholder),e}})},get children(){let e=g();return l(e,()=>{var e;return(null==(e=G()[S()[0]])?void 0:e[J().label])||S()[0]}),a(()=>c(e,N("value",P()&&"opacity"))),e}})},get children(){return d(w,{get each(){return S()},get fallback(){return d($,{get when(){return y.placeholder},get children(){let e=b();return l(e,()=>y.placeholder),e}})},children:e=>(()=>{let t=h();return u(t,"close",Y.bind(null,e)),t._$owner=i(),l(t,()=>{var t;return(null==(t=G()[e])?void 0:t[J().label])||e}),a(n=>{var r,o,l,i,a;let s=N("tag",P()&&"opacity"),d=(null==(r=G()[e])?void 0:r.type)||"primary",u=null==(o=G()[e])?void 0:o.color,p=null==(l=G()[e])?void 0:l.icon,v=!C.disabled&&!(null==(i=G()[e])?void 0:i.disabled),f=C.disabled||(null==(a=G()[e])?void 0:a.disabled);return s!==n._v$3&&c(t,n._v$3=s),d!==n._v$4&&(t.type=n._v$4=d),u!==n._v$5&&(t.color=n._v$5=u),p!==n._v$6&&(t.icon=n._v$6=p),v!==n._v$7&&(t.closeIcon=n._v$7=v),f!==n._v$8&&(t.disabled=n._v$8=f),n},{_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0}),t})()})}})),l(e,d($,{get when(){return er()},get children(){let e=f();return l(e,er),e}}),null),a(t=>{let n=C.disabled?-1:0,o=C.disabled;return n!==t._v$&&r(e,"tabindex",t._v$=n),o!==t._v$2&&r(e,"aria-disabled",t._v$2=o),t},{_v$:void 0,_v$2:void 0}),e}}))}P("n-select",e({},F,{options:[],label:void 0,placeholder:"请选择",dropdownMatchSelectWidth:!0,prefixIcon:void 0,suffixIcon:void 0}),(e,t)=>{let n=t.element,r=C({onChange(e,t){n.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onOpenChange(e){n.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return j(()=>{n.removeAttribute("options"),n.removeAttribute("field-names"),n.removeAttribute("css")}),y(S,r)});export default S;s(["keydown","mousedown"]);
1
+ function e(){return(e=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}).apply(this,arguments)}import{use as t}from"solid-js/web";import{template as n}from"solid-js/web";import{setAttribute as r}from"solid-js/web";import{mergeProps as o}from"solid-js/web";import"solid-js/web";import{insert as l}from"solid-js/web";import{getOwner as i}from"solid-js/web";import{effect as a}from"solid-js/web";import{delegateEvents as s}from"solid-js/web";import{createComponent as d}from"solid-js/web";import{addEventListener as c}from"solid-js/web";let u=n('<span class="prefix">'),p=n('<label class="label">'),v=n('<span class="suffix">'),f=n('<div class="select"><div class="tags">'),g=n('<span class="value">'),m=n('<span class="placeholder">'),b=n('<n-tag class="tag">',!0,!1);import{For as h,Show as w,batch as $,createEffect as _,createMemo as y,createSignal as j,mergeProps as x,onMount as A,splitProps as C,untrack as O}from"solid-js";import I from"@moneko/common/lib/isFunction";import{customElement as k}from"solid-element";import{style as E}from"./style";import{FieldName as L}from"../basic-config";import N,{defaultProps as P}from"../dropdown";import D from"../get-options";import"../tag";function B(e){let n,s;let[x,k]=C(e,["css","value","onChange","open","onOpenChange","label","prefixIcon","suffixIcon","placeholder","trigger","options"]),[P,B]=j(null),[F,M]=j([]),[S,U]=j(""),[V,W]=j([]),[q,z]=j({}),G=y(()=>Object.assign({},L,k.fieldNames));function H(e){k.disabled||(I(x.onOpenChange)&&x.onOpenChange(e),void 0===x.open&&B(e))}function J(e){var t,r,o;(null==(t=e.target)?void 0:t.parentElement)===(null==n?void 0:null==(o=n.parentNode)?void 0:null==(r=o.parentNode)?void 0:r.activeElement)&&H(!O(P))}function K(e,t){void 0===x.value&&M(e?Array.isArray(e)?e:[e]:[]),I(x.onChange)&&x.onChange(e,t)}function Q({key:e}){switch(e){case"ArrowDown":case"ArrowUp":break;case"Backspace":if(k.multiple){let e=[...O(F)];e.splice(-1,1),K(e,O(q)[O(F).length-1])}else K(void 0,O(q)[O(F)[0]]);break;case"Enter":H(!O(P));break;case"Escape":H(!1)}}function R(e){e.stopPropagation(),e.preventDefault()}function T(e,t){R(t),K(O(F).filter(t=>t!==e),O(q)[e])}function X(e){R(e),H(!0)}function Y(e){R(e),O(P)&&H(!1)}_(()=>{$(()=>{let e=G(),t=D(x.options,e);W(t),z(function e(t,n){let r={};for(let o=0,l=t.length;o<l;o++){let l=t[o],i=l[n.options];r[l[n.value]]=l,Array.isArray(i)&&Object.assign(r,e(i,n));let a=l[n.children];r[l[n.value]]=l,Array.isArray(a)&&Object.assign(r,e(a,n))}return r}(t,e))})}),_(()=>{$(()=>{x.open!==O(P)&&void 0!==x.open&&B(x.open),void 0!==x.value&&null!==x.value?M(Array.isArray(x.value)?x.value:[x.value]):M([])})}),A(()=>{if(void 0===x.value){let e=k.defaultValue;M(e?Array.isArray(e)?e:[e]:[])}}),_(()=>{x.label&&U(`.label {--x: ${(null==s?void 0:s.offsetLeft)||0}px; }`)});let Z=y(()=>I(x.prefixIcon)?x.prefixIcon():x.prefixIcon),ee=y(()=>I(x.label)?x.label():x.label),et=y(()=>I(x.suffixIcon)?x.suffixIcon():x.suffixIcon);return d(N,o({placement:"left",get css(){return E+S()+(x.css||"")},trigger:"none",get items(){return V()},get value(){return F()},onChange:K,get open(){return P()},onOpenChange:H},k,{get children(){let e=f(),o=n,$=e.firstChild,_=s;return c(e,"blur",Y),c(e,"focus",X),c(e,"keydown",Q,!0),"function"==typeof o?t(o,e):n=e,l(e,d(w,{get when(){return Z()},get children(){let e=u();return l(e,Z),e}}),$),l(e,d(w,{get when(){return ee()},get children(){let e=p();return l(e,ee),e}}),$),c($,"mousedown",J,!0),"function"==typeof _?t(_,$):s=$,l($,d(w,{get when(){return k.multiple},get fallback(){return d(w,{get when(){return F().length},get fallback(){return d(w,{get when(){return x.placeholder},get children(){let e=m();return l(e,()=>x.placeholder),e}})},get children(){let e=g();return l(e,()=>{var e;return(null==(e=q()[F()[0]])?void 0:e[G().label])||F()[0]}),a(()=>e.classList.toggle("opacity",!!P())),e}})},get children(){return d(h,{get each(){return F()},get fallback(){return d(w,{get when(){return x.placeholder},get children(){let e=m();return l(e,()=>x.placeholder),e}})},children:e=>(()=>{let t=b();return c(t,"close",T.bind(null,e)),t._$owner=i(),l(t,()=>{var t;return(null==(t=q()[e])?void 0:t[G().label])||e}),a(n=>{var r,o,l,i,a;let s=!!P(),d=(null==(r=q()[e])?void 0:r.type)||"primary",c=null==(o=q()[e])?void 0:o.color,u=null==(l=q()[e])?void 0:l.icon,p=!k.disabled&&!(null==(i=q()[e])?void 0:i.disabled),v=k.disabled||(null==(a=q()[e])?void 0:a.disabled);return s!==n._v$3&&t.classList.toggle("opacity",n._v$3=s),d!==n._v$4&&(t.type=n._v$4=d),c!==n._v$5&&(t.color=n._v$5=c),u!==n._v$6&&(t.icon=n._v$6=u),p!==n._v$7&&(t.closeIcon=n._v$7=p),v!==n._v$8&&(t.disabled=n._v$8=v),n},{_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0}),t})()})}})),l(e,d(w,{get when(){return et()},get children(){let e=v();return l(e,et),e}}),null),a(t=>{let n=k.disabled?-1:0,o=k.disabled;return n!==t._v$&&r(e,"tabindex",t._v$=n),o!==t._v$2&&r(e,"aria-disabled",t._v$2=o),t},{_v$:void 0,_v$2:void 0}),e}}))}k("n-select",e({},P,{options:[],label:void 0,placeholder:"请选择",dropdownMatchSelectWidth:!0,prefixIcon:void 0,suffixIcon:void 0}),(e,t)=>{let n=t.element,r=x({onChange(e,t){n.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onOpenChange(e){n.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return _(()=>{n.removeAttribute("options"),n.removeAttribute("field-names"),n.removeAttribute("css")}),d(B,r)});export default B;s(["keydown","mousedown"]);
2
2
  //# sourceMappingURL=index.js.map