neko-ui 2.7.0 → 2.7.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/CHANGELOG.md +26 -6
- package/es/@moneko/coverage/index.js.map +1 -1
- package/es/@moneko/info/index.js.map +1 -1
- package/es/@moneko/locales/index.js.map +1 -1
- package/es/@moneko/routes/index.js.map +1 -1
- package/es/avatar/group.js.map +1 -1
- package/es/avatar/index.js.map +1 -1
- package/es/avatar/style.js.map +1 -1
- package/es/back-top/index.js.map +1 -1
- package/es/back-top/style.js.map +1 -1
- package/es/basic-config/index.js.map +1 -1
- package/es/button/index.js.map +1 -1
- package/es/button/style.js.map +1 -1
- package/es/capture-screen/index.js.map +1 -1
- package/es/capture-screen/style.js.map +1 -1
- package/es/carousel/index.js.map +1 -1
- package/es/carousel/style.js.map +1 -1
- package/es/checkbox/index.js.map +1 -1
- package/es/checkbox/style.js.map +1 -1
- package/es/code/index.js +1 -1
- package/es/code/index.js.map +1 -1
- package/es/code/style.js.map +1 -1
- package/es/code/worker.js +1 -1
- package/es/code/worker.js.map +1 -1
- package/es/color-palette/index.js.map +1 -1
- package/es/color-palette/style.js.map +1 -1
- package/es/color-picker/index.js.map +1 -1
- package/es/color-picker/style.js.map +1 -1
- package/es/cron/begin-interval.js.map +1 -1
- package/es/cron/day.js.map +1 -1
- package/es/cron/hour.js.map +1 -1
- package/es/cron/index.js.map +1 -1
- package/es/cron/item.js.map +1 -1
- package/es/cron/minute.js.map +1 -1
- package/es/cron/month.js.map +1 -1
- package/es/cron/period.js.map +1 -1
- package/es/cron/second.js.map +1 -1
- package/es/cron/some.js.map +1 -1
- package/es/cron/style.js.map +1 -1
- package/es/cron/week.js.map +1 -1
- package/es/cron/year.js.map +1 -1
- package/es/date-picker/date.js.map +1 -1
- package/es/date-picker/dayjs.js.map +1 -1
- package/es/date-picker/index.js.map +1 -1
- package/es/date-picker/month.js.map +1 -1
- package/es/date-picker/panel.js.map +1 -1
- package/es/date-picker/style.js.map +1 -1
- package/es/date-picker/time.js.map +1 -1
- package/es/date-picker/year.js.map +1 -1
- package/es/dropdown/index.js.map +1 -1
- package/es/empty/index.js.map +1 -1
- package/es/from-schema/index.js.map +1 -1
- package/es/get-options/index.js.map +1 -1
- package/es/highlight-text/index.js.map +1 -1
- package/es/img/index.js.map +1 -1
- package/es/img/style.js.map +1 -1
- package/es/index.js.map +1 -1
- package/es/input/index.js.map +1 -1
- package/es/input/style.js.map +1 -1
- package/es/input-number/index.js.map +1 -1
- package/es/katex/index.js.map +1 -1
- package/es/md/index.js +1 -1
- package/es/md/index.js.map +1 -1
- package/es/md/worker.js.map +1 -1
- package/es/md-style/index.js.map +1 -1
- package/es/menu/index.js.map +1 -1
- package/es/menu/style.js.map +1 -1
- package/es/modal/hooks.js.map +1 -1
- package/es/modal/index.js.map +1 -1
- package/es/modal/store.js.map +1 -1
- package/es/modal/style.js.map +1 -1
- package/es/notification/index.js.map +1 -1
- package/es/notification/notification.js.map +1 -1
- package/es/notification/queque.js.map +1 -1
- package/es/notification/styles.js.map +1 -1
- package/es/pagination/index.js.map +1 -1
- package/es/pagination/styles.js.map +1 -1
- package/es/popover/index.js.map +1 -1
- package/es/popover/style.js.map +1 -1
- package/es/prism/css.js.map +1 -1
- package/es/prism/prism.js +1 -1
- package/es/prism/prism.js.map +1 -1
- package/es/provider/index.js.map +1 -1
- package/es/radio/index.js.map +1 -1
- package/es/radio/style.js.map +1 -1
- package/es/segmented/index.js.map +1 -1
- package/es/segmented/style.js.map +1 -1
- package/es/select/index.js.map +1 -1
- package/es/select/style.js.map +1 -1
- package/es/skeleton/index.js.map +1 -1
- package/es/spin/index.js.map +1 -1
- package/es/switch/index.js.map +1 -1
- package/es/switch/style.js.map +1 -1
- package/es/table/index.js.map +1 -1
- package/es/table/styles.js.map +1 -1
- package/es/tabs/index.js.map +1 -1
- package/es/tabs/style.js.map +1 -1
- package/es/tag/index.js.map +1 -1
- package/es/tag/style.js.map +1 -1
- package/es/theme/index.js.map +1 -1
- package/es/tree/index.js.map +1 -1
- package/es/tree/register.js.map +1 -1
- package/es/tree/style.js.map +1 -1
- package/es/tree/type.js.map +1 -1
- package/es/typography/index.js.map +1 -1
- package/lib/@moneko/coverage/index.js.map +1 -1
- package/lib/@moneko/info/index.js.map +1 -1
- package/lib/@moneko/locales/index.js.map +1 -1
- package/lib/@moneko/routes/index.js.map +1 -1
- package/lib/avatar/group.js.map +1 -1
- package/lib/avatar/index.js.map +1 -1
- package/lib/avatar/style.js.map +1 -1
- package/lib/back-top/index.js.map +1 -1
- package/lib/back-top/style.js.map +1 -1
- package/lib/basic-config/index.js.map +1 -1
- package/lib/button/index.js.map +1 -1
- package/lib/button/style.js.map +1 -1
- package/lib/capture-screen/index.js.map +1 -1
- package/lib/capture-screen/style.js.map +1 -1
- package/lib/carousel/index.js.map +1 -1
- package/lib/carousel/style.js.map +1 -1
- package/lib/checkbox/index.js.map +1 -1
- package/lib/checkbox/style.js.map +1 -1
- package/lib/code/index.js +1 -1
- package/lib/code/index.js.map +1 -1
- package/lib/code/style.js.map +1 -1
- package/lib/code/worker.js +1 -1
- package/lib/code/worker.js.map +1 -1
- package/lib/color-palette/index.js.map +1 -1
- package/lib/color-palette/style.js.map +1 -1
- package/lib/color-picker/index.js +1 -1
- package/lib/color-picker/index.js.map +1 -1
- package/lib/color-picker/style.js.map +1 -1
- package/lib/cron/begin-interval.js.map +1 -1
- package/lib/cron/day.js.map +1 -1
- package/lib/cron/hour.js.map +1 -1
- package/lib/cron/index.js.map +1 -1
- package/lib/cron/item.js.map +1 -1
- package/lib/cron/minute.js.map +1 -1
- package/lib/cron/month.js.map +1 -1
- package/lib/cron/period.js.map +1 -1
- package/lib/cron/second.js.map +1 -1
- package/lib/cron/some.js.map +1 -1
- package/lib/cron/style.js.map +1 -1
- package/lib/cron/week.js.map +1 -1
- package/lib/cron/year.js.map +1 -1
- package/lib/date-picker/date.js.map +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.map +1 -1
- package/lib/date-picker/panel.js.map +1 -1
- package/lib/date-picker/style.js.map +1 -1
- package/lib/date-picker/time.js.map +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/empty/index.js.map +1 -1
- package/lib/from-schema/index.js.map +1 -1
- package/lib/get-options/index.js.map +1 -1
- package/lib/highlight-text/index.js.map +1 -1
- package/lib/img/index.js.map +1 -1
- package/lib/img/style.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/input/index.js.map +1 -1
- package/lib/input/style.js.map +1 -1
- package/lib/input-number/index.js +1 -1
- package/lib/input-number/index.js.map +1 -1
- package/lib/katex/index.js.map +1 -1
- package/lib/md/index.js +1 -1
- package/lib/md/index.js.map +1 -1
- package/lib/md/worker.js.map +1 -1
- package/lib/md-style/index.js.map +1 -1
- package/lib/menu/index.js.map +1 -1
- package/lib/menu/style.js.map +1 -1
- package/lib/modal/hooks.js.map +1 -1
- package/lib/modal/index.js.map +1 -1
- package/lib/modal/store.js.map +1 -1
- package/lib/modal/style.js.map +1 -1
- package/lib/notification/index.js.map +1 -1
- package/lib/notification/notification.js.map +1 -1
- package/lib/notification/queque.js.map +1 -1
- package/lib/notification/styles.js.map +1 -1
- package/lib/pagination/index.js.map +1 -1
- package/lib/pagination/styles.js.map +1 -1
- package/lib/popover/index.js.map +1 -1
- package/lib/popover/style.js.map +1 -1
- package/lib/prism/css.js.map +1 -1
- package/lib/prism/prism.js +1 -1
- package/lib/prism/prism.js.map +1 -1
- package/lib/provider/index.js.map +1 -1
- package/lib/radio/index.js.map +1 -1
- package/lib/radio/style.js.map +1 -1
- package/lib/segmented/index.js.map +1 -1
- package/lib/segmented/style.js.map +1 -1
- package/lib/select/index.js +1 -1
- package/lib/select/index.js.map +1 -1
- package/lib/select/style.js.map +1 -1
- package/lib/skeleton/index.js.map +1 -1
- package/lib/spin/index.js.map +1 -1
- package/lib/switch/index.js.map +1 -1
- package/lib/switch/style.js.map +1 -1
- package/lib/table/index.js.map +1 -1
- package/lib/table/styles.js.map +1 -1
- package/lib/tabs/index.js.map +1 -1
- package/lib/tabs/style.js.map +1 -1
- package/lib/tag/index.js +2 -2
- package/lib/tag/index.js.map +1 -1
- package/lib/tag/style.js.map +1 -1
- package/lib/theme/index.js.map +1 -1
- package/lib/tree/index.js.map +1 -1
- package/lib/tree/register.js.map +1 -1
- package/lib/tree/style.js.map +1 -1
- package/lib/tree/type.js.map +1 -1
- package/lib/typography/index.js.map +1 -1
- package/package.json +22 -22
- package/umd/index.js +1 -1
package/lib/radio/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/radio/index.tsx"],"sourcesContent":["import { For, createComponent, createEffect, createMemo, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface RadioOption extends Omit<BaseOption, 'icon'> {\n /** 值 */\n value?: string;\n}\n\nexport interface RadioProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 选项数据 */\n options?: (RadioOption | string)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string): void;\n /** 选项排列方式\n * @default 'horizontal'\n */\n layout?: 'vertical' | 'horizontal';\n}\n\nfunction Radio(props: RadioProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: RadioOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value]!;\n\n setValue(next);\n props.onChange?.(next);\n }\n }\n function onKeyUp(item: RadioOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue(props.value);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <section class={cx('box', props.layout, props.class)} part=\"box\">\n <For each={options()}>\n {(item) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => {\n onChange(item);\n };\n const fieldName = fieldNames();\n\n return (\n <div\n class={cx('item', item.class, item.status)}\n part=\"item\"\n tabindex={readOnly ? -1 : 0}\n aria-disabled={readOnly}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={handleChange}\n >\n <input\n class=\"radio\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n tabindex={-1}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label class=\"label\" part=\"label\">\n {item[fieldName.label]}\n </label>\n </div>\n );\n }}\n </For>\n </section>\n </>\n );\n}\n\nexport type RadioElement = CustomElement<RadioProps>;\n\ncustomElement<RadioProps>(\n 'n-radio',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n layout: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n layout: el.layout || 'horizontal',\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Radio, props);\n },\n);\nexport default Radio;\n"],"names":["Radio","props","baseStyle","theme","value","setValue","createSignal","defaultValue","fieldNames","createMemo","Object","assign","FieldName","onChange","item","disabled","next","onKeyUp","e","key","options","getOptions","createEffect","style","css","For","readOnly","handleChange","fieldName","bind","label","cx","class","status","name","layout","customElement","_","opt","el","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"mappings":"kGAwJA,+CAAA,+CAxJyF,sBACjE,yBACM,2BACR,qBACI,+BACH,+BACL,qPAiClB,SAASA,EAAMC,CAAiB,EAC9B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CACrB,CAACC,EAAOC,EAAS,CAAGC,GAAAA,cAAY,EAACL,EAAMM,YAAY,EACnDC,EAAaC,GAAAA,YAAU,EAAC,IAAMC,OAAOC,MAAM,CAAC,CAAC,EAAGC,WAAS,CAAEX,EAAMO,UAAU,GAEjF,SAASK,EAASC,CAAiB,EACjC,GAAI,CAACb,EAAMc,QAAQ,EAAI,CAACD,EAAKC,QAAQ,CAAE,CACrC,IAAMC,EAAOF,CAAI,CAACN,IAAaJ,KAAK,CAAC,CAErCC,EAASW,GACTf,EAAMY,QAAQ,GAAGG,EACnB,CACF,CACA,SAASC,EAAQH,CAAiB,CAAEI,CAAgB,EACpC,UAAVA,EAAEC,GAAG,EACPN,EAASC,EAEb,CACA,IAAMM,EAAUX,GAAAA,YAAU,EAAC,IAClBY,GAAAA,SAAU,EAACpB,EAAMmB,OAAO,CAAEZ,MAOnC,MAJAc,GAAAA,cAAY,EAAC,KACXjB,EAASJ,EAAMG,KAAK,CACtB,yCAKOF,uBACAqB,OAAK,0BACLC,GAAAA,KAAG,EAACvB,EAAMuB,GAAG,yEAGbC,KAAG,oBAAOL,cACR,AAACN,IACA,IAAMY,EAAWzB,EAAMc,QAAQ,EAAID,EAAKC,QAAQ,CAC1CY,EAAe,KACnBd,EAASC,EACX,EACMc,EAAYpB,IAElB,4FAOamB,uCADAV,EAAQY,IAAI,CAAC,KAAMf,uCAFlBY,EAAW,GAAK,wCACXA,qCAYHC,cAHAD,kCACA,uBAKTZ,CAAI,CAACc,EAAUE,KAAK,CAAC,yBAlBjBC,GAAAA,IAAE,EAAC,OAAQjB,EAAKkB,KAAK,CAAElB,EAAKmB,MAAM,IAUjChC,EAAMiC,IAAI,sJACTpB,CAAI,CAACc,EAAUxB,KAAK,CAAC,6BAGnBU,CAAI,CAACc,EAAUxB,KAAK,CAAC,GAAKA,UAQ3C,wCAjCY2B,GAAAA,IAAE,EAAC,MAAO9B,EAAMkC,MAAM,CAAElC,EAAM+B,KAAK,UAsCzD,CAIAI,GAAAA,eAAa,EACX,UACA,CACEJ,MAAO,KAAK,EACZR,IAAK,KAAK,EACVU,KAAM,KAAK,EACXnB,SAAU,KAAK,EACfX,MAAO,KAAK,EACZG,aAAc,KAAK,EACnBa,QAAS,EAAE,CACXP,SAAU,KAAK,EACfL,WAAY,KAAK,EACjB2B,OAAQ,KAAK,CACf,EACA,CAACE,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBvC,EAAQwC,GAAAA,YAAU,EACtB,CACEN,OAAQI,EAAGJ,MAAM,EAAI,aACrBtB,SAASG,CAAY,EACnBuB,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQ5B,CACV,GAEJ,CACF,EACAqB,GAQF,MALAf,GAAAA,cAAY,EAAC,KACXiB,EAAGM,eAAe,CAAC,WACnBN,EAAGM,eAAe,CAAC,eACnBN,EAAGM,eAAe,CAAC,MACrB,GACOC,GAAAA,iBAAe,EAAC9C,EAAOC,EAChC,SAEF,EAAeD"}
|
|
1
|
+
{"version":3,"sources":["../../components/radio/index.tsx"],"sourcesContent":["import { For, createComponent, createEffect, createMemo, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface RadioOption extends Omit<BaseOption, 'icon'> {\n /** 值 */\n value?: string;\n}\n\nexport interface RadioProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string;\n /** 默认值 */\n defaultValue?: string;\n /** 选项数据 */\n options?: (RadioOption | string)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string): void;\n /** 选项排列方式\n * @default 'horizontal'\n */\n layout?: 'vertical' | 'horizontal';\n}\n\nfunction Radio(props: RadioProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: RadioOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value]!;\n\n setValue(next);\n props.onChange?.(next);\n }\n }\n function onKeyUp(item: RadioOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue(props.value);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <section class={cx('box', props.layout, props.class)} part=\"box\">\n <For each={options()}>\n {(item) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => {\n onChange(item);\n };\n const fieldName = fieldNames();\n\n return (\n <div\n class={cx('item', item.class, item.status)}\n part=\"item\"\n tabindex={readOnly ? -1 : 0}\n aria-disabled={readOnly}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={handleChange}\n >\n <input\n class=\"radio\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n tabindex={-1}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label class=\"label\" part=\"label\">\n {item[fieldName.label]}\n </label>\n </div>\n );\n }}\n </For>\n </section>\n </>\n );\n}\n\nexport type RadioElement = CustomElement<RadioProps>;\n\ncustomElement<RadioProps>(\n 'n-radio',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n layout: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n layout: el.layout || 'horizontal',\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Radio, props);\n },\n);\nexport default Radio;\n"],"names":["Radio","props","baseStyle","theme","value","setValue","createSignal","defaultValue","fieldNames","createMemo","Object","assign","FieldName","onChange","item","disabled","next","onKeyUp","e","key","options","getOptions","createEffect","style","css","For","readOnly","handleChange","fieldName","bind","label","cx","class","status","name","layout","customElement","_","opt","el","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"rangeMappings":"","mappings":"kGAwJA,+CAAA,+CAxJyF,sBACjE,yBACM,2BACR,qBACI,+BACH,+BACL,qPAiClB,SAASA,EAAMC,CAAiB,EAC9B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CACrB,CAACC,EAAOC,EAAS,CAAGC,GAAAA,cAAY,EAACL,EAAMM,YAAY,EACnDC,EAAaC,GAAAA,YAAU,EAAC,IAAMC,OAAOC,MAAM,CAAC,CAAC,EAAGC,WAAS,CAAEX,EAAMO,UAAU,GAEjF,SAASK,EAASC,CAAiB,EACjC,GAAI,CAACb,EAAMc,QAAQ,EAAI,CAACD,EAAKC,QAAQ,CAAE,CACrC,IAAMC,EAAOF,CAAI,CAACN,IAAaJ,KAAK,CAAC,CAErCC,EAASW,GACTf,EAAMY,QAAQ,GAAGG,EACnB,CACF,CACA,SAASC,EAAQH,CAAiB,CAAEI,CAAgB,EACpC,UAAVA,EAAEC,GAAG,EACPN,EAASC,EAEb,CACA,IAAMM,EAAUX,GAAAA,YAAU,EAAC,IAClBY,GAAAA,SAAU,EAACpB,EAAMmB,OAAO,CAAEZ,MAOnC,MAJAc,GAAAA,cAAY,EAAC,KACXjB,EAASJ,EAAMG,KAAK,CACtB,yCAKOF,uBACAqB,OAAK,0BACLC,GAAAA,KAAG,EAACvB,EAAMuB,GAAG,yEAGbC,KAAG,oBAAOL,cACR,AAACN,IACA,IAAMY,EAAWzB,EAAMc,QAAQ,EAAID,EAAKC,QAAQ,CAC1CY,EAAe,KACnBd,EAASC,EACX,EACMc,EAAYpB,IAElB,4FAOamB,uCADAV,EAAQY,IAAI,CAAC,KAAMf,uCAFlBY,EAAW,GAAK,wCACXA,qCAYHC,cAHAD,kCACA,uBAKTZ,CAAI,CAACc,EAAUE,KAAK,CAAC,yBAlBjBC,GAAAA,IAAE,EAAC,OAAQjB,EAAKkB,KAAK,CAAElB,EAAKmB,MAAM,IAUjChC,EAAMiC,IAAI,sJACTpB,CAAI,CAACc,EAAUxB,KAAK,CAAC,6BAGnBU,CAAI,CAACc,EAAUxB,KAAK,CAAC,GAAKA,UAQ3C,wCAjCY2B,GAAAA,IAAE,EAAC,MAAO9B,EAAMkC,MAAM,CAAElC,EAAM+B,KAAK,UAsCzD,CAIAI,GAAAA,eAAa,EACX,UACA,CACEJ,MAAO,KAAK,EACZR,IAAK,KAAK,EACVU,KAAM,KAAK,EACXnB,SAAU,KAAK,EACfX,MAAO,KAAK,EACZG,aAAc,KAAK,EACnBa,QAAS,EAAE,CACXP,SAAU,KAAK,EACfL,WAAY,KAAK,EACjB2B,OAAQ,KAAK,CACf,EACA,CAACE,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBvC,EAAQwC,GAAAA,YAAU,EACtB,CACEN,OAAQI,EAAGJ,MAAM,EAAI,aACrBtB,SAASG,CAAY,EACnBuB,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQ5B,CACV,GAEJ,CACF,EACAqB,GAQF,MALAf,GAAAA,cAAY,EAAC,KACXiB,EAAGM,eAAe,CAAC,WACnBN,EAAGM,eAAe,CAAC,eACnBN,EAAGM,eAAe,CAAC,MACrB,GACOC,GAAAA,iBAAe,EAAC9C,EAAOC,EAChC,SAEF,EAAeD"}
|
package/lib/radio/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/radio/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .box {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 16px;\n\n .item,\n .item .label {\n display: inline-flex;\n gap: 6px;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n cursor: pointer;\n inline-size: fit-content;\n }\n\n .item {\n outline: 0;\n\n .radio {\n position: relative;\n display: inline-block;\n margin: 0;\n border: 1px solid var(--border-color);\n border-radius: 50%;\n background-color: var(--component-bg);\n outline: none;\n transition: 120ms border-color linear;\n appearance: none;\n inline-size: 16px;\n block-size: 16px;\n pointer-events: none;\n user-select: none;\n\n &::before {\n position: absolute;\n display: inline-block;\n margin: auto;\n border-radius: 50%;\n box-shadow: inset 0 0 0 8px var(--primary-color);\n inset-block: 0 0;\n inset-inline: 0 0;\n content: '';\n inline-size: 10px;\n block-size: 10px;\n transform: scale(0);\n transition: 120ms transform var(--transition-timing-function);\n }\n\n &:active {\n border-color: var(--primary-active);\n\n &::before {\n --primary-color: var(--primary-active);\n }\n }\n\n &:checked {\n border-color: var(--primary-color);\n\n &::before {\n transform: scale(1);\n }\n }\n\n &:disabled {\n border-color: var(--disable-border);\n\n &::before {\n --primary-color: var(--disable-border);\n }\n }\n\n &:not(:disabled, :checked):hover {\n border-color: var(--primary-hover);\n\n &::before {\n --primary-color: var(--primary-hover);\n }\n }\n }\n\n .label {\n color: var(--text-color);\n outline: 0;\n cursor: inherit;\n }\n\n &:has(:checked) {\n --text-color: var(--primary-color);\n }\n\n &:not([aria-disabled]:not([aria-disabled='false'])):focus .radio {\n box-shadow: 0 0 0 3px var(--primary-outline);\n\n &:not(:checked) {\n border-color: var(--primary-hover);\n }\n }\n\n &[aria-disabled]:not([aria-disabled='false']) {\n --text-color: var(--disable-color);\n\n cursor: not-allowed;\n }\n }\n }\n\n .horizontal {\n flex-direction: row;\n }\n\n .vertical {\n flex-direction: column;\n }\n\n ${['success', 'error', 'warning']\n .map(\n (s) =>\n `.${s} {--border-color: var(--${s}-border);--primary-hover: var(--${s}-hover);--primary-outline: var(--${s}-outline);--primary-color: var(--${s}-color);--primary-active: var(--${s}-active);--component-bg: var(--${s}-bg);}`,\n )\n .join('')}\n`;\n"],"names":["style","css","map","s","join"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqHvB,EAAE,CAAC,UAAW,QAAS,UAAU,CAC9BC,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,wBAAwB,EAAEA,EAAE,gCAAgC,EAAEA,EAAE,iCAAiC,EAAEA,EAAE,iCAAiC,EAAEA,EAAE,gCAAgC,EAAEA,EAAE,+BAA+B,EAAEA,EAAE,MAAM,CAAC,EAEjOC,IAAI,CAAC,IAAI;AACd,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../components/radio/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .box {\n display: flex;\n flex-wrap: wrap;\n gap: 8px 16px;\n\n .item,\n .item .label {\n display: inline-flex;\n gap: 6px;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n cursor: pointer;\n inline-size: fit-content;\n }\n\n .item {\n outline: 0;\n\n .radio {\n position: relative;\n display: inline-block;\n margin: 0;\n border: 1px solid var(--border-color);\n border-radius: 50%;\n background-color: var(--component-bg);\n outline: none;\n transition: 120ms border-color linear;\n appearance: none;\n inline-size: 16px;\n block-size: 16px;\n pointer-events: none;\n user-select: none;\n\n &::before {\n position: absolute;\n display: inline-block;\n margin: auto;\n border-radius: 50%;\n box-shadow: inset 0 0 0 8px var(--primary-color);\n inset-block: 0 0;\n inset-inline: 0 0;\n content: '';\n inline-size: 10px;\n block-size: 10px;\n transform: scale(0);\n transition: 120ms transform var(--transition-timing-function);\n }\n\n &:active {\n border-color: var(--primary-active);\n\n &::before {\n --primary-color: var(--primary-active);\n }\n }\n\n &:checked {\n border-color: var(--primary-color);\n\n &::before {\n transform: scale(1);\n }\n }\n\n &:disabled {\n border-color: var(--disable-border);\n\n &::before {\n --primary-color: var(--disable-border);\n }\n }\n\n &:not(:disabled, :checked):hover {\n border-color: var(--primary-hover);\n\n &::before {\n --primary-color: var(--primary-hover);\n }\n }\n }\n\n .label {\n color: var(--text-color);\n outline: 0;\n cursor: inherit;\n }\n\n &:has(:checked) {\n --text-color: var(--primary-color);\n }\n\n &:not([aria-disabled]:not([aria-disabled='false'])):focus .radio {\n box-shadow: 0 0 0 3px var(--primary-outline);\n\n &:not(:checked) {\n border-color: var(--primary-hover);\n }\n }\n\n &[aria-disabled]:not([aria-disabled='false']) {\n --text-color: var(--disable-color);\n\n cursor: not-allowed;\n }\n }\n }\n\n .horizontal {\n flex-direction: row;\n }\n\n .vertical {\n flex-direction: column;\n }\n\n ${['success', 'error', 'warning']\n .map(\n (s) =>\n `.${s} {--border-color: var(--${s}-border);--primary-hover: var(--${s}-hover);--primary-outline: var(--${s}-outline);--primary-color: var(--${s}-color);--primary-active: var(--${s}-active);--component-bg: var(--${s}-bg);}`,\n )\n .join('')}\n`;\n"],"names":["style","css","map","s","join"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqHvB,EAAE,CAAC,UAAW,QAAS,UAAU,CAC9BC,GAAG,CACF,AAACC,GACC,CAAC,CAAC,EAAEA,EAAE,wBAAwB,EAAEA,EAAE,gCAAgC,EAAEA,EAAE,iCAAiC,EAAEA,EAAE,iCAAiC,EAAEA,EAAE,gCAAgC,EAAEA,EAAE,+BAA+B,EAAEA,EAAE,MAAM,CAAC,EAEjOC,IAAI,CAAC,IAAI;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/segmented/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport '../typography';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface SegmentedProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n options?: (BaseOption | string | number)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string | number): void;\n}\n\nfunction Segmented(props: SegmentedProps) {\n const { baseStyle, isDark } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const [offsetStyle, setOffsetStyle] = createSignal('');\n let box: HTMLDivElement | undefined;\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --segmented-bg: #000;\n --segmented-current-bg: #1f1f1f;\n }\n `;\n }\n\n return css`\n :host {\n --segmented-bg: var(--primary-details-bg);\n --segmented-current-bg: #fff;\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: BaseOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (isFunction(props.onChange)) {\n props.onChange(next);\n }\n if (props.value === void 0) {\n setValue(next);\n }\n }\n }\n function onKeyUp(key: string, item: BaseOption) {\n if (key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue((props.value !== void 0 && props.value) || props.defaultValue);\n });\n\n createEffect(() => {\n const val = options().find((o) => o[fieldNames().value] === value());\n const timer = setTimeout(() => {\n clearTimeout(timer);\n const el = val?.ref;\n\n if (el) {\n setOffsetStyle(\n `.box {--w: ${el.offsetWidth}px;--h: ${el.offsetHeight}px;--left: ${el.offsetLeft}px;}`,\n );\n } else {\n setOffsetStyle('');\n }\n }, 0);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {offsetStyle()}\n {css(props.css)}\n </style>\n <div ref={box} class={cx('box', props.class)}>\n <For each={options()}>\n {(item, i) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => onChange(item);\n const fieldName = fieldNames();\n\n return (\n <>\n <input\n class=\"segmented\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label\n class={cx('label', item.class)}\n tabindex={readOnly ? -1 : 0}\n onKeyUp={({ key }) => onKeyUp(key, item)}\n onClick={handleChange}\n aria-disabled={readOnly}\n ref={options()[i()].ref}\n >\n <Show when={item[fieldName.icon]}>\n <span class=\"icon\">{item[fieldName.icon]}</span>\n </Show>\n {item[fieldName.label]}\n <Show when={item[fieldName.suffix]}>\n <n-typography type=\"secondary\">{item[fieldName.suffix]}</n-typography>\n </Show>\n </label>\n </>\n );\n }}\n </For>\n </div>\n </>\n );\n}\n\nexport type SegmentedElement = CustomElement<SegmentedProps>;\n\ncustomElement<SegmentedProps>(\n 'n-segmented',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n name: el.name,\n disabled: el.disabled,\n value: el.value,\n defaultValue: el.defaultValue,\n options: el.options,\n fieldNames: el.fieldNames,\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Segmented, props);\n },\n);\nexport default Segmented;\n"],"names":["Segmented","props","box","baseStyle","isDark","theme","value","setValue","createSignal","defaultValue","offsetStyle","setOffsetStyle","cssVar","createMemo","css","fieldNames","Object","assign","FieldName","onChange","item","disabled","next","isFunction","options","getOptions","createEffect","val","find","o","timer","setTimeout","clearTimeout","el","ref","offsetWidth","offsetHeight","offsetLeft","style","For","i","readOnly","handleChange","fieldName","name","key","Show","icon","label","suffix","cx","class","customElement","_","opt","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/segmented/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport { FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport '../typography';\nimport type { BaseOption, BasicConfig, CustomElement } from '..';\n\nexport interface SegmentedProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"radio\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值 */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n options?: (BaseOption | string | number)[];\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 值修改时的回调方法 */\n onChange?(val: string | number): void;\n}\n\nfunction Segmented(props: SegmentedProps) {\n const { baseStyle, isDark } = theme;\n const [value, setValue] = createSignal(props.defaultValue);\n const [offsetStyle, setOffsetStyle] = createSignal('');\n let box: HTMLDivElement | undefined;\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --segmented-bg: #000;\n --segmented-current-bg: #1f1f1f;\n }\n `;\n }\n\n return css`\n :host {\n --segmented-bg: var(--primary-details-bg);\n --segmented-current-bg: #fff;\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n function onChange(item: BaseOption) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (isFunction(props.onChange)) {\n props.onChange(next);\n }\n if (props.value === void 0) {\n setValue(next);\n }\n }\n }\n function onKeyUp(key: string, item: BaseOption) {\n if (key === 'Enter') {\n onChange(item);\n }\n }\n const options = createMemo(() => {\n return getOptions(props.options, fieldNames());\n });\n\n createEffect(() => {\n setValue((props.value !== void 0 && props.value) || props.defaultValue);\n });\n\n createEffect(() => {\n const val = options().find((o) => o[fieldNames().value] === value());\n const timer = setTimeout(() => {\n clearTimeout(timer);\n const el = val?.ref;\n\n if (el) {\n setOffsetStyle(\n `.box {--w: ${el.offsetWidth}px;--h: ${el.offsetHeight}px;--left: ${el.offsetLeft}px;}`,\n );\n } else {\n setOffsetStyle('');\n }\n }, 0);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {offsetStyle()}\n {css(props.css)}\n </style>\n <div ref={box} class={cx('box', props.class)}>\n <For each={options()}>\n {(item, i) => {\n const readOnly = props.disabled || item.disabled;\n const handleChange = () => onChange(item);\n const fieldName = fieldNames();\n\n return (\n <>\n <input\n class=\"segmented\"\n type=\"radio\"\n name={props.name}\n value={item[fieldName.value]}\n disabled={readOnly}\n checked={item[fieldName.value] === value()}\n onChange={handleChange}\n />\n <label\n class={cx('label', item.class)}\n tabindex={readOnly ? -1 : 0}\n onKeyUp={({ key }) => onKeyUp(key, item)}\n onClick={handleChange}\n aria-disabled={readOnly}\n ref={options()[i()].ref}\n >\n <Show when={item[fieldName.icon]}>\n <span class=\"icon\">{item[fieldName.icon]}</span>\n </Show>\n {item[fieldName.label]}\n <Show when={item[fieldName.suffix]}>\n <n-typography type=\"secondary\">{item[fieldName.suffix]}</n-typography>\n </Show>\n </label>\n </>\n );\n }}\n </For>\n </div>\n </>\n );\n}\n\nexport type SegmentedElement = CustomElement<SegmentedProps>;\n\ncustomElement<SegmentedProps>(\n 'n-segmented',\n {\n class: void 0,\n css: void 0,\n name: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n options: [],\n onChange: void 0,\n fieldNames: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n name: el.name,\n disabled: el.disabled,\n value: el.value,\n defaultValue: el.defaultValue,\n options: el.options,\n fieldNames: el.fieldNames,\n onChange(next: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: next,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('options');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Segmented, props);\n },\n);\nexport default Segmented;\n"],"names":["Segmented","props","box","baseStyle","isDark","theme","value","setValue","createSignal","defaultValue","offsetStyle","setOffsetStyle","cssVar","createMemo","css","fieldNames","Object","assign","FieldName","onChange","item","disabled","next","isFunction","options","getOptions","createEffect","val","find","o","timer","setTimeout","clearTimeout","el","ref","offsetWidth","offsetHeight","offsetLeft","style","For","i","readOnly","handleChange","fieldName","name","key","Show","icon","label","suffix","cx","class","customElement","_","opt","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"rangeMappings":";;;;;;;;;;","mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/segmented/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .box {\n position: relative;\n display: flex;\n border-radius: var(--border-radius);\n padding: 2px;\n max-inline-size: 100%;\n min-block-size: 28px;\n background-color: var(--segmented-bg);\n line-height: 28px;\n inline-size: fit-content;\n\n &::before {\n position: absolute;\n display: block;\n border-radius: var(--border-radius);\n background-color: var(--segmented-current-bg);\n box-shadow: 0 2px 8px 0 var(--primary-shadow);\n content: '';\n inline-size: var(--w);\n block-size: var(--h);\n inset-block-start: 2px;\n inset-inline-start: var(--left);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: inline-size, block-size, inset-inline-start, background-color;\n }\n }\n\n .label {\n position: relative;\n overflow: hidden;\n border-radius: var(--border-radius);\n padding: 0 12px;\n color: var(--text-color);\n outline: 0;\n transition:\n 0.3s background-color var(--transition-timing-function),\n var(--transition-duration) color var(--transition-timing-function);\n cursor: pointer;\n box-sizing: border-box;\n /* stylelint-disable-next-line */\n display: -webkit-box;\n -webkit-box-orient: block-axis;\n -webkit-line-clamp: var(--rows, 1);\n word-break: break-word;\n word-wrap: break-word;\n font-size: var(--font-size);\n\n &:hover,\n &:focus {\n background-color: var(--primary-selection);\n }\n\n &[aria-disabled]:not([aria-disabled='false']) {\n cursor: not-allowed;\n color: var(--disable-color);\n\n &:hover,\n &:focus {\n background-color: transparent;\n }\n }\n\n .icon {\n margin-inline-end: 6px;\n }\n }\n\n .segmented {\n display: none;\n pointer-events: none;\n\n &:checked + .label {\n color: var(--text-heading);\n background-color: transparent;\n\n &[aria-disabled]:not([aria-disabled='false']) {\n color: var(--disable-color);\n }\n }\n }\n`;\n"],"names":["style","css"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFzB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../components/segmented/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .box {\n position: relative;\n display: flex;\n border-radius: var(--border-radius);\n padding: 2px;\n max-inline-size: 100%;\n min-block-size: 28px;\n background-color: var(--segmented-bg);\n line-height: 28px;\n inline-size: fit-content;\n\n &::before {\n position: absolute;\n display: block;\n border-radius: var(--border-radius);\n background-color: var(--segmented-current-bg);\n box-shadow: 0 2px 8px 0 var(--primary-shadow);\n content: '';\n inline-size: var(--w);\n block-size: var(--h);\n inset-block-start: 2px;\n inset-inline-start: var(--left);\n transition-duration: var(--transition-duration);\n transition-timing-function: var(--transition-timing-function);\n transition-property: inline-size, block-size, inset-inline-start, background-color;\n }\n }\n\n .label {\n position: relative;\n overflow: hidden;\n border-radius: var(--border-radius);\n padding: 0 12px;\n color: var(--text-color);\n outline: 0;\n transition:\n 0.3s background-color var(--transition-timing-function),\n var(--transition-duration) color var(--transition-timing-function);\n cursor: pointer;\n box-sizing: border-box;\n /* stylelint-disable-next-line */\n display: -webkit-box;\n -webkit-box-orient: block-axis;\n -webkit-line-clamp: var(--rows, 1);\n word-break: break-word;\n word-wrap: break-word;\n font-size: var(--font-size);\n\n &:hover,\n &:focus {\n background-color: var(--primary-selection);\n }\n\n &[aria-disabled]:not([aria-disabled='false']) {\n cursor: not-allowed;\n color: var(--disable-color);\n\n &:hover,\n &:focus {\n background-color: transparent;\n }\n }\n\n .icon {\n margin-inline-end: 6px;\n }\n }\n\n .segmented {\n display: none;\n pointer-events: none;\n\n &:checked + .label {\n color: var(--text-heading);\n background-color: transparent;\n\n &[aria-disabled]:not([aria-disabled='false']) {\n color: var(--disable-color);\n }\n }\n }\n`;\n"],"names":["style","css"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkFzB,CAAC"}
|
package/lib/select/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _}});const e=require("solid-js/web"),t=require("solid-js"),n=u(require("@moneko/common/lib/isFunction")),r=require("@moneko/css"),a=require("solid-element"),o=require("./style"),l=require("../basic-config"),i=function(e,t){if(
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return _}});const e=require("solid-js/web"),t=require("solid-js"),n=u(require("@moneko/common/lib/isFunction")),r=require("@moneko/css"),a=require("solid-element"),o=require("./style"),l=require("../basic-config"),i=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var n=s(void 0);if(n&&n.has(e))return n.get(e);var r={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var l=a?Object.getOwnPropertyDescriptor(e,o):null;l&&(l.get||l.set)?Object.defineProperty(r,o,l):r[o]=e[o]}return r.default=e,n&&n.set(e,r),r}(require("../dropdown")),c=u(require("../get-options"));function u(e){return e&&e.__esModule?e:{default:e}}function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,n=new WeakMap;return(s=function(e){return e?n:t})(e)}require("../tag");const d=(0,e.template)('<span class="prefix">'),p=(0,e.template)('<label class="label">'),f=(0,e.template)('<span class="suffix">'),v=(0,e.template)('<div class="select"><div class="tags">'),g=(0,e.template)("<span>"),h=(0,e.template)('<span class="placeholder">'),b=(0,e.template)("<n-tag>",!0,!1);function m(a){let u,s;let[m,_]=(0,t.splitProps)(a,["css","value","onChange","open","onOpenChange","label","prefixIcon","suffixIcon","placeholder","trigger","options"]),[w,y]=(0,t.createSignal)(null),[$,k]=(0,t.createSignal)([]),[C,x]=(0,t.createSignal)(""),[E,O]=(0,t.createSignal)([]),[A,j]=(0,t.createSignal)({}),S=(0,t.createMemo)(()=>Object.assign({},l.FieldName,_.fieldNames));function M(e){_.disabled||((0,n.default)(m.onOpenChange)&&m.onOpenChange(e),void 0===m.open&&y(e))}function P(e){e.target?.parentElement===u?.parentNode?.parentNode?.activeElement&&M(!(0,t.untrack)(w))}function I(e,t){void 0===m.value&&k(e?Array.isArray(e)?e:[e]:[]),(0,n.default)(m.onChange)&&m.onChange(e,t)}function q({key:e}){switch(e){case"ArrowDown":case"ArrowUp":break;case"Backspace":if(_.multiple){let e=[...(0,t.untrack)($)];e.splice(-1,1),I(e,(0,t.untrack)(A)[(0,t.untrack)($).length-1])}else I(void 0,(0,t.untrack)(A)[(0,t.untrack)($)[0]]);break;case"Enter":M(!(0,t.untrack)(w));break;case"Escape":M(!1)}}function L(e){e.stopPropagation(),e.preventDefault()}function N(e,n){L(n),I((0,t.untrack)($).filter(t=>t!==e),(0,t.untrack)(A)[e])}function D(e){L(e),M(!0)}function W(e){L(e),(0,t.untrack)(w)&&M(!1)}(0,t.createEffect)(()=>{(0,t.batch)(()=>{let e=S(),t=(0,c.default)(m.options,e);O(t),j(function e(t,n){let r={};for(let a=0,o=t.length;a<o;a++){let o=t[a],l=o[n.options];r[o[n.value]]=o,Array.isArray(l)&&Object.assign(r,e(l,n));let i=o[n.children];r[o[n.value]]=o,Array.isArray(i)&&Object.assign(r,e(i,n))}return r}(t,e))})}),(0,t.createEffect)(()=>{(0,t.batch)(()=>{m.open!==(0,t.untrack)(w)&&void 0!==m.open&&y(m.open),void 0!==m.value&&null!==m.value?k(Array.isArray(m.value)?m.value:[m.value]):k([])})}),(0,t.onMount)(()=>{if(void 0===m.value){let e=_.defaultValue;k(e?Array.isArray(e)?e:[e]:[])}}),(0,t.createEffect)(()=>{m.label&&x(`.label {--x: ${s?.offsetLeft||0}px; }`)});let F=(0,t.createMemo)(()=>(0,n.default)(m.prefixIcon)?m.prefixIcon():m.prefixIcon),B=(0,t.createMemo)(()=>(0,n.default)(m.label)?m.label():m.label),U=(0,t.createMemo)(()=>(0,n.default)(m.suffixIcon)?m.suffixIcon():m.suffixIcon);return(0,e.createComponent)(i.default,(0,e.mergeProps)({placement:"left",get css(){return o.style+C()+(m.css||"")},trigger:"none",get items(){return E()},get value(){return $()},onChange:I,get open(){return w()},onOpenChange:M},_,{get children(){let n=v(),a=u,o=n.firstChild,l=s;return(0,e.addEventListener)(n,"blur",W),(0,e.addEventListener)(n,"focus",D),(0,e.addEventListener)(n,"keydown",q,!0),"function"==typeof a?(0,e.use)(a,n):u=n,(0,e.insert)(n,(0,e.createComponent)(t.Show,{get when(){return F()},get children(){let t=d();return(0,e.insert)(t,F),t}}),o),(0,e.insert)(n,(0,e.createComponent)(t.Show,{get when(){return B()},get children(){let t=p();return(0,e.insert)(t,B),t}}),o),(0,e.addEventListener)(o,"mousedown",P,!0),"function"==typeof l?(0,e.use)(l,o):s=o,(0,e.insert)(o,(0,e.createComponent)(t.Show,{get when(){return _.multiple},get fallback(){return(0,e.createComponent)(t.Show,{get when(){return $().length},get fallback(){return(0,e.createComponent)(t.Show,{get when(){return m.placeholder},get children(){let t=h();return(0,e.insert)(t,()=>m.placeholder),t}})},get children(){let t=g();return(0,e.insert)(t,()=>A()[$()[0]]?.[S().label]||$()[0]),(0,e.effect)(()=>(0,e.className)(t,(0,r.cx)("value",w()&&"opacity"))),t}})},get children(){return(0,e.createComponent)(t.For,{get each(){return $()},get fallback(){return(0,e.createComponent)(t.Show,{get when(){return m.placeholder},get children(){let t=h();return(0,e.insert)(t,()=>m.placeholder),t}})},children:t=>(()=>{let n=b();return(0,e.addEventListener)(n,"close",N.bind(null,t)),n._$owner=(0,e.getOwner)(),(0,e.insert)(n,()=>A()[t]?.[S().label]||t),(0,e.effect)(a=>{let o=(0,r.cx)("tag",w()&&"opacity"),l=A()[t]?.type||"primary",i=A()[t]?.color,c=A()[t]?.icon,u=!_.disabled&&!A()[t]?.disabled,s=_.disabled||A()[t]?.disabled;return o!==a._v$3&&(0,e.className)(n,a._v$3=o),l!==a._v$4&&(n.type=a._v$4=l),i!==a._v$5&&(n.color=a._v$5=i),c!==a._v$6&&(n.icon=a._v$6=c),u!==a._v$7&&(n.closeIcon=a._v$7=u),s!==a._v$8&&(n.disabled=a._v$8=s),a},{_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0,_v$8:void 0}),n})()})}})),(0,e.insert)(n,(0,e.createComponent)(t.Show,{get when(){return U()},get children(){let t=f();return(0,e.insert)(t,U),t}}),null),(0,e.effect)(t=>{let r=_.disabled?-1:0,a=_.disabled;return r!==t._v$&&(0,e.setAttribute)(n,"tabindex",t._v$=r),a!==t._v$2&&(0,e.setAttribute)(n,"aria-disabled",t._v$2=a),t},{_v$:void 0,_v$2:void 0}),n}}))}(0,a.customElement)("n-select",{...i.defaultProps,options:[],label:void 0,placeholder:"请选择",dropdownMatchSelectWidth:!0,prefixIcon:void 0,suffixIcon:void 0},(e,n)=>{let r=n.element,a=(0,t.mergeProps)({onChange(e,t){r.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onOpenChange(e){r.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return(0,t.createEffect)(()=>{r.removeAttribute("options"),r.removeAttribute("field-names"),r.removeAttribute("css")}),(0,t.createComponent)(m,a)});const _=m;(0,e.delegateEvents)(["keydown","mousedown"]);
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/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":["Select","props","ref","tagsRef","local","other","splitProps","open","setOpen","createSignal","value","setValue","x","setX","options","setOptions","kv","setKv","fieldNames","createMemo","Object","assign","FieldName","openChange","next","disabled","isFunction","onOpenChange","click","e","target","parentElement","parentNode","activeElement","untrack","onChange","val","item","Array","isArray","keyDown","key","multiple","old","splice","length","preventDefault","stopPropagation","deleteValue","v","filter","focus","blur","createEffect","batch","fieldDic","opts","getOptions","getKv","arr","optKv","i","len","_options","_children","children","onMount","defaultValue","label","offsetLeft","prefix","prefixIcon","suffix","suffixIcon","Dropdown","style","css","Show","placeholder","cx","For","bind","type","color","icon","customElement","defaultProps","dropdownMatchSelectWidth","_","opt","el","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"mappings":"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"}
|
|
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":["Select","props","ref","tagsRef","local","other","splitProps","open","setOpen","createSignal","value","setValue","x","setX","options","setOptions","kv","setKv","fieldNames","createMemo","Object","assign","FieldName","openChange","next","disabled","isFunction","onOpenChange","click","e","target","parentElement","parentNode","activeElement","untrack","onChange","val","item","Array","isArray","keyDown","key","multiple","old","splice","length","preventDefault","stopPropagation","deleteValue","v","filter","focus","blur","createEffect","batch","fieldDic","opts","getOptions","getKv","arr","optKv","i","len","_options","_children","children","onMount","defaultValue","label","offsetLeft","prefix","prefixIcon","suffix","suffixIcon","Dropdown","style","css","Show","placeholder","cx","For","bind","type","color","icon","customElement","defaultProps","dropdownMatchSelectWidth","_","opt","el","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"rangeMappings":"","mappings":"kGAgVA,+CAAA,+CApUO,wBACoB,4CACR,yBACW,2BACR,qBACI,yeACa,4BAChB,6MAChB,qTAGP,SAASA,EAAOC,CAAkB,MAc5BC,EACAC,EAdJ,GAAM,CAACC,EAAOC,EAAM,CAAGC,GAAAA,YAAU,EAACL,EAAO,CACvC,MACA,QACA,WACA,OACA,eACA,QACA,aACA,aACA,cACA,UACA,UACD,EAGK,CAACM,EAAMC,EAAQ,CAAGC,GAAAA,cAAY,EAAiB,MAC/C,CAACC,EAAOC,EAAS,CAAGF,GAAAA,cAAY,EAAsB,EAAE,EACxD,CAACG,EAAGC,EAAK,CAAGJ,GAAAA,cAAY,EAAS,IACjC,CAACK,EAASC,EAAW,CAAGN,GAAAA,cAAY,EAAe,EAAE,EACrD,CAACO,EAAIC,EAAM,CAAGR,GAAAA,cAAY,EAA6B,CAAC,GAExDS,EAAaC,GAAAA,YAAU,EAAC,IAAMC,OAAOC,MAAM,CAAC,CAAC,EAAGC,WAAS,CAAEjB,EAAMa,UAAU,GAiCjF,SAASK,EAAWC,CAAoB,EACjCnB,EAAMoB,QAAQ,GACbC,GAAAA,SAAU,EAACtB,EAAMuB,YAAY,GAC/BvB,EAAMuB,YAAY,CAACH,GAEF,KAAK,IAApBpB,EAAMG,IAAI,EACZC,EAAQgB,GAGd,CACA,SAASI,EAAMC,CAAa,EAEvBA,EAAEC,MAAM,EAAcC,gBACtB7B,GAAK8B,YAAYA,YAAyBC,eAE3CV,EAAW,CAACW,GAAAA,SAAO,EAAC3B,GAExB,CACA,SAAS4B,EAASC,CAAsD,CAAEC,CAAgB,EACpE,KAAK,IAArBjC,EAAMM,KAAK,EACbC,EAASyB,EAAOE,MAAMC,OAAO,CAACH,GAAOA,EAAM,CAACA,EAAI,CAAI,EAAE,EAEpDV,GAAAA,SAAU,EAACtB,EAAM+B,QAAQ,GAC3B/B,EAAM+B,QAAQ,CAACC,EAAKC,EAExB,CACA,SAASG,EAAQ,CAAEC,IAAAA,CAAG,CAAmB,EACvC,OAAQA,GACN,IAAK,YAIL,IAAK,UADH,KAGF,KAAK,YACH,GAAIpC,EAAMqC,QAAQ,CAAE,CAClB,IAAMC,EAAM,IAAIT,GAAAA,SAAO,EAACxB,GAAO,CAE/BiC,EAAIC,MAAM,CAAC,GAAI,GACfT,EAASQ,EAAKT,GAAAA,SAAO,EAAClB,EAAG,CAACkB,GAAAA,SAAO,EAACxB,GAAOmC,MAAM,CAAG,EAAE,CACtD,MACEV,EAAS,KAAK,EAAGD,GAAAA,SAAO,EAAClB,EAAG,CAACkB,GAAAA,SAAO,EAACxB,EAAM,CAAC,EAAE,CAAC,EAEjD,KACF,KAAK,QACHa,EAAW,CAACW,GAAAA,SAAO,EAAC3B,IACpB,KACF,KAAK,SACHgB,EAAW,CAAA,EAIf,CACF,CACA,SAASuB,EAAejB,CAAQ,EAC9BA,EAAEkB,eAAe,GACjBlB,EAAEiB,cAAc,EAClB,CACA,SAASE,EAAYC,CAAkB,CAAEpB,CAAc,EACrDiB,EAAejB,GACfM,EAASD,GAAAA,SAAO,EAACxB,GAAOwC,MAAM,CAAC,AAACP,GAAQA,IAAQM,GAAaf,GAAAA,SAAO,EAAClB,EAAG,CAACiC,EAAE,CAC7E,CACA,SAASE,EAAMtB,CAA0B,EACvCiB,EAAejB,GACfN,EAAW,CAAA,EACb,CACA,SAAS6B,EAAKvB,CAAa,EACzBiB,EAAejB,GACXK,GAAAA,SAAO,EAAC3B,IACVgB,EAAW,CAAA,EAEf,CAjFA8B,GAAAA,cAAY,EAAC,KACXC,GAAAA,OAAK,EAAC,KACJ,IAAMC,EAAWrC,IACXsC,EAAOC,GAAAA,SAAU,EAACrD,EAAMU,OAAO,CAAEyC,GAEvCxC,EAAWyC,GACXvC,EAAMyC,AA3BV,SAASA,EAAMC,CAAiB,CAAEJ,CAA0B,EAC1D,IAAMK,EAAoC,CAAC,EAE3C,IAAK,IAAIC,EAAI,EAAGC,EAAMH,EAAId,MAAM,CAAEgB,EAAIC,EAAKD,IAAK,CAC9C,IAAMxB,EAAOsB,CAAG,CAACE,EAAE,CACbE,EAAW1B,CAAI,CAACkB,EAASzC,OAAO,CAAC,AAEvC8C,CAAAA,CAAK,CAACvB,CAAI,CAACkB,EAAS7C,KAAK,CAAC,CAAE,CAAG2B,EAC3BC,MAAMC,OAAO,CAACwB,IAChB3C,OAAOC,MAAM,CAACuC,EAAOF,EAAMK,EAA0BR,IAEvD,IAAMS,EAAY3B,CAAI,CAACkB,EAASU,QAAQ,CAAC,AAEzCL,CAAAA,CAAK,CAACvB,CAAI,CAACkB,EAAS7C,KAAK,CAAC,CAAE,CAAG2B,EAC3BC,MAAMC,OAAO,CAACyB,IAChB5C,OAAOC,MAAM,CAACuC,EAAOF,EAAMM,EAA2BT,GAE1D,CACA,OAAOK,CACT,EAQgBJ,EAAMD,GACpB,EACF,GA2EAF,GAAAA,cAAY,EAAC,KACXC,GAAAA,OAAK,EAAC,KACAlD,EAAMG,IAAI,GAAK2B,GAAAA,SAAO,EAAC3B,IAASH,AAAe,KAAK,IAApBA,EAAMG,IAAI,EAC5CC,EAAQJ,EAAMG,IAAI,EAEhBH,AAAgB,KAAK,IAArBA,EAAMM,KAAK,EAAeN,AAAgB,OAAhBA,EAAMM,KAAK,CACvCC,EAAS2B,MAAMC,OAAO,CAACnC,EAAMM,KAAK,EAAIN,EAAMM,KAAK,CAAG,CAACN,EAAMM,KAAK,CAAC,EAEjEC,EAAS,EAAE,CAEf,EACF,GACAuD,GAAAA,SAAO,EAAC,KACN,GAAI9D,AAAgB,KAAK,IAArBA,EAAMM,KAAK,CAAa,CAC1B,IAAM0B,EAAM/B,EAAM8D,YAAY,CAE9BxD,EAASyB,EAAOE,MAAMC,OAAO,CAACH,GAAOA,EAAM,CAACA,EAAI,CAAI,EAAE,CACxD,CACF,GACAiB,GAAAA,cAAY,EAAC,KACPjD,EAAMgE,KAAK,EACbvD,EAAK,CAAC,aAAa,EAAEV,GAASkE,YAAc,EAAE,KAAK,CAAC,CAExD,GACA,IAAMC,EAASnD,GAAAA,YAAU,EAAC,IACxBO,GAAAA,SAAU,EAACtB,EAAMmE,UAAU,EAAKnE,EAAMmE,UAAU,GAAqBnE,EAAMmE,UAAU,EAEjFH,EAAQjD,GAAAA,YAAU,EAAC,IACvBO,GAAAA,SAAU,EAACtB,EAAMgE,KAAK,EAAKhE,EAAMgE,KAAK,GAAqBhE,EAAMgE,KAAK,EAElEI,EAASrD,GAAAA,YAAU,EAAC,IACxBO,GAAAA,SAAU,EAACtB,EAAMqE,UAAU,EAAKrE,EAAMqE,UAAU,GAAqBrE,EAAMqE,UAAU,EAGvF,4BACGC,SAAQ,qDAEFC,OAAK,CAAG/D,IAAOR,CAAAA,EAAMwE,GAAG,EAAI,EAAC,qCAE3B9D,wBACAJ,cACGyB,oBACJ5B,kBACQgB,GACVlB,8BAGGH,mBAckBC,wCATfiD,oCADCD,sCADEX,0CAHNtC,yCAQJ2E,MAAI,oBAAOP,mDACYA,gDAEvBO,MAAI,oBAAOT,mDACYA,gDAEqBxC,0CAAtBzB,yCACpB0E,MAAI,oBACGxE,EAAMqC,QAAQ,6CAEjBmC,MAAI,oBACGnE,IAAQmC,MAAM,6CAEjBgC,MAAI,oBAAOzE,EAAM0E,WAAW,oDACA1E,EAAM0E,WAAW,0DAK7C9D,GAAI,CAACN,GAAO,CAAC,EAAE,CAAC,EAAE,CAACQ,IAAakD,KAAK,CAAC,EAAI1D,GAAO,CAAC,EAAE,qCAD1CqE,GAAAA,IAAE,EAAC,QAASxE,KAAU,8DAMtCyE,KAAG,oBACItE,gDAEHmE,MAAI,oBAAOzE,EAAM0E,WAAW,oDACA1E,EAAM0E,WAAW,iBAI/C,AAAC7B,0DAOWD,EAAYiC,IAAI,CAAC,KAAMhC,kDAG/BjC,GAAI,CAACiC,EAAE,EAAE,CAAC/B,IAAakD,KAAK,CAAC,EAAInB,0BAR3B8B,GAAAA,IAAE,EAAC,MAAOxE,KAAU,aACrBS,GAAI,CAACiC,EAAE,EAAEiC,MAAQ,YAChBlE,GAAI,CAACiC,EAAE,EAAEkC,QACVnE,GAAI,CAACiC,EAAE,EAAEmC,OACH,CAAC/E,EAAMoB,QAAQ,EAAI,CAACT,GAAI,CAACiC,EAAE,EAAExB,WAE/BpB,EAAMoB,QAAQ,EAAIT,GAAI,CAACiC,EAAE,EAAExB,uVAQ9CoD,MAAI,oBAAOL,mDACYA,qCAvDdnE,EAAMoB,QAAQ,CAAG,GAAK,IAIjBpB,EAAMoB,QAAQ,yJAwDrC,CAmCA4D,GAAAA,eAAa,EACX,WACA,CACE,GAAGC,cAAY,CACfxE,QAAS,EAAE,CACXsD,MAAO,KAAK,EACZU,YAAa,MACbS,yBAA0B,CAAA,EAC1BhB,WAAY,KAAK,EACjBE,WAAY,KAAK,CACnB,EACA,CAACe,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChB1F,EAAQ2F,GAAAA,YAAU,EACtB,CACEzD,SAASM,CAAoB,CAAEJ,CAAgB,EAC7CqD,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQ,CAACtD,EAAKJ,EAAK,AACrB,GAEJ,EACAV,aAAapB,CAAoB,EAC/BmF,EAAGG,aAAa,CACd,IAAIC,YAAY,aAAc,CAC5BC,OAAQxF,CACV,GAEJ,CACF,EACAiF,GAQF,MALAnC,GAAAA,cAAY,EAAC,KACXqC,EAAGM,eAAe,CAAC,WACnBN,EAAGM,eAAe,CAAC,eACnBN,EAAGM,eAAe,CAAC,MACrB,GACOC,GAAAA,iBAAe,EAACjG,EAAQC,EACjC,SAEF,EAAeD"}
|
package/lib/select/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/select/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .label {\n position: absolute;\n overflow: hidden;\n border-radius: var(--border-radius);\n padding: 0 4px;\n text-overflow: ellipsis;\n color: var(--text-secondary);\n transition: transform var(--transition-duration);\n line-height: inherit;\n pointer-events: none;\n transform-origin: left;\n transform: translate3d(calc(var(--x, 0) - 14px), 0, 1px);\n max-inline-size: 100%;\n word-break: keep-all;\n }\n\n .value,\n .placeholder {\n max-inline-size: 100%;\n padding: 0;\n transition: var(--transition-duration) opacity;\n pointer-events: none;\n flex: 1;\n }\n\n .placeholder {\n color: darkgray;\n opacity: 0;\n }\n\n .prefix,\n .suffix {\n display: flex;\n align-items: center;\n }\n\n .select {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n border: 1px solid var(--border-color);\n border-radius: var(--border-radius);\n padding: 4px 10px;\n font-size: var(--font-size);\n color: var(--text-color);\n background-color: var(--component-bg);\n line-height: 1.5;\n min-inline-size: 200px;\n background-image: none;\n box-sizing: border-box;\n accent-color: var(--primary-color);\n gap: 4px;\n min-block-size: 28px;\n cursor: pointer;\n user-select: none;\n transition: border-color var(--transition-duration) var(--transition-timing-function);\n\n &:not(:has(.label)) {\n & .placeholder {\n opacity: 0.65;\n }\n }\n\n &:has(.tag) {\n &:not(:has(.prefix)) {\n padding-inline-start: 4px;\n }\n\n &:not(:has(.suffix)) {\n padding-inline-end: 4px;\n }\n }\n\n &:hover:not([aria-disabled='true']) {\n border-color: var(--primary-hover);\n border-inline-end-width: 1px;\n }\n\n &:focus:not([aria-disabled='true']) {\n border-color: var(--primary-hover);\n border-inline-end-width: 1px;\n outline: 0;\n box-shadow: 0 0 0 2px var(--primary-outline);\n }\n\n &[aria-disabled='true'] {\n border-color: var(--disable-border);\n color: var(--disable-color);\n background-color: var(--disable-bg);\n cursor: not-allowed;\n }\n\n &:focus .label,\n &:has(.label + .tags > .tag) .label,\n &:has(.label + .tags > .value) .label {\n line-height: 1;\n background: var(--component-bg);\n transform: translate3d(0, calc(-50% - 0.43em), 1px) scale(0.8);\n\n & + .tags > .placeholder {\n opacity: 0.65;\n }\n }\n }\n\n .value {\n opacity: 1;\n }\n\n .tags {\n flex: 1;\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n .opacity {\n opacity: 0.5;\n transition: opacity var(--transition-duration) var(--transition-timing-function);\n\n &:hover {\n opacity: 1;\n }\n }\n`;\n"],"names":["style","css"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HzB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../components/select/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .label {\n position: absolute;\n overflow: hidden;\n border-radius: var(--border-radius);\n padding: 0 4px;\n text-overflow: ellipsis;\n color: var(--text-secondary);\n transition: transform var(--transition-duration);\n line-height: inherit;\n pointer-events: none;\n transform-origin: left;\n transform: translate3d(calc(var(--x, 0) - 14px), 0, 1px);\n max-inline-size: 100%;\n word-break: keep-all;\n }\n\n .value,\n .placeholder {\n max-inline-size: 100%;\n padding: 0;\n transition: var(--transition-duration) opacity;\n pointer-events: none;\n flex: 1;\n }\n\n .placeholder {\n color: darkgray;\n opacity: 0;\n }\n\n .prefix,\n .suffix {\n display: flex;\n align-items: center;\n }\n\n .select {\n position: relative;\n display: flex;\n flex-wrap: wrap;\n border: 1px solid var(--border-color);\n border-radius: var(--border-radius);\n padding: 4px 10px;\n font-size: var(--font-size);\n color: var(--text-color);\n background-color: var(--component-bg);\n line-height: 1.5;\n min-inline-size: 200px;\n background-image: none;\n box-sizing: border-box;\n accent-color: var(--primary-color);\n gap: 4px;\n min-block-size: 28px;\n cursor: pointer;\n user-select: none;\n transition: border-color var(--transition-duration) var(--transition-timing-function);\n\n &:not(:has(.label)) {\n & .placeholder {\n opacity: 0.65;\n }\n }\n\n &:has(.tag) {\n &:not(:has(.prefix)) {\n padding-inline-start: 4px;\n }\n\n &:not(:has(.suffix)) {\n padding-inline-end: 4px;\n }\n }\n\n &:hover:not([aria-disabled='true']) {\n border-color: var(--primary-hover);\n border-inline-end-width: 1px;\n }\n\n &:focus:not([aria-disabled='true']) {\n border-color: var(--primary-hover);\n border-inline-end-width: 1px;\n outline: 0;\n box-shadow: 0 0 0 2px var(--primary-outline);\n }\n\n &[aria-disabled='true'] {\n border-color: var(--disable-border);\n color: var(--disable-color);\n background-color: var(--disable-bg);\n cursor: not-allowed;\n }\n\n &:focus .label,\n &:has(.label + .tags > .tag) .label,\n &:has(.label + .tags > .value) .label {\n line-height: 1;\n background: var(--component-bg);\n transform: translate3d(0, calc(-50% - 0.43em), 1px) scale(0.8);\n\n & + .tags > .placeholder {\n opacity: 0.65;\n }\n }\n }\n\n .value {\n opacity: 1;\n }\n\n .tags {\n flex: 1;\n display: flex;\n gap: 4px;\n flex-wrap: wrap;\n }\n\n .opacity {\n opacity: 0.5;\n transition: opacity var(--transition-duration) var(--transition-timing-function);\n\n &:hover {\n opacity: 1;\n }\n }\n`;\n"],"names":["style","css"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6HzB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/skeleton/index.tsx"],"sourcesContent":["import { For, Show, createComponent, 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 activeCls = createMemo(() => props.active && 'active');\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 class={cx('avatar', activeCls())} />\n </Show>\n <div class=\"body\">\n <Show when={props.title}>\n <div class={cx('title', activeCls())} />\n </Show>\n <div class=\"paragraph\">\n <For each={rows()}>{() => <div class={cx(activeCls())} />}</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 createComponent(Skeleton, props);\n },\n);\nexport default Skeleton;\n"],"names":["style","css","Skeleton","props","baseStyle","isDark","theme","activeCls","createMemo","active","rows","Array","fill","cssVar","Show","avatar","cx","title","For","class","customElement","_","opt","el","element","mergeProps","createComponent"],"mappings":"wGA2LA,+CAAA,+CA3LmE,sBAC3C,yBACM,8BACZ,kKAGZA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsElB,CAAC,CAyBD,SAASC,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAE,CAAGC,SAAK,CAC7BC,EAAYC,GAAAA,YAAU,EAAC,IAAML,EAAMM,MAAM,EAAI,UAC7CC,EAAOF,GAAAA,YAAU,EAAC,IAAMG,MAAMR,EAAMO,IAAI,EAAEE,IAAI,CAAC,IAC/CC,EAASL,GAAAA,YAAU,EAAC,IACxB,AAAIH,IACKJ,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;MAWX,CAAC,CAGIA,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;IAWX,CAAC,EAGH,4CAGOG,uBACAS,uBACAb,2BACAC,GAAAA,KAAG,EAACE,EAAMF,GAAG,uGAGba,MAAI,oBAAOX,EAAMY,MAAM,oEACVC,GAAAA,IAAE,EAAC,SAAUT,oDAGxBO,MAAI,oBAAOX,EAAMc,KAAK,oEACTD,GAAAA,IAAE,EAAC,QAAST,oDAGvBW,KAAG,oBAAOR,cAAS,6DAAkBM,GAAAA,IAAE,EAACT,mDATnCS,GAAAA,IAAE,EAAC,WAAYb,EAAMgB,KAAK,UAe5C,CAGAC,GAAAA,eAAa,EACX,aACA,CACEV,KAAM,EACND,OAAQ,KAAK,EACbM,OAAQ,KAAK,EACbE,MAAO,KAAK,EACZhB,IAAK,KAAK,EACVkB,MAAO,KAAK,CACd,EACA,CAACE,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBrB,EAAQsB,GAAAA,YAAU,EACtB,CACEf,KAAMa,EAAGb,IAAI,CACbD,OAAQc,EAAGd,MAAM,CACjBM,OAAQQ,EAAGR,MAAM,CACjBE,MAAOM,EAAGN,KAAK,CACfhB,IAAKsB,EAAGtB,GAAG,AACb,EACAoB,GAGF,MAAOK,GAAAA,iBAAe,EAACxB,EAAUC,EACnC,SAEF,EAAeD"}
|
|
1
|
+
{"version":3,"sources":["../../components/skeleton/index.tsx"],"sourcesContent":["import { For, Show, createComponent, 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 activeCls = createMemo(() => props.active && 'active');\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 class={cx('avatar', activeCls())} />\n </Show>\n <div class=\"body\">\n <Show when={props.title}>\n <div class={cx('title', activeCls())} />\n </Show>\n <div class=\"paragraph\">\n <For each={rows()}>{() => <div class={cx(activeCls())} />}</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 createComponent(Skeleton, props);\n },\n);\nexport default Skeleton;\n"],"names":["style","css","Skeleton","props","baseStyle","isDark","theme","activeCls","createMemo","active","rows","Array","fill","cssVar","Show","avatar","cx","title","For","class","customElement","_","opt","el","element","mergeProps","createComponent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"wGA2LA,+CAAA,+CA3LmE,sBAC3C,yBACM,8BACZ,kKAGZA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsElB,CAAC,CAyBD,SAASC,EAASC,CAAoB,EACpC,GAAM,CAAEC,UAAAA,CAAS,CAAEC,OAAAA,CAAM,CAAE,CAAGC,SAAK,CAC7BC,EAAYC,GAAAA,YAAU,EAAC,IAAML,EAAMM,MAAM,EAAI,UAC7CC,EAAOF,GAAAA,YAAU,EAAC,IAAMG,MAAMR,EAAMO,IAAI,EAAEE,IAAI,CAAC,IAC/CC,EAASL,GAAAA,YAAU,EAAC,IACxB,AAAIH,IACKJ,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;MAWX,CAAC,CAGIA,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;IAWX,CAAC,EAGH,4CAGOG,uBACAS,uBACAb,2BACAC,GAAAA,KAAG,EAACE,EAAMF,GAAG,uGAGba,MAAI,oBAAOX,EAAMY,MAAM,oEACVC,GAAAA,IAAE,EAAC,SAAUT,oDAGxBO,MAAI,oBAAOX,EAAMc,KAAK,oEACTD,GAAAA,IAAE,EAAC,QAAST,oDAGvBW,KAAG,oBAAOR,cAAS,6DAAkBM,GAAAA,IAAE,EAACT,mDATnCS,GAAAA,IAAE,EAAC,WAAYb,EAAMgB,KAAK,UAe5C,CAGAC,GAAAA,eAAa,EACX,aACA,CACEV,KAAM,EACND,OAAQ,KAAK,EACbM,OAAQ,KAAK,EACbE,MAAO,KAAK,EACZhB,IAAK,KAAK,EACVkB,MAAO,KAAK,CACd,EACA,CAACE,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBrB,EAAQsB,GAAAA,YAAU,EACtB,CACEf,KAAMa,EAAGb,IAAI,CACbD,OAAQc,EAAGd,MAAM,CACjBM,OAAQQ,EAAGR,MAAM,CACjBE,MAAOM,EAAGN,KAAK,CACfhB,IAAKsB,EAAGtB,GAAG,AACb,EACAoB,GAGF,MAAOK,GAAAA,iBAAe,EAACxB,EAAUC,EACnC,SAEF,EAAeD"}
|
package/lib/spin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/spin/index.tsx"],"sourcesContent":["import { createComponent, 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 .box {\n position: relative;\n box-sizing: border-box;\n }\n\n .content {\n opacity: 1;\n transition: opacity var(--transition-duration);\n }\n\n .spin {\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 class={cx('box', props.spin && 'spin', props.class)}>\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 createComponent(Spin, props);\n});\nexport default Spin;\n"],"names":["style","css","Spin","props","baseStyle","theme","children","cx","spin","class","customElement","_","opt","el","element","mergeProps","childNodes","values","createComponent"],"mappings":"wGAmGA,+CAAA,+CAnG4C,sBACpB,yBACM,8BACZ,oHAGZA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDlB,CAAC,CAaD,SAASC,EAAKC,CAAgB,EAC5B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CAE3B,4CAGOD,uBACAJ,2BACAC,GAAAA,KAAG,EAACE,EAAMF,GAAG,sEAGQE,EAAMG,QAAQ,qCAD1BC,GAAAA,IAAE,EAAC,MAAOJ,EAAMK,IAAI,EAAI,OAAQL,EAAMM,KAAK,UAK7D,CAIAC,GAAAA,eAAa,EAAY,SAAU,CAAED,MAAO,KAAK,EAAGR,IAAK,KAAK,EAAGO,KAAM,KAAK,CAAE,EAAG,CAACG,EAAGC,KACnF,IAAMC,EAAKD,EAAIE,OAAO,CAChBX,EAAQY,GAAAA,YAAU,EACtB,CACET,SAAU,IAAIO,EAAGG,UAAU,CAACC,MAAM,GAAG,AACvC,EACAN,GAGF,MAAOO,GAAAA,iBAAe,EAAChB,EAAMC,EAC/B,SACA,EAAeD"}
|
|
1
|
+
{"version":3,"sources":["../../components/spin/index.tsx"],"sourcesContent":["import { createComponent, 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 .box {\n position: relative;\n box-sizing: border-box;\n }\n\n .content {\n opacity: 1;\n transition: opacity var(--transition-duration);\n }\n\n .spin {\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 class={cx('box', props.spin && 'spin', props.class)}>\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 createComponent(Spin, props);\n});\nexport default Spin;\n"],"names":["style","css","Spin","props","baseStyle","theme","children","cx","spin","class","customElement","_","opt","el","element","mergeProps","childNodes","values","createComponent"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"wGAmGA,+CAAA,+CAnG4C,sBACpB,yBACM,8BACZ,oHAGZA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDlB,CAAC,CAaD,SAASC,EAAKC,CAAgB,EAC5B,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CAE3B,4CAGOD,uBACAJ,2BACAC,GAAAA,KAAG,EAACE,EAAMF,GAAG,sEAGQE,EAAMG,QAAQ,qCAD1BC,GAAAA,IAAE,EAAC,MAAOJ,EAAMK,IAAI,EAAI,OAAQL,EAAMM,KAAK,UAK7D,CAIAC,GAAAA,eAAa,EAAY,SAAU,CAAED,MAAO,KAAK,EAAGR,IAAK,KAAK,EAAGO,KAAM,KAAK,CAAE,EAAG,CAACG,EAAGC,KACnF,IAAMC,EAAKD,EAAIE,OAAO,CAChBX,EAAQY,GAAAA,YAAU,EACtB,CACET,SAAU,IAAIO,EAAGG,UAAU,CAACC,MAAM,GAAG,AACvC,EACAN,GAGF,MAAOO,GAAAA,iBAAe,EAAChB,EAAMC,EAC/B,SACA,EAAeD"}
|
package/lib/switch/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/switch/index.tsx"],"sourcesContent":["import { createComponent, createEffect, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface SwitchProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 值 */\n checked?: boolean;\n /** 只读 */\n disabled?: boolean;\n /** 设置 为 true 时的文案 */\n checkedText?: string;\n /** 设置 为 false 时的文案 */\n unCheckedText?: string;\n /** 加载状态 */\n loading?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n}\n\nexport type SwitchElement = CustomElement<SwitchProps>;\n\nfunction Switch(props: SwitchProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(false);\n\n function change() {\n if (!props.disabled && !props.loading) {\n setValue((prev) => !prev);\n props.onChange?.(value());\n }\n }\n\n function onKeyUp({ key }: { key: string }) {\n if (key === 'Enter') {\n change();\n }\n }\n\n createEffect(() => {\n setValue(!!props.checked);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <span\n class={cx('switch', props.class, value() && 'checked', props.loading && 'loading')}\n text-on={props.checkedText}\n text-off={props.unCheckedText}\n aria-disabled={props.disabled}\n onClick={change}\n onKeyUp={onKeyUp}\n tabindex={props.disabled || props.loading ? -1 : 0}\n />\n </>\n );\n}\n\ncustomElement<SwitchProps>(\n 'n-switch',\n {\n class: void 0,\n css: void 0,\n checked: void 0,\n disabled: void 0,\n checkedText: void 0,\n unCheckedText: void 0,\n loading: false,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n checked: el.checked,\n disabled: el.disabled,\n checkedText: el.checkedText,\n unCheckedText: el.unCheckedText,\n loading: el.loading,\n onChange(val: boolean) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(Switch, props);\n },\n);\nexport default Switch;\n"],"names":["Switch","props","baseStyle","theme","value","setValue","createSignal","change","disabled","loading","prev","onChange","onKeyUp","key","createEffect","checked","style","css","cx","class","checkedText","unCheckedText","customElement","_","opt","el","element","mergeProps","val","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"mappings":"wGA4GA,+CAAA,+CA5GwE,sBAChD,yBACM,2BACR,wBACJ,gGAwBlB,SAASA,EAAOC,CAAkB,EAChC,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CACrB,CAACC,EAAOC,EAAS,CAAGC,GAAAA,cAAY,EAAC,CAAA,GAEvC,SAASC,IACFN,EAAMO,QAAQ,EAAKP,EAAMQ,OAAO,GACnCJ,EAAS,AAACK,GAAS,CAACA,GACpBT,EAAMU,QAAQ,GAAGP,KAErB,CAEA,SAASQ,EAAQ,CAAEC,IAAAA,CAAG,CAAmB,EAC3B,UAARA,GACFN,GAEJ,CAMA,MAJAO,GAAAA,cAAY,EAAC,KACXT,EAAS,CAAC,CAACJ,EAAMc,OAAO,CAC1B,yCAKOb,uBACAc,OAAK,0BACLC,GAAAA,KAAG,EAAChB,EAAMgB,GAAG,qEAQLL,uCADAL,6BAJFW,GAAAA,IAAE,EAAC,SAAUjB,EAAMkB,KAAK,CAAEf,KAAW,UAAWH,EAAMQ,OAAO,EAAI,aAC/DR,EAAMmB,WAAW,GAChBnB,EAAMoB,aAAa,GACdpB,EAAMO,QAAQ,GAGnBP,EAAMO,QAAQ,EAAIP,EAAMQ,OAAO,CAAG,GAAK,kVAIzD,CAEAa,GAAAA,eAAa,EACX,WACA,CACEH,MAAO,KAAK,EACZF,IAAK,KAAK,EACVF,QAAS,KAAK,EACdP,SAAU,KAAK,EACfY,YAAa,KAAK,EAClBC,cAAe,KAAK,EACpBZ,QAAS,CAAA,EACTE,SAAU,KAAK,CACjB,EACA,CAACY,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBzB,EAAQ0B,GAAAA,YAAU,EACtB,CACEV,IAAKQ,EAAGR,GAAG,CACXF,QAASU,EAAGV,OAAO,CACnBP,SAAUiB,EAAGjB,QAAQ,CACrBY,YAAaK,EAAGL,WAAW,CAC3BC,cAAeI,EAAGJ,aAAa,CAC/BZ,QAASgB,EAAGhB,OAAO,CACnBE,SAASiB,CAAY,EACnBH,EAAGI,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQH,CACV,GAEJ,CACF,EACAL,GAMF,MAHAT,GAAAA,cAAY,EAAC,KACXW,EAAGO,eAAe,CAAC,MACrB,GACOC,GAAAA,iBAAe,EAACjC,EAAQC,EACjC,SAEF,EAAeD"}
|
|
1
|
+
{"version":3,"sources":["../../components/switch/index.tsx"],"sourcesContent":["import { createComponent, createEffect, createSignal, mergeProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface SwitchProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 值 */\n checked?: boolean;\n /** 只读 */\n disabled?: boolean;\n /** 设置 为 true 时的文案 */\n checkedText?: string;\n /** 设置 为 false 时的文案 */\n unCheckedText?: string;\n /** 加载状态 */\n loading?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n}\n\nexport type SwitchElement = CustomElement<SwitchProps>;\n\nfunction Switch(props: SwitchProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal(false);\n\n function change() {\n if (!props.disabled && !props.loading) {\n setValue((prev) => !prev);\n props.onChange?.(value());\n }\n }\n\n function onKeyUp({ key }: { key: string }) {\n if (key === 'Enter') {\n change();\n }\n }\n\n createEffect(() => {\n setValue(!!props.checked);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(props.css)}\n </style>\n <span\n class={cx('switch', props.class, value() && 'checked', props.loading && 'loading')}\n text-on={props.checkedText}\n text-off={props.unCheckedText}\n aria-disabled={props.disabled}\n onClick={change}\n onKeyUp={onKeyUp}\n tabindex={props.disabled || props.loading ? -1 : 0}\n />\n </>\n );\n}\n\ncustomElement<SwitchProps>(\n 'n-switch',\n {\n class: void 0,\n css: void 0,\n checked: void 0,\n disabled: void 0,\n checkedText: void 0,\n unCheckedText: void 0,\n loading: false,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n checked: el.checked,\n disabled: el.disabled,\n checkedText: el.checkedText,\n unCheckedText: el.unCheckedText,\n loading: el.loading,\n onChange(val: boolean) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(Switch, props);\n },\n);\nexport default Switch;\n"],"names":["Switch","props","baseStyle","theme","value","setValue","createSignal","change","disabled","loading","prev","onChange","onKeyUp","key","createEffect","checked","style","css","cx","class","checkedText","unCheckedText","customElement","_","opt","el","element","mergeProps","val","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"rangeMappings":"","mappings":"wGA4GA,+CAAA,+CA5GwE,sBAChD,yBACM,2BACR,wBACJ,gGAwBlB,SAASA,EAAOC,CAAkB,EAChC,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CACrB,CAACC,EAAOC,EAAS,CAAGC,GAAAA,cAAY,EAAC,CAAA,GAEvC,SAASC,IACFN,EAAMO,QAAQ,EAAKP,EAAMQ,OAAO,GACnCJ,EAAS,AAACK,GAAS,CAACA,GACpBT,EAAMU,QAAQ,GAAGP,KAErB,CAEA,SAASQ,EAAQ,CAAEC,IAAAA,CAAG,CAAmB,EAC3B,UAARA,GACFN,GAEJ,CAMA,MAJAO,GAAAA,cAAY,EAAC,KACXT,EAAS,CAAC,CAACJ,EAAMc,OAAO,CAC1B,yCAKOb,uBACAc,OAAK,0BACLC,GAAAA,KAAG,EAAChB,EAAMgB,GAAG,qEAQLL,uCADAL,6BAJFW,GAAAA,IAAE,EAAC,SAAUjB,EAAMkB,KAAK,CAAEf,KAAW,UAAWH,EAAMQ,OAAO,EAAI,aAC/DR,EAAMmB,WAAW,GAChBnB,EAAMoB,aAAa,GACdpB,EAAMO,QAAQ,GAGnBP,EAAMO,QAAQ,EAAIP,EAAMQ,OAAO,CAAG,GAAK,kVAIzD,CAEAa,GAAAA,eAAa,EACX,WACA,CACEH,MAAO,KAAK,EACZF,IAAK,KAAK,EACVF,QAAS,KAAK,EACdP,SAAU,KAAK,EACfY,YAAa,KAAK,EAClBC,cAAe,KAAK,EACpBZ,QAAS,CAAA,EACTE,SAAU,KAAK,CACjB,EACA,CAACY,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBzB,EAAQ0B,GAAAA,YAAU,EACtB,CACEV,IAAKQ,EAAGR,GAAG,CACXF,QAASU,EAAGV,OAAO,CACnBP,SAAUiB,EAAGjB,QAAQ,CACrBY,YAAaK,EAAGL,WAAW,CAC3BC,cAAeI,EAAGJ,aAAa,CAC/BZ,QAASgB,EAAGhB,OAAO,CACnBE,SAASiB,CAAY,EACnBH,EAAGI,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBC,OAAQH,CACV,GAEJ,CACF,EACAL,GAMF,MAHAT,GAAAA,cAAY,EAAC,KACXW,EAAGO,eAAe,CAAC,MACrB,GACOC,GAAAA,iBAAe,EAACjC,EAAQC,EACjC,SAEF,EAAeD"}
|
package/lib/switch/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/switch/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .switch {\n position: relative;\n display: inline-block;\n border-radius: 12px;\n padding: 2px;\n font-size: 12px;\n background-color: var(--primary-border);\n opacity: 1;\n outline: 0;\n box-shadow:\n inset 0 0 0 0 var(--primary-color),\n 0 0 0 0 var(--primary-hover),\n 0 0 0 0 var(--primary-border);\n transition:\n 0.4s box-shadow,\n var(--transition-duration) background-color,\n var(--transition-duration) opacity;\n cursor: pointer;\n inline-size: fit-content;\n min-inline-size: 44px;\n block-size: 22px;\n line-height: 18px;\n user-select: none;\n box-sizing: border-box;\n\n &::before {\n color: var(--primary-secondary);\n padding-inline: 20px 8px;\n transition-duration: var(--transition-duration);\n transition-property: color, padding, background-color;\n content: attr(text-off) '';\n }\n\n &::after {\n position: absolute;\n margin: auto;\n border: 1.5px solid #fff;\n border-radius: 12px;\n background-color: #fff;\n outline: 2.05px solid #fff;\n box-shadow: 0 2px 4px 1px var(--primary-shadow);\n transition:\n 0.6s transform ease,\n var(--transition-duration) padding ease,\n var(--transition-duration) inset-inline-start ease,\n var(--transition-duration) background-color 0.1s,\n var(--transition-duration) border-color;\n outline-offset: -0.05px;\n inset-block: 3px 3px;\n block-size: 14px;\n min-inline-size: 14px;\n content: '';\n inset-inline-start: 4px;\n box-sizing: border-box;\n }\n\n &:not([aria-disabled]),\n &[aria-disabled='false'] {\n &:not(.loading) {\n &:focus {\n box-shadow:\n inset 0 0 0 0 var(--primary-color),\n 0 0 0 1px var(--primary-hover),\n 0 0 1px 3px var(--primary-border);\n\n &.checked {\n box-shadow:\n inset 0 0 3px 12px var(--primary-color),\n 0 0 0 1px var(--primary-hover),\n 0 0 1px 3px var(--primary-border);\n }\n }\n\n &:hover {\n background-color: var(--primary-secondary-bg);\n }\n\n &:active {\n &::after {\n padding-inline: 10px;\n background-color: var(--primary-hover);\n }\n\n &.checked {\n &::after {\n transform: translateX(-10px);\n }\n }\n }\n }\n }\n\n &.loading,\n &[aria-disabled]:not([aria-disabled='false']) {\n color: var(--disable-color);\n background-color: var(--disable-bg);\n opacity: 0.8;\n cursor: not-allowed;\n }\n }\n\n .checked {\n box-shadow:\n inset 0 0 3px 12px var(--primary-color),\n 0 0 0 0 var(--primary-hover),\n 0 0 0 0 var(--primary-border);\n\n &::before {\n color: #fff;\n padding-inline: 8px 20px;\n content: attr(text-on) '';\n }\n\n &::after {\n inset-inline-start: calc(100% - 18px);\n }\n }\n\n .loading {\n &::after {\n border-block-start-color: var(--primary-color);\n border-block-end-color: var(--primary-color);\n animation: switch-loading 1.5s infinite linear;\n }\n }\n\n @keyframes switch-loading {\n form {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n"],"names":["style","css"],"mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwIzB,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../components/switch/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const style = css`\n .switch {\n position: relative;\n display: inline-block;\n border-radius: 12px;\n padding: 2px;\n font-size: 12px;\n background-color: var(--primary-border);\n opacity: 1;\n outline: 0;\n box-shadow:\n inset 0 0 0 0 var(--primary-color),\n 0 0 0 0 var(--primary-hover),\n 0 0 0 0 var(--primary-border);\n transition:\n 0.4s box-shadow,\n var(--transition-duration) background-color,\n var(--transition-duration) opacity;\n cursor: pointer;\n inline-size: fit-content;\n min-inline-size: 44px;\n block-size: 22px;\n line-height: 18px;\n user-select: none;\n box-sizing: border-box;\n\n &::before {\n color: var(--primary-secondary);\n padding-inline: 20px 8px;\n transition-duration: var(--transition-duration);\n transition-property: color, padding, background-color;\n content: attr(text-off) '';\n }\n\n &::after {\n position: absolute;\n margin: auto;\n border: 1.5px solid #fff;\n border-radius: 12px;\n background-color: #fff;\n outline: 2.05px solid #fff;\n box-shadow: 0 2px 4px 1px var(--primary-shadow);\n transition:\n 0.6s transform ease,\n var(--transition-duration) padding ease,\n var(--transition-duration) inset-inline-start ease,\n var(--transition-duration) background-color 0.1s,\n var(--transition-duration) border-color;\n outline-offset: -0.05px;\n inset-block: 3px 3px;\n block-size: 14px;\n min-inline-size: 14px;\n content: '';\n inset-inline-start: 4px;\n box-sizing: border-box;\n }\n\n &:not([aria-disabled]),\n &[aria-disabled='false'] {\n &:not(.loading) {\n &:focus {\n box-shadow:\n inset 0 0 0 0 var(--primary-color),\n 0 0 0 1px var(--primary-hover),\n 0 0 1px 3px var(--primary-border);\n\n &.checked {\n box-shadow:\n inset 0 0 3px 12px var(--primary-color),\n 0 0 0 1px var(--primary-hover),\n 0 0 1px 3px var(--primary-border);\n }\n }\n\n &:hover {\n background-color: var(--primary-secondary-bg);\n }\n\n &:active {\n &::after {\n padding-inline: 10px;\n background-color: var(--primary-hover);\n }\n\n &.checked {\n &::after {\n transform: translateX(-10px);\n }\n }\n }\n }\n }\n\n &.loading,\n &[aria-disabled]:not([aria-disabled='false']) {\n color: var(--disable-color);\n background-color: var(--disable-bg);\n opacity: 0.8;\n cursor: not-allowed;\n }\n }\n\n .checked {\n box-shadow:\n inset 0 0 3px 12px var(--primary-color),\n 0 0 0 0 var(--primary-hover),\n 0 0 0 0 var(--primary-border);\n\n &::before {\n color: #fff;\n padding-inline: 8px 20px;\n content: attr(text-on) '';\n }\n\n &::after {\n inset-inline-start: calc(100% - 18px);\n }\n }\n\n .loading {\n &::after {\n border-block-start-color: var(--primary-color);\n border-block-end-color: var(--primary-color);\n animation: switch-loading 1.5s infinite linear;\n }\n }\n\n @keyframes switch-loading {\n form {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n }\n`;\n"],"names":["style","css"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"kGAEaA,6CAAAA,qBAFO,eAEPA,EAAQC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwIzB,CAAC"}
|
package/lib/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","defaultPagination","page","pageSize","total","totalText","size","Table","_","baseStyle","theme","local","other","splitProps","layout","hasOrder","setHasOrder","createSignal","setPage","setPageSize","setTotal","getLayout","col","width","align","valign","char","charoff","colspan","rowspan","createEffect","batch","pagination","createMemo","Object","assign","columns","cols","_hasOrder","key","prototype","hasOwnProperty","call","_col","originKey","label","toString","isObject","type","render","_val","_row","i","push","untrack","handlePageChange","e","detail","onChange","styles","css","cx","Show","title","For","_layout","data","row","Row","_pagination","val","isUndefined","emptyVal","summary","length","summaryText","filter","c","includes","arr","reduce","prev","curr","next","isString","customElement","class","loading","opt","el","element","props","mergeProps","querySelector","removeAttribute","createComponent"],"mappings":"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"}
|
|
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","defaultPagination","page","pageSize","total","totalText","size","Table","_","baseStyle","theme","local","other","splitProps","layout","hasOrder","setHasOrder","createSignal","setPage","setPageSize","setTotal","getLayout","col","width","align","valign","char","charoff","colspan","rowspan","createEffect","batch","pagination","createMemo","Object","assign","columns","cols","_hasOrder","key","prototype","hasOwnProperty","call","_col","originKey","label","toString","isObject","type","render","_val","_row","i","push","untrack","handlePageChange","e","detail","onChange","styles","css","cx","Show","title","For","_layout","data","row","Row","_pagination","val","isUndefined","emptyVal","summary","length","summaryText","filter","c","includes","arr","reduce","prev","curr","next","isString","customElement","class","loading","opt","el","element","props","mergeProps","querySelector","removeAttribute","createComponent"],"rangeMappings":"","mappings":"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"}
|
package/lib/table/styles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/table/styles.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const styles = css`\n :host {\n --table-heading-bg: var(--border-color);\n --distance-horizontal: 16px;\n --distance-vertical: 8px;\n }\n\n .table-cell {\n padding: var(--distance-vertical) var(--distance-horizontal);\n\n n-button::part(button) {\n padding: 0;\n min-block-size: unset;\n }\n }\n\n .small {\n --distance-horizontal: 12px;\n --distance-vertical: 6px;\n }\n\n .large {\n --distance-horizontal: 20px;\n --distance-vertical: 10px;\n }\n\n .table {\n border-collapse: collapse;\n display: table;\n border-block-end: 1px solid var(--table-heading-bg);\n inline-size: 100%;\n max-inline-size: 100%;\n border-spacing: 0;\n transition-property: border-color;\n word-break: break-all;\n\n &:has(.table-foot) {\n border-block-end: none;\n }\n\n .table-title {\n padding-block: var(--distance-vertical);\n font-weight: bold;\n text-align: start;\n }\n\n th {\n font-weight: 500;\n color: var(--text-heading);\n background-color: var(--table-heading-bg);\n transition-property: background-color, color;\n }\n\n .table-head {\n .table-cell {\n min-inline-size: 54px;\n\n &:has(+ .table-cell) {\n position: relative;\n\n &::after {\n position: absolute;\n z-index: 1;\n display: block;\n margin: auto;\n background-color: var(--text-secondary);\n inset-block: 0 0;\n inset-inline-end: 0;\n content: '';\n block-size: 16px;\n inline-size: 1px;\n opacity: 0.5;\n }\n }\n }\n }\n\n :not(tfoot) {\n tr:first-child th:first-child {\n border-start-start-radius: var(--border-radius);\n }\n\n tr:first-child th:last-child {\n border-start-end-radius: var(--border-radius);\n }\n }\n\n .table-body {\n tr:nth-child(2n) {\n background-color: var(--primary-details-bg);\n }\n\n tr:hover {\n background-color: var(--primary-selection);\n }\n }\n\n .table-foot {\n background-color: var(--primary-selection);\n\n tr:last-child th:first-child {\n border-end-start-radius: var(--border-radius);\n }\n\n tr:last-child td:last-child {\n border-end-end-radius: var(--border-radius);\n }\n }\n\n .empty-val {\n opacity: 0.5;\n }\n }\n\n .table-pagination {\n display: block;\n inline-size: fit-content;\n margin-block-start: 16px;\n margin-inline-start: auto;\n }\n`;\n"],"names":["styles","css"],"mappings":"kGAEaA,8CAAAA,qBAFO,eAEPA,EAASC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwH1B,CAAC"}
|
|
1
|
+
{"version":3,"sources":["../../components/table/styles.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const styles = css`\n :host {\n --table-heading-bg: var(--border-color);\n --distance-horizontal: 16px;\n --distance-vertical: 8px;\n }\n\n .table-cell {\n padding: var(--distance-vertical) var(--distance-horizontal);\n\n n-button::part(button) {\n padding: 0;\n min-block-size: unset;\n }\n }\n\n .small {\n --distance-horizontal: 12px;\n --distance-vertical: 6px;\n }\n\n .large {\n --distance-horizontal: 20px;\n --distance-vertical: 10px;\n }\n\n .table {\n border-collapse: collapse;\n display: table;\n border-block-end: 1px solid var(--table-heading-bg);\n inline-size: 100%;\n max-inline-size: 100%;\n border-spacing: 0;\n transition-property: border-color;\n word-break: break-all;\n\n &:has(.table-foot) {\n border-block-end: none;\n }\n\n .table-title {\n padding-block: var(--distance-vertical);\n font-weight: bold;\n text-align: start;\n }\n\n th {\n font-weight: 500;\n color: var(--text-heading);\n background-color: var(--table-heading-bg);\n transition-property: background-color, color;\n }\n\n .table-head {\n .table-cell {\n min-inline-size: 54px;\n\n &:has(+ .table-cell) {\n position: relative;\n\n &::after {\n position: absolute;\n z-index: 1;\n display: block;\n margin: auto;\n background-color: var(--text-secondary);\n inset-block: 0 0;\n inset-inline-end: 0;\n content: '';\n block-size: 16px;\n inline-size: 1px;\n opacity: 0.5;\n }\n }\n }\n }\n\n :not(tfoot) {\n tr:first-child th:first-child {\n border-start-start-radius: var(--border-radius);\n }\n\n tr:first-child th:last-child {\n border-start-end-radius: var(--border-radius);\n }\n }\n\n .table-body {\n tr:nth-child(2n) {\n background-color: var(--primary-details-bg);\n }\n\n tr:hover {\n background-color: var(--primary-selection);\n }\n }\n\n .table-foot {\n background-color: var(--primary-selection);\n\n tr:last-child th:first-child {\n border-end-start-radius: var(--border-radius);\n }\n\n tr:last-child td:last-child {\n border-end-end-radius: var(--border-radius);\n }\n }\n\n .empty-val {\n opacity: 0.5;\n }\n }\n\n .table-pagination {\n display: block;\n inline-size: fit-content;\n margin-block-start: 16px;\n margin-inline-start: auto;\n }\n`;\n"],"names":["styles","css"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"kGAEaA,8CAAAA,qBAFO,eAEPA,EAASC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwH1B,CAAC"}
|
package/lib/tabs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/tabs/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport { isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { addCss, btnCss, style } from './style';\nimport { FieldName } from '../basic-config';\nimport '../button';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { BaseOption, BasicConfig, ButtonElement, CustomElement } from '..';\n\nexport interface TabsProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值(指定值时为受控模式,配合onChange使用) */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n items?: (TabOption | string)[];\n /** 标签页居中 */\n centered?: boolean;\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 标签页的显示类型\n * @default 'line'\n */\n type?: 'line' | 'card';\n /** 值修改时的回调方法 */\n onChange?(val: string, item: TabOption, e: Event): void;\n /** 显示添加按钮 */\n add?: boolean;\n /** 删除和添加时的回调方法 */\n onEdit?: (type: 'add' | 'remove', item: TabOption, e: Event) => void;\n /** 给标签页左右添加的附加内容 */\n extra?: {\n left?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n right?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n };\n}\n\nexport interface TabOption extends Omit<BaseOption, 'options'> {\n /** 内容 */\n content?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 标签可关闭 */\n closable?: boolean;\n}\n\nfunction Tabs(props: TabsProps) {\n const { baseStyle, isDark } = theme;\n let box: HTMLDivElement | undefined;\n let add: ButtonElement | undefined;\n const [value, setValue] = createSignal<string | number>();\n const [offsetStyle, setOffsetStyle] = createSignal('');\n const [wrap, setWrap] = createSignal({ left: false, right: false });\n let wrapRef: HTMLDivElement | undefined;\n\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --tab-current-bg: var(--component-bg);\n --tab-bg: rgb(255 255 255 / 4%);\n }\n `;\n }\n\n return css`\n :host {\n --tab-bg: var(--primary-details-bg);\n --tab-current-bg: var(--component-bg);\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n const items = createMemo<TabOption[]>(() => {\n return getOptions(props.items, fieldNames());\n });\n const current = createMemo(() => {\n return items().find((o) => o[fieldNames().value] === value());\n });\n\n function onChange(item: TabOption, e: Event) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (props.value === void 0) {\n setValue(next);\n }\n if (isFunction(props.onChange)) {\n props.onChange(next, item, e);\n }\n }\n }\n function onKeyUp(item: TabOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item, e);\n }\n }\n function handleEdit(type: 'remove' | 'add', item: TabOption | undefined, e: Event) {\n e.stopPropagation();\n e.preventDefault();\n if (isFunction(props.onEdit)) {\n props.onEdit(type, item, e);\n }\n }\n function handleWheel(e?: WheelEvent) {\n if (wrapRef) {\n const pwid = box!.offsetWidth;\n const addWid = add?.offsetWidth || 0;\n const scrollWidth = wrapRef.scrollWidth;\n\n if (scrollWidth > pwid - addWid) {\n let deltaY = 0;\n\n if (e) {\n if (!passiveSupported) {\n e.stopPropagation();\n e.preventDefault();\n }\n deltaY = e.deltaX !== 0 ? e.deltaX : e.deltaY;\n }\n const nl = wrapRef.scrollLeft + deltaY;\n\n wrapRef.scrollTo({\n left: nl,\n });\n setWrap({\n left: nl > 0,\n right: scrollWidth > nl + wrapRef.offsetWidth,\n });\n } else {\n setWrap({\n left: false,\n right: false,\n });\n }\n const el = untrack(current)?.ref;\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef!.scrollLeft + wrapRef.offsetLeft\n }px;--s:${wrapRef!.scrollLeft}px}`,\n );\n }\n }\n createEffect(() => {\n let _val = untrack(value);\n\n if (props.value !== void 0) {\n _val = props.value;\n } else if (props.defaultValue !== void 0) {\n _val = props.defaultValue;\n } else if (items()[0]) {\n _val = items()[0][fieldNames().value];\n }\n if (_val !== untrack(value)) {\n setValue(_val);\n }\n });\n\n createEffect(() => {\n let timer: NodeJS.Timeout | undefined, whellTimer: NodeJS.Timeout | undefined;\n const el = current()?.ref;\n\n if (el) {\n timer = setTimeout(() => {\n clearTimeout(timer);\n if (wrapRef) {\n setWrap({\n left: false,\n right: false,\n });\n wrapRef.scrollTo({\n left: el.offsetLeft - wrapRef.offsetLeft,\n behavior: 'smooth',\n });\n }\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef!.scrollLeft + wrapRef!.offsetLeft\n }px;--s:${wrapRef!.scrollLeft}px}`,\n );\n whellTimer = setTimeout(() => {\n clearTimeout(whellTimer);\n handleWheel();\n }, 300);\n }, 0);\n } else {\n setOffsetStyle('');\n }\n onCleanup(() => {\n clearTimeout(timer);\n clearTimeout(whellTimer);\n });\n });\n const [ani, setAni] = createSignal('slide-in');\n\n createEffect(() => {\n setAni('slide-in');\n return current()?.content;\n });\n const left = createMemo(() =>\n isFunction(props.extra?.left) ? (props.extra!.left() as JSX.Element) : props.extra?.left,\n );\n const right = createMemo(() =>\n isFunction(props.extra?.right) ? (props.extra!.right() as JSX.Element) : props.extra?.right,\n );\n const content = createMemo(() => {\n const _content = current()?.content;\n\n return isFunction(_content) ? (_content() as JSX.Element) : _content;\n });\n\n function onAnimationEnd() {\n setAni('');\n }\n onMount(() => {\n box?.addEventListener('wheel', handleWheel, {\n passive: passiveSupported,\n });\n });\n onCleanup(() => {\n box?.removeEventListener('wheel', handleWheel, false);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {offsetStyle()}\n {css(props.css)}\n </style>\n <div\n ref={box}\n class={cx('tabs', props.type, props.class, props.centered && 'centered')}\n aria-disabled={props.disabled}\n >\n <Show when={left()}>{left()}</Show>\n <div\n ref={wrapRef}\n class={cx('items', wrap().left && 'warp-left', wrap().right && 'warp-right')}\n >\n <For each={items()}>\n {(item, i) => {\n const readOnly = createMemo(() => props.disabled || item.disabled);\n const { icon, value: val, label } = fieldNames();\n const isActive = createMemo(() => value() !== void 0 && item[val] === value());\n\n return (\n <n-button\n link={true}\n type={isActive() ? 'primary' : 'default'}\n class={cx('tab', isActive() && 'active', item.class)}\n tabindex={readOnly() ? -1 : 0}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={onChange.bind(null, item)}\n disabled={readOnly()}\n icon={item[icon]}\n ref={items()[i()].ref}\n css={btnCss}\n >\n {item[label]}\n <Show when={item.closable}>\n <span class=\"remove\" onClick={handleEdit.bind(null, 'remove', item)}>\n ⛌\n </span>\n </Show>\n </n-button>\n );\n }}\n </For>\n </div>\n <Show when={props.add}>\n <n-button\n ref={add}\n link={true}\n class=\"tab add\"\n css={addCss}\n onClick={handleEdit.bind(null, 'add', void 0)}\n >\n +\n </n-button>\n </Show>\n <Show when={right()}>{right()}</Show>\n </div>\n <Show when={current()?.content}>\n <div class={cx('content', ani())} onAnimationEnd={onAnimationEnd}>\n {content()}\n </div>\n </Show>\n </>\n );\n}\n\nexport type TabsElement = CustomElement<TabsProps, 'onChange' | 'onEdit'>;\n\ncustomElement<TabsProps>(\n 'n-tabs',\n {\n class: void 0,\n css: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n centered: void 0,\n items: [],\n type: 'line' as TabsProps['type'],\n fieldNames: void 0,\n add: void 0,\n extra: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onChange(next: string, item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [next, item, e],\n }),\n );\n },\n onEdit(type: 'add' | 'remove', item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('edit', {\n detail: [type, item, e],\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('items');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Tabs, props);\n },\n);\nexport default Tabs;\n"],"names":["Tabs","props","box","add","wrapRef","baseStyle","isDark","theme","value","setValue","createSignal","offsetStyle","setOffsetStyle","wrap","setWrap","left","right","cssVar","createMemo","css","fieldNames","Object","assign","FieldName","items","getOptions","current","find","o","onChange","item","e","disabled","next","isFunction","onKeyUp","key","handleEdit","type","stopPropagation","preventDefault","onEdit","handleWheel","pwid","offsetWidth","addWid","scrollWidth","deltaY","passiveSupported","deltaX","nl","scrollLeft","scrollTo","el","untrack","ref","offsetLeft","createEffect","_val","defaultValue","timer","whellTimer","setTimeout","clearTimeout","behavior","onCleanup","ani","setAni","content","extra","_content","onAnimationEnd","onMount","addEventListener","passive","removeEventListener","style","Show","For","i","readOnly","icon","val","label","isActive","bind","btnCss","closable","cx","class","addCss","centered","customElement","_","opt","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/tabs/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport { isFunction, passiveSupported } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { addCss, btnCss, style } from './style';\nimport { FieldName } from '../basic-config';\nimport '../button';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { BaseOption, BasicConfig, ButtonElement, CustomElement } from '..';\n\nexport interface TabsProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 只读 */\n disabled?: boolean;\n /** 值(指定值时为受控模式,配合onChange使用) */\n value?: string | number;\n /** 默认值 */\n defaultValue?: string | number;\n /** 选项数据 */\n items?: (TabOption | string)[];\n /** 标签页居中 */\n centered?: boolean;\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n /** 标签页的显示类型\n * @default 'line'\n */\n type?: 'line' | 'card';\n /** 值修改时的回调方法 */\n onChange?(val: string, item: TabOption, e: Event): void;\n /** 显示添加按钮 */\n add?: boolean;\n /** 删除和添加时的回调方法 */\n onEdit?: (type: 'add' | 'remove', item: TabOption, e: Event) => void;\n /** 给标签页左右添加的附加内容 */\n extra?: {\n left?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n right?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n };\n}\n\nexport interface TabOption extends Omit<BaseOption, 'options'> {\n /** 内容 */\n content?: JSX.Element | (() => JSX.Element | (() => JSX.Element));\n /** 标签可关闭 */\n closable?: boolean;\n}\n\nfunction Tabs(props: TabsProps) {\n const { baseStyle, isDark } = theme;\n let box: HTMLDivElement | undefined;\n let add: ButtonElement | undefined;\n const [value, setValue] = createSignal<string | number>();\n const [offsetStyle, setOffsetStyle] = createSignal('');\n const [wrap, setWrap] = createSignal({ left: false, right: false });\n let wrapRef: HTMLDivElement | undefined;\n\n const cssVar = createMemo(() => {\n if (isDark()) {\n return css`\n :host {\n --tab-current-bg: var(--component-bg);\n --tab-bg: rgb(255 255 255 / 4%);\n }\n `;\n }\n\n return css`\n :host {\n --tab-bg: var(--primary-details-bg);\n --tab-current-bg: var(--component-bg);\n }\n `;\n });\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n const items = createMemo<TabOption[]>(() => {\n return getOptions(props.items, fieldNames());\n });\n const current = createMemo(() => {\n return items().find((o) => o[fieldNames().value] === value());\n });\n\n function onChange(item: TabOption, e: Event) {\n if (!props.disabled && !item.disabled) {\n const next = item[fieldNames().value];\n\n if (props.value === void 0) {\n setValue(next);\n }\n if (isFunction(props.onChange)) {\n props.onChange(next, item, e);\n }\n }\n }\n function onKeyUp(item: TabOption, e: KeyboardEvent) {\n if (e.key === 'Enter') {\n onChange(item, e);\n }\n }\n function handleEdit(type: 'remove' | 'add', item: TabOption | undefined, e: Event) {\n e.stopPropagation();\n e.preventDefault();\n if (isFunction(props.onEdit)) {\n props.onEdit(type, item, e);\n }\n }\n function handleWheel(e?: WheelEvent) {\n if (wrapRef) {\n const pwid = box!.offsetWidth;\n const addWid = add?.offsetWidth || 0;\n const scrollWidth = wrapRef.scrollWidth;\n\n if (scrollWidth > pwid - addWid) {\n let deltaY = 0;\n\n if (e) {\n if (!passiveSupported) {\n e.stopPropagation();\n e.preventDefault();\n }\n deltaY = e.deltaX !== 0 ? e.deltaX : e.deltaY;\n }\n const nl = wrapRef.scrollLeft + deltaY;\n\n wrapRef.scrollTo({\n left: nl,\n });\n setWrap({\n left: nl > 0,\n right: scrollWidth > nl + wrapRef.offsetWidth,\n });\n } else {\n setWrap({\n left: false,\n right: false,\n });\n }\n const el = untrack(current)?.ref;\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef!.scrollLeft + wrapRef.offsetLeft\n }px;--s:${wrapRef!.scrollLeft}px}`,\n );\n }\n }\n createEffect(() => {\n let _val = untrack(value);\n\n if (props.value !== void 0) {\n _val = props.value;\n } else if (props.defaultValue !== void 0) {\n _val = props.defaultValue;\n } else if (items()[0]) {\n _val = items()[0][fieldNames().value];\n }\n if (_val !== untrack(value)) {\n setValue(_val);\n }\n });\n\n createEffect(() => {\n let timer: NodeJS.Timeout | undefined, whellTimer: NodeJS.Timeout | undefined;\n const el = current()?.ref;\n\n if (el) {\n timer = setTimeout(() => {\n clearTimeout(timer);\n if (wrapRef) {\n setWrap({\n left: false,\n right: false,\n });\n wrapRef.scrollTo({\n left: el.offsetLeft - wrapRef.offsetLeft,\n behavior: 'smooth',\n });\n }\n\n setOffsetStyle(\n `.tabs {--w: ${el.offsetWidth}px;--left: ${\n el.offsetLeft - wrapRef!.scrollLeft + wrapRef!.offsetLeft\n }px;--s:${wrapRef!.scrollLeft}px}`,\n );\n whellTimer = setTimeout(() => {\n clearTimeout(whellTimer);\n handleWheel();\n }, 300);\n }, 0);\n } else {\n setOffsetStyle('');\n }\n onCleanup(() => {\n clearTimeout(timer);\n clearTimeout(whellTimer);\n });\n });\n const [ani, setAni] = createSignal('slide-in');\n\n createEffect(() => {\n setAni('slide-in');\n return current()?.content;\n });\n const left = createMemo(() =>\n isFunction(props.extra?.left) ? (props.extra!.left() as JSX.Element) : props.extra?.left,\n );\n const right = createMemo(() =>\n isFunction(props.extra?.right) ? (props.extra!.right() as JSX.Element) : props.extra?.right,\n );\n const content = createMemo(() => {\n const _content = current()?.content;\n\n return isFunction(_content) ? (_content() as JSX.Element) : _content;\n });\n\n function onAnimationEnd() {\n setAni('');\n }\n onMount(() => {\n box?.addEventListener('wheel', handleWheel, {\n passive: passiveSupported,\n });\n });\n onCleanup(() => {\n box?.removeEventListener('wheel', handleWheel, false);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {cssVar()}\n {style}\n {offsetStyle()}\n {css(props.css)}\n </style>\n <div\n ref={box}\n class={cx('tabs', props.type, props.class, props.centered && 'centered')}\n aria-disabled={props.disabled}\n >\n <Show when={left()}>{left()}</Show>\n <div\n ref={wrapRef}\n class={cx('items', wrap().left && 'warp-left', wrap().right && 'warp-right')}\n >\n <For each={items()}>\n {(item, i) => {\n const readOnly = createMemo(() => props.disabled || item.disabled);\n const { icon, value: val, label } = fieldNames();\n const isActive = createMemo(() => value() !== void 0 && item[val] === value());\n\n return (\n <n-button\n link={true}\n type={isActive() ? 'primary' : 'default'}\n class={cx('tab', isActive() && 'active', item.class)}\n tabindex={readOnly() ? -1 : 0}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={onChange.bind(null, item)}\n disabled={readOnly()}\n icon={item[icon]}\n ref={items()[i()].ref}\n css={btnCss}\n >\n {item[label]}\n <Show when={item.closable}>\n <span class=\"remove\" onClick={handleEdit.bind(null, 'remove', item)}>\n ⛌\n </span>\n </Show>\n </n-button>\n );\n }}\n </For>\n </div>\n <Show when={props.add}>\n <n-button\n ref={add}\n link={true}\n class=\"tab add\"\n css={addCss}\n onClick={handleEdit.bind(null, 'add', void 0)}\n >\n +\n </n-button>\n </Show>\n <Show when={right()}>{right()}</Show>\n </div>\n <Show when={current()?.content}>\n <div class={cx('content', ani())} onAnimationEnd={onAnimationEnd}>\n {content()}\n </div>\n </Show>\n </>\n );\n}\n\nexport type TabsElement = CustomElement<TabsProps, 'onChange' | 'onEdit'>;\n\ncustomElement<TabsProps>(\n 'n-tabs',\n {\n class: void 0,\n css: void 0,\n disabled: void 0,\n value: void 0,\n defaultValue: void 0,\n centered: void 0,\n items: [],\n type: 'line' as TabsProps['type'],\n fieldNames: void 0,\n add: void 0,\n extra: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onChange(next: string, item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [next, item, e],\n }),\n );\n },\n onEdit(type: 'add' | 'remove', item: TabOption, e: Event) {\n el.dispatchEvent(\n new CustomEvent('edit', {\n detail: [type, item, e],\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('items');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Tabs, props);\n },\n);\nexport default Tabs;\n"],"names":["Tabs","props","box","add","wrapRef","baseStyle","isDark","theme","value","setValue","createSignal","offsetStyle","setOffsetStyle","wrap","setWrap","left","right","cssVar","createMemo","css","fieldNames","Object","assign","FieldName","items","getOptions","current","find","o","onChange","item","e","disabled","next","isFunction","onKeyUp","key","handleEdit","type","stopPropagation","preventDefault","onEdit","handleWheel","pwid","offsetWidth","addWid","scrollWidth","deltaY","passiveSupported","deltaX","nl","scrollLeft","scrollTo","el","untrack","ref","offsetLeft","createEffect","_val","defaultValue","timer","whellTimer","setTimeout","clearTimeout","behavior","onCleanup","ani","setAni","content","extra","_content","onAnimationEnd","onMount","addEventListener","passive","removeEventListener","style","Show","For","i","readOnly","icon","val","label","isActive","bind","btnCss","closable","cx","class","addCss","centered","customElement","_","opt","element","mergeProps","dispatchEvent","CustomEvent","detail","removeAttribute","createComponent"],"rangeMappings":";;;;;;;;;;","mappings":"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"}
|