neko-ui 2.8.0 → 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.
- package/README.md +2 -0
- package/es/back-top/index.js +1 -1
- package/es/back-top/index.js.map +1 -1
- package/es/back-top/style.js +4 -1
- package/es/back-top/style.js.map +1 -1
- package/es/button/index.d.ts +1 -0
- package/es/button/index.js +1 -1
- package/es/button/index.js.map +1 -1
- package/es/capture-screen/index.js +1 -1
- package/es/capture-screen/index.js.map +1 -1
- package/es/carousel/index.js +1 -1
- package/es/carousel/index.js.map +1 -1
- package/es/checkbox/index.js +1 -1
- package/es/checkbox/index.js.map +1 -1
- package/es/code/index.js +1 -1
- package/es/code/index.js.map +1 -1
- package/es/color-palette/index.js +1 -1
- package/es/color-palette/index.js.map +1 -1
- package/es/color-picker/index.js +1 -1
- package/es/color-picker/index.js.map +1 -1
- package/es/cron/index.js +1 -1
- package/es/cron/index.js.map +1 -1
- package/es/date-picker/date.js +1 -1
- package/es/date-picker/date.js.map +1 -1
- package/es/date-picker/dayjs.js +1 -1
- package/es/date-picker/dayjs.js.map +1 -1
- package/es/date-picker/index.js +1 -1
- package/es/date-picker/index.js.map +1 -1
- package/es/date-picker/month.js +1 -1
- package/es/date-picker/month.js.map +1 -1
- package/es/date-picker/panel.js +1 -1
- package/es/date-picker/panel.js.map +1 -1
- package/es/date-picker/year.js +1 -1
- package/es/date-picker/year.js.map +1 -1
- package/es/dropdown/index.js +1 -1
- package/es/dropdown/index.js.map +1 -1
- package/es/img/index.d.ts +9 -1
- package/es/img/index.js +1 -1
- package/es/img/index.js.map +1 -1
- package/es/img/style.js +37 -2
- package/es/img/style.js.map +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/input/index.js +1 -1
- package/es/input/index.js.map +1 -1
- package/es/input-number/index.js +2 -2
- package/es/input-number/index.js.map +1 -1
- package/es/md/index.js +1 -1
- package/es/md/index.js.map +1 -1
- package/es/menu/index.js +1 -1
- package/es/menu/index.js.map +1 -1
- package/es/modal/index.js +1 -1
- package/es/modal/index.js.map +1 -1
- package/es/notification/notification.js +1 -1
- package/es/notification/notification.js.map +1 -1
- package/es/pagination/index.js +1 -1
- package/es/pagination/index.js.map +1 -1
- package/es/popover/index.js +1 -1
- package/es/popover/index.js.map +1 -1
- package/es/provider/index.js +1 -1
- package/es/provider/index.js.map +1 -1
- package/es/radio/index.js +1 -1
- package/es/radio/index.js.map +1 -1
- package/es/segmented/index.js +3 -3
- package/es/segmented/index.js.map +1 -1
- package/es/select/index.js +1 -1
- package/es/select/index.js.map +1 -1
- package/es/skeleton/index.js +3 -3
- package/es/skeleton/index.js.map +1 -1
- package/es/spin/index.js +5 -4
- package/es/spin/index.js.map +1 -1
- package/es/switch/index.js +1 -1
- package/es/switch/index.js.map +1 -1
- package/es/table/index.js +1 -1
- package/es/table/index.js.map +1 -1
- package/es/tabs/index.d.ts +5 -0
- package/es/tabs/index.js +2 -2
- package/es/tabs/index.js.map +1 -1
- package/es/tag/index.js +3 -3
- package/es/tag/index.js.map +1 -1
- package/es/theme/index.d.ts +1 -1
- package/es/theme/index.js +1 -76
- package/es/theme/index.js.map +1 -1
- package/es/tree/index.js +1 -1
- package/es/tree/index.js.map +1 -1
- package/es/tree/register.js +1 -1
- package/es/tree/register.js.map +1 -1
- package/es/tree/type.d.ts +3 -1
- package/es/typography/index.js +3 -3
- package/es/typography/index.js.map +1 -1
- package/lib/back-top/index.js +1 -1
- package/lib/back-top/index.js.map +1 -1
- package/lib/back-top/style.js +4 -1
- package/lib/back-top/style.js.map +1 -1
- package/lib/button/index.d.ts +1 -0
- package/lib/button/index.js +1 -1
- package/lib/button/index.js.map +1 -1
- package/lib/capture-screen/index.js +1 -1
- package/lib/capture-screen/index.js.map +1 -1
- package/lib/carousel/index.js +1 -1
- package/lib/carousel/index.js.map +1 -1
- package/lib/checkbox/index.js +1 -1
- package/lib/checkbox/index.js.map +1 -1
- package/lib/code/index.js +1 -1
- package/lib/code/index.js.map +1 -1
- package/lib/color-palette/index.js +1 -1
- package/lib/color-palette/index.js.map +1 -1
- package/lib/color-picker/index.js +1 -1
- package/lib/color-picker/index.js.map +1 -1
- package/lib/cron/index.js +1 -1
- package/lib/cron/index.js.map +1 -1
- package/lib/date-picker/date.js +1 -1
- package/lib/date-picker/date.js.map +1 -1
- package/lib/date-picker/dayjs.js +1 -1
- package/lib/date-picker/dayjs.js.map +1 -1
- package/lib/date-picker/index.js +1 -1
- package/lib/date-picker/index.js.map +1 -1
- package/lib/date-picker/month.js +1 -1
- package/lib/date-picker/month.js.map +1 -1
- package/lib/date-picker/panel.js +1 -1
- package/lib/date-picker/panel.js.map +1 -1
- package/lib/date-picker/year.js +1 -1
- package/lib/date-picker/year.js.map +1 -1
- package/lib/dropdown/index.js +1 -1
- package/lib/dropdown/index.js.map +1 -1
- package/lib/img/index.d.ts +9 -1
- package/lib/img/index.js +1 -1
- package/lib/img/index.js.map +1 -1
- package/lib/img/style.js +35 -0
- package/lib/img/style.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/input/index.js +1 -1
- package/lib/input/index.js.map +1 -1
- package/lib/input-number/index.js +1 -1
- package/lib/input-number/index.js.map +1 -1
- package/lib/md/index.js +1 -1
- package/lib/md/index.js.map +1 -1
- package/lib/menu/index.js +1 -1
- package/lib/menu/index.js.map +1 -1
- package/lib/modal/index.js +1 -1
- package/lib/modal/index.js.map +1 -1
- package/lib/notification/notification.js +1 -1
- package/lib/notification/notification.js.map +1 -1
- package/lib/pagination/index.js +1 -1
- package/lib/pagination/index.js.map +1 -1
- package/lib/popover/index.js +1 -1
- package/lib/popover/index.js.map +1 -1
- package/lib/provider/index.js +1 -1
- package/lib/provider/index.js.map +1 -1
- package/lib/radio/index.js +1 -1
- package/lib/radio/index.js.map +1 -1
- package/lib/segmented/index.js +1 -1
- package/lib/segmented/index.js.map +1 -1
- package/lib/select/index.js +1 -1
- package/lib/select/index.js.map +1 -1
- package/lib/skeleton/index.js +4 -4
- package/lib/skeleton/index.js.map +1 -1
- package/lib/spin/index.js +5 -4
- package/lib/spin/index.js.map +1 -1
- package/lib/switch/index.js +1 -1
- package/lib/switch/index.js.map +1 -1
- package/lib/table/index.js +1 -1
- package/lib/table/index.js.map +1 -1
- package/lib/tabs/index.d.ts +5 -0
- package/lib/tabs/index.js +2 -2
- package/lib/tabs/index.js.map +1 -1
- package/lib/tag/index.js +3 -3
- package/lib/tag/index.js.map +1 -1
- package/lib/theme/index.d.ts +1 -1
- package/lib/theme/index.js +1 -76
- package/lib/theme/index.js.map +1 -1
- package/lib/tree/index.js +1 -1
- package/lib/tree/index.js.map +1 -1
- package/lib/tree/register.js +1 -1
- package/lib/tree/register.js.map +1 -1
- package/lib/tree/type.d.ts +3 -1
- package/lib/typography/index.js +1 -1
- package/lib/typography/index.js.map +1 -1
- package/package.json +11 -12
- package/umd/index.js +1 -1
package/es/provider/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/provider/index.tsx"],"sourcesContent":["import {
|
|
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,
|
|
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
|
package/es/radio/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/radio/index.tsx"],"sourcesContent":["import { For,
|
|
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"}
|
package/es/segmented/index.js
CHANGED
|
@@ -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,
|
|
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
|
-
`:
|
|
6
|
+
`:k`
|
|
7
7
|
:host {
|
|
8
8
|
--segmented-bg: var(--primary-details-bg);
|
|
9
9
|
--segmented-current-bg: #fff;
|
|
10
10
|
}
|
|
11
|
-
`),W=
|
|
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 {
|
|
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":"qkBAAA,QAASA,OAAAA,CAAG,CAAEC,QAAAA,CAAI,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACzF,QAASC,MAAkB,+BAAiB,AAC5C,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,AAC7B,OAAO,eAAgB,CAwBvB,SAASC,EAAUC,CAAqB,MAIlCC,EAHJ,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAE,CAAGL,EACxB,CAACM,EAAOC,EAAS,CAAGhB,EAAaW,EAAMM,YAAY,EACnD,CAACC,EAAaC,EAAe,CAAGnB,EAAa,IAE7CoB,EAASrB,EAAW,IACxB,AAAIe,IACKX,CAAG,CAAC;;;;;MAKX,CAAC,CAGIA,CAAG,CAAC;;;;;IAKX,CAAC,EAEGkB,EAAatB,EAAW,IAAMuB,OAAOC,MAAM,CAAC,CAAC,EAAGhB,EAAWI,EAAMU,UAAU,GAEjF,SAASG,EAASC,CAAgB,EAChC,GAAI,CAACd,EAAMe,QAAQ,EAAI,CAACD,EAAKC,QAAQ,CAAE,CACrC,IAAMC,EAAOF,CAAI,CAACJ,IAAaN,KAAK,CAAC,CAEjCb,EAAWS,EAAMa,QAAQ,GAC3Bb,EAAMa,QAAQ,CAACG,GAEG,KAAK,IAArBhB,EAAMI,KAAK,EACbC,EAASW,EAEb,CACF,CAMA,IAAMC,EAAU7B,EAAW,IAClBS,EAAWG,EAAMiB,OAAO,CAAEP,MAuBnC,OApBAvB,EAAa,KACXkB,EAAS,AAAiB,KAAK,IAArBL,EAAMI,KAAK,EAAeJ,EAAMI,KAAK,EAAKJ,EAAMM,YAAY,CACxE,GAEAnB,EAAa,KACX,IAAM+B,EAAMD,IAAUE,IAAI,CAAC,AAACC,GAAMA,CAAC,CAACV,IAAaN,KAAK,CAAC,GAAKA,KACtDiB,EAAQC,WAAW,KACvBC,aAAaF,GACb,IAAMG,QAAKN,SAAAA,EAAKO,GAAG,CAEfD,EACFhB,EACE,CAAC,WAAW,EAAEgB,EAAGE,WAAW,CAAC,QAAQ,EAAEF,EAAGG,YAAY,CAAC,WAAW,EAAEH,EAAGI,UAAU,CAAC,IAAI,CAAC,EAGzFpB,EAAe,GAEnB,EAAG,EACL,+BAKON,YACAO,YACAd,YACAY,gBACAf,EAAIQ,EAAMR,GAAG,gCAENS,oCAAAA,UACPhB,qBAAUgC,cACR,CAACH,EAAMe,KACN,IAAMC,EAAW9B,EAAMe,QAAQ,EAAID,EAAKC,QAAQ,CAC1CgB,EAAe,IAAMlB,EAASC,GAC9BkB,EAAYtB,IAElB,2CASgBqB,cAFAD,mBAFJ9B,EAAMiC,IAAI,iBACTnB,CAAI,CAACkB,EAAU5B,KAAK,CAAC,kBAEnBU,CAAI,CAACkB,EAAU5B,KAAK,CAAC,GAAKA,6BAS9Ba,GAAS,CAACY,IAAI,CAACJ,GAAG,mCAAlBR,GAAS,CAACY,IAAI,CAACJ,GAAG,eAFdM,gBADA,CAAC,CAAEG,IAAAA,CAAG,CAAE,IA1DnB,UA0DgCA,GAzD1CrB,EAyD+CC,mBADzBgB,EAAW,GAAK,uBAGXA,SAGd5C,qBAAW4B,CAAI,CAACkB,EAAUG,IAAI,CAAC,0CACVrB,CAAI,CAACkB,EAAUG,IAAI,CAAC,qBAEzCrB,CAAI,CAACkB,EAAUI,KAAK,CAAC,aACrBlD,qBAAW4B,CAAI,CAACkB,EAAUK,MAAM,CAAC,wDACAvB,CAAI,CAACkB,EAAUK,MAAM,CAAC,uBAZjD5C,EAAG,QAASqB,EAAKwB,KAAK,UAiBrC,eApCkB7C,EAAG,MAAOO,EAAMsC,KAAK,UAyCjD,CAIA5C,EACE,cACA,CACE4C,MAAO,KAAK,EACZ9C,IAAK,KAAK,EACVyC,KAAM,KAAK,EACXlB,SAAU,KAAK,EACfX,MAAO,KAAK,EACZE,aAAc,KAAK,EACnBW,QAAS,EAAE,CACXJ,SAAU,KAAK,EACfH,WAAY,KAAK,CACnB,EACA,CAAC6B,EAAGC,KACF,IAAMhB,EAAKgB,EAAIC,OAAO,CAChBzC,EAAQV,EACZ,CACEE,IAAKgC,EAAGhC,GAAG,CACXyC,KAAMT,EAAGS,IAAI,CACblB,SAAUS,EAAGT,QAAQ,CACrBX,MAAOoB,EAAGpB,KAAK,CACfE,aAAckB,EAAGlB,YAAY,CAC7BW,QAASO,EAAGP,OAAO,CACnBP,WAAYc,EAAGd,UAAU,CACzBG,SAASG,CAAY,EACnBQ,EAAGkB,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQ5B,CACV,GAEJ,CACF,EACAuB,GAQF,OALApD,EAAa,KACXqC,EAAGqB,eAAe,CAAC,WACnBrB,EAAGqB,eAAe,CAAC,eACnBrB,EAAGqB,eAAe,CAAC,MACrB,KACQ9C,EAAcC,EACxB,EAEF,gBAAeD,CAAU"}
|
package/es/select/index.js
CHANGED
|
@@ -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{
|
|
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
|
package/es/select/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/select/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n batch,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onMount,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport Dropdown, { defaultProps } from '../dropdown';\nimport getOptions from '../get-options';\nimport '../tag';\nimport type { CustomElement, DropdownMultipleProps, DropdownProps, MenuOption } from '..';\n\nfunction Select(props: SelectProps) {\n const [local, other] = splitProps(props, [\n 'css',\n 'value',\n 'onChange',\n 'open',\n 'onOpenChange',\n 'label',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'trigger',\n 'options',\n ]);\n let ref: HTMLInputElement | undefined;\n let tagsRef: HTMLDivElement | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const [x, setX] = createSignal<string>('');\n const [options, setOptions] = createSignal<MenuOption[]>([]);\n const [kv, setKv] = createSignal<Record<string, MenuOption>>({});\n\n const fieldNames = createMemo(() => Object.assign({}, FieldName, other.fieldNames));\n\n function getKv(arr: MenuOption[], fieldDic: typeof FieldName) {\n const optKv: Record<string, MenuOption> = {};\n\n for (let i = 0, len = arr.length; i < len; i++) {\n const item = arr[i];\n const _options = item[fieldDic.options];\n\n optKv[item[fieldDic.value]!] = item;\n if (Array.isArray(_options)) {\n Object.assign(optKv, getKv(_options as MenuOption[], fieldDic));\n }\n const _children = item[fieldDic.children];\n\n optKv[item[fieldDic.value]!] = item;\n if (Array.isArray(_children)) {\n Object.assign(optKv, getKv(_children as MenuOption[], fieldDic));\n }\n }\n return optKv;\n }\n\n createEffect(() => {\n batch(() => {\n const fieldDic = fieldNames();\n const opts = getOptions(local.options, fieldDic);\n\n setOptions(opts);\n setKv(getKv(opts, fieldDic));\n });\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n if (isFunction(local.onOpenChange)) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function click(e: MouseEvent) {\n if (\n (e.target as Element)?.parentElement ===\n (ref?.parentNode?.parentNode as Document)?.activeElement\n ) {\n openChange(!untrack(open));\n }\n }\n function onChange(val: (string | number)[] | string | number | undefined, item: MenuOption) {\n if (local.value === void 0) {\n setValue(val ? (Array.isArray(val) ? val : [val]) : []);\n }\n if (isFunction(local.onChange)) {\n local.onChange(val, item);\n }\n }\n function keyDown({ key }: { key: string }) {\n switch (key) {\n case 'ArrowDown':\n // console.log(key);\n // Object.keys(state.current.kv).indexOf(state.current.value)\n break;\n case 'ArrowUp':\n break;\n case 'Backspace':\n if (other.multiple) {\n const old = [...untrack(value)];\n\n old.splice(-1, 1);\n onChange(old, untrack(kv)[untrack(value).length - 1]);\n } else {\n onChange(void 0, untrack(kv)[untrack(value)[0]]);\n }\n break;\n case 'Enter':\n openChange(!untrack(open));\n break;\n case 'Escape':\n openChange(false);\n break;\n default:\n break;\n }\n }\n function preventDefault(e: Event) {\n e.stopPropagation();\n e.preventDefault();\n }\n function deleteValue(v: string | number, e: CustomEvent) {\n preventDefault(e);\n onChange(untrack(value).filter((old) => old !== v) as never, untrack(kv)[v]);\n }\n function focus(e: FocusEvent | MouseEvent) {\n preventDefault(e);\n openChange(true);\n }\n function blur(e: FocusEvent) {\n preventDefault(e);\n if (untrack(open)) {\n openChange(false);\n }\n }\n\n createEffect(() => {\n batch(() => {\n if (local.open !== untrack(open) && local.open !== void 0) {\n setOpen(local.open);\n }\n if (local.value !== void 0 && local.value !== null) {\n setValue(Array.isArray(local.value) ? local.value : [local.value]);\n } else {\n setValue([]);\n }\n });\n });\n onMount(() => {\n if (local.value === void 0) {\n const val = other.defaultValue;\n\n setValue(val ? (Array.isArray(val) ? val : [val]) : []);\n }\n });\n createEffect(() => {\n if (local.label) {\n setX(`.label {--x: ${tagsRef?.offsetLeft || 0}px; }`);\n }\n });\n const prefix = createMemo(() =>\n isFunction(local.prefixIcon) ? (local.prefixIcon() as JSX.Element) : local.prefixIcon,\n );\n const label = createMemo(() =>\n isFunction(local.label) ? (local.label() as JSX.Element) : local.label,\n );\n const suffix = createMemo(() =>\n isFunction(local.suffixIcon) ? (local.suffixIcon() as JSX.Element) : local.suffixIcon,\n );\n\n return (\n <Dropdown\n placement=\"left\"\n css={style + x() + (local.css || '')}\n trigger=\"none\"\n items={options()}\n value={value() as unknown as string}\n onChange={onChange}\n open={open()}\n onOpenChange={openChange}\n {...other}\n >\n <div\n ref={ref}\n class=\"select\"\n tabindex={other.disabled ? -1 : 0}\n onKeyDown={keyDown}\n onFocus={focus}\n onBlur={blur}\n aria-disabled={other.disabled}\n >\n <Show when={prefix()}>\n <span class=\"prefix\">{prefix()}</span>\n </Show>\n <Show when={label()}>\n <label class=\"label\">{label()}</label>\n </Show>\n <div class=\"tags\" ref={tagsRef} onMouseDown={click}>\n <Show\n when={other.multiple}\n fallback={\n <Show\n when={value().length}\n fallback={\n <Show when={local.placeholder}>\n <span class=\"placeholder\">{local.placeholder}</span>\n </Show>\n }\n >\n <span class={cx('value', open() && 'opacity')}>\n {kv()[value()[0]]?.[fieldNames().label] || value()[0]}\n </span>\n </Show>\n }\n >\n <For\n each={value()}\n fallback={\n <Show when={local.placeholder}>\n <span class=\"placeholder\">{local.placeholder}</span>\n </Show>\n }\n >\n {(v) => (\n <n-tag\n class={cx('tag', open() && 'opacity')}\n type={kv()[v]?.type || 'primary'}\n color={kv()[v]?.color}\n icon={kv()[v]?.icon}\n close-icon={!other.disabled && !kv()[v]?.disabled}\n onClose={deleteValue.bind(null, v)}\n disabled={other.disabled || kv()[v]?.disabled}\n >\n {kv()[v]?.[fieldNames().label] || v}\n </n-tag>\n )}\n </For>\n </Show>\n </div>\n <Show when={suffix()}>\n <span class=\"suffix\">{suffix()}</span>\n </Show>\n </div>\n </Dropdown>\n );\n}\n\n/** 通用API */\ninterface SelectBaseProps {\n /** 占位符 */\n placeholder?: string;\n /** 选项 */\n options?: (MenuOption | string | number)[];\n /** 标题 */\n label?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 前缀图标 */\n prefixIcon?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 后缀图标 */\n suffixIcon?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n style?: Record<string, string | number>;\n}\n\n/** 单选 */\nexport interface SelectProps extends Omit<DropdownProps, 'items' | 'children'>, SelectBaseProps {\n /** 值 */\n value?: string | number;\n}\n\n/** 多选 */\nexport interface SelectMultipleProps\n extends Omit<DropdownMultipleProps, 'items' | 'children'>,\n SelectBaseProps {\n /** 值\n * @default []\n */\n value?: (string | number)[];\n}\nexport type SelectElement = CustomElement<SelectProps, 'onChange' | 'onOpenChange'>;\nexport type SelectMultipleElement = CustomElement<SelectMultipleProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<SelectProps>(\n 'n-select',\n {\n ...defaultProps,\n options: [],\n label: void 0,\n placeholder: '请选择',\n dropdownMatchSelectWidth: true,\n prefixIcon: void 0,\n suffixIcon: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onChange(key: string | number, item: MenuOption) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [key, item],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Select, props);\n },\n);\nexport default Select;\n"],"names":["For","Show","batch","createComponent","createEffect","createMemo","createSignal","mergeProps","onMount","splitProps","untrack","isFunction","cx","customElement","style","FieldName","Dropdown","defaultProps","getOptions","Select","props","ref","tagsRef","local","other","open","setOpen","value","setValue","x","setX","options","setOptions","kv","setKv","fieldNames","Object","assign","openChange","next","disabled","onOpenChange","click","e","target","parentElement","parentNode","activeElement","onChange","val","item","Array","isArray","keyDown","key","multiple","old","splice","length","preventDefault","stopPropagation","deleteValue","v","filter","focus","blur","fieldDic","opts","getKv","arr","optKv","i","len","_options","_children","children","defaultValue","label","offsetLeft","prefix","prefixIcon","suffix","suffixIcon","css","placeholder","bind","type","color","icon","dropdownMatchSelectWidth","_","opt","el","element","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":"","mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/select/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n batch,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onMount,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport Dropdown, { defaultProps } from '../dropdown';\nimport getOptions from '../get-options';\nimport '../tag';\nimport type { CustomElement, DropdownMultipleProps, DropdownProps, MenuOption } from '..';\n\nfunction Select(props: SelectProps) {\n const [local, other] = splitProps(props, [\n 'css',\n 'value',\n 'onChange',\n 'open',\n 'onOpenChange',\n 'label',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'trigger',\n 'options',\n ]);\n let ref: HTMLInputElement | undefined;\n let tagsRef: HTMLDivElement | undefined;\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const [x, setX] = createSignal<string>('');\n const [options, setOptions] = createSignal<MenuOption[]>([]);\n const [kv, setKv] = createSignal<Record<string, MenuOption>>({});\n\n const fieldNames = createMemo(() => Object.assign({}, FieldName, other.fieldNames));\n\n function getKv(arr: MenuOption[], fieldDic: typeof FieldName) {\n const optKv: Record<string, MenuOption> = {};\n\n for (let i = 0, len = arr.length; i < len; i++) {\n const item = arr[i];\n const _options = item[fieldDic.options];\n\n optKv[item[fieldDic.value]!] = item;\n if (Array.isArray(_options)) {\n Object.assign(optKv, getKv(_options as MenuOption[], fieldDic));\n }\n const _children = item[fieldDic.children];\n\n optKv[item[fieldDic.value]!] = item;\n if (Array.isArray(_children)) {\n Object.assign(optKv, getKv(_children as MenuOption[], fieldDic));\n }\n }\n return optKv;\n }\n\n createEffect(() => {\n batch(() => {\n const fieldDic = fieldNames();\n const opts = getOptions(local.options, fieldDic);\n\n setOptions(opts);\n setKv(getKv(opts, fieldDic));\n });\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n if (isFunction(local.onOpenChange)) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n function click(e: MouseEvent) {\n if (\n (e.target as Element)?.parentElement ===\n (ref?.parentNode?.parentNode as Document)?.activeElement\n ) {\n openChange(!untrack(open));\n }\n }\n function onChange(val: (string | number)[] | string | number | undefined, item: MenuOption) {\n if (local.value === void 0) {\n setValue(val ? (Array.isArray(val) ? val : [val]) : []);\n }\n if (isFunction(local.onChange)) {\n local.onChange(val, item);\n }\n }\n function keyDown({ key }: { key: string }) {\n switch (key) {\n case 'ArrowDown':\n // console.log(key);\n // Object.keys(state.current.kv).indexOf(state.current.value)\n break;\n case 'ArrowUp':\n break;\n case 'Backspace':\n if (other.multiple) {\n const old = [...untrack(value)];\n\n old.splice(-1, 1);\n onChange(old, untrack(kv)[untrack(value).length - 1]);\n } else {\n onChange(void 0, untrack(kv)[untrack(value)[0]]);\n }\n break;\n case 'Enter':\n openChange(!untrack(open));\n break;\n case 'Escape':\n openChange(false);\n break;\n default:\n break;\n }\n }\n function preventDefault(e: Event) {\n e.stopPropagation();\n e.preventDefault();\n }\n function deleteValue(v: string | number, e: CustomEvent) {\n preventDefault(e);\n onChange(untrack(value).filter((old) => old !== v) as never, untrack(kv)[v]);\n }\n function focus(e: FocusEvent | MouseEvent) {\n preventDefault(e);\n openChange(true);\n }\n function blur(e: FocusEvent) {\n preventDefault(e);\n if (untrack(open)) {\n openChange(false);\n }\n }\n\n createEffect(() => {\n batch(() => {\n if (local.open !== untrack(open) && local.open !== void 0) {\n setOpen(local.open);\n }\n if (local.value !== void 0 && local.value !== null) {\n setValue(Array.isArray(local.value) ? local.value : [local.value]);\n } else {\n setValue([]);\n }\n });\n });\n onMount(() => {\n if (local.value === void 0) {\n const val = other.defaultValue;\n\n setValue(val ? (Array.isArray(val) ? val : [val]) : []);\n }\n });\n createEffect(() => {\n if (local.label) {\n setX(`.label {--x: ${tagsRef?.offsetLeft || 0}px; }`);\n }\n });\n const prefix = createMemo(() =>\n isFunction(local.prefixIcon) ? (local.prefixIcon() as JSX.Element) : local.prefixIcon,\n );\n const label = createMemo(() =>\n isFunction(local.label) ? (local.label() as JSX.Element) : local.label,\n );\n const suffix = createMemo(() =>\n isFunction(local.suffixIcon) ? (local.suffixIcon() as JSX.Element) : local.suffixIcon,\n );\n\n return (\n <Dropdown\n placement=\"left\"\n css={style + x() + (local.css || '')}\n trigger=\"none\"\n items={options()}\n value={value() as unknown as string}\n onChange={onChange}\n open={open()}\n onOpenChange={openChange}\n {...other}\n >\n <div\n ref={ref}\n class=\"select\"\n tabindex={other.disabled ? -1 : 0}\n onKeyDown={keyDown}\n onFocus={focus}\n onBlur={blur}\n aria-disabled={other.disabled}\n >\n <Show when={prefix()}>\n <span class=\"prefix\">{prefix()}</span>\n </Show>\n <Show when={label()}>\n <label class=\"label\">{label()}</label>\n </Show>\n <div class=\"tags\" ref={tagsRef} onMouseDown={click}>\n <Show\n when={other.multiple}\n fallback={\n <Show\n when={value().length}\n fallback={\n <Show when={local.placeholder}>\n <span class=\"placeholder\">{local.placeholder}</span>\n </Show>\n }\n >\n <span\n class=\"value\"\n classList={{\n opacity: !!open(),\n }}\n >\n {kv()[value()[0]]?.[fieldNames().label] || value()[0]}\n </span>\n </Show>\n }\n >\n <For\n each={value()}\n fallback={\n <Show when={local.placeholder}>\n <span class=\"placeholder\">{local.placeholder}</span>\n </Show>\n }\n >\n {(v) => (\n <n-tag\n class=\"tag\"\n classList={{\n opacity: !!open(),\n }}\n type={kv()[v]?.type || 'primary'}\n color={kv()[v]?.color}\n icon={kv()[v]?.icon}\n close-icon={!other.disabled && !kv()[v]?.disabled}\n onClose={deleteValue.bind(null, v)}\n disabled={other.disabled || kv()[v]?.disabled}\n >\n {kv()[v]?.[fieldNames().label] || v}\n </n-tag>\n )}\n </For>\n </Show>\n </div>\n <Show when={suffix()}>\n <span class=\"suffix\">{suffix()}</span>\n </Show>\n </div>\n </Dropdown>\n );\n}\n\n/** 通用API */\ninterface SelectBaseProps {\n /** 占位符 */\n placeholder?: string;\n /** 选项 */\n options?: (MenuOption | string | number)[];\n /** 标题 */\n label?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 前缀图标 */\n prefixIcon?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 后缀图标 */\n suffixIcon?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n style?: Record<string, string | number>;\n}\n\n/** 单选 */\nexport interface SelectProps extends Omit<DropdownProps, 'items' | 'children'>, SelectBaseProps {\n /** 值 */\n value?: string | number;\n}\n\n/** 多选 */\nexport interface SelectMultipleProps\n extends Omit<DropdownMultipleProps, 'items' | 'children'>,\n SelectBaseProps {\n /** 值\n * @default []\n */\n value?: (string | number)[];\n}\nexport type SelectElement = CustomElement<SelectProps, 'onChange' | 'onOpenChange'>;\nexport type SelectMultipleElement = CustomElement<SelectMultipleProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<SelectProps>(\n 'n-select',\n {\n ...defaultProps,\n options: [],\n label: void 0,\n placeholder: '请选择',\n dropdownMatchSelectWidth: true,\n prefixIcon: void 0,\n suffixIcon: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onChange(key: string | number, item: MenuOption) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [key, item],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return <Select {...props} />;\n },\n);\nexport default Select;\n"],"names":["For","Show","batch","createEffect","createMemo","createSignal","mergeProps","onMount","splitProps","untrack","isFunction","customElement","style","FieldName","Dropdown","defaultProps","getOptions","Select","props","ref","tagsRef","local","other","open","setOpen","value","setValue","x","setX","options","setOptions","kv","setKv","fieldNames","Object","assign","openChange","next","disabled","onOpenChange","click","e","target","parentElement","parentNode","activeElement","onChange","val","item","Array","isArray","keyDown","key","multiple","old","splice","length","preventDefault","stopPropagation","deleteValue","v","filter","focus","blur","fieldDic","opts","getKv","arr","optKv","i","len","_options","_children","children","defaultValue","label","offsetLeft","prefix","prefixIcon","suffix","suffixIcon","css","placeholder","bind","type","color","icon","dropdownMatchSelectWidth","_","opt","el","element","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":"","mappings":"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"}
|
package/es/skeleton/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{className as
|
|
1
|
+
import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as r}from"solid-js/web";import{className as a}from"solid-js/web";let s=e("<style>"),n=e('<div class="avatar">'),o=e('<div class="title">'),l=e('<div><div class="body"><div class="paragraph">'),c=e("<div>");import{For as d,Show as g,createMemo as v,mergeProps as b}from"solid-js";import{css as p,cx as f}from"@moneko/css";import{customElement as m}from"solid-element";import u from"../theme";let k=p`
|
|
2
2
|
:host {
|
|
3
3
|
display: block;
|
|
4
4
|
inline-size: 100%;
|
|
@@ -68,7 +68,7 @@ import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";im
|
|
|
68
68
|
background-position-x: -20%;
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
-
`;function
|
|
71
|
+
`;function h(e){let{baseStyle:b,isDark:m}=u,h=v(()=>Array(e.rows).fill(0)),x=v(()=>m()?p`
|
|
72
72
|
:host {
|
|
73
73
|
--skeleton-bg: rgb(255 255 255 / 6%);
|
|
74
74
|
--skeleton-bg-active: linear-gradient(
|
|
@@ -90,5 +90,5 @@ import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";im
|
|
|
90
90
|
)
|
|
91
91
|
transparent 180%/200% 100%;
|
|
92
92
|
}
|
|
93
|
-
`);return[(()=>{let i=
|
|
93
|
+
`);return[(()=>{let i=s();return t(i,b,null),t(i,x,null),t(i,k,null),t(i,()=>p(e.css),null),i})(),(()=>{let s=l(),v=s.firstChild,b=v.firstChild;return t(s,r(g,{get when(){return e.avatar},get children(){let t=n();return i(()=>t.classList.toggle("active",!!e.active)),t}}),v),t(v,r(g,{get when(){return e.title},get children(){let t=o();return i(()=>t.classList.toggle("active",!!e.active)),t}}),b),t(b,r(d,{get each(){return h()},children:()=>(()=>{let t=c();return i(()=>t.classList.toggle("active",!!e.active)),t})()})),i(()=>a(s,f("skeleton",e.class))),s})()]}m("n-skeleton",{rows:3,active:void 0,avatar:void 0,title:void 0,css:void 0,class:void 0},(e,t)=>{let i=t.element;return r(h,b({rows:i.rows,active:i.active,avatar:i.avatar,title:i.title,css:i.css},e))});export default h;
|
|
94
94
|
//# sourceMappingURL=index.js.map
|
package/es/skeleton/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/skeleton/index.tsx"],"sourcesContent":["import { For, Show,
|
|
1
|
+
{"version":3,"sources":["../../components/skeleton/index.tsx"],"sourcesContent":["import { For, Show, createMemo, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nconst style = css`\n :host {\n display: block;\n inline-size: 100%;\n }\n\n .skeleton {\n display: flex;\n inline-size: 100%;\n gap: 16px;\n }\n\n .avatar,\n .title,\n .paragraph > div {\n overflow: hidden;\n border-radius: var(--border-radius);\n background: var(--skeleton-bg);\n transition: background-color var(--transition-duration) var(--transition-timing-function);\n }\n\n .avatar {\n border-radius: 50%;\n inline-size: 32px;\n block-size: 32px;\n }\n\n .body {\n flex: 1;\n }\n\n .title {\n margin-block-end: 16px;\n inline-size: 32%;\n block-size: 32px;\n }\n\n .paragraph {\n display: flex;\n padding: 0;\n flex-direction: column;\n gap: 12px;\n\n & > div {\n inline-size: 100%;\n block-size: 16px;\n list-style: none;\n\n &:last-of-type {\n inline-size: 65%;\n }\n }\n }\n\n .active {\n &::after {\n display: block;\n block-size: 100%;\n animation: skeleton-effect 1.4s var(--transition-timing-function) infinite;\n background: var(--skeleton-bg-active);\n content: '';\n transition: background-color var(--transition-duration) var(--transition-timing-function);\n }\n }\n\n @keyframes skeleton-effect {\n to {\n background-position-x: -20%;\n }\n }\n`;\n\nexport interface SkeletonProps {\n /** 自定义样式表 */\n css?: string;\n /** 自定义类名 */\n class?: string;\n /** 行\n * @default 3\n */\n rows?: number;\n /** 显示动画\n * @default false\n */\n active?: boolean;\n /** 显示头像\n * @default false\n */\n avatar?: boolean;\n /** 显示标题\n * @default false\n */\n title?: boolean;\n}\n\nfunction Skeleton(props: SkeletonProps) {\n const { baseStyle, isDark } = theme;\n const rows = createMemo(() => Array(props.rows).fill(0));\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --skeleton-bg: rgb(255 255 255 / 6%);\n --skeleton-bg-active: linear-gradient(\n 100deg,\n rgb(255 255 255 / 5%) 40%,\n rgb(255 255 255 / 15%) 50%,\n rgb(255 255 255 / 5%) 60%\n )\n transparent 180%/200% 100%;\n }\n `;\n }\n\n return css`\n :host {\n --skeleton-bg: rgb(0 0 0 / 6%);\n --skeleton-bg-active: linear-gradient(\n 100deg,\n rgb(0 0 0 / 5%) 40%,\n rgb(0 0 0 / 15%) 50%,\n rgb(0 0 0 / 5%) 60%\n )\n transparent 180%/200% 100%;\n }\n `;\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {css(props.css)}\n </style>\n <div class={cx('skeleton', props.class)}>\n <Show when={props.avatar}>\n <div\n class=\"avatar\"\n classList={{\n active: props.active,\n }}\n />\n </Show>\n <div class=\"body\">\n <Show when={props.title}>\n <div\n class=\"title\"\n classList={{\n active: props.active,\n }}\n />\n </Show>\n <div class=\"paragraph\">\n <For each={rows()}>\n {() => (\n <div\n classList={{\n active: props.active,\n }}\n />\n )}\n </For>\n </div>\n </div>\n </div>\n </>\n );\n}\n\nexport type SkeletonElement = CustomElement<SkeletonProps>;\ncustomElement<SkeletonProps>(\n 'n-skeleton',\n {\n rows: 3,\n active: void 0,\n avatar: void 0,\n title: void 0,\n css: void 0,\n class: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n rows: el.rows,\n active: el.active,\n avatar: el.avatar,\n title: el.title,\n css: el.css,\n },\n _,\n );\n\n return <Skeleton {...props} />;\n },\n);\nexport default Skeleton;\n"],"names":["For","Show","createMemo","mergeProps","css","cx","customElement","theme","style","Skeleton","props","baseStyle","isDark","rows","Array","fill","cssVar","avatar","active","title","class","_","opt","el","element"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"wVAAA,QAASA,OAAAA,CAAG,CAAEC,QAAAA,CAAI,CAAEC,cAAAA,CAAU,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AAC7D,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAAOC,MAAW,UAAW,CAG7B,IAAMC,EAAQJ,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsElB,CAAC,CAyBD,SAASK,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAE,CAAGL,EACxBM,EAAOX,EAAW,IAAMY,MAAMJ,EAAMG,IAAI,EAAEE,IAAI,CAAC,IAC/CC,EAASd,EAAW,IACxB,AAAIU,IACKR,CAAG,CAAC;;;;;;;;;;;MAWX,CAAC,CAGIA,CAAG,CAAC;;;;;;;;;;;IAWX,CAAC,EAGH,kCAGOO,YACAK,YACAR,gBACAJ,EAAIM,EAAMN,GAAG,yEAGbH,qBAAWS,EAAMO,MAAM,sEAIVP,EAAMQ,MAAM,iBAKvBjB,qBAAWS,EAAMS,KAAK,sEAITT,EAAMQ,MAAM,iBAKvBlB,qBAAUa,cACR,+DAGaH,EAAMQ,MAAM,sBAvBtBb,EAAG,WAAYK,EAAMU,KAAK,UAiC5C,CAGAd,EACE,aACA,CACEO,KAAM,EACNK,OAAQ,KAAK,EACbD,OAAQ,KAAK,EACbE,MAAO,KAAK,EACZf,IAAK,KAAK,EACVgB,MAAO,KAAK,CACd,EACA,CAACC,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAYtB,SAAQf,EAXMN,EACZ,CACEU,KAAMU,EAAGV,IAAI,CACbK,OAAQK,EAAGL,MAAM,CACjBD,OAAQM,EAAGN,MAAM,CACjBE,MAAOI,EAAGJ,KAAK,CACff,IAAKmB,EAAGnB,GAAG,AACb,EACAiB,GAIJ,EAEF,gBAAeZ,CAAS"}
|
package/es/spin/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
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{className as
|
|
2
|
-
.
|
|
1
|
+
import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";import{effect as i}from"solid-js/web";import{createComponent as o}from"solid-js/web";import{className as n}from"solid-js/web";let s=e("<style>"),r=e('<div><div class="content">');import{mergeProps as l}from"solid-js";import{css as a,cx as c}from"@moneko/css";import{customElement as d}from"solid-element";import p from"../theme";let m=a`
|
|
2
|
+
.spin {
|
|
3
|
+
inline-size: fit-content;
|
|
3
4
|
position: relative;
|
|
4
5
|
box-sizing: border-box;
|
|
5
6
|
}
|
|
@@ -9,7 +10,7 @@ import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";im
|
|
|
9
10
|
transition: opacity var(--transition-duration);
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
.
|
|
13
|
+
.spining {
|
|
13
14
|
cursor: not-allowed;
|
|
14
15
|
|
|
15
16
|
.content {
|
|
@@ -48,5 +49,5 @@ import{template as e}from"solid-js/web";import{insert as t}from"solid-js/web";im
|
|
|
48
49
|
transform: rotate(360deg);
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
`;function f(e){let{baseStyle:
|
|
52
|
+
`;function f(e){let{baseStyle:o}=p;return[(()=>{let i=s();return t(i,o,null),t(i,m,null),t(i,()=>a(e.css),null),i})(),(()=>{let o=r();return t(o.firstChild,()=>e.children),i(t=>{let i=c("spin",e.class),s=!!e.spin;return i!==t._v$&&n(o,t._v$=i),s!==t._v$2&&o.classList.toggle("spining",t._v$2=s),t},{_v$:void 0,_v$2:void 0}),o})()]}d("n-spin",{class:void 0,css:void 0,spin:void 0},(e,t)=>o(f,l({children:[...t.element.childNodes.values()]},e)));export default f;
|
|
52
53
|
//# sourceMappingURL=index.js.map
|
package/es/spin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/spin/index.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../components/spin/index.tsx"],"sourcesContent":["import { mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nconst style = css`\n .spin {\n inline-size: fit-content;\n position: relative;\n box-sizing: border-box;\n }\n\n .content {\n opacity: 1;\n transition: opacity var(--transition-duration);\n }\n\n .spining {\n cursor: not-allowed;\n\n .content {\n opacity: 0.3;\n pointer-events: none;\n user-select: none;\n }\n\n &::before {\n position: absolute;\n display: flex;\n justify-content: center;\n align-items: center;\n margin: auto;\n border: 1px solid;\n border-color: var(--text-secondary) transparent;\n border-radius: 16px;\n font-size: large;\n text-align: center;\n inline-size: 32px;\n block-size: 32px;\n inset-block: 0 0;\n inset-inline: 0 0;\n box-sizing: border-box;\n content: '✲';\n animation: spin-rotate-effect 1s infinite;\n }\n }\n\n @keyframes spin-rotate-effect {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n\nexport interface SpinProps {\n /** 自定义样式表 */\n css?: string;\n /** 自定义类名 */\n class?: string;\n /** 加载状态 */\n spin?: boolean;\n /** 内容 */\n children?: JSX.Element | JSX.Element[];\n}\n\nfunction Spin(props: SpinProps) {\n const { baseStyle } = theme;\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <div\n class={cx('spin', props.class)}\n classList={{\n spining: props.spin,\n }}\n >\n <div class=\"content\">{props.children}</div>\n </div>\n </>\n );\n}\n\nexport type SpinElement = CustomElement<SpinProps>;\n\ncustomElement<SpinProps>('n-spin', { class: void 0, css: void 0, spin: void 0 }, (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n children: [...el.childNodes.values()],\n },\n _,\n );\n\n return <Spin {...props} />;\n});\n\nexport default Spin;\n"],"names":["mergeProps","css","cx","customElement","theme","style","Spin","props","baseStyle","children","class","spin","_","opt","el","element","childNodes","values"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"gQAAA,QAASA,cAAAA,CAAU,KAAQ,UAAW,AACtC,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAAOC,MAAW,UAAW,CAG7B,IAAMC,EAAQJ,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmDlB,CAAC,CAaD,SAASK,EAAKC,CAAgB,EAC5B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGJ,EAEtB,kCAGOI,YACAH,gBACAJ,EAAIM,EAAMN,GAAG,wDAQQM,EAAME,QAAQ,cAL7BP,EAAG,OAAQK,EAAMG,KAAK,MAElBH,EAAMI,IAAI,sHAO7B,CAIAR,EAAyB,SAAU,CAAEO,MAAO,KAAK,EAAGT,IAAK,KAAK,EAAGU,KAAM,KAAK,CAAE,EAAG,CAACC,EAAGC,MAS3EP,EAPMN,EACZ,CACES,SAAU,IAAIK,AAHPD,EAAIE,OAAO,CAGDC,UAAU,CAACC,MAAM,GAAG,AACvC,EACAL,IAMJ,gBAAeN,CAAK"}
|
package/es/switch/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
|
|
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 s}from"solid-js/web";import{delegateEvents as i}from"solid-js/web";import{createComponent as d}from"solid-js/web";import{className as l}from"solid-js/web";import{addEventListener as n}from"solid-js/web";let c=e("<style>"),a=e("<span>");import{createEffect as r,createSignal as v,mergeProps as m}from"solid-js";import{css as h,cx as u}from"@moneko/css";import{customElement as f}from"solid-element";import{style as $}from"./style";import _ from"../theme";function p(e){let{baseStyle:i}=_,[d,m]=v(!1);function f(){e.disabled||e.loading||(m(e=>!e),null==e.onChange||e.onChange.call(e,d()))}function p({key:e}){"Enter"===e&&f()}return r(()=>{m(!!e.checked)}),[(()=>{let t=c();return o(t,i,null),o(t,$,null),o(t,()=>h(e.css),null),t})(),(()=>{let o=a();return n(o,"keyup",p,!0),n(o,"click",f,!0),s(s=>{let i=u("switch",e.class),n=!!d(),c=!!e.loading,a=e.checkedText,r=e.unCheckedText,v=e.disabled,m=e.disabled||e.loading?-1:0;return i!==s._v$&&l(o,s._v$=i),n!==s._v$2&&o.classList.toggle("checked",s._v$2=n),c!==s._v$3&&o.classList.toggle("loading",s._v$3=c),a!==s._v$4&&t(o,"text-on",s._v$4=a),r!==s._v$5&&t(o,"text-off",s._v$5=r),v!==s._v$6&&t(o,"aria-disabled",s._v$6=v),m!==s._v$7&&t(o,"tabindex",s._v$7=m),s},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),o})()]}f("n-switch",{class:void 0,css:void 0,checked:void 0,disabled:void 0,checkedText:void 0,unCheckedText:void 0,loading:!1,onChange:void 0},(e,t)=>{let o=t.element,s=m({css:o.css,checked:o.checked,disabled:o.disabled,checkedText:o.checkedText,unCheckedText:o.unCheckedText,loading:o.loading,onChange(e){o.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return r(()=>{o.removeAttribute("css")}),d(p,s)});export default p;i(["click","keyup"]);
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/switch/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/switch/index.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../components/switch/index.tsx"],"sourcesContent":["import { createEffect, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface SwitchProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 值 */\n checked?: boolean;\n /** 只读 */\n disabled?: boolean;\n /** 设置 为 true 时的文案 */\n checkedText?: string;\n /** 设置 为 false 时的文案 */\n unCheckedText?: string;\n /** 加载状态 */\n loading?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n}\n\nexport type SwitchElement = CustomElement<SwitchProps>;\n\nfunction Switch(props: SwitchProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(false);\n\n function change() {\n if (!props.disabled && !props.loading) {\n setValue((prev) => !prev);\n props.onChange?.(value());\n }\n }\n\n function onKeyUp({ key }: { key: string }) {\n if (key === 'Enter') {\n change();\n }\n }\n\n createEffect(() => {\n setValue(!!props.checked);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <span\n class={cx('switch', props.class)}\n classList={{\n checked: value(),\n loading: props.loading,\n }}\n text-on={props.checkedText}\n text-off={props.unCheckedText}\n aria-disabled={props.disabled}\n onClick={change}\n onKeyUp={onKeyUp}\n tabindex={props.disabled || props.loading ? -1 : 0}\n />\n </>\n );\n}\n\ncustomElement<SwitchProps>(\n 'n-switch',\n {\n class: void 0,\n css: void 0,\n checked: void 0,\n disabled: void 0,\n checkedText: void 0,\n unCheckedText: void 0,\n loading: false,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n checked: el.checked,\n disabled: el.disabled,\n checkedText: el.checkedText,\n unCheckedText: el.unCheckedText,\n loading: el.loading,\n onChange(val: boolean) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return <Switch {...props} />;\n },\n);\nexport default Switch;\n"],"names":["createEffect","createSignal","mergeProps","css","cx","customElement","style","theme","Switch","props","baseStyle","value","setValue","change","disabled","loading","prev","onChange","onKeyUp","key","checked","class","checkedText","unCheckedText","_","opt","el","element","val","dispatchEvent","CustomEvent","detail","removeAttribute"],"rangeMappings":"","mappings":"sXAAA,QAASA,gBAAAA,CAAY,CAAEC,gBAAAA,CAAY,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AAClE,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAASC,SAAAA,CAAK,KAAQ,SAAU,AAChC,QAAOC,MAAW,UAAW,CAwB7B,SAASC,EAAOC,CAAkB,EAChC,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGH,EAChB,CAACI,EAAOC,EAAS,CAAGX,EAAa,CAAA,GAEvC,SAASY,IACFJ,EAAMK,QAAQ,EAAKL,EAAMM,OAAO,GACnCH,EAAS,AAACI,GAAS,CAACA,SACpBP,EAAMQ,QAAQ,EAAdR,EAAMQ,QAAQ,MAAdR,EAAiBE,KAErB,CAEA,SAASO,EAAQ,CAAEC,IAAAA,CAAG,CAAmB,EAC3B,UAARA,GACFN,GAEJ,CAMA,OAJAb,EAAa,KACXY,EAAS,CAAC,CAACH,EAAMW,OAAO,CAC1B,+BAKOV,YACAJ,gBACAH,EAAIM,EAAMN,GAAG,iDAYLe,kBADAL,kBARFT,EAAG,SAAUK,EAAMY,KAAK,MAEpBV,QACAF,EAAMM,OAAO,GAEfN,EAAMa,WAAW,GAChBb,EAAMc,aAAa,GACdd,EAAMK,QAAQ,GAGnBL,EAAMK,QAAQ,EAAIL,EAAMM,OAAO,CAAG,GAAK,8XAIzD,CAEAV,EACE,WACA,CACEgB,MAAO,KAAK,EACZlB,IAAK,KAAK,EACViB,QAAS,KAAK,EACdN,SAAU,KAAK,EACfQ,YAAa,KAAK,EAClBC,cAAe,KAAK,EACpBR,QAAS,CAAA,EACTE,SAAU,KAAK,CACjB,EACA,CAACO,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBlB,EAAQP,EACZ,CACEC,IAAKuB,EAAGvB,GAAG,CACXiB,QAASM,EAAGN,OAAO,CACnBN,SAAUY,EAAGZ,QAAQ,CACrBQ,YAAaI,EAAGJ,WAAW,CAC3BC,cAAeG,EAAGH,aAAa,CAC/BR,QAASW,EAAGX,OAAO,CACnBE,SAASW,CAAY,EACnBF,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQH,CACV,GAEJ,CACF,EACAJ,GAMF,OAHAxB,EAAa,KACX0B,EAAGM,eAAe,CAAC,MACrB,KACQxB,EAAWC,EACrB,EAEF,gBAAeD,CAAO"}
|
package/es/table/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e,t,r,l;function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var l in r)Object.prototype.hasOwnProperty.call(r,l)&&(e[l]=r[l])}return e}).apply(this,arguments)}import{template as a}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as o}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{getOwner as m}from"solid-js/web";import{effect as c}from"solid-js/web";import{createComponent as u}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let p=a("<span>"),g=a("<style>"),f=a('<caption class="table-title"><slot name="title">'),h=a('<th class="table-cell">'),v=a('<tfoot class="table-foot"><tr>'),b=a("<table><thead><tr></tr></thead><tbody>"),y=a('<n-pagination class="table-pagination">',!0,!1),w=a("<th>"),j=a("<tr>"),$=a('<span class="empty-val">'),_=a("<td>");import{For as z,Show as x,batch as O,
|
|
1
|
+
var e,t,r,l;function n(){return(n=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var l in r)Object.prototype.hasOwnProperty.call(r,l)&&(e[l]=r[l])}return e}).apply(this,arguments)}import{template as a}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as o}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{getOwner as m}from"solid-js/web";import{effect as c}from"solid-js/web";import{createComponent as u}from"solid-js/web";import{addEventListener as d}from"solid-js/web";let p=a("<span>"),g=a("<style>"),f=a('<caption class="table-title"><slot name="title">'),h=a('<th class="table-cell">'),v=a('<tfoot class="table-foot"><tr>'),b=a("<table><thead><tr></tr></thead><tbody>"),y=a('<n-pagination class="table-pagination">',!0,!1),w=a("<th>"),j=a("<tr>"),$=a('<span class="empty-val">'),_=a("<td>");import{For as z,Show as x,batch as O,createEffect as k,createMemo as S,createSignal as T,mergeProps as C,splitProps as A,untrack as P}from"solid-js";import V from"@moneko/common/lib/isObject";import K from"@moneko/common/lib/isString";import q from"@moneko/common/lib/isUndefined";import{css as E,cx as L}from"@moneko/css";import{customElement as U}from"solid-element";import{styles as B}from"./styles";import"../pagination";import D from"../theme";let F={page:1,pageSize:20,total:0,totalText:void 0,size:void 0};function G(e){let{baseStyle:t}=D,[r,l]=A(e,["class","css","loading","summary","summaryText","columns","data","emptyVal","title","align","char","charoff","valign","pagination","size"]),[a]=A(r,["align","char","charoff","valign"]),[C,U]=T(!1),[G,H]=T(1),[I,J]=T(20),[M,N]=T(0);function Q(e){return{width:e.width,align:e.align,valign:e.valign,char:e.char,charoff:e.charoff,colspan:e.colspan,rowspan:e.rowspan}}k(()=>{O(()=>{r.pagination&&(H(r.pagination.page||1),J(r.pagination.pageSize||20),N(r.pagination.total||0))})});let R=S(()=>Object.assign(F,r.pagination)),W=S(()=>{let e=[],t=!1;for(let l in r.columns)if(Object.prototype.hasOwnProperty.call(r.columns,l)){let a=r.columns[l],i=Object.assign({key:l,originKey:l,label:a.toString()},V(a)&&n({label:"order"===a.type&&"序号"||l},a));"order"===i.type&&(t=!0,i.render=function(e,t,r){return(()=>{let e=p();return s(e,()=>(G()-1)*I()+r+1),e})()}),e.push(i)}return P(C)!==t&&U(t),e});function X(e){r.pagination&&(H(e.detail[0]),J(e.detail[1]),null==r.pagination.onChange||r.pagination.onChange.call(r.pagination,...e.detail))}return[(()=>{let e=g();return s(e,t,null),s(e,B,null),s(e,()=>E(r.css),null),e})(),(()=>{let e=b(),t=e.firstChild,n=t.firstChild,c=t.nextSibling;return i(e,o(l,{get class(){return L("table",r.size)},part:"table"}),!1,!0),s(e,u(x,{get when(){return r.title},get children(){let e=f(),t=e.firstChild;return t._$owner=m(),s(t,()=>r.title),e}}),t),i(t,o(a,{class:"table-head"}),!1,!0),s(n,u(z,{get each(){return W()},children:e=>{let t=Q(e);return(()=>{let r=w();return i(r,o(t,{class:"table-cell"}),!1,!0),s(r,()=>e.label),r})()}})),i(c,o(a,{class:"table-body"}),!1,!0),s(c,u(z,{get each(){return r.data},children:(e,t)=>(()=>{let l=j();return s(l,u(z,{get each(){return W()},children:l=>{let n=Q(l),a=S(()=>{if("order"===l.type){let e=R();return(e.page-1)*e.pageSize+t()+1}let n=e[l.key];return q(n)||null===n?(()=>{let e=$();return s(e,()=>r.emptyVal),e})():n});return(()=>{let r=_();return i(r,o(n,{class:"table-cell"}),!1,!0),s(r,u(x,{get when(){return l.render},get fallback(){return u(a,{})},get children(){return null==l.render?void 0:l.render.call(l,e[l.key],e,t())}})),r})()}})),l})()})),s(e,u(x,{get when(){var d;return null==(d=r.summary)?void 0:d.length},get children(){let e=v(),t=e.firstChild;return i(e,a,!1,!0),s(t,u(x,{get when(){return C()},get children(){let e=h();return i(e,o(()=>Q(W()[0])),!1,!0),s(e,()=>r.summaryText),e}}),null),s(t,u(z,{get each(){return W().filter(e=>!e.type||!["order"].includes(e.type))},children:e=>{let t=Q(e),l=S(()=>{var t,l,n,a;return(null==(t=r.data)?void 0:t.length)&&(null==(l=r.summary)?void 0:l.includes(e.originKey))?(n=r.data,a=e.key,n.reduce(function(e,t){let r=t[a];return K(r)||q(r)||null===r?e:e+t[a]},0)):null});return(()=>{let e=_();return i(e,o(t,{class:"table-cell"}),!1,!0),s(e,l),e})()}}),null),e}}),null),e})(),u(x,{get when(){return r.pagination},get children(){let e=y();return d(e,"change",X),e._$owner=m(),c(t=>{let l=G(),n=I(),a=M(),i=R().totalText,o=R().size||r.size;return l!==t._v$&&(e.page=t._v$=l),n!==t._v$2&&(e.pageSize=t._v$2=n),a!==t._v$3&&(e.total=t._v$3=a),i!==t._v$4&&(e.totalText=t._v$4=i),o!==t._v$5&&(e.size=t._v$5=o),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0}),e}})]}(r=e||(e={})).left="left",r.right="right",r.center="center",r.justify="justify",r.char="char",(l=t||(t={})).top="top",l.middle="middle",l.bottom="bottom",l.baseline="baseline",U("n-table",{class:void 0,css:void 0,loading:!1,columns:{},data:[],emptyVal:"-",title:void 0,char:void 0,charoff:void 0,align:"left",valign:"middle",summary:void 0,summaryText:"合计",pagination:void 0,size:void 0},(e,t)=>{let r=t.element,l=C({css:r.css,columns:r.columns,data:r.data,pagination:r.pagination,summary:r.summary,summaryText:r.summaryText},e,{title:!!r.querySelector("[slot='title']")||e.title});return k(()=>{r.removeAttribute("css"),r.removeAttribute("title"),r.removeAttribute("data")}),u(G,l)});export default G;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/table/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/table/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 { isObject, isString, isUndefined } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { styles } from './styles';\nimport '../pagination';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement, PaginationProps } from '..';\n\ntype Col = Column<Record<string, Any>>;\nconst defaultPagination = { page: 1, pageSize: 20, total: 0, totalText: void 0, size: void 0 };\n\nfunction Table(_: TableProps) {\n const { baseStyle } = theme;\n const [local, other] = splitProps(_, [\n 'class',\n 'css',\n 'loading',\n 'summary',\n 'summaryText',\n 'columns',\n 'data',\n 'emptyVal',\n 'title',\n 'align',\n 'char',\n 'charoff',\n 'valign',\n 'pagination',\n 'size',\n ]);\n const [layout] = splitProps(local, ['align', 'char', 'charoff', 'valign']);\n const [hasOrder, setHasOrder] = createSignal(false);\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 (local.pagination) {\n setPage(local.pagination.page || 1);\n setPageSize(local.pagination.pageSize || 20);\n setTotal(local.pagination.total || 0);\n }\n });\n });\n\n function getLayout(col: Col) {\n return {\n width: col.width,\n align: col.align,\n valign: col.valign,\n char: col.char,\n charoff: col.charoff,\n colspan: col.colspan,\n rowspan: col.rowspan,\n };\n }\n function sum(arr: Required<TableProps>['data'], key: string) {\n return arr.reduce(function (prev, curr) {\n const next = curr[key];\n\n if (isString(next) || isUndefined(next) || next === null) {\n return prev;\n }\n return prev + curr[key];\n }, 0);\n }\n const pagination = createMemo(() => Object.assign(defaultPagination, local.pagination));\n const columns = createMemo(() => {\n const cols: Required<Col>[] = [];\n let _hasOrder = false;\n\n for (const key in local.columns) {\n if (Object.prototype.hasOwnProperty.call(local.columns, key)) {\n const col = local.columns[key];\n const _col: Col = Object.assign(\n { key, originKey: key, label: col.toString() },\n isObject(col) && {\n label: (col.type === 'order' && '序号') || key,\n ...col,\n },\n );\n\n if (_col.type === 'order') {\n _hasOrder = true;\n _col.render = function (_val: unknown, _row: unknown, i: number) {\n return <span>{(page() - 1) * pageSize() + i + 1}</span>;\n };\n }\n cols.push(_col as Required<Col>);\n }\n }\n if (untrack(hasOrder) !== _hasOrder) {\n setHasOrder(_hasOrder);\n }\n return cols;\n });\n\n function handlePageChange(e: CustomEvent<[page: number, pageSize: number]>) {\n if (local.pagination) {\n setPage(e.detail[0]);\n setPageSize(e.detail[1]);\n local.pagination.onChange?.(...e.detail);\n }\n }\n\n return (\n <>\n <style>\n {baseStyle()}\n {styles}\n {css(local.css)}\n </style>\n <table {...other} class={cx('table', local.size)} part=\"table\">\n <Show when={local.title}>\n <caption class=\"table-title\">\n <slot name=\"title\">{local.title}</slot>\n </caption>\n </Show>\n <thead {...layout} class=\"table-head\">\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n\n return (\n <th {..._layout} class=\"table-cell\">\n {col.label}\n </th>\n );\n }}\n </For>\n </tr>\n </thead>\n <tbody {...layout} class=\"table-body\">\n <For each={local.data}>\n {(row, i) => {\n return (\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n const Row = createMemo(() => {\n if (col.type === 'order') {\n const _pagination = pagination();\n\n return (_pagination.page - 1) * _pagination.pageSize + i() + 1;\n }\n const val = row[col.key];\n const isEmpty = isUndefined(val) || val === null;\n\n if (isEmpty) {\n return <span class=\"empty-val\">{local.emptyVal}</span>;\n }\n return val;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n <Show when={col.render} fallback={<Row />}>\n {col.render?.(row[col.key], row, i())}\n </Show>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n </tbody>\n <Show when={local.summary?.length}>\n <tfoot class=\"table-foot\" {...layout}>\n <tr>\n <Show when={hasOrder()}>\n <th class=\"table-cell\" {...getLayout(columns()[0])}>\n {local.summaryText}\n </th>\n </Show>\n <For each={columns().filter((c) => !c.type || !['order'].includes(c.type))}>\n {(col) => {\n const _layout = getLayout(col);\n const val = createMemo(() => {\n if (local.data?.length && local.summary?.includes(col.originKey)) {\n return sum(local.data, col.key);\n }\n return null;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n {val()}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n </Show>\n </table>\n <Show when={local.pagination}>\n <n-pagination\n class=\"table-pagination\"\n page={page()}\n page-size={pageSize()}\n total={total()}\n total-text={pagination().totalText}\n size={pagination().size || local.size}\n onChange={handlePageChange}\n />\n </Show>\n </>\n );\n}\n\n/** API\n * @since 2.1.0\n */\nexport interface TableProps<T extends Record<string, Any> = Record<string, Any>> extends Cell {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 加载中 */\n loading?: boolean;\n /** 单元格值为 null 或 undefined 时的回填\n * @default '-'\n */\n emptyVal?: string;\n /** 栏配置 */\n columns?: Record<string, Column<T> | string>;\n /** 数据源 */\n data?: T[];\n /** 表格标题, 支持直接赋值给 'title' 属性, 或者通过[slot=\"title\"]插槽 */\n title?: JSX.Element | 'slot';\n /** 汇总行 */\n summary?: (keyof T)[];\n /** 汇总行描述\n * @default '合计'\n */\n summaryText?: JSX.Element;\n /** 分页器\n * @default false\n */\n pagination?: PaginationProps | false;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSX.Element;\n}\n/** 栏 */\ninterface Column<T extends Record<string, Any>> extends Cell {\n /** 自定义取值的 key */\n key?: keyof T;\n /** 原始 key */\n originKey?: keyof T;\n /** 单元格表头标题 */\n label?: JSX.Element;\n /** 自定义渲染单元格 */\n render?(item: T[keyof T], row: T, index: number): JSX.Element;\n /** 单元格横跨的列数 */\n colspan?: number;\n /** 单元格横跨的行数 */\n rowspan?: number;\n /** 设置为 'order' 时则当作序号行 */\n type?: 'order';\n /** 单元格宽 */\n width?: number;\n}\n\n/** 单元格布局排列 */\ninterface Cell {\n /** 单元格内容的水平对齐方式\n * @default 'left'\n */\n align?: keyof typeof Align;\n /** 规定根据哪个字符来进行文本对齐 */\n char?: string;\n /** 规定第一个对齐字符的偏移量 */\n charoff?: number;\n /** 单元格内容的垂直对齐方式\n * @default 'middle'\n */\n valign?: keyof typeof Valign;\n}\n/** 水平对齐方式 */\nenum Align {\n /** 左对齐 */\n left = 'left',\n /** 右对齐 */\n right = 'right',\n /** 居中对齐 */\n center = 'center',\n /** 对行进行伸展,这样每行都可以有相等的长度 */\n justify = 'justify',\n /** 将内容对准指定字符 */\n char = 'char',\n}\n/** 垂直对齐方式 */\nenum Valign {\n /** 上对齐 */\n top = 'top',\n /** 居中对齐 */\n middle = 'middle',\n /** 下对齐 */\n bottom = 'bottom',\n /** 与基线对齐 */\n baseline = 'baseline',\n}\nexport type TableElement = CustomElement<TableProps>;\n\ncustomElement<TableProps>(\n 'n-table',\n {\n class: void 0,\n css: void 0,\n loading: false,\n columns: {},\n data: [],\n emptyVal: '-',\n title: void 0,\n char: void 0,\n charoff: void 0,\n align: Align.left,\n valign: Valign.middle,\n summary: void 0,\n summaryText: '合计',\n pagination: void 0,\n size: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n columns: el.columns,\n data: el.data,\n pagination: el.pagination,\n summary: el.summary,\n summaryText: el.summaryText,\n },\n _,\n {\n title: !!el.querySelector(\"[slot='title']\") || _.title,\n },\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.removeAttribute('title');\n el.removeAttribute('data');\n });\n return createComponent(Table, props);\n },\n);\nexport default Table;\n"],"names":["Align","Valign","For","Show","batch","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","isObject","isString","isUndefined","css","cx","customElement","styles","theme","defaultPagination","page","pageSize","total","totalText","size","Table","_","baseStyle","local","other","layout","hasOrder","setHasOrder","setPage","setPageSize","setTotal","getLayout","col","width","align","valign","char","charoff","colspan","rowspan","pagination","Object","assign","columns","cols","_hasOrder","key","prototype","hasOwnProperty","call","_col","originKey","label","toString","type","render","_val","_row","i","push","handlePageChange","e","detail","onChange","title","_layout","data","row","Row","_pagination","val","emptyVal","summary","length","summaryText","filter","c","includes","arr","reduce","prev","curr","next","class","loading","opt","el","element","props","querySelector","removeAttribute"],"rangeMappings":"","mappings":"QA2SKA,EAaAC,q3BAxTL,QACEC,OAAAA,CAAG,CACHC,QAAAA,CAAI,CACJC,SAAAA,CAAK,CACLC,mBAAAA,CAAe,CACfC,gBAAAA,CAAY,CACZC,cAAAA,CAAU,CACVC,gBAAAA,CAAY,CACZC,cAAAA,CAAU,CACVC,cAAAA,CAAU,CACVC,WAAAA,CAAO,KACF,UAAW,AAClB,QAASC,MAAuC,6BAAiB,AAAjE,QAAmBC,MAA6B,6BAAiB,AAAjE,QAA6BC,MAAmB,gCAAiB,AACjE,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAASC,UAAAA,CAAM,KAAQ,UAAW,AAClC,OAAO,eAAgB,AACvB,QAAOC,MAAW,UAAW,CAI7B,IAAMC,EAAoB,CAAEC,KAAM,EAAGC,SAAU,GAAIC,MAAO,EAAGC,UAAW,KAAK,EAAGC,KAAM,KAAK,CAAE,EAE7F,SAASC,EAAMC,CAAa,EAC1B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGT,EAChB,CAACU,EAAOC,EAAM,CAAGpB,EAAWiB,EAAG,CACnC,QACA,MACA,UACA,UACA,cACA,UACA,OACA,WACA,QACA,QACA,OACA,UACA,SACA,aACA,OACD,EACK,CAACI,EAAO,CAAGrB,EAAWmB,EAAO,CAAC,QAAS,OAAQ,UAAW,SAAS,EACnE,CAACG,EAAUC,EAAY,CAAGzB,EAAa,CAAA,GACvC,CAACa,EAAMa,EAAQ,CAAG1B,EAAa,GAC/B,CAACc,EAAUa,EAAY,CAAG3B,EAAa,IACvC,CAACe,EAAOa,EAAS,CAAG5B,EAAa,GAYvC,SAAS6B,EAAUC,CAAQ,EACzB,MAAO,CACLC,MAAOD,EAAIC,KAAK,CAChBC,MAAOF,EAAIE,KAAK,CAChBC,OAAQH,EAAIG,MAAM,CAClBC,KAAMJ,EAAII,IAAI,CACdC,QAASL,EAAIK,OAAO,CACpBC,QAASN,EAAIM,OAAO,CACpBC,QAASP,EAAIO,OAAO,AACtB,CACF,CApBAvC,EAAa,KACXF,EAAM,KACAyB,EAAMiB,UAAU,GAClBZ,EAAQL,EAAMiB,UAAU,CAACzB,IAAI,EAAI,GACjCc,EAAYN,EAAMiB,UAAU,CAACxB,QAAQ,EAAI,IACzCc,EAASP,EAAMiB,UAAU,CAACvB,KAAK,EAAI,GAEvC,EACF,GAuBA,IAAMuB,EAAavC,EAAW,IAAMwC,OAAOC,MAAM,CAAC5B,EAAmBS,EAAMiB,UAAU,GAC/EG,EAAU1C,EAAW,KACzB,IAAM2C,EAAwB,EAAE,CAC5BC,EAAY,CAAA,EAEhB,IAAK,IAAMC,KAAOvB,EAAMoB,OAAO,CAC7B,GAAIF,OAAOM,SAAS,CAACC,cAAc,CAACC,IAAI,CAAC1B,EAAMoB,OAAO,CAAEG,GAAM,CAC5D,IAAMd,EAAMT,EAAMoB,OAAO,CAACG,EAAI,CACxBI,EAAYT,OAAOC,MAAM,CAC7B,CAAEI,IAAAA,EAAKK,UAAWL,EAAKM,MAAOpB,EAAIqB,QAAQ,EAAG,EAC7C/C,EAAS0B,IAAQ,GACfoB,MAAO,AAAc,UAAbpB,EAAIsB,IAAI,EAAgB,MAASR,GACtCd,GAIW,CAAA,UAAdkB,EAAKI,IAAI,GACXT,EAAY,CAAA,EACZK,EAAKK,MAAM,CAAG,SAAUC,CAAa,CAAEC,CAAa,CAAEC,CAAS,EAC7D,qCAAc,AAAC3C,CAAAA,IAAS,CAAA,EAAKC,IAAa0C,EAAI,QAChD,GAEFd,EAAKe,IAAI,CAACT,EACZ,CAKF,OAHI7C,EAAQqB,KAAcmB,GACxBlB,EAAYkB,GAEPD,CACT,GAEA,SAASgB,EAAiBC,CAAgD,EACpEtC,EAAMiB,UAAU,GAClBZ,EAAQiC,EAAEC,MAAM,CAAC,EAAE,EACnBjC,EAAYgC,EAAEC,MAAM,CAAC,EAAE,QACvBvC,EAAMiB,UAAU,CAACuB,QAAQ,EAAzBxC,EAAMiB,UAAU,CAACuB,QAAQ,MAAzBxC,EAAMiB,UAAU,IAAeqB,EAAEC,MAAM,EAE3C,CAEA,kCAGOxC,YACAV,gBACAH,EAAIc,EAAMd,GAAG,yFAELe,sBAAcd,EAAG,QAASa,EAAMJ,IAAI,QAAQ,uBACpDtB,qBAAW0B,EAAMyC,KAAK,uEAECzC,EAAMyC,KAAK,gBAGxBvC,SAAc,4BAEpB7B,qBAAU+C,cACR,AAACX,IACA,IAAMiC,EAAUlC,EAAUC,GAE1B,mCACUiC,SAAe,8BACpBjC,EAAIoB,KAAK,OAGhB,WAIK3B,SAAc,4BACtB7B,qBAAU2B,EAAM2C,IAAI,WAClB,CAACC,EAAKT,iCAGA9D,qBAAU+C,cACR,AAACX,IACA,IAAMiC,EAAUlC,EAAUC,GACpBoC,EAAMnE,EAAW,KACrB,GAAI+B,AAAa,UAAbA,EAAIsB,IAAI,CAAc,CACxB,IAAMe,EAAc7B,IAEpB,MAAO,AAAC6B,CAAAA,EAAYtD,IAAI,CAAG,CAAA,EAAKsD,EAAYrD,QAAQ,CAAG0C,IAAM,CAC/D,CACA,IAAMY,EAAMH,CAAG,CAACnC,EAAIc,GAAG,CAAC,QAGxB,AAFgBtC,EAAY8D,IAAQA,AAAQ,OAARA,iCAGF/C,EAAMgD,QAAQ,QAEzCD,CACT,GAEA,mCACUL,SAAe,4BACpBpE,qBAAWmC,EAAIuB,MAAM,0BAAaa,mCAChCpC,EAAIuB,MAAM,QAAVvB,EAAIuB,MAAM,MAAVvB,EAAamC,CAAG,CAACnC,EAAIc,GAAG,CAAC,CAAEqB,EAAKT,cAIzC,oBAOX7D,kBAAW0B,gBAAAA,EAAAA,EAAMiD,OAAO,SAAbjD,EAAekD,MAAM,qDACDhD,eAEzB5B,qBAAW6B,+CACiBK,EAAUY,GAAS,CAAC,EAAE,kBAC9CpB,EAAMmD,WAAW,mBAGrB9E,qBAAU+C,IAAUgC,MAAM,CAAC,AAACC,GAAM,CAACA,EAAEtB,IAAI,EAAI,CAAC,CAAC,QAAQ,CAACuB,QAAQ,CAACD,EAAEtB,IAAI,aACrE,AAACtB,IACA,IAAMiC,EAAUlC,EAAUC,GACpBsC,EAAMrE,EAAW,SACjBsB,EAAsBA,EA9H/BuD,EAAmChC,QA8H9B,AAAIvB,QAAAA,EAAAA,EAAM2C,IAAI,SAAV3C,EAAYkD,MAAM,WAAIlD,EAAAA,EAAMiD,OAAO,SAAbjD,EAAesD,QAAQ,CAAC7C,EAAImB,SAAS,IA9HpE2B,EA+HkBvD,EAAM2C,IAAI,CA/HOpB,EA+HLd,EAAIc,GAAG,CA9HzCgC,EAAIC,MAAM,CAAC,SAAUC,CAAI,CAAEC,CAAI,EACpC,IAAMC,EAAOD,CAAI,CAACnC,EAAI,QAEtB,AAAIvC,EAAS2E,IAAS1E,EAAY0E,IAASA,AAAS,OAATA,EAClCF,EAEFA,EAAOC,CAAI,CAACnC,EAAI,AACzB,EAAG,IAyHoB,IACT,GAEA,mCACUmB,SAAe,0BACpBK,QAGP,6BAMTzE,qBAAW0B,EAAMiB,UAAU,+CAQdoB,6BALJ7C,MACKC,MACJC,MACKuB,IAAatB,SAAS,GAC5BsB,IAAarB,IAAI,EAAII,EAAMJ,IAAI,4OAM/C,EA0EKzB,EAAAA,IAAAA,wFAaAC,EAAAA,IAAAA,2EAYLgB,EACE,UACA,CACEwE,MAAO,KAAK,EACZ1E,IAAK,KAAK,EACV2E,QAAS,CAAA,EACTzC,QAAS,CAAC,EACVuB,KAAM,EAAE,CACRK,SAAU,IACVP,MAAO,KAAK,EACZ5B,KAAM,KAAK,EACXC,QAAS,KAAK,EACdH,KAAK,QACLC,MAAM,UACNqC,QAAS,KAAK,EACdE,YAAa,KACblC,WAAY,KAAK,EACjBrB,KAAM,KAAK,CACb,EACA,CAACE,EAAGgE,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBC,EAAQrF,EACZ,CACEM,IAAK6E,EAAG7E,GAAG,CACXkC,QAAS2C,EAAG3C,OAAO,CACnBuB,KAAMoB,EAAGpB,IAAI,CACb1B,WAAY8C,EAAG9C,UAAU,CACzBgC,QAASc,EAAGd,OAAO,CACnBE,YAAaY,EAAGZ,WAAW,AAC7B,EACArD,EACA,CACE2C,MAAO,CAAC,CAACsB,EAAGG,aAAa,CAAC,mBAAqBpE,EAAE2C,KAAK,AACxD,GAQF,OALAhE,EAAa,KACXsF,EAAGI,eAAe,CAAC,OACnBJ,EAAGI,eAAe,CAAC,SACnBJ,EAAGI,eAAe,CAAC,OACrB,GACO3F,EAAgBqB,EAAOoE,EAChC,EAEF,gBAAepE,CAAM"}
|
|
1
|
+
{"version":3,"sources":["../../components/table/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 { isObject, isString, isUndefined } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { styles } from './styles';\nimport '../pagination';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement, PaginationProps } from '..';\n\ntype Col = Column<Record<string, Any>>;\nconst defaultPagination = { page: 1, pageSize: 20, total: 0, totalText: void 0, size: void 0 };\n\nfunction Table(_: TableProps) {\n const { baseStyle } = theme;\n const [local, other] = splitProps(_, [\n 'class',\n 'css',\n 'loading',\n 'summary',\n 'summaryText',\n 'columns',\n 'data',\n 'emptyVal',\n 'title',\n 'align',\n 'char',\n 'charoff',\n 'valign',\n 'pagination',\n 'size',\n ]);\n const [layout] = splitProps(local, ['align', 'char', 'charoff', 'valign']);\n const [hasOrder, setHasOrder] = createSignal(false);\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 (local.pagination) {\n setPage(local.pagination.page || 1);\n setPageSize(local.pagination.pageSize || 20);\n setTotal(local.pagination.total || 0);\n }\n });\n });\n\n function getLayout(col: Col) {\n return {\n width: col.width,\n align: col.align,\n valign: col.valign,\n char: col.char,\n charoff: col.charoff,\n colspan: col.colspan,\n rowspan: col.rowspan,\n };\n }\n function sum(arr: Required<TableProps>['data'], key: string) {\n return arr.reduce(function (prev, curr) {\n const next = curr[key];\n\n if (isString(next) || isUndefined(next) || next === null) {\n return prev;\n }\n return prev + curr[key];\n }, 0);\n }\n const pagination = createMemo(() => Object.assign(defaultPagination, local.pagination));\n const columns = createMemo(() => {\n const cols: Required<Col>[] = [];\n let _hasOrder = false;\n\n for (const key in local.columns) {\n if (Object.prototype.hasOwnProperty.call(local.columns, key)) {\n const col = local.columns[key];\n const _col: Col = Object.assign(\n { key, originKey: key, label: col.toString() },\n isObject(col) && {\n label: (col.type === 'order' && '序号') || key,\n ...col,\n },\n );\n\n if (_col.type === 'order') {\n _hasOrder = true;\n _col.render = function (_val: unknown, _row: unknown, i: number) {\n return <span>{(page() - 1) * pageSize() + i + 1}</span>;\n };\n }\n cols.push(_col as Required<Col>);\n }\n }\n if (untrack(hasOrder) !== _hasOrder) {\n setHasOrder(_hasOrder);\n }\n return cols;\n });\n\n function handlePageChange(e: CustomEvent<[page: number, pageSize: number]>) {\n if (local.pagination) {\n setPage(e.detail[0]);\n setPageSize(e.detail[1]);\n local.pagination.onChange?.(...e.detail);\n }\n }\n\n return (\n <>\n <style>\n {baseStyle()}\n {styles}\n {css(local.css)}\n </style>\n <table {...other} class={cx('table', local.size)} part=\"table\">\n <Show when={local.title}>\n <caption class=\"table-title\">\n <slot name=\"title\">{local.title}</slot>\n </caption>\n </Show>\n <thead {...layout} class=\"table-head\">\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n\n return (\n <th {..._layout} class=\"table-cell\">\n {col.label}\n </th>\n );\n }}\n </For>\n </tr>\n </thead>\n <tbody {...layout} class=\"table-body\">\n <For each={local.data}>\n {(row, i) => {\n return (\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n const Row = createMemo(() => {\n if (col.type === 'order') {\n const _pagination = pagination();\n\n return (_pagination.page - 1) * _pagination.pageSize + i() + 1;\n }\n const val = row[col.key];\n const isEmpty = isUndefined(val) || val === null;\n\n if (isEmpty) {\n return <span class=\"empty-val\">{local.emptyVal}</span>;\n }\n return val;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n <Show when={col.render} fallback={<Row />}>\n {col.render?.(row[col.key], row, i())}\n </Show>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n </tbody>\n <Show when={local.summary?.length}>\n <tfoot class=\"table-foot\" {...layout}>\n <tr>\n <Show when={hasOrder()}>\n <th class=\"table-cell\" {...getLayout(columns()[0])}>\n {local.summaryText}\n </th>\n </Show>\n <For each={columns().filter((c) => !c.type || !['order'].includes(c.type))}>\n {(col) => {\n const _layout = getLayout(col);\n const val = createMemo(() => {\n if (local.data?.length && local.summary?.includes(col.originKey)) {\n return sum(local.data, col.key);\n }\n return null;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n {val()}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n </Show>\n </table>\n <Show when={local.pagination}>\n <n-pagination\n class=\"table-pagination\"\n page={page()}\n page-size={pageSize()}\n total={total()}\n total-text={pagination().totalText}\n size={pagination().size || local.size}\n onChange={handlePageChange}\n />\n </Show>\n </>\n );\n}\n\n/** API\n * @since 2.1.0\n */\nexport interface TableProps<T extends Record<string, Any> = Record<string, Any>> extends Cell {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 加载中 */\n loading?: boolean;\n /** 单元格值为 null 或 undefined 时的回填\n * @default '-'\n */\n emptyVal?: string;\n /** 栏配置 */\n columns?: Record<string, Column<T> | string>;\n /** 数据源 */\n data?: T[];\n /** 表格标题, 支持直接赋值给 'title' 属性, 或者通过[slot=\"title\"]插槽 */\n title?: JSX.Element | 'slot';\n /** 汇总行 */\n summary?: (keyof T)[];\n /** 汇总行描述\n * @default '合计'\n */\n summaryText?: JSX.Element;\n /** 分页器\n * @default false\n */\n pagination?: PaginationProps | false;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSX.Element;\n}\n/** 栏 */\ninterface Column<T extends Record<string, Any>> extends Cell {\n /** 自定义取值的 key */\n key?: keyof T;\n /** 原始 key */\n originKey?: keyof T;\n /** 单元格表头标题 */\n label?: JSX.Element;\n /** 自定义渲染单元格 */\n render?(item: T[keyof T], row: T, index: number): JSX.Element;\n /** 单元格横跨的列数 */\n colspan?: number;\n /** 单元格横跨的行数 */\n rowspan?: number;\n /** 设置为 'order' 时则当作序号行 */\n type?: 'order';\n /** 单元格宽 */\n width?: number;\n}\n\n/** 单元格布局排列 */\ninterface Cell {\n /** 单元格内容的水平对齐方式\n * @default 'left'\n */\n align?: keyof typeof Align;\n /** 规定根据哪个字符来进行文本对齐 */\n char?: string;\n /** 规定第一个对齐字符的偏移量 */\n charoff?: number;\n /** 单元格内容的垂直对齐方式\n * @default 'middle'\n */\n valign?: keyof typeof Valign;\n}\n/** 水平对齐方式 */\nenum Align {\n /** 左对齐 */\n left = 'left',\n /** 右对齐 */\n right = 'right',\n /** 居中对齐 */\n center = 'center',\n /** 对行进行伸展,这样每行都可以有相等的长度 */\n justify = 'justify',\n /** 将内容对准指定字符 */\n char = 'char',\n}\n/** 垂直对齐方式 */\nenum Valign {\n /** 上对齐 */\n top = 'top',\n /** 居中对齐 */\n middle = 'middle',\n /** 下对齐 */\n bottom = 'bottom',\n /** 与基线对齐 */\n baseline = 'baseline',\n}\nexport type TableElement = CustomElement<TableProps>;\n\ncustomElement<TableProps>(\n 'n-table',\n {\n class: void 0,\n css: void 0,\n loading: false,\n columns: {},\n data: [],\n emptyVal: '-',\n title: void 0,\n char: void 0,\n charoff: void 0,\n align: Align.left,\n valign: Valign.middle,\n summary: void 0,\n summaryText: '合计',\n pagination: void 0,\n size: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n columns: el.columns,\n data: el.data,\n pagination: el.pagination,\n summary: el.summary,\n summaryText: el.summaryText,\n },\n _,\n {\n title: !!el.querySelector(\"[slot='title']\") || _.title,\n },\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.removeAttribute('title');\n el.removeAttribute('data');\n });\n return <Table {...props} />;\n },\n);\nexport default Table;\n"],"names":["Align","Valign","For","Show","batch","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","isObject","isString","isUndefined","css","cx","customElement","styles","theme","defaultPagination","page","pageSize","total","totalText","size","Table","_","baseStyle","local","other","layout","hasOrder","setHasOrder","setPage","setPageSize","setTotal","getLayout","col","width","align","valign","char","charoff","colspan","rowspan","pagination","Object","assign","columns","cols","_hasOrder","key","prototype","hasOwnProperty","call","_col","originKey","label","toString","type","render","_val","_row","i","push","handlePageChange","e","detail","onChange","title","_layout","data","row","Row","_pagination","val","emptyVal","summary","length","summaryText","filter","c","includes","arr","reduce","prev","curr","next","class","loading","opt","el","element","props","querySelector","removeAttribute"],"rangeMappings":"","mappings":"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"}
|