neko-ui 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/es/basic-config/index.js +1 -1
- package/es/basic-config/index.js.map +1 -1
- package/es/code/index.d.ts +1 -0
- package/es/code/index.js +2 -2
- package/es/code/index.js.map +1 -1
- package/es/code/worker.js +1 -1
- package/es/code/worker.js.map +1 -1
- package/es/date-picker/index.js +1 -1
- package/es/date-picker/index.js.map +1 -1
- package/es/from-schema/index.js.map +1 -1
- package/es/input/index.d.ts +6 -1
- package/es/input/index.js +1 -1
- package/es/input/index.js.map +1 -1
- package/es/input/style.js +2 -1
- package/es/input/style.js.map +1 -1
- package/es/popover/index.js +2 -2
- package/es/popover/index.js.map +1 -1
- package/es/switch/index.d.ts +1 -1
- package/es/switch/index.js.map +1 -1
- package/es/table/index.js +1 -1
- package/es/table/index.js.map +1 -1
- package/es/theme/index.js +1 -1
- package/es/theme/index.js.map +1 -1
- package/lib/basic-config/index.js +1 -1
- package/lib/basic-config/index.js.map +1 -1
- package/lib/code/index.d.ts +1 -0
- package/lib/code/index.js +2 -2
- package/lib/code/index.js.map +1 -1
- package/lib/code/worker.js +1 -1
- package/lib/code/worker.js.map +1 -1
- package/lib/color-palette/index.js +1 -1
- package/lib/color-palette/index.js.map +1 -1
- package/lib/cron/style.js +1 -1
- package/lib/cron/style.js.map +1 -1
- package/lib/date-picker/index.js +1 -1
- package/lib/date-picker/index.js.map +1 -1
- package/lib/date-picker/month.js +1 -1
- package/lib/date-picker/month.js.map +1 -1
- package/lib/date-picker/time.js +1 -1
- package/lib/date-picker/time.js.map +1 -1
- package/lib/dropdown/index.js +1 -1
- package/lib/dropdown/index.js.map +1 -1
- package/lib/from-schema/index.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/input/index.d.ts +6 -1
- package/lib/input/index.js +1 -1
- package/lib/input/index.js.map +1 -1
- package/lib/input/style.js +2 -1
- package/lib/input/style.js.map +1 -1
- package/lib/popover/index.js +2 -2
- package/lib/popover/index.js.map +1 -1
- package/lib/switch/index.d.ts +1 -1
- package/lib/switch/index.js.map +1 -1
- package/lib/table/index.js +1 -1
- package/lib/table/index.js.map +1 -1
- package/lib/tabs/style.js +1 -1
- package/lib/tabs/style.js.map +1 -1
- package/lib/theme/index.js +2 -2
- package/lib/theme/index.js.map +1 -1
- package/package.json +7 -4
- package/umd/index.js +1 -1
package/es/table/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var e,t,r,l;import{_ as n}from"@swc/helpers/_/_extends";import{template as a}from"solid-js/web";import{spread as i}from"solid-js/web";import{mergeProps as o}from"solid-js/web";import"solid-js/web";import{insert as s}from"solid-js/web";import{getOwner as m}from"solid-js/web";import{effect as d}from"solid-js/web";import{createComponent as c}from"solid-js/web";import{addEventListener as u}from"solid-js/web";let p=/*#__PURE__*/a("<span>"),g=/*#__PURE__*/a("<style>"),f=/*#__PURE__*/a('<caption class="table-title"><slot name="title">'),h=/*#__PURE__*/a('<th class="table-cell">'),v=/*#__PURE__*/a('<tfoot class="table-foot"><tr>'),b=/*#__PURE__*/a("<table><thead><tr></tr></thead><tbody>"),y=/*#__PURE__*/a('<n-pagination class="table-pagination">',!0,!1),w=/*#__PURE__*/a("<th>"),_=/*#__PURE__*/a("<tr>"),$=/*#__PURE__*/a('<span class="empty-val">'),j=/*#__PURE__*/a("<td>");import{For as x,Show as z,batch as k,createComponent as S,createEffect as T,createMemo as C,createSignal as O,mergeProps as A,splitProps as V,untrack as K}from"solid-js";import P from"@moneko/common/lib/isObject";import q from"@moneko/common/lib/isString";import E from"@moneko/common/lib/isUndefined";import{css as L,cx as U}from"@moneko/css";import{customElement as B}from"solid-element";import{styles as D}from"./styles";import"../pagination";import F from"../theme";let G={page:1,pageSize:20,total:0,totalText:void 0,size:void 0};function H(e){let{baseStyle:t}=F,[r,l]=V(e,["class","css","loading","summary","summaryText","columns","data","emptyVal","title","align","char","charoff","valign","pagination","size"]),[a]=V(r,["align","char","charoff","valign"]),[S,A]=O(!1),[B,H]=O(1),[I,J]=O(20),[M,N]=O(0);function Q(e){return{width:e.width,align:e.align,valign:e.valign,char:e.char,charoff:e.charoff,colspan:e.colspan,rowspan:e.rowspan}}T(()=>{k(()=>{r.pagination&&(H(r.pagination.page||1),J(r.pagination.pageSize||20),N(r.pagination.total||0))})});let R=C(()=>Object.assign(G,r.pagination)),W=C(()=>{let e=[],t=!1;for(let l in r.columns)if(Object.prototype.hasOwnProperty.call(r.columns,l)){let a=r.columns[l],i=Object.assign({key:l,originKey:l,label:a.toString()},P(a)&&n({label:"order"===a.type&&"序号"||l},a));"order"===i.type&&(t=!0,i.render=function(e,t,r){return(()=>{let e=p();return s(e,()=>(B()-1)*I()+r+1),e})()}),e.push(i)}return K(S)!==t&&A(t),e});function X(e){r.pagination&&(H(e.detail[0]),J(e.detail[1]),null==r.pagination.onChange||r.pagination.onChange.call(r.pagination,...e.detail))}return[(()=>{let e=g();return s(e,t,null),s(e,D,null),s(e,()=>L(r.css),null),e})(),(()=>{let e=b(),t=e.firstChild,n=t.firstChild,d=t.nextSibling;return i(e,o(l,{get class(){return U("table",r.size)},part:"table"}),!1,!0),s(e,c(z,{get when(){return r.title},get children(){let e=f(),t=e.firstChild;return t._$owner=m(),s(t,()=>r.title),e}}),t),i(t,o(a,{class:"table-head"}),!1,!0),s(n,c(x,{get each(){return W()},children:e=>{let t=Q(e);return(()=>{let r=w();return i(r,o(t,{class:"table-cell"}),!1,!0),s(r,()=>e.label),r})()}})),i(d,o(a,{class:"table-body"}),!1,!0),s(d,c(x,{get each(){return r.data},children:(e,t)=>(()=>{let l=_();return s(l,c(x,{get each(){return W()},children:l=>{let n=Q(l),a=C(()=>{if("order"===l.type){let e=R();return(e.page-1)*e.pageSize+t()+1}let n=e[l.key],a=E(n)||null===n;return a?(()=>{let e=$();return s(e,()=>r.emptyVal),e})():n});return(()=>{let r=j();return i(r,o(n,{class:"table-cell"}),!1,!0),s(r,c(z,{get when(){return l.render},get fallback(){return c(a,{})},get children(){return null==l.render?void 0:l.render.call(l,e[l.key],e,t())}})),r})()}})),l})()})),s(e,c(z,{get when(){var u;return null==(u=r.summary)?void 0:u.length},get children(){let e=v(),t=e.firstChild;return i(e,a,!1,!0),s(t,c(z,{get when(){return S()},get children(){let e=h();return i(e,o(()=>Q(W()[0])),!1,!0),s(e,()=>r.summaryText),e}}),null),s(t,c(x,{get each(){return W().filter(e=>!e.type||!["order"].includes(e.type))},children:e=>{let t=Q(e),l=C(()=>{var t,l,n,a;return(null==(t=r.data)?void 0:t.length)&&(null==(l=r.summary)?void 0:l.includes(e.originKey))?(n=r.data,a=e.key,n.reduce(function(e,t){let r=t[a];return q(r)||E(r)||null===r?e:e+t[a]},0)):null});return(()=>{let e=j();return i(e,o(t,{class:"table-cell"}),!1,!0),s(e,l),e})()}}),null),e}}),null),e})(),c(z,{get when(){return r.pagination},get children(){let e=y();return u(e,"change",X),e._$owner=m(),d(t=>{let l=B(),n=I(),a=M(),i=R().totalText,o=R().size||r.size;return l!==t._v$&&(e.page=t._v$=l),n!==t._v$2&&(e.pageSize=t._v$2=n),a!==t._v$3&&(e.total=t._v$3=a),i!==t._v$4&&(e.totalText=t._v$4=i),o!==t._v$5&&(e.size=t._v$5=o),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0,_v$5:void 0}),e}})]}(r=e||(e={})).left="left",r.right="right",r.center="center",r.justify="justify",r.char="char",(l=t||(t={})).top="top",l.middle="middle",l.bottom="bottom",l.baseline="baseline",B("n-table",{class:void 0,css:void 0,loading:!1,columns:{},data:[],emptyVal:"-",title:void 0,char:void 0,charoff:void 0,align:"left",valign:"middle",summary:void 0,summaryText:"合计",pagination:void 0,size:void 0},(e,t)=>{let r=t.element,l=A({css:r.css,columns:r.columns,data:r.data,pagination:r.pagination,summary:r.summary,summaryText:r.summaryText},e,{title:!!r.querySelector("[slot='title']")||e.title});return T(()=>{r.removeAttribute("css"),r.removeAttribute("title"),r.removeAttribute("data")}),S(H,l)});export default H;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/table/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/table/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n batch,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isObject, isString, isUndefined } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { styles } from './styles';\nimport '../pagination';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement, PaginationProps } from '..';\n\ntype Col = Column<Record<string, Any>>;\nconst defaultPagination = { page: 1, pageSize: 20, total: 0, totalText: void 0, size: void 0 };\n\nfunction Table(_: TableProps) {\n const { baseStyle } = theme;\n const [local, other] = splitProps(_, [\n 'class',\n 'css',\n 'loading',\n 'summary',\n 'summaryText',\n 'columns',\n 'data',\n 'emptyVal',\n 'title',\n 'align',\n 'char',\n 'charoff',\n 'valign',\n 'pagination',\n 'size',\n ]);\n const [layout] = splitProps(local, ['align', 'char', 'charoff', 'valign']);\n const [hasOrder, setHasOrder] = createSignal(false);\n const [page, setPage] = createSignal(1);\n const [pageSize, setPageSize] = createSignal(20);\n const [total, setTotal] = createSignal(0);\n\n createEffect(() => {\n batch(() => {\n if (local.pagination) {\n setPage(local.pagination.page || 1);\n setPageSize(local.pagination.pageSize || 20);\n setTotal(local.pagination.total || 0);\n }\n });\n });\n\n function getLayout(col: Col) {\n return {\n width: col.width,\n align: col.align,\n valign: col.valign,\n char: col.char,\n charoff: col.charoff,\n colspan: col.colspan,\n rowspan: col.rowspan,\n };\n }\n function sum(arr: Required<TableProps>['data'], key: string) {\n return arr.reduce(function (prev, curr) {\n const next = curr[key];\n\n if (isString(next) || isUndefined(next) || next === null) {\n return prev;\n }\n return prev + curr[key];\n }, 0);\n }\n const pagination = createMemo(() => Object.assign(defaultPagination, local.pagination));\n const columns = createMemo(() => {\n const cols: Required<Col>[] = [];\n let _hasOrder = false;\n\n for (const key in local.columns) {\n if (Object.prototype.hasOwnProperty.call(local.columns, key)) {\n const col = local.columns[key];\n const _col: Col = Object.assign(\n { key, originKey: key, label: col.toString() },\n isObject(col) && {\n label: (col.type === 'order' && '序号') || key,\n ...col,\n },\n );\n\n if (_col.type === 'order') {\n _hasOrder = true;\n _col.render = function (_val: unknown, _row: unknown, i: number) {\n return <span>{(page() - 1) * pageSize() + i + 1}</span>;\n };\n }\n cols.push(_col as Required<Col>);\n }\n }\n if (untrack(hasOrder) !== _hasOrder) {\n setHasOrder(_hasOrder);\n }\n return cols;\n });\n\n function handlePageChange(e: CustomEvent<[page: number, pageSize: number]>) {\n if (local.pagination) {\n setPage(e.detail[0]);\n setPageSize(e.detail[1]);\n local.pagination.onChange?.(...e.detail);\n }\n }\n\n return (\n <>\n <style>\n {baseStyle()}\n {styles}\n {css(local.css)}\n </style>\n <table {...other} class={cx('table', local.size)} part=\"table\">\n <Show when={local.title}>\n <caption class=\"table-title\">\n <slot name=\"title\">{local.title}</slot>\n </caption>\n </Show>\n <thead {...layout} class=\"table-head\">\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n\n return (\n <th {..._layout} class=\"table-cell\">\n {col.label}\n </th>\n );\n }}\n </For>\n </tr>\n </thead>\n <tbody {...layout} class=\"table-body\">\n <For each={local.data}>\n {(row, i) => {\n return (\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n const Row = createMemo(() => {\n if (col.type === 'order') {\n const _pagination = pagination();\n\n return (_pagination.page - 1) * _pagination.pageSize + i() + 1;\n }\n const val = row[col.key];\n const isEmpty = isUndefined(val) || val === null;\n\n if (isEmpty) {\n return <span class=\"empty-val\">{local.emptyVal}</span>;\n }\n return val;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n <Show when={col.render} fallback={<Row />}>\n {col.render?.(row[col.key], row, i())}\n </Show>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n </tbody>\n <Show when={local.summary?.length}>\n <tfoot class=\"table-foot\" {...layout}>\n <tr>\n <Show when={hasOrder()}>\n <th class=\"table-cell\" {...getLayout(columns()[0])}>\n {local.summaryText}\n </th>\n </Show>\n <For each={columns().filter((c) => !c.type || !['order'].includes(c.type))}>\n {(col) => {\n const _layout = getLayout(col);\n const val = createMemo(() => {\n if (local.data?.length && local.summary?.includes(col.originKey)) {\n return sum(local.data, col.key);\n }\n return null;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n {val()}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n </Show>\n </table>\n <Show when={local.pagination}>\n <n-pagination\n class=\"table-pagination\"\n page={page()}\n page-size={pageSize()}\n total={total()}\n total-text={pagination().totalText}\n size={pagination().size || local.size}\n onChange={handlePageChange}\n />\n </Show>\n </>\n );\n}\n\n/** API\n * @since 2.1.0\n */\nexport interface TableProps<T extends Record<string, Any> = Record<string, Any>> extends Cell {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 加载中 */\n loading?: boolean;\n /** 单元格值为 null 或 undefined 时的回填\n * @default '-'\n */\n emptyVal?: string;\n /** 栏配置 */\n columns?: Record<string, Column<T> | string>;\n /** 数据源 */\n data?: T[];\n /** 表格标题, 支持直接赋值给 'title' 属性, 或者通过[slot=\"title\"]插槽 */\n title?: JSX.Element | 'slot';\n /** 汇总行 */\n summary?: (keyof T)[];\n /** 汇总行描述\n * @default '合计'\n */\n summaryText?: JSX.Element;\n /** 分页器\n * @default false\n */\n pagination?: PaginationProps | false;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSX.Element;\n}\n/** 栏 */\ninterface Column<T extends Record<string, Any>> extends Cell {\n /** 自定义取值的 key */\n key?: keyof T;\n /** 原始 key */\n originKey?: keyof T;\n /** 单元格表头标题 */\n label?: JSX.Element;\n /** 自定义渲染单元格 */\n render?(item: T[keyof T], row: T, index: number): JSX.Element;\n /** 单元格横跨的列数 */\n colspan?: number;\n /** 单元格横跨的行数 */\n rowspan?: number;\n /** 设置为 'order' 时则当作序号行 */\n type?: 'order';\n /** 单元格宽 */\n width?: number;\n}\n\n/** 单元格布局排列 */\ninterface Cell {\n /** 单元格内容的水平对齐方式\n * @default 'left'\n */\n align?: keyof typeof Align;\n /** 规定根据哪个字符来进行文本对齐 */\n char?: string;\n /** 规定第一个对齐字符的偏移量 */\n charoff?: number;\n /** 单元格内容的垂直对齐方式\n * @default 'middle'\n */\n valign?: keyof typeof Valign;\n}\n/** 水平对齐方式 */\nenum Align {\n /** 左对齐 */\n left = 'left',\n /** 右对齐 */\n right = 'right',\n /** 居中对齐 */\n center = 'center',\n /** 对行进行伸展,这样每行都可以有相等的长度 */\n justify = 'justify',\n /** 将内容对准指定字符 */\n char = 'char',\n}\n/** 垂直对齐方式 */\nenum Valign {\n /** 上对齐 */\n top = 'top',\n /** 居中对齐 */\n middle = 'middle',\n /** 下对齐 */\n bottom = 'bottom',\n /** 与基线对齐 */\n baseline = 'baseline',\n}\nexport type TableElement = CustomElement<TableProps>;\n\ncustomElement<TableProps>(\n 'n-table',\n {\n class: void 0,\n css: void 0,\n loading: false,\n columns: {},\n data: [],\n emptyVal: '-',\n title: void 0,\n char: void 0,\n charoff: void 0,\n align: Align.left,\n valign: Valign.middle,\n summary: void 0,\n summaryText: '合计',\n pagination: void 0,\n size: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n columns: el.columns,\n data: el.data,\n pagination: el.pagination,\n summary: el.summary,\n summaryText: el.summaryText,\n },\n _,\n {\n title: !!el.querySelector(\"[slot='title']\") || _.title,\n },\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.removeAttribute('title');\n el.removeAttribute('data');\n });\n return createComponent(Table, props);\n },\n);\nexport default Table;\n"],"names":["Align","Valign","For","Show","batch","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","isObject","isString","isUndefined","css","cx","customElement","styles","theme","defaultPagination","page","pageSize","total","totalText","size","Table","_","baseStyle","local","other","layout","hasOrder","setHasOrder","setPage","setPageSize","setTotal","getLayout","col","width","align","valign","char","charoff","colspan","rowspan","pagination","Object","assign","columns","cols","_hasOrder","key","prototype","hasOwnProperty","call","_col","originKey","label","toString","type","render","_val","_row","i","push","handlePageChange","e","detail","onChange","title","_layout","data","row","Row","_pagination","val","isEmpty","emptyVal","summary","length","summaryText","filter","c","includes","arr","reduce","prev","curr","next","left","right","center","justify","top","middle","bottom","baseline","class","loading","opt","el","element","props","querySelector","removeAttribute"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/table/index.tsx"],"sourcesContent":["import {\n For,\n Show,\n batch,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { isObject, isString, isUndefined } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { styles } from './styles';\nimport '../pagination';\nimport theme from '../theme';\nimport type { BasicConfig, CustomElement, PaginationProps } from '..';\n\ntype Col = Column<Record<string, Any>>;\nconst defaultPagination = { page: 1, pageSize: 20, total: 0, totalText: void 0, size: void 0 };\n\nfunction Table(_: TableProps) {\n const { baseStyle } = theme;\n const [local, other] = splitProps(_, [\n 'class',\n 'css',\n 'loading',\n 'summary',\n 'summaryText',\n 'columns',\n 'data',\n 'emptyVal',\n 'title',\n 'align',\n 'char',\n 'charoff',\n 'valign',\n 'pagination',\n 'size',\n ]);\n const [layout] = splitProps(local, ['align', 'char', 'charoff', 'valign']);\n const [hasOrder, setHasOrder] = createSignal(false);\n const [page, setPage] = createSignal(1);\n const [pageSize, setPageSize] = createSignal(20);\n const [total, setTotal] = createSignal(0);\n\n createEffect(() => {\n batch(() => {\n if (local.pagination) {\n setPage(local.pagination.page || 1);\n setPageSize(local.pagination.pageSize || 20);\n setTotal(local.pagination.total || 0);\n }\n });\n });\n\n function getLayout(col: Col) {\n return {\n width: col.width,\n align: col.align,\n valign: col.valign,\n char: col.char,\n charoff: col.charoff,\n colspan: col.colspan,\n rowspan: col.rowspan,\n };\n }\n function sum(arr: Required<TableProps>['data'], key: string) {\n return arr.reduce(function (prev, curr) {\n const next = curr[key];\n\n if (isString(next) || isUndefined(next) || next === null) {\n return prev;\n }\n return prev + curr[key];\n }, 0);\n }\n const pagination = createMemo(() => Object.assign(defaultPagination, local.pagination));\n const columns = createMemo(() => {\n const cols: Required<Col>[] = [];\n let _hasOrder = false;\n\n for (const key in local.columns) {\n if (Object.prototype.hasOwnProperty.call(local.columns, key)) {\n const col = local.columns[key];\n const _col: Col = Object.assign(\n { key, originKey: key, label: col.toString() },\n isObject(col) && {\n label: (col.type === 'order' && '序号') || key,\n ...col,\n },\n );\n\n if (_col.type === 'order') {\n _hasOrder = true;\n _col.render = function (_val: unknown, _row: unknown, i: number) {\n return <span>{(page() - 1) * pageSize() + i + 1}</span>;\n };\n }\n cols.push(_col as Required<Col>);\n }\n }\n if (untrack(hasOrder) !== _hasOrder) {\n setHasOrder(_hasOrder);\n }\n return cols;\n });\n\n function handlePageChange(e: CustomEvent<[page: number, pageSize: number]>) {\n if (local.pagination) {\n setPage(e.detail[0]);\n setPageSize(e.detail[1]);\n local.pagination.onChange?.(...e.detail);\n }\n }\n\n return (\n <>\n <style>\n {baseStyle()}\n {styles}\n {css(local.css)}\n </style>\n <table {...other} class={cx('table', local.size)} part=\"table\">\n <Show when={local.title}>\n <caption class=\"table-title\">\n <slot name=\"title\">{local.title}</slot>\n </caption>\n </Show>\n <thead {...layout} class=\"table-head\">\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n\n return (\n <th {..._layout} class=\"table-cell\">\n {col.label}\n </th>\n );\n }}\n </For>\n </tr>\n </thead>\n <tbody {...layout} class=\"table-body\">\n <For each={local.data}>\n {(row, i) => {\n return (\n <tr>\n <For each={columns()}>\n {(col) => {\n const _layout = getLayout(col);\n const Row = createMemo(() => {\n if (col.type === 'order') {\n const _pagination = pagination();\n\n return (_pagination.page - 1) * _pagination.pageSize + i() + 1;\n }\n const val = row[col.key];\n const isEmpty = isUndefined(val) || val === null;\n\n if (isEmpty) {\n return <span class=\"empty-val\">{local.emptyVal}</span>;\n }\n return val;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n <Show when={col.render} fallback={<Row />}>\n {col.render?.(row[col.key], row, i())}\n </Show>\n </td>\n );\n }}\n </For>\n </tr>\n );\n }}\n </For>\n </tbody>\n <Show when={local.summary?.length}>\n <tfoot class=\"table-foot\" {...layout}>\n <tr>\n <Show when={hasOrder()}>\n <th class=\"table-cell\" {...getLayout(columns()[0])}>\n {local.summaryText}\n </th>\n </Show>\n <For each={columns().filter((c) => !c.type || !['order'].includes(c.type))}>\n {(col) => {\n const _layout = getLayout(col);\n const val = createMemo(() => {\n if (local.data?.length && local.summary?.includes(col.originKey)) {\n return sum(local.data, col.key);\n }\n return null;\n });\n\n return (\n <td {..._layout} class=\"table-cell\">\n {val()}\n </td>\n );\n }}\n </For>\n </tr>\n </tfoot>\n </Show>\n </table>\n <Show when={local.pagination}>\n <n-pagination\n class=\"table-pagination\"\n page={page()}\n page-size={pageSize()}\n total={total()}\n total-text={pagination().totalText}\n size={pagination().size || local.size}\n onChange={handlePageChange}\n />\n </Show>\n </>\n );\n}\n\n/** API\n * @since 2.1.0\n */\nexport interface TableProps<T extends Record<string, Any> = Record<string, Any>> extends Cell {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 加载中 */\n loading?: boolean;\n /** 单元格值为 null 或 undefined 时的回填\n * @default '-'\n */\n emptyVal?: string;\n /** 栏配置 */\n columns?: Record<string, Column<T> | string>;\n /** 数据源 */\n data?: T[];\n /** 表格标题, 支持直接赋值给 'title' 属性, 或者通过[slot=\"title\"]插槽 */\n title?: JSX.Element | 'slot';\n /** 汇总行 */\n summary?: (keyof T)[];\n /** 汇总行描述\n * @default '合计'\n */\n summaryText?: JSX.Element;\n /** 分页器\n * @default false\n */\n pagination?: PaginationProps | false;\n /** 尺寸\n * @default 'normal'\n */\n size?: BasicConfig['size'];\n children?: JSX.Element;\n}\n/** 栏 */\ninterface Column<T extends Record<string, Any>> extends Cell {\n /** 自定义取值的 key */\n key?: keyof T;\n /** 原始 key */\n originKey?: keyof T;\n /** 单元格表头标题 */\n label?: JSX.Element;\n /** 自定义渲染单元格 */\n render?(item: T[keyof T], row: T, index: number): JSX.Element;\n /** 单元格横跨的列数 */\n colspan?: number;\n /** 单元格横跨的行数 */\n rowspan?: number;\n /** 设置为 'order' 时则当作序号行 */\n type?: 'order';\n /** 单元格宽 */\n width?: number;\n}\n\n/** 单元格布局排列 */\ninterface Cell {\n /** 单元格内容的水平对齐方式\n * @default 'left'\n */\n align?: keyof typeof Align;\n /** 规定根据哪个字符来进行文本对齐 */\n char?: string;\n /** 规定第一个对齐字符的偏移量 */\n charoff?: number;\n /** 单元格内容的垂直对齐方式\n * @default 'middle'\n */\n valign?: keyof typeof Valign;\n}\n/** 水平对齐方式 */\nenum Align {\n /** 左对齐 */\n left = 'left',\n /** 右对齐 */\n right = 'right',\n /** 居中对齐 */\n center = 'center',\n /** 对行进行伸展,这样每行都可以有相等的长度 */\n justify = 'justify',\n /** 将内容对准指定字符 */\n char = 'char',\n}\n/** 垂直对齐方式 */\nenum Valign {\n /** 上对齐 */\n top = 'top',\n /** 居中对齐 */\n middle = 'middle',\n /** 下对齐 */\n bottom = 'bottom',\n /** 与基线对齐 */\n baseline = 'baseline',\n}\nexport type TableElement = CustomElement<TableProps>;\n\ncustomElement<TableProps>(\n 'n-table',\n {\n class: void 0,\n css: void 0,\n loading: false,\n columns: {},\n data: [],\n emptyVal: '-',\n title: void 0,\n char: void 0,\n charoff: void 0,\n align: Align.left,\n valign: Valign.middle,\n summary: void 0,\n summaryText: '合计',\n pagination: void 0,\n size: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n columns: el.columns,\n data: el.data,\n pagination: el.pagination,\n summary: el.summary,\n summaryText: el.summaryText,\n },\n _,\n {\n title: !!el.querySelector(\"[slot='title']\") || _.title,\n },\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n el.removeAttribute('title');\n el.removeAttribute('data');\n });\n return createComponent(Table, props);\n },\n);\nexport default Table;\n"],"names":["Align","Valign","For","Show","batch","createComponent","createEffect","createMemo","createSignal","mergeProps","splitProps","untrack","isObject","isString","isUndefined","css","cx","customElement","styles","theme","defaultPagination","page","pageSize","total","totalText","size","Table","_","baseStyle","local","other","layout","hasOrder","setHasOrder","setPage","setPageSize","setTotal","getLayout","col","width","align","valign","char","charoff","colspan","rowspan","pagination","Object","assign","columns","cols","_hasOrder","key","prototype","hasOwnProperty","call","_col","originKey","label","toString","type","render","_val","_row","i","push","handlePageChange","e","detail","onChange","title","_layout","data","row","Row","_pagination","val","isEmpty","emptyVal","summary","length","summaryText","filter","c","includes","arr","reduce","prev","curr","next","class","loading","opt","el","element","props","querySelector","removeAttribute"],"mappings":"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"}
|
package/es/theme/index.js
CHANGED
|
@@ -4,7 +4,7 @@ var e;import{createEffect as r,createMemo as o,createRoot as a,createSignal as n
|
|
|
4
4
|
* @returns {Record<string, string>} 主题色调
|
|
5
5
|
*/export function generateTheme(e,r){let o=s(e,null==r?void 0:r.dark),a=i(o[5]),n=i(e);return{[`--${r.name}-text`]:a.setAlpha(.65).toRgbaString(),[`--${r.name}-secondary`]:a.setAlpha(.45).toRgbaString(),[`--${r.name}-heading`]:o[5],[`--${r.name}-active`]:o[30],[`--${r.name}-color`]:o[40],// [`--${option.name}-hover`]: obj[50],
|
|
6
6
|
[`--${r.name}-hover`]:m(o[40],o[30],15),[`--${r.name}-secondary-bg`]:o[70],[`--${r.name}-border`]:o[80],// [`--${option.name}-outline`]: obj[90],
|
|
7
|
-
[`--${r.name}-outline`]:m(o[90],o[40],5),[`--${r.name}-selection`]:o[90],[`--on-${r.name}-selection`]:o[10],[`--${r.name}-shadow`]:n.setAlpha(.12).toRgbaString(),[`--${r.name}-details-bg`]:o[95],[`--${r.name}-component-bg`]:o[98],[`--${r.name}-bg`]:o[99],[`--on-${r.name}-bg`]:o[5],[`--${r.name}-base-shadow`]:`0 3px 6px -4px ${n.setAlpha(.12).toRgbaString()}, 0 6px 16px 0 ${n.setAlpha(.08).toRgbaString()}, 0 9px 28px 8px ${n.setAlpha(.05).toRgbaString()}`}}export var ColorScheme;(e=ColorScheme||(ColorScheme={}))
|
|
7
|
+
[`--${r.name}-outline`]:m(o[90],o[40],5),[`--${r.name}-selection`]:o[90],[`--on-${r.name}-selection`]:o[10],[`--${r.name}-shadow`]:n.setAlpha(.12).toRgbaString(),[`--${r.name}-details-bg`]:o[95],[`--${r.name}-component-bg`]:o[98],[`--${r.name}-bg`]:o[99],[`--on-${r.name}-bg`]:o[5],[`--${r.name}-base-shadow`]:`0 3px 6px -4px ${n.setAlpha(.12).toRgbaString()}, 0 6px 16px 0 ${n.setAlpha(.08).toRgbaString()}, 0 9px 28px 8px ${n.setAlpha(.05).toRgbaString()}`}}export var ColorScheme;(e=ColorScheme||(ColorScheme={})).light="light",e.dark="dark",e.auto="auto";export default a(function(){let e=ColorScheme[localStorage.getItem("color-scheme")]||"auto",a=window.matchMedia("(prefers-color-scheme: dark)"),[t,i]=n(e),[m,s]=n(a.matches),[c,g]=n({primary:"#5794ff",warning:"#faad14",error:"#ff4d4f",success:"#52c41a"}),[b,d]=n({primary:"#4d81dc",warning:"#bb8314",error:"#901c22",success:"#419418"}),p=o(()=>generateTheme(c().primary,{name:"primary"})),h=o(()=>generateTheme(c().warning,{name:"warning"})),x=o(()=>generateTheme(c().success,{name:"success"})),u=o(()=>generateTheme(c().error,{name:"error"})),f=o(()=>l`
|
|
8
8
|
:root,
|
|
9
9
|
:host {
|
|
10
10
|
${p()}
|
package/es/theme/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/theme/index.ts"],"sourcesContent":["import {\n type Accessor,\n type Setter,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n getOwner,\n} from 'solid-js';\nimport { colorParse, mixColor, toneColor } from '@moneko/common';\nimport { css } from '@moneko/css';\nexport { toneColor } from '@moneko/common';\n\n/** 生成主题色调\n * @param {string} base 基础颜色\n * @param {ThemeOption} option 配置项\n * @returns {Record<string, string>} 主题色调\n */\nexport function generateTheme(base: string, option: ThemeOption): Record<string, string> {\n const obj = toneColor(base, option?.dark);\n const textColor = colorParse(obj[5]);\n const baseColor = colorParse(base);\n\n return {\n [`--${option.name}-text`]: textColor.setAlpha(0.65).toRgbaString(),\n [`--${option.name}-secondary`]: textColor.setAlpha(0.45).toRgbaString(),\n [`--${option.name}-heading`]: obj[5],\n [`--${option.name}-active`]: obj[30],\n [`--${option.name}-color`]: obj[40],\n // [`--${option.name}-hover`]: obj[50],\n [`--${option.name}-hover`]: mixColor(obj[40], obj[30], 15),\n [`--${option.name}-secondary-bg`]: obj[70],\n [`--${option.name}-border`]: obj[80],\n // [`--${option.name}-outline`]: obj[90],\n [`--${option.name}-outline`]: mixColor(obj[90], obj[40], 5),\n [`--${option.name}-selection`]: obj[90],\n [`--on-${option.name}-selection`]: obj[10],\n [`--${option.name}-shadow`]: baseColor.setAlpha(0.12).toRgbaString(),\n [`--${option.name}-details-bg`]: obj[95],\n [`--${option.name}-component-bg`]: obj[98],\n [`--${option.name}-bg`]: obj[99],\n [`--on-${option.name}-bg`]: obj[5],\n [`--${option.name}-base-shadow`]: `0 3px 6px -4px ${baseColor\n .setAlpha(0.12)\n .toRgbaString()}, 0 6px 16px 0 ${baseColor\n .setAlpha(0.08)\n .toRgbaString()}, 0 9px 28px 8px ${baseColor.setAlpha(0.05).toRgbaString()}`,\n };\n}\n\n/** 颜色模式 */\nexport enum ColorScheme {\n /** 明亮 */\n light = 'light',\n /** 暗黑 */\n dark = 'dark',\n /** 跟随系统 */\n auto = 'auto',\n}\n\nfunction createTheme() {\n const preset =\n ColorScheme[localStorage.getItem('color-scheme') as keyof typeof ColorScheme] || 'auto';\n /** 检测 prefers-color-scheme 媒体查询是否为 light 模式 */\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const [scheme, setScheme] = createSignal<keyof typeof ColorScheme>(preset);\n const [isDark, setIsDark] = createSignal(media.matches);\n const [light, setLight] = createSignal({\n primary: '#5794ff',\n warning: '#faad14',\n error: '#ff4d4f',\n success: '#52c41a',\n });\n const [dark, setDark] = createSignal({\n primary: '#4d81dc',\n warning: '#bb8314',\n error: '#901c22',\n success: '#419418',\n });\n const primary = createMemo(() => generateTheme(light().primary, { name: 'primary' }));\n const warning = createMemo(() => generateTheme(light().warning, { name: 'warning' }));\n const success = createMemo(() => generateTheme(light().success, { name: 'success' }));\n const error = createMemo(() => generateTheme(light().error, { name: 'error' }));\n const lightCss = createMemo(() => {\n return css`\n :root,\n :host {\n ${primary()}\n ${warning()}\n ${success()}\n ${error()}\n --bg: transparent;\n --disable-color: rgb(0 0 0 / 25%);\n --disable-bg: rgb(0 0 0 / 4%);\n --disable-border: #d9d9d9;\n --border-color: var(--primary-border);\n --component-bg: var(--primary-bg);\n }\n `;\n });\n const darkPrimary = createMemo(() =>\n generateTheme(dark().primary, { name: 'primary', dark: true }),\n );\n const darkWarning = createMemo(() =>\n generateTheme(dark().warning, { name: 'warning', dark: true }),\n );\n const darkSuccess = createMemo(() =>\n generateTheme(dark().success, { name: 'success', dark: true }),\n );\n const darkError = createMemo(() => generateTheme(dark().error, { name: 'error', dark: true }));\n const darkCss = createMemo(() => {\n return css`\n :root,\n :host {\n ${darkPrimary()}\n ${darkWarning()}\n ${darkError()}\n ${darkSuccess()}\n --bg: #1c1c1c;\n --disable-color: rgb(255 255 255 / 25%);\n --disable-bg: rgb(255 255 255 / 8%);\n --disable-border: #424242;\n --border-color: #303030;\n --component-bg: #141414;\n --primary-shadow: rgb(0 0 0 / 12%);\n --primary-selection: rgb(255 255 255 / 5%);\n --primary-details-bg: rgb(255 255 255 / 3%);\n --primary-component-bg: #000;\n }\n `;\n });\n const baseCss = css`\n :root,\n :host {\n --font-size: 14px;\n --font-size-sm: 12px;\n --font-size-xs: 10px;\n --font-size-lg: 16px;\n --border-base: 1px solid var(--border-color);\n --border-radius: 8px;\n --text-color: var(--primary-text);\n --text-secondary: var(--primary-secondary);\n --text-heading: var(--primary-heading);\n --text-selection: var(--primary-selection);\n --box-shadow-base: var(--primary-base-shadow);\n --transition-duration: 0.3s;\n\n /* --transition-timing-function: cubic-bezier(0.94, -0.1, 0.1, 1.2); */\n --transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n\n font-size: var(--font-size);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji', Helvetica, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans';\n color: var(--text-color, rgb(0 0 0 / 65%));\n line-height: 1.8;\n }\n\n [disabled]:not([disabled='false']) {\n cursor: not-allowed;\n color: var(--disable-color);\n }\n\n ::selection {\n background-color: var(--text-selection);\n }\n\n ::-webkit-scrollbar {\n inline-size: 4px;\n block-size: 4px;\n }\n `;\n\n function update(e: MediaQueryListEvent) {\n setIsDark(e.matches);\n }\n createEffect(() => {\n const _ = scheme();\n\n setIsDark(_ === 'dark' || (_ === 'auto' && media.matches));\n });\n const baseStyle = createMemo(() => baseCss + (isDark() ? darkCss() : lightCss()));\n\n createEffect(() => {\n if (scheme() === 'auto') {\n // 监听 prefers-color-scheme 媒体查询变化,自动更新颜色方案\n media.addEventListener('change', update);\n } else {\n media.removeEventListener('change', update);\n }\n localStorage.setItem('color-scheme', scheme());\n });\n\n return {\n baseStyle,\n dark,\n setDark,\n light,\n setLight,\n scheme,\n setScheme,\n isDark,\n };\n}\n\n/** API */\nexport interface Theme {\n /** 亮色样式的主要色 */\n light: Accessor<Color>;\n /** 设置亮色样式的主要色 */\n setLight: Setter<Color>;\n /** 黑色样式的主要色 */\n dark: Accessor<Color>;\n /** 设置黑色样式的主要色 */\n setDark: Setter<Color>;\n /** 颜色模式\n * @default 'auto'\n */\n scheme: Accessor<keyof typeof ColorScheme>;\n /** 设置颜色模式 */\n setScheme: Setter<keyof typeof ColorScheme>;\n /** 是否为色模式 */\n isDark: Accessor<boolean>;\n /** 基本都样式表, 响应 scheme 变化 */\n baseStyle: Accessor<string>;\n}\n\n/** 主要色 */\ninterface Color {\n /** 主要\n * @default '#5794ff'\n */\n primary: string;\n /** 警告\n * @default '#faad14'\n */\n warning: string;\n /** 错误\n * @default '#ff4d4f'\n */\n error: string;\n /** 成功\n * @default '#52c41a'\n */\n success: string;\n}\n\nexport interface ThemeOption {\n /** 是否采用暗色算法\n * @default false\n */\n dark?: boolean;\n /** 颜色名称 */\n name: string;\n}\n\nexport default createRoot<Theme>(createTheme, getOwner());\n"],"names":["ColorScheme","createEffect","createMemo","createRoot","createSignal","getOwner","colorParse","mixColor","toneColor","css","generateTheme","base","option","obj","dark","textColor","baseColor","name","setAlpha","toRgbaString","light","auto","preset","localStorage","getItem","media","window","matchMedia","scheme","setScheme","isDark","setIsDark","matches","setLight","primary","warning","error","success","setDark","lightCss","darkPrimary","darkWarning","darkSuccess","darkError","darkCss","baseCss","update","e","_","baseStyle","addEventListener","removeEventListener","setItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/theme/index.ts"],"sourcesContent":["import {\n type Accessor,\n type Setter,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n getOwner,\n} from 'solid-js';\nimport { colorParse, mixColor, toneColor } from '@moneko/common';\nimport { css } from '@moneko/css';\nexport { toneColor } from '@moneko/common';\n\n/** 生成主题色调\n * @param {string} base 基础颜色\n * @param {ThemeOption} option 配置项\n * @returns {Record<string, string>} 主题色调\n */\nexport function generateTheme(base: string, option: ThemeOption): Record<string, string> {\n const obj = toneColor(base, option?.dark);\n const textColor = colorParse(obj[5]);\n const baseColor = colorParse(base);\n\n return {\n [`--${option.name}-text`]: textColor.setAlpha(0.65).toRgbaString(),\n [`--${option.name}-secondary`]: textColor.setAlpha(0.45).toRgbaString(),\n [`--${option.name}-heading`]: obj[5],\n [`--${option.name}-active`]: obj[30],\n [`--${option.name}-color`]: obj[40],\n // [`--${option.name}-hover`]: obj[50],\n [`--${option.name}-hover`]: mixColor(obj[40], obj[30], 15),\n [`--${option.name}-secondary-bg`]: obj[70],\n [`--${option.name}-border`]: obj[80],\n // [`--${option.name}-outline`]: obj[90],\n [`--${option.name}-outline`]: mixColor(obj[90], obj[40], 5),\n [`--${option.name}-selection`]: obj[90],\n [`--on-${option.name}-selection`]: obj[10],\n [`--${option.name}-shadow`]: baseColor.setAlpha(0.12).toRgbaString(),\n [`--${option.name}-details-bg`]: obj[95],\n [`--${option.name}-component-bg`]: obj[98],\n [`--${option.name}-bg`]: obj[99],\n [`--on-${option.name}-bg`]: obj[5],\n [`--${option.name}-base-shadow`]: `0 3px 6px -4px ${baseColor\n .setAlpha(0.12)\n .toRgbaString()}, 0 6px 16px 0 ${baseColor\n .setAlpha(0.08)\n .toRgbaString()}, 0 9px 28px 8px ${baseColor.setAlpha(0.05).toRgbaString()}`,\n };\n}\n\n/** 颜色模式 */\nexport enum ColorScheme {\n /** 明亮 */\n light = 'light',\n /** 暗黑 */\n dark = 'dark',\n /** 跟随系统 */\n auto = 'auto',\n}\n\nfunction createTheme() {\n const preset =\n ColorScheme[localStorage.getItem('color-scheme') as keyof typeof ColorScheme] || 'auto';\n /** 检测 prefers-color-scheme 媒体查询是否为 light 模式 */\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const [scheme, setScheme] = createSignal<keyof typeof ColorScheme>(preset);\n const [isDark, setIsDark] = createSignal(media.matches);\n const [light, setLight] = createSignal({\n primary: '#5794ff',\n warning: '#faad14',\n error: '#ff4d4f',\n success: '#52c41a',\n });\n const [dark, setDark] = createSignal({\n primary: '#4d81dc',\n warning: '#bb8314',\n error: '#901c22',\n success: '#419418',\n });\n const primary = createMemo(() => generateTheme(light().primary, { name: 'primary' }));\n const warning = createMemo(() => generateTheme(light().warning, { name: 'warning' }));\n const success = createMemo(() => generateTheme(light().success, { name: 'success' }));\n const error = createMemo(() => generateTheme(light().error, { name: 'error' }));\n const lightCss = createMemo(() => {\n return css`\n :root,\n :host {\n ${primary()}\n ${warning()}\n ${success()}\n ${error()}\n --bg: transparent;\n --disable-color: rgb(0 0 0 / 25%);\n --disable-bg: rgb(0 0 0 / 4%);\n --disable-border: #d9d9d9;\n --border-color: var(--primary-border);\n --component-bg: var(--primary-bg);\n }\n `;\n });\n const darkPrimary = createMemo(() =>\n generateTheme(dark().primary, { name: 'primary', dark: true }),\n );\n const darkWarning = createMemo(() =>\n generateTheme(dark().warning, { name: 'warning', dark: true }),\n );\n const darkSuccess = createMemo(() =>\n generateTheme(dark().success, { name: 'success', dark: true }),\n );\n const darkError = createMemo(() => generateTheme(dark().error, { name: 'error', dark: true }));\n const darkCss = createMemo(() => {\n return css`\n :root,\n :host {\n ${darkPrimary()}\n ${darkWarning()}\n ${darkError()}\n ${darkSuccess()}\n --bg: #1c1c1c;\n --disable-color: rgb(255 255 255 / 25%);\n --disable-bg: rgb(255 255 255 / 8%);\n --disable-border: #424242;\n --border-color: #303030;\n --component-bg: #141414;\n --primary-shadow: rgb(0 0 0 / 12%);\n --primary-selection: rgb(255 255 255 / 5%);\n --primary-details-bg: rgb(255 255 255 / 3%);\n --primary-component-bg: #000;\n }\n `;\n });\n const baseCss = css`\n :root,\n :host {\n --font-size: 14px;\n --font-size-sm: 12px;\n --font-size-xs: 10px;\n --font-size-lg: 16px;\n --border-base: 1px solid var(--border-color);\n --border-radius: 8px;\n --text-color: var(--primary-text);\n --text-secondary: var(--primary-secondary);\n --text-heading: var(--primary-heading);\n --text-selection: var(--primary-selection);\n --box-shadow-base: var(--primary-base-shadow);\n --transition-duration: 0.3s;\n\n /* --transition-timing-function: cubic-bezier(0.94, -0.1, 0.1, 1.2); */\n --transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n\n font-size: var(--font-size);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,\n 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol',\n 'Noto Color Emoji', Helvetica, Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans';\n color: var(--text-color, rgb(0 0 0 / 65%));\n line-height: 1.8;\n }\n\n [disabled]:not([disabled='false']) {\n cursor: not-allowed;\n color: var(--disable-color);\n }\n\n ::selection {\n background-color: var(--text-selection);\n }\n\n ::-webkit-scrollbar {\n inline-size: 4px;\n block-size: 4px;\n }\n `;\n\n function update(e: MediaQueryListEvent) {\n setIsDark(e.matches);\n }\n createEffect(() => {\n const _ = scheme();\n\n setIsDark(_ === 'dark' || (_ === 'auto' && media.matches));\n });\n const baseStyle = createMemo(() => baseCss + (isDark() ? darkCss() : lightCss()));\n\n createEffect(() => {\n if (scheme() === 'auto') {\n // 监听 prefers-color-scheme 媒体查询变化,自动更新颜色方案\n media.addEventListener('change', update);\n } else {\n media.removeEventListener('change', update);\n }\n localStorage.setItem('color-scheme', scheme());\n });\n\n return {\n baseStyle,\n dark,\n setDark,\n light,\n setLight,\n scheme,\n setScheme,\n isDark,\n };\n}\n\n/** API */\nexport interface Theme {\n /** 亮色样式的主要色 */\n light: Accessor<Color>;\n /** 设置亮色样式的主要色 */\n setLight: Setter<Color>;\n /** 黑色样式的主要色 */\n dark: Accessor<Color>;\n /** 设置黑色样式的主要色 */\n setDark: Setter<Color>;\n /** 颜色模式\n * @default 'auto'\n */\n scheme: Accessor<keyof typeof ColorScheme>;\n /** 设置颜色模式 */\n setScheme: Setter<keyof typeof ColorScheme>;\n /** 是否为色模式 */\n isDark: Accessor<boolean>;\n /** 基本都样式表, 响应 scheme 变化 */\n baseStyle: Accessor<string>;\n}\n\n/** 主要色 */\ninterface Color {\n /** 主要\n * @default '#5794ff'\n */\n primary: string;\n /** 警告\n * @default '#faad14'\n */\n warning: string;\n /** 错误\n * @default '#ff4d4f'\n */\n error: string;\n /** 成功\n * @default '#52c41a'\n */\n success: string;\n}\n\nexport interface ThemeOption {\n /** 是否采用暗色算法\n * @default false\n */\n dark?: boolean;\n /** 颜色名称 */\n name: string;\n}\n\nexport default createRoot<Theme>(createTheme, getOwner());\n"],"names":["ColorScheme","createEffect","createMemo","createRoot","createSignal","getOwner","colorParse","mixColor","toneColor","css","generateTheme","base","option","obj","dark","textColor","baseColor","name","setAlpha","toRgbaString","preset","localStorage","getItem","media","window","matchMedia","scheme","setScheme","isDark","setIsDark","matches","light","setLight","primary","warning","error","success","setDark","lightCss","darkPrimary","darkWarning","darkSuccess","darkError","darkCss","baseCss","update","e","_","baseStyle","addEventListener","removeEventListener","setItem"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var r,e,n,i,o,a;Object.defineProperty(exports,"__esModule",{value:!0}),function(r,e){for(var n in e)Object.defineProperty(r,n,{enumerable:!0,get:e[n]})}(exports,{
|
|
1
|
+
"use strict";var r,e,n,i,o,a;Object.defineProperty(exports,"__esModule",{value:!0}),function(r,e){for(var n in e)Object.defineProperty(r,n,{enumerable:!0,get:e[n]})}(exports,{FieldName:function(){return n},Size:function(){return r},Status:function(){return e}}),(i=r||(r={})).small="small",i.normal="normal",i.large="large",(o=e||(e={})).normal="normal",o.success="success",o.warning="warning",o.error="error",o.info="info",o.primary="primary",(a=n||(n={})).label="label",a.value="value",a.options="options",a.children="children",a.icon="icon",a.suffix="suffix";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/basic-config/index.ts"],"sourcesContent":["export interface BasicConfig {\n /** 组件状态\n * @default 'normal'\n */\n status: keyof typeof Status;\n /** 组件尺寸\n * @default 'normal'\n */\n size: keyof typeof Size;\n /** 自定义 'label'、'value'、'options' 等映射的key */\n fieldName: Partial<{ [key in keyof typeof FieldName]: string }>;\n}\n\nexport enum Size {\n /** 小 */\n small = 'small',\n /** 默认: 中 */\n normal = 'normal',\n /** 大 */\n large = 'large',\n}\n\nexport enum Status {\n /** 默认 */\n normal = 'normal',\n /** 成功 */\n success = 'success',\n /** 警告 */\n warning = 'warning',\n /** 错误 */\n error = 'error',\n /** 详细 */\n info = 'info',\n /** 主要 */\n primary = 'primary',\n}\n\nexport interface BaseOption {\n /** 图标 */\n icon?: JSX.Element;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSX.Element;\n /** 不可用状态 */\n disabled?: boolean;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式 */\n style?: Record<string, unknown>;\n /** 选项状态\n * @default 'normal'\n */\n status?: Status;\n /** 分组子选项 */\n options?: (BaseOption | string)[];\n [key: string]: Any;\n}\n\nexport enum FieldName {\n /** 标题 */\n label = 'label',\n /** 值 */\n value = 'value',\n /** 分组子选项 */\n options = 'options',\n /** 子选项 */\n children = 'children',\n /** 图标 */\n icon = 'icon',\n /** 后缀图标 */\n suffix = 'suffix',\n}\n"],"names":["Size","Status","FieldName"
|
|
1
|
+
{"version":3,"sources":["../../components/basic-config/index.ts"],"sourcesContent":["export interface BasicConfig {\n /** 组件状态\n * @default 'normal'\n */\n status: keyof typeof Status;\n /** 组件尺寸\n * @default 'normal'\n */\n size: keyof typeof Size;\n /** 自定义 'label'、'value'、'options' 等映射的key */\n fieldName: Partial<{ [key in keyof typeof FieldName]: string }>;\n}\n\nexport enum Size {\n /** 小 */\n small = 'small',\n /** 默认: 中 */\n normal = 'normal',\n /** 大 */\n large = 'large',\n}\n\nexport enum Status {\n /** 默认 */\n normal = 'normal',\n /** 成功 */\n success = 'success',\n /** 警告 */\n warning = 'warning',\n /** 错误 */\n error = 'error',\n /** 详细 */\n info = 'info',\n /** 主要 */\n primary = 'primary',\n}\n\nexport interface BaseOption {\n /** 图标 */\n icon?: JSX.Element;\n /** 值 */\n value?: string | number;\n /** 标题 */\n label?: JSX.Element;\n /** 不可用状态 */\n disabled?: boolean;\n /** 自定义类名 */\n class?: string;\n /** 自定义样式 */\n style?: Record<string, unknown>;\n /** 选项状态\n * @default 'normal'\n */\n status?: Status;\n /** 分组子选项 */\n options?: (BaseOption | string)[];\n [key: string]: Any;\n}\n\nexport enum FieldName {\n /** 标题 */\n label = 'label',\n /** 值 */\n value = 'value',\n /** 分组子选项 */\n options = 'options',\n /** 子选项 */\n children = 'children',\n /** 图标 */\n icon = 'icon',\n /** 后缀图标 */\n suffix = 'suffix',\n}\n"],"names":["Size","Status","FieldName"],"mappings":"uBAaYA,EASAC,EAqCAC,4OA9CAF,EAAAA,IAAAA,wDASAC,EAAAA,IAAAA,kHAqCAC,EAAAA,IAAAA"}
|
package/lib/code/index.d.ts
CHANGED
package/lib/code/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return g}});const e=require("@swc/helpers/_/_interop_require_default"),t=require("solid-js/web"),n=require("solid-js"),r=/*#__PURE__*/e._(require("@moneko/common/lib/isFunction")),l=/*#__PURE__*/e._(require("@moneko/common/lib/setClipboard")),i=require("@moneko/css"),o=require("solid-element"),a=require("./style"),s=/*#__PURE__*/e._(require("../prism/css"));require("../prism/prism.js");const c=/*#__PURE__*/e._(require("../theme")),u=/*#__PURE__*/(0,t.template)('<div class="toolbar"><button class="toolbar-copy">'),d=/*#__PURE__*/(0,t.template)("<pre><code>"),v=/*#__PURE__*/(0,t.template)("<style>"),m=/*#__PURE__*/(0,t.template)("<div><textarea>");function f(e){let o;let{baseStyle:f}=c.default,[g,p]=(0,n.createSignal)(""),[h,b]=(0,n.createSignal)(20);function _(){(0,l.default)((0,n.untrack)(g),o)}function $(){return(()=>{let r=d(),l=r.firstChild,a=o;return(0,t.insert)(r,(0,t.createComponent)(n.Show,{get when(){return e.toolbar},get children(){let n=u(),r=n.firstChild;return(0,t.addEventListener)(r,"click",_,!0),(0,t.effect)(()=>(0,t.setAttribute)(n,"data-lang",e.lang?.split(" ")[0])),n}}),l),"function"==typeof a?(0,t.use)(a,l):o=l,(0,t.effect)(n=>{let o=(0,i.cx)(`language-${e.lang}`,e.lineNumber&&"line-numbers",!e.toolbar&&"not-toolbar",!e.edit&&e.class),a=`language-${e.lang}`;return o!==n._v$&&(0,t.className)(r,n._v$=o),a!==n._v$2&&(0,t.className)(l,n._v$2=a),n},{_v$:void 0,_v$2:void 0}),r})()}function w({target:t}){let n=`${t.value}${/\n$/.test(t.value)?"":""}`;p(n),(0,r.default)(e.onChange)&&e.onChange(n)}return(// const work = new Worker(new URL('./worker.ts', import.meta.url));
|
|
2
2
|
// work.addEventListener('message', update);
|
|
3
3
|
// work.postMessage({
|
|
4
4
|
// lang: props.lang,
|
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
// onCleanup(() => {
|
|
8
8
|
// work.terminate();
|
|
9
9
|
// });
|
|
10
|
-
(0,n.createEffect)(()=>{if(e.code){let t=e.code.replace(/^\n/,"");try{
|
|
10
|
+
(0,n.createEffect)(()=>{if(e.code){let t=e.code.replace(/^\n/,"");try{p(decodeURIComponent(t))}catch(e){p(t)}}else p("")}),(0,n.createEffect)(()=>{!function(t){var n;if(!t.code)return;let r=t.lang||"markup";/^diff-([\w-]+)/i.test(r)&&(window.Prism.languages[r]=window.Prism.languages.diff),n={data:window.Prism.highlight(t.code,window.Prism.languages[r],r)},o.innerHTML=n.data,b(o.getBoundingClientRect().height-(e.toolbar?40:16))}({lang:e.lang,code:g()})}),[(()=>{let n=v();return(0,t.insert)(n,f,null),(0,t.insert)(n,s.default,null),(0,t.insert)(n,a.style,null),(0,t.insert)(n,()=>(0,i.css)(e.css),null),n})(),(0,t.createComponent)(n.Show,{get when(){return e.edit},get fallback(){return $()},get children(){let n=m(),r=n.firstChild;return(0,t.addEventListener)(r,"input",w,!0),(0,t.insert)(n,$,null),(0,t.effect)(l=>{let o=(0,i.cx)("n-editor",e.class),a=(0,i.cx)(e.lineNumber&&"line-numbers",!e.toolbar&&"not-toolbar"),s=`${h()}px`;return o!==l._v$3&&(0,t.className)(n,l._v$3=o),a!==l._v$4&&(0,t.className)(r,l._v$4=a),s!==l._v$5&&(null!=(l._v$5=s)?r.style.setProperty("height",s):r.style.removeProperty("height")),l},{_v$3:void 0,_v$4:void 0,_v$5:void 0}),(0,t.effect)(()=>r.value=g()),n}})])}(0,o.customElement)("n-code",{class:void 0,code:void 0,lang:void 0,children:void 0,edit:void 0,toolbar:void 0,css:void 0,lineNumber:void 0,onChange:void 0},(e,t)=>{let r=t.element,l=(0,n.mergeProps)({code:r.textContent,css:r.css,onChange(e){r.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return(0,n.createEffect)(()=>{r.replaceChildren(),r.removeAttribute("css")}),(0,n.createComponent)(f,l)});const g=f;(0,t.delegateEvents)(["click","input"]);
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/lib/code/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import { Show, createComponent, createEffect, createSignal, mergeProps, untrack } from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport prismCss from '../prism/css';\nimport
|
|
1
|
+
{"version":3,"sources":["../../components/code/index.tsx"],"sourcesContent":["import { Show, createComponent, createEffect, createSignal, mergeProps, untrack } from 'solid-js';\nimport { isFunction, setClipboard } from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style } from './style';\nimport prismCss from '../prism/css';\nimport '../prism/prism.js';\nimport theme from '../theme';\nimport type { CustomElement } from '..';\n\nexport interface CodeProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 内容 */\n code?: string;\n /** 语言 */\n lang?: string;\n /** 显示代码行号 */\n lineNumber?: boolean;\n /** 支持编辑 */\n edit?: boolean;\n /** 开启代码块工具条 */\n toolbar?: boolean;\n /** 编辑修改时的回调 */\n onChange?: (code: string) => void;\n children?: JSX.Element;\n}\n\nexport type CodeElement = CustomElement<CodeProps>;\n\nfunction Code(props: CodeProps) {\n const { baseStyle } = theme;\n let codeEl: HTMLPreElement;\n const [code, setCode] = createSignal<string>('');\n const [hei, setHei] = createSignal(20);\n\n function copy() {\n setClipboard(untrack(code), codeEl);\n }\n function pre() {\n return (\n <pre\n class={cx(\n `language-${props.lang}`,\n props.lineNumber && 'line-numbers',\n !props.toolbar && 'not-toolbar',\n !props.edit && props.class,\n )}\n >\n <Show when={props.toolbar}>\n <div class=\"toolbar\" data-lang={props.lang?.split(' ')[0]}>\n <button class=\"toolbar-copy\" onClick={copy} />\n </div>\n </Show>\n <code ref={codeEl} class={`language-${props.lang}`} />\n </pre>\n );\n }\n function change({ target }: { target: HTMLTextAreaElement }) {\n const c = `${target.value}${/\\n$/.test(target.value) ? '\\u200b' : ''}`;\n\n setCode(c);\n if (isFunction(props.onChange)) {\n props.onChange(c);\n }\n }\n function update(e: { data: string }) {\n codeEl.innerHTML = e.data;\n setHei(codeEl.getBoundingClientRect().height - (props.toolbar ? 40 : 16));\n }\n function postMessage(opt: { lang?: string; code?: string }) {\n if (!opt.code) return;\n const _lang = opt.lang || 'markup';\n\n if (/^diff-([\\w-]+)/i.test(_lang)) {\n window.Prism.languages[_lang] = window.Prism.languages.diff;\n }\n update({\n data: window.Prism.highlight(opt.code, window.Prism.languages[_lang], _lang),\n });\n }\n\n // const work = new Worker(new URL('./worker.ts', import.meta.url));\n\n // work.addEventListener('message', update);\n\n // work.postMessage({\n // lang: props.lang,\n // code: code(),\n // });\n // onCleanup(() => {\n // work.terminate();\n // });\n createEffect(() => {\n if (props.code) {\n const _code = props.code.replace(/^\\n/, '');\n\n try {\n setCode(decodeURIComponent(_code));\n } catch (error) {\n setCode(_code);\n }\n } else {\n setCode('');\n }\n });\n createEffect(() => {\n postMessage({\n lang: props.lang,\n code: code(),\n });\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {prismCss()}\n {style}\n {css(props.css)}\n </style>\n <Show when={props.edit} fallback={pre()}>\n <div class={cx('n-editor', props.class)}>\n <textarea\n value={code()}\n class={cx(props.lineNumber && 'line-numbers', !props.toolbar && 'not-toolbar')}\n style={{ height: `${hei()}px` }}\n onInput={change}\n />\n {pre()}\n </div>\n </Show>\n </>\n );\n}\n\ncustomElement<CodeProps>(\n 'n-code',\n {\n class: void 0,\n code: void 0,\n lang: void 0,\n children: void 0,\n edit: void 0,\n toolbar: void 0,\n css: void 0,\n lineNumber: void 0,\n onChange: void 0,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n code: el.textContent,\n css: el.css,\n onChange(val: string) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: val,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.replaceChildren();\n el.removeAttribute('css');\n });\n\n return createComponent(Code, props);\n },\n);\nexport default Code;\n"],"names":["Code","props","codeEl","baseStyle","theme","code","setCode","createSignal","hei","setHei","copy","setClipboard","untrack","pre","Show","toolbar","lang","split","cx","lineNumber","edit","class","change","target","c","value","test","isFunction","onChange","createEffect","_code","replace","decodeURIComponent","error","postMessage","opt","e","_lang","window","Prism","languages","diff","data","highlight","innerHTML","getBoundingClientRect","height","prismCss","style","css","customElement","children","_","el","element","mergeProps","textContent","val","dispatchEvent","CustomEvent","detail","replaceChildren","removeAttribute","createComponent"],"mappings":"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"}
|
package/lib/code/worker.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";self.Prism={disableWorkerMessageHandler:!0},self.importScripts(new URL("../prism/prism.js",require("url").pathToFileURL(__filename).toString()).toString()),self.addEventListener("message",function(e){let s;try{let{code:i,lang:
|
|
1
|
+
"use strict";self.Prism={disableWorkerMessageHandler:!0,languages:{},highlight:e=>e},self.importScripts(new URL("../prism/prism.js",require("url").pathToFileURL(__filename).toString()).toString()),self.addEventListener("message",function(e){let s;try{let{code:i,lang:l}=e.data;s=self.Prism.highlight&&self.Prism.languages?self.Prism.highlight(i,self.Prism.languages[l],l):i}catch(e){s=e}self.postMessage(s);// 向主线程发送消息
|
|
2
2
|
},!1);
|
|
3
3
|
//# sourceMappingURL=worker.js.map
|
package/lib/code/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.Prism = {\n disableWorkerMessageHandler: true,\n};\nself.importScripts(new URL('../prism/prism.js', import.meta.url).toString());\nself.addEventListener(\n 'message',\n function (e) {\n let result;\n\n try {\n const { code, lang } = e.data;\n\n if (self.Prism.highlight && self.Prism.languages) {\n result = self.Prism.highlight(code, self.Prism.languages[lang], lang);\n } else {\n result = code;\n }\n } catch (error) {\n result = error;\n }\n self.postMessage(result); // 向主线程发送消息\n },\n false,\n);\n"],"names":["self","Prism","disableWorkerMessageHandler","
|
|
1
|
+
{"version":3,"sources":["../../components/code/worker.ts"],"sourcesContent":["self.Prism = {\n disableWorkerMessageHandler: true,\n languages: {},\n highlight(code) {\n return code;\n },\n};\nself.importScripts(new URL('../prism/prism.js', import.meta.url).toString());\nself.addEventListener(\n 'message',\n function (e) {\n let result;\n\n try {\n const { code, lang } = e.data;\n\n if (self.Prism.highlight && self.Prism.languages) {\n result = self.Prism.highlight(code, self.Prism.languages[lang], lang);\n } else {\n result = code;\n }\n } catch (error) {\n result = error;\n }\n self.postMessage(result); // 向主线程发送消息\n },\n false,\n);\n"],"names":["self","Prism","disableWorkerMessageHandler","languages","highlight","code","importScripts","URL","toString","addEventListener","e","result","lang","data","error","postMessage"],"mappings":"YAAAA,CAAAA,KAAKC,KAAK,CAAG,CACXC,4BAA6B,CAAA,EAC7BC,UAAW,CAAC,EACZC,UAAAA,AAAUC,GACDA,CAEX,EACAL,KAAKM,aAAa,CAAC,IAAIC,IAAI,oBAAqB,qDAAiBC,QAAQ,IACzER,KAAKS,gBAAgB,CACnB,UACA,SAAUC,CAAC,EACT,IAAIC,EAEJ,GAAI,CACF,GAAM,CAAEN,KAAAA,CAAI,CAAEO,KAAAA,CAAI,CAAE,CAAGF,EAAEG,IAAI,CAG3BF,EADEX,KAAKC,KAAK,CAACG,SAAS,EAAIJ,KAAKC,KAAK,CAACE,SAAS,CACrCH,KAAKC,KAAK,CAACG,SAAS,CAACC,EAAML,KAAKC,KAAK,CAACE,SAAS,CAACS,EAAK,CAAEA,GAEvDP,CAEb,CAAE,MAAOS,EAAO,CACdH,EAASG,CACX,CACAd,KAAKe,WAAW,CAACJ,EAAS,YAAW;AACvC,EACA,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{default:function(){return C},defaultColorPaletteProps:function(){return y}});const e=require("@swc/helpers/_/_interop_require_default"),t=require("solid-js/web"),n=require("solid-js"),r=/*#__PURE__*/e._(require("@moneko/common/lib/colorParse")),l=/*#__PURE__*/e._(require("@moneko/common/lib/isFunction")),a=/*#__PURE__*/e._(require("@moneko/common/lib/passiveSupported")),i=/*#__PURE__*/e._(require("@moneko/common/lib/setClipboard")),o=/*#__PURE__*/e._(require("@moneko/common/lib/throttle")),u=require("@moneko/css"),s=require("solid-element"),c=require("./style");require("../dropdown"),require("../input"),require("../input-number");const d=/*#__PURE__*/e._(require("../theme")),p=/*#__PURE__*/(0,t.template)("<style>"),m=/*#__PURE__*/(0,t.template)("<n-input>",!0,!1),v=/*#__PURE__*/(0,t.template)('<i class="eye-dropper">'),f=/*#__PURE__*/(0,t.template)('<div><div class="picker"></div><div class="chooser"><div class="range"><input class="slider hue" min="0" max="360" type="range"><input class="slider opacity" min="0" max="1" step="0.01" type="range"></div><div class="preview"></div></div><div class="form"><n-dropdown placement="right" trigger="click"><span class="switch"></span></n-dropdown></div><div class="color">',!0,!1),g=/*#__PURE__*/(0,t.template)("<n-input-number>",!0,!1),h=/*#__PURE__*/(0,t.template)("<i>");function b(e){let s;let{baseStyle:b}=d.default,y=(0,n.mergeProps)({defaultValue:"#5794ff"},e),C=[{label:"RGBA",value:"rgba",handleClosed:!1},{label:"HSLA",value:"hsla",handleClosed:!1},{label:"HEXA",value:"hexa",handleClosed:!1}],w=["#f44336","#E91E63","#9C27B0","#673AB7","#3F51B5","#2196F3","#00BCD4","#009688","#4CAF50","#CDDC39","#FF9800","#795548","#607D8B"],x={class:"input",size:"small",css:".input{text-align:center;font-size:12px;}"},[E,k]=(0,n.createSignal)(// eslint-disable-next-line solid/reactivity
|
|
2
2
|
(0,r.default)(y.value||y.defaultValue)),[S,q]=(0,n.createSignal)(!1);function _(e){return e?Number((100*e).toFixed()):e}function P(e){let t=e;return"string"==typeof e&&(t=e.replace(/[^\d]/g,"")),t/100}let $=(0,n.createMemo)(()=>{var e;let t=E(),n=t[e=t.type,`to${e[0].toUpperCase()+e.slice(1)}`]();return(0,l.default)(y.onChange)&&n.toString()!==y.value&&y.onChange(n.toString()),n});function L(e=y.defaultValue){(0,n.untrack)($).toString()!==e&&k((0,r.default)(e))}function B(e){e.target&&(e.target.value=e.detail)}function M(e){e.target?.value&&L(e.target.value)}function F(e){"Enter"===e.key&&"string"==typeof e.target?.value&&L(e.target.value)}function D(e){if(s){let{x:t,y:r,width:l,height:a}=s.getBoundingClientRect(),i=(0,n.untrack)(E),o=i.value;o[1]=Math.floor(Math.min(Math.max(0,(e.clientX-t)/l*100),100)),o[2]=Math.floor(100-Math.min(Math.max(0,(e.clientY-r)/a*100),100)),k({...i,value:o})}}function O(e,t,l){if("number"==typeof t){let a=(0,n.untrack)(E),i=3===e||"hsva"===l,o=i?a.value:(0,n.untrack)($);o[e]=t||0,i?k({...a,value:o}):k((0,r.default)(o.toString()))}}function j(e){q(!0),D(e)}function A(){q(!1)}function H(e){k(t=>({...t,type:e.detail[0]}))}function R(e){(0,i.default)((0,n.untrack)($).toString(),e.target)}async function N(){if(window.EyeDropper){let e=await new window.EyeDropper().open();e.sRGBHex&&L(e.sRGBHex);return}}let V=(0,n.createMemo)(()=>{let e=E(),t=e.value;return`.palette {--c:${e.toRgbaString()};--h:${t[0]};--s:${t[1]};--v:${t[2]};--a:${t[3]};}`});return(0,n.createEffect)(()=>{(0,o.default)(L,8)(y.value)}),(0,n.createEffect)(()=>{S()&&document.body.addEventListener("mousemove",D,{passive:a.default}),(0,n.onCleanup)(()=>{document.body.removeEventListener("mousemove",D,!1)})}),(0,n.onMount)(()=>{document.body.addEventListener("mouseup",A,{passive:a.default})}),(0,n.onCleanup)(()=>{document.body.removeEventListener("mouseup",A,!1)}),[(()=>{let e=p();return(0,t.insert)(e,b,null),(0,t.insert)(e,c.style,null),(0,t.insert)(e,V,null),(0,t.insert)(e,()=>(0,u.css)(y.css),null),e})(),(()=>{let e=f(),r=e.firstChild,l=s,a=r.nextSibling,i=a.firstChild,o=i.firstChild,d=o.nextSibling,p=i.nextSibling,b=a.nextSibling,k=b.firstChild,S=k.firstChild,q=b.nextSibling;return(0,t.addEventListener)(r,"mousedown",j,!0),"function"==typeof l?(0,t.use)(l,r):s=r,o.$$input=e=>O(0,Number(e.target.value),"hsva"),d.$$input=e=>O(3,Number(e.target.value)),(0,t.addEventListener)(p,"click",R,!0),(0,t.insert)(b,(0,t.createComponent)(n.Show,{get when(){return"hexa"===E().type},get fallback(){return(0,t.createComponent)(n.Index,{get each(){return $()},children:(e,r)=>{let l=Object.assign({},x,3===r&&{step:.01,formatter:_,parse:P});return(()=>{let a=g();return(0,t.spread)(a,(0,t.mergeProps)(l,{get value(){return e()},get max(){return(0,n.untrack)($).max[r]},min:0,onChange:e=>{O(r,e.detail)}}),!1,!1),a._$owner=(0,t.getOwner)(),a})()}})},get children(){let e=m();return(0,t.spread)(e,(0,t.mergeProps)(x,{get value(){return E().toHexaString()},onChange:B,onBlur:M,onKeyUp:F}),!1,!1),e._$owner=(0,t.getOwner)(),e}}),k),(0,t.addEventListener)(k,"change",H),k.css=c.switchCss,k.items=C,k._$owner=(0,t.getOwner)(),(0,t.insert)(S,()=>E().type),(0,t.insert)(q,(0,t.createComponent)(n.Show,{get when(){return window.EyeDropper},get fallback(){return(()=>{let e=h();return(0,t.addEventListener)(e,"click",L.bind(null,"rgba(168,16,16,0.15)"),!0),e.style.setProperty("--c","rgba(168,16,16,0.15)"),e})()},get children(){let e=v();return(0,t.addEventListener)(e,"click",N,!0),e.style.setProperty("--c","transparent"),e}}),null),(0,t.insert)(q,(0,t.createComponent)(n.For,{each:w,children:e=>(()=>{let n=h();return(0,t.addEventListener)(n,"click",L.bind(null,e),!0),null!=e?n.style.setProperty("--c",e):n.style.removeProperty("--c"),n})()}),null),(0,t.effect)(()=>(0,t.className)(e,(0,u.cx)("palette",y.class))),(0,t.effect)(()=>o.value=E().value[0]),(0,t.effect)(()=>d.value=E().value[3]),(0,t.effect)(()=>k.value=E().type),e})()]}const y={class:void 0,style:void 0,css:void 0,value:void 0,defaultValue:void 0,onChange:void 0};(0,s.customElement)("n-color-palette",y,(e,t)=>{let r=t.element,l=(0,n.mergeProps)({onChange(e){r.dispatchEvent(new CustomEvent("change",{detail:e}))}},e);return(0,n.createComponent)(b,l)});const C=b;(0,t.delegateEvents)(["click","input","mousedown"]);
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/color-palette/index.tsx"],"sourcesContent":["import {\n For,\n Index,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport {\n type ColorParse,\n type ColorType,\n type HSVA,\n colorParse,\n isFunction,\n passiveSupported,\n setClipboard,\n throttle,\n} from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style, switchCss } from './style';\nimport '../dropdown';\nimport '../input';\nimport '../input-number';\nimport theme from '../theme';\nimport type { CustomElement, InputNumberProps } from '..';\n\nexport interface ColorPaletteProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 颜色值 */\n value?: string;\n /** 默认值\n * @default '#5794ff'\n */\n defaultValue?: string;\n /** 变更时触发的方法 */\n onChange?: (color: string) => void;\n}\nexport type ColorPaletteElement = CustomElement<ColorPaletteProps>;\n\nfunction ColorPalette(_: ColorPaletteProps) {\n const { baseStyle } = theme;\n const props = mergeProps({ defaultValue: '#5794ff' }, _);\n let picker: HTMLDivElement | undefined;\n const types = [\n { label: 'RGBA', value: 'rgba', handleClosed: false },\n { label: 'HSLA', value: 'hsla', handleClosed: false },\n { label: 'HEXA', value: 'hexa', handleClosed: false },\n ];\n const material = [\n '#f44336',\n '#E91E63',\n '#9C27B0',\n '#673AB7',\n '#3F51B5',\n '#2196F3',\n '#00BCD4',\n '#009688',\n '#4CAF50',\n '#CDDC39',\n '#FF9800',\n '#795548',\n '#607D8B',\n ];\n const inputProps: InputNumberProps = {\n class: 'input',\n size: 'small',\n css: '.input{text-align:center;font-size:12px;}',\n };\n const [hsva, setHsva] = createSignal<ColorParse<HSVA>>(\n // eslint-disable-next-line solid/reactivity\n colorParse(props.value || props.defaultValue),\n );\n const [drag, setDrag] = createSignal(false);\n\n type HsvaToColorVoid = 'toHexa' | 'toRgba' | 'toHsla' | 'toCmyk' | 'toHsva';\n\n function formatterOpacity(v?: number | string) {\n return v ? Number(((v as number) * 100).toFixed()) : v;\n }\n function parseOpacity(v?: string | number) {\n let _val = v;\n\n if (typeof v === 'string') {\n _val = v.replace(/[^\\d]/g, '');\n }\n return (_val as number) / 100;\n }\n function capFirst(str: string) {\n return `to${str[0].toUpperCase() + str.slice(1)}` as HsvaToColorVoid;\n }\n const color = createMemo(() => {\n const s = hsva();\n const c = s[capFirst(s.type)]();\n\n if (isFunction(props.onChange) && c.toString() !== props.value) {\n props.onChange(c.toString());\n }\n return c;\n });\n\n function setColor(c = props.defaultValue) {\n if (untrack(color).toString() !== c) {\n setHsva(colorParse(c as string));\n }\n }\n function handleHexa(e: CustomEvent) {\n if (e.target) {\n (e.target as HTMLInputElement).value = e.detail;\n }\n }\n function handleHexaBlur(e: FocusEvent & { target: { value: string } }) {\n if (e.target?.value) {\n setColor(e.target.value);\n }\n }\n function handleHexaEnter(e: KeyboardEvent & { target: { value: string } }) {\n if (e.key === 'Enter' && typeof e.target?.value === 'string') {\n setColor(e.target.value);\n }\n }\n function changeColor(ev: MouseEvent) {\n if (picker) {\n const { x, y, width, height } = picker.getBoundingClientRect();\n const prev = untrack(hsva);\n const next = prev.value;\n\n next[1] = Math.floor(Math.min(Math.max(0, ((ev.clientX - x) / width) * 100), 100));\n next[2] = Math.floor(100 - Math.min(Math.max(0, ((ev.clientY - y) / height) * 100), 100));\n\n setHsva({ ...prev, value: next });\n }\n }\n\n function handleChange(i: number, v?: number, t?: ColorType) {\n if (typeof v === 'number') {\n const prev = untrack(hsva);\n const changeHsv = i === 3 || t === 'hsva';\n const next = changeHsv ? prev.value : (untrack(color) as HSVA);\n\n next[i] = v || 0;\n if (changeHsv) {\n setHsva({\n ...prev,\n value: next,\n });\n } else {\n setHsva(colorParse(next.toString()));\n }\n }\n }\n function mouseDown(e: MouseEvent) {\n setDrag(true);\n changeColor(e);\n }\n function mouseUp() {\n setDrag(false);\n }\n function handleSwitch(e: CustomEvent) {\n setHsva((prev) => ({\n ...prev,\n type: e.detail[0],\n }));\n }\n\n function copy(e: MouseEvent) {\n setClipboard(untrack(color).toString(), e.target as HTMLElement);\n }\n async function eyeDropper() {\n if (window.EyeDropper) {\n const res = await new window.EyeDropper().open();\n\n if (res.sRGBHex) {\n setColor(res.sRGBHex);\n }\n return;\n }\n }\n const colorVar = createMemo(() => {\n const h = hsva(),\n value = h.value;\n\n return `.palette {--c:${h.toRgbaString()};--h:${value[0]};--s:${value[1]};--v:${value[2]};--a:${\n value[3]\n };}`;\n });\n\n createEffect(() => {\n throttle(setColor, 8)(props.value);\n });\n\n createEffect(() => {\n if (drag()) {\n document.body.addEventListener('mousemove', changeColor, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n document.body.removeEventListener('mousemove', changeColor, false);\n });\n });\n onMount(() => {\n document.body.addEventListener('mouseup', mouseUp, {\n passive: passiveSupported,\n });\n });\n onCleanup(() => {\n document.body.removeEventListener('mouseup', mouseUp, false);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {colorVar()}\n {css(props.css)}\n </style>\n <div class={cx('palette', props.class)}>\n <div ref={picker} class=\"picker\" onMouseDown={mouseDown} />\n <div class=\"chooser\">\n <div class=\"range\">\n <input\n class=\"slider hue\"\n min=\"0\"\n max=\"360\"\n type=\"range\"\n value={hsva().value[0]}\n onInput={(e) => handleChange(0, Number(e.target.value), 'hsva')}\n />\n <input\n class=\"slider opacity\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n type=\"range\"\n value={hsva().value[3]}\n onInput={(e) => handleChange(3, Number(e.target.value))}\n />\n </div>\n <div class=\"preview\" onClick={copy} />\n </div>\n <div class=\"form\">\n <Show\n when={hsva().type === 'hexa'}\n fallback={\n <>\n <Index each={color()}>\n {(n, i) => {\n const inp = Object.assign(\n {},\n inputProps,\n i === 3 && {\n step: 0.01,\n formatter: formatterOpacity,\n parse: parseOpacity,\n },\n );\n\n return (\n <n-input-number\n {...inp}\n value={n() as number}\n max={\n (\n untrack(color) as HSVA & {\n max: [360, 100, 100, 1];\n }\n ).max[i]\n }\n min={0}\n onChange={(e) => {\n handleChange(i, e.detail);\n }}\n />\n );\n }}\n </Index>\n </>\n }\n >\n <n-input\n {...inputProps}\n value={hsva().toHexaString()}\n onChange={handleHexa}\n onBlur={handleHexaBlur}\n onKeyUp={handleHexaEnter}\n />\n </Show>\n <n-dropdown\n css={switchCss}\n value={hsva().type}\n items={types}\n placement=\"right\"\n trigger=\"click\"\n onChange={handleSwitch}\n >\n <span class=\"switch\">{hsva().type}</span>\n </n-dropdown>\n </div>\n <div class=\"color\">\n <Show\n when={window.EyeDropper}\n fallback={\n <i\n style={{ '--c': 'rgba(168,16,16,0.15)' }}\n onClick={setColor.bind(null, 'rgba(168,16,16,0.15)')}\n />\n }\n >\n <i class=\"eye-dropper\" style={{ '--c': 'transparent' }} onClick={eyeDropper} />\n </Show>\n <For each={material}>\n {(c) => <i style={{ '--c': c }} onClick={setColor.bind(null, c)} />}\n </For>\n </div>\n </div>\n </>\n );\n}\n\nexport const defaultColorPaletteProps = {\n class: void 0,\n style: void 0,\n css: void 0,\n value: void 0,\n defaultValue: void 0,\n onChange: void 0,\n};\n\ncustomElement<ColorPaletteProps>('n-color-palette', defaultColorPaletteProps, (_, 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(ColorPalette, props);\n});\n\nexport default ColorPalette;\n"],"names":["defaultColorPaletteProps","ColorPalette","_","picker","baseStyle","theme","props","mergeProps","defaultValue","types","label","value","handleClosed","material","inputProps","class","size","css","hsva","setHsva","createSignal","colorParse","drag","setDrag","formatterOpacity","v","Number","toFixed","parseOpacity","_val","replace","color","createMemo","str","s","c","type","toUpperCase","slice","isFunction","onChange","toString","setColor","untrack","handleHexa","e","target","detail","handleHexaBlur","handleHexaEnter","key","changeColor","ev","x","y","width","height","getBoundingClientRect","prev","next","Math","floor","min","max","clientX","clientY","handleChange","i","t","changeHsv","mouseDown","mouseUp","handleSwitch","copy","setClipboard","eyeDropper","window","EyeDropper","res","open","sRGBHex","colorVar","h","toRgbaString","createEffect","throttle","document","body","addEventListener","passive","passiveSupported","onCleanup","removeEventListener","onMount","style","Show","Index","n","inp","Object","assign","step","formatter","parse","toHexaString","switchCss","bind","For","cx","customElement","opts","el","element","val","dispatchEvent","CustomEvent","createComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/color-palette/index.tsx"],"sourcesContent":["import {\n For,\n Index,\n Show,\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n onCleanup,\n onMount,\n untrack,\n} from 'solid-js';\nimport {\n type ColorParse,\n type ColorType,\n type HSVA,\n colorParse,\n isFunction,\n passiveSupported,\n setClipboard,\n throttle,\n} from '@moneko/common';\nimport { css, cx } from '@moneko/css';\nimport { customElement } from 'solid-element';\nimport { style, switchCss } from './style';\nimport '../dropdown';\nimport '../input';\nimport '../input-number';\nimport theme from '../theme';\nimport type { CustomElement, InputNumberProps } from '..';\n\nexport interface ColorPaletteProps {\n /** 自定义类名 */\n class?: string;\n /** 自定义样式表 */\n css?: string;\n /** 颜色值 */\n value?: string;\n /** 默认值\n * @default '#5794ff'\n */\n defaultValue?: string;\n /** 变更时触发的方法 */\n onChange?: (color: string) => void;\n}\nexport type ColorPaletteElement = CustomElement<ColorPaletteProps>;\n\nfunction ColorPalette(_: ColorPaletteProps) {\n const { baseStyle } = theme;\n const props = mergeProps({ defaultValue: '#5794ff' }, _);\n let picker: HTMLDivElement | undefined;\n const types = [\n { label: 'RGBA', value: 'rgba', handleClosed: false },\n { label: 'HSLA', value: 'hsla', handleClosed: false },\n { label: 'HEXA', value: 'hexa', handleClosed: false },\n ];\n const material = [\n '#f44336',\n '#E91E63',\n '#9C27B0',\n '#673AB7',\n '#3F51B5',\n '#2196F3',\n '#00BCD4',\n '#009688',\n '#4CAF50',\n '#CDDC39',\n '#FF9800',\n '#795548',\n '#607D8B',\n ];\n const inputProps: InputNumberProps = {\n class: 'input',\n size: 'small',\n css: '.input{text-align:center;font-size:12px;}',\n };\n const [hsva, setHsva] = createSignal<ColorParse<HSVA>>(\n // eslint-disable-next-line solid/reactivity\n colorParse(props.value || props.defaultValue),\n );\n const [drag, setDrag] = createSignal(false);\n\n type HsvaToColorVoid = 'toHexa' | 'toRgba' | 'toHsla' | 'toCmyk' | 'toHsva';\n\n function formatterOpacity(v?: number | string) {\n return v ? Number(((v as number) * 100).toFixed()) : v;\n }\n function parseOpacity(v?: string | number) {\n let _val = v;\n\n if (typeof v === 'string') {\n _val = v.replace(/[^\\d]/g, '');\n }\n return (_val as number) / 100;\n }\n function capFirst(str: string) {\n return `to${str[0].toUpperCase() + str.slice(1)}` as HsvaToColorVoid;\n }\n const color = createMemo(() => {\n const s = hsva();\n const c = s[capFirst(s.type)]();\n\n if (isFunction(props.onChange) && c.toString() !== props.value) {\n props.onChange(c.toString());\n }\n return c;\n });\n\n function setColor(c = props.defaultValue) {\n if (untrack(color).toString() !== c) {\n setHsva(colorParse(c as string));\n }\n }\n function handleHexa(e: CustomEvent) {\n if (e.target) {\n (e.target as HTMLInputElement).value = e.detail;\n }\n }\n function handleHexaBlur(e: FocusEvent & { target: { value: string } }) {\n if (e.target?.value) {\n setColor(e.target.value);\n }\n }\n function handleHexaEnter(e: KeyboardEvent & { target: { value: string } }) {\n if (e.key === 'Enter' && typeof e.target?.value === 'string') {\n setColor(e.target.value);\n }\n }\n function changeColor(ev: MouseEvent) {\n if (picker) {\n const { x, y, width, height } = picker.getBoundingClientRect();\n const prev = untrack(hsva);\n const next = prev.value;\n\n next[1] = Math.floor(Math.min(Math.max(0, ((ev.clientX - x) / width) * 100), 100));\n next[2] = Math.floor(100 - Math.min(Math.max(0, ((ev.clientY - y) / height) * 100), 100));\n\n setHsva({ ...prev, value: next });\n }\n }\n\n function handleChange(i: number, v?: number, t?: ColorType) {\n if (typeof v === 'number') {\n const prev = untrack(hsva);\n const changeHsv = i === 3 || t === 'hsva';\n const next = changeHsv ? prev.value : (untrack(color) as HSVA);\n\n next[i] = v || 0;\n if (changeHsv) {\n setHsva({\n ...prev,\n value: next,\n });\n } else {\n setHsva(colorParse(next.toString()));\n }\n }\n }\n function mouseDown(e: MouseEvent) {\n setDrag(true);\n changeColor(e);\n }\n function mouseUp() {\n setDrag(false);\n }\n function handleSwitch(e: CustomEvent) {\n setHsva((prev) => ({\n ...prev,\n type: e.detail[0],\n }));\n }\n\n function copy(e: MouseEvent) {\n setClipboard(untrack(color).toString(), e.target as HTMLElement);\n }\n async function eyeDropper() {\n if (window.EyeDropper) {\n const res = await new window.EyeDropper().open();\n\n if (res.sRGBHex) {\n setColor(res.sRGBHex);\n }\n return;\n }\n }\n const colorVar = createMemo(() => {\n const h = hsva(),\n value = h.value;\n\n return `.palette {--c:${h.toRgbaString()};--h:${value[0]};--s:${value[1]};--v:${value[2]};--a:${\n value[3]\n };}`;\n });\n\n createEffect(() => {\n throttle(setColor, 8)(props.value);\n });\n\n createEffect(() => {\n if (drag()) {\n document.body.addEventListener('mousemove', changeColor, {\n passive: passiveSupported,\n });\n }\n onCleanup(() => {\n document.body.removeEventListener('mousemove', changeColor, false);\n });\n });\n onMount(() => {\n document.body.addEventListener('mouseup', mouseUp, {\n passive: passiveSupported,\n });\n });\n onCleanup(() => {\n document.body.removeEventListener('mouseup', mouseUp, false);\n });\n\n return (\n <>\n <style>\n {baseStyle()}\n {style}\n {colorVar()}\n {css(props.css)}\n </style>\n <div class={cx('palette', props.class)}>\n <div ref={picker} class=\"picker\" onMouseDown={mouseDown} />\n <div class=\"chooser\">\n <div class=\"range\">\n <input\n class=\"slider hue\"\n min=\"0\"\n max=\"360\"\n type=\"range\"\n value={hsva().value[0]}\n onInput={(e) => handleChange(0, Number(e.target.value), 'hsva')}\n />\n <input\n class=\"slider opacity\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n type=\"range\"\n value={hsva().value[3]}\n onInput={(e) => handleChange(3, Number(e.target.value))}\n />\n </div>\n <div class=\"preview\" onClick={copy} />\n </div>\n <div class=\"form\">\n <Show\n when={hsva().type === 'hexa'}\n fallback={\n <>\n <Index each={color()}>\n {(n, i) => {\n const inp = Object.assign(\n {},\n inputProps,\n i === 3 && {\n step: 0.01,\n formatter: formatterOpacity,\n parse: parseOpacity,\n },\n );\n\n return (\n <n-input-number\n {...inp}\n value={n() as number}\n max={\n (\n untrack(color) as HSVA & {\n max: [360, 100, 100, 1];\n }\n ).max[i]\n }\n min={0}\n onChange={(e) => {\n handleChange(i, e.detail);\n }}\n />\n );\n }}\n </Index>\n </>\n }\n >\n <n-input\n {...inputProps}\n value={hsva().toHexaString()}\n onChange={handleHexa}\n onBlur={handleHexaBlur}\n onKeyUp={handleHexaEnter}\n />\n </Show>\n <n-dropdown\n css={switchCss}\n value={hsva().type}\n items={types}\n placement=\"right\"\n trigger=\"click\"\n onChange={handleSwitch}\n >\n <span class=\"switch\">{hsva().type}</span>\n </n-dropdown>\n </div>\n <div class=\"color\">\n <Show\n when={window.EyeDropper}\n fallback={\n <i\n style={{ '--c': 'rgba(168,16,16,0.15)' }}\n onClick={setColor.bind(null, 'rgba(168,16,16,0.15)')}\n />\n }\n >\n <i class=\"eye-dropper\" style={{ '--c': 'transparent' }} onClick={eyeDropper} />\n </Show>\n <For each={material}>\n {(c) => <i style={{ '--c': c }} onClick={setColor.bind(null, c)} />}\n </For>\n </div>\n </div>\n </>\n );\n}\n\nexport const defaultColorPaletteProps = {\n class: void 0,\n style: void 0,\n css: void 0,\n value: void 0,\n defaultValue: void 0,\n onChange: void 0,\n};\n\ncustomElement<ColorPaletteProps>('n-color-palette', defaultColorPaletteProps, (_, 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(ColorPalette, props);\n});\n\nexport default ColorPalette;\n"],"names":["defaultColorPaletteProps","ColorPalette","_","picker","baseStyle","theme","props","mergeProps","defaultValue","types","label","value","handleClosed","material","inputProps","class","size","css","hsva","setHsva","createSignal","colorParse","drag","setDrag","formatterOpacity","v","Number","toFixed","parseOpacity","_val","replace","color","createMemo","str","s","c","type","toUpperCase","slice","isFunction","onChange","toString","setColor","untrack","handleHexa","e","target","detail","handleHexaBlur","handleHexaEnter","key","changeColor","ev","x","y","width","height","getBoundingClientRect","prev","next","Math","floor","min","max","clientX","clientY","handleChange","i","t","changeHsv","mouseDown","mouseUp","handleSwitch","copy","setClipboard","eyeDropper","window","EyeDropper","res","open","sRGBHex","colorVar","h","toRgbaString","createEffect","throttle","document","body","addEventListener","passive","passiveSupported","onCleanup","removeEventListener","onMount","style","Show","Index","n","inp","Object","assign","step","formatter","parse","toHexaString","switchCss","bind","For","cx","customElement","opts","el","element","val","dispatchEvent","CustomEvent","createComponent"],"mappings":"+JAoWA,OAA4B,mBAA5B,GA3BaA,wBAAwB,mBAAxBA,oGA7TN,uCAUA,6DAAA,6DAAA,mEAAA,+DAAA,0CACiB,yBACM,2BACG,mBAC1B,uBACA,oBACA,oDACW,qpBAmBlB,SAASC,EAAaC,CAAoB,MAGpCC,EAFJ,GAAM,CAAEC,UAAAA,CAAS,CAAE,CAAGC,SAAK,CACrBC,EAAQC,GAAAA,YAAU,EAAC,CAAEC,aAAc,SAAU,EAAGN,GAEhDO,EAAQ,CACZ,CAAEC,MAAO,OAAQC,MAAO,OAAQC,aAAc,CAAA,CAAM,EACpD,CAAEF,MAAO,OAAQC,MAAO,OAAQC,aAAc,CAAA,CAAM,EACpD,CAAEF,MAAO,OAAQC,MAAO,OAAQC,aAAc,CAAA,CAAM,EACrD,CACKC,EAAW,CACf,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACD,CACKC,EAA+B,CACnCC,MAAO,QACPC,KAAM,QACNC,IAAK,2CACP,EACM,CAACC,EAAMC,EAAQ,CAAGC,GAAAA,cAAY,EAClC,4CAA4C;AAC5CC,GAAAA,SAAU,EAACf,EAAMK,KAAK,EAAIL,EAAME,YAAY,GAExC,CAACc,EAAMC,EAAQ,CAAGH,GAAAA,cAAY,EAAC,CAAA,GAIrC,SAASI,EAAiBC,CAAmB,EAC3C,OAAOA,EAAIC,OAAO,AAAC,CAAA,AAAgB,IAAfD,CAAiB,EAAGE,OAAO,IAAMF,CACvD,CACA,SAASG,EAAaH,CAAmB,EACvC,IAAII,EAAOJ,EAKX,MAHiB,UAAb,OAAOA,GACTI,CAAAA,EAAOJ,EAAEK,OAAO,CAAC,SAAU,GAAE,EAExB,AAACD,EAAkB,GAC5B,CAIA,IAAME,EAAQC,GAAAA,YAAU,EAAC,SAHPC,EAIhB,IAAMC,EAAIhB,IACJiB,EAAID,CAAC,CALKD,EAKKC,EAAEE,IAAI,CAJpB,CAAC,EAAE,EAAEH,CAAG,CAAC,EAAE,CAACI,WAAW,GAAKJ,EAAIK,KAAK,CAAC,GAAG,CAAC,CAIpB,GAK7B,MAHIC,GAAAA,SAAU,EAACjC,EAAMkC,QAAQ,GAAKL,EAAEM,QAAQ,KAAOnC,EAAMK,KAAK,EAC5DL,EAAMkC,QAAQ,CAACL,EAAEM,QAAQ,IAEpBN,CACT,GAEA,SAASO,EAASP,EAAI7B,EAAME,YAAY,EAClCmC,GAAAA,SAAO,EAACZ,GAAOU,QAAQ,KAAON,GAChChB,EAAQE,GAAAA,SAAU,EAACc,GAEvB,CACA,SAASS,EAAWC,CAAc,EAC5BA,EAAEC,MAAM,EACV,CAAA,AAACD,EAAEC,MAAM,CAAsBnC,KAAK,CAAGkC,EAAEE,MAAM,AAAD,CAElD,CACA,SAASC,EAAeH,CAA6C,EAC/DA,EAAEC,MAAM,EAAEnC,OACZ+B,EAASG,EAAEC,MAAM,CAACnC,KAAK,CAE3B,CACA,SAASsC,EAAgBJ,CAAgD,EACzD,UAAVA,EAAEK,GAAG,EAAgB,AAA2B,UAA3B,OAAOL,EAAEC,MAAM,EAAEnC,OACxC+B,EAASG,EAAEC,MAAM,CAACnC,KAAK,CAE3B,CACA,SAASwC,EAAYC,CAAc,EACjC,GAAIjD,EAAQ,CACV,GAAM,CAAEkD,EAAAA,CAAC,CAAEC,EAAAA,CAAC,CAAEC,MAAAA,CAAK,CAAEC,OAAAA,CAAM,CAAE,CAAGrD,EAAOsD,qBAAqB,GACtDC,EAAOf,GAAAA,SAAO,EAACzB,GACfyC,EAAOD,EAAK/C,KAAK,AAEvBgD,CAAAA,CAAI,CAAC,EAAE,CAAGC,KAAKC,KAAK,CAACD,KAAKE,GAAG,CAACF,KAAKG,GAAG,CAAC,EAAG,AAAEX,CAAAA,EAAGY,OAAO,CAAGX,CAAAA,EAAKE,EAAS,KAAM,MAC7EI,CAAI,CAAC,EAAE,CAAGC,KAAKC,KAAK,CAAC,IAAMD,KAAKE,GAAG,CAACF,KAAKG,GAAG,CAAC,EAAG,AAAEX,CAAAA,EAAGa,OAAO,CAAGX,CAAAA,EAAKE,EAAU,KAAM,MAEpFrC,EAAQ,CAAE,GAAGuC,CAAI,CAAE/C,MAAOgD,CAAK,EACjC,CACF,CAEA,SAASO,EAAaC,CAAS,CAAE1C,CAAU,CAAE2C,CAAa,EACxD,GAAI,AAAa,UAAb,OAAO3C,EAAgB,CACzB,IAAMiC,EAAOf,GAAAA,SAAO,EAACzB,GACfmD,EAAYF,AAAM,IAANA,GAAWC,AAAM,SAANA,EACvBT,EAAOU,EAAYX,EAAK/C,KAAK,CAAIgC,GAAAA,SAAO,EAACZ,EAE/C4B,CAAAA,CAAI,CAACQ,EAAE,CAAG1C,GAAK,EACX4C,EACFlD,EAAQ,CACN,GAAGuC,CAAI,CACP/C,MAAOgD,CACT,GAEAxC,EAAQE,GAAAA,SAAU,EAACsC,EAAKlB,QAAQ,IAEpC,CACF,CACA,SAAS6B,EAAUzB,CAAa,EAC9BtB,EAAQ,CAAA,GACR4B,EAAYN,EACd,CACA,SAAS0B,IACPhD,EAAQ,CAAA,EACV,CACA,SAASiD,EAAa3B,CAAc,EAClC1B,EAAQ,AAACuC,GAAU,CAAA,CACjB,GAAGA,CAAI,CACPtB,KAAMS,EAAEE,MAAM,CAAC,EAAE,AACnB,CAAA,EACF,CAEA,SAAS0B,EAAK5B,CAAa,EACzB6B,GAAAA,SAAY,EAAC/B,GAAAA,SAAO,EAACZ,GAAOU,QAAQ,GAAII,EAAEC,MAAM,CAClD,CACA,eAAe6B,IACb,GAAIC,OAAOC,UAAU,CAAE,CACrB,IAAMC,EAAM,MAAM,IAAIF,OAAOC,UAAU,GAAGE,IAAI,EAE1CD,CAAAA,EAAIE,OAAO,EACbtC,EAASoC,EAAIE,OAAO,EAEtB,MACF,CACF,CACA,IAAMC,EAAWjD,GAAAA,YAAU,EAAC,KAC1B,IAAMkD,EAAIhE,IACRP,EAAQuE,EAAEvE,KAAK,CAEjB,MAAO,CAAC,cAAc,EAAEuE,EAAEC,YAAY,GAAG,KAAK,EAAExE,CAAK,CAAC,EAAE,CAAC,KAAK,EAAEA,CAAK,CAAC,EAAE,CAAC,KAAK,EAAEA,CAAK,CAAC,EAAE,CAAC,KAAK,EAC5FA,CAAK,CAAC,EAAE,CACT,EAAE,CAAC,AACN,GAyBA,MAvBAyE,GAAAA,cAAY,EAAC,KACXC,GAAAA,SAAQ,EAAC3C,EAAU,GAAGpC,EAAMK,KAAK,CACnC,GAEAyE,GAAAA,cAAY,EAAC,KACP9D,KACFgE,SAASC,IAAI,CAACC,gBAAgB,CAAC,YAAarC,EAAa,CACvDsC,QAASC,SAAgB,AAC3B,GAEFC,GAAAA,WAAS,EAAC,KACRL,SAASC,IAAI,CAACK,mBAAmB,CAAC,YAAazC,EAAa,CAAA,EAC9D,EACF,GACA0C,GAAAA,SAAO,EAAC,KACNP,SAASC,IAAI,CAACC,gBAAgB,CAAC,UAAWjB,EAAS,CACjDkB,QAASC,SAAgB,AAC3B,EACF,GACAC,GAAAA,WAAS,EAAC,KACRL,SAASC,IAAI,CAACK,mBAAmB,CAAC,UAAWrB,EAAS,CAAA,EACxD,yCAKOnE,uBACA0F,OAAK,sBACLb,2BACAhE,GAAAA,KAAG,EAACX,EAAMW,GAAG,+CAGJd,yLAAoCmE,0CAApCnE,cASK,AAAC0C,GAAMqB,EAAa,EAAGxC,OAAOmB,EAAEC,MAAM,CAACnC,KAAK,EAAG,kBAS/C,AAACkC,GAAMqB,EAAa,EAAGxC,OAAOmB,EAAEC,MAAM,CAACnC,KAAK,oCAG3B8D,2CAG7BsB,MAAI,mBACG7E,AAAgB,SAAhBA,IAAOkB,IAAI,6CAGZ4D,OAAK,oBAAOjE,cACV,CAACkE,EAAG9B,KACH,IAAM+B,EAAMC,OAAOC,MAAM,CACvB,CAAC,EACDtF,EACAqD,AAAM,IAANA,GAAW,CACTkC,KAAM,IACNC,UAAW9E,EACX+E,MAAO3E,CACT,GAGF,4DAEQsE,sBACGD,qBAEL,AACEtD,GAAAA,SAAO,EAACZ,GAGRgC,GAAG,CAACI,EAAE,MAEL,WACK,AAACtB,IACTqB,EAAaC,EAAGtB,EAAEE,MAAM,CAC1B,2CAGN,oEAMAjC,sBACGI,IAAOsF,YAAY,aAChB5D,SACFI,UACCC,gFASDuB,SALLiC,WAAS,SAEPhG,gDAKeS,IAAOkB,IAAI,uCAIlC2D,MAAI,oBACGnB,OAAOC,UAAU,8EAIVnC,EAASgE,IAAI,CAAC,KAAM,qJAIgC/B,+FAElEgC,KAAG,OAAO9F,WACR,AAACsB,0DAAuCO,EAASgE,IAAI,CAAC,KAAMvE,aAAlCA,4BAAAA,kFA/FrByE,GAAAA,IAAE,EAAC,UAAWtG,EAAMS,KAAK,6BAStBG,IAAOP,KAAK,CAAC,EAAE,2BASfO,IAAOP,KAAK,CAAC,EAAE,2BAuDjBO,IAAOkB,IAAI,QA4B9B,CAEO,MAAMpC,EAA2B,CACtCe,MAAO,KAAK,EACZ+E,MAAO,KAAK,EACZ7E,IAAK,KAAK,EACVN,MAAO,KAAK,EACZH,aAAc,KAAK,EACnBgC,SAAU,KAAK,CACjB,EAEAqE,GAAAA,eAAa,EAAoB,kBAAmB7G,EAA0B,CAACE,EAAG4G,KAChF,IAAMC,EAAKD,EAAKE,OAAO,CACjB1G,EAAQC,GAAAA,YAAU,EACtB,CACEiC,SAASyE,CAAY,EACnBF,EAAGG,aAAa,CACd,IAAIC,YAAY,SAAU,CACxBpE,OAAQkE,CACV,GAEJ,CACF,EACA/G,GAGF,MAAOkH,GAAAA,iBAAe,EAACnH,EAAcK,EACvC,SAEA,EAAeL"}
|
package/lib/cron/style.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,n){for(var i in n)Object.defineProperty(e,i,{enumerable:!0,get:n[i]})}(exports,{
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,n){for(var i in n)Object.defineProperty(e,i,{enumerable:!0,get:n[i]})}(exports,{numCss:function(){return t},selectCss:function(){return i},selectPortalCss:function(){return n}});const e=require("@moneko/css"),n=(0,e.css)`
|
|
2
2
|
.portal {
|
|
3
3
|
inline-size: 232px;
|
|
4
4
|
}
|
package/lib/cron/style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/cron/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const selectPortalCss = css`\n .portal {\n inline-size: 232px;\n }\n\n .portal n-menu::part(menu) {\n display: flex;\n flex-wrap: wrap;\n max-block-size: 250px;\n gap: 4px;\n }\n\n .portal n-menu::part(item) {\n display: flex;\n justify-content: center;\n align-items: center;\n column-gap: 0;\n inline-size: calc((100% - 8px) / 3);\n border-radius: 4px;\n }\n\n .portal n-menu::part(suffix) {\n display: none;\n }\n`;\n\nexport const selectCss = css`\n .select {\n min-inline-size: unset;\n inline-size: 70px;\n text-align: center;\n }\n`;\nexport const numCss = css`\n .fieldset {\n inline-size: 70px;\n min-inline-size: unset;\n }\n`;\n"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../components/cron/style.ts"],"sourcesContent":["import { css } from '@moneko/css';\n\nexport const selectPortalCss = css`\n .portal {\n inline-size: 232px;\n }\n\n .portal n-menu::part(menu) {\n display: flex;\n flex-wrap: wrap;\n max-block-size: 250px;\n gap: 4px;\n }\n\n .portal n-menu::part(item) {\n display: flex;\n justify-content: center;\n align-items: center;\n column-gap: 0;\n inline-size: calc((100% - 8px) / 3);\n border-radius: 4px;\n }\n\n .portal n-menu::part(suffix) {\n display: none;\n }\n`;\n\nexport const selectCss = css`\n .select {\n min-inline-size: unset;\n inline-size: 70px;\n text-align: center;\n }\n`;\nexport const numCss = css`\n .fieldset {\n inline-size: 70px;\n min-inline-size: unset;\n }\n`;\n"],"names":["numCss","selectCss","selectPortalCss","css"],"mappings":"+JAmCaA,MAAM,mBAANA,GAPAC,SAAS,mBAATA,GA1BAC,eAAe,mBAAfA,qBAFO,eAEPA,EAAkBC,GAAAA,KAAG,CAAA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;AAwBnC,CAAC,CAEYF,EAAYE,GAAAA,KAAG,CAAA,CAAC;;;;;;AAM7B,CAAC,CACYH,EAASG,GAAAA,KAAG,CAAA,CAAC;;;;;AAK1B,CAAC"}
|
package/lib/date-picker/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e,t;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return f}});const o=require("@swc/helpers/_/_interop_require_default"),n=require("@swc/helpers/_/_interop_require_wildcard"),r=require("solid-js/web"),a=require("solid-js"),s=require("solid-element"),i=/*#__PURE__*/o._(require("./dayjs")),u=/*#__PURE__*/o._(require("./panel")),d=require("./style");require("../button"),require("../menu");const l=/*#__PURE__*/n._(require("../popover")),c=/*#__PURE__*/(0,r.template)('<n-input part="value">',!0,!1);function p(e){let t;let o=(0,a.mergeProps)({type:"date",parser:"YYYY-MM-DD HH:mm:ss"},e),[n,s]=(0,a.splitProps)(o,["class","css","value","defaultValue","onChange","type","content","onOpenChange","open","format","popupCss","trigger","parser","showTime","showHour","showMinute","showSecond","prefixIcon","suffixIcon","placeholder","showToday","showHeader"]),[p,f]=(0,a.createSignal)(null),[v,h]=(0,a.createSignal)((0,i.default)(n.defaultValue)),g=(0,a.createMemo)(()=>n.format?n.format:n.showTime?"YYYY-MM-DD HH:mm:ss":({month:"YYYY-MM",date:"YYYY-MM-DD",year:"YYYY"})[n.type||"date"]);function m(e){s.disabled||(n.onOpenChange?.(e),void 0===n.open&&f(e))}function w(e){e.stopPropagation(),e.preventDefault(),m(!0)}function _(){(0,a.untrack)(p)&&m(!1)}function Y(e){e.target===t?.shadowRoot?.activeElement&&m(!(0,a.untrack)(p))}function y(e){void 0===n.value&&h(e),o.onChange?.(e.format(n.parser),e)}function C(e){if(e.detail){let t=(0,i.default)(e.detail);t.isValid()&&y(t)}}return(0,a.createEffect)(()=>{void 0!==n.open&&n.open!==(0,a.untrack)(p)&&f(n.open)}),(0,a.createEffect)(()=>{let e=(0,i.default)(n.value||n.defaultValue);void 0!==n.value&&e.isValid()&&h(e)}),(0,r.createComponent)(l.default,(0,r.mergeProps)({trigger:"none",placement:"left",get open(){return p()},onOpenChange:m,get css(){return n.css},popupCss:d.styles,get content(){return(0,r.createComponent)(u.default,{get type(){return n.type},get current(){return v()},get open(){return p()},onChange:y,openChange:m,get showHour(){return n.showHour},get showMinute(){return n.showMinute},get showSecond(){return n.showSecond},get showTime(){return n.showTime},get showToday(){return n.showToday},get showHeader(){return n.showHeader}})}},s,{get children(){let e=c(),o=t;return(0,r.addEventListener)(e,"change",C),(0,r.addEventListener)(e,"blur",_),(0,r.addEventListener)(e,"focus",w),(0,r.addEventListener)(e,"mousedown",Y,!0),"function"==typeof o?(0,r.use)(o,e):t=e,e._$owner=(0,r.getOwner)(),(0,r.effect)(t=>{let o=s.disabled,r=n.suffixIcon,a=n.prefixIcon,i=n.placeholder;return o!==t._v$&&(e.disabled=t._v$=o),r!==t._v$2&&(e.suffixIcon=t._v$2=r),a!==t._v$3&&(e.prefixIcon=t._v$3=a),i!==t._v$4&&(e.placeholder=t._v$4=i),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),(0,r.effect)(()=>e.value=v().format(g())),e}}))}(t=e||(e={}))
|
|
1
|
+
"use strict";var e,t;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return f}});const o=require("@swc/helpers/_/_interop_require_default"),n=require("@swc/helpers/_/_interop_require_wildcard"),r=require("solid-js/web"),a=require("solid-js"),s=require("solid-element"),i=/*#__PURE__*/o._(require("./dayjs")),u=/*#__PURE__*/o._(require("./panel")),d=require("./style");require("../button"),require("../menu");const l=/*#__PURE__*/n._(require("../popover")),c=/*#__PURE__*/(0,r.template)('<n-input part="value">',!0,!1);function p(e){let t;let o=(0,a.mergeProps)({type:"date",parser:"YYYY-MM-DD HH:mm:ss"},e),[n,s]=(0,a.splitProps)(o,["class","css","value","defaultValue","onChange","type","content","onOpenChange","open","format","popupCss","trigger","parser","showTime","showHour","showMinute","showSecond","prefixIcon","suffixIcon","placeholder","showToday","showHeader"]),[p,f]=(0,a.createSignal)(null),[v,h]=(0,a.createSignal)((0,i.default)(n.defaultValue)),g=(0,a.createMemo)(()=>n.format?n.format:n.showTime?"YYYY-MM-DD HH:mm:ss":({month:"YYYY-MM",date:"YYYY-MM-DD",year:"YYYY"})[n.type||"date"]);function m(e){s.disabled||(n.onOpenChange?.(e),void 0===n.open&&f(e))}function w(e){e.stopPropagation(),e.preventDefault(),m(!0)}function _(){(0,a.untrack)(p)&&m(!1)}function Y(e){e.target===t?.shadowRoot?.activeElement&&m(!(0,a.untrack)(p))}function y(e){void 0===n.value&&h(e),o.onChange?.(e.format(n.parser),e)}function C(e){if(e.detail){let t=(0,i.default)(e.detail);t.isValid()&&y(t)}}return(0,a.createEffect)(()=>{void 0!==n.open&&n.open!==(0,a.untrack)(p)&&f(n.open)}),(0,a.createEffect)(()=>{let e=(0,i.default)(n.value||n.defaultValue);void 0!==n.value&&e.isValid()&&h(e)}),(0,r.createComponent)(l.default,(0,r.mergeProps)({trigger:"none",placement:"left",get open(){return p()},onOpenChange:m,get css(){return n.css},popupCss:d.styles,get content(){return(0,r.createComponent)(u.default,{get type(){return n.type},get current(){return v()},get open(){return p()},onChange:y,openChange:m,get showHour(){return n.showHour},get showMinute(){return n.showMinute},get showSecond(){return n.showSecond},get showTime(){return n.showTime},get showToday(){return n.showToday},get showHeader(){return n.showHeader}})}},s,{get children(){let e=c(),o=t;return(0,r.addEventListener)(e,"change",C),(0,r.addEventListener)(e,"blur",_),(0,r.addEventListener)(e,"focus",w),(0,r.addEventListener)(e,"mousedown",Y,!0),"function"==typeof o?(0,r.use)(o,e):t=e,e._$owner=(0,r.getOwner)(),(0,r.effect)(t=>{let o=s.disabled,r=n.suffixIcon,a=n.prefixIcon,i=n.placeholder;return o!==t._v$&&(e.disabled=t._v$=o),r!==t._v$2&&(e.suffixIcon=t._v$2=r),a!==t._v$3&&(e.prefixIcon=t._v$3=a),i!==t._v$4&&(e.placeholder=t._v$4=i),t},{_v$:void 0,_v$2:void 0,_v$3:void 0,_v$4:void 0}),(0,r.effect)(()=>e.value=v().format(g())),e}}))}(t=e||(e={})).date="date",t.month="month",t.year="year",(0,s.customElement)("n-data-picker",{...l.defaultProps,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,t)=>{let o=t.element,n=(0,a.mergeProps)({css:o.css,onChange(e,t){o.dispatchEvent(new CustomEvent("change",{detail:[e,t]}))},onOpenChange(e){o.dispatchEvent(new CustomEvent("openchange",{detail:e}))}},e);return(0,a.createEffect)(()=>{o.removeAttribute("css")}),(0,a.createComponent)(p,n)});const f=p;(0,r.delegateEvents)(["mousedown"]);
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../components/date-picker/index.tsx"],"sourcesContent":["import {\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport dayjs from './dayjs';\nimport Panel from './panel';\nimport { styles } from './style';\nimport '../button';\nimport '../menu';\nimport Popover, { defaultProps } from '../popover';\nimport type { CustomElement, InputElement, PopoverProps } from '..';\n\nfunction DatePicker(_props: DatePickerProps) {\n let ref: InputElement | undefined;\n const props = mergeProps(\n {\n type: 'date' as DatePickerProps['type'],\n parser: 'YYYY-MM-DD HH:mm:ss',\n },\n _props,\n );\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'value',\n 'defaultValue',\n 'onChange',\n 'type',\n 'content',\n 'onOpenChange',\n 'open',\n 'format',\n 'popupCss',\n 'trigger',\n 'parser',\n 'showTime',\n 'showHour',\n 'showMinute',\n 'showSecond',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'showToday',\n 'showHeader',\n ]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [current, setCurrent] = createSignal(dayjs(local.defaultValue));\n\n const format = createMemo(() => {\n if (local.format) {\n return local.format;\n }\n if (local.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return {\n month: 'YYYY-MM',\n date: 'YYYY-MM-DD',\n year: 'YYYY',\n }[local.type || 'date'];\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n local.onOpenChange?.(next);\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n\n function focus(e: FocusEvent | MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n openChange(true);\n }\n function blur() {\n if (untrack(open)) {\n openChange(false);\n }\n }\n function inputMouseDown(e: MouseEvent) {\n if (e.target === (ref?.shadowRoot as ShadowRoot)?.activeElement) {\n openChange(!untrack(open));\n }\n }\n function handleChange(next: dayjs.Dayjs) {\n if (local.value === void 0) {\n setCurrent(next);\n }\n props.onChange?.(next.format(local.parser), next);\n }\n function handleInputChange(e: CustomEvent<string | number | undefined>) {\n if (e.detail) {\n const next = dayjs(e.detail);\n\n if (next.isValid()) {\n handleChange(next);\n }\n }\n }\n\n createEffect(() => {\n if (local.open !== void 0 && local.open !== untrack(open)) {\n setOpen(local.open);\n }\n });\n createEffect(() => {\n const next = dayjs(local.value || local.defaultValue);\n\n if (local.value !== void 0 && next.isValid()) {\n setCurrent(next);\n }\n });\n return (\n <Popover\n trigger=\"none\"\n placement=\"left\"\n open={open()}\n onOpenChange={openChange}\n css={local.css}\n popupCss={styles}\n content={\n <Panel\n type={local.type}\n current={current()}\n open={open()}\n onChange={handleChange}\n openChange={openChange}\n showHour={local.showHour}\n showMinute={local.showMinute}\n showSecond={local.showSecond}\n showTime={local.showTime}\n showToday={local.showToday}\n showHeader={local.showHeader}\n />\n }\n {...other}\n >\n <n-input\n ref={ref}\n onMouseDown={inputMouseDown}\n onFocus={focus}\n onBlur={blur}\n disabled={other.disabled}\n value={current().format(format())}\n suffix-icon={local.suffixIcon}\n prefix-icon={local.prefixIcon}\n placeholder={local.placeholder}\n part=\"value\"\n onChange={handleInputChange}\n />\n </Popover>\n );\n}\n/** API\n * @since 2.1.0\n */\nexport interface DatePickerProps extends Partial<PopoverProps> {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 类型\n * @default 'date'\n */\n type?: keyof typeof PickerType;\n /** 值 */\n value?: string | number;\n /** 默认值\n * @default 当前时间\n */\n defaultValue?: string | number;\n /** 禁用 */\n disabled?: boolean;\n /** 格式化回填到输入框的内容\n * @default 'YYYY-MM-DD'\n */\n format?: string;\n /** 格式化获取的值\n * @default 'YYYY-MM-DD HH:mm:ss'\n */\n parser?: string;\n /** 前缀 */\n prefixIcon?: JSX.Element;\n /** 后缀\n * @default '📅'\n */\n suffixIcon?: JSX.Element;\n /** 变更时的回调 */\n onChange?(val: string, time: dayjs.Dayjs): void;\n /** 显示时间选择\n * @default false\n */\n showTime?: boolean;\n /** 显示小时选择\n * @default true\n **/\n showHour?: boolean;\n /** 显示分钟选择\n * @default true\n **/\n showMinute?: boolean;\n /** 显示秒选择\n * @default true\n **/\n showSecond?: boolean;\n /** 占位文本 */\n placeholder?: string;\n /** 显示今日按钮\n * @default true\n */\n showToday?: boolean;\n /** 显示顶部\n * @default true\n */\n showHeader?: boolean;\n}\n\nenum PickerType {\n /** 日期选择 */\n date = 'date',\n /** 月份选择 */\n month = 'month',\n /** 年份选择 */\n year = 'year',\n}\n\nexport type DatePickerElement = CustomElement<DatePickerProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<DatePickerProps>(\n 'n-data-picker',\n {\n ...defaultProps,\n value: void 0,\n defaultValue: void 0,\n disabled: void 0,\n onChange: void 0,\n open: void 0,\n onOpenChange: void 0,\n type: void 0,\n format: void 0,\n parser: void 0,\n showTime: void 0,\n suffixIcon: '📅',\n prefixIcon: void 0,\n placeholder: void 0,\n showHour: true,\n showMinute: true,\n showSecond: true,\n showToday: true,\n showHeader: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(val: string, time: dayjs.Dayjs) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [val, time],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(DatePicker, props);\n },\n);\nexport default DatePicker;\n"],"names":["PickerType","DatePicker","_props","ref","props","mergeProps","type","parser","local","other","splitProps","open","setOpen","createSignal","current","setCurrent","dayjs","defaultValue","format","createMemo","showTime","month","date","year","openChange","next","disabled","onOpenChange","focus","e","stopPropagation","preventDefault","blur","untrack","inputMouseDown","target","shadowRoot","activeElement","handleChange","value","onChange","handleInputChange","detail","isValid","createEffect","Popover","css","styles","Panel","showHour","showMinute","showSecond","showToday","showHeader","suffixIcon","prefixIcon","placeholder","customElement","defaultProps","_","opt","el","element","val","time","dispatchEvent","CustomEvent","removeAttribute","createComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/date-picker/index.tsx"],"sourcesContent":["import {\n createComponent,\n createEffect,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n untrack,\n} from 'solid-js';\nimport { customElement } from 'solid-element';\nimport dayjs from './dayjs';\nimport Panel from './panel';\nimport { styles } from './style';\nimport '../button';\nimport '../menu';\nimport Popover, { defaultProps } from '../popover';\nimport type { CustomElement, InputElement, PopoverProps } from '..';\n\nfunction DatePicker(_props: DatePickerProps) {\n let ref: InputElement | undefined;\n const props = mergeProps(\n {\n type: 'date' as DatePickerProps['type'],\n parser: 'YYYY-MM-DD HH:mm:ss',\n },\n _props,\n );\n const [local, other] = splitProps(props, [\n 'class',\n 'css',\n 'value',\n 'defaultValue',\n 'onChange',\n 'type',\n 'content',\n 'onOpenChange',\n 'open',\n 'format',\n 'popupCss',\n 'trigger',\n 'parser',\n 'showTime',\n 'showHour',\n 'showMinute',\n 'showSecond',\n 'prefixIcon',\n 'suffixIcon',\n 'placeholder',\n 'showToday',\n 'showHeader',\n ]);\n const [open, setOpen] = createSignal<boolean | null>(null);\n const [current, setCurrent] = createSignal(dayjs(local.defaultValue));\n\n const format = createMemo(() => {\n if (local.format) {\n return local.format;\n }\n if (local.showTime) return 'YYYY-MM-DD HH:mm:ss';\n return {\n month: 'YYYY-MM',\n date: 'YYYY-MM-DD',\n year: 'YYYY',\n }[local.type || 'date'];\n });\n\n function openChange(next: boolean | null) {\n if (!other.disabled) {\n local.onOpenChange?.(next);\n if (local.open === void 0) {\n setOpen(next);\n }\n }\n }\n\n function focus(e: FocusEvent | MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n openChange(true);\n }\n function blur() {\n if (untrack(open)) {\n openChange(false);\n }\n }\n function inputMouseDown(e: MouseEvent) {\n if (e.target === (ref?.shadowRoot as ShadowRoot)?.activeElement) {\n openChange(!untrack(open));\n }\n }\n function handleChange(next: dayjs.Dayjs) {\n if (local.value === void 0) {\n setCurrent(next);\n }\n props.onChange?.(next.format(local.parser), next);\n }\n function handleInputChange(e: CustomEvent<string | number | undefined>) {\n if (e.detail) {\n const next = dayjs(e.detail);\n\n if (next.isValid()) {\n handleChange(next);\n }\n }\n }\n\n createEffect(() => {\n if (local.open !== void 0 && local.open !== untrack(open)) {\n setOpen(local.open);\n }\n });\n createEffect(() => {\n const next = dayjs(local.value || local.defaultValue);\n\n if (local.value !== void 0 && next.isValid()) {\n setCurrent(next);\n }\n });\n return (\n <Popover\n trigger=\"none\"\n placement=\"left\"\n open={open()}\n onOpenChange={openChange}\n css={local.css}\n popupCss={styles}\n content={\n <Panel\n type={local.type}\n current={current()}\n open={open()}\n onChange={handleChange}\n openChange={openChange}\n showHour={local.showHour}\n showMinute={local.showMinute}\n showSecond={local.showSecond}\n showTime={local.showTime}\n showToday={local.showToday}\n showHeader={local.showHeader}\n />\n }\n {...other}\n >\n <n-input\n ref={ref}\n onMouseDown={inputMouseDown}\n onFocus={focus}\n onBlur={blur}\n disabled={other.disabled}\n value={current().format(format())}\n suffix-icon={local.suffixIcon}\n prefix-icon={local.prefixIcon}\n placeholder={local.placeholder}\n part=\"value\"\n onChange={handleInputChange}\n />\n </Popover>\n );\n}\n/** API\n * @since 2.1.0\n */\nexport interface DatePickerProps extends Partial<PopoverProps> {\n /** 自定义类名 */\n class?: string;\n /** 自定义类名 */\n css?: string;\n /** 类型\n * @default 'date'\n */\n type?: keyof typeof PickerType;\n /** 值 */\n value?: string | number;\n /** 默认值\n * @default 当前时间\n */\n defaultValue?: string | number;\n /** 禁用 */\n disabled?: boolean;\n /** 格式化回填到输入框的内容\n * @default 'YYYY-MM-DD'\n */\n format?: string;\n /** 格式化获取的值\n * @default 'YYYY-MM-DD HH:mm:ss'\n */\n parser?: string;\n /** 前缀 */\n prefixIcon?: JSX.Element;\n /** 后缀\n * @default '📅'\n */\n suffixIcon?: JSX.Element;\n /** 变更时的回调 */\n onChange?(val: string, time: dayjs.Dayjs): void;\n /** 显示时间选择\n * @default false\n */\n showTime?: boolean;\n /** 显示小时选择\n * @default true\n **/\n showHour?: boolean;\n /** 显示分钟选择\n * @default true\n **/\n showMinute?: boolean;\n /** 显示秒选择\n * @default true\n **/\n showSecond?: boolean;\n /** 占位文本 */\n placeholder?: string;\n /** 显示今日按钮\n * @default true\n */\n showToday?: boolean;\n /** 显示顶部\n * @default true\n */\n showHeader?: boolean;\n}\n\nenum PickerType {\n /** 日期选择 */\n date = 'date',\n /** 月份选择 */\n month = 'month',\n /** 年份选择 */\n year = 'year',\n}\n\nexport type DatePickerElement = CustomElement<DatePickerProps, 'onChange' | 'onOpenChange'>;\n\ncustomElement<DatePickerProps>(\n 'n-data-picker',\n {\n ...defaultProps,\n value: void 0,\n defaultValue: void 0,\n disabled: void 0,\n onChange: void 0,\n open: void 0,\n onOpenChange: void 0,\n type: void 0,\n format: void 0,\n parser: void 0,\n showTime: void 0,\n suffixIcon: '📅',\n prefixIcon: void 0,\n placeholder: void 0,\n showHour: true,\n showMinute: true,\n showSecond: true,\n showToday: true,\n showHeader: true,\n },\n (_, opt) => {\n const el = opt.element;\n const props = mergeProps(\n {\n css: el.css,\n onChange(val: string, time: dayjs.Dayjs) {\n el.dispatchEvent(\n new CustomEvent('change', {\n detail: [val, time],\n }),\n );\n },\n onOpenChange(open: boolean | null) {\n el.dispatchEvent(\n new CustomEvent('openchange', {\n detail: open,\n }),\n );\n },\n },\n _,\n );\n\n createEffect(() => {\n el.removeAttribute('css');\n });\n return createComponent(DatePicker, props);\n },\n);\nexport default DatePicker;\n"],"names":["PickerType","DatePicker","_props","ref","props","mergeProps","type","parser","local","other","splitProps","open","setOpen","createSignal","current","setCurrent","dayjs","defaultValue","format","createMemo","showTime","month","date","year","openChange","next","disabled","onOpenChange","focus","e","stopPropagation","preventDefault","blur","untrack","inputMouseDown","target","shadowRoot","activeElement","handleChange","value","onChange","handleInputChange","detail","isValid","createEffect","Popover","css","styles","Panel","showHour","showMinute","showSecond","showToday","showHeader","suffixIcon","prefixIcon","placeholder","customElement","defaultProps","_","opt","el","element","val","time","dispatchEvent","CustomEvent","removeAttribute","createComponent"],"mappings":"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"}
|
package/lib/date-picker/month.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{default:function(){return c},months:function(){return u}});const e=require("@swc/helpers/_/_interop_require_default"),t=require("solid-js/web"),r=require("solid-js"),n=require("@moneko/css"),o=/*#__PURE__*/e._(require("./dayjs")),i=/*#__PURE__*/(0,t.template)('<n-button type="primary">',!0,!1),u=o.default.monthsShort(),c=function(e){return(0,t.createComponent)(r.For,{each:u,children:(o,u)=>{let c=(0,r.createMemo)(()=>e.current.get("month")===u());function s(){e.onChange(e.current.set("month",u()))}return(()=>{let e=i();return(0,t.addEventListener)(e,"click",s,!0),e.flat=!0,e._$owner=(0,t.getOwner)(),(0,t.insert)(e,o),(0,t.effect)(r=>{let o=(0,n.cx)("date-picker-month",c()&&"date-active"),i=c()?"strong":"button";return o!==r._v$&&(0,t.className)(e,r._v$=o),i!==r._v$2&&(e.tag=r._v$2=i),r},{_v$:void 0,_v$2:void 0}),e})()}})};(0,t.delegateEvents)(["click"]);
|
|
2
2
|
//# sourceMappingURL=month.js.map
|