neko-ui 2.5.0-beta.0 → 2.5.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/avatar/group.d.ts +2 -2
- package/es/avatar/group.js +2 -2
- package/es/avatar/group.js.map +1 -1
- package/es/capture-screen/index.d.ts +1 -0
- package/es/capture-screen/index.js +1 -1
- package/es/capture-screen/index.js.map +1 -1
- package/es/checkbox/index.d.ts +1 -2
- package/es/checkbox/index.js.map +1 -1
- package/es/cron/index.d.ts +5 -0
- package/es/cron/index.js +1 -1
- package/es/cron/index.js.map +1 -1
- package/es/date-picker/index.d.ts +3 -2
- package/es/date-picker/index.js +1 -1
- package/es/date-picker/index.js.map +1 -1
- package/es/dropdown/index.d.ts +1 -0
- package/es/dropdown/index.js +1 -1
- package/es/dropdown/index.js.map +1 -1
- package/es/empty/index.d.ts +1 -0
- package/es/empty/index.js +2 -2
- package/es/empty/index.js.map +1 -1
- package/es/get-options/index.d.ts +1 -1
- package/es/get-options/index.js +1 -1
- package/es/get-options/index.js.map +1 -1
- package/es/input-number/index.d.ts +1 -2
- package/es/input-number/index.js.map +1 -1
- package/es/menu/index.d.ts +1 -2
- package/es/menu/index.js.map +1 -1
- package/es/pagination/index.d.ts +2 -0
- package/es/pagination/index.js +1 -1
- package/es/pagination/index.js.map +1 -1
- package/es/popover/index.d.ts +1 -0
- package/es/popover/index.js +2 -2
- package/es/popover/index.js.map +1 -1
- package/es/radio/index.d.ts +1 -2
- package/es/radio/index.js.map +1 -1
- package/es/segmented/index.d.ts +2 -2
- package/es/segmented/index.js +2 -2
- package/es/segmented/index.js.map +1 -1
- package/es/select/index.d.ts +2 -2
- package/es/select/index.js +1 -1
- package/es/select/index.js.map +1 -1
- package/es/table/index.d.ts +1 -0
- package/es/table/index.js +1 -1
- package/es/table/index.js.map +1 -1
- package/es/tabs/index.d.ts +1 -0
- package/es/tabs/index.js +1 -1
- package/es/tabs/index.js.map +1 -1
- package/lib/avatar/group.d.ts +2 -2
- package/lib/avatar/group.js +1 -1
- package/lib/avatar/group.js.map +1 -1
- package/lib/capture-screen/index.d.ts +1 -0
- package/lib/capture-screen/index.js +7 -7
- package/lib/capture-screen/index.js.map +1 -1
- package/lib/checkbox/index.d.ts +1 -2
- package/lib/checkbox/index.js.map +1 -1
- package/lib/cron/index.d.ts +5 -0
- package/lib/cron/index.js +1 -1
- package/lib/cron/index.js.map +1 -1
- package/lib/date-picker/index.d.ts +3 -2
- package/lib/date-picker/index.js +1 -1
- package/lib/date-picker/index.js.map +1 -1
- package/lib/dropdown/index.d.ts +1 -0
- package/lib/dropdown/index.js +1 -1
- package/lib/dropdown/index.js.map +1 -1
- package/lib/empty/index.d.ts +1 -0
- package/lib/empty/index.js +2 -2
- package/lib/empty/index.js.map +1 -1
- package/lib/get-options/index.d.ts +1 -1
- package/lib/get-options/index.js +1 -1
- package/lib/get-options/index.js.map +1 -1
- package/lib/input-number/index.d.ts +1 -2
- package/lib/input-number/index.js.map +1 -1
- package/lib/menu/index.d.ts +1 -2
- package/lib/menu/index.js.map +1 -1
- package/lib/pagination/index.d.ts +2 -0
- package/lib/pagination/index.js +1 -1
- package/lib/pagination/index.js.map +1 -1
- package/lib/popover/index.d.ts +1 -0
- package/lib/popover/index.js +2 -2
- package/lib/popover/index.js.map +1 -1
- package/lib/radio/index.d.ts +1 -2
- package/lib/radio/index.js.map +1 -1
- package/lib/segmented/index.d.ts +2 -2
- package/lib/segmented/index.js +3 -3
- package/lib/segmented/index.js.map +1 -1
- package/lib/select/index.d.ts +2 -2
- package/lib/select/index.js +1 -1
- package/lib/select/index.js.map +1 -1
- package/lib/table/index.d.ts +1 -0
- package/lib/table/index.js +1 -1
- package/lib/table/index.js.map +1 -1
- package/lib/tabs/index.d.ts +1 -0
- package/lib/tabs/index.js +1 -1
- package/lib/tabs/index.js.map +1 -1
- package/package.json +10 -10
- package/umd/index.js +1 -1
package/es/avatar/group.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type JSX } from 'solid-js';
|
|
2
|
+
import '../avatar';
|
|
2
3
|
import '../popover';
|
|
3
|
-
import type { BasicConfig, CustomElement } from '..';
|
|
4
|
-
import type { AvatarProps } from '../avatar';
|
|
4
|
+
import type { AvatarProps, BasicConfig, CustomElement } from '..';
|
|
5
5
|
export interface AvatarGroupProps extends Omit<JSX.ButtonHTMLAttributes<HTMLDivElement>, 'onChange' | 'ref'> {
|
|
6
6
|
/** 头像数据 */
|
|
7
7
|
data?: Omit<AvatarProps, 'size'>[];
|
package/es/avatar/group.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{template as e}from"solid-js/web";import{spread as r}from"solid-js/web";import{mergeProps as t}from"solid-js/web";import{insert as n}from"solid-js/web";import{getOwner as i}from"solid-js/web";import{effect as
|
|
1
|
+
import{template as e}from"solid-js/web";import{spread as r}from"solid-js/web";import{mergeProps as t}from"solid-js/web";import{insert as n}from"solid-js/web";import{getOwner as i}from"solid-js/web";import{effect as a}from"solid-js/web";import{createComponent as o}from"solid-js/web";let s=/*#__PURE__*/e("<style>"),l=/*#__PURE__*/e('<n-popover trigger="click"><n-avatar>',!0,!1),p=/*#__PURE__*/e("<div>"),m=/*#__PURE__*/e("<n-avatar>",!0,!1),d=/*#__PURE__*/e('<div class="more">');import{For as u,Show as v,createMemo as c,mergeProps as g,splitProps as f}from"solid-js";import{css as w,cx as x}from"@moneko/css";import{customElement as h}from"solid-element";import"../avatar";import"../popover";let $=w`
|
|
2
2
|
.group {
|
|
3
3
|
display: inline-flex;
|
|
4
4
|
align-items: center;
|
|
@@ -38,5 +38,5 @@ import{template as e}from"solid-js/web";import{spread as r}from"solid-js/web";im
|
|
|
38
38
|
display: flex;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
`,_={data:[],size:void 0,class:void 0,maxCount:void 0,css:void 0};function b(e){let h=g(_,e),[b,j]=f(h,["data","maxCount","class","size","css"]),y=c(()=>b.data||[]),C=c(()=>y().slice(0,b.maxCount)),k=c(()=>{let e=y(),r=e.length-(b.maxCount||e.length);return r>0?e.slice(-r):[]});return[(()=>{let e=s();return n(e,$,null),n(e,()=>w(b.css),null),e})(),(()=>{let e=p();return r(e,t(j,{get class(){return x("group",b.class)}}),!1,!0),n(e,
|
|
41
|
+
`,_={data:[],size:void 0,class:void 0,maxCount:void 0,css:void 0};function b(e){let h=g(_,e),[b,j]=f(h,["data","maxCount","class","size","css"]),y=c(()=>b.data||[]),C=c(()=>y().slice(0,b.maxCount)),k=c(()=>{let e=y(),r=e.length-(b.maxCount||e.length);return r>0?e.slice(-r):[]});return[(()=>{let e=s();return n(e,$,null),n(e,()=>w(b.css),null),e})(),(()=>{let e=p();return r(e,t(j,{get class(){return x("group",b.class)}}),!1,!0),n(e,o(u,{get each(){return C()},children:e=>(()=>{let n=m();return r(n,t(e,{get size(){return b.size}}),!1,!1),n._$owner=i(),n})()}),null),n(e,o(v,{get when(){return k().length},get children(){let e=l(),s=e.firstChild;return e.arrow=!0,e.popupCss=z,e.content=(()=>{let e=d();return n(e,o(u,{get each(){return k()},children:e=>(()=>{let n=m();return r(n,t(e,{get size(){return b.size}}),!1,!1),n._$owner=i(),n})()})),e})(),e._$owner=i(),s._$owner=i(),a(e=>{let r=b.size,t=`+${k().length}`;return r!==e._v$&&(s.size=e._v$=r),t!==e._v$2&&(s.username=e._v$2=t),e},{_v$:void 0,_v$2:void 0}),e}}),null),e})()]}h("n-avatar-group",_,b);export default b;
|
|
42
42
|
//# sourceMappingURL=group.js.map
|
package/es/avatar/group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/avatar/group.tsx"],"sourcesContent":["import { For, type JSX, Show, createMemo, mergeProps, splitProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport '../popover';\nimport type { BasicConfig, CustomElement } from '..';\
|
|
1
|
+
{"version":3,"sources":["../../components/avatar/group.tsx"],"sourcesContent":["import { For, type JSX, Show, createMemo, mergeProps, splitProps } from 'solid-js';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport '../avatar';\nimport '../popover';\nimport type { AvatarProps, BasicConfig, CustomElement } from '..';\n\nconst style = css`\n .group {\n display: inline-flex;\n align-items: center;\n\n & > n-avatar {\n display: flex;\n }\n\n & > n-avatar:not(:first-child),\n & > n-popover {\n margin-inline-start: -4%;\n transition: margin-inline-start var(--transition-duration);\n\n &:hover:not(n-popover) {\n margin-inline-start: 4px;\n\n &:has(+ n-avatar),\n &:has(+ n-popover) {\n margin-inline-end: calc(4% + 4px);\n }\n }\n }\n }\n`;\n\nconst moreCss = css`\n .more {\n display: flex;\n justify-content: center;\n align-items: center;\n overflow-y: auto;\n padding: 8px;\n max-inline-size: 60vi;\n max-block-size: 80vb;\n gap: 8px;\n flex-wrap: wrap;\n\n & > n-avatar {\n display: flex;\n }\n }\n`;\n\nexport interface AvatarGroupProps\n extends Omit<JSX.ButtonHTMLAttributes<HTMLDivElement>, 'onChange' | 'ref'> {\n /** 头像数据 */\n data?: Omit<AvatarProps, 'size'>[];\n /** 头像尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n /** 最多显示个数 */\n maxCount?: number;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n}\nexport type AvatarGroupElement = CustomElement<AvatarGroupProps>;\n\nconst defaultProps: AvatarGroupProps = {\n data: [],\n size: void 0,\n class: void 0,\n maxCount: void 0,\n css: void 0,\n};\n\nfunction AvatarGroup(_props: AvatarGroupProps) {\n const props = mergeProps(defaultProps, _props);\n const [local, other] = splitProps(props, ['data', 'maxCount', 'class', 'size', 'css']);\n const data = createMemo(() => local.data || []);\n const showAvatar = createMemo(() => data().slice(0, local.maxCount));\n const more = createMemo(() => {\n const _data = data();\n const len = _data.length - (local.maxCount || _data.length);\n\n if (len > 0) {\n return _data.slice(-len);\n }\n return [];\n });\n\n return (\n <>\n <style>\n {style}\n {css(local.css)}\n </style>\n <div {...other} class={cx('group', local.class)}>\n <For each={showAvatar()}>{(a) => <n-avatar {...a} size={local.size} />}</For>\n <Show when={more().length}>\n <n-popover\n arrow={true}\n trigger=\"click\"\n popup-css={moreCss}\n content={\n <div class=\"more\">\n <For each={more()}>{(a) => <n-avatar {...a} size={local.size} />}</For>\n </div>\n }\n >\n <n-avatar size={local.size} username={`+${more().length}`} />\n </n-popover>\n </Show>\n </div>\n </>\n );\n}\n\ncustomElement<AvatarGroupProps>('n-avatar-group', defaultProps, AvatarGroup);\n\nexport default AvatarGroup;\n"],"names":["For","Show","createMemo","mergeProps","splitProps","css","cx","customElement","style","moreCss","defaultProps","data","size","class","maxCount","AvatarGroup","_props","props","local","other","showAvatar","slice","more","_data","len","length","a"],"mappings":"geAAA,QAASA,OAAAA,CAAG,CAAYC,QAAAA,CAAI,CAAEC,cAAAA,CAAU,CAAEC,cAAAA,CAAU,CAAEC,cAAAA,CAAU,KAAQ,UAAW,AACnF,QAASC,OAAAA,CAAG,CAAEC,MAAAA,CAAE,KAAQ,aAAc,AACtC,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,OAAO,WAAY,AACnB,OAAO,YAAa,CAGpB,IAAMC,EAAQH,CAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AAwBlB,CAAC,CAEKI,EAAUJ,CAAG,CAAC;;;;;;;;;;;;;;;;AAgBpB,CAAC,CAmBKK,EAAiC,CACrCC,KAAM,EAAE,CACRC,KAAM,KAAK,EACXC,MAAO,KAAK,EACZC,SAAU,KAAK,EACfT,IAAK,KAAK,CACZ,EAEA,SAASU,EAAYC,CAAwB,EAC3C,IAAMC,EAAQd,EAAWO,EAAcM,GACjC,CAACE,EAAOC,EAAM,CAAGf,EAAWa,EAAO,CAAC,OAAQ,WAAY,QAAS,OAAQ,MAAM,EAC/EN,EAAOT,EAAW,IAAMgB,EAAMP,IAAI,EAAI,EAAE,EACxCS,EAAalB,EAAW,IAAMS,IAAOU,KAAK,CAAC,EAAGH,EAAMJ,QAAQ,GAC5DQ,EAAOpB,EAAW,KACtB,IAAMqB,EAAQZ,IACRa,EAAMD,EAAME,MAAM,CAAIP,CAAAA,EAAMJ,QAAQ,EAAIS,EAAME,MAAM,AAAD,SAEzD,AAAID,EAAM,EACDD,EAAMF,KAAK,CAAC,CAACG,GAEf,EAAE,AACX,GAEA,kCAGOhB,gBACAH,EAAIa,EAAMb,GAAG,2CAEPc,sBAAcb,EAAG,QAASY,EAAML,KAAK,kBAC3Cb,qBAAUoB,cAAe,AAACM,gCAAoBA,qBAASR,EAAMN,IAAI,6CACjEX,qBAAWqB,IAAOG,MAAM,yDAEd,CAAA,aAEIhB,yCAGNT,qBAAUsB,cAAS,AAACI,gCAAoBA,qBAASR,EAAMN,IAAI,gFAIhDM,EAAMN,IAAI,GAAY,CAAC,CAAC,EAAEU,IAAOG,MAAM,CAAC,CAAC,oHAMrE,CAEAlB,EAAgC,iBAAkBG,EAAcK,EAEhE,gBAAeA,CAAY"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as e}from"@swc/helpers/_/_async_to_generator";import{_ as r}from"@swc/helpers/_/_extends";import{use as t}from"solid-js/web";import{template as o}from"solid-js/web";import{spread as n}from"solid-js/web";import{mergeProps as a}from"solid-js/web";import{memo as i}from"solid-js/web";import{insert as l}from"solid-js/web";import{getOwner as s}from"solid-js/web";import{effect as c}from"solid-js/web";import{delegateEvents as d}from"solid-js/web";import{createComponent as p}from"solid-js/web";import{className as u}from"solid-js/web";import{addEventListener as v}from"solid-js/web";let m=/*#__PURE__*/o("<style>"),f=/*#__PURE__*/o('<n-button class="btn">',!0,!1),w=/*#__PURE__*/o('<n-button type="error" class="btn">',!0,!1),R=/*#__PURE__*/o('<div class="record"><n-button class="btn"><span>',!0,!1),b=/*#__PURE__*/o('<div class="view"><span></span><video autoplay>'),h=/*#__PURE__*/o('<div><div class="controller"><n-button class="btn">',!0,!1);import{Show as C,createComponent as S,createEffect as E,createMemo as g,createSignal as x,mergeProps as T,onCleanup as _,splitProps as j,untrack as y}from"solid-js";import k from"@moneko/common/lib/downloadBlob";import $ from"@moneko/common/lib/isFunction";import{css as D,cx as A}from"@moneko/css";import{customElement as O}from"solid-element";import{style as B}from"./style";import L from"../theme";let M={video:!0,audio:{echoCancellation:!0,noiseSuppression:!0,sampleRate:44100}},F={inactive:"primary",paused:"warning",recording:"success"};function I(o){let d;let{baseStyle:S}=L,O=T({options:M,captureScreenText:"捕获屏幕",stopCaptureText:"停止捕获",startRecorderText:"开始录制",stopRecorderText:"停止录制",pausedRecorderText:"暂停录制",recorderingText:"录制中",onErrorRecorder:null},o),[I,N]=j(O,["options","preview","controls","recorder","filename","captureScreenText","stopCaptureText","startRecorderText","stopRecorderText","pausedRecorderText","recorderingText","onErrorRecorder","onStopRecorder","onStartRecorder","onStopCapture","onStartCapture","onRecorderDataAvailable","onErrorCapture","onSaveRecorder","class","css","ref","children"]),P=[],[q,z]=x(null),[G,H]=x(null),[J,K]=x("inactive");// 开始录制
|
|
1
|
+
import{_ as e}from"@swc/helpers/_/_async_to_generator";import{_ as r}from"@swc/helpers/_/_extends";import{use as t}from"solid-js/web";import{template as o}from"solid-js/web";import{spread as n}from"solid-js/web";import{mergeProps as a}from"solid-js/web";import{memo as i}from"solid-js/web";import{insert as l}from"solid-js/web";import{getOwner as s}from"solid-js/web";import{effect as c}from"solid-js/web";import{delegateEvents as d}from"solid-js/web";import{createComponent as p}from"solid-js/web";import{className as u}from"solid-js/web";import{addEventListener as v}from"solid-js/web";let m=/*#__PURE__*/o("<style>"),f=/*#__PURE__*/o('<n-button class="btn">',!0,!1),w=/*#__PURE__*/o('<n-button type="error" class="btn">',!0,!1),R=/*#__PURE__*/o('<div class="record"><n-button class="btn"><span>',!0,!1),b=/*#__PURE__*/o('<div class="view"><span></span><video autoplay>'),h=/*#__PURE__*/o('<div><div class="controller"><n-button class="btn">',!0,!1);import{Show as C,createComponent as S,createEffect as E,createMemo as g,createSignal as x,mergeProps as T,onCleanup as _,splitProps as j,untrack as y}from"solid-js";import k from"@moneko/common/lib/downloadBlob";import $ from"@moneko/common/lib/isFunction";import{css as D,cx as A}from"@moneko/css";import{customElement as O}from"solid-element";import{style as B}from"./style";import"../button";import L from"../theme";let M={video:!0,audio:{echoCancellation:!0,noiseSuppression:!0,sampleRate:44100}},F={inactive:"primary",paused:"warning",recording:"success"};function I(o){let d;let{baseStyle:S}=L,O=T({options:M,captureScreenText:"捕获屏幕",stopCaptureText:"停止捕获",startRecorderText:"开始录制",stopRecorderText:"停止录制",pausedRecorderText:"暂停录制",recorderingText:"录制中",onErrorRecorder:null},o),[I,N]=j(O,["options","preview","controls","recorder","filename","captureScreenText","stopCaptureText","startRecorderText","stopRecorderText","pausedRecorderText","recorderingText","onErrorRecorder","onStopRecorder","onStartRecorder","onStopCapture","onStartCapture","onRecorderDataAvailable","onErrorCapture","onSaveRecorder","class","css","ref","children"]),P=[],[q,z]=x(null),[G,H]=x(null),[J,K]=x("inactive");// 开始录制
|
|
2
2
|
function Q(){let e=y(q);if(e){switch($(I.onStartRecorder)&&I.onStartRecorder(e.state),e.state){case"inactive":e.start();break;case"paused":e.resume();break;default:e.pause()}K(e.state)}}function U(e){null==P||P.push(e.data),null==I.onRecorderDataAvailable||I.onRecorderDataAvailable.call(I,e)}// 停止录制
|
|
3
3
|
function V(){let e=y(q);e&&("inactive"!==e.state&&e.stop(),K(e.state)),null==I.onStopRecorder||I.onStopRecorder.call(I)}function W(){if(!(null==P?void 0:P.length))return;// 将录制内容保存到本地
|
|
4
4
|
let e=new Blob(P,{type:"video/webm"}),r=I.filename||new Date().toISOString(),t=`${r}.webm`;null==P||P.splice(0),I.onSaveRecorder&&I.onSaveRecorder(e,t),// 保存文件
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/capture-screen/index.tsx"],"sourcesContent":["import {\n type JSX,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { downloadBlob, isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\ndeclare interface MediaRecorderDataAvailableEvent extends Event {\n /** MediaRecorderDataAvailableEvent */\n data: Any;\n}\n\nexport interface CaptureScreenProps extends JSX.ButtonHTMLAttributes<HTMLDivElement> {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** MediaStreamConstraints */\n options?: MediaStreamConstraints;\n /** 是否预览 */\n preview?: boolean;\n /** 预览时是否显示控制器 */\n controls?: boolean;\n /** 录制时配置项 */\n recorder?: boolean;\n /** 录制文件名称 */\n filename?: string;\n /** 捕获屏幕按钮文字 */\n captureScreenText?: string;\n /** 停止捕获按钮文字 */\n stopCaptureText?: string;\n /** 开始录制按钮文字 */\n startRecorderText?: string;\n /** 停止录制按钮文字 */\n stopRecorderText?: string;\n /** 暂停录制按钮文字 */\n pausedRecorderText?: string;\n /** 录制中按钮文字 */\n recorderingText?: string;\n /** 录制错误回调方法 */\n onErrorRecorder?: (e: Event) => void;\n /** 停止录制回调方法 */\n onStopRecorder?: () => void;\n /** 开始录制回调方法 */\n onStartRecorder?: (state: MediaRecorder['state']) => void;\n /** 记录媒体时触发 */\n onRecorderDataAvailable?: (e: MediaRecorderDataAvailableEvent) => void;\n /** 捕获屏幕错误回调方法 */\n onErrorCapture?: (err: unknown) => void;\n /** 停止捕获屏幕回调方法 */\n onStopCapture?: () => void;\n /** 开始捕获屏幕回调方法 */\n onStartCapture?: (stream?: MediaStream) => void;\n /** 自定义保存录制文件方法 */\n onSaveRecorder?: (blob: Blob, fileName: string) => void;\n}\nexport type CaptureScreenElement = CustomElement<\n CaptureScreenProps,\n | 'onErrorRecorder'\n | 'onStopRecorder'\n | 'onStartRecorder'\n | 'onRecorderDataAvailable'\n | 'onErrorCapture'\n | 'onStopCapture'\n | 'onStartCapture'\n | 'onSaveRecorder'\n>;\n\nconst displayMediaOptions: MediaStreamConstraints = {\n video: true,\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n sampleRate: 44100,\n },\n};\n\nconst btnStatusDic: Record<MediaRecorder['state'], 'primary' | 'warning' | 'success'> = {\n inactive: 'primary',\n paused: 'warning',\n recording: 'success',\n};\n\nfunction CaptureScreen(_: CaptureScreenProps) {\n const { baseStyle } = theme;\n const _props = mergeProps(\n {\n options: displayMediaOptions,\n captureScreenText: '捕获屏幕',\n stopCaptureText: '停止捕获',\n startRecorderText: '开始录制',\n stopRecorderText: '停止录制',\n pausedRecorderText: '暂停录制',\n recorderingText: '录制中',\n onErrorRecorder: null,\n },\n _,\n );\n const [local, props] = splitProps(_props, [\n 'options',\n 'preview',\n 'controls',\n 'recorder',\n 'filename',\n 'captureScreenText',\n 'stopCaptureText',\n 'startRecorderText',\n 'stopRecorderText',\n 'pausedRecorderText',\n 'recorderingText',\n 'onErrorRecorder',\n 'onStopRecorder',\n 'onStartRecorder',\n 'onStopCapture',\n 'onStartCapture',\n 'onRecorderDataAvailable',\n 'onErrorCapture',\n 'onSaveRecorder',\n 'class',\n 'css',\n 'ref',\n 'children',\n ]);\n let videoElem: HTMLVideoElement | undefined;\n const chunks: Blob[] = [];\n const [mediaRecorder, setMediaRecorder] = createSignal<MediaRecorder | null>(null);\n const [mediaStream, setMediaStream] = createSignal<MediaStream | null>(null);\n const [recordState, setRecordState] = createSignal<MediaRecorder['state']>('inactive');\n\n // 开始录制\n function handleStartRecorder() {\n const mr = untrack(mediaRecorder);\n\n if (mr) {\n if (isFunction(local.onStartRecorder)) {\n local.onStartRecorder(mr.state);\n }\n switch (mr.state) {\n case 'inactive': // 不活跃\n mr.start();\n break;\n case 'paused': // 暂停\n mr.resume();\n break;\n case 'recording': // 录制中\n default:\n mr.pause();\n break;\n }\n setRecordState(mr.state);\n }\n }\n function handleRecorderDataAvailable(e: MediaRecorderDataAvailableEvent) {\n chunks?.push(e.data as Blob);\n local.onRecorderDataAvailable?.(e);\n }\n // 停止录制\n function stopRecorder() {\n const mr = untrack(mediaRecorder);\n\n // 未录制时不需要停止\n if (mr) {\n if (mr.state !== 'inactive') {\n mr.stop();\n }\n setRecordState(mr.state);\n }\n local.onStopRecorder?.();\n }\n function handleSaveRecorder() {\n if (!chunks?.length) return;\n // 将录制内容保存到本地\n const blob: Blob = new Blob(chunks, {\n type: 'video/webm',\n });\n const name = local.filename || new Date().toISOString();\n const fileName = `${name}.webm`;\n\n chunks?.splice(0);\n if (local.onSaveRecorder) {\n local.onSaveRecorder(blob, fileName);\n }\n // 保存文件\n downloadBlob(blob, fileName);\n }\n\n // 停止捕获屏幕\n function stopCapture() {\n // 如果在录制则先停止\n stopRecorder();\n const ms = untrack(mediaStream);\n\n if (ms) {\n const tracks = ms.getTracks();\n\n tracks?.forEach((track: MediaStreamTrack) => track.stop());\n setMediaStream(null);\n }\n local.onStopCapture?.();\n }\n\n // 开始捕获屏幕\n async function startCapture() {\n stopCapture();\n try {\n const stream = await navigator.mediaDevices.getDisplayMedia({\n ...displayMediaOptions,\n ...local.options,\n });\n\n if (stream) {\n // 监听停止捕获屏幕\n stream.addEventListener('inactive', stopCapture, false);\n setMediaStream(stream);\n }\n local.onStartCapture?.(stream);\n } catch (err) {\n local.onErrorCapture?.(err);\n }\n }\n\n createEffect(() => {\n const ms = mediaStream();\n\n if (local.preview && videoElem && ms) {\n videoElem.srcObject = ms;\n }\n });\n\n createEffect(() => {\n const ms = mediaStream();\n\n if (ms?.active) {\n const recorderInstance = new MediaRecorder(ms);\n\n recorderInstance.onstop = handleSaveRecorder;\n recorderInstance.onerror = local.onErrorRecorder;\n // 每次timeslice记录毫秒级媒体时(或未记录整个媒体时,如果timeslice未指定)定期触发\n recorderInstance.ondataavailable = handleRecorderDataAvailable;\n setMediaRecorder(recorderInstance);\n } else {\n setMediaRecorder(null);\n }\n });\n\n onCleanup(() => {\n const mr = untrack(mediaRecorder);\n\n // 未录制时不需要停止\n if (mr && mr?.state !== 'inactive') {\n mr.stop();\n }\n const ms = untrack(mediaStream);\n\n if (ms) {\n const tracks = ms.getTracks();\n\n tracks.forEach((track: MediaStreamTrack) => track.stop());\n }\n });\n const recorderText = createMemo(() => {\n return {\n paused: local.pausedRecorderText,\n recording: local.recorderingText,\n inactive: local.startRecorderText,\n }[recordState()];\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(local.css)}\n </style>\n <div class={cx('capture-screen', local.class)} {...props}>\n <div class=\"controller\">\n <n-button onClick={startCapture} class=\"btn\">\n {local.captureScreenText}\n </n-button>\n <Show when={mediaStream()}>\n <>\n <n-button danger={true} onClick={stopCapture} class=\"btn\">\n {local.stopCaptureText}\n </n-button>\n <Show when={local.recorder}>\n <div class=\"record\">\n <n-button\n type={btnStatusDic[recordState()]}\n onClick={handleStartRecorder}\n class=\"btn\"\n >\n <span>{recorderText()}</span>\n </n-button>\n <Show when={recordState() !== 'inactive'}>\n <n-button type=\"error\" onClick={stopRecorder} class=\"btn\">\n {local.stopRecorderText}\n </n-button>\n </Show>\n </div>\n </Show>\n </>\n </Show>\n </div>\n <Show when={local.preview && mediaStream()}>\n <div class=\"view\">\n <span\n class={cx(\n recordState() === 'recording' && 'recording',\n recordState() === 'paused' && 'paused',\n )}\n />\n <video ref={videoElem} autoplay controls={local.controls && mediaStream() !== null} />\n </div>\n </Show>\n </div>\n </>\n );\n}\n\ncustomElement<CaptureScreenProps>(\n 'n-capture-screen',\n {\n class: void 0,\n css: void 0,\n options: void 0,\n preview: void 0,\n controls: void 0,\n recorder: void 0,\n filename: void 0,\n captureScreenText: void 0,\n stopCaptureText: void 0,\n startRecorderText: void 0,\n stopRecorderText: void 0,\n pausedRecorderText: void 0,\n recorderingText: void 0,\n onErrorRecorder: void 0,\n onStopRecorder: void 0,\n onStartRecorder: void 0,\n onRecorderDataAvailable: void 0,\n onErrorCapture: void 0,\n onStopCapture: void 0,\n onStartCapture: void 0,\n onSaveRecorder: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onErrorRecorder(e: Event) {\n el.dispatchEvent(\n new CustomEvent('errorrecorder', {\n detail: e,\n }),\n );\n },\n onStopRecorder() {\n el.dispatchEvent(\n new CustomEvent('stoprecorder', {\n detail: null,\n }),\n );\n },\n onStartRecorder(state: MediaRecorder['state']) {\n el.dispatchEvent(\n new CustomEvent('startrecorder', {\n detail: state,\n }),\n );\n },\n onRecorderDataAvailable(e: MediaRecorderDataAvailableEvent) {\n el.dispatchEvent(\n new CustomEvent('recorderdataavailable', {\n detail: e,\n }),\n );\n },\n onErrorCapture(e: unknown) {\n el.dispatchEvent(\n new CustomEvent('errorcapture', {\n detail: e,\n }),\n );\n },\n onStopCapture() {\n el.dispatchEvent(\n new CustomEvent('stopcapture', {\n detail: null,\n }),\n );\n },\n onStartCapture(stream?: MediaStream) {\n el.dispatchEvent(\n new CustomEvent('startcapture', {\n detail: stream,\n }),\n );\n },\n onSaveRecorder(blob: Blob, fileName: string) {\n el.dispatchEvent(\n new CustomEvent('saverecorder', {\n detail: [blob, fileName],\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(CaptureScreen, props);\n },\n);\n\nexport default CaptureScreen;\n"],"names":["Show","createComponent","createEffect","createMemo","createSignal","mergeProps","onCleanup","splitProps","untrack","downloadBlob","isFunction","css","cx","customElement","style","theme","displayMediaOptions","video","audio","echoCancellation","noiseSuppression","sampleRate","btnStatusDic","inactive","paused","recording","CaptureScreen","_","videoElem","baseStyle","_props","options","captureScreenText","stopCaptureText","startRecorderText","stopRecorderText","pausedRecorderText","recorderingText","onErrorRecorder","local","props","chunks","mediaRecorder","setMediaRecorder","mediaStream","setMediaStream","recordState","setRecordState","handleStartRecorder","mr","onStartRecorder","state","start","resume","pause","handleRecorderDataAvailable","e","push","data","onRecorderDataAvailable","stopRecorder","stop","onStopRecorder","handleSaveRecorder","length","blob","Blob","type","name","filename","Date","toISOString","fileName","splice","onSaveRecorder","stopCapture","ms","tracks","getTracks","forEach","track","onStopCapture","startCapture","stream","navigator","mediaDevices","getDisplayMedia","addEventListener","onStartCapture","err","onErrorCapture","preview","srcObject","active","recorderInstance","MediaRecorder","onstop","onerror","ondataavailable","recorderText","class","recorder","controls","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/capture-screen/index.tsx"],"sourcesContent":["import {\n type JSX,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { downloadBlob, isFunction } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport '../button';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\ndeclare interface MediaRecorderDataAvailableEvent extends Event {\n /** MediaRecorderDataAvailableEvent */\n data: Any;\n}\n\nexport interface CaptureScreenProps extends JSX.ButtonHTMLAttributes<HTMLDivElement> {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** MediaStreamConstraints */\n options?: MediaStreamConstraints;\n /** 是否预览 */\n preview?: boolean;\n /** 预览时是否显示控制器 */\n controls?: boolean;\n /** 录制时配置项 */\n recorder?: boolean;\n /** 录制文件名称 */\n filename?: string;\n /** 捕获屏幕按钮文字 */\n captureScreenText?: string;\n /** 停止捕获按钮文字 */\n stopCaptureText?: string;\n /** 开始录制按钮文字 */\n startRecorderText?: string;\n /** 停止录制按钮文字 */\n stopRecorderText?: string;\n /** 暂停录制按钮文字 */\n pausedRecorderText?: string;\n /** 录制中按钮文字 */\n recorderingText?: string;\n /** 录制错误回调方法 */\n onErrorRecorder?: (e: Event) => void;\n /** 停止录制回调方法 */\n onStopRecorder?: () => void;\n /** 开始录制回调方法 */\n onStartRecorder?: (state: MediaRecorder['state']) => void;\n /** 记录媒体时触发 */\n onRecorderDataAvailable?: (e: MediaRecorderDataAvailableEvent) => void;\n /** 捕获屏幕错误回调方法 */\n onErrorCapture?: (err: unknown) => void;\n /** 停止捕获屏幕回调方法 */\n onStopCapture?: () => void;\n /** 开始捕获屏幕回调方法 */\n onStartCapture?: (stream?: MediaStream) => void;\n /** 自定义保存录制文件方法 */\n onSaveRecorder?: (blob: Blob, fileName: string) => void;\n}\nexport type CaptureScreenElement = CustomElement<\n CaptureScreenProps,\n | 'onErrorRecorder'\n | 'onStopRecorder'\n | 'onStartRecorder'\n | 'onRecorderDataAvailable'\n | 'onErrorCapture'\n | 'onStopCapture'\n | 'onStartCapture'\n | 'onSaveRecorder'\n>;\n\nconst displayMediaOptions: MediaStreamConstraints = {\n video: true,\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n sampleRate: 44100,\n },\n};\n\nconst btnStatusDic: Record<MediaRecorder['state'], 'primary' | 'warning' | 'success'> = {\n inactive: 'primary',\n paused: 'warning',\n recording: 'success',\n};\n\nfunction CaptureScreen(_: CaptureScreenProps) {\n const { baseStyle } = theme;\n const _props = mergeProps(\n {\n options: displayMediaOptions,\n captureScreenText: '捕获屏幕',\n stopCaptureText: '停止捕获',\n startRecorderText: '开始录制',\n stopRecorderText: '停止录制',\n pausedRecorderText: '暂停录制',\n recorderingText: '录制中',\n onErrorRecorder: null,\n },\n _,\n );\n const [local, props] = splitProps(_props, [\n 'options',\n 'preview',\n 'controls',\n 'recorder',\n 'filename',\n 'captureScreenText',\n 'stopCaptureText',\n 'startRecorderText',\n 'stopRecorderText',\n 'pausedRecorderText',\n 'recorderingText',\n 'onErrorRecorder',\n 'onStopRecorder',\n 'onStartRecorder',\n 'onStopCapture',\n 'onStartCapture',\n 'onRecorderDataAvailable',\n 'onErrorCapture',\n 'onSaveRecorder',\n 'class',\n 'css',\n 'ref',\n 'children',\n ]);\n let videoElem: HTMLVideoElement | undefined;\n const chunks: Blob[] = [];\n const [mediaRecorder, setMediaRecorder] = createSignal<MediaRecorder | null>(null);\n const [mediaStream, setMediaStream] = createSignal<MediaStream | null>(null);\n const [recordState, setRecordState] = createSignal<MediaRecorder['state']>('inactive');\n\n // 开始录制\n function handleStartRecorder() {\n const mr = untrack(mediaRecorder);\n\n if (mr) {\n if (isFunction(local.onStartRecorder)) {\n local.onStartRecorder(mr.state);\n }\n switch (mr.state) {\n case 'inactive': // 不活跃\n mr.start();\n break;\n case 'paused': // 暂停\n mr.resume();\n break;\n case 'recording': // 录制中\n default:\n mr.pause();\n break;\n }\n setRecordState(mr.state);\n }\n }\n function handleRecorderDataAvailable(e: MediaRecorderDataAvailableEvent) {\n chunks?.push(e.data as Blob);\n local.onRecorderDataAvailable?.(e);\n }\n // 停止录制\n function stopRecorder() {\n const mr = untrack(mediaRecorder);\n\n // 未录制时不需要停止\n if (mr) {\n if (mr.state !== 'inactive') {\n mr.stop();\n }\n setRecordState(mr.state);\n }\n local.onStopRecorder?.();\n }\n function handleSaveRecorder() {\n if (!chunks?.length) return;\n // 将录制内容保存到本地\n const blob: Blob = new Blob(chunks, {\n type: 'video/webm',\n });\n const name = local.filename || new Date().toISOString();\n const fileName = `${name}.webm`;\n\n chunks?.splice(0);\n if (local.onSaveRecorder) {\n local.onSaveRecorder(blob, fileName);\n }\n // 保存文件\n downloadBlob(blob, fileName);\n }\n\n // 停止捕获屏幕\n function stopCapture() {\n // 如果在录制则先停止\n stopRecorder();\n const ms = untrack(mediaStream);\n\n if (ms) {\n const tracks = ms.getTracks();\n\n tracks?.forEach((track: MediaStreamTrack) => track.stop());\n setMediaStream(null);\n }\n local.onStopCapture?.();\n }\n\n // 开始捕获屏幕\n async function startCapture() {\n stopCapture();\n try {\n const stream = await navigator.mediaDevices.getDisplayMedia({\n ...displayMediaOptions,\n ...local.options,\n });\n\n if (stream) {\n // 监听停止捕获屏幕\n stream.addEventListener('inactive', stopCapture, false);\n setMediaStream(stream);\n }\n local.onStartCapture?.(stream);\n } catch (err) {\n local.onErrorCapture?.(err);\n }\n }\n\n createEffect(() => {\n const ms = mediaStream();\n\n if (local.preview && videoElem && ms) {\n videoElem.srcObject = ms;\n }\n });\n\n createEffect(() => {\n const ms = mediaStream();\n\n if (ms?.active) {\n const recorderInstance = new MediaRecorder(ms);\n\n recorderInstance.onstop = handleSaveRecorder;\n recorderInstance.onerror = local.onErrorRecorder;\n // 每次timeslice记录毫秒级媒体时(或未记录整个媒体时,如果timeslice未指定)定期触发\n recorderInstance.ondataavailable = handleRecorderDataAvailable;\n setMediaRecorder(recorderInstance);\n } else {\n setMediaRecorder(null);\n }\n });\n\n onCleanup(() => {\n const mr = untrack(mediaRecorder);\n\n // 未录制时不需要停止\n if (mr && mr?.state !== 'inactive') {\n mr.stop();\n }\n const ms = untrack(mediaStream);\n\n if (ms) {\n const tracks = ms.getTracks();\n\n tracks.forEach((track: MediaStreamTrack) => track.stop());\n }\n });\n const recorderText = createMemo(() => {\n return {\n paused: local.pausedRecorderText,\n recording: local.recorderingText,\n inactive: local.startRecorderText,\n }[recordState()];\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {css(local.css)}\n </style>\n <div class={cx('capture-screen', local.class)} {...props}>\n <div class=\"controller\">\n <n-button onClick={startCapture} class=\"btn\">\n {local.captureScreenText}\n </n-button>\n <Show when={mediaStream()}>\n <>\n <n-button danger={true} onClick={stopCapture} class=\"btn\">\n {local.stopCaptureText}\n </n-button>\n <Show when={local.recorder}>\n <div class=\"record\">\n <n-button\n type={btnStatusDic[recordState()]}\n onClick={handleStartRecorder}\n class=\"btn\"\n >\n <span>{recorderText()}</span>\n </n-button>\n <Show when={recordState() !== 'inactive'}>\n <n-button type=\"error\" onClick={stopRecorder} class=\"btn\">\n {local.stopRecorderText}\n </n-button>\n </Show>\n </div>\n </Show>\n </>\n </Show>\n </div>\n <Show when={local.preview && mediaStream()}>\n <div class=\"view\">\n <span\n class={cx(\n recordState() === 'recording' && 'recording',\n recordState() === 'paused' && 'paused',\n )}\n />\n <video ref={videoElem} autoplay controls={local.controls && mediaStream() !== null} />\n </div>\n </Show>\n </div>\n </>\n );\n}\n\ncustomElement<CaptureScreenProps>(\n 'n-capture-screen',\n {\n class: void 0,\n css: void 0,\n options: void 0,\n preview: void 0,\n controls: void 0,\n recorder: void 0,\n filename: void 0,\n captureScreenText: void 0,\n stopCaptureText: void 0,\n startRecorderText: void 0,\n stopRecorderText: void 0,\n pausedRecorderText: void 0,\n recorderingText: void 0,\n onErrorRecorder: void 0,\n onStopRecorder: void 0,\n onStartRecorder: void 0,\n onRecorderDataAvailable: void 0,\n onErrorCapture: void 0,\n onStopCapture: void 0,\n onStartCapture: void 0,\n onSaveRecorder: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n onErrorRecorder(e: Event) {\n el.dispatchEvent(\n new CustomEvent('errorrecorder', {\n detail: e,\n }),\n );\n },\n onStopRecorder() {\n el.dispatchEvent(\n new CustomEvent('stoprecorder', {\n detail: null,\n }),\n );\n },\n onStartRecorder(state: MediaRecorder['state']) {\n el.dispatchEvent(\n new CustomEvent('startrecorder', {\n detail: state,\n }),\n );\n },\n onRecorderDataAvailable(e: MediaRecorderDataAvailableEvent) {\n el.dispatchEvent(\n new CustomEvent('recorderdataavailable', {\n detail: e,\n }),\n );\n },\n onErrorCapture(e: unknown) {\n el.dispatchEvent(\n new CustomEvent('errorcapture', {\n detail: e,\n }),\n );\n },\n onStopCapture() {\n el.dispatchEvent(\n new CustomEvent('stopcapture', {\n detail: null,\n }),\n );\n },\n onStartCapture(stream?: MediaStream) {\n el.dispatchEvent(\n new CustomEvent('startcapture', {\n detail: stream,\n }),\n );\n },\n onSaveRecorder(blob: Blob, fileName: string) {\n el.dispatchEvent(\n new CustomEvent('saverecorder', {\n detail: [blob, fileName],\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(CaptureScreen, props);\n },\n);\n\nexport default CaptureScreen;\n"],"names":["Show","createComponent","createEffect","createMemo","createSignal","mergeProps","onCleanup","splitProps","untrack","downloadBlob","isFunction","css","cx","customElement","style","theme","displayMediaOptions","video","audio","echoCancellation","noiseSuppression","sampleRate","btnStatusDic","inactive","paused","recording","CaptureScreen","_","videoElem","baseStyle","_props","options","captureScreenText","stopCaptureText","startRecorderText","stopRecorderText","pausedRecorderText","recorderingText","onErrorRecorder","local","props","chunks","mediaRecorder","setMediaRecorder","mediaStream","setMediaStream","recordState","setRecordState","handleStartRecorder","mr","onStartRecorder","state","start","resume","pause","handleRecorderDataAvailable","e","push","data","onRecorderDataAvailable","stopRecorder","stop","onStopRecorder","handleSaveRecorder","length","blob","Blob","type","name","filename","Date","toISOString","fileName","splice","onSaveRecorder","stopCapture","ms","tracks","getTracks","forEach","track","onStopCapture","startCapture","stream","navigator","mediaDevices","getDisplayMedia","addEventListener","onStartCapture","err","onErrorCapture","preview","srcObject","active","recorderInstance","MediaRecorder","onstop","onerror","ondataavailable","recorderText","class","recorder","controls","opt","el","element","dispatchEvent","CustomEvent","detail"],"mappings":"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"}
|
package/es/checkbox/index.d.ts
CHANGED
package/es/checkbox/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/checkbox/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 { type BaseOption, type BasicConfig, FieldName } from '../basic-config';\nimport getOptions from '../get-options';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\n/** 通用API\n * @since 1.0.0\n */\nexport interface CheckboxBaseProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"checkbox\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 选项排列方式\n * @default 'horizontal'\n */\n layout?: 'vertical' | 'horizontal';\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n}\n/** 复选框API */\nexport interface CheckboxBoolProps extends CheckboxBaseProps {\n /** 一个 bool 值; */\n value?: boolean;\n /** 默认值 */\n defaultValue?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n checkAll?: never;\n options?: never;\n}\n/** 通过数据渲染一组复选框按钮的API */\nexport interface CheckboxGroupProps extends CheckboxBaseProps {\n /** 全选 */\n checkAll?: boolean;\n /** 值;\n * 当设置了value时, 将是受控模式;\n * 受控模式可通过 onChange 事件更新 value\n **/\n value?: (string | number)[];\n /** 默认值 */\n defaultValue?: (string | number)[];\n /** 渲染选项所使用的数据,\n * 当没有设置该值时, 将渲染一个切换 bool 值的按钮\n * */\n options?: (CheckboxOption | string)[];\n /** 值修改时的回调方法 */\n onChange?: (val: (string | number)[]) => void;\n}\n/** 复选框选项\n * @since 1.0.0\n */\nexport interface CheckboxOption extends BaseOption {\n /** 不确定状态 */\n indeterminate?: boolean;\n}\n\nfunction Checkbox(props: CheckboxBoolProps | CheckboxGroupProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n createEffect(() => {\n const _val = typeof props.value === 'undefined' ? props.defaultValue : props.value;\n let val: (string | number)[] = [];\n\n if (Array.isArray(_val)) {\n val = _val;\n } else if (typeof _val !== 'undefined') {\n val = [_val as unknown as string];\n }\n\n setValue(val);\n });\n const options = createMemo(() => {\n const fieldName = fieldNames();\n\n if (typeof props.options === 'undefined') {\n return getOptions([{ value: 1 } as CheckboxOption], fieldName);\n }\n const checkAll: CheckboxOption[] = [\n { [fieldName.value]: 'all', [fieldName.label]: '全选', indeterminate: false },\n ];\n const arr = props.checkAll ? checkAll : [];\n\n return arr.concat(getOptions(props.options || [], fieldName));\n });\n\n const all = createMemo(() => {\n const allVal: (string | number)[] = [];\n const fieldName = fieldNames();\n\n options().forEach((item) => {\n if (!('indeterminate' in item) && typeof item[fieldName.value] !== 'undefined') {\n allVal.push(item[fieldName.value]!);\n }\n });\n\n return allVal;\n });\n\n function getIndeterminate() {\n let _indeterminate = false;\n\n all().forEach((v) => {\n if (value().length && !value().includes(v)) {\n _indeterminate = true;\n }\n });\n return _indeterminate;\n }\n const checkedAll = createMemo(() => {\n let checked = true;\n const alls = all();\n\n for (let i = 0, len = alls.length; i < len; i++) {\n if (!value().includes(alls[i])) {\n checked = false;\n break;\n }\n }\n return checked;\n });\n\n function onChange(item: CheckboxOption) {\n if (!props.disabled && !item.disabled) {\n const isIndeterminate = 'indeterminate' in item;\n let newVal = isIndeterminate ? [] : [...value()];\n const val = item[fieldNames().value]!;\n\n if (isIndeterminate) {\n if (!checkedAll()) {\n newVal = all();\n }\n } else {\n const idx = newVal.indexOf(val);\n\n if (idx !== -1) {\n newVal.splice(idx, 1);\n } else {\n newVal.push(val);\n }\n }\n if (typeof props.value === 'undefined') {\n setValue(newVal);\n }\n props.onChange?.((typeof props.options === 'undefined' ? !!newVal[0] : newVal) as never);\n }\n }\n function onKeyUp(item: CheckboxOption, e: KeyboardEvent) {\n e.preventDefault();\n if (e.key === 'Enter') {\n onChange(item);\n }\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)}>\n <For each={options()}>\n {(item) => {\n const readOnly = props.disabled || item.disabled;\n const fieldName = fieldNames();\n const realVal = item[fieldName.value]!;\n\n if ('indeterminate' in item) {\n createEffect(() => {\n item.ref.indeterminate = getIndeterminate();\n });\n }\n return (\n <span\n class={cx('item', item.class, item.status)}\n aria-disabled={readOnly}\n tabindex={readOnly ? -1 : 0}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={onChange.bind(null, item)}\n >\n <input\n ref={item.ref}\n class=\"checkbox\"\n type=\"checkbox\"\n name={props.name}\n value={realVal as string}\n disabled={readOnly}\n checked={'indeterminate' in item ? checkedAll() : value().includes(realVal)}\n onChange={onChange.bind(null, item)}\n />\n <label>{item[fieldName.label]}</label>\n </span>\n );\n }}\n </For>\n </section>\n </>\n );\n}\n\nexport type CheckboxGroupElement = CustomElement<CheckboxGroupProps>;\nexport type CheckboxBoolElement = CustomElement<CheckboxBoolProps>;\n\ncustomElement<CheckboxBoolProps | CheckboxGroupProps>(\n 'n-checkbox',\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: void 0,\n onChange: void 0,\n fieldNames: void 0,\n checkAll: 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 | number)[] | boolean) {\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(Checkbox, props);\n },\n);\nexport default Checkbox;\n"],"names":["For","createComponent","createEffect","createMemo","createSignal","mergeProps","css","cx","customElement","style","FieldName","getOptions","theme","Checkbox","props","baseStyle","value","setValue","fieldNames","Object","assign","_val","defaultValue","val","Array","isArray","options","fieldName","checkAll","label","indeterminate","arr","concat","all","allVal","forEach","item","push","checkedAll","checked","alls","i","len","length","includes","onChange","disabled","isIndeterminate","newVal","idx","indexOf","splice","onKeyUp","e","preventDefault","key","readOnly","realVal","_indeterminate","ref","v","bind","class","status","name","layout","_","opt","el","element","next","dispatchEvent","CustomEvent","detail","removeAttribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/checkbox/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\n/** 通用API\n * @since 1.0.0\n */\nexport interface CheckboxBaseProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** input[type=\"checkbox\"] 的 name 属性 */\n name?: string;\n /** 只读 */\n disabled?: boolean;\n /** 选项排列方式\n * @default 'horizontal'\n */\n layout?: 'vertical' | 'horizontal';\n /** 自定义节点 'label'、'value'、'options' 的字段 */\n fieldNames?: BasicConfig['fieldName'];\n}\n/** 复选框API */\nexport interface CheckboxBoolProps extends CheckboxBaseProps {\n /** 一个 bool 值; */\n value?: boolean;\n /** 默认值 */\n defaultValue?: boolean;\n /** 值修改时的回调方法 */\n onChange?: (val: boolean) => void;\n checkAll?: never;\n options?: never;\n}\n/** 通过数据渲染一组复选框按钮的API */\nexport interface CheckboxGroupProps extends CheckboxBaseProps {\n /** 全选 */\n checkAll?: boolean;\n /** 值;\n * 当设置了value时, 将是受控模式;\n * 受控模式可通过 onChange 事件更新 value\n **/\n value?: (string | number)[];\n /** 默认值 */\n defaultValue?: (string | number)[];\n /** 渲染选项所使用的数据,\n * 当没有设置该值时, 将渲染一个切换 bool 值的按钮\n * */\n options?: (CheckboxOption | string)[];\n /** 值修改时的回调方法 */\n onChange?: (val: (string | number)[]) => void;\n}\n/** 复选框选项\n * @since 1.0.0\n */\nexport interface CheckboxOption extends BaseOption {\n /** 不确定状态 */\n indeterminate?: boolean;\n}\n\nfunction Checkbox(props: CheckboxBoolProps | CheckboxGroupProps) {\n const { baseStyle } = theme;\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const fieldNames = createMemo(() => Object.assign({}, FieldName, props.fieldNames));\n\n createEffect(() => {\n const _val = typeof props.value === 'undefined' ? props.defaultValue : props.value;\n let val: (string | number)[] = [];\n\n if (Array.isArray(_val)) {\n val = _val;\n } else if (typeof _val !== 'undefined') {\n val = [_val as unknown as string];\n }\n\n setValue(val);\n });\n const options = createMemo(() => {\n const fieldName = fieldNames();\n\n if (typeof props.options === 'undefined') {\n return getOptions([{ value: 1 } as CheckboxOption], fieldName);\n }\n const checkAll: CheckboxOption[] = [\n { [fieldName.value]: 'all', [fieldName.label]: '全选', indeterminate: false },\n ];\n const arr = props.checkAll ? checkAll : [];\n\n return arr.concat(getOptions(props.options || [], fieldName));\n });\n\n const all = createMemo(() => {\n const allVal: (string | number)[] = [];\n const fieldName = fieldNames();\n\n options().forEach((item) => {\n if (!('indeterminate' in item) && typeof item[fieldName.value] !== 'undefined') {\n allVal.push(item[fieldName.value]!);\n }\n });\n\n return allVal;\n });\n\n function getIndeterminate() {\n let _indeterminate = false;\n\n all().forEach((v) => {\n if (value().length && !value().includes(v)) {\n _indeterminate = true;\n }\n });\n return _indeterminate;\n }\n const checkedAll = createMemo(() => {\n let checked = true;\n const alls = all();\n\n for (let i = 0, len = alls.length; i < len; i++) {\n if (!value().includes(alls[i])) {\n checked = false;\n break;\n }\n }\n return checked;\n });\n\n function onChange(item: CheckboxOption) {\n if (!props.disabled && !item.disabled) {\n const isIndeterminate = 'indeterminate' in item;\n let newVal = isIndeterminate ? [] : [...value()];\n const val = item[fieldNames().value]!;\n\n if (isIndeterminate) {\n if (!checkedAll()) {\n newVal = all();\n }\n } else {\n const idx = newVal.indexOf(val);\n\n if (idx !== -1) {\n newVal.splice(idx, 1);\n } else {\n newVal.push(val);\n }\n }\n if (typeof props.value === 'undefined') {\n setValue(newVal);\n }\n props.onChange?.((typeof props.options === 'undefined' ? !!newVal[0] : newVal) as never);\n }\n }\n function onKeyUp(item: CheckboxOption, e: KeyboardEvent) {\n e.preventDefault();\n if (e.key === 'Enter') {\n onChange(item);\n }\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)}>\n <For each={options()}>\n {(item) => {\n const readOnly = props.disabled || item.disabled;\n const fieldName = fieldNames();\n const realVal = item[fieldName.value]!;\n\n if ('indeterminate' in item) {\n createEffect(() => {\n item.ref.indeterminate = getIndeterminate();\n });\n }\n return (\n <span\n class={cx('item', item.class, item.status)}\n aria-disabled={readOnly}\n tabindex={readOnly ? -1 : 0}\n onKeyUp={onKeyUp.bind(null, item)}\n onClick={onChange.bind(null, item)}\n >\n <input\n ref={item.ref}\n class=\"checkbox\"\n type=\"checkbox\"\n name={props.name}\n value={realVal as string}\n disabled={readOnly}\n checked={'indeterminate' in item ? checkedAll() : value().includes(realVal)}\n onChange={onChange.bind(null, item)}\n />\n <label>{item[fieldName.label]}</label>\n </span>\n );\n }}\n </For>\n </section>\n </>\n );\n}\n\nexport type CheckboxGroupElement = CustomElement<CheckboxGroupProps>;\nexport type CheckboxBoolElement = CustomElement<CheckboxBoolProps>;\n\ncustomElement<CheckboxBoolProps | CheckboxGroupProps>(\n 'n-checkbox',\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: void 0,\n onChange: void 0,\n fieldNames: void 0,\n checkAll: 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 | number)[] | boolean) {\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(Checkbox, props);\n },\n);\nexport default Checkbox;\n"],"names":["For","createComponent","createEffect","createMemo","createSignal","mergeProps","css","cx","customElement","style","FieldName","getOptions","theme","Checkbox","props","baseStyle","value","setValue","fieldNames","Object","assign","_val","defaultValue","val","Array","isArray","options","fieldName","checkAll","label","indeterminate","arr","concat","all","allVal","forEach","item","push","checkedAll","checked","alls","i","len","length","includes","onChange","disabled","isIndeterminate","newVal","idx","indexOf","splice","onKeyUp","e","preventDefault","key","readOnly","realVal","_indeterminate","ref","v","bind","class","status","name","layout","_","opt","el","element","next","dispatchEvent","CustomEvent","detail","removeAttribute"],"mappings":"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"}
|
package/es/cron/index.d.ts
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { type JSX } from 'solid-js';
|
|
2
|
+
import '../button';
|
|
3
|
+
import '../input-number';
|
|
4
|
+
import '../radio';
|
|
5
|
+
import '../select';
|
|
6
|
+
import '../tabs';
|
|
2
7
|
import type { CustomElement } from '..';
|
|
3
8
|
export interface CronProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange'> {
|
|
4
9
|
/** 自定义类名 */
|
package/es/cron/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as e}from"@swc/helpers/_/_extends";import{template as t}from"solid-js/web";import{insert as r}from"solid-js/web";import{getOwner as n}from"solid-js/web";import{effect as
|
|
1
|
+
import{_ as e}from"@swc/helpers/_/_extends";import{template as t}from"solid-js/web";import{insert as r}from"solid-js/web";import{getOwner as n}from"solid-js/web";import{effect as o}from"solid-js/web";import{createComponent as a}from"solid-js/web";import{addEventListener as l}from"solid-js/web";let s=/*#__PURE__*/t("<style>"),u=/*#__PURE__*/t("<n-tabs>",!0,!1),i=/*#__PURE__*/t("<code>");import{Show as m,batch as p,createComponent as d,createEffect as y,createSignal as c,mergeProps as v,splitProps as b,untrack as f}from"solid-js";import{css as g}from"@moneko/css";import{customElement as h}from"solid-element";import w from"./day";import $ from"./hour";import C from"./minute";import k from"./month";import N from"./second";import x from"./week";import E from"./year";import"../button";import"../input-number";import"../radio";import"../select";import"../tabs";function j(t){let[d]=b(t,["value","defaultValue","exclude","onChange","type","showCron","css","class"]),[v,h]=c(d.defaultValue),j=new Date,W=j.getFullYear(),D={hms:{start:0,end:1,begin:0,beginEvery:1,some:[0],value:""},mwd:{start:1,end:2,begin:1,beginEvery:1,some:[1],value:""},year:{start:W,end:W+1,begin:W,beginEvery:1,some:[W],value:""}},O=[],L=[];for(let e=1;e<32;e++)O.push({label:e<10?`0${e}`:`${e}`,value:e}),L.push(e);let[P,_]=c("second"),[V,I]=c({second:e({type:"*"},D.hms),minute:e({type:"*"},D.hms),hour:e({type:"*"},D.hms),day:e({type:"*",last:1,closeWorkDay:1},D.mwd),month:e({type:"*"},D.mwd),week:e({last:1,type:"?"},D.mwd),year:e({type:""},D.year)});function F(t,r){p(()=>{!function(){let t=f(V),r="day"===P();if(r||"week"===P()){let n=r?"week":"day",o="?"===t[n].type&&"?"===t[P()].type?"*":"?";o!==t[n].type&&I(t=>e({},t,{[n]:e({},t[n],{type:o})}))}}(),I(n=>{let o=e({},n[P()],{[t]:r});return("start"===t||"end"===t)&&o.end-o.start<=1&&("end"===t?o.start=r-1:o.end=r+1),e({},n,{[P()]:o})})})}function U(e){_(e.detail[0])}function Y(e,t){if(e.value.indexOf("-")>-1){e.type="period";let t=e.value.split("-");e.start=Number(t[0]),e.end=Number(t[1])}else if(e.value.indexOf("W")>-1)e.type="closeWorkDay",e.closeWorkDay=Number(e.value.split("W")[0])||1;else if(e.value.indexOf("L")>-1)e.type="last",e.last=Number(e.value.split("L")[0])||1;else if(e.value.indexOf(t?"#":"/")>-1){e.type="beginInterval";let r=e.value.split(t?"#":"/");t?(e.begin=Number(r[1]),e.beginEvery=Number(r[0])):(e.begin=Number(r[0]),e.beginEvery=Number(r[1]))}else e.value.indexOf(",")>-1||/^[0-9]+$/.test(e.value)?(e.type="some",e.some=e.value.split(",").map(Number)):e.type=e.value;return e}function q(e){return"number"!=typeof e||isNaN(e)?e:`${e}`}function z(e,t){switch(e.type){case"period":return`${q(e.start)}-${q(e.end)}`;case"beginInterval":if(t)return`${q(e.beginEvery)}#${q(e.begin)}`;return`${q(e.begin)}/${q(e.beginEvery)}`;case"closeWorkDay":return`${q(e.closeWorkDay||1)}W`;case"last":return t?`${q(e.last)}L`:"L";case"some":return e.some.join(",");default:return e.type}}y(()=>{void 0!==d.value&&f(v)!==d.value&&h(d.value)}),y(()=>{let t=v();if(t){let r=t.toUpperCase().split(" ");p(()=>{I(t=>({second:Y(e({},t.second,{value:r[0]||"?"})),minute:Y(e({},t.minute,{value:r[1]||"?"})),hour:Y(e({},t.hour,{value:r[2]||"?"})),day:Y(e({},t.day,{value:r[3]||""})),month:Y(e({},t.month,{value:r[4]||""})),week:Y(e({},t.week,{value:r[5]||""}),!0),year:Y(e({},t.year,{value:r[6]||""}))}))})}}),y(()=>{let{second:e,minute:r,hour:n,day:o,month:a,week:l,year:s}=V(),u=`${z(e)} ${z(r)} ${z(n)} ${z(o)} ${z(a)} ${z(l,!0)} ${z(s)}`;h(e=>e===u?e:(null==t.onChange||t.onChange.call(t,u),u))});let A=[{value:"second",label:"秒",content:a(N,{get state(){return V().second},onChange:F})},{value:"minute",label:"分钟",content:a(C,{get state(){return V().minute},onChange:F})},{value:"hour",label:"小时",content:a($,{get state(){return V().hour},onChange:F})},{value:"day",label:"日",content:a(w,{get state(){return V().day},onChange:F})},{value:"week",label:"周",content:a(x,{get state(){return V().week},onChange:F})},{value:"month",label:"月",content:a(k,{get state(){return V().month},onChange:F})},{value:"year",label:"年",content:a(E,{get state(){return V().year},onChange:F})}];return[(()=>{let e=s();return r(e,()=>g(d.css)),e})(),(()=>{let e=u();return l(e,"change",U),e.items=A,e._$owner=n(),o(()=>e.type=d.type),o(()=>e.value=P()),e})(),a(m,{get when(){return d.showCron},get children(){let e=i();return e.style.setProperty("width","100%"),e.style.setProperty("display","block"),e.style.setProperty("background","var(--component-bg)"),e.style.setProperty("border-radius","var(--border-radius)"),e.style.setProperty("text-align","center"),r(e,v),e}})]}h("n-cron",{value:void 0,defaultValue:"0 0 0 * * ? *",onChange:void 0,type:"line",exclude:[],showCron:!0},(e,t)=>{let r=t.element,n=v({onChange(e){r.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return d(j,n)});export default j;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/cron/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/cron/index.tsx"],"sourcesContent":["import {\n type JSX,\n Show,\n batch,\n createComponent,\n createEffect,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { css } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport Day from './day';\nimport Hour from './hour';\nimport Minute from './minute';\nimport Month from './month';\nimport Second from './second';\nimport Week from './week';\nimport Year from './year';\nimport type { BaseOption, CustomElement, TabOption } from '..';\n\nexport interface CronProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 隐藏域 */\n exclude?: string[];\n /** 显示表达式\n * @default true\n */\n showCron?: boolean;\n /** 标签页类型\n * @default 'line'\n */\n type?: 'line' | 'card';\n /** 值 */\n value?: string;\n /** 默认值\n * @default 0 0 0 * * ? *\n */\n defaultValue?: string;\n /** 值改变触发a */\n onChange?(val?: string): void;\n}\n\nexport type CronElement = CustomElement<CronProps>;\nexport type SecondType = '*' | 'period' | 'beginInterval' | 'some';\nexport type MinuteType = SecondType;\nexport type HourType = SecondType;\nexport type DayType = SecondType | 'closeWorkDay' | '?' | 'last';\nexport type WeekType = SecondType | 'last' | '?';\nexport type MonthType = SecondType;\nexport type YearType = SecondType | '';\nexport type CronData<T extends string = string> = {\n start: number;\n end: number;\n begin: number;\n beginEvery: number;\n type: T;\n some: number[];\n value: string;\n};\n\nexport type ActiveTab = keyof CronType;\nexport type CronType = {\n second: CronData<SecondType>;\n minute: CronData<MinuteType>;\n hour: CronData<HourType>;\n day: CronData<DayType> & { last: number; closeWorkDay: number };\n week: CronData<WeekType> & { last: number };\n month: CronData<MonthType>;\n year: CronData<YearType>;\n};\n\nfunction Cron(props: CronProps) {\n const [local] = splitProps(props, [\n 'value',\n 'defaultValue',\n 'exclude',\n 'onChange',\n 'type',\n 'showCron',\n 'css',\n 'class',\n ]);\n const [value, setValue] = createSignal(local.defaultValue);\n const date = new Date();\n const fullYear = date.getFullYear();\n const defaultState = {\n hms: {\n start: 0,\n end: 1,\n begin: 0,\n beginEvery: 1,\n some: [0],\n value: '',\n },\n mwd: {\n start: 1,\n end: 2,\n begin: 1,\n beginEvery: 1,\n some: [1],\n value: '',\n },\n year: {\n start: fullYear,\n end: fullYear + 1,\n begin: fullYear,\n beginEvery: 1,\n some: [fullYear],\n value: '',\n },\n };\n const days: BaseOption[] = [];\n const daysBeginEvery: number[] = [];\n\n for (let x = 1; x < 32; x++) {\n days.push({\n label: x < 10 ? `0${x}` : `${x}`,\n value: x,\n });\n daysBeginEvery.push(x);\n }\n const [active, setActive] = createSignal<ActiveTab>('second');\n const [state, setState] = createSignal<CronType>({\n second: { type: '*', ...defaultState.hms },\n minute: { type: '*', ...defaultState.hms },\n hour: { type: '*', ...defaultState.hms },\n day: {\n type: '*',\n last: 1,\n closeWorkDay: 1,\n ...defaultState.mwd,\n },\n month: {\n type: '*',\n ...defaultState.mwd,\n },\n week: {\n last: 1,\n type: '?',\n ...defaultState.mwd,\n },\n year: {\n type: '',\n ...defaultState.year,\n },\n });\n\n function prefixWeekDay() {\n const store = untrack(state);\n const isDay = active() === 'day';\n\n if (isDay || active() === 'week') {\n const key = isDay ? 'week' : 'day';\n const next = store[key].type === '?' && store[active()].type === '?' ? '*' : '?';\n\n if (next !== store[key].type) {\n setState((prev) => {\n return {\n ...prev,\n [key]: {\n ...prev[key],\n type: next,\n },\n };\n });\n }\n }\n }\n\n function onChange<T extends CronType[ActiveTab]>(type: keyof T, val: T[keyof T]) {\n batch(() => {\n prefixWeekDay();\n setState((prev) => {\n const next = {\n ...prev[active()],\n [type]: val,\n };\n\n if (type === 'start' || type === 'end') {\n if (next.end - next.start <= 1) {\n if (type === 'end') {\n next.start = (val as number) - 1;\n } else {\n next.end = (val as number) + 1;\n }\n }\n }\n\n return {\n ...prev,\n [active()]: next,\n };\n });\n });\n }\n function changeActiveKey(e: CustomEvent<[string, TabOption, Event]>) {\n setActive(e.detail[0] as ActiveTab);\n }\n function parseVal<T extends ActiveTab>(item: CronType[T], isWeek?: boolean) {\n if (item.value.indexOf('-') > -1) {\n item.type = 'period';\n const period = item.value.split('-');\n\n item.start = Number(period[0]);\n item.end = Number(period[1]);\n } else if (item.value.indexOf('W') > -1) {\n item.type = 'closeWorkDay';\n (item as CronType['day']).closeWorkDay = Number(item.value.split('W')[0]) || 1;\n } else if (item.value.indexOf('L') > -1) {\n item.type = 'last';\n (item as CronType['day']).last = Number(item.value.split('L')[0]) || 1;\n } else if (item.value.indexOf(isWeek ? '#' : '/') > -1) {\n item.type = 'beginInterval';\n const beginInterval = item.value.split(isWeek ? '#' : '/');\n\n if (isWeek) {\n item.begin = Number(beginInterval[1]);\n item.beginEvery = Number(beginInterval[0]);\n } else {\n item.begin = Number(beginInterval[0]);\n item.beginEvery = Number(beginInterval[1]);\n }\n } else if (item.value.indexOf(',') > -1 || /^[0-9]+$/.test(item.value)) {\n item.type = 'some';\n item.some = item.value.split(',').map(Number);\n } else {\n item.type = item.value as CronType[T]['type'];\n }\n return item;\n }\n\n function nts(num?: string | number) {\n if (typeof num === 'number' && !isNaN(num)) {\n return `${num}`;\n }\n return num;\n }\n\n function fmt<T extends ActiveTab>(item: CronType[T], isWeek?: boolean) {\n switch (item.type) {\n case 'period':\n return `${nts(item.start)}-${nts(item.end)}`;\n case 'beginInterval':\n if (isWeek) return `${nts(item.beginEvery)}#${nts(item.begin)}`;\n return `${nts(item.begin)}/${nts(item.beginEvery)}`;\n case 'closeWorkDay':\n return `${nts(item.closeWorkDay || 1)}W`;\n case 'last':\n return isWeek ? `${nts(item.last)}L` : 'L';\n case 'some':\n return item.some.join(',');\n default:\n return item.type;\n }\n }\n\n createEffect(() => {\n if (local.value !== void 0 && untrack(value) !== local.value) {\n setValue(local.value);\n }\n });\n\n createEffect(() => {\n const val = value();\n\n if (val) {\n const valuesArray = val.toUpperCase().split(' ');\n\n batch(() => {\n setState((prev) => {\n return {\n second: parseVal<'second'>({ ...prev.second, value: valuesArray[0] || '?' }),\n minute: parseVal<'minute'>({ ...prev.minute, value: valuesArray[1] || '?' }),\n hour: parseVal<'hour'>({ ...prev.hour, value: valuesArray[2] || '?' }),\n day: parseVal<'day'>({ ...prev.day, value: valuesArray[3] || '' }),\n month: parseVal<'month'>({ ...prev.month, value: valuesArray[4] || '' }),\n week: parseVal<'week'>({ ...prev.week, value: valuesArray[5] || '' }, true),\n year: parseVal<'year'>({ ...prev.year, value: valuesArray[6] || '' }),\n };\n });\n });\n }\n });\n createEffect(() => {\n const { second, minute, hour, day, month, week, year } = state();\n const next = `${fmt(second)} ${fmt(minute)} ${fmt(hour)} ${fmt(day)} ${fmt(month)} ${fmt(\n week,\n true,\n )} ${fmt(year)}`;\n\n setValue((prev) => {\n if (prev === next) return prev;\n props.onChange?.(next);\n return next;\n });\n });\n\n const items = [\n {\n value: 'second',\n label: '秒',\n content: <Second state={state().second} onChange={onChange} />,\n },\n {\n value: 'minute',\n label: '分钟',\n content: <Minute state={state().minute} onChange={onChange} />,\n },\n {\n value: 'hour',\n label: '小时',\n content: <Hour state={state().hour} onChange={onChange} />,\n },\n {\n value: 'day',\n label: '日',\n content: <Day state={state().day} onChange={onChange} />,\n },\n {\n value: 'week',\n label: '周',\n content: <Week state={state().week} onChange={onChange} />,\n },\n {\n value: 'month',\n label: '月',\n content: <Month state={state().month} onChange={onChange} />,\n },\n {\n value: 'year',\n label: '年',\n content: <Year state={state().year} onChange={onChange} />,\n },\n ];\n\n return (\n <>\n <style>{css(local.css)}</style>\n <n-tabs type={local.type} items={items} value={active()} onChange={changeActiveKey} />\n <Show when={local.showCron}>\n <code\n style={{\n width: '100%',\n display: 'block',\n background: 'var(--component-bg)',\n 'border-radius': 'var(--border-radius)',\n 'text-align': 'center',\n }}\n >\n {value()}\n </code>\n </Show>\n </>\n );\n}\n\ncustomElement<CronProps>(\n 'n-cron',\n {\n value: void 0,\n defaultValue: '0 0 0 * * ? *',\n onChange: void 0,\n type: 'line',\n exclude: [],\n showCron: true,\n } as CronProps,\n (_, opts) => {\n const el = opts.element;\n const props = mergeProps(\n {\n onChange(val?: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(Cron, props);\n },\n);\nexport default Cron;\n"],"names":["Show","batch","createComponent","createEffect","createSignal","mergeProps","splitProps","untrack","css","customElement","Day","Hour","Minute","Month","Second","Week","Year","Cron","props","local","value","setValue","defaultValue","date","Date","fullYear","getFullYear","defaultState","hms","start","end","begin","beginEvery","some","mwd","year","days","daysBeginEvery","x","push","label","active","setActive","state","setState","second","type","minute","hour","day","last","closeWorkDay","month","week","onChange","val","prefixWeekDay","store","isDay","key","next","prev","changeActiveKey","e","detail","parseVal","item","isWeek","indexOf","period","split","Number","beginInterval","test","map","nts","num","isNaN","fmt","join","valuesArray","toUpperCase","items","content","showCron","exclude","_","opts","el","element","dispatchEvent","CustomEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/cron/index.tsx"],"sourcesContent":["import {\n type JSX,\n Show,\n batch,\n createComponent,\n createEffect,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { css } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport Day from './day';\nimport Hour from './hour';\nimport Minute from './minute';\nimport Month from './month';\nimport Second from './second';\nimport Week from './week';\nimport Year from './year';\nimport '../button';\nimport '../input-number';\nimport '../radio';\nimport '../select';\nimport '../tabs';\nimport type { BaseOption, CustomElement, TabOption } from '..';\n\nexport interface CronProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange'> {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 隐藏域 */\n exclude?: string[];\n /** 显示表达式\n * @default true\n */\n showCron?: boolean;\n /** 标签页类型\n * @default 'line'\n */\n type?: 'line' | 'card';\n /** 值 */\n value?: string;\n /** 默认值\n * @default 0 0 0 * * ? *\n */\n defaultValue?: string;\n /** 值改变触发a */\n onChange?(val?: string): void;\n}\n\nexport type CronElement = CustomElement<CronProps>;\nexport type SecondType = '*' | 'period' | 'beginInterval' | 'some';\nexport type MinuteType = SecondType;\nexport type HourType = SecondType;\nexport type DayType = SecondType | 'closeWorkDay' | '?' | 'last';\nexport type WeekType = SecondType | 'last' | '?';\nexport type MonthType = SecondType;\nexport type YearType = SecondType | '';\nexport type CronData<T extends string = string> = {\n start: number;\n end: number;\n begin: number;\n beginEvery: number;\n type: T;\n some: number[];\n value: string;\n};\n\nexport type ActiveTab = keyof CronType;\nexport type CronType = {\n second: CronData<SecondType>;\n minute: CronData<MinuteType>;\n hour: CronData<HourType>;\n day: CronData<DayType> & { last: number; closeWorkDay: number };\n week: CronData<WeekType> & { last: number };\n month: CronData<MonthType>;\n year: CronData<YearType>;\n};\n\nfunction Cron(props: CronProps) {\n const [local] = splitProps(props, [\n 'value',\n 'defaultValue',\n 'exclude',\n 'onChange',\n 'type',\n 'showCron',\n 'css',\n 'class',\n ]);\n const [value, setValue] = createSignal(local.defaultValue);\n const date = new Date();\n const fullYear = date.getFullYear();\n const defaultState = {\n hms: {\n start: 0,\n end: 1,\n begin: 0,\n beginEvery: 1,\n some: [0],\n value: '',\n },\n mwd: {\n start: 1,\n end: 2,\n begin: 1,\n beginEvery: 1,\n some: [1],\n value: '',\n },\n year: {\n start: fullYear,\n end: fullYear + 1,\n begin: fullYear,\n beginEvery: 1,\n some: [fullYear],\n value: '',\n },\n };\n const days: BaseOption[] = [];\n const daysBeginEvery: number[] = [];\n\n for (let x = 1; x < 32; x++) {\n days.push({\n label: x < 10 ? `0${x}` : `${x}`,\n value: x,\n });\n daysBeginEvery.push(x);\n }\n const [active, setActive] = createSignal<ActiveTab>('second');\n const [state, setState] = createSignal<CronType>({\n second: { type: '*', ...defaultState.hms },\n minute: { type: '*', ...defaultState.hms },\n hour: { type: '*', ...defaultState.hms },\n day: {\n type: '*',\n last: 1,\n closeWorkDay: 1,\n ...defaultState.mwd,\n },\n month: {\n type: '*',\n ...defaultState.mwd,\n },\n week: {\n last: 1,\n type: '?',\n ...defaultState.mwd,\n },\n year: {\n type: '',\n ...defaultState.year,\n },\n });\n\n function prefixWeekDay() {\n const store = untrack(state);\n const isDay = active() === 'day';\n\n if (isDay || active() === 'week') {\n const key = isDay ? 'week' : 'day';\n const next = store[key].type === '?' && store[active()].type === '?' ? '*' : '?';\n\n if (next !== store[key].type) {\n setState((prev) => {\n return {\n ...prev,\n [key]: {\n ...prev[key],\n type: next,\n },\n };\n });\n }\n }\n }\n\n function onChange<T extends CronType[ActiveTab]>(type: keyof T, val: T[keyof T]) {\n batch(() => {\n prefixWeekDay();\n setState((prev) => {\n const next = {\n ...prev[active()],\n [type]: val,\n };\n\n if (type === 'start' || type === 'end') {\n if (next.end - next.start <= 1) {\n if (type === 'end') {\n next.start = (val as number) - 1;\n } else {\n next.end = (val as number) + 1;\n }\n }\n }\n\n return {\n ...prev,\n [active()]: next,\n };\n });\n });\n }\n function changeActiveKey(e: CustomEvent<[string, TabOption, Event]>) {\n setActive(e.detail[0] as ActiveTab);\n }\n function parseVal<T extends ActiveTab>(item: CronType[T], isWeek?: boolean) {\n if (item.value.indexOf('-') > -1) {\n item.type = 'period';\n const period = item.value.split('-');\n\n item.start = Number(period[0]);\n item.end = Number(period[1]);\n } else if (item.value.indexOf('W') > -1) {\n item.type = 'closeWorkDay';\n (item as CronType['day']).closeWorkDay = Number(item.value.split('W')[0]) || 1;\n } else if (item.value.indexOf('L') > -1) {\n item.type = 'last';\n (item as CronType['day']).last = Number(item.value.split('L')[0]) || 1;\n } else if (item.value.indexOf(isWeek ? '#' : '/') > -1) {\n item.type = 'beginInterval';\n const beginInterval = item.value.split(isWeek ? '#' : '/');\n\n if (isWeek) {\n item.begin = Number(beginInterval[1]);\n item.beginEvery = Number(beginInterval[0]);\n } else {\n item.begin = Number(beginInterval[0]);\n item.beginEvery = Number(beginInterval[1]);\n }\n } else if (item.value.indexOf(',') > -1 || /^[0-9]+$/.test(item.value)) {\n item.type = 'some';\n item.some = item.value.split(',').map(Number);\n } else {\n item.type = item.value as CronType[T]['type'];\n }\n return item;\n }\n\n function nts(num?: string | number) {\n if (typeof num === 'number' && !isNaN(num)) {\n return `${num}`;\n }\n return num;\n }\n\n function fmt<T extends ActiveTab>(item: CronType[T], isWeek?: boolean) {\n switch (item.type) {\n case 'period':\n return `${nts(item.start)}-${nts(item.end)}`;\n case 'beginInterval':\n if (isWeek) return `${nts(item.beginEvery)}#${nts(item.begin)}`;\n return `${nts(item.begin)}/${nts(item.beginEvery)}`;\n case 'closeWorkDay':\n return `${nts(item.closeWorkDay || 1)}W`;\n case 'last':\n return isWeek ? `${nts(item.last)}L` : 'L';\n case 'some':\n return item.some.join(',');\n default:\n return item.type;\n }\n }\n\n createEffect(() => {\n if (local.value !== void 0 && untrack(value) !== local.value) {\n setValue(local.value);\n }\n });\n\n createEffect(() => {\n const val = value();\n\n if (val) {\n const valuesArray = val.toUpperCase().split(' ');\n\n batch(() => {\n setState((prev) => {\n return {\n second: parseVal<'second'>({ ...prev.second, value: valuesArray[0] || '?' }),\n minute: parseVal<'minute'>({ ...prev.minute, value: valuesArray[1] || '?' }),\n hour: parseVal<'hour'>({ ...prev.hour, value: valuesArray[2] || '?' }),\n day: parseVal<'day'>({ ...prev.day, value: valuesArray[3] || '' }),\n month: parseVal<'month'>({ ...prev.month, value: valuesArray[4] || '' }),\n week: parseVal<'week'>({ ...prev.week, value: valuesArray[5] || '' }, true),\n year: parseVal<'year'>({ ...prev.year, value: valuesArray[6] || '' }),\n };\n });\n });\n }\n });\n createEffect(() => {\n const { second, minute, hour, day, month, week, year } = state();\n const next = `${fmt(second)} ${fmt(minute)} ${fmt(hour)} ${fmt(day)} ${fmt(month)} ${fmt(\n week,\n true,\n )} ${fmt(year)}`;\n\n setValue((prev) => {\n if (prev === next) return prev;\n props.onChange?.(next);\n return next;\n });\n });\n\n const items = [\n {\n value: 'second',\n label: '秒',\n content: <Second state={state().second} onChange={onChange} />,\n },\n {\n value: 'minute',\n label: '分钟',\n content: <Minute state={state().minute} onChange={onChange} />,\n },\n {\n value: 'hour',\n label: '小时',\n content: <Hour state={state().hour} onChange={onChange} />,\n },\n {\n value: 'day',\n label: '日',\n content: <Day state={state().day} onChange={onChange} />,\n },\n {\n value: 'week',\n label: '周',\n content: <Week state={state().week} onChange={onChange} />,\n },\n {\n value: 'month',\n label: '月',\n content: <Month state={state().month} onChange={onChange} />,\n },\n {\n value: 'year',\n label: '年',\n content: <Year state={state().year} onChange={onChange} />,\n },\n ];\n\n return (\n <>\n <style>{css(local.css)}</style>\n <n-tabs type={local.type} items={items} value={active()} onChange={changeActiveKey} />\n <Show when={local.showCron}>\n <code\n style={{\n width: '100%',\n display: 'block',\n background: 'var(--component-bg)',\n 'border-radius': 'var(--border-radius)',\n 'text-align': 'center',\n }}\n >\n {value()}\n </code>\n </Show>\n </>\n );\n}\n\ncustomElement<CronProps>(\n 'n-cron',\n {\n value: void 0,\n defaultValue: '0 0 0 * * ? *',\n onChange: void 0,\n type: 'line',\n exclude: [],\n showCron: true,\n } as CronProps,\n (_, opts) => {\n const el = opts.element;\n const props = mergeProps(\n {\n onChange(val?: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n return createComponent(Cron, props);\n },\n);\nexport default Cron;\n"],"names":["Show","batch","createComponent","createEffect","createSignal","mergeProps","splitProps","untrack","css","customElement","Day","Hour","Minute","Month","Second","Week","Year","Cron","props","local","value","setValue","defaultValue","date","Date","fullYear","getFullYear","defaultState","hms","start","end","begin","beginEvery","some","mwd","year","days","daysBeginEvery","x","push","label","active","setActive","state","setState","second","type","minute","hour","day","last","closeWorkDay","month","week","onChange","val","prefixWeekDay","store","isDay","key","next","prev","changeActiveKey","e","detail","parseVal","item","isWeek","indexOf","period","split","Number","beginInterval","test","map","nts","num","isNaN","fmt","join","valuesArray","toUpperCase","items","content","showCron","exclude","_","opts","el","element","dispatchEvent","CustomEvent"],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type JSXElement } from 'solid-js';
|
|
2
2
|
import dayjs from './dayjs';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import '../button';
|
|
4
|
+
import '../menu';
|
|
5
|
+
import type { CustomElement, PopoverProps } from '..';
|
|
5
6
|
declare function DatePicker(_props: DatePickerProps): import("solid-js").JSX.Element;
|
|
6
7
|
/** API
|
|
7
8
|
* @since 2.1.0
|
package/es/date-picker/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e,o;import{_ as t}from"@swc/helpers/_/_extends";import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{mergeProps as s}from"solid-js/web";import{getOwner as a}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as d}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{addEventListener as p}from"solid-js/web";let u=/*#__PURE__*/r('<n-input part="value">',!0,!1);import{createComponent as m,createEffect as f,createMemo as h,createSignal as v,mergeProps as c,splitProps as w,untrack as g}from"solid-js";import{customElement as Y}from"solid-element";import C from"./dayjs";import y from"./panel";import{styles as _}from"./style";import b,{defaultProps as $}from"../popover";function H(e){let o;let t=c({type:"date",parser:"YYYY-MM-DD HH:mm:ss"},e),[r,d]=w(t,["class","css","value","defaultValue","onChange","type","content","onOpenChange","open","format","popupCss","trigger","parser","showTime","showHour","showMinute","showSecond","prefixIcon","suffixIcon","placeholder","showToday","showHeader"]),[m,Y]=v(null),[$,H]=v(C(r.defaultValue)),M=h(()=>r.format?r.format:r.showTime?"YYYY-MM-DD HH:mm:ss":({month:"YYYY-MM",date:"YYYY-MM-DD",year:"YYYY"})[r.type||"date"]);function j(e){d.disabled||(null==r.onOpenChange||r.onOpenChange.call(r,e),void 0===r.open&&Y(e))}function x(e){e.stopPropagation(),e.preventDefault(),j(!0)}function T(){g(m)&&j(!1)}function I(e){var t;e.target===(null==(t=null==o?void 0:o.shadowRoot)?void 0:t.activeElement)&&j(!g(m))}function D(e){void 0===r.value&&H(e),null==t.onChange||t.onChange.call(t,e.format(r.parser),e)}function E(e){if(e.detail){let o=C(e.detail);o.isValid()&&D(o)}}return f(()=>{void 0!==r.open&&r.open!==g(m)&&Y(r.open)}),f(()=>{let e=C(r.value||r.defaultValue);void 0!==r.value&&e.isValid()&&H(e)}),l(b,s({trigger:"none",placement:"left",get open(){return m()},onOpenChange:j,get css(){return r.css},popupCss:_,get content(){return l(y,{get type(){return r.type},get current(){return $()},get open(){return m()},onChange:D,openChange:j,get showHour(){return r.showHour},get showMinute(){return r.showMinute},get showSecond(){return r.showSecond},get showTime(){return r.showTime},get showToday(){return r.showToday},get showHeader(){return r.showHeader}})}},d,{get children(){let e=u(),t=o;return p(e,"change",E),p(e,"blur",T),p(e,"focus",x),p(e,"mousedown",I,!0),"function"==typeof t?n(t,e):o=e,e._$owner=a(),i(o=>{let t=d.disabled,n=r.suffixIcon,s=r.prefixIcon,a=r.placeholder;return t!==o._v$&&(e.disabled=o._v$=t),n!==o._v$2&&(e.suffixIcon=o._v$2=n),s!==o._v$3&&(e.prefixIcon=o._v$3=s),a!==o._v$4&&(e.placeholder=o._v$4=a),o},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),i(()=>e.value=$().format(M())),e}}))}(o=e||(e={}))./** 日期选择 */date="date",o./** 月份选择 */month="month",o./** 年份选择 */year="year",Y("n-data-picker",t({},$,{value:void 0,defaultValue:void 0,disabled:void 0,onChange:void 0,open:void 0,onOpenChange:void 0,type:void 0,format:void 0,parser:void 0,showTime:void 0,suffixIcon:"📅",prefixIcon:void 0,placeholder:void 0,showHour:!0,showMinute:!0,showSecond:!0,showToday:!0,showHeader:!0}),(e,o)=>{let t=o.element,n=c({css:t.css,onChange(e,o){t.dispatchEvent(new CustomEvent("change",{detail:[e,o]}))},onOpenChange(e){t.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return f(()=>{t.removeAttribute("css")}),m(H,n)});export default H;d(["mousedown"]);
|
|
1
|
+
var e,o;import{_ as t}from"@swc/helpers/_/_extends";import{use as n}from"solid-js/web";import{template as r}from"solid-js/web";import{mergeProps as s}from"solid-js/web";import{getOwner as a}from"solid-js/web";import{effect as i}from"solid-js/web";import{delegateEvents as d}from"solid-js/web";import{createComponent as l}from"solid-js/web";import{addEventListener as p}from"solid-js/web";let u=/*#__PURE__*/r('<n-input part="value">',!0,!1);import{createComponent as m,createEffect as f,createMemo as h,createSignal as v,mergeProps as c,splitProps as w,untrack as g}from"solid-js";import{customElement as Y}from"solid-element";import C from"./dayjs";import y from"./panel";import{styles as _}from"./style";import"../button";import"../menu";import b,{defaultProps as $}from"../popover";function H(e){let o;let t=c({type:"date",parser:"YYYY-MM-DD HH:mm:ss"},e),[r,d]=w(t,["class","css","value","defaultValue","onChange","type","content","onOpenChange","open","format","popupCss","trigger","parser","showTime","showHour","showMinute","showSecond","prefixIcon","suffixIcon","placeholder","showToday","showHeader"]),[m,Y]=v(null),[$,H]=v(C(r.defaultValue)),M=h(()=>r.format?r.format:r.showTime?"YYYY-MM-DD HH:mm:ss":({month:"YYYY-MM",date:"YYYY-MM-DD",year:"YYYY"})[r.type||"date"]);function j(e){d.disabled||(null==r.onOpenChange||r.onOpenChange.call(r,e),void 0===r.open&&Y(e))}function x(e){e.stopPropagation(),e.preventDefault(),j(!0)}function T(){g(m)&&j(!1)}function I(e){var t;e.target===(null==(t=null==o?void 0:o.shadowRoot)?void 0:t.activeElement)&&j(!g(m))}function D(e){void 0===r.value&&H(e),null==t.onChange||t.onChange.call(t,e.format(r.parser),e)}function E(e){if(e.detail){let o=C(e.detail);o.isValid()&&D(o)}}return f(()=>{void 0!==r.open&&r.open!==g(m)&&Y(r.open)}),f(()=>{let e=C(r.value||r.defaultValue);void 0!==r.value&&e.isValid()&&H(e)}),l(b,s({trigger:"none",placement:"left",get open(){return m()},onOpenChange:j,get css(){return r.css},popupCss:_,get content(){return l(y,{get type(){return r.type},get current(){return $()},get open(){return m()},onChange:D,openChange:j,get showHour(){return r.showHour},get showMinute(){return r.showMinute},get showSecond(){return r.showSecond},get showTime(){return r.showTime},get showToday(){return r.showToday},get showHeader(){return r.showHeader}})}},d,{get children(){let e=u(),t=o;return p(e,"change",E),p(e,"blur",T),p(e,"focus",x),p(e,"mousedown",I,!0),"function"==typeof t?n(t,e):o=e,e._$owner=a(),i(o=>{let t=d.disabled,n=r.suffixIcon,s=r.prefixIcon,a=r.placeholder;return t!==o._v$&&(e.disabled=o._v$=t),n!==o._v$2&&(e.suffixIcon=o._v$2=n),s!==o._v$3&&(e.prefixIcon=o._v$3=s),a!==o._v$4&&(e.placeholder=o._v$4=a),o},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),i(()=>e.value=$().format(M())),e}}))}(o=e||(e={}))./** 日期选择 */date="date",o./** 月份选择 */month="month",o./** 年份选择 */year="year",Y("n-data-picker",t({},$,{value:void 0,defaultValue:void 0,disabled:void 0,onChange:void 0,open:void 0,onOpenChange:void 0,type:void 0,format:void 0,parser:void 0,showTime:void 0,suffixIcon:"📅",prefixIcon:void 0,placeholder:void 0,showHour:!0,showMinute:!0,showSecond:!0,showToday:!0,showHeader:!0}),(e,o)=>{let t=o.element,n=c({css:t.css,onChange(e,o){t.dispatchEvent(new CustomEvent("change",{detail:[e,o]}))},onOpenChange(e){t.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return f(()=>{t.removeAttribute("css")}),m(H,n)});export default H;d(["mousedown"]);
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/date-picker/index.tsx"],"sourcesContent":["import {\n type JSXElement,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport dayjs from './dayjs';\nimport Panel from './panel';\nimport { styles } from './style';\nimport Popover, { type PopoverProps, defaultProps } from '../popover';\nimport type { CustomElement, InputElement } from '..';\n\nfunction DatePicker(_props: DatePickerProps) {\n let ref: InputElement | undefined;\n const props = mergeProps(\n {\n type: 'date' as DatePickerProps['type'],\n parser: 'YYYY-MM-DD HH:mm:ss',\n },\n _props,\n );\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'value',\n 'defaultValue',\n 'onChange',\n 'type',\n 'content',\n 'onOpenChange',\n 'open',\n 'format',\n 'popupCss',\n 'trigger',\n 'parser',\n 'showTime',\n 'showHour',\n 'showMinute',\n 'showSecond',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'showToday',\n 'showHeader',\n ]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [current, setCurrent] = createSignal(dayjs(local.defaultValue));\n\n const format = createMemo(() => {\n if (local.format) {\n return local.format;\n }\n if (local.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return {\n month: 'YYYY-MM',\n date: 'YYYY-MM-DD',\n year: 'YYYY',\n }[local.type || 'date'];\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n local.onOpenChange?.(next);\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n\n function focus(e: FocusEvent | MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n openChange(true);\n }\n function blur() {\n if (untrack(open)) {\n openChange(false);\n }\n }\n function inputMouseDown(e: MouseEvent) {\n if (e.target === (ref?.shadowRoot as ShadowRoot)?.activeElement) {\n openChange(!untrack(open));\n }\n }\n function handleChange(next: dayjs.Dayjs) {\n if (local.value === void 0) {\n setCurrent(next);\n }\n props.onChange?.(next.format(local.parser), next);\n }\n function handleInputChange(e: CustomEvent<string | number | undefined>) {\n if (e.detail) {\n const next = dayjs(e.detail);\n\n if (next.isValid()) {\n handleChange(next);\n }\n }\n }\n\n createEffect(() => {\n if (local.open !== void 0 && local.open !== untrack(open)) {\n setOpen(local.open);\n }\n });\n createEffect(() => {\n const next = dayjs(local.value || local.defaultValue);\n\n if (local.value !== void 0 && next.isValid()) {\n setCurrent(next);\n }\n });\n return (\n <Popover\n trigger=\"none\"\n placement=\"left\"\n open={open()}\n onOpenChange={openChange}\n css={local.css}\n popupCss={styles}\n content={\n <Panel\n type={local.type}\n current={current()}\n open={open()}\n onChange={handleChange}\n openChange={openChange}\n showHour={local.showHour}\n showMinute={local.showMinute}\n showSecond={local.showSecond}\n showTime={local.showTime}\n showToday={local.showToday}\n showHeader={local.showHeader}\n />\n }\n {...other}\n >\n <n-input\n ref={ref}\n onMouseDown={inputMouseDown}\n onFocus={focus}\n onBlur={blur}\n disabled={other.disabled}\n value={current().format(format())}\n suffix-icon={local.suffixIcon}\n prefix-icon={local.prefixIcon}\n placeholder={local.placeholder}\n part=\"value\"\n onChange={handleInputChange}\n />\n </Popover>\n );\n}\n/** API\n * @since 2.1.0\n */\nexport interface DatePickerProps extends Partial<PopoverProps> {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 类型\n * @default 'date'\n */\n type?: keyof typeof PickerType;\n /** 值 */\n value?: string | number;\n /** 默认值\n * @default 当前时间\n */\n defaultValue?: string | number;\n /** 禁用 */\n disabled?: boolean;\n /** 格式化回填到输入框的内容\n * @default 'YYYY-MM-DD'\n */\n format?: string;\n /** 格式化获取的值\n * @default 'YYYY-MM-DD HH:mm:ss'\n */\n parser?: string;\n /** 前缀 */\n prefixIcon?: JSXElement;\n /** 后缀\n * @default '📅'\n */\n suffixIcon?: JSXElement;\n /** 变更时的回调 */\n onChange?(val: string, time: dayjs.Dayjs): void;\n /** 显示时间选择\n * @default false\n */\n showTime?: boolean;\n /** 显示小时选择\n * @default true\n **/\n showHour?: boolean;\n /** 显示分钟选择\n * @default true\n **/\n showMinute?: boolean;\n /** 显示秒选择\n * @default true\n **/\n showSecond?: boolean;\n /** 占位文本 */\n placeholder?: string;\n /** 显示今日按钮\n * @default true\n */\n showToday?: boolean;\n /** 显示顶部\n * @default true\n */\n showHeader?: boolean;\n}\n\nenum PickerType {\n /** 日期选择 */\n date = 'date',\n /** 月份选择 */\n month = 'month',\n /** 年份选择 */\n year = 'year',\n}\n\nexport type DatePickerElement = CustomElement<DatePickerProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<DatePickerProps>(\n 'n-data-picker',\n {\n ...defaultProps,\n value: void 0,\n defaultValue: void 0,\n disabled: void 0,\n onChange: void 0,\n open: void 0,\n onOpenChange: void 0,\n type: void 0,\n format: void 0,\n parser: void 0,\n showTime: void 0,\n suffixIcon: '📅',\n prefixIcon: void 0,\n placeholder: void 0,\n showHour: true,\n showMinute: true,\n showSecond: true,\n showToday: true,\n showHeader: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(val: string, time: dayjs.Dayjs) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [val, time],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(DatePicker, props);\n },\n);\nexport default DatePicker;\n"],"names":["PickerType","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","customElement","dayjs","Panel","styles","Popover","defaultProps","DatePicker","_props","ref","props","type","parser","local","other","open","setOpen","current","setCurrent","defaultValue","format","showTime","month","date","year","openChange","next","disabled","onOpenChange","focus","e","stopPropagation","preventDefault","blur","inputMouseDown","target","shadowRoot","activeElement","handleChange","value","onChange","handleInputChange","detail","isValid","css","showHour","showMinute","showSecond","showToday","showHeader","suffixIcon","prefixIcon","placeholder","_","opt","el","element","val","time","dispatchEvent","CustomEvent","removeAttribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/date-picker/index.tsx"],"sourcesContent":["import {\n type JSXElement,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport dayjs from './dayjs';\nimport Panel from './panel';\nimport { styles } from './style';\nimport '../button';\nimport '../menu';\nimport Popover, { defaultProps } from '../popover';\nimport type { CustomElement, InputElement, PopoverProps } from '..';\n\nfunction DatePicker(_props: DatePickerProps) {\n let ref: InputElement | undefined;\n const props = mergeProps(\n {\n type: 'date' as DatePickerProps['type'],\n parser: 'YYYY-MM-DD HH:mm:ss',\n },\n _props,\n );\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'value',\n 'defaultValue',\n 'onChange',\n 'type',\n 'content',\n 'onOpenChange',\n 'open',\n 'format',\n 'popupCss',\n 'trigger',\n 'parser',\n 'showTime',\n 'showHour',\n 'showMinute',\n 'showSecond',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'showToday',\n 'showHeader',\n ]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [current, setCurrent] = createSignal(dayjs(local.defaultValue));\n\n const format = createMemo(() => {\n if (local.format) {\n return local.format;\n }\n if (local.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return {\n month: 'YYYY-MM',\n date: 'YYYY-MM-DD',\n year: 'YYYY',\n }[local.type || 'date'];\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n local.onOpenChange?.(next);\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n\n function focus(e: FocusEvent | MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n openChange(true);\n }\n function blur() {\n if (untrack(open)) {\n openChange(false);\n }\n }\n function inputMouseDown(e: MouseEvent) {\n if (e.target === (ref?.shadowRoot as ShadowRoot)?.activeElement) {\n openChange(!untrack(open));\n }\n }\n function handleChange(next: dayjs.Dayjs) {\n if (local.value === void 0) {\n setCurrent(next);\n }\n props.onChange?.(next.format(local.parser), next);\n }\n function handleInputChange(e: CustomEvent<string | number | undefined>) {\n if (e.detail) {\n const next = dayjs(e.detail);\n\n if (next.isValid()) {\n handleChange(next);\n }\n }\n }\n\n createEffect(() => {\n if (local.open !== void 0 && local.open !== untrack(open)) {\n setOpen(local.open);\n }\n });\n createEffect(() => {\n const next = dayjs(local.value || local.defaultValue);\n\n if (local.value !== void 0 && next.isValid()) {\n setCurrent(next);\n }\n });\n return (\n <Popover\n trigger=\"none\"\n placement=\"left\"\n open={open()}\n onOpenChange={openChange}\n css={local.css}\n popupCss={styles}\n content={\n <Panel\n type={local.type}\n current={current()}\n open={open()}\n onChange={handleChange}\n openChange={openChange}\n showHour={local.showHour}\n showMinute={local.showMinute}\n showSecond={local.showSecond}\n showTime={local.showTime}\n showToday={local.showToday}\n showHeader={local.showHeader}\n />\n }\n {...other}\n >\n <n-input\n ref={ref}\n onMouseDown={inputMouseDown}\n onFocus={focus}\n onBlur={blur}\n disabled={other.disabled}\n value={current().format(format())}\n suffix-icon={local.suffixIcon}\n prefix-icon={local.prefixIcon}\n placeholder={local.placeholder}\n part=\"value\"\n onChange={handleInputChange}\n />\n </Popover>\n );\n}\n/** API\n * @since 2.1.0\n */\nexport interface DatePickerProps extends Partial<PopoverProps> {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 类型\n * @default 'date'\n */\n type?: keyof typeof PickerType;\n /** 值 */\n value?: string | number;\n /** 默认值\n * @default 当前时间\n */\n defaultValue?: string | number;\n /** 禁用 */\n disabled?: boolean;\n /** 格式化回填到输入框的内容\n * @default 'YYYY-MM-DD'\n */\n format?: string;\n /** 格式化获取的值\n * @default 'YYYY-MM-DD HH:mm:ss'\n */\n parser?: string;\n /** 前缀 */\n prefixIcon?: JSXElement;\n /** 后缀\n * @default '📅'\n */\n suffixIcon?: JSXElement;\n /** 变更时的回调 */\n onChange?(val: string, time: dayjs.Dayjs): void;\n /** 显示时间选择\n * @default false\n */\n showTime?: boolean;\n /** 显示小时选择\n * @default true\n **/\n showHour?: boolean;\n /** 显示分钟选择\n * @default true\n **/\n showMinute?: boolean;\n /** 显示秒选择\n * @default true\n **/\n showSecond?: boolean;\n /** 占位文本 */\n placeholder?: string;\n /** 显示今日按钮\n * @default true\n */\n showToday?: boolean;\n /** 显示顶部\n * @default true\n */\n showHeader?: boolean;\n}\n\nenum PickerType {\n /** 日期选择 */\n date = 'date',\n /** 月份选择 */\n month = 'month',\n /** 年份选择 */\n year = 'year',\n}\n\nexport type DatePickerElement = CustomElement<DatePickerProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<DatePickerProps>(\n 'n-data-picker',\n {\n ...defaultProps,\n value: void 0,\n defaultValue: void 0,\n disabled: void 0,\n onChange: void 0,\n open: void 0,\n onOpenChange: void 0,\n type: void 0,\n format: void 0,\n parser: void 0,\n showTime: void 0,\n suffixIcon: '📅',\n prefixIcon: void 0,\n placeholder: void 0,\n showHour: true,\n showMinute: true,\n showSecond: true,\n showToday: true,\n showHeader: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(val: string, time: dayjs.Dayjs) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [val, time],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(DatePicker, props);\n },\n);\nexport default DatePicker;\n"],"names":["PickerType","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","customElement","dayjs","Panel","styles","Popover","defaultProps","DatePicker","_props","ref","props","type","parser","local","other","open","setOpen","current","setCurrent","defaultValue","format","showTime","month","date","year","openChange","next","disabled","onOpenChange","focus","e","stopPropagation","preventDefault","blur","inputMouseDown","target","shadowRoot","activeElement","handleChange","value","onChange","handleInputChange","detail","isValid","css","showHour","showMinute","showSecond","showToday","showHeader","suffixIcon","prefixIcon","placeholder","_","opt","el","element","val","time","dispatchEvent","CustomEvent","removeAttribute"],"mappings":"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"}
|
package/es/dropdown/index.d.ts
CHANGED
package/es/dropdown/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as e}from"@swc/helpers/_/_extends";import{use as o}from"solid-js/web";import{template as t}from"solid-js/web";import{mergeProps as n}from"solid-js/web";import{insert as i}from"solid-js/web";import{getOwner as l}from"solid-js/web";import{effect as
|
|
1
|
+
import{_ as e}from"@swc/helpers/_/_extends";import{use as o}from"solid-js/web";import{template as t}from"solid-js/web";import{mergeProps as n}from"solid-js/web";import{insert as i}from"solid-js/web";import{getOwner as l}from"solid-js/web";import{effect as r}from"solid-js/web";import{createComponent as s}from"solid-js/web";import{addEventListener as a}from"solid-js/web";let p=/*#__PURE__*/t("<n-menu>",!0,!1),d=/*#__PURE__*/t('<div class="container">');import{Show as v,createComponent as m,createEffect as u,createSignal as f,mergeProps as g,splitProps as c,untrack as _}from"solid-js";import h from"@moneko/common/lib/isFunction";import{customElement as $}from"solid-element";import C from"../empty";import"../menu";import b,{defaultProps as w}from"../popover";function y(e){let t;let[m,g]=c(e,["popupClass","popupCss","value","defaultValue","onChange","open","onOpenChange","fieldNames","items","multiple","toggle"]),[$,w]=f([]),[y,j]=f(null),[A,O]=f([]);function E(e){h(m.onOpenChange)&&m.onOpenChange(e),void 0===m.open&&j(e)}function N(e){let[o,t]=e.detail;h(m.onChange)&&m.onChange(o,t),void 0===m.value&&w(Array.isArray(o)?o:[o]),m.multiple||E(!1)}function P(e){O(e.detail)}return u(()=>{void 0!==m.value&&null!==m.value?w(Array.isArray(m.value)?m.value:[m.value]):w([])}),u(()=>{void 0!==m.open&&_(y)!==m.open&&j(m.open)}),s(b,n({get popupClass(){return m.popupClass},get popupCss(){return m.popupCss},get open(){return y()},onOpenChange:E,get content(){return(()=>{let e=d(),n=t;return"function"==typeof n?o(n,e):t=e,i(e,s(v,{get when(){var u;return null==(u=m.items)?void 0:u.length},get fallback(){return s(C,{style:{width:"100%"}})},get children(){let e=p();return a(e,"openchange",P),a(e,"change",N),e._$owner=l(),r(o=>{let t=m.items,n=m.defaultValue,i=m.multiple,l=m.fieldNames,r=m.toggle,s=g.disabled,a=A();return t!==o._v$&&(e.items=o._v$=t),n!==o._v$2&&(e.defaultValue=o._v$2=n),i!==o._v$3&&(e.multiple=o._v$3=i),l!==o._v$4&&(e.fieldNames=o._v$4=l),r!==o._v$5&&(e.toggle=o._v$5=r),s!==o._v$6&&(e.disabled=o._v$6=s),a!==o._v$7&&(e.openKeys=o._v$7=a),o},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0,_v$6:void 0,_v$7:void 0}),r(()=>e.value=$()),e}})),e})()}},g))}export const defaultProps=e({},w,{fieldNames:void 0,toggle:void 0,value:void 0,defaultValue:void 0,onChange:void 0,multiple:void 0,disabled:void 0,type:void 0,onOpenChange:void 0,openKeys:void 0});$("n-dropdown",e({},defaultProps,{items:[]}),(e,o)=>{let t=o.element,n=g({items:t.items,onChange(e,o){t.dispatchEvent(new CustomEvent("change",{detail:[e,o]}))},onOpenChange(e){t.dispatchEvent(new CustomEvent("openchange",{detail:e}))},children:[...t.childNodes.values()]},e);return u(()=>{t.removeAttribute("items"),t.removeAttribute("field-names"),t.removeAttribute("css")}),m(y,n)});export default y;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/dropdown/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/dropdown/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { customElement } from 'solid-element';\nimport Empty from '../empty';\nimport Popover, { defaultProps as popoverProps } from '../popover';\nimport type { CustomElement, MenuMultipleProps, MenuOption, MenuProps, PopoverProps } from '..';\n\nexport interface BaseDropdownProps extends Omit<PopoverProps, 'content'> {\n /** 打开内容气泡 */\n open?: boolean | null;\n}\nexport interface DropdownProps\n extends Omit<MenuProps, 'openKeys' | 'onOpenChange'>,\n BaseDropdownProps {\n /** 打开内容气泡 */\n open?: boolean | null;\n}\nexport interface DropdownMultipleProps\n extends Omit<MenuMultipleProps, 'openKeys' | 'onOpenChange'>,\n BaseDropdownProps {\n /** 打开内容气泡 */\n open?: boolean | null;\n}\nexport type DropdownElement = CustomElement<DropdownProps>;\nexport type DropdownMultipleElement = CustomElement<DropdownMultipleProps>;\n\nfunction Dropdown(props: DropdownProps | DropdownMultipleProps) {\n const [local, other] = splitProps(props, [\n 'popupClass',\n 'popupCss',\n 'value',\n 'defaultValue',\n 'onChange',\n 'open',\n 'onOpenChange',\n 'fieldNames',\n 'items',\n 'multiple',\n 'toggle',\n ]);\n let portalRef: HTMLDivElement | undefined;\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [menuOpenKeys, setMenuOpenKeys] = createSignal<(string | number)[]>([]);\n\n function openChange(next: boolean | null) {\n if (isFunction(local.onOpenChange)) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n\n function change(\n e: CustomEvent<[val: (string | number)[] | (string | number), item: MenuOption]>,\n ) {\n const [key, item] = e.detail;\n\n if (isFunction(local.onChange)) {\n local.onChange(key, item);\n }\n if (local.value === void 0) {\n setValue(Array.isArray(key) ? key : [key]);\n }\n if (!local.multiple) {\n openChange(false);\n }\n }\n function menuOpenKeysChange(e: CustomEvent<(string | number)[]>) {\n setMenuOpenKeys(e.detail);\n }\n\n createEffect(() => {\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 createEffect(() => {\n if (local.open !== void 0 && untrack(open) !== local.open) {\n setOpen(local.open);\n }\n });\n\n return (\n <Popover\n popupClass={local.popupClass}\n popupCss={local.popupCss}\n open={open()}\n onOpenChange={openChange}\n content={\n <div ref={portalRef} class=\"container\">\n <Show when={local.items?.length} fallback={<Empty style={{ width: '100%' }} />}>\n <n-menu\n items={local.items}\n default-value={local.defaultValue}\n multiple={local.multiple as true}\n field-names={local.fieldNames}\n toggle={local.toggle}\n disabled={other.disabled}\n value={value()}\n onChange={change}\n open-keys={menuOpenKeys()}\n onOpenChange={menuOpenKeysChange}\n />\n </Show>\n </div>\n }\n {...other}\n />\n );\n}\n\nexport const defaultProps = {\n ...popoverProps,\n fieldNames: void 0,\n toggle: void 0,\n value: void 0,\n defaultValue: void 0,\n onChange: void 0,\n multiple: void 0,\n disabled: void 0,\n type: void 0,\n onOpenChange: void 0,\n openKeys: void 0,\n};\n\ncustomElement<DropdownProps>(\n 'n-dropdown',\n {\n ...defaultProps,\n items: [],\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n items: el.items,\n onChange(key, item) {\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 children: [...el.childNodes.values()],\n } as DropdownProps,\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('items');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Dropdown, props);\n },\n);\nexport default Dropdown;\n"],"names":["Show","createComponent","createEffect","createSignal","mergeProps","splitProps","untrack","isFunction","customElement","Empty","Popover","defaultProps","popoverProps","Dropdown","props","portalRef","local","other","value","setValue","open","setOpen","menuOpenKeys","setMenuOpenKeys","openChange","next","onOpenChange","change","e","key","item","detail","onChange","Array","isArray","multiple","menuOpenKeysChange","popupClass","popupCss","items","length","width","defaultValue","fieldNames","toggle","disabled","type","openKeys","_","opt","el","element","dispatchEvent","CustomEvent","children","childNodes","values","removeAttribute"],"mappings":"scAAA,QACEA,QAAAA,CAAI,CACJC,mBAAAA,CAAe,CACfC,gBAAAA,CAAY,CACZC,gBAAAA,CAAY,CACZC,cAAAA,CAAU,CACVC,cAAAA,CAAU,CACVC,WAAAA,CAAO,KACF,UAAW,AAClB,QAASC,MAAkB,+BAAiB,AAC5C,QAASC,iBAAAA,CAAa,KAAQ,eAAgB,AAC9C,QAAOC,MAAW,UAAW,AAC7B,QAAOC,GAAWC,gBAAgBC,CAAY,KAAQ,YAAa,CAsBnE,SAASC,EAASC,CAA4C,MAcxDC,EAbJ,GAAM,CAACC,EAAOC,EAAM,CAAGZ,EAAWS,EAAO,CACvC,aACA,WACA,QACA,eACA,WACA,OACA,eACA,aACA,QACA,WACA,SACD,EAEK,CAACI,EAAOC,EAAS,CAAGhB,EAAkC,EAAE,EACxD,CAACiB,EAAMC,EAAQ,CAAGlB,EAA6B,MAC/C,CAACmB,EAAcC,EAAgB,CAAGpB,EAAkC,EAAE,EAE5E,SAASqB,EAAWC,CAAoB,EAClClB,EAAWS,EAAMU,YAAY,GAC/BV,EAAMU,YAAY,CAACD,GAEF,KAAK,IAApBT,EAAMI,IAAI,EACZC,EAAQI,EAEZ,CAEA,SAASE,EACPC,CAAgF,EAEhF,GAAM,CAACC,EAAKC,EAAK,CAAGF,EAAEG,MAAM,CAExBxB,EAAWS,EAAMgB,QAAQ,GAC3BhB,EAAMgB,QAAQ,CAACH,EAAKC,GAEF,KAAK,IAArBd,EAAME,KAAK,EACbC,EAASc,MAAMC,OAAO,CAACL,GAAOA,EAAM,CAACA,EAAI,EAEtCb,EAAMmB,QAAQ,EACjBX,EAAW,CAAA,EAEf,CACA,SAASY,EAAmBR,CAAmC,EAC7DL,EAAgBK,EAAEG,MAAM,CAC1B,CAeA,OAbA7B,EAAa,KACPc,AAAgB,KAAK,IAArBA,EAAME,KAAK,EAAeF,AAAgB,OAAhBA,EAAME,KAAK,CACvCC,EAASc,MAAMC,OAAO,CAAClB,EAAME,KAAK,EAAIF,EAAME,KAAK,CAAG,CAACF,EAAME,KAAK,CAAC,EAEjEC,EAAS,EAAE,CAEf,GACAjB,EAAa,KACQ,KAAK,IAApBc,EAAMI,IAAI,EAAed,EAAQc,KAAUJ,EAAMI,IAAI,EACvDC,EAAQL,EAAMI,IAAI,CAEtB,KAGGV,6BACaM,EAAMqB,UAAU,wBAClBrB,EAAMsB,QAAQ,oBAClBlB,kBACQI,wCAEFT,oCAAAA,UACPf,kBAAWgB,gBAAAA,EAAAA,EAAMuB,KAAK,SAAXvB,EAAawB,MAAM,0BAAa/B,SAAa,CAAEgC,MAAO,MAAO,sDAWvDL,gBAFJT,6BAPHX,EAAMuB,KAAK,GACHvB,EAAM0B,YAAY,GACvB1B,EAAMmB,QAAQ,GACXnB,EAAM2B,UAAU,GACrB3B,EAAM4B,MAAM,GACV3B,EAAM4B,QAAQ,GAGbvB,+VAFJJ,mBAQXD,GAGV,CAEA,OAAO,MAAMN,aAAe,KACvBC,GACH+B,WAAY,KAAK,EACjBC,OAAQ,KAAK,EACb1B,MAAO,KAAK,EACZwB,aAAc,KAAK,EACnBV,SAAU,KAAK,EACfG,SAAU,KAAK,EACfU,SAAU,KAAK,EACfC,KAAM,KAAK,EACXpB,aAAc,KAAK,EACnBqB,SAAU,KAAK,GACf,CAEFvC,EACE,aACA,KACKG,cACH4B,MAAO,EAAE,GAEX,CAACS,EAAGC,KACF,IAAMC,EAAKD,EAAIE,OAAO,CAChBrC,EAAQV,EACZ,CACEmC,MAAOW,EAAGX,KAAK,CACfP,SAASH,CAAG,CAAEC,CAAI,EAChBoB,EAAGE,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBtB,OAAQ,CAACF,EAAKC,EAAK,AACrB,GAEJ,EACAJ,aAAaN,CAAoB,EAC/B8B,EAAGE,aAAa,CACd,IAAIC,YAAY,aAAc,CAC5BtB,OAAQX,CACV,GAEJ,EACAkC,SAAU,IAAIJ,EAAGK,UAAU,CAACC,MAAM,GAAG,AACvC,EACAR,GAQF,OALA9C,EAAa,KACXgD,EAAGO,eAAe,CAAC,SACnBP,EAAGO,eAAe,CAAC,eACnBP,EAAGO,eAAe,CAAC,MACrB,GACOxD,EAAgBY,EAAUC,EACnC,EAEF,gBAAeD,CAAS"}
|
|
1
|
+
{"version":3,"sources":["../../components/dropdown/index.tsx"],"sourcesContent":["import {\n Show,\n createComponent,\n createEffect,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isFunction } from '@moneko/common';\nimport { customElement } from 'solid-element';\nimport Empty from '../empty';\nimport '../menu';\nimport Popover, { defaultProps as popoverProps } from '../popover';\nimport type { CustomElement, MenuMultipleProps, MenuOption, MenuProps, PopoverProps } from '..';\n\nexport interface BaseDropdownProps extends Omit<PopoverProps, 'content'> {\n /** 打开内容气泡 */\n open?: boolean | null;\n}\nexport interface DropdownProps\n extends Omit<MenuProps, 'openKeys' | 'onOpenChange'>,\n BaseDropdownProps {\n /** 打开内容气泡 */\n open?: boolean | null;\n}\nexport interface DropdownMultipleProps\n extends Omit<MenuMultipleProps, 'openKeys' | 'onOpenChange'>,\n BaseDropdownProps {\n /** 打开内容气泡 */\n open?: boolean | null;\n}\nexport type DropdownElement = CustomElement<DropdownProps>;\nexport type DropdownMultipleElement = CustomElement<DropdownMultipleProps>;\n\nfunction Dropdown(props: DropdownProps | DropdownMultipleProps) {\n const [local, other] = splitProps(props, [\n 'popupClass',\n 'popupCss',\n 'value',\n 'defaultValue',\n 'onChange',\n 'open',\n 'onOpenChange',\n 'fieldNames',\n 'items',\n 'multiple',\n 'toggle',\n ]);\n let portalRef: HTMLDivElement | undefined;\n const [value, setValue] = createSignal<(string | number)[]>([]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [menuOpenKeys, setMenuOpenKeys] = createSignal<(string | number)[]>([]);\n\n function openChange(next: boolean | null) {\n if (isFunction(local.onOpenChange)) {\n local.onOpenChange(next);\n }\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n\n function change(\n e: CustomEvent<[val: (string | number)[] | (string | number), item: MenuOption]>,\n ) {\n const [key, item] = e.detail;\n\n if (isFunction(local.onChange)) {\n local.onChange(key, item);\n }\n if (local.value === void 0) {\n setValue(Array.isArray(key) ? key : [key]);\n }\n if (!local.multiple) {\n openChange(false);\n }\n }\n function menuOpenKeysChange(e: CustomEvent<(string | number)[]>) {\n setMenuOpenKeys(e.detail);\n }\n\n createEffect(() => {\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 createEffect(() => {\n if (local.open !== void 0 && untrack(open) !== local.open) {\n setOpen(local.open);\n }\n });\n\n return (\n <Popover\n popupClass={local.popupClass}\n popupCss={local.popupCss}\n open={open()}\n onOpenChange={openChange}\n content={\n <div ref={portalRef} class=\"container\">\n <Show when={local.items?.length} fallback={<Empty style={{ width: '100%' }} />}>\n <n-menu\n items={local.items}\n default-value={local.defaultValue}\n multiple={local.multiple as true}\n field-names={local.fieldNames}\n toggle={local.toggle}\n disabled={other.disabled}\n value={value()}\n onChange={change}\n open-keys={menuOpenKeys()}\n onOpenChange={menuOpenKeysChange}\n />\n </Show>\n </div>\n }\n {...other}\n />\n );\n}\n\nexport const defaultProps = {\n ...popoverProps,\n fieldNames: void 0,\n toggle: void 0,\n value: void 0,\n defaultValue: void 0,\n onChange: void 0,\n multiple: void 0,\n disabled: void 0,\n type: void 0,\n onOpenChange: void 0,\n openKeys: void 0,\n};\n\ncustomElement<DropdownProps>(\n 'n-dropdown',\n {\n ...defaultProps,\n items: [],\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n items: el.items,\n onChange(key, item) {\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 children: [...el.childNodes.values()],\n } as DropdownProps,\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('items');\n el.removeAttribute('field-names');\n el.removeAttribute('css');\n });\n return createComponent(Dropdown, props);\n },\n);\nexport default Dropdown;\n"],"names":["Show","createComponent","createEffect","createSignal","mergeProps","splitProps","untrack","isFunction","customElement","Empty","Popover","defaultProps","popoverProps","Dropdown","props","portalRef","local","other","value","setValue","open","setOpen","menuOpenKeys","setMenuOpenKeys","openChange","next","onOpenChange","change","e","key","item","detail","onChange","Array","isArray","multiple","menuOpenKeysChange","popupClass","popupCss","items","length","width","defaultValue","fieldNames","toggle","disabled","type","openKeys","_","opt","el","element","dispatchEvent","CustomEvent","children","childNodes","values","removeAttribute"],"mappings":"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"}
|