From f2e93ff0613d697447df8995f2a15fa295994d28 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 8 Jul 2026 19:06:29 +0800 Subject: [PATCH 01/21] feat: add meta generation script and components metadata - Introduced a new script `build-meta.mjs` to aggregate component metadata from various sources. - Added a new command `generate:meta` in `package.json` to run the metadata generation. - Created `meta/components.json` to store the generated component metadata, including categories and global tokens. --- meta/components.json | 14137 +++++++++++++++++++++++++++++++++++++++ package.json | 1 + scripts/build-meta.mjs | 300 + 3 files changed, 14438 insertions(+) create mode 100644 meta/components.json create mode 100644 scripts/build-meta.mjs diff --git a/meta/components.json b/meta/components.json new file mode 100644 index 0000000000..796ea01a59 --- /dev/null +++ b/meta/components.json @@ -0,0 +1,14137 @@ +{ + "schemaVersion": "1.0.0", + "libVersion": "4.0.0-beta.4", + "componentCount": 106, + "apiComponentCount": 85, + "categories": [ + { + "name": "基础组件", + "enName": "base", + "components": [ + "button", + "cell", + "cellgroup", + "configprovider", + "icon", + "image", + "overlay" + ] + }, + { + "name": "布局组件", + "enName": "layout", + "components": [ + "divider", + "grid", + "griditem", + "layout", + "col", + "row", + "safearea", + "space", + "sticky" + ] + }, + { + "name": "导航组件", + "enName": "nav", + "components": [ + "backtop", + "elevator", + "fixednav", + "hoverbutton", + "hoverbuttonitem", + "navbar", + "sidebar", + "sidebaritem", + "tabbar", + "tabbaritem", + "tabpane", + "tabs" + ] + }, + { + "name": "数据录入", + "enName": "dentry", + "components": [ + "address", + "calendar", + "calendaritem", + "calendarcard", + "cascader", + "checkbox", + "checkboxgroup", + "datepicker", + "datepickerview", + "form", + "formitem", + "input", + "inputnumber" + ] + }, + { + "name": "数据录入", + "enName": "dataentry", + "components": [ + "menu", + "menuitem", + "numberkeyboard", + "picker", + "pickerview", + "radio", + "radiogroup", + "range", + "rate", + "searchbar", + "shortpassword", + "signature", + "switch", + "textarea", + "uploader" + ] + }, + { + "name": "操作反馈", + "enName": "feedback", + "components": [ + "actionsheet", + "badge", + "dialog", + "drag", + "empty", + "infiniteloading", + "loading", + "noticebar", + "notify", + "popover", + "popup", + "pulltorefresh", + "resultpage", + "skeleton", + "swipe", + "toast" + ] + }, + { + "name": "展示组件", + "enName": "exhibition", + "components": [ + "animate", + "animatingnumbers", + "audio", + "avatar", + "avatargroup", + "circleprogress", + "collapse", + "collapseitem", + "countdown", + "ellipsis", + "imagepreview", + "indicator", + "lottie", + "pagination", + "price", + "progress", + "segmented", + "step", + "steps", + "swiper", + "swiperitem", + "table", + "tag", + "tour", + "video", + "virtuallist" + ] + }, + { + "name": "特色组件", + "enName": "business", + "components": [ + "quickenter", + "avatarcropper", + "barrage", + "card", + "timedetail", + "timeselect", + "trendarrow", + "watermark" + ] + } + ], + "globalTokens": [ + { + "cssVar": "--nutui-color-primary", + "scssVar": "$color-primary", + "default": "#ff0f23" + }, + { + "cssVar": "--nutui-color-primary-stop-1", + "scssVar": "$color-primary-stop-1", + "default": "#ff475d" + }, + { + "cssVar": "--nutui-color-primary-stop-2", + "scssVar": "$color-primary-stop-2", + "default": "#ff0f23" + }, + { + "cssVar": "--nutui-color-primary-pressed", + "scssVar": "$color-primary-pressed", + "default": "#db0b15" + }, + { + "cssVar": "--nutui-color-primary-disabled", + "scssVar": "$color-primary-disabled", + "default": "#c2c4cc" + }, + { + "cssVar": "--nutui-color-primary-icon", + "scssVar": "$color-primary-icon", + "default": "#ff3333" + }, + { + "cssVar": "--nutui-color-default", + "scssVar": "$color-default", + "default": null + }, + { + "cssVar": "--nutui-color-default-pressed", + "scssVar": "$color-default-pressed", + "default": "#e6e6e6" + }, + { + "cssVar": "--nutui-color-default-light", + "scssVar": "$color-default-light", + "default": null + }, + { + "cssVar": "--nutui-color-default-disabled", + "scssVar": "$color-default-disabled", + "default": null + }, + { + "cssVar": "--nutui-color-info", + "scssVar": "$color-info", + "default": "#0c82f7" + }, + { + "cssVar": "--nutui-color-info-pressed", + "scssVar": "$color-info-pressed", + "default": "#496af2" + }, + { + "cssVar": "--nutui-color-info-disabled", + "scssVar": "$color-info-disabled", + "default": "#89a6f8" + }, + { + "cssVar": "--nutui-color-info-light", + "scssVar": "$color-info-light", + "default": "#e6f7ff" + }, + { + "cssVar": "--nutui-color-info", + "scssVar": "$color-info-text", + "default": "#0c82f7" + }, + { + "cssVar": "--nutui-color-success", + "scssVar": "$color-success", + "default": "#0acc2a" + }, + { + "cssVar": "--nutui-color-success-disabled", + "scssVar": "$color-success-disabled", + "default": "#b2f0ae" + }, + { + "cssVar": "--nutui-color-success-text", + "scssVar": "$color-success-text", + "default": "#00801e" + }, + { + "cssVar": "--nutui-color-warning", + "scssVar": "$color-warning", + "default": "#ffaa00" + }, + { + "cssVar": "--nutui-color-warning-disabled", + "scssVar": "$color-warning-disabled", + "default": "#fdd3b9" + }, + { + "cssVar": "--nutui-color-warning-text", + "scssVar": "$color-warning-text", + "default": "#c47600" + }, + { + "cssVar": "--nutui-color-danger", + "scssVar": "$color-danger", + "default": "#ff0f23" + }, + { + "cssVar": "--nutui-color-danger-pressed", + "scssVar": "$color-danger-pressed", + "default": "#ff3333" + }, + { + "cssVar": "--nutui-color-danger-light", + "scssVar": "$color-danger-light", + "default": "#ffebef" + }, + { + "cssVar": "--nutui-color-danger-text", + "scssVar": "$color-danger-text", + "default": "#ff0f23" + }, + { + "cssVar": "--nutui-color-service", + "scssVar": "$color-service", + "default": "#fff4e0" + }, + { + "cssVar": "--nutui-color-service-pressed", + "scssVar": "$color-service-pressed", + "default": "#f2ba79" + }, + { + "cssVar": "--nutui-color-service-border", + "scssVar": "$color-service-border", + "default": "#ccb9ab" + }, + { + "cssVar": "--nutui-color-service-text", + "scssVar": "$color-service-text", + "default": "#80512d" + }, + { + "cssVar": "--nutui-color-service-btn-bg", + "scssVar": "$color-service-btn-bg", + "default": "#ffe6c2" + }, + { + "cssVar": "--nutui-color-service-btn-bg-pressed", + "scssVar": "$color-service-btn-bg-pressed", + "default": "#ffddad" + }, + { + "cssVar": "--nutui-color-service-btn-bg-disabled", + "scssVar": "$color-service-btn-bg-disabled", + "default": "#fff4e8" + }, + { + "cssVar": "--nutui-color-background", + "scssVar": "$color-background", + "default": "#f2f3f5" + }, + { + "cssVar": "--nutui-color-mask", + "scssVar": "$color-mask", + "default": "rgba(0, 0, 0, 0.7" + }, + { + "cssVar": "--nutui-color-mask-part", + "scssVar": "$color-mask-part", + "default": "rgba(0, 0, 0, 0.4" + }, + { + "cssVar": "--nutui-color-border", + "scssVar": "$color-border", + "default": "rgba(0, 0, 0, 0.06" + }, + { + "cssVar": "--nutui-color-border-disabled", + "scssVar": "$color-border-disabled", + "default": "#c2c4cc" + }, + { + "cssVar": "--nutui-color-title", + "scssVar": "$color-title", + "default": "#1a1a1a" + }, + { + "cssVar": "--nutui-color-text", + "scssVar": "$color-text", + "default": "#505259" + }, + { + "cssVar": "--nutui-color-text-help", + "scssVar": "$color-text-help", + "default": "#888b94" + }, + { + "cssVar": "--nutui-color-text-disabled", + "scssVar": "$color-text-disabled", + "default": "#b4b8bf" + }, + { + "cssVar": "--nutui-color-text-link", + "scssVar": "$color-text-link", + "default": "#0c82f7" + }, + { + "cssVar": "--nutui-color-primary-text", + "scssVar": "$color-primary-text", + "default": "#ffffff" + }, + { + "cssVar": "--nutui-font-size-xxxs", + "scssVar": "$font-size-xxxs", + "default": "scale-font-px(9px" + }, + { + "cssVar": "--nutui-font-size-xxs", + "scssVar": "$font-size-xxs", + "default": "scale-font-px(10px" + }, + { + "cssVar": "--nutui-font-size-xs", + "scssVar": "$font-size-xs", + "default": "scale-font-px(11px" + }, + { + "cssVar": "--nutui-font-size-s", + "scssVar": "$font-size-s", + "default": "scale-font-px(12px" + }, + { + "cssVar": "--nutui-font-size-m", + "scssVar": "$font-size-m", + "default": "scale-font-px(13px" + }, + { + "cssVar": "--nutui-font-size-base", + "scssVar": "$font-size-base", + "default": "scale-font-px(14px" + }, + { + "cssVar": "--nutui-font-size-l", + "scssVar": "$font-size-l", + "default": "scale-font-px(15px" + }, + { + "cssVar": "--nutui-font-size-md", + "scssVar": "$font-size-md", + "default": "scale-font-px(16px" + }, + { + "cssVar": "--nutui-font-size-icon", + "scssVar": "$font-size-icon", + "default": "scale-icon-px(16px" + }, + { + "cssVar": "--nutui-font-size-xl", + "scssVar": "$font-size-xl", + "default": "scale-font-px(18px" + }, + { + "cssVar": "--nutui-font-size-2xl", + "scssVar": "$font-size-2xl", + "default": "scale-font-px(20px" + }, + { + "cssVar": "--nutui-font-size-xxl", + "scssVar": "$font-size-xxl", + "default": "scale-font-px(24px" + }, + { + "cssVar": "--nutui-font-size-10", + "scssVar": "$font-size-xxxl", + "default": "scale-font-px(26px" + }, + { + "cssVar": "--nutui-font-size-11", + "scssVar": "$font-size-xxxxl", + "default": "scale-font-px(28px" + }, + { + "cssVar": "--nutui-line-height-xxxs", + "scssVar": "$line-height-xxxs", + "default": "$font-size-xxxs" + }, + { + "cssVar": "--nutui-line-height-xxs", + "scssVar": "$line-height-xxs", + "default": "$font-size-xxs" + }, + { + "cssVar": "--nutui-line-height-xs", + "scssVar": "$line-height-xs", + "default": "$font-size-xs" + }, + { + "cssVar": "--nutui-line-height-s", + "scssVar": "$line-height-s", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-line-height-m", + "scssVar": "$line-height-m", + "default": "$font-size-m" + }, + { + "cssVar": "--nutui-line-height-base", + "scssVar": "$line-height-base", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-line-height-l", + "scssVar": "$line-height-l", + "default": "$font-size-l" + }, + { + "cssVar": "--nutui-line-height-md", + "scssVar": "$line-height-md", + "default": "$font-size-md" + }, + { + "cssVar": "--nutui-line-height-icon", + "scssVar": "$line-height-icon", + "default": "$font-size-icon" + }, + { + "cssVar": "--nutui-line-height-xl", + "scssVar": "$line-height-xl", + "default": "$font-size-xl" + }, + { + "cssVar": "--nutui-line-height-2xl", + "scssVar": "$line-height-2xl", + "default": "$font-size-2xl" + }, + { + "cssVar": "--nutui-line-height-xxl", + "scssVar": "$line-height-xxl", + "default": "$font-size-xxl" + }, + { + "cssVar": "--nutui-line-height-xxxl", + "scssVar": "$line-height-xxxl", + "default": "$font-size-xxxl" + }, + { + "cssVar": "--nutui-line-height-xxxxl", + "scssVar": "$line-height-xxxxl", + "default": "$font-size-xxxxl" + }, + { + "cssVar": "--nutui-font-weight-light", + "scssVar": "$font-weight-light", + "default": "300" + }, + { + "cssVar": "--nutui-font-weight", + "scssVar": "$font-weight", + "default": "400" + }, + { + "cssVar": "--nutui-font-weight-medium", + "scssVar": "$font-weight-medium", + "default": "500" + }, + { + "cssVar": "--nutui-font-weight-bold", + "scssVar": "$font-weight-bold", + "default": "600" + }, + { + "cssVar": "--nutui-spacing-xxxs", + "scssVar": "$spacing-xxxs", + "default": "scale-px(2px" + }, + { + "cssVar": "--nutui-spacing-xxs", + "scssVar": "$spacing-xxs", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-spacing-xs", + "scssVar": "$spacing-xs", + "default": "scale-px(6px" + }, + { + "cssVar": "--nutui-spacing-s", + "scssVar": "$spacing-s", + "default": "scale-px(7px" + }, + { + "cssVar": "--nutui-spacing-base", + "scssVar": "$spacing-base", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-spacing-l", + "scssVar": "$spacing-l", + "default": "scale-px(9px" + }, + { + "cssVar": "--nutui-spacing-xl", + "scssVar": "$spacing-xl", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-spacing-xxl", + "scssVar": "$spacing-xxl", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-spacing-xxxl", + "scssVar": "$spacing-xxxl", + "default": "scale-px(18px" + }, + { + "cssVar": "--nutui-radius-xxs", + "scssVar": "$radius-xxs", + "default": "scale-px(2px" + }, + { + "cssVar": "--nutui-radius-xs", + "scssVar": "$radius-xs", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-radius-s", + "scssVar": "$radius-s", + "default": "scale-px(6px" + }, + { + "cssVar": "--nutui-radius-base", + "scssVar": "$radius-base", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-radius-l", + "scssVar": "$radius-l", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-radius-xxl", + "scssVar": "$radius-xxl", + "default": "scale-px(14px" + }, + { + "cssVar": "--nutui-radius-xxxl", + "scssVar": "$radius-xxxl", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-list-item-margin", + "scssVar": "$list-item-margin", + "default": "0 0 scale-px(10px) 0" + }, + { + "cssVar": "--nutui-addresslist-bg", + "scssVar": "$addresslist-bg", + "default": "#fff" + }, + { + "cssVar": "--nutui-addresslist-border", + "scssVar": "$addresslist-border", + "default": "#f0f0f0" + }, + { + "cssVar": "--nutui-addresslist-font-color", + "scssVar": "$addresslist-font-color", + "default": "#333333" + }, + { + "cssVar": "--nutui-addresslist-font-size", + "scssVar": "$addresslist-font-size", + "default": "$font-size-md" + }, + { + "cssVar": "--nutui-addresslist-set-bg", + "scssVar": "$addresslist-set-bg", + "default": "#f5a623" + }, + { + "cssVar": "--nutui-addresslist-del-bg", + "scssVar": "$addresslist-del-bg", + "default": "#e1251b" + }, + { + "cssVar": "--nutui-countup-width", + "scssVar": "$countup-width", + "default": "auto" + }, + { + "cssVar": "--nutui-countup-height", + "scssVar": "$countup-height", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-countup-base-size", + "scssVar": "$countup-base-size", + "default": "$font-size-xl" + }, + { + "cssVar": "--nutui-countup-border-radius", + "scssVar": "$countup-border-radius", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-countup-lr-margin", + "scssVar": "$countup-lr-margin", + "default": "0" + }, + { + "cssVar": "--nutui-countup-bg-color", + "scssVar": "$countup-bg-color", + "default": "inherit" + }, + { + "cssVar": "--nutui-countup-color", + "scssVar": "$countup-color", + "default": "$color-title" + } + ], + "components": { + "button": { + "id": "button", + "name": "Button", + "cName": "按钮", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "", + "type": "component", + "desc": "按钮", + "sort": 1, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/button/doc.md", + "enUS": "src/packages/button/doc.en-US.md", + "zhTW": "src/packages/button/doc.zh-TW.md", + "taro": "src/packages/button/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/button/demos/h5/demo1.tsx", + "src/packages/button/demos/h5/demo2.tsx", + "src/packages/button/demos/h5/demo3.tsx", + "src/packages/button/demos/h5/demo4.tsx", + "src/packages/button/demos/h5/demo5.tsx", + "src/packages/button/demos/h5/demo6.tsx", + "src/packages/button/demos/h5/demo7.tsx", + "src/packages/button/demos/h5/demo8.tsx", + "src/packages/button/demos/h5/demo9.tsx", + "src/packages/button/demos/h5/demo10.tsx" + ], + "taro": [ + "src/packages/button/demos/taro/demo1.tsx", + "src/packages/button/demos/taro/demo2.tsx", + "src/packages/button/demos/taro/demo3.tsx", + "src/packages/button/demos/taro/demo4.tsx", + "src/packages/button/demos/taro/demo5.tsx", + "src/packages/button/demos/taro/demo6.tsx", + "src/packages/button/demos/taro/demo7.tsx", + "src/packages/button/demos/taro/demo8.tsx", + "src/packages/button/demos/taro/demo9.tsx", + "src/packages/button/demos/taro/demo10.tsx", + "src/packages/button/demos/taro/demo11.tsx" + ] + }, + "spec": { + "base": "src/types/spec/button/base.ts", + "h5": "src/types/spec/button/h5.ts", + "taro": "src/types/spec/button/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Button", + "subComponent": null, + "rows": [ + { + "prop": "type", + "desc": "按钮的样式", + "type": "`default` | `primary` | `info` | `warning` | `danger` | `success`", + "default": "default" + }, + { + "prop": "size", + "desc": "按钮的尺寸", + "type": "`normal` | `large` | `small`", + "default": "normal" + }, + { + "prop": "shape", + "desc": "按钮的形状", + "type": "`square` | `round`", + "default": "round" + }, + { + "prop": "color", + "desc": "按钮颜色,支持传入 linear-gradient 渐变色", + "type": "`string`", + "default": "-" + }, + { + "prop": "fill", + "desc": "填充模式", + "type": "`solid` | `ouline` | `none`", + "default": "solid" + }, + { + "prop": "disabled", + "desc": "是否禁用按钮", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "block", + "desc": "是否为块级元素", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "icon", + "desc": "按钮图标", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "loading", + "desc": "按钮loading状态", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onClick", + "desc": "点击按钮时触发", + "type": "`onClick: (e: MouseEvent) => void`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-button-border-radius", + "scssVar": "$button-border-radius", + "default": "$radius-s" + }, + { + "cssVar": "--nutui-button-border-width", + "scssVar": "$button-border-width", + "default": "scale-px(0.5px" + }, + { + "cssVar": "--nutui-button-normal-padding", + "scssVar": "$button-normal-padding", + "default": "0px scale-px(12px" + }, + { + "cssVar": "--nutui-button-default-height", + "scssVar": "$button-default-height", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-button-default-color", + "scssVar": "$button-default-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-button-default-padding", + "scssVar": "$button-default-padding", + "default": "0px scale-px(12px" + }, + { + "cssVar": "--nutui-button-xlarge-height", + "scssVar": "$button-xlarge-height", + "default": "scale-px(48px" + }, + { + "cssVar": "--nutui-button-xlarge-padding", + "scssVar": "$button-xlarge-padding", + "default": "0px scale-px(20px" + }, + { + "cssVar": "--nutui-button-44-height", + "scssVar": "$button-44-height", + "default": "scale-px(44px" + }, + { + "cssVar": "--nutui-button-44-padding", + "scssVar": "$button-44-padding", + "default": "0px scale-px(16px" + }, + { + "cssVar": "--nutui-button-large-height", + "scssVar": "$button-large-height", + "default": "scale-px(40px" + }, + { + "cssVar": "--nutui-button-large-padding", + "scssVar": "$button-large-padding", + "default": "0px scale-px(12px" + }, + { + "cssVar": "--nutui-button-36-height", + "scssVar": "$button-36-height", + "default": "scale-px(36px" + }, + { + "cssVar": "--nutui-button-36-padding", + "scssVar": "$button-36-padding", + "default": "0px scale-px(12px" + }, + { + "cssVar": "--nutui-button-small-padding", + "scssVar": "$button-small-padding", + "default": "0px scale-px(8px" + }, + { + "cssVar": "--nutui-button-small-height", + "scssVar": "$button-small-height", + "default": "scale-px(28px" + }, + { + "cssVar": "--nutui-button-mini-padding", + "scssVar": "$button-mini-padding", + "default": "0px scale-px(6px" + }, + { + "cssVar": "--nutui-button-mini-height", + "scssVar": "$button-mini-height", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-button-text-icon-margin", + "scssVar": "$button-text-icon-margin", + "default": "scale-px(4px" + } + ] + }, + "cell": { + "id": "cell", + "name": "Cell", + "cName": "单元格", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "列表项,可组成列表", + "sort": 2, + "show": true, + "docs": { + "h5": "src/packages/cell/doc.md", + "enUS": "src/packages/cell/doc.en-US.md", + "zhTW": "src/packages/cell/doc.zh-TW.md", + "taro": "src/packages/cell/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/cell/demos/h5/demo1.tsx", + "src/packages/cell/demos/h5/demo2.tsx", + "src/packages/cell/demos/h5/demo3.tsx", + "src/packages/cell/demos/h5/demo4.tsx", + "src/packages/cell/demos/h5/demo5.tsx", + "src/packages/cell/demos/h5/demo6.tsx", + "src/packages/cell/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/cell/demos/taro/demo1.tsx", + "src/packages/cell/demos/taro/demo2.tsx", + "src/packages/cell/demos/taro/demo3.tsx", + "src/packages/cell/demos/taro/demo4.tsx", + "src/packages/cell/demos/taro/demo5.tsx", + "src/packages/cell/demos/taro/demo6.tsx", + "src/packages/cell/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/cell/base.ts", + "h5": "src/types/spec/cell/h5.ts", + "taro": "src/types/spec/cell/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Cell", + "subComponent": null, + "rows": [ + { + "prop": "title", + "desc": "标题", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "description", + "desc": "描述", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "extra", + "desc": "右侧描述", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "radius", + "desc": "圆角半径", + "type": "`string`", + "default": "6px" + }, + { + "prop": "align", + "desc": "纵轴方向上的对齐方式,可选值为:`flex-start`、`center`、`flex-end`", + "type": "`string`", + "default": "flex-start" + }, + { + "prop": "onClick", + "desc": "点击事件", + "type": "`onClick: (event: React.MouseEvent) => void`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-cell-title-color", + "scssVar": "$cell-title-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-cell-extra-color", + "scssVar": "$cell-extra-color", + "default": "$color-text" + }, + { + "cssVar": "--nutui-cell-border-radius", + "scssVar": "$cell-border-radius", + "default": "scale-px(6px" + }, + { + "cssVar": "--nutui-cell-padding", + "scssVar": "$cell-padding", + "default": "scale-px(13px) scale-px(16px" + }, + { + "cssVar": "--nutui-cell-line-height", + "scssVar": "$cell-line-height", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-cell-divider-right", + "scssVar": "$cell-divider-right", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-cell-divider-left", + "scssVar": "$cell-divider-left", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-cell-group-wrap-margin", + "scssVar": "$cell-group-wrap-margin", + "default": "scale-px(10px" + } + ] + }, + "cellgroup": { + "id": "cellgroup", + "name": "CellGroup", + "cName": "单元格", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "列表项,可组成列表", + "sort": 2, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "CellGroup", + "subComponent": null, + "rows": [ + { + "prop": "title", + "desc": "分组标题", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "description", + "desc": "分组描述", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "divider", + "desc": "单元格之间是否有分割线", + "type": "`boolean`", + "default": "true" + } + ] + } + ] + }, + "tokens": [] + }, + "configprovider": { + "id": "configprovider", + "name": "ConfigProvider", + "cName": "全局配置", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "hanyuxinting", + "type": "component", + "desc": "可以配置多语言等全局属性", + "sort": 16, + "show": true, + "docs": { + "h5": "src/packages/configprovider/doc.md", + "enUS": "src/packages/configprovider/doc.en-US.md", + "zhTW": "src/packages/configprovider/doc.zh-TW.md", + "taro": "src/packages/configprovider/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/configprovider/demos/h5/demo1.tsx", + "src/packages/configprovider/demos/h5/demo2.tsx", + "src/packages/configprovider/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/configprovider/demos/taro/demo1.tsx", + "src/packages/configprovider/demos/taro/demo2.tsx", + "src/packages/configprovider/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/configprovider/base.ts", + "h5": "src/types/spec/configprovider/h5.ts", + "taro": "src/types/spec/configprovider/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "ConfigProvider", + "subComponent": null, + "rows": [ + { + "prop": "locale", + "desc": "设置多语言包", + "type": "`BaseLang`", + "default": "zhCN" + }, + { + "prop": "theme", + "desc": "设置主题", + "type": "`Record`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "icon": { + "id": "icon", + "name": "Icon", + "cName": "图标", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "oasis-cloud", + "type": "component", + "desc": "基于 IconFont 字体的图标集", + "sort": 1, + "show": true, + "exclude": true, + "docs": { + "h5": "src/packages/icon/doc.md", + "enUS": "src/packages/icon/doc.en-US.md", + "zhTW": "src/packages/icon/doc.zh-TW.md", + "taro": "src/packages/icon/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/icon/demos/h5/demo1.tsx", + "src/packages/icon/demos/h5/demo2.tsx", + "src/packages/icon/demos/h5/demo3.tsx", + "src/packages/icon/demos/h5/demo4.tsx", + "src/packages/icon/demos/h5/demo5.tsx", + "src/packages/icon/demos/h5/demo6.tsx", + "src/packages/icon/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/icon/demos/taro/demo1.tsx", + "src/packages/icon/demos/taro/demo2.tsx", + "src/packages/icon/demos/taro/demo3.tsx", + "src/packages/icon/demos/taro/demo4.tsx", + "src/packages/icon/demos/taro/demo5.tsx", + "src/packages/icon/demos/taro/demo6.tsx", + "src/packages/icon/demos/taro/demo7.tsx" + ] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Icon", + "subComponent": null, + "rows": [ + { + "prop": "name", + "desc": "图标名称或图片链接", + "type": "`string`", + "default": "-" + }, + { + "prop": "color", + "desc": "图标颜色", + "type": "`string`", + "default": "-" + }, + { + "prop": "width", + "desc": "图标大小,如 `20px` `2em` `2rem`", + "type": "`string` | `object`", + "default": "-" + }, + { + "prop": "height", + "desc": "图标大小,如 `20px` `2em` `2rem`", + "type": "`string` | `object`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击图标时触发", + "type": "`event: Event`", + "default": "-" + } + ] + }, + { + "name": "Props", + "kind": "props", + "sourceComponent": "IconFont", + "subComponent": null, + "rows": [ + { + "prop": "name", + "desc": "图标名称或图片链接", + "type": "`string`", + "default": "-" + }, + { + "prop": "color", + "desc": "图标颜色", + "type": "`string`", + "default": "-" + }, + { + "prop": "size", + "desc": "图标大小,如 `20px` `2em` `2rem`", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "classPrefix", + "desc": "类名前缀,用于使用自定义图标", + "type": "`string`", + "default": "nut-iconfont" + }, + { + "prop": "fontClassName", + "desc": "自定义 icon 字体基础类名", + "type": "`string`", + "default": "nutui-iconfont" + }, + { + "prop": "tag", + "desc": "tsx 标签", + "type": "`string`", + "default": "i" + }, + { + "prop": "onClick", + "desc": "点击图标时触发", + "type": "`event: Event`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-icon-size-6", + "scssVar": "$icon-size-6", + "default": "scale-icon-px(6px" + }, + { + "cssVar": "--nutui-icon-size-8", + "scssVar": "$icon-size-8", + "default": "scale-icon-px(8px" + }, + { + "cssVar": "--nutui-icon-size-10", + "scssVar": "$icon-size-10", + "default": "scale-icon-px(10px" + }, + { + "cssVar": "--nutui-icon-size-11", + "scssVar": "$icon-size-11", + "default": "scale-icon-px(11px" + }, + { + "cssVar": "--nutui-icon-size-12", + "scssVar": "$icon-size-12", + "default": "scale-icon-px(12px" + }, + { + "cssVar": "--nutui-icon-size-16", + "scssVar": "$icon-size-16", + "default": "scale-icon-px(16px" + }, + { + "cssVar": "--nutui-icon-size-18", + "scssVar": "$icon-size-18", + "default": "scale-icon-px(18px" + }, + { + "cssVar": "--nutui-icon-size-20", + "scssVar": "$icon-size-20", + "default": "scale-icon-px(20px" + }, + { + "cssVar": "--nutui-icon-size-22", + "scssVar": "$icon-size-22", + "default": "scale-icon-px(22px" + }, + { + "cssVar": "--nutui-icon-height", + "scssVar": "$icon-height", + "default": "$icon-size-20" + }, + { + "cssVar": "--nutui-icon-width", + "scssVar": "$icon-width", + "default": "$icon-size-20" + }, + { + "cssVar": "--nutui-icon-line-height", + "scssVar": "$icon-line-height", + "default": "$icon-size-20" + } + ] + }, + "image": { + "id": "image", + "name": "Image", + "cName": "图片", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "vickyYE", + "type": "component", + "desc": "增强版的 img 标签,提供多种图片填充模式,支持图片加载中提示、加载失败提示。", + "sort": 8, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/image/doc.md", + "enUS": "src/packages/image/doc.en-US.md", + "zhTW": "src/packages/image/doc.zh-TW.md", + "taro": "src/packages/image/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/image/demos/h5/demo1.tsx", + "src/packages/image/demos/h5/demo2.tsx", + "src/packages/image/demos/h5/demo3.tsx", + "src/packages/image/demos/h5/demo4.tsx", + "src/packages/image/demos/h5/demo5.tsx", + "src/packages/image/demos/h5/demo6.tsx", + "src/packages/image/demos/h5/demo7.tsx", + "src/packages/image/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/image/demos/taro/demo1.tsx", + "src/packages/image/demos/taro/demo2.tsx", + "src/packages/image/demos/taro/demo3.tsx", + "src/packages/image/demos/taro/demo4.tsx", + "src/packages/image/demos/taro/demo5.tsx", + "src/packages/image/demos/taro/demo6.tsx", + "src/packages/image/demos/taro/demo7.tsx", + "src/packages/image/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/image/base.ts", + "h5": "src/types/spec/image/h5.ts", + "taro": "src/types/spec/image/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Image", + "subComponent": null, + "rows": [ + { + "prop": "src", + "desc": "图片链接", + "type": "`string`", + "default": "-" + }, + { + "prop": "fit", + "desc": "图片填充模式,等同于原生的 object-fit 属性", + "type": "`ImageFit`", + "default": "fill" + }, + { + "prop": "position", + "desc": "图片位置,等同于原生的 object-position 属性", + "type": "`ImagePosition`", + "default": "center" + }, + { + "prop": "alt", + "desc": "替代文本", + "type": "`string`", + "default": "-" + }, + { + "prop": "width", + "desc": "宽度,默认单位`px`", + "type": "`string`", + "default": "-" + }, + { + "prop": "height", + "desc": "高度,默认单位`px`", + "type": "`string`", + "default": "-" + }, + { + "prop": "radius", + "desc": "圆角大小", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "error", + "desc": "是否展示图片加载失败", + "type": "`boolean | ReactNode`", + "default": "true" + }, + { + "prop": "loading", + "desc": "是否展示加载中图片", + "type": "`boolean | ReactNode`", + "default": "true" + }, + { + "prop": "lazy", + "desc": "是否为懒加载图片", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onClick", + "desc": "点击图片时触发", + "type": "`(e: MouseEvent) => void`", + "default": "-" + }, + { + "prop": "onLoad", + "desc": "图片加载完后触发", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onError", + "desc": "图片加载失败后触发", + "type": "`() => void`", + "default": "-" + } + ] + }, + { + "name": "ImageFit 图片填充模式", + "kind": "other", + "sourceComponent": "Image", + "subComponent": null, + "rows": [ + { + "prop": "contain", + "desc": "保持宽高缩放图片,使图片的长边能完全显示出来", + "type": "", + "default": "" + }, + { + "prop": "cover", + "desc": "保持宽高缩放图片,使图片的短边能完全显示出来,裁剪长边", + "type": "", + "default": "" + }, + { + "prop": "fill", + "desc": "拉伸图片,使图片填满元素", + "type": "", + "default": "" + }, + { + "prop": "none", + "desc": "保持图片原有尺寸", + "type": "", + "default": "" + }, + { + "prop": "scale-down", + "desc": "取 none 或 contain 中较小的一个", + "type": "", + "default": "" + } + ] + }, + { + "name": "ImagePosition 图片位置", + "kind": "other", + "sourceComponent": "Image", + "subComponent": null, + "rows": [ + { + "prop": "center", + "desc": "居中对齐", + "type": "", + "default": "" + }, + { + "prop": "top", + "desc": "顶部对齐", + "type": "", + "default": "" + }, + { + "prop": "right", + "desc": "右侧对齐", + "type": "", + "default": "" + }, + { + "prop": "bottom", + "desc": "底部对齐", + "type": "", + "default": "" + }, + { + "prop": "left", + "desc": "左侧对齐", + "type": "", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "overlay": { + "id": "overlay", + "name": "Overlay", + "cName": "遮罩层", + "version": "3.0.0", + "category": { + "name": "基础组件", + "enName": "base" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "junjun", + "type": "component", + "desc": "创建一个遮罩层,通常用于阻止用户进行其他操作", + "sort": 5, + "show": true, + "docs": { + "h5": "src/packages/overlay/doc.md", + "enUS": "src/packages/overlay/doc.en-US.md", + "zhTW": "src/packages/overlay/doc.zh-TW.md", + "taro": "src/packages/overlay/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/overlay/demos/h5/demo1.tsx", + "src/packages/overlay/demos/h5/demo2.tsx", + "src/packages/overlay/demos/h5/demo3.tsx", + "src/packages/overlay/demos/h5/demo4.tsx", + "src/packages/overlay/demos/h5/demo5.tsx", + "src/packages/overlay/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/overlay/demos/taro/demo1.tsx", + "src/packages/overlay/demos/taro/demo2.tsx", + "src/packages/overlay/demos/taro/demo3.tsx", + "src/packages/overlay/demos/taro/demo4.tsx", + "src/packages/overlay/demos/taro/demo5.tsx", + "src/packages/overlay/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/overlay/base.ts", + "h5": "src/types/spec/overlay/h5.ts", + "taro": "src/types/spec/overlay/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Overlay", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "当前组件是否显示", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "zIndex", + "desc": "遮罩层级", + "type": "`number`", + "default": "2000" + }, + { + "prop": "duration", + "desc": "动画时长,单位秒", + "type": "`number`", + "default": "0.3" + }, + { + "prop": "lockScroll", + "desc": "背景是否锁定", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "closeOnOverlayClick", + "desc": "是否点击遮罩关闭", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "onClick", + "desc": "点击时触发", + "type": "`event: Event`", + "default": "-" + }, + { + "prop": "afterClose", + "desc": "完全关闭后触发", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "afterShow", + "desc": "完全展示后触发", + "type": "`() => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-overlay-bg-color", + "scssVar": "$overlay-bg-color", + "default": "$color-mask" + } + ] + }, + "divider": { + "id": "divider", + "name": "Divider", + "cName": "分割线", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "vickyYE", + "type": "component", + "desc": "用于将内容分隔为多个区域", + "sort": 7, + "show": true, + "docs": { + "h5": "src/packages/divider/doc.md", + "enUS": "src/packages/divider/doc.en-US.md", + "zhTW": "src/packages/divider/doc.zh-TW.md", + "taro": "src/packages/divider/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/divider/demos/h5/demo1.tsx", + "src/packages/divider/demos/h5/demo2.tsx", + "src/packages/divider/demos/h5/demo3.tsx", + "src/packages/divider/demos/h5/demo4.tsx", + "src/packages/divider/demos/h5/demo5.tsx", + "src/packages/divider/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/divider/demos/taro/demo1.tsx", + "src/packages/divider/demos/taro/demo2.tsx", + "src/packages/divider/demos/taro/demo3.tsx", + "src/packages/divider/demos/taro/demo4.tsx", + "src/packages/divider/demos/taro/demo5.tsx", + "src/packages/divider/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/divider/base.ts", + "h5": "src/types/spec/divider/h5.ts", + "taro": "src/types/spec/divider/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Divider", + "subComponent": null, + "rows": [ + { + "prop": "contentPosition", + "desc": "内容位置", + "type": "`left` | `center` | `right`", + "default": "center" + }, + { + "prop": "direction", + "desc": "水平还是垂直类型", + "type": "`horizontal` | `vertical`", + "default": "horizontal" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-divider-margin", + "scssVar": "$divider-margin", + "default": "scale-px(16px) 0" + }, + { + "cssVar": "--nutui-divider-text-color", + "scssVar": "$divider-text-color", + "default": "$color-text" + }, + { + "cssVar": "--nutui-divider-line-height", + "scssVar": "$divider-line-height", + "default": "scale-px(1px" + }, + { + "cssVar": "--nutui-divider-spacing", + "scssVar": "$divider-spacing", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-divider-side-width", + "scssVar": "$divider-side-width", + "default": "10%" + }, + { + "cssVar": "--nutui-divider-vertical-height", + "scssVar": "$divider-vertical-height", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-divider-vertical-margin", + "scssVar": "$divider-vertical-margin", + "default": "0 scale-px(8px" + } + ] + }, + "grid": { + "id": "grid", + "name": "Grid", + "cName": "宫格", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "yangxiaolu", + "type": "component", + "desc": "宫格", + "sort": 5, + "show": true, + "docs": { + "h5": "src/packages/grid/doc.md", + "enUS": "src/packages/grid/doc.en-US.md", + "zhTW": "src/packages/grid/doc.zh-TW.md", + "taro": "src/packages/grid/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/grid/demos/h5/demo1.tsx", + "src/packages/grid/demos/h5/demo2.tsx", + "src/packages/grid/demos/h5/demo3.tsx", + "src/packages/grid/demos/h5/demo4.tsx", + "src/packages/grid/demos/h5/demo5.tsx", + "src/packages/grid/demos/h5/demo6.tsx", + "src/packages/grid/demos/h5/demo7.tsx", + "src/packages/grid/demos/h5/demo8.tsx", + "src/packages/grid/demos/h5/demo9.tsx", + "src/packages/grid/demos/h5/demo10.tsx" + ], + "taro": [ + "src/packages/grid/demos/taro/demo1.tsx", + "src/packages/grid/demos/taro/demo2.tsx", + "src/packages/grid/demos/taro/demo3.tsx", + "src/packages/grid/demos/taro/demo4.tsx", + "src/packages/grid/demos/taro/demo5.tsx", + "src/packages/grid/demos/taro/demo6.tsx", + "src/packages/grid/demos/taro/demo7.tsx", + "src/packages/grid/demos/taro/demo8.tsx", + "src/packages/grid/demos/taro/demo9.tsx", + "src/packages/grid/demos/taro/demo10.tsx" + ] + }, + "spec": { + "base": "src/types/spec/grid/base.ts", + "h5": "src/types/spec/grid/h5.ts", + "taro": "src/types/spec/grid/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Grid", + "subComponent": null, + "rows": [ + { + "prop": "columns", + "desc": "列数", + "type": "`number` | `string`", + "default": "4" + }, + { + "prop": "gap", + "desc": "格子之间的间距,默认单位为`px`", + "type": "`number` | `string`", + "default": "0" + }, + { + "prop": "center", + "desc": "是否将格子内容居中显示", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "square", + "desc": "是否将格子固定为正方形", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "reverse", + "desc": "内容翻转", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "direction", + "desc": "格子内容排列的方向", + "type": "`horizontal` | `vertical`", + "default": "vertical" + }, + { + "prop": "onClick", + "desc": "宫格子项点击事件", + "type": "`(index) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-grid-border-width", + "scssVar": "$grid-border-width", + "default": "0px" + }, + { + "cssVar": "--nutui-grid-border-color", + "scssVar": "$grid-border-color", + "default": "$color-border" + }, + { + "cssVar": "--nutui-grid-item-text-margin", + "scssVar": "$grid-item-text-margin", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-grid-item-text-color", + "scssVar": "$grid-item-text-color", + "default": "$color-title" + } + ] + }, + "griditem": { + "id": "griditem", + "name": "GridItem", + "cName": "宫格子组件", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "yangxiaolu", + "type": "component", + "desc": "宫格子组件", + "sort": 6, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Grid.Item", + "subComponent": null, + "rows": [ + { + "prop": "text", + "desc": "文字", + "type": "`string` | `ReactNode`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击格子时触发", + "type": "`(event: Event) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "layout": { + "id": "layout", + "name": "Layout", + "cName": "布局", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "yushuang24", + "type": "component", + "desc": "协助进行页面级整体布局。", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/layout/doc.md", + "enUS": "src/packages/layout/doc.en-US.md", + "zhTW": "src/packages/layout/doc.zh-TW.md", + "taro": "src/packages/layout/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/layout/demos/h5/demo1.tsx", + "src/packages/layout/demos/h5/demo2.tsx", + "src/packages/layout/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/layout/demos/taro/demo1.tsx", + "src/packages/layout/demos/taro/demo2.tsx", + "src/packages/layout/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/layout/base.ts", + "h5": "src/types/spec/layout/h5.ts", + "taro": "src/types/spec/layout/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "col": { + "id": "col", + "name": "Col", + "cName": "列", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "yushuang24", + "type": "component", + "desc": "布局组件中的列", + "sort": 3, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Col", + "subComponent": null, + "rows": [ + { + "prop": "span", + "desc": "列元素宽度(共分为24份,例如设置一行3个,那么span值为8)", + "type": "`string` | `number`", + "default": "24" + }, + { + "prop": "offset", + "desc": "列元素偏移距离", + "type": "`string` | `number`", + "default": "0" + }, + { + "prop": "onClick", + "desc": "点击时触发", + "type": "`event: MouseEvent, type: 'row' | 'col'`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "row": { + "id": "row", + "name": "Row", + "cName": "行", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "yushuang24", + "type": "component", + "desc": "布局组件中的行", + "sort": 2, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "props", + "kind": "props", + "sourceComponent": "Row", + "subComponent": null, + "rows": [ + { + "prop": "type", + "desc": "布局方式,可选值为flex", + "type": "`string`", + "default": "-" + }, + { + "prop": "gutter", + "desc": "列元素之间的间距(单位为px)", + "type": "`string` | `number`", + "default": "0" + }, + { + "prop": "justify", + "desc": "Flex 主轴对齐方式,可选值为 start end center space-around space-between", + "type": "`string`", + "default": "start" + }, + { + "prop": "align", + "desc": "Flex 交叉轴对齐方式,可选值为 flex-start center flex-end", + "type": "`string`", + "default": "flex-start" + }, + { + "prop": "wrap", + "desc": "Flex是否换行,可选值为 nowrap wrap reverse", + "type": "`string`", + "default": "nowrap" + }, + { + "prop": "onClick", + "desc": "Fired when clicked", + "type": "`event: MouseEvent, type: 'row' | 'col'`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-row-content-color", + "scssVar": "$row-content-color", + "default": "#fff" + }, + { + "cssVar": "--nutui-row-content-height", + "scssVar": "$row-content-height", + "default": "scale-px(50px" + }, + { + "cssVar": "--nutui-row-content-line-height", + "scssVar": "$row-content-line-height", + "default": "scale-px(40px" + } + ] + }, + "safearea": { + "id": "safearea", + "name": "SafeArea", + "cName": "安全区", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "在全面屏下提供自适应的边距调整。", + "sort": 9, + "show": true, + "docs": { + "h5": "src/packages/safearea/doc.md", + "enUS": "src/packages/safearea/doc.en-US.md", + "zhTW": "src/packages/safearea/doc.zh-TW.md", + "taro": "src/packages/safearea/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/safearea/demos/h5/demo1.tsx" + ], + "taro": [ + "src/packages/safearea/demos/taro/demo1.tsx" + ] + }, + "spec": { + "base": "src/types/spec/safearea/base.ts", + "h5": "src/types/spec/safearea/h5.ts", + "taro": "src/types/spec/safearea/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "space": { + "id": "space", + "name": "Space", + "cName": "间距", + "version": "3.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "ivan", + "type": "component", + "desc": "元素之间的间距,保持相同的宽度", + "sort": 8, + "show": true, + "docs": { + "h5": "src/packages/space/doc.md", + "enUS": "src/packages/space/doc.en-US.md", + "zhTW": "src/packages/space/doc.zh-TW.md", + "taro": "src/packages/space/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/space/demos/h5/demo1.tsx", + "src/packages/space/demos/h5/demo2.tsx", + "src/packages/space/demos/h5/demo3.tsx", + "src/packages/space/demos/h5/demo4.tsx", + "src/packages/space/demos/h5/demo5.tsx", + "src/packages/space/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/space/demos/taro/demo1.tsx", + "src/packages/space/demos/taro/demo2.tsx", + "src/packages/space/demos/taro/demo3.tsx", + "src/packages/space/demos/taro/demo4.tsx", + "src/packages/space/demos/taro/demo5.tsx", + "src/packages/space/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/space/base.ts", + "h5": "src/types/spec/space/h5.ts", + "taro": "src/types/spec/space/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-space-gap", + "scssVar": "$space-gap", + "default": "scale-px(8px" + } + ] + }, + "sticky": { + "id": "sticky", + "name": "Sticky", + "cName": "粘性布局", + "version": "2.0.0", + "category": { + "name": "布局组件", + "enName": "layout" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "hx", + "type": "component", + "desc": "效果同 css 中的 position: sticky", + "sort": 7, + "show": true, + "docs": { + "h5": "src/packages/sticky/doc.md", + "enUS": "src/packages/sticky/doc.en-US.md", + "zhTW": "src/packages/sticky/doc.zh-TW.md", + "taro": "src/packages/sticky/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/sticky/demos/h5/demo1.tsx", + "src/packages/sticky/demos/h5/demo2.tsx", + "src/packages/sticky/demos/h5/demo3.tsx", + "src/packages/sticky/demos/h5/demo4.tsx" + ], + "taro": [ + "src/packages/sticky/demos/taro/demo1.tsx", + "src/packages/sticky/demos/taro/demo2.tsx", + "src/packages/sticky/demos/taro/demo3.tsx", + "src/packages/sticky/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/sticky/base.ts", + "h5": "src/types/spec/sticky/h5.ts", + "taro": "src/types/spec/sticky/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Sticky", + "subComponent": null, + "rows": [ + { + "prop": "position", + "desc": "吸附位置", + "type": "`top` | `bottom`", + "default": "top" + }, + { + "prop": "threshold", + "desc": "距离,当 position 为 top 时,设置的是 top", + "type": "`number`", + "default": "0" + }, + { + "prop": "zIndex", + "desc": "吸附时的层级", + "type": "`number`", + "default": "2000" + }, + { + "prop": "container", + "desc": "容器的 ref", + "type": "`React.RefObject`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "吸附状态改变时触发", + "type": "`(val: boolean) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "backtop": { + "id": "backtop", + "name": "BackTop", + "cName": "返回顶部", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "vickyYe", + "type": "component", + "desc": "提供较长的页面快捷返回顶部功能。", + "sort": 2, + "show": true, + "docs": { + "h5": "src/packages/backtop/doc.md", + "enUS": "src/packages/backtop/doc.en-US.md", + "zhTW": "src/packages/backtop/doc.zh-TW.md", + "taro": "src/packages/backtop/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/backtop/demos/h5/demo1.tsx", + "src/packages/backtop/demos/h5/demo2.tsx", + "src/packages/backtop/demos/h5/demo3.tsx", + "src/packages/backtop/demos/h5/demo4.tsx", + "src/packages/backtop/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/backtop/demos/taro/demo1.tsx", + "src/packages/backtop/demos/taro/demo2.tsx", + "src/packages/backtop/demos/taro/demo3.tsx", + "src/packages/backtop/demos/taro/demo4.tsx", + "src/packages/backtop/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/backtop/base.ts", + "h5": "src/types/spec/backtop/h5.ts", + "taro": "src/types/spec/backtop/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "BackTop", + "subComponent": null, + "rows": [ + { + "prop": "target", + "desc": "获取监听的目标元素", + "type": "`string`", + "default": "-" + }, + { + "prop": "threshold", + "desc": "页面垂直滚动多高后出现", + "type": "`number`", + "default": "200" + }, + { + "prop": "zIndex", + "desc": "设置组件页面层级", + "type": "`number`", + "default": "10" + }, + { + "prop": "duration", + "desc": "设置动画持续时间,为 0 时表示无动画", + "type": "`number`", + "default": "1000" + }, + { + "prop": "onClick", + "desc": "按钮点击时触发事件", + "type": "`(event: MouseEvent) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "elevator": { + "id": "elevator", + "name": "Elevator", + "cName": "电梯楼层", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "用于列表快速定位以及索引的显示", + "sort": 4, + "show": true, + "docs": { + "h5": "src/packages/elevator/doc.md", + "enUS": "src/packages/elevator/doc.en-US.md", + "zhTW": "src/packages/elevator/doc.zh-TW.md", + "taro": "src/packages/elevator/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/elevator/demos/h5/demo1.tsx", + "src/packages/elevator/demos/h5/demo2.tsx", + "src/packages/elevator/demos/h5/demo3.tsx", + "src/packages/elevator/demos/h5/demo4.tsx", + "src/packages/elevator/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/elevator/demos/taro/demo1.tsx", + "src/packages/elevator/demos/taro/demo2.tsx", + "src/packages/elevator/demos/taro/demo3.tsx", + "src/packages/elevator/demos/taro/demo4.tsx", + "src/packages/elevator/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/elevator/base.ts", + "h5": "src/types/spec/elevator/h5.ts", + "taro": "src/types/spec/elevator/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Elevator", + "subComponent": null, + "rows": [ + { + "prop": "height", + "desc": "电梯区域的高度", + "type": "`number` | `string`", + "default": "200px" + }, + { + "prop": "floorKey", + "desc": "索引 key 值", + "type": "`string`", + "default": "title" + }, + { + "prop": "list", + "desc": "索引列表", + "type": "`Array(item 需包含 id、name 属性, name 支持传入 html 结构)`", + "default": "[{id: 0, name: ''}]" + }, + { + "prop": "sticky", + "desc": "索引是否吸顶", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "showKeys", + "desc": "展示右侧导航", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "spaceHeight", + "desc": "右侧锚点的上下间距", + "type": "`number`", + "default": "23" + }, + { + "prop": "titleHeight", + "desc": "左侧索引的高度", + "type": "`number`", + "default": "35" + }, + { + "prop": "onClickItem", + "desc": "点击内容", + "type": "`onClickItem:(key: string, item: { id: number, name: string })=>void`", + "default": "false" + }, + { + "prop": "onClickIndex", + "desc": "点击索引", + "type": "`onClickIndex:(key: string)=>void`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-elevator-list-bg-color", + "scssVar": "$elevator-list-bg-color", + "default": "$white" + }, + { + "cssVar": "--nutui-elevator-list-color", + "scssVar": "$elevator-list-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-elevator-bars-right", + "scssVar": "$elevator-bars-right", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-elevator-bars-top", + "scssVar": "$elevator-bars-top", + "default": "50%" + }, + { + "cssVar": "--nutui-elevator-bars-z-index", + "scssVar": "$elevator-bars-z-index", + "default": "1" + } + ] + }, + "fixednav": { + "id": "fixednav", + "name": "FixedNav", + "cName": "悬浮导航", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Ymm0008", + "type": "component", + "desc": "悬浮收齐体验交互,用于快捷导航", + "sort": 5, + "show": true, + "docs": { + "h5": "src/packages/fixednav/doc.md", + "enUS": "src/packages/fixednav/doc.en-US.md", + "zhTW": "src/packages/fixednav/doc.zh-TW.md", + "taro": "src/packages/fixednav/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/fixednav/demos/h5/demo1.tsx", + "src/packages/fixednav/demos/h5/demo2.tsx", + "src/packages/fixednav/demos/h5/demo3.tsx", + "src/packages/fixednav/demos/h5/demo4.tsx", + "src/packages/fixednav/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/fixednav/demos/taro/demo1.tsx", + "src/packages/fixednav/demos/taro/demo2.tsx", + "src/packages/fixednav/demos/taro/demo3.tsx", + "src/packages/fixednav/demos/taro/demo4.tsx", + "src/packages/fixednav/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/fixednav/base.ts", + "h5": "src/types/spec/fixednav/h5.ts", + "taro": "src/types/spec/fixednav/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "FixedNav", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否打开", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "list", + "desc": "悬浮列表内容数据", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "activeText", + "desc": "收起列表按钮文案", + "type": "`string`", + "default": "收起导航" + }, + { + "prop": "inactiveText", + "desc": "展开列表按钮文案", + "type": "`string`", + "default": "快速导航" + }, + { + "prop": "type", + "desc": "导航方向", + "type": "`left` | `right`", + "default": "right" + }, + { + "prop": "overlay", + "desc": "展开时是否显示遮罩", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "position", + "desc": "fixed 垂直位置", + "type": "`object`", + "default": "{top: 'auto', bottom: 'auto'}" + }, + { + "prop": "content", + "desc": "自定义按钮", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "展开收起按钮回调", + "type": "`value: boolean`", + "default": "-" + }, + { + "prop": "onSelect", + "desc": "选择之后触发", + "type": "`item, event: MouseEvent`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-fixednav-color", + "scssVar": "$fixednav-color", + "default": "#1a1a1a" + }, + { + "cssVar": "--nutui-fixednav-index", + "scssVar": "$fixednav-index", + "default": "900" + } + ] + }, + "hoverbutton": { + "id": "hoverbutton", + "name": "HoverButton", + "cName": "悬浮按钮", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "Ymm0008", + "type": "component", + "desc": "悬浮多按钮,用于快捷功能", + "sort": 5, + "show": true, + "docs": { + "h5": "src/packages/hoverbutton/doc.md", + "enUS": "src/packages/hoverbutton/doc.en-US.md", + "zhTW": "src/packages/hoverbutton/doc.zh-TW.md", + "taro": "src/packages/hoverbutton/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/hoverbutton/demos/h5/demo1.tsx", + "src/packages/hoverbutton/demos/h5/demo2.tsx", + "src/packages/hoverbutton/demos/h5/demo3.tsx", + "src/packages/hoverbutton/demos/h5/demo4.tsx", + "src/packages/hoverbutton/demos/h5/demo5.tsx", + "src/packages/hoverbutton/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/hoverbutton/demos/taro/demo1.tsx", + "src/packages/hoverbutton/demos/taro/demo2.tsx", + "src/packages/hoverbutton/demos/taro/demo3.tsx", + "src/packages/hoverbutton/demos/taro/demo4.tsx", + "src/packages/hoverbutton/demos/taro/demo5.tsx", + "src/packages/hoverbutton/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/hoverbutton/base.ts", + "h5": "src/types/spec/hoverbutton/h5.ts", + "taro": "src/types/spec/hoverbutton/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-hoverbutton-spacing", + "scssVar": "$hoverbutton-spacing", + "default": "$spacing-base" + }, + { + "cssVar": "--nutui-hoverbutton-item-size", + "scssVar": "$hoverbutton-item-size", + "default": "scale-px(40px" + } + ] + }, + "hoverbuttonitem": { + "id": "hoverbuttonitem", + "name": "HoverButtonItem", + "cName": "悬浮按钮子组件", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "Ymm0008", + "type": "component", + "desc": "悬浮按钮", + "sort": 5, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "navbar": { + "id": "navbar", + "name": "NavBar", + "cName": "头部导航", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "dsj", + "type": "component", + "desc": "提供导航功能。", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/navbar/doc.md", + "enUS": "src/packages/navbar/doc.en-US.md", + "zhTW": "src/packages/navbar/doc.zh-TW.md", + "taro": "src/packages/navbar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/navbar/demos/h5/demo1.tsx", + "src/packages/navbar/demos/h5/demo2.tsx", + "src/packages/navbar/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/navbar/demos/taro/demo1.tsx", + "src/packages/navbar/demos/taro/demo2.tsx", + "src/packages/navbar/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/navbar/base.ts", + "h5": "src/types/spec/navbar/h5.ts", + "taro": "src/types/spec/navbar/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Navbar", + "subComponent": null, + "rows": [ + { + "prop": "right", + "desc": "右侧内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "left", + "desc": "左侧内容,渲染在返回区域的右侧", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "back", + "desc": "返回区域的文字", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "fixed", + "desc": "是否固定", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "safeArea", + "desc": "是否适配安全区", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "placeholder", + "desc": "固定在顶部时,是否在标签位置生成一个等高的占位元素", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "zIndex", + "desc": "导航栏层级", + "type": "`number` | `string`", + "default": "10" + }, + { + "prop": "onClickBack", + "desc": "点击返回区域后的回调", + "type": "`onClickBack:(event: Event)=>void`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-navbar-width", + "scssVar": "$navbar-width", + "default": "100%" + }, + { + "cssVar": "--nutui-navbar-height", + "scssVar": "$navbar-height", + "default": "scale-px(44px" + }, + { + "cssVar": "--nutui-navbar-margin-bottom", + "scssVar": "$navbar-margin-bottom", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-navbar-background", + "scssVar": "$navbar-background", + "default": "$white" + }, + { + "cssVar": "--nutui-navbar-box-shadow", + "scssVar": "$navbar-box-shadow", + "default": "none" + }, + { + "cssVar": "--nutui-navbar-color", + "scssVar": "$navbar-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-navbar-font-size", + "scssVar": "$navbar-font-size", + "default": "$font-size-base" + } + ] + }, + "sidebar": { + "id": "sidebar", + "name": "SideBar", + "cName": "侧边栏导航", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Alex.hxy", + "type": "component", + "desc": "用于侧边内容选择和切换", + "sort": 10, + "show": true, + "docs": { + "h5": "src/packages/sidebar/doc.md", + "enUS": "src/packages/sidebar/doc.en-US.md", + "zhTW": "src/packages/sidebar/doc.zh-TW.md", + "taro": "src/packages/sidebar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/sidebar/demos/h5/demo1.tsx", + "src/packages/sidebar/demos/h5/demo2.tsx", + "src/packages/sidebar/demos/h5/demo3.tsx", + "src/packages/sidebar/demos/h5/demo4.tsx", + "src/packages/sidebar/demos/h5/demo5.tsx", + "src/packages/sidebar/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/sidebar/demos/taro/demo1.tsx", + "src/packages/sidebar/demos/taro/demo2.tsx", + "src/packages/sidebar/demos/taro/demo3.tsx", + "src/packages/sidebar/demos/taro/demo4.tsx", + "src/packages/sidebar/demos/taro/demo5.tsx", + "src/packages/sidebar/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/sidebar/base.ts", + "h5": "src/types/spec/sidebar/h5.ts", + "taro": "src/types/spec/sidebar/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-sidebar-border-radius", + "scssVar": "$sidebar-border-radius", + "default": "0" + }, + { + "cssVar": "--nutui-sidebar-width", + "scssVar": "$sidebar-width", + "default": "scale-px(104px" + }, + { + "cssVar": "--nutui-sidebar-max-width", + "scssVar": "$sidebar-max-width", + "default": "scale-px(128px" + }, + { + "cssVar": "--nutui-sidebar-title-height", + "scssVar": "$sidebar-title-height", + "default": "scale-px(52px" + }, + { + "cssVar": "--nutui-sidebar-item-background", + "scssVar": "$sidebar-item-background", + "default": "$white" + }, + { + "cssVar": "--nutui-sidebar-item-padding", + "scssVar": "$sidebar-item-padding", + "default": "scale-px(24px) scale-px(20px" + } + ] + }, + "sidebaritem": { + "id": "sidebaritem", + "name": "SideBarItem", + "cName": "侧边栏导航子组件", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "Alex.hxy", + "type": "component", + "desc": "用于侧边内容选择和切换", + "sort": 10, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "tabbar": { + "id": "tabbar", + "name": "Tabbar", + "cName": "标签栏", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "dsj", + "type": "component", + "desc": "底部导航常用场景", + "sort": 2, + "show": true, + "docs": { + "h5": "src/packages/tabbar/doc.md", + "enUS": "src/packages/tabbar/doc.en-US.md", + "zhTW": "src/packages/tabbar/doc.zh-TW.md", + "taro": "src/packages/tabbar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/tabbar/demos/h5/demo1.tsx", + "src/packages/tabbar/demos/h5/demo2.tsx", + "src/packages/tabbar/demos/h5/demo3.tsx", + "src/packages/tabbar/demos/h5/demo4.tsx", + "src/packages/tabbar/demos/h5/demo5.tsx", + "src/packages/tabbar/demos/h5/demo6.tsx", + "src/packages/tabbar/demos/h5/demo7.tsx", + "src/packages/tabbar/demos/h5/demo8.tsx", + "src/packages/tabbar/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/tabbar/demos/taro/demo1.tsx", + "src/packages/tabbar/demos/taro/demo2.tsx", + "src/packages/tabbar/demos/taro/demo3.tsx", + "src/packages/tabbar/demos/taro/demo4.tsx", + "src/packages/tabbar/demos/taro/demo5.tsx", + "src/packages/tabbar/demos/taro/demo6.tsx", + "src/packages/tabbar/demos/taro/demo7.tsx", + "src/packages/tabbar/demos/taro/demo8.tsx", + "src/packages/tabbar/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/tabbar/base.ts", + "h5": "src/types/spec/tabbar/h5.ts", + "taro": "src/types/spec/tabbar/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Tabbar", + "subComponent": null, + "rows": [ + { + "prop": "defaultValue", + "desc": "默认选中的标签的索引值", + "type": "`number`", + "default": "0" + }, + { + "prop": "value", + "desc": "选中的标签的索引值", + "type": "`number`", + "default": "-" + }, + { + "prop": "fixed", + "desc": "是否固定在页面底部,为 true 时默认开启 safeArea", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "activeColor", + "desc": "icon激活的颜色", + "type": "`string`", + "default": "#1989fa" + }, + { + "prop": "inactiveColor", + "desc": "icon未激活的颜色", + "type": "`string`", + "default": "#7d7e80" + }, + { + "prop": "safeArea", + "desc": "是否开启iphone系列全面屏底部安全区适配", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onSwitch", + "desc": "切换页签时触发事件", + "type": "`(value) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-tabbar-height", + "scssVar": "$tabbar-height", + "default": "scale-px(46px" + }, + { + "cssVar": "--nutui-tabbar-active-color", + "scssVar": "$tabbar-active-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-tabbar-border-top", + "scssVar": "$tabbar-border-top", + "default": "0" + }, + { + "cssVar": "--nutui-tabbar-border-bottom", + "scssVar": "$tabbar-border-bottom", + "default": "0" + }, + { + "cssVar": "--nutui-tabbar-box-shadow", + "scssVar": "$tabbar-box-shadow", + "default": "none" + }, + { + "cssVar": "--nutui-tabbar-text-line-height", + "scssVar": "$tabbar-text-line-height", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-tabbar-text-margin-top", + "scssVar": "$tabbar-text-margin-top", + "default": "scale-px(4px" + } + ] + }, + "tabbaritem": { + "id": "tabbaritem", + "name": "TabbarItem", + "cName": "标签栏子组件", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "dsj", + "type": "component", + "desc": "标签栏子组件", + "sort": 2, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Tabbar.Item", + "subComponent": null, + "rows": [ + { + "prop": "title", + "desc": "标签页的标题", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "icon", + "desc": "自定义图标", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "value", + "desc": "徽标中显示的内容,支持数字、字符和自定义内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "max", + "desc": "value 为数值时,最大值", + "type": "`number`", + "default": "99" + }, + { + "prop": "dot", + "desc": "徽标是否为小点", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "top", + "desc": "徽标的上下偏移量,支持单位设置,可设置为:5 等", + "type": "`number`", + "default": "0" + }, + { + "prop": "right", + "desc": "徽标的左右偏移量,支持单位设置,可设置为:5 等", + "type": "`number`", + "default": "0" + } + ] + } + ] + }, + "tokens": [] + }, + "tabpane": { + "id": "tabpane", + "name": "TabPane", + "cName": "选项卡切换子组件", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "张晶发", + "type": "component", + "desc": "选项卡切换子组件", + "sort": 2, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "tabs": { + "id": "tabs", + "name": "Tabs", + "cName": "选项卡切换", + "version": "3.0.0", + "category": { + "name": "导航组件", + "enName": "nav" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "常用于平级区域大块内容的的收纳和展现,支持内嵌标签形式和渲染循环数据形式", + "sort": 12, + "show": true, + "docs": { + "h5": "src/packages/tabs/doc.md", + "enUS": "src/packages/tabs/doc.en-US.md", + "zhTW": "src/packages/tabs/doc.zh-TW.md", + "taro": "src/packages/tabs/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/tabs/demos/h5/demo1.tsx", + "src/packages/tabs/demos/h5/demo2.tsx", + "src/packages/tabs/demos/h5/demo3.tsx", + "src/packages/tabs/demos/h5/demo4.tsx", + "src/packages/tabs/demos/h5/demo5.tsx", + "src/packages/tabs/demos/h5/demo6.tsx", + "src/packages/tabs/demos/h5/demo7.tsx", + "src/packages/tabs/demos/h5/demo8.tsx", + "src/packages/tabs/demos/h5/demo9.tsx", + "src/packages/tabs/demos/h5/demo10.tsx", + "src/packages/tabs/demos/h5/demo11.tsx", + "src/packages/tabs/demos/h5/demo12.tsx", + "src/packages/tabs/demos/h5/demo13.tsx", + "src/packages/tabs/demos/h5/demo14.tsx", + "src/packages/tabs/demos/h5/demo15.tsx", + "src/packages/tabs/demos/h5/demo16.tsx", + "src/packages/tabs/demos/h5/demo17.tsx", + "src/packages/tabs/demos/h5/demo18.tsx", + "src/packages/tabs/demos/h5/demo19.tsx", + "src/packages/tabs/demos/h5/demo20.tsx", + "src/packages/tabs/demos/h5/demo21.tsx", + "src/packages/tabs/demos/h5/demo22.tsx", + "src/packages/tabs/demos/h5/demo23.tsx" + ], + "taro": [ + "src/packages/tabs/demos/taro/demo1.tsx", + "src/packages/tabs/demos/taro/demo2.tsx", + "src/packages/tabs/demos/taro/demo3.tsx", + "src/packages/tabs/demos/taro/demo4.tsx", + "src/packages/tabs/demos/taro/demo5.tsx", + "src/packages/tabs/demos/taro/demo6.tsx", + "src/packages/tabs/demos/taro/demo7.tsx", + "src/packages/tabs/demos/taro/demo8.tsx", + "src/packages/tabs/demos/taro/demo9.tsx", + "src/packages/tabs/demos/taro/demo10.tsx", + "src/packages/tabs/demos/taro/demo11.tsx", + "src/packages/tabs/demos/taro/demo12.tsx", + "src/packages/tabs/demos/taro/demo13.tsx", + "src/packages/tabs/demos/taro/demo14.tsx", + "src/packages/tabs/demos/taro/demo15.tsx", + "src/packages/tabs/demos/taro/demo16.tsx", + "src/packages/tabs/demos/taro/demo17.tsx", + "src/packages/tabs/demos/taro/demo18.tsx", + "src/packages/tabs/demos/taro/demo19.tsx", + "src/packages/tabs/demos/taro/demo20.tsx", + "src/packages/tabs/demos/taro/demo21.tsx", + "src/packages/tabs/demos/taro/demo22.tsx", + "src/packages/tabs/demos/taro/demo23.tsx" + ] + }, + "spec": { + "base": "src/types/spec/tabs/base.ts", + "h5": "src/types/spec/tabs/h5.ts", + "taro": "src/types/spec/tabs/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Tabs", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "当前激活 tab 面板的值", + "type": "`number` | `string`", + "default": "0" + }, + { + "prop": "defaultValue", + "desc": "初始化激活 tab 的值", + "type": "`number` | `string`", + "default": "0" + }, + { + "prop": "activeColor", + "desc": "标签选中色", + "type": "`string`", + "default": "#1a1a1a" + }, + { + "prop": "direction", + "desc": "使用横纵方向", + "type": "`horizontal` | `vertical`", + "default": "horizontal" + }, + { + "prop": "activeType", + "desc": "选中底部展示样式 可选值 `line`、`smile`", + "type": "`string`", + "default": "line" + }, + { + "prop": "duration", + "desc": "切换动画时长,单位 ms 0 代表无动画", + "type": "`number` | `string`", + "default": "300" + }, + { + "prop": "title", + "desc": "自定义导航区域", + "type": "`() => JSX.Element[]`", + "default": "-" + }, + { + "prop": "align", + "desc": "标题左对齐", + "type": "`left` | `right`", + "default": "-" + }, + { + "prop": "autoHeight", + "desc": "自动高度。设置为 true 时,nut-tabs 和 nut-tabs\\_\\_content 会随着当前 nut-tabpane 的高度而发生变化。", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "tabStyle", + "desc": "标签栏样式", + "type": "`CSSProperties`", + "default": "{}" + }, + { + "prop": "onClick", + "desc": "点击标签时触发", + "type": "`(index: string | number) => void`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "当前激活的标签改变时触发", + "type": "`(index: string | number) => void`", + "default": "-" + } + ] + }, + { + "name": "Props", + "kind": "props", + "sourceComponent": "Tabs.Tabpane", + "subComponent": "Tabpane", + "rows": [ + { + "prop": "title", + "desc": "标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "value", + "desc": "标签 Key , 匹配的标识符, 默认为索引值", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "是否禁用标签", + "type": "`boolean`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-tabs-titles-height", + "scssVar": "$tabs-titles-height", + "default": "scale-px(44px" + }, + { + "cssVar": "--nutui-tabs-titles-gap", + "scssVar": "$tabs-titles-gap", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-tabs-tab-line-width", + "scssVar": "$tabs-tab-line-width", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-tabs-tab-line-height", + "scssVar": "$tabs-tab-line-height", + "default": "scale-px(2px" + }, + { + "cssVar": "--nutui-tabs-tab-line-color", + "scssVar": "$tabs-tab-line-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-tabs-line-bottom", + "scssVar": "$tabs-tab-line-bottom", + "default": "15%" + }, + { + "cssVar": "--nutui-tabs-tab-line-opacity", + "scssVar": "$tabs-tab-line-opacity", + "default": "1" + }, + { + "cssVar": "--nutui-tabs-tabpane-padding", + "scssVar": "$tabs-tabpane-padding", + "default": "scale-px(24px) scale-px(20px" + } + ] + }, + "address": { + "id": "address", + "name": "Address", + "cName": "地址", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "hanyuxinting", + "type": "component", + "desc": "地址组件", + "sort": 3, + "show": true, + "docs": { + "h5": "src/packages/address/doc.md", + "enUS": "src/packages/address/doc.en-US.md", + "zhTW": "src/packages/address/doc.zh-TW.md", + "taro": "src/packages/address/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/address/demos/h5/demo1.tsx", + "src/packages/address/demos/h5/demo2.tsx", + "src/packages/address/demos/h5/demo3.tsx", + "src/packages/address/demos/h5/demo4.tsx", + "src/packages/address/demos/h5/demo5.tsx", + "src/packages/address/demos/h5/demo6.tsx", + "src/packages/address/demos/h5/demo11.tsx" + ], + "taro": [ + "src/packages/address/demos/taro/demo1.tsx", + "src/packages/address/demos/taro/demo2.tsx", + "src/packages/address/demos/taro/demo3.tsx", + "src/packages/address/demos/taro/demo4.tsx", + "src/packages/address/demos/taro/demo5.tsx", + "src/packages/address/demos/taro/demo6.tsx", + "src/packages/address/demos/taro/demo11.tsx" + ] + }, + "spec": { + "base": "src/types/spec/address/base.ts", + "h5": "src/types/spec/address/h5.ts", + "taro": "src/types/spec/address/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Address", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否打开地址选择", + "type": "`boolean`", + "default": "-" + }, + { + "prop": "type", + "desc": "地址选择类型 exist/custom", + "type": "`string`", + "default": "custom" + }, + { + "prop": "existList", + "desc": "已存在地址列表,每个地址对象中,必传值provinceName、cityName、countyName、townName、addressDetail、selectedAddress(字段解释见下)", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "defaultIcon", + "desc": "已有地址列表默认图标,type='exist' 时生效", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "selectIcon", + "desc": "已有地址列表选中图标,type='exist' 时生效", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "closeIcon", + "desc": "自定义关闭弹框按钮图标", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "backIcon", + "desc": "自定义地址与已有地址切换时,自定义返回的按钮图标", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "custom", + "desc": "是否可以切换自定义地址选择,type='exist' 时生效", + "type": "`boolean` | `string`", + "default": "true" + }, + { + "prop": "onExistSelect", + "desc": "选择已有地址列表时触发", + "type": "`(data: AddressList) => void`", + "default": "-" + }, + { + "prop": "onSwitch", + "desc": "点击'选择其他地址'或自定义地址选择左上角返回按钮触发", + "type": "`(data: { type: string }) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "calendar": { + "id": "calendar", + "name": "Calendar", + "cName": "日历", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "szg2008", + "type": "component", + "desc": "日历,可平铺/弹窗展示", + "sort": 10, + "show": true, + "docs": { + "h5": "src/packages/calendar/doc.md", + "enUS": "src/packages/calendar/doc.en-US.md", + "zhTW": "src/packages/calendar/doc.zh-TW.md", + "taro": "src/packages/calendar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/calendar/demos/h5/demo1.tsx", + "src/packages/calendar/demos/h5/demo2.tsx", + "src/packages/calendar/demos/h5/demo3.tsx", + "src/packages/calendar/demos/h5/demo4.tsx", + "src/packages/calendar/demos/h5/demo5.tsx", + "src/packages/calendar/demos/h5/demo6.tsx", + "src/packages/calendar/demos/h5/demo7.tsx", + "src/packages/calendar/demos/h5/demo8.tsx", + "src/packages/calendar/demos/h5/demo9.tsx", + "src/packages/calendar/demos/h5/demo10.tsx", + "src/packages/calendar/demos/h5/demo11.tsx" + ], + "taro": [ + "src/packages/calendar/demos/taro/demo1.tsx", + "src/packages/calendar/demos/taro/demo2.tsx", + "src/packages/calendar/demos/taro/demo3.tsx", + "src/packages/calendar/demos/taro/demo4.tsx", + "src/packages/calendar/demos/taro/demo5.tsx", + "src/packages/calendar/demos/taro/demo6.tsx", + "src/packages/calendar/demos/taro/demo7.tsx", + "src/packages/calendar/demos/taro/demo8.tsx", + "src/packages/calendar/demos/taro/demo9.tsx", + "src/packages/calendar/demos/taro/demo10.tsx", + "src/packages/calendar/demos/taro/demo11.tsx" + ] + }, + "spec": { + "base": "src/types/spec/calendar/base.ts", + "h5": "src/types/spec/calendar/h5.ts", + "taro": "src/types/spec/calendar/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Calendar", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否可见", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "type", + "desc": "类型,日期选择'single',区间选择'range'", + "type": "`string`", + "default": "single" + }, + { + "prop": "popup", + "desc": "是否弹窗状态展示", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "autoBackfill", + "desc": "自动回填", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "显示标题", + "type": "`string`", + "default": "日期选择" + }, + { + "prop": "defaultValue", + "desc": "默认值,日期选择 string 格式,区间选择 Array 格式", + "type": "`string | Array`", + "default": "-" + }, + { + "prop": "startDate", + "desc": "开始日期, 如果不限制开始日期传 null", + "type": "`string`", + "default": "今天" + }, + { + "prop": "endDate", + "desc": "结束日期,如果不限制结束日期传 null", + "type": "`string`", + "default": "距离今天 365 天" + }, + { + "prop": "showToday", + "desc": "是否展示今天标记", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "startText", + "desc": "范围选择,开始信息文案", + "type": "`ReactNode`", + "default": "开始" + }, + { + "prop": "endText", + "desc": "范围选择,结束信息文案", + "type": "`ReactNode`", + "default": "结束" + }, + { + "prop": "confirmText", + "desc": "底部确认按钮文案", + "type": "`ReactNode`", + "default": "确认" + }, + { + "prop": "showTitle", + "desc": "是否在展示日历标题", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "showSubTitle", + "desc": "是否展示日期标题", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "scrollAnimation", + "desc": "是否启动滚动动画", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "renderHeaderButtons", + "desc": "自定义日历标题下部,可用以添加自定义操作", + "type": "`() => string", + "default": "JSX.Element" + }, + { + "prop": "renderDay", + "desc": "日期信息", + "type": "`(date: Day) => string", + "default": "JSX.Element" + }, + { + "prop": "renderDayTop", + "desc": "日期顶部信息", + "type": "`(date: Day) => string", + "default": "JSX.Element" + }, + { + "prop": "renderDayBottom", + "desc": "日期底部信息", + "type": "`(date: Day) => string", + "default": "JSX.Element" + }, + { + "prop": "onClickDay", + "desc": "点击/选择后触发", + "type": "`(data: string) => {}`", + "default": "" + }, + { + "prop": "onPageChange", + "desc": "年月子标题到达顶部时触发", + "type": "`(param: string) => {}`", + "default": "" + }, + { + "prop": "onConfirm", + "desc": "选择之后或是点击确认按钮触发", + "type": "`(param: string) => {}`", + "default": "" + }, + { + "prop": "onClose", + "desc": "关闭时触发", + "type": "`() => {}`", + "default": "" + } + ] + }, + { + "name": "Day", + "kind": "other", + "sourceComponent": "Calendar", + "subComponent": null, + "rows": [ + { + "prop": "day", + "desc": "`string | number`", + "type": "", + "default": "" + }, + { + "prop": "type", + "desc": "`string`", + "type": "", + "default": "" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Calendar", + "subComponent": null, + "rows": [ + { + "prop": "scrollToDate", + "desc": "滚动到指定日期所在月,如:'2023-06-30'", + "type": "`string`", + "default": "" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-calendar-header-height", + "scssVar": "$calendar-header-height", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-calendar-day-width", + "scssVar": "$calendar-day-width", + "default": "14.28%" + }, + { + "cssVar": "--nutui-calendar-day-height", + "scssVar": "$calendar-day-height", + "default": "scale-px(60px" + } + ] + }, + "calendaritem": { + "id": "calendaritem", + "name": "CalendarItem", + "cName": "日历", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "szg2008", + "type": "component", + "desc": "日历,可平铺/弹窗展示", + "sort": 10, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "calendarcard": { + "id": "calendarcard", + "name": "CalendarCard", + "cName": "日历卡片", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "eiinu", + "type": "component", + "desc": "日历卡片,支持多种选择类型", + "sort": 10, + "show": true, + "docs": { + "h5": "src/packages/calendarcard/doc.md", + "enUS": "src/packages/calendarcard/doc.en-US.md", + "zhTW": "src/packages/calendarcard/doc.zh-TW.md", + "taro": "src/packages/calendarcard/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/calendarcard/demos/h5/demo1.tsx", + "src/packages/calendarcard/demos/h5/demo2.tsx", + "src/packages/calendarcard/demos/h5/demo3.tsx", + "src/packages/calendarcard/demos/h5/demo4.tsx", + "src/packages/calendarcard/demos/h5/demo5.tsx", + "src/packages/calendarcard/demos/h5/demo6.tsx", + "src/packages/calendarcard/demos/h5/demo7.tsx", + "src/packages/calendarcard/demos/h5/demo8.tsx", + "src/packages/calendarcard/demos/h5/demo9.tsx", + "src/packages/calendarcard/demos/h5/demo10.tsx", + "src/packages/calendarcard/demos/h5/demo11.tsx", + "src/packages/calendarcard/demos/h5/demo12.tsx", + "src/packages/calendarcard/demos/h5/demo13.tsx", + "src/packages/calendarcard/demos/h5/demo14.tsx" + ], + "taro": [ + "src/packages/calendarcard/demos/taro/demo1.tsx", + "src/packages/calendarcard/demos/taro/demo2.tsx", + "src/packages/calendarcard/demos/taro/demo3.tsx", + "src/packages/calendarcard/demos/taro/demo4.tsx", + "src/packages/calendarcard/demos/taro/demo5.tsx", + "src/packages/calendarcard/demos/taro/demo6.tsx", + "src/packages/calendarcard/demos/taro/demo7.tsx", + "src/packages/calendarcard/demos/taro/demo8.tsx", + "src/packages/calendarcard/demos/taro/demo9.tsx", + "src/packages/calendarcard/demos/taro/demo10.tsx", + "src/packages/calendarcard/demos/taro/demo11.tsx", + "src/packages/calendarcard/demos/taro/demo12.tsx", + "src/packages/calendarcard/demos/taro/demo13.tsx", + "src/packages/calendarcard/demos/taro/demo14.tsx" + ] + }, + "spec": { + "base": "src/types/spec/calendarcard/base.ts", + "h5": "src/types/spec/calendarcard/h5.ts", + "taro": "src/types/spec/calendarcard/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "cascader": { + "id": "cascader", + "name": "Cascader", + "cName": "级联选择器", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "ailululu", + "type": "component", + "desc": "级联选择,用于多层级数据的选择,典型场景为省市区选择。", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/cascader/doc.md", + "enUS": "src/packages/cascader/doc.en-US.md", + "zhTW": "src/packages/cascader/doc.zh-TW.md", + "taro": "src/packages/cascader/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/cascader/demos/h5/demo1.tsx", + "src/packages/cascader/demos/h5/demo2.tsx", + "src/packages/cascader/demos/h5/demo3.tsx", + "src/packages/cascader/demos/h5/demo4.tsx", + "src/packages/cascader/demos/h5/demo5.tsx", + "src/packages/cascader/demos/h5/demo6.tsx", + "src/packages/cascader/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/cascader/demos/taro/demo1.tsx", + "src/packages/cascader/demos/taro/demo2.tsx", + "src/packages/cascader/demos/taro/demo3.tsx", + "src/packages/cascader/demos/taro/demo4.tsx", + "src/packages/cascader/demos/taro/demo5.tsx", + "src/packages/cascader/demos/taro/demo6.tsx", + "src/packages/cascader/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/cascader/base.ts", + "h5": "src/types/spec/cascader/h5.ts", + "taro": "src/types/spec/cascader/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Cascader", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "选中值,受控", + "type": "`(number | string)[]`", + "default": "-" + }, + { + "prop": "defaultValue", + "desc": "默认选中值", + "type": "`(number | string)[]`", + "default": "-" + }, + { + "prop": "options", + "desc": "级联数据", + "type": "`Array`", + "default": "-" + }, + { + "prop": "popup", + "desc": "是否弹窗状态展示", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "visible", + "desc": "级联显示隐藏状态", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "activeColor", + "desc": "选中激活颜色", + "type": "`string`", + "default": "-" + }, + { + "prop": "activeIcon", + "desc": "标记选中的Icon", + "type": "`string`", + "default": "ReactNode" + }, + { + "prop": "lazy", + "desc": "是否开启动态加载", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "optionKey", + "desc": "自定义`options`结构中,包含 textKey、valueKey、childrenKey", + "type": "`object`", + "default": "-" + }, + { + "prop": "format", + "desc": "当options为可转换为树形结构的扁平结构时,配置转换规则", + "type": "`object`", + "default": "-" + }, + { + "prop": "title", + "desc": "标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "closeIconPosition", + "desc": "取消按钮位置,继承 Popup 组件", + "type": "`string`", + "default": "top-right" + }, + { + "prop": "closeIcon", + "desc": "自定义关闭按钮,继承 Popup 组件", + "type": "`ReactNode`", + "default": "close" + }, + { + "prop": "closeable", + "desc": "是否显示关闭按钮,继承 Popup 组件", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "onLoad", + "desc": "动态加载回调,开启动态加载时生效", + "type": "`(node: any, resolve: any) => void`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "选中值改变时触发", + "type": "`(value: CascaderValue, params?: any) => void`", + "default": "-" + }, + { + "prop": "onPathChange", + "desc": "选中项改变时触发", + "type": "`(value: CascaderValue, params: any) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-cascader-font-size", + "scssVar": "$cascader-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-cascader-pane-height", + "scssVar": "$cascader-pane-height", + "default": "scale-px(342px" + }, + { + "cssVar": "--nutui-cascader-pane-paddingTop", + "scssVar": "$cascader-pane-paddingTop", + "default": "scale-px(10px" + }, + { + "cssVar": "--nutui-cascader-bar-line-height", + "scssVar": "$cascader-bar-line-height", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-cascader-bar-color", + "scssVar": "$cascader-bar-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-cascader-item-height", + "scssVar": "$cascader-item-height", + "default": "scale-px(40px" + }, + { + "cssVar": "--nutui-cascader-item-padding", + "scssVar": "$cascader-item-padding", + "default": "scale-px(10px) scale-px(20px" + }, + { + "cssVar": "--nutui-cascader-item-margin", + "scssVar": "$cascader-item-margin", + "default": "0px" + }, + { + "cssVar": "--nutui-cascader-item-color", + "scssVar": "$cascader-item-color", + "default": "$color-title" + } + ] + }, + "checkbox": { + "id": "checkbox", + "name": "Checkbox", + "cName": "复选按钮", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "oasis", + "type": "component", + "desc": "多选按钮用于选择。", + "sort": 4, + "show": true, + "docs": { + "h5": "src/packages/checkbox/doc.md", + "enUS": "src/packages/checkbox/doc.en-US.md", + "zhTW": "src/packages/checkbox/doc.zh-TW.md", + "taro": "src/packages/checkbox/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/checkbox/demos/h5/demo1.tsx", + "src/packages/checkbox/demos/h5/demo2.tsx", + "src/packages/checkbox/demos/h5/demo3.tsx", + "src/packages/checkbox/demos/h5/demo4.tsx", + "src/packages/checkbox/demos/h5/demo5.tsx", + "src/packages/checkbox/demos/h5/demo6.tsx", + "src/packages/checkbox/demos/h5/demo7.tsx", + "src/packages/checkbox/demos/h5/demo8.tsx", + "src/packages/checkbox/demos/h5/demo9.tsx", + "src/packages/checkbox/demos/h5/demo10.tsx", + "src/packages/checkbox/demos/h5/demo11.tsx", + "src/packages/checkbox/demos/h5/demo12.tsx", + "src/packages/checkbox/demos/h5/demo13.tsx", + "src/packages/checkbox/demos/h5/demo14.tsx", + "src/packages/checkbox/demos/h5/demo15.tsx" + ], + "taro": [ + "src/packages/checkbox/demos/taro/demo1.tsx", + "src/packages/checkbox/demos/taro/demo2.tsx", + "src/packages/checkbox/demos/taro/demo3.tsx", + "src/packages/checkbox/demos/taro/demo4.tsx", + "src/packages/checkbox/demos/taro/demo5.tsx", + "src/packages/checkbox/demos/taro/demo6.tsx", + "src/packages/checkbox/demos/taro/demo7.tsx", + "src/packages/checkbox/demos/taro/demo8.tsx", + "src/packages/checkbox/demos/taro/demo9.tsx", + "src/packages/checkbox/demos/taro/demo10.tsx", + "src/packages/checkbox/demos/taro/demo11.tsx", + "src/packages/checkbox/demos/taro/demo12.tsx", + "src/packages/checkbox/demos/taro/demo13.tsx", + "src/packages/checkbox/demos/taro/demo14.tsx", + "src/packages/checkbox/demos/taro/demo15.tsx" + ] + }, + "spec": { + "base": "src/types/spec/checkbox/base.ts", + "h5": "src/types/spec/checkbox/h5.ts", + "taro": "src/types/spec/checkbox/taro.ts" + }, + "api": { + "tables": [ + { + "name": "props", + "kind": "props", + "sourceComponent": "Checkbox", + "subComponent": null, + "rows": [ + { + "prop": "checked", + "desc": "是否选中", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "defaultChecked", + "desc": "初始是否选中", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "disabled", + "desc": "是否禁用选择", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "labelPosition", + "desc": "文本所在的位置", + "type": "`left` | `right`", + "default": "right" + }, + { + "prop": "icon", + "desc": "选中前", + "type": "`ReactNode`", + "default": "'CheckNormal'" + }, + { + "prop": "activeIcon", + "desc": ",选中后", + "type": "`ReactNode`", + "default": "'Checked'" + }, + { + "prop": "indeterminateIcon", + "desc": "半选状态", + "type": "`ReactNode`", + "default": "'CheckDisabled'" + }, + { + "prop": "label", + "desc": "复选框的文本内容", + "type": "`string`", + "default": "-" + }, + { + "prop": "value", + "desc": "标识值,用于 Group 模式", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "值变化时触发", + "type": "`(value: boolean) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-checkbox-label-color", + "scssVar": "$checkbox-label-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-checkbox-list-padding", + "scssVar": "$checkbox-list-padding", + "default": "0 0 0 scale-px(12px" + } + ] + }, + "checkboxgroup": { + "id": "checkboxgroup", + "name": "CheckboxGroup", + "cName": "多选按钮组", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "多选按钮组", + "sort": 11, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Checkbox.Group", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "当前选中项的标识符", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "defaultValue", + "desc": "初始选中项的标识符", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "是否禁用选择,将用于其下的全部复选框", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "max", + "desc": "限制最大可选数", + "type": "`number`", + "default": "-" + }, + { + "prop": "labelPosition", + "desc": "文本所在的位置", + "type": "`left` | `right`", + "default": "right" + }, + { + "prop": "direction", + "desc": "使用横纵方向 可选值 horizontal、vertical", + "type": "`string`", + "default": "vertical" + }, + { + "prop": "options", + "desc": "配置 options 渲染复选按钮", + "type": "`Array<{ label: string value: string disabled?: boolean }>`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "值变化时触发", + "type": "`(value: string[]) => void`", + "default": "-" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Checkbox.Group", + "subComponent": null, + "rows": [ + { + "prop": "toggle", + "desc": "全选/取消", + "type": "传 `true`,表示全选,传 `false`,表示取消全选", + "default": "" + }, + { + "prop": "reverse", + "desc": "反选", + "type": "`-`", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "datepicker": { + "id": "datepicker", + "name": "DatePicker", + "cName": "日期选择器", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "dsj", + "type": "component", + "desc": "时间选择器,支持日期、年月、时分等维度,通常与弹出层组件配合使用。", + "sort": 15, + "show": true, + "docs": { + "h5": "src/packages/datepicker/doc.md", + "enUS": "src/packages/datepicker/doc.en-US.md", + "zhTW": "src/packages/datepicker/doc.zh-TW.md", + "taro": "src/packages/datepicker/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/datepicker/demos/h5/demo1.tsx", + "src/packages/datepicker/demos/h5/demo2.tsx", + "src/packages/datepicker/demos/h5/demo3.tsx", + "src/packages/datepicker/demos/h5/demo4.tsx", + "src/packages/datepicker/demos/h5/demo5.tsx", + "src/packages/datepicker/demos/h5/demo6.tsx", + "src/packages/datepicker/demos/h5/demo7.tsx", + "src/packages/datepicker/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/datepicker/demos/taro/demo1.tsx", + "src/packages/datepicker/demos/taro/demo2.tsx", + "src/packages/datepicker/demos/taro/demo3.tsx", + "src/packages/datepicker/demos/taro/demo4.tsx", + "src/packages/datepicker/demos/taro/demo5.tsx", + "src/packages/datepicker/demos/taro/demo6.tsx", + "src/packages/datepicker/demos/taro/demo7.tsx", + "src/packages/datepicker/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/datepicker/base.ts", + "h5": "src/types/spec/datepicker/h5.ts", + "taro": "src/types/spec/datepicker/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "DatePicker", + "subComponent": null, + "rows": [ + { + "prop": "defaultValue", + "desc": "初始值", + "type": "`Date`", + "default": "null" + }, + { + "prop": "value", + "desc": "受控", + "type": "`Date`", + "default": "null" + }, + { + "prop": "visible", + "desc": "是否可见", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "type", + "desc": "类时间类型,可选值 date time year-month month-day datehour datetime hour-minutes", + "type": "`string`", + "default": "date" + }, + { + "prop": "minuteStep", + "desc": "分钟步进值", + "type": "`number`", + "default": "1" + }, + { + "prop": "showChinese", + "desc": "每列是否展示中文", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "设置标题", + "type": "`string`", + "default": "null" + }, + { + "prop": "startDate", + "desc": "开始日期", + "type": "`Date`", + "default": "十年前" + }, + { + "prop": "endDate", + "desc": "结束日期", + "type": "`Date`", + "default": "十年后" + }, + { + "prop": "formatter", + "desc": "选项格式化函数", + "type": "`(type: string, option: PickerOption) => PickerOption`", + "default": "-" + }, + { + "prop": "filter", + "desc": "选项过滤函数", + "type": "`(type: string, option: PickerOption) => PickerOption[]`", + "default": "-" + }, + { + "prop": "threeDimensional", + "desc": "是否开启3D效果", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "onConfirm", + "desc": "点击确定按钮时触发", + "type": "`(options, value) => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭时触发", + "type": "`(options, value) => void`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "选项改变时触发", + "type": "`(options, value, index) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "datepickerview": { + "id": "datepickerview", + "name": "DatePickerView", + "cName": "日期选择器视图", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "DatePickerView 是 DatePicker 的内容区域", + "sort": 16, + "show": true, + "docs": { + "h5": "src/packages/datepickerview/doc.md", + "enUS": "src/packages/datepickerview/doc.en-US.md", + "zhTW": "src/packages/datepickerview/doc.zh-TW.md", + "taro": "src/packages/datepickerview/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/datepickerview/demos/h5/demo1.tsx", + "src/packages/datepickerview/demos/h5/demo2.tsx" + ], + "taro": [ + "src/packages/datepickerview/demos/taro/demo1.tsx", + "src/packages/datepickerview/demos/taro/demo2.tsx" + ] + }, + "spec": { + "base": "src/types/spec/datepickerview/base.ts", + "h5": "src/types/spec/datepickerview/h5.ts", + "taro": "src/types/spec/datepickerview/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "form": { + "id": "form", + "name": "Form", + "cName": "表单", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "hanyuxinting", + "type": "component", + "desc": "用于数据录入、校验,支持输入框、单选框、复选框等类型。", + "sort": 19, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/form/doc.md", + "enUS": "src/packages/form/doc.en-US.md", + "zhTW": "src/packages/form/doc.zh-TW.md", + "taro": "src/packages/form/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/form/demos/h5/demo1.tsx", + "src/packages/form/demos/h5/demo2.tsx", + "src/packages/form/demos/h5/demo3.tsx", + "src/packages/form/demos/h5/demo4.tsx", + "src/packages/form/demos/h5/demo5.tsx", + "src/packages/form/demos/h5/demo6.tsx", + "src/packages/form/demos/h5/demo7.tsx", + "src/packages/form/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/form/demos/taro/demo1.tsx", + "src/packages/form/demos/taro/demo2.tsx", + "src/packages/form/demos/taro/demo3.tsx", + "src/packages/form/demos/taro/demo4.tsx", + "src/packages/form/demos/taro/demo5.tsx", + "src/packages/form/demos/taro/demo6.tsx", + "src/packages/form/demos/taro/demo7.tsx", + "src/packages/form/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/form/base.ts", + "h5": "src/types/spec/form/h5.ts", + "taro": "src/types/spec/form/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Form", + "subComponent": null, + "rows": [ + { + "prop": "form", + "desc": "经 Form.useForm() 创建的 form 控制实例,不提供时会自动创建", + "type": "`FormInstance`", + "default": "-" + }, + { + "prop": "footer", + "desc": "表单底部区域,一般放置确认和重置按钮", + "type": "`ReactNode`", + "default": "null" + }, + { + "prop": "initialValues", + "desc": "表单初始值", + "type": "`any`", + "default": "-" + }, + { + "prop": "name", + "desc": "表单名称", + "type": "`any`", + "default": "-" + }, + { + "prop": "labelPosition", + "desc": "表单项 label 的位置", + "type": "`top` | `left` | `right`", + "default": "right" + }, + { + "prop": "starPosition", + "desc": "必填表单项 label 的红色星标位置", + "type": "`left` | `right`", + "default": "left" + }, + { + "prop": "onFinish", + "desc": "校验成功后触发", + "type": "`(values: any) => void`", + "default": "-" + }, + { + "prop": "onFinishFailed", + "desc": "任一表单项被校验失败后触发", + "type": "`(values: any, errorFields: any) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-form-item-label-width", + "scssVar": "$form-item-label-width", + "default": "scale-px(90px" + }, + { + "cssVar": "--nutui-form-item-tip-text-align", + "scssVar": "$form-item-tip-text-align", + "default": "left" + } + ] + }, + "formitem": { + "id": "formitem", + "name": "FormItem", + "cName": "表单项", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "hanyuxinting", + "type": "component", + "desc": "用于数据录入、校验,支持输入框、单选框、复选框等类型。", + "sort": 19, + "show": false, + "jdtaro": 2, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Form.Item", + "subComponent": null, + "rows": [ + { + "prop": "required", + "desc": "必填表单项 label 的红色星标,仅用于控制样式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "name", + "desc": "在使用表单校验功能的情况下,该属性是必填的", + "type": "`string`", + "default": "-" + }, + { + "prop": "errorMessageAlign", + "desc": "错误提示文案对齐方式", + "type": "`center` | `right` | `left`", + "default": "left" + }, + { + "prop": "initialValue", + "desc": "设置子元素默认值", + "type": "`any`", + "default": "-" + }, + { + "prop": "trigger", + "desc": "设置收集字段值变更的时机", + "type": "`string`", + "default": "-" + }, + { + "prop": "valuePropName", + "desc": "子节点的值的属性,如 Checkbox 的是 'checked'", + "type": "`string`", + "default": "-" + }, + { + "prop": "getValueFromEvent", + "desc": "设置如何将 event 的值转换成字段值", + "type": "`(...args: any) => any`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击事件并收集子组件 Ref", + "type": "`(event: React.MouseEvent, componentRef: React.MutableRefObject) => void`", + "default": "-" + } + ] + }, + { + "name": "Form.Item Rule", + "kind": "other", + "sourceComponent": "Form.Item", + "subComponent": null, + "rows": [ + { + "prop": "required", + "desc": "是否为必选字段", + "type": "`boolean`", + "default": "" + }, + { + "prop": "message", + "desc": "错误提示文案", + "type": "`string`", + "default": "" + }, + { + "prop": "len", + "desc": "string 类型时为字符串长度;number 类型时为确定数字; array 类型时为数组长度", + "type": "`number`", + "default": "" + }, + { + "prop": "max", + "desc": "必须设置 type:string 类型为字符串最大长度;number 类型时为最大值;array 类型时为数组最大长度", + "type": "`number`", + "default": "" + }, + { + "prop": "min", + "desc": "必须设置 type:string 类型为字符串最小长度;number 类型时为最小值;array 类型时为数组最小长度", + "type": "`number`", + "default": "" + }, + { + "prop": "pattern", + "desc": "正则表达式匹配", + "type": "`RegExp`", + "default": "" + }, + { + "prop": "transform", + "desc": "将字段值转换成目标值后进行校验", + "type": "`(value) => any`", + "default": "" + }, + { + "prop": "validator", + "desc": "自定义校验,接收 Promise 作为返回值", + "type": "`(rule, value) => Promise`", + "default": "" + } + ] + }, + { + "name": "FormInstance", + "kind": "methods", + "sourceComponent": "Form.Item", + "subComponent": null, + "rows": [ + { + "prop": "getFieldValue", + "desc": "获取对应字段名的值", + "type": "`(name: NamePath) => any`", + "default": "" + }, + { + "prop": "setFieldsValue", + "desc": "设置表单的值", + "type": "`(values) => void`", + "default": "" + }, + { + "prop": "resetFields", + "desc": "重置表单提示状态", + "type": "`() => void`", + "default": "" + }, + { + "prop": "submit", + "desc": "提交表单进行校验的方法", + "type": "`Promise`", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "input": { + "id": "input", + "name": "Input", + "cName": "输入框", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "VickyYe", + "type": "component", + "desc": "单行输入框", + "sort": 1, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/input/doc.md", + "enUS": "src/packages/input/doc.en-US.md", + "zhTW": "src/packages/input/doc.zh-TW.md", + "taro": "src/packages/input/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/input/demos/h5/demo1.tsx", + "src/packages/input/demos/h5/demo2.tsx", + "src/packages/input/demos/h5/demo3.tsx", + "src/packages/input/demos/h5/demo4.tsx", + "src/packages/input/demos/h5/demo5.tsx", + "src/packages/input/demos/h5/demo6.tsx", + "src/packages/input/demos/h5/demo7.tsx", + "src/packages/input/demos/h5/demo8.tsx", + "src/packages/input/demos/h5/demo9.tsx", + "src/packages/input/demos/h5/demo10.tsx", + "src/packages/input/demos/h5/demo11.tsx", + "src/packages/input/demos/h5/demo12.tsx", + "src/packages/input/demos/h5/demo13.tsx", + "src/packages/input/demos/h5/demo14.tsx" + ], + "taro": [ + "src/packages/input/demos/taro/demo1.tsx", + "src/packages/input/demos/taro/demo2.tsx", + "src/packages/input/demos/taro/demo3.tsx", + "src/packages/input/demos/taro/demo4.tsx", + "src/packages/input/demos/taro/demo5.tsx", + "src/packages/input/demos/taro/demo6.tsx", + "src/packages/input/demos/taro/demo7.tsx", + "src/packages/input/demos/taro/demo8.tsx", + "src/packages/input/demos/taro/demo9.tsx", + "src/packages/input/demos/taro/demo10.tsx", + "src/packages/input/demos/taro/demo11.tsx", + "src/packages/input/demos/taro/demo12.tsx", + "src/packages/input/demos/taro/demo13.tsx", + "src/packages/input/demos/taro/demo14.tsx" + ] + }, + "spec": { + "base": "src/types/spec/input/base.ts", + "h5": "src/types/spec/input/h5.ts", + "taro": "src/types/spec/input/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Input", + "subComponent": null, + "rows": [ + { + "prop": "defaultValue", + "desc": "初始默认值", + "type": "`string`", + "default": "-" + }, + { + "prop": "value", + "desc": "初始默认值", + "type": "`string`", + "default": "-" + }, + { + "prop": "type", + "desc": "输入框类型,支持原生 `input` 标签的所有 `type` 属性,另外还支持 `number` `digit`", + "type": "`string`", + "default": "text" + }, + { + "prop": "name", + "desc": "组件名字,用于表单提交获取数据", + "type": "`string`", + "default": "-" + }, + { + "prop": "placeholder", + "desc": "输入框为空时占位符", + "type": "`string`", + "default": "-" + }, + { + "prop": "align", + "desc": "输入框内容对齐方式,可选值 `left`、`center`、`right`", + "type": "`string`", + "default": "left" + }, + { + "prop": "disabled", + "desc": "是否禁用", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "readOnly", + "desc": "是否只读", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "autoFocus", + "desc": "是否自动获得焦点,iOS 系统不支持该属性", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "maxLength", + "desc": "限制最长输入字符", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "clearable", + "desc": "展示清除 Icon", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "clearIcon", + "desc": "清除图标 Icon 可参考 Icon ", + "type": "`ReactNode`", + "default": "MaskClose" + }, + { + "prop": "confirmType", + "desc": "键盘右下角按钮的文字,仅在type='text'时生效,可选值 send:发送、search:搜索、next:下一个、go:前往、done:完成", + "type": "`string`", + "default": "done" + }, + { + "prop": "formatter", + "desc": "输入内容格式化函数", + "type": "`(val: string) => string`", + "default": "-" + }, + { + "prop": "formatTrigger", + "desc": "格式化函数触发的时机,可选值为 `onChange`、`onBlur`", + "type": "`string`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "输入框内容变化时触发", + "type": "`(value: string) => void`", + "default": "-" + }, + { + "prop": "onBlur", + "desc": "失去焦点后触发", + "type": "`(value: string) => void`", + "default": "-" + }, + { + "prop": "onFocus", + "desc": "获得焦点后触发", + "type": "`(value: string) => void`", + "default": "-" + }, + { + "prop": "onClear", + "desc": "点击清空按钮时触发", + "type": "`(value: string) => void`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击 input 容器触发", + "type": "`(value: MouseEvent) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-input-border-bottom", + "scssVar": "$input-border-bottom", + "default": "$color-border" + }, + { + "cssVar": "--nutui-input-font-size", + "scssVar": "$input-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-input-lineheight", + "scssVar": "$input-lineheight", + "default": "$font-size-xl" + }, + { + "cssVar": "--nutui-input-border-radius", + "scssVar": "$input-border-radius", + "default": "$radius-s" + }, + { + "cssVar": "--nutui-input-color", + "scssVar": "$input-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-input-padding", + "scssVar": "$input-padding", + "default": "scale-px(12px" + } + ] + }, + "inputnumber": { + "id": "inputnumber", + "name": "InputNumber", + "cName": "数字输入框", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dentry" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "swag~jun", + "type": "component", + "desc": "通过点击按钮控制数字增减。", + "sort": 3, + "show": true, + "docs": { + "h5": "src/packages/inputnumber/doc.md", + "enUS": "src/packages/inputnumber/doc.en-US.md", + "zhTW": "src/packages/inputnumber/doc.zh-TW.md", + "taro": "src/packages/inputnumber/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/inputnumber/demos/h5/demo1.tsx", + "src/packages/inputnumber/demos/h5/demo2.tsx", + "src/packages/inputnumber/demos/h5/demo3.tsx", + "src/packages/inputnumber/demos/h5/demo4.tsx", + "src/packages/inputnumber/demos/h5/demo5.tsx", + "src/packages/inputnumber/demos/h5/demo6.tsx", + "src/packages/inputnumber/demos/h5/demo7.tsx", + "src/packages/inputnumber/demos/h5/demo8.tsx", + "src/packages/inputnumber/demos/h5/demo9.tsx", + "src/packages/inputnumber/demos/h5/demo10.tsx" + ], + "taro": [ + "src/packages/inputnumber/demos/taro/demo1.tsx", + "src/packages/inputnumber/demos/taro/demo2.tsx", + "src/packages/inputnumber/demos/taro/demo3.tsx", + "src/packages/inputnumber/demos/taro/demo4.tsx", + "src/packages/inputnumber/demos/taro/demo5.tsx", + "src/packages/inputnumber/demos/taro/demo6.tsx", + "src/packages/inputnumber/demos/taro/demo7.tsx", + "src/packages/inputnumber/demos/taro/demo8.tsx", + "src/packages/inputnumber/demos/taro/demo9.tsx", + "src/packages/inputnumber/demos/taro/demo10.tsx" + ] + }, + "spec": { + "base": "src/types/spec/inputnumber/base.ts", + "h5": "src/types/spec/inputnumber/h5.ts", + "taro": "src/types/spec/inputnumber/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "InputNumber", + "subComponent": null, + "rows": [ + { + "prop": "allowEmpty", + "desc": "是否允许内容为空", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "defaultValue", + "desc": "默认值", + "type": "`string` | `number`", + "default": "0" + }, + { + "prop": "value", + "desc": "当前值,受控值", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "min", + "desc": "最小值限制", + "type": "`string` | `number`", + "default": "1" + }, + { + "prop": "max", + "desc": "最大值限制", + "type": "`string` | `number`", + "default": "9999" + }, + { + "prop": "step", + "desc": "步长", + "type": "`string` | `number`", + "default": "1" + }, + { + "prop": "digits", + "desc": "设置保留的小数位", + "type": "`string` | `number`", + "default": "0" + }, + { + "prop": "disabled", + "desc": "禁用所有功能", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "readOnly", + "desc": "只读状态禁用输入框操作行为", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "async", + "desc": "支持异步修改", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "formatter", + "desc": "指定输入框展示值的格式", + "type": "`function(value: number | string): string`", + "default": "-" + }, + { + "prop": "onPlus", + "desc": "点击增加按钮时触发", + "type": "`(e: MouseEvent) => void`", + "default": "-" + }, + { + "prop": "onMinus", + "desc": "点击减少按钮时触发", + "type": "`(e: MouseEvent) => void`", + "default": "-" + }, + { + "prop": "onOverlimit", + "desc": "点击不可用的按钮时触发", + "type": "`(e: MouseEvent) => void`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "值改变时触发", + "type": "`(param: string | number, e: MouseEvent | ChangeEvent) => void`", + "default": "-" + }, + { + "prop": "onFocus", + "desc": "输入框获得焦点时触发", + "type": "`(e: FocusEvent) => void`", + "default": "-" + }, + { + "prop": "onBlur", + "desc": "输入框失去焦点时触发", + "type": "`(e: ChangeEvent) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-inputnumber-input-width", + "scssVar": "$inputnumber-input-width", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-inputnumber-input-height", + "scssVar": "$inputnumber-input-height", + "default": "scale-px(28px" + }, + { + "cssVar": "--nutui-inputnumber-input-border", + "scssVar": "$inputnumber-input-border", + "default": "0" + }, + { + "cssVar": "--nutui-inputnumber-input-margin", + "scssVar": "$inputnumber-input-margin", + "default": "1px" + }, + { + "cssVar": "--nutui-inputnumber-button-width", + "scssVar": "$inputnumber-button-width", + "default": "scale-px(28px" + }, + { + "cssVar": "--nutui-inputnumber-divider-width", + "scssVar": "$inputnumber-divider-width", + "default": "1px" + }, + { + "cssVar": "--nutui-inputnumber-input-font-family", + "scssVar": "$inputnumber-input-font-family", + "default": "JDZH" + }, + { + "cssVar": "--nutui-inputnumber-icon-size", + "scssVar": "$inputnumber-icon-size", + "default": "scale-px(8px" + } + ] + }, + "menu": { + "id": "menu", + "name": "Menu", + "cName": "菜单", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "oasis-cloud", + "type": "component", + "desc": "向下弹出的菜单列表", + "sort": 13, + "show": true, + "docs": { + "h5": "src/packages/menu/doc.md", + "enUS": "src/packages/menu/doc.en-US.md", + "zhTW": "src/packages/menu/doc.zh-TW.md", + "taro": "src/packages/menu/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/menu/demos/h5/demo1.tsx", + "src/packages/menu/demos/h5/demo2.tsx", + "src/packages/menu/demos/h5/demo3.tsx", + "src/packages/menu/demos/h5/demo4.tsx", + "src/packages/menu/demos/h5/demo5.tsx", + "src/packages/menu/demos/h5/demo6.tsx", + "src/packages/menu/demos/h5/demo7.tsx", + "src/packages/menu/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/menu/demos/taro/demo1.tsx", + "src/packages/menu/demos/taro/demo2.tsx", + "src/packages/menu/demos/taro/demo3.tsx", + "src/packages/menu/demos/taro/demo4.tsx", + "src/packages/menu/demos/taro/demo5.tsx", + "src/packages/menu/demos/taro/demo6.tsx", + "src/packages/menu/demos/taro/demo7.tsx", + "src/packages/menu/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/menu/base.ts", + "h5": "src/types/spec/menu/h5.ts", + "taro": "src/types/spec/menu/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Menu", + "subComponent": null, + "rows": [ + { + "prop": "activeColor", + "desc": "选项的选中态图标颜色", + "type": "`string`", + "default": "#F2270C" + }, + { + "prop": "closeOnOverlayClick", + "desc": "是否在点击遮罩层后关闭菜单", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "lockScroll", + "desc": "背景是否锁定", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "scrollFixed", + "desc": "滚动后是否固定,可设置固定位置", + "type": "`boolean` | `string` | `number`", + "default": "true" + }, + { + "prop": "icon", + "desc": "自定义标题图标", + "type": "`React.ReactNode`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-menu-scroll-fixed-top", + "scssVar": "$menu-scroll-fixed-top", + "default": "0" + }, + { + "cssVar": "--nutui-menu-bar-line-height", + "scssVar": "$menu-bar-line-height", + "default": "scale-px(48px" + }, + { + "cssVar": "--nutui-menu-bar-opened-z-index", + "scssVar": "$menu-bar-opened-z-index", + "default": "1000" + }, + { + "cssVar": "--nutui-menu-title-padding", + "scssVar": "$menu-title-padding", + "default": "0 scale-px(8px" + }, + { + "cssVar": "--nutui-menu-title-color", + "scssVar": "$menu-title-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-menu-container-z-index", + "scssVar": "$menu-container-z-index", + "default": "1000" + }, + { + "cssVar": "--nutui-menu-content-padding", + "scssVar": "$menu-content-padding", + "default": "scale-px(12px) scale-px(24px" + }, + { + "cssVar": "--nutui-menu-content-max-height", + "scssVar": "$menu-content-max-height", + "default": "scale-px(214px" + }, + { + "cssVar": "--nutui-menu-item-padding", + "scssVar": "$menu-item-padding", + "default": "scale-px(12px) 0" + }, + { + "cssVar": "--nutui-menu-item-icon-margin", + "scssVar": "$menu-item-icon-margin", + "default": "scale-px(8px" + } + ] + }, + "menuitem": { + "id": "menuitem", + "name": "MenuItem", + "cName": "菜单子项", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "oasis-cloud", + "type": "component", + "desc": "菜单子项", + "sort": 14, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "MenuItem", + "subComponent": null, + "rows": [ + { + "prop": "title", + "desc": "菜单项标题", + "type": "`string`", + "default": "当前选中项文字" + }, + { + "prop": "options", + "desc": "选项数组", + "type": "`array`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "是否禁用菜单", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "columns", + "desc": "可以设置一行展示多少列 options", + "type": "`number`", + "default": "1" + }, + { + "prop": "icon", + "desc": "自定义选项图标", + "type": "`React.ReactNode`", + "default": "Check" + }, + { + "prop": "direction", + "desc": "菜单展开方向,可选值为up", + "type": "`string`", + "default": "down" + }, + { + "prop": "onChange", + "desc": "选择 option 之后触发", + "type": "`(event: any) => void`", + "default": "-" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "MenuItem", + "subComponent": null, + "rows": [ + { + "prop": "toggle", + "desc": "切换菜单展示状态,传 true 为显示,false 为隐藏,不传参为取反", + "type": "`show?: boolean`", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "numberkeyboard": { + "id": "numberkeyboard", + "name": "NumberKeyboard", + "cName": "数字键盘", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Drjingfubo", + "type": "component", + "desc": "", + "sort": 16, + "show": true, + "docs": { + "h5": "src/packages/numberkeyboard/doc.md", + "enUS": "src/packages/numberkeyboard/doc.en-US.md", + "zhTW": "src/packages/numberkeyboard/doc.zh-TW.md", + "taro": "src/packages/numberkeyboard/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/numberkeyboard/demos/h5/demo1.tsx", + "src/packages/numberkeyboard/demos/h5/demo2.tsx", + "src/packages/numberkeyboard/demos/h5/demo3.tsx", + "src/packages/numberkeyboard/demos/h5/demo4.tsx", + "src/packages/numberkeyboard/demos/h5/demo5.tsx", + "src/packages/numberkeyboard/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/numberkeyboard/demos/taro/demo1.tsx", + "src/packages/numberkeyboard/demos/taro/demo2.tsx", + "src/packages/numberkeyboard/demos/taro/demo3.tsx", + "src/packages/numberkeyboard/demos/taro/demo4.tsx", + "src/packages/numberkeyboard/demos/taro/demo5.tsx", + "src/packages/numberkeyboard/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/numberkeyboard/base.ts", + "h5": "src/types/spec/numberkeyboard/h5.ts", + "taro": "src/types/spec/numberkeyboard/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "NumberKeyboard", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否显示键盘", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "键盘标题", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "type", + "desc": "键盘模式, default:默认样式 rightColumn:带右侧栏", + "type": "`string`", + "default": "default" + }, + { + "prop": "random", + "desc": "随机数", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "custom", + "desc": "自定义键盘额外的键, 数组形式最多支持添加 2 个, 超出默认取前 2 项", + "type": "`string[]`", + "default": "-" + }, + { + "prop": "confirmText", + "desc": "自定义完成按钮文字,如\"支付\",\"下一步\",\"提交\"等", + "type": "`string`", + "default": "完成" + }, + { + "prop": "onChange", + "desc": "点击按键时触发", + "type": "`(value: string) => void`", + "default": "-" + }, + { + "prop": "onDelete", + "desc": "点击删除键时触发", + "type": "`-`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "点击关闭按钮或非键盘区域时触发", + "type": "`-`", + "default": "-" + }, + { + "prop": "onConfirm", + "desc": "点击确定按钮时触发", + "type": "`-`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "picker": { + "id": "picker", + "name": "Picker", + "cName": "选择器", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "提供多个选项集合供用户选择其中一项。", + "sort": 10, + "show": true, + "docs": { + "h5": "src/packages/picker/doc.md", + "enUS": "src/packages/picker/doc.en-US.md", + "zhTW": "src/packages/picker/doc.zh-TW.md", + "taro": "src/packages/picker/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/picker/demos/h5/demo1.tsx", + "src/packages/picker/demos/h5/demo2.tsx", + "src/packages/picker/demos/h5/demo3.tsx", + "src/packages/picker/demos/h5/demo4.tsx", + "src/packages/picker/demos/h5/demo5.tsx", + "src/packages/picker/demos/h5/demo6.tsx", + "src/packages/picker/demos/h5/demo7.tsx", + "src/packages/picker/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/picker/demos/taro/demo1.tsx", + "src/packages/picker/demos/taro/demo2.tsx", + "src/packages/picker/demos/taro/demo3.tsx", + "src/packages/picker/demos/taro/demo4.tsx", + "src/packages/picker/demos/taro/demo5.tsx", + "src/packages/picker/demos/taro/demo6.tsx", + "src/packages/picker/demos/taro/demo7.tsx", + "src/packages/picker/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/picker/base.ts", + "h5": "src/types/spec/picker/h5.ts", + "taro": "src/types/spec/picker/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Picker", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否可见", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "设置标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "options", + "desc": "列表数据", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "value", + "desc": "选中值,受控", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "defaultValue", + "desc": "默认选中", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "threeDimensional", + "desc": "是否开启3D效果", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "duration", + "desc": "快速滑动时惯性滚动的时长,单位 ms", + "type": "`string` | `number`", + "default": "1000" + }, + { + "prop": "onConfirm", + "desc": "点击确认按钮时候回调", + "type": "`(options, value) => void`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "每一列值变更时调用", + "type": "`(options, value) => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭时触发", + "type": "`(options, value) => void`", + "default": "-" + }, + { + "prop": "afterClose", + "desc": "联动时,关闭时回调", + "type": "`(options, value) => void`", + "default": "-" + } + ] + }, + { + "name": "options 数据结构", + "kind": "other", + "sourceComponent": "Picker", + "subComponent": null, + "rows": [ + { + "prop": "text", + "desc": "选项的文字内容", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "value", + "desc": "选项对应的值,且唯一", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "children", + "desc": "用于级联选项", + "type": "`Array`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-picker-item-height", + "scssVar": "$picker-item-height", + "default": "scale-px(36px" + } + ] + }, + "pickerview": { + "id": "pickerview", + "name": "PickerView", + "cName": "选择器视图", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "PickerView 是 Picker 的内容区域。", + "sort": 15, + "show": true, + "docs": { + "h5": "src/packages/pickerview/doc.md", + "enUS": "src/packages/pickerview/doc.en-US.md", + "zhTW": "src/packages/pickerview/doc.zh-TW.md", + "taro": "src/packages/pickerview/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/pickerview/demos/h5/demo1.tsx", + "src/packages/pickerview/demos/h5/demo2.tsx", + "src/packages/pickerview/demos/h5/demo3.tsx", + "src/packages/pickerview/demos/h5/demo4.tsx", + "src/packages/pickerview/demos/h5/demo5.tsx", + "src/packages/pickerview/demos/h5/demo6.tsx", + "src/packages/pickerview/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/pickerview/demos/taro/demo1.tsx", + "src/packages/pickerview/demos/taro/demo2.tsx", + "src/packages/pickerview/demos/taro/demo3.tsx", + "src/packages/pickerview/demos/taro/demo4.tsx", + "src/packages/pickerview/demos/taro/demo5.tsx", + "src/packages/pickerview/demos/taro/demo6.tsx", + "src/packages/pickerview/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/pickerview/base.ts", + "h5": "src/types/spec/pickerview/h5.ts", + "taro": "src/types/spec/pickerview/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "radio": { + "id": "radio", + "name": "Radio", + "cName": "单选按钮", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "oasis", + "type": "component", + "desc": "用于在一组备选项中进行单选", + "sort": 6, + "show": true, + "docs": { + "h5": "src/packages/radio/doc.md", + "enUS": "src/packages/radio/doc.en-US.md", + "zhTW": "src/packages/radio/doc.zh-TW.md", + "taro": "src/packages/radio/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/radio/demos/h5/demo1.tsx", + "src/packages/radio/demos/h5/demo2.tsx", + "src/packages/radio/demos/h5/demo3.tsx", + "src/packages/radio/demos/h5/demo4.tsx", + "src/packages/radio/demos/h5/demo5.tsx", + "src/packages/radio/demos/h5/demo6.tsx", + "src/packages/radio/demos/h5/demo7.tsx", + "src/packages/radio/demos/h5/demo8.tsx", + "src/packages/radio/demos/h5/demo9.tsx", + "src/packages/radio/demos/h5/demo10.tsx", + "src/packages/radio/demos/h5/demo11.tsx", + "src/packages/radio/demos/h5/demo12.tsx" + ], + "taro": [ + "src/packages/radio/demos/taro/demo1.tsx", + "src/packages/radio/demos/taro/demo2.tsx", + "src/packages/radio/demos/taro/demo3.tsx", + "src/packages/radio/demos/taro/demo4.tsx", + "src/packages/radio/demos/taro/demo5.tsx", + "src/packages/radio/demos/taro/demo6.tsx", + "src/packages/radio/demos/taro/demo7.tsx", + "src/packages/radio/demos/taro/demo8.tsx", + "src/packages/radio/demos/taro/demo9.tsx", + "src/packages/radio/demos/taro/demo10.tsx", + "src/packages/radio/demos/taro/demo11.tsx", + "src/packages/radio/demos/taro/demo12.tsx" + ] + }, + "spec": { + "base": "src/types/spec/radio/base.ts", + "h5": "src/types/spec/radio/h5.ts", + "taro": "src/types/spec/radio/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Radio", + "subComponent": null, + "rows": [ + { + "prop": "checked", + "desc": "指定当前是否选中", + "type": "`boolean`", + "default": "-" + }, + { + "prop": "defaultChecked", + "desc": "初始是否选中", + "type": "`boolean`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "是否禁用选择", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "value", + "desc": "携带的标识值,用于 Group 模式", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "labelPosition", + "desc": "文本所在的位置", + "type": "`left` | `right`", + "default": "right" + }, + { + "prop": "icon", + "desc": "图标名称,选中前(建议和`activeIcon`一起修改)", + "type": "`ReactNode`", + "default": "'CheckNormal'" + }, + { + "prop": "activeIcon", + "desc": "图标名称,选中后(建议和`icon`一起修改)", + "type": "`ReactNode`", + "default": "'CheckChecked'" + }, + { + "prop": "shape", + "desc": "形状", + "type": "`button` | `round` | `round`", + "default": "round" + }, + { + "prop": "onChange", + "desc": "选中态变化时触发", + "type": "`(checked: boolean) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-radio-label-color", + "scssVar": "$radio-label-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-radio-label-margin-left", + "scssVar": "$radio-label-margin-left", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-radio-button-padding", + "scssVar": "$radio-button-padding", + "default": "scale-px(5px) scale-px(18px" + } + ] + }, + "radiogroup": { + "id": "radiogroup", + "name": "RadioGroup", + "cName": "单选按钮组", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": false, + "v15": true, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "单选按钮组", + "sort": 10, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Radio.Group", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "当前选中项的标识符", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "labelPosition", + "desc": "文本所在的位置", + "type": "`left` | `right`", + "default": "right" + }, + { + "prop": "disabled", + "desc": "是否禁用", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "direction", + "desc": "使用横纵方向", + "type": "`horizontal` | `vertical`", + "default": "vertical" + }, + { + "prop": "options", + "desc": "配置 options 渲染单选按钮", + "type": "`Array<{ label: string value: string disabled?: boolean }>`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "值变化时触发", + "type": "`(value: string | number) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-radiogroup-radio-margin", + "scssVar": "$radiogroup-radio-margin", + "default": "scale-px(20px" + } + ] + }, + "range": { + "id": "range", + "name": "Range", + "cName": "区间选择器", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "vickyYe", + "type": "component", + "desc": "滑动输入条,用于在给定的范围内选择一个值。", + "sort": 3, + "show": true, + "docs": { + "h5": "src/packages/range/doc.md", + "enUS": "src/packages/range/doc.en-US.md", + "zhTW": "src/packages/range/doc.zh-TW.md", + "taro": "src/packages/range/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/range/demos/h5/demo1.tsx", + "src/packages/range/demos/h5/demo2.tsx", + "src/packages/range/demos/h5/demo3.tsx", + "src/packages/range/demos/h5/demo4.tsx", + "src/packages/range/demos/h5/demo5.tsx", + "src/packages/range/demos/h5/demo6.tsx", + "src/packages/range/demos/h5/demo7.tsx", + "src/packages/range/demos/h5/demo8.tsx", + "src/packages/range/demos/h5/demo9.tsx", + "src/packages/range/demos/h5/demo10.tsx", + "src/packages/range/demos/h5/demo11.tsx", + "src/packages/range/demos/h5/demo12.tsx", + "src/packages/range/demos/h5/demo13.tsx" + ], + "taro": [ + "src/packages/range/demos/taro/demo1.tsx", + "src/packages/range/demos/taro/demo2.tsx", + "src/packages/range/demos/taro/demo3.tsx", + "src/packages/range/demos/taro/demo4.tsx", + "src/packages/range/demos/taro/demo5.tsx", + "src/packages/range/demos/taro/demo6.tsx", + "src/packages/range/demos/taro/demo7.tsx", + "src/packages/range/demos/taro/demo8.tsx", + "src/packages/range/demos/taro/demo9.tsx", + "src/packages/range/demos/taro/demo10.tsx", + "src/packages/range/demos/taro/demo11.tsx", + "src/packages/range/demos/taro/demo12.tsx", + "src/packages/range/demos/taro/demo13.tsx" + ] + }, + "spec": { + "base": "src/types/spec/range/base.ts", + "h5": "src/types/spec/range/h5.ts", + "taro": "src/types/spec/range/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Range", + "subComponent": null, + "rows": [ + { + "prop": "defaultValue", + "desc": "默认进度百分比,非受控", + "type": "`number` | `number[]`", + "default": "0" + }, + { + "prop": "value", + "desc": "当前进度百分比,受控", + "type": "`number` | `number[]`", + "default": "0" + }, + { + "prop": "range", + "desc": "是否开启双滑块模式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "max", + "desc": "最大值", + "type": "`number`", + "default": "100" + }, + { + "prop": "min", + "desc": "最小值", + "type": "`number`", + "default": "0" + }, + { + "prop": "maxDescription", + "desc": "最大值描述,传 `null` 表示隐藏", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "minDescription", + "desc": "最小值描述,传 `null` 表示隐藏", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "currentDescription", + "desc": "当前值描述,传 `null` 表示隐藏", + "type": "`((value) => ReactNode)` | `null`", + "default": "-" + }, + { + "prop": "step", + "desc": "步长", + "type": "`number`", + "default": "1" + }, + { + "prop": "disabled", + "desc": "是否禁用滑块", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "vertical", + "desc": "是否竖向展示", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "marks", + "desc": "刻度标示", + "type": "`Object{key: number}`", + "default": "{}" + }, + { + "prop": "button", + "desc": "自定义滑动按钮", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "进度实时变化,通常在受控方式中与 value 一起使用", + "type": "`(value) => void`", + "default": "-" + }, + { + "prop": "onStart", + "desc": "开始拖动时触发", + "type": "`-`", + "default": "-" + }, + { + "prop": "onEnd", + "desc": "结束拖动时触发", + "type": "`(value) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-range-color", + "scssVar": "$range-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-range-height", + "scssVar": "$range-height", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-range-margin", + "scssVar": "$range-margin", + "default": "scale-px(15px" + }, + { + "cssVar": "--nutui-range-active-color", + "scssVar": "$range-active-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-range-button-width", + "scssVar": "$range-button-width", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-range-button-height", + "scssVar": "$range-button-height", + "default": "scale-px(24px" + } + ] + }, + "rate": { + "id": "rate", + "name": "Rate", + "cName": "评分", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "dsj", + "type": "component", + "desc": "用于快速的评级操作,或对评价进行展示。", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/rate/doc.md", + "enUS": "src/packages/rate/doc.en-US.md", + "zhTW": "src/packages/rate/doc.zh-TW.md", + "taro": "src/packages/rate/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/rate/demos/h5/demo1.tsx", + "src/packages/rate/demos/h5/demo2.tsx", + "src/packages/rate/demos/h5/demo3.tsx", + "src/packages/rate/demos/h5/demo4.tsx", + "src/packages/rate/demos/h5/demo5.tsx", + "src/packages/rate/demos/h5/demo6.tsx", + "src/packages/rate/demos/h5/demo7.tsx", + "src/packages/rate/demos/h5/demo8.tsx", + "src/packages/rate/demos/h5/demo9.tsx", + "src/packages/rate/demos/h5/demo10.tsx", + "src/packages/rate/demos/h5/demo11.tsx", + "src/packages/rate/demos/h5/demo12.tsx", + "src/packages/rate/demos/h5/demo13.tsx", + "src/packages/rate/demos/h5/demo14.tsx", + "src/packages/rate/demos/h5/demo15.tsx" + ], + "taro": [ + "src/packages/rate/demos/taro/demo1.tsx", + "src/packages/rate/demos/taro/demo2.tsx", + "src/packages/rate/demos/taro/demo3.tsx", + "src/packages/rate/demos/taro/demo4.tsx", + "src/packages/rate/demos/taro/demo5.tsx", + "src/packages/rate/demos/taro/demo6.tsx", + "src/packages/rate/demos/taro/demo7.tsx", + "src/packages/rate/demos/taro/demo8.tsx", + "src/packages/rate/demos/taro/demo9.tsx", + "src/packages/rate/demos/taro/demo10.tsx", + "src/packages/rate/demos/taro/demo11.tsx", + "src/packages/rate/demos/taro/demo12.tsx", + "src/packages/rate/demos/taro/demo13.tsx", + "src/packages/rate/demos/taro/demo14.tsx", + "src/packages/rate/demos/taro/demo15.tsx" + ] + }, + "spec": { + "base": "src/types/spec/rate/base.ts", + "h5": "src/types/spec/rate/h5.ts", + "taro": "src/types/spec/rate/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Rate", + "subComponent": null, + "rows": [ + { + "prop": "defaultValue", + "desc": "非受控的 star 默认值", + "type": "`number`", + "default": "0" + }, + { + "prop": "value", + "desc": "受控的 star 数值", + "type": "`number`", + "default": "0" + }, + { + "prop": "count", + "desc": "star 总数", + "type": "`number`", + "default": "5" + }, + { + "prop": "min", + "desc": "最少选中star数量", + "type": "`number`", + "default": "0" + }, + { + "prop": "uncheckedIcon", + "desc": "使用图标(未选中)", + "type": "`ReactNode`", + "default": "star-n" + }, + { + "prop": "checkedIcon", + "desc": "使用图标(选中)", + "type": "`ReactNode`", + "default": "star-n" + }, + { + "prop": "allowHalf", + "desc": "是否半星", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "readOnly", + "desc": "是否只读", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "disabled", + "desc": "是否禁用", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onChange", + "desc": "当前 star 数修改时触发", + "type": "`(value: number) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-rate-item-margin", + "scssVar": "$rate-item-margin", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-rate-icon-color", + "scssVar": "$rate-icon-color", + "default": "$color-primary-icon" + }, + { + "cssVar": "--nutui-rate-icon-size", + "scssVar": "$rate-icon-size", + "default": "scale-font-px(16px" + }, + { + "cssVar": "--nutui-rate-font-color", + "scssVar": "$rate-font-color", + "default": "$color-primary-icon" + }, + { + "cssVar": "--nutui-rate-font-size", + "scssVar": "$rate-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-rate-font-size-large", + "scssVar": "$rate-font-size-large", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-rate-font-size-small", + "scssVar": "$rate-font-size-small", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-rate-label-color", + "scssVar": "$rate-label-color", + "default": "$color-text-disabled" + } + ] + }, + "searchbar": { + "id": "searchbar", + "name": "SearchBar", + "cName": "搜索栏", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Ymm0008", + "type": "component", + "desc": "用于搜索场景的输入框组件", + "sort": 16, + "show": true, + "docs": { + "h5": "src/packages/searchbar/doc.md", + "enUS": "src/packages/searchbar/doc.en-US.md", + "zhTW": "src/packages/searchbar/doc.zh-TW.md", + "taro": "src/packages/searchbar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/searchbar/demos/h5/demo1.tsx", + "src/packages/searchbar/demos/h5/demo2.tsx", + "src/packages/searchbar/demos/h5/demo3.tsx", + "src/packages/searchbar/demos/h5/demo4.tsx", + "src/packages/searchbar/demos/h5/demo5.tsx", + "src/packages/searchbar/demos/h5/demo6.tsx", + "src/packages/searchbar/demos/h5/demo7.tsx", + "src/packages/searchbar/demos/h5/demo8.tsx", + "src/packages/searchbar/demos/h5/demo10.tsx" + ], + "taro": [ + "src/packages/searchbar/demos/taro/demo1.tsx", + "src/packages/searchbar/demos/taro/demo2.tsx", + "src/packages/searchbar/demos/taro/demo3.tsx", + "src/packages/searchbar/demos/taro/demo4.tsx", + "src/packages/searchbar/demos/taro/demo5.tsx", + "src/packages/searchbar/demos/taro/demo6.tsx", + "src/packages/searchbar/demos/taro/demo7.tsx", + "src/packages/searchbar/demos/taro/demo8.tsx", + "src/packages/searchbar/demos/taro/demo10.tsx" + ] + }, + "spec": { + "base": "src/types/spec/searchbar/base.ts", + "h5": "src/types/spec/searchbar/h5.ts", + "taro": "src/types/spec/searchbar/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "SearchBar", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "当前输入的值", + "type": "`string`", + "default": "-" + }, + { + "prop": "placeholder", + "desc": "输入框默认暗纹", + "type": "`string`", + "default": "请输入" + }, + { + "prop": "shape", + "desc": "搜索框形状,可选值为 `round`", + "type": "`string`", + "default": "square" + }, + { + "prop": "disabled", + "desc": "是否禁用输入框", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "readOnly", + "desc": "输入框只读", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "maxLength", + "desc": "最大输入长度", + "type": "`number`", + "default": "9999" + }, + { + "prop": "clearable", + "desc": "是否展示清除按钮", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "autoFocus", + "desc": "是否自动聚焦", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "left", + "desc": "搜索框左侧区域", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "right", + "desc": "搜搜框右侧区域", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "leftIn", + "desc": "输入框内左侧区域", + "type": "`ReactNode`", + "default": "" + }, + { + "prop": "rightIn", + "desc": "输入框内右侧区域", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "输入内容时触发", + "type": "`(value: string, event: Event) => void`", + "default": "-" + }, + { + "prop": "onFocus", + "desc": "聚焦时触发", + "type": "`(value: string, event: Event) => void`", + "default": "-" + }, + { + "prop": "onBlur", + "desc": "失焦时触发", + "type": "`(value: string, event: Event) => void`", + "default": "-" + }, + { + "prop": "onClear", + "desc": "点击清空时触发", + "type": "`(event: Event) => void`", + "default": "-" + }, + { + "prop": "onSearch", + "desc": "确定搜索时触发", + "type": "`(val: string) => void`", + "default": "-" + }, + { + "prop": "onClickInput", + "desc": "点击输入区域时触发", + "type": "`(event: Event) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-searchbar-width", + "scssVar": "$searchbar-width", + "default": "100%" + }, + { + "cssVar": "--nutui-searchbar-padding", + "scssVar": "$searchbar-padding", + "default": "scale-px(1px) scale-px(8px" + }, + { + "cssVar": "--nutui-searchbar-color", + "scssVar": "$searchbar-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-searchbar-gap", + "scssVar": "$searchbar-gap", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-searchbar-inner-gap", + "scssVar": "$searchbar-inner-gap", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-searchbar-icon-size", + "scssVar": "$searchbar-icon-size", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-searchbar-input-height", + "scssVar": "$searchbar-input-height", + "default": "scale-px(38px" + } + ] + }, + "shortpassword": { + "id": "shortpassword", + "name": "ShortPassword", + "cName": "短密码", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Drjingfubo", + "type": "component", + "desc": "短密码输入框", + "sort": 10, + "show": true, + "docs": { + "h5": "src/packages/shortpassword/doc.md", + "enUS": "src/packages/shortpassword/doc.en-US.md", + "zhTW": "src/packages/shortpassword/doc.zh-TW.md", + "taro": "src/packages/shortpassword/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/shortpassword/demos/h5/demo1.tsx", + "src/packages/shortpassword/demos/h5/demo2.tsx", + "src/packages/shortpassword/demos/h5/demo3.tsx", + "src/packages/shortpassword/demos/h5/demo4.tsx", + "src/packages/shortpassword/demos/h5/demo5.tsx", + "src/packages/shortpassword/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/shortpassword/demos/taro/demo1.tsx", + "src/packages/shortpassword/demos/taro/demo2.tsx", + "src/packages/shortpassword/demos/taro/demo3.tsx", + "src/packages/shortpassword/demos/taro/demo4.tsx", + "src/packages/shortpassword/demos/taro/demo5.tsx", + "src/packages/shortpassword/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/shortpassword/base.ts", + "h5": "src/types/spec/shortpassword/h5.ts", + "taro": "src/types/spec/shortpassword/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "ShortPassword", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "密码字符串", + "type": "`string`", + "default": "-" + }, + { + "prop": "visible", + "desc": "是否展示短密码框", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "plain", + "desc": "是否展示明文", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "标题", + "type": "`ReactNode`", + "default": "请输入密码" + }, + { + "prop": "description", + "desc": "密码框描述", + "type": "`ReactNode`", + "default": "您使用了虚拟资产,请进行验证" + }, + { + "prop": "tips", + "desc": "提示语", + "type": "`ReactNode`", + "default": "忘记密码" + }, + { + "prop": "hideFooter", + "desc": "是否隐藏底部按钮", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "length", + "desc": "密码长度,取值为4~6", + "type": "`number`", + "default": "6" + }, + { + "prop": "error", + "desc": "错误信息提示", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "autoFocus", + "desc": "自动聚焦", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onChange", + "desc": "输入密码时触发事件", + "type": "`(value) => void`", + "default": "-" + }, + { + "prop": "onConfirm", + "desc": "点击确认时触发事件", + "type": "`(value) => void`", + "default": "-" + }, + { + "prop": "onCancel", + "desc": "点击取消时触发事件", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "点击关闭图标和遮罩时触发事件", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onTips", + "desc": "点击忘记密码时触发事件", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onComplete", + "desc": "输入完成的回调", + "type": "`(value) => void`", + "default": "-" + }, + { + "prop": "onFocus", + "desc": "输入框聚焦", + "type": "`() => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-shortpassword-error", + "scssVar": "$shortpassword-error", + "default": "$color-primary" + } + ] + }, + "signature": { + "id": "signature", + "name": "Signature", + "cName": "签名", + "version": "2.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "基于Canvas的签名组件", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/signature/doc.md", + "enUS": "src/packages/signature/doc.en-US.md", + "zhTW": "src/packages/signature/doc.zh-TW.md", + "taro": "src/packages/signature/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/signature/demos/h5/demo1.tsx", + "src/packages/signature/demos/h5/demo2.tsx" + ], + "taro": [ + "src/packages/signature/demos/taro/demo1.tsx", + "src/packages/signature/demos/taro/demo2.tsx" + ] + }, + "spec": { + "base": "src/types/spec/signature/base.ts", + "h5": "src/types/spec/signature/h5.ts", + "taro": "src/types/spec/signature/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Signature", + "subComponent": null, + "rows": [ + { + "prop": "customClass", + "desc": "自定义 class", + "type": "`string`", + "default": "-" + }, + { + "prop": "lineWidth", + "desc": "线条的宽度", + "type": "`number`", + "default": "3" + }, + { + "prop": "strokeStyle", + "desc": "绘图笔触颜色", + "type": "`string`", + "default": "#000" + }, + { + "prop": "type", + "desc": "图片格式", + "type": "`string`", + "default": "png" + }, + { + "prop": "unsupported", + "desc": "不支持 Canvas 情况下的展示文案", + "type": "`ReactNode`", + "default": "对不起,当前浏览器不支持 Canvas,无法使用本控件!" + }, + { + "prop": "onConfirm", + "desc": "点击确认按钮触发事件回调函数", + "type": "`onConfirm: (canvas: HTMLCanvasElement, dataurl: string) => void`", + "default": "-" + }, + { + "prop": "onClear", + "desc": "点击重签按钮触发事件回调函数", + "type": "`onClear: () => void`", + "default": "-" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Signature", + "subComponent": null, + "rows": [ + { + "prop": "confirm", + "desc": "确认签字", + "type": "`() => void`", + "default": "" + }, + { + "prop": "clear", + "desc": "清除签字", + "type": "`() => void`", + "default": "" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-signature-border-width", + "scssVar": "$signature-border-width", + "default": "scale-px(1px" + }, + { + "cssVar": "--nutui-signature-height", + "scssVar": "$signature-height", + "default": "10rem" + } + ] + }, + "switch": { + "id": "switch", + "name": "Switch", + "cName": "开关", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "dsj", + "type": "component", + "desc": "用来打开或关闭选项。", + "sort": 11, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/switch/doc.md", + "enUS": "src/packages/switch/doc.en-US.md", + "zhTW": "src/packages/switch/doc.zh-TW.md", + "taro": "src/packages/switch/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/switch/demos/h5/demo1.tsx", + "src/packages/switch/demos/h5/demo2.tsx", + "src/packages/switch/demos/h5/demo3.tsx", + "src/packages/switch/demos/h5/demo4.tsx", + "src/packages/switch/demos/h5/demo5.tsx", + "src/packages/switch/demos/h5/demo6.tsx", + "src/packages/switch/demos/h5/demo7.tsx", + "src/packages/switch/demos/h5/demo8.tsx", + "src/packages/switch/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/switch/demos/taro/demo1.tsx", + "src/packages/switch/demos/taro/demo2.tsx", + "src/packages/switch/demos/taro/demo3.tsx", + "src/packages/switch/demos/taro/demo4.tsx", + "src/packages/switch/demos/taro/demo5.tsx", + "src/packages/switch/demos/taro/demo6.tsx", + "src/packages/switch/demos/taro/demo7.tsx", + "src/packages/switch/demos/taro/demo8.tsx", + "src/packages/switch/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/switch/base.ts", + "h5": "src/types/spec/switch/h5.ts", + "taro": "src/types/spec/switch/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Switch", + "subComponent": null, + "rows": [ + { + "prop": "defaultChecked", + "desc": "开关状态,非受控", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "checked", + "desc": "开关状态,受控", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "disabled", + "desc": "禁用状态", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "activeText", + "desc": "打开时文字描述", + "type": "`string`", + "default": "-" + }, + { + "prop": "inactiveText", + "desc": "关闭时文字描述", + "type": "`string`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "切换开关时触发", + "type": "`onChange:(value: boolean, event: Event)`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-switch-width", + "scssVar": "$switch-width", + "default": "scale-px(56px" + }, + { + "cssVar": "--nutui-switch-height", + "scssVar": "$switch-height", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-switch-inside-width", + "scssVar": "$switch-inside-width", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-switch-inside-height", + "scssVar": "$switch-inside-height", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-switch-border-width", + "scssVar": "$switch-border-width", + "default": "scale-px(2px" + } + ] + }, + "textarea": { + "id": "textarea", + "name": "TextArea", + "cName": "文本域", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "VickyYe", + "type": "component", + "desc": "文本框内输入或编辑文字,支持限制输入数量。", + "sort": 2, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/textarea/doc.md", + "enUS": "src/packages/textarea/doc.en-US.md", + "zhTW": "src/packages/textarea/doc.zh-TW.md", + "taro": "src/packages/textarea/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/textarea/demos/h5/demo1.tsx", + "src/packages/textarea/demos/h5/demo2.tsx", + "src/packages/textarea/demos/h5/demo3.tsx", + "src/packages/textarea/demos/h5/demo4.tsx", + "src/packages/textarea/demos/h5/demo5.tsx", + "src/packages/textarea/demos/h5/demo6.tsx", + "src/packages/textarea/demos/h5/demo7.tsx", + "src/packages/textarea/demos/h5/demo8.tsx", + "src/packages/textarea/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/textarea/demos/taro/demo1.tsx", + "src/packages/textarea/demos/taro/demo2.tsx", + "src/packages/textarea/demos/taro/demo3.tsx", + "src/packages/textarea/demos/taro/demo4.tsx", + "src/packages/textarea/demos/taro/demo5.tsx", + "src/packages/textarea/demos/taro/demo6.tsx", + "src/packages/textarea/demos/taro/demo7.tsx", + "src/packages/textarea/demos/taro/demo8.tsx", + "src/packages/textarea/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/textarea/base.ts", + "h5": "src/types/spec/textarea/h5.ts", + "taro": "src/types/spec/textarea/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "TextArea", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "输入框内容,受控", + "type": "`string`", + "default": "-" + }, + { + "prop": "defaultValue", + "desc": "初始默认值,非受控", + "type": "`string`", + "default": "-" + }, + { + "prop": "placeholder", + "desc": "设置占位提示文字", + "type": "`string`", + "default": "请输入内容" + }, + { + "prop": "maxLength", + "desc": "限制最长输入字符,-1 表示无限制", + "type": "`number`", + "default": "140" + }, + { + "prop": "rows", + "desc": "textarea 的行数", + "type": "`number`", + "default": "2" + }, + { + "prop": "showCount", + "desc": "textarea 是否展示输入字符。须配合`maxLength`使用", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "autoSize", + "desc": "高度是否可拉伸", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "readOnly", + "desc": "只读属性", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "disabled", + "desc": "禁用属性", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onChange", + "desc": "输入内容时触发", + "type": "`(value) => void`", + "default": "-" + }, + { + "prop": "onFocus", + "desc": "聚焦时触发", + "type": "`(event) => void`", + "default": "-" + }, + { + "prop": "onBlur", + "desc": "失焦时触发", + "type": "`(event) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-textarea-padding", + "scssVar": "$textarea-padding", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-textarea-text-color", + "scssVar": "$textarea-text-color", + "default": "$color-title" + } + ] + }, + "uploader": { + "id": "uploader", + "name": "Uploader", + "cName": "上传", + "version": "3.0.0", + "category": { + "name": "数据录入", + "enName": "dataentry" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "用于将本地的图片或文件上传至服务器。", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/uploader/doc.md", + "enUS": "src/packages/uploader/doc.en-US.md", + "zhTW": "src/packages/uploader/doc.zh-TW.md", + "taro": "src/packages/uploader/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/uploader/demos/h5/demo1.tsx", + "src/packages/uploader/demos/h5/demo2.tsx", + "src/packages/uploader/demos/h5/demo3.tsx", + "src/packages/uploader/demos/h5/demo4.tsx", + "src/packages/uploader/demos/h5/demo5.tsx", + "src/packages/uploader/demos/h5/demo6.tsx", + "src/packages/uploader/demos/h5/demo7.tsx", + "src/packages/uploader/demos/h5/demo8.tsx", + "src/packages/uploader/demos/h5/demo9.tsx", + "src/packages/uploader/demos/h5/demo10.tsx" + ], + "taro": [ + "src/packages/uploader/demos/taro/demo1.tsx", + "src/packages/uploader/demos/taro/demo2.tsx", + "src/packages/uploader/demos/taro/demo3.tsx", + "src/packages/uploader/demos/taro/demo4.tsx", + "src/packages/uploader/demos/taro/demo5.tsx", + "src/packages/uploader/demos/taro/demo6.tsx", + "src/packages/uploader/demos/taro/demo7.tsx", + "src/packages/uploader/demos/taro/demo8.tsx", + "src/packages/uploader/demos/taro/demo9.tsx", + "src/packages/uploader/demos/taro/demo10.tsx" + ] + }, + "spec": { + "base": "src/types/spec/uploader/base.ts", + "h5": "src/types/spec/uploader/h5.ts", + "taro": "src/types/spec/uploader/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Uploader", + "subComponent": null, + "rows": [ + { + "prop": "autoUpload", + "desc": "是否在选取文件后立即进行上传,false 时需要手动执行 ref submit 方法进行上传", + "type": "`Boolean`", + "default": "true" + }, + { + "prop": "name", + "desc": "`input` 标签 `name` 的名称,发到后台的文件参数名", + "type": "`string`", + "default": "file" + }, + { + "prop": "url", + "desc": "上传服务器的接口地址", + "type": "`string`", + "default": "-" + }, + { + "prop": "defaultValue", + "desc": "默认已经上传的文件列表", + "type": "`FileType[]`", + "default": "[]" + }, + { + "prop": "value", + "desc": "已经上传的文件列表", + "type": "`FileType[]`", + "default": "[]" + }, + { + "prop": "preview", + "desc": "是否上传成功后展示预览图", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "previewUrl", + "desc": "当上传非图片('image')格式的默认图片地址", + "type": "`string`", + "default": "-" + }, + { + "prop": "deletable", + "desc": "是否展示删除按钮", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "method", + "desc": "上传请求的 http method", + "type": "`string`", + "default": "post" + }, + { + "prop": "previewType", + "desc": "上传列表的内建样式,支持两种基本样式 picture、list", + "type": "`string`", + "default": "picture" + }, + { + "prop": "capture", + "desc": "图片[选取模式](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#htmlattrdefcapture\"),直接调起摄像头", + "type": "`string`", + "default": "false" + }, + { + "prop": "maxFileSize", + "desc": "可以设定最大上传文件的大小(字节)", + "type": "`number` | `string`", + "default": "Number.MAX_VALUE" + }, + { + "prop": "maxCount", + "desc": "文件上传数量限制", + "type": "`number` | `string`", + "default": "1" + }, + { + "prop": "imageFit", + "desc": "图片填充模式", + "type": "`contain` | `cover` | `fill` | `none` | `scale-down`", + "default": "cover" + }, + { + "prop": "clearInput", + "desc": "是否需要清空`input`内容,设为`true`支持重复选择上传同一个文件", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "accept", + "desc": "允许上传的文件类型,[详细说明](\"https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#%E9%99%90%E5%88%B6%E5%85%81%E8%AE%B8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B\")", + "type": "`string`", + "default": "*" + }, + { + "prop": "headers", + "desc": "设置上传的请求头部", + "type": "`object`", + "default": "{}" + }, + { + "prop": "data", + "desc": "附加上传的信息 formData", + "type": "`object`", + "default": "{}" + }, + { + "prop": "uploadIcon", + "desc": "上传区域图标名称", + "type": "`React.ReactNode`", + "default": "-" + }, + { + "prop": "uploadLabel", + "desc": "上传区域图片下方文字", + "type": "`React.ReactNode`", + "default": "-" + }, + { + "prop": "xhrState", + "desc": "接口响应的成功状态(status)值", + "type": "`number`", + "default": "200" + }, + { + "prop": "withCredentials", + "desc": "支持发送 cookie 凭证信息", + "type": "`Boolean`", + "default": "false" + }, + { + "prop": "multiple", + "desc": "是否支持文件多选", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "disabled", + "desc": "是否禁用文件上传", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "timeout", + "desc": "超时时间,单位为毫秒", + "type": "`number` | `string`", + "default": "1000 * 30" + }, + { + "prop": "beforeUpload", + "desc": "上传前的函数需要返回一个`Promise`对象", + "type": "`(file: File[]) => Promise`", + "default": "-" + }, + { + "prop": "beforeXhrUpload", + "desc": "执行 XHR 上传时,自定义方式", + "type": "`(xhr: XMLHttpRequest, options: any) => void`", + "default": "-" + }, + { + "prop": "beforeDelete", + "desc": "除文件时的回调,返回值为 false 时不移除。支持返回一个 `Promise` 对象,`Promise` 对象 resolve(false) 或 reject 时不移除", + "type": "`(file: FileItem, files: FileItem[]) => boolean`", + "default": "-" + }, + { + "prop": "onStart", + "desc": "文件上传开始", + "type": "`options`", + "default": "-" + }, + { + "prop": "onProgress", + "desc": "文件上传的进度", + "type": "`event, options, percentage`", + "default": "-" + }, + { + "prop": "onOversize", + "desc": "文件大小超过限制时触发", + "type": "`files`", + "default": "-" + }, + { + "prop": "onSuccess", + "desc": "上传成功", + "type": "`responseText, options`", + "default": "-" + }, + { + "prop": "onFailure", + "desc": "上传失败", + "type": "`responseText, options`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "上传文件改变时的状态", + "type": "`fileList, event`", + "default": "-" + }, + { + "prop": "onDelete", + "desc": "文件删除之前的状态", + "type": "`files, fileList`", + "default": "-" + }, + { + "prop": "onFileItemClick", + "desc": "文件上传成功后点击触发", + "type": "`fileItem`", + "default": "-" + } + ] + }, + { + "name": "FileItem", + "kind": "other", + "sourceComponent": "Uploader", + "subComponent": null, + "rows": [ + { + "prop": "status", + "desc": "文件状态值,可选'ready,uploading,success,error,removed'", + "type": "`ready`", + "default": "" + }, + { + "prop": "uid", + "desc": "文件的唯一标识", + "type": "`new Date().getTime().toString()`", + "default": "" + }, + { + "prop": "name", + "desc": "文件名称", + "type": "`-`", + "default": "" + }, + { + "prop": "url", + "desc": "文件路径", + "type": "`-`", + "default": "" + }, + { + "prop": "type", + "desc": "文件类型", + "type": "`image/jpeg`", + "default": "" + }, + { + "prop": "formData", + "desc": "上传所需的data", + "type": "`new FormData()`", + "default": "" + } + ] + }, + { + "name": "Methods", + "kind": "methods", + "sourceComponent": "Uploader", + "subComponent": null, + "rows": [ + { + "prop": "submit", + "desc": "手动上传模式,执行上传操作", + "type": "`-`", + "default": "-" + }, + { + "prop": "clear", + "desc": "清空已选择的文件队列(该方法一般配合在手动模式上传时使用)", + "type": "`index`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-uploader-image-width", + "scssVar": "$uploader-image-width", + "default": "scale-px(100px" + }, + { + "cssVar": "--nutui-uploader-image-height", + "scssVar": "$uploader-image-height", + "default": "scale-px(100px" + }, + { + "cssVar": "--nutui-uploader-image-border", + "scssVar": "$uploader-image-border", + "default": "0px" + } + ] + }, + "actionsheet": { + "id": "actionsheet", + "name": "ActionSheet", + "cName": "动作面板", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "dsj", + "type": "component", + "desc": "从底部弹出的动作菜单面板。", + "sort": 11, + "show": true, + "docs": { + "h5": "src/packages/actionsheet/doc.md", + "enUS": "src/packages/actionsheet/doc.en-US.md", + "zhTW": "src/packages/actionsheet/doc.zh-TW.md", + "taro": "src/packages/actionsheet/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/actionsheet/demos/h5/demo1.tsx", + "src/packages/actionsheet/demos/h5/demo2.tsx", + "src/packages/actionsheet/demos/h5/demo3.tsx", + "src/packages/actionsheet/demos/h5/demo4.tsx", + "src/packages/actionsheet/demos/h5/demo5.tsx", + "src/packages/actionsheet/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/actionsheet/demos/taro/demo1.tsx", + "src/packages/actionsheet/demos/taro/demo2.tsx", + "src/packages/actionsheet/demos/taro/demo3.tsx", + "src/packages/actionsheet/demos/taro/demo4.tsx", + "src/packages/actionsheet/demos/taro/demo5.tsx", + "src/packages/actionsheet/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/actionsheet/base.ts", + "h5": "src/types/spec/actionsheet/h5.ts", + "taro": "src/types/spec/actionsheet/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "ActionSheet", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "遮罩层可见", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "设置列表面板标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "description", + "desc": "设置列表面板副标题/描述", + "type": "`string`", + "default": "-" + }, + { + "prop": "options", + "desc": "列表项", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "optionKey", + "desc": "列表项的自定义设置", + "type": "`{ [key: string]: string }`", + "default": "-" + }, + { + "prop": "cancelText", + "desc": "取消文案", + "type": "`string`", + "default": "取消" + }, + { + "prop": "onSelect", + "desc": "选择之后触发", + "type": "`(item: any, index: number) => void`", + "default": "-" + }, + { + "prop": "onCancel", + "desc": "点击取消文案时触发", + "type": "`() => void`", + "default": "-" + } + ] + }, + { + "name": "options", + "kind": "other", + "sourceComponent": "ActionSheet", + "subComponent": null, + "rows": [ + { + "prop": "name", + "desc": "列表项的标题key值", + "type": "`string`", + "default": "-" + }, + { + "prop": "description", + "desc": "列表项的描述key值", + "type": "`string`", + "default": "-" + }, + { + "prop": "danger", + "desc": "高亮颜色", + "type": "`string`", + "default": "$primary-color" + }, + { + "prop": "disable", + "desc": "禁用状态", + "type": "`string`", + "default": "$color-text-disabled" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-actionsheet-border-radius", + "scssVar": "$actionsheet-border-radius", + "default": "0" + } + ] + }, + "badge": { + "id": "badge", + "name": "Badge", + "cName": "徽标", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "lzz", + "type": "component", + "desc": "在图标或文字右上角的红色圆点、数字或者文字,表示有新内容或者待处理的信息。", + "sort": 4, + "show": true, + "docs": { + "h5": "src/packages/badge/doc.md", + "enUS": "src/packages/badge/doc.en-US.md", + "zhTW": "src/packages/badge/doc.zh-TW.md", + "taro": "src/packages/badge/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/badge/demos/h5/demo1.tsx", + "src/packages/badge/demos/h5/demo2.tsx", + "src/packages/badge/demos/h5/demo3.tsx", + "src/packages/badge/demos/h5/demo4.tsx", + "src/packages/badge/demos/h5/demo5.tsx", + "src/packages/badge/demos/h5/demo6.tsx", + "src/packages/badge/demos/h5/demo7.tsx", + "src/packages/badge/demos/h5/demo8.tsx", + "src/packages/badge/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/badge/demos/taro/demo1.tsx", + "src/packages/badge/demos/taro/demo2.tsx", + "src/packages/badge/demos/taro/demo3.tsx", + "src/packages/badge/demos/taro/demo4.tsx", + "src/packages/badge/demos/taro/demo5.tsx", + "src/packages/badge/demos/taro/demo6.tsx", + "src/packages/badge/demos/taro/demo7.tsx", + "src/packages/badge/demos/taro/demo8.tsx", + "src/packages/badge/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/badge/base.ts", + "h5": "src/types/spec/badge/h5.ts", + "taro": "src/types/spec/badge/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Badge", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "显示的内容,支持数字、字符和自定义内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "max", + "desc": "value 为数值时,最大值", + "type": "`number`", + "default": "99" + }, + { + "prop": "dot", + "desc": "是否为小点", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "top", + "desc": "上下偏移量,支持单位设置,可设置为:5 等", + "type": "`number`", + "default": "0" + }, + { + "prop": "right", + "desc": "左右偏移量,支持单位设置,可设置为:5 等", + "type": "`number`", + "default": "0" + }, + { + "prop": "color", + "desc": "徽标背景颜色,默认值为当前主题色", + "type": "`string`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-badge-height", + "scssVar": "$badge-height", + "default": "scale-px(14px" + }, + { + "cssVar": "--nutui-badge-color", + "scssVar": "$badge-color", + "default": "$color-primary-text" + }, + { + "cssVar": "--nutui-badge-font-size", + "scssVar": "$badge-font-size", + "default": "$font-size-xxxs" + }, + { + "cssVar": "--nutui-badge-border-radius", + "scssVar": "$badge-border-radius", + "default": "$badge-height" + }, + { + "cssVar": "--nutui-badge-min-width", + "scssVar": "$badge-min-width", + "default": "scale-px(6px" + }, + { + "cssVar": "--nutui-badge-padding", + "scssVar": "$badge-padding", + "default": "scale-px(1px) scale-px(4px" + }, + { + "cssVar": "--nutui-badge-icon-padding", + "scssVar": "$badge-icon-padding", + "default": "scale-px(2px" + }, + { + "cssVar": "--nutui-badge-icon-size", + "scssVar": "$badge-icon-size", + "default": "$font-size-xxs" + }, + { + "cssVar": "--nutui-badge-z-index", + "scssVar": "$badge-z-index", + "default": "1" + }, + { + "cssVar": "--nutui-badge-dot-width", + "scssVar": "$badge-dot-width", + "default": "scale-px(6px" + }, + { + "cssVar": "--nutui-badge-dot-small-width", + "scssVar": "$badge-dot-small-width", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-badge-dot-large-width", + "scssVar": "$badge-dot-large-width", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-badge-outline-color", + "scssVar": "$badge-outline-color", + "default": "$color-primary" + } + ] + }, + "dialog": { + "id": "dialog", + "name": "Dialog", + "cName": "对话框", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "yangjinjun3", + "type": "component", + "desc": "模态对话框", + "sort": 12, + "show": true, + "docs": { + "h5": "src/packages/dialog/doc.md", + "enUS": "src/packages/dialog/doc.en-US.md", + "zhTW": "src/packages/dialog/doc.zh-TW.md", + "taro": "src/packages/dialog/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/dialog/demos/h5/demo1.tsx", + "src/packages/dialog/demos/h5/demo2.tsx", + "src/packages/dialog/demos/h5/demo3.tsx", + "src/packages/dialog/demos/h5/demo4.tsx", + "src/packages/dialog/demos/h5/demo5.tsx", + "src/packages/dialog/demos/h5/demo6.tsx", + "src/packages/dialog/demos/h5/demo7.tsx", + "src/packages/dialog/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/dialog/demos/taro/demo1.tsx", + "src/packages/dialog/demos/taro/demo2.tsx", + "src/packages/dialog/demos/taro/demo3.tsx", + "src/packages/dialog/demos/taro/demo4.tsx", + "src/packages/dialog/demos/taro/demo5.tsx", + "src/packages/dialog/demos/taro/demo6.tsx", + "src/packages/dialog/demos/taro/demo7.tsx", + "src/packages/dialog/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/dialog/base.ts", + "h5": "src/types/spec/dialog/h5.ts", + "taro": "src/types/spec/dialog/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Dialog", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "对话框是否可见", + "type": "`boolean`", + "default": "-" + }, + { + "prop": "title", + "desc": "标题", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "content", + "desc": "对话框的内容,适用于函数式调用", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "footer", + "desc": "自定义页脚,传入 null 则不显示", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "confirmText", + "desc": "确认按钮文案", + "type": "`ReactNode`", + "default": "确定" + }, + { + "prop": "cancelText", + "desc": "取消按钮文案", + "type": "`ReactNode`", + "default": "取消" + }, + { + "prop": "overlay", + "desc": "是否展示遮罩", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "hideConfirmButton", + "desc": "是否隐藏确定按钮", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "hideCancelButton", + "desc": "是否隐藏取消按钮", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "disableConfirmButton", + "desc": "禁用确定按钮", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "closeOnOverlayClick", + "desc": "点击蒙层是否关闭对话框", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "footerDirection", + "desc": "使用横纵方向 可选值 horizontal、vertical", + "type": "`string`", + "default": "horizontal" + }, + { + "prop": "lockScroll", + "desc": "背景是否锁定", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "beforeCancel", + "desc": "取消前回调,点击取消时触发", + "type": "`() => boolean`", + "default": "-" + }, + { + "prop": "beforeClose", + "desc": "关闭前回调", + "type": "`() => boolean`", + "default": "-" + }, + { + "prop": "onConfirm", + "desc": "确定按钮回调", + "type": "`(e?: MouseEvent) => Promise | void`", + "default": "-" + }, + { + "prop": "onCancel", + "desc": "取消按钮回调", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭回调,任何情况关闭弹窗都会触发", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击自身回调", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onOverlayClick", + "desc": "点击蒙层触发", + "type": "`() => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-dialog-min-width", + "scssVar": "$dialog-min-width", + "default": "scale-px(240px" + }, + { + "cssVar": "--nutui-dialog-width", + "scssVar": "$dialog-width", + "default": "scale-px(295px" + }, + { + "cssVar": "--nutui-dialog-padding", + "scssVar": "$dialog-padding", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-dialog-max-height", + "scssVar": "$dialog-max-height", + "default": "scale-px(420px" + }, + { + "cssVar": "--nutui-dialog-min-height", + "scssVar": "$dialog-min-height", + "default": "scale-px(124px" + }, + { + "cssVar": "--nutui-dialog-border-radius", + "scssVar": "$dialog-border-radius", + "default": "$radius-xl" + }, + { + "cssVar": "--nutui-dialog-content-margin", + "scssVar": "$dialog-content-margin", + "default": "0 0 scale-px(20px) 0" + }, + { + "cssVar": "--nutui-dialog-footer-badge-top", + "scssVar": "$dialog-footer-badge-top", + "default": "scale-px(-8px" + }, + { + "cssVar": "--nutui-dialog-close-color", + "scssVar": "$dialog-close-color", + "default": "#ffffff" + }, + { + "cssVar": "--nutui-dialog-close-width", + "scssVar": "$dialog-close-width", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-dialog-close-height", + "scssVar": "$dialog-close-height", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-dialog-close-top", + "scssVar": "$dialog-close-top", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-dialog-close-left", + "scssVar": "$dialog-close-left", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-dialog-close-right", + "scssVar": "$dialog-close-right", + "default": "scale-px(16px" + } + ] + }, + "drag": { + "id": "drag", + "name": "Drag", + "cName": "拖拽", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "实现可拖拽的任意元素", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/drag/doc.md", + "enUS": "src/packages/drag/doc.en-US.md", + "zhTW": "src/packages/drag/doc.zh-TW.md", + "taro": "src/packages/drag/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/drag/demos/h5/demo1.tsx", + "src/packages/drag/demos/h5/demo2.tsx", + "src/packages/drag/demos/h5/demo3.tsx", + "src/packages/drag/demos/h5/demo4.tsx" + ], + "taro": [ + "src/packages/drag/demos/taro/demo1.tsx", + "src/packages/drag/demos/taro/demo2.tsx", + "src/packages/drag/demos/taro/demo3.tsx", + "src/packages/drag/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/drag/base.ts", + "h5": "src/types/spec/drag/h5.ts", + "taro": "src/types/spec/drag/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Drag", + "subComponent": null, + "rows": [ + { + "prop": "attract", + "desc": "是否开启自动吸边", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "direction", + "desc": "拖拽元素的拖拽方向限制", + "type": "`x` | `y` | `all`", + "default": "all" + }, + { + "prop": "boundary", + "desc": "拖拽元素的拖拽边界", + "type": "`Object`", + "default": "{top: 0, left: 0, right: 0, bottom: 0}" + } + ] + } + ] + }, + "tokens": [] + }, + "empty": { + "id": "empty", + "name": "Empty", + "cName": "空状态", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "liukun", + "type": "component", + "desc": "空状态时的占位提示", + "sort": 16, + "show": true, + "docs": { + "h5": "src/packages/empty/doc.md", + "enUS": "src/packages/empty/doc.en-US.md", + "zhTW": "src/packages/empty/doc.zh-TW.md", + "taro": "src/packages/empty/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/empty/demos/h5/demo1.tsx", + "src/packages/empty/demos/h5/demo2.tsx", + "src/packages/empty/demos/h5/demo3.tsx", + "src/packages/empty/demos/h5/demo4.tsx", + "src/packages/empty/demos/h5/demo5.tsx", + "src/packages/empty/demos/h5/demo6.tsx", + "src/packages/empty/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/empty/demos/taro/demo1.tsx", + "src/packages/empty/demos/taro/demo2.tsx", + "src/packages/empty/demos/taro/demo3.tsx", + "src/packages/empty/demos/taro/demo4.tsx", + "src/packages/empty/demos/taro/demo5.tsx", + "src/packages/empty/demos/taro/demo6.tsx", + "src/packages/empty/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/empty/base.ts", + "h5": "src/types/spec/empty/h5.ts", + "taro": "src/types/spec/empty/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Empty", + "subComponent": null, + "rows": [ + { + "prop": "image", + "desc": "图片,支持传入图片 URL", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "imageSize", + "desc": "图片大小,number 类型单位为 px", + "type": "`number` | `string`", + "default": "-" + }, + { + "prop": "description", + "desc": "图片下方的描述文字", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "status", + "desc": "默认图片错误类型", + "type": "`empty` | `error` | `network`", + "default": "empty" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-empty-padding", + "scssVar": "$empty-padding", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-empty-title-color", + "scssVar": "$empty-title-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-empty-description-color", + "scssVar": "$empty-description-color", + "default": "$color-text-help" + }, + { + "cssVar": "--nutui-empty-full-padding-top", + "scssVar": "$empty-full-padding-top", + "default": "scale-px(160px" + }, + { + "cssVar": "--nutui-empty-full-image-size", + "scssVar": "$empty-full-image-size", + "default": "scale-px(160px" + }, + { + "cssVar": "--nutui-empty-full-title-font-size", + "scssVar": "$empty-full-title-font-size", + "default": "$font-size-md" + }, + { + "cssVar": "--nutui-empty-full-title-line-height", + "scssVar": "$empty-full-title-line-height", + "default": "$line-height-xxl" + }, + { + "cssVar": "--nutui-empty-full-description-font-size", + "scssVar": "$empty-full-description-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-empty-full-description-line-height", + "scssVar": "$empty-full-description-line-height", + "default": "scale-font-px(22px" + }, + { + "cssVar": "--nutui-empty-full-actions-margin-top", + "scssVar": "$empty-full-actions-margin-top", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-empty-half-image-size", + "scssVar": "$empty-half-image-size", + "default": "scale-px(80px" + }, + { + "cssVar": "--nutui-empty-half-title-font-size", + "scssVar": "$empty-half-title-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-empty-half-title-line-height", + "scssVar": "$empty-half-title-line-height", + "default": "scale-font-px(22px" + }, + { + "cssVar": "--nutui-empty-half-description-font-size", + "scssVar": "$empty-half-description-font-size", + "default": "$font-size-m" + }, + { + "cssVar": "--nutui-empty-half-description-line-height", + "scssVar": "$empty-half-description-line-height", + "default": "$line-height-2xl" + }, + { + "cssVar": "--nutui-empty-half-actions-margin-top", + "scssVar": "$empty-half-actions-margin-top", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-empty-partial-padding", + "scssVar": "$empty-partial-padding", + "default": "scale-px(0px) scale-px(16px" + }, + { + "cssVar": "--nutui-empty-partial-image-size", + "scssVar": "$empty-partial-image-size", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-empty-partial-content-gap", + "scssVar": "$empty-partial-content-gap", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-empty-partial-description-font-size", + "scssVar": "$empty-partial-description-font-size", + "default": "$font-size-m" + }, + { + "cssVar": "--nutui-empty-partial-description-line-height", + "scssVar": "$empty-partial-description-line-height", + "default": "scale-font-px(32px" + } + ] + }, + "infiniteloading": { + "id": "infiniteloading", + "name": "InfiniteLoading", + "cName": "滚动加载", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "列表滚动到底部自动加载更多数据。", + "sort": 5, + "show": true, + "docs": { + "h5": "src/packages/infiniteloading/doc.md", + "enUS": "src/packages/infiniteloading/doc.en-US.md", + "zhTW": "src/packages/infiniteloading/doc.zh-TW.md", + "taro": "src/packages/infiniteloading/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/infiniteloading/demos/h5/demo1.tsx", + "src/packages/infiniteloading/demos/h5/demo2.tsx", + "src/packages/infiniteloading/demos/h5/demo3.tsx", + "src/packages/infiniteloading/demos/h5/demo4.tsx", + "src/packages/infiniteloading/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/infiniteloading/demos/taro/demo1.tsx", + "src/packages/infiniteloading/demos/taro/demo2.tsx", + "src/packages/infiniteloading/demos/taro/demo3.tsx", + "src/packages/infiniteloading/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/infiniteloading/base.ts", + "h5": "src/types/spec/infiniteloading/h5.ts", + "taro": "src/types/spec/infiniteloading/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "InfiniteLoading", + "subComponent": null, + "rows": [ + { + "prop": "hasMore", + "desc": "是否还有更多数据", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "threshold", + "desc": "距离底部多远加载", + "type": "`number`", + "default": "200" + }, + { + "prop": "capture", + "desc": "是否使用捕获模式 true 捕获 false 冒泡", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "target", + "desc": "获取监听的目标元素", + "type": "`string`", + "default": "-" + }, + { + "prop": "loadMoreText", + "desc": "“没有更多数”据展示文案", + "type": "`string`", + "default": "哎呀,这里是底部了啦" + }, + { + "prop": "pullRefresh", + "desc": "是否开启下拉刷新", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "pullingText", + "desc": "下拉刷新提示文案", + "type": "`ReactNode`", + "default": "松手刷新" + }, + { + "prop": "loadingText", + "desc": "上拉加载提示文案", + "type": "`ReactNode`", + "default": "加载中..." + }, + { + "prop": "onRefresh", + "desc": "下拉刷新事件回调", + "type": "`(param: () => void) => void`", + "default": "-" + }, + { + "prop": "onLoadMore", + "desc": "继续加载的回调函数", + "type": "`(param: () => void) => void`", + "default": "-" + }, + { + "prop": "onScroll", + "desc": "实时监听滚动高度", + "type": "`(param: number) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "loading": { + "id": "loading", + "name": "Loading", + "cName": "加载中", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "mike8625", + "type": "component", + "desc": "加载图标,用于显示正在加载中的状态", + "sort": 15, + "show": true, + "docs": { + "h5": "src/packages/loading/doc.md", + "enUS": "src/packages/loading/doc.en-US.md", + "zhTW": "src/packages/loading/doc.zh-TW.md", + "taro": "src/packages/loading/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/loading/demos/h5/demo1.tsx", + "src/packages/loading/demos/h5/demo2.tsx", + "src/packages/loading/demos/h5/demo3.tsx", + "src/packages/loading/demos/h5/demo4.tsx", + "src/packages/loading/demos/h5/demo5.tsx", + "src/packages/loading/demos/h5/demo6.tsx", + "src/packages/loading/demos/h5/demo7.tsx", + "src/packages/loading/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/loading/demos/taro/demo1.tsx", + "src/packages/loading/demos/taro/demo2.tsx", + "src/packages/loading/demos/taro/demo3.tsx", + "src/packages/loading/demos/taro/demo4.tsx", + "src/packages/loading/demos/taro/demo5.tsx", + "src/packages/loading/demos/taro/demo6.tsx", + "src/packages/loading/demos/taro/demo7.tsx", + "src/packages/loading/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/loading/base.ts", + "h5": "src/types/spec/loading/h5.ts", + "taro": "src/types/spec/loading/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-loading-icon-color", + "scssVar": "$loading-icon-color", + "default": "$color-text-help" + }, + { + "cssVar": "--nutui-loading-icon-size", + "scssVar": "$loading-icon-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-loading-color", + "scssVar": "$loading-color", + "default": "$color-text-help" + }, + { + "cssVar": "--nutui-loading-font-size", + "scssVar": "$loading-font-size", + "default": "$font-size-s" + } + ] + }, + "noticebar": { + "id": "noticebar", + "name": "NoticeBar", + "cName": "公告栏", + "version": "2.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "vickyYe", + "type": "component", + "desc": "用于循环播放展示一组消息通知。", + "sort": 11, + "show": true, + "docs": { + "h5": "src/packages/noticebar/doc.md", + "enUS": "src/packages/noticebar/doc.en-US.md", + "zhTW": "src/packages/noticebar/doc.zh-TW.md", + "taro": "src/packages/noticebar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/noticebar/demos/h5/demo1.tsx", + "src/packages/noticebar/demos/h5/demo2.tsx", + "src/packages/noticebar/demos/h5/demo3.tsx", + "src/packages/noticebar/demos/h5/demo4.tsx", + "src/packages/noticebar/demos/h5/demo5.tsx", + "src/packages/noticebar/demos/h5/demo6.tsx", + "src/packages/noticebar/demos/h5/demo7.tsx", + "src/packages/noticebar/demos/h5/demo8.tsx", + "src/packages/noticebar/demos/h5/demo9.tsx", + "src/packages/noticebar/demos/h5/demo10.tsx", + "src/packages/noticebar/demos/h5/demo11.tsx" + ], + "taro": [ + "src/packages/noticebar/demos/taro/demo1.tsx", + "src/packages/noticebar/demos/taro/demo2.tsx", + "src/packages/noticebar/demos/taro/demo3.tsx", + "src/packages/noticebar/demos/taro/demo4.tsx", + "src/packages/noticebar/demos/taro/demo5.tsx", + "src/packages/noticebar/demos/taro/demo6.tsx", + "src/packages/noticebar/demos/taro/demo7.tsx", + "src/packages/noticebar/demos/taro/demo8.tsx", + "src/packages/noticebar/demos/taro/demo9.tsx", + "src/packages/noticebar/demos/taro/demo10.tsx", + "src/packages/noticebar/demos/taro/demo11.tsx" + ] + }, + "spec": { + "base": "src/types/spec/noticebar/base.ts", + "h5": "src/types/spec/noticebar/h5.ts", + "taro": "src/types/spec/noticebar/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "NoticeBar", + "subComponent": null, + "rows": [ + { + "prop": "direction", + "desc": "滚动的方向,可选 horizontal、vertical", + "type": "`string`", + "default": "horizontal" + }, + { + "prop": "content", + "desc": "提示的信息", + "type": "`string`", + "default": "-" + }, + { + "prop": "closeable", + "desc": "是否启用关闭模式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "leftIcon", + "desc": "左边的 icon,closeable 模式下默认为空", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "rightIcon", + "desc": "右边的 icon,在 closeable 模式下默认为 ``", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "delay", + "desc": "延时多少秒", + "type": "`string` | `number`", + "default": "1" + }, + { + "prop": "scrollable", + "desc": "是否可以滚动", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "speed", + "desc": "滚动速率 (px/s)", + "type": "`number`", + "default": "50" + }, + { + "prop": "wrap", + "desc": "是否开启文本换行", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onClick", + "desc": "外层点击事件回调", + "type": "`(event: any) => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭通知栏时触发", + "type": "`(event: any) => void`", + "default": "-" + }, + { + "prop": "onClickItem", + "desc": "垂直滚动多条数据时,点击当前展示的信息时触发", + "type": "`(event: any, value: any) => void`", + "default": "-" + } + ] + }, + { + "name": "Props(direction=vertical)", + "kind": "props", + "sourceComponent": "NoticeBar", + "subComponent": null, + "rows": [ + { + "prop": "list", + "desc": "纵向滚动数据列表", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "speed", + "desc": "滚动的速度", + "type": "`number`", + "default": "50" + }, + { + "prop": "duration", + "desc": "停留时间(毫秒)", + "type": "`number`", + "default": "1000" + }, + { + "prop": "height", + "desc": "每一个滚动列的高度(px)", + "type": "`number`", + "default": "40" + }, + { + "prop": "closeable", + "desc": "是否启用右侧关闭图标,可以通过 rightIcon 自定义图标", + "type": "`boolean`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-noticebar-height", + "scssVar": "$noticebar-height", + "default": "scale-px(36px" + }, + { + "cssVar": "--nutui-noticebar-color", + "scssVar": "$noticebar-color", + "default": "#d9500b" + }, + { + "cssVar": "--nutui-noticebar-font-size", + "scssVar": "$noticebar-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-noticebar-line-height", + "scssVar": "$noticebar-line-height", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-noticebar-box-padding", + "scssVar": "$noticebar-box-padding", + "default": "0 scale-px(16px" + }, + { + "cssVar": "--nutui-noticebar-border-radius", + "scssVar": "$noticebar-border-radius", + "default": "0" + }, + { + "cssVar": "--nutui-noticebar-icon-gap", + "scssVar": "$noticebar-icon-gap", + "default": "scale-px(4px" + } + ] + }, + "notify": { + "id": "notify", + "name": "Notify", + "cName": "消息通知", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "vickyYE", + "type": "component", + "desc": "在页面顶部展示消息提示", + "sort": 11, + "show": true, + "docs": { + "h5": "src/packages/notify/doc.md", + "enUS": "src/packages/notify/doc.en-US.md", + "zhTW": "src/packages/notify/doc.zh-TW.md", + "taro": "src/packages/notify/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/notify/demos/h5/demo1.tsx", + "src/packages/notify/demos/h5/demo2.tsx", + "src/packages/notify/demos/h5/demo3.tsx", + "src/packages/notify/demos/h5/demo4.tsx" + ], + "taro": [ + "src/packages/notify/demos/taro/demo1.tsx", + "src/packages/notify/demos/taro/demo2.tsx", + "src/packages/notify/demos/taro/demo3.tsx", + "src/packages/notify/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/notify/base.ts", + "h5": "src/types/spec/notify/h5.ts", + "taro": "src/types/spec/notify/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Notify", + "subComponent": null, + "rows": [ + { + "prop": "type", + "desc": "提示的信息类型(primary,success ,danger,warning)", + "type": "`string`", + "default": "danger" + }, + { + "prop": "duration", + "desc": "展示时长(ms),值为 0 时,notify 不会消失", + "type": "`string`", + "default": "3000" + }, + { + "prop": "position", + "desc": "自定义位置 (top, bottom)", + "type": "`string`", + "default": "top" + }, + { + "prop": "onClick", + "desc": "点击事件回调", + "type": "`onClick: () => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭事件回调", + "type": "`onClose: () => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-notify-height", + "scssVar": "$notify-height", + "default": "scale-px(40px" + }, + { + "cssVar": "--nutui-notify-padding", + "scssVar": "$notify-padding", + "default": "0px scale-px(12px" + }, + { + "cssVar": "--nutui-notify-border-radius", + "scssVar": "$notify-border-radius", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-notify-z-index", + "scssVar": "$notify-z-index", + "default": "1000" + }, + { + "cssVar": "--nutui-notify-text-color", + "scssVar": "$notify-text-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-notify-font-size", + "scssVar": "$notify-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-notify-background-color", + "scssVar": "$notify-background-color", + "default": "$white" + } + ] + }, + "popover": { + "id": "popover", + "name": "Popover", + "cName": "气泡弹出框", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "lzz", + "type": "component", + "desc": "气泡弹出框", + "sort": 19, + "show": true, + "docs": { + "h5": "src/packages/popover/doc.md", + "enUS": "src/packages/popover/doc.en-US.md", + "zhTW": "src/packages/popover/doc.zh-TW.md", + "taro": "src/packages/popover/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/popover/demos/h5/demo1.tsx", + "src/packages/popover/demos/h5/demo2.tsx", + "src/packages/popover/demos/h5/demo3.tsx", + "src/packages/popover/demos/h5/demo4.tsx", + "src/packages/popover/demos/h5/demo5.tsx", + "src/packages/popover/demos/h5/demo7.tsx", + "src/packages/popover/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/popover/demos/taro/demo1.tsx", + "src/packages/popover/demos/taro/demo2.tsx", + "src/packages/popover/demos/taro/demo3.tsx", + "src/packages/popover/demos/taro/demo4.tsx", + "src/packages/popover/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/popover/base.ts", + "h5": "src/types/spec/popover/h5.ts", + "taro": "src/types/spec/popover/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Popover", + "subComponent": null, + "rows": [ + { + "prop": "list", + "desc": "选项列表", + "type": "`List[]`", + "default": "[]" + }, + { + "prop": "visible", + "desc": "是否展示气泡弹出层", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "location", + "desc": "弹出位置,里面具体的参数值可以参考上面的位置自定义例子", + "type": "`string`", + "default": "bottom" + }, + { + "prop": "offset", + "desc": "出现位置的偏移量", + "type": "`string[] | number[]`", + "default": "[0, 12]" + }, + { + "prop": "showArrow", + "desc": "是否显示小箭头", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "closeOnClickAction", + "desc": "是否在点击选项后关闭", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "closeOnClickOutside", + "desc": "是否在点击外部元素后关闭菜单", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "targetId", + "desc": "自定义目标元素 id", + "type": "`string`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击切换 popover 展示状态", + "type": "`() => void`", + "default": "() => {}" + }, + { + "prop": "onSelect", + "desc": "点击选项时触发", + "type": "`(item: List, index: number) => void`", + "default": "(item, index) => {}" + }, + { + "prop": "onOpen", + "desc": "点击菜单时触发", + "type": "`() => void`", + "default": "() => {}" + }, + { + "prop": "onClose", + "desc": "关闭菜单时触发", + "type": "`() => void`", + "default": "() => {}" + } + ] + }, + { + "name": "List 数据结构", + "kind": "other", + "sourceComponent": "Popover", + "subComponent": null, + "rows": [ + { + "prop": "key", + "desc": "选项 key 值", + "type": "`string`", + "default": "-" + }, + { + "prop": "name", + "desc": "选项文字", + "type": "`string`", + "default": "-" + }, + { + "prop": "icon", + "desc": "参考 Icon 组件", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "是否为禁用状态", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "className", + "desc": "为对应选项添加额外的类名", + "type": "`string`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-popover-border-radius", + "scssVar": "$popover-border-radius", + "default": "$radius-xs" + }, + { + "cssVar": "--nutui-popover-font-size", + "scssVar": "$popover-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-popover-text-color", + "scssVar": "$popover-text-color", + "default": "$color-mask" + }, + { + "cssVar": "--nutui-popover-padding", + "scssVar": "$popover-padding", + "default": "scale-px(8px" + }, + { + "cssVar": "--nutui-popover-item-width", + "scssVar": "$popover-item-width", + "default": "scale-px(160px" + } + ] + }, + "popup": { + "id": "popup", + "name": "Popup", + "cName": "弹出层", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "szg2008", + "type": "component", + "desc": "弹出层容器,用于展示弹窗、信息提示等内容,支持多个弹出层叠加展示", + "sort": 9, + "show": true, + "rn": true, + "docs": { + "h5": "src/packages/popup/doc.md", + "enUS": "src/packages/popup/doc.en-US.md", + "zhTW": "src/packages/popup/doc.zh-TW.md", + "taro": "src/packages/popup/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/popup/demos/h5/demo1.tsx", + "src/packages/popup/demos/h5/demo2.tsx", + "src/packages/popup/demos/h5/demo3.tsx", + "src/packages/popup/demos/h5/demo4.tsx", + "src/packages/popup/demos/h5/demo5.tsx", + "src/packages/popup/demos/h5/demo6.tsx", + "src/packages/popup/demos/h5/demo7.tsx", + "src/packages/popup/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/popup/demos/taro/demo1.tsx", + "src/packages/popup/demos/taro/demo2.tsx", + "src/packages/popup/demos/taro/demo3.tsx", + "src/packages/popup/demos/taro/demo4.tsx", + "src/packages/popup/demos/taro/demo5.tsx", + "src/packages/popup/demos/taro/demo6.tsx", + "src/packages/popup/demos/taro/demo7.tsx", + "src/packages/popup/demos/taro/demo8.tsx", + "src/packages/popup/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/popup/base.ts", + "h5": "src/types/spec/popup/h5.ts", + "taro": "src/types/spec/popup/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Popup", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "当前组件是否显示", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "zIndex", + "desc": "遮罩层级", + "type": "`string` | `number`", + "default": "2000" + }, + { + "prop": "duration", + "desc": "遮罩动画时长,单位秒", + "type": "`number`", + "default": "0.3" + }, + { + "prop": "overlayClassName", + "desc": "自定义遮罩类名", + "type": "`string`", + "default": "-" + }, + { + "prop": "overlayStyle", + "desc": "自定义遮罩样式", + "type": "`CSSProperties`", + "default": "-" + }, + { + "prop": "lockScroll", + "desc": "背景是否锁定", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "overlay", + "desc": "是否显示遮罩", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "closeOnOverlayClick", + "desc": "是否点击遮罩关闭", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "position", + "desc": "弹出位置", + "type": "`top` | `bottom` | `left` | `right` | `center`", + "default": "center" + }, + { + "prop": "transition", + "desc": "动画名", + "type": "`string`", + "default": "-" + }, + { + "prop": "style", + "desc": "自定义弹框样式", + "type": "`CSSProperties`", + "default": "-" + }, + { + "prop": "className", + "desc": "自定义弹框类名", + "type": "`string`", + "default": "-" + }, + { + "prop": "closeable", + "desc": "是否显示关闭按钮", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "closeIconPosition", + "desc": "关闭按钮位置", + "type": "`top-left` | `top-right` | `bottom-left` | `bottom-right`", + "default": "top-right" + }, + { + "prop": "closeIcon", + "desc": "自定义 Icon", + "type": "`ReactNode`", + "default": "close" + }, + { + "prop": "destroyOnClose", + "desc": "组件不可见时,卸载内容", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "round", + "desc": "是否显示圆角", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "portal", + "desc": "指定节点挂载", + "type": "`HTMLElement` | `(() => HTMLElement)`", + "default": "null" + }, + { + "prop": "onClick", + "desc": "点击弹框时触发", + "type": "`event: MouseEvent`", + "default": "-" + }, + { + "prop": "onClickCloseIcon", + "desc": "点击关闭图标时触发", + "type": "`event: MouseEvent`", + "default": "-" + }, + { + "prop": "onOpen", + "desc": "打开弹框时触发", + "type": "`-`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭弹框时触发", + "type": "`-`", + "default": "-" + }, + { + "prop": "afterShow", + "desc": "继承于`Overlay`, 遮罩打开动画结束时触发", + "type": "`event: HTMLElement`", + "default": "-" + }, + { + "prop": "afterClose", + "desc": "继承于`Overlay`, 遮罩关闭动画结束时触发", + "type": "`event: HTMLElement`", + "default": "-" + }, + { + "prop": "onClickOverlay", + "desc": "点击遮罩触发", + "type": "`event: MouseEvent`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-popup-border-radius", + "scssVar": "$popup-border-radius", + "default": "$radius-xl" + }, + { + "cssVar": "--nutui-popup-icon-size", + "scssVar": "$popup-icon-size", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-popup-title-padding", + "scssVar": "$popup-title-padding", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-popup-title-height", + "scssVar": "$popup-title-height", + "default": "scale-px(50px" + }, + { + "cssVar": "--nutui-popup-title-border-bottom", + "scssVar": "$popup-title-border-bottom", + "default": "0" + }, + { + "cssVar": "--nutui-popup-animation-duration", + "scssVar": "$popup-animation-duration", + "default": "0.3s" + } + ] + }, + "pulltorefresh": { + "id": "pulltorefresh", + "name": "PullToRefresh", + "cName": "下拉刷新", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "", + "sort": 10, + "show": true, + "docs": { + "h5": "src/packages/pulltorefresh/doc.md", + "enUS": "src/packages/pulltorefresh/doc.en-US.md", + "zhTW": "src/packages/pulltorefresh/doc.zh-TW.md", + "taro": "src/packages/pulltorefresh/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/pulltorefresh/demos/h5/demo1.tsx", + "src/packages/pulltorefresh/demos/h5/demo2.tsx" + ], + "taro": [ + "src/packages/pulltorefresh/demos/taro/demo1.tsx", + "src/packages/pulltorefresh/demos/taro/demo2.tsx", + "src/packages/pulltorefresh/demos/taro/demo3.tsx", + "src/packages/pulltorefresh/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/pulltorefresh/base.ts", + "h5": "src/types/spec/pulltorefresh/h5.ts", + "taro": "src/types/spec/pulltorefresh/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "PullToRefresh", + "subComponent": null, + "rows": [ + { + "prop": "canReleaseText", + "desc": "释放的提示文案", + "type": "`ReactNode`", + "default": "释放立即刷新" + }, + { + "prop": "completeText", + "desc": "完成时的提示文案", + "type": "`ReactNode`", + "default": "刷新成功" + }, + { + "prop": "completeDelay", + "desc": "完成后延迟消失的时间,单位为 ms", + "type": "`number`", + "default": "500" + }, + { + "prop": "disabled", + "desc": "是否禁用下拉刷新", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "headHeight", + "desc": "头部提示内容区的高度,单位为 px", + "type": "`number`", + "default": "40" + }, + { + "prop": "pullingText", + "desc": "下拉的提示文案", + "type": "`ReactNode`", + "default": "下拉刷新" + }, + { + "prop": "refreshingText", + "desc": "刷新时的提示文案", + "type": "`ReactNode`", + "default": "加载中……" + }, + { + "prop": "renderText", + "desc": "根据下拉状态,自定义下拉提示文案", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "threshold", + "desc": "触发刷新需要下拉多少距离,单位为 px", + "type": "`number`", + "default": "60" + }, + { + "prop": "onRefresh", + "desc": "触发刷新时的处理函数", + "type": "`() => Promise`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-pulltorefresh-icon-width", + "scssVar": "$pulltorefresh-icon-width", + "default": "scale-px(36px" + } + ] + }, + "resultpage": { + "id": "resultpage", + "name": "ResultPage", + "cName": "结果反馈", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "以页面的形式向用户反馈操作结果", + "sort": 15, + "show": true, + "docs": { + "h5": "src/packages/resultpage/doc.md", + "enUS": "src/packages/resultpage/doc.en-US.md", + "zhTW": "src/packages/resultpage/doc.zh-TW.md", + "taro": "src/packages/resultpage/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/resultpage/demos/h5/demo1.tsx", + "src/packages/resultpage/demos/h5/demo2.tsx", + "src/packages/resultpage/demos/h5/demo3.tsx", + "src/packages/resultpage/demos/h5/demo4.tsx", + "src/packages/resultpage/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/resultpage/demos/taro/demo1.tsx", + "src/packages/resultpage/demos/taro/demo2.tsx", + "src/packages/resultpage/demos/taro/demo3.tsx", + "src/packages/resultpage/demos/taro/demo4.tsx", + "src/packages/resultpage/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/resultpage/base.ts", + "h5": "src/types/spec/resultpage/h5.ts", + "taro": "src/types/spec/resultpage/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-resultpage-width", + "scssVar": "$resultpage-width", + "default": "scale-px(240px" + }, + { + "cssVar": "--nutui-resultpage-icon-size", + "scssVar": "$resultpage-icon-size", + "default": "scale-px(36px" + } + ] + }, + "skeleton": { + "id": "skeleton", + "name": "Skeleton", + "cName": "骨架屏", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "在页面上待加载区域填充灰色的占位图,本质上是界面加载过程中的过渡效果。", + "sort": 15, + "show": true, + "docs": { + "h5": "src/packages/skeleton/doc.md", + "enUS": "src/packages/skeleton/doc.en-US.md", + "zhTW": "src/packages/skeleton/doc.zh-TW.md", + "taro": "src/packages/skeleton/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/skeleton/demos/h5/demo1.tsx", + "src/packages/skeleton/demos/h5/demo2.tsx", + "src/packages/skeleton/demos/h5/demo3.tsx", + "src/packages/skeleton/demos/h5/demo4.tsx", + "src/packages/skeleton/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/skeleton/demos/taro/demo1.tsx", + "src/packages/skeleton/demos/taro/demo2.tsx", + "src/packages/skeleton/demos/taro/demo3.tsx", + "src/packages/skeleton/demos/taro/demo4.tsx", + "src/packages/skeleton/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/skeleton/base.ts", + "h5": "src/types/spec/skeleton/h5.ts", + "taro": "src/types/spec/skeleton/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Skeleton", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否显示骨架屏(true不显示骨架屏,false显示骨架屏)", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "animated", + "desc": "是否开启骨架屏动画", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "avatar", + "desc": "是否显示头像", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "avatarShape", + "desc": "头像形状:正方形/圆形", + "type": "`string`", + "default": "round" + }, + { + "prop": "avatarSize", + "desc": "头像大小", + "type": "`string`", + "default": "50px" + }, + { + "prop": "rows", + "desc": "设置段落行数", + "type": "`string`", + "default": "1" + }, + { + "prop": "title", + "desc": "是否显示段落标题", + "type": "`boolean`", + "default": "true" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-skeleton-line-width", + "scssVar": "$skeleton-line-width", + "default": "100%" + } + ] + }, + "swipe": { + "id": "swipe", + "name": "Swipe", + "cName": "滑动手势", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Ymm0008", + "type": "component", + "desc": "可以左右滑动来展示操作按钮的组件", + "sort": 9, + "show": true, + "docs": { + "h5": "src/packages/swipe/doc.md", + "enUS": "src/packages/swipe/doc.en-US.md", + "zhTW": "src/packages/swipe/doc.zh-TW.md", + "taro": "src/packages/swipe/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/swipe/demos/h5/demo1.tsx", + "src/packages/swipe/demos/h5/demo2.tsx", + "src/packages/swipe/demos/h5/demo3.tsx", + "src/packages/swipe/demos/h5/demo4.tsx", + "src/packages/swipe/demos/h5/demo5.tsx", + "src/packages/swipe/demos/h5/demo6.tsx", + "src/packages/swipe/demos/h5/demo7.tsx", + "src/packages/swipe/demos/h5/demo8.tsx", + "src/packages/swipe/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/swipe/demos/taro/demo1.tsx", + "src/packages/swipe/demos/taro/demo2.tsx", + "src/packages/swipe/demos/taro/demo3.tsx", + "src/packages/swipe/demos/taro/demo4.tsx", + "src/packages/swipe/demos/taro/demo5.tsx", + "src/packages/swipe/demos/taro/demo6.tsx", + "src/packages/swipe/demos/taro/demo7.tsx", + "src/packages/swipe/demos/taro/demo8.tsx", + "src/packages/swipe/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/swipe/base.ts", + "h5": "src/types/spec/swipe/h5.ts", + "taro": "src/types/spec/swipe/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Swipe", + "subComponent": null, + "rows": [ + { + "prop": "name", + "desc": "标识符,可以在事件参数中获取到", + "type": "`number` | `string`", + "default": "-" + }, + { + "prop": "leftAction", + "desc": "左侧滑动区域的内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "rightAction", + "desc": "右侧滑动区域的内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "beforeClose", + "desc": "关闭前的回调函数,返回滑动区域所在方向 `position`", + "type": "`(position: 'left | 'right') => void`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "是否禁用滑动", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onOpen", + "desc": "打开单元格侧边栏", + "type": "`(name, position): { name: string | number, position: 'left' | 'right' } => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "收起单元格侧边栏", + "type": "`(name, position): { name: string | number, position: 'left' | 'right' } => void`", + "default": "-" + }, + { + "prop": "onActionClick", + "desc": "点击左侧或者右侧时触发", + "type": "`(event: Event, position: 'left' | 'right') => void`", + "default": "-" + }, + { + "prop": "onTouchStart", + "desc": "onTouchStart", + "type": "`(event: Event) => void`", + "default": "-" + }, + { + "prop": "onTouchMove", + "desc": "onTouchMove", + "type": "`(event: Event) => void`", + "default": "-" + }, + { + "prop": "onTouchEnd", + "desc": "onTouchEnd", + "type": "`(event: Event) => void`", + "default": "-" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Swipe", + "subComponent": null, + "rows": [ + { + "prop": "open", + "desc": "打开单元格侧边栏,`side`参数默认为`right`", + "type": "`(side?: 'left' | 'right') => void`", + "default": "" + }, + { + "prop": "close", + "desc": "收起单元格侧边栏", + "type": "`() => void`", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "toast": { + "id": "toast", + "name": "Toast", + "cName": "吐司", + "version": "3.0.0", + "category": { + "name": "操作反馈", + "enName": "feedback" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "VickyYe", + "type": "component", + "desc": "轻提示", + "sort": 1, + "show": true, + "docs": { + "h5": "src/packages/toast/doc.md", + "enUS": "src/packages/toast/doc.en-US.md", + "zhTW": "src/packages/toast/doc.zh-TW.md", + "taro": "src/packages/toast/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/toast/demos/h5/demo1.tsx", + "src/packages/toast/demos/h5/demo2.tsx", + "src/packages/toast/demos/h5/demo3.tsx", + "src/packages/toast/demos/h5/demo4.tsx", + "src/packages/toast/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/toast/demos/taro/demo1.tsx", + "src/packages/toast/demos/taro/demo2.tsx", + "src/packages/toast/demos/taro/demo3.tsx", + "src/packages/toast/demos/taro/demo4.tsx", + "src/packages/toast/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/toast/base.ts", + "h5": "src/types/spec/toast/h5.ts", + "taro": "src/types/spec/toast/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Toast", + "subComponent": null, + "rows": [ + { + "prop": "content", + "desc": "Toast文本内容", + "type": "`React.ReactNode`", + "default": "-" + }, + { + "prop": "duration", + "desc": "展示时长(秒)
值为 0 时,toast 不会自动消失", + "type": "`number`", + "default": "2" + }, + { + "prop": "position", + "desc": "toast展示位置", + "type": "`top` | `center` | `bottom`", + "default": "center" + }, + { + "prop": "title", + "desc": "标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "icon", + "desc": "自定义图标", + "type": "`success` | `fail` | `loading` | `warn` | `React.ReactNode`", + "default": "-" + }, + { + "prop": "size", + "desc": "文案尺寸,三选一", + "type": "`small` | `base` | `large`", + "default": "base" + }, + { + "prop": "contentClassName", + "desc": "自定义内容区类名", + "type": "`string`", + "default": "-" + }, + { + "prop": "contentStyle", + "desc": "自定义内容区样式", + "type": "`React.CSSProperties`", + "default": "-" + }, + { + "prop": "closeOnOverlayClick", + "desc": "是否在点击遮罩层后关闭提示", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "lockScroll", + "desc": "背景是否锁定", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onClose", + "desc": "关闭时触发的事件", + "type": "`() => void`", + "default": "() => void" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Toast", + "subComponent": null, + "rows": [ + { + "prop": "clear", + "desc": "关闭所有显示中的`Toast`", + "type": "`-`", + "default": "" + }, + { + "prop": "config", + "desc": "`Toast`全局配置", + "type": "`{ duration: number, position: 'top' | 'center' | 'bottom', closeOnOverlayClick: boolean, lockScroll: boolean }`", + "default": "" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-toast-inner-text-align", + "scssVar": "$toast-inner-text-align", + "default": "center" + }, + { + "cssVar": "--nutui-toast-title-font-size", + "scssVar": "$toast-title-font-size", + "default": "$font-size-md" + }, + { + "cssVar": "--nutui-toast-text-font-size", + "scssVar": "$toast-text-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-toast-font-color", + "scssVar": "$toast-font-color", + "default": "$white" + }, + { + "cssVar": "--nutui-toast-inner-padding", + "scssVar": "$toast-inner-padding", + "default": "scale-px(12px) scale-px(16px" + }, + { + "cssVar": "--nutui-toast-inner-bg-color", + "scssVar": "$toast-inner-bg-color", + "default": "$color-mask" + }, + { + "cssVar": "--nutui-toast-inner-top", + "scssVar": "$toast-inner-top", + "default": "50%" + } + ] + }, + "animate": { + "id": "animate", + "name": "Animate", + "cName": "动画/动效", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "给子元素添加动画效果", + "sort": 27, + "show": true, + "docs": { + "h5": "src/packages/animate/doc.md", + "enUS": "src/packages/animate/doc.en-US.md", + "zhTW": "src/packages/animate/doc.zh-TW.md", + "taro": "src/packages/animate/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/animate/demos/h5/demo1.tsx", + "src/packages/animate/demos/h5/demo2.tsx" + ], + "taro": [ + "src/packages/animate/demos/taro/demo1.tsx", + "src/packages/animate/demos/taro/demo2.tsx" + ] + }, + "spec": { + "base": "src/types/spec/animate/base.ts", + "h5": "src/types/spec/animate/h5.ts", + "taro": "src/types/spec/animate/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Animate", + "subComponent": null, + "rows": [ + { + "prop": "type", + "desc": "动画类型,见下方type值说明", + "type": "`AnimateType`", + "default": "shake" + }, + { + "prop": "action", + "desc": "触发方式,'initial'--初始化执行; 'click'--点击执行", + "type": "`initial` | `click`", + "default": "initial" + }, + { + "prop": "loop", + "desc": "是否循环执行。true-循环执行;false-执行一次", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onClick", + "desc": "点击元素时触发", + "type": "`event: Event`", + "default": "-" + } + ] + }, + { + "name": "AnimateType值说明", + "kind": "other", + "sourceComponent": "Animate", + "subComponent": null, + "rows": [ + { + "prop": "1", + "desc": "shake", + "type": "抖动,建议loop为true", + "default": "" + }, + { + "prop": "2", + "desc": "ripple", + "type": "不循环则是放大后缩小,循环则是心跳", + "default": "" + }, + { + "prop": "3", + "desc": "breath", + "type": "呼吸灯,建议loop为true", + "default": "" + }, + { + "prop": "4", + "desc": "float", + "type": "漂浮,建议loop为true", + "default": "" + }, + { + "prop": "5", + "desc": "slide-right", + "type": "由右向左划入", + "default": "" + }, + { + "prop": "6", + "desc": "slide-left", + "type": "由左向右划入", + "default": "" + }, + { + "prop": "7", + "desc": "slide-top", + "type": "由上至下划入", + "default": "" + }, + { + "prop": "8", + "desc": "slide-bottom", + "type": "由下至上划入", + "default": "" + }, + { + "prop": "9", + "desc": "jump", + "type": "跳跃,建议loop为true", + "default": "" + }, + { + "prop": "10", + "desc": "twinkle", + "type": "水波,建议loop为true", + "default": "" + }, + { + "prop": "11", + "desc": "flicker", + "type": "擦亮按钮,建议loop为true", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "animatingnumbers": { + "id": "animatingnumbers", + "name": "AnimatingNumbers", + "cName": "数字动画", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "带特效的数字", + "sort": 7, + "show": true, + "docs": { + "h5": "src/packages/animatingnumbers/doc.md", + "enUS": "src/packages/animatingnumbers/doc.en-US.md", + "zhTW": "src/packages/animatingnumbers/doc.zh-TW.md", + "taro": "src/packages/animatingnumbers/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/animatingnumbers/demos/h5/demo1.tsx", + "src/packages/animatingnumbers/demos/h5/demo2.tsx" + ], + "taro": [ + "src/packages/animatingnumbers/demos/taro/demo1.tsx", + "src/packages/animatingnumbers/demos/taro/demo2.tsx" + ] + }, + "spec": { + "base": "src/types/spec/animatingnumbers/base.ts", + "h5": "src/types/spec/animatingnumbers/h5.ts", + "taro": "src/types/spec/animatingnumbers/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "AnimatingNumbers", + "subComponent": null, + "rows": [ + { + "prop": "length", + "desc": "设置最大展示长度,数值位数不够,数值前面按位补 0", + "type": "`number`", + "default": "0" + }, + { + "prop": "value", + "desc": "结束值,必填项", + "type": "`string`", + "default": "number" + }, + { + "prop": "delay", + "desc": "等待动画执行时间,单位 ms", + "type": "`number`", + "default": "300" + }, + { + "prop": "duration", + "desc": "动画执行时间,单位 s", + "type": "`number`", + "default": "1" + }, + { + "prop": "thousands", + "desc": "是否有千位分隔符", + "type": "`boolean`", + "default": "false" + } + ] + } + ] + }, + "tokens": [] + }, + "audio": { + "id": "audio", + "name": "Audio", + "cName": "音频播放器", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": false, + "v15": true, + "v16": false, + "author": "libin", + "type": "component", + "desc": "原生audio实现的音频播放器", + "sort": 21, + "show": true, + "docs": { + "h5": "src/packages/audio/doc.md", + "enUS": "src/packages/audio/doc.en-US.md", + "zhTW": "src/packages/audio/doc.zh-TW.md", + "taro": "src/packages/audio/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/audio/demos/h5/demo1.tsx", + "src/packages/audio/demos/h5/demo2.tsx", + "src/packages/audio/demos/h5/demo3.tsx", + "src/packages/audio/demos/h5/demo4.tsx" + ], + "taro": [] + }, + "spec": { + "base": "src/types/spec/audio/base.ts", + "h5": "src/types/spec/audio/h5.ts", + "taro": "src/types/spec/audio/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Audio", + "subComponent": null, + "rows": [ + { + "prop": "src", + "desc": "语音资源链接", + "type": "`string`", + "default": "-" + }, + { + "prop": "muted", + "desc": "是否静音", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "autoPlay", + "desc": "是否自动播放", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "loop", + "desc": "是否循环播放", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "preload", + "desc": "是否预加载语音", + "type": "`none` | `metadata` | `auto`", + "default": "auto" + }, + { + "prop": "type", + "desc": "展示形式,可选值:controls 控制面板 progress 进度条 icon 图标 none 自定义", + "type": "`string`", + "default": "progress" + }, + { + "prop": "onBack", + "desc": "语音快退回调,type = progress 时生效", + "type": "`(event:HTMLAudioElement) => void`", + "default": "-" + }, + { + "prop": "onForward", + "desc": "语音快进回调,type = progress 时生效", + "type": "`(event:HTMLAudioElement) => void`", + "default": "-" + }, + { + "prop": "onPause", + "desc": "暂停回调", + "type": "`(event:HTMLAudioElement) => void`", + "default": "-" + }, + { + "prop": "onEnd", + "desc": "语音播放完成,loop = false 时生效", + "type": "`(event:HTMLAudioElement) => void`", + "default": "-" + }, + { + "prop": "onMute", + "desc": "静音回调", + "type": "`(event:HTMLAudioElement) => void`", + "default": "-" + }, + { + "prop": "onCanPlay", + "desc": "可以播放媒体时触发", + "type": "`(event:HTMLAudioElement) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "avatar": { + "id": "avatar", + "name": "Avatar", + "cName": "头像", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "junjun", + "type": "component", + "desc": "用来代表用户或事物,支持图片、图标或字符展示。", + "sort": 2, + "show": true, + "docs": { + "h5": "src/packages/avatar/doc.md", + "enUS": "src/packages/avatar/doc.en-US.md", + "zhTW": "src/packages/avatar/doc.zh-TW.md", + "taro": "src/packages/avatar/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/avatar/demos/h5/demo1.tsx", + "src/packages/avatar/demos/h5/demo2.tsx", + "src/packages/avatar/demos/h5/demo3.tsx", + "src/packages/avatar/demos/h5/demo4.tsx", + "src/packages/avatar/demos/h5/demo5.tsx", + "src/packages/avatar/demos/h5/demo6.tsx", + "src/packages/avatar/demos/h5/demo7.tsx", + "src/packages/avatar/demos/h5/demo8.tsx", + "src/packages/avatar/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/avatar/demos/taro/demo1.tsx", + "src/packages/avatar/demos/taro/demo2.tsx", + "src/packages/avatar/demos/taro/demo3.tsx", + "src/packages/avatar/demos/taro/demo4.tsx", + "src/packages/avatar/demos/taro/demo5.tsx", + "src/packages/avatar/demos/taro/demo6.tsx", + "src/packages/avatar/demos/taro/demo7.tsx", + "src/packages/avatar/demos/taro/demo8.tsx", + "src/packages/avatar/demos/taro/demo9.tsx", + "src/packages/avatar/demos/taro/demo10.tsx" + ] + }, + "spec": { + "base": "src/types/spec/avatar/base.ts", + "h5": "src/types/spec/avatar/h5.ts", + "taro": "src/types/spec/avatar/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Avatar", + "subComponent": null, + "rows": [ + { + "prop": "size", + "desc": "设置头像的大小", + "type": "`large` | `normal` | `small` | `numbers`", + "default": "-" + }, + { + "prop": "shape", + "desc": "设置头像的形状", + "type": "`round` | `square`", + "default": "round" + }, + { + "prop": "background", + "desc": "设置 Icon、字符类型头像的背景色", + "type": "`string`", + "default": "#eee" + }, + { + "prop": "color", + "desc": "设置 Icon、字符类型头像的颜色", + "type": "`string`", + "default": "#666" + }, + { + "prop": "fit", + "desc": "图片填充模式", + "type": "`contain` | `cover` | `fill` | `none` | `scale-down` | `cover`", + "default": "-" + }, + { + "prop": "src", + "desc": "设置图片类型头像的地址", + "type": "`string`", + "default": "-" + }, + { + "prop": "alt", + "desc": "设置图片类型头像无法显示时的替代文本", + "type": "`string`", + "default": "-" + }, + { + "prop": "icon", + "desc": "设置 Icon 类型头像图标", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "onClick", + "desc": "点击头像触发事件", + "type": "`(e: MouseEvent) => void`", + "default": "-" + }, + { + "prop": "onError", + "desc": "图片加载失败的事件", + "type": "`() => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-avatar-square", + "scssVar": "$avatar-square", + "default": "scale-px(5px" + }, + { + "cssVar": "--nutui-avatar-large-width", + "scssVar": "$avatar-large-width", + "default": "scale-px(60px" + }, + { + "cssVar": "--nutui-avatar-large-height", + "scssVar": "$avatar-large-height", + "default": "scale-px(60px" + }, + { + "cssVar": "--nutui-avatar-small-width", + "scssVar": "$avatar-small-width", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-avatar-small-height", + "scssVar": "$avatar-small-height", + "default": "scale-px(32px" + }, + { + "cssVar": "--nutui-avatar-normal-width", + "scssVar": "$avatar-normal-width", + "default": "scale-px(40px" + }, + { + "cssVar": "--nutui-avatar-normal-height", + "scssVar": "$avatar-normal-height", + "default": "scale-px(40px" + } + ] + }, + "avatargroup": { + "id": "avatargroup", + "name": "AvatarGroup", + "cName": "头像组合子组件", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "头像组合子组件", + "sort": 18, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "AvatarGroup", + "subComponent": null, + "rows": [ + { + "prop": "max", + "desc": "显示的最大头像个数", + "type": "`string` | `number`", + "default": "-" + }, + { + "prop": "maxContent", + "desc": "头像数量超出时,会出现一个头像折叠元素。该元素内容可为...、more、+N。", + "type": "`string`", + "default": "-" + }, + { + "prop": "size", + "desc": "设置头像的大小,可选值为:large、normal、small,支持直接输入数字", + "type": "`large` | `normal` | `small`", + "default": "-" + }, + { + "prop": "shape", + "desc": "设置头像的形状", + "type": "`string` | `round`", + "default": "-" + }, + { + "prop": "maxBackground", + "desc": "设置 Icon、字符类型头像的背景色", + "type": "`string`", + "default": "#eee" + }, + { + "prop": "maxColor", + "desc": "设置 Icon、字符类型头像的颜色", + "type": "`string`", + "default": "#666" + }, + { + "prop": "gap", + "desc": "设置头像之间的间距", + "type": "`string`", + "default": "-8" + }, + { + "prop": "level", + "desc": "头像之间的层级关系,可选值为:left、right", + "type": "`left` | `right`", + "default": "left" + } + ] + } + ] + }, + "tokens": [] + }, + "circleprogress": { + "id": "circleprogress", + "name": "CircleProgress", + "cName": "环形进度条", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "展示操作或任务的当前进度。", + "sort": 7, + "show": true, + "docs": { + "h5": "src/packages/circleprogress/doc.md", + "enUS": "src/packages/circleprogress/doc.en-US.md", + "zhTW": "src/packages/circleprogress/doc.zh-TW.md", + "taro": "src/packages/circleprogress/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/circleprogress/demos/h5/demo1.tsx", + "src/packages/circleprogress/demos/h5/demo2.tsx", + "src/packages/circleprogress/demos/h5/demo3.tsx", + "src/packages/circleprogress/demos/h5/demo4.tsx", + "src/packages/circleprogress/demos/h5/demo5.tsx", + "src/packages/circleprogress/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/circleprogress/demos/taro/demo1.tsx", + "src/packages/circleprogress/demos/taro/demo2.tsx", + "src/packages/circleprogress/demos/taro/demo3.tsx", + "src/packages/circleprogress/demos/taro/demo4.tsx", + "src/packages/circleprogress/demos/taro/demo5.tsx", + "src/packages/circleprogress/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/circleprogress/base.ts", + "h5": "src/types/spec/circleprogress/h5.ts", + "taro": "src/types/spec/circleprogress/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "CircleProgress", + "subComponent": null, + "rows": [ + { + "prop": "percent", + "desc": "百分比", + "type": "`number` | `string`", + "default": "必传项,无默认值" + }, + { + "prop": "strokeWidth", + "desc": "圆弧的宽度", + "type": "`number` | `string`", + "default": "5" + }, + { + "prop": "radius", + "desc": "半径", + "type": "`number` | `string`", + "default": "50" + }, + { + "prop": "color", + "desc": "圆环进度条颜色,传入对象格式可以定义渐变色", + "type": "`object | string`", + "default": "-" + }, + { + "prop": "background", + "desc": "圆环轨道颜色", + "type": "`string`", + "default": "#d9d9d9" + }, + { + "prop": "strokeLinecap", + "desc": "圆环进度条端点形状", + "type": "`butt` | `round` | `square` | `inherit`", + "default": "round" + }, + { + "prop": "clockwise", + "desc": "是否顺时针展示", + "type": "`boolean`", + "default": "true" + } + ] + } + ] + }, + "tokens": [] + }, + "collapse": { + "id": "collapse", + "name": "Collapse", + "cName": "折叠面板", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "折叠面板,可进行内容折叠展开操作,可以多面板配合使用。", + "sort": 2, + "show": true, + "docs": { + "h5": "src/packages/collapse/doc.md", + "enUS": "src/packages/collapse/doc.en-US.md", + "zhTW": "src/packages/collapse/doc.zh-TW.md", + "taro": "src/packages/collapse/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/collapse/demos/h5/demo1.tsx", + "src/packages/collapse/demos/h5/demo2.tsx", + "src/packages/collapse/demos/h5/demo3.tsx", + "src/packages/collapse/demos/h5/demo4.tsx", + "src/packages/collapse/demos/h5/demo5.tsx", + "src/packages/collapse/demos/h5/demo6.tsx", + "src/packages/collapse/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/collapse/demos/taro/demo1.tsx", + "src/packages/collapse/demos/taro/demo2.tsx", + "src/packages/collapse/demos/taro/demo3.tsx", + "src/packages/collapse/demos/taro/demo4.tsx", + "src/packages/collapse/demos/taro/demo5.tsx", + "src/packages/collapse/demos/taro/demo6.tsx", + "src/packages/collapse/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/collapse/base.ts", + "h5": "src/types/spec/collapse/h5.ts", + "taro": "src/types/spec/collapse/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Collapse", + "subComponent": null, + "rows": [ + { + "prop": "defaultActiveName", + "desc": "默认展开面板的 name,非受控", + "type": "`Array` | `string`", + "default": "-" + }, + { + "prop": "activeName", + "desc": "当前展开面板的 name,受控", + "type": "`Array` | `string`", + "default": "-" + }, + { + "prop": "accordion", + "desc": "是否开启手风琴模式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "rotate", + "desc": "点击折叠和展开的旋转角度,在自定义图标模式下生效", + "type": "`string` | `number`", + "default": "180" + }, + { + "prop": "expandIcon", + "desc": "自定义展开图标", + "type": "`ReactNode`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-collapse-item-padding", + "scssVar": "$collapse-item-padding", + "default": "scale-px(13px) scale-px(26px" + }, + { + "cssVar": "--nutui-collapse-item-color", + "scssVar": "$collapse-item-color", + "default": "$color-title" + } + ] + }, + "collapseitem": { + "id": "collapseitem", + "name": "CollapseItem", + "cName": "折叠面板子组件", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "oasis", + "type": "component", + "desc": "折叠面板的子组件", + "sort": 13, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Collapse.Item", + "subComponent": null, + "rows": [ + { + "prop": "name", + "desc": "唯一标识符,必填", + "type": "`string`", + "default": "-" + }, + { + "prop": "title", + "desc": "标题栏左侧内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "disabled", + "desc": "标题栏是否禁用", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "extra", + "desc": "标题栏副标题", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "rotate", + "desc": "点击折叠和展开的旋转角度,在自定义图标模式下生效", + "type": "`string` | `number`", + "default": "180" + }, + { + "prop": "expandIcon", + "desc": "自定义展开图标", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "切换面板时触发", + "type": "`(activeName, name, status) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "countdown": { + "id": "countdown", + "name": "CountDown", + "cName": "倒计时", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "用于实时展示倒计时数值,支持毫秒精度。", + "sort": 17, + "show": true, + "docs": { + "h5": "src/packages/countdown/doc.md", + "enUS": "src/packages/countdown/doc.en-US.md", + "zhTW": "src/packages/countdown/doc.zh-TW.md", + "taro": "src/packages/countdown/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/countdown/demos/h5/demo1.tsx", + "src/packages/countdown/demos/h5/demo2.tsx", + "src/packages/countdown/demos/h5/demo3.tsx", + "src/packages/countdown/demos/h5/demo4.tsx", + "src/packages/countdown/demos/h5/demo5.tsx", + "src/packages/countdown/demos/h5/demo6.tsx", + "src/packages/countdown/demos/h5/demo7.tsx", + "src/packages/countdown/demos/h5/demo8.tsx", + "src/packages/countdown/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/countdown/demos/taro/demo1.tsx", + "src/packages/countdown/demos/taro/demo2.tsx", + "src/packages/countdown/demos/taro/demo3.tsx", + "src/packages/countdown/demos/taro/demo4.tsx", + "src/packages/countdown/demos/taro/demo5.tsx", + "src/packages/countdown/demos/taro/demo6.tsx", + "src/packages/countdown/demos/taro/demo7.tsx", + "src/packages/countdown/demos/taro/demo8.tsx", + "src/packages/countdown/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/countdown/base.ts", + "h5": "src/types/spec/countdown/h5.ts", + "taro": "src/types/spec/countdown/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "CountDown", + "subComponent": null, + "rows": [ + { + "prop": "startTime", + "desc": "开始时间", + "type": "`number`", + "default": "Date.now()" + }, + { + "prop": "endTime", + "desc": "结束时间", + "type": "`number`", + "default": "Date.now()" + }, + { + "prop": "remainingTime", + "desc": "剩余时间,单位是毫秒", + "type": "`number`", + "default": "0" + }, + { + "prop": "paused", + "desc": "是否暂停", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "format", + "desc": "时间格式", + "type": "`string`", + "default": "HH:mm:ss" + }, + { + "prop": "millisecond", + "desc": "是否开启毫秒级渲染", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "autoStart", + "desc": "是否自动开始倒计时", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "time", + "desc": "倒计时显示时间,单位是毫秒。autoStart 为 false 时生效", + "type": "`number`", + "default": "0" + }, + { + "prop": "destroy", + "desc": "销毁实例", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onEnd", + "desc": "倒计时结束时回调函数", + "type": "`无`", + "default": "-" + }, + { + "prop": "onPaused", + "desc": "暂停倒计时回调函数", + "type": "`onPaused: (restTime: number) => void`", + "default": "-" + }, + { + "prop": "onRestart", + "desc": "重新开始倒计时回调函数", + "type": "`onRestart: (restTime: number) => void`", + "default": "-" + }, + { + "prop": "onUpdate", + "desc": "自定义展示内容时,实时更新倒计时数据回调函数", + "type": "`onUpdate: (restTime: any) => void`", + "default": "-" + } + ] + }, + { + "name": "format 格式", + "kind": "other", + "sourceComponent": "CountDown", + "subComponent": null, + "rows": [ + { + "prop": "DD", + "desc": "天数", + "type": "", + "default": "" + }, + { + "prop": "HH", + "desc": "小时", + "type": "", + "default": "" + }, + { + "prop": "mm", + "desc": "分钟", + "type": "", + "default": "" + }, + { + "prop": "ss", + "desc": "秒数", + "type": "", + "default": "" + }, + { + "prop": "S", + "desc": "毫秒(1位)", + "type": "", + "default": "" + }, + { + "prop": "SS", + "desc": "毫秒(2位)", + "type": "", + "default": "" + }, + { + "prop": "SSS", + "desc": "毫秒(3位)", + "type": "", + "default": "" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "CountDown", + "subComponent": null, + "rows": [ + { + "prop": "start", + "desc": "开始倒计时", + "type": "`() => void`", + "default": "" + }, + { + "prop": "pause", + "desc": "暂停倒计时", + "type": "`() => void`", + "default": "" + }, + { + "prop": "reset", + "desc": "重设倒计时,若 auto-start 为 true,重设后会自动开始倒计时", + "type": "`() => void`", + "default": "" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-countdown-display", + "scssVar": "$countdown-display", + "default": "flex" + }, + { + "cssVar": "--nutui-countdown-color", + "scssVar": "$countdown-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-countdown-font-size", + "scssVar": "$countdown-font-size", + "default": "$font-size-xs" + }, + { + "cssVar": "--nutui-countdown-height", + "scssVar": "$countdown-height", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-countdown-width", + "scssVar": "$countdown-width", + "default": "scale-px(16px" + }, + { + "cssVar": "--nutui-countdown-number-padding", + "scssVar": "$countdown-number-padding", + "default": "0 0" + }, + { + "cssVar": "--nutui-countdown-number-margin", + "scssVar": "$countdown-number-margin", + "default": "0 scale-px(1px" + } + ] + }, + "ellipsis": { + "id": "ellipsis", + "name": "Ellipsis", + "cName": "文本省略", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "vickyYE", + "type": "component", + "desc": "展示空间不足时,隐去部分内容并用“…”替代。", + "sort": 27, + "show": true, + "docs": { + "h5": "src/packages/ellipsis/doc.md", + "enUS": "src/packages/ellipsis/doc.en-US.md", + "zhTW": "src/packages/ellipsis/doc.zh-TW.md", + "taro": "src/packages/ellipsis/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/ellipsis/demos/h5/demo1.tsx", + "src/packages/ellipsis/demos/h5/demo2.tsx", + "src/packages/ellipsis/demos/h5/demo3.tsx", + "src/packages/ellipsis/demos/h5/demo4.tsx", + "src/packages/ellipsis/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/ellipsis/demos/taro/demo1.tsx", + "src/packages/ellipsis/demos/taro/demo2.tsx", + "src/packages/ellipsis/demos/taro/demo3.tsx", + "src/packages/ellipsis/demos/taro/demo4.tsx", + "src/packages/ellipsis/demos/taro/demo5.tsx", + "src/packages/ellipsis/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/ellipsis/base.ts", + "h5": "src/types/spec/ellipsis/h5.ts", + "taro": "src/types/spec/ellipsis/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Ellipsis", + "subComponent": null, + "rows": [ + { + "prop": "content", + "desc": "文本内容", + "type": "`string`", + "default": "-" + }, + { + "prop": "direction", + "desc": "省略位置", + "type": "`start` | `end` | `middle`", + "default": "end" + }, + { + "prop": "rows", + "desc": "展示几行", + "type": "`number`", + "default": "1" + }, + { + "prop": "expandText", + "desc": "展开操作的文案", + "type": "`string`", + "default": "-" + }, + { + "prop": "collapseText", + "desc": "收起操作的文案", + "type": "`string`", + "default": "-" + }, + { + "prop": "symbol", + "desc": "省略的符号", + "type": "`string`", + "default": "..." + }, + { + "prop": "lineHeight", + "desc": "容器的行高", + "type": "`string` | `number`", + "default": "20" + }, + { + "prop": "onClick", + "desc": "文本点击时触发", + "type": "`() => void`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "点击展开收起时触发", + "type": "`(type: string) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "imagepreview": { + "id": "imagepreview", + "name": "ImagePreview", + "cName": "图片预览", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "yangjinjun3", + "type": "component", + "desc": "图片预览", + "sort": 23, + "show": true, + "docs": { + "h5": "src/packages/imagepreview/doc.md", + "enUS": "src/packages/imagepreview/doc.en-US.md", + "zhTW": "src/packages/imagepreview/doc.zh-TW.md", + "taro": "src/packages/imagepreview/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/imagepreview/demos/h5/demo1.tsx", + "src/packages/imagepreview/demos/h5/demo2.tsx", + "src/packages/imagepreview/demos/h5/demo3.tsx", + "src/packages/imagepreview/demos/h5/demo4.tsx", + "src/packages/imagepreview/demos/h5/demo5.tsx", + "src/packages/imagepreview/demos/h5/demo6.tsx", + "src/packages/imagepreview/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/imagepreview/demos/taro/demo1.tsx", + "src/packages/imagepreview/demos/taro/demo2.tsx", + "src/packages/imagepreview/demos/taro/demo3.tsx", + "src/packages/imagepreview/demos/taro/demo4.tsx", + "src/packages/imagepreview/demos/taro/demo5.tsx", + "src/packages/imagepreview/demos/taro/demo6.tsx", + "src/packages/imagepreview/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/imagepreview/base.ts", + "h5": "src/types/spec/imagepreview/h5.ts", + "taro": "src/types/spec/imagepreview/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "ImagePreview", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否展示预览图片", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "videos", + "desc": "预览的视频数组(视频自动放到图片之前)", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "images", + "desc": "预览图片数组", + "type": "`{ src: string }[]`", + "default": "[]" + }, + { + "prop": "autoPlay", + "desc": "自动轮播时长,0表示不会自动轮播", + "type": "`number` | `string`", + "default": "3000" + }, + { + "prop": "defaultValue", + "desc": "初始页码", + "type": "`number`", + "default": "1" + }, + { + "prop": "value", + "desc": "页码,受控", + "type": "`number`", + "default": "1" + }, + { + "prop": "indicator", + "desc": "分页指示器是否展示", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "indicatorColor", + "desc": "分页指示器选中的颜色", + "type": "`string`", + "default": "#fff" + }, + { + "prop": "closeOnContentClick", + "desc": "点击图片可以退出预览", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onClose", + "desc": "点击遮罩关闭图片预览时触发", + "type": "`() => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "indicator": { + "id": "indicator", + "name": "Indicator", + "cName": "指示器", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": true, + "author": "liukun", + "type": "component", + "desc": "显示一个任务或流程的进度,常用于开通流程。", + "sort": 16, + "show": true, + "docs": { + "h5": "src/packages/indicator/doc.md", + "enUS": "src/packages/indicator/doc.en-US.md", + "zhTW": "src/packages/indicator/doc.zh-TW.md", + "taro": "src/packages/indicator/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/indicator/demos/h5/demo1.tsx", + "src/packages/indicator/demos/h5/demo2.tsx", + "src/packages/indicator/demos/h5/demo3.tsx", + "src/packages/indicator/demos/h5/demo4.tsx", + "src/packages/indicator/demos/h5/demo5.tsx", + "src/packages/indicator/demos/h5/demo6.tsx", + "src/packages/indicator/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/indicator/demos/taro/demo1.tsx", + "src/packages/indicator/demos/taro/demo2.tsx", + "src/packages/indicator/demos/taro/demo3.tsx", + "src/packages/indicator/demos/taro/demo4.tsx", + "src/packages/indicator/demos/taro/demo5.tsx", + "src/packages/indicator/demos/taro/demo6.tsx", + "src/packages/indicator/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/indicator/base.ts", + "h5": "src/types/spec/indicator/h5.ts", + "taro": "src/types/spec/indicator/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Indicator", + "subComponent": null, + "rows": [ + { + "prop": "current", + "desc": "当前步骤", + "type": "`number`", + "default": "0" + }, + { + "prop": "total", + "desc": "步骤长度", + "type": "`number`", + "default": "3" + }, + { + "prop": "direction", + "desc": "展示方向,默认为水平方向", + "type": "`horizontal` | `vertical`", + "default": "horizontal" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-indicator-color", + "scssVar": "$indicator-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-indicator-dot-color", + "scssVar": "$indicator-dot-color", + "default": "$color-border" + }, + { + "cssVar": "--nutui-indicator-dot-size", + "scssVar": "$indicator-dot-size", + "default": "scale-px(4px" + }, + { + "cssVar": "--nutui-indicator-dot-margin", + "scssVar": "$indicator-dot-margin", + "default": "$spacing-xxs" + } + ] + }, + "lottie": { + "id": "lottie", + "name": "Lottie", + "cName": "动画/动效", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "给子元素添加动画效果", + "sort": 27, + "show": true, + "docs": { + "h5": "src/packages/lottie/doc.md", + "enUS": "src/packages/lottie/doc.en-US.md", + "zhTW": "src/packages/lottie/doc.zh-TW.md", + "taro": "src/packages/lottie/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/lottie/demos/h5/demo1.tsx", + "src/packages/lottie/demos/h5/demo2.tsx", + "src/packages/lottie/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/lottie/demos/taro/demo1.tsx", + "src/packages/lottie/demos/taro/demo2.tsx", + "src/packages/lottie/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/lottie/base.ts", + "h5": "src/types/spec/lottie/h5.ts", + "taro": "src/types/spec/lottie/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "pagination": { + "id": "pagination", + "name": "Pagination", + "cName": "分页", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "lkjh3214", + "type": "component", + "desc": "当数据量较多时,采用分页的形式分隔长列表。", + "sort": 6, + "show": true, + "docs": { + "h5": "src/packages/pagination/doc.md", + "enUS": "src/packages/pagination/doc.en-US.md", + "zhTW": "src/packages/pagination/doc.zh-TW.md", + "taro": "src/packages/pagination/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/pagination/demos/h5/demo1.tsx", + "src/packages/pagination/demos/h5/demo2.tsx", + "src/packages/pagination/demos/h5/demo3.tsx", + "src/packages/pagination/demos/h5/demo4.tsx", + "src/packages/pagination/demos/h5/demo5.tsx", + "src/packages/pagination/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/pagination/demos/taro/demo1.tsx", + "src/packages/pagination/demos/taro/demo2.tsx", + "src/packages/pagination/demos/taro/demo3.tsx", + "src/packages/pagination/demos/taro/demo4.tsx", + "src/packages/pagination/demos/taro/demo5.tsx", + "src/packages/pagination/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/pagination/base.ts", + "h5": "src/types/spec/pagination/h5.ts", + "taro": "src/types/spec/pagination/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Pagination", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "当前页码,受控值,与 onChange 搭配使用", + "type": "`number`", + "default": "-" + }, + { + "prop": "defaultValue", + "desc": "默认页码,非受控", + "type": "`number`", + "default": "1" + }, + { + "prop": "mode", + "desc": "显示模式", + "type": "`multi` | `simple`", + "default": "multi" + }, + { + "prop": "prev", + "desc": "自定义上一页按钮内容", + "type": "`ReactNode`", + "default": "上一页" + }, + { + "prop": "next", + "desc": "自定义下一页按钮内容", + "type": "`ReactNode`", + "default": "下一页" + }, + { + "prop": "total", + "desc": "总记录数", + "type": "`number`", + "default": "50" + }, + { + "prop": "pageSize", + "desc": "每页记录数", + "type": "`number`", + "default": "10" + }, + { + "prop": "itemSize", + "desc": "显示的页码个数", + "type": "`number`", + "default": "5" + }, + { + "prop": "ellipse", + "desc": "是否显示省略号", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "itemRender", + "desc": "用于自定义页码的结构", + "type": "`(page: {number, text}) => ReactNode`", + "default": "-" + }, + { + "prop": "onChange", + "desc": "页码改变时触发", + "type": "`(value) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-pagination-color", + "scssVar": "$pagination-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-pagination-lite-color", + "scssVar": "$pagination-lite-color", + "default": "$white" + }, + { + "cssVar": "--nutui-pagination-lite-width", + "scssVar": "$pagination-lite-width", + "default": "scale-px(40px" + }, + { + "cssVar": "--nutui-pagination-lite-height", + "scssVar": "$pagination-lite-height", + "default": "scale-px(20px" + } + ] + }, + "price": { + "id": "price", + "name": "Price", + "cName": "价格", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "用来对商品价格数值的小数点前后部分应用不同样式,还支持人民币符号、千位分隔符、设置小数点位数等功能。", + "sort": 4, + "show": true, + "docs": { + "h5": "src/packages/price/doc.md", + "enUS": "src/packages/price/doc.en-US.md", + "zhTW": "src/packages/price/doc.zh-TW.md", + "taro": "src/packages/price/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/price/demos/h5/demo1.tsx", + "src/packages/price/demos/h5/demo2.tsx", + "src/packages/price/demos/h5/demo3.tsx", + "src/packages/price/demos/h5/demo4.tsx", + "src/packages/price/demos/h5/demo5.tsx", + "src/packages/price/demos/h5/demo6.tsx", + "src/packages/price/demos/h5/demo7.tsx", + "src/packages/price/demos/h5/demo8.tsx", + "src/packages/price/demos/h5/demo9.tsx", + "src/packages/price/demos/h5/demo10.tsx", + "src/packages/price/demos/h5/demo11.tsx" + ], + "taro": [ + "src/packages/price/demos/taro/demo1.tsx", + "src/packages/price/demos/taro/demo2.tsx", + "src/packages/price/demos/taro/demo3.tsx", + "src/packages/price/demos/taro/demo4.tsx", + "src/packages/price/demos/taro/demo5.tsx", + "src/packages/price/demos/taro/demo6.tsx", + "src/packages/price/demos/taro/demo7.tsx", + "src/packages/price/demos/taro/demo8.tsx", + "src/packages/price/demos/taro/demo9.tsx", + "src/packages/price/demos/taro/demo10.tsx", + "src/packages/price/demos/taro/demo11.tsx" + ] + }, + "spec": { + "base": "src/types/spec/price/base.ts", + "h5": "src/types/spec/price/h5.ts", + "taro": "src/types/spec/price/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Price", + "subComponent": null, + "rows": [ + { + "prop": "price", + "desc": "价格数量", + "type": "`number`", + "default": "0" + }, + { + "prop": "symbol", + "desc": "符号类型", + "type": "`string`", + "default": "¥" + }, + { + "prop": "digits", + "desc": "小数位位数", + "type": "`number`", + "default": "2" + }, + { + "prop": "thousands", + "desc": "是否按照千分号形式显示", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "position", + "desc": "符号显示在价格前或者后,`before`、`after`", + "type": "`string`", + "default": "before" + }, + { + "prop": "size", + "desc": "价格尺寸,`large`、`normal`、`small`", + "type": "`string`", + "default": "large" + }, + { + "prop": "line", + "desc": "是否划线价", + "type": "`boolean`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-price-color", + "scssVar": "$price-primary-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-price-color", + "scssVar": "$price-color", + "default": "var(--nutui-color-text-help" + }, + { + "cssVar": "--nutui-price-symbol-xlarge-size", + "scssVar": "$price-symbol-xlarge-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-symbol-large-size", + "scssVar": "$price-symbol-large-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-integer-large-size", + "scssVar": "$price-integer-large-size", + "default": "$font-size-xl" + }, + { + "cssVar": "--nutui-price-decimal-large-size", + "scssVar": "$price-decimal-large-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-symbol-normal-size", + "scssVar": "$price-symbol-normal-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-symbol-small-size", + "scssVar": "$price-symbol-small-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-integer-small-size", + "scssVar": "$price-integer-small-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-decimal-small-size", + "scssVar": "$price-decimal-small-size", + "default": "$font-size-s" + } + ] + }, + "progress": { + "id": "progress", + "name": "Progress", + "cName": "进度条", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "ailululu", + "type": "component", + "desc": "用来展示进度", + "sort": 20, + "show": true, + "docs": { + "h5": "src/packages/progress/doc.md", + "enUS": "src/packages/progress/doc.en-US.md", + "zhTW": "src/packages/progress/doc.zh-TW.md", + "taro": "src/packages/progress/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/progress/demos/h5/demo1.tsx", + "src/packages/progress/demos/h5/demo2.tsx", + "src/packages/progress/demos/h5/demo3.tsx", + "src/packages/progress/demos/h5/demo4.tsx", + "src/packages/progress/demos/h5/demo5.tsx", + "src/packages/progress/demos/h5/demo6.tsx", + "src/packages/progress/demos/h5/demo7.tsx", + "src/packages/progress/demos/h5/demo8.tsx", + "src/packages/progress/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/progress/demos/taro/demo1.tsx", + "src/packages/progress/demos/taro/demo2.tsx", + "src/packages/progress/demos/taro/demo3.tsx", + "src/packages/progress/demos/taro/demo4.tsx", + "src/packages/progress/demos/taro/demo5.tsx", + "src/packages/progress/demos/taro/demo6.tsx", + "src/packages/progress/demos/taro/demo7.tsx", + "src/packages/progress/demos/taro/demo8.tsx", + "src/packages/progress/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/progress/base.ts", + "h5": "src/types/spec/progress/h5.ts", + "taro": "src/types/spec/progress/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Progress", + "subComponent": null, + "rows": [ + { + "prop": "percent", + "desc": "百分比", + "type": "`number`", + "default": "0" + }, + { + "prop": "color", + "desc": "进度条线条颜色", + "type": "`string`", + "default": "linear-gradient(135deg, #fa2c19 0%, #fa6419 100%)" + }, + { + "prop": "background", + "desc": "进度条背景颜色", + "type": "`string`", + "default": "#f3f3f3" + }, + { + "prop": "strokeWidth", + "desc": "进度条宽度", + "type": "`string`", + "default": "-" + }, + { + "prop": "showText", + "desc": "是否显示文字内容", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "animated", + "desc": "是否展示动画效果", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "lazy", + "desc": "每次进入可视区展示进度条动画", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "delay", + "desc": "延迟数据加载时长,单位 ms", + "type": "`number`", + "default": "0" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-progress-height", + "scssVar": "$progress-height", + "default": "scale-px(10px" + }, + { + "cssVar": "--nutui-progress-border-radius", + "scssVar": "$progress-border-radius", + "default": "scale-px(12px" + }, + { + "cssVar": "--nutui-progress-text-padding", + "scssVar": "$progress-text-padding", + "default": "0 scale-px(5px" + }, + { + "cssVar": "--nutui-progress-text-font-size", + "scssVar": "$progress-text-font-size", + "default": "scale-font-px(13px" + } + ] + }, + "segmented": { + "id": "segmented", + "name": "Segmented", + "cName": "分段选择器", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "lkjh3214", + "type": "component", + "desc": "用于带页面类型区分的内容型卡片切换,如主图视频、图文切换。", + "sort": 6, + "show": true, + "docs": { + "h5": "src/packages/segmented/doc.md", + "enUS": "src/packages/segmented/doc.en-US.md", + "zhTW": "src/packages/segmented/doc.zh-TW.md", + "taro": "src/packages/segmented/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/segmented/demos/h5/demo1.tsx", + "src/packages/segmented/demos/h5/demo2.tsx", + "src/packages/segmented/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/segmented/demos/taro/demo1.tsx", + "src/packages/segmented/demos/taro/demo2.tsx", + "src/packages/segmented/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/segmented/base.ts", + "h5": "src/types/spec/segmented/h5.ts", + "taro": "src/types/spec/segmented/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-segmented-height", + "scssVar": "$segmented-height", + "default": "scale-px(24px" + }, + { + "cssVar": "--nutui-segmented-padding", + "scssVar": "$segmented-padding", + "default": "$spacing-xxxs" + }, + { + "cssVar": "--nutui-segmented-radius", + "scssVar": "$segmented-border-radius", + "default": "$radius-xs" + }, + { + "cssVar": "--nutui-segmented-height", + "scssVar": "$segmented-item-height", + "default": "scale-px(20px" + }, + { + "cssVar": "--nutui-segmented-item-radius", + "scssVar": "$segmented-item-radius", + "default": "$radius-xs" + } + ] + }, + "step": { + "id": "step", + "name": "Step", + "cName": "步骤条子组件", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": false, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "步骤条子组件", + "sort": 17, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Step", + "subComponent": null, + "rows": [ + { + "prop": "title", + "desc": "流程步骤的标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "description", + "desc": "流程步骤的描述性文字", + "type": "`string`", + "default": "-" + }, + { + "prop": "icon", + "desc": "图标(来自Icon组件的name属性)", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "value", + "desc": "流程步骤的索引", + "type": "`number`", + "default": "0" + }, + { + "prop": "description", + "desc": "流程步骤的描述性文字的html结构", + "type": "`React.ReactNode`", + "default": "-" + }, + { + "prop": "onStepClick", + "desc": "点击步骤的标题或图标时触发", + "type": "`(index: number) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "steps": { + "id": "steps", + "name": "Steps", + "cName": "步骤条", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "拆分展示某项流程的步骤,引导用户按流程完成任务或向用户展示当前状态。", + "sort": 7, + "show": true, + "docs": { + "h5": "src/packages/steps/doc.md", + "enUS": "src/packages/steps/doc.en-US.md", + "zhTW": "src/packages/steps/doc.zh-TW.md", + "taro": "src/packages/steps/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/steps/demos/h5/demo1.tsx", + "src/packages/steps/demos/h5/demo2.tsx", + "src/packages/steps/demos/h5/demo3.tsx", + "src/packages/steps/demos/h5/demo4.tsx", + "src/packages/steps/demos/h5/demo5.tsx", + "src/packages/steps/demos/h5/demo6.tsx", + "src/packages/steps/demos/h5/demo7.tsx", + "src/packages/steps/demos/h5/demo8.tsx", + "src/packages/steps/demos/h5/demo9.tsx" + ], + "taro": [ + "src/packages/steps/demos/taro/demo1.tsx", + "src/packages/steps/demos/taro/demo2.tsx", + "src/packages/steps/demos/taro/demo3.tsx", + "src/packages/steps/demos/taro/demo4.tsx", + "src/packages/steps/demos/taro/demo5.tsx", + "src/packages/steps/demos/taro/demo6.tsx", + "src/packages/steps/demos/taro/demo7.tsx", + "src/packages/steps/demos/taro/demo8.tsx", + "src/packages/steps/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/steps/base.ts", + "h5": "src/types/spec/steps/h5.ts", + "taro": "src/types/spec/steps/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Steps", + "subComponent": null, + "rows": [ + { + "prop": "direction", + "desc": "显示方向", + "type": "`horizontal` | `vertical`", + "default": "horizontal" + }, + { + "prop": "value", + "desc": "当前所在的步骤", + "type": "`number`", + "default": "0" + }, + { + "prop": "dot", + "desc": "点状步骤条", + "type": "`boolean`", + "default": "false" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-steps-background-color", + "scssVar": "$steps-background-color", + "default": "$white" + }, + { + "cssVar": "--nutui-steps-base-head-height", + "scssVar": "$steps-base-head-height", + "default": "scale-px(14px" + }, + { + "cssVar": "--nutui-steps-base-head-border", + "scssVar": "$steps-base-head-border", + "default": "none" + }, + { + "cssVar": "--nutui-steps-base-head-dot-size", + "scssVar": "$steps-base-head-dot-size", + "default": "$icon-size-6" + }, + { + "cssVar": "--nutui-steps-base-line-height", + "scssVar": "$steps-base-line-height", + "default": "scale-px(1px" + }, + { + "cssVar": "--nutui-steps-process-color", + "scssVar": "$steps-process-color", + "default": "$white" + } + ] + }, + "swiper": { + "id": "swiper", + "name": "Swiper", + "cName": "轮播", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "liukun", + "type": "component", + "desc": "轮播组件", + "sort": 14, + "show": true, + "jdtaro": 2, + "docs": { + "h5": "src/packages/swiper/doc.md", + "enUS": "src/packages/swiper/doc.en-US.md", + "zhTW": "src/packages/swiper/doc.zh-TW.md", + "taro": "src/packages/swiper/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/swiper/demos/h5/demo1.tsx", + "src/packages/swiper/demos/h5/demo2.tsx", + "src/packages/swiper/demos/h5/demo3.tsx", + "src/packages/swiper/demos/h5/demo4.tsx", + "src/packages/swiper/demos/h5/demo5.tsx", + "src/packages/swiper/demos/h5/demo6.tsx", + "src/packages/swiper/demos/h5/demo7.tsx", + "src/packages/swiper/demos/h5/demo8.tsx", + "src/packages/swiper/demos/h5/demo9.tsx", + "src/packages/swiper/demos/h5/demo10.tsx" + ], + "taro": [ + "src/packages/swiper/demos/taro/demo1.tsx", + "src/packages/swiper/demos/taro/demo2.tsx", + "src/packages/swiper/demos/taro/demo3.tsx", + "src/packages/swiper/demos/taro/demo4.tsx", + "src/packages/swiper/demos/taro/demo5.tsx", + "src/packages/swiper/demos/taro/demo6.tsx", + "src/packages/swiper/demos/taro/demo7.tsx", + "src/packages/swiper/demos/taro/demo8.tsx", + "src/packages/swiper/demos/taro/demo9.tsx" + ] + }, + "spec": { + "base": "src/types/spec/swiper/base.ts", + "h5": "src/types/spec/swiper/h5.ts", + "taro": "src/types/spec/swiper/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Swiper", + "subComponent": null, + "rows": [ + { + "prop": "width", + "desc": "轮播卡片的宽度", + "type": "`number` | `string`", + "default": "window.innerWidth" + }, + { + "prop": "height", + "desc": "轮播卡片的高度", + "type": "`number` | `string`", + "default": "0" + }, + { + "prop": "direction", + "desc": "轮播方向", + "type": "`horizontal` | `vertical`", + "default": "horizontal" + }, + { + "prop": "indicator", + "desc": "分页指示器是否展示,可传入自定义的 HTML 结构", + "type": "`ReactNode`", + "default": "false" + }, + { + "prop": "loop", + "desc": "是否循环轮播", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "duration", + "desc": "动画时长(单位是ms)", + "type": "`number` | `string`", + "default": "500" + }, + { + "prop": "autoPlay", + "desc": "自动轮播时长,0表示不会自动轮播", + "type": "`number` | `string`", + "default": "0" + }, + { + "prop": "defaultValue", + "desc": "初始化索引值", + "type": "`number` | `string`", + "default": "0" + }, + { + "prop": "touchable", + "desc": "是否可触摸滑动", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "preventDefault", + "desc": "滑动过程中是否禁用默认事件", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "stopPropagation", + "desc": "滑动过程中是否禁止冒泡", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "center", + "desc": "是否居中展示,必须传对应的`width` 和 `height`", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onChange", + "desc": "卡片切换后的回调", + "type": "`(current: number) => void`", + "default": "-" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Swiper", + "subComponent": null, + "rows": [ + { + "prop": "prev", + "desc": "切换到上一页", + "type": "`()=>void`", + "default": "" + }, + { + "prop": "next", + "desc": "切换到下一页", + "type": "`()=>void`", + "default": "" + }, + { + "prop": "to", + "desc": "切换到指定轮播", + "type": "`(index: number)=>void`", + "default": "" + }, + { + "prop": "resize", + "desc": "外层元素大小或组件显示状态变化时,可以调用此方法来触发重绘", + "type": "`()=>void`", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "swiperitem": { + "id": "swiperitem", + "name": "SwiperItem", + "cName": "轮播子组件", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": false, + "v16": false, + "author": "liukun", + "type": "component", + "desc": "轮播子组件", + "sort": 14, + "show": false, + "jdtaro": 2, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "table": { + "id": "table", + "name": "Table", + "cName": "表格", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "yangjinjun3", + "type": "component", + "desc": "表格", + "sort": 21, + "show": true, + "docs": { + "h5": "src/packages/table/doc.md", + "enUS": "src/packages/table/doc.en-US.md", + "zhTW": "src/packages/table/doc.zh-TW.md", + "taro": "src/packages/table/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/table/demos/h5/demo1.tsx", + "src/packages/table/demos/h5/demo2.tsx", + "src/packages/table/demos/h5/demo3.tsx", + "src/packages/table/demos/h5/demo4.tsx", + "src/packages/table/demos/h5/demo5.tsx", + "src/packages/table/demos/h5/demo6.tsx", + "src/packages/table/demos/h5/demo7.tsx", + "src/packages/table/demos/h5/demo8.tsx", + "src/packages/table/demos/h5/demo9.tsx", + "src/packages/table/demos/h5/demo10.tsx", + "src/packages/table/demos/h5/demo11.tsx", + "src/packages/table/demos/h5/demo12.tsx", + "src/packages/table/demos/h5/demo13.tsx", + "src/packages/table/demos/h5/demo14.tsx" + ], + "taro": [ + "src/packages/table/demos/taro/demo1.tsx", + "src/packages/table/demos/taro/demo2.tsx", + "src/packages/table/demos/taro/demo3.tsx", + "src/packages/table/demos/taro/demo4.tsx", + "src/packages/table/demos/taro/demo5.tsx", + "src/packages/table/demos/taro/demo6.tsx", + "src/packages/table/demos/taro/demo7.tsx", + "src/packages/table/demos/taro/demo8.tsx", + "src/packages/table/demos/taro/demo9.tsx", + "src/packages/table/demos/taro/demo10.tsx", + "src/packages/table/demos/taro/demo11.tsx", + "src/packages/table/demos/taro/demo12.tsx", + "src/packages/table/demos/taro/demo13.tsx", + "src/packages/table/demos/taro/demo14.tsx" + ] + }, + "spec": { + "base": "src/types/spec/table/base.ts", + "h5": "src/types/spec/table/h5.ts", + "taro": "src/types/spec/table/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Table", + "subComponent": null, + "rows": [ + { + "prop": "bordered", + "desc": "是否显示边框", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "columns", + "desc": "表头数据", + "type": "`TableColumnProps[]`", + "default": "[]" + }, + { + "prop": "data", + "desc": "表格数据", + "type": "`Object[]`", + "default": "[]" + }, + { + "prop": "summary", + "desc": "是否显示简介", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "striped", + "desc": "条纹是否明暗交替", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "showHeader", + "desc": "是否显示表头", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "noData", + "desc": "自定义无数据", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "onSort", + "desc": "点击排序按钮触发", + "type": "`item: TableColumnProps, data: Array`", + "default": "-" + } + ] + }, + { + "name": "TableColumnProps", + "kind": "other", + "sourceComponent": "Table", + "subComponent": null, + "rows": [ + { + "prop": "key", + "desc": "列的唯一标识", + "type": "`string`", + "default": "-" + }, + { + "prop": "title", + "desc": "表头标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "align", + "desc": "列的对齐方式", + "type": "`left` | `center` | `right`", + "default": "left" + }, + { + "prop": "sorter", + "desc": "排序,可选值有 true,function, default, 其中 default表示点击之后可能会依赖接口, function可以返回具体的排序函数, default表示采用默认的排序算法", + "type": "`boolean` | `Function` | `string`", + "default": "-" + }, + { + "prop": "render", + "desc": "自定义渲染列数据,优先级高", + "type": "`Function(record)`", + "default": "-" + }, + { + "prop": "sorterIcon", + "desc": "排序 icon", + "type": "`ReactNode`", + "default": "" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-table-border-color", + "scssVar": "$table-border-color", + "default": "$color-border" + }, + { + "cssVar": "--nutui-table-cols-padding", + "scssVar": "$table-cols-padding", + "default": "scale-px(10px" + }, + { + "cssVar": "--nutui-table-tr-odd-bg-color", + "scssVar": "$table-tr-odd-bg-color", + "default": "$white" + } + ] + }, + "tag": { + "id": "tag", + "name": "Tag", + "cName": "标签", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "lzz", + "type": "component", + "desc": "用于标记和分类。", + "sort": 4, + "show": true, + "docs": { + "h5": "src/packages/tag/doc.md", + "enUS": "src/packages/tag/doc.en-US.md", + "zhTW": "src/packages/tag/doc.zh-TW.md", + "taro": "src/packages/tag/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/tag/demos/h5/demo1.tsx", + "src/packages/tag/demos/h5/demo2.tsx", + "src/packages/tag/demos/h5/demo3.tsx", + "src/packages/tag/demos/h5/demo4.tsx" + ], + "taro": [ + "src/packages/tag/demos/taro/demo1.tsx", + "src/packages/tag/demos/taro/demo2.tsx", + "src/packages/tag/demos/taro/demo3.tsx", + "src/packages/tag/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/tag/base.ts", + "h5": "src/types/spec/tag/h5.ts", + "taro": "src/types/spec/tag/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Tag", + "subComponent": null, + "rows": [ + { + "prop": "type", + "desc": "标签类型", + "type": "`primary` | `success` | `danger` | `warning`", + "default": "default" + }, + { + "prop": "background", + "desc": "标签颜色", + "type": "`string`", + "default": "-" + }, + { + "prop": "color", + "desc": "文本颜色,优先级高于color属性", + "type": "`string`", + "default": "white" + }, + { + "prop": "plain", + "desc": "是否为空心样式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "round", + "desc": "是否为圆角样式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "mark", + "desc": "是否为标记样式", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "closeable", + "desc": "是否为可关闭标签", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "closeIcon", + "desc": "关闭按钮", + "type": "`ReactNode`", + "default": "null" + }, + { + "prop": "onClick", + "desc": "点击事件", + "type": "`(e: MouseEvent) => void`", + "default": "-" + }, + { + "prop": "onClose", + "desc": "关闭事件", + "type": "`(e?: any) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-tag-padding", + "scssVar": "$tag-padding", + "default": "0px scale-px(2px" + }, + { + "cssVar": "--nutui-tag-font-size", + "scssVar": "$tag-font-size", + "default": "$font-size-xxs" + }, + { + "cssVar": "--nutui-tag-border-radius", + "scssVar": "$tag-border-radius", + "default": "scale-px(2px" + }, + { + "cssVar": "--nutui-tag-height", + "scssVar": "$tag-height", + "default": "scale-px(14px" + }, + { + "cssVar": "--nutui-tag-color", + "scssVar": "$tag-color", + "default": "#ffffff" + }, + { + "cssVar": "--nutui-tag-border-width", + "scssVar": "$tag-border-width", + "default": "scale-px(1px" + }, + { + "cssVar": "--nutui-tag-background-color", + "scssVar": "$tag-background-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-tag-round-border-radius", + "scssVar": "$tag-round-border-radius", + "default": "scale-px(8px" + } + ] + }, + "tour": { + "id": "tour", + "name": "Tour", + "cName": "引导", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "用于引导用户了解产品功能的气泡组件。自 4.0 版本开始提供该组件。", + "sort": 24, + "show": true, + "docs": { + "h5": "src/packages/tour/doc.md", + "enUS": "src/packages/tour/doc.en-US.md", + "zhTW": "src/packages/tour/doc.zh-TW.md", + "taro": "src/packages/tour/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/tour/demos/h5/demo1.tsx", + "src/packages/tour/demos/h5/demo2.tsx", + "src/packages/tour/demos/h5/demo3.tsx", + "src/packages/tour/demos/h5/demo4.tsx", + "src/packages/tour/demos/h5/demo5.tsx" + ], + "taro": [ + "src/packages/tour/demos/taro/demo1.tsx", + "src/packages/tour/demos/taro/demo2.tsx", + "src/packages/tour/demos/taro/demo3.tsx", + "src/packages/tour/demos/taro/demo4.tsx", + "src/packages/tour/demos/taro/demo5.tsx" + ] + }, + "spec": { + "base": "src/types/spec/tour/base.ts", + "h5": "src/types/spec/tour/h5.ts", + "taro": "src/types/spec/tour/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-tour-mask-border-radius", + "scssVar": "$tour-mask-border-radius", + "default": "scale-px(10px" + }, + { + "cssVar": "--nutui-tour-content-min-width", + "scssVar": "$tour-content-min-width", + "default": "scale-px(200px" + }, + { + "cssVar": "--nutui-tour-content-padding", + "scssVar": "$tour-content-padding", + "default": "scale-px(10px) scale-px(12px" + } + ] + }, + "video": { + "id": "video", + "name": "Video", + "cName": "视频播放器", + "version": "3.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "原生video实现的视频播放器", + "sort": 20, + "show": true, + "docs": { + "h5": "src/packages/video/doc.md", + "enUS": "src/packages/video/doc.en-US.md", + "zhTW": "src/packages/video/doc.zh-TW.md", + "taro": "src/packages/video/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/video/demos/h5/demo1.tsx", + "src/packages/video/demos/h5/demo2.tsx", + "src/packages/video/demos/h5/demo3.tsx", + "src/packages/video/demos/h5/demo4.tsx", + "src/packages/video/demos/h5/demo5.tsx", + "src/packages/video/demos/h5/demo6.tsx", + "src/packages/video/demos/h5/demo7.tsx" + ], + "taro": [ + "src/packages/video/demos/taro/demo1.tsx", + "src/packages/video/demos/taro/demo2.tsx", + "src/packages/video/demos/taro/demo3.tsx", + "src/packages/video/demos/taro/demo4.tsx", + "src/packages/video/demos/taro/demo5.tsx", + "src/packages/video/demos/taro/demo6.tsx", + "src/packages/video/demos/taro/demo7.tsx" + ] + }, + "spec": { + "base": "src/types/spec/video/base.ts", + "h5": "src/types/spec/video/h5.ts", + "taro": "src/types/spec/video/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Video", + "subComponent": null, + "rows": [ + { + "prop": "source", + "desc": "视频地址和类型设置", + "type": "`object`", + "default": "{type: {}, src: ''}" + }, + { + "prop": "options", + "desc": "控制视频播放属性", + "type": "`object`", + "default": "-" + }, + { + "prop": "options.autoplay", + "desc": "是否自动播放", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "options.poster", + "desc": "海报设置", + "type": "`string`", + "default": "-" + }, + { + "prop": "options.loop", + "desc": "是否循环播放", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "options.controls", + "desc": "是否展示操作栏", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "options.muted", + "desc": "是否静音", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "options.playsinline", + "desc": "是否设置为行内播放元素(解决安卓兼容问题)", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "onPlay", + "desc": "播放", + "type": "`(element: HTMLVideoElement) => void`", + "default": "-" + }, + { + "prop": "onPause", + "desc": "暂停", + "type": "`(element: HTMLVideoElement) => void`", + "default": "-" + }, + { + "prop": "onPlayEnd", + "desc": "播放完成回调", + "type": "`(element: HTMLVideoElement) => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "virtuallist": { + "id": "virtuallist", + "name": "VirtualList", + "cName": "虚拟列表", + "version": "2.0.0", + "category": { + "name": "展示组件", + "enName": "exhibition" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "hx", + "type": "component", + "desc": "长列表渲染", + "sort": 20, + "show": true, + "docs": { + "h5": "src/packages/virtuallist/doc.md", + "enUS": "src/packages/virtuallist/doc.en-US.md", + "zhTW": "src/packages/virtuallist/doc.zh-TW.md", + "taro": "src/packages/virtuallist/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/virtuallist/demos/h5/demo1.tsx", + "src/packages/virtuallist/demos/h5/demo2.tsx", + "src/packages/virtuallist/demos/h5/demo3.tsx", + "src/packages/virtuallist/demos/h5/demo4.tsx" + ], + "taro": [ + "src/packages/virtuallist/demos/taro/demo1.tsx", + "src/packages/virtuallist/demos/taro/demo2.tsx" + ] + }, + "spec": { + "base": "src/types/spec/virtuallist/base.ts", + "h5": "src/types/spec/virtuallist/h5.ts", + "taro": "src/types/spec/virtuallist/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "VirtualList", + "subComponent": null, + "rows": [ + { + "prop": "list", + "desc": "获取数据", + "type": "`Array`", + "default": "-" + }, + { + "prop": "containerHeight", + "desc": "容器高度", + "type": "`number`", + "default": "获取元素的 offsetWidth 或 offsetHeight,需要 css 给出" + }, + { + "prop": "ItemRender", + "desc": "virtual 列表父节点渲染的函数", + "type": "`React.FC`", + "default": "-" + }, + { + "prop": "itemHeight", + "desc": "item 高度,如果不定高,则为首屏单个最大 height", + "type": "`number`", + "default": "66" + }, + { + "prop": "itemEqual", + "desc": "item 高度是否一致", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "overscan", + "desc": "除了视窗里面默认的元素, 还需要额外渲染的 item 个数", + "type": "`number`", + "default": "2" + }, + { + "prop": "key", + "desc": "用于指定 list 数据每一项的唯一 key 的字段名,默认取下标", + "type": "`string`", + "default": "-" + }, + { + "prop": "direction", + "desc": "`vertical`、`horizontal`", + "type": "`string`", + "default": "vertical" + }, + { + "prop": "onScroll", + "desc": "滑动到底(右)的事件,可以实现无限滚动", + "type": "`() => void`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + }, + "quickenter": { + "id": "quickenter", + "name": "QuickEnter", + "cName": "快捷入口", + "version": "2.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "hanyuxinting", + "type": "component", + "desc": "快捷入口", + "sort": 26, + "show": true, + "docs": { + "h5": "src/packages/quickenter/doc.md", + "enUS": "src/packages/quickenter/doc.en-US.md", + "zhTW": "src/packages/quickenter/doc.zh-TW.md", + "taro": "src/packages/quickenter/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/quickenter/demos/h5/demo1.tsx", + "src/packages/quickenter/demos/h5/demo2.tsx", + "src/packages/quickenter/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/quickenter/demos/taro/demo1.tsx", + "src/packages/quickenter/demos/taro/demo2.tsx", + "src/packages/quickenter/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/quickenter/base.ts", + "h5": "src/types/spec/quickenter/h5.ts", + "taro": "src/types/spec/quickenter/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [ + { + "cssVar": "--nutui-quickenter-bg-color", + "scssVar": "$quickenter-bg-color", + "default": "#f5f5f5" + }, + { + "cssVar": "--nutui-quickenter-max-height", + "scssVar": "$quickenter-max-height", + "default": "scale-px(256px" + } + ] + }, + "avatarcropper": { + "id": "avatarcropper", + "name": "AvatarCropper", + "cName": "头像裁剪", + "version": "2.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "Marvin", + "type": "component", + "desc": "仿微信头像裁剪功能", + "sort": 26, + "show": true, + "docs": { + "h5": "src/packages/avatarcropper/doc.md", + "enUS": "src/packages/avatarcropper/doc.en-US.md", + "zhTW": "src/packages/avatarcropper/doc.zh-TW.md", + "taro": "src/packages/avatarcropper/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/avatarcropper/demos/h5/demo1.tsx", + "src/packages/avatarcropper/demos/h5/demo2.tsx", + "src/packages/avatarcropper/demos/h5/demo3.tsx" + ], + "taro": [ + "src/packages/avatarcropper/demos/taro/demo1.tsx", + "src/packages/avatarcropper/demos/taro/demo2.tsx", + "src/packages/avatarcropper/demos/taro/demo3.tsx" + ] + }, + "spec": { + "base": "src/types/spec/avatarcropper/base.ts", + "h5": "src/types/spec/avatarcropper/h5.ts", + "taro": "src/types/spec/avatarcropper/taro.ts" + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "barrage": { + "id": "barrage", + "name": "Barrage", + "cName": "弹幕", + "version": "2.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "用于话语和词组的轮播展示,适用于视频中或其他类似需求中。", + "sort": 2, + "show": true, + "docs": { + "h5": "src/packages/barrage/doc.md", + "enUS": "src/packages/barrage/doc.en-US.md", + "zhTW": "src/packages/barrage/doc.zh-TW.md", + "taro": "src/packages/barrage/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/barrage/demos/h5/demo1.tsx" + ], + "taro": [ + "src/packages/barrage/demos/taro/demo1.tsx" + ] + }, + "spec": { + "base": "src/types/spec/barrage/base.ts", + "h5": "src/types/spec/barrage/h5.ts", + "taro": "src/types/spec/barrage/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Barrage", + "subComponent": null, + "rows": [ + { + "prop": "list", + "desc": "弹幕列表数据", + "type": "`Array`", + "default": "[]" + }, + { + "prop": "interval", + "desc": "可视区域内每个弹幕出现的时间间隔", + "type": "`number`", + "default": "500" + }, + { + "prop": "duration", + "desc": "每个弹幕的滚动时间", + "type": "`number`", + "default": "3000" + }, + { + "prop": "rows", + "desc": "弹幕行数,分几行展示", + "type": "`number`", + "default": "1" + }, + { + "prop": "gapY", + "desc": "弹幕垂直距离", + "type": "`number`", + "default": "10" + }, + { + "prop": "loop", + "desc": "是否循环播放", + "type": "`boolean`", + "default": "true" + } + ] + }, + { + "name": "Ref", + "kind": "ref", + "sourceComponent": "Barrage", + "subComponent": null, + "rows": [ + { + "prop": "add", + "desc": "添加数据", + "type": "`(word: string) => void`", + "default": "" + } + ] + } + ] + }, + "tokens": [] + }, + "card": { + "id": "card", + "name": "Card", + "cName": "商品卡片", + "version": "3.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "商品卡片,用于展示商品的图片、价格等信息", + "sort": 6, + "show": true, + "docs": { + "h5": "src/packages/card/doc.md", + "enUS": "src/packages/card/doc.en-US.md", + "zhTW": "src/packages/card/doc.zh-TW.md", + "taro": "src/packages/card/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/card/demos/h5/demo1.tsx", + "src/packages/card/demos/h5/demo2.tsx", + "src/packages/card/demos/h5/demo3.tsx", + "src/packages/card/demos/h5/demo4.tsx", + "src/packages/card/demos/h5/demo5.tsx", + "src/packages/card/demos/h5/demo6.tsx" + ], + "taro": [ + "src/packages/card/demos/taro/demo1.tsx", + "src/packages/card/demos/taro/demo2.tsx", + "src/packages/card/demos/taro/demo3.tsx", + "src/packages/card/demos/taro/demo4.tsx", + "src/packages/card/demos/taro/demo5.tsx", + "src/packages/card/demos/taro/demo6.tsx" + ] + }, + "spec": { + "base": "src/types/spec/card/base.ts", + "h5": "src/types/spec/card/h5.ts", + "taro": "src/types/spec/card/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "Card", + "subComponent": null, + "rows": [ + { + "prop": "src", + "desc": "左侧图片 Url", + "type": "`string`", + "default": "-" + }, + { + "prop": "title", + "desc": "标题", + "type": "`string`", + "default": "-" + }, + { + "prop": "price", + "desc": "商品价格", + "type": "`string`", + "default": "-" + }, + { + "prop": "vipPrice", + "desc": "会员价格", + "type": "`string`", + "default": "-" + }, + { + "prop": "shopDescription", + "desc": "店铺介绍", + "type": "`string`", + "default": "-" + }, + { + "prop": "delivery", + "desc": "配送方式", + "type": "`string`", + "default": "-" + }, + { + "prop": "shopName", + "desc": "店铺名称", + "type": "`string`", + "default": "-" + }, + { + "prop": "description", + "desc": "自定义商品介绍", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "priceTag", + "desc": "价格后方自定义内容", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "tag", + "desc": "店铺介绍自定义", + "type": "`ReactNode`", + "default": "-" + }, + { + "prop": "extra", + "desc": "右下角内容自定义", + "type": "`ReactNode`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-card-border-radius", + "scssVar": "$card-border-radius", + "default": "scale-px(4px" + } + ] + }, + "timedetail": { + "id": "timedetail", + "name": "TimeDetail", + "cName": "配送时间", + "version": "3.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": false, + "v15": false, + "v16": false, + "author": "zhaoqian16", + "type": "component", + "desc": "配送时间上门时间选择", + "sort": 8, + "show": false, + "docs": { + "h5": null, + "enUS": null, + "zhTW": null, + "taro": null + }, + "demos": { + "h5": [], + "taro": [] + }, + "api": { + "tables": [] + }, + "tokens": [] + }, + "timeselect": { + "id": "timeselect", + "name": "TimeSelect", + "cName": "配送时间", + "version": "3.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "zhaoqian16", + "type": "component", + "desc": "用于配送时间选择", + "sort": 20, + "show": true, + "docs": { + "h5": "src/packages/timeselect/doc.md", + "enUS": "src/packages/timeselect/doc.en-US.md", + "zhTW": "src/packages/timeselect/doc.zh-TW.md", + "taro": "src/packages/timeselect/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/timeselect/demos/h5/demo1.tsx", + "src/packages/timeselect/demos/h5/demo2.tsx", + "src/packages/timeselect/demos/h5/demo3.tsx", + "src/packages/timeselect/demos/h5/demo4.tsx" + ], + "taro": [ + "src/packages/timeselect/demos/taro/demo1.tsx", + "src/packages/timeselect/demos/taro/demo2.tsx", + "src/packages/timeselect/demos/taro/demo3.tsx", + "src/packages/timeselect/demos/taro/demo4.tsx" + ] + }, + "spec": { + "base": "src/types/spec/timeselect/base.ts", + "h5": "src/types/spec/timeselect/h5.ts", + "taro": "src/types/spec/timeselect/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "TimeSelect", + "subComponent": null, + "rows": [ + { + "prop": "visible", + "desc": "是否显示弹层", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "title", + "desc": "弹层标题", + "type": "`ReactNode`", + "default": "取件时间" + }, + { + "prop": "multiple", + "desc": "是否支持多选", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "defaultValue", + "desc": "默认选中的值,非受控", + "type": "`DateType[]`", + "default": "-" + }, + { + "prop": "options", + "desc": "数据", + "type": "`DateType[]`", + "default": "-" + }, + { + "prop": "optionKey", + "desc": "配置数据中的关键字, `valueKey`, `textKey`, `childrenKey`", + "type": "`{valueKey: 'value', textKey: 'text', childrenKey: 'children'}`", + "default": "-" + }, + { + "prop": "onSelect", + "desc": "关闭遮罩之后的回调", + "type": "`(value: DateType[]) => void`", + "default": "-" + }, + { + "prop": "onDateChange", + "desc": "点击左栏时的回调", + "type": "`(date: DateType, value: DateType[]) => void`", + "default": "-" + }, + { + "prop": "onTimeChange", + "desc": "点击右侧选项时的回调", + "type": "`(time: TimeType, value: DateType[]) => void`", + "default": "-" + } + ] + }, + { + "name": "DateType", + "kind": "other", + "sourceComponent": "TimeSelect", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "唯一标识符, 必填", + "type": "`string`", + "default": "-" + }, + { + "prop": "text", + "desc": "左侧显示的文本, 必填", + "type": "`string`", + "default": "-" + }, + { + "prop": "children", + "desc": "对应右侧的选项列表, 必填", + "type": "`TimeType[]`", + "default": "-" + } + ] + }, + { + "name": "TimeType", + "kind": "other", + "sourceComponent": "TimeSelect", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "唯一标识符, 必填", + "type": "`string`", + "default": "-" + }, + { + "prop": "text", + "desc": "右侧显示的选项内容, 必填", + "type": "`string`", + "default": "-" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-timeselect-date-width", + "scssVar": "$timeselect-date-width", + "default": "scale-px(140px" + }, + { + "cssVar": "--nutui-timeselect-date-height", + "scssVar": "$timeselect-date-height", + "default": "scale-px(40px" + }, + { + "cssVar": "--nutui-timeselect-time-width", + "scssVar": "$timeselect-time-width", + "default": "scale-px(110px" + }, + { + "cssVar": "--nutui-timeselect-time-height", + "scssVar": "$timeselect-time-height", + "default": "scale-px(50px" + } + ] + }, + "trendarrow": { + "id": "trendarrow", + "name": "TrendArrow", + "cName": "趋势箭头", + "version": "3.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "songsong", + "type": "component", + "desc": "带有箭头指示的百分比数字,用以展示指标趋势", + "sort": 25, + "show": true, + "docs": { + "h5": "src/packages/trendarrow/doc.md", + "enUS": "src/packages/trendarrow/doc.en-US.md", + "zhTW": "src/packages/trendarrow/doc.zh-TW.md", + "taro": "src/packages/trendarrow/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/trendarrow/demos/h5/demo1.tsx", + "src/packages/trendarrow/demos/h5/demo2.tsx", + "src/packages/trendarrow/demos/h5/demo3.tsx", + "src/packages/trendarrow/demos/h5/demo4.tsx", + "src/packages/trendarrow/demos/h5/demo5.tsx", + "src/packages/trendarrow/demos/h5/demo6.tsx", + "src/packages/trendarrow/demos/h5/demo7.tsx", + "src/packages/trendarrow/demos/h5/demo8.tsx" + ], + "taro": [ + "src/packages/trendarrow/demos/taro/demo1.tsx", + "src/packages/trendarrow/demos/taro/demo2.tsx", + "src/packages/trendarrow/demos/taro/demo3.tsx", + "src/packages/trendarrow/demos/taro/demo4.tsx", + "src/packages/trendarrow/demos/taro/demo5.tsx", + "src/packages/trendarrow/demos/taro/demo6.tsx", + "src/packages/trendarrow/demos/taro/demo7.tsx", + "src/packages/trendarrow/demos/taro/demo8.tsx" + ] + }, + "spec": { + "base": "src/types/spec/trendarrow/base.ts", + "h5": "src/types/spec/trendarrow/h5.ts", + "taro": "src/types/spec/trendarrow/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "TrendArrow", + "subComponent": null, + "rows": [ + { + "prop": "value", + "desc": "数值,大于0时箭头向上,小于0时箭头向下", + "type": "`number`", + "default": "-" + }, + { + "prop": "digits", + "desc": "小数位精度", + "type": "`number`", + "default": "2" + }, + { + "prop": "symbol", + "desc": "是否显示加减号", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "zero", + "desc": "是否显示 0", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "arrowLeft", + "desc": "是否在数字左侧显示箭头", + "type": "`boolean`", + "default": "false" + }, + { + "prop": "syncColor", + "desc": "文字颜色是否与箭头同步", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "color", + "desc": "文字颜色", + "type": "`string`", + "default": "#333333" + }, + { + "prop": "riseColor", + "desc": "向上箭头颜色", + "type": "`string`", + "default": "#fa2c19" + }, + { + "prop": "dropColor", + "desc": "向下箭头颜色", + "type": "`string`", + "default": "#64b578" + }, + { + "prop": "riseIcon", + "desc": "自定义向上箭头icon", + "type": "`React.ReactNode`", + "default": "" + }, + { + "prop": "downIcon", + "desc": "自定义向下箭头icon", + "type": "`React.ReactNode`", + "default": "" + } + ] + } + ] + }, + "tokens": [ + { + "cssVar": "--nutui-trendarrow-font-size", + "scssVar": "$trendarrow-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-trendarrow-icon-margin", + "scssVar": "$trendarrow-icon-margin", + "default": "scale-px(4px" + } + ] + }, + "watermark": { + "id": "watermark", + "name": "WaterMark", + "cName": "水印", + "version": "2.0.0", + "category": { + "name": "特色组件", + "enName": "business" + }, + "taro": true, + "v15": true, + "v16": false, + "author": "swag~jun", + "type": "component", + "desc": "页面上添加特定的文字或图案,可用于防止信息盗用。", + "sort": 25, + "show": true, + "docs": { + "h5": "src/packages/watermark/doc.md", + "enUS": "src/packages/watermark/doc.en-US.md", + "zhTW": "src/packages/watermark/doc.zh-TW.md", + "taro": "src/packages/watermark/doc.taro.md" + }, + "demos": { + "h5": [ + "src/packages/watermark/demos/h5/demo1.tsx", + "src/packages/watermark/demos/h5/demo2.tsx" + ], + "taro": [ + "src/packages/watermark/demos/taro/demo1.tsx", + "src/packages/watermark/demos/taro/demo2.tsx" + ] + }, + "spec": { + "base": "src/types/spec/watermark/base.ts", + "h5": "src/types/spec/watermark/h5.ts", + "taro": "src/types/spec/watermark/taro.ts" + }, + "api": { + "tables": [ + { + "name": "Props", + "kind": "props", + "sourceComponent": "WaterMark", + "subComponent": null, + "rows": [ + { + "prop": "width", + "desc": "水印的宽度", + "type": "`number`", + "default": "120" + }, + { + "prop": "height", + "desc": "水印的高度", + "type": "`number`", + "default": "64" + }, + { + "prop": "rotate", + "desc": "水印绘制时,旋转的角度", + "type": "`number`", + "default": "-22" + }, + { + "prop": "image", + "desc": "图片源,建议导出 2 倍或 3 倍图,优先使用图片渲染水印", + "type": "`string`", + "default": "-" + }, + { + "prop": "imageWidth", + "desc": "图片宽度", + "type": "`number`", + "default": "120" + }, + { + "prop": "imageHeight", + "desc": "图片高度", + "type": "`number`", + "default": "64" + }, + { + "prop": "zIndex", + "desc": "追加的水印元素的 z-index", + "type": "`number`", + "default": "2000" + }, + { + "prop": "content", + "desc": "水印文字内容", + "type": "`string`", + "default": "-" + }, + { + "prop": "color", + "desc": "水印文字颜色", + "type": "`string`", + "default": "rgba(0, 0, 0, .15)" + }, + { + "prop": "fontSize", + "desc": "文字大小", + "type": "`string` | `number`", + "default": "16" + }, + { + "prop": "gapX", + "desc": "水印之间的水平间距", + "type": "`number`", + "default": "24" + }, + { + "prop": "gapY", + "desc": "水印之间的垂直间距", + "type": "`number`", + "default": "48" + }, + { + "prop": "fullPage", + "desc": "是否覆盖整个页面", + "type": "`boolean`", + "default": "true" + }, + { + "prop": "fontFamily", + "desc": "水印文字字体", + "type": "`string`", + "default": "-" + } + ] + } + ] + }, + "tokens": [] + } + } +} diff --git a/package.json b/package.json index 08213ba72b..f225a57fc7 100644 --- a/package.json +++ b/package.json @@ -86,6 +86,7 @@ "generate:file:taro": "node scripts/taro/generate-nutui-taro.js", "generate:file:taro:pages": "node scripts/taro/generate-taro-pages.js", "generate:props_json": "PROPS_JSON=true node scripts/build-comments-to-dts.mjs", + "generate:meta": "node scripts/build-meta.mjs", "lint": "eslint ./src/packages/*/", "lint:fix": "eslint --fix ./src/packages", "prepare": "husky && npm run generate:file && npm run generate:file:taro && npm run generate:file:taro:pages", diff --git a/scripts/build-meta.mjs b/scripts/build-meta.mjs new file mode 100644 index 0000000000..d859b39228 --- /dev/null +++ b/scripts/build-meta.mjs @@ -0,0 +1,300 @@ +// 聚合 config.json + properties.json + demos + variables.scss,输出 meta/components.json。 +// 面向 AI Coding 的「单一事实源」中间产物,供后续 llms.txt / CLI / MCP 共同消费。 +// DO NOT manual edit the output (meta/components.json). Run: npm run generate:meta +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const ROOT = path.resolve(__dirname, '..') + +const CONFIG_PATH = path.join(ROOT, 'src/config.json') +const PROPERTIES_PATH = path.join(ROOT, 'scripts/properties.json') +const VARIABLES_PATH = path.join(ROOT, 'src/styles/variables.scss') +const PACKAGES_DIR = path.join(ROOT, 'src/packages') +const SPEC_DIR = path.join(ROOT, 'src/types/spec') +const PKG_JSON_PATH = path.join(ROOT, 'package.json') +const OUTPUT_PATH = path.join(ROOT, 'meta/components.json') + +const SCHEMA_VERSION = '1.0.0' + +// properties.json 的「组件名」经三级归一后仍无法匹配 config 的特例,手工兜底。 +// 注:SideNavBar 系列在 src/packages 有目录但未注册进 config.nav,故不设别名, +// 让其如实落入 orphan-api 警告(提示「有文档但组件未注册」)。 +const COMPONENT_ALIAS = { + IconFont: 'icon', +} + +const warnings = [] +const warn = (msg) => warnings.push(msg) + +// 把 properties 的中文位置式列映射为语义字段。语义严格只对 props 表成立, +// 枚举/结构表(kind !== 'props')的四列语义不同,消费方应按 kind 重新解释。 +const mapRow = (rec) => ({ + prop: (rec['第一列'] || '').trim(), + desc: (rec['第二列'] || '').trim(), + type: (rec['第三列'] || '').trim(), + default: (rec['第四列'] || '').trim(), +}) + +// 归一表格名,仅用于合并大小写差异(Props vs props),不合并语义变体(Props(direction=...))。 +const normalizeTableName = (name) => (name || '').trim().toLowerCase() + +const classifyKind = (name) => { + const t = normalizeTableName(name) + if (t === 'ref') return 'ref' + if (t === 'methods' || t === 'forminstance') return 'methods' + if (t.startsWith('props')) return 'props' + return 'other' +} + +// config 的组件 name(PascalCase)→ 目录名(既有约定:name.toLowerCase())。 +const toDirId = (name) => String(name).toLowerCase() + +// 把 properties 的「组件名」归属到某个 config 组件 id。三级优先级: +// 1) 去点拼接小写:子组件多在 config 有独立条目(Checkbox.Group→checkboxgroup) +// 2) 首段小写:无独立条目时归到父组件(Tabs.Tabpane→tabs) +// 3) 别名表兜底(IconFont→icon、SideNavBar 系列→sidenavbar) +const resolveApiId = (rawComponentName, validIds) => { + const raw = String(rawComponentName) + if (COMPONENT_ALIAS[raw]) return COMPONENT_ALIAS[raw] + const joined = raw.replace(/\./g, '').toLowerCase() + if (validIds.has(joined)) return joined + const firstSeg = raw.split('.')[0].toLowerCase() + if (validIds.has(firstSeg)) return firstSeg + return joined // 落 orphan,保留去点形式便于诊断 +} + +// ---- A. properties.json → bucket[id] = { normKey -> table } ---- +function buildApiBucket(properties, validIds) { + const bucket = {} + const orphan = new Set() + + for (const rec of properties) { + const raw = rec['组件名'] + const id = resolveApiId(raw, validIds) + if (!validIds.has(id)) { + orphan.add(`${raw} (id=${id})`) + continue + } + const tableNameRaw = rec['表格名'] || 'Props' + const normKey = normalizeTableName(tableNameRaw) + // 仅当表来自父组件视角(raw 含点且归到了父组件 id)时才标记子组件来源; + // 归到独立子组件条目时它就是该组件本身,subComponent 记 null。 + const hasDot = String(raw).includes('.') + const joinedId = String(raw).replace(/\./g, '').toLowerCase() + const subComponent = + hasDot && id !== joinedId ? String(raw).split('.').slice(1).join('.') : null + // 合并键含来源组件:同一 id 下不同原始组件的同名表(如 Icon 与 IconFont 的 Props) + // 应保持为独立表格,只有完全同源的表才合并大小写差异。 + const groupKey = `${raw}@@${normKey}` + + if (!bucket[id]) bucket[id] = {} + if (!bucket[id][groupKey]) { + bucket[id][groupKey] = { + name: tableNameRaw, + kind: classifyKind(tableNameRaw), + sourceComponent: raw, + subComponent, + rows: [], + } + } else if (bucket[id][groupKey].name !== tableNameRaw) { + warn( + `[table-case] "${id}" 合并大小写差异表格:「${bucket[id][groupKey].name}」与「${tableNameRaw}」` + ) + } + bucket[id][groupKey].rows.push(mapRow(rec)) + } + + if (orphan.size) { + warn( + `[orphan-api] ${orphan.size} 个 properties 组件名无法匹配 config,未注入:${[...orphan].join(',')}` + ) + } + return bucket +} + +// bucket[id] → api.tables 数组 + Props 行内质量校验 +function bucketToApi(id, tablesMap) { + if (!tablesMap) return { tables: [] } + const tables = Object.values(tablesMap) + for (const t of tables) { + if (t.kind !== 'props') continue + const seen = new Set() + for (const row of t.rows) { + if (!row.prop || !row.type) { + warn(`[props-field] "${id}" 表「${t.name}」存在缺列行:prop="${row.prop}" type="${row.type}"`) + } + if (row.prop) { + if (seen.has(row.prop)) warn(`[dup-prop] "${id}" 表「${t.name}」prop 重复:${row.prop}`) + seen.add(row.prop) + } + } + } + return { tables } +} + +// ---- B. variables.scss → tokens(按最长组件目录前缀归属,否则 global)---- +function parseTokens(validIdsSorted) { + const content = fs.readFileSync(VARIABLES_PATH, 'utf-8') + // 仅匹配「$scssVar: var(--nutui-xxx[, default]) !default;」的定义行(单行)。 + const re = /^\s*\$([\w-]+):\s*var\((--nutui-[\w-]+)\s*(?:,\s*([^;]*?))?\)\s*!default/gm + const perComponent = {} + const globalTokens = [] + let m + while ((m = re.exec(content)) !== null) { + const scssVar = `$${m[1]}` + const cssVar = m[2] + const def = m[3] != null ? m[3].trim().replace(/\)\s*$/, '') : null + const token = { cssVar, scssVar, default: def } + const rest = cssVar.slice('--nutui-'.length) + // 最长匹配:validIdsSorted 已按长度降序 + const owner = validIdsSorted.find( + (id) => rest === id || rest.startsWith(`${id}-`) + ) + if (owner) { + ;(perComponent[owner] ||= []).push(token) + } else { + globalTokens.push(token) + } + } + return { perComponent, globalTokens } +} + +// ---- demos 扫描 ---- +function scanDemos(id, sub) { + const dir = path.join(PACKAGES_DIR, id, 'demos', sub) + if (!fs.existsSync(dir)) return [] + return fs + .readdirSync(dir) + .map((f) => f.match(/^demo(\d+)\.tsx$/)) + .filter(Boolean) + .sort((a, b) => Number(a[1]) - Number(b[1])) + .map((mt) => `src/packages/${id}/demos/${sub}/${mt[0]}`) +} + +// ---- docs 存在性 ---- +function resolveDocs(id, showFlag) { + const map = { + h5: 'doc.md', + enUS: 'doc.en-US.md', + zhTW: 'doc.zh-TW.md', + taro: 'doc.taro.md', + } + const docs = {} + for (const [key, file] of Object.entries(map)) { + const rel = `src/packages/${id}/${file}` + docs[key] = fs.existsSync(path.join(ROOT, rel)) ? rel : null + } + if (showFlag && !docs.h5) warn(`[doc-missing] "${id}" show:true 但缺 doc.md`) + return docs +} + +// ---- spec 引用(可选,仅存在时输出)---- +function resolveSpec(id) { + const base = path.join(SPEC_DIR, id) + if (!fs.existsSync(base)) return null + const spec = {} + for (const key of ['base', 'h5', 'taro']) { + const rel = `src/types/spec/${id}/${key}.ts` + if (fs.existsSync(path.join(ROOT, rel))) spec[key] = rel + } + return Object.keys(spec).length ? spec : null +} + +function main() { + console.log('🚀 building meta/components.json ...') + const config = JSON.parse(fs.readFileSync(CONFIG_PATH, 'utf-8')) + const properties = JSON.parse(fs.readFileSync(PROPERTIES_PATH, 'utf-8')) + const pkg = JSON.parse(fs.readFileSync(PKG_JSON_PATH, 'utf-8')) + + // config.nav → 主索引 + const validIds = new Set() + const navPairs = [] // { cat, pkg, id } + for (const cat of config.nav) { + for (const p of cat.packages) { + const id = toDirId(p.name) + validIds.add(id) + navPairs.push({ cat, p, id }) + } + } + const validIdsSorted = [...validIds].sort((a, b) => b.length - a.length) + + const bucket = buildApiBucket(properties, validIds) + const { perComponent: tokensByComp, globalTokens } = parseTokens(validIdsSorted) + + const components = {} + const categories = [] + const noApiIds = [] + + for (const cat of config.nav) { + const catRef = { name: cat.name, enName: cat.enName, components: [] } + for (const p of cat.packages) { + const id = toDirId(p.name) + const api = bucketToApi(id, bucket[id]) + if (!api.tables.length) noApiIds.push(id) + + const entry = { + id, + name: p.name, + cName: p.cName, + version: p.version, + category: { name: cat.name, enName: cat.enName }, + taro: !!p.taro, + v15: !!p.v15, + v16: !!p.v16, + } + // 可选原样字段 + for (const k of ['author', 'type', 'desc', 'sort', 'show', 'rn', 'exclude', 'jdtaro']) { + if (p[k] !== undefined) entry[k] = p[k] + } + entry.docs = resolveDocs(id, p.show) + entry.demos = { h5: scanDemos(id, 'h5'), taro: scanDemos(id, 'taro') } + const spec = resolveSpec(id) + if (spec) entry.spec = spec + entry.api = api + entry.tokens = tokensByComp[id] || [] + + if (p.show && !entry.demos.h5.length && !entry.demos.taro.length) { + warn(`[demo-empty] "${id}" show:true 但无 demo`) + } + if (!cat.enName) warn(`[category] 分类「${cat.name}」缺 enName`) + + components[id] = entry + catRef.components.push(id) + } + categories.push(catRef) + } + + const componentCount = Object.keys(components).length + const apiComponentCount = componentCount - noApiIds.length + + const output = { + schemaVersion: SCHEMA_VERSION, + libVersion: pkg.version, + componentCount, + apiComponentCount, + categories, + globalTokens, + components, + } + + fs.mkdirSync(path.dirname(OUTPUT_PATH), { recursive: true }) + fs.writeFileSync(OUTPUT_PATH, `${JSON.stringify(output, null, 2)}\n`) + + // ---- 对账 & 汇总 ---- + console.log(`✅ 写入 ${path.relative(ROOT, OUTPUT_PATH)}`) + console.log(` 组件总数: ${componentCount},有 API 表: ${apiComponentCount}`) + console.log(` 全局 token: ${globalTokens.length}`) + if (noApiIds.length) { + console.log(` 无 API 表的组件 (${noApiIds.length}): ${noApiIds.join(', ')}`) + } + if (warnings.length) { + console.log(`\n⚠️ ${warnings.length} 条 WARNING:`) + for (const w of warnings) console.log(` - ${w}`) + } else { + console.log('\n✨ 无 WARNING') + } +} + +main() From 9f4a7e8c977c1a28827dea76be22bd6d6a4c5cd1 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 8 Jul 2026 21:11:59 +0800 Subject: [PATCH 02/21] feat: add LLMs documentation generation and Vite plugin --- .gitignore | 4 ++ package.json | 1 + scripts/build-llms.mjs | 113 ++++++++++++++++++++++++++++++ scripts/site/vite-plugin-llms.mjs | 78 +++++++++++++++++++++ vite.config.site.mts | 3 + 5 files changed, 199 insertions(+) create mode 100644 scripts/build-llms.mjs create mode 100644 scripts/site/vite-plugin-llms.mjs diff --git a/.gitignore b/.gitignore index 7c87415936..f33bf263ff 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,10 @@ node_modules /dist /dist-demo /dist-site +# llms 派生产物(由 generate:llms / vite 插件在构建时产出),meta/components.json 仍提交 +/meta/llms.txt +/meta/llms-full-cn.txt +/meta/llms-full.txt /release /libs /jd/upload.js diff --git a/package.json b/package.json index f225a57fc7..b650e51c6f 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "generate:file:taro:pages": "node scripts/taro/generate-taro-pages.js", "generate:props_json": "PROPS_JSON=true node scripts/build-comments-to-dts.mjs", "generate:meta": "node scripts/build-meta.mjs", + "generate:llms": "node scripts/build-llms.mjs", "lint": "eslint ./src/packages/*/", "lint:fix": "eslint --fix ./src/packages", "prepare": "husky && npm run generate:file && npm run generate:file:taro && npm run generate:file:taro:pages", diff --git a/scripts/build-llms.mjs b/scripts/build-llms.mjs new file mode 100644 index 0000000000..9f7b2d8b7c --- /dev/null +++ b/scripts/build-llms.mjs @@ -0,0 +1,113 @@ +// 读 meta/components.json,生成面向 LLM 的文档入口产物: +// - llms.txt 导航索引(仿 llmstxt.org 标准) +// - llms-full-cn.txt 全部中文 doc.md 拼接,可整体注入上下文 +// - llms-full.txt 全部英文 doc.en-US.md 拼接 +// 核心生成逻辑导出为纯函数,供 vite.config.site 的插件复用,避免两处实现。 +// DO NOT manual edit the outputs. Run: npm run generate:llms +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const ROOT = path.resolve(__dirname, '..') +const META_PATH = path.join(ROOT, 'meta/components.json') +const OUTPUT_DIR = path.join(ROOT, 'meta') + +// 线上文档站基址:域名 + vite base。单组件 .md 路由由 site 插件产出到 /components/.md。 +export const SITE_ORIGIN = 'https://nutui.jd.com' +export const SITE_BASE = '/h5/react/4x' +const SITE_URL = `${SITE_ORIGIN}${SITE_BASE}` + +const SUMMARY = + 'NutUI React 是京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序(Taro 多端)。' + +export function loadMeta() { + return JSON.parse(fs.readFileSync(META_PATH, 'utf-8')) +} + +// 仅纳入有中文文档的组件(= show:true 的展示组件),按 categories 的 nav 顺序输出。 +function docComponents(meta) { + const list = [] + for (const cat of meta.categories) { + const comps = cat.components + .map((id) => meta.components[id]) + .filter((c) => c && c.docs && c.docs.h5) + if (comps.length) list.push({ category: cat, comps }) + } + return list +} + +export function generateLlmsTxt(meta) { + const groups = docComponents(meta) + const lines = [] + lines.push(`# NutUI React - 京东风格轻量级移动端 React 组件库`) + lines.push('') + lines.push(`> ${SUMMARY}版本 ${meta.libVersion},共 ${meta.componentCount} 个组件。`) + lines.push('') + lines.push( + `本文件遵循 llmstxt.org 标准,为 AI 编程助手提供权威、离线可查的组件文档入口。每个组件的 \`.md\` 链接返回其纯文档原文(无站点 HTML 噪音),可按需精确拉取。` + ) + lines.push('') + lines.push('## Navigation') + lines.push('') + lines.push(`- [全部组件文档(中文,单文件)](${SITE_URL}/llms-full-cn.txt)`) + lines.push(`- [Full Documentation (English, single file)](${SITE_URL}/llms-full.txt)`) + lines.push('') + + for (const { category, comps } of groups) { + lines.push(`## ${category.name}${category.enName ? ` (${category.enName})` : ''}`) + lines.push('') + for (const c of comps) { + const label = c.cName ? `${c.name} ${c.cName}` : c.name + lines.push(`- [${label}](${SITE_URL}/components/${c.id}.md)`) + } + lines.push('') + } + return `${lines.join('\n').trimEnd()}\n` +} + +// 拼接全部组件文档为单文件。lang: 'h5'(中文) | 'enUS'(英文)。 +export function generateLlmsFull(meta, lang = 'h5') { + const title = + lang === 'enUS' + ? '# NutUI React - Full Component Documentation' + : '# NutUI React - 全部组件文档' + const parts = [title, '', `> ${SUMMARY}`, ''] + for (const cat of meta.categories) { + for (const id of cat.components) { + const c = meta.components[id] + const rel = c && c.docs ? c.docs[lang] : null + if (!rel) continue + const abs = path.join(ROOT, rel) + if (!fs.existsSync(abs)) continue + parts.push('---', '') + parts.push(fs.readFileSync(abs, 'utf-8').trim()) + parts.push('') + } + } + return `${parts.join('\n').trimEnd()}\n` +} + +function main() { + console.log('🚀 building llms.txt ...') + const meta = loadMeta() + const files = { + 'llms.txt': generateLlmsTxt(meta), + 'llms-full-cn.txt': generateLlmsFull(meta, 'h5'), + 'llms-full.txt': generateLlmsFull(meta, 'enUS'), + } + fs.mkdirSync(OUTPUT_DIR, { recursive: true }) + for (const [name, content] of Object.entries(files)) { + const out = path.join(OUTPUT_DIR, name) + fs.writeFileSync(out, content) + const kb = (Buffer.byteLength(content) / 1024).toFixed(0) + console.log(`✅ ${path.relative(ROOT, out)} (${kb}KB)`) + } + const docCount = docComponents(meta).reduce((n, g) => n + g.comps.length, 0) + console.log(` 索引组件数: ${docCount}`) +} + +// 仅作为脚本直接运行时执行 main,被 import 时不执行。 +if (import.meta.url === `file://${process.argv[1]}`) { + main() +} diff --git a/scripts/site/vite-plugin-llms.mjs b/scripts/site/vite-plugin-llms.mjs new file mode 100644 index 0000000000..c5b700b4c8 --- /dev/null +++ b/scripts/site/vite-plugin-llms.mjs @@ -0,0 +1,78 @@ +// Vite 插件(仅用于文档站 vite.config.site.mts): +// - build 时:把每个组件 doc.md 原文与 llms.txt/llms-full*.txt 通过 emitFile +// 输出为静态文件,最终落到 dist-site/h5/components/.md 与 dist-site/h5/*.txt +// - dev 时:configureServer 中间件按同样路径实时返回,便于本地联调 +// 数据源为 meta/components.json + 各组件 doc.md,与 build-llms.mjs 共享生成逻辑。 +import fs from 'fs' +import path from 'path' +import { fileURLToPath } from 'url' +import { + loadMeta, + generateLlmsTxt, + generateLlmsFull, + SITE_BASE, +} from '../build-llms.mjs' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const ROOT = path.resolve(__dirname, '../..') + +// 收集所有要产出的虚拟文件:{ 相对站点根的路径 -> 文本内容 } +function collectFiles() { + const meta = loadMeta() + const files = { + 'llms.txt': generateLlmsTxt(meta), + 'llms-full-cn.txt': generateLlmsFull(meta, 'h5'), + 'llms-full.txt': generateLlmsFull(meta, 'enUS'), + } + for (const c of Object.values(meta.components)) { + const rel = c.docs && c.docs.h5 + if (!rel) continue + const abs = path.join(ROOT, rel) + if (!fs.existsSync(abs)) continue + files[`components/${c.id}.md`] = fs.readFileSync(abs, 'utf-8') + } + return files +} + +const contentType = (p) => + p.endsWith('.md') + ? 'text/markdown; charset=utf-8' + : 'text/plain; charset=utf-8' + +export default function llmsPlugin() { + return { + name: 'nutui-llms', + + // build 阶段:把虚拟文件写入产物目录(相对 outDir,即 dist-site/h5)。 + generateBundle() { + const files = collectFiles() + for (const [fileName, source] of Object.entries(files)) { + this.emitFile({ type: 'asset', fileName, source }) + } + console.log( + `[nutui-llms] emitted ${Object.keys(files).length} files (llms*.txt + components/*.md)` + ) + }, + + // dev 阶段:中间件按 /llms.txt、/components/.md 实时返回。 + configureServer(server) { + const base = SITE_BASE.replace(/\/$/, '') + server.middlewares.use((req, res, next) => { + const url = (req.url || '').split('?')[0] + const rel = url.startsWith(base) ? url.slice(base.length) : url + const key = rel.replace(/^\//, '') + const isTarget = + key === 'llms.txt' || + key === 'llms-full-cn.txt' || + key === 'llms-full.txt' || + (key.startsWith('components/') && key.endsWith('.md')) + if (!isTarget) return next() + + const files = collectFiles() + if (!(key in files)) return next() + res.setHeader('Content-Type', contentType(key)) + res.end(files[key]) + }) + }, + } +} diff --git a/vite.config.site.mts b/vite.config.site.mts index b0a8ace5b4..f0c4cdd892 100644 --- a/vite.config.site.mts +++ b/vite.config.site.mts @@ -6,6 +6,8 @@ import { join, resolve } from 'path' import atImport from 'postcss-import' import rehypeHighlight from 'rehype-highlight' import config from './package.json' +// @ts-ignore +import llmsPlugin from './scripts/site/vite-plugin-llms.mjs' const projectID = process.env.VITE_APP_PROJECT_ID || '' @@ -64,6 +66,7 @@ export default defineConfig(async (): Promise => { }), }, reactRefresh(), + llmsPlugin(), ], build: { outDir: './dist-site/h5', From fbf8f8c8f016b48b302534e065d251a4953de90a Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 8 Jul 2026 22:19:31 +0800 Subject: [PATCH 03/21] fix: correct syntax errors in component metadata JSON --- meta/components.json | 438 ++++++++++++++++++++--------------------- scripts/build-meta.mjs | 2 +- 2 files changed, 220 insertions(+), 220 deletions(-) diff --git a/meta/components.json b/meta/components.json index 796ea01a59..9c9e13556d 100644 --- a/meta/components.json +++ b/meta/components.json @@ -328,17 +328,17 @@ { "cssVar": "--nutui-color-mask", "scssVar": "$color-mask", - "default": "rgba(0, 0, 0, 0.7" + "default": "rgba(0, 0, 0, 0.7)" }, { "cssVar": "--nutui-color-mask-part", "scssVar": "$color-mask-part", - "default": "rgba(0, 0, 0, 0.4" + "default": "rgba(0, 0, 0, 0.4)" }, { "cssVar": "--nutui-color-border", "scssVar": "$color-border", - "default": "rgba(0, 0, 0, 0.06" + "default": "rgba(0, 0, 0, 0.06)" }, { "cssVar": "--nutui-color-border-disabled", @@ -378,72 +378,72 @@ { "cssVar": "--nutui-font-size-xxxs", "scssVar": "$font-size-xxxs", - "default": "scale-font-px(9px" + "default": "scale-font-px(9px)" }, { "cssVar": "--nutui-font-size-xxs", "scssVar": "$font-size-xxs", - "default": "scale-font-px(10px" + "default": "scale-font-px(10px)" }, { "cssVar": "--nutui-font-size-xs", "scssVar": "$font-size-xs", - "default": "scale-font-px(11px" + "default": "scale-font-px(11px)" }, { "cssVar": "--nutui-font-size-s", "scssVar": "$font-size-s", - "default": "scale-font-px(12px" + "default": "scale-font-px(12px)" }, { "cssVar": "--nutui-font-size-m", "scssVar": "$font-size-m", - "default": "scale-font-px(13px" + "default": "scale-font-px(13px)" }, { "cssVar": "--nutui-font-size-base", "scssVar": "$font-size-base", - "default": "scale-font-px(14px" + "default": "scale-font-px(14px)" }, { "cssVar": "--nutui-font-size-l", "scssVar": "$font-size-l", - "default": "scale-font-px(15px" + "default": "scale-font-px(15px)" }, { "cssVar": "--nutui-font-size-md", "scssVar": "$font-size-md", - "default": "scale-font-px(16px" + "default": "scale-font-px(16px)" }, { "cssVar": "--nutui-font-size-icon", "scssVar": "$font-size-icon", - "default": "scale-icon-px(16px" + "default": "scale-icon-px(16px)" }, { "cssVar": "--nutui-font-size-xl", "scssVar": "$font-size-xl", - "default": "scale-font-px(18px" + "default": "scale-font-px(18px)" }, { "cssVar": "--nutui-font-size-2xl", "scssVar": "$font-size-2xl", - "default": "scale-font-px(20px" + "default": "scale-font-px(20px)" }, { "cssVar": "--nutui-font-size-xxl", "scssVar": "$font-size-xxl", - "default": "scale-font-px(24px" + "default": "scale-font-px(24px)" }, { "cssVar": "--nutui-font-size-10", "scssVar": "$font-size-xxxl", - "default": "scale-font-px(26px" + "default": "scale-font-px(26px)" }, { "cssVar": "--nutui-font-size-11", "scssVar": "$font-size-xxxxl", - "default": "scale-font-px(28px" + "default": "scale-font-px(28px)" }, { "cssVar": "--nutui-line-height-xxxs", @@ -538,82 +538,82 @@ { "cssVar": "--nutui-spacing-xxxs", "scssVar": "$spacing-xxxs", - "default": "scale-px(2px" + "default": "scale-px(2px)" }, { "cssVar": "--nutui-spacing-xxs", "scssVar": "$spacing-xxs", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-spacing-xs", "scssVar": "$spacing-xs", - "default": "scale-px(6px" + "default": "scale-px(6px)" }, { "cssVar": "--nutui-spacing-s", "scssVar": "$spacing-s", - "default": "scale-px(7px" + "default": "scale-px(7px)" }, { "cssVar": "--nutui-spacing-base", "scssVar": "$spacing-base", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-spacing-l", "scssVar": "$spacing-l", - "default": "scale-px(9px" + "default": "scale-px(9px)" }, { "cssVar": "--nutui-spacing-xl", "scssVar": "$spacing-xl", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-spacing-xxl", "scssVar": "$spacing-xxl", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-spacing-xxxl", "scssVar": "$spacing-xxxl", - "default": "scale-px(18px" + "default": "scale-px(18px)" }, { "cssVar": "--nutui-radius-xxs", "scssVar": "$radius-xxs", - "default": "scale-px(2px" + "default": "scale-px(2px)" }, { "cssVar": "--nutui-radius-xs", "scssVar": "$radius-xs", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-radius-s", "scssVar": "$radius-s", - "default": "scale-px(6px" + "default": "scale-px(6px)" }, { "cssVar": "--nutui-radius-base", "scssVar": "$radius-base", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-radius-l", "scssVar": "$radius-l", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-radius-xxl", "scssVar": "$radius-xxl", - "default": "scale-px(14px" + "default": "scale-px(14px)" }, { "cssVar": "--nutui-radius-xxxl", "scssVar": "$radius-xxxl", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-list-item-margin", @@ -658,7 +658,7 @@ { "cssVar": "--nutui-countup-height", "scssVar": "$countup-height", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-countup-base-size", @@ -668,7 +668,7 @@ { "cssVar": "--nutui-countup-border-radius", "scssVar": "$countup-border-radius", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-countup-lr-margin", @@ -824,17 +824,17 @@ { "cssVar": "--nutui-button-border-width", "scssVar": "$button-border-width", - "default": "scale-px(0.5px" + "default": "scale-px(0.5px)" }, { "cssVar": "--nutui-button-normal-padding", "scssVar": "$button-normal-padding", - "default": "0px scale-px(12px" + "default": "0px scale-px(12px)" }, { "cssVar": "--nutui-button-default-height", "scssVar": "$button-default-height", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-button-default-color", @@ -844,72 +844,72 @@ { "cssVar": "--nutui-button-default-padding", "scssVar": "$button-default-padding", - "default": "0px scale-px(12px" + "default": "0px scale-px(12px)" }, { "cssVar": "--nutui-button-xlarge-height", "scssVar": "$button-xlarge-height", - "default": "scale-px(48px" + "default": "scale-px(48px)" }, { "cssVar": "--nutui-button-xlarge-padding", "scssVar": "$button-xlarge-padding", - "default": "0px scale-px(20px" + "default": "0px scale-px(20px)" }, { "cssVar": "--nutui-button-44-height", "scssVar": "$button-44-height", - "default": "scale-px(44px" + "default": "scale-px(44px)" }, { "cssVar": "--nutui-button-44-padding", "scssVar": "$button-44-padding", - "default": "0px scale-px(16px" + "default": "0px scale-px(16px)" }, { "cssVar": "--nutui-button-large-height", "scssVar": "$button-large-height", - "default": "scale-px(40px" + "default": "scale-px(40px)" }, { "cssVar": "--nutui-button-large-padding", "scssVar": "$button-large-padding", - "default": "0px scale-px(12px" + "default": "0px scale-px(12px)" }, { "cssVar": "--nutui-button-36-height", "scssVar": "$button-36-height", - "default": "scale-px(36px" + "default": "scale-px(36px)" }, { "cssVar": "--nutui-button-36-padding", "scssVar": "$button-36-padding", - "default": "0px scale-px(12px" + "default": "0px scale-px(12px)" }, { "cssVar": "--nutui-button-small-padding", "scssVar": "$button-small-padding", - "default": "0px scale-px(8px" + "default": "0px scale-px(8px)" }, { "cssVar": "--nutui-button-small-height", "scssVar": "$button-small-height", - "default": "scale-px(28px" + "default": "scale-px(28px)" }, { "cssVar": "--nutui-button-mini-padding", "scssVar": "$button-mini-padding", - "default": "0px scale-px(6px" + "default": "0px scale-px(6px)" }, { "cssVar": "--nutui-button-mini-height", "scssVar": "$button-mini-height", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-button-text-icon-margin", "scssVar": "$button-text-icon-margin", - "default": "scale-px(4px" + "default": "scale-px(4px)" } ] }, @@ -1023,32 +1023,32 @@ { "cssVar": "--nutui-cell-border-radius", "scssVar": "$cell-border-radius", - "default": "scale-px(6px" + "default": "scale-px(6px)" }, { "cssVar": "--nutui-cell-padding", "scssVar": "$cell-padding", - "default": "scale-px(13px) scale-px(16px" + "default": "scale-px(13px) scale-px(16px)" }, { "cssVar": "--nutui-cell-line-height", "scssVar": "$cell-line-height", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-cell-divider-right", "scssVar": "$cell-divider-right", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-cell-divider-left", "scssVar": "$cell-divider-left", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-cell-group-wrap-margin", "scssVar": "$cell-group-wrap-margin", - "default": "scale-px(10px" + "default": "scale-px(10px)" } ] }, @@ -1317,47 +1317,47 @@ { "cssVar": "--nutui-icon-size-6", "scssVar": "$icon-size-6", - "default": "scale-icon-px(6px" + "default": "scale-icon-px(6px)" }, { "cssVar": "--nutui-icon-size-8", "scssVar": "$icon-size-8", - "default": "scale-icon-px(8px" + "default": "scale-icon-px(8px)" }, { "cssVar": "--nutui-icon-size-10", "scssVar": "$icon-size-10", - "default": "scale-icon-px(10px" + "default": "scale-icon-px(10px)" }, { "cssVar": "--nutui-icon-size-11", "scssVar": "$icon-size-11", - "default": "scale-icon-px(11px" + "default": "scale-icon-px(11px)" }, { "cssVar": "--nutui-icon-size-12", "scssVar": "$icon-size-12", - "default": "scale-icon-px(12px" + "default": "scale-icon-px(12px)" }, { "cssVar": "--nutui-icon-size-16", "scssVar": "$icon-size-16", - "default": "scale-icon-px(16px" + "default": "scale-icon-px(16px)" }, { "cssVar": "--nutui-icon-size-18", "scssVar": "$icon-size-18", - "default": "scale-icon-px(18px" + "default": "scale-icon-px(18px)" }, { "cssVar": "--nutui-icon-size-20", "scssVar": "$icon-size-20", - "default": "scale-icon-px(20px" + "default": "scale-icon-px(20px)" }, { "cssVar": "--nutui-icon-size-22", "scssVar": "$icon-size-22", - "default": "scale-icon-px(22px" + "default": "scale-icon-px(22px)" }, { "cssVar": "--nutui-icon-height", @@ -1793,12 +1793,12 @@ { "cssVar": "--nutui-divider-line-height", "scssVar": "$divider-line-height", - "default": "scale-px(1px" + "default": "scale-px(1px)" }, { "cssVar": "--nutui-divider-spacing", "scssVar": "$divider-spacing", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-divider-side-width", @@ -1808,12 +1808,12 @@ { "cssVar": "--nutui-divider-vertical-height", "scssVar": "$divider-vertical-height", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-divider-vertical-margin", "scssVar": "$divider-vertical-margin", - "default": "0 scale-px(8px" + "default": "0 scale-px(8px)" } ] }, @@ -1939,7 +1939,7 @@ { "cssVar": "--nutui-grid-item-text-margin", "scssVar": "$grid-item-text-margin", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-grid-item-text-color", @@ -2189,12 +2189,12 @@ { "cssVar": "--nutui-row-content-height", "scssVar": "$row-content-height", - "default": "scale-px(50px" + "default": "scale-px(50px)" }, { "cssVar": "--nutui-row-content-line-height", "scssVar": "$row-content-line-height", - "default": "scale-px(40px" + "default": "scale-px(40px)" } ] }, @@ -2292,7 +2292,7 @@ { "cssVar": "--nutui-space-gap", "scssVar": "$space-gap", - "default": "scale-px(8px" + "default": "scale-px(8px)" } ] }, @@ -2594,7 +2594,7 @@ { "cssVar": "--nutui-elevator-bars-right", "scssVar": "$elevator-bars-right", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-elevator-bars-top", @@ -2795,7 +2795,7 @@ { "cssVar": "--nutui-hoverbutton-item-size", "scssVar": "$hoverbutton-item-size", - "default": "scale-px(40px" + "default": "scale-px(40px)" } ] }, @@ -2940,12 +2940,12 @@ { "cssVar": "--nutui-navbar-height", "scssVar": "$navbar-height", - "default": "scale-px(44px" + "default": "scale-px(44px)" }, { "cssVar": "--nutui-navbar-margin-bottom", "scssVar": "$navbar-margin-bottom", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-navbar-background", @@ -3027,17 +3027,17 @@ { "cssVar": "--nutui-sidebar-width", "scssVar": "$sidebar-width", - "default": "scale-px(104px" + "default": "scale-px(104px)" }, { "cssVar": "--nutui-sidebar-max-width", "scssVar": "$sidebar-max-width", - "default": "scale-px(128px" + "default": "scale-px(128px)" }, { "cssVar": "--nutui-sidebar-title-height", "scssVar": "$sidebar-title-height", - "default": "scale-px(52px" + "default": "scale-px(52px)" }, { "cssVar": "--nutui-sidebar-item-background", @@ -3047,7 +3047,7 @@ { "cssVar": "--nutui-sidebar-item-padding", "scssVar": "$sidebar-item-padding", - "default": "scale-px(24px) scale-px(20px" + "default": "scale-px(24px) scale-px(20px)" } ] }, @@ -3193,7 +3193,7 @@ { "cssVar": "--nutui-tabbar-height", "scssVar": "$tabbar-height", - "default": "scale-px(46px" + "default": "scale-px(46px)" }, { "cssVar": "--nutui-tabbar-active-color", @@ -3218,12 +3218,12 @@ { "cssVar": "--nutui-tabbar-text-line-height", "scssVar": "$tabbar-text-line-height", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-tabbar-text-margin-top", "scssVar": "$tabbar-text-margin-top", - "default": "scale-px(4px" + "default": "scale-px(4px)" } ] }, @@ -3536,22 +3536,22 @@ { "cssVar": "--nutui-tabs-titles-height", "scssVar": "$tabs-titles-height", - "default": "scale-px(44px" + "default": "scale-px(44px)" }, { "cssVar": "--nutui-tabs-titles-gap", "scssVar": "$tabs-titles-gap", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-tabs-tab-line-width", "scssVar": "$tabs-tab-line-width", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-tabs-tab-line-height", "scssVar": "$tabs-tab-line-height", - "default": "scale-px(2px" + "default": "scale-px(2px)" }, { "cssVar": "--nutui-tabs-tab-line-color", @@ -3571,7 +3571,7 @@ { "cssVar": "--nutui-tabs-tabpane-padding", "scssVar": "$tabs-tabpane-padding", - "default": "scale-px(24px) scale-px(20px" + "default": "scale-px(24px) scale-px(20px)" } ] }, @@ -3941,7 +3941,7 @@ { "cssVar": "--nutui-calendar-header-height", "scssVar": "$calendar-header-height", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-calendar-day-width", @@ -3951,7 +3951,7 @@ { "cssVar": "--nutui-calendar-day-height", "scssVar": "$calendar-day-height", - "default": "scale-px(60px" + "default": "scale-px(60px)" } ] }, @@ -4225,17 +4225,17 @@ { "cssVar": "--nutui-cascader-pane-height", "scssVar": "$cascader-pane-height", - "default": "scale-px(342px" + "default": "scale-px(342px)" }, { "cssVar": "--nutui-cascader-pane-paddingTop", "scssVar": "$cascader-pane-paddingTop", - "default": "scale-px(10px" + "default": "scale-px(10px)" }, { "cssVar": "--nutui-cascader-bar-line-height", "scssVar": "$cascader-bar-line-height", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-cascader-bar-color", @@ -4245,12 +4245,12 @@ { "cssVar": "--nutui-cascader-item-height", "scssVar": "$cascader-item-height", - "default": "scale-px(40px" + "default": "scale-px(40px)" }, { "cssVar": "--nutui-cascader-item-padding", "scssVar": "$cascader-item-padding", - "default": "scale-px(10px) scale-px(20px" + "default": "scale-px(10px) scale-px(20px)" }, { "cssVar": "--nutui-cascader-item-margin", @@ -4409,7 +4409,7 @@ { "cssVar": "--nutui-checkbox-list-padding", "scssVar": "$checkbox-list-padding", - "default": "0 0 0 scale-px(12px" + "default": "0 0 0 scale-px(12px)" } ] }, @@ -4834,7 +4834,7 @@ { "cssVar": "--nutui-form-item-label-width", "scssVar": "$form-item-label-width", - "default": "scale-px(90px" + "default": "scale-px(90px)" }, { "cssVar": "--nutui-form-item-tip-text-align", @@ -5245,7 +5245,7 @@ { "cssVar": "--nutui-input-padding", "scssVar": "$input-padding", - "default": "scale-px(12px" + "default": "scale-px(12px)" } ] }, @@ -5421,12 +5421,12 @@ { "cssVar": "--nutui-inputnumber-input-width", "scssVar": "$inputnumber-input-width", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-inputnumber-input-height", "scssVar": "$inputnumber-input-height", - "default": "scale-px(28px" + "default": "scale-px(28px)" }, { "cssVar": "--nutui-inputnumber-input-border", @@ -5441,7 +5441,7 @@ { "cssVar": "--nutui-inputnumber-button-width", "scssVar": "$inputnumber-button-width", - "default": "scale-px(28px" + "default": "scale-px(28px)" }, { "cssVar": "--nutui-inputnumber-divider-width", @@ -5456,7 +5456,7 @@ { "cssVar": "--nutui-inputnumber-icon-size", "scssVar": "$inputnumber-icon-size", - "default": "scale-px(8px" + "default": "scale-px(8px)" } ] }, @@ -5561,7 +5561,7 @@ { "cssVar": "--nutui-menu-bar-line-height", "scssVar": "$menu-bar-line-height", - "default": "scale-px(48px" + "default": "scale-px(48px)" }, { "cssVar": "--nutui-menu-bar-opened-z-index", @@ -5571,7 +5571,7 @@ { "cssVar": "--nutui-menu-title-padding", "scssVar": "$menu-title-padding", - "default": "0 scale-px(8px" + "default": "0 scale-px(8px)" }, { "cssVar": "--nutui-menu-title-color", @@ -5586,12 +5586,12 @@ { "cssVar": "--nutui-menu-content-padding", "scssVar": "$menu-content-padding", - "default": "scale-px(12px) scale-px(24px" + "default": "scale-px(12px) scale-px(24px)" }, { "cssVar": "--nutui-menu-content-max-height", "scssVar": "$menu-content-max-height", - "default": "scale-px(214px" + "default": "scale-px(214px)" }, { "cssVar": "--nutui-menu-item-padding", @@ -5601,7 +5601,7 @@ { "cssVar": "--nutui-menu-item-icon-margin", "scssVar": "$menu-item-icon-margin", - "default": "scale-px(8px" + "default": "scale-px(8px)" } ] }, @@ -5980,7 +5980,7 @@ { "cssVar": "--nutui-picker-item-height", "scssVar": "$picker-item-height", - "default": "scale-px(36px" + "default": "scale-px(36px)" } ] }, @@ -6170,12 +6170,12 @@ { "cssVar": "--nutui-radio-label-margin-left", "scssVar": "$radio-label-margin-left", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-radio-button-padding", "scssVar": "$radio-button-padding", - "default": "scale-px(5px) scale-px(18px" + "default": "scale-px(5px) scale-px(18px)" } ] }, @@ -6258,7 +6258,7 @@ { "cssVar": "--nutui-radiogroup-radio-margin", "scssVar": "$radiogroup-radio-margin", - "default": "scale-px(20px" + "default": "scale-px(20px)" } ] }, @@ -6439,12 +6439,12 @@ { "cssVar": "--nutui-range-height", "scssVar": "$range-height", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-range-margin", "scssVar": "$range-margin", - "default": "scale-px(15px" + "default": "scale-px(15px)" }, { "cssVar": "--nutui-range-active-color", @@ -6454,12 +6454,12 @@ { "cssVar": "--nutui-range-button-width", "scssVar": "$range-button-width", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-range-button-height", "scssVar": "$range-button-height", - "default": "scale-px(24px" + "default": "scale-px(24px)" } ] }, @@ -6603,7 +6603,7 @@ { "cssVar": "--nutui-rate-item-margin", "scssVar": "$rate-item-margin", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-rate-icon-color", @@ -6613,7 +6613,7 @@ { "cssVar": "--nutui-rate-icon-size", "scssVar": "$rate-icon-size", - "default": "scale-font-px(16px" + "default": "scale-font-px(16px)" }, { "cssVar": "--nutui-rate-font-color", @@ -6823,7 +6823,7 @@ { "cssVar": "--nutui-searchbar-padding", "scssVar": "$searchbar-padding", - "default": "scale-px(1px) scale-px(8px" + "default": "scale-px(1px) scale-px(8px)" }, { "cssVar": "--nutui-searchbar-color", @@ -6833,22 +6833,22 @@ { "cssVar": "--nutui-searchbar-gap", "scssVar": "$searchbar-gap", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-searchbar-inner-gap", "scssVar": "$searchbar-inner-gap", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-searchbar-icon-size", "scssVar": "$searchbar-icon-size", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-searchbar-input-height", "scssVar": "$searchbar-input-height", - "default": "scale-px(38px" + "default": "scale-px(38px)" } ] }, @@ -7136,7 +7136,7 @@ { "cssVar": "--nutui-signature-border-width", "scssVar": "$signature-border-width", - "default": "scale-px(1px" + "default": "scale-px(1px)" }, { "cssVar": "--nutui-signature-height", @@ -7250,27 +7250,27 @@ { "cssVar": "--nutui-switch-width", "scssVar": "$switch-width", - "default": "scale-px(56px" + "default": "scale-px(56px)" }, { "cssVar": "--nutui-switch-height", "scssVar": "$switch-height", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-switch-inside-width", "scssVar": "$switch-inside-width", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-switch-inside-height", "scssVar": "$switch-inside-height", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-switch-border-width", "scssVar": "$switch-border-width", - "default": "scale-px(2px" + "default": "scale-px(2px)" } ] }, @@ -7415,7 +7415,7 @@ { "cssVar": "--nutui-textarea-padding", "scssVar": "$textarea-padding", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-textarea-text-color", @@ -7774,12 +7774,12 @@ { "cssVar": "--nutui-uploader-image-width", "scssVar": "$uploader-image-width", - "default": "scale-px(100px" + "default": "scale-px(100px)" }, { "cssVar": "--nutui-uploader-image-height", "scssVar": "$uploader-image-height", - "default": "scale-px(100px" + "default": "scale-px(100px)" }, { "cssVar": "--nutui-uploader-image-border", @@ -8038,7 +8038,7 @@ { "cssVar": "--nutui-badge-height", "scssVar": "$badge-height", - "default": "scale-px(14px" + "default": "scale-px(14px)" }, { "cssVar": "--nutui-badge-color", @@ -8058,17 +8058,17 @@ { "cssVar": "--nutui-badge-min-width", "scssVar": "$badge-min-width", - "default": "scale-px(6px" + "default": "scale-px(6px)" }, { "cssVar": "--nutui-badge-padding", "scssVar": "$badge-padding", - "default": "scale-px(1px) scale-px(4px" + "default": "scale-px(1px) scale-px(4px)" }, { "cssVar": "--nutui-badge-icon-padding", "scssVar": "$badge-icon-padding", - "default": "scale-px(2px" + "default": "scale-px(2px)" }, { "cssVar": "--nutui-badge-icon-size", @@ -8083,17 +8083,17 @@ { "cssVar": "--nutui-badge-dot-width", "scssVar": "$badge-dot-width", - "default": "scale-px(6px" + "default": "scale-px(6px)" }, { "cssVar": "--nutui-badge-dot-small-width", "scssVar": "$badge-dot-small-width", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-badge-dot-large-width", "scssVar": "$badge-dot-large-width", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-badge-outline-color", @@ -8288,27 +8288,27 @@ { "cssVar": "--nutui-dialog-min-width", "scssVar": "$dialog-min-width", - "default": "scale-px(240px" + "default": "scale-px(240px)" }, { "cssVar": "--nutui-dialog-width", "scssVar": "$dialog-width", - "default": "scale-px(295px" + "default": "scale-px(295px)" }, { "cssVar": "--nutui-dialog-padding", "scssVar": "$dialog-padding", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-dialog-max-height", "scssVar": "$dialog-max-height", - "default": "scale-px(420px" + "default": "scale-px(420px)" }, { "cssVar": "--nutui-dialog-min-height", "scssVar": "$dialog-min-height", - "default": "scale-px(124px" + "default": "scale-px(124px)" }, { "cssVar": "--nutui-dialog-border-radius", @@ -8323,7 +8323,7 @@ { "cssVar": "--nutui-dialog-footer-badge-top", "scssVar": "$dialog-footer-badge-top", - "default": "scale-px(-8px" + "default": "scale-px(-8px)" }, { "cssVar": "--nutui-dialog-close-color", @@ -8333,27 +8333,27 @@ { "cssVar": "--nutui-dialog-close-width", "scssVar": "$dialog-close-width", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-dialog-close-height", "scssVar": "$dialog-close-height", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-dialog-close-top", "scssVar": "$dialog-close-top", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-dialog-close-left", "scssVar": "$dialog-close-left", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-dialog-close-right", "scssVar": "$dialog-close-right", - "default": "scale-px(16px" + "default": "scale-px(16px)" } ] }, @@ -8519,7 +8519,7 @@ { "cssVar": "--nutui-empty-padding", "scssVar": "$empty-padding", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-empty-title-color", @@ -8534,12 +8534,12 @@ { "cssVar": "--nutui-empty-full-padding-top", "scssVar": "$empty-full-padding-top", - "default": "scale-px(160px" + "default": "scale-px(160px)" }, { "cssVar": "--nutui-empty-full-image-size", "scssVar": "$empty-full-image-size", - "default": "scale-px(160px" + "default": "scale-px(160px)" }, { "cssVar": "--nutui-empty-full-title-font-size", @@ -8559,17 +8559,17 @@ { "cssVar": "--nutui-empty-full-description-line-height", "scssVar": "$empty-full-description-line-height", - "default": "scale-font-px(22px" + "default": "scale-font-px(22px)" }, { "cssVar": "--nutui-empty-full-actions-margin-top", "scssVar": "$empty-full-actions-margin-top", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-empty-half-image-size", "scssVar": "$empty-half-image-size", - "default": "scale-px(80px" + "default": "scale-px(80px)" }, { "cssVar": "--nutui-empty-half-title-font-size", @@ -8579,7 +8579,7 @@ { "cssVar": "--nutui-empty-half-title-line-height", "scssVar": "$empty-half-title-line-height", - "default": "scale-font-px(22px" + "default": "scale-font-px(22px)" }, { "cssVar": "--nutui-empty-half-description-font-size", @@ -8594,22 +8594,22 @@ { "cssVar": "--nutui-empty-half-actions-margin-top", "scssVar": "$empty-half-actions-margin-top", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-empty-partial-padding", "scssVar": "$empty-partial-padding", - "default": "scale-px(0px) scale-px(16px" + "default": "scale-px(0px) scale-px(16px)" }, { "cssVar": "--nutui-empty-partial-image-size", "scssVar": "$empty-partial-image-size", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-empty-partial-content-gap", "scssVar": "$empty-partial-content-gap", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-empty-partial-description-font-size", @@ -8619,7 +8619,7 @@ { "cssVar": "--nutui-empty-partial-description-line-height", "scssVar": "$empty-partial-description-line-height", - "default": "scale-font-px(32px" + "default": "scale-font-px(32px)" } ] }, @@ -9004,7 +9004,7 @@ { "cssVar": "--nutui-noticebar-height", "scssVar": "$noticebar-height", - "default": "scale-px(36px" + "default": "scale-px(36px)" }, { "cssVar": "--nutui-noticebar-color", @@ -9019,12 +9019,12 @@ { "cssVar": "--nutui-noticebar-line-height", "scssVar": "$noticebar-line-height", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-noticebar-box-padding", "scssVar": "$noticebar-box-padding", - "default": "0 scale-px(16px" + "default": "0 scale-px(16px)" }, { "cssVar": "--nutui-noticebar-border-radius", @@ -9034,7 +9034,7 @@ { "cssVar": "--nutui-noticebar-icon-gap", "scssVar": "$noticebar-icon-gap", - "default": "scale-px(4px" + "default": "scale-px(4px)" } ] }, @@ -9126,17 +9126,17 @@ { "cssVar": "--nutui-notify-height", "scssVar": "$notify-height", - "default": "scale-px(40px" + "default": "scale-px(40px)" }, { "cssVar": "--nutui-notify-padding", "scssVar": "$notify-padding", - "default": "0px scale-px(12px" + "default": "0px scale-px(12px)" }, { "cssVar": "--nutui-notify-border-radius", "scssVar": "$notify-border-radius", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-notify-z-index", @@ -9347,12 +9347,12 @@ { "cssVar": "--nutui-popover-padding", "scssVar": "$popover-padding", - "default": "scale-px(8px" + "default": "scale-px(8px)" }, { "cssVar": "--nutui-popover-item-width", "scssVar": "$popover-item-width", - "default": "scale-px(160px" + "default": "scale-px(160px)" } ] }, @@ -9579,17 +9579,17 @@ { "cssVar": "--nutui-popup-icon-size", "scssVar": "$popup-icon-size", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-popup-title-padding", "scssVar": "$popup-title-padding", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-popup-title-height", "scssVar": "$popup-title-height", - "default": "scale-px(50px" + "default": "scale-px(50px)" }, { "cssVar": "--nutui-popup-title-border-bottom", @@ -9719,7 +9719,7 @@ { "cssVar": "--nutui-pulltorefresh-icon-width", "scssVar": "$pulltorefresh-icon-width", - "default": "scale-px(36px" + "default": "scale-px(36px)" } ] }, @@ -9774,12 +9774,12 @@ { "cssVar": "--nutui-resultpage-width", "scssVar": "$resultpage-width", - "default": "scale-px(240px" + "default": "scale-px(240px)" }, { "cssVar": "--nutui-resultpage-icon-size", "scssVar": "$resultpage-icon-size", - "default": "scale-px(36px" + "default": "scale-px(36px)" } ] }, @@ -10207,7 +10207,7 @@ { "cssVar": "--nutui-toast-inner-padding", "scssVar": "$toast-inner-padding", - "default": "scale-px(12px) scale-px(16px" + "default": "scale-px(12px) scale-px(16px)" }, { "cssVar": "--nutui-toast-inner-bg-color", @@ -10705,37 +10705,37 @@ { "cssVar": "--nutui-avatar-square", "scssVar": "$avatar-square", - "default": "scale-px(5px" + "default": "scale-px(5px)" }, { "cssVar": "--nutui-avatar-large-width", "scssVar": "$avatar-large-width", - "default": "scale-px(60px" + "default": "scale-px(60px)" }, { "cssVar": "--nutui-avatar-large-height", "scssVar": "$avatar-large-height", - "default": "scale-px(60px" + "default": "scale-px(60px)" }, { "cssVar": "--nutui-avatar-small-width", "scssVar": "$avatar-small-width", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-avatar-small-height", "scssVar": "$avatar-small-height", - "default": "scale-px(32px" + "default": "scale-px(32px)" }, { "cssVar": "--nutui-avatar-normal-width", "scssVar": "$avatar-normal-width", - "default": "scale-px(40px" + "default": "scale-px(40px)" }, { "cssVar": "--nutui-avatar-normal-height", "scssVar": "$avatar-normal-height", - "default": "scale-px(40px" + "default": "scale-px(40px)" } ] }, @@ -11024,7 +11024,7 @@ { "cssVar": "--nutui-collapse-item-padding", "scssVar": "$collapse-item-padding", - "default": "scale-px(13px) scale-px(26px" + "default": "scale-px(13px) scale-px(26px)" }, { "cssVar": "--nutui-collapse-item-color", @@ -11353,12 +11353,12 @@ { "cssVar": "--nutui-countdown-height", "scssVar": "$countdown-height", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-countdown-width", "scssVar": "$countdown-width", - "default": "scale-px(16px" + "default": "scale-px(16px)" }, { "cssVar": "--nutui-countdown-number-padding", @@ -11368,7 +11368,7 @@ { "cssVar": "--nutui-countdown-number-margin", "scssVar": "$countdown-number-margin", - "default": "0 scale-px(1px" + "default": "0 scale-px(1px)" } ] }, @@ -11699,7 +11699,7 @@ { "cssVar": "--nutui-indicator-dot-size", "scssVar": "$indicator-dot-size", - "default": "scale-px(4px" + "default": "scale-px(4px)" }, { "cssVar": "--nutui-indicator-dot-margin", @@ -11891,12 +11891,12 @@ { "cssVar": "--nutui-pagination-lite-width", "scssVar": "$pagination-lite-width", - "default": "scale-px(40px" + "default": "scale-px(40px)" }, { "cssVar": "--nutui-pagination-lite-height", "scssVar": "$pagination-lite-height", - "default": "scale-px(20px" + "default": "scale-px(20px)" } ] }, @@ -12019,7 +12019,7 @@ { "cssVar": "--nutui-price-color", "scssVar": "$price-color", - "default": "var(--nutui-color-text-help" + "default": "var(--nutui-color-text-help)" }, { "cssVar": "--nutui-price-symbol-xlarge-size", @@ -12179,22 +12179,22 @@ { "cssVar": "--nutui-progress-height", "scssVar": "$progress-height", - "default": "scale-px(10px" + "default": "scale-px(10px)" }, { "cssVar": "--nutui-progress-border-radius", "scssVar": "$progress-border-radius", - "default": "scale-px(12px" + "default": "scale-px(12px)" }, { "cssVar": "--nutui-progress-text-padding", "scssVar": "$progress-text-padding", - "default": "0 scale-px(5px" + "default": "0 scale-px(5px)" }, { "cssVar": "--nutui-progress-text-font-size", "scssVar": "$progress-text-font-size", - "default": "scale-font-px(13px" + "default": "scale-font-px(13px)" } ] }, @@ -12245,7 +12245,7 @@ { "cssVar": "--nutui-segmented-height", "scssVar": "$segmented-height", - "default": "scale-px(24px" + "default": "scale-px(24px)" }, { "cssVar": "--nutui-segmented-padding", @@ -12260,7 +12260,7 @@ { "cssVar": "--nutui-segmented-height", "scssVar": "$segmented-item-height", - "default": "scale-px(20px" + "default": "scale-px(20px)" }, { "cssVar": "--nutui-segmented-item-radius", @@ -12437,7 +12437,7 @@ { "cssVar": "--nutui-steps-base-head-height", "scssVar": "$steps-base-head-height", - "default": "scale-px(14px" + "default": "scale-px(14px)" }, { "cssVar": "--nutui-steps-base-head-border", @@ -12452,7 +12452,7 @@ { "cssVar": "--nutui-steps-base-line-height", "scssVar": "$steps-base-line-height", - "default": "scale-px(1px" + "default": "scale-px(1px)" }, { "cssVar": "--nutui-steps-process-color", @@ -12847,7 +12847,7 @@ { "cssVar": "--nutui-table-cols-padding", "scssVar": "$table-cols-padding", - "default": "scale-px(10px" + "default": "scale-px(10px)" }, { "cssVar": "--nutui-table-tr-odd-bg-color", @@ -12974,7 +12974,7 @@ { "cssVar": "--nutui-tag-padding", "scssVar": "$tag-padding", - "default": "0px scale-px(2px" + "default": "0px scale-px(2px)" }, { "cssVar": "--nutui-tag-font-size", @@ -12984,12 +12984,12 @@ { "cssVar": "--nutui-tag-border-radius", "scssVar": "$tag-border-radius", - "default": "scale-px(2px" + "default": "scale-px(2px)" }, { "cssVar": "--nutui-tag-height", "scssVar": "$tag-height", - "default": "scale-px(14px" + "default": "scale-px(14px)" }, { "cssVar": "--nutui-tag-color", @@ -12999,7 +12999,7 @@ { "cssVar": "--nutui-tag-border-width", "scssVar": "$tag-border-width", - "default": "scale-px(1px" + "default": "scale-px(1px)" }, { "cssVar": "--nutui-tag-background-color", @@ -13009,7 +13009,7 @@ { "cssVar": "--nutui-tag-round-border-radius", "scssVar": "$tag-round-border-radius", - "default": "scale-px(8px" + "default": "scale-px(8px)" } ] }, @@ -13064,17 +13064,17 @@ { "cssVar": "--nutui-tour-mask-border-radius", "scssVar": "$tour-mask-border-radius", - "default": "scale-px(10px" + "default": "scale-px(10px)" }, { "cssVar": "--nutui-tour-content-min-width", "scssVar": "$tour-content-min-width", - "default": "scale-px(200px" + "default": "scale-px(200px)" }, { "cssVar": "--nutui-tour-content-padding", "scssVar": "$tour-content-padding", - "default": "scale-px(10px) scale-px(12px" + "default": "scale-px(10px) scale-px(12px)" } ] }, @@ -13366,7 +13366,7 @@ { "cssVar": "--nutui-quickenter-max-height", "scssVar": "$quickenter-max-height", - "default": "scale-px(256px" + "default": "scale-px(256px)" } ] }, @@ -13643,7 +13643,7 @@ { "cssVar": "--nutui-card-border-radius", "scssVar": "$card-border-radius", - "default": "scale-px(4px" + "default": "scale-px(4px)" } ] }, @@ -13837,22 +13837,22 @@ { "cssVar": "--nutui-timeselect-date-width", "scssVar": "$timeselect-date-width", - "default": "scale-px(140px" + "default": "scale-px(140px)" }, { "cssVar": "--nutui-timeselect-date-height", "scssVar": "$timeselect-date-height", - "default": "scale-px(40px" + "default": "scale-px(40px)" }, { "cssVar": "--nutui-timeselect-time-width", "scssVar": "$timeselect-time-width", - "default": "scale-px(110px" + "default": "scale-px(110px)" }, { "cssVar": "--nutui-timeselect-time-height", "scssVar": "$timeselect-time-height", - "default": "scale-px(50px" + "default": "scale-px(50px)" } ] }, @@ -13993,7 +13993,7 @@ { "cssVar": "--nutui-trendarrow-icon-margin", "scssVar": "$trendarrow-icon-margin", - "default": "scale-px(4px" + "default": "scale-px(4px)" } ] }, diff --git a/scripts/build-meta.mjs b/scripts/build-meta.mjs index d859b39228..72cf0b0588 100644 --- a/scripts/build-meta.mjs +++ b/scripts/build-meta.mjs @@ -145,7 +145,7 @@ function parseTokens(validIdsSorted) { while ((m = re.exec(content)) !== null) { const scssVar = `$${m[1]}` const cssVar = m[2] - const def = m[3] != null ? m[3].trim().replace(/\)\s*$/, '') : null + const def = m[3] != null ? m[3].trim() : null const token = { cssVar, scssVar, default: def } const rest = cssVar.slice('--nutui-'.length) // 最长匹配:validIdsSorted 已按长度降序 From debb24cefc841df0f67f3bb8e8d85ff769fd8c61 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 8 Jul 2026 22:26:18 +0800 Subject: [PATCH 04/21] feat: add English summary for NutUI React documentation --- scripts/build-llms.mjs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/build-llms.mjs b/scripts/build-llms.mjs index 9f7b2d8b7c..86c9e105c4 100644 --- a/scripts/build-llms.mjs +++ b/scripts/build-llms.mjs @@ -20,6 +20,8 @@ const SITE_URL = `${SITE_ORIGIN}${SITE_BASE}` const SUMMARY = 'NutUI React 是京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序(Taro 多端)。' +const SUMMARY_EN = + 'NutUI React is a lightweight, JD-style mobile React UI library that generates both H5 and mini-program (Taro multi-platform) apps from a single codebase.' export function loadMeta() { return JSON.parse(fs.readFileSync(META_PATH, 'utf-8')) @@ -72,7 +74,8 @@ export function generateLlmsFull(meta, lang = 'h5') { lang === 'enUS' ? '# NutUI React - Full Component Documentation' : '# NutUI React - 全部组件文档' - const parts = [title, '', `> ${SUMMARY}`, ''] + const summary = lang === 'enUS' ? SUMMARY_EN : SUMMARY + const parts = [title, '', `> ${summary}`, ''] for (const cat of meta.categories) { for (const id of cat.components) { const c = meta.components[id] From f34eda8158fad2ee4bbb153128161b4b7697f431 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 8 Jul 2026 22:29:15 +0800 Subject: [PATCH 05/21] fix: update URL handling in build-llms script - Replaced direct comparison of import.meta.url with pathToFileURL for improved URL handling. --- scripts/build-llms.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build-llms.mjs b/scripts/build-llms.mjs index 86c9e105c4..4f08e11ca9 100644 --- a/scripts/build-llms.mjs +++ b/scripts/build-llms.mjs @@ -6,7 +6,7 @@ // DO NOT manual edit the outputs. Run: npm run generate:llms import fs from 'fs' import path from 'path' -import { fileURLToPath } from 'url' +import { fileURLToPath, pathToFileURL } from 'url' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const ROOT = path.resolve(__dirname, '..') @@ -111,6 +111,6 @@ function main() { } // 仅作为脚本直接运行时执行 main,被 import 时不执行。 -if (import.meta.url === `file://${process.argv[1]}`) { +if (import.meta.url === pathToFileURL(process.argv[1]).href) { main() } From f1d61bee0ff3930dc64b1dca4196eb2b2a8ab019 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 9 Jul 2026 14:22:22 +0800 Subject: [PATCH 06/21] feat: add semantic documentation generation for components --- .gitignore | 2 + meta/semantic.json | 3672 +++++++++++++++++++++++++++++ package.json | 1 + scripts/build-llms.mjs | 40 + scripts/build-semantic.mjs | 289 +++ scripts/site/vite-plugin-llms.mjs | 30 +- 6 files changed, 4033 insertions(+), 1 deletion(-) create mode 100644 meta/semantic.json create mode 100644 scripts/build-semantic.mjs diff --git a/.gitignore b/.gitignore index f33bf263ff..768b50d9e0 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ node_modules /meta/llms.txt /meta/llms-full-cn.txt /meta/llms-full.txt +/meta/llms-semantic-cn.txt +/meta/llms-semantic.txt /release /libs /jd/upload.js diff --git a/meta/semantic.json b/meta/semantic.json new file mode 100644 index 0000000000..a5dee85940 --- /dev/null +++ b/meta/semantic.json @@ -0,0 +1,3672 @@ +{ + "schemaVersion": "1.0.0", + "libVersion": "4.0.0-beta.4", + "componentCount": 100, + "components": { + "button": { + "id": "button", + "name": "Button", + "cName": "按钮", + "classes": [ + "nut-button", + "nut-button-36", + "nut-button-36-children", + "nut-button-44", + "nut-button-44-children", + "nut-button-block", + "nut-button-children", + "nut-button-danger", + "nut-button-danger-children", + "nut-button-danger-dashed", + "nut-button-danger-dashed-disabled", + "nut-button-danger-disabled", + "nut-button-danger-none", + "nut-button-danger-none-disabled", + "nut-button-danger-outline", + "nut-button-danger-outline-disabled", + "nut-button-danger-solid-disabled", + "nut-button-dashed", + "nut-button-default", + "nut-button-default-dashed-disabled", + "nut-button-default-disabled", + "nut-button-default-none-disabled", + "nut-button-default-outline-disabled", + "nut-button-default-solid-disabled", + "nut-button-desc", + "nut-button-disabled", + "nut-button-disabled-gray", + "nut-button-golden", + "nut-button-golden-children", + "nut-button-golden-dashed", + "nut-button-golden-dashed-disabled", + "nut-button-golden-disabled", + "nut-button-golden-none", + "nut-button-golden-none-disabled", + "nut-button-golden-outline", + "nut-button-golden-outline-disabled", + "nut-button-golden-solid-disabled", + "nut-button-has-desc", + "nut-button-icononly", + "nut-button-info", + "nut-button-info-children", + "nut-button-info-dashed", + "nut-button-info-dashed-disabled", + "nut-button-info-disabled", + "nut-button-info-none", + "nut-button-info-none-disabled", + "nut-button-info-outline", + "nut-button-info-outline-disabled", + "nut-button-info-solid-disabled", + "nut-button-large", + "nut-button-large-children", + "nut-button-loading", + "nut-button-mini", + "nut-button-mini-children", + "nut-button-none", + "nut-button-normal", + "nut-button-outline", + "nut-button-primary", + "nut-button-primary-children", + "nut-button-primary-dashed", + "nut-button-primary-dashed-disabled", + "nut-button-primary-disabled", + "nut-button-primary-light", + "nut-button-primary-light-disabled", + "nut-button-primary-none", + "nut-button-primary-none-disabled", + "nut-button-primary-outline", + "nut-button-primary-outline-disabled", + "nut-button-primary-solid", + "nut-button-primary-solid-disabled", + "nut-button-round", + "nut-button-service", + "nut-button-service-children", + "nut-button-service-dashed", + "nut-button-service-dashed-disabled", + "nut-button-service-disabled", + "nut-button-service-none", + "nut-button-service-none-disabled", + "nut-button-service-outline", + "nut-button-service-outline-disabled", + "nut-button-service-solid-disabled", + "nut-button-small", + "nut-button-small-children", + "nut-button-solid", + "nut-button-square", + "nut-button-success", + "nut-button-success-children", + "nut-button-success-dashed", + "nut-button-success-dashed-disabled", + "nut-button-success-disabled", + "nut-button-success-none", + "nut-button-success-none-disabled", + "nut-button-success-outline", + "nut-button-success-outline-disabled", + "nut-button-success-solid-disabled", + "nut-button-text", + "nut-button-text-right", + "nut-button-title", + "nut-button-warning", + "nut-button-warning-children", + "nut-button-warning-dashed", + "nut-button-warning-dashed-disabled", + "nut-button-warning-disabled", + "nut-button-warning-none", + "nut-button-warning-none-disabled", + "nut-button-warning-outline", + "nut-button-warning-outline-disabled", + "nut-button-warning-solid-disabled", + "nut-button-wrap", + "nut-button-xlarge", + "nut-button-xlarge-children" + ], + "tokens": [ + { + "cssVar": "--nutui-button-border-radius", + "scssVar": "$button-border-radius", + "default": "$radius-s" + }, + { + "cssVar": "--nutui-button-border-width", + "scssVar": "$button-border-width", + "default": "scale-px(0.5px)" + }, + { + "cssVar": "--nutui-button-normal-padding", + "scssVar": "$button-normal-padding", + "default": "0px scale-px(12px)" + }, + { + "cssVar": "--nutui-button-default-height", + "scssVar": "$button-default-height", + "default": "scale-px(32px)" + }, + { + "cssVar": "--nutui-button-default-color", + "scssVar": "$button-default-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-button-default-padding", + "scssVar": "$button-default-padding", + "default": "0px scale-px(12px)" + }, + { + "cssVar": "--nutui-button-xlarge-height", + "scssVar": "$button-xlarge-height", + "default": "scale-px(48px)" + }, + { + "cssVar": "--nutui-button-xlarge-padding", + "scssVar": "$button-xlarge-padding", + "default": "0px scale-px(20px)" + }, + { + "cssVar": "--nutui-button-44-height", + "scssVar": "$button-44-height", + "default": "scale-px(44px)" + }, + { + "cssVar": "--nutui-button-44-padding", + "scssVar": "$button-44-padding", + "default": "0px scale-px(16px)" + }, + { + "cssVar": "--nutui-button-large-height", + "scssVar": "$button-large-height", + "default": "scale-px(40px)" + }, + { + "cssVar": "--nutui-button-large-padding", + "scssVar": "$button-large-padding", + "default": "0px scale-px(12px)" + }, + { + "cssVar": "--nutui-button-36-height", + "scssVar": "$button-36-height", + "default": "scale-px(36px)" + }, + { + "cssVar": "--nutui-button-36-padding", + "scssVar": "$button-36-padding", + "default": "0px scale-px(12px)" + }, + { + "cssVar": "--nutui-button-small-padding", + "scssVar": "$button-small-padding", + "default": "0px scale-px(8px)" + }, + { + "cssVar": "--nutui-button-small-height", + "scssVar": "$button-small-height", + "default": "scale-px(28px)" + }, + { + "cssVar": "--nutui-button-mini-padding", + "scssVar": "$button-mini-padding", + "default": "0px scale-px(6px)" + }, + { + "cssVar": "--nutui-button-mini-height", + "scssVar": "$button-mini-height", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-button-text-icon-margin", + "scssVar": "$button-text-icon-margin", + "default": "scale-px(4px)" + } + ] + }, + "cell": { + "id": "cell", + "name": "Cell", + "cName": "单元格", + "classes": [ + "nut-cell", + "nut-cell-clickable", + "nut-cell-description", + "nut-cell-divider", + "nut-cell-divider-inner", + "nut-cell-divider-rtl", + "nut-cell-extra", + "nut-cell-left", + "nut-cell-title" + ], + "tokens": [ + { + "cssVar": "--nutui-cell-title-color", + "scssVar": "$cell-title-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-cell-extra-color", + "scssVar": "$cell-extra-color", + "default": "$color-text" + }, + { + "cssVar": "--nutui-cell-border-radius", + "scssVar": "$cell-border-radius", + "default": "scale-px(6px)" + }, + { + "cssVar": "--nutui-cell-padding", + "scssVar": "$cell-padding", + "default": "scale-px(13px) scale-px(16px)" + }, + { + "cssVar": "--nutui-cell-line-height", + "scssVar": "$cell-line-height", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-cell-divider-right", + "scssVar": "$cell-divider-right", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-cell-divider-left", + "scssVar": "$cell-divider-left", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-cell-group-wrap-margin", + "scssVar": "$cell-group-wrap-margin", + "default": "scale-px(10px)" + } + ] + }, + "cellgroup": { + "id": "cellgroup", + "name": "CellGroup", + "cName": "单元格", + "classes": [ + "nut-cell-group", + "nut-cell-group-description", + "nut-cell-group-item", + "nut-cell-group-title", + "nut-cell-group-wrap" + ], + "tokens": [] + }, + "icon": { + "id": "icon", + "name": "Icon", + "cName": "图标", + "classes": [ + "nut-icon", + "nut-icon-ArrowLeft", + "nut-icon-ArrowRadius", + "nut-icon-ArrowRight", + "nut-icon-Link", + "nut-icon-checklist" + ], + "tokens": [ + { + "cssVar": "--nutui-icon-size-6", + "scssVar": "$icon-size-6", + "default": "scale-icon-px(6px)" + }, + { + "cssVar": "--nutui-icon-size-8", + "scssVar": "$icon-size-8", + "default": "scale-icon-px(8px)" + }, + { + "cssVar": "--nutui-icon-size-10", + "scssVar": "$icon-size-10", + "default": "scale-icon-px(10px)" + }, + { + "cssVar": "--nutui-icon-size-11", + "scssVar": "$icon-size-11", + "default": "scale-icon-px(11px)" + }, + { + "cssVar": "--nutui-icon-size-12", + "scssVar": "$icon-size-12", + "default": "scale-icon-px(12px)" + }, + { + "cssVar": "--nutui-icon-size-16", + "scssVar": "$icon-size-16", + "default": "scale-icon-px(16px)" + }, + { + "cssVar": "--nutui-icon-size-18", + "scssVar": "$icon-size-18", + "default": "scale-icon-px(18px)" + }, + { + "cssVar": "--nutui-icon-size-20", + "scssVar": "$icon-size-20", + "default": "scale-icon-px(20px)" + }, + { + "cssVar": "--nutui-icon-size-22", + "scssVar": "$icon-size-22", + "default": "scale-icon-px(22px)" + }, + { + "cssVar": "--nutui-icon-height", + "scssVar": "$icon-height", + "default": "$icon-size-20" + }, + { + "cssVar": "--nutui-icon-width", + "scssVar": "$icon-width", + "default": "$icon-size-20" + }, + { + "cssVar": "--nutui-icon-line-height", + "scssVar": "$icon-line-height", + "default": "$icon-size-20" + } + ] + }, + "image": { + "id": "image", + "name": "Image", + "cName": "图片", + "classes": [ + "nut-image", + "nut-image-basic", + "nut-image-default", + "nut-image-error", + "nut-image-loading", + "nut-image-round", + "nut-img-error", + "nut-img-loading" + ], + "tokens": [] + }, + "overlay": { + "id": "overlay", + "name": "Overlay", + "cName": "遮罩层", + "classes": [ + "nut-overlay", + "nut-overlay-slide-appear-active", + "nut-overlay-slide-enter-active", + "nut-overlay-slide-exit-active" + ], + "tokens": [ + { + "cssVar": "--nutui-overlay-bg-color", + "scssVar": "$overlay-bg-color", + "default": "$color-mask" + } + ] + }, + "divider": { + "id": "divider", + "name": "Divider", + "cName": "分割线", + "classes": [ + "nut-divider", + "nut-divider-after", + "nut-divider-before", + "nut-divider-center-after", + "nut-divider-center-before", + "nut-divider-left-after", + "nut-divider-left-before", + "nut-divider-right-after", + "nut-divider-right-before", + "nut-divider-rtl-after", + "nut-divider-rtl-before", + "nut-divider-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-divider-margin", + "scssVar": "$divider-margin", + "default": "scale-px(16px) 0" + }, + { + "cssVar": "--nutui-divider-text-color", + "scssVar": "$divider-text-color", + "default": "$color-text" + }, + { + "cssVar": "--nutui-divider-line-height", + "scssVar": "$divider-line-height", + "default": "scale-px(1px)" + }, + { + "cssVar": "--nutui-divider-spacing", + "scssVar": "$divider-spacing", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-divider-side-width", + "scssVar": "$divider-side-width", + "default": "10%" + }, + { + "cssVar": "--nutui-divider-vertical-height", + "scssVar": "$divider-vertical-height", + "default": "scale-px(12px)" + }, + { + "cssVar": "--nutui-divider-vertical-margin", + "scssVar": "$divider-vertical-margin", + "default": "0 scale-px(8px)" + } + ] + }, + "grid": { + "id": "grid", + "name": "Grid", + "cName": "宫格", + "classes": [ + "nut-grid", + "nut-grid-border" + ], + "tokens": [ + { + "cssVar": "--nutui-grid-border-width", + "scssVar": "$grid-border-width", + "default": "0px" + }, + { + "cssVar": "--nutui-grid-border-color", + "scssVar": "$grid-border-color", + "default": "$color-border" + }, + { + "cssVar": "--nutui-grid-item-text-margin", + "scssVar": "$grid-item-text-margin", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-grid-item-text-color", + "scssVar": "$grid-item-text-color", + "default": "$color-title" + } + ] + }, + "griditem": { + "id": "griditem", + "name": "GridItem", + "cName": "宫格子组件", + "classes": [ + "nut-grid-item", + "nut-grid-item-content", + "nut-grid-item-content-border", + "nut-grid-item-content-center", + "nut-grid-item-content-clickable", + "nut-grid-item-content-horizontal", + "nut-grid-item-content-horizontal-reverse", + "nut-grid-item-content-reverse", + "nut-grid-item-content-square", + "nut-grid-item-content-surround", + "nut-grid-item-text", + "nut-grid-item-text-horizontal", + "nut-grid-item-text-horizontal-reverse", + "nut-grid-item-text-reverse" + ], + "tokens": [] + }, + "col": { + "id": "col", + "name": "Col", + "cName": "列", + "classes": [ + "nut-col", + "nut-col-1", + "nut-col-10", + "nut-col-11", + "nut-col-12", + "nut-col-13", + "nut-col-14", + "nut-col-15", + "nut-col-16", + "nut-col-17", + "nut-col-18", + "nut-col-19", + "nut-col-2", + "nut-col-20", + "nut-col-21", + "nut-col-22", + "nut-col-23", + "nut-col-24", + "nut-col-3", + "nut-col-4", + "nut-col-5", + "nut-col-6", + "nut-col-7", + "nut-col-8", + "nut-col-9", + "nut-col-gutter", + "nut-col-offset-1", + "nut-col-offset-10", + "nut-col-offset-11", + "nut-col-offset-12", + "nut-col-offset-13", + "nut-col-offset-14", + "nut-col-offset-15", + "nut-col-offset-16", + "nut-col-offset-17", + "nut-col-offset-18", + "nut-col-offset-19", + "nut-col-offset-2", + "nut-col-offset-20", + "nut-col-offset-21", + "nut-col-offset-22", + "nut-col-offset-23", + "nut-col-offset-24", + "nut-col-offset-3", + "nut-col-offset-4", + "nut-col-offset-5", + "nut-col-offset-6", + "nut-col-offset-7", + "nut-col-offset-8", + "nut-col-offset-9" + ], + "tokens": [] + }, + "row": { + "id": "row", + "name": "Row", + "cName": "行", + "classes": [ + "nut-row", + "nut-row-align-center", + "nut-row-align-flex-end", + "nut-row-align-flex-start", + "nut-row-flex", + "nut-row-flex-nowrap", + "nut-row-flex-reverse", + "nut-row-flex-wrap", + "nut-row-justify-center", + "nut-row-justify-end", + "nut-row-justify-space-around", + "nut-row-justify-space-between" + ], + "tokens": [ + { + "cssVar": "--nutui-row-content-color", + "scssVar": "$row-content-color", + "default": "#fff" + }, + { + "cssVar": "--nutui-row-content-height", + "scssVar": "$row-content-height", + "default": "scale-px(50px)" + }, + { + "cssVar": "--nutui-row-content-line-height", + "scssVar": "$row-content-line-height", + "default": "scale-px(40px)" + } + ] + }, + "safearea": { + "id": "safearea", + "name": "SafeArea", + "cName": "安全区", + "classes": [ + "nut-safe-area", + "nut-safe-area-position-bottom", + "nut-safe-area-position-top" + ], + "tokens": [] + }, + "space": { + "id": "space", + "name": "Space", + "cName": "间距", + "classes": [ + "nut-space", + "nut-space-align-baseline", + "nut-space-align-center", + "nut-space-align-end", + "nut-space-align-start", + "nut-space-horizontal", + "nut-space-horizontal-item", + "nut-space-horizontal-item-last", + "nut-space-horizontal-wrap", + "nut-space-horizontal-wrap-item", + "nut-space-item", + "nut-space-justify-around", + "nut-space-justify-between", + "nut-space-justify-center", + "nut-space-justify-end", + "nut-space-justify-evenly", + "nut-space-justify-start", + "nut-space-justify-stretch", + "nut-space-vertical", + "nut-space-vertical-item", + "nut-space-vertical-item-last" + ], + "tokens": [ + { + "cssVar": "--nutui-space-gap", + "scssVar": "$space-gap", + "default": "scale-px(8px)" + } + ] + }, + "sticky": { + "id": "sticky", + "name": "Sticky", + "cName": "粘性布局", + "classes": [ + "nut-sticky-fixed" + ], + "tokens": [] + }, + "backtop": { + "id": "backtop", + "name": "BackTop", + "cName": "返回顶部", + "classes": [ + "nut-backtop", + "nut-backtop-show" + ], + "tokens": [] + }, + "elevator": { + "id": "elevator", + "name": "Elevator", + "cName": "电梯楼层", + "classes": [ + "nut-elevator", + "nut-elevator-bars", + "nut-elevator-bars-inner", + "nut-elevator-bars-inner-item", + "nut-elevator-bars-inner-item-active", + "nut-elevator-code-current", + "nut-elevator-horizontal", + "nut-elevator-list", + "nut-elevator-list-fixed", + "nut-elevator-list-fixed-title", + "nut-elevator-list-inner", + "nut-elevator-list-item", + "nut-elevator-list-item-code", + "nut-elevator-list-item-name", + "nut-elevator-list-item-name-highcolor", + "nut-elevator-list-item-sublist", + "nut-elevator-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-elevator-list-bg-color", + "scssVar": "$elevator-list-bg-color", + "default": "$white" + }, + { + "cssVar": "--nutui-elevator-list-color", + "scssVar": "$elevator-list-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-elevator-bars-right", + "scssVar": "$elevator-bars-right", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-elevator-bars-top", + "scssVar": "$elevator-bars-top", + "default": "50%" + }, + { + "cssVar": "--nutui-elevator-bars-z-index", + "scssVar": "$elevator-bars-z-index", + "default": "1" + } + ] + }, + "fixednav": { + "id": "fixednav", + "name": "FixedNav", + "cName": "悬浮导航", + "classes": [ + "nut-fixednav", + "nut-fixednav-btn", + "nut-fixednav-left", + "nut-fixednav-list", + "nut-fixednav-list-image", + "nut-fixednav-list-item", + "nut-fixednav-list-text", + "nut-fixednav-right" + ], + "tokens": [ + { + "cssVar": "--nutui-fixednav-color", + "scssVar": "$fixednav-color", + "default": "#1a1a1a" + }, + { + "cssVar": "--nutui-fixednav-index", + "scssVar": "$fixednav-index", + "default": "900" + } + ] + }, + "hoverbutton": { + "id": "hoverbutton", + "name": "HoverButton", + "cName": "悬浮按钮", + "classes": [ + "nut-hoverbutton", + "nut-hoverbutton-container", + "nut-hoverbutton-container-rtl" + ], + "tokens": [ + { + "cssVar": "--nutui-hoverbutton-spacing", + "scssVar": "$hoverbutton-spacing", + "default": "$spacing-base" + }, + { + "cssVar": "--nutui-hoverbutton-item-size", + "scssVar": "$hoverbutton-item-size", + "default": "scale-px(40px)" + } + ] + }, + "hoverbuttonitem": { + "id": "hoverbuttonitem", + "name": "HoverButtonItem", + "cName": "悬浮按钮子组件", + "classes": [ + "nut-hoverbutton-item-container", + "nut-hoverbutton-item-container-active", + "nut-hoverbutton-item-container-harmony", + "nut-hoverbutton-item-container-icontext", + "nut-hoverbutton-item-icon", + "nut-hoverbutton-item-text", + "nut-hoverbutton-item-text-icon" + ], + "tokens": [] + }, + "navbar": { + "id": "navbar", + "name": "NavBar", + "cName": "头部导航", + "classes": [ + "nut-navbar", + "nut-navbar-fixed", + "nut-navbar-left", + "nut-navbar-left-back", + "nut-navbar-left-hidden", + "nut-navbar-left-maxwidth", + "nut-navbar-left-rtl", + "nut-navbar-placeholder", + "nut-navbar-right", + "nut-navbar-right-maxwidth", + "nut-navbar-right-rtl", + "nut-navbar-rtl", + "nut-navbar-safe-area-inset-top", + "nut-navbar-title", + "nut-navbar-title-center", + "nut-navbar-title-wrapper" + ], + "tokens": [ + { + "cssVar": "--nutui-navbar-width", + "scssVar": "$navbar-width", + "default": "100%" + }, + { + "cssVar": "--nutui-navbar-height", + "scssVar": "$navbar-height", + "default": "scale-px(44px)" + }, + { + "cssVar": "--nutui-navbar-margin-bottom", + "scssVar": "$navbar-margin-bottom", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-navbar-background", + "scssVar": "$navbar-background", + "default": "$white" + }, + { + "cssVar": "--nutui-navbar-box-shadow", + "scssVar": "$navbar-box-shadow", + "default": "none" + }, + { + "cssVar": "--nutui-navbar-color", + "scssVar": "$navbar-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-navbar-font-size", + "scssVar": "$navbar-font-size", + "default": "$font-size-base" + } + ] + }, + "sidebar": { + "id": "sidebar", + "name": "SideBar", + "cName": "侧边栏导航", + "classes": [ + "nut-sidebar", + "nut-sidebar-content", + "nut-sidebar-content-wrap", + "nut-sidebar-list", + "nut-sidebar-titles", + "nut-sidebar-titles-item", + "nut-sidebar-titles-item-active", + "nut-sidebar-titles-item-disabled", + "nut-sidebar-titles-item-text", + "nut-sidebar-titles-scrollable" + ], + "tokens": [ + { + "cssVar": "--nutui-sidebar-border-radius", + "scssVar": "$sidebar-border-radius", + "default": "0" + }, + { + "cssVar": "--nutui-sidebar-width", + "scssVar": "$sidebar-width", + "default": "scale-px(104px)" + }, + { + "cssVar": "--nutui-sidebar-max-width", + "scssVar": "$sidebar-max-width", + "default": "scale-px(128px)" + }, + { + "cssVar": "--nutui-sidebar-title-height", + "scssVar": "$sidebar-title-height", + "default": "scale-px(52px)" + }, + { + "cssVar": "--nutui-sidebar-item-background", + "scssVar": "$sidebar-item-background", + "default": "$white" + }, + { + "cssVar": "--nutui-sidebar-item-padding", + "scssVar": "$sidebar-item-padding", + "default": "scale-px(24px) scale-px(20px)" + } + ] + }, + "sidebaritem": { + "id": "sidebaritem", + "name": "SideBarItem", + "cName": "侧边栏导航子组件", + "classes": [ + "nut-sidebaritem" + ], + "tokens": [] + }, + "tabbar": { + "id": "tabbar", + "name": "Tabbar", + "cName": "标签栏", + "classes": [ + "nut-tabbar", + "nut-tabbar-fixed", + "nut-tabbar-wrap", + "nut-tabbar-wrap-2", + "nut-tabbar-wrap-3", + "nut-tabbar-wrap-horizontal" + ], + "tokens": [ + { + "cssVar": "--nutui-tabbar-height", + "scssVar": "$tabbar-height", + "default": "scale-px(46px)" + }, + { + "cssVar": "--nutui-tabbar-active-color", + "scssVar": "$tabbar-active-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-tabbar-border-top", + "scssVar": "$tabbar-border-top", + "default": "0" + }, + { + "cssVar": "--nutui-tabbar-border-bottom", + "scssVar": "$tabbar-border-bottom", + "default": "0" + }, + { + "cssVar": "--nutui-tabbar-box-shadow", + "scssVar": "$tabbar-box-shadow", + "default": "none" + }, + { + "cssVar": "--nutui-tabbar-text-line-height", + "scssVar": "$tabbar-text-line-height", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-tabbar-text-margin-top", + "scssVar": "$tabbar-text-margin-top", + "default": "scale-px(4px)" + } + ] + }, + "tabbaritem": { + "id": "tabbaritem", + "name": "TabbarItem", + "cName": "标签栏子组件", + "classes": [ + "nut-tabbar-item", + "nut-tabbar-item-active", + "nut-tabbar-item-large", + "nut-tabbar-item-text" + ], + "tokens": [] + }, + "tabpane": { + "id": "tabpane", + "name": "TabPane", + "cName": "选项卡切换子组件", + "classes": [ + "nut-tabpane" + ], + "tokens": [] + }, + "tabs": { + "id": "tabs", + "name": "Tabs", + "cName": "选项卡切换", + "classes": [ + "nut-tabs", + "nut-tabs-content", + "nut-tabs-content-wrap", + "nut-tabs-ellipsis", + "nut-tabs-horizontal", + "nut-tabs-list", + "nut-tabs-titles", + "nut-tabs-titles-button", + "nut-tabs-titles-card", + "nut-tabs-titles-divider", + "nut-tabs-titles-item", + "nut-tabs-titles-item-active", + "nut-tabs-titles-item-disabled", + "nut-tabs-titles-item-left", + "nut-tabs-titles-item-line", + "nut-tabs-titles-item-line-vertical", + "nut-tabs-titles-item-right", + "nut-tabs-titles-item-smile", + "nut-tabs-titles-item-smile-icon", + "nut-tabs-titles-item-text", + "nut-tabs-titles-left", + "nut-tabs-titles-line", + "nut-tabs-titles-right", + "nut-tabs-titles-simple", + "nut-tabs-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-tabs-titles-height", + "scssVar": "$tabs-titles-height", + "default": "scale-px(44px)" + }, + { + "cssVar": "--nutui-tabs-titles-gap", + "scssVar": "$tabs-titles-gap", + "default": "scale-px(12px)" + }, + { + "cssVar": "--nutui-tabs-tab-line-width", + "scssVar": "$tabs-tab-line-width", + "default": "scale-px(12px)" + }, + { + "cssVar": "--nutui-tabs-tab-line-height", + "scssVar": "$tabs-tab-line-height", + "default": "scale-px(2px)" + }, + { + "cssVar": "--nutui-tabs-tab-line-color", + "scssVar": "$tabs-tab-line-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-tabs-line-bottom", + "scssVar": "$tabs-tab-line-bottom", + "default": "15%" + }, + { + "cssVar": "--nutui-tabs-tab-line-opacity", + "scssVar": "$tabs-tab-line-opacity", + "default": "1" + }, + { + "cssVar": "--nutui-tabs-tabpane-padding", + "scssVar": "$tabs-tabpane-padding", + "default": "scale-px(24px) scale-px(20px)" + } + ] + }, + "address": { + "id": "address", + "name": "Address", + "cName": "地址", + "classes": [ + "nut-address-elevator", + "nut-address-exist", + "nut-address-exist-item", + "nut-address-exist-item-info", + "nut-address-footer", + "nut-address-footer-btn", + "nut-address-hotlist", + "nut-address-hotlist-item", + "nut-address-selected", + "nut-address-selected-border", + "nut-address-selected-item", + "nut-address-title" + ], + "tokens": [] + }, + "calendar": { + "id": "calendar", + "name": "Calendar", + "cName": "日历", + "classes": [ + "nut-calendar", + "nut-calendar-content", + "nut-calendar-day", + "nut-calendar-day-active", + "nut-calendar-day-choose", + "nut-calendar-day-choose-disabled", + "nut-calendar-day-day", + "nut-calendar-day-disabled", + "nut-calendar-day-info", + "nut-calendar-day-info-bottom", + "nut-calendar-day-info-curr", + "nut-calendar-day-info-top", + "nut-calendar-days", + "nut-calendar-footer", + "nut-calendar-header", + "nut-calendar-header-buttons", + "nut-calendar-month", + "nut-calendar-month-title", + "nut-calendar-pannel", + "nut-calendar-popup", + "nut-calendar-sub-title", + "nut-calendar-taro", + "nut-calendar-title", + "nut-calendar-week-item", + "nut-calendar-weeks" + ], + "tokens": [ + { + "cssVar": "--nutui-calendar-header-height", + "scssVar": "$calendar-header-height", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-calendar-day-width", + "scssVar": "$calendar-day-width", + "default": "14.28%" + }, + { + "cssVar": "--nutui-calendar-day-height", + "scssVar": "$calendar-day-height", + "default": "scale-px(60px)" + } + ] + }, + "calendarcard": { + "id": "calendarcard", + "name": "CalendarCard", + "cName": "日历卡片", + "classes": [ + "nut-calendarcard", + "nut-calendarcard-day", + "nut-calendarcard-day-bottom", + "nut-calendarcard-day-inner", + "nut-calendarcard-day-top", + "nut-calendarcard-days", + "nut-calendarcard-header", + "nut-calendarcard-header-left", + "nut-calendarcard-header-right", + "nut-calendarcard-icon" + ], + "tokens": [] + }, + "cascader": { + "id": "cascader", + "name": "Cascader", + "cName": "级联选择器", + "classes": [ + "nut-cascader", + "nut-cascader-item", + "nut-cascader-item-icon-check", + "nut-cascader-item-title", + "nut-cascader-pane" + ], + "tokens": [ + { + "cssVar": "--nutui-cascader-font-size", + "scssVar": "$cascader-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-cascader-pane-height", + "scssVar": "$cascader-pane-height", + "default": "scale-px(342px)" + }, + { + "cssVar": "--nutui-cascader-pane-paddingTop", + "scssVar": "$cascader-pane-paddingTop", + "default": "scale-px(10px)" + }, + { + "cssVar": "--nutui-cascader-bar-line-height", + "scssVar": "$cascader-bar-line-height", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-cascader-bar-color", + "scssVar": "$cascader-bar-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-cascader-item-height", + "scssVar": "$cascader-item-height", + "default": "scale-px(40px)" + }, + { + "cssVar": "--nutui-cascader-item-padding", + "scssVar": "$cascader-item-padding", + "default": "scale-px(10px) scale-px(20px)" + }, + { + "cssVar": "--nutui-cascader-item-margin", + "scssVar": "$cascader-item-margin", + "default": "0px" + }, + { + "cssVar": "--nutui-cascader-item-color", + "scssVar": "$cascader-item-color", + "default": "$color-title" + } + ] + }, + "checkbox": { + "id": "checkbox", + "name": "Checkbox", + "cName": "复选按钮", + "classes": [ + "nut-checkbox", + "nut-checkbox-button", + "nut-checkbox-button-active", + "nut-checkbox-button-disabled", + "nut-checkbox-button-icon", + "nut-checkbox-button-icon-checked", + "nut-checkbox-icon", + "nut-checkbox-icon-checked", + "nut-checkbox-icon-disabled", + "nut-checkbox-icon-indeterminate", + "nut-checkbox-icon-wrap", + "nut-checkbox-label", + "nut-checkbox-label-disabled", + "nut-checkbox-list-item", + "nut-checkbox-nolabel", + "nut-checkbox-reverse" + ], + "tokens": [ + { + "cssVar": "--nutui-checkbox-label-color", + "scssVar": "$checkbox-label-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-checkbox-list-padding", + "scssVar": "$checkbox-list-padding", + "default": "0 0 0 scale-px(12px)" + } + ] + }, + "checkboxgroup": { + "id": "checkboxgroup", + "name": "CheckboxGroup", + "cName": "多选按钮组", + "classes": [ + "nut-checkboxgroup", + "nut-checkboxgroup-horizontal", + "nut-checkboxgroup-list", + "nut-checkboxgroup-vertical" + ], + "tokens": [] + }, + "datepickerview": { + "id": "datepickerview", + "name": "DatePickerView", + "cName": "日期选择器视图", + "classes": [ + "nut-datepickerview" + ], + "tokens": [] + }, + "form": { + "id": "form", + "name": "Form", + "cName": "表单", + "classes": [], + "tokens": [ + { + "cssVar": "--nutui-form-item-label-width", + "scssVar": "$form-item-label-width", + "default": "scale-px(90px)" + }, + { + "cssVar": "--nutui-form-item-tip-text-align", + "scssVar": "$form-item-tip-text-align", + "default": "left" + } + ] + }, + "formitem": { + "id": "formitem", + "name": "FormItem", + "cName": "表单项", + "classes": [ + "nut-form-item", + "nut-form-item-body", + "nut-form-item-body-slots", + "nut-form-item-body-tips", + "nut-form-item-body-top", + "nut-form-item-disabled", + "nut-form-item-label", + "nut-form-item-label-left", + "nut-form-item-label-left-required", + "nut-form-item-label-right", + "nut-form-item-label-right-required", + "nut-form-item-label-top", + "nut-form-item-labeltxt", + "nut-form-item-tips", + "nut-form-item-top" + ], + "tokens": [] + }, + "input": { + "id": "input", + "name": "Input", + "cName": "输入框", + "classes": [ + "nut-input", + "nut-input-container", + "nut-input-disabled", + "nut-input-native", + "nut-input-placeholder", + "nut-input-readonly", + "nut-input-text" + ], + "tokens": [ + { + "cssVar": "--nutui-input-border-bottom", + "scssVar": "$input-border-bottom", + "default": "$color-border" + }, + { + "cssVar": "--nutui-input-font-size", + "scssVar": "$input-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-input-lineheight", + "scssVar": "$input-lineheight", + "default": "$font-size-xl" + }, + { + "cssVar": "--nutui-input-border-radius", + "scssVar": "$input-border-radius", + "default": "$radius-s" + }, + { + "cssVar": "--nutui-input-color", + "scssVar": "$input-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-input-padding", + "scssVar": "$input-padding", + "default": "scale-px(12px)" + } + ] + }, + "inputnumber": { + "id": "inputnumber", + "name": "InputNumber", + "cName": "数字输入框", + "classes": [ + "nut-inputnumber", + "nut-inputnumber-add", + "nut-inputnumber-divider", + "nut-inputnumber-icon", + "nut-inputnumber-icon-disabled", + "nut-inputnumber-icon-minus", + "nut-inputnumber-icon-plus", + "nut-inputnumber-input", + "nut-inputnumber-input-disabled", + "nut-inputnumber-minus" + ], + "tokens": [ + { + "cssVar": "--nutui-inputnumber-input-width", + "scssVar": "$inputnumber-input-width", + "default": "scale-px(32px)" + }, + { + "cssVar": "--nutui-inputnumber-input-height", + "scssVar": "$inputnumber-input-height", + "default": "scale-px(28px)" + }, + { + "cssVar": "--nutui-inputnumber-input-border", + "scssVar": "$inputnumber-input-border", + "default": "0" + }, + { + "cssVar": "--nutui-inputnumber-input-margin", + "scssVar": "$inputnumber-input-margin", + "default": "1px" + }, + { + "cssVar": "--nutui-inputnumber-button-width", + "scssVar": "$inputnumber-button-width", + "default": "scale-px(28px)" + }, + { + "cssVar": "--nutui-inputnumber-divider-width", + "scssVar": "$inputnumber-divider-width", + "default": "1px" + }, + { + "cssVar": "--nutui-inputnumber-input-font-family", + "scssVar": "$inputnumber-input-font-family", + "default": "JDZH" + }, + { + "cssVar": "--nutui-inputnumber-icon-size", + "scssVar": "$inputnumber-icon-size", + "default": "scale-px(8px)" + } + ] + }, + "menu": { + "id": "menu", + "name": "Menu", + "cName": "菜单", + "classes": [ + "nut-menu", + "nut-menu-bar", + "nut-menu-container", + "nut-menu-container-content", + "nut-menu-container-content_fixed", + "nut-menu-container-down-enter", + "nut-menu-container-down-enter-done", + "nut-menu-container-down-exit", + "nut-menu-container-down-exit-done", + "nut-menu-container-item", + "nut-menu-container-item-icon", + "nut-menu-container-overlay", + "nut-menu-container-up-enter", + "nut-menu-container-up-enter-done", + "nut-menu-container-up-exit", + "nut-menu-container-up-exit-done", + "nut-menu-container-wrap", + "nut-menu-container-wrap-up", + "nut-menu-placeholder-element", + "nut-menu-title", + "nut-menu-title-icon", + "nut-menu-title-text" + ], + "tokens": [ + { + "cssVar": "--nutui-menu-scroll-fixed-top", + "scssVar": "$menu-scroll-fixed-top", + "default": "0" + }, + { + "cssVar": "--nutui-menu-bar-line-height", + "scssVar": "$menu-bar-line-height", + "default": "scale-px(48px)" + }, + { + "cssVar": "--nutui-menu-bar-opened-z-index", + "scssVar": "$menu-bar-opened-z-index", + "default": "1000" + }, + { + "cssVar": "--nutui-menu-title-padding", + "scssVar": "$menu-title-padding", + "default": "0 scale-px(8px)" + }, + { + "cssVar": "--nutui-menu-title-color", + "scssVar": "$menu-title-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-menu-container-z-index", + "scssVar": "$menu-container-z-index", + "default": "1000" + }, + { + "cssVar": "--nutui-menu-content-padding", + "scssVar": "$menu-content-padding", + "default": "scale-px(12px) scale-px(24px)" + }, + { + "cssVar": "--nutui-menu-content-max-height", + "scssVar": "$menu-content-max-height", + "default": "scale-px(214px)" + }, + { + "cssVar": "--nutui-menu-item-padding", + "scssVar": "$menu-item-padding", + "default": "scale-px(12px) 0" + }, + { + "cssVar": "--nutui-menu-item-icon-margin", + "scssVar": "$menu-item-icon-margin", + "default": "scale-px(8px)" + } + ] + }, + "numberkeyboard": { + "id": "numberkeyboard", + "name": "NumberKeyboard", + "cName": "数字键盘", + "classes": [ + "nut-numberkeyboard", + "nut-numberkeyboard-body", + "nut-numberkeyboard-body-keys", + "nut-numberkeyboard-body-wrapper", + "nut-numberkeyboard-close-icon", + "nut-numberkeyboard-delete-icon", + "nut-numberkeyboard-header", + "nut-numberkeyboard-header-close", + "nut-numberkeyboard-header-title", + "nut-numberkeyboard-sidebar" + ], + "tokens": [] + }, + "picker": { + "id": "picker", + "name": "Picker", + "cName": "选择器", + "classes": [ + "nut-picker", + "nut-picker-cancel-btn", + "nut-picker-confirm-btn", + "nut-picker-control", + "nut-picker-panel", + "nut-picker-title" + ], + "tokens": [ + { + "cssVar": "--nutui-picker-item-height", + "scssVar": "$picker-item-height", + "default": "scale-px(36px)" + } + ] + }, + "pickerview": { + "id": "pickerview", + "name": "PickerView", + "cName": "选择器视图", + "classes": [ + "nut-pickerview", + "nut-pickerview-indicator", + "nut-pickerview-list", + "nut-pickerview-mask", + "nut-pickerview-roller", + "nut-pickerview-roller-item", + "nut-pickerview-roller-item-hidden", + "nut-pickerview-roller-item-tiled", + "nut-pickerview-roller-placeholder" + ], + "tokens": [] + }, + "radio": { + "id": "radio", + "name": "Radio", + "cName": "单选按钮", + "classes": [ + "nut-radio", + "nut-radio-button", + "nut-radio-button-active", + "nut-radio-button-disabled", + "nut-radio-icon", + "nut-radio-icon-checked", + "nut-radio-icon-disabled", + "nut-radio-label", + "nut-radio-label-disabled", + "nut-radio-nolabel", + "nut-radio-reverse" + ], + "tokens": [ + { + "cssVar": "--nutui-radio-label-color", + "scssVar": "$radio-label-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-radio-label-margin-left", + "scssVar": "$radio-label-margin-left", + "default": "scale-px(4px)" + }, + { + "cssVar": "--nutui-radio-button-padding", + "scssVar": "$radio-button-padding", + "default": "scale-px(5px) scale-px(18px)" + } + ] + }, + "radiogroup": { + "id": "radiogroup", + "name": "RadioGroup", + "cName": "单选按钮组", + "classes": [ + "nut-radiogroup", + "nut-radiogroup-horizontal", + "nut-radiogroup-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-radiogroup-radio-margin", + "scssVar": "$radiogroup-radio-margin", + "default": "scale-px(20px)" + } + ] + }, + "range": { + "id": "range", + "name": "Range", + "cName": "区间选择器", + "classes": [ + "nut-range", + "nut-range-bar", + "nut-range-bar-animate", + "nut-range-button", + "nut-range-button-number", + "nut-range-button-wrapper", + "nut-range-button-wrapper-left", + "nut-range-button-wrapper-right", + "nut-range-container", + "nut-range-container-native", + "nut-range-disabled", + "nut-range-mark", + "nut-range-mark-text", + "nut-range-mark-text-wrapper", + "nut-range-max", + "nut-range-min", + "nut-range-tick", + "nut-range-tick-active", + "nut-range-vertical", + "nut-range-vertical-button-number", + "nut-range-vertical-button-wrapper", + "nut-range-vertical-button-wrapper-left", + "nut-range-vertical-button-wrapper-right", + "nut-range-vertical-container", + "nut-range-vertical-mark", + "nut-range-vertical-mark-hm", + "nut-range-vertical-mark-text", + "nut-range-vertical-mark-text-wrapper", + "nut-range-vertical-tick", + "nut-range-vertical-tick-active" + ], + "tokens": [ + { + "cssVar": "--nutui-range-color", + "scssVar": "$range-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-range-height", + "scssVar": "$range-height", + "default": "scale-px(4px)" + }, + { + "cssVar": "--nutui-range-margin", + "scssVar": "$range-margin", + "default": "scale-px(15px)" + }, + { + "cssVar": "--nutui-range-active-color", + "scssVar": "$range-active-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-range-button-width", + "scssVar": "$range-button-width", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-range-button-height", + "scssVar": "$range-button-height", + "default": "scale-px(24px)" + } + ] + }, + "rate": { + "id": "rate", + "name": "Rate", + "cName": "评分", + "classes": [ + "nut-rate", + "nut-rate-horizontal", + "nut-rate-item", + "nut-rate-item-half", + "nut-rate-item-icon", + "nut-rate-item-icon-animate", + "nut-rate-item-icon-disabled", + "nut-rate-item-icon-half", + "nut-rate-item-large", + "nut-rate-item-normal", + "nut-rate-item-small", + "nut-rate-label", + "nut-rate-label-large", + "nut-rate-label-normal", + "nut-rate-label-small", + "nut-rate-labels", + "nut-rate-labels-item", + "nut-rate-labels-large", + "nut-rate-labels-normal", + "nut-rate-labels-small", + "nut-rate-list", + "nut-rate-score", + "nut-rate-score-disabled", + "nut-rate-score-large", + "nut-rate-score-normal", + "nut-rate-score-small", + "nut-rate-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-rate-item-margin", + "scssVar": "$rate-item-margin", + "default": "scale-px(4px)" + }, + { + "cssVar": "--nutui-rate-icon-color", + "scssVar": "$rate-icon-color", + "default": "$color-primary-icon" + }, + { + "cssVar": "--nutui-rate-icon-size", + "scssVar": "$rate-icon-size", + "default": "scale-font-px(16px)" + }, + { + "cssVar": "--nutui-rate-font-color", + "scssVar": "$rate-font-color", + "default": "$color-primary-icon" + }, + { + "cssVar": "--nutui-rate-font-size", + "scssVar": "$rate-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-rate-font-size-large", + "scssVar": "$rate-font-size-large", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-rate-font-size-small", + "scssVar": "$rate-font-size-small", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-rate-label-color", + "scssVar": "$rate-label-color", + "default": "$color-text-disabled" + } + ] + }, + "searchbar": { + "id": "searchbar", + "name": "SearchBar", + "cName": "搜索栏", + "classes": [ + "nut-searchbar", + "nut-searchbar-clear", + "nut-searchbar-content", + "nut-searchbar-disabled", + "nut-searchbar-focus", + "nut-searchbar-icon", + "nut-searchbar-input", + "nut-searchbar-input-box", + "nut-searchbar-left", + "nut-searchbar-leftin", + "nut-searchbar-right", + "nut-searchbar-rightin", + "nut-searchbar-round", + "nut-searchbar-value", + "nut-searchbar-values" + ], + "tokens": [ + { + "cssVar": "--nutui-searchbar-width", + "scssVar": "$searchbar-width", + "default": "100%" + }, + { + "cssVar": "--nutui-searchbar-padding", + "scssVar": "$searchbar-padding", + "default": "scale-px(1px) scale-px(8px)" + }, + { + "cssVar": "--nutui-searchbar-color", + "scssVar": "$searchbar-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-searchbar-gap", + "scssVar": "$searchbar-gap", + "default": "scale-px(12px)" + }, + { + "cssVar": "--nutui-searchbar-inner-gap", + "scssVar": "$searchbar-inner-gap", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-searchbar-icon-size", + "scssVar": "$searchbar-icon-size", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-searchbar-input-height", + "scssVar": "$searchbar-input-height", + "default": "scale-px(38px)" + } + ] + }, + "shortpassword": { + "id": "shortpassword", + "name": "ShortPassword", + "cName": "短密码", + "classes": [ + "nut-shortpassword-description", + "nut-shortpassword-footer", + "nut-shortpassword-footer-cancel", + "nut-shortpassword-footer-sure", + "nut-shortpassword-input", + "nut-shortpassword-input-fake", + "nut-shortpassword-input-fake-li", + "nut-shortpassword-input-fake-li-icon", + "nut-shortpassword-input-real", + "nut-shortpassword-input-site", + "nut-shortpassword-message", + "nut-shortpassword-message-error", + "nut-shortpassword-message-forget", + "nut-shortpassword-message-tips-icon", + "nut-shortpassword-popup", + "nut-shortpassword-title" + ], + "tokens": [ + { + "cssVar": "--nutui-shortpassword-error", + "scssVar": "$shortpassword-error", + "default": "$color-primary" + } + ] + }, + "signature": { + "id": "signature", + "name": "Signature", + "cName": "签名", + "classes": [ + "nut-signature", + "nut-signature-inner", + "nut-signature-unsupport" + ], + "tokens": [ + { + "cssVar": "--nutui-signature-border-width", + "scssVar": "$signature-border-width", + "default": "scale-px(1px)" + }, + { + "cssVar": "--nutui-signature-height", + "scssVar": "$signature-height", + "default": "10rem" + } + ] + }, + "switch": { + "id": "switch", + "name": "Switch", + "cName": "开关", + "classes": [ + "nut-switch", + "nut-switch-button", + "nut-switch-button-close", + "nut-switch-button-close-rtl", + "nut-switch-button-open", + "nut-switch-button-open-rtl", + "nut-switch-close", + "nut-switch-close-line", + "nut-switch-disabled", + "nut-switch-disabled-close", + "nut-switch-label", + "nut-switch-label-close", + "nut-switch-label-close-disabled", + "nut-switch-label-close-rtl", + "nut-switch-label-open", + "nut-switch-label-open-rtl" + ], + "tokens": [ + { + "cssVar": "--nutui-switch-width", + "scssVar": "$switch-width", + "default": "scale-px(56px)" + }, + { + "cssVar": "--nutui-switch-height", + "scssVar": "$switch-height", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-switch-inside-width", + "scssVar": "$switch-inside-width", + "default": "scale-px(32px)" + }, + { + "cssVar": "--nutui-switch-inside-height", + "scssVar": "$switch-inside-height", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-switch-border-width", + "scssVar": "$switch-border-width", + "default": "scale-px(2px)" + } + ] + }, + "textarea": { + "id": "textarea", + "name": "TextArea", + "cName": "文本域", + "classes": [ + "nut-textarea", + "nut-textarea-container", + "nut-textarea-error", + "nut-textarea-limit", + "nut-textarea-limit-disabled", + "nut-textarea-rtl-limit", + "nut-textarea-textarea", + "nut-textarea-textarea-disabled" + ], + "tokens": [ + { + "cssVar": "--nutui-textarea-padding", + "scssVar": "$textarea-padding", + "default": "scale-px(12px)" + }, + { + "cssVar": "--nutui-textarea-text-color", + "scssVar": "$textarea-text-color", + "default": "$color-title" + } + ] + }, + "uploader": { + "id": "uploader", + "name": "Uploader", + "cName": "上传", + "classes": [ + "nut-uploader", + "nut-uploader-icon", + "nut-uploader-icon-tip", + "nut-uploader-input", + "nut-uploader-preview", + "nut-uploader-preview-img", + "nut-uploader-preview-img-c", + "nut-uploader-preview-img-file", + "nut-uploader-preview-img-file-name", + "nut-uploader-preview-list", + "nut-uploader-preview-progress", + "nut-uploader-preview-progress-msg", + "nut-uploader-slot", + "nut-uploader-upload", + "nut-uploader-upload-disabled" + ], + "tokens": [ + { + "cssVar": "--nutui-uploader-image-width", + "scssVar": "$uploader-image-width", + "default": "scale-px(100px)" + }, + { + "cssVar": "--nutui-uploader-image-height", + "scssVar": "$uploader-image-height", + "default": "scale-px(100px)" + }, + { + "cssVar": "--nutui-uploader-image-border", + "scssVar": "$uploader-image-border", + "default": "0px" + } + ] + }, + "actionsheet": { + "id": "actionsheet", + "name": "ActionSheet", + "cName": "动作面板", + "classes": [ + "nut-actionsheet", + "nut-actionsheet-cancel", + "nut-actionsheet-cancel-danger", + "nut-actionsheet-cancel-description", + "nut-actionsheet-cancel-disabled", + "nut-actionsheet-cancel-name", + "nut-actionsheet-item", + "nut-actionsheet-item-danger", + "nut-actionsheet-item-description", + "nut-actionsheet-item-disabled", + "nut-actionsheet-item-name", + "nut-actionsheet-list", + "nut-actionsheet-safe-area" + ], + "tokens": [ + { + "cssVar": "--nutui-actionsheet-border-radius", + "scssVar": "$actionsheet-border-radius", + "default": "0" + } + ] + }, + "badge": { + "id": "badge", + "name": "Badge", + "cName": "徽标", + "classes": [ + "nut-badge", + "nut-badge-content", + "nut-badge-disabled", + "nut-badge-dot", + "nut-badge-dot-large", + "nut-badge-dot-normal", + "nut-badge-dot-small", + "nut-badge-icon", + "nut-badge-number", + "nut-badge-one", + "nut-badge-outline", + "nut-badge-sup" + ], + "tokens": [ + { + "cssVar": "--nutui-badge-height", + "scssVar": "$badge-height", + "default": "scale-px(14px)" + }, + { + "cssVar": "--nutui-badge-color", + "scssVar": "$badge-color", + "default": "$color-primary-text" + }, + { + "cssVar": "--nutui-badge-font-size", + "scssVar": "$badge-font-size", + "default": "$font-size-xxxs" + }, + { + "cssVar": "--nutui-badge-border-radius", + "scssVar": "$badge-border-radius", + "default": "$badge-height" + }, + { + "cssVar": "--nutui-badge-min-width", + "scssVar": "$badge-min-width", + "default": "scale-px(6px)" + }, + { + "cssVar": "--nutui-badge-padding", + "scssVar": "$badge-padding", + "default": "scale-px(1px) scale-px(4px)" + }, + { + "cssVar": "--nutui-badge-icon-padding", + "scssVar": "$badge-icon-padding", + "default": "scale-px(2px)" + }, + { + "cssVar": "--nutui-badge-icon-size", + "scssVar": "$badge-icon-size", + "default": "$font-size-xxs" + }, + { + "cssVar": "--nutui-badge-z-index", + "scssVar": "$badge-z-index", + "default": "1" + }, + { + "cssVar": "--nutui-badge-dot-width", + "scssVar": "$badge-dot-width", + "default": "scale-px(6px)" + }, + { + "cssVar": "--nutui-badge-dot-small-width", + "scssVar": "$badge-dot-small-width", + "default": "scale-px(4px)" + }, + { + "cssVar": "--nutui-badge-dot-large-width", + "scssVar": "$badge-dot-large-width", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-badge-outline-color", + "scssVar": "$badge-outline-color", + "default": "$color-primary" + } + ] + }, + "dialog": { + "id": "dialog", + "name": "Dialog", + "cName": "对话框", + "classes": [ + "nut-dialog", + "nut-dialog-close", + "nut-dialog-close-bottom", + "nut-dialog-close-top-left", + "nut-dialog-close-top-right", + "nut-dialog-content", + "nut-dialog-footer", + "nut-dialog-footer-block", + "nut-dialog-footer-cancel", + "nut-dialog-footer-cancel-badge", + "nut-dialog-footer-cancel-container", + "nut-dialog-footer-ok", + "nut-dialog-footer-ok-badge", + "nut-dialog-footer-ok-container", + "nut-dialog-header", + "nut-dialog-outer" + ], + "tokens": [ + { + "cssVar": "--nutui-dialog-min-width", + "scssVar": "$dialog-min-width", + "default": "scale-px(240px)" + }, + { + "cssVar": "--nutui-dialog-width", + "scssVar": "$dialog-width", + "default": "scale-px(295px)" + }, + { + "cssVar": "--nutui-dialog-padding", + "scssVar": "$dialog-padding", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-dialog-max-height", + "scssVar": "$dialog-max-height", + "default": "scale-px(420px)" + }, + { + "cssVar": "--nutui-dialog-min-height", + "scssVar": "$dialog-min-height", + "default": "scale-px(124px)" + }, + { + "cssVar": "--nutui-dialog-border-radius", + "scssVar": "$dialog-border-radius", + "default": "$radius-xl" + }, + { + "cssVar": "--nutui-dialog-content-margin", + "scssVar": "$dialog-content-margin", + "default": "0 0 scale-px(20px) 0" + }, + { + "cssVar": "--nutui-dialog-footer-badge-top", + "scssVar": "$dialog-footer-badge-top", + "default": "scale-px(-8px)" + }, + { + "cssVar": "--nutui-dialog-close-color", + "scssVar": "$dialog-close-color", + "default": "#ffffff" + }, + { + "cssVar": "--nutui-dialog-close-width", + "scssVar": "$dialog-close-width", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-dialog-close-height", + "scssVar": "$dialog-close-height", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-dialog-close-top", + "scssVar": "$dialog-close-top", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-dialog-close-left", + "scssVar": "$dialog-close-left", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-dialog-close-right", + "scssVar": "$dialog-close-right", + "default": "scale-px(16px)" + } + ] + }, + "drag": { + "id": "drag", + "name": "Drag", + "cName": "拖拽", + "classes": [ + "nut-drag", + "nut-drag-inner" + ], + "tokens": [] + }, + "empty": { + "id": "empty", + "name": "Empty", + "cName": "空状态", + "classes": [ + "nut-empty", + "nut-empty--full", + "nut-empty--half", + "nut-empty--partial", + "nut-empty-action", + "nut-empty-actions", + "nut-empty-content", + "nut-empty-description", + "nut-empty-image", + "nut-empty-partial-body", + "nut-empty-title" + ], + "tokens": [ + { + "cssVar": "--nutui-empty-padding", + "scssVar": "$empty-padding", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-empty-title-color", + "scssVar": "$empty-title-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-empty-description-color", + "scssVar": "$empty-description-color", + "default": "$color-text-help" + }, + { + "cssVar": "--nutui-empty-full-padding-top", + "scssVar": "$empty-full-padding-top", + "default": "scale-px(160px)" + }, + { + "cssVar": "--nutui-empty-full-image-size", + "scssVar": "$empty-full-image-size", + "default": "scale-px(160px)" + }, + { + "cssVar": "--nutui-empty-full-title-font-size", + "scssVar": "$empty-full-title-font-size", + "default": "$font-size-md" + }, + { + "cssVar": "--nutui-empty-full-title-line-height", + "scssVar": "$empty-full-title-line-height", + "default": "$line-height-xxl" + }, + { + "cssVar": "--nutui-empty-full-description-font-size", + "scssVar": "$empty-full-description-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-empty-full-description-line-height", + "scssVar": "$empty-full-description-line-height", + "default": "scale-font-px(22px)" + }, + { + "cssVar": "--nutui-empty-full-actions-margin-top", + "scssVar": "$empty-full-actions-margin-top", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-empty-half-image-size", + "scssVar": "$empty-half-image-size", + "default": "scale-px(80px)" + }, + { + "cssVar": "--nutui-empty-half-title-font-size", + "scssVar": "$empty-half-title-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-empty-half-title-line-height", + "scssVar": "$empty-half-title-line-height", + "default": "scale-font-px(22px)" + }, + { + "cssVar": "--nutui-empty-half-description-font-size", + "scssVar": "$empty-half-description-font-size", + "default": "$font-size-m" + }, + { + "cssVar": "--nutui-empty-half-description-line-height", + "scssVar": "$empty-half-description-line-height", + "default": "$line-height-2xl" + }, + { + "cssVar": "--nutui-empty-half-actions-margin-top", + "scssVar": "$empty-half-actions-margin-top", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-empty-partial-padding", + "scssVar": "$empty-partial-padding", + "default": "scale-px(0px) scale-px(16px)" + }, + { + "cssVar": "--nutui-empty-partial-image-size", + "scssVar": "$empty-partial-image-size", + "default": "scale-px(32px)" + }, + { + "cssVar": "--nutui-empty-partial-content-gap", + "scssVar": "$empty-partial-content-gap", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-empty-partial-description-font-size", + "scssVar": "$empty-partial-description-font-size", + "default": "$font-size-m" + }, + { + "cssVar": "--nutui-empty-partial-description-line-height", + "scssVar": "$empty-partial-description-line-height", + "default": "scale-font-px(32px)" + } + ] + }, + "infiniteloading": { + "id": "infiniteloading", + "name": "InfiniteLoading", + "cName": "滚动加载", + "classes": [ + "nut-infinite-bottom", + "nut-infinite-bottom-tips", + "nut-infinite-bottom-tips-icons", + "nut-infinite-top", + "nut-infinite-top-tips", + "nut-infinite-top-tips-icons", + "nut-infiniteloading", + "nut-infiniteloading-primary" + ], + "tokens": [] + }, + "loading": { + "id": "loading", + "name": "Loading", + "cName": "加载中", + "classes": [ + "nut-loading", + "nut-loading-icon", + "nut-loading-icon-box", + "nut-loading-text", + "nut-loading-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-loading-icon-color", + "scssVar": "$loading-icon-color", + "default": "$color-text-help" + }, + { + "cssVar": "--nutui-loading-icon-size", + "scssVar": "$loading-icon-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-loading-color", + "scssVar": "$loading-color", + "default": "$color-text-help" + }, + { + "cssVar": "--nutui-loading-font-size", + "scssVar": "$loading-font-size", + "default": "$font-size-s" + } + ] + }, + "noticebar": { + "id": "noticebar", + "name": "NoticeBar", + "cName": "公告栏", + "classes": [ + "nut-noticebar", + "nut-noticebar-box", + "nut-noticebar-box-center", + "nut-noticebar-box-horseLamp-list", + "nut-noticebar-box-horseLamp-list-item", + "nut-noticebar-box-left-icon", + "nut-noticebar-box-right-icon", + "nut-noticebar-box-right-icon-default", + "nut-noticebar-box-wrap", + "nut-noticebar-box-wrap-content", + "nut-noticebar-box-wrapable", + "nut-noticebar-vertical" + ], + "tokens": [ + { + "cssVar": "--nutui-noticebar-height", + "scssVar": "$noticebar-height", + "default": "scale-px(36px)" + }, + { + "cssVar": "--nutui-noticebar-color", + "scssVar": "$noticebar-color", + "default": "#d9500b" + }, + { + "cssVar": "--nutui-noticebar-font-size", + "scssVar": "$noticebar-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-noticebar-line-height", + "scssVar": "$noticebar-line-height", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-noticebar-box-padding", + "scssVar": "$noticebar-box-padding", + "default": "0 scale-px(16px)" + }, + { + "cssVar": "--nutui-noticebar-border-radius", + "scssVar": "$noticebar-border-radius", + "default": "0" + }, + { + "cssVar": "--nutui-noticebar-icon-gap", + "scssVar": "$noticebar-icon-gap", + "default": "scale-px(4px)" + } + ] + }, + "notify": { + "id": "notify", + "name": "Notify", + "cName": "消息通知", + "classes": [ + "nut-notify", + "nut-notify-close-icon", + "nut-notify-content", + "nut-notify-ellipsis", + "nut-notify-layout-left", + "nut-notify-left-icon", + "nut-notify-right-icon" + ], + "tokens": [ + { + "cssVar": "--nutui-notify-height", + "scssVar": "$notify-height", + "default": "scale-px(40px)" + }, + { + "cssVar": "--nutui-notify-padding", + "scssVar": "$notify-padding", + "default": "0px scale-px(12px)" + }, + { + "cssVar": "--nutui-notify-border-radius", + "scssVar": "$notify-border-radius", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-notify-z-index", + "scssVar": "$notify-z-index", + "default": "1000" + }, + { + "cssVar": "--nutui-notify-text-color", + "scssVar": "$notify-text-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-notify-font-size", + "scssVar": "$notify-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-notify-background-color", + "scssVar": "$notify-background-color", + "default": "$white" + } + ] + }, + "popover": { + "id": "popover", + "name": "Popover", + "cName": "气泡弹出框", + "classes": [ + "nut-popover", + "nut-popover-arrow", + "nut-popover-arrow-bottom", + "nut-popover-arrow-bottom-left", + "nut-popover-arrow-bottom-right", + "nut-popover-arrow-left", + "nut-popover-arrow-left-bottom", + "nut-popover-arrow-left-top", + "nut-popover-arrow-right", + "nut-popover-arrow-right-bottom", + "nut-popover-arrow-right-top", + "nut-popover-arrow-top", + "nut-popover-arrow-top-left", + "nut-popover-arrow-top-right", + "nut-popover-content", + "nut-popover-content-bg", + "nut-popover-content-bottom", + "nut-popover-content-bottom-left", + "nut-popover-content-bottom-right", + "nut-popover-content-copy", + "nut-popover-content-group", + "nut-popover-content-left-bottom", + "nut-popover-content-left-top", + "nut-popover-content-right-bottom", + "nut-popover-content-right-top", + "nut-popover-content-top", + "nut-popover-content-top-left", + "nut-popover-content-top-right", + "nut-popover-dark", + "nut-popover-enter-active", + "nut-popover-enter-from", + "nut-popover-item", + "nut-popover-item-action-icon", + "nut-popover-item-disabled", + "nut-popover-item-icon", + "nut-popover-item-name", + "nut-popover-leave-active", + "nut-popover-taroitem", + "nut-popover-wrapper" + ], + "tokens": [ + { + "cssVar": "--nutui-popover-border-radius", + "scssVar": "$popover-border-radius", + "default": "$radius-xs" + }, + { + "cssVar": "--nutui-popover-font-size", + "scssVar": "$popover-font-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-popover-text-color", + "scssVar": "$popover-text-color", + "default": "$color-mask" + }, + { + "cssVar": "--nutui-popover-padding", + "scssVar": "$popover-padding", + "default": "scale-px(8px)" + }, + { + "cssVar": "--nutui-popover-item-width", + "scssVar": "$popover-item-width", + "default": "scale-px(160px)" + } + ] + }, + "popup": { + "id": "popup", + "name": "Popup", + "cName": "弹出层", + "classes": [ + "nut-popup", + "nut-popup-bottom", + "nut-popup-bottom-top", + "nut-popup-center", + "nut-popup-left", + "nut-popup-right", + "nut-popup-round", + "nut-popup-slide", + "nut-popup-slide-bottom-appear-active", + "nut-popup-slide-bottom-enter-active", + "nut-popup-slide-bottom-exit", + "nut-popup-slide-bottom-exit-done", + "nut-popup-slide-center-enter-active", + "nut-popup-slide-center-exit-active", + "nut-popup-slide-center-exit-done", + "nut-popup-slide-left-appear-active", + "nut-popup-slide-left-enter-active", + "nut-popup-slide-left-exit-active", + "nut-popup-slide-left-exit-done", + "nut-popup-slide-none-enter-active", + "nut-popup-slide-none-exit-active", + "nut-popup-slide-none-exit-done", + "nut-popup-slide-right-appear-active", + "nut-popup-slide-right-enter-active", + "nut-popup-slide-right-exit", + "nut-popup-slide-right-exit-done", + "nut-popup-slide-top-appear-active", + "nut-popup-slide-top-enter-active", + "nut-popup-slide-top-exit-active", + "nut-popup-slide-top-exit-done", + "nut-popup-title", + "nut-popup-title-description", + "nut-popup-title-description-gap", + "nut-popup-title-left", + "nut-popup-title-right", + "nut-popup-title-right-bottom-left", + "nut-popup-title-right-bottom-right", + "nut-popup-title-right-top-left", + "nut-popup-title-title", + "nut-popup-title-wrapper", + "nut-popup-top" + ], + "tokens": [ + { + "cssVar": "--nutui-popup-border-radius", + "scssVar": "$popup-border-radius", + "default": "$radius-xl" + }, + { + "cssVar": "--nutui-popup-icon-size", + "scssVar": "$popup-icon-size", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-popup-title-padding", + "scssVar": "$popup-title-padding", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-popup-title-height", + "scssVar": "$popup-title-height", + "default": "scale-px(50px)" + }, + { + "cssVar": "--nutui-popup-title-border-bottom", + "scssVar": "$popup-title-border-bottom", + "default": "0" + }, + { + "cssVar": "--nutui-popup-animation-duration", + "scssVar": "$popup-animation-duration", + "default": "0.3s" + } + ] + }, + "pulltorefresh": { + "id": "pulltorefresh", + "name": "PullToRefresh", + "cName": "下拉刷新", + "classes": [ + "nut-pulltorefresh-head", + "nut-pulltorefresh-head-content", + "nut-pulltorefresh-head-content-icons", + "nut-pulltorefresh-primary", + "nut-pulltorefresh-primary-content", + "nut-pulltorefresh-primary-head-content", + "nut-pulltorefresh-primary-status-text" + ], + "tokens": [ + { + "cssVar": "--nutui-pulltorefresh-icon-width", + "scssVar": "$pulltorefresh-icon-width", + "default": "scale-px(36px)" + } + ] + }, + "resultpage": { + "id": "resultpage", + "name": "ResultPage", + "cName": "结果反馈", + "classes": [ + "nut-resultpage", + "nut-resultpage-action", + "nut-resultpage-actions", + "nut-resultpage-description", + "nut-resultpage-icon", + "nut-resultpage-title" + ], + "tokens": [ + { + "cssVar": "--nutui-resultpage-width", + "scssVar": "$resultpage-width", + "default": "scale-px(240px)" + }, + { + "cssVar": "--nutui-resultpage-icon-size", + "scssVar": "$resultpage-icon-size", + "default": "scale-px(36px)" + } + ] + }, + "skeleton": { + "id": "skeleton", + "name": "Skeleton", + "cName": "骨架屏", + "classes": [ + "nut-skeleton", + "nut-skeleton-animation", + "nut-skeleton-content", + "nut-skeleton-content-large", + "nut-skeleton-content-normal", + "nut-skeleton-content-small", + "nut-skeleton-content-small-0" + ], + "tokens": [ + { + "cssVar": "--nutui-skeleton-line-width", + "scssVar": "$skeleton-line-width", + "default": "100%" + } + ] + }, + "swipe": { + "id": "swipe", + "name": "Swipe", + "cName": "滑动手势", + "classes": [ + "nut-swipe", + "nut-swipe-left", + "nut-swipe-wrapper" + ], + "tokens": [] + }, + "toast": { + "id": "toast", + "name": "Toast", + "cName": "吐司", + "classes": [ + "nut-toast", + "nut-toast-bottom", + "nut-toast-center", + "nut-toast-has-icon", + "nut-toast-icon-wrapper", + "nut-toast-icon-wrapper-icon", + "nut-toast-inner", + "nut-toast-inner-break-word", + "nut-toast-inner-large", + "nut-toast-inner-normal", + "nut-toast-inner-small", + "nut-toast-overlay-default", + "nut-toast-overlay-default-taro", + "nut-toast-rtl", + "nut-toast-rtl-inner", + "nut-toast-text", + "nut-toast-title", + "nut-toast-top" + ], + "tokens": [ + { + "cssVar": "--nutui-toast-inner-text-align", + "scssVar": "$toast-inner-text-align", + "default": "center" + }, + { + "cssVar": "--nutui-toast-title-font-size", + "scssVar": "$toast-title-font-size", + "default": "$font-size-md" + }, + { + "cssVar": "--nutui-toast-text-font-size", + "scssVar": "$toast-text-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-toast-font-color", + "scssVar": "$toast-font-color", + "default": "$white" + }, + { + "cssVar": "--nutui-toast-inner-padding", + "scssVar": "$toast-inner-padding", + "default": "scale-px(12px) scale-px(16px)" + }, + { + "cssVar": "--nutui-toast-inner-bg-color", + "scssVar": "$toast-inner-bg-color", + "default": "$color-mask" + }, + { + "cssVar": "--nutui-toast-inner-top", + "scssVar": "$toast-inner-top", + "default": "50%" + } + ] + }, + "animate": { + "id": "animate", + "name": "Animate", + "cName": "动画/动效", + "classes": [ + "nut-animate", + "nut-animate-breath", + "nut-animate-flicker", + "nut-animate-float", + "nut-animate-jump", + "nut-animate-ripple", + "nut-animate-shake", + "nut-animate-slide-bottom", + "nut-animate-slide-left", + "nut-animate-slide-right", + "nut-animate-slide-top", + "nut-animate-twinkle" + ], + "tokens": [] + }, + "animatingnumbers": { + "id": "animatingnumbers", + "name": "AnimatingNumbers", + "cName": "数字动画", + "classes": [ + "nut-countup-list", + "nut-countup-listitem", + "nut-countup-listitem-number", + "nut-countup-number", + "nut-countup-number-text", + "nut-countup-separator" + ], + "tokens": [] + }, + "audio": { + "id": "audio", + "name": "Audio", + "cName": "音频播放器", + "classes": [ + "nut-audio", + "nut-audio-icon", + "nut-audio-icon-box", + "nut-audio-icon-stop", + "nut-audio-none-container", + "nut-audio-progress", + "nut-audio-progress-bar-wrapper", + "nut-voice" + ], + "tokens": [] + }, + "avatar": { + "id": "avatar", + "name": "Avatar", + "cName": "头像", + "classes": [ + "nut-avatar", + "nut-avatar-first-child", + "nut-avatar-icon", + "nut-avatar-img", + "nut-avatar-large", + "nut-avatar-large-icon", + "nut-avatar-large-img", + "nut-avatar-large-text", + "nut-avatar-round", + "nut-avatar-small", + "nut-avatar-small-text", + "nut-avatar-square", + "nut-avatar-text" + ], + "tokens": [ + { + "cssVar": "--nutui-avatar-square", + "scssVar": "$avatar-square", + "default": "scale-px(5px)" + }, + { + "cssVar": "--nutui-avatar-large-width", + "scssVar": "$avatar-large-width", + "default": "scale-px(60px)" + }, + { + "cssVar": "--nutui-avatar-large-height", + "scssVar": "$avatar-large-height", + "default": "scale-px(60px)" + }, + { + "cssVar": "--nutui-avatar-small-width", + "scssVar": "$avatar-small-width", + "default": "scale-px(32px)" + }, + { + "cssVar": "--nutui-avatar-small-height", + "scssVar": "$avatar-small-height", + "default": "scale-px(32px)" + }, + { + "cssVar": "--nutui-avatar-normal-width", + "scssVar": "$avatar-normal-width", + "default": "scale-px(40px)" + }, + { + "cssVar": "--nutui-avatar-normal-height", + "scssVar": "$avatar-normal-height", + "default": "scale-px(40px)" + } + ] + }, + "avatargroup": { + "id": "avatargroup", + "name": "AvatarGroup", + "cName": "头像组合子组件", + "classes": [ + "nut-avatar-group", + "nut-avatar-group-avatar" + ], + "tokens": [] + }, + "circleprogress": { + "id": "circleprogress", + "name": "CircleProgress", + "cName": "环形进度条", + "classes": [ + "nut-circleprogress", + "nut-circleprogress-hover", + "nut-circleprogress-path", + "nut-circleprogress-text" + ], + "tokens": [] + }, + "collapse": { + "id": "collapse", + "name": "Collapse", + "cName": "折叠面板", + "classes": [], + "tokens": [ + { + "cssVar": "--nutui-collapse-item-padding", + "scssVar": "$collapse-item-padding", + "default": "scale-px(13px) scale-px(26px)" + }, + { + "cssVar": "--nutui-collapse-item-color", + "scssVar": "$collapse-item-color", + "default": "$color-title" + } + ] + }, + "collapseitem": { + "id": "collapseitem", + "name": "CollapseItem", + "cName": "折叠面板子组件", + "classes": [ + "nut-collapse-item", + "nut-collapse-item-content", + "nut-collapse-item-content-text", + "nut-collapse-item-content-wrapper", + "nut-collapse-item-content-wrapper-tran", + "nut-collapse-item-extra", + "nut-collapse-item-header", + "nut-collapse-item-header-disabled", + "nut-collapse-item-icon", + "nut-collapse-item-icon-box", + "nut-collapse-item-title" + ], + "tokens": [] + }, + "countdown": { + "id": "countdown", + "name": "CountDown", + "cName": "倒计时", + "classes": [ + "nut-countdown", + "nut-countdown-number", + "nut-countdown-number-primary", + "nut-countdown-number-text", + "nut-countdown-unit" + ], + "tokens": [ + { + "cssVar": "--nutui-countdown-display", + "scssVar": "$countdown-display", + "default": "flex" + }, + { + "cssVar": "--nutui-countdown-color", + "scssVar": "$countdown-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-countdown-font-size", + "scssVar": "$countdown-font-size", + "default": "$font-size-xs" + }, + { + "cssVar": "--nutui-countdown-height", + "scssVar": "$countdown-height", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-countdown-width", + "scssVar": "$countdown-width", + "default": "scale-px(16px)" + }, + { + "cssVar": "--nutui-countdown-number-padding", + "scssVar": "$countdown-number-padding", + "default": "0 0" + }, + { + "cssVar": "--nutui-countdown-number-margin", + "scssVar": "$countdown-number-margin", + "default": "0 scale-px(1px)" + } + ] + }, + "ellipsis": { + "id": "ellipsis", + "name": "Ellipsis", + "cName": "文本省略", + "classes": [ + "nut-ellipsis", + "nut-ellipsis-copy", + "nut-ellipsis-text", + "nut-ellipsis-width", + "nut-ellipsis-wordbreak" + ], + "tokens": [] + }, + "imagepreview": { + "id": "imagepreview", + "name": "ImagePreview", + "cName": "图片预览", + "classes": [ + "nut-image-preview-box", + "nut-imagepreview", + "nut-imagepreview-close", + "nut-imagepreview-index", + "nut-imagepreview-pop", + "nut-imagepreview-swiper", + "nut-imagepreview-swiper-item" + ], + "tokens": [] + }, + "indicator": { + "id": "indicator", + "name": "Indicator", + "cName": "指示器", + "classes": [ + "nut-indicator", + "nut-indicator-dot", + "nut-indicator-dot-0", + "nut-indicator-dot-active", + "nut-indicator-fixed-width", + "nut-indicator-inside-bottom-center", + "nut-indicator-inside-bottom-left", + "nut-indicator-inside-top-right", + "nut-indicator-line", + "nut-indicator-line-0", + "nut-indicator-line-active", + "nut-indicator-outside", + "nut-indicator-track", + "nut-indicator-vertical", + "nut-indicator-white" + ], + "tokens": [ + { + "cssVar": "--nutui-indicator-color", + "scssVar": "$indicator-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-indicator-dot-color", + "scssVar": "$indicator-dot-color", + "default": "$color-border" + }, + { + "cssVar": "--nutui-indicator-dot-size", + "scssVar": "$indicator-dot-size", + "default": "scale-px(4px)" + }, + { + "cssVar": "--nutui-indicator-dot-margin", + "scssVar": "$indicator-dot-margin", + "default": "$spacing-xxs" + } + ] + }, + "pagination": { + "id": "pagination", + "name": "Pagination", + "cName": "分页", + "classes": [ + "nut-pagination", + "nut-pagination-contain", + "nut-pagination-item", + "nut-pagination-item-active", + "nut-pagination-item-disabled", + "nut-pagination-lite", + "nut-pagination-lite-active", + "nut-pagination-lite-default", + "nut-pagination-lite-spliterator", + "nut-pagination-next", + "nut-pagination-next-disabled", + "nut-pagination-prev", + "nut-pagination-prev-disabled", + "nut-pagination-simple", + "nut-pagination-simple-border" + ], + "tokens": [ + { + "cssVar": "--nutui-pagination-color", + "scssVar": "$pagination-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-pagination-lite-color", + "scssVar": "$pagination-lite-color", + "default": "$white" + }, + { + "cssVar": "--nutui-pagination-lite-width", + "scssVar": "$pagination-lite-width", + "default": "scale-px(40px)" + }, + { + "cssVar": "--nutui-pagination-lite-height", + "scssVar": "$pagination-lite-height", + "default": "scale-px(20px)" + } + ] + }, + "price": { + "id": "price", + "name": "Price", + "cName": "价格", + "classes": [ + "nut-price", + "nut-price-darkgray", + "nut-price-decimal", + "nut-price-decimal-large", + "nut-price-decimal-normal", + "nut-price-decimal-small", + "nut-price-decimal-xlarge", + "nut-price-integer", + "nut-price-integer-large", + "nut-price-integer-normal", + "nut-price-integer-small", + "nut-price-integer-xlarge", + "nut-price-line", + "nut-price-primary", + "nut-price-symbol", + "nut-price-symbol-large", + "nut-price-symbol-normal", + "nut-price-symbol-rtl", + "nut-price-symbol-small", + "nut-price-symbol-xlarge" + ], + "tokens": [ + { + "cssVar": "--nutui-price-color", + "scssVar": "$price-primary-color", + "default": "$color-primary" + }, + { + "cssVar": "--nutui-price-color", + "scssVar": "$price-color", + "default": "var(--nutui-color-text-help)" + }, + { + "cssVar": "--nutui-price-symbol-xlarge-size", + "scssVar": "$price-symbol-xlarge-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-symbol-large-size", + "scssVar": "$price-symbol-large-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-integer-large-size", + "scssVar": "$price-integer-large-size", + "default": "$font-size-xl" + }, + { + "cssVar": "--nutui-price-decimal-large-size", + "scssVar": "$price-decimal-large-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-symbol-normal-size", + "scssVar": "$price-symbol-normal-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-symbol-small-size", + "scssVar": "$price-symbol-small-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-integer-small-size", + "scssVar": "$price-integer-small-size", + "default": "$font-size-s" + }, + { + "cssVar": "--nutui-price-decimal-small-size", + "scssVar": "$price-decimal-small-size", + "default": "$font-size-s" + } + ] + }, + "progress": { + "id": "progress", + "name": "Progress", + "cName": "进度条", + "classes": [ + "nut-progress", + "nut-progress-active", + "nut-progress-inner", + "nut-progress-outer", + "nut-progress-text" + ], + "tokens": [ + { + "cssVar": "--nutui-progress-height", + "scssVar": "$progress-height", + "default": "scale-px(10px)" + }, + { + "cssVar": "--nutui-progress-border-radius", + "scssVar": "$progress-border-radius", + "default": "scale-px(12px)" + }, + { + "cssVar": "--nutui-progress-text-padding", + "scssVar": "$progress-text-padding", + "default": "0 scale-px(5px)" + }, + { + "cssVar": "--nutui-progress-text-font-size", + "scssVar": "$progress-text-font-size", + "default": "scale-font-px(13px)" + } + ] + }, + "segmented": { + "id": "segmented", + "name": "Segmented", + "cName": "分段选择器", + "classes": [ + "nut-segmented", + "nut-segmented-icon", + "nut-segmented-item", + "nut-segmented-item-active" + ], + "tokens": [ + { + "cssVar": "--nutui-segmented-height", + "scssVar": "$segmented-height", + "default": "scale-px(24px)" + }, + { + "cssVar": "--nutui-segmented-padding", + "scssVar": "$segmented-padding", + "default": "$spacing-xxxs" + }, + { + "cssVar": "--nutui-segmented-radius", + "scssVar": "$segmented-border-radius", + "default": "$radius-xs" + }, + { + "cssVar": "--nutui-segmented-height", + "scssVar": "$segmented-item-height", + "default": "scale-px(20px)" + }, + { + "cssVar": "--nutui-segmented-item-radius", + "scssVar": "$segmented-item-radius", + "default": "$radius-xs" + } + ] + }, + "step": { + "id": "step", + "name": "Step", + "cName": "步骤条子组件", + "classes": [ + "nut-step", + "nut-step-business", + "nut-step-description", + "nut-step-finish", + "nut-step-head", + "nut-step-head-dot", + "nut-step-head-dot-wrap", + "nut-step-head-icon", + "nut-step-head-icon-wrap", + "nut-step-head-text", + "nut-step-head-text-wrap", + "nut-step-last", + "nut-step-line", + "nut-step-line-inner", + "nut-step-main", + "nut-step-process", + "nut-step-title", + "nut-step-wait" + ], + "tokens": [] + }, + "steps": { + "id": "steps", + "name": "Steps", + "cName": "步骤条", + "classes": [ + "nut-step-special", + "nut-steps", + "nut-steps-horizontal", + "nut-steps-horizontal-count-3", + "nut-steps-horizontal-dot", + "nut-steps-horizontal-double", + "nut-steps-horizontal-enhanced", + "nut-steps-horizontal-icon", + "nut-steps-horizontal-single", + "nut-steps-horizontal-text", + "nut-steps-vertical", + "nut-steps-vertical-dot", + "nut-steps-vertical-enhanced", + "nut-steps-vertical-icon", + "nut-steps-vertical-text" + ], + "tokens": [ + { + "cssVar": "--nutui-steps-background-color", + "scssVar": "$steps-background-color", + "default": "$white" + }, + { + "cssVar": "--nutui-steps-base-head-height", + "scssVar": "$steps-base-head-height", + "default": "scale-px(14px)" + }, + { + "cssVar": "--nutui-steps-base-head-border", + "scssVar": "$steps-base-head-border", + "default": "none" + }, + { + "cssVar": "--nutui-steps-base-head-dot-size", + "scssVar": "$steps-base-head-dot-size", + "default": "$icon-size-6" + }, + { + "cssVar": "--nutui-steps-base-line-height", + "scssVar": "$steps-base-line-height", + "default": "scale-px(1px)" + }, + { + "cssVar": "--nutui-steps-process-color", + "scssVar": "$steps-process-color", + "default": "$white" + } + ] + }, + "swiper": { + "id": "swiper", + "name": "Swiper", + "cName": "轮播", + "classes": [ + "nut-swipe-right", + "nut-swiper", + "nut-swiper-canmove-horizontal", + "nut-swiper-canmove-vertical", + "nut-swiper-indicator", + "nut-swiper-indicator-vertical", + "nut-swiper-inner", + "nut-swiper-inner-vertical", + "nut-swiper-slide" + ], + "tokens": [] + }, + "swiperitem": { + "id": "swiperitem", + "name": "SwiperItem", + "cName": "轮播子组件", + "classes": [ + "nut-swiper-item" + ], + "tokens": [] + }, + "table": { + "id": "table", + "name": "Table", + "cName": "表格", + "classes": [ + "nut-table", + "nut-table-fixed-left", + "nut-table-fixed-left-last", + "nut-table-fixed-right", + "nut-table-main", + "nut-table-main-body", + "nut-table-main-body-tr", + "nut-table-main-body-tr-align", + "nut-table-main-body-tr-aligncenter", + "nut-table-main-body-tr-alignleft", + "nut-table-main-body-tr-alignright", + "nut-table-main-body-tr-border", + "nut-table-main-body-tr-td", + "nut-table-main-body-tr-td-nodata", + "nut-table-main-body-tr-th", + "nut-table-main-head", + "nut-table-main-head-tr", + "nut-table-main-head-tr-align", + "nut-table-main-head-tr-aligncenter", + "nut-table-main-head-tr-alignleft", + "nut-table-main-head-tr-alignright", + "nut-table-main-head-tr-border", + "nut-table-main-head-tr-td", + "nut-table-main-head-tr-td-nodata", + "nut-table-main-head-tr-th", + "nut-table-main-striped", + "nut-table-sticky-left", + "nut-table-sticky-right", + "nut-table-summary", + "nut-table-wrapper", + "nut-table-wrapper-sticky" + ], + "tokens": [ + { + "cssVar": "--nutui-table-border-color", + "scssVar": "$table-border-color", + "default": "$color-border" + }, + { + "cssVar": "--nutui-table-cols-padding", + "scssVar": "$table-cols-padding", + "default": "scale-px(10px)" + }, + { + "cssVar": "--nutui-table-tr-odd-bg-color", + "scssVar": "$table-tr-odd-bg-color", + "default": "$white" + } + ] + }, + "tag": { + "id": "tag", + "name": "Tag", + "cName": "标签", + "classes": [ + "nut-tag", + "nut-tag-close", + "nut-tag-close-icon", + "nut-tag-custom-icon", + "nut-tag-danger", + "nut-tag-default", + "nut-tag-info", + "nut-tag-mark", + "nut-tag-plain", + "nut-tag-primary", + "nut-tag-round", + "nut-tag-success", + "nut-tag-text", + "nut-tag-text-plain", + "nut-tag-warning" + ], + "tokens": [ + { + "cssVar": "--nutui-tag-padding", + "scssVar": "$tag-padding", + "default": "0px scale-px(2px)" + }, + { + "cssVar": "--nutui-tag-font-size", + "scssVar": "$tag-font-size", + "default": "$font-size-xxs" + }, + { + "cssVar": "--nutui-tag-border-radius", + "scssVar": "$tag-border-radius", + "default": "scale-px(2px)" + }, + { + "cssVar": "--nutui-tag-height", + "scssVar": "$tag-height", + "default": "scale-px(14px)" + }, + { + "cssVar": "--nutui-tag-color", + "scssVar": "$tag-color", + "default": "#ffffff" + }, + { + "cssVar": "--nutui-tag-border-width", + "scssVar": "$tag-border-width", + "default": "scale-px(1px)" + }, + { + "cssVar": "--nutui-tag-background-color", + "scssVar": "$tag-background-color", + "default": "$color-title" + }, + { + "cssVar": "--nutui-tag-round-border-radius", + "scssVar": "$tag-round-border-radius", + "default": "scale-px(8px)" + } + ] + }, + "tour": { + "id": "tour", + "name": "Tour", + "cName": "引导", + "classes": [ + "nut-tour-content", + "nut-tour-content-bottom", + "nut-tour-content-bottom-operate", + "nut-tour-content-bottom-operate-btn", + "nut-tour-content-inner", + "nut-tour-content-tile", + "nut-tour-content-top", + "nut-tour-content-top-close", + "nut-tour-mask", + "nut-tour-mask-hidden", + "nut-tour-mask-none", + "nut-tour-masked" + ], + "tokens": [ + { + "cssVar": "--nutui-tour-mask-border-radius", + "scssVar": "$tour-mask-border-radius", + "default": "scale-px(10px)" + }, + { + "cssVar": "--nutui-tour-content-min-width", + "scssVar": "$tour-content-min-width", + "default": "scale-px(200px)" + }, + { + "cssVar": "--nutui-tour-content-padding", + "scssVar": "$tour-content-padding", + "default": "scale-px(10px) scale-px(12px)" + } + ] + }, + "video": { + "id": "video", + "name": "Video", + "cName": "视频播放器", + "classes": [ + "nut-video", + "nut-video-player" + ], + "tokens": [] + }, + "virtuallist": { + "id": "virtuallist", + "name": "VirtualList", + "cName": "虚拟列表", + "classes": [ + "nut-horizontal-items", + "nut-vertical-items", + "nut-virtualList-box", + "nut-virtuallist", + "nut-virtuallist-container", + "nut-virtuallist-item", + "nut-virtuallist-phantom" + ], + "tokens": [] + }, + "quickenter": { + "id": "quickenter", + "name": "QuickEnter", + "cName": "快捷入口", + "classes": [ + "nut-quickenter", + "nut-quickenter-close-btn", + "nut-quickenter-content", + "nut-quickenter-content-scrollable", + "nut-quickenter-control", + "nut-quickenter-item", + "nut-quickenter-item-icon", + "nut-quickenter-item-title", + "nut-quickenter-list", + "nut-quickenter-title" + ], + "tokens": [ + { + "cssVar": "--nutui-quickenter-bg-color", + "scssVar": "$quickenter-bg-color", + "default": "#f5f5f5" + }, + { + "cssVar": "--nutui-quickenter-max-height", + "scssVar": "$quickenter-max-height", + "default": "scale-px(256px)" + } + ] + }, + "avatarcropper": { + "id": "avatarcropper", + "name": "AvatarCropper", + "cName": "头像裁剪", + "classes": [ + "nut-avatar-cropper", + "nut-avatar-cropper-edit-text", + "nut-avatar-cropper-input", + "nut-avatar-cropper-popup", + "nut-avatar-cropper-popup-canvas", + "nut-avatar-cropper-popup-cut-canvas", + "nut-avatar-cropper-popup-highlight", + "nut-avatar-cropper-popup-toolbar", + "nut-avatar-cropper-popup-toolbar-flex", + "nut-avatar-cropper-popup-toolbar-item" + ], + "tokens": [] + }, + "barrage": { + "id": "barrage", + "name": "Barrage", + "cName": "弹幕", + "classes": [ + "nut-barrage" + ], + "tokens": [] + }, + "card": { + "id": "card", + "name": "Card", + "cName": "商品卡片", + "classes": [ + "nut-card", + "nut-card-left", + "nut-card-right", + "nut-card-right-other", + "nut-card-right-price", + "nut-card-right-price-origin", + "nut-card-right-shop", + "nut-card-right-shop-name", + "nut-card-right-title" + ], + "tokens": [ + { + "cssVar": "--nutui-card-border-radius", + "scssVar": "$card-border-radius", + "default": "scale-px(4px)" + } + ] + }, + "timedetail": { + "id": "timedetail", + "name": "TimeDetail", + "cName": "配送时间", + "classes": [ + "nut-timedetail", + "nut-timedetail-item" + ], + "tokens": [] + }, + "timeselect": { + "id": "timeselect", + "name": "TimeSelect", + "cName": "配送时间", + "classes": [ + "nut-timepannel", + "nut-timeselect", + "nut-timeselect-content", + "nut-timeselect-content-left" + ], + "tokens": [ + { + "cssVar": "--nutui-timeselect-date-width", + "scssVar": "$timeselect-date-width", + "default": "scale-px(140px)" + }, + { + "cssVar": "--nutui-timeselect-date-height", + "scssVar": "$timeselect-date-height", + "default": "scale-px(40px)" + }, + { + "cssVar": "--nutui-timeselect-time-width", + "scssVar": "$timeselect-time-width", + "default": "scale-px(110px)" + }, + { + "cssVar": "--nutui-timeselect-time-height", + "scssVar": "$timeselect-time-height", + "default": "scale-px(50px)" + } + ] + }, + "trendarrow": { + "id": "trendarrow", + "name": "TrendArrow", + "cName": "趋势箭头", + "classes": [ + "nut-trendarrow", + "nut-trendarrow-icon-after", + "nut-trendarrow-icon-before", + "nut-trendarrow-rate" + ], + "tokens": [ + { + "cssVar": "--nutui-trendarrow-font-size", + "scssVar": "$trendarrow-font-size", + "default": "$font-size-base" + }, + { + "cssVar": "--nutui-trendarrow-icon-margin", + "scssVar": "$trendarrow-icon-margin", + "default": "scale-px(4px)" + } + ] + }, + "watermark": { + "id": "watermark", + "name": "WaterMark", + "cName": "水印", + "classes": [ + "nut-watermark", + "nut-watermark-full-page" + ], + "tokens": [] + } + } +} diff --git a/package.json b/package.json index b650e51c6f..dbfd3f105c 100644 --- a/package.json +++ b/package.json @@ -88,6 +88,7 @@ "generate:props_json": "PROPS_JSON=true node scripts/build-comments-to-dts.mjs", "generate:meta": "node scripts/build-meta.mjs", "generate:llms": "node scripts/build-llms.mjs", + "generate:semantic": "node scripts/build-semantic.mjs", "lint": "eslint ./src/packages/*/", "lint:fix": "eslint --fix ./src/packages", "prepare": "husky && npm run generate:file && npm run generate:file:taro && npm run generate:file:taro:pages", diff --git a/scripts/build-llms.mjs b/scripts/build-llms.mjs index 4f08e11ca9..86b24c674c 100644 --- a/scripts/build-llms.mjs +++ b/scripts/build-llms.mjs @@ -11,6 +11,7 @@ import { fileURLToPath, pathToFileURL } from 'url' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const ROOT = path.resolve(__dirname, '..') const META_PATH = path.join(ROOT, 'meta/components.json') +const SEMANTIC_PATH = path.join(ROOT, 'meta/semantic.json') const OUTPUT_DIR = path.join(ROOT, 'meta') // 线上文档站基址:域名 + vite base。单组件 .md 路由由 site 插件产出到 /components/.md。 @@ -27,6 +28,16 @@ export function loadMeta() { return JSON.parse(fs.readFileSync(META_PATH, 'utf-8')) } +// 尝试读 semantic.json(需先 npm run generate:semantic)。未生成时返回 null, +// llms 产物据此跳过 semantic 入口/链接而非报错。直接读 JSON 避免与 build-semantic.mjs 循环依赖。 +function tryLoadSemantic() { + try { + return JSON.parse(fs.readFileSync(SEMANTIC_PATH, 'utf-8')) + } catch { + return null + } +} + // 仅纳入有中文文档的组件(= show:true 的展示组件),按 categories 的 nav 顺序输出。 function docComponents(meta) { const list = [] @@ -41,6 +52,7 @@ function docComponents(meta) { export function generateLlmsTxt(meta) { const groups = docComponents(meta) + const semantic = tryLoadSemantic() const lines = [] lines.push(`# NutUI React - 京东风格轻量级移动端 React 组件库`) lines.push('') @@ -54,6 +66,10 @@ export function generateLlmsTxt(meta) { lines.push('') lines.push(`- [全部组件文档(中文,单文件)](${SITE_URL}/llms-full-cn.txt)`) lines.push(`- [Full Documentation (English, single file)](${SITE_URL}/llms-full.txt)`) + if (semantic) { + lines.push(`- [全部组件样式结构(中文,单文件)](${SITE_URL}/llms-semantic-cn.txt)`) + lines.push(`- [Component Style Structure (English, single file)](${SITE_URL}/llms-semantic.txt)`) + } lines.push('') for (const { category, comps } of groups) { @@ -65,6 +81,24 @@ export function generateLlmsTxt(meta) { } lines.push('') } + + // per-component 语义文档分区(仅当 semantic.json 已生成)。列出每个有语义数据的组件的 semantic.md 链接。 + if (semantic) { + lines.push('## 样式结构 (Semantic)') + lines.push('') + lines.push( + '每个组件的 `semantic.md` 列出其渲染产物可用的 CSS class 与 CSS 变量,供自定义样式 / 主题覆盖时精确定位。' + ) + lines.push('') + for (const { comps } of groups) { + for (const c of comps) { + if (!semantic.components[c.id]) continue + const label = c.cName ? `${c.name} ${c.cName}` : c.name + lines.push(`- [${label} Semantic](${SITE_URL}/components/${c.id}/semantic.md)`) + } + } + lines.push('') + } return `${lines.join('\n').trimEnd()}\n` } @@ -75,6 +109,8 @@ export function generateLlmsFull(meta, lang = 'h5') { ? '# NutUI React - Full Component Documentation' : '# NutUI React - 全部组件文档' const summary = lang === 'enUS' ? SUMMARY_EN : SUMMARY + const semantic = tryLoadSemantic() + const semanticHeading = lang === 'enUS' ? 'Semantic DOM' : '样式结构 (Semantic DOM)' const parts = [title, '', `> ${summary}`, ''] for (const cat of meta.categories) { for (const id of cat.components) { @@ -85,6 +121,10 @@ export function generateLlmsFull(meta, lang = 'h5') { if (!fs.existsSync(abs)) continue parts.push('---', '') parts.push(fs.readFileSync(abs, 'utf-8').trim()) + // 组件语义文档链接(不内联正文,与 llms-full 的文档主体分离,同 Ant Design 组织方式)。 + if (semantic && semantic.components[id]) { + parts.push('', `## ${semanticHeading}`, '', `${SITE_URL}/components/${id}/semantic.md`) + } parts.push('') } } diff --git a/scripts/build-semantic.mjs b/scripts/build-semantic.mjs new file mode 100644 index 0000000000..79225eb349 --- /dev/null +++ b/scripts/build-semantic.mjs @@ -0,0 +1,289 @@ +// 编译各组件 scss,提取真实 CSS class,按组件归属,输出 meta/semantic.json。 +// 面向 AI Coding 的「样式结构事实源」:告诉 LLM 每个组件有哪些可用 CSS class 与 tokens, +// 便于生成改样式 / 写主题覆盖的代码。md 呈现由 site 插件读本产物生成,避免二次编译。 +// class 只能靠编译得到:组件 scss 大量用 @each / &-#{$type} / @mixin,动态 class 源码里不存在。 +// DO NOT manual edit the output (meta/semantic.json). Run: npm run generate:semantic +import fs from 'fs' +import path from 'path' +import { fileURLToPath, pathToFileURL } from 'url' +import * as sass from 'sass' +import postcss from 'postcss' +import { loadMeta } from './build-llms.mjs' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const ROOT = path.resolve(__dirname, '..') +const PACKAGES_DIR = path.join(ROOT, 'src/packages') +const STYLES_DIR = path.join(ROOT, 'src/styles') +const VARIABLES_PATH = path.join(STYLES_DIR, 'variables.scss') +const SEMANTIC_PATH = path.join(ROOT, 'meta/semantic.json') +const OUTPUT_DIR = path.join(ROOT, 'meta') + +const SCHEMA_VERSION = '1.0.0' + +// 组件 scss 靠外部注入变量/函数(scale-px 等),故先 @import variables 再 @import 组件。 +// 全库已验证 100% 可编译;静音无关 deprecation,避免污染日志。 +const SILENCE = [ + 'import', + 'global-builtin', + 'color-functions', + 'legacy-js-api', + 'mixed-decls', +] + +// 编译单个组件 scss,用 postcss 提取全部 .nut-* class 名(去 . 前缀)。失败返回 null。 +function extractClasses(scssPath) { + const entry = `@import '${VARIABLES_PATH}';\n@import '${scssPath}';` + let css + try { + ;({ css } = sass.compileString(entry, { + loadPaths: [STYLES_DIR, path.dirname(scssPath)], + silenceDeprecations: SILENCE, + logger: sass.Logger.silent, + })) + } catch (e) { + return { error: e.message.split('\n')[0] } + } + const classes = new Set() + postcss.parse(css).walkRules((rule) => { + const m = rule.selector.match(/\.nut-[a-zA-Z0-9_-]+/g) + if (m) m.forEach((c) => classes.add(c.slice(1))) + }) + return { classes } +} + +// class 前缀 → 组件 id 的手工别名。仅用于 class 名与目录 id 系统性不一致、 +// 且归一/文件归属都救不了的情况(如 Image 组件渲染出 nut-img-* 而目录 id 是 image, +// 且该 class 经 @import 出现在 avatar/imagepreview 等多个文件里,无法靠单一来源定位)。 +// 与 build-meta.mjs 的 COMPONENT_ALIAS 同类,保持最小化。 +const CLASS_PREFIX_ALIAS = { + 'nut-img': 'image', +} + +// class → 归一匹配组件 id。去 nut- 前缀、去连字符后,取「最长的、是其前缀的 valid id」。 +// 例:nut-cell-group-title → cellgrouptitle → 命中 cellgroup(长于 cell,取长者)。 +// 仅作辅助信号,用于父子 @import 去重(把共享 class 判给更具体的子组件)。 +// 对 class↔id 不一致的组件会失配(如 nut-countup-* 对应 id animatingnumbers),故归属主信号是「定义文件」。 +function makeResolver(validIdsByLen) { + return (className) => { + // 别名优先:命中前缀则直接归属(处理跨多文件的 class↔id 不一致)。 + for (const [prefix, id] of Object.entries(CLASS_PREFIX_ALIAS)) { + if (className === prefix || className.startsWith(`${prefix}-`)) return id + } + const body = className.replace(/^nut-/, '').replace(/-/g, '') + return validIdsByLen.find((id) => body === id || body.startsWith(id)) || null + } +} + +// 编译各组件 scss,按「定义文件 + 归一去重」把 class 归属到组件。返回 { semantic, stats }。 +export function generateSemantic(meta) { + const validIds = Object.keys(meta.components) + const validIds4Set = new Set(validIds) + const validIdsByLen = [...validIds].sort((a, b) => b.length - a.length) + const resolve = makeResolver(validIdsByLen) + + // 逐组件编译,记录每个 class 出现在哪些组件文件里(class → Set<定义它的组件id>)。 + // 父 scss 会因 @import 子 scss 而含子组件 class,故一个 class 可能有多个来源文件。 + const classSources = new Map() + const compileErrors = [] + let scssCount = 0 + for (const id of fs.readdirSync(PACKAGES_DIR)) { + const scssPath = path.join(PACKAGES_DIR, id, `${id}.scss`) + if (!fs.existsSync(scssPath)) continue + scssCount++ + const { classes, error } = extractClasses(scssPath) + if (error) { + compileErrors.push(`${id}: ${error}`) + continue + } + for (const c of classes) { + if (!classSources.has(c)) classSources.set(c, new Set()) + classSources.get(c).add(id) + } + } + + // 归属:优先归一(命中具体 id 时用它,实现父子 @import 去重); + // 归一失配时归给唯一定义文件(处理 class↔id 不一致,如 nut-countup-*→animatingnumbers); + // 归一失配且跨多文件、又无法定位唯一归属的,进 orphan(多为 nut-rtl 等全局 class,丢弃)。 + const classesByComp = {} + const orphan = new Set() + for (const [c, sources] of classSources) { + const byNorm = resolve(c) + let owner = null + if (byNorm && validIds4Set.has(byNorm)) { + owner = byNorm + } else if (sources.size === 1) { + owner = [...sources][0] + } else { + // 多来源且归一失配:取来源中作为 class 前缀最长者(最具体的定义方)。 + owner = + [...sources] + .filter((id) => c === `nut-${id}` || c.startsWith(`nut-${id}-`)) + .sort((a, b) => b.length - a.length)[0] || null + } + if (!owner) { + orphan.add(c) + continue + } + ;(classesByComp[owner] ||= []).push(c) + } + + // 组装产物:仅纳入至少有 class 或 tokens 的组件,class 去重排序,tokens 复用 meta。 + const components = {} + for (const id of validIds) { + const c = meta.components[id] + const classes = (classesByComp[id] || []).sort() + const tokens = c.tokens || [] + if (!classes.length && !tokens.length) continue + components[id] = { + id, + name: c.name, + cName: c.cName || null, + classes, + tokens, + } + } + + const semantic = { + schemaVersion: SCHEMA_VERSION, + libVersion: meta.libVersion, + componentCount: Object.keys(components).length, + components, + } + const stats = { + scssCount, + classTotal: classSources.size, + assigned: classSources.size - orphan.size, + orphan: [...orphan].sort(), + compileErrors, + emptyComps: validIds.filter( + (id) => !classesByComp[id]?.length && (meta.components[id].tokens || []).length + ), + } + return { semantic, stats } +} + +const SEMANTIC_I18N = { + h5: { + fullTitle: '# NutUI React - 全部组件样式结构', + fullIntro: + '本文件汇总所有组件渲染产物中可用的 CSS class 与 CSS 变量(design tokens),供自定义样式 / 主题覆盖时精确定位。', + mdIntro: [ + '> 本文件列出该组件渲染产物中可用的 CSS class 与 CSS 变量(design tokens),', + '> 供自定义样式 / 主题覆盖时精确定位。', + ], + suffix: '样式结构', + tokenHeading: 'CSS 变量 (Design Tokens)', + tokenTableHead: '| CSS 变量 | SCSS 变量 | 默认值 |', + noClass: '_该组件无独立样式 class。_', + noToken: '_该组件无独立 design token。_', + }, + enUS: { + fullTitle: '# NutUI React - Component Style Structure', + fullIntro: + 'Aggregated CSS classes and CSS variables (design tokens) available on each component’s rendered output, for precise custom styling / theme overrides.', + mdIntro: [ + '> CSS classes and CSS variables (design tokens) available on this component’s rendered output,', + '> for precise custom styling / theme overrides.', + ], + suffix: 'Style Structure', + tokenHeading: 'CSS Variables (Design Tokens)', + tokenTableHead: '| CSS Variable | SCSS Variable | Default |', + noClass: '_This component has no dedicated style class._', + noToken: '_This component has no dedicated design token._', + }, +} + +// 单组件语义主体:CSS Class 列表 + Design Tokens 表格。供单文件 md 与聚合文件复用。 +function semanticBody(c, lang) { + const t = SEMANTIC_I18N[lang] || SEMANTIC_I18N.h5 + const lines = ['## CSS Class', ''] + if (c.classes.length) { + for (const cls of c.classes) lines.push(`- \`${cls}\``) + } else { + lines.push(t.noClass) + } + lines.push('', `## ${t.tokenHeading}`, '') + if (c.tokens.length) { + lines.push(t.tokenTableHead, '| --- | --- | --- |') + for (const tk of c.tokens) { + lines.push(`| ${tk.cssVar} | ${tk.scssVar} | ${tk.default ?? ''} |`) + } + } else { + lines.push(t.noToken) + } + return lines +} + +// 单组件样式结构 md(人类可读 / URL 访问)。数据源为 semantic.json,无需再编译 scss。 +export function generateSemanticMd(semantic, id, lang = 'h5') { + const c = semantic.components[id] + if (!c) return null + const t = SEMANTIC_I18N[lang] || SEMANTIC_I18N.h5 + const title = c.cName ? `${c.name} ${c.cName}` : c.name + const lines = [`# ${title} - ${t.suffix}`, '', ...t.mdIntro, ''] + lines.push(...semanticBody(c, lang)) + return `${lines.join('\n').trimEnd()}\n` +} + +// 语义聚合单文件:按 categories 顺序拼接所有组件的 class+tokens。lang: 'h5'(中文) | 'enUS'(英文)。 +// 组件顺序与 llms-full 一致(沿用 meta.categories)。 +export function generateLlmsSemantic(semantic, meta, lang = 'h5') { + const t = SEMANTIC_I18N[lang] || SEMANTIC_I18N.h5 + const parts = [t.fullTitle, '', `> ${t.fullIntro}`, ''] + for (const cat of meta.categories) { + for (const id of cat.components) { + const c = semantic.components[id] + if (!c) continue + const title = c.cName ? `${c.name} ${c.cName}` : c.name + parts.push('---', '', `# ${title}`, '') + parts.push(...semanticBody(c, lang), '') + } + } + return `${parts.join('\n').trimEnd()}\n` +} + +// 读已生成的 semantic.json(供 site 插件消费,避免二次编译 scss)。 +export function loadSemantic() { + return JSON.parse(fs.readFileSync(SEMANTIC_PATH, 'utf-8')) +} + +function main() { + console.log('🚀 building meta/semantic.json ...') + const meta = loadMeta() + const { semantic, stats } = generateSemantic(meta) + + fs.mkdirSync(OUTPUT_DIR, { recursive: true }) + const files = { + 'semantic.json': `${JSON.stringify(semantic, null, 2)}\n`, + 'llms-semantic-cn.txt': generateLlmsSemantic(semantic, meta, 'h5'), + 'llms-semantic.txt': generateLlmsSemantic(semantic, meta, 'enUS'), + } + for (const [name, content] of Object.entries(files)) { + const out = path.join(OUTPUT_DIR, name) + fs.writeFileSync(out, content) + const kb = (Buffer.byteLength(content) / 1024).toFixed(0) + console.log(`✅ ${path.relative(ROOT, out)} (${kb}KB)`) + } + + console.log(` 编译 scss: ${stats.scssCount},产出组件: ${semantic.componentCount}`) + console.log(` class 总数: ${stats.classTotal},已归属: ${stats.assigned}`) + if (stats.emptyComps.length) { + console.log( + ` 仅 token 无 class 的组件 (${stats.emptyComps.length}): ${stats.emptyComps.join(', ')}` + ) + } + if (stats.orphan.length) { + console.log(`\n⚠️ ${stats.orphan.length} 个 class 未归属(预期为全局/跨组件 class,已丢弃):`) + console.log(` ${stats.orphan.join(', ')}`) + } + if (stats.compileErrors.length) { + console.log(`\n❌ ${stats.compileErrors.length} 个组件编译失败:`) + for (const e of stats.compileErrors) console.log(` - ${e}`) + } else { + console.log('\n✨ 全部 scss 编译成功') + } +} + +if (import.meta.url === pathToFileURL(process.argv[1]).href) { + main() +} diff --git a/scripts/site/vite-plugin-llms.mjs b/scripts/site/vite-plugin-llms.mjs index c5b700b4c8..a682c82c82 100644 --- a/scripts/site/vite-plugin-llms.mjs +++ b/scripts/site/vite-plugin-llms.mjs @@ -12,10 +12,24 @@ import { generateLlmsFull, SITE_BASE, } from '../build-llms.mjs' +import { + loadSemantic, + generateSemanticMd, + generateLlmsSemantic, +} from '../build-semantic.mjs' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const ROOT = path.resolve(__dirname, '../..') +// 读 semantic.json(需先 npm run generate:semantic)。未生成时返回 null,跳过 semantic 产物而非报错。 +function tryLoadSemantic() { + try { + return loadSemantic() + } catch { + return null + } +} + // 收集所有要产出的虚拟文件:{ 相对站点根的路径 -> 文本内容 } function collectFiles() { const meta = loadMeta() @@ -31,6 +45,17 @@ function collectFiles() { if (!fs.existsSync(abs)) continue files[`components/${c.id}.md`] = fs.readFileSync(abs, 'utf-8') } + // 每组件样式结构文档:components//semantic.md(对齐 Ant 的 /semantic.md 语义)。 + // 语义聚合单文件:llms-semantic-cn.txt / llms-semantic.txt(对齐 llms-full 的组织方式)。 + const semantic = tryLoadSemantic() + if (semantic) { + files['llms-semantic-cn.txt'] = generateLlmsSemantic(semantic, meta, 'h5') + files['llms-semantic.txt'] = generateLlmsSemantic(semantic, meta, 'enUS') + for (const id of Object.keys(semantic.components)) { + const md = generateSemanticMd(semantic, id) + if (md) files[`components/${id}/semantic.md`] = md + } + } return files } @@ -54,7 +79,8 @@ export default function llmsPlugin() { ) }, - // dev 阶段:中间件按 /llms.txt、/components/.md 实时返回。 + // dev 阶段:中间件按 /llms.txt、/components/.md、 + // /components//semantic.md 实时返回(后两者均命中 components/ + .md 判定)。 configureServer(server) { const base = SITE_BASE.replace(/\/$/, '') server.middlewares.use((req, res, next) => { @@ -65,6 +91,8 @@ export default function llmsPlugin() { key === 'llms.txt' || key === 'llms-full-cn.txt' || key === 'llms-full.txt' || + key === 'llms-semantic-cn.txt' || + key === 'llms-semantic.txt' || (key.startsWith('components/') && key.endsWith('.md')) if (!isTarget) return next() From 3428c62c39de8812699f5ef1da74e06eb6d5c6fb Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 9 Jul 2026 15:09:27 +0800 Subject: [PATCH 07/21] chore: update .gitignore and package.json for meta generation --- .gitignore | 3 +- meta/components.json | 14137 ----------------------------------------- package.json | 1 + 3 files changed, 3 insertions(+), 14138 deletions(-) delete mode 100644 meta/components.json diff --git a/.gitignore b/.gitignore index f33bf263ff..4112098aa6 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,8 @@ node_modules /dist /dist-demo /dist-site -# llms 派生产物(由 generate:llms / vite 插件在构建时产出),meta/components.json 仍提交 +# meta 派生产物:均由 generate:meta / generate:llms 在构建时产出(build:site 前自动生成),不落库 +/meta/components.json /meta/llms.txt /meta/llms-full-cn.txt /meta/llms-full.txt diff --git a/meta/components.json b/meta/components.json deleted file mode 100644 index 9c9e13556d..0000000000 --- a/meta/components.json +++ /dev/null @@ -1,14137 +0,0 @@ -{ - "schemaVersion": "1.0.0", - "libVersion": "4.0.0-beta.4", - "componentCount": 106, - "apiComponentCount": 85, - "categories": [ - { - "name": "基础组件", - "enName": "base", - "components": [ - "button", - "cell", - "cellgroup", - "configprovider", - "icon", - "image", - "overlay" - ] - }, - { - "name": "布局组件", - "enName": "layout", - "components": [ - "divider", - "grid", - "griditem", - "layout", - "col", - "row", - "safearea", - "space", - "sticky" - ] - }, - { - "name": "导航组件", - "enName": "nav", - "components": [ - "backtop", - "elevator", - "fixednav", - "hoverbutton", - "hoverbuttonitem", - "navbar", - "sidebar", - "sidebaritem", - "tabbar", - "tabbaritem", - "tabpane", - "tabs" - ] - }, - { - "name": "数据录入", - "enName": "dentry", - "components": [ - "address", - "calendar", - "calendaritem", - "calendarcard", - "cascader", - "checkbox", - "checkboxgroup", - "datepicker", - "datepickerview", - "form", - "formitem", - "input", - "inputnumber" - ] - }, - { - "name": "数据录入", - "enName": "dataentry", - "components": [ - "menu", - "menuitem", - "numberkeyboard", - "picker", - "pickerview", - "radio", - "radiogroup", - "range", - "rate", - "searchbar", - "shortpassword", - "signature", - "switch", - "textarea", - "uploader" - ] - }, - { - "name": "操作反馈", - "enName": "feedback", - "components": [ - "actionsheet", - "badge", - "dialog", - "drag", - "empty", - "infiniteloading", - "loading", - "noticebar", - "notify", - "popover", - "popup", - "pulltorefresh", - "resultpage", - "skeleton", - "swipe", - "toast" - ] - }, - { - "name": "展示组件", - "enName": "exhibition", - "components": [ - "animate", - "animatingnumbers", - "audio", - "avatar", - "avatargroup", - "circleprogress", - "collapse", - "collapseitem", - "countdown", - "ellipsis", - "imagepreview", - "indicator", - "lottie", - "pagination", - "price", - "progress", - "segmented", - "step", - "steps", - "swiper", - "swiperitem", - "table", - "tag", - "tour", - "video", - "virtuallist" - ] - }, - { - "name": "特色组件", - "enName": "business", - "components": [ - "quickenter", - "avatarcropper", - "barrage", - "card", - "timedetail", - "timeselect", - "trendarrow", - "watermark" - ] - } - ], - "globalTokens": [ - { - "cssVar": "--nutui-color-primary", - "scssVar": "$color-primary", - "default": "#ff0f23" - }, - { - "cssVar": "--nutui-color-primary-stop-1", - "scssVar": "$color-primary-stop-1", - "default": "#ff475d" - }, - { - "cssVar": "--nutui-color-primary-stop-2", - "scssVar": "$color-primary-stop-2", - "default": "#ff0f23" - }, - { - "cssVar": "--nutui-color-primary-pressed", - "scssVar": "$color-primary-pressed", - "default": "#db0b15" - }, - { - "cssVar": "--nutui-color-primary-disabled", - "scssVar": "$color-primary-disabled", - "default": "#c2c4cc" - }, - { - "cssVar": "--nutui-color-primary-icon", - "scssVar": "$color-primary-icon", - "default": "#ff3333" - }, - { - "cssVar": "--nutui-color-default", - "scssVar": "$color-default", - "default": null - }, - { - "cssVar": "--nutui-color-default-pressed", - "scssVar": "$color-default-pressed", - "default": "#e6e6e6" - }, - { - "cssVar": "--nutui-color-default-light", - "scssVar": "$color-default-light", - "default": null - }, - { - "cssVar": "--nutui-color-default-disabled", - "scssVar": "$color-default-disabled", - "default": null - }, - { - "cssVar": "--nutui-color-info", - "scssVar": "$color-info", - "default": "#0c82f7" - }, - { - "cssVar": "--nutui-color-info-pressed", - "scssVar": "$color-info-pressed", - "default": "#496af2" - }, - { - "cssVar": "--nutui-color-info-disabled", - "scssVar": "$color-info-disabled", - "default": "#89a6f8" - }, - { - "cssVar": "--nutui-color-info-light", - "scssVar": "$color-info-light", - "default": "#e6f7ff" - }, - { - "cssVar": "--nutui-color-info", - "scssVar": "$color-info-text", - "default": "#0c82f7" - }, - { - "cssVar": "--nutui-color-success", - "scssVar": "$color-success", - "default": "#0acc2a" - }, - { - "cssVar": "--nutui-color-success-disabled", - "scssVar": "$color-success-disabled", - "default": "#b2f0ae" - }, - { - "cssVar": "--nutui-color-success-text", - "scssVar": "$color-success-text", - "default": "#00801e" - }, - { - "cssVar": "--nutui-color-warning", - "scssVar": "$color-warning", - "default": "#ffaa00" - }, - { - "cssVar": "--nutui-color-warning-disabled", - "scssVar": "$color-warning-disabled", - "default": "#fdd3b9" - }, - { - "cssVar": "--nutui-color-warning-text", - "scssVar": "$color-warning-text", - "default": "#c47600" - }, - { - "cssVar": "--nutui-color-danger", - "scssVar": "$color-danger", - "default": "#ff0f23" - }, - { - "cssVar": "--nutui-color-danger-pressed", - "scssVar": "$color-danger-pressed", - "default": "#ff3333" - }, - { - "cssVar": "--nutui-color-danger-light", - "scssVar": "$color-danger-light", - "default": "#ffebef" - }, - { - "cssVar": "--nutui-color-danger-text", - "scssVar": "$color-danger-text", - "default": "#ff0f23" - }, - { - "cssVar": "--nutui-color-service", - "scssVar": "$color-service", - "default": "#fff4e0" - }, - { - "cssVar": "--nutui-color-service-pressed", - "scssVar": "$color-service-pressed", - "default": "#f2ba79" - }, - { - "cssVar": "--nutui-color-service-border", - "scssVar": "$color-service-border", - "default": "#ccb9ab" - }, - { - "cssVar": "--nutui-color-service-text", - "scssVar": "$color-service-text", - "default": "#80512d" - }, - { - "cssVar": "--nutui-color-service-btn-bg", - "scssVar": "$color-service-btn-bg", - "default": "#ffe6c2" - }, - { - "cssVar": "--nutui-color-service-btn-bg-pressed", - "scssVar": "$color-service-btn-bg-pressed", - "default": "#ffddad" - }, - { - "cssVar": "--nutui-color-service-btn-bg-disabled", - "scssVar": "$color-service-btn-bg-disabled", - "default": "#fff4e8" - }, - { - "cssVar": "--nutui-color-background", - "scssVar": "$color-background", - "default": "#f2f3f5" - }, - { - "cssVar": "--nutui-color-mask", - "scssVar": "$color-mask", - "default": "rgba(0, 0, 0, 0.7)" - }, - { - "cssVar": "--nutui-color-mask-part", - "scssVar": "$color-mask-part", - "default": "rgba(0, 0, 0, 0.4)" - }, - { - "cssVar": "--nutui-color-border", - "scssVar": "$color-border", - "default": "rgba(0, 0, 0, 0.06)" - }, - { - "cssVar": "--nutui-color-border-disabled", - "scssVar": "$color-border-disabled", - "default": "#c2c4cc" - }, - { - "cssVar": "--nutui-color-title", - "scssVar": "$color-title", - "default": "#1a1a1a" - }, - { - "cssVar": "--nutui-color-text", - "scssVar": "$color-text", - "default": "#505259" - }, - { - "cssVar": "--nutui-color-text-help", - "scssVar": "$color-text-help", - "default": "#888b94" - }, - { - "cssVar": "--nutui-color-text-disabled", - "scssVar": "$color-text-disabled", - "default": "#b4b8bf" - }, - { - "cssVar": "--nutui-color-text-link", - "scssVar": "$color-text-link", - "default": "#0c82f7" - }, - { - "cssVar": "--nutui-color-primary-text", - "scssVar": "$color-primary-text", - "default": "#ffffff" - }, - { - "cssVar": "--nutui-font-size-xxxs", - "scssVar": "$font-size-xxxs", - "default": "scale-font-px(9px)" - }, - { - "cssVar": "--nutui-font-size-xxs", - "scssVar": "$font-size-xxs", - "default": "scale-font-px(10px)" - }, - { - "cssVar": "--nutui-font-size-xs", - "scssVar": "$font-size-xs", - "default": "scale-font-px(11px)" - }, - { - "cssVar": "--nutui-font-size-s", - "scssVar": "$font-size-s", - "default": "scale-font-px(12px)" - }, - { - "cssVar": "--nutui-font-size-m", - "scssVar": "$font-size-m", - "default": "scale-font-px(13px)" - }, - { - "cssVar": "--nutui-font-size-base", - "scssVar": "$font-size-base", - "default": "scale-font-px(14px)" - }, - { - "cssVar": "--nutui-font-size-l", - "scssVar": "$font-size-l", - "default": "scale-font-px(15px)" - }, - { - "cssVar": "--nutui-font-size-md", - "scssVar": "$font-size-md", - "default": "scale-font-px(16px)" - }, - { - "cssVar": "--nutui-font-size-icon", - "scssVar": "$font-size-icon", - "default": "scale-icon-px(16px)" - }, - { - "cssVar": "--nutui-font-size-xl", - "scssVar": "$font-size-xl", - "default": "scale-font-px(18px)" - }, - { - "cssVar": "--nutui-font-size-2xl", - "scssVar": "$font-size-2xl", - "default": "scale-font-px(20px)" - }, - { - "cssVar": "--nutui-font-size-xxl", - "scssVar": "$font-size-xxl", - "default": "scale-font-px(24px)" - }, - { - "cssVar": "--nutui-font-size-10", - "scssVar": "$font-size-xxxl", - "default": "scale-font-px(26px)" - }, - { - "cssVar": "--nutui-font-size-11", - "scssVar": "$font-size-xxxxl", - "default": "scale-font-px(28px)" - }, - { - "cssVar": "--nutui-line-height-xxxs", - "scssVar": "$line-height-xxxs", - "default": "$font-size-xxxs" - }, - { - "cssVar": "--nutui-line-height-xxs", - "scssVar": "$line-height-xxs", - "default": "$font-size-xxs" - }, - { - "cssVar": "--nutui-line-height-xs", - "scssVar": "$line-height-xs", - "default": "$font-size-xs" - }, - { - "cssVar": "--nutui-line-height-s", - "scssVar": "$line-height-s", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-line-height-m", - "scssVar": "$line-height-m", - "default": "$font-size-m" - }, - { - "cssVar": "--nutui-line-height-base", - "scssVar": "$line-height-base", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-line-height-l", - "scssVar": "$line-height-l", - "default": "$font-size-l" - }, - { - "cssVar": "--nutui-line-height-md", - "scssVar": "$line-height-md", - "default": "$font-size-md" - }, - { - "cssVar": "--nutui-line-height-icon", - "scssVar": "$line-height-icon", - "default": "$font-size-icon" - }, - { - "cssVar": "--nutui-line-height-xl", - "scssVar": "$line-height-xl", - "default": "$font-size-xl" - }, - { - "cssVar": "--nutui-line-height-2xl", - "scssVar": "$line-height-2xl", - "default": "$font-size-2xl" - }, - { - "cssVar": "--nutui-line-height-xxl", - "scssVar": "$line-height-xxl", - "default": "$font-size-xxl" - }, - { - "cssVar": "--nutui-line-height-xxxl", - "scssVar": "$line-height-xxxl", - "default": "$font-size-xxxl" - }, - { - "cssVar": "--nutui-line-height-xxxxl", - "scssVar": "$line-height-xxxxl", - "default": "$font-size-xxxxl" - }, - { - "cssVar": "--nutui-font-weight-light", - "scssVar": "$font-weight-light", - "default": "300" - }, - { - "cssVar": "--nutui-font-weight", - "scssVar": "$font-weight", - "default": "400" - }, - { - "cssVar": "--nutui-font-weight-medium", - "scssVar": "$font-weight-medium", - "default": "500" - }, - { - "cssVar": "--nutui-font-weight-bold", - "scssVar": "$font-weight-bold", - "default": "600" - }, - { - "cssVar": "--nutui-spacing-xxxs", - "scssVar": "$spacing-xxxs", - "default": "scale-px(2px)" - }, - { - "cssVar": "--nutui-spacing-xxs", - "scssVar": "$spacing-xxs", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-spacing-xs", - "scssVar": "$spacing-xs", - "default": "scale-px(6px)" - }, - { - "cssVar": "--nutui-spacing-s", - "scssVar": "$spacing-s", - "default": "scale-px(7px)" - }, - { - "cssVar": "--nutui-spacing-base", - "scssVar": "$spacing-base", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-spacing-l", - "scssVar": "$spacing-l", - "default": "scale-px(9px)" - }, - { - "cssVar": "--nutui-spacing-xl", - "scssVar": "$spacing-xl", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-spacing-xxl", - "scssVar": "$spacing-xxl", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-spacing-xxxl", - "scssVar": "$spacing-xxxl", - "default": "scale-px(18px)" - }, - { - "cssVar": "--nutui-radius-xxs", - "scssVar": "$radius-xxs", - "default": "scale-px(2px)" - }, - { - "cssVar": "--nutui-radius-xs", - "scssVar": "$radius-xs", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-radius-s", - "scssVar": "$radius-s", - "default": "scale-px(6px)" - }, - { - "cssVar": "--nutui-radius-base", - "scssVar": "$radius-base", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-radius-l", - "scssVar": "$radius-l", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-radius-xxl", - "scssVar": "$radius-xxl", - "default": "scale-px(14px)" - }, - { - "cssVar": "--nutui-radius-xxxl", - "scssVar": "$radius-xxxl", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-list-item-margin", - "scssVar": "$list-item-margin", - "default": "0 0 scale-px(10px) 0" - }, - { - "cssVar": "--nutui-addresslist-bg", - "scssVar": "$addresslist-bg", - "default": "#fff" - }, - { - "cssVar": "--nutui-addresslist-border", - "scssVar": "$addresslist-border", - "default": "#f0f0f0" - }, - { - "cssVar": "--nutui-addresslist-font-color", - "scssVar": "$addresslist-font-color", - "default": "#333333" - }, - { - "cssVar": "--nutui-addresslist-font-size", - "scssVar": "$addresslist-font-size", - "default": "$font-size-md" - }, - { - "cssVar": "--nutui-addresslist-set-bg", - "scssVar": "$addresslist-set-bg", - "default": "#f5a623" - }, - { - "cssVar": "--nutui-addresslist-del-bg", - "scssVar": "$addresslist-del-bg", - "default": "#e1251b" - }, - { - "cssVar": "--nutui-countup-width", - "scssVar": "$countup-width", - "default": "auto" - }, - { - "cssVar": "--nutui-countup-height", - "scssVar": "$countup-height", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-countup-base-size", - "scssVar": "$countup-base-size", - "default": "$font-size-xl" - }, - { - "cssVar": "--nutui-countup-border-radius", - "scssVar": "$countup-border-radius", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-countup-lr-margin", - "scssVar": "$countup-lr-margin", - "default": "0" - }, - { - "cssVar": "--nutui-countup-bg-color", - "scssVar": "$countup-bg-color", - "default": "inherit" - }, - { - "cssVar": "--nutui-countup-color", - "scssVar": "$countup-color", - "default": "$color-title" - } - ], - "components": { - "button": { - "id": "button", - "name": "Button", - "cName": "按钮", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "", - "type": "component", - "desc": "按钮", - "sort": 1, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/button/doc.md", - "enUS": "src/packages/button/doc.en-US.md", - "zhTW": "src/packages/button/doc.zh-TW.md", - "taro": "src/packages/button/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/button/demos/h5/demo1.tsx", - "src/packages/button/demos/h5/demo2.tsx", - "src/packages/button/demos/h5/demo3.tsx", - "src/packages/button/demos/h5/demo4.tsx", - "src/packages/button/demos/h5/demo5.tsx", - "src/packages/button/demos/h5/demo6.tsx", - "src/packages/button/demos/h5/demo7.tsx", - "src/packages/button/demos/h5/demo8.tsx", - "src/packages/button/demos/h5/demo9.tsx", - "src/packages/button/demos/h5/demo10.tsx" - ], - "taro": [ - "src/packages/button/demos/taro/demo1.tsx", - "src/packages/button/demos/taro/demo2.tsx", - "src/packages/button/demos/taro/demo3.tsx", - "src/packages/button/demos/taro/demo4.tsx", - "src/packages/button/demos/taro/demo5.tsx", - "src/packages/button/demos/taro/demo6.tsx", - "src/packages/button/demos/taro/demo7.tsx", - "src/packages/button/demos/taro/demo8.tsx", - "src/packages/button/demos/taro/demo9.tsx", - "src/packages/button/demos/taro/demo10.tsx", - "src/packages/button/demos/taro/demo11.tsx" - ] - }, - "spec": { - "base": "src/types/spec/button/base.ts", - "h5": "src/types/spec/button/h5.ts", - "taro": "src/types/spec/button/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Button", - "subComponent": null, - "rows": [ - { - "prop": "type", - "desc": "按钮的样式", - "type": "`default` | `primary` | `info` | `warning` | `danger` | `success`", - "default": "default" - }, - { - "prop": "size", - "desc": "按钮的尺寸", - "type": "`normal` | `large` | `small`", - "default": "normal" - }, - { - "prop": "shape", - "desc": "按钮的形状", - "type": "`square` | `round`", - "default": "round" - }, - { - "prop": "color", - "desc": "按钮颜色,支持传入 linear-gradient 渐变色", - "type": "`string`", - "default": "-" - }, - { - "prop": "fill", - "desc": "填充模式", - "type": "`solid` | `ouline` | `none`", - "default": "solid" - }, - { - "prop": "disabled", - "desc": "是否禁用按钮", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "block", - "desc": "是否为块级元素", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "icon", - "desc": "按钮图标", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "loading", - "desc": "按钮loading状态", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onClick", - "desc": "点击按钮时触发", - "type": "`onClick: (e: MouseEvent) => void`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-button-border-radius", - "scssVar": "$button-border-radius", - "default": "$radius-s" - }, - { - "cssVar": "--nutui-button-border-width", - "scssVar": "$button-border-width", - "default": "scale-px(0.5px)" - }, - { - "cssVar": "--nutui-button-normal-padding", - "scssVar": "$button-normal-padding", - "default": "0px scale-px(12px)" - }, - { - "cssVar": "--nutui-button-default-height", - "scssVar": "$button-default-height", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-button-default-color", - "scssVar": "$button-default-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-button-default-padding", - "scssVar": "$button-default-padding", - "default": "0px scale-px(12px)" - }, - { - "cssVar": "--nutui-button-xlarge-height", - "scssVar": "$button-xlarge-height", - "default": "scale-px(48px)" - }, - { - "cssVar": "--nutui-button-xlarge-padding", - "scssVar": "$button-xlarge-padding", - "default": "0px scale-px(20px)" - }, - { - "cssVar": "--nutui-button-44-height", - "scssVar": "$button-44-height", - "default": "scale-px(44px)" - }, - { - "cssVar": "--nutui-button-44-padding", - "scssVar": "$button-44-padding", - "default": "0px scale-px(16px)" - }, - { - "cssVar": "--nutui-button-large-height", - "scssVar": "$button-large-height", - "default": "scale-px(40px)" - }, - { - "cssVar": "--nutui-button-large-padding", - "scssVar": "$button-large-padding", - "default": "0px scale-px(12px)" - }, - { - "cssVar": "--nutui-button-36-height", - "scssVar": "$button-36-height", - "default": "scale-px(36px)" - }, - { - "cssVar": "--nutui-button-36-padding", - "scssVar": "$button-36-padding", - "default": "0px scale-px(12px)" - }, - { - "cssVar": "--nutui-button-small-padding", - "scssVar": "$button-small-padding", - "default": "0px scale-px(8px)" - }, - { - "cssVar": "--nutui-button-small-height", - "scssVar": "$button-small-height", - "default": "scale-px(28px)" - }, - { - "cssVar": "--nutui-button-mini-padding", - "scssVar": "$button-mini-padding", - "default": "0px scale-px(6px)" - }, - { - "cssVar": "--nutui-button-mini-height", - "scssVar": "$button-mini-height", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-button-text-icon-margin", - "scssVar": "$button-text-icon-margin", - "default": "scale-px(4px)" - } - ] - }, - "cell": { - "id": "cell", - "name": "Cell", - "cName": "单元格", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "列表项,可组成列表", - "sort": 2, - "show": true, - "docs": { - "h5": "src/packages/cell/doc.md", - "enUS": "src/packages/cell/doc.en-US.md", - "zhTW": "src/packages/cell/doc.zh-TW.md", - "taro": "src/packages/cell/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/cell/demos/h5/demo1.tsx", - "src/packages/cell/demos/h5/demo2.tsx", - "src/packages/cell/demos/h5/demo3.tsx", - "src/packages/cell/demos/h5/demo4.tsx", - "src/packages/cell/demos/h5/demo5.tsx", - "src/packages/cell/demos/h5/demo6.tsx", - "src/packages/cell/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/cell/demos/taro/demo1.tsx", - "src/packages/cell/demos/taro/demo2.tsx", - "src/packages/cell/demos/taro/demo3.tsx", - "src/packages/cell/demos/taro/demo4.tsx", - "src/packages/cell/demos/taro/demo5.tsx", - "src/packages/cell/demos/taro/demo6.tsx", - "src/packages/cell/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/cell/base.ts", - "h5": "src/types/spec/cell/h5.ts", - "taro": "src/types/spec/cell/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Cell", - "subComponent": null, - "rows": [ - { - "prop": "title", - "desc": "标题", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "description", - "desc": "描述", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "extra", - "desc": "右侧描述", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "radius", - "desc": "圆角半径", - "type": "`string`", - "default": "6px" - }, - { - "prop": "align", - "desc": "纵轴方向上的对齐方式,可选值为:`flex-start`、`center`、`flex-end`", - "type": "`string`", - "default": "flex-start" - }, - { - "prop": "onClick", - "desc": "点击事件", - "type": "`onClick: (event: React.MouseEvent) => void`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-cell-title-color", - "scssVar": "$cell-title-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-cell-extra-color", - "scssVar": "$cell-extra-color", - "default": "$color-text" - }, - { - "cssVar": "--nutui-cell-border-radius", - "scssVar": "$cell-border-radius", - "default": "scale-px(6px)" - }, - { - "cssVar": "--nutui-cell-padding", - "scssVar": "$cell-padding", - "default": "scale-px(13px) scale-px(16px)" - }, - { - "cssVar": "--nutui-cell-line-height", - "scssVar": "$cell-line-height", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-cell-divider-right", - "scssVar": "$cell-divider-right", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-cell-divider-left", - "scssVar": "$cell-divider-left", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-cell-group-wrap-margin", - "scssVar": "$cell-group-wrap-margin", - "default": "scale-px(10px)" - } - ] - }, - "cellgroup": { - "id": "cellgroup", - "name": "CellGroup", - "cName": "单元格", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "列表项,可组成列表", - "sort": 2, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "CellGroup", - "subComponent": null, - "rows": [ - { - "prop": "title", - "desc": "分组标题", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "description", - "desc": "分组描述", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "divider", - "desc": "单元格之间是否有分割线", - "type": "`boolean`", - "default": "true" - } - ] - } - ] - }, - "tokens": [] - }, - "configprovider": { - "id": "configprovider", - "name": "ConfigProvider", - "cName": "全局配置", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "hanyuxinting", - "type": "component", - "desc": "可以配置多语言等全局属性", - "sort": 16, - "show": true, - "docs": { - "h5": "src/packages/configprovider/doc.md", - "enUS": "src/packages/configprovider/doc.en-US.md", - "zhTW": "src/packages/configprovider/doc.zh-TW.md", - "taro": "src/packages/configprovider/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/configprovider/demos/h5/demo1.tsx", - "src/packages/configprovider/demos/h5/demo2.tsx", - "src/packages/configprovider/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/configprovider/demos/taro/demo1.tsx", - "src/packages/configprovider/demos/taro/demo2.tsx", - "src/packages/configprovider/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/configprovider/base.ts", - "h5": "src/types/spec/configprovider/h5.ts", - "taro": "src/types/spec/configprovider/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "ConfigProvider", - "subComponent": null, - "rows": [ - { - "prop": "locale", - "desc": "设置多语言包", - "type": "`BaseLang`", - "default": "zhCN" - }, - { - "prop": "theme", - "desc": "设置主题", - "type": "`Record`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "icon": { - "id": "icon", - "name": "Icon", - "cName": "图标", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "oasis-cloud", - "type": "component", - "desc": "基于 IconFont 字体的图标集", - "sort": 1, - "show": true, - "exclude": true, - "docs": { - "h5": "src/packages/icon/doc.md", - "enUS": "src/packages/icon/doc.en-US.md", - "zhTW": "src/packages/icon/doc.zh-TW.md", - "taro": "src/packages/icon/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/icon/demos/h5/demo1.tsx", - "src/packages/icon/demos/h5/demo2.tsx", - "src/packages/icon/demos/h5/demo3.tsx", - "src/packages/icon/demos/h5/demo4.tsx", - "src/packages/icon/demos/h5/demo5.tsx", - "src/packages/icon/demos/h5/demo6.tsx", - "src/packages/icon/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/icon/demos/taro/demo1.tsx", - "src/packages/icon/demos/taro/demo2.tsx", - "src/packages/icon/demos/taro/demo3.tsx", - "src/packages/icon/demos/taro/demo4.tsx", - "src/packages/icon/demos/taro/demo5.tsx", - "src/packages/icon/demos/taro/demo6.tsx", - "src/packages/icon/demos/taro/demo7.tsx" - ] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Icon", - "subComponent": null, - "rows": [ - { - "prop": "name", - "desc": "图标名称或图片链接", - "type": "`string`", - "default": "-" - }, - { - "prop": "color", - "desc": "图标颜色", - "type": "`string`", - "default": "-" - }, - { - "prop": "width", - "desc": "图标大小,如 `20px` `2em` `2rem`", - "type": "`string` | `object`", - "default": "-" - }, - { - "prop": "height", - "desc": "图标大小,如 `20px` `2em` `2rem`", - "type": "`string` | `object`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击图标时触发", - "type": "`event: Event`", - "default": "-" - } - ] - }, - { - "name": "Props", - "kind": "props", - "sourceComponent": "IconFont", - "subComponent": null, - "rows": [ - { - "prop": "name", - "desc": "图标名称或图片链接", - "type": "`string`", - "default": "-" - }, - { - "prop": "color", - "desc": "图标颜色", - "type": "`string`", - "default": "-" - }, - { - "prop": "size", - "desc": "图标大小,如 `20px` `2em` `2rem`", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "classPrefix", - "desc": "类名前缀,用于使用自定义图标", - "type": "`string`", - "default": "nut-iconfont" - }, - { - "prop": "fontClassName", - "desc": "自定义 icon 字体基础类名", - "type": "`string`", - "default": "nutui-iconfont" - }, - { - "prop": "tag", - "desc": "tsx 标签", - "type": "`string`", - "default": "i" - }, - { - "prop": "onClick", - "desc": "点击图标时触发", - "type": "`event: Event`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-icon-size-6", - "scssVar": "$icon-size-6", - "default": "scale-icon-px(6px)" - }, - { - "cssVar": "--nutui-icon-size-8", - "scssVar": "$icon-size-8", - "default": "scale-icon-px(8px)" - }, - { - "cssVar": "--nutui-icon-size-10", - "scssVar": "$icon-size-10", - "default": "scale-icon-px(10px)" - }, - { - "cssVar": "--nutui-icon-size-11", - "scssVar": "$icon-size-11", - "default": "scale-icon-px(11px)" - }, - { - "cssVar": "--nutui-icon-size-12", - "scssVar": "$icon-size-12", - "default": "scale-icon-px(12px)" - }, - { - "cssVar": "--nutui-icon-size-16", - "scssVar": "$icon-size-16", - "default": "scale-icon-px(16px)" - }, - { - "cssVar": "--nutui-icon-size-18", - "scssVar": "$icon-size-18", - "default": "scale-icon-px(18px)" - }, - { - "cssVar": "--nutui-icon-size-20", - "scssVar": "$icon-size-20", - "default": "scale-icon-px(20px)" - }, - { - "cssVar": "--nutui-icon-size-22", - "scssVar": "$icon-size-22", - "default": "scale-icon-px(22px)" - }, - { - "cssVar": "--nutui-icon-height", - "scssVar": "$icon-height", - "default": "$icon-size-20" - }, - { - "cssVar": "--nutui-icon-width", - "scssVar": "$icon-width", - "default": "$icon-size-20" - }, - { - "cssVar": "--nutui-icon-line-height", - "scssVar": "$icon-line-height", - "default": "$icon-size-20" - } - ] - }, - "image": { - "id": "image", - "name": "Image", - "cName": "图片", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "vickyYE", - "type": "component", - "desc": "增强版的 img 标签,提供多种图片填充模式,支持图片加载中提示、加载失败提示。", - "sort": 8, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/image/doc.md", - "enUS": "src/packages/image/doc.en-US.md", - "zhTW": "src/packages/image/doc.zh-TW.md", - "taro": "src/packages/image/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/image/demos/h5/demo1.tsx", - "src/packages/image/demos/h5/demo2.tsx", - "src/packages/image/demos/h5/demo3.tsx", - "src/packages/image/demos/h5/demo4.tsx", - "src/packages/image/demos/h5/demo5.tsx", - "src/packages/image/demos/h5/demo6.tsx", - "src/packages/image/demos/h5/demo7.tsx", - "src/packages/image/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/image/demos/taro/demo1.tsx", - "src/packages/image/demos/taro/demo2.tsx", - "src/packages/image/demos/taro/demo3.tsx", - "src/packages/image/demos/taro/demo4.tsx", - "src/packages/image/demos/taro/demo5.tsx", - "src/packages/image/demos/taro/demo6.tsx", - "src/packages/image/demos/taro/demo7.tsx", - "src/packages/image/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/image/base.ts", - "h5": "src/types/spec/image/h5.ts", - "taro": "src/types/spec/image/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Image", - "subComponent": null, - "rows": [ - { - "prop": "src", - "desc": "图片链接", - "type": "`string`", - "default": "-" - }, - { - "prop": "fit", - "desc": "图片填充模式,等同于原生的 object-fit 属性", - "type": "`ImageFit`", - "default": "fill" - }, - { - "prop": "position", - "desc": "图片位置,等同于原生的 object-position 属性", - "type": "`ImagePosition`", - "default": "center" - }, - { - "prop": "alt", - "desc": "替代文本", - "type": "`string`", - "default": "-" - }, - { - "prop": "width", - "desc": "宽度,默认单位`px`", - "type": "`string`", - "default": "-" - }, - { - "prop": "height", - "desc": "高度,默认单位`px`", - "type": "`string`", - "default": "-" - }, - { - "prop": "radius", - "desc": "圆角大小", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "error", - "desc": "是否展示图片加载失败", - "type": "`boolean | ReactNode`", - "default": "true" - }, - { - "prop": "loading", - "desc": "是否展示加载中图片", - "type": "`boolean | ReactNode`", - "default": "true" - }, - { - "prop": "lazy", - "desc": "是否为懒加载图片", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onClick", - "desc": "点击图片时触发", - "type": "`(e: MouseEvent) => void`", - "default": "-" - }, - { - "prop": "onLoad", - "desc": "图片加载完后触发", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onError", - "desc": "图片加载失败后触发", - "type": "`() => void`", - "default": "-" - } - ] - }, - { - "name": "ImageFit 图片填充模式", - "kind": "other", - "sourceComponent": "Image", - "subComponent": null, - "rows": [ - { - "prop": "contain", - "desc": "保持宽高缩放图片,使图片的长边能完全显示出来", - "type": "", - "default": "" - }, - { - "prop": "cover", - "desc": "保持宽高缩放图片,使图片的短边能完全显示出来,裁剪长边", - "type": "", - "default": "" - }, - { - "prop": "fill", - "desc": "拉伸图片,使图片填满元素", - "type": "", - "default": "" - }, - { - "prop": "none", - "desc": "保持图片原有尺寸", - "type": "", - "default": "" - }, - { - "prop": "scale-down", - "desc": "取 none 或 contain 中较小的一个", - "type": "", - "default": "" - } - ] - }, - { - "name": "ImagePosition 图片位置", - "kind": "other", - "sourceComponent": "Image", - "subComponent": null, - "rows": [ - { - "prop": "center", - "desc": "居中对齐", - "type": "", - "default": "" - }, - { - "prop": "top", - "desc": "顶部对齐", - "type": "", - "default": "" - }, - { - "prop": "right", - "desc": "右侧对齐", - "type": "", - "default": "" - }, - { - "prop": "bottom", - "desc": "底部对齐", - "type": "", - "default": "" - }, - { - "prop": "left", - "desc": "左侧对齐", - "type": "", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "overlay": { - "id": "overlay", - "name": "Overlay", - "cName": "遮罩层", - "version": "3.0.0", - "category": { - "name": "基础组件", - "enName": "base" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "junjun", - "type": "component", - "desc": "创建一个遮罩层,通常用于阻止用户进行其他操作", - "sort": 5, - "show": true, - "docs": { - "h5": "src/packages/overlay/doc.md", - "enUS": "src/packages/overlay/doc.en-US.md", - "zhTW": "src/packages/overlay/doc.zh-TW.md", - "taro": "src/packages/overlay/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/overlay/demos/h5/demo1.tsx", - "src/packages/overlay/demos/h5/demo2.tsx", - "src/packages/overlay/demos/h5/demo3.tsx", - "src/packages/overlay/demos/h5/demo4.tsx", - "src/packages/overlay/demos/h5/demo5.tsx", - "src/packages/overlay/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/overlay/demos/taro/demo1.tsx", - "src/packages/overlay/demos/taro/demo2.tsx", - "src/packages/overlay/demos/taro/demo3.tsx", - "src/packages/overlay/demos/taro/demo4.tsx", - "src/packages/overlay/demos/taro/demo5.tsx", - "src/packages/overlay/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/overlay/base.ts", - "h5": "src/types/spec/overlay/h5.ts", - "taro": "src/types/spec/overlay/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Overlay", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "当前组件是否显示", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "zIndex", - "desc": "遮罩层级", - "type": "`number`", - "default": "2000" - }, - { - "prop": "duration", - "desc": "动画时长,单位秒", - "type": "`number`", - "default": "0.3" - }, - { - "prop": "lockScroll", - "desc": "背景是否锁定", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "closeOnOverlayClick", - "desc": "是否点击遮罩关闭", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "onClick", - "desc": "点击时触发", - "type": "`event: Event`", - "default": "-" - }, - { - "prop": "afterClose", - "desc": "完全关闭后触发", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "afterShow", - "desc": "完全展示后触发", - "type": "`() => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-overlay-bg-color", - "scssVar": "$overlay-bg-color", - "default": "$color-mask" - } - ] - }, - "divider": { - "id": "divider", - "name": "Divider", - "cName": "分割线", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "vickyYE", - "type": "component", - "desc": "用于将内容分隔为多个区域", - "sort": 7, - "show": true, - "docs": { - "h5": "src/packages/divider/doc.md", - "enUS": "src/packages/divider/doc.en-US.md", - "zhTW": "src/packages/divider/doc.zh-TW.md", - "taro": "src/packages/divider/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/divider/demos/h5/demo1.tsx", - "src/packages/divider/demos/h5/demo2.tsx", - "src/packages/divider/demos/h5/demo3.tsx", - "src/packages/divider/demos/h5/demo4.tsx", - "src/packages/divider/demos/h5/demo5.tsx", - "src/packages/divider/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/divider/demos/taro/demo1.tsx", - "src/packages/divider/demos/taro/demo2.tsx", - "src/packages/divider/demos/taro/demo3.tsx", - "src/packages/divider/demos/taro/demo4.tsx", - "src/packages/divider/demos/taro/demo5.tsx", - "src/packages/divider/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/divider/base.ts", - "h5": "src/types/spec/divider/h5.ts", - "taro": "src/types/spec/divider/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Divider", - "subComponent": null, - "rows": [ - { - "prop": "contentPosition", - "desc": "内容位置", - "type": "`left` | `center` | `right`", - "default": "center" - }, - { - "prop": "direction", - "desc": "水平还是垂直类型", - "type": "`horizontal` | `vertical`", - "default": "horizontal" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-divider-margin", - "scssVar": "$divider-margin", - "default": "scale-px(16px) 0" - }, - { - "cssVar": "--nutui-divider-text-color", - "scssVar": "$divider-text-color", - "default": "$color-text" - }, - { - "cssVar": "--nutui-divider-line-height", - "scssVar": "$divider-line-height", - "default": "scale-px(1px)" - }, - { - "cssVar": "--nutui-divider-spacing", - "scssVar": "$divider-spacing", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-divider-side-width", - "scssVar": "$divider-side-width", - "default": "10%" - }, - { - "cssVar": "--nutui-divider-vertical-height", - "scssVar": "$divider-vertical-height", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-divider-vertical-margin", - "scssVar": "$divider-vertical-margin", - "default": "0 scale-px(8px)" - } - ] - }, - "grid": { - "id": "grid", - "name": "Grid", - "cName": "宫格", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "yangxiaolu", - "type": "component", - "desc": "宫格", - "sort": 5, - "show": true, - "docs": { - "h5": "src/packages/grid/doc.md", - "enUS": "src/packages/grid/doc.en-US.md", - "zhTW": "src/packages/grid/doc.zh-TW.md", - "taro": "src/packages/grid/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/grid/demos/h5/demo1.tsx", - "src/packages/grid/demos/h5/demo2.tsx", - "src/packages/grid/demos/h5/demo3.tsx", - "src/packages/grid/demos/h5/demo4.tsx", - "src/packages/grid/demos/h5/demo5.tsx", - "src/packages/grid/demos/h5/demo6.tsx", - "src/packages/grid/demos/h5/demo7.tsx", - "src/packages/grid/demos/h5/demo8.tsx", - "src/packages/grid/demos/h5/demo9.tsx", - "src/packages/grid/demos/h5/demo10.tsx" - ], - "taro": [ - "src/packages/grid/demos/taro/demo1.tsx", - "src/packages/grid/demos/taro/demo2.tsx", - "src/packages/grid/demos/taro/demo3.tsx", - "src/packages/grid/demos/taro/demo4.tsx", - "src/packages/grid/demos/taro/demo5.tsx", - "src/packages/grid/demos/taro/demo6.tsx", - "src/packages/grid/demos/taro/demo7.tsx", - "src/packages/grid/demos/taro/demo8.tsx", - "src/packages/grid/demos/taro/demo9.tsx", - "src/packages/grid/demos/taro/demo10.tsx" - ] - }, - "spec": { - "base": "src/types/spec/grid/base.ts", - "h5": "src/types/spec/grid/h5.ts", - "taro": "src/types/spec/grid/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Grid", - "subComponent": null, - "rows": [ - { - "prop": "columns", - "desc": "列数", - "type": "`number` | `string`", - "default": "4" - }, - { - "prop": "gap", - "desc": "格子之间的间距,默认单位为`px`", - "type": "`number` | `string`", - "default": "0" - }, - { - "prop": "center", - "desc": "是否将格子内容居中显示", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "square", - "desc": "是否将格子固定为正方形", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "reverse", - "desc": "内容翻转", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "direction", - "desc": "格子内容排列的方向", - "type": "`horizontal` | `vertical`", - "default": "vertical" - }, - { - "prop": "onClick", - "desc": "宫格子项点击事件", - "type": "`(index) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-grid-border-width", - "scssVar": "$grid-border-width", - "default": "0px" - }, - { - "cssVar": "--nutui-grid-border-color", - "scssVar": "$grid-border-color", - "default": "$color-border" - }, - { - "cssVar": "--nutui-grid-item-text-margin", - "scssVar": "$grid-item-text-margin", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-grid-item-text-color", - "scssVar": "$grid-item-text-color", - "default": "$color-title" - } - ] - }, - "griditem": { - "id": "griditem", - "name": "GridItem", - "cName": "宫格子组件", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "yangxiaolu", - "type": "component", - "desc": "宫格子组件", - "sort": 6, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Grid.Item", - "subComponent": null, - "rows": [ - { - "prop": "text", - "desc": "文字", - "type": "`string` | `ReactNode`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击格子时触发", - "type": "`(event: Event) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "layout": { - "id": "layout", - "name": "Layout", - "cName": "布局", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "yushuang24", - "type": "component", - "desc": "协助进行页面级整体布局。", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/layout/doc.md", - "enUS": "src/packages/layout/doc.en-US.md", - "zhTW": "src/packages/layout/doc.zh-TW.md", - "taro": "src/packages/layout/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/layout/demos/h5/demo1.tsx", - "src/packages/layout/demos/h5/demo2.tsx", - "src/packages/layout/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/layout/demos/taro/demo1.tsx", - "src/packages/layout/demos/taro/demo2.tsx", - "src/packages/layout/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/layout/base.ts", - "h5": "src/types/spec/layout/h5.ts", - "taro": "src/types/spec/layout/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "col": { - "id": "col", - "name": "Col", - "cName": "列", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "yushuang24", - "type": "component", - "desc": "布局组件中的列", - "sort": 3, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Col", - "subComponent": null, - "rows": [ - { - "prop": "span", - "desc": "列元素宽度(共分为24份,例如设置一行3个,那么span值为8)", - "type": "`string` | `number`", - "default": "24" - }, - { - "prop": "offset", - "desc": "列元素偏移距离", - "type": "`string` | `number`", - "default": "0" - }, - { - "prop": "onClick", - "desc": "点击时触发", - "type": "`event: MouseEvent, type: 'row' | 'col'`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "row": { - "id": "row", - "name": "Row", - "cName": "行", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "yushuang24", - "type": "component", - "desc": "布局组件中的行", - "sort": 2, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "props", - "kind": "props", - "sourceComponent": "Row", - "subComponent": null, - "rows": [ - { - "prop": "type", - "desc": "布局方式,可选值为flex", - "type": "`string`", - "default": "-" - }, - { - "prop": "gutter", - "desc": "列元素之间的间距(单位为px)", - "type": "`string` | `number`", - "default": "0" - }, - { - "prop": "justify", - "desc": "Flex 主轴对齐方式,可选值为 start end center space-around space-between", - "type": "`string`", - "default": "start" - }, - { - "prop": "align", - "desc": "Flex 交叉轴对齐方式,可选值为 flex-start center flex-end", - "type": "`string`", - "default": "flex-start" - }, - { - "prop": "wrap", - "desc": "Flex是否换行,可选值为 nowrap wrap reverse", - "type": "`string`", - "default": "nowrap" - }, - { - "prop": "onClick", - "desc": "Fired when clicked", - "type": "`event: MouseEvent, type: 'row' | 'col'`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-row-content-color", - "scssVar": "$row-content-color", - "default": "#fff" - }, - { - "cssVar": "--nutui-row-content-height", - "scssVar": "$row-content-height", - "default": "scale-px(50px)" - }, - { - "cssVar": "--nutui-row-content-line-height", - "scssVar": "$row-content-line-height", - "default": "scale-px(40px)" - } - ] - }, - "safearea": { - "id": "safearea", - "name": "SafeArea", - "cName": "安全区", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "在全面屏下提供自适应的边距调整。", - "sort": 9, - "show": true, - "docs": { - "h5": "src/packages/safearea/doc.md", - "enUS": "src/packages/safearea/doc.en-US.md", - "zhTW": "src/packages/safearea/doc.zh-TW.md", - "taro": "src/packages/safearea/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/safearea/demos/h5/demo1.tsx" - ], - "taro": [ - "src/packages/safearea/demos/taro/demo1.tsx" - ] - }, - "spec": { - "base": "src/types/spec/safearea/base.ts", - "h5": "src/types/spec/safearea/h5.ts", - "taro": "src/types/spec/safearea/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "space": { - "id": "space", - "name": "Space", - "cName": "间距", - "version": "3.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "ivan", - "type": "component", - "desc": "元素之间的间距,保持相同的宽度", - "sort": 8, - "show": true, - "docs": { - "h5": "src/packages/space/doc.md", - "enUS": "src/packages/space/doc.en-US.md", - "zhTW": "src/packages/space/doc.zh-TW.md", - "taro": "src/packages/space/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/space/demos/h5/demo1.tsx", - "src/packages/space/demos/h5/demo2.tsx", - "src/packages/space/demos/h5/demo3.tsx", - "src/packages/space/demos/h5/demo4.tsx", - "src/packages/space/demos/h5/demo5.tsx", - "src/packages/space/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/space/demos/taro/demo1.tsx", - "src/packages/space/demos/taro/demo2.tsx", - "src/packages/space/demos/taro/demo3.tsx", - "src/packages/space/demos/taro/demo4.tsx", - "src/packages/space/demos/taro/demo5.tsx", - "src/packages/space/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/space/base.ts", - "h5": "src/types/spec/space/h5.ts", - "taro": "src/types/spec/space/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-space-gap", - "scssVar": "$space-gap", - "default": "scale-px(8px)" - } - ] - }, - "sticky": { - "id": "sticky", - "name": "Sticky", - "cName": "粘性布局", - "version": "2.0.0", - "category": { - "name": "布局组件", - "enName": "layout" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "hx", - "type": "component", - "desc": "效果同 css 中的 position: sticky", - "sort": 7, - "show": true, - "docs": { - "h5": "src/packages/sticky/doc.md", - "enUS": "src/packages/sticky/doc.en-US.md", - "zhTW": "src/packages/sticky/doc.zh-TW.md", - "taro": "src/packages/sticky/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/sticky/demos/h5/demo1.tsx", - "src/packages/sticky/demos/h5/demo2.tsx", - "src/packages/sticky/demos/h5/demo3.tsx", - "src/packages/sticky/demos/h5/demo4.tsx" - ], - "taro": [ - "src/packages/sticky/demos/taro/demo1.tsx", - "src/packages/sticky/demos/taro/demo2.tsx", - "src/packages/sticky/demos/taro/demo3.tsx", - "src/packages/sticky/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/sticky/base.ts", - "h5": "src/types/spec/sticky/h5.ts", - "taro": "src/types/spec/sticky/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Sticky", - "subComponent": null, - "rows": [ - { - "prop": "position", - "desc": "吸附位置", - "type": "`top` | `bottom`", - "default": "top" - }, - { - "prop": "threshold", - "desc": "距离,当 position 为 top 时,设置的是 top", - "type": "`number`", - "default": "0" - }, - { - "prop": "zIndex", - "desc": "吸附时的层级", - "type": "`number`", - "default": "2000" - }, - { - "prop": "container", - "desc": "容器的 ref", - "type": "`React.RefObject`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "吸附状态改变时触发", - "type": "`(val: boolean) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "backtop": { - "id": "backtop", - "name": "BackTop", - "cName": "返回顶部", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "vickyYe", - "type": "component", - "desc": "提供较长的页面快捷返回顶部功能。", - "sort": 2, - "show": true, - "docs": { - "h5": "src/packages/backtop/doc.md", - "enUS": "src/packages/backtop/doc.en-US.md", - "zhTW": "src/packages/backtop/doc.zh-TW.md", - "taro": "src/packages/backtop/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/backtop/demos/h5/demo1.tsx", - "src/packages/backtop/demos/h5/demo2.tsx", - "src/packages/backtop/demos/h5/demo3.tsx", - "src/packages/backtop/demos/h5/demo4.tsx", - "src/packages/backtop/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/backtop/demos/taro/demo1.tsx", - "src/packages/backtop/demos/taro/demo2.tsx", - "src/packages/backtop/demos/taro/demo3.tsx", - "src/packages/backtop/demos/taro/demo4.tsx", - "src/packages/backtop/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/backtop/base.ts", - "h5": "src/types/spec/backtop/h5.ts", - "taro": "src/types/spec/backtop/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "BackTop", - "subComponent": null, - "rows": [ - { - "prop": "target", - "desc": "获取监听的目标元素", - "type": "`string`", - "default": "-" - }, - { - "prop": "threshold", - "desc": "页面垂直滚动多高后出现", - "type": "`number`", - "default": "200" - }, - { - "prop": "zIndex", - "desc": "设置组件页面层级", - "type": "`number`", - "default": "10" - }, - { - "prop": "duration", - "desc": "设置动画持续时间,为 0 时表示无动画", - "type": "`number`", - "default": "1000" - }, - { - "prop": "onClick", - "desc": "按钮点击时触发事件", - "type": "`(event: MouseEvent) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "elevator": { - "id": "elevator", - "name": "Elevator", - "cName": "电梯楼层", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "用于列表快速定位以及索引的显示", - "sort": 4, - "show": true, - "docs": { - "h5": "src/packages/elevator/doc.md", - "enUS": "src/packages/elevator/doc.en-US.md", - "zhTW": "src/packages/elevator/doc.zh-TW.md", - "taro": "src/packages/elevator/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/elevator/demos/h5/demo1.tsx", - "src/packages/elevator/demos/h5/demo2.tsx", - "src/packages/elevator/demos/h5/demo3.tsx", - "src/packages/elevator/demos/h5/demo4.tsx", - "src/packages/elevator/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/elevator/demos/taro/demo1.tsx", - "src/packages/elevator/demos/taro/demo2.tsx", - "src/packages/elevator/demos/taro/demo3.tsx", - "src/packages/elevator/demos/taro/demo4.tsx", - "src/packages/elevator/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/elevator/base.ts", - "h5": "src/types/spec/elevator/h5.ts", - "taro": "src/types/spec/elevator/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Elevator", - "subComponent": null, - "rows": [ - { - "prop": "height", - "desc": "电梯区域的高度", - "type": "`number` | `string`", - "default": "200px" - }, - { - "prop": "floorKey", - "desc": "索引 key 值", - "type": "`string`", - "default": "title" - }, - { - "prop": "list", - "desc": "索引列表", - "type": "`Array(item 需包含 id、name 属性, name 支持传入 html 结构)`", - "default": "[{id: 0, name: ''}]" - }, - { - "prop": "sticky", - "desc": "索引是否吸顶", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "showKeys", - "desc": "展示右侧导航", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "spaceHeight", - "desc": "右侧锚点的上下间距", - "type": "`number`", - "default": "23" - }, - { - "prop": "titleHeight", - "desc": "左侧索引的高度", - "type": "`number`", - "default": "35" - }, - { - "prop": "onClickItem", - "desc": "点击内容", - "type": "`onClickItem:(key: string, item: { id: number, name: string })=>void`", - "default": "false" - }, - { - "prop": "onClickIndex", - "desc": "点击索引", - "type": "`onClickIndex:(key: string)=>void`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-elevator-list-bg-color", - "scssVar": "$elevator-list-bg-color", - "default": "$white" - }, - { - "cssVar": "--nutui-elevator-list-color", - "scssVar": "$elevator-list-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-elevator-bars-right", - "scssVar": "$elevator-bars-right", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-elevator-bars-top", - "scssVar": "$elevator-bars-top", - "default": "50%" - }, - { - "cssVar": "--nutui-elevator-bars-z-index", - "scssVar": "$elevator-bars-z-index", - "default": "1" - } - ] - }, - "fixednav": { - "id": "fixednav", - "name": "FixedNav", - "cName": "悬浮导航", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Ymm0008", - "type": "component", - "desc": "悬浮收齐体验交互,用于快捷导航", - "sort": 5, - "show": true, - "docs": { - "h5": "src/packages/fixednav/doc.md", - "enUS": "src/packages/fixednav/doc.en-US.md", - "zhTW": "src/packages/fixednav/doc.zh-TW.md", - "taro": "src/packages/fixednav/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/fixednav/demos/h5/demo1.tsx", - "src/packages/fixednav/demos/h5/demo2.tsx", - "src/packages/fixednav/demos/h5/demo3.tsx", - "src/packages/fixednav/demos/h5/demo4.tsx", - "src/packages/fixednav/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/fixednav/demos/taro/demo1.tsx", - "src/packages/fixednav/demos/taro/demo2.tsx", - "src/packages/fixednav/demos/taro/demo3.tsx", - "src/packages/fixednav/demos/taro/demo4.tsx", - "src/packages/fixednav/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/fixednav/base.ts", - "h5": "src/types/spec/fixednav/h5.ts", - "taro": "src/types/spec/fixednav/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "FixedNav", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否打开", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "list", - "desc": "悬浮列表内容数据", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "activeText", - "desc": "收起列表按钮文案", - "type": "`string`", - "default": "收起导航" - }, - { - "prop": "inactiveText", - "desc": "展开列表按钮文案", - "type": "`string`", - "default": "快速导航" - }, - { - "prop": "type", - "desc": "导航方向", - "type": "`left` | `right`", - "default": "right" - }, - { - "prop": "overlay", - "desc": "展开时是否显示遮罩", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "position", - "desc": "fixed 垂直位置", - "type": "`object`", - "default": "{top: 'auto', bottom: 'auto'}" - }, - { - "prop": "content", - "desc": "自定义按钮", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "展开收起按钮回调", - "type": "`value: boolean`", - "default": "-" - }, - { - "prop": "onSelect", - "desc": "选择之后触发", - "type": "`item, event: MouseEvent`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-fixednav-color", - "scssVar": "$fixednav-color", - "default": "#1a1a1a" - }, - { - "cssVar": "--nutui-fixednav-index", - "scssVar": "$fixednav-index", - "default": "900" - } - ] - }, - "hoverbutton": { - "id": "hoverbutton", - "name": "HoverButton", - "cName": "悬浮按钮", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "Ymm0008", - "type": "component", - "desc": "悬浮多按钮,用于快捷功能", - "sort": 5, - "show": true, - "docs": { - "h5": "src/packages/hoverbutton/doc.md", - "enUS": "src/packages/hoverbutton/doc.en-US.md", - "zhTW": "src/packages/hoverbutton/doc.zh-TW.md", - "taro": "src/packages/hoverbutton/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/hoverbutton/demos/h5/demo1.tsx", - "src/packages/hoverbutton/demos/h5/demo2.tsx", - "src/packages/hoverbutton/demos/h5/demo3.tsx", - "src/packages/hoverbutton/demos/h5/demo4.tsx", - "src/packages/hoverbutton/demos/h5/demo5.tsx", - "src/packages/hoverbutton/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/hoverbutton/demos/taro/demo1.tsx", - "src/packages/hoverbutton/demos/taro/demo2.tsx", - "src/packages/hoverbutton/demos/taro/demo3.tsx", - "src/packages/hoverbutton/demos/taro/demo4.tsx", - "src/packages/hoverbutton/demos/taro/demo5.tsx", - "src/packages/hoverbutton/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/hoverbutton/base.ts", - "h5": "src/types/spec/hoverbutton/h5.ts", - "taro": "src/types/spec/hoverbutton/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-hoverbutton-spacing", - "scssVar": "$hoverbutton-spacing", - "default": "$spacing-base" - }, - { - "cssVar": "--nutui-hoverbutton-item-size", - "scssVar": "$hoverbutton-item-size", - "default": "scale-px(40px)" - } - ] - }, - "hoverbuttonitem": { - "id": "hoverbuttonitem", - "name": "HoverButtonItem", - "cName": "悬浮按钮子组件", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "Ymm0008", - "type": "component", - "desc": "悬浮按钮", - "sort": 5, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "navbar": { - "id": "navbar", - "name": "NavBar", - "cName": "头部导航", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "dsj", - "type": "component", - "desc": "提供导航功能。", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/navbar/doc.md", - "enUS": "src/packages/navbar/doc.en-US.md", - "zhTW": "src/packages/navbar/doc.zh-TW.md", - "taro": "src/packages/navbar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/navbar/demos/h5/demo1.tsx", - "src/packages/navbar/demos/h5/demo2.tsx", - "src/packages/navbar/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/navbar/demos/taro/demo1.tsx", - "src/packages/navbar/demos/taro/demo2.tsx", - "src/packages/navbar/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/navbar/base.ts", - "h5": "src/types/spec/navbar/h5.ts", - "taro": "src/types/spec/navbar/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Navbar", - "subComponent": null, - "rows": [ - { - "prop": "right", - "desc": "右侧内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "left", - "desc": "左侧内容,渲染在返回区域的右侧", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "back", - "desc": "返回区域的文字", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "fixed", - "desc": "是否固定", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "safeArea", - "desc": "是否适配安全区", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "placeholder", - "desc": "固定在顶部时,是否在标签位置生成一个等高的占位元素", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "zIndex", - "desc": "导航栏层级", - "type": "`number` | `string`", - "default": "10" - }, - { - "prop": "onClickBack", - "desc": "点击返回区域后的回调", - "type": "`onClickBack:(event: Event)=>void`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-navbar-width", - "scssVar": "$navbar-width", - "default": "100%" - }, - { - "cssVar": "--nutui-navbar-height", - "scssVar": "$navbar-height", - "default": "scale-px(44px)" - }, - { - "cssVar": "--nutui-navbar-margin-bottom", - "scssVar": "$navbar-margin-bottom", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-navbar-background", - "scssVar": "$navbar-background", - "default": "$white" - }, - { - "cssVar": "--nutui-navbar-box-shadow", - "scssVar": "$navbar-box-shadow", - "default": "none" - }, - { - "cssVar": "--nutui-navbar-color", - "scssVar": "$navbar-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-navbar-font-size", - "scssVar": "$navbar-font-size", - "default": "$font-size-base" - } - ] - }, - "sidebar": { - "id": "sidebar", - "name": "SideBar", - "cName": "侧边栏导航", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Alex.hxy", - "type": "component", - "desc": "用于侧边内容选择和切换", - "sort": 10, - "show": true, - "docs": { - "h5": "src/packages/sidebar/doc.md", - "enUS": "src/packages/sidebar/doc.en-US.md", - "zhTW": "src/packages/sidebar/doc.zh-TW.md", - "taro": "src/packages/sidebar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/sidebar/demos/h5/demo1.tsx", - "src/packages/sidebar/demos/h5/demo2.tsx", - "src/packages/sidebar/demos/h5/demo3.tsx", - "src/packages/sidebar/demos/h5/demo4.tsx", - "src/packages/sidebar/demos/h5/demo5.tsx", - "src/packages/sidebar/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/sidebar/demos/taro/demo1.tsx", - "src/packages/sidebar/demos/taro/demo2.tsx", - "src/packages/sidebar/demos/taro/demo3.tsx", - "src/packages/sidebar/demos/taro/demo4.tsx", - "src/packages/sidebar/demos/taro/demo5.tsx", - "src/packages/sidebar/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/sidebar/base.ts", - "h5": "src/types/spec/sidebar/h5.ts", - "taro": "src/types/spec/sidebar/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-sidebar-border-radius", - "scssVar": "$sidebar-border-radius", - "default": "0" - }, - { - "cssVar": "--nutui-sidebar-width", - "scssVar": "$sidebar-width", - "default": "scale-px(104px)" - }, - { - "cssVar": "--nutui-sidebar-max-width", - "scssVar": "$sidebar-max-width", - "default": "scale-px(128px)" - }, - { - "cssVar": "--nutui-sidebar-title-height", - "scssVar": "$sidebar-title-height", - "default": "scale-px(52px)" - }, - { - "cssVar": "--nutui-sidebar-item-background", - "scssVar": "$sidebar-item-background", - "default": "$white" - }, - { - "cssVar": "--nutui-sidebar-item-padding", - "scssVar": "$sidebar-item-padding", - "default": "scale-px(24px) scale-px(20px)" - } - ] - }, - "sidebaritem": { - "id": "sidebaritem", - "name": "SideBarItem", - "cName": "侧边栏导航子组件", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "Alex.hxy", - "type": "component", - "desc": "用于侧边内容选择和切换", - "sort": 10, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "tabbar": { - "id": "tabbar", - "name": "Tabbar", - "cName": "标签栏", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "dsj", - "type": "component", - "desc": "底部导航常用场景", - "sort": 2, - "show": true, - "docs": { - "h5": "src/packages/tabbar/doc.md", - "enUS": "src/packages/tabbar/doc.en-US.md", - "zhTW": "src/packages/tabbar/doc.zh-TW.md", - "taro": "src/packages/tabbar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/tabbar/demos/h5/demo1.tsx", - "src/packages/tabbar/demos/h5/demo2.tsx", - "src/packages/tabbar/demos/h5/demo3.tsx", - "src/packages/tabbar/demos/h5/demo4.tsx", - "src/packages/tabbar/demos/h5/demo5.tsx", - "src/packages/tabbar/demos/h5/demo6.tsx", - "src/packages/tabbar/demos/h5/demo7.tsx", - "src/packages/tabbar/demos/h5/demo8.tsx", - "src/packages/tabbar/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/tabbar/demos/taro/demo1.tsx", - "src/packages/tabbar/demos/taro/demo2.tsx", - "src/packages/tabbar/demos/taro/demo3.tsx", - "src/packages/tabbar/demos/taro/demo4.tsx", - "src/packages/tabbar/demos/taro/demo5.tsx", - "src/packages/tabbar/demos/taro/demo6.tsx", - "src/packages/tabbar/demos/taro/demo7.tsx", - "src/packages/tabbar/demos/taro/demo8.tsx", - "src/packages/tabbar/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/tabbar/base.ts", - "h5": "src/types/spec/tabbar/h5.ts", - "taro": "src/types/spec/tabbar/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Tabbar", - "subComponent": null, - "rows": [ - { - "prop": "defaultValue", - "desc": "默认选中的标签的索引值", - "type": "`number`", - "default": "0" - }, - { - "prop": "value", - "desc": "选中的标签的索引值", - "type": "`number`", - "default": "-" - }, - { - "prop": "fixed", - "desc": "是否固定在页面底部,为 true 时默认开启 safeArea", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "activeColor", - "desc": "icon激活的颜色", - "type": "`string`", - "default": "#1989fa" - }, - { - "prop": "inactiveColor", - "desc": "icon未激活的颜色", - "type": "`string`", - "default": "#7d7e80" - }, - { - "prop": "safeArea", - "desc": "是否开启iphone系列全面屏底部安全区适配", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onSwitch", - "desc": "切换页签时触发事件", - "type": "`(value) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-tabbar-height", - "scssVar": "$tabbar-height", - "default": "scale-px(46px)" - }, - { - "cssVar": "--nutui-tabbar-active-color", - "scssVar": "$tabbar-active-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-tabbar-border-top", - "scssVar": "$tabbar-border-top", - "default": "0" - }, - { - "cssVar": "--nutui-tabbar-border-bottom", - "scssVar": "$tabbar-border-bottom", - "default": "0" - }, - { - "cssVar": "--nutui-tabbar-box-shadow", - "scssVar": "$tabbar-box-shadow", - "default": "none" - }, - { - "cssVar": "--nutui-tabbar-text-line-height", - "scssVar": "$tabbar-text-line-height", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-tabbar-text-margin-top", - "scssVar": "$tabbar-text-margin-top", - "default": "scale-px(4px)" - } - ] - }, - "tabbaritem": { - "id": "tabbaritem", - "name": "TabbarItem", - "cName": "标签栏子组件", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "dsj", - "type": "component", - "desc": "标签栏子组件", - "sort": 2, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Tabbar.Item", - "subComponent": null, - "rows": [ - { - "prop": "title", - "desc": "标签页的标题", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "icon", - "desc": "自定义图标", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "value", - "desc": "徽标中显示的内容,支持数字、字符和自定义内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "max", - "desc": "value 为数值时,最大值", - "type": "`number`", - "default": "99" - }, - { - "prop": "dot", - "desc": "徽标是否为小点", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "top", - "desc": "徽标的上下偏移量,支持单位设置,可设置为:5 等", - "type": "`number`", - "default": "0" - }, - { - "prop": "right", - "desc": "徽标的左右偏移量,支持单位设置,可设置为:5 等", - "type": "`number`", - "default": "0" - } - ] - } - ] - }, - "tokens": [] - }, - "tabpane": { - "id": "tabpane", - "name": "TabPane", - "cName": "选项卡切换子组件", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "张晶发", - "type": "component", - "desc": "选项卡切换子组件", - "sort": 2, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "tabs": { - "id": "tabs", - "name": "Tabs", - "cName": "选项卡切换", - "version": "3.0.0", - "category": { - "name": "导航组件", - "enName": "nav" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "常用于平级区域大块内容的的收纳和展现,支持内嵌标签形式和渲染循环数据形式", - "sort": 12, - "show": true, - "docs": { - "h5": "src/packages/tabs/doc.md", - "enUS": "src/packages/tabs/doc.en-US.md", - "zhTW": "src/packages/tabs/doc.zh-TW.md", - "taro": "src/packages/tabs/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/tabs/demos/h5/demo1.tsx", - "src/packages/tabs/demos/h5/demo2.tsx", - "src/packages/tabs/demos/h5/demo3.tsx", - "src/packages/tabs/demos/h5/demo4.tsx", - "src/packages/tabs/demos/h5/demo5.tsx", - "src/packages/tabs/demos/h5/demo6.tsx", - "src/packages/tabs/demos/h5/demo7.tsx", - "src/packages/tabs/demos/h5/demo8.tsx", - "src/packages/tabs/demos/h5/demo9.tsx", - "src/packages/tabs/demos/h5/demo10.tsx", - "src/packages/tabs/demos/h5/demo11.tsx", - "src/packages/tabs/demos/h5/demo12.tsx", - "src/packages/tabs/demos/h5/demo13.tsx", - "src/packages/tabs/demos/h5/demo14.tsx", - "src/packages/tabs/demos/h5/demo15.tsx", - "src/packages/tabs/demos/h5/demo16.tsx", - "src/packages/tabs/demos/h5/demo17.tsx", - "src/packages/tabs/demos/h5/demo18.tsx", - "src/packages/tabs/demos/h5/demo19.tsx", - "src/packages/tabs/demos/h5/demo20.tsx", - "src/packages/tabs/demos/h5/demo21.tsx", - "src/packages/tabs/demos/h5/demo22.tsx", - "src/packages/tabs/demos/h5/demo23.tsx" - ], - "taro": [ - "src/packages/tabs/demos/taro/demo1.tsx", - "src/packages/tabs/demos/taro/demo2.tsx", - "src/packages/tabs/demos/taro/demo3.tsx", - "src/packages/tabs/demos/taro/demo4.tsx", - "src/packages/tabs/demos/taro/demo5.tsx", - "src/packages/tabs/demos/taro/demo6.tsx", - "src/packages/tabs/demos/taro/demo7.tsx", - "src/packages/tabs/demos/taro/demo8.tsx", - "src/packages/tabs/demos/taro/demo9.tsx", - "src/packages/tabs/demos/taro/demo10.tsx", - "src/packages/tabs/demos/taro/demo11.tsx", - "src/packages/tabs/demos/taro/demo12.tsx", - "src/packages/tabs/demos/taro/demo13.tsx", - "src/packages/tabs/demos/taro/demo14.tsx", - "src/packages/tabs/demos/taro/demo15.tsx", - "src/packages/tabs/demos/taro/demo16.tsx", - "src/packages/tabs/demos/taro/demo17.tsx", - "src/packages/tabs/demos/taro/demo18.tsx", - "src/packages/tabs/demos/taro/demo19.tsx", - "src/packages/tabs/demos/taro/demo20.tsx", - "src/packages/tabs/demos/taro/demo21.tsx", - "src/packages/tabs/demos/taro/demo22.tsx", - "src/packages/tabs/demos/taro/demo23.tsx" - ] - }, - "spec": { - "base": "src/types/spec/tabs/base.ts", - "h5": "src/types/spec/tabs/h5.ts", - "taro": "src/types/spec/tabs/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Tabs", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "当前激活 tab 面板的值", - "type": "`number` | `string`", - "default": "0" - }, - { - "prop": "defaultValue", - "desc": "初始化激活 tab 的值", - "type": "`number` | `string`", - "default": "0" - }, - { - "prop": "activeColor", - "desc": "标签选中色", - "type": "`string`", - "default": "#1a1a1a" - }, - { - "prop": "direction", - "desc": "使用横纵方向", - "type": "`horizontal` | `vertical`", - "default": "horizontal" - }, - { - "prop": "activeType", - "desc": "选中底部展示样式 可选值 `line`、`smile`", - "type": "`string`", - "default": "line" - }, - { - "prop": "duration", - "desc": "切换动画时长,单位 ms 0 代表无动画", - "type": "`number` | `string`", - "default": "300" - }, - { - "prop": "title", - "desc": "自定义导航区域", - "type": "`() => JSX.Element[]`", - "default": "-" - }, - { - "prop": "align", - "desc": "标题左对齐", - "type": "`left` | `right`", - "default": "-" - }, - { - "prop": "autoHeight", - "desc": "自动高度。设置为 true 时,nut-tabs 和 nut-tabs\\_\\_content 会随着当前 nut-tabpane 的高度而发生变化。", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "tabStyle", - "desc": "标签栏样式", - "type": "`CSSProperties`", - "default": "{}" - }, - { - "prop": "onClick", - "desc": "点击标签时触发", - "type": "`(index: string | number) => void`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "当前激活的标签改变时触发", - "type": "`(index: string | number) => void`", - "default": "-" - } - ] - }, - { - "name": "Props", - "kind": "props", - "sourceComponent": "Tabs.Tabpane", - "subComponent": "Tabpane", - "rows": [ - { - "prop": "title", - "desc": "标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "value", - "desc": "标签 Key , 匹配的标识符, 默认为索引值", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "是否禁用标签", - "type": "`boolean`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-tabs-titles-height", - "scssVar": "$tabs-titles-height", - "default": "scale-px(44px)" - }, - { - "cssVar": "--nutui-tabs-titles-gap", - "scssVar": "$tabs-titles-gap", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-tabs-tab-line-width", - "scssVar": "$tabs-tab-line-width", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-tabs-tab-line-height", - "scssVar": "$tabs-tab-line-height", - "default": "scale-px(2px)" - }, - { - "cssVar": "--nutui-tabs-tab-line-color", - "scssVar": "$tabs-tab-line-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-tabs-line-bottom", - "scssVar": "$tabs-tab-line-bottom", - "default": "15%" - }, - { - "cssVar": "--nutui-tabs-tab-line-opacity", - "scssVar": "$tabs-tab-line-opacity", - "default": "1" - }, - { - "cssVar": "--nutui-tabs-tabpane-padding", - "scssVar": "$tabs-tabpane-padding", - "default": "scale-px(24px) scale-px(20px)" - } - ] - }, - "address": { - "id": "address", - "name": "Address", - "cName": "地址", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "hanyuxinting", - "type": "component", - "desc": "地址组件", - "sort": 3, - "show": true, - "docs": { - "h5": "src/packages/address/doc.md", - "enUS": "src/packages/address/doc.en-US.md", - "zhTW": "src/packages/address/doc.zh-TW.md", - "taro": "src/packages/address/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/address/demos/h5/demo1.tsx", - "src/packages/address/demos/h5/demo2.tsx", - "src/packages/address/demos/h5/demo3.tsx", - "src/packages/address/demos/h5/demo4.tsx", - "src/packages/address/demos/h5/demo5.tsx", - "src/packages/address/demos/h5/demo6.tsx", - "src/packages/address/demos/h5/demo11.tsx" - ], - "taro": [ - "src/packages/address/demos/taro/demo1.tsx", - "src/packages/address/demos/taro/demo2.tsx", - "src/packages/address/demos/taro/demo3.tsx", - "src/packages/address/demos/taro/demo4.tsx", - "src/packages/address/demos/taro/demo5.tsx", - "src/packages/address/demos/taro/demo6.tsx", - "src/packages/address/demos/taro/demo11.tsx" - ] - }, - "spec": { - "base": "src/types/spec/address/base.ts", - "h5": "src/types/spec/address/h5.ts", - "taro": "src/types/spec/address/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Address", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否打开地址选择", - "type": "`boolean`", - "default": "-" - }, - { - "prop": "type", - "desc": "地址选择类型 exist/custom", - "type": "`string`", - "default": "custom" - }, - { - "prop": "existList", - "desc": "已存在地址列表,每个地址对象中,必传值provinceName、cityName、countyName、townName、addressDetail、selectedAddress(字段解释见下)", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "defaultIcon", - "desc": "已有地址列表默认图标,type='exist' 时生效", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "selectIcon", - "desc": "已有地址列表选中图标,type='exist' 时生效", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "closeIcon", - "desc": "自定义关闭弹框按钮图标", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "backIcon", - "desc": "自定义地址与已有地址切换时,自定义返回的按钮图标", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "custom", - "desc": "是否可以切换自定义地址选择,type='exist' 时生效", - "type": "`boolean` | `string`", - "default": "true" - }, - { - "prop": "onExistSelect", - "desc": "选择已有地址列表时触发", - "type": "`(data: AddressList) => void`", - "default": "-" - }, - { - "prop": "onSwitch", - "desc": "点击'选择其他地址'或自定义地址选择左上角返回按钮触发", - "type": "`(data: { type: string }) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "calendar": { - "id": "calendar", - "name": "Calendar", - "cName": "日历", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "szg2008", - "type": "component", - "desc": "日历,可平铺/弹窗展示", - "sort": 10, - "show": true, - "docs": { - "h5": "src/packages/calendar/doc.md", - "enUS": "src/packages/calendar/doc.en-US.md", - "zhTW": "src/packages/calendar/doc.zh-TW.md", - "taro": "src/packages/calendar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/calendar/demos/h5/demo1.tsx", - "src/packages/calendar/demos/h5/demo2.tsx", - "src/packages/calendar/demos/h5/demo3.tsx", - "src/packages/calendar/demos/h5/demo4.tsx", - "src/packages/calendar/demos/h5/demo5.tsx", - "src/packages/calendar/demos/h5/demo6.tsx", - "src/packages/calendar/demos/h5/demo7.tsx", - "src/packages/calendar/demos/h5/demo8.tsx", - "src/packages/calendar/demos/h5/demo9.tsx", - "src/packages/calendar/demos/h5/demo10.tsx", - "src/packages/calendar/demos/h5/demo11.tsx" - ], - "taro": [ - "src/packages/calendar/demos/taro/demo1.tsx", - "src/packages/calendar/demos/taro/demo2.tsx", - "src/packages/calendar/demos/taro/demo3.tsx", - "src/packages/calendar/demos/taro/demo4.tsx", - "src/packages/calendar/demos/taro/demo5.tsx", - "src/packages/calendar/demos/taro/demo6.tsx", - "src/packages/calendar/demos/taro/demo7.tsx", - "src/packages/calendar/demos/taro/demo8.tsx", - "src/packages/calendar/demos/taro/demo9.tsx", - "src/packages/calendar/demos/taro/demo10.tsx", - "src/packages/calendar/demos/taro/demo11.tsx" - ] - }, - "spec": { - "base": "src/types/spec/calendar/base.ts", - "h5": "src/types/spec/calendar/h5.ts", - "taro": "src/types/spec/calendar/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Calendar", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否可见", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "type", - "desc": "类型,日期选择'single',区间选择'range'", - "type": "`string`", - "default": "single" - }, - { - "prop": "popup", - "desc": "是否弹窗状态展示", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "autoBackfill", - "desc": "自动回填", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "显示标题", - "type": "`string`", - "default": "日期选择" - }, - { - "prop": "defaultValue", - "desc": "默认值,日期选择 string 格式,区间选择 Array 格式", - "type": "`string | Array`", - "default": "-" - }, - { - "prop": "startDate", - "desc": "开始日期, 如果不限制开始日期传 null", - "type": "`string`", - "default": "今天" - }, - { - "prop": "endDate", - "desc": "结束日期,如果不限制结束日期传 null", - "type": "`string`", - "default": "距离今天 365 天" - }, - { - "prop": "showToday", - "desc": "是否展示今天标记", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "startText", - "desc": "范围选择,开始信息文案", - "type": "`ReactNode`", - "default": "开始" - }, - { - "prop": "endText", - "desc": "范围选择,结束信息文案", - "type": "`ReactNode`", - "default": "结束" - }, - { - "prop": "confirmText", - "desc": "底部确认按钮文案", - "type": "`ReactNode`", - "default": "确认" - }, - { - "prop": "showTitle", - "desc": "是否在展示日历标题", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "showSubTitle", - "desc": "是否展示日期标题", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "scrollAnimation", - "desc": "是否启动滚动动画", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "renderHeaderButtons", - "desc": "自定义日历标题下部,可用以添加自定义操作", - "type": "`() => string", - "default": "JSX.Element" - }, - { - "prop": "renderDay", - "desc": "日期信息", - "type": "`(date: Day) => string", - "default": "JSX.Element" - }, - { - "prop": "renderDayTop", - "desc": "日期顶部信息", - "type": "`(date: Day) => string", - "default": "JSX.Element" - }, - { - "prop": "renderDayBottom", - "desc": "日期底部信息", - "type": "`(date: Day) => string", - "default": "JSX.Element" - }, - { - "prop": "onClickDay", - "desc": "点击/选择后触发", - "type": "`(data: string) => {}`", - "default": "" - }, - { - "prop": "onPageChange", - "desc": "年月子标题到达顶部时触发", - "type": "`(param: string) => {}`", - "default": "" - }, - { - "prop": "onConfirm", - "desc": "选择之后或是点击确认按钮触发", - "type": "`(param: string) => {}`", - "default": "" - }, - { - "prop": "onClose", - "desc": "关闭时触发", - "type": "`() => {}`", - "default": "" - } - ] - }, - { - "name": "Day", - "kind": "other", - "sourceComponent": "Calendar", - "subComponent": null, - "rows": [ - { - "prop": "day", - "desc": "`string | number`", - "type": "", - "default": "" - }, - { - "prop": "type", - "desc": "`string`", - "type": "", - "default": "" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Calendar", - "subComponent": null, - "rows": [ - { - "prop": "scrollToDate", - "desc": "滚动到指定日期所在月,如:'2023-06-30'", - "type": "`string`", - "default": "" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-calendar-header-height", - "scssVar": "$calendar-header-height", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-calendar-day-width", - "scssVar": "$calendar-day-width", - "default": "14.28%" - }, - { - "cssVar": "--nutui-calendar-day-height", - "scssVar": "$calendar-day-height", - "default": "scale-px(60px)" - } - ] - }, - "calendaritem": { - "id": "calendaritem", - "name": "CalendarItem", - "cName": "日历", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "szg2008", - "type": "component", - "desc": "日历,可平铺/弹窗展示", - "sort": 10, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "calendarcard": { - "id": "calendarcard", - "name": "CalendarCard", - "cName": "日历卡片", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "eiinu", - "type": "component", - "desc": "日历卡片,支持多种选择类型", - "sort": 10, - "show": true, - "docs": { - "h5": "src/packages/calendarcard/doc.md", - "enUS": "src/packages/calendarcard/doc.en-US.md", - "zhTW": "src/packages/calendarcard/doc.zh-TW.md", - "taro": "src/packages/calendarcard/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/calendarcard/demos/h5/demo1.tsx", - "src/packages/calendarcard/demos/h5/demo2.tsx", - "src/packages/calendarcard/demos/h5/demo3.tsx", - "src/packages/calendarcard/demos/h5/demo4.tsx", - "src/packages/calendarcard/demos/h5/demo5.tsx", - "src/packages/calendarcard/demos/h5/demo6.tsx", - "src/packages/calendarcard/demos/h5/demo7.tsx", - "src/packages/calendarcard/demos/h5/demo8.tsx", - "src/packages/calendarcard/demos/h5/demo9.tsx", - "src/packages/calendarcard/demos/h5/demo10.tsx", - "src/packages/calendarcard/demos/h5/demo11.tsx", - "src/packages/calendarcard/demos/h5/demo12.tsx", - "src/packages/calendarcard/demos/h5/demo13.tsx", - "src/packages/calendarcard/demos/h5/demo14.tsx" - ], - "taro": [ - "src/packages/calendarcard/demos/taro/demo1.tsx", - "src/packages/calendarcard/demos/taro/demo2.tsx", - "src/packages/calendarcard/demos/taro/demo3.tsx", - "src/packages/calendarcard/demos/taro/demo4.tsx", - "src/packages/calendarcard/demos/taro/demo5.tsx", - "src/packages/calendarcard/demos/taro/demo6.tsx", - "src/packages/calendarcard/demos/taro/demo7.tsx", - "src/packages/calendarcard/demos/taro/demo8.tsx", - "src/packages/calendarcard/demos/taro/demo9.tsx", - "src/packages/calendarcard/demos/taro/demo10.tsx", - "src/packages/calendarcard/demos/taro/demo11.tsx", - "src/packages/calendarcard/demos/taro/demo12.tsx", - "src/packages/calendarcard/demos/taro/demo13.tsx", - "src/packages/calendarcard/demos/taro/demo14.tsx" - ] - }, - "spec": { - "base": "src/types/spec/calendarcard/base.ts", - "h5": "src/types/spec/calendarcard/h5.ts", - "taro": "src/types/spec/calendarcard/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "cascader": { - "id": "cascader", - "name": "Cascader", - "cName": "级联选择器", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "ailululu", - "type": "component", - "desc": "级联选择,用于多层级数据的选择,典型场景为省市区选择。", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/cascader/doc.md", - "enUS": "src/packages/cascader/doc.en-US.md", - "zhTW": "src/packages/cascader/doc.zh-TW.md", - "taro": "src/packages/cascader/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/cascader/demos/h5/demo1.tsx", - "src/packages/cascader/demos/h5/demo2.tsx", - "src/packages/cascader/demos/h5/demo3.tsx", - "src/packages/cascader/demos/h5/demo4.tsx", - "src/packages/cascader/demos/h5/demo5.tsx", - "src/packages/cascader/demos/h5/demo6.tsx", - "src/packages/cascader/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/cascader/demos/taro/demo1.tsx", - "src/packages/cascader/demos/taro/demo2.tsx", - "src/packages/cascader/demos/taro/demo3.tsx", - "src/packages/cascader/demos/taro/demo4.tsx", - "src/packages/cascader/demos/taro/demo5.tsx", - "src/packages/cascader/demos/taro/demo6.tsx", - "src/packages/cascader/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/cascader/base.ts", - "h5": "src/types/spec/cascader/h5.ts", - "taro": "src/types/spec/cascader/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Cascader", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "选中值,受控", - "type": "`(number | string)[]`", - "default": "-" - }, - { - "prop": "defaultValue", - "desc": "默认选中值", - "type": "`(number | string)[]`", - "default": "-" - }, - { - "prop": "options", - "desc": "级联数据", - "type": "`Array`", - "default": "-" - }, - { - "prop": "popup", - "desc": "是否弹窗状态展示", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "visible", - "desc": "级联显示隐藏状态", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "activeColor", - "desc": "选中激活颜色", - "type": "`string`", - "default": "-" - }, - { - "prop": "activeIcon", - "desc": "标记选中的Icon", - "type": "`string`", - "default": "ReactNode" - }, - { - "prop": "lazy", - "desc": "是否开启动态加载", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "optionKey", - "desc": "自定义`options`结构中,包含 textKey、valueKey、childrenKey", - "type": "`object`", - "default": "-" - }, - { - "prop": "format", - "desc": "当options为可转换为树形结构的扁平结构时,配置转换规则", - "type": "`object`", - "default": "-" - }, - { - "prop": "title", - "desc": "标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "closeIconPosition", - "desc": "取消按钮位置,继承 Popup 组件", - "type": "`string`", - "default": "top-right" - }, - { - "prop": "closeIcon", - "desc": "自定义关闭按钮,继承 Popup 组件", - "type": "`ReactNode`", - "default": "close" - }, - { - "prop": "closeable", - "desc": "是否显示关闭按钮,继承 Popup 组件", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "onLoad", - "desc": "动态加载回调,开启动态加载时生效", - "type": "`(node: any, resolve: any) => void`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "选中值改变时触发", - "type": "`(value: CascaderValue, params?: any) => void`", - "default": "-" - }, - { - "prop": "onPathChange", - "desc": "选中项改变时触发", - "type": "`(value: CascaderValue, params: any) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-cascader-font-size", - "scssVar": "$cascader-font-size", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-cascader-pane-height", - "scssVar": "$cascader-pane-height", - "default": "scale-px(342px)" - }, - { - "cssVar": "--nutui-cascader-pane-paddingTop", - "scssVar": "$cascader-pane-paddingTop", - "default": "scale-px(10px)" - }, - { - "cssVar": "--nutui-cascader-bar-line-height", - "scssVar": "$cascader-bar-line-height", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-cascader-bar-color", - "scssVar": "$cascader-bar-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-cascader-item-height", - "scssVar": "$cascader-item-height", - "default": "scale-px(40px)" - }, - { - "cssVar": "--nutui-cascader-item-padding", - "scssVar": "$cascader-item-padding", - "default": "scale-px(10px) scale-px(20px)" - }, - { - "cssVar": "--nutui-cascader-item-margin", - "scssVar": "$cascader-item-margin", - "default": "0px" - }, - { - "cssVar": "--nutui-cascader-item-color", - "scssVar": "$cascader-item-color", - "default": "$color-title" - } - ] - }, - "checkbox": { - "id": "checkbox", - "name": "Checkbox", - "cName": "复选按钮", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "oasis", - "type": "component", - "desc": "多选按钮用于选择。", - "sort": 4, - "show": true, - "docs": { - "h5": "src/packages/checkbox/doc.md", - "enUS": "src/packages/checkbox/doc.en-US.md", - "zhTW": "src/packages/checkbox/doc.zh-TW.md", - "taro": "src/packages/checkbox/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/checkbox/demos/h5/demo1.tsx", - "src/packages/checkbox/demos/h5/demo2.tsx", - "src/packages/checkbox/demos/h5/demo3.tsx", - "src/packages/checkbox/demos/h5/demo4.tsx", - "src/packages/checkbox/demos/h5/demo5.tsx", - "src/packages/checkbox/demos/h5/demo6.tsx", - "src/packages/checkbox/demos/h5/demo7.tsx", - "src/packages/checkbox/demos/h5/demo8.tsx", - "src/packages/checkbox/demos/h5/demo9.tsx", - "src/packages/checkbox/demos/h5/demo10.tsx", - "src/packages/checkbox/demos/h5/demo11.tsx", - "src/packages/checkbox/demos/h5/demo12.tsx", - "src/packages/checkbox/demos/h5/demo13.tsx", - "src/packages/checkbox/demos/h5/demo14.tsx", - "src/packages/checkbox/demos/h5/demo15.tsx" - ], - "taro": [ - "src/packages/checkbox/demos/taro/demo1.tsx", - "src/packages/checkbox/demos/taro/demo2.tsx", - "src/packages/checkbox/demos/taro/demo3.tsx", - "src/packages/checkbox/demos/taro/demo4.tsx", - "src/packages/checkbox/demos/taro/demo5.tsx", - "src/packages/checkbox/demos/taro/demo6.tsx", - "src/packages/checkbox/demos/taro/demo7.tsx", - "src/packages/checkbox/demos/taro/demo8.tsx", - "src/packages/checkbox/demos/taro/demo9.tsx", - "src/packages/checkbox/demos/taro/demo10.tsx", - "src/packages/checkbox/demos/taro/demo11.tsx", - "src/packages/checkbox/demos/taro/demo12.tsx", - "src/packages/checkbox/demos/taro/demo13.tsx", - "src/packages/checkbox/demos/taro/demo14.tsx", - "src/packages/checkbox/demos/taro/demo15.tsx" - ] - }, - "spec": { - "base": "src/types/spec/checkbox/base.ts", - "h5": "src/types/spec/checkbox/h5.ts", - "taro": "src/types/spec/checkbox/taro.ts" - }, - "api": { - "tables": [ - { - "name": "props", - "kind": "props", - "sourceComponent": "Checkbox", - "subComponent": null, - "rows": [ - { - "prop": "checked", - "desc": "是否选中", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "defaultChecked", - "desc": "初始是否选中", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "disabled", - "desc": "是否禁用选择", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "labelPosition", - "desc": "文本所在的位置", - "type": "`left` | `right`", - "default": "right" - }, - { - "prop": "icon", - "desc": "选中前", - "type": "`ReactNode`", - "default": "'CheckNormal'" - }, - { - "prop": "activeIcon", - "desc": ",选中后", - "type": "`ReactNode`", - "default": "'Checked'" - }, - { - "prop": "indeterminateIcon", - "desc": "半选状态", - "type": "`ReactNode`", - "default": "'CheckDisabled'" - }, - { - "prop": "label", - "desc": "复选框的文本内容", - "type": "`string`", - "default": "-" - }, - { - "prop": "value", - "desc": "标识值,用于 Group 模式", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "值变化时触发", - "type": "`(value: boolean) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-checkbox-label-color", - "scssVar": "$checkbox-label-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-checkbox-list-padding", - "scssVar": "$checkbox-list-padding", - "default": "0 0 0 scale-px(12px)" - } - ] - }, - "checkboxgroup": { - "id": "checkboxgroup", - "name": "CheckboxGroup", - "cName": "多选按钮组", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "多选按钮组", - "sort": 11, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Checkbox.Group", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "当前选中项的标识符", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "defaultValue", - "desc": "初始选中项的标识符", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "是否禁用选择,将用于其下的全部复选框", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "max", - "desc": "限制最大可选数", - "type": "`number`", - "default": "-" - }, - { - "prop": "labelPosition", - "desc": "文本所在的位置", - "type": "`left` | `right`", - "default": "right" - }, - { - "prop": "direction", - "desc": "使用横纵方向 可选值 horizontal、vertical", - "type": "`string`", - "default": "vertical" - }, - { - "prop": "options", - "desc": "配置 options 渲染复选按钮", - "type": "`Array<{ label: string value: string disabled?: boolean }>`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "值变化时触发", - "type": "`(value: string[]) => void`", - "default": "-" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Checkbox.Group", - "subComponent": null, - "rows": [ - { - "prop": "toggle", - "desc": "全选/取消", - "type": "传 `true`,表示全选,传 `false`,表示取消全选", - "default": "" - }, - { - "prop": "reverse", - "desc": "反选", - "type": "`-`", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "datepicker": { - "id": "datepicker", - "name": "DatePicker", - "cName": "日期选择器", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "dsj", - "type": "component", - "desc": "时间选择器,支持日期、年月、时分等维度,通常与弹出层组件配合使用。", - "sort": 15, - "show": true, - "docs": { - "h5": "src/packages/datepicker/doc.md", - "enUS": "src/packages/datepicker/doc.en-US.md", - "zhTW": "src/packages/datepicker/doc.zh-TW.md", - "taro": "src/packages/datepicker/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/datepicker/demos/h5/demo1.tsx", - "src/packages/datepicker/demos/h5/demo2.tsx", - "src/packages/datepicker/demos/h5/demo3.tsx", - "src/packages/datepicker/demos/h5/demo4.tsx", - "src/packages/datepicker/demos/h5/demo5.tsx", - "src/packages/datepicker/demos/h5/demo6.tsx", - "src/packages/datepicker/demos/h5/demo7.tsx", - "src/packages/datepicker/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/datepicker/demos/taro/demo1.tsx", - "src/packages/datepicker/demos/taro/demo2.tsx", - "src/packages/datepicker/demos/taro/demo3.tsx", - "src/packages/datepicker/demos/taro/demo4.tsx", - "src/packages/datepicker/demos/taro/demo5.tsx", - "src/packages/datepicker/demos/taro/demo6.tsx", - "src/packages/datepicker/demos/taro/demo7.tsx", - "src/packages/datepicker/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/datepicker/base.ts", - "h5": "src/types/spec/datepicker/h5.ts", - "taro": "src/types/spec/datepicker/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "DatePicker", - "subComponent": null, - "rows": [ - { - "prop": "defaultValue", - "desc": "初始值", - "type": "`Date`", - "default": "null" - }, - { - "prop": "value", - "desc": "受控", - "type": "`Date`", - "default": "null" - }, - { - "prop": "visible", - "desc": "是否可见", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "type", - "desc": "类时间类型,可选值 date time year-month month-day datehour datetime hour-minutes", - "type": "`string`", - "default": "date" - }, - { - "prop": "minuteStep", - "desc": "分钟步进值", - "type": "`number`", - "default": "1" - }, - { - "prop": "showChinese", - "desc": "每列是否展示中文", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "设置标题", - "type": "`string`", - "default": "null" - }, - { - "prop": "startDate", - "desc": "开始日期", - "type": "`Date`", - "default": "十年前" - }, - { - "prop": "endDate", - "desc": "结束日期", - "type": "`Date`", - "default": "十年后" - }, - { - "prop": "formatter", - "desc": "选项格式化函数", - "type": "`(type: string, option: PickerOption) => PickerOption`", - "default": "-" - }, - { - "prop": "filter", - "desc": "选项过滤函数", - "type": "`(type: string, option: PickerOption) => PickerOption[]`", - "default": "-" - }, - { - "prop": "threeDimensional", - "desc": "是否开启3D效果", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "onConfirm", - "desc": "点击确定按钮时触发", - "type": "`(options, value) => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭时触发", - "type": "`(options, value) => void`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "选项改变时触发", - "type": "`(options, value, index) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "datepickerview": { - "id": "datepickerview", - "name": "DatePickerView", - "cName": "日期选择器视图", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "DatePickerView 是 DatePicker 的内容区域", - "sort": 16, - "show": true, - "docs": { - "h5": "src/packages/datepickerview/doc.md", - "enUS": "src/packages/datepickerview/doc.en-US.md", - "zhTW": "src/packages/datepickerview/doc.zh-TW.md", - "taro": "src/packages/datepickerview/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/datepickerview/demos/h5/demo1.tsx", - "src/packages/datepickerview/demos/h5/demo2.tsx" - ], - "taro": [ - "src/packages/datepickerview/demos/taro/demo1.tsx", - "src/packages/datepickerview/demos/taro/demo2.tsx" - ] - }, - "spec": { - "base": "src/types/spec/datepickerview/base.ts", - "h5": "src/types/spec/datepickerview/h5.ts", - "taro": "src/types/spec/datepickerview/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "form": { - "id": "form", - "name": "Form", - "cName": "表单", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "hanyuxinting", - "type": "component", - "desc": "用于数据录入、校验,支持输入框、单选框、复选框等类型。", - "sort": 19, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/form/doc.md", - "enUS": "src/packages/form/doc.en-US.md", - "zhTW": "src/packages/form/doc.zh-TW.md", - "taro": "src/packages/form/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/form/demos/h5/demo1.tsx", - "src/packages/form/demos/h5/demo2.tsx", - "src/packages/form/demos/h5/demo3.tsx", - "src/packages/form/demos/h5/demo4.tsx", - "src/packages/form/demos/h5/demo5.tsx", - "src/packages/form/demos/h5/demo6.tsx", - "src/packages/form/demos/h5/demo7.tsx", - "src/packages/form/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/form/demos/taro/demo1.tsx", - "src/packages/form/demos/taro/demo2.tsx", - "src/packages/form/demos/taro/demo3.tsx", - "src/packages/form/demos/taro/demo4.tsx", - "src/packages/form/demos/taro/demo5.tsx", - "src/packages/form/demos/taro/demo6.tsx", - "src/packages/form/demos/taro/demo7.tsx", - "src/packages/form/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/form/base.ts", - "h5": "src/types/spec/form/h5.ts", - "taro": "src/types/spec/form/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Form", - "subComponent": null, - "rows": [ - { - "prop": "form", - "desc": "经 Form.useForm() 创建的 form 控制实例,不提供时会自动创建", - "type": "`FormInstance`", - "default": "-" - }, - { - "prop": "footer", - "desc": "表单底部区域,一般放置确认和重置按钮", - "type": "`ReactNode`", - "default": "null" - }, - { - "prop": "initialValues", - "desc": "表单初始值", - "type": "`any`", - "default": "-" - }, - { - "prop": "name", - "desc": "表单名称", - "type": "`any`", - "default": "-" - }, - { - "prop": "labelPosition", - "desc": "表单项 label 的位置", - "type": "`top` | `left` | `right`", - "default": "right" - }, - { - "prop": "starPosition", - "desc": "必填表单项 label 的红色星标位置", - "type": "`left` | `right`", - "default": "left" - }, - { - "prop": "onFinish", - "desc": "校验成功后触发", - "type": "`(values: any) => void`", - "default": "-" - }, - { - "prop": "onFinishFailed", - "desc": "任一表单项被校验失败后触发", - "type": "`(values: any, errorFields: any) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-form-item-label-width", - "scssVar": "$form-item-label-width", - "default": "scale-px(90px)" - }, - { - "cssVar": "--nutui-form-item-tip-text-align", - "scssVar": "$form-item-tip-text-align", - "default": "left" - } - ] - }, - "formitem": { - "id": "formitem", - "name": "FormItem", - "cName": "表单项", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "hanyuxinting", - "type": "component", - "desc": "用于数据录入、校验,支持输入框、单选框、复选框等类型。", - "sort": 19, - "show": false, - "jdtaro": 2, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Form.Item", - "subComponent": null, - "rows": [ - { - "prop": "required", - "desc": "必填表单项 label 的红色星标,仅用于控制样式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "name", - "desc": "在使用表单校验功能的情况下,该属性是必填的", - "type": "`string`", - "default": "-" - }, - { - "prop": "errorMessageAlign", - "desc": "错误提示文案对齐方式", - "type": "`center` | `right` | `left`", - "default": "left" - }, - { - "prop": "initialValue", - "desc": "设置子元素默认值", - "type": "`any`", - "default": "-" - }, - { - "prop": "trigger", - "desc": "设置收集字段值变更的时机", - "type": "`string`", - "default": "-" - }, - { - "prop": "valuePropName", - "desc": "子节点的值的属性,如 Checkbox 的是 'checked'", - "type": "`string`", - "default": "-" - }, - { - "prop": "getValueFromEvent", - "desc": "设置如何将 event 的值转换成字段值", - "type": "`(...args: any) => any`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击事件并收集子组件 Ref", - "type": "`(event: React.MouseEvent, componentRef: React.MutableRefObject) => void`", - "default": "-" - } - ] - }, - { - "name": "Form.Item Rule", - "kind": "other", - "sourceComponent": "Form.Item", - "subComponent": null, - "rows": [ - { - "prop": "required", - "desc": "是否为必选字段", - "type": "`boolean`", - "default": "" - }, - { - "prop": "message", - "desc": "错误提示文案", - "type": "`string`", - "default": "" - }, - { - "prop": "len", - "desc": "string 类型时为字符串长度;number 类型时为确定数字; array 类型时为数组长度", - "type": "`number`", - "default": "" - }, - { - "prop": "max", - "desc": "必须设置 type:string 类型为字符串最大长度;number 类型时为最大值;array 类型时为数组最大长度", - "type": "`number`", - "default": "" - }, - { - "prop": "min", - "desc": "必须设置 type:string 类型为字符串最小长度;number 类型时为最小值;array 类型时为数组最小长度", - "type": "`number`", - "default": "" - }, - { - "prop": "pattern", - "desc": "正则表达式匹配", - "type": "`RegExp`", - "default": "" - }, - { - "prop": "transform", - "desc": "将字段值转换成目标值后进行校验", - "type": "`(value) => any`", - "default": "" - }, - { - "prop": "validator", - "desc": "自定义校验,接收 Promise 作为返回值", - "type": "`(rule, value) => Promise`", - "default": "" - } - ] - }, - { - "name": "FormInstance", - "kind": "methods", - "sourceComponent": "Form.Item", - "subComponent": null, - "rows": [ - { - "prop": "getFieldValue", - "desc": "获取对应字段名的值", - "type": "`(name: NamePath) => any`", - "default": "" - }, - { - "prop": "setFieldsValue", - "desc": "设置表单的值", - "type": "`(values) => void`", - "default": "" - }, - { - "prop": "resetFields", - "desc": "重置表单提示状态", - "type": "`() => void`", - "default": "" - }, - { - "prop": "submit", - "desc": "提交表单进行校验的方法", - "type": "`Promise`", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "input": { - "id": "input", - "name": "Input", - "cName": "输入框", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "VickyYe", - "type": "component", - "desc": "单行输入框", - "sort": 1, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/input/doc.md", - "enUS": "src/packages/input/doc.en-US.md", - "zhTW": "src/packages/input/doc.zh-TW.md", - "taro": "src/packages/input/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/input/demos/h5/demo1.tsx", - "src/packages/input/demos/h5/demo2.tsx", - "src/packages/input/demos/h5/demo3.tsx", - "src/packages/input/demos/h5/demo4.tsx", - "src/packages/input/demos/h5/demo5.tsx", - "src/packages/input/demos/h5/demo6.tsx", - "src/packages/input/demos/h5/demo7.tsx", - "src/packages/input/demos/h5/demo8.tsx", - "src/packages/input/demos/h5/demo9.tsx", - "src/packages/input/demos/h5/demo10.tsx", - "src/packages/input/demos/h5/demo11.tsx", - "src/packages/input/demos/h5/demo12.tsx", - "src/packages/input/demos/h5/demo13.tsx", - "src/packages/input/demos/h5/demo14.tsx" - ], - "taro": [ - "src/packages/input/demos/taro/demo1.tsx", - "src/packages/input/demos/taro/demo2.tsx", - "src/packages/input/demos/taro/demo3.tsx", - "src/packages/input/demos/taro/demo4.tsx", - "src/packages/input/demos/taro/demo5.tsx", - "src/packages/input/demos/taro/demo6.tsx", - "src/packages/input/demos/taro/demo7.tsx", - "src/packages/input/demos/taro/demo8.tsx", - "src/packages/input/demos/taro/demo9.tsx", - "src/packages/input/demos/taro/demo10.tsx", - "src/packages/input/demos/taro/demo11.tsx", - "src/packages/input/demos/taro/demo12.tsx", - "src/packages/input/demos/taro/demo13.tsx", - "src/packages/input/demos/taro/demo14.tsx" - ] - }, - "spec": { - "base": "src/types/spec/input/base.ts", - "h5": "src/types/spec/input/h5.ts", - "taro": "src/types/spec/input/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Input", - "subComponent": null, - "rows": [ - { - "prop": "defaultValue", - "desc": "初始默认值", - "type": "`string`", - "default": "-" - }, - { - "prop": "value", - "desc": "初始默认值", - "type": "`string`", - "default": "-" - }, - { - "prop": "type", - "desc": "输入框类型,支持原生 `input` 标签的所有 `type` 属性,另外还支持 `number` `digit`", - "type": "`string`", - "default": "text" - }, - { - "prop": "name", - "desc": "组件名字,用于表单提交获取数据", - "type": "`string`", - "default": "-" - }, - { - "prop": "placeholder", - "desc": "输入框为空时占位符", - "type": "`string`", - "default": "-" - }, - { - "prop": "align", - "desc": "输入框内容对齐方式,可选值 `left`、`center`、`right`", - "type": "`string`", - "default": "left" - }, - { - "prop": "disabled", - "desc": "是否禁用", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "readOnly", - "desc": "是否只读", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "autoFocus", - "desc": "是否自动获得焦点,iOS 系统不支持该属性", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "maxLength", - "desc": "限制最长输入字符", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "clearable", - "desc": "展示清除 Icon", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "clearIcon", - "desc": "清除图标 Icon 可参考 Icon ", - "type": "`ReactNode`", - "default": "MaskClose" - }, - { - "prop": "confirmType", - "desc": "键盘右下角按钮的文字,仅在type='text'时生效,可选值 send:发送、search:搜索、next:下一个、go:前往、done:完成", - "type": "`string`", - "default": "done" - }, - { - "prop": "formatter", - "desc": "输入内容格式化函数", - "type": "`(val: string) => string`", - "default": "-" - }, - { - "prop": "formatTrigger", - "desc": "格式化函数触发的时机,可选值为 `onChange`、`onBlur`", - "type": "`string`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "输入框内容变化时触发", - "type": "`(value: string) => void`", - "default": "-" - }, - { - "prop": "onBlur", - "desc": "失去焦点后触发", - "type": "`(value: string) => void`", - "default": "-" - }, - { - "prop": "onFocus", - "desc": "获得焦点后触发", - "type": "`(value: string) => void`", - "default": "-" - }, - { - "prop": "onClear", - "desc": "点击清空按钮时触发", - "type": "`(value: string) => void`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击 input 容器触发", - "type": "`(value: MouseEvent) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-input-border-bottom", - "scssVar": "$input-border-bottom", - "default": "$color-border" - }, - { - "cssVar": "--nutui-input-font-size", - "scssVar": "$input-font-size", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-input-lineheight", - "scssVar": "$input-lineheight", - "default": "$font-size-xl" - }, - { - "cssVar": "--nutui-input-border-radius", - "scssVar": "$input-border-radius", - "default": "$radius-s" - }, - { - "cssVar": "--nutui-input-color", - "scssVar": "$input-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-input-padding", - "scssVar": "$input-padding", - "default": "scale-px(12px)" - } - ] - }, - "inputnumber": { - "id": "inputnumber", - "name": "InputNumber", - "cName": "数字输入框", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dentry" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "swag~jun", - "type": "component", - "desc": "通过点击按钮控制数字增减。", - "sort": 3, - "show": true, - "docs": { - "h5": "src/packages/inputnumber/doc.md", - "enUS": "src/packages/inputnumber/doc.en-US.md", - "zhTW": "src/packages/inputnumber/doc.zh-TW.md", - "taro": "src/packages/inputnumber/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/inputnumber/demos/h5/demo1.tsx", - "src/packages/inputnumber/demos/h5/demo2.tsx", - "src/packages/inputnumber/demos/h5/demo3.tsx", - "src/packages/inputnumber/demos/h5/demo4.tsx", - "src/packages/inputnumber/demos/h5/demo5.tsx", - "src/packages/inputnumber/demos/h5/demo6.tsx", - "src/packages/inputnumber/demos/h5/demo7.tsx", - "src/packages/inputnumber/demos/h5/demo8.tsx", - "src/packages/inputnumber/demos/h5/demo9.tsx", - "src/packages/inputnumber/demos/h5/demo10.tsx" - ], - "taro": [ - "src/packages/inputnumber/demos/taro/demo1.tsx", - "src/packages/inputnumber/demos/taro/demo2.tsx", - "src/packages/inputnumber/demos/taro/demo3.tsx", - "src/packages/inputnumber/demos/taro/demo4.tsx", - "src/packages/inputnumber/demos/taro/demo5.tsx", - "src/packages/inputnumber/demos/taro/demo6.tsx", - "src/packages/inputnumber/demos/taro/demo7.tsx", - "src/packages/inputnumber/demos/taro/demo8.tsx", - "src/packages/inputnumber/demos/taro/demo9.tsx", - "src/packages/inputnumber/demos/taro/demo10.tsx" - ] - }, - "spec": { - "base": "src/types/spec/inputnumber/base.ts", - "h5": "src/types/spec/inputnumber/h5.ts", - "taro": "src/types/spec/inputnumber/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "InputNumber", - "subComponent": null, - "rows": [ - { - "prop": "allowEmpty", - "desc": "是否允许内容为空", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "defaultValue", - "desc": "默认值", - "type": "`string` | `number`", - "default": "0" - }, - { - "prop": "value", - "desc": "当前值,受控值", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "min", - "desc": "最小值限制", - "type": "`string` | `number`", - "default": "1" - }, - { - "prop": "max", - "desc": "最大值限制", - "type": "`string` | `number`", - "default": "9999" - }, - { - "prop": "step", - "desc": "步长", - "type": "`string` | `number`", - "default": "1" - }, - { - "prop": "digits", - "desc": "设置保留的小数位", - "type": "`string` | `number`", - "default": "0" - }, - { - "prop": "disabled", - "desc": "禁用所有功能", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "readOnly", - "desc": "只读状态禁用输入框操作行为", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "async", - "desc": "支持异步修改", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "formatter", - "desc": "指定输入框展示值的格式", - "type": "`function(value: number | string): string`", - "default": "-" - }, - { - "prop": "onPlus", - "desc": "点击增加按钮时触发", - "type": "`(e: MouseEvent) => void`", - "default": "-" - }, - { - "prop": "onMinus", - "desc": "点击减少按钮时触发", - "type": "`(e: MouseEvent) => void`", - "default": "-" - }, - { - "prop": "onOverlimit", - "desc": "点击不可用的按钮时触发", - "type": "`(e: MouseEvent) => void`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "值改变时触发", - "type": "`(param: string | number, e: MouseEvent | ChangeEvent) => void`", - "default": "-" - }, - { - "prop": "onFocus", - "desc": "输入框获得焦点时触发", - "type": "`(e: FocusEvent) => void`", - "default": "-" - }, - { - "prop": "onBlur", - "desc": "输入框失去焦点时触发", - "type": "`(e: ChangeEvent) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-inputnumber-input-width", - "scssVar": "$inputnumber-input-width", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-inputnumber-input-height", - "scssVar": "$inputnumber-input-height", - "default": "scale-px(28px)" - }, - { - "cssVar": "--nutui-inputnumber-input-border", - "scssVar": "$inputnumber-input-border", - "default": "0" - }, - { - "cssVar": "--nutui-inputnumber-input-margin", - "scssVar": "$inputnumber-input-margin", - "default": "1px" - }, - { - "cssVar": "--nutui-inputnumber-button-width", - "scssVar": "$inputnumber-button-width", - "default": "scale-px(28px)" - }, - { - "cssVar": "--nutui-inputnumber-divider-width", - "scssVar": "$inputnumber-divider-width", - "default": "1px" - }, - { - "cssVar": "--nutui-inputnumber-input-font-family", - "scssVar": "$inputnumber-input-font-family", - "default": "JDZH" - }, - { - "cssVar": "--nutui-inputnumber-icon-size", - "scssVar": "$inputnumber-icon-size", - "default": "scale-px(8px)" - } - ] - }, - "menu": { - "id": "menu", - "name": "Menu", - "cName": "菜单", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "oasis-cloud", - "type": "component", - "desc": "向下弹出的菜单列表", - "sort": 13, - "show": true, - "docs": { - "h5": "src/packages/menu/doc.md", - "enUS": "src/packages/menu/doc.en-US.md", - "zhTW": "src/packages/menu/doc.zh-TW.md", - "taro": "src/packages/menu/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/menu/demos/h5/demo1.tsx", - "src/packages/menu/demos/h5/demo2.tsx", - "src/packages/menu/demos/h5/demo3.tsx", - "src/packages/menu/demos/h5/demo4.tsx", - "src/packages/menu/demos/h5/demo5.tsx", - "src/packages/menu/demos/h5/demo6.tsx", - "src/packages/menu/demos/h5/demo7.tsx", - "src/packages/menu/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/menu/demos/taro/demo1.tsx", - "src/packages/menu/demos/taro/demo2.tsx", - "src/packages/menu/demos/taro/demo3.tsx", - "src/packages/menu/demos/taro/demo4.tsx", - "src/packages/menu/demos/taro/demo5.tsx", - "src/packages/menu/demos/taro/demo6.tsx", - "src/packages/menu/demos/taro/demo7.tsx", - "src/packages/menu/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/menu/base.ts", - "h5": "src/types/spec/menu/h5.ts", - "taro": "src/types/spec/menu/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Menu", - "subComponent": null, - "rows": [ - { - "prop": "activeColor", - "desc": "选项的选中态图标颜色", - "type": "`string`", - "default": "#F2270C" - }, - { - "prop": "closeOnOverlayClick", - "desc": "是否在点击遮罩层后关闭菜单", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "lockScroll", - "desc": "背景是否锁定", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "scrollFixed", - "desc": "滚动后是否固定,可设置固定位置", - "type": "`boolean` | `string` | `number`", - "default": "true" - }, - { - "prop": "icon", - "desc": "自定义标题图标", - "type": "`React.ReactNode`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-menu-scroll-fixed-top", - "scssVar": "$menu-scroll-fixed-top", - "default": "0" - }, - { - "cssVar": "--nutui-menu-bar-line-height", - "scssVar": "$menu-bar-line-height", - "default": "scale-px(48px)" - }, - { - "cssVar": "--nutui-menu-bar-opened-z-index", - "scssVar": "$menu-bar-opened-z-index", - "default": "1000" - }, - { - "cssVar": "--nutui-menu-title-padding", - "scssVar": "$menu-title-padding", - "default": "0 scale-px(8px)" - }, - { - "cssVar": "--nutui-menu-title-color", - "scssVar": "$menu-title-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-menu-container-z-index", - "scssVar": "$menu-container-z-index", - "default": "1000" - }, - { - "cssVar": "--nutui-menu-content-padding", - "scssVar": "$menu-content-padding", - "default": "scale-px(12px) scale-px(24px)" - }, - { - "cssVar": "--nutui-menu-content-max-height", - "scssVar": "$menu-content-max-height", - "default": "scale-px(214px)" - }, - { - "cssVar": "--nutui-menu-item-padding", - "scssVar": "$menu-item-padding", - "default": "scale-px(12px) 0" - }, - { - "cssVar": "--nutui-menu-item-icon-margin", - "scssVar": "$menu-item-icon-margin", - "default": "scale-px(8px)" - } - ] - }, - "menuitem": { - "id": "menuitem", - "name": "MenuItem", - "cName": "菜单子项", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "oasis-cloud", - "type": "component", - "desc": "菜单子项", - "sort": 14, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "MenuItem", - "subComponent": null, - "rows": [ - { - "prop": "title", - "desc": "菜单项标题", - "type": "`string`", - "default": "当前选中项文字" - }, - { - "prop": "options", - "desc": "选项数组", - "type": "`array`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "是否禁用菜单", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "columns", - "desc": "可以设置一行展示多少列 options", - "type": "`number`", - "default": "1" - }, - { - "prop": "icon", - "desc": "自定义选项图标", - "type": "`React.ReactNode`", - "default": "Check" - }, - { - "prop": "direction", - "desc": "菜单展开方向,可选值为up", - "type": "`string`", - "default": "down" - }, - { - "prop": "onChange", - "desc": "选择 option 之后触发", - "type": "`(event: any) => void`", - "default": "-" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "MenuItem", - "subComponent": null, - "rows": [ - { - "prop": "toggle", - "desc": "切换菜单展示状态,传 true 为显示,false 为隐藏,不传参为取反", - "type": "`show?: boolean`", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "numberkeyboard": { - "id": "numberkeyboard", - "name": "NumberKeyboard", - "cName": "数字键盘", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Drjingfubo", - "type": "component", - "desc": "", - "sort": 16, - "show": true, - "docs": { - "h5": "src/packages/numberkeyboard/doc.md", - "enUS": "src/packages/numberkeyboard/doc.en-US.md", - "zhTW": "src/packages/numberkeyboard/doc.zh-TW.md", - "taro": "src/packages/numberkeyboard/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/numberkeyboard/demos/h5/demo1.tsx", - "src/packages/numberkeyboard/demos/h5/demo2.tsx", - "src/packages/numberkeyboard/demos/h5/demo3.tsx", - "src/packages/numberkeyboard/demos/h5/demo4.tsx", - "src/packages/numberkeyboard/demos/h5/demo5.tsx", - "src/packages/numberkeyboard/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/numberkeyboard/demos/taro/demo1.tsx", - "src/packages/numberkeyboard/demos/taro/demo2.tsx", - "src/packages/numberkeyboard/demos/taro/demo3.tsx", - "src/packages/numberkeyboard/demos/taro/demo4.tsx", - "src/packages/numberkeyboard/demos/taro/demo5.tsx", - "src/packages/numberkeyboard/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/numberkeyboard/base.ts", - "h5": "src/types/spec/numberkeyboard/h5.ts", - "taro": "src/types/spec/numberkeyboard/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "NumberKeyboard", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否显示键盘", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "键盘标题", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "type", - "desc": "键盘模式, default:默认样式 rightColumn:带右侧栏", - "type": "`string`", - "default": "default" - }, - { - "prop": "random", - "desc": "随机数", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "custom", - "desc": "自定义键盘额外的键, 数组形式最多支持添加 2 个, 超出默认取前 2 项", - "type": "`string[]`", - "default": "-" - }, - { - "prop": "confirmText", - "desc": "自定义完成按钮文字,如\"支付\",\"下一步\",\"提交\"等", - "type": "`string`", - "default": "完成" - }, - { - "prop": "onChange", - "desc": "点击按键时触发", - "type": "`(value: string) => void`", - "default": "-" - }, - { - "prop": "onDelete", - "desc": "点击删除键时触发", - "type": "`-`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "点击关闭按钮或非键盘区域时触发", - "type": "`-`", - "default": "-" - }, - { - "prop": "onConfirm", - "desc": "点击确定按钮时触发", - "type": "`-`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "picker": { - "id": "picker", - "name": "Picker", - "cName": "选择器", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "提供多个选项集合供用户选择其中一项。", - "sort": 10, - "show": true, - "docs": { - "h5": "src/packages/picker/doc.md", - "enUS": "src/packages/picker/doc.en-US.md", - "zhTW": "src/packages/picker/doc.zh-TW.md", - "taro": "src/packages/picker/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/picker/demos/h5/demo1.tsx", - "src/packages/picker/demos/h5/demo2.tsx", - "src/packages/picker/demos/h5/demo3.tsx", - "src/packages/picker/demos/h5/demo4.tsx", - "src/packages/picker/demos/h5/demo5.tsx", - "src/packages/picker/demos/h5/demo6.tsx", - "src/packages/picker/demos/h5/demo7.tsx", - "src/packages/picker/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/picker/demos/taro/demo1.tsx", - "src/packages/picker/demos/taro/demo2.tsx", - "src/packages/picker/demos/taro/demo3.tsx", - "src/packages/picker/demos/taro/demo4.tsx", - "src/packages/picker/demos/taro/demo5.tsx", - "src/packages/picker/demos/taro/demo6.tsx", - "src/packages/picker/demos/taro/demo7.tsx", - "src/packages/picker/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/picker/base.ts", - "h5": "src/types/spec/picker/h5.ts", - "taro": "src/types/spec/picker/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Picker", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否可见", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "设置标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "options", - "desc": "列表数据", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "value", - "desc": "选中值,受控", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "defaultValue", - "desc": "默认选中", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "threeDimensional", - "desc": "是否开启3D效果", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "duration", - "desc": "快速滑动时惯性滚动的时长,单位 ms", - "type": "`string` | `number`", - "default": "1000" - }, - { - "prop": "onConfirm", - "desc": "点击确认按钮时候回调", - "type": "`(options, value) => void`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "每一列值变更时调用", - "type": "`(options, value) => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭时触发", - "type": "`(options, value) => void`", - "default": "-" - }, - { - "prop": "afterClose", - "desc": "联动时,关闭时回调", - "type": "`(options, value) => void`", - "default": "-" - } - ] - }, - { - "name": "options 数据结构", - "kind": "other", - "sourceComponent": "Picker", - "subComponent": null, - "rows": [ - { - "prop": "text", - "desc": "选项的文字内容", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "value", - "desc": "选项对应的值,且唯一", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "children", - "desc": "用于级联选项", - "type": "`Array`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-picker-item-height", - "scssVar": "$picker-item-height", - "default": "scale-px(36px)" - } - ] - }, - "pickerview": { - "id": "pickerview", - "name": "PickerView", - "cName": "选择器视图", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "PickerView 是 Picker 的内容区域。", - "sort": 15, - "show": true, - "docs": { - "h5": "src/packages/pickerview/doc.md", - "enUS": "src/packages/pickerview/doc.en-US.md", - "zhTW": "src/packages/pickerview/doc.zh-TW.md", - "taro": "src/packages/pickerview/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/pickerview/demos/h5/demo1.tsx", - "src/packages/pickerview/demos/h5/demo2.tsx", - "src/packages/pickerview/demos/h5/demo3.tsx", - "src/packages/pickerview/demos/h5/demo4.tsx", - "src/packages/pickerview/demos/h5/demo5.tsx", - "src/packages/pickerview/demos/h5/demo6.tsx", - "src/packages/pickerview/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/pickerview/demos/taro/demo1.tsx", - "src/packages/pickerview/demos/taro/demo2.tsx", - "src/packages/pickerview/demos/taro/demo3.tsx", - "src/packages/pickerview/demos/taro/demo4.tsx", - "src/packages/pickerview/demos/taro/demo5.tsx", - "src/packages/pickerview/demos/taro/demo6.tsx", - "src/packages/pickerview/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/pickerview/base.ts", - "h5": "src/types/spec/pickerview/h5.ts", - "taro": "src/types/spec/pickerview/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "radio": { - "id": "radio", - "name": "Radio", - "cName": "单选按钮", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "oasis", - "type": "component", - "desc": "用于在一组备选项中进行单选", - "sort": 6, - "show": true, - "docs": { - "h5": "src/packages/radio/doc.md", - "enUS": "src/packages/radio/doc.en-US.md", - "zhTW": "src/packages/radio/doc.zh-TW.md", - "taro": "src/packages/radio/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/radio/demos/h5/demo1.tsx", - "src/packages/radio/demos/h5/demo2.tsx", - "src/packages/radio/demos/h5/demo3.tsx", - "src/packages/radio/demos/h5/demo4.tsx", - "src/packages/radio/demos/h5/demo5.tsx", - "src/packages/radio/demos/h5/demo6.tsx", - "src/packages/radio/demos/h5/demo7.tsx", - "src/packages/radio/demos/h5/demo8.tsx", - "src/packages/radio/demos/h5/demo9.tsx", - "src/packages/radio/demos/h5/demo10.tsx", - "src/packages/radio/demos/h5/demo11.tsx", - "src/packages/radio/demos/h5/demo12.tsx" - ], - "taro": [ - "src/packages/radio/demos/taro/demo1.tsx", - "src/packages/radio/demos/taro/demo2.tsx", - "src/packages/radio/demos/taro/demo3.tsx", - "src/packages/radio/demos/taro/demo4.tsx", - "src/packages/radio/demos/taro/demo5.tsx", - "src/packages/radio/demos/taro/demo6.tsx", - "src/packages/radio/demos/taro/demo7.tsx", - "src/packages/radio/demos/taro/demo8.tsx", - "src/packages/radio/demos/taro/demo9.tsx", - "src/packages/radio/demos/taro/demo10.tsx", - "src/packages/radio/demos/taro/demo11.tsx", - "src/packages/radio/demos/taro/demo12.tsx" - ] - }, - "spec": { - "base": "src/types/spec/radio/base.ts", - "h5": "src/types/spec/radio/h5.ts", - "taro": "src/types/spec/radio/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Radio", - "subComponent": null, - "rows": [ - { - "prop": "checked", - "desc": "指定当前是否选中", - "type": "`boolean`", - "default": "-" - }, - { - "prop": "defaultChecked", - "desc": "初始是否选中", - "type": "`boolean`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "是否禁用选择", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "value", - "desc": "携带的标识值,用于 Group 模式", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "labelPosition", - "desc": "文本所在的位置", - "type": "`left` | `right`", - "default": "right" - }, - { - "prop": "icon", - "desc": "图标名称,选中前(建议和`activeIcon`一起修改)", - "type": "`ReactNode`", - "default": "'CheckNormal'" - }, - { - "prop": "activeIcon", - "desc": "图标名称,选中后(建议和`icon`一起修改)", - "type": "`ReactNode`", - "default": "'CheckChecked'" - }, - { - "prop": "shape", - "desc": "形状", - "type": "`button` | `round` | `round`", - "default": "round" - }, - { - "prop": "onChange", - "desc": "选中态变化时触发", - "type": "`(checked: boolean) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-radio-label-color", - "scssVar": "$radio-label-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-radio-label-margin-left", - "scssVar": "$radio-label-margin-left", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-radio-button-padding", - "scssVar": "$radio-button-padding", - "default": "scale-px(5px) scale-px(18px)" - } - ] - }, - "radiogroup": { - "id": "radiogroup", - "name": "RadioGroup", - "cName": "单选按钮组", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": false, - "v15": true, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "单选按钮组", - "sort": 10, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Radio.Group", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "当前选中项的标识符", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "labelPosition", - "desc": "文本所在的位置", - "type": "`left` | `right`", - "default": "right" - }, - { - "prop": "disabled", - "desc": "是否禁用", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "direction", - "desc": "使用横纵方向", - "type": "`horizontal` | `vertical`", - "default": "vertical" - }, - { - "prop": "options", - "desc": "配置 options 渲染单选按钮", - "type": "`Array<{ label: string value: string disabled?: boolean }>`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "值变化时触发", - "type": "`(value: string | number) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-radiogroup-radio-margin", - "scssVar": "$radiogroup-radio-margin", - "default": "scale-px(20px)" - } - ] - }, - "range": { - "id": "range", - "name": "Range", - "cName": "区间选择器", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "vickyYe", - "type": "component", - "desc": "滑动输入条,用于在给定的范围内选择一个值。", - "sort": 3, - "show": true, - "docs": { - "h5": "src/packages/range/doc.md", - "enUS": "src/packages/range/doc.en-US.md", - "zhTW": "src/packages/range/doc.zh-TW.md", - "taro": "src/packages/range/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/range/demos/h5/demo1.tsx", - "src/packages/range/demos/h5/demo2.tsx", - "src/packages/range/demos/h5/demo3.tsx", - "src/packages/range/demos/h5/demo4.tsx", - "src/packages/range/demos/h5/demo5.tsx", - "src/packages/range/demos/h5/demo6.tsx", - "src/packages/range/demos/h5/demo7.tsx", - "src/packages/range/demos/h5/demo8.tsx", - "src/packages/range/demos/h5/demo9.tsx", - "src/packages/range/demos/h5/demo10.tsx", - "src/packages/range/demos/h5/demo11.tsx", - "src/packages/range/demos/h5/demo12.tsx", - "src/packages/range/demos/h5/demo13.tsx" - ], - "taro": [ - "src/packages/range/demos/taro/demo1.tsx", - "src/packages/range/demos/taro/demo2.tsx", - "src/packages/range/demos/taro/demo3.tsx", - "src/packages/range/demos/taro/demo4.tsx", - "src/packages/range/demos/taro/demo5.tsx", - "src/packages/range/demos/taro/demo6.tsx", - "src/packages/range/demos/taro/demo7.tsx", - "src/packages/range/demos/taro/demo8.tsx", - "src/packages/range/demos/taro/demo9.tsx", - "src/packages/range/demos/taro/demo10.tsx", - "src/packages/range/demos/taro/demo11.tsx", - "src/packages/range/demos/taro/demo12.tsx", - "src/packages/range/demos/taro/demo13.tsx" - ] - }, - "spec": { - "base": "src/types/spec/range/base.ts", - "h5": "src/types/spec/range/h5.ts", - "taro": "src/types/spec/range/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Range", - "subComponent": null, - "rows": [ - { - "prop": "defaultValue", - "desc": "默认进度百分比,非受控", - "type": "`number` | `number[]`", - "default": "0" - }, - { - "prop": "value", - "desc": "当前进度百分比,受控", - "type": "`number` | `number[]`", - "default": "0" - }, - { - "prop": "range", - "desc": "是否开启双滑块模式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "max", - "desc": "最大值", - "type": "`number`", - "default": "100" - }, - { - "prop": "min", - "desc": "最小值", - "type": "`number`", - "default": "0" - }, - { - "prop": "maxDescription", - "desc": "最大值描述,传 `null` 表示隐藏", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "minDescription", - "desc": "最小值描述,传 `null` 表示隐藏", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "currentDescription", - "desc": "当前值描述,传 `null` 表示隐藏", - "type": "`((value) => ReactNode)` | `null`", - "default": "-" - }, - { - "prop": "step", - "desc": "步长", - "type": "`number`", - "default": "1" - }, - { - "prop": "disabled", - "desc": "是否禁用滑块", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "vertical", - "desc": "是否竖向展示", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "marks", - "desc": "刻度标示", - "type": "`Object{key: number}`", - "default": "{}" - }, - { - "prop": "button", - "desc": "自定义滑动按钮", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "进度实时变化,通常在受控方式中与 value 一起使用", - "type": "`(value) => void`", - "default": "-" - }, - { - "prop": "onStart", - "desc": "开始拖动时触发", - "type": "`-`", - "default": "-" - }, - { - "prop": "onEnd", - "desc": "结束拖动时触发", - "type": "`(value) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-range-color", - "scssVar": "$range-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-range-height", - "scssVar": "$range-height", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-range-margin", - "scssVar": "$range-margin", - "default": "scale-px(15px)" - }, - { - "cssVar": "--nutui-range-active-color", - "scssVar": "$range-active-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-range-button-width", - "scssVar": "$range-button-width", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-range-button-height", - "scssVar": "$range-button-height", - "default": "scale-px(24px)" - } - ] - }, - "rate": { - "id": "rate", - "name": "Rate", - "cName": "评分", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "dsj", - "type": "component", - "desc": "用于快速的评级操作,或对评价进行展示。", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/rate/doc.md", - "enUS": "src/packages/rate/doc.en-US.md", - "zhTW": "src/packages/rate/doc.zh-TW.md", - "taro": "src/packages/rate/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/rate/demos/h5/demo1.tsx", - "src/packages/rate/demos/h5/demo2.tsx", - "src/packages/rate/demos/h5/demo3.tsx", - "src/packages/rate/demos/h5/demo4.tsx", - "src/packages/rate/demos/h5/demo5.tsx", - "src/packages/rate/demos/h5/demo6.tsx", - "src/packages/rate/demos/h5/demo7.tsx", - "src/packages/rate/demos/h5/demo8.tsx", - "src/packages/rate/demos/h5/demo9.tsx", - "src/packages/rate/demos/h5/demo10.tsx", - "src/packages/rate/demos/h5/demo11.tsx", - "src/packages/rate/demos/h5/demo12.tsx", - "src/packages/rate/demos/h5/demo13.tsx", - "src/packages/rate/demos/h5/demo14.tsx", - "src/packages/rate/demos/h5/demo15.tsx" - ], - "taro": [ - "src/packages/rate/demos/taro/demo1.tsx", - "src/packages/rate/demos/taro/demo2.tsx", - "src/packages/rate/demos/taro/demo3.tsx", - "src/packages/rate/demos/taro/demo4.tsx", - "src/packages/rate/demos/taro/demo5.tsx", - "src/packages/rate/demos/taro/demo6.tsx", - "src/packages/rate/demos/taro/demo7.tsx", - "src/packages/rate/demos/taro/demo8.tsx", - "src/packages/rate/demos/taro/demo9.tsx", - "src/packages/rate/demos/taro/demo10.tsx", - "src/packages/rate/demos/taro/demo11.tsx", - "src/packages/rate/demos/taro/demo12.tsx", - "src/packages/rate/demos/taro/demo13.tsx", - "src/packages/rate/demos/taro/demo14.tsx", - "src/packages/rate/demos/taro/demo15.tsx" - ] - }, - "spec": { - "base": "src/types/spec/rate/base.ts", - "h5": "src/types/spec/rate/h5.ts", - "taro": "src/types/spec/rate/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Rate", - "subComponent": null, - "rows": [ - { - "prop": "defaultValue", - "desc": "非受控的 star 默认值", - "type": "`number`", - "default": "0" - }, - { - "prop": "value", - "desc": "受控的 star 数值", - "type": "`number`", - "default": "0" - }, - { - "prop": "count", - "desc": "star 总数", - "type": "`number`", - "default": "5" - }, - { - "prop": "min", - "desc": "最少选中star数量", - "type": "`number`", - "default": "0" - }, - { - "prop": "uncheckedIcon", - "desc": "使用图标(未选中)", - "type": "`ReactNode`", - "default": "star-n" - }, - { - "prop": "checkedIcon", - "desc": "使用图标(选中)", - "type": "`ReactNode`", - "default": "star-n" - }, - { - "prop": "allowHalf", - "desc": "是否半星", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "readOnly", - "desc": "是否只读", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "disabled", - "desc": "是否禁用", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onChange", - "desc": "当前 star 数修改时触发", - "type": "`(value: number) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-rate-item-margin", - "scssVar": "$rate-item-margin", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-rate-icon-color", - "scssVar": "$rate-icon-color", - "default": "$color-primary-icon" - }, - { - "cssVar": "--nutui-rate-icon-size", - "scssVar": "$rate-icon-size", - "default": "scale-font-px(16px)" - }, - { - "cssVar": "--nutui-rate-font-color", - "scssVar": "$rate-font-color", - "default": "$color-primary-icon" - }, - { - "cssVar": "--nutui-rate-font-size", - "scssVar": "$rate-font-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-rate-font-size-large", - "scssVar": "$rate-font-size-large", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-rate-font-size-small", - "scssVar": "$rate-font-size-small", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-rate-label-color", - "scssVar": "$rate-label-color", - "default": "$color-text-disabled" - } - ] - }, - "searchbar": { - "id": "searchbar", - "name": "SearchBar", - "cName": "搜索栏", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Ymm0008", - "type": "component", - "desc": "用于搜索场景的输入框组件", - "sort": 16, - "show": true, - "docs": { - "h5": "src/packages/searchbar/doc.md", - "enUS": "src/packages/searchbar/doc.en-US.md", - "zhTW": "src/packages/searchbar/doc.zh-TW.md", - "taro": "src/packages/searchbar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/searchbar/demos/h5/demo1.tsx", - "src/packages/searchbar/demos/h5/demo2.tsx", - "src/packages/searchbar/demos/h5/demo3.tsx", - "src/packages/searchbar/demos/h5/demo4.tsx", - "src/packages/searchbar/demos/h5/demo5.tsx", - "src/packages/searchbar/demos/h5/demo6.tsx", - "src/packages/searchbar/demos/h5/demo7.tsx", - "src/packages/searchbar/demos/h5/demo8.tsx", - "src/packages/searchbar/demos/h5/demo10.tsx" - ], - "taro": [ - "src/packages/searchbar/demos/taro/demo1.tsx", - "src/packages/searchbar/demos/taro/demo2.tsx", - "src/packages/searchbar/demos/taro/demo3.tsx", - "src/packages/searchbar/demos/taro/demo4.tsx", - "src/packages/searchbar/demos/taro/demo5.tsx", - "src/packages/searchbar/demos/taro/demo6.tsx", - "src/packages/searchbar/demos/taro/demo7.tsx", - "src/packages/searchbar/demos/taro/demo8.tsx", - "src/packages/searchbar/demos/taro/demo10.tsx" - ] - }, - "spec": { - "base": "src/types/spec/searchbar/base.ts", - "h5": "src/types/spec/searchbar/h5.ts", - "taro": "src/types/spec/searchbar/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "SearchBar", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "当前输入的值", - "type": "`string`", - "default": "-" - }, - { - "prop": "placeholder", - "desc": "输入框默认暗纹", - "type": "`string`", - "default": "请输入" - }, - { - "prop": "shape", - "desc": "搜索框形状,可选值为 `round`", - "type": "`string`", - "default": "square" - }, - { - "prop": "disabled", - "desc": "是否禁用输入框", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "readOnly", - "desc": "输入框只读", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "maxLength", - "desc": "最大输入长度", - "type": "`number`", - "default": "9999" - }, - { - "prop": "clearable", - "desc": "是否展示清除按钮", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "autoFocus", - "desc": "是否自动聚焦", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "left", - "desc": "搜索框左侧区域", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "right", - "desc": "搜搜框右侧区域", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "leftIn", - "desc": "输入框内左侧区域", - "type": "`ReactNode`", - "default": "" - }, - { - "prop": "rightIn", - "desc": "输入框内右侧区域", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "输入内容时触发", - "type": "`(value: string, event: Event) => void`", - "default": "-" - }, - { - "prop": "onFocus", - "desc": "聚焦时触发", - "type": "`(value: string, event: Event) => void`", - "default": "-" - }, - { - "prop": "onBlur", - "desc": "失焦时触发", - "type": "`(value: string, event: Event) => void`", - "default": "-" - }, - { - "prop": "onClear", - "desc": "点击清空时触发", - "type": "`(event: Event) => void`", - "default": "-" - }, - { - "prop": "onSearch", - "desc": "确定搜索时触发", - "type": "`(val: string) => void`", - "default": "-" - }, - { - "prop": "onClickInput", - "desc": "点击输入区域时触发", - "type": "`(event: Event) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-searchbar-width", - "scssVar": "$searchbar-width", - "default": "100%" - }, - { - "cssVar": "--nutui-searchbar-padding", - "scssVar": "$searchbar-padding", - "default": "scale-px(1px) scale-px(8px)" - }, - { - "cssVar": "--nutui-searchbar-color", - "scssVar": "$searchbar-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-searchbar-gap", - "scssVar": "$searchbar-gap", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-searchbar-inner-gap", - "scssVar": "$searchbar-inner-gap", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-searchbar-icon-size", - "scssVar": "$searchbar-icon-size", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-searchbar-input-height", - "scssVar": "$searchbar-input-height", - "default": "scale-px(38px)" - } - ] - }, - "shortpassword": { - "id": "shortpassword", - "name": "ShortPassword", - "cName": "短密码", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Drjingfubo", - "type": "component", - "desc": "短密码输入框", - "sort": 10, - "show": true, - "docs": { - "h5": "src/packages/shortpassword/doc.md", - "enUS": "src/packages/shortpassword/doc.en-US.md", - "zhTW": "src/packages/shortpassword/doc.zh-TW.md", - "taro": "src/packages/shortpassword/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/shortpassword/demos/h5/demo1.tsx", - "src/packages/shortpassword/demos/h5/demo2.tsx", - "src/packages/shortpassword/demos/h5/demo3.tsx", - "src/packages/shortpassword/demos/h5/demo4.tsx", - "src/packages/shortpassword/demos/h5/demo5.tsx", - "src/packages/shortpassword/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/shortpassword/demos/taro/demo1.tsx", - "src/packages/shortpassword/demos/taro/demo2.tsx", - "src/packages/shortpassword/demos/taro/demo3.tsx", - "src/packages/shortpassword/demos/taro/demo4.tsx", - "src/packages/shortpassword/demos/taro/demo5.tsx", - "src/packages/shortpassword/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/shortpassword/base.ts", - "h5": "src/types/spec/shortpassword/h5.ts", - "taro": "src/types/spec/shortpassword/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "ShortPassword", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "密码字符串", - "type": "`string`", - "default": "-" - }, - { - "prop": "visible", - "desc": "是否展示短密码框", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "plain", - "desc": "是否展示明文", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "标题", - "type": "`ReactNode`", - "default": "请输入密码" - }, - { - "prop": "description", - "desc": "密码框描述", - "type": "`ReactNode`", - "default": "您使用了虚拟资产,请进行验证" - }, - { - "prop": "tips", - "desc": "提示语", - "type": "`ReactNode`", - "default": "忘记密码" - }, - { - "prop": "hideFooter", - "desc": "是否隐藏底部按钮", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "length", - "desc": "密码长度,取值为4~6", - "type": "`number`", - "default": "6" - }, - { - "prop": "error", - "desc": "错误信息提示", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "autoFocus", - "desc": "自动聚焦", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onChange", - "desc": "输入密码时触发事件", - "type": "`(value) => void`", - "default": "-" - }, - { - "prop": "onConfirm", - "desc": "点击确认时触发事件", - "type": "`(value) => void`", - "default": "-" - }, - { - "prop": "onCancel", - "desc": "点击取消时触发事件", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "点击关闭图标和遮罩时触发事件", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onTips", - "desc": "点击忘记密码时触发事件", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onComplete", - "desc": "输入完成的回调", - "type": "`(value) => void`", - "default": "-" - }, - { - "prop": "onFocus", - "desc": "输入框聚焦", - "type": "`() => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-shortpassword-error", - "scssVar": "$shortpassword-error", - "default": "$color-primary" - } - ] - }, - "signature": { - "id": "signature", - "name": "Signature", - "cName": "签名", - "version": "2.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "基于Canvas的签名组件", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/signature/doc.md", - "enUS": "src/packages/signature/doc.en-US.md", - "zhTW": "src/packages/signature/doc.zh-TW.md", - "taro": "src/packages/signature/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/signature/demos/h5/demo1.tsx", - "src/packages/signature/demos/h5/demo2.tsx" - ], - "taro": [ - "src/packages/signature/demos/taro/demo1.tsx", - "src/packages/signature/demos/taro/demo2.tsx" - ] - }, - "spec": { - "base": "src/types/spec/signature/base.ts", - "h5": "src/types/spec/signature/h5.ts", - "taro": "src/types/spec/signature/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Signature", - "subComponent": null, - "rows": [ - { - "prop": "customClass", - "desc": "自定义 class", - "type": "`string`", - "default": "-" - }, - { - "prop": "lineWidth", - "desc": "线条的宽度", - "type": "`number`", - "default": "3" - }, - { - "prop": "strokeStyle", - "desc": "绘图笔触颜色", - "type": "`string`", - "default": "#000" - }, - { - "prop": "type", - "desc": "图片格式", - "type": "`string`", - "default": "png" - }, - { - "prop": "unsupported", - "desc": "不支持 Canvas 情况下的展示文案", - "type": "`ReactNode`", - "default": "对不起,当前浏览器不支持 Canvas,无法使用本控件!" - }, - { - "prop": "onConfirm", - "desc": "点击确认按钮触发事件回调函数", - "type": "`onConfirm: (canvas: HTMLCanvasElement, dataurl: string) => void`", - "default": "-" - }, - { - "prop": "onClear", - "desc": "点击重签按钮触发事件回调函数", - "type": "`onClear: () => void`", - "default": "-" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Signature", - "subComponent": null, - "rows": [ - { - "prop": "confirm", - "desc": "确认签字", - "type": "`() => void`", - "default": "" - }, - { - "prop": "clear", - "desc": "清除签字", - "type": "`() => void`", - "default": "" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-signature-border-width", - "scssVar": "$signature-border-width", - "default": "scale-px(1px)" - }, - { - "cssVar": "--nutui-signature-height", - "scssVar": "$signature-height", - "default": "10rem" - } - ] - }, - "switch": { - "id": "switch", - "name": "Switch", - "cName": "开关", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "dsj", - "type": "component", - "desc": "用来打开或关闭选项。", - "sort": 11, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/switch/doc.md", - "enUS": "src/packages/switch/doc.en-US.md", - "zhTW": "src/packages/switch/doc.zh-TW.md", - "taro": "src/packages/switch/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/switch/demos/h5/demo1.tsx", - "src/packages/switch/demos/h5/demo2.tsx", - "src/packages/switch/demos/h5/demo3.tsx", - "src/packages/switch/demos/h5/demo4.tsx", - "src/packages/switch/demos/h5/demo5.tsx", - "src/packages/switch/demos/h5/demo6.tsx", - "src/packages/switch/demos/h5/demo7.tsx", - "src/packages/switch/demos/h5/demo8.tsx", - "src/packages/switch/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/switch/demos/taro/demo1.tsx", - "src/packages/switch/demos/taro/demo2.tsx", - "src/packages/switch/demos/taro/demo3.tsx", - "src/packages/switch/demos/taro/demo4.tsx", - "src/packages/switch/demos/taro/demo5.tsx", - "src/packages/switch/demos/taro/demo6.tsx", - "src/packages/switch/demos/taro/demo7.tsx", - "src/packages/switch/demos/taro/demo8.tsx", - "src/packages/switch/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/switch/base.ts", - "h5": "src/types/spec/switch/h5.ts", - "taro": "src/types/spec/switch/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Switch", - "subComponent": null, - "rows": [ - { - "prop": "defaultChecked", - "desc": "开关状态,非受控", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "checked", - "desc": "开关状态,受控", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "disabled", - "desc": "禁用状态", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "activeText", - "desc": "打开时文字描述", - "type": "`string`", - "default": "-" - }, - { - "prop": "inactiveText", - "desc": "关闭时文字描述", - "type": "`string`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "切换开关时触发", - "type": "`onChange:(value: boolean, event: Event)`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-switch-width", - "scssVar": "$switch-width", - "default": "scale-px(56px)" - }, - { - "cssVar": "--nutui-switch-height", - "scssVar": "$switch-height", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-switch-inside-width", - "scssVar": "$switch-inside-width", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-switch-inside-height", - "scssVar": "$switch-inside-height", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-switch-border-width", - "scssVar": "$switch-border-width", - "default": "scale-px(2px)" - } - ] - }, - "textarea": { - "id": "textarea", - "name": "TextArea", - "cName": "文本域", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "VickyYe", - "type": "component", - "desc": "文本框内输入或编辑文字,支持限制输入数量。", - "sort": 2, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/textarea/doc.md", - "enUS": "src/packages/textarea/doc.en-US.md", - "zhTW": "src/packages/textarea/doc.zh-TW.md", - "taro": "src/packages/textarea/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/textarea/demos/h5/demo1.tsx", - "src/packages/textarea/demos/h5/demo2.tsx", - "src/packages/textarea/demos/h5/demo3.tsx", - "src/packages/textarea/demos/h5/demo4.tsx", - "src/packages/textarea/demos/h5/demo5.tsx", - "src/packages/textarea/demos/h5/demo6.tsx", - "src/packages/textarea/demos/h5/demo7.tsx", - "src/packages/textarea/demos/h5/demo8.tsx", - "src/packages/textarea/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/textarea/demos/taro/demo1.tsx", - "src/packages/textarea/demos/taro/demo2.tsx", - "src/packages/textarea/demos/taro/demo3.tsx", - "src/packages/textarea/demos/taro/demo4.tsx", - "src/packages/textarea/demos/taro/demo5.tsx", - "src/packages/textarea/demos/taro/demo6.tsx", - "src/packages/textarea/demos/taro/demo7.tsx", - "src/packages/textarea/demos/taro/demo8.tsx", - "src/packages/textarea/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/textarea/base.ts", - "h5": "src/types/spec/textarea/h5.ts", - "taro": "src/types/spec/textarea/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "TextArea", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "输入框内容,受控", - "type": "`string`", - "default": "-" - }, - { - "prop": "defaultValue", - "desc": "初始默认值,非受控", - "type": "`string`", - "default": "-" - }, - { - "prop": "placeholder", - "desc": "设置占位提示文字", - "type": "`string`", - "default": "请输入内容" - }, - { - "prop": "maxLength", - "desc": "限制最长输入字符,-1 表示无限制", - "type": "`number`", - "default": "140" - }, - { - "prop": "rows", - "desc": "textarea 的行数", - "type": "`number`", - "default": "2" - }, - { - "prop": "showCount", - "desc": "textarea 是否展示输入字符。须配合`maxLength`使用", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "autoSize", - "desc": "高度是否可拉伸", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "readOnly", - "desc": "只读属性", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "disabled", - "desc": "禁用属性", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onChange", - "desc": "输入内容时触发", - "type": "`(value) => void`", - "default": "-" - }, - { - "prop": "onFocus", - "desc": "聚焦时触发", - "type": "`(event) => void`", - "default": "-" - }, - { - "prop": "onBlur", - "desc": "失焦时触发", - "type": "`(event) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-textarea-padding", - "scssVar": "$textarea-padding", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-textarea-text-color", - "scssVar": "$textarea-text-color", - "default": "$color-title" - } - ] - }, - "uploader": { - "id": "uploader", - "name": "Uploader", - "cName": "上传", - "version": "3.0.0", - "category": { - "name": "数据录入", - "enName": "dataentry" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "用于将本地的图片或文件上传至服务器。", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/uploader/doc.md", - "enUS": "src/packages/uploader/doc.en-US.md", - "zhTW": "src/packages/uploader/doc.zh-TW.md", - "taro": "src/packages/uploader/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/uploader/demos/h5/demo1.tsx", - "src/packages/uploader/demos/h5/demo2.tsx", - "src/packages/uploader/demos/h5/demo3.tsx", - "src/packages/uploader/demos/h5/demo4.tsx", - "src/packages/uploader/demos/h5/demo5.tsx", - "src/packages/uploader/demos/h5/demo6.tsx", - "src/packages/uploader/demos/h5/demo7.tsx", - "src/packages/uploader/demos/h5/demo8.tsx", - "src/packages/uploader/demos/h5/demo9.tsx", - "src/packages/uploader/demos/h5/demo10.tsx" - ], - "taro": [ - "src/packages/uploader/demos/taro/demo1.tsx", - "src/packages/uploader/demos/taro/demo2.tsx", - "src/packages/uploader/demos/taro/demo3.tsx", - "src/packages/uploader/demos/taro/demo4.tsx", - "src/packages/uploader/demos/taro/demo5.tsx", - "src/packages/uploader/demos/taro/demo6.tsx", - "src/packages/uploader/demos/taro/demo7.tsx", - "src/packages/uploader/demos/taro/demo8.tsx", - "src/packages/uploader/demos/taro/demo9.tsx", - "src/packages/uploader/demos/taro/demo10.tsx" - ] - }, - "spec": { - "base": "src/types/spec/uploader/base.ts", - "h5": "src/types/spec/uploader/h5.ts", - "taro": "src/types/spec/uploader/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Uploader", - "subComponent": null, - "rows": [ - { - "prop": "autoUpload", - "desc": "是否在选取文件后立即进行上传,false 时需要手动执行 ref submit 方法进行上传", - "type": "`Boolean`", - "default": "true" - }, - { - "prop": "name", - "desc": "`input` 标签 `name` 的名称,发到后台的文件参数名", - "type": "`string`", - "default": "file" - }, - { - "prop": "url", - "desc": "上传服务器的接口地址", - "type": "`string`", - "default": "-" - }, - { - "prop": "defaultValue", - "desc": "默认已经上传的文件列表", - "type": "`FileType[]`", - "default": "[]" - }, - { - "prop": "value", - "desc": "已经上传的文件列表", - "type": "`FileType[]`", - "default": "[]" - }, - { - "prop": "preview", - "desc": "是否上传成功后展示预览图", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "previewUrl", - "desc": "当上传非图片('image')格式的默认图片地址", - "type": "`string`", - "default": "-" - }, - { - "prop": "deletable", - "desc": "是否展示删除按钮", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "method", - "desc": "上传请求的 http method", - "type": "`string`", - "default": "post" - }, - { - "prop": "previewType", - "desc": "上传列表的内建样式,支持两种基本样式 picture、list", - "type": "`string`", - "default": "picture" - }, - { - "prop": "capture", - "desc": "图片[选取模式](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#htmlattrdefcapture\"),直接调起摄像头", - "type": "`string`", - "default": "false" - }, - { - "prop": "maxFileSize", - "desc": "可以设定最大上传文件的大小(字节)", - "type": "`number` | `string`", - "default": "Number.MAX_VALUE" - }, - { - "prop": "maxCount", - "desc": "文件上传数量限制", - "type": "`number` | `string`", - "default": "1" - }, - { - "prop": "imageFit", - "desc": "图片填充模式", - "type": "`contain` | `cover` | `fill` | `none` | `scale-down`", - "default": "cover" - }, - { - "prop": "clearInput", - "desc": "是否需要清空`input`内容,设为`true`支持重复选择上传同一个文件", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "accept", - "desc": "允许上传的文件类型,[详细说明](\"https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#%E9%99%90%E5%88%B6%E5%85%81%E8%AE%B8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B\")", - "type": "`string`", - "default": "*" - }, - { - "prop": "headers", - "desc": "设置上传的请求头部", - "type": "`object`", - "default": "{}" - }, - { - "prop": "data", - "desc": "附加上传的信息 formData", - "type": "`object`", - "default": "{}" - }, - { - "prop": "uploadIcon", - "desc": "上传区域图标名称", - "type": "`React.ReactNode`", - "default": "-" - }, - { - "prop": "uploadLabel", - "desc": "上传区域图片下方文字", - "type": "`React.ReactNode`", - "default": "-" - }, - { - "prop": "xhrState", - "desc": "接口响应的成功状态(status)值", - "type": "`number`", - "default": "200" - }, - { - "prop": "withCredentials", - "desc": "支持发送 cookie 凭证信息", - "type": "`Boolean`", - "default": "false" - }, - { - "prop": "multiple", - "desc": "是否支持文件多选", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "disabled", - "desc": "是否禁用文件上传", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "timeout", - "desc": "超时时间,单位为毫秒", - "type": "`number` | `string`", - "default": "1000 * 30" - }, - { - "prop": "beforeUpload", - "desc": "上传前的函数需要返回一个`Promise`对象", - "type": "`(file: File[]) => Promise`", - "default": "-" - }, - { - "prop": "beforeXhrUpload", - "desc": "执行 XHR 上传时,自定义方式", - "type": "`(xhr: XMLHttpRequest, options: any) => void`", - "default": "-" - }, - { - "prop": "beforeDelete", - "desc": "除文件时的回调,返回值为 false 时不移除。支持返回一个 `Promise` 对象,`Promise` 对象 resolve(false) 或 reject 时不移除", - "type": "`(file: FileItem, files: FileItem[]) => boolean`", - "default": "-" - }, - { - "prop": "onStart", - "desc": "文件上传开始", - "type": "`options`", - "default": "-" - }, - { - "prop": "onProgress", - "desc": "文件上传的进度", - "type": "`event, options, percentage`", - "default": "-" - }, - { - "prop": "onOversize", - "desc": "文件大小超过限制时触发", - "type": "`files`", - "default": "-" - }, - { - "prop": "onSuccess", - "desc": "上传成功", - "type": "`responseText, options`", - "default": "-" - }, - { - "prop": "onFailure", - "desc": "上传失败", - "type": "`responseText, options`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "上传文件改变时的状态", - "type": "`fileList, event`", - "default": "-" - }, - { - "prop": "onDelete", - "desc": "文件删除之前的状态", - "type": "`files, fileList`", - "default": "-" - }, - { - "prop": "onFileItemClick", - "desc": "文件上传成功后点击触发", - "type": "`fileItem`", - "default": "-" - } - ] - }, - { - "name": "FileItem", - "kind": "other", - "sourceComponent": "Uploader", - "subComponent": null, - "rows": [ - { - "prop": "status", - "desc": "文件状态值,可选'ready,uploading,success,error,removed'", - "type": "`ready`", - "default": "" - }, - { - "prop": "uid", - "desc": "文件的唯一标识", - "type": "`new Date().getTime().toString()`", - "default": "" - }, - { - "prop": "name", - "desc": "文件名称", - "type": "`-`", - "default": "" - }, - { - "prop": "url", - "desc": "文件路径", - "type": "`-`", - "default": "" - }, - { - "prop": "type", - "desc": "文件类型", - "type": "`image/jpeg`", - "default": "" - }, - { - "prop": "formData", - "desc": "上传所需的data", - "type": "`new FormData()`", - "default": "" - } - ] - }, - { - "name": "Methods", - "kind": "methods", - "sourceComponent": "Uploader", - "subComponent": null, - "rows": [ - { - "prop": "submit", - "desc": "手动上传模式,执行上传操作", - "type": "`-`", - "default": "-" - }, - { - "prop": "clear", - "desc": "清空已选择的文件队列(该方法一般配合在手动模式上传时使用)", - "type": "`index`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-uploader-image-width", - "scssVar": "$uploader-image-width", - "default": "scale-px(100px)" - }, - { - "cssVar": "--nutui-uploader-image-height", - "scssVar": "$uploader-image-height", - "default": "scale-px(100px)" - }, - { - "cssVar": "--nutui-uploader-image-border", - "scssVar": "$uploader-image-border", - "default": "0px" - } - ] - }, - "actionsheet": { - "id": "actionsheet", - "name": "ActionSheet", - "cName": "动作面板", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "dsj", - "type": "component", - "desc": "从底部弹出的动作菜单面板。", - "sort": 11, - "show": true, - "docs": { - "h5": "src/packages/actionsheet/doc.md", - "enUS": "src/packages/actionsheet/doc.en-US.md", - "zhTW": "src/packages/actionsheet/doc.zh-TW.md", - "taro": "src/packages/actionsheet/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/actionsheet/demos/h5/demo1.tsx", - "src/packages/actionsheet/demos/h5/demo2.tsx", - "src/packages/actionsheet/demos/h5/demo3.tsx", - "src/packages/actionsheet/demos/h5/demo4.tsx", - "src/packages/actionsheet/demos/h5/demo5.tsx", - "src/packages/actionsheet/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/actionsheet/demos/taro/demo1.tsx", - "src/packages/actionsheet/demos/taro/demo2.tsx", - "src/packages/actionsheet/demos/taro/demo3.tsx", - "src/packages/actionsheet/demos/taro/demo4.tsx", - "src/packages/actionsheet/demos/taro/demo5.tsx", - "src/packages/actionsheet/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/actionsheet/base.ts", - "h5": "src/types/spec/actionsheet/h5.ts", - "taro": "src/types/spec/actionsheet/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "ActionSheet", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "遮罩层可见", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "设置列表面板标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "description", - "desc": "设置列表面板副标题/描述", - "type": "`string`", - "default": "-" - }, - { - "prop": "options", - "desc": "列表项", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "optionKey", - "desc": "列表项的自定义设置", - "type": "`{ [key: string]: string }`", - "default": "-" - }, - { - "prop": "cancelText", - "desc": "取消文案", - "type": "`string`", - "default": "取消" - }, - { - "prop": "onSelect", - "desc": "选择之后触发", - "type": "`(item: any, index: number) => void`", - "default": "-" - }, - { - "prop": "onCancel", - "desc": "点击取消文案时触发", - "type": "`() => void`", - "default": "-" - } - ] - }, - { - "name": "options", - "kind": "other", - "sourceComponent": "ActionSheet", - "subComponent": null, - "rows": [ - { - "prop": "name", - "desc": "列表项的标题key值", - "type": "`string`", - "default": "-" - }, - { - "prop": "description", - "desc": "列表项的描述key值", - "type": "`string`", - "default": "-" - }, - { - "prop": "danger", - "desc": "高亮颜色", - "type": "`string`", - "default": "$primary-color" - }, - { - "prop": "disable", - "desc": "禁用状态", - "type": "`string`", - "default": "$color-text-disabled" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-actionsheet-border-radius", - "scssVar": "$actionsheet-border-radius", - "default": "0" - } - ] - }, - "badge": { - "id": "badge", - "name": "Badge", - "cName": "徽标", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "lzz", - "type": "component", - "desc": "在图标或文字右上角的红色圆点、数字或者文字,表示有新内容或者待处理的信息。", - "sort": 4, - "show": true, - "docs": { - "h5": "src/packages/badge/doc.md", - "enUS": "src/packages/badge/doc.en-US.md", - "zhTW": "src/packages/badge/doc.zh-TW.md", - "taro": "src/packages/badge/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/badge/demos/h5/demo1.tsx", - "src/packages/badge/demos/h5/demo2.tsx", - "src/packages/badge/demos/h5/demo3.tsx", - "src/packages/badge/demos/h5/demo4.tsx", - "src/packages/badge/demos/h5/demo5.tsx", - "src/packages/badge/demos/h5/demo6.tsx", - "src/packages/badge/demos/h5/demo7.tsx", - "src/packages/badge/demos/h5/demo8.tsx", - "src/packages/badge/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/badge/demos/taro/demo1.tsx", - "src/packages/badge/demos/taro/demo2.tsx", - "src/packages/badge/demos/taro/demo3.tsx", - "src/packages/badge/demos/taro/demo4.tsx", - "src/packages/badge/demos/taro/demo5.tsx", - "src/packages/badge/demos/taro/demo6.tsx", - "src/packages/badge/demos/taro/demo7.tsx", - "src/packages/badge/demos/taro/demo8.tsx", - "src/packages/badge/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/badge/base.ts", - "h5": "src/types/spec/badge/h5.ts", - "taro": "src/types/spec/badge/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Badge", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "显示的内容,支持数字、字符和自定义内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "max", - "desc": "value 为数值时,最大值", - "type": "`number`", - "default": "99" - }, - { - "prop": "dot", - "desc": "是否为小点", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "top", - "desc": "上下偏移量,支持单位设置,可设置为:5 等", - "type": "`number`", - "default": "0" - }, - { - "prop": "right", - "desc": "左右偏移量,支持单位设置,可设置为:5 等", - "type": "`number`", - "default": "0" - }, - { - "prop": "color", - "desc": "徽标背景颜色,默认值为当前主题色", - "type": "`string`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-badge-height", - "scssVar": "$badge-height", - "default": "scale-px(14px)" - }, - { - "cssVar": "--nutui-badge-color", - "scssVar": "$badge-color", - "default": "$color-primary-text" - }, - { - "cssVar": "--nutui-badge-font-size", - "scssVar": "$badge-font-size", - "default": "$font-size-xxxs" - }, - { - "cssVar": "--nutui-badge-border-radius", - "scssVar": "$badge-border-radius", - "default": "$badge-height" - }, - { - "cssVar": "--nutui-badge-min-width", - "scssVar": "$badge-min-width", - "default": "scale-px(6px)" - }, - { - "cssVar": "--nutui-badge-padding", - "scssVar": "$badge-padding", - "default": "scale-px(1px) scale-px(4px)" - }, - { - "cssVar": "--nutui-badge-icon-padding", - "scssVar": "$badge-icon-padding", - "default": "scale-px(2px)" - }, - { - "cssVar": "--nutui-badge-icon-size", - "scssVar": "$badge-icon-size", - "default": "$font-size-xxs" - }, - { - "cssVar": "--nutui-badge-z-index", - "scssVar": "$badge-z-index", - "default": "1" - }, - { - "cssVar": "--nutui-badge-dot-width", - "scssVar": "$badge-dot-width", - "default": "scale-px(6px)" - }, - { - "cssVar": "--nutui-badge-dot-small-width", - "scssVar": "$badge-dot-small-width", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-badge-dot-large-width", - "scssVar": "$badge-dot-large-width", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-badge-outline-color", - "scssVar": "$badge-outline-color", - "default": "$color-primary" - } - ] - }, - "dialog": { - "id": "dialog", - "name": "Dialog", - "cName": "对话框", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "yangjinjun3", - "type": "component", - "desc": "模态对话框", - "sort": 12, - "show": true, - "docs": { - "h5": "src/packages/dialog/doc.md", - "enUS": "src/packages/dialog/doc.en-US.md", - "zhTW": "src/packages/dialog/doc.zh-TW.md", - "taro": "src/packages/dialog/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/dialog/demos/h5/demo1.tsx", - "src/packages/dialog/demos/h5/demo2.tsx", - "src/packages/dialog/demos/h5/demo3.tsx", - "src/packages/dialog/demos/h5/demo4.tsx", - "src/packages/dialog/demos/h5/demo5.tsx", - "src/packages/dialog/demos/h5/demo6.tsx", - "src/packages/dialog/demos/h5/demo7.tsx", - "src/packages/dialog/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/dialog/demos/taro/demo1.tsx", - "src/packages/dialog/demos/taro/demo2.tsx", - "src/packages/dialog/demos/taro/demo3.tsx", - "src/packages/dialog/demos/taro/demo4.tsx", - "src/packages/dialog/demos/taro/demo5.tsx", - "src/packages/dialog/demos/taro/demo6.tsx", - "src/packages/dialog/demos/taro/demo7.tsx", - "src/packages/dialog/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/dialog/base.ts", - "h5": "src/types/spec/dialog/h5.ts", - "taro": "src/types/spec/dialog/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Dialog", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "对话框是否可见", - "type": "`boolean`", - "default": "-" - }, - { - "prop": "title", - "desc": "标题", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "content", - "desc": "对话框的内容,适用于函数式调用", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "footer", - "desc": "自定义页脚,传入 null 则不显示", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "confirmText", - "desc": "确认按钮文案", - "type": "`ReactNode`", - "default": "确定" - }, - { - "prop": "cancelText", - "desc": "取消按钮文案", - "type": "`ReactNode`", - "default": "取消" - }, - { - "prop": "overlay", - "desc": "是否展示遮罩", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "hideConfirmButton", - "desc": "是否隐藏确定按钮", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "hideCancelButton", - "desc": "是否隐藏取消按钮", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "disableConfirmButton", - "desc": "禁用确定按钮", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "closeOnOverlayClick", - "desc": "点击蒙层是否关闭对话框", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "footerDirection", - "desc": "使用横纵方向 可选值 horizontal、vertical", - "type": "`string`", - "default": "horizontal" - }, - { - "prop": "lockScroll", - "desc": "背景是否锁定", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "beforeCancel", - "desc": "取消前回调,点击取消时触发", - "type": "`() => boolean`", - "default": "-" - }, - { - "prop": "beforeClose", - "desc": "关闭前回调", - "type": "`() => boolean`", - "default": "-" - }, - { - "prop": "onConfirm", - "desc": "确定按钮回调", - "type": "`(e?: MouseEvent) => Promise | void`", - "default": "-" - }, - { - "prop": "onCancel", - "desc": "取消按钮回调", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭回调,任何情况关闭弹窗都会触发", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击自身回调", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onOverlayClick", - "desc": "点击蒙层触发", - "type": "`() => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-dialog-min-width", - "scssVar": "$dialog-min-width", - "default": "scale-px(240px)" - }, - { - "cssVar": "--nutui-dialog-width", - "scssVar": "$dialog-width", - "default": "scale-px(295px)" - }, - { - "cssVar": "--nutui-dialog-padding", - "scssVar": "$dialog-padding", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-dialog-max-height", - "scssVar": "$dialog-max-height", - "default": "scale-px(420px)" - }, - { - "cssVar": "--nutui-dialog-min-height", - "scssVar": "$dialog-min-height", - "default": "scale-px(124px)" - }, - { - "cssVar": "--nutui-dialog-border-radius", - "scssVar": "$dialog-border-radius", - "default": "$radius-xl" - }, - { - "cssVar": "--nutui-dialog-content-margin", - "scssVar": "$dialog-content-margin", - "default": "0 0 scale-px(20px) 0" - }, - { - "cssVar": "--nutui-dialog-footer-badge-top", - "scssVar": "$dialog-footer-badge-top", - "default": "scale-px(-8px)" - }, - { - "cssVar": "--nutui-dialog-close-color", - "scssVar": "$dialog-close-color", - "default": "#ffffff" - }, - { - "cssVar": "--nutui-dialog-close-width", - "scssVar": "$dialog-close-width", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-dialog-close-height", - "scssVar": "$dialog-close-height", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-dialog-close-top", - "scssVar": "$dialog-close-top", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-dialog-close-left", - "scssVar": "$dialog-close-left", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-dialog-close-right", - "scssVar": "$dialog-close-right", - "default": "scale-px(16px)" - } - ] - }, - "drag": { - "id": "drag", - "name": "Drag", - "cName": "拖拽", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "实现可拖拽的任意元素", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/drag/doc.md", - "enUS": "src/packages/drag/doc.en-US.md", - "zhTW": "src/packages/drag/doc.zh-TW.md", - "taro": "src/packages/drag/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/drag/demos/h5/demo1.tsx", - "src/packages/drag/demos/h5/demo2.tsx", - "src/packages/drag/demos/h5/demo3.tsx", - "src/packages/drag/demos/h5/demo4.tsx" - ], - "taro": [ - "src/packages/drag/demos/taro/demo1.tsx", - "src/packages/drag/demos/taro/demo2.tsx", - "src/packages/drag/demos/taro/demo3.tsx", - "src/packages/drag/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/drag/base.ts", - "h5": "src/types/spec/drag/h5.ts", - "taro": "src/types/spec/drag/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Drag", - "subComponent": null, - "rows": [ - { - "prop": "attract", - "desc": "是否开启自动吸边", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "direction", - "desc": "拖拽元素的拖拽方向限制", - "type": "`x` | `y` | `all`", - "default": "all" - }, - { - "prop": "boundary", - "desc": "拖拽元素的拖拽边界", - "type": "`Object`", - "default": "{top: 0, left: 0, right: 0, bottom: 0}" - } - ] - } - ] - }, - "tokens": [] - }, - "empty": { - "id": "empty", - "name": "Empty", - "cName": "空状态", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "liukun", - "type": "component", - "desc": "空状态时的占位提示", - "sort": 16, - "show": true, - "docs": { - "h5": "src/packages/empty/doc.md", - "enUS": "src/packages/empty/doc.en-US.md", - "zhTW": "src/packages/empty/doc.zh-TW.md", - "taro": "src/packages/empty/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/empty/demos/h5/demo1.tsx", - "src/packages/empty/demos/h5/demo2.tsx", - "src/packages/empty/demos/h5/demo3.tsx", - "src/packages/empty/demos/h5/demo4.tsx", - "src/packages/empty/demos/h5/demo5.tsx", - "src/packages/empty/demos/h5/demo6.tsx", - "src/packages/empty/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/empty/demos/taro/demo1.tsx", - "src/packages/empty/demos/taro/demo2.tsx", - "src/packages/empty/demos/taro/demo3.tsx", - "src/packages/empty/demos/taro/demo4.tsx", - "src/packages/empty/demos/taro/demo5.tsx", - "src/packages/empty/demos/taro/demo6.tsx", - "src/packages/empty/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/empty/base.ts", - "h5": "src/types/spec/empty/h5.ts", - "taro": "src/types/spec/empty/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Empty", - "subComponent": null, - "rows": [ - { - "prop": "image", - "desc": "图片,支持传入图片 URL", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "imageSize", - "desc": "图片大小,number 类型单位为 px", - "type": "`number` | `string`", - "default": "-" - }, - { - "prop": "description", - "desc": "图片下方的描述文字", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "status", - "desc": "默认图片错误类型", - "type": "`empty` | `error` | `network`", - "default": "empty" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-empty-padding", - "scssVar": "$empty-padding", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-empty-title-color", - "scssVar": "$empty-title-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-empty-description-color", - "scssVar": "$empty-description-color", - "default": "$color-text-help" - }, - { - "cssVar": "--nutui-empty-full-padding-top", - "scssVar": "$empty-full-padding-top", - "default": "scale-px(160px)" - }, - { - "cssVar": "--nutui-empty-full-image-size", - "scssVar": "$empty-full-image-size", - "default": "scale-px(160px)" - }, - { - "cssVar": "--nutui-empty-full-title-font-size", - "scssVar": "$empty-full-title-font-size", - "default": "$font-size-md" - }, - { - "cssVar": "--nutui-empty-full-title-line-height", - "scssVar": "$empty-full-title-line-height", - "default": "$line-height-xxl" - }, - { - "cssVar": "--nutui-empty-full-description-font-size", - "scssVar": "$empty-full-description-font-size", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-empty-full-description-line-height", - "scssVar": "$empty-full-description-line-height", - "default": "scale-font-px(22px)" - }, - { - "cssVar": "--nutui-empty-full-actions-margin-top", - "scssVar": "$empty-full-actions-margin-top", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-empty-half-image-size", - "scssVar": "$empty-half-image-size", - "default": "scale-px(80px)" - }, - { - "cssVar": "--nutui-empty-half-title-font-size", - "scssVar": "$empty-half-title-font-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-empty-half-title-line-height", - "scssVar": "$empty-half-title-line-height", - "default": "scale-font-px(22px)" - }, - { - "cssVar": "--nutui-empty-half-description-font-size", - "scssVar": "$empty-half-description-font-size", - "default": "$font-size-m" - }, - { - "cssVar": "--nutui-empty-half-description-line-height", - "scssVar": "$empty-half-description-line-height", - "default": "$line-height-2xl" - }, - { - "cssVar": "--nutui-empty-half-actions-margin-top", - "scssVar": "$empty-half-actions-margin-top", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-empty-partial-padding", - "scssVar": "$empty-partial-padding", - "default": "scale-px(0px) scale-px(16px)" - }, - { - "cssVar": "--nutui-empty-partial-image-size", - "scssVar": "$empty-partial-image-size", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-empty-partial-content-gap", - "scssVar": "$empty-partial-content-gap", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-empty-partial-description-font-size", - "scssVar": "$empty-partial-description-font-size", - "default": "$font-size-m" - }, - { - "cssVar": "--nutui-empty-partial-description-line-height", - "scssVar": "$empty-partial-description-line-height", - "default": "scale-font-px(32px)" - } - ] - }, - "infiniteloading": { - "id": "infiniteloading", - "name": "InfiniteLoading", - "cName": "滚动加载", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "列表滚动到底部自动加载更多数据。", - "sort": 5, - "show": true, - "docs": { - "h5": "src/packages/infiniteloading/doc.md", - "enUS": "src/packages/infiniteloading/doc.en-US.md", - "zhTW": "src/packages/infiniteloading/doc.zh-TW.md", - "taro": "src/packages/infiniteloading/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/infiniteloading/demos/h5/demo1.tsx", - "src/packages/infiniteloading/demos/h5/demo2.tsx", - "src/packages/infiniteloading/demos/h5/demo3.tsx", - "src/packages/infiniteloading/demos/h5/demo4.tsx", - "src/packages/infiniteloading/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/infiniteloading/demos/taro/demo1.tsx", - "src/packages/infiniteloading/demos/taro/demo2.tsx", - "src/packages/infiniteloading/demos/taro/demo3.tsx", - "src/packages/infiniteloading/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/infiniteloading/base.ts", - "h5": "src/types/spec/infiniteloading/h5.ts", - "taro": "src/types/spec/infiniteloading/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "InfiniteLoading", - "subComponent": null, - "rows": [ - { - "prop": "hasMore", - "desc": "是否还有更多数据", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "threshold", - "desc": "距离底部多远加载", - "type": "`number`", - "default": "200" - }, - { - "prop": "capture", - "desc": "是否使用捕获模式 true 捕获 false 冒泡", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "target", - "desc": "获取监听的目标元素", - "type": "`string`", - "default": "-" - }, - { - "prop": "loadMoreText", - "desc": "“没有更多数”据展示文案", - "type": "`string`", - "default": "哎呀,这里是底部了啦" - }, - { - "prop": "pullRefresh", - "desc": "是否开启下拉刷新", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "pullingText", - "desc": "下拉刷新提示文案", - "type": "`ReactNode`", - "default": "松手刷新" - }, - { - "prop": "loadingText", - "desc": "上拉加载提示文案", - "type": "`ReactNode`", - "default": "加载中..." - }, - { - "prop": "onRefresh", - "desc": "下拉刷新事件回调", - "type": "`(param: () => void) => void`", - "default": "-" - }, - { - "prop": "onLoadMore", - "desc": "继续加载的回调函数", - "type": "`(param: () => void) => void`", - "default": "-" - }, - { - "prop": "onScroll", - "desc": "实时监听滚动高度", - "type": "`(param: number) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "loading": { - "id": "loading", - "name": "Loading", - "cName": "加载中", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "mike8625", - "type": "component", - "desc": "加载图标,用于显示正在加载中的状态", - "sort": 15, - "show": true, - "docs": { - "h5": "src/packages/loading/doc.md", - "enUS": "src/packages/loading/doc.en-US.md", - "zhTW": "src/packages/loading/doc.zh-TW.md", - "taro": "src/packages/loading/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/loading/demos/h5/demo1.tsx", - "src/packages/loading/demos/h5/demo2.tsx", - "src/packages/loading/demos/h5/demo3.tsx", - "src/packages/loading/demos/h5/demo4.tsx", - "src/packages/loading/demos/h5/demo5.tsx", - "src/packages/loading/demos/h5/demo6.tsx", - "src/packages/loading/demos/h5/demo7.tsx", - "src/packages/loading/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/loading/demos/taro/demo1.tsx", - "src/packages/loading/demos/taro/demo2.tsx", - "src/packages/loading/demos/taro/demo3.tsx", - "src/packages/loading/demos/taro/demo4.tsx", - "src/packages/loading/demos/taro/demo5.tsx", - "src/packages/loading/demos/taro/demo6.tsx", - "src/packages/loading/demos/taro/demo7.tsx", - "src/packages/loading/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/loading/base.ts", - "h5": "src/types/spec/loading/h5.ts", - "taro": "src/types/spec/loading/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-loading-icon-color", - "scssVar": "$loading-icon-color", - "default": "$color-text-help" - }, - { - "cssVar": "--nutui-loading-icon-size", - "scssVar": "$loading-icon-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-loading-color", - "scssVar": "$loading-color", - "default": "$color-text-help" - }, - { - "cssVar": "--nutui-loading-font-size", - "scssVar": "$loading-font-size", - "default": "$font-size-s" - } - ] - }, - "noticebar": { - "id": "noticebar", - "name": "NoticeBar", - "cName": "公告栏", - "version": "2.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "vickyYe", - "type": "component", - "desc": "用于循环播放展示一组消息通知。", - "sort": 11, - "show": true, - "docs": { - "h5": "src/packages/noticebar/doc.md", - "enUS": "src/packages/noticebar/doc.en-US.md", - "zhTW": "src/packages/noticebar/doc.zh-TW.md", - "taro": "src/packages/noticebar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/noticebar/demos/h5/demo1.tsx", - "src/packages/noticebar/demos/h5/demo2.tsx", - "src/packages/noticebar/demos/h5/demo3.tsx", - "src/packages/noticebar/demos/h5/demo4.tsx", - "src/packages/noticebar/demos/h5/demo5.tsx", - "src/packages/noticebar/demos/h5/demo6.tsx", - "src/packages/noticebar/demos/h5/demo7.tsx", - "src/packages/noticebar/demos/h5/demo8.tsx", - "src/packages/noticebar/demos/h5/demo9.tsx", - "src/packages/noticebar/demos/h5/demo10.tsx", - "src/packages/noticebar/demos/h5/demo11.tsx" - ], - "taro": [ - "src/packages/noticebar/demos/taro/demo1.tsx", - "src/packages/noticebar/demos/taro/demo2.tsx", - "src/packages/noticebar/demos/taro/demo3.tsx", - "src/packages/noticebar/demos/taro/demo4.tsx", - "src/packages/noticebar/demos/taro/demo5.tsx", - "src/packages/noticebar/demos/taro/demo6.tsx", - "src/packages/noticebar/demos/taro/demo7.tsx", - "src/packages/noticebar/demos/taro/demo8.tsx", - "src/packages/noticebar/demos/taro/demo9.tsx", - "src/packages/noticebar/demos/taro/demo10.tsx", - "src/packages/noticebar/demos/taro/demo11.tsx" - ] - }, - "spec": { - "base": "src/types/spec/noticebar/base.ts", - "h5": "src/types/spec/noticebar/h5.ts", - "taro": "src/types/spec/noticebar/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "NoticeBar", - "subComponent": null, - "rows": [ - { - "prop": "direction", - "desc": "滚动的方向,可选 horizontal、vertical", - "type": "`string`", - "default": "horizontal" - }, - { - "prop": "content", - "desc": "提示的信息", - "type": "`string`", - "default": "-" - }, - { - "prop": "closeable", - "desc": "是否启用关闭模式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "leftIcon", - "desc": "左边的 icon,closeable 模式下默认为空", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "rightIcon", - "desc": "右边的 icon,在 closeable 模式下默认为 ``", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "delay", - "desc": "延时多少秒", - "type": "`string` | `number`", - "default": "1" - }, - { - "prop": "scrollable", - "desc": "是否可以滚动", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "speed", - "desc": "滚动速率 (px/s)", - "type": "`number`", - "default": "50" - }, - { - "prop": "wrap", - "desc": "是否开启文本换行", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onClick", - "desc": "外层点击事件回调", - "type": "`(event: any) => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭通知栏时触发", - "type": "`(event: any) => void`", - "default": "-" - }, - { - "prop": "onClickItem", - "desc": "垂直滚动多条数据时,点击当前展示的信息时触发", - "type": "`(event: any, value: any) => void`", - "default": "-" - } - ] - }, - { - "name": "Props(direction=vertical)", - "kind": "props", - "sourceComponent": "NoticeBar", - "subComponent": null, - "rows": [ - { - "prop": "list", - "desc": "纵向滚动数据列表", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "speed", - "desc": "滚动的速度", - "type": "`number`", - "default": "50" - }, - { - "prop": "duration", - "desc": "停留时间(毫秒)", - "type": "`number`", - "default": "1000" - }, - { - "prop": "height", - "desc": "每一个滚动列的高度(px)", - "type": "`number`", - "default": "40" - }, - { - "prop": "closeable", - "desc": "是否启用右侧关闭图标,可以通过 rightIcon 自定义图标", - "type": "`boolean`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-noticebar-height", - "scssVar": "$noticebar-height", - "default": "scale-px(36px)" - }, - { - "cssVar": "--nutui-noticebar-color", - "scssVar": "$noticebar-color", - "default": "#d9500b" - }, - { - "cssVar": "--nutui-noticebar-font-size", - "scssVar": "$noticebar-font-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-noticebar-line-height", - "scssVar": "$noticebar-line-height", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-noticebar-box-padding", - "scssVar": "$noticebar-box-padding", - "default": "0 scale-px(16px)" - }, - { - "cssVar": "--nutui-noticebar-border-radius", - "scssVar": "$noticebar-border-radius", - "default": "0" - }, - { - "cssVar": "--nutui-noticebar-icon-gap", - "scssVar": "$noticebar-icon-gap", - "default": "scale-px(4px)" - } - ] - }, - "notify": { - "id": "notify", - "name": "Notify", - "cName": "消息通知", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "vickyYE", - "type": "component", - "desc": "在页面顶部展示消息提示", - "sort": 11, - "show": true, - "docs": { - "h5": "src/packages/notify/doc.md", - "enUS": "src/packages/notify/doc.en-US.md", - "zhTW": "src/packages/notify/doc.zh-TW.md", - "taro": "src/packages/notify/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/notify/demos/h5/demo1.tsx", - "src/packages/notify/demos/h5/demo2.tsx", - "src/packages/notify/demos/h5/demo3.tsx", - "src/packages/notify/demos/h5/demo4.tsx" - ], - "taro": [ - "src/packages/notify/demos/taro/demo1.tsx", - "src/packages/notify/demos/taro/demo2.tsx", - "src/packages/notify/demos/taro/demo3.tsx", - "src/packages/notify/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/notify/base.ts", - "h5": "src/types/spec/notify/h5.ts", - "taro": "src/types/spec/notify/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Notify", - "subComponent": null, - "rows": [ - { - "prop": "type", - "desc": "提示的信息类型(primary,success ,danger,warning)", - "type": "`string`", - "default": "danger" - }, - { - "prop": "duration", - "desc": "展示时长(ms),值为 0 时,notify 不会消失", - "type": "`string`", - "default": "3000" - }, - { - "prop": "position", - "desc": "自定义位置 (top, bottom)", - "type": "`string`", - "default": "top" - }, - { - "prop": "onClick", - "desc": "点击事件回调", - "type": "`onClick: () => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭事件回调", - "type": "`onClose: () => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-notify-height", - "scssVar": "$notify-height", - "default": "scale-px(40px)" - }, - { - "cssVar": "--nutui-notify-padding", - "scssVar": "$notify-padding", - "default": "0px scale-px(12px)" - }, - { - "cssVar": "--nutui-notify-border-radius", - "scssVar": "$notify-border-radius", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-notify-z-index", - "scssVar": "$notify-z-index", - "default": "1000" - }, - { - "cssVar": "--nutui-notify-text-color", - "scssVar": "$notify-text-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-notify-font-size", - "scssVar": "$notify-font-size", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-notify-background-color", - "scssVar": "$notify-background-color", - "default": "$white" - } - ] - }, - "popover": { - "id": "popover", - "name": "Popover", - "cName": "气泡弹出框", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "lzz", - "type": "component", - "desc": "气泡弹出框", - "sort": 19, - "show": true, - "docs": { - "h5": "src/packages/popover/doc.md", - "enUS": "src/packages/popover/doc.en-US.md", - "zhTW": "src/packages/popover/doc.zh-TW.md", - "taro": "src/packages/popover/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/popover/demos/h5/demo1.tsx", - "src/packages/popover/demos/h5/demo2.tsx", - "src/packages/popover/demos/h5/demo3.tsx", - "src/packages/popover/demos/h5/demo4.tsx", - "src/packages/popover/demos/h5/demo5.tsx", - "src/packages/popover/demos/h5/demo7.tsx", - "src/packages/popover/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/popover/demos/taro/demo1.tsx", - "src/packages/popover/demos/taro/demo2.tsx", - "src/packages/popover/demos/taro/demo3.tsx", - "src/packages/popover/demos/taro/demo4.tsx", - "src/packages/popover/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/popover/base.ts", - "h5": "src/types/spec/popover/h5.ts", - "taro": "src/types/spec/popover/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Popover", - "subComponent": null, - "rows": [ - { - "prop": "list", - "desc": "选项列表", - "type": "`List[]`", - "default": "[]" - }, - { - "prop": "visible", - "desc": "是否展示气泡弹出层", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "location", - "desc": "弹出位置,里面具体的参数值可以参考上面的位置自定义例子", - "type": "`string`", - "default": "bottom" - }, - { - "prop": "offset", - "desc": "出现位置的偏移量", - "type": "`string[] | number[]`", - "default": "[0, 12]" - }, - { - "prop": "showArrow", - "desc": "是否显示小箭头", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "closeOnClickAction", - "desc": "是否在点击选项后关闭", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "closeOnClickOutside", - "desc": "是否在点击外部元素后关闭菜单", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "targetId", - "desc": "自定义目标元素 id", - "type": "`string`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击切换 popover 展示状态", - "type": "`() => void`", - "default": "() => {}" - }, - { - "prop": "onSelect", - "desc": "点击选项时触发", - "type": "`(item: List, index: number) => void`", - "default": "(item, index) => {}" - }, - { - "prop": "onOpen", - "desc": "点击菜单时触发", - "type": "`() => void`", - "default": "() => {}" - }, - { - "prop": "onClose", - "desc": "关闭菜单时触发", - "type": "`() => void`", - "default": "() => {}" - } - ] - }, - { - "name": "List 数据结构", - "kind": "other", - "sourceComponent": "Popover", - "subComponent": null, - "rows": [ - { - "prop": "key", - "desc": "选项 key 值", - "type": "`string`", - "default": "-" - }, - { - "prop": "name", - "desc": "选项文字", - "type": "`string`", - "default": "-" - }, - { - "prop": "icon", - "desc": "参考 Icon 组件", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "是否为禁用状态", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "className", - "desc": "为对应选项添加额外的类名", - "type": "`string`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-popover-border-radius", - "scssVar": "$popover-border-radius", - "default": "$radius-xs" - }, - { - "cssVar": "--nutui-popover-font-size", - "scssVar": "$popover-font-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-popover-text-color", - "scssVar": "$popover-text-color", - "default": "$color-mask" - }, - { - "cssVar": "--nutui-popover-padding", - "scssVar": "$popover-padding", - "default": "scale-px(8px)" - }, - { - "cssVar": "--nutui-popover-item-width", - "scssVar": "$popover-item-width", - "default": "scale-px(160px)" - } - ] - }, - "popup": { - "id": "popup", - "name": "Popup", - "cName": "弹出层", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "szg2008", - "type": "component", - "desc": "弹出层容器,用于展示弹窗、信息提示等内容,支持多个弹出层叠加展示", - "sort": 9, - "show": true, - "rn": true, - "docs": { - "h5": "src/packages/popup/doc.md", - "enUS": "src/packages/popup/doc.en-US.md", - "zhTW": "src/packages/popup/doc.zh-TW.md", - "taro": "src/packages/popup/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/popup/demos/h5/demo1.tsx", - "src/packages/popup/demos/h5/demo2.tsx", - "src/packages/popup/demos/h5/demo3.tsx", - "src/packages/popup/demos/h5/demo4.tsx", - "src/packages/popup/demos/h5/demo5.tsx", - "src/packages/popup/demos/h5/demo6.tsx", - "src/packages/popup/demos/h5/demo7.tsx", - "src/packages/popup/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/popup/demos/taro/demo1.tsx", - "src/packages/popup/demos/taro/demo2.tsx", - "src/packages/popup/demos/taro/demo3.tsx", - "src/packages/popup/demos/taro/demo4.tsx", - "src/packages/popup/demos/taro/demo5.tsx", - "src/packages/popup/demos/taro/demo6.tsx", - "src/packages/popup/demos/taro/demo7.tsx", - "src/packages/popup/demos/taro/demo8.tsx", - "src/packages/popup/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/popup/base.ts", - "h5": "src/types/spec/popup/h5.ts", - "taro": "src/types/spec/popup/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Popup", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "当前组件是否显示", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "zIndex", - "desc": "遮罩层级", - "type": "`string` | `number`", - "default": "2000" - }, - { - "prop": "duration", - "desc": "遮罩动画时长,单位秒", - "type": "`number`", - "default": "0.3" - }, - { - "prop": "overlayClassName", - "desc": "自定义遮罩类名", - "type": "`string`", - "default": "-" - }, - { - "prop": "overlayStyle", - "desc": "自定义遮罩样式", - "type": "`CSSProperties`", - "default": "-" - }, - { - "prop": "lockScroll", - "desc": "背景是否锁定", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "overlay", - "desc": "是否显示遮罩", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "closeOnOverlayClick", - "desc": "是否点击遮罩关闭", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "position", - "desc": "弹出位置", - "type": "`top` | `bottom` | `left` | `right` | `center`", - "default": "center" - }, - { - "prop": "transition", - "desc": "动画名", - "type": "`string`", - "default": "-" - }, - { - "prop": "style", - "desc": "自定义弹框样式", - "type": "`CSSProperties`", - "default": "-" - }, - { - "prop": "className", - "desc": "自定义弹框类名", - "type": "`string`", - "default": "-" - }, - { - "prop": "closeable", - "desc": "是否显示关闭按钮", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "closeIconPosition", - "desc": "关闭按钮位置", - "type": "`top-left` | `top-right` | `bottom-left` | `bottom-right`", - "default": "top-right" - }, - { - "prop": "closeIcon", - "desc": "自定义 Icon", - "type": "`ReactNode`", - "default": "close" - }, - { - "prop": "destroyOnClose", - "desc": "组件不可见时,卸载内容", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "round", - "desc": "是否显示圆角", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "portal", - "desc": "指定节点挂载", - "type": "`HTMLElement` | `(() => HTMLElement)`", - "default": "null" - }, - { - "prop": "onClick", - "desc": "点击弹框时触发", - "type": "`event: MouseEvent`", - "default": "-" - }, - { - "prop": "onClickCloseIcon", - "desc": "点击关闭图标时触发", - "type": "`event: MouseEvent`", - "default": "-" - }, - { - "prop": "onOpen", - "desc": "打开弹框时触发", - "type": "`-`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭弹框时触发", - "type": "`-`", - "default": "-" - }, - { - "prop": "afterShow", - "desc": "继承于`Overlay`, 遮罩打开动画结束时触发", - "type": "`event: HTMLElement`", - "default": "-" - }, - { - "prop": "afterClose", - "desc": "继承于`Overlay`, 遮罩关闭动画结束时触发", - "type": "`event: HTMLElement`", - "default": "-" - }, - { - "prop": "onClickOverlay", - "desc": "点击遮罩触发", - "type": "`event: MouseEvent`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-popup-border-radius", - "scssVar": "$popup-border-radius", - "default": "$radius-xl" - }, - { - "cssVar": "--nutui-popup-icon-size", - "scssVar": "$popup-icon-size", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-popup-title-padding", - "scssVar": "$popup-title-padding", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-popup-title-height", - "scssVar": "$popup-title-height", - "default": "scale-px(50px)" - }, - { - "cssVar": "--nutui-popup-title-border-bottom", - "scssVar": "$popup-title-border-bottom", - "default": "0" - }, - { - "cssVar": "--nutui-popup-animation-duration", - "scssVar": "$popup-animation-duration", - "default": "0.3s" - } - ] - }, - "pulltorefresh": { - "id": "pulltorefresh", - "name": "PullToRefresh", - "cName": "下拉刷新", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "", - "sort": 10, - "show": true, - "docs": { - "h5": "src/packages/pulltorefresh/doc.md", - "enUS": "src/packages/pulltorefresh/doc.en-US.md", - "zhTW": "src/packages/pulltorefresh/doc.zh-TW.md", - "taro": "src/packages/pulltorefresh/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/pulltorefresh/demos/h5/demo1.tsx", - "src/packages/pulltorefresh/demos/h5/demo2.tsx" - ], - "taro": [ - "src/packages/pulltorefresh/demos/taro/demo1.tsx", - "src/packages/pulltorefresh/demos/taro/demo2.tsx", - "src/packages/pulltorefresh/demos/taro/demo3.tsx", - "src/packages/pulltorefresh/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/pulltorefresh/base.ts", - "h5": "src/types/spec/pulltorefresh/h5.ts", - "taro": "src/types/spec/pulltorefresh/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "PullToRefresh", - "subComponent": null, - "rows": [ - { - "prop": "canReleaseText", - "desc": "释放的提示文案", - "type": "`ReactNode`", - "default": "释放立即刷新" - }, - { - "prop": "completeText", - "desc": "完成时的提示文案", - "type": "`ReactNode`", - "default": "刷新成功" - }, - { - "prop": "completeDelay", - "desc": "完成后延迟消失的时间,单位为 ms", - "type": "`number`", - "default": "500" - }, - { - "prop": "disabled", - "desc": "是否禁用下拉刷新", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "headHeight", - "desc": "头部提示内容区的高度,单位为 px", - "type": "`number`", - "default": "40" - }, - { - "prop": "pullingText", - "desc": "下拉的提示文案", - "type": "`ReactNode`", - "default": "下拉刷新" - }, - { - "prop": "refreshingText", - "desc": "刷新时的提示文案", - "type": "`ReactNode`", - "default": "加载中……" - }, - { - "prop": "renderText", - "desc": "根据下拉状态,自定义下拉提示文案", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "threshold", - "desc": "触发刷新需要下拉多少距离,单位为 px", - "type": "`number`", - "default": "60" - }, - { - "prop": "onRefresh", - "desc": "触发刷新时的处理函数", - "type": "`() => Promise`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-pulltorefresh-icon-width", - "scssVar": "$pulltorefresh-icon-width", - "default": "scale-px(36px)" - } - ] - }, - "resultpage": { - "id": "resultpage", - "name": "ResultPage", - "cName": "结果反馈", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "以页面的形式向用户反馈操作结果", - "sort": 15, - "show": true, - "docs": { - "h5": "src/packages/resultpage/doc.md", - "enUS": "src/packages/resultpage/doc.en-US.md", - "zhTW": "src/packages/resultpage/doc.zh-TW.md", - "taro": "src/packages/resultpage/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/resultpage/demos/h5/demo1.tsx", - "src/packages/resultpage/demos/h5/demo2.tsx", - "src/packages/resultpage/demos/h5/demo3.tsx", - "src/packages/resultpage/demos/h5/demo4.tsx", - "src/packages/resultpage/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/resultpage/demos/taro/demo1.tsx", - "src/packages/resultpage/demos/taro/demo2.tsx", - "src/packages/resultpage/demos/taro/demo3.tsx", - "src/packages/resultpage/demos/taro/demo4.tsx", - "src/packages/resultpage/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/resultpage/base.ts", - "h5": "src/types/spec/resultpage/h5.ts", - "taro": "src/types/spec/resultpage/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-resultpage-width", - "scssVar": "$resultpage-width", - "default": "scale-px(240px)" - }, - { - "cssVar": "--nutui-resultpage-icon-size", - "scssVar": "$resultpage-icon-size", - "default": "scale-px(36px)" - } - ] - }, - "skeleton": { - "id": "skeleton", - "name": "Skeleton", - "cName": "骨架屏", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "在页面上待加载区域填充灰色的占位图,本质上是界面加载过程中的过渡效果。", - "sort": 15, - "show": true, - "docs": { - "h5": "src/packages/skeleton/doc.md", - "enUS": "src/packages/skeleton/doc.en-US.md", - "zhTW": "src/packages/skeleton/doc.zh-TW.md", - "taro": "src/packages/skeleton/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/skeleton/demos/h5/demo1.tsx", - "src/packages/skeleton/demos/h5/demo2.tsx", - "src/packages/skeleton/demos/h5/demo3.tsx", - "src/packages/skeleton/demos/h5/demo4.tsx", - "src/packages/skeleton/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/skeleton/demos/taro/demo1.tsx", - "src/packages/skeleton/demos/taro/demo2.tsx", - "src/packages/skeleton/demos/taro/demo3.tsx", - "src/packages/skeleton/demos/taro/demo4.tsx", - "src/packages/skeleton/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/skeleton/base.ts", - "h5": "src/types/spec/skeleton/h5.ts", - "taro": "src/types/spec/skeleton/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Skeleton", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否显示骨架屏(true不显示骨架屏,false显示骨架屏)", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "animated", - "desc": "是否开启骨架屏动画", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "avatar", - "desc": "是否显示头像", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "avatarShape", - "desc": "头像形状:正方形/圆形", - "type": "`string`", - "default": "round" - }, - { - "prop": "avatarSize", - "desc": "头像大小", - "type": "`string`", - "default": "50px" - }, - { - "prop": "rows", - "desc": "设置段落行数", - "type": "`string`", - "default": "1" - }, - { - "prop": "title", - "desc": "是否显示段落标题", - "type": "`boolean`", - "default": "true" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-skeleton-line-width", - "scssVar": "$skeleton-line-width", - "default": "100%" - } - ] - }, - "swipe": { - "id": "swipe", - "name": "Swipe", - "cName": "滑动手势", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Ymm0008", - "type": "component", - "desc": "可以左右滑动来展示操作按钮的组件", - "sort": 9, - "show": true, - "docs": { - "h5": "src/packages/swipe/doc.md", - "enUS": "src/packages/swipe/doc.en-US.md", - "zhTW": "src/packages/swipe/doc.zh-TW.md", - "taro": "src/packages/swipe/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/swipe/demos/h5/demo1.tsx", - "src/packages/swipe/demos/h5/demo2.tsx", - "src/packages/swipe/demos/h5/demo3.tsx", - "src/packages/swipe/demos/h5/demo4.tsx", - "src/packages/swipe/demos/h5/demo5.tsx", - "src/packages/swipe/demos/h5/demo6.tsx", - "src/packages/swipe/demos/h5/demo7.tsx", - "src/packages/swipe/demos/h5/demo8.tsx", - "src/packages/swipe/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/swipe/demos/taro/demo1.tsx", - "src/packages/swipe/demos/taro/demo2.tsx", - "src/packages/swipe/demos/taro/demo3.tsx", - "src/packages/swipe/demos/taro/demo4.tsx", - "src/packages/swipe/demos/taro/demo5.tsx", - "src/packages/swipe/demos/taro/demo6.tsx", - "src/packages/swipe/demos/taro/demo7.tsx", - "src/packages/swipe/demos/taro/demo8.tsx", - "src/packages/swipe/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/swipe/base.ts", - "h5": "src/types/spec/swipe/h5.ts", - "taro": "src/types/spec/swipe/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Swipe", - "subComponent": null, - "rows": [ - { - "prop": "name", - "desc": "标识符,可以在事件参数中获取到", - "type": "`number` | `string`", - "default": "-" - }, - { - "prop": "leftAction", - "desc": "左侧滑动区域的内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "rightAction", - "desc": "右侧滑动区域的内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "beforeClose", - "desc": "关闭前的回调函数,返回滑动区域所在方向 `position`", - "type": "`(position: 'left | 'right') => void`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "是否禁用滑动", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onOpen", - "desc": "打开单元格侧边栏", - "type": "`(name, position): { name: string | number, position: 'left' | 'right' } => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "收起单元格侧边栏", - "type": "`(name, position): { name: string | number, position: 'left' | 'right' } => void`", - "default": "-" - }, - { - "prop": "onActionClick", - "desc": "点击左侧或者右侧时触发", - "type": "`(event: Event, position: 'left' | 'right') => void`", - "default": "-" - }, - { - "prop": "onTouchStart", - "desc": "onTouchStart", - "type": "`(event: Event) => void`", - "default": "-" - }, - { - "prop": "onTouchMove", - "desc": "onTouchMove", - "type": "`(event: Event) => void`", - "default": "-" - }, - { - "prop": "onTouchEnd", - "desc": "onTouchEnd", - "type": "`(event: Event) => void`", - "default": "-" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Swipe", - "subComponent": null, - "rows": [ - { - "prop": "open", - "desc": "打开单元格侧边栏,`side`参数默认为`right`", - "type": "`(side?: 'left' | 'right') => void`", - "default": "" - }, - { - "prop": "close", - "desc": "收起单元格侧边栏", - "type": "`() => void`", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "toast": { - "id": "toast", - "name": "Toast", - "cName": "吐司", - "version": "3.0.0", - "category": { - "name": "操作反馈", - "enName": "feedback" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "VickyYe", - "type": "component", - "desc": "轻提示", - "sort": 1, - "show": true, - "docs": { - "h5": "src/packages/toast/doc.md", - "enUS": "src/packages/toast/doc.en-US.md", - "zhTW": "src/packages/toast/doc.zh-TW.md", - "taro": "src/packages/toast/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/toast/demos/h5/demo1.tsx", - "src/packages/toast/demos/h5/demo2.tsx", - "src/packages/toast/demos/h5/demo3.tsx", - "src/packages/toast/demos/h5/demo4.tsx", - "src/packages/toast/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/toast/demos/taro/demo1.tsx", - "src/packages/toast/demos/taro/demo2.tsx", - "src/packages/toast/demos/taro/demo3.tsx", - "src/packages/toast/demos/taro/demo4.tsx", - "src/packages/toast/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/toast/base.ts", - "h5": "src/types/spec/toast/h5.ts", - "taro": "src/types/spec/toast/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Toast", - "subComponent": null, - "rows": [ - { - "prop": "content", - "desc": "Toast文本内容", - "type": "`React.ReactNode`", - "default": "-" - }, - { - "prop": "duration", - "desc": "展示时长(秒)
值为 0 时,toast 不会自动消失", - "type": "`number`", - "default": "2" - }, - { - "prop": "position", - "desc": "toast展示位置", - "type": "`top` | `center` | `bottom`", - "default": "center" - }, - { - "prop": "title", - "desc": "标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "icon", - "desc": "自定义图标", - "type": "`success` | `fail` | `loading` | `warn` | `React.ReactNode`", - "default": "-" - }, - { - "prop": "size", - "desc": "文案尺寸,三选一", - "type": "`small` | `base` | `large`", - "default": "base" - }, - { - "prop": "contentClassName", - "desc": "自定义内容区类名", - "type": "`string`", - "default": "-" - }, - { - "prop": "contentStyle", - "desc": "自定义内容区样式", - "type": "`React.CSSProperties`", - "default": "-" - }, - { - "prop": "closeOnOverlayClick", - "desc": "是否在点击遮罩层后关闭提示", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "lockScroll", - "desc": "背景是否锁定", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onClose", - "desc": "关闭时触发的事件", - "type": "`() => void`", - "default": "() => void" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Toast", - "subComponent": null, - "rows": [ - { - "prop": "clear", - "desc": "关闭所有显示中的`Toast`", - "type": "`-`", - "default": "" - }, - { - "prop": "config", - "desc": "`Toast`全局配置", - "type": "`{ duration: number, position: 'top' | 'center' | 'bottom', closeOnOverlayClick: boolean, lockScroll: boolean }`", - "default": "" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-toast-inner-text-align", - "scssVar": "$toast-inner-text-align", - "default": "center" - }, - { - "cssVar": "--nutui-toast-title-font-size", - "scssVar": "$toast-title-font-size", - "default": "$font-size-md" - }, - { - "cssVar": "--nutui-toast-text-font-size", - "scssVar": "$toast-text-font-size", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-toast-font-color", - "scssVar": "$toast-font-color", - "default": "$white" - }, - { - "cssVar": "--nutui-toast-inner-padding", - "scssVar": "$toast-inner-padding", - "default": "scale-px(12px) scale-px(16px)" - }, - { - "cssVar": "--nutui-toast-inner-bg-color", - "scssVar": "$toast-inner-bg-color", - "default": "$color-mask" - }, - { - "cssVar": "--nutui-toast-inner-top", - "scssVar": "$toast-inner-top", - "default": "50%" - } - ] - }, - "animate": { - "id": "animate", - "name": "Animate", - "cName": "动画/动效", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "给子元素添加动画效果", - "sort": 27, - "show": true, - "docs": { - "h5": "src/packages/animate/doc.md", - "enUS": "src/packages/animate/doc.en-US.md", - "zhTW": "src/packages/animate/doc.zh-TW.md", - "taro": "src/packages/animate/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/animate/demos/h5/demo1.tsx", - "src/packages/animate/demos/h5/demo2.tsx" - ], - "taro": [ - "src/packages/animate/demos/taro/demo1.tsx", - "src/packages/animate/demos/taro/demo2.tsx" - ] - }, - "spec": { - "base": "src/types/spec/animate/base.ts", - "h5": "src/types/spec/animate/h5.ts", - "taro": "src/types/spec/animate/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Animate", - "subComponent": null, - "rows": [ - { - "prop": "type", - "desc": "动画类型,见下方type值说明", - "type": "`AnimateType`", - "default": "shake" - }, - { - "prop": "action", - "desc": "触发方式,'initial'--初始化执行; 'click'--点击执行", - "type": "`initial` | `click`", - "default": "initial" - }, - { - "prop": "loop", - "desc": "是否循环执行。true-循环执行;false-执行一次", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onClick", - "desc": "点击元素时触发", - "type": "`event: Event`", - "default": "-" - } - ] - }, - { - "name": "AnimateType值说明", - "kind": "other", - "sourceComponent": "Animate", - "subComponent": null, - "rows": [ - { - "prop": "1", - "desc": "shake", - "type": "抖动,建议loop为true", - "default": "" - }, - { - "prop": "2", - "desc": "ripple", - "type": "不循环则是放大后缩小,循环则是心跳", - "default": "" - }, - { - "prop": "3", - "desc": "breath", - "type": "呼吸灯,建议loop为true", - "default": "" - }, - { - "prop": "4", - "desc": "float", - "type": "漂浮,建议loop为true", - "default": "" - }, - { - "prop": "5", - "desc": "slide-right", - "type": "由右向左划入", - "default": "" - }, - { - "prop": "6", - "desc": "slide-left", - "type": "由左向右划入", - "default": "" - }, - { - "prop": "7", - "desc": "slide-top", - "type": "由上至下划入", - "default": "" - }, - { - "prop": "8", - "desc": "slide-bottom", - "type": "由下至上划入", - "default": "" - }, - { - "prop": "9", - "desc": "jump", - "type": "跳跃,建议loop为true", - "default": "" - }, - { - "prop": "10", - "desc": "twinkle", - "type": "水波,建议loop为true", - "default": "" - }, - { - "prop": "11", - "desc": "flicker", - "type": "擦亮按钮,建议loop为true", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "animatingnumbers": { - "id": "animatingnumbers", - "name": "AnimatingNumbers", - "cName": "数字动画", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "带特效的数字", - "sort": 7, - "show": true, - "docs": { - "h5": "src/packages/animatingnumbers/doc.md", - "enUS": "src/packages/animatingnumbers/doc.en-US.md", - "zhTW": "src/packages/animatingnumbers/doc.zh-TW.md", - "taro": "src/packages/animatingnumbers/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/animatingnumbers/demos/h5/demo1.tsx", - "src/packages/animatingnumbers/demos/h5/demo2.tsx" - ], - "taro": [ - "src/packages/animatingnumbers/demos/taro/demo1.tsx", - "src/packages/animatingnumbers/demos/taro/demo2.tsx" - ] - }, - "spec": { - "base": "src/types/spec/animatingnumbers/base.ts", - "h5": "src/types/spec/animatingnumbers/h5.ts", - "taro": "src/types/spec/animatingnumbers/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "AnimatingNumbers", - "subComponent": null, - "rows": [ - { - "prop": "length", - "desc": "设置最大展示长度,数值位数不够,数值前面按位补 0", - "type": "`number`", - "default": "0" - }, - { - "prop": "value", - "desc": "结束值,必填项", - "type": "`string`", - "default": "number" - }, - { - "prop": "delay", - "desc": "等待动画执行时间,单位 ms", - "type": "`number`", - "default": "300" - }, - { - "prop": "duration", - "desc": "动画执行时间,单位 s", - "type": "`number`", - "default": "1" - }, - { - "prop": "thousands", - "desc": "是否有千位分隔符", - "type": "`boolean`", - "default": "false" - } - ] - } - ] - }, - "tokens": [] - }, - "audio": { - "id": "audio", - "name": "Audio", - "cName": "音频播放器", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": false, - "v15": true, - "v16": false, - "author": "libin", - "type": "component", - "desc": "原生audio实现的音频播放器", - "sort": 21, - "show": true, - "docs": { - "h5": "src/packages/audio/doc.md", - "enUS": "src/packages/audio/doc.en-US.md", - "zhTW": "src/packages/audio/doc.zh-TW.md", - "taro": "src/packages/audio/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/audio/demos/h5/demo1.tsx", - "src/packages/audio/demos/h5/demo2.tsx", - "src/packages/audio/demos/h5/demo3.tsx", - "src/packages/audio/demos/h5/demo4.tsx" - ], - "taro": [] - }, - "spec": { - "base": "src/types/spec/audio/base.ts", - "h5": "src/types/spec/audio/h5.ts", - "taro": "src/types/spec/audio/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Audio", - "subComponent": null, - "rows": [ - { - "prop": "src", - "desc": "语音资源链接", - "type": "`string`", - "default": "-" - }, - { - "prop": "muted", - "desc": "是否静音", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "autoPlay", - "desc": "是否自动播放", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "loop", - "desc": "是否循环播放", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "preload", - "desc": "是否预加载语音", - "type": "`none` | `metadata` | `auto`", - "default": "auto" - }, - { - "prop": "type", - "desc": "展示形式,可选值:controls 控制面板 progress 进度条 icon 图标 none 自定义", - "type": "`string`", - "default": "progress" - }, - { - "prop": "onBack", - "desc": "语音快退回调,type = progress 时生效", - "type": "`(event:HTMLAudioElement) => void`", - "default": "-" - }, - { - "prop": "onForward", - "desc": "语音快进回调,type = progress 时生效", - "type": "`(event:HTMLAudioElement) => void`", - "default": "-" - }, - { - "prop": "onPause", - "desc": "暂停回调", - "type": "`(event:HTMLAudioElement) => void`", - "default": "-" - }, - { - "prop": "onEnd", - "desc": "语音播放完成,loop = false 时生效", - "type": "`(event:HTMLAudioElement) => void`", - "default": "-" - }, - { - "prop": "onMute", - "desc": "静音回调", - "type": "`(event:HTMLAudioElement) => void`", - "default": "-" - }, - { - "prop": "onCanPlay", - "desc": "可以播放媒体时触发", - "type": "`(event:HTMLAudioElement) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "avatar": { - "id": "avatar", - "name": "Avatar", - "cName": "头像", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "junjun", - "type": "component", - "desc": "用来代表用户或事物,支持图片、图标或字符展示。", - "sort": 2, - "show": true, - "docs": { - "h5": "src/packages/avatar/doc.md", - "enUS": "src/packages/avatar/doc.en-US.md", - "zhTW": "src/packages/avatar/doc.zh-TW.md", - "taro": "src/packages/avatar/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/avatar/demos/h5/demo1.tsx", - "src/packages/avatar/demos/h5/demo2.tsx", - "src/packages/avatar/demos/h5/demo3.tsx", - "src/packages/avatar/demos/h5/demo4.tsx", - "src/packages/avatar/demos/h5/demo5.tsx", - "src/packages/avatar/demos/h5/demo6.tsx", - "src/packages/avatar/demos/h5/demo7.tsx", - "src/packages/avatar/demos/h5/demo8.tsx", - "src/packages/avatar/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/avatar/demos/taro/demo1.tsx", - "src/packages/avatar/demos/taro/demo2.tsx", - "src/packages/avatar/demos/taro/demo3.tsx", - "src/packages/avatar/demos/taro/demo4.tsx", - "src/packages/avatar/demos/taro/demo5.tsx", - "src/packages/avatar/demos/taro/demo6.tsx", - "src/packages/avatar/demos/taro/demo7.tsx", - "src/packages/avatar/demos/taro/demo8.tsx", - "src/packages/avatar/demos/taro/demo9.tsx", - "src/packages/avatar/demos/taro/demo10.tsx" - ] - }, - "spec": { - "base": "src/types/spec/avatar/base.ts", - "h5": "src/types/spec/avatar/h5.ts", - "taro": "src/types/spec/avatar/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Avatar", - "subComponent": null, - "rows": [ - { - "prop": "size", - "desc": "设置头像的大小", - "type": "`large` | `normal` | `small` | `numbers`", - "default": "-" - }, - { - "prop": "shape", - "desc": "设置头像的形状", - "type": "`round` | `square`", - "default": "round" - }, - { - "prop": "background", - "desc": "设置 Icon、字符类型头像的背景色", - "type": "`string`", - "default": "#eee" - }, - { - "prop": "color", - "desc": "设置 Icon、字符类型头像的颜色", - "type": "`string`", - "default": "#666" - }, - { - "prop": "fit", - "desc": "图片填充模式", - "type": "`contain` | `cover` | `fill` | `none` | `scale-down` | `cover`", - "default": "-" - }, - { - "prop": "src", - "desc": "设置图片类型头像的地址", - "type": "`string`", - "default": "-" - }, - { - "prop": "alt", - "desc": "设置图片类型头像无法显示时的替代文本", - "type": "`string`", - "default": "-" - }, - { - "prop": "icon", - "desc": "设置 Icon 类型头像图标", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "onClick", - "desc": "点击头像触发事件", - "type": "`(e: MouseEvent) => void`", - "default": "-" - }, - { - "prop": "onError", - "desc": "图片加载失败的事件", - "type": "`() => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-avatar-square", - "scssVar": "$avatar-square", - "default": "scale-px(5px)" - }, - { - "cssVar": "--nutui-avatar-large-width", - "scssVar": "$avatar-large-width", - "default": "scale-px(60px)" - }, - { - "cssVar": "--nutui-avatar-large-height", - "scssVar": "$avatar-large-height", - "default": "scale-px(60px)" - }, - { - "cssVar": "--nutui-avatar-small-width", - "scssVar": "$avatar-small-width", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-avatar-small-height", - "scssVar": "$avatar-small-height", - "default": "scale-px(32px)" - }, - { - "cssVar": "--nutui-avatar-normal-width", - "scssVar": "$avatar-normal-width", - "default": "scale-px(40px)" - }, - { - "cssVar": "--nutui-avatar-normal-height", - "scssVar": "$avatar-normal-height", - "default": "scale-px(40px)" - } - ] - }, - "avatargroup": { - "id": "avatargroup", - "name": "AvatarGroup", - "cName": "头像组合子组件", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "头像组合子组件", - "sort": 18, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "AvatarGroup", - "subComponent": null, - "rows": [ - { - "prop": "max", - "desc": "显示的最大头像个数", - "type": "`string` | `number`", - "default": "-" - }, - { - "prop": "maxContent", - "desc": "头像数量超出时,会出现一个头像折叠元素。该元素内容可为...、more、+N。", - "type": "`string`", - "default": "-" - }, - { - "prop": "size", - "desc": "设置头像的大小,可选值为:large、normal、small,支持直接输入数字", - "type": "`large` | `normal` | `small`", - "default": "-" - }, - { - "prop": "shape", - "desc": "设置头像的形状", - "type": "`string` | `round`", - "default": "-" - }, - { - "prop": "maxBackground", - "desc": "设置 Icon、字符类型头像的背景色", - "type": "`string`", - "default": "#eee" - }, - { - "prop": "maxColor", - "desc": "设置 Icon、字符类型头像的颜色", - "type": "`string`", - "default": "#666" - }, - { - "prop": "gap", - "desc": "设置头像之间的间距", - "type": "`string`", - "default": "-8" - }, - { - "prop": "level", - "desc": "头像之间的层级关系,可选值为:left、right", - "type": "`left` | `right`", - "default": "left" - } - ] - } - ] - }, - "tokens": [] - }, - "circleprogress": { - "id": "circleprogress", - "name": "CircleProgress", - "cName": "环形进度条", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "展示操作或任务的当前进度。", - "sort": 7, - "show": true, - "docs": { - "h5": "src/packages/circleprogress/doc.md", - "enUS": "src/packages/circleprogress/doc.en-US.md", - "zhTW": "src/packages/circleprogress/doc.zh-TW.md", - "taro": "src/packages/circleprogress/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/circleprogress/demos/h5/demo1.tsx", - "src/packages/circleprogress/demos/h5/demo2.tsx", - "src/packages/circleprogress/demos/h5/demo3.tsx", - "src/packages/circleprogress/demos/h5/demo4.tsx", - "src/packages/circleprogress/demos/h5/demo5.tsx", - "src/packages/circleprogress/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/circleprogress/demos/taro/demo1.tsx", - "src/packages/circleprogress/demos/taro/demo2.tsx", - "src/packages/circleprogress/demos/taro/demo3.tsx", - "src/packages/circleprogress/demos/taro/demo4.tsx", - "src/packages/circleprogress/demos/taro/demo5.tsx", - "src/packages/circleprogress/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/circleprogress/base.ts", - "h5": "src/types/spec/circleprogress/h5.ts", - "taro": "src/types/spec/circleprogress/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "CircleProgress", - "subComponent": null, - "rows": [ - { - "prop": "percent", - "desc": "百分比", - "type": "`number` | `string`", - "default": "必传项,无默认值" - }, - { - "prop": "strokeWidth", - "desc": "圆弧的宽度", - "type": "`number` | `string`", - "default": "5" - }, - { - "prop": "radius", - "desc": "半径", - "type": "`number` | `string`", - "default": "50" - }, - { - "prop": "color", - "desc": "圆环进度条颜色,传入对象格式可以定义渐变色", - "type": "`object | string`", - "default": "-" - }, - { - "prop": "background", - "desc": "圆环轨道颜色", - "type": "`string`", - "default": "#d9d9d9" - }, - { - "prop": "strokeLinecap", - "desc": "圆环进度条端点形状", - "type": "`butt` | `round` | `square` | `inherit`", - "default": "round" - }, - { - "prop": "clockwise", - "desc": "是否顺时针展示", - "type": "`boolean`", - "default": "true" - } - ] - } - ] - }, - "tokens": [] - }, - "collapse": { - "id": "collapse", - "name": "Collapse", - "cName": "折叠面板", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "折叠面板,可进行内容折叠展开操作,可以多面板配合使用。", - "sort": 2, - "show": true, - "docs": { - "h5": "src/packages/collapse/doc.md", - "enUS": "src/packages/collapse/doc.en-US.md", - "zhTW": "src/packages/collapse/doc.zh-TW.md", - "taro": "src/packages/collapse/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/collapse/demos/h5/demo1.tsx", - "src/packages/collapse/demos/h5/demo2.tsx", - "src/packages/collapse/demos/h5/demo3.tsx", - "src/packages/collapse/demos/h5/demo4.tsx", - "src/packages/collapse/demos/h5/demo5.tsx", - "src/packages/collapse/demos/h5/demo6.tsx", - "src/packages/collapse/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/collapse/demos/taro/demo1.tsx", - "src/packages/collapse/demos/taro/demo2.tsx", - "src/packages/collapse/demos/taro/demo3.tsx", - "src/packages/collapse/demos/taro/demo4.tsx", - "src/packages/collapse/demos/taro/demo5.tsx", - "src/packages/collapse/demos/taro/demo6.tsx", - "src/packages/collapse/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/collapse/base.ts", - "h5": "src/types/spec/collapse/h5.ts", - "taro": "src/types/spec/collapse/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Collapse", - "subComponent": null, - "rows": [ - { - "prop": "defaultActiveName", - "desc": "默认展开面板的 name,非受控", - "type": "`Array` | `string`", - "default": "-" - }, - { - "prop": "activeName", - "desc": "当前展开面板的 name,受控", - "type": "`Array` | `string`", - "default": "-" - }, - { - "prop": "accordion", - "desc": "是否开启手风琴模式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "rotate", - "desc": "点击折叠和展开的旋转角度,在自定义图标模式下生效", - "type": "`string` | `number`", - "default": "180" - }, - { - "prop": "expandIcon", - "desc": "自定义展开图标", - "type": "`ReactNode`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-collapse-item-padding", - "scssVar": "$collapse-item-padding", - "default": "scale-px(13px) scale-px(26px)" - }, - { - "cssVar": "--nutui-collapse-item-color", - "scssVar": "$collapse-item-color", - "default": "$color-title" - } - ] - }, - "collapseitem": { - "id": "collapseitem", - "name": "CollapseItem", - "cName": "折叠面板子组件", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "oasis", - "type": "component", - "desc": "折叠面板的子组件", - "sort": 13, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Collapse.Item", - "subComponent": null, - "rows": [ - { - "prop": "name", - "desc": "唯一标识符,必填", - "type": "`string`", - "default": "-" - }, - { - "prop": "title", - "desc": "标题栏左侧内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "disabled", - "desc": "标题栏是否禁用", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "extra", - "desc": "标题栏副标题", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "rotate", - "desc": "点击折叠和展开的旋转角度,在自定义图标模式下生效", - "type": "`string` | `number`", - "default": "180" - }, - { - "prop": "expandIcon", - "desc": "自定义展开图标", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "切换面板时触发", - "type": "`(activeName, name, status) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "countdown": { - "id": "countdown", - "name": "CountDown", - "cName": "倒计时", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "用于实时展示倒计时数值,支持毫秒精度。", - "sort": 17, - "show": true, - "docs": { - "h5": "src/packages/countdown/doc.md", - "enUS": "src/packages/countdown/doc.en-US.md", - "zhTW": "src/packages/countdown/doc.zh-TW.md", - "taro": "src/packages/countdown/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/countdown/demos/h5/demo1.tsx", - "src/packages/countdown/demos/h5/demo2.tsx", - "src/packages/countdown/demos/h5/demo3.tsx", - "src/packages/countdown/demos/h5/demo4.tsx", - "src/packages/countdown/demos/h5/demo5.tsx", - "src/packages/countdown/demos/h5/demo6.tsx", - "src/packages/countdown/demos/h5/demo7.tsx", - "src/packages/countdown/demos/h5/demo8.tsx", - "src/packages/countdown/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/countdown/demos/taro/demo1.tsx", - "src/packages/countdown/demos/taro/demo2.tsx", - "src/packages/countdown/demos/taro/demo3.tsx", - "src/packages/countdown/demos/taro/demo4.tsx", - "src/packages/countdown/demos/taro/demo5.tsx", - "src/packages/countdown/demos/taro/demo6.tsx", - "src/packages/countdown/demos/taro/demo7.tsx", - "src/packages/countdown/demos/taro/demo8.tsx", - "src/packages/countdown/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/countdown/base.ts", - "h5": "src/types/spec/countdown/h5.ts", - "taro": "src/types/spec/countdown/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "CountDown", - "subComponent": null, - "rows": [ - { - "prop": "startTime", - "desc": "开始时间", - "type": "`number`", - "default": "Date.now()" - }, - { - "prop": "endTime", - "desc": "结束时间", - "type": "`number`", - "default": "Date.now()" - }, - { - "prop": "remainingTime", - "desc": "剩余时间,单位是毫秒", - "type": "`number`", - "default": "0" - }, - { - "prop": "paused", - "desc": "是否暂停", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "format", - "desc": "时间格式", - "type": "`string`", - "default": "HH:mm:ss" - }, - { - "prop": "millisecond", - "desc": "是否开启毫秒级渲染", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "autoStart", - "desc": "是否自动开始倒计时", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "time", - "desc": "倒计时显示时间,单位是毫秒。autoStart 为 false 时生效", - "type": "`number`", - "default": "0" - }, - { - "prop": "destroy", - "desc": "销毁实例", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onEnd", - "desc": "倒计时结束时回调函数", - "type": "`无`", - "default": "-" - }, - { - "prop": "onPaused", - "desc": "暂停倒计时回调函数", - "type": "`onPaused: (restTime: number) => void`", - "default": "-" - }, - { - "prop": "onRestart", - "desc": "重新开始倒计时回调函数", - "type": "`onRestart: (restTime: number) => void`", - "default": "-" - }, - { - "prop": "onUpdate", - "desc": "自定义展示内容时,实时更新倒计时数据回调函数", - "type": "`onUpdate: (restTime: any) => void`", - "default": "-" - } - ] - }, - { - "name": "format 格式", - "kind": "other", - "sourceComponent": "CountDown", - "subComponent": null, - "rows": [ - { - "prop": "DD", - "desc": "天数", - "type": "", - "default": "" - }, - { - "prop": "HH", - "desc": "小时", - "type": "", - "default": "" - }, - { - "prop": "mm", - "desc": "分钟", - "type": "", - "default": "" - }, - { - "prop": "ss", - "desc": "秒数", - "type": "", - "default": "" - }, - { - "prop": "S", - "desc": "毫秒(1位)", - "type": "", - "default": "" - }, - { - "prop": "SS", - "desc": "毫秒(2位)", - "type": "", - "default": "" - }, - { - "prop": "SSS", - "desc": "毫秒(3位)", - "type": "", - "default": "" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "CountDown", - "subComponent": null, - "rows": [ - { - "prop": "start", - "desc": "开始倒计时", - "type": "`() => void`", - "default": "" - }, - { - "prop": "pause", - "desc": "暂停倒计时", - "type": "`() => void`", - "default": "" - }, - { - "prop": "reset", - "desc": "重设倒计时,若 auto-start 为 true,重设后会自动开始倒计时", - "type": "`() => void`", - "default": "" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-countdown-display", - "scssVar": "$countdown-display", - "default": "flex" - }, - { - "cssVar": "--nutui-countdown-color", - "scssVar": "$countdown-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-countdown-font-size", - "scssVar": "$countdown-font-size", - "default": "$font-size-xs" - }, - { - "cssVar": "--nutui-countdown-height", - "scssVar": "$countdown-height", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-countdown-width", - "scssVar": "$countdown-width", - "default": "scale-px(16px)" - }, - { - "cssVar": "--nutui-countdown-number-padding", - "scssVar": "$countdown-number-padding", - "default": "0 0" - }, - { - "cssVar": "--nutui-countdown-number-margin", - "scssVar": "$countdown-number-margin", - "default": "0 scale-px(1px)" - } - ] - }, - "ellipsis": { - "id": "ellipsis", - "name": "Ellipsis", - "cName": "文本省略", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "vickyYE", - "type": "component", - "desc": "展示空间不足时,隐去部分内容并用“…”替代。", - "sort": 27, - "show": true, - "docs": { - "h5": "src/packages/ellipsis/doc.md", - "enUS": "src/packages/ellipsis/doc.en-US.md", - "zhTW": "src/packages/ellipsis/doc.zh-TW.md", - "taro": "src/packages/ellipsis/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/ellipsis/demos/h5/demo1.tsx", - "src/packages/ellipsis/demos/h5/demo2.tsx", - "src/packages/ellipsis/demos/h5/demo3.tsx", - "src/packages/ellipsis/demos/h5/demo4.tsx", - "src/packages/ellipsis/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/ellipsis/demos/taro/demo1.tsx", - "src/packages/ellipsis/demos/taro/demo2.tsx", - "src/packages/ellipsis/demos/taro/demo3.tsx", - "src/packages/ellipsis/demos/taro/demo4.tsx", - "src/packages/ellipsis/demos/taro/demo5.tsx", - "src/packages/ellipsis/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/ellipsis/base.ts", - "h5": "src/types/spec/ellipsis/h5.ts", - "taro": "src/types/spec/ellipsis/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Ellipsis", - "subComponent": null, - "rows": [ - { - "prop": "content", - "desc": "文本内容", - "type": "`string`", - "default": "-" - }, - { - "prop": "direction", - "desc": "省略位置", - "type": "`start` | `end` | `middle`", - "default": "end" - }, - { - "prop": "rows", - "desc": "展示几行", - "type": "`number`", - "default": "1" - }, - { - "prop": "expandText", - "desc": "展开操作的文案", - "type": "`string`", - "default": "-" - }, - { - "prop": "collapseText", - "desc": "收起操作的文案", - "type": "`string`", - "default": "-" - }, - { - "prop": "symbol", - "desc": "省略的符号", - "type": "`string`", - "default": "..." - }, - { - "prop": "lineHeight", - "desc": "容器的行高", - "type": "`string` | `number`", - "default": "20" - }, - { - "prop": "onClick", - "desc": "文本点击时触发", - "type": "`() => void`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "点击展开收起时触发", - "type": "`(type: string) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "imagepreview": { - "id": "imagepreview", - "name": "ImagePreview", - "cName": "图片预览", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "yangjinjun3", - "type": "component", - "desc": "图片预览", - "sort": 23, - "show": true, - "docs": { - "h5": "src/packages/imagepreview/doc.md", - "enUS": "src/packages/imagepreview/doc.en-US.md", - "zhTW": "src/packages/imagepreview/doc.zh-TW.md", - "taro": "src/packages/imagepreview/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/imagepreview/demos/h5/demo1.tsx", - "src/packages/imagepreview/demos/h5/demo2.tsx", - "src/packages/imagepreview/demos/h5/demo3.tsx", - "src/packages/imagepreview/demos/h5/demo4.tsx", - "src/packages/imagepreview/demos/h5/demo5.tsx", - "src/packages/imagepreview/demos/h5/demo6.tsx", - "src/packages/imagepreview/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/imagepreview/demos/taro/demo1.tsx", - "src/packages/imagepreview/demos/taro/demo2.tsx", - "src/packages/imagepreview/demos/taro/demo3.tsx", - "src/packages/imagepreview/demos/taro/demo4.tsx", - "src/packages/imagepreview/demos/taro/demo5.tsx", - "src/packages/imagepreview/demos/taro/demo6.tsx", - "src/packages/imagepreview/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/imagepreview/base.ts", - "h5": "src/types/spec/imagepreview/h5.ts", - "taro": "src/types/spec/imagepreview/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "ImagePreview", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否展示预览图片", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "videos", - "desc": "预览的视频数组(视频自动放到图片之前)", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "images", - "desc": "预览图片数组", - "type": "`{ src: string }[]`", - "default": "[]" - }, - { - "prop": "autoPlay", - "desc": "自动轮播时长,0表示不会自动轮播", - "type": "`number` | `string`", - "default": "3000" - }, - { - "prop": "defaultValue", - "desc": "初始页码", - "type": "`number`", - "default": "1" - }, - { - "prop": "value", - "desc": "页码,受控", - "type": "`number`", - "default": "1" - }, - { - "prop": "indicator", - "desc": "分页指示器是否展示", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "indicatorColor", - "desc": "分页指示器选中的颜色", - "type": "`string`", - "default": "#fff" - }, - { - "prop": "closeOnContentClick", - "desc": "点击图片可以退出预览", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onClose", - "desc": "点击遮罩关闭图片预览时触发", - "type": "`() => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "indicator": { - "id": "indicator", - "name": "Indicator", - "cName": "指示器", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": true, - "author": "liukun", - "type": "component", - "desc": "显示一个任务或流程的进度,常用于开通流程。", - "sort": 16, - "show": true, - "docs": { - "h5": "src/packages/indicator/doc.md", - "enUS": "src/packages/indicator/doc.en-US.md", - "zhTW": "src/packages/indicator/doc.zh-TW.md", - "taro": "src/packages/indicator/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/indicator/demos/h5/demo1.tsx", - "src/packages/indicator/demos/h5/demo2.tsx", - "src/packages/indicator/demos/h5/demo3.tsx", - "src/packages/indicator/demos/h5/demo4.tsx", - "src/packages/indicator/demos/h5/demo5.tsx", - "src/packages/indicator/demos/h5/demo6.tsx", - "src/packages/indicator/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/indicator/demos/taro/demo1.tsx", - "src/packages/indicator/demos/taro/demo2.tsx", - "src/packages/indicator/demos/taro/demo3.tsx", - "src/packages/indicator/demos/taro/demo4.tsx", - "src/packages/indicator/demos/taro/demo5.tsx", - "src/packages/indicator/demos/taro/demo6.tsx", - "src/packages/indicator/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/indicator/base.ts", - "h5": "src/types/spec/indicator/h5.ts", - "taro": "src/types/spec/indicator/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Indicator", - "subComponent": null, - "rows": [ - { - "prop": "current", - "desc": "当前步骤", - "type": "`number`", - "default": "0" - }, - { - "prop": "total", - "desc": "步骤长度", - "type": "`number`", - "default": "3" - }, - { - "prop": "direction", - "desc": "展示方向,默认为水平方向", - "type": "`horizontal` | `vertical`", - "default": "horizontal" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-indicator-color", - "scssVar": "$indicator-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-indicator-dot-color", - "scssVar": "$indicator-dot-color", - "default": "$color-border" - }, - { - "cssVar": "--nutui-indicator-dot-size", - "scssVar": "$indicator-dot-size", - "default": "scale-px(4px)" - }, - { - "cssVar": "--nutui-indicator-dot-margin", - "scssVar": "$indicator-dot-margin", - "default": "$spacing-xxs" - } - ] - }, - "lottie": { - "id": "lottie", - "name": "Lottie", - "cName": "动画/动效", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "给子元素添加动画效果", - "sort": 27, - "show": true, - "docs": { - "h5": "src/packages/lottie/doc.md", - "enUS": "src/packages/lottie/doc.en-US.md", - "zhTW": "src/packages/lottie/doc.zh-TW.md", - "taro": "src/packages/lottie/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/lottie/demos/h5/demo1.tsx", - "src/packages/lottie/demos/h5/demo2.tsx", - "src/packages/lottie/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/lottie/demos/taro/demo1.tsx", - "src/packages/lottie/demos/taro/demo2.tsx", - "src/packages/lottie/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/lottie/base.ts", - "h5": "src/types/spec/lottie/h5.ts", - "taro": "src/types/spec/lottie/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "pagination": { - "id": "pagination", - "name": "Pagination", - "cName": "分页", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "lkjh3214", - "type": "component", - "desc": "当数据量较多时,采用分页的形式分隔长列表。", - "sort": 6, - "show": true, - "docs": { - "h5": "src/packages/pagination/doc.md", - "enUS": "src/packages/pagination/doc.en-US.md", - "zhTW": "src/packages/pagination/doc.zh-TW.md", - "taro": "src/packages/pagination/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/pagination/demos/h5/demo1.tsx", - "src/packages/pagination/demos/h5/demo2.tsx", - "src/packages/pagination/demos/h5/demo3.tsx", - "src/packages/pagination/demos/h5/demo4.tsx", - "src/packages/pagination/demos/h5/demo5.tsx", - "src/packages/pagination/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/pagination/demos/taro/demo1.tsx", - "src/packages/pagination/demos/taro/demo2.tsx", - "src/packages/pagination/demos/taro/demo3.tsx", - "src/packages/pagination/demos/taro/demo4.tsx", - "src/packages/pagination/demos/taro/demo5.tsx", - "src/packages/pagination/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/pagination/base.ts", - "h5": "src/types/spec/pagination/h5.ts", - "taro": "src/types/spec/pagination/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Pagination", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "当前页码,受控值,与 onChange 搭配使用", - "type": "`number`", - "default": "-" - }, - { - "prop": "defaultValue", - "desc": "默认页码,非受控", - "type": "`number`", - "default": "1" - }, - { - "prop": "mode", - "desc": "显示模式", - "type": "`multi` | `simple`", - "default": "multi" - }, - { - "prop": "prev", - "desc": "自定义上一页按钮内容", - "type": "`ReactNode`", - "default": "上一页" - }, - { - "prop": "next", - "desc": "自定义下一页按钮内容", - "type": "`ReactNode`", - "default": "下一页" - }, - { - "prop": "total", - "desc": "总记录数", - "type": "`number`", - "default": "50" - }, - { - "prop": "pageSize", - "desc": "每页记录数", - "type": "`number`", - "default": "10" - }, - { - "prop": "itemSize", - "desc": "显示的页码个数", - "type": "`number`", - "default": "5" - }, - { - "prop": "ellipse", - "desc": "是否显示省略号", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "itemRender", - "desc": "用于自定义页码的结构", - "type": "`(page: {number, text}) => ReactNode`", - "default": "-" - }, - { - "prop": "onChange", - "desc": "页码改变时触发", - "type": "`(value) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-pagination-color", - "scssVar": "$pagination-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-pagination-lite-color", - "scssVar": "$pagination-lite-color", - "default": "$white" - }, - { - "cssVar": "--nutui-pagination-lite-width", - "scssVar": "$pagination-lite-width", - "default": "scale-px(40px)" - }, - { - "cssVar": "--nutui-pagination-lite-height", - "scssVar": "$pagination-lite-height", - "default": "scale-px(20px)" - } - ] - }, - "price": { - "id": "price", - "name": "Price", - "cName": "价格", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "用来对商品价格数值的小数点前后部分应用不同样式,还支持人民币符号、千位分隔符、设置小数点位数等功能。", - "sort": 4, - "show": true, - "docs": { - "h5": "src/packages/price/doc.md", - "enUS": "src/packages/price/doc.en-US.md", - "zhTW": "src/packages/price/doc.zh-TW.md", - "taro": "src/packages/price/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/price/demos/h5/demo1.tsx", - "src/packages/price/demos/h5/demo2.tsx", - "src/packages/price/demos/h5/demo3.tsx", - "src/packages/price/demos/h5/demo4.tsx", - "src/packages/price/demos/h5/demo5.tsx", - "src/packages/price/demos/h5/demo6.tsx", - "src/packages/price/demos/h5/demo7.tsx", - "src/packages/price/demos/h5/demo8.tsx", - "src/packages/price/demos/h5/demo9.tsx", - "src/packages/price/demos/h5/demo10.tsx", - "src/packages/price/demos/h5/demo11.tsx" - ], - "taro": [ - "src/packages/price/demos/taro/demo1.tsx", - "src/packages/price/demos/taro/demo2.tsx", - "src/packages/price/demos/taro/demo3.tsx", - "src/packages/price/demos/taro/demo4.tsx", - "src/packages/price/demos/taro/demo5.tsx", - "src/packages/price/demos/taro/demo6.tsx", - "src/packages/price/demos/taro/demo7.tsx", - "src/packages/price/demos/taro/demo8.tsx", - "src/packages/price/demos/taro/demo9.tsx", - "src/packages/price/demos/taro/demo10.tsx", - "src/packages/price/demos/taro/demo11.tsx" - ] - }, - "spec": { - "base": "src/types/spec/price/base.ts", - "h5": "src/types/spec/price/h5.ts", - "taro": "src/types/spec/price/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Price", - "subComponent": null, - "rows": [ - { - "prop": "price", - "desc": "价格数量", - "type": "`number`", - "default": "0" - }, - { - "prop": "symbol", - "desc": "符号类型", - "type": "`string`", - "default": "¥" - }, - { - "prop": "digits", - "desc": "小数位位数", - "type": "`number`", - "default": "2" - }, - { - "prop": "thousands", - "desc": "是否按照千分号形式显示", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "position", - "desc": "符号显示在价格前或者后,`before`、`after`", - "type": "`string`", - "default": "before" - }, - { - "prop": "size", - "desc": "价格尺寸,`large`、`normal`、`small`", - "type": "`string`", - "default": "large" - }, - { - "prop": "line", - "desc": "是否划线价", - "type": "`boolean`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-price-color", - "scssVar": "$price-primary-color", - "default": "$color-primary" - }, - { - "cssVar": "--nutui-price-color", - "scssVar": "$price-color", - "default": "var(--nutui-color-text-help)" - }, - { - "cssVar": "--nutui-price-symbol-xlarge-size", - "scssVar": "$price-symbol-xlarge-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-price-symbol-large-size", - "scssVar": "$price-symbol-large-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-price-integer-large-size", - "scssVar": "$price-integer-large-size", - "default": "$font-size-xl" - }, - { - "cssVar": "--nutui-price-decimal-large-size", - "scssVar": "$price-decimal-large-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-price-symbol-normal-size", - "scssVar": "$price-symbol-normal-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-price-symbol-small-size", - "scssVar": "$price-symbol-small-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-price-integer-small-size", - "scssVar": "$price-integer-small-size", - "default": "$font-size-s" - }, - { - "cssVar": "--nutui-price-decimal-small-size", - "scssVar": "$price-decimal-small-size", - "default": "$font-size-s" - } - ] - }, - "progress": { - "id": "progress", - "name": "Progress", - "cName": "进度条", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "ailululu", - "type": "component", - "desc": "用来展示进度", - "sort": 20, - "show": true, - "docs": { - "h5": "src/packages/progress/doc.md", - "enUS": "src/packages/progress/doc.en-US.md", - "zhTW": "src/packages/progress/doc.zh-TW.md", - "taro": "src/packages/progress/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/progress/demos/h5/demo1.tsx", - "src/packages/progress/demos/h5/demo2.tsx", - "src/packages/progress/demos/h5/demo3.tsx", - "src/packages/progress/demos/h5/demo4.tsx", - "src/packages/progress/demos/h5/demo5.tsx", - "src/packages/progress/demos/h5/demo6.tsx", - "src/packages/progress/demos/h5/demo7.tsx", - "src/packages/progress/demos/h5/demo8.tsx", - "src/packages/progress/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/progress/demos/taro/demo1.tsx", - "src/packages/progress/demos/taro/demo2.tsx", - "src/packages/progress/demos/taro/demo3.tsx", - "src/packages/progress/demos/taro/demo4.tsx", - "src/packages/progress/demos/taro/demo5.tsx", - "src/packages/progress/demos/taro/demo6.tsx", - "src/packages/progress/demos/taro/demo7.tsx", - "src/packages/progress/demos/taro/demo8.tsx", - "src/packages/progress/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/progress/base.ts", - "h5": "src/types/spec/progress/h5.ts", - "taro": "src/types/spec/progress/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Progress", - "subComponent": null, - "rows": [ - { - "prop": "percent", - "desc": "百分比", - "type": "`number`", - "default": "0" - }, - { - "prop": "color", - "desc": "进度条线条颜色", - "type": "`string`", - "default": "linear-gradient(135deg, #fa2c19 0%, #fa6419 100%)" - }, - { - "prop": "background", - "desc": "进度条背景颜色", - "type": "`string`", - "default": "#f3f3f3" - }, - { - "prop": "strokeWidth", - "desc": "进度条宽度", - "type": "`string`", - "default": "-" - }, - { - "prop": "showText", - "desc": "是否显示文字内容", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "animated", - "desc": "是否展示动画效果", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "lazy", - "desc": "每次进入可视区展示进度条动画", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "delay", - "desc": "延迟数据加载时长,单位 ms", - "type": "`number`", - "default": "0" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-progress-height", - "scssVar": "$progress-height", - "default": "scale-px(10px)" - }, - { - "cssVar": "--nutui-progress-border-radius", - "scssVar": "$progress-border-radius", - "default": "scale-px(12px)" - }, - { - "cssVar": "--nutui-progress-text-padding", - "scssVar": "$progress-text-padding", - "default": "0 scale-px(5px)" - }, - { - "cssVar": "--nutui-progress-text-font-size", - "scssVar": "$progress-text-font-size", - "default": "scale-font-px(13px)" - } - ] - }, - "segmented": { - "id": "segmented", - "name": "Segmented", - "cName": "分段选择器", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "lkjh3214", - "type": "component", - "desc": "用于带页面类型区分的内容型卡片切换,如主图视频、图文切换。", - "sort": 6, - "show": true, - "docs": { - "h5": "src/packages/segmented/doc.md", - "enUS": "src/packages/segmented/doc.en-US.md", - "zhTW": "src/packages/segmented/doc.zh-TW.md", - "taro": "src/packages/segmented/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/segmented/demos/h5/demo1.tsx", - "src/packages/segmented/demos/h5/demo2.tsx", - "src/packages/segmented/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/segmented/demos/taro/demo1.tsx", - "src/packages/segmented/demos/taro/demo2.tsx", - "src/packages/segmented/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/segmented/base.ts", - "h5": "src/types/spec/segmented/h5.ts", - "taro": "src/types/spec/segmented/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-segmented-height", - "scssVar": "$segmented-height", - "default": "scale-px(24px)" - }, - { - "cssVar": "--nutui-segmented-padding", - "scssVar": "$segmented-padding", - "default": "$spacing-xxxs" - }, - { - "cssVar": "--nutui-segmented-radius", - "scssVar": "$segmented-border-radius", - "default": "$radius-xs" - }, - { - "cssVar": "--nutui-segmented-height", - "scssVar": "$segmented-item-height", - "default": "scale-px(20px)" - }, - { - "cssVar": "--nutui-segmented-item-radius", - "scssVar": "$segmented-item-radius", - "default": "$radius-xs" - } - ] - }, - "step": { - "id": "step", - "name": "Step", - "cName": "步骤条子组件", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": false, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "步骤条子组件", - "sort": 17, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Step", - "subComponent": null, - "rows": [ - { - "prop": "title", - "desc": "流程步骤的标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "description", - "desc": "流程步骤的描述性文字", - "type": "`string`", - "default": "-" - }, - { - "prop": "icon", - "desc": "图标(来自Icon组件的name属性)", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "value", - "desc": "流程步骤的索引", - "type": "`number`", - "default": "0" - }, - { - "prop": "description", - "desc": "流程步骤的描述性文字的html结构", - "type": "`React.ReactNode`", - "default": "-" - }, - { - "prop": "onStepClick", - "desc": "点击步骤的标题或图标时触发", - "type": "`(index: number) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "steps": { - "id": "steps", - "name": "Steps", - "cName": "步骤条", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "拆分展示某项流程的步骤,引导用户按流程完成任务或向用户展示当前状态。", - "sort": 7, - "show": true, - "docs": { - "h5": "src/packages/steps/doc.md", - "enUS": "src/packages/steps/doc.en-US.md", - "zhTW": "src/packages/steps/doc.zh-TW.md", - "taro": "src/packages/steps/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/steps/demos/h5/demo1.tsx", - "src/packages/steps/demos/h5/demo2.tsx", - "src/packages/steps/demos/h5/demo3.tsx", - "src/packages/steps/demos/h5/demo4.tsx", - "src/packages/steps/demos/h5/demo5.tsx", - "src/packages/steps/demos/h5/demo6.tsx", - "src/packages/steps/demos/h5/demo7.tsx", - "src/packages/steps/demos/h5/demo8.tsx", - "src/packages/steps/demos/h5/demo9.tsx" - ], - "taro": [ - "src/packages/steps/demos/taro/demo1.tsx", - "src/packages/steps/demos/taro/demo2.tsx", - "src/packages/steps/demos/taro/demo3.tsx", - "src/packages/steps/demos/taro/demo4.tsx", - "src/packages/steps/demos/taro/demo5.tsx", - "src/packages/steps/demos/taro/demo6.tsx", - "src/packages/steps/demos/taro/demo7.tsx", - "src/packages/steps/demos/taro/demo8.tsx", - "src/packages/steps/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/steps/base.ts", - "h5": "src/types/spec/steps/h5.ts", - "taro": "src/types/spec/steps/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Steps", - "subComponent": null, - "rows": [ - { - "prop": "direction", - "desc": "显示方向", - "type": "`horizontal` | `vertical`", - "default": "horizontal" - }, - { - "prop": "value", - "desc": "当前所在的步骤", - "type": "`number`", - "default": "0" - }, - { - "prop": "dot", - "desc": "点状步骤条", - "type": "`boolean`", - "default": "false" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-steps-background-color", - "scssVar": "$steps-background-color", - "default": "$white" - }, - { - "cssVar": "--nutui-steps-base-head-height", - "scssVar": "$steps-base-head-height", - "default": "scale-px(14px)" - }, - { - "cssVar": "--nutui-steps-base-head-border", - "scssVar": "$steps-base-head-border", - "default": "none" - }, - { - "cssVar": "--nutui-steps-base-head-dot-size", - "scssVar": "$steps-base-head-dot-size", - "default": "$icon-size-6" - }, - { - "cssVar": "--nutui-steps-base-line-height", - "scssVar": "$steps-base-line-height", - "default": "scale-px(1px)" - }, - { - "cssVar": "--nutui-steps-process-color", - "scssVar": "$steps-process-color", - "default": "$white" - } - ] - }, - "swiper": { - "id": "swiper", - "name": "Swiper", - "cName": "轮播", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "liukun", - "type": "component", - "desc": "轮播组件", - "sort": 14, - "show": true, - "jdtaro": 2, - "docs": { - "h5": "src/packages/swiper/doc.md", - "enUS": "src/packages/swiper/doc.en-US.md", - "zhTW": "src/packages/swiper/doc.zh-TW.md", - "taro": "src/packages/swiper/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/swiper/demos/h5/demo1.tsx", - "src/packages/swiper/demos/h5/demo2.tsx", - "src/packages/swiper/demos/h5/demo3.tsx", - "src/packages/swiper/demos/h5/demo4.tsx", - "src/packages/swiper/demos/h5/demo5.tsx", - "src/packages/swiper/demos/h5/demo6.tsx", - "src/packages/swiper/demos/h5/demo7.tsx", - "src/packages/swiper/demos/h5/demo8.tsx", - "src/packages/swiper/demos/h5/demo9.tsx", - "src/packages/swiper/demos/h5/demo10.tsx" - ], - "taro": [ - "src/packages/swiper/demos/taro/demo1.tsx", - "src/packages/swiper/demos/taro/demo2.tsx", - "src/packages/swiper/demos/taro/demo3.tsx", - "src/packages/swiper/demos/taro/demo4.tsx", - "src/packages/swiper/demos/taro/demo5.tsx", - "src/packages/swiper/demos/taro/demo6.tsx", - "src/packages/swiper/demos/taro/demo7.tsx", - "src/packages/swiper/demos/taro/demo8.tsx", - "src/packages/swiper/demos/taro/demo9.tsx" - ] - }, - "spec": { - "base": "src/types/spec/swiper/base.ts", - "h5": "src/types/spec/swiper/h5.ts", - "taro": "src/types/spec/swiper/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Swiper", - "subComponent": null, - "rows": [ - { - "prop": "width", - "desc": "轮播卡片的宽度", - "type": "`number` | `string`", - "default": "window.innerWidth" - }, - { - "prop": "height", - "desc": "轮播卡片的高度", - "type": "`number` | `string`", - "default": "0" - }, - { - "prop": "direction", - "desc": "轮播方向", - "type": "`horizontal` | `vertical`", - "default": "horizontal" - }, - { - "prop": "indicator", - "desc": "分页指示器是否展示,可传入自定义的 HTML 结构", - "type": "`ReactNode`", - "default": "false" - }, - { - "prop": "loop", - "desc": "是否循环轮播", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "duration", - "desc": "动画时长(单位是ms)", - "type": "`number` | `string`", - "default": "500" - }, - { - "prop": "autoPlay", - "desc": "自动轮播时长,0表示不会自动轮播", - "type": "`number` | `string`", - "default": "0" - }, - { - "prop": "defaultValue", - "desc": "初始化索引值", - "type": "`number` | `string`", - "default": "0" - }, - { - "prop": "touchable", - "desc": "是否可触摸滑动", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "preventDefault", - "desc": "滑动过程中是否禁用默认事件", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "stopPropagation", - "desc": "滑动过程中是否禁止冒泡", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "center", - "desc": "是否居中展示,必须传对应的`width` 和 `height`", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onChange", - "desc": "卡片切换后的回调", - "type": "`(current: number) => void`", - "default": "-" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Swiper", - "subComponent": null, - "rows": [ - { - "prop": "prev", - "desc": "切换到上一页", - "type": "`()=>void`", - "default": "" - }, - { - "prop": "next", - "desc": "切换到下一页", - "type": "`()=>void`", - "default": "" - }, - { - "prop": "to", - "desc": "切换到指定轮播", - "type": "`(index: number)=>void`", - "default": "" - }, - { - "prop": "resize", - "desc": "外层元素大小或组件显示状态变化时,可以调用此方法来触发重绘", - "type": "`()=>void`", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "swiperitem": { - "id": "swiperitem", - "name": "SwiperItem", - "cName": "轮播子组件", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": false, - "v16": false, - "author": "liukun", - "type": "component", - "desc": "轮播子组件", - "sort": 14, - "show": false, - "jdtaro": 2, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "table": { - "id": "table", - "name": "Table", - "cName": "表格", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "yangjinjun3", - "type": "component", - "desc": "表格", - "sort": 21, - "show": true, - "docs": { - "h5": "src/packages/table/doc.md", - "enUS": "src/packages/table/doc.en-US.md", - "zhTW": "src/packages/table/doc.zh-TW.md", - "taro": "src/packages/table/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/table/demos/h5/demo1.tsx", - "src/packages/table/demos/h5/demo2.tsx", - "src/packages/table/demos/h5/demo3.tsx", - "src/packages/table/demos/h5/demo4.tsx", - "src/packages/table/demos/h5/demo5.tsx", - "src/packages/table/demos/h5/demo6.tsx", - "src/packages/table/demos/h5/demo7.tsx", - "src/packages/table/demos/h5/demo8.tsx", - "src/packages/table/demos/h5/demo9.tsx", - "src/packages/table/demos/h5/demo10.tsx", - "src/packages/table/demos/h5/demo11.tsx", - "src/packages/table/demos/h5/demo12.tsx", - "src/packages/table/demos/h5/demo13.tsx", - "src/packages/table/demos/h5/demo14.tsx" - ], - "taro": [ - "src/packages/table/demos/taro/demo1.tsx", - "src/packages/table/demos/taro/demo2.tsx", - "src/packages/table/demos/taro/demo3.tsx", - "src/packages/table/demos/taro/demo4.tsx", - "src/packages/table/demos/taro/demo5.tsx", - "src/packages/table/demos/taro/demo6.tsx", - "src/packages/table/demos/taro/demo7.tsx", - "src/packages/table/demos/taro/demo8.tsx", - "src/packages/table/demos/taro/demo9.tsx", - "src/packages/table/demos/taro/demo10.tsx", - "src/packages/table/demos/taro/demo11.tsx", - "src/packages/table/demos/taro/demo12.tsx", - "src/packages/table/demos/taro/demo13.tsx", - "src/packages/table/demos/taro/demo14.tsx" - ] - }, - "spec": { - "base": "src/types/spec/table/base.ts", - "h5": "src/types/spec/table/h5.ts", - "taro": "src/types/spec/table/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Table", - "subComponent": null, - "rows": [ - { - "prop": "bordered", - "desc": "是否显示边框", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "columns", - "desc": "表头数据", - "type": "`TableColumnProps[]`", - "default": "[]" - }, - { - "prop": "data", - "desc": "表格数据", - "type": "`Object[]`", - "default": "[]" - }, - { - "prop": "summary", - "desc": "是否显示简介", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "striped", - "desc": "条纹是否明暗交替", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "showHeader", - "desc": "是否显示表头", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "noData", - "desc": "自定义无数据", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "onSort", - "desc": "点击排序按钮触发", - "type": "`item: TableColumnProps, data: Array`", - "default": "-" - } - ] - }, - { - "name": "TableColumnProps", - "kind": "other", - "sourceComponent": "Table", - "subComponent": null, - "rows": [ - { - "prop": "key", - "desc": "列的唯一标识", - "type": "`string`", - "default": "-" - }, - { - "prop": "title", - "desc": "表头标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "align", - "desc": "列的对齐方式", - "type": "`left` | `center` | `right`", - "default": "left" - }, - { - "prop": "sorter", - "desc": "排序,可选值有 true,function, default, 其中 default表示点击之后可能会依赖接口, function可以返回具体的排序函数, default表示采用默认的排序算法", - "type": "`boolean` | `Function` | `string`", - "default": "-" - }, - { - "prop": "render", - "desc": "自定义渲染列数据,优先级高", - "type": "`Function(record)`", - "default": "-" - }, - { - "prop": "sorterIcon", - "desc": "排序 icon", - "type": "`ReactNode`", - "default": "" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-table-border-color", - "scssVar": "$table-border-color", - "default": "$color-border" - }, - { - "cssVar": "--nutui-table-cols-padding", - "scssVar": "$table-cols-padding", - "default": "scale-px(10px)" - }, - { - "cssVar": "--nutui-table-tr-odd-bg-color", - "scssVar": "$table-tr-odd-bg-color", - "default": "$white" - } - ] - }, - "tag": { - "id": "tag", - "name": "Tag", - "cName": "标签", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "lzz", - "type": "component", - "desc": "用于标记和分类。", - "sort": 4, - "show": true, - "docs": { - "h5": "src/packages/tag/doc.md", - "enUS": "src/packages/tag/doc.en-US.md", - "zhTW": "src/packages/tag/doc.zh-TW.md", - "taro": "src/packages/tag/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/tag/demos/h5/demo1.tsx", - "src/packages/tag/demos/h5/demo2.tsx", - "src/packages/tag/demos/h5/demo3.tsx", - "src/packages/tag/demos/h5/demo4.tsx" - ], - "taro": [ - "src/packages/tag/demos/taro/demo1.tsx", - "src/packages/tag/demos/taro/demo2.tsx", - "src/packages/tag/demos/taro/demo3.tsx", - "src/packages/tag/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/tag/base.ts", - "h5": "src/types/spec/tag/h5.ts", - "taro": "src/types/spec/tag/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Tag", - "subComponent": null, - "rows": [ - { - "prop": "type", - "desc": "标签类型", - "type": "`primary` | `success` | `danger` | `warning`", - "default": "default" - }, - { - "prop": "background", - "desc": "标签颜色", - "type": "`string`", - "default": "-" - }, - { - "prop": "color", - "desc": "文本颜色,优先级高于color属性", - "type": "`string`", - "default": "white" - }, - { - "prop": "plain", - "desc": "是否为空心样式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "round", - "desc": "是否为圆角样式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "mark", - "desc": "是否为标记样式", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "closeable", - "desc": "是否为可关闭标签", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "closeIcon", - "desc": "关闭按钮", - "type": "`ReactNode`", - "default": "null" - }, - { - "prop": "onClick", - "desc": "点击事件", - "type": "`(e: MouseEvent) => void`", - "default": "-" - }, - { - "prop": "onClose", - "desc": "关闭事件", - "type": "`(e?: any) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-tag-padding", - "scssVar": "$tag-padding", - "default": "0px scale-px(2px)" - }, - { - "cssVar": "--nutui-tag-font-size", - "scssVar": "$tag-font-size", - "default": "$font-size-xxs" - }, - { - "cssVar": "--nutui-tag-border-radius", - "scssVar": "$tag-border-radius", - "default": "scale-px(2px)" - }, - { - "cssVar": "--nutui-tag-height", - "scssVar": "$tag-height", - "default": "scale-px(14px)" - }, - { - "cssVar": "--nutui-tag-color", - "scssVar": "$tag-color", - "default": "#ffffff" - }, - { - "cssVar": "--nutui-tag-border-width", - "scssVar": "$tag-border-width", - "default": "scale-px(1px)" - }, - { - "cssVar": "--nutui-tag-background-color", - "scssVar": "$tag-background-color", - "default": "$color-title" - }, - { - "cssVar": "--nutui-tag-round-border-radius", - "scssVar": "$tag-round-border-radius", - "default": "scale-px(8px)" - } - ] - }, - "tour": { - "id": "tour", - "name": "Tour", - "cName": "引导", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "用于引导用户了解产品功能的气泡组件。自 4.0 版本开始提供该组件。", - "sort": 24, - "show": true, - "docs": { - "h5": "src/packages/tour/doc.md", - "enUS": "src/packages/tour/doc.en-US.md", - "zhTW": "src/packages/tour/doc.zh-TW.md", - "taro": "src/packages/tour/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/tour/demos/h5/demo1.tsx", - "src/packages/tour/demos/h5/demo2.tsx", - "src/packages/tour/demos/h5/demo3.tsx", - "src/packages/tour/demos/h5/demo4.tsx", - "src/packages/tour/demos/h5/demo5.tsx" - ], - "taro": [ - "src/packages/tour/demos/taro/demo1.tsx", - "src/packages/tour/demos/taro/demo2.tsx", - "src/packages/tour/demos/taro/demo3.tsx", - "src/packages/tour/demos/taro/demo4.tsx", - "src/packages/tour/demos/taro/demo5.tsx" - ] - }, - "spec": { - "base": "src/types/spec/tour/base.ts", - "h5": "src/types/spec/tour/h5.ts", - "taro": "src/types/spec/tour/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-tour-mask-border-radius", - "scssVar": "$tour-mask-border-radius", - "default": "scale-px(10px)" - }, - { - "cssVar": "--nutui-tour-content-min-width", - "scssVar": "$tour-content-min-width", - "default": "scale-px(200px)" - }, - { - "cssVar": "--nutui-tour-content-padding", - "scssVar": "$tour-content-padding", - "default": "scale-px(10px) scale-px(12px)" - } - ] - }, - "video": { - "id": "video", - "name": "Video", - "cName": "视频播放器", - "version": "3.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "原生video实现的视频播放器", - "sort": 20, - "show": true, - "docs": { - "h5": "src/packages/video/doc.md", - "enUS": "src/packages/video/doc.en-US.md", - "zhTW": "src/packages/video/doc.zh-TW.md", - "taro": "src/packages/video/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/video/demos/h5/demo1.tsx", - "src/packages/video/demos/h5/demo2.tsx", - "src/packages/video/demos/h5/demo3.tsx", - "src/packages/video/demos/h5/demo4.tsx", - "src/packages/video/demos/h5/demo5.tsx", - "src/packages/video/demos/h5/demo6.tsx", - "src/packages/video/demos/h5/demo7.tsx" - ], - "taro": [ - "src/packages/video/demos/taro/demo1.tsx", - "src/packages/video/demos/taro/demo2.tsx", - "src/packages/video/demos/taro/demo3.tsx", - "src/packages/video/demos/taro/demo4.tsx", - "src/packages/video/demos/taro/demo5.tsx", - "src/packages/video/demos/taro/demo6.tsx", - "src/packages/video/demos/taro/demo7.tsx" - ] - }, - "spec": { - "base": "src/types/spec/video/base.ts", - "h5": "src/types/spec/video/h5.ts", - "taro": "src/types/spec/video/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Video", - "subComponent": null, - "rows": [ - { - "prop": "source", - "desc": "视频地址和类型设置", - "type": "`object`", - "default": "{type: {}, src: ''}" - }, - { - "prop": "options", - "desc": "控制视频播放属性", - "type": "`object`", - "default": "-" - }, - { - "prop": "options.autoplay", - "desc": "是否自动播放", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "options.poster", - "desc": "海报设置", - "type": "`string`", - "default": "-" - }, - { - "prop": "options.loop", - "desc": "是否循环播放", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "options.controls", - "desc": "是否展示操作栏", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "options.muted", - "desc": "是否静音", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "options.playsinline", - "desc": "是否设置为行内播放元素(解决安卓兼容问题)", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "onPlay", - "desc": "播放", - "type": "`(element: HTMLVideoElement) => void`", - "default": "-" - }, - { - "prop": "onPause", - "desc": "暂停", - "type": "`(element: HTMLVideoElement) => void`", - "default": "-" - }, - { - "prop": "onPlayEnd", - "desc": "播放完成回调", - "type": "`(element: HTMLVideoElement) => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "virtuallist": { - "id": "virtuallist", - "name": "VirtualList", - "cName": "虚拟列表", - "version": "2.0.0", - "category": { - "name": "展示组件", - "enName": "exhibition" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "hx", - "type": "component", - "desc": "长列表渲染", - "sort": 20, - "show": true, - "docs": { - "h5": "src/packages/virtuallist/doc.md", - "enUS": "src/packages/virtuallist/doc.en-US.md", - "zhTW": "src/packages/virtuallist/doc.zh-TW.md", - "taro": "src/packages/virtuallist/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/virtuallist/demos/h5/demo1.tsx", - "src/packages/virtuallist/demos/h5/demo2.tsx", - "src/packages/virtuallist/demos/h5/demo3.tsx", - "src/packages/virtuallist/demos/h5/demo4.tsx" - ], - "taro": [ - "src/packages/virtuallist/demos/taro/demo1.tsx", - "src/packages/virtuallist/demos/taro/demo2.tsx" - ] - }, - "spec": { - "base": "src/types/spec/virtuallist/base.ts", - "h5": "src/types/spec/virtuallist/h5.ts", - "taro": "src/types/spec/virtuallist/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "VirtualList", - "subComponent": null, - "rows": [ - { - "prop": "list", - "desc": "获取数据", - "type": "`Array`", - "default": "-" - }, - { - "prop": "containerHeight", - "desc": "容器高度", - "type": "`number`", - "default": "获取元素的 offsetWidth 或 offsetHeight,需要 css 给出" - }, - { - "prop": "ItemRender", - "desc": "virtual 列表父节点渲染的函数", - "type": "`React.FC`", - "default": "-" - }, - { - "prop": "itemHeight", - "desc": "item 高度,如果不定高,则为首屏单个最大 height", - "type": "`number`", - "default": "66" - }, - { - "prop": "itemEqual", - "desc": "item 高度是否一致", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "overscan", - "desc": "除了视窗里面默认的元素, 还需要额外渲染的 item 个数", - "type": "`number`", - "default": "2" - }, - { - "prop": "key", - "desc": "用于指定 list 数据每一项的唯一 key 的字段名,默认取下标", - "type": "`string`", - "default": "-" - }, - { - "prop": "direction", - "desc": "`vertical`、`horizontal`", - "type": "`string`", - "default": "vertical" - }, - { - "prop": "onScroll", - "desc": "滑动到底(右)的事件,可以实现无限滚动", - "type": "`() => void`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - }, - "quickenter": { - "id": "quickenter", - "name": "QuickEnter", - "cName": "快捷入口", - "version": "2.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "hanyuxinting", - "type": "component", - "desc": "快捷入口", - "sort": 26, - "show": true, - "docs": { - "h5": "src/packages/quickenter/doc.md", - "enUS": "src/packages/quickenter/doc.en-US.md", - "zhTW": "src/packages/quickenter/doc.zh-TW.md", - "taro": "src/packages/quickenter/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/quickenter/demos/h5/demo1.tsx", - "src/packages/quickenter/demos/h5/demo2.tsx", - "src/packages/quickenter/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/quickenter/demos/taro/demo1.tsx", - "src/packages/quickenter/demos/taro/demo2.tsx", - "src/packages/quickenter/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/quickenter/base.ts", - "h5": "src/types/spec/quickenter/h5.ts", - "taro": "src/types/spec/quickenter/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [ - { - "cssVar": "--nutui-quickenter-bg-color", - "scssVar": "$quickenter-bg-color", - "default": "#f5f5f5" - }, - { - "cssVar": "--nutui-quickenter-max-height", - "scssVar": "$quickenter-max-height", - "default": "scale-px(256px)" - } - ] - }, - "avatarcropper": { - "id": "avatarcropper", - "name": "AvatarCropper", - "cName": "头像裁剪", - "version": "2.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "Marvin", - "type": "component", - "desc": "仿微信头像裁剪功能", - "sort": 26, - "show": true, - "docs": { - "h5": "src/packages/avatarcropper/doc.md", - "enUS": "src/packages/avatarcropper/doc.en-US.md", - "zhTW": "src/packages/avatarcropper/doc.zh-TW.md", - "taro": "src/packages/avatarcropper/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/avatarcropper/demos/h5/demo1.tsx", - "src/packages/avatarcropper/demos/h5/demo2.tsx", - "src/packages/avatarcropper/demos/h5/demo3.tsx" - ], - "taro": [ - "src/packages/avatarcropper/demos/taro/demo1.tsx", - "src/packages/avatarcropper/demos/taro/demo2.tsx", - "src/packages/avatarcropper/demos/taro/demo3.tsx" - ] - }, - "spec": { - "base": "src/types/spec/avatarcropper/base.ts", - "h5": "src/types/spec/avatarcropper/h5.ts", - "taro": "src/types/spec/avatarcropper/taro.ts" - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "barrage": { - "id": "barrage", - "name": "Barrage", - "cName": "弹幕", - "version": "2.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "用于话语和词组的轮播展示,适用于视频中或其他类似需求中。", - "sort": 2, - "show": true, - "docs": { - "h5": "src/packages/barrage/doc.md", - "enUS": "src/packages/barrage/doc.en-US.md", - "zhTW": "src/packages/barrage/doc.zh-TW.md", - "taro": "src/packages/barrage/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/barrage/demos/h5/demo1.tsx" - ], - "taro": [ - "src/packages/barrage/demos/taro/demo1.tsx" - ] - }, - "spec": { - "base": "src/types/spec/barrage/base.ts", - "h5": "src/types/spec/barrage/h5.ts", - "taro": "src/types/spec/barrage/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Barrage", - "subComponent": null, - "rows": [ - { - "prop": "list", - "desc": "弹幕列表数据", - "type": "`Array`", - "default": "[]" - }, - { - "prop": "interval", - "desc": "可视区域内每个弹幕出现的时间间隔", - "type": "`number`", - "default": "500" - }, - { - "prop": "duration", - "desc": "每个弹幕的滚动时间", - "type": "`number`", - "default": "3000" - }, - { - "prop": "rows", - "desc": "弹幕行数,分几行展示", - "type": "`number`", - "default": "1" - }, - { - "prop": "gapY", - "desc": "弹幕垂直距离", - "type": "`number`", - "default": "10" - }, - { - "prop": "loop", - "desc": "是否循环播放", - "type": "`boolean`", - "default": "true" - } - ] - }, - { - "name": "Ref", - "kind": "ref", - "sourceComponent": "Barrage", - "subComponent": null, - "rows": [ - { - "prop": "add", - "desc": "添加数据", - "type": "`(word: string) => void`", - "default": "" - } - ] - } - ] - }, - "tokens": [] - }, - "card": { - "id": "card", - "name": "Card", - "cName": "商品卡片", - "version": "3.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "商品卡片,用于展示商品的图片、价格等信息", - "sort": 6, - "show": true, - "docs": { - "h5": "src/packages/card/doc.md", - "enUS": "src/packages/card/doc.en-US.md", - "zhTW": "src/packages/card/doc.zh-TW.md", - "taro": "src/packages/card/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/card/demos/h5/demo1.tsx", - "src/packages/card/demos/h5/demo2.tsx", - "src/packages/card/demos/h5/demo3.tsx", - "src/packages/card/demos/h5/demo4.tsx", - "src/packages/card/demos/h5/demo5.tsx", - "src/packages/card/demos/h5/demo6.tsx" - ], - "taro": [ - "src/packages/card/demos/taro/demo1.tsx", - "src/packages/card/demos/taro/demo2.tsx", - "src/packages/card/demos/taro/demo3.tsx", - "src/packages/card/demos/taro/demo4.tsx", - "src/packages/card/demos/taro/demo5.tsx", - "src/packages/card/demos/taro/demo6.tsx" - ] - }, - "spec": { - "base": "src/types/spec/card/base.ts", - "h5": "src/types/spec/card/h5.ts", - "taro": "src/types/spec/card/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "Card", - "subComponent": null, - "rows": [ - { - "prop": "src", - "desc": "左侧图片 Url", - "type": "`string`", - "default": "-" - }, - { - "prop": "title", - "desc": "标题", - "type": "`string`", - "default": "-" - }, - { - "prop": "price", - "desc": "商品价格", - "type": "`string`", - "default": "-" - }, - { - "prop": "vipPrice", - "desc": "会员价格", - "type": "`string`", - "default": "-" - }, - { - "prop": "shopDescription", - "desc": "店铺介绍", - "type": "`string`", - "default": "-" - }, - { - "prop": "delivery", - "desc": "配送方式", - "type": "`string`", - "default": "-" - }, - { - "prop": "shopName", - "desc": "店铺名称", - "type": "`string`", - "default": "-" - }, - { - "prop": "description", - "desc": "自定义商品介绍", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "priceTag", - "desc": "价格后方自定义内容", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "tag", - "desc": "店铺介绍自定义", - "type": "`ReactNode`", - "default": "-" - }, - { - "prop": "extra", - "desc": "右下角内容自定义", - "type": "`ReactNode`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-card-border-radius", - "scssVar": "$card-border-radius", - "default": "scale-px(4px)" - } - ] - }, - "timedetail": { - "id": "timedetail", - "name": "TimeDetail", - "cName": "配送时间", - "version": "3.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": false, - "v15": false, - "v16": false, - "author": "zhaoqian16", - "type": "component", - "desc": "配送时间上门时间选择", - "sort": 8, - "show": false, - "docs": { - "h5": null, - "enUS": null, - "zhTW": null, - "taro": null - }, - "demos": { - "h5": [], - "taro": [] - }, - "api": { - "tables": [] - }, - "tokens": [] - }, - "timeselect": { - "id": "timeselect", - "name": "TimeSelect", - "cName": "配送时间", - "version": "3.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "zhaoqian16", - "type": "component", - "desc": "用于配送时间选择", - "sort": 20, - "show": true, - "docs": { - "h5": "src/packages/timeselect/doc.md", - "enUS": "src/packages/timeselect/doc.en-US.md", - "zhTW": "src/packages/timeselect/doc.zh-TW.md", - "taro": "src/packages/timeselect/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/timeselect/demos/h5/demo1.tsx", - "src/packages/timeselect/demos/h5/demo2.tsx", - "src/packages/timeselect/demos/h5/demo3.tsx", - "src/packages/timeselect/demos/h5/demo4.tsx" - ], - "taro": [ - "src/packages/timeselect/demos/taro/demo1.tsx", - "src/packages/timeselect/demos/taro/demo2.tsx", - "src/packages/timeselect/demos/taro/demo3.tsx", - "src/packages/timeselect/demos/taro/demo4.tsx" - ] - }, - "spec": { - "base": "src/types/spec/timeselect/base.ts", - "h5": "src/types/spec/timeselect/h5.ts", - "taro": "src/types/spec/timeselect/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "TimeSelect", - "subComponent": null, - "rows": [ - { - "prop": "visible", - "desc": "是否显示弹层", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "title", - "desc": "弹层标题", - "type": "`ReactNode`", - "default": "取件时间" - }, - { - "prop": "multiple", - "desc": "是否支持多选", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "defaultValue", - "desc": "默认选中的值,非受控", - "type": "`DateType[]`", - "default": "-" - }, - { - "prop": "options", - "desc": "数据", - "type": "`DateType[]`", - "default": "-" - }, - { - "prop": "optionKey", - "desc": "配置数据中的关键字, `valueKey`, `textKey`, `childrenKey`", - "type": "`{valueKey: 'value', textKey: 'text', childrenKey: 'children'}`", - "default": "-" - }, - { - "prop": "onSelect", - "desc": "关闭遮罩之后的回调", - "type": "`(value: DateType[]) => void`", - "default": "-" - }, - { - "prop": "onDateChange", - "desc": "点击左栏时的回调", - "type": "`(date: DateType, value: DateType[]) => void`", - "default": "-" - }, - { - "prop": "onTimeChange", - "desc": "点击右侧选项时的回调", - "type": "`(time: TimeType, value: DateType[]) => void`", - "default": "-" - } - ] - }, - { - "name": "DateType", - "kind": "other", - "sourceComponent": "TimeSelect", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "唯一标识符, 必填", - "type": "`string`", - "default": "-" - }, - { - "prop": "text", - "desc": "左侧显示的文本, 必填", - "type": "`string`", - "default": "-" - }, - { - "prop": "children", - "desc": "对应右侧的选项列表, 必填", - "type": "`TimeType[]`", - "default": "-" - } - ] - }, - { - "name": "TimeType", - "kind": "other", - "sourceComponent": "TimeSelect", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "唯一标识符, 必填", - "type": "`string`", - "default": "-" - }, - { - "prop": "text", - "desc": "右侧显示的选项内容, 必填", - "type": "`string`", - "default": "-" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-timeselect-date-width", - "scssVar": "$timeselect-date-width", - "default": "scale-px(140px)" - }, - { - "cssVar": "--nutui-timeselect-date-height", - "scssVar": "$timeselect-date-height", - "default": "scale-px(40px)" - }, - { - "cssVar": "--nutui-timeselect-time-width", - "scssVar": "$timeselect-time-width", - "default": "scale-px(110px)" - }, - { - "cssVar": "--nutui-timeselect-time-height", - "scssVar": "$timeselect-time-height", - "default": "scale-px(50px)" - } - ] - }, - "trendarrow": { - "id": "trendarrow", - "name": "TrendArrow", - "cName": "趋势箭头", - "version": "3.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "songsong", - "type": "component", - "desc": "带有箭头指示的百分比数字,用以展示指标趋势", - "sort": 25, - "show": true, - "docs": { - "h5": "src/packages/trendarrow/doc.md", - "enUS": "src/packages/trendarrow/doc.en-US.md", - "zhTW": "src/packages/trendarrow/doc.zh-TW.md", - "taro": "src/packages/trendarrow/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/trendarrow/demos/h5/demo1.tsx", - "src/packages/trendarrow/demos/h5/demo2.tsx", - "src/packages/trendarrow/demos/h5/demo3.tsx", - "src/packages/trendarrow/demos/h5/demo4.tsx", - "src/packages/trendarrow/demos/h5/demo5.tsx", - "src/packages/trendarrow/demos/h5/demo6.tsx", - "src/packages/trendarrow/demos/h5/demo7.tsx", - "src/packages/trendarrow/demos/h5/demo8.tsx" - ], - "taro": [ - "src/packages/trendarrow/demos/taro/demo1.tsx", - "src/packages/trendarrow/demos/taro/demo2.tsx", - "src/packages/trendarrow/demos/taro/demo3.tsx", - "src/packages/trendarrow/demos/taro/demo4.tsx", - "src/packages/trendarrow/demos/taro/demo5.tsx", - "src/packages/trendarrow/demos/taro/demo6.tsx", - "src/packages/trendarrow/demos/taro/demo7.tsx", - "src/packages/trendarrow/demos/taro/demo8.tsx" - ] - }, - "spec": { - "base": "src/types/spec/trendarrow/base.ts", - "h5": "src/types/spec/trendarrow/h5.ts", - "taro": "src/types/spec/trendarrow/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "TrendArrow", - "subComponent": null, - "rows": [ - { - "prop": "value", - "desc": "数值,大于0时箭头向上,小于0时箭头向下", - "type": "`number`", - "default": "-" - }, - { - "prop": "digits", - "desc": "小数位精度", - "type": "`number`", - "default": "2" - }, - { - "prop": "symbol", - "desc": "是否显示加减号", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "zero", - "desc": "是否显示 0", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "arrowLeft", - "desc": "是否在数字左侧显示箭头", - "type": "`boolean`", - "default": "false" - }, - { - "prop": "syncColor", - "desc": "文字颜色是否与箭头同步", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "color", - "desc": "文字颜色", - "type": "`string`", - "default": "#333333" - }, - { - "prop": "riseColor", - "desc": "向上箭头颜色", - "type": "`string`", - "default": "#fa2c19" - }, - { - "prop": "dropColor", - "desc": "向下箭头颜色", - "type": "`string`", - "default": "#64b578" - }, - { - "prop": "riseIcon", - "desc": "自定义向上箭头icon", - "type": "`React.ReactNode`", - "default": "" - }, - { - "prop": "downIcon", - "desc": "自定义向下箭头icon", - "type": "`React.ReactNode`", - "default": "" - } - ] - } - ] - }, - "tokens": [ - { - "cssVar": "--nutui-trendarrow-font-size", - "scssVar": "$trendarrow-font-size", - "default": "$font-size-base" - }, - { - "cssVar": "--nutui-trendarrow-icon-margin", - "scssVar": "$trendarrow-icon-margin", - "default": "scale-px(4px)" - } - ] - }, - "watermark": { - "id": "watermark", - "name": "WaterMark", - "cName": "水印", - "version": "2.0.0", - "category": { - "name": "特色组件", - "enName": "business" - }, - "taro": true, - "v15": true, - "v16": false, - "author": "swag~jun", - "type": "component", - "desc": "页面上添加特定的文字或图案,可用于防止信息盗用。", - "sort": 25, - "show": true, - "docs": { - "h5": "src/packages/watermark/doc.md", - "enUS": "src/packages/watermark/doc.en-US.md", - "zhTW": "src/packages/watermark/doc.zh-TW.md", - "taro": "src/packages/watermark/doc.taro.md" - }, - "demos": { - "h5": [ - "src/packages/watermark/demos/h5/demo1.tsx", - "src/packages/watermark/demos/h5/demo2.tsx" - ], - "taro": [ - "src/packages/watermark/demos/taro/demo1.tsx", - "src/packages/watermark/demos/taro/demo2.tsx" - ] - }, - "spec": { - "base": "src/types/spec/watermark/base.ts", - "h5": "src/types/spec/watermark/h5.ts", - "taro": "src/types/spec/watermark/taro.ts" - }, - "api": { - "tables": [ - { - "name": "Props", - "kind": "props", - "sourceComponent": "WaterMark", - "subComponent": null, - "rows": [ - { - "prop": "width", - "desc": "水印的宽度", - "type": "`number`", - "default": "120" - }, - { - "prop": "height", - "desc": "水印的高度", - "type": "`number`", - "default": "64" - }, - { - "prop": "rotate", - "desc": "水印绘制时,旋转的角度", - "type": "`number`", - "default": "-22" - }, - { - "prop": "image", - "desc": "图片源,建议导出 2 倍或 3 倍图,优先使用图片渲染水印", - "type": "`string`", - "default": "-" - }, - { - "prop": "imageWidth", - "desc": "图片宽度", - "type": "`number`", - "default": "120" - }, - { - "prop": "imageHeight", - "desc": "图片高度", - "type": "`number`", - "default": "64" - }, - { - "prop": "zIndex", - "desc": "追加的水印元素的 z-index", - "type": "`number`", - "default": "2000" - }, - { - "prop": "content", - "desc": "水印文字内容", - "type": "`string`", - "default": "-" - }, - { - "prop": "color", - "desc": "水印文字颜色", - "type": "`string`", - "default": "rgba(0, 0, 0, .15)" - }, - { - "prop": "fontSize", - "desc": "文字大小", - "type": "`string` | `number`", - "default": "16" - }, - { - "prop": "gapX", - "desc": "水印之间的水平间距", - "type": "`number`", - "default": "24" - }, - { - "prop": "gapY", - "desc": "水印之间的垂直间距", - "type": "`number`", - "default": "48" - }, - { - "prop": "fullPage", - "desc": "是否覆盖整个页面", - "type": "`boolean`", - "default": "true" - }, - { - "prop": "fontFamily", - "desc": "水印文字字体", - "type": "`string`", - "default": "-" - } - ] - } - ] - }, - "tokens": [] - } - } -} diff --git a/package.json b/package.json index b650e51c6f..a52d63f9bb 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "build:demo:jmapp": "npm run checked && VITE_APP_PROJECT_ID=jmapp vite build --config vite.config.demo.ts", "prebuild:taro:demo": "SKIPDD=1 pnpm run update:taro:entry", "build:taro:demo": "npm run checked:taro && npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:h5", + "prebuild:site": "npm run generate:meta && npm run generate:llms", "build:site": "vite build --config vite.config.site.mts", "build:taro:site": "vite build --config vite.config.site.taro.mts && node ./scripts/rename.js", "build:jdtaro:demo": "npm run checked:taro && npm run generate:file:taro:pages && JD=1 pnpm --dir ./packages/nutui-taro-demo build:h5", From 4331871f361af4279055b254200c9a83751274ac Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 9 Jul 2026 15:39:21 +0800 Subject: [PATCH 08/21] feat: enhance LLMs documentation generation for multiple platforms --- .gitignore | 8 +- package.json | 1 + scripts/build-llms.mjs | 129 +++++++++++++++++++++--------- scripts/site/vite-plugin-llms.mjs | 50 +++--------- vite.config.site.mts | 2 +- vite.config.site.taro.mts | 3 + 6 files changed, 114 insertions(+), 79 deletions(-) diff --git a/.gitignore b/.gitignore index 4112098aa6..81c8412857 100644 --- a/.gitignore +++ b/.gitignore @@ -7,11 +7,9 @@ node_modules /dist /dist-demo /dist-site -# meta 派生产物:均由 generate:meta / generate:llms 在构建时产出(build:site 前自动生成),不落库 -/meta/components.json -/meta/llms.txt -/meta/llms-full-cn.txt -/meta/llms-full.txt +# meta 派生产物:components.json 由 generate:meta 产出,各平台 llms 由 generate:llms 产出 +# (build:site / build:taro:site 前自动生成),整个目录均为构建产物,不落库 +/meta/ /release /libs /jd/upload.js diff --git a/package.json b/package.json index a52d63f9bb..8cd5d6ef13 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "build:taro:demo": "npm run checked:taro && npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:h5", "prebuild:site": "npm run generate:meta && npm run generate:llms", "build:site": "vite build --config vite.config.site.mts", + "prebuild:taro:site": "npm run generate:meta && npm run generate:llms", "build:taro:site": "vite build --config vite.config.site.taro.mts && node ./scripts/rename.js", "build:jdtaro:demo": "npm run checked:taro && npm run generate:file:taro:pages && JD=1 pnpm --dir ./packages/nutui-taro-demo build:h5", "build:taro:demo:jmapp": "npm run checked:taro && VITE_APP_PROJECT_ID=jmapp npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:jmapp h5", diff --git a/scripts/build-llms.mjs b/scripts/build-llms.mjs index 4f08e11ca9..6004e8a452 100644 --- a/scripts/build-llms.mjs +++ b/scripts/build-llms.mjs @@ -1,8 +1,8 @@ -// 读 meta/components.json,生成面向 LLM 的文档入口产物: +// 读 meta/components.json,为每个文档站平台(H5 / Taro)生成面向 LLM 的文档入口产物: // - llms.txt 导航索引(仿 llmstxt.org 标准) -// - llms-full-cn.txt 全部中文 doc.md 拼接,可整体注入上下文 -// - llms-full.txt 全部英文 doc.en-US.md 拼接 -// 核心生成逻辑导出为纯函数,供 vite.config.site 的插件复用,避免两处实现。 +// - llms-full-cn.txt 全部中文 doc 拼接,可整体注入上下文 +// - llms-full.txt 全部英文 doc 拼接(仅 H5,Taro 端无英文文档) +// 核心生成逻辑按平台参数化并导出为纯函数,供 vite.config.site(.taro) 的插件复用,避免多处实现。 // DO NOT manual edit the outputs. Run: npm run generate:llms import fs from 'fs' import path from 'path' @@ -13,38 +13,61 @@ const ROOT = path.resolve(__dirname, '..') const META_PATH = path.join(ROOT, 'meta/components.json') const OUTPUT_DIR = path.join(ROOT, 'meta') -// 线上文档站基址:域名 + vite base。单组件 .md 路由由 site 插件产出到 /components/.md。 export const SITE_ORIGIN = 'https://nutui.jd.com' -export const SITE_BASE = '/h5/react/4x' -const SITE_URL = `${SITE_ORIGIN}${SITE_BASE}` const SUMMARY = 'NutUI React 是京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序(Taro 多端)。' const SUMMARY_EN = 'NutUI React is a lightweight, JD-style mobile React UI library that generates both H5 and mini-program (Taro multi-platform) apps from a single codebase.' +// 各文档站平台的差异集中于此:站点 base、文档来源(meta.docs 的哪个 key)、标题落款、是否有英文文档。 +// 单组件 .md 路由由 site 插件产出到 /components/.md。 +export const PLATFORMS = { + h5: { + base: '/h5/react/4x', + // 中/英文正文各取哪个 docs key。H5 端中文用 doc.md、英文用 doc.en-US.md。 + langDocKey: { cn: 'h5', en: 'enUS' }, + titleSuffix: '', + pkgName: '@nutui/nutui-react', + }, + taro: { + base: '/taro/react/4x', + // Taro 端中文用 doc.taro.md;暂无 Taro 英文文档,故不产出 llms-full.txt。 + langDocKey: { cn: 'taro' }, + titleSuffix: '(Taro 多端)', + pkgName: '@nutui/nutui-react-taro', + }, +} + export function loadMeta() { return JSON.parse(fs.readFileSync(META_PATH, 'utf-8')) } -// 仅纳入有中文文档的组件(= show:true 的展示组件),按 categories 的 nav 顺序输出。 -function docComponents(meta) { +const siteUrl = (platform) => `${SITE_ORIGIN}${PLATFORMS[platform].base}` + +// 仅纳入在该平台有中文文档的组件(= show:true 的展示组件),按 categories 的 nav 顺序输出。 +function docComponents(meta, cnKey) { const list = [] for (const cat of meta.categories) { const comps = cat.components .map((id) => meta.components[id]) - .filter((c) => c && c.docs && c.docs.h5) + .filter((c) => c && c.docs && c.docs[cnKey]) if (comps.length) list.push({ category: cat, comps }) } return list } -export function generateLlmsTxt(meta) { - const groups = docComponents(meta) +export function generateLlmsTxt(meta, platform = 'h5') { + const conf = PLATFORMS[platform] + const cnKey = conf.langDocKey.cn + const url = siteUrl(platform) + const groups = docComponents(meta, cnKey) const lines = [] - lines.push(`# NutUI React - 京东风格轻量级移动端 React 组件库`) + lines.push(`# NutUI React - 京东风格轻量级移动端 React 组件库${conf.titleSuffix}`) lines.push('') - lines.push(`> ${SUMMARY}版本 ${meta.libVersion},共 ${meta.componentCount} 个组件。`) + lines.push( + `> ${SUMMARY}当前为 ${conf.pkgName}(\`${platform}\` 端),版本 ${meta.libVersion},共 ${meta.componentCount} 个组件。` + ) lines.push('') lines.push( `本文件遵循 llmstxt.org 标准,为 AI 编程助手提供权威、离线可查的组件文档入口。每个组件的 \`.md\` 链接返回其纯文档原文(无站点 HTML 噪音),可按需精确拉取。` @@ -52,8 +75,10 @@ export function generateLlmsTxt(meta) { lines.push('') lines.push('## Navigation') lines.push('') - lines.push(`- [全部组件文档(中文,单文件)](${SITE_URL}/llms-full-cn.txt)`) - lines.push(`- [Full Documentation (English, single file)](${SITE_URL}/llms-full.txt)`) + lines.push(`- [全部组件文档(中文,单文件)](${url}/llms-full-cn.txt)`) + if (conf.langDocKey.en) { + lines.push(`- [Full Documentation (English, single file)](${url}/llms-full.txt)`) + } lines.push('') for (const { category, comps } of groups) { @@ -61,25 +86,27 @@ export function generateLlmsTxt(meta) { lines.push('') for (const c of comps) { const label = c.cName ? `${c.name} ${c.cName}` : c.name - lines.push(`- [${label}](${SITE_URL}/components/${c.id}.md)`) + lines.push(`- [${label}](${url}/components/${c.id}.md)`) } lines.push('') } return `${lines.join('\n').trimEnd()}\n` } -// 拼接全部组件文档为单文件。lang: 'h5'(中文) | 'enUS'(英文)。 -export function generateLlmsFull(meta, lang = 'h5') { +// 拼接该平台全部组件文档为单文件。lang: 'cn' | 'en'(en 仅 H5 有)。 +export function generateLlmsFull(meta, platform = 'h5', lang = 'cn') { + const conf = PLATFORMS[platform] + const docKey = conf.langDocKey[lang] const title = - lang === 'enUS' + lang === 'en' ? '# NutUI React - Full Component Documentation' - : '# NutUI React - 全部组件文档' - const summary = lang === 'enUS' ? SUMMARY_EN : SUMMARY + : `# NutUI React - 全部组件文档${conf.titleSuffix}` + const summary = lang === 'en' ? SUMMARY_EN : SUMMARY const parts = [title, '', `> ${summary}`, ''] for (const cat of meta.categories) { for (const id of cat.components) { const c = meta.components[id] - const rel = c && c.docs ? c.docs[lang] : null + const rel = c && c.docs ? c.docs[docKey] : null if (!rel) continue const abs = path.join(ROOT, rel) if (!fs.existsSync(abs)) continue @@ -91,23 +118,53 @@ export function generateLlmsFull(meta, lang = 'h5') { return `${parts.join('\n').trimEnd()}\n` } +// 汇总某平台要产出的全部 llms 文件:{ 相对站点根的路径 -> 文本内容 }。 +// 含 llms.txt / llms-full*.txt 与每组件的 components/.md(取该平台对应端文档)。 +// 供 build-llms 的 main 与 vite 插件共用,保证两处产物完全一致。 +export function collectLlmsFiles(meta, platform = 'h5') { + const conf = PLATFORMS[platform] + const cnKey = conf.langDocKey.cn + const files = { + 'llms.txt': generateLlmsTxt(meta, platform), + 'llms-full-cn.txt': generateLlmsFull(meta, platform, 'cn'), + } + if (conf.langDocKey.en) { + files['llms-full.txt'] = generateLlmsFull(meta, platform, 'en') + } + for (const c of Object.values(meta.components)) { + const rel = c.docs && c.docs[cnKey] + if (!rel) continue + const abs = path.join(ROOT, rel) + if (!fs.existsSync(abs)) continue + files[`components/${c.id}.md`] = fs.readFileSync(abs, 'utf-8') + } + return files +} + function main() { console.log('🚀 building llms.txt ...') const meta = loadMeta() - const files = { - 'llms.txt': generateLlmsTxt(meta), - 'llms-full-cn.txt': generateLlmsFull(meta, 'h5'), - 'llms-full.txt': generateLlmsFull(meta, 'enUS'), - } - fs.mkdirSync(OUTPUT_DIR, { recursive: true }) - for (const [name, content] of Object.entries(files)) { - const out = path.join(OUTPUT_DIR, name) - fs.writeFileSync(out, content) - const kb = (Buffer.byteLength(content) / 1024).toFixed(0) - console.log(`✅ ${path.relative(ROOT, out)} (${kb}KB)`) + for (const platform of Object.keys(PLATFORMS)) { + const outDir = path.join(OUTPUT_DIR, platform) + fs.mkdirSync(outDir, { recursive: true }) + // 磁盘产物仅保留导航与全量文件;单组件 md 由站点构建时按需产出,不落 meta。 + const files = { + 'llms.txt': generateLlmsTxt(meta, platform), + 'llms-full-cn.txt': generateLlmsFull(meta, platform, 'cn'), + } + if (PLATFORMS[platform].langDocKey.en) { + files['llms-full.txt'] = generateLlmsFull(meta, platform, 'en') + } + for (const [name, content] of Object.entries(files)) { + const out = path.join(outDir, name) + fs.writeFileSync(out, content) + const kb = (Buffer.byteLength(content) / 1024).toFixed(0) + console.log(`✅ ${path.relative(ROOT, out)} (${kb}KB)`) + } + const cnKey = PLATFORMS[platform].langDocKey.cn + const docCount = docComponents(meta, cnKey).reduce((n, g) => n + g.comps.length, 0) + console.log(` [${platform}] 索引组件数: ${docCount}`) } - const docCount = docComponents(meta).reduce((n, g) => n + g.comps.length, 0) - console.log(` 索引组件数: ${docCount}`) } // 仅作为脚本直接运行时执行 main,被 import 时不执行。 diff --git a/scripts/site/vite-plugin-llms.mjs b/scripts/site/vite-plugin-llms.mjs index c5b700b4c8..4dac349b9c 100644 --- a/scripts/site/vite-plugin-llms.mjs +++ b/scripts/site/vite-plugin-llms.mjs @@ -1,62 +1,38 @@ -// Vite 插件(仅用于文档站 vite.config.site.mts): -// - build 时:把每个组件 doc.md 原文与 llms.txt/llms-full*.txt 通过 emitFile -// 输出为静态文件,最终落到 dist-site/h5/components/.md 与 dist-site/h5/*.txt +// Vite 插件(用于文档站 vite.config.site.mts 与 vite.config.site.taro.mts): +// - build 时:把每个组件对应端的 doc 原文与 llms.txt/llms-full*.txt 通过 emitFile +// 输出为静态文件,最终落到 dist-site/<...>/components/.md 与 dist-site/<...>/*.txt // - dev 时:configureServer 中间件按同样路径实时返回,便于本地联调 -// 数据源为 meta/components.json + 各组件 doc.md,与 build-llms.mjs 共享生成逻辑。 -import fs from 'fs' -import path from 'path' -import { fileURLToPath } from 'url' +// 平台差异(base、取哪一端文档)由 build-llms.mjs 的 PLATFORMS 决定,此处仅按 platform 透传。 import { loadMeta, - generateLlmsTxt, - generateLlmsFull, - SITE_BASE, + collectLlmsFiles, + PLATFORMS, } from '../build-llms.mjs' -const __dirname = path.dirname(fileURLToPath(import.meta.url)) -const ROOT = path.resolve(__dirname, '../..') - -// 收集所有要产出的虚拟文件:{ 相对站点根的路径 -> 文本内容 } -function collectFiles() { - const meta = loadMeta() - const files = { - 'llms.txt': generateLlmsTxt(meta), - 'llms-full-cn.txt': generateLlmsFull(meta, 'h5'), - 'llms-full.txt': generateLlmsFull(meta, 'enUS'), - } - for (const c of Object.values(meta.components)) { - const rel = c.docs && c.docs.h5 - if (!rel) continue - const abs = path.join(ROOT, rel) - if (!fs.existsSync(abs)) continue - files[`components/${c.id}.md`] = fs.readFileSync(abs, 'utf-8') - } - return files -} - const contentType = (p) => p.endsWith('.md') ? 'text/markdown; charset=utf-8' : 'text/plain; charset=utf-8' -export default function llmsPlugin() { +// platform: 'h5' | 'taro',决定站点 base 与单组件 md 取哪一端文档。 +export default function llmsPlugin({ platform = 'h5' } = {}) { + const base = PLATFORMS[platform].base.replace(/\/$/, '') return { name: 'nutui-llms', - // build 阶段:把虚拟文件写入产物目录(相对 outDir,即 dist-site/h5)。 + // build 阶段:把虚拟文件写入产物目录(相对 outDir,即 dist-site/)。 generateBundle() { - const files = collectFiles() + const files = collectLlmsFiles(loadMeta(), platform) for (const [fileName, source] of Object.entries(files)) { this.emitFile({ type: 'asset', fileName, source }) } console.log( - `[nutui-llms] emitted ${Object.keys(files).length} files (llms*.txt + components/*.md)` + `[nutui-llms:${platform}] emitted ${Object.keys(files).length} files (llms*.txt + components/*.md)` ) }, // dev 阶段:中间件按 /llms.txt、/components/.md 实时返回。 configureServer(server) { - const base = SITE_BASE.replace(/\/$/, '') server.middlewares.use((req, res, next) => { const url = (req.url || '').split('?')[0] const rel = url.startsWith(base) ? url.slice(base.length) : url @@ -68,7 +44,7 @@ export default function llmsPlugin() { (key.startsWith('components/') && key.endsWith('.md')) if (!isTarget) return next() - const files = collectFiles() + const files = collectLlmsFiles(loadMeta(), platform) if (!(key in files)) return next() res.setHeader('Content-Type', contentType(key)) res.end(files[key]) diff --git a/vite.config.site.mts b/vite.config.site.mts index f0c4cdd892..67c9afd415 100644 --- a/vite.config.site.mts +++ b/vite.config.site.mts @@ -66,7 +66,7 @@ export default defineConfig(async (): Promise => { }), }, reactRefresh(), - llmsPlugin(), + llmsPlugin({ platform: 'h5' }), ], build: { outDir: './dist-site/h5', diff --git a/vite.config.site.taro.mts b/vite.config.site.taro.mts index 022b4c6d17..5d4fd3e9fd 100644 --- a/vite.config.site.taro.mts +++ b/vite.config.site.taro.mts @@ -6,6 +6,8 @@ import { join, resolve } from 'path' import atImport from 'postcss-import' import rehypeHighlight from 'rehype-highlight' import config from './package.json' +// @ts-ignore +import llmsPlugin from './scripts/site/vite-plugin-llms.mjs' const projectID = process.env.VITE_APP_PROJECT_ID || '' @@ -64,6 +66,7 @@ export default defineConfig(async (): Promise => { }), }, reactRefresh(), + llmsPlugin({ platform: 'taro' }), ], build: { outDir: './dist-site/taro', From 198d7727a613cf9f5fa67e65766dcce95a65510a Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 10 Jul 2026 11:26:32 +0800 Subject: [PATCH 09/21] feat: add AI documentation support for NutUI-React and Taro --- .gitignore | 4 +- src/sites/config/baseConfig.ts | 14 +++++ src/sites/sites-react/doc-taro/App.tsx | 7 +-- src/sites/sites-react/doc-taro/router.ts | 24 ++++++++- src/sites/sites-react/doc/App.tsx | 7 +-- .../doc/components/header/header.tsx | 2 + .../sites-react/doc/components/nav/nav.tsx | 19 ++++++- .../doc/docs/ai-react/llms.en-US.md | 52 +++++++++++++++++++ .../sites-react/doc/docs/ai-react/llms.md | 52 +++++++++++++++++++ .../doc/docs/ai-taro/llms.en-US.md | 52 +++++++++++++++++++ .../sites-react/doc/docs/ai-taro/llms.md | 52 +++++++++++++++++++ src/sites/sites-react/doc/router.ts | 23 +++++++- 12 files changed, 298 insertions(+), 10 deletions(-) create mode 100644 src/sites/sites-react/doc/docs/ai-react/llms.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/llms.md create mode 100644 src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-taro/llms.md diff --git a/.gitignore b/.gitignore index 004beff33c..e38e6355de 100644 --- a/.gitignore +++ b/.gitignore @@ -66,4 +66,6 @@ pnpm-lock.*.yaml .claude/commands/nutui-v4-upgrade.md # Harmony CSS files -src/packages/**/*.harmony.css \ No newline at end of file +src/packages/**/*.harmony.css + +.playwright-cli/ \ No newline at end of file diff --git a/src/sites/config/baseConfig.ts b/src/sites/config/baseConfig.ts index 18dd901c31..5738631669 100644 --- a/src/sites/config/baseConfig.ts +++ b/src/sites/config/baseConfig.ts @@ -41,6 +41,13 @@ export const SiteReact = { eName: 'Components', path: '/zh-CN/component/button', pathName: '/zh-CN/component/button' + }, + { + name: 'llms', + cName: 'AI', + eName: 'AI', + path: '/zh-CN/ai/llms', + pathName: 'llms' } ], language: 'react' @@ -88,6 +95,13 @@ export const SiteReactTaro = { eName: 'Components', path: '/zh-CN/component/button', pathName: '/zh-CN/component/button' + }, + { + name: 'llms', + cName: 'AI', + eName: 'AI', + path: '/zh-CN/ai/llms', + pathName: 'llms' } ], language: 'react' diff --git a/src/sites/sites-react/doc-taro/App.tsx b/src/sites/sites-react/doc-taro/App.tsx index a912e86eaf..34df55fe76 100644 --- a/src/sites/sites-react/doc-taro/App.tsx +++ b/src/sites/sites-react/doc-taro/App.tsx @@ -8,7 +8,7 @@ import Header from '../doc/components/header' import DemoPreview from '../doc/components/demo-preview' import Issue from '..//doc/components/issue' import { getComponentName } from '../../assets/util' -import { routes as routers, guideEnTaroRoutes, guideTaroRoutes } from './router' +import { routes as routers, guideEnTaroRoutes, guideTaroRoutes, aiTaroRoutes } from './router' import loadable from '@loadable/component' import CodeBlock from '../doc/components/demoblock/codeblock' import { BackTop } from '../../../packages/backtop/backtop' @@ -78,11 +78,12 @@ const Content = () => { setFixed(false) } } - const isGuide = location.pathname.includes('/guide') + const isGuide = + location.pathname.includes('/guide') || location.pathname.includes('/ai/') useEffect(() => { document.addEventListener('scroll', scrollTitle) }, []) - const routes = [...routers, ...guideTaroRoutes, ...guideEnTaroRoutes] + const routes = [...routers, ...guideTaroRoutes, ...guideEnTaroRoutes, ...aiTaroRoutes] return (
{!isGuide && ( diff --git a/src/sites/sites-react/doc-taro/router.ts b/src/sites/sites-react/doc-taro/router.ts index 4a4e7bfc7a..e861200f5c 100644 --- a/src/sites/sites-react/doc-taro/router.ts +++ b/src/sites/sites-react/doc-taro/router.ts @@ -43,4 +43,26 @@ for (const path in modulesEnTaroDocs) { name }); } -export {routes, guideRoutes, guideEnRoutes, guideTaroRoutes, guideEnTaroRoutes} + +const aiTaroRoutes: any[] = [] +const modulesAiTaroDocs = import.meta.glob('/src/sites/sites-react/doc/docs/ai-taro/*.md'); +for (const path in modulesAiTaroDocs) { + if (path.includes('.en-US.md')) continue; + let name = (/docs\/ai-taro\/(.*).md/.exec(path) as any[])[1]; + aiTaroRoutes.push({ + path: `/zh-CN/ai/${name}`, + component: modulesAiTaroDocs[path], + name + }); +} +const modulesAiEnTaroDocs = import.meta.glob('/src/sites/sites-react/doc/docs/ai-taro/*.en-US.md'); +for (const path in modulesAiEnTaroDocs) { + let name = (/docs\/ai-taro\/(.*).en-US.md/.exec(path) as any[])[1]; + aiTaroRoutes.push({ + path: `/en-US/ai/${name}`, + component: modulesAiEnTaroDocs[path], + name: `en-${name}` + }); +} + +export {routes, guideRoutes, guideEnRoutes, guideTaroRoutes, guideEnTaroRoutes, aiTaroRoutes} diff --git a/src/sites/sites-react/doc/App.tsx b/src/sites/sites-react/doc/App.tsx index 573f2ea55c..44e4e54717 100644 --- a/src/sites/sites-react/doc/App.tsx +++ b/src/sites/sites-react/doc/App.tsx @@ -14,7 +14,7 @@ import Header from '../doc/components/header' import DemoPreview from '../doc/components/demo-preview' import Issue from '..//doc/components/issue' import { getComponentName } from '../../assets/util' -import { routes as routers, guideEnRoutes, guideRoutes } from './router' +import { routes as routers, guideEnRoutes, guideRoutes, aiRoutes } from './router' import loadable from '@loadable/component' import CodeBlock from './components/demoblock/codeblock' import { BackTop } from '../../../packages/backtop/backtop' @@ -82,11 +82,12 @@ const Content = () => { setFixed(false) } } - const isGuide = location.pathname.includes('/guide') + const isGuide = + location.pathname.includes('/guide') || location.pathname.includes('/ai/') useEffect(() => { document.addEventListener('scroll', scrollTitle) }, []) - const routes = [...routers, ...guideRoutes, ...guideEnRoutes] + const routes = [...routers, ...guideRoutes, ...guideEnRoutes, ...aiRoutes] return (
{!isGuide && ( diff --git a/src/sites/sites-react/doc/components/header/header.tsx b/src/sites/sites-react/doc/components/header/header.tsx index ba773e8f96..45bd79c415 100644 --- a/src/sites/sites-react/doc/components/header/header.tsx +++ b/src/sites/sites-react/doc/components/header/header.tsx @@ -88,6 +88,8 @@ const Header = () => { useEffect(() => { if (location.pathname.includes('/component')) { setActiveLink('组件') + } else if (location.pathname.includes('/ai/')) { + setActiveLink('AI') } }, [location]) const toAnother = () => { diff --git a/src/sites/sites-react/doc/components/nav/nav.tsx b/src/sites/sites-react/doc/components/nav/nav.tsx index 31a818c2ea..13a4f7790d 100644 --- a/src/sites/sites-react/doc/components/nav/nav.tsx +++ b/src/sites/sites-react/doc/components/nav/nav.tsx @@ -9,6 +9,7 @@ const Nav = () => { const [lang] = useLocale() const [fixed, setFixed] = useState(false) const [isGuide, setIsGuide] = useState(false) + const [isAi, setIsAi] = useState(false) const [activeName, setActiveName] = useState('') const scrollNav = () => { let top = document.documentElement.scrollTop @@ -31,6 +32,7 @@ const Nav = () => { } else { setIsGuide(false) } + setIsAi(location.pathname.includes('/ai/')) setActiveName(location.pathname.slice(location.pathname.lastIndexOf('/') + 1)) }, [location]) const changeNav = (_nav: any) => { @@ -41,7 +43,22 @@ const Nav = () => { const isZh = lang === 'zh-CN' return (
- {isGuide ? ( + {isAi ? ( +
    +
      +
    • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/ai/llms`} + > + LLMs.txt + +
    • +
    +
+ ) : isGuide ? (
      {docs.packages.map((_package) => ( diff --git a/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md b/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md new file mode 100644 index 0000000000..eb74a260f1 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md @@ -0,0 +1,52 @@ +# LLMs.txt + +This guide explains how to enable AI tools to better understand NutUI-React, so they generate more accurate code when working with NutUI-React. + +## What is LLMs.txt? + +We support [LLMs.txt](https://llmstxt.org/) files for making the NutUI-React documentation available to large language models (LLMs). This helps AI tools such as Cursor, GitHub Copilot, Claude and others better understand our component library, its APIs, and usage patterns, reducing hallucinated or incorrect code. + +Each component ships a plain-text `.md` document, so AI tools can precisely fetch usage, APIs, and style structure on demand without parsing the site's HTML. + +## Available Resources + +### LLMs.txt Aggregated Files + +We provide several aggregated files to help AI tools access the NutUI-React (H5, `@nutui/nutui-react`) documentation: + +| File | Description | +| --- | --- | +| [llms.txt](https://nutui.jd.com/h5/react/4x/llms.txt) | Navigation index with links to all component docs and style-structure files | +| [llms-full-cn.txt](https://nutui.jd.com/h5/react/4x/llms-full-cn.txt) | Complete component documentation (Chinese) with usage and examples | +| [llms-full.txt](https://nutui.jd.com/h5/react/4x/llms-full.txt) | Complete component documentation (English) | +| [llms-semantic-cn.txt](https://nutui.jd.com/h5/react/4x/llms-semantic-cn.txt) | Component style structure (Chinese) with CSS classes and CSS variables | +| [llms-semantic.txt](https://nutui.jd.com/h5/react/4x/llms-semantic.txt) | Component style structure (English) | + +### Single Component Documentation + +Append the component id (lowercase) under the site's `components/` path with a `.md` suffix to fetch that component's plain-text documentation, without loading the full file: + +- [`https://nutui.jd.com/h5/react/4x/components/button.md`](https://nutui.jd.com/h5/react/4x/components/button.md) +- [`https://nutui.jd.com/h5/react/4x/components/cell.md`](https://nutui.jd.com/h5/react/4x/components/cell.md) + +### Semantic Documentation + +Each component has a semantic (style structure) description file: + +- [`https://nutui.jd.com/h5/react/4x/components/button/semantic.md`](https://nutui.jd.com/h5/react/4x/components/button/semantic.md) + +Semantic documentation includes: + +- The CSS classes available on the component's rendered output and their purposes +- The overridable CSS variables (design tokens) +- Precise anchors for customizing styles and overriding themes + +## Usage with AI Tools + +| Tool | Description | Prompt | +| --- | --- | --- | +| **Cursor** | Use the `@Docs` feature to add the LLMs.txt URL, or add the prompt to `.cursor/rules`. [Documentation](https://docs.cursor.com/context/@-symbols/@-docs) | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **GitHub Copilot** | Reference the `llms.txt` URL in chat, or add `llms-full.txt` content to context. | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **Claude / Claude Code** | Add to `CLAUDE.md` or use `/memory` to persist. [Documentation](https://docs.anthropic.com/en/docs/claude-code) | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **Others** | Add the link to your knowledge base or docs source. | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **Custom RAG / Agent** | Fetch `llms.txt` to parse navigation, then request each component's `.md` on demand to build an index. | `Read https://nutui.jd.com/h5/react/4x/llms.txt for navigation, then fetch each component's .md on demand.` | diff --git a/src/sites/sites-react/doc/docs/ai-react/llms.md b/src/sites/sites-react/doc/docs/ai-react/llms.md new file mode 100644 index 0000000000..e8f7cf9bb7 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/llms.md @@ -0,0 +1,52 @@ +# LLMs.txt + +本篇介绍如何让 AI 工具更好地理解 NutUI-React,从而在使用 NutUI-React 编写代码时获得更准确的建议。 + +## 什么是 LLMs.txt? + +我们支持 [LLMs.txt](https://llmstxt.org/) 规范,将 NutUI-React 的文档以对大语言模型(LLM)友好的形式提供出来。借助这些文件,Cursor、GitHub Copilot、Claude、通义灵码等 AI 工具能够更准确地理解我们的组件库、API 与用法,减少「幻觉」式的错误代码。 + +每个组件都提供纯文本 `.md` 文档,AI 工具无需解析站点 HTML,即可按需精确拉取组件的用法、API 与样式结构。 + +## 可用资源 + +### LLMs.txt 聚合文件 + +我们提供了一组聚合文件,方便 AI 工具访问 NutUI-React(H5,`@nutui/nutui-react`)的文档: + +| 文件 | 说明 | +| --- | --- | +| [llms.txt](https://nutui.jd.com/h5/react/4x/llms.txt) | 文档导航索引,包含全部组件文档与样式结构文件的链接 | +| [llms-full-cn.txt](https://nutui.jd.com/h5/react/4x/llms-full-cn.txt) | 全部组件文档(中文),含用法说明与示例,可整体注入上下文 | +| [llms-full.txt](https://nutui.jd.com/h5/react/4x/llms-full.txt) | 全部组件文档(英文) | +| [llms-semantic-cn.txt](https://nutui.jd.com/h5/react/4x/llms-semantic-cn.txt) | 全部组件样式结构(中文),含 CSS class 与 CSS 变量 | +| [llms-semantic.txt](https://nutui.jd.com/h5/react/4x/llms-semantic.txt) | 全部组件样式结构(英文) | + +### 单组件文档 + +将组件的 id(小写)拼接到站点路径下的 `components/` 后,并加上 `.md` 后缀,即可获取该组件的纯文本文档,无需加载全量文件: + +- [`https://nutui.jd.com/h5/react/4x/components/button.md`](https://nutui.jd.com/h5/react/4x/components/button.md)(中文文档) +- [`https://nutui.jd.com/h5/react/4x/components/cell.md`](https://nutui.jd.com/h5/react/4x/components/cell.md) + +### 样式结构(Semantic)文档 + +每个组件都提供一份样式结构文档: + +- [`https://nutui.jd.com/h5/react/4x/components/button/semantic.md`](https://nutui.jd.com/h5/react/4x/components/button/semantic.md) + +样式结构文档包含: + +- 组件渲染产物中可用的 CSS class 及其用途 +- 可覆盖的 CSS 变量(设计 token) +- 便于自定义样式与主题覆盖时精确定位 + +## 配合 AI 工具使用 + +| 工具 | 使用方式 | 提示词 | +| --- | --- | --- | +| **Cursor** | 使用 `@Docs` 功能添加 LLMs.txt 地址,或将提示词写入 `.cursor/rules`。[文档](https://docs.cursor.com/context/@-symbols/@-docs) | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **GitHub Copilot** | 在对话中引用 `llms.txt` 链接,或将 `llms-full-cn.txt` 内容加入上下文。 | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **Claude / Claude Code** | 添加到 `CLAUDE.md` 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **通义灵码 / 其他** | 将链接添加到知识库或文档源。 | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **自建 RAG / Agent** | 抓取 `llms.txt` 解析导航,再按需请求各组件 `.md` 建立索引。 | `阅读 https://nutui.jd.com/h5/react/4x/llms.txt 获取文档导航,并按需拉取各组件的 .md 文档。` | diff --git a/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md new file mode 100644 index 0000000000..29181134e8 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md @@ -0,0 +1,52 @@ +# LLMs.txt + +This guide explains how to enable AI tools to better understand NutUI-React (Mini Program / Taro multi-platform), so they generate more accurate code when working with NutUI-React. + +## What is LLMs.txt? + +We support [LLMs.txt](https://llmstxt.org/) files for making the NutUI-React documentation available to large language models (LLMs). This helps AI tools such as Cursor, GitHub Copilot, Claude and others better understand our component library, its APIs, and usage patterns, reducing hallucinated or incorrect code. + +Each component ships a plain-text `.md` document, so AI tools can precisely fetch usage, APIs, and style structure on demand without parsing the site's HTML. + +## Available Resources + +### LLMs.txt Aggregated Files + +We provide several aggregated files to help AI tools access the NutUI-React (Mini Program, `@nutui/nutui-react-taro`) documentation: + +| File | Description | +| --- | --- | +| [llms.txt](https://nutui.jd.com/taro/react/4x/llms.txt) | Navigation index with links to all component docs and style-structure files | +| [llms-full-cn.txt](https://nutui.jd.com/taro/react/4x/llms-full-cn.txt) | Complete component documentation (Chinese) with usage and examples | +| [llms-semantic-cn.txt](https://nutui.jd.com/taro/react/4x/llms-semantic-cn.txt) | Component style structure (Chinese) with CSS classes and CSS variables | + +> The Mini Program platform does not yet provide the English full-text file (`llms-full.txt`) or the English style-structure file (`llms-semantic.txt`). For English documentation, refer to the [H5 platform](https://nutui.jd.com/h5/react/4x/llms.txt). + +### Single Component Documentation + +Append the component id (lowercase) under the site's `components/` path with a `.md` suffix to fetch that component's plain-text documentation, without loading the full file: + +- [`https://nutui.jd.com/taro/react/4x/components/button.md`](https://nutui.jd.com/taro/react/4x/components/button.md) +- [`https://nutui.jd.com/taro/react/4x/components/cell.md`](https://nutui.jd.com/taro/react/4x/components/cell.md) + +### Semantic Documentation + +Each component has a semantic (style structure) description file: + +- [`https://nutui.jd.com/taro/react/4x/components/button/semantic.md`](https://nutui.jd.com/taro/react/4x/components/button/semantic.md) + +Semantic documentation includes: + +- The CSS classes available on the component's rendered output and their purposes +- The overridable CSS variables (design tokens) +- Precise anchors for customizing styles and overriding themes + +## Usage with AI Tools + +| Tool | Description | Prompt | +| --- | --- | --- | +| **Cursor** | Use the `@Docs` feature to add the LLMs.txt URL, or add the prompt to `.cursor/rules`. [Documentation](https://docs.cursor.com/context/@-symbols/@-docs) | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **GitHub Copilot** | Reference the `llms.txt` URL in chat, or add `llms-full-cn.txt` content to context. | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **Claude / Claude Code** | Add to `CLAUDE.md` or use `/memory` to persist. [Documentation](https://docs.anthropic.com/en/docs/claude-code) | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **Others** | Add the link to your knowledge base or docs source. | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | +| **Custom RAG / Agent** | Fetch `llms.txt` to parse navigation, then request each component's `.md` on demand to build an index. | `Read https://nutui.jd.com/taro/react/4x/llms.txt for navigation, then fetch each component's .md on demand.` | diff --git a/src/sites/sites-react/doc/docs/ai-taro/llms.md b/src/sites/sites-react/doc/docs/ai-taro/llms.md new file mode 100644 index 0000000000..22e475875d --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-taro/llms.md @@ -0,0 +1,52 @@ +# LLMs.txt + +本篇介绍如何让 AI 工具更好地理解 NutUI-React(小程序 / Taro 多端),从而在使用 NutUI-React 编写代码时获得更准确的建议。 + +## 什么是 LLMs.txt? + +我们支持 [LLMs.txt](https://llmstxt.org/) 规范,将 NutUI-React 的文档以对大语言模型(LLM)友好的形式提供出来。借助这些文件,Cursor、GitHub Copilot、Claude、通义灵码等 AI 工具能够更准确地理解我们的组件库、API 与用法,减少「幻觉」式的错误代码。 + +每个组件都提供纯文本 `.md` 文档,AI 工具无需解析站点 HTML,即可按需精确拉取组件的用法、API 与样式结构。 + +## 可用资源 + +### LLMs.txt 聚合文件 + +我们提供了一组聚合文件,方便 AI 工具访问 NutUI-React(小程序,`@nutui/nutui-react-taro`)的文档: + +| 文件 | 说明 | +| --- | --- | +| [llms.txt](https://nutui.jd.com/taro/react/4x/llms.txt) | 文档导航索引,包含全部组件文档与样式结构文件的链接 | +| [llms-full-cn.txt](https://nutui.jd.com/taro/react/4x/llms-full-cn.txt) | 全部组件文档(中文),含用法说明与示例,可整体注入上下文 | +| [llms-semantic-cn.txt](https://nutui.jd.com/taro/react/4x/llms-semantic-cn.txt) | 全部组件样式结构(中文),含 CSS class 与 CSS 变量 | + +> 小程序端暂无英文全量文档(`llms-full.txt`)与英文样式结构文件(`llms-semantic.txt`)。如需英文文档,请参考 [H5 端](https://nutui.jd.com/h5/react/4x/llms.txt)。 + +### 单组件文档 + +将组件的 id(小写)拼接到站点路径下的 `components/` 后,并加上 `.md` 后缀,即可获取该组件的纯文本文档,无需加载全量文件: + +- [`https://nutui.jd.com/taro/react/4x/components/button.md`](https://nutui.jd.com/taro/react/4x/components/button.md)(中文文档) +- [`https://nutui.jd.com/taro/react/4x/components/cell.md`](https://nutui.jd.com/taro/react/4x/components/cell.md) + +### 样式结构(Semantic)文档 + +每个组件都提供一份样式结构文档: + +- [`https://nutui.jd.com/taro/react/4x/components/button/semantic.md`](https://nutui.jd.com/taro/react/4x/components/button/semantic.md) + +样式结构文档包含: + +- 组件渲染产物中可用的 CSS class 及其用途 +- 可覆盖的 CSS 变量(设计 token) +- 便于自定义样式与主题覆盖时精确定位 + +## 配合 AI 工具使用 + +| 工具 | 使用方式 | 提示词 | +| --- | --- | --- | +| **Cursor** | 使用 `@Docs` 功能添加 LLMs.txt 地址,或将提示词写入 `.cursor/rules`。[文档](https://docs.cursor.com/context/@-symbols/@-docs) | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **GitHub Copilot** | 在对话中引用 `llms.txt` 链接,或将 `llms-full-cn.txt` 内容加入上下文。 | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **Claude / Claude Code** | 添加到 `CLAUDE.md` 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **通义灵码 / 其他** | 将链接添加到知识库或文档源。 | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **自建 RAG / Agent** | 抓取 `llms.txt` 解析导航,再按需请求各组件 `.md` 建立索引。 | `阅读 https://nutui.jd.com/taro/react/4x/llms.txt 获取文档导航,并按需拉取各组件的 .md 文档。` | diff --git a/src/sites/sites-react/doc/router.ts b/src/sites/sites-react/doc/router.ts index fa7e1b2b66..cba8ef7a8f 100644 --- a/src/sites/sites-react/doc/router.ts +++ b/src/sites/sites-react/doc/router.ts @@ -67,4 +67,25 @@ for (const path in modulesEnDocs) { }); } -export {routes, guideRoutes, guideEnRoutes} \ No newline at end of file +const aiRoutes: any[] = [] +const modulesAiDocs = import.meta.glob('/src/sites/sites-react/doc/docs/ai-react/*.md'); +for (const path in modulesAiDocs) { + if (path.includes('.en-US.md')) continue; + let name = (/docs\/ai-react\/(.*).md/.exec(path) as any[])[1]; + aiRoutes.push({ + path: `/zh-CN/ai/${name}`, + component: modulesAiDocs[path], + name + }); +} +const modulesAiEnDocs = import.meta.glob('/src/sites/sites-react/doc/docs/ai-react/*.en-US.md'); +for (const path in modulesAiEnDocs) { + let name = (/docs\/ai-react\/(.*).en-US.md/.exec(path) as any[])[1]; + aiRoutes.push({ + path: `/en-US/ai/${name}`, + component: modulesAiEnDocs[path], + name: `en-${name}` + }); +} + +export {routes, guideRoutes, guideEnRoutes, aiRoutes} \ No newline at end of file From 530ef3c4ac4a14312d692dbc3607facc5743f6fa Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 10 Jul 2026 17:09:45 +0800 Subject: [PATCH 10/21] fix: correct formatting and punctuation in LLMs documentation for AI tools --- .../doc/docs/ai-react/llms.en-US.md | 7 ++-- .../sites-react/doc/docs/ai-react/llms.md | 31 +++++++++-------- .../doc/docs/ai-taro/llms.en-US.md | 7 ++-- .../sites-react/doc/docs/ai-taro/llms.md | 33 +++++++++---------- 4 files changed, 37 insertions(+), 41 deletions(-) diff --git a/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md b/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md index eb74a260f1..d9e6c49368 100644 --- a/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/llms.en-US.md @@ -26,14 +26,14 @@ We provide several aggregated files to help AI tools access the NutUI-React (H5, Append the component id (lowercase) under the site's `components/` path with a `.md` suffix to fetch that component's plain-text documentation, without loading the full file: -- [`https://nutui.jd.com/h5/react/4x/components/button.md`](https://nutui.jd.com/h5/react/4x/components/button.md) -- [`https://nutui.jd.com/h5/react/4x/components/cell.md`](https://nutui.jd.com/h5/react/4x/components/cell.md) +[`https://nutui.jd.com/h5/react/4x/components/button.md`](https://nutui.jd.com/h5/react/4x/components/button.md) +[`https://nutui.jd.com/h5/react/4x/components/cell.md`](https://nutui.jd.com/h5/react/4x/components/cell.md) ### Semantic Documentation Each component has a semantic (style structure) description file: -- [`https://nutui.jd.com/h5/react/4x/components/button/semantic.md`](https://nutui.jd.com/h5/react/4x/components/button/semantic.md) + [`https://nutui.jd.com/h5/react/4x/components/button/semantic.md`](https://nutui.jd.com/h5/react/4x/components/button/semantic.md) Semantic documentation includes: @@ -48,5 +48,4 @@ Semantic documentation includes: | **Cursor** | Use the `@Docs` feature to add the LLMs.txt URL, or add the prompt to `.cursor/rules`. [Documentation](https://docs.cursor.com/context/@-symbols/@-docs) | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | | **GitHub Copilot** | Reference the `llms.txt` URL in chat, or add `llms-full.txt` content to context. | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | | **Claude / Claude Code** | Add to `CLAUDE.md` or use `/memory` to persist. [Documentation](https://docs.anthropic.com/en/docs/claude-code) | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | -| **Others** | Add the link to your knowledge base or docs source. | `Read https://nutui.jd.com/h5/react/4x/llms-full.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | | **Custom RAG / Agent** | Fetch `llms.txt` to parse navigation, then request each component's `.md` on demand to build an index. | `Read https://nutui.jd.com/h5/react/4x/llms.txt for navigation, then fetch each component's .md on demand.` | diff --git a/src/sites/sites-react/doc/docs/ai-react/llms.md b/src/sites/sites-react/doc/docs/ai-react/llms.md index e8f7cf9bb7..52e36022db 100644 --- a/src/sites/sites-react/doc/docs/ai-react/llms.md +++ b/src/sites/sites-react/doc/docs/ai-react/llms.md @@ -1,39 +1,39 @@ # LLMs.txt -本篇介绍如何让 AI 工具更好地理解 NutUI-React,从而在使用 NutUI-React 编写代码时获得更准确的建议。 +本篇介绍如何让 AI 工具更好地理解 NutUI-React,从而在使用 NutUI-React 编写代码时获得更准确的建议。 ## 什么是 LLMs.txt? -我们支持 [LLMs.txt](https://llmstxt.org/) 规范,将 NutUI-React 的文档以对大语言模型(LLM)友好的形式提供出来。借助这些文件,Cursor、GitHub Copilot、Claude、通义灵码等 AI 工具能够更准确地理解我们的组件库、API 与用法,减少「幻觉」式的错误代码。 +我们支持 [LLMs.txt](https://llmstxt.org/) 规范,将 NutUI-React 的文档以对大语言模型(LLM)友好的形式提供出来。借助这些文件,Cursor、GitHub Copilot、Claude 等 AI 工具能够更准确地理解我们的组件库、API 与用法,减少「幻觉」式的错误代码。 -每个组件都提供纯文本 `.md` 文档,AI 工具无需解析站点 HTML,即可按需精确拉取组件的用法、API 与样式结构。 +每个组件都提供纯文本 `.md` 文档,AI 工具无需解析站点 HTML,即可按需精确拉取组件的用法、API 与样式结构。 ## 可用资源 ### LLMs.txt 聚合文件 -我们提供了一组聚合文件,方便 AI 工具访问 NutUI-React(H5,`@nutui/nutui-react`)的文档: +我们提供了一组聚合文件,方便 AI 工具访问 NutUI-React(H5,`@nutui/nutui-react`)的文档: | 文件 | 说明 | | --- | --- | -| [llms.txt](https://nutui.jd.com/h5/react/4x/llms.txt) | 文档导航索引,包含全部组件文档与样式结构文件的链接 | -| [llms-full-cn.txt](https://nutui.jd.com/h5/react/4x/llms-full-cn.txt) | 全部组件文档(中文),含用法说明与示例,可整体注入上下文 | +| [llms.txt](https://nutui.jd.com/h5/react/4x/llms.txt) | 文档导航索引,包含全部组件文档与样式结构文件的链接 | +| [llms-full-cn.txt](https://nutui.jd.com/h5/react/4x/llms-full-cn.txt) | 全部组件文档(中文),含用法说明与示例,可整体注入上下文 | | [llms-full.txt](https://nutui.jd.com/h5/react/4x/llms-full.txt) | 全部组件文档(英文) | -| [llms-semantic-cn.txt](https://nutui.jd.com/h5/react/4x/llms-semantic-cn.txt) | 全部组件样式结构(中文),含 CSS class 与 CSS 变量 | +| [llms-semantic-cn.txt](https://nutui.jd.com/h5/react/4x/llms-semantic-cn.txt) | 全部组件样式结构(中文),含 CSS class 与 CSS 变量 | | [llms-semantic.txt](https://nutui.jd.com/h5/react/4x/llms-semantic.txt) | 全部组件样式结构(英文) | ### 单组件文档 -将组件的 id(小写)拼接到站点路径下的 `components/` 后,并加上 `.md` 后缀,即可获取该组件的纯文本文档,无需加载全量文件: +将组件的 id(小写)拼接到站点路径下的 `components/` 后,并加上 `.md` 后缀,即可获取该组件的纯文本文档,无需加载全量文件: -- [`https://nutui.jd.com/h5/react/4x/components/button.md`](https://nutui.jd.com/h5/react/4x/components/button.md)(中文文档) -- [`https://nutui.jd.com/h5/react/4x/components/cell.md`](https://nutui.jd.com/h5/react/4x/components/cell.md) +[`https://nutui.jd.com/h5/react/4x/components/button.md`](https://nutui.jd.com/h5/react/4x/components/button.md) +[`https://nutui.jd.com/h5/react/4x/components/cell.md`](https://nutui.jd.com/h5/react/4x/components/cell.md) ### 样式结构(Semantic)文档 每个组件都提供一份样式结构文档: -- [`https://nutui.jd.com/h5/react/4x/components/button/semantic.md`](https://nutui.jd.com/h5/react/4x/components/button/semantic.md) +[`https://nutui.jd.com/h5/react/4x/components/button/semantic.md`](https://nutui.jd.com/h5/react/4x/components/button/semantic.md) 样式结构文档包含: @@ -45,8 +45,7 @@ | 工具 | 使用方式 | 提示词 | | --- | --- | --- | -| **Cursor** | 使用 `@Docs` 功能添加 LLMs.txt 地址,或将提示词写入 `.cursor/rules`。[文档](https://docs.cursor.com/context/@-symbols/@-docs) | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **GitHub Copilot** | 在对话中引用 `llms.txt` 链接,或将 `llms-full-cn.txt` 内容加入上下文。 | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **Claude / Claude Code** | 添加到 `CLAUDE.md` 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **通义灵码 / 其他** | 将链接添加到知识库或文档源。 | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **自建 RAG / Agent** | 抓取 `llms.txt` 解析导航,再按需请求各组件 `.md` 建立索引。 | `阅读 https://nutui.jd.com/h5/react/4x/llms.txt 获取文档导航,并按需拉取各组件的 .md 文档。` | +| **Cursor** | 使用 `@Docs` 功能添加 LLMs.txt 地址,或将提示词写入 `.cursor/rules`。[文档](https://docs.cursor.com/context/@-symbols/@-docs) | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **GitHub Copilot** | 在对话中引用 `llms.txt` 链接,或将 `llms-full-cn.txt` 内容加入上下文。 | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **Claude / Claude Code** | 添加到 `CLAUDE.md` 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **自建 RAG / Agent** | 抓取 `llms.txt` 解析导航,再按需请求各组件 `.md` 建立索引。 | `阅读 https://nutui.jd.com/h5/react/4x/llms.txt 获取文档导航,并按需拉取各组件的 .md 文档。` | diff --git a/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md b/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md index 29181134e8..c4481db724 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-taro/llms.en-US.md @@ -26,14 +26,14 @@ We provide several aggregated files to help AI tools access the NutUI-React (Min Append the component id (lowercase) under the site's `components/` path with a `.md` suffix to fetch that component's plain-text documentation, without loading the full file: -- [`https://nutui.jd.com/taro/react/4x/components/button.md`](https://nutui.jd.com/taro/react/4x/components/button.md) -- [`https://nutui.jd.com/taro/react/4x/components/cell.md`](https://nutui.jd.com/taro/react/4x/components/cell.md) +[`https://nutui.jd.com/taro/react/4x/components/button.md`](https://nutui.jd.com/taro/react/4x/components/button.md) +[`https://nutui.jd.com/taro/react/4x/components/cell.md`](https://nutui.jd.com/taro/react/4x/components/cell.md) ### Semantic Documentation Each component has a semantic (style structure) description file: -- [`https://nutui.jd.com/taro/react/4x/components/button/semantic.md`](https://nutui.jd.com/taro/react/4x/components/button/semantic.md) +[`https://nutui.jd.com/taro/react/4x/components/button/semantic.md`](https://nutui.jd.com/taro/react/4x/components/button/semantic.md) Semantic documentation includes: @@ -48,5 +48,4 @@ Semantic documentation includes: | **Cursor** | Use the `@Docs` feature to add the LLMs.txt URL, or add the prompt to `.cursor/rules`. [Documentation](https://docs.cursor.com/context/@-symbols/@-docs) | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | | **GitHub Copilot** | Reference the `llms.txt` URL in chat, or add `llms-full-cn.txt` content to context. | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | | **Claude / Claude Code** | Add to `CLAUDE.md` or use `/memory` to persist. [Documentation](https://docs.anthropic.com/en/docs/claude-code) | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | -| **Others** | Add the link to your knowledge base or docs source. | `Read https://nutui.jd.com/taro/react/4x/llms-full-cn.txt and understand NutUI-React components. Use this knowledge when writing code with NutUI-React.` | | **Custom RAG / Agent** | Fetch `llms.txt` to parse navigation, then request each component's `.md` on demand to build an index. | `Read https://nutui.jd.com/taro/react/4x/llms.txt for navigation, then fetch each component's .md on demand.` | diff --git a/src/sites/sites-react/doc/docs/ai-taro/llms.md b/src/sites/sites-react/doc/docs/ai-taro/llms.md index 22e475875d..91a79c335e 100644 --- a/src/sites/sites-react/doc/docs/ai-taro/llms.md +++ b/src/sites/sites-react/doc/docs/ai-taro/llms.md @@ -1,39 +1,39 @@ # LLMs.txt -本篇介绍如何让 AI 工具更好地理解 NutUI-React(小程序 / Taro 多端),从而在使用 NutUI-React 编写代码时获得更准确的建议。 +本篇介绍如何让 AI 工具更好地理解 NutUI-React(小程序 / Taro 多端),从而在使用 NutUI-React 编写代码时获得更准确的建议。 ## 什么是 LLMs.txt? -我们支持 [LLMs.txt](https://llmstxt.org/) 规范,将 NutUI-React 的文档以对大语言模型(LLM)友好的形式提供出来。借助这些文件,Cursor、GitHub Copilot、Claude、通义灵码等 AI 工具能够更准确地理解我们的组件库、API 与用法,减少「幻觉」式的错误代码。 +我们支持 [LLMs.txt](https://llmstxt.org/) 规范,将 NutUI-React 的文档以对大语言模型(LLM)友好的形式提供出来。借助这些文件,Cursor、GitHub Copilot、Claude、通义灵码等 AI 工具能够更准确地理解我们的组件库、API 与用法,减少「幻觉」式的错误代码。 -每个组件都提供纯文本 `.md` 文档,AI 工具无需解析站点 HTML,即可按需精确拉取组件的用法、API 与样式结构。 +每个组件都提供纯文本 `.md` 文档,AI 工具无需解析站点 HTML,即可按需精确拉取组件的用法、API 与样式结构。 ## 可用资源 ### LLMs.txt 聚合文件 -我们提供了一组聚合文件,方便 AI 工具访问 NutUI-React(小程序,`@nutui/nutui-react-taro`)的文档: +我们提供了一组聚合文件,方便 AI 工具访问 NutUI-React(小程序,`@nutui/nutui-react-taro`)的文档: | 文件 | 说明 | | --- | --- | -| [llms.txt](https://nutui.jd.com/taro/react/4x/llms.txt) | 文档导航索引,包含全部组件文档与样式结构文件的链接 | -| [llms-full-cn.txt](https://nutui.jd.com/taro/react/4x/llms-full-cn.txt) | 全部组件文档(中文),含用法说明与示例,可整体注入上下文 | -| [llms-semantic-cn.txt](https://nutui.jd.com/taro/react/4x/llms-semantic-cn.txt) | 全部组件样式结构(中文),含 CSS class 与 CSS 变量 | +| [llms.txt](https://nutui.jd.com/taro/react/4x/llms.txt) | 文档导航索引,包含全部组件文档与样式结构文件的链接 | +| [llms-full-cn.txt](https://nutui.jd.com/taro/react/4x/llms-full-cn.txt) | 全部组件文档(中文),含用法说明与示例,可整体注入上下文 | +| [llms-semantic-cn.txt](https://nutui.jd.com/taro/react/4x/llms-semantic-cn.txt) | 全部组件样式结构(中文),含 CSS class 与 CSS 变量 | -> 小程序端暂无英文全量文档(`llms-full.txt`)与英文样式结构文件(`llms-semantic.txt`)。如需英文文档,请参考 [H5 端](https://nutui.jd.com/h5/react/4x/llms.txt)。 +> 小程序端暂无英文全量文档(`llms-full.txt`)与英文样式结构文件(`llms-semantic.txt`)。如需英文文档,请参考 [H5 端](https://nutui.jd.com/h5/react/4x/llms.txt)。 ### 单组件文档 -将组件的 id(小写)拼接到站点路径下的 `components/` 后,并加上 `.md` 后缀,即可获取该组件的纯文本文档,无需加载全量文件: +将组件的 id(小写)拼接到站点路径下的 `components/` 后,并加上 `.md` 后缀,即可获取该组件的纯文本文档,无需加载全量文件: -- [`https://nutui.jd.com/taro/react/4x/components/button.md`](https://nutui.jd.com/taro/react/4x/components/button.md)(中文文档) -- [`https://nutui.jd.com/taro/react/4x/components/cell.md`](https://nutui.jd.com/taro/react/4x/components/cell.md) +[`https://nutui.jd.com/taro/react/4x/components/button.md`](https://nutui.jd.com/taro/react/4x/components/button.md)(中文文档) +[`https://nutui.jd.com/taro/react/4x/components/cell.md`](https://nutui.jd.com/taro/react/4x/components/cell.md) ### 样式结构(Semantic)文档 每个组件都提供一份样式结构文档: -- [`https://nutui.jd.com/taro/react/4x/components/button/semantic.md`](https://nutui.jd.com/taro/react/4x/components/button/semantic.md) +[`https://nutui.jd.com/taro/react/4x/components/button/semantic.md`](https://nutui.jd.com/taro/react/4x/components/button/semantic.md) 样式结构文档包含: @@ -45,8 +45,7 @@ | 工具 | 使用方式 | 提示词 | | --- | --- | --- | -| **Cursor** | 使用 `@Docs` 功能添加 LLMs.txt 地址,或将提示词写入 `.cursor/rules`。[文档](https://docs.cursor.com/context/@-symbols/@-docs) | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **GitHub Copilot** | 在对话中引用 `llms.txt` 链接,或将 `llms-full-cn.txt` 内容加入上下文。 | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **Claude / Claude Code** | 添加到 `CLAUDE.md` 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **通义灵码 / 其他** | 将链接添加到知识库或文档源。 | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | -| **自建 RAG / Agent** | 抓取 `llms.txt` 解析导航,再按需请求各组件 `.md` 建立索引。 | `阅读 https://nutui.jd.com/taro/react/4x/llms.txt 获取文档导航,并按需拉取各组件的 .md 文档。` | +| **Cursor** | 使用 `@Docs` 功能添加 LLMs.txt 地址,或将提示词写入 `.cursor/rules`。[文档](https://docs.cursor.com/context/@-symbols/@-docs) | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **GitHub Copilot** | 在对话中引用 `llms.txt` 链接,或将 `llms-full-cn.txt` 内容加入上下文。 | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **Claude / Claude Code** | 添加到 `CLAUDE.md` 或使用 `/memory` 持久化。[文档](https://docs.anthropic.com/en/docs/claude-code) | `阅读 https://nutui.jd.com/taro/react/4x/llms-full-cn.txt 并理解 NutUI-React 组件,在编写 NutUI-React 代码时运用这些知识。` | +| **自建 RAG / Agent** | 抓取 `llms.txt` 解析导航,再按需请求各组件 `.md` 建立索引。 | `阅读 https://nutui.jd.com/taro/react/4x/llms.txt 获取文档导航,并按需拉取各组件的 .md 文档。` | From 672494e6b24dd095236b86abcd894ec9474de0de Mon Sep 17 00:00:00 2001 From: alvinhui Date: Fri, 10 Jul 2026 17:15:02 +0800 Subject: [PATCH 11/21] fix: convert paths to POSIX format in Sass @import to support Windows Co-Authored-By: Claude --- scripts/build-semantic.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/build-semantic.mjs b/scripts/build-semantic.mjs index 79225eb349..ddfc27ff30 100644 --- a/scripts/build-semantic.mjs +++ b/scripts/build-semantic.mjs @@ -32,7 +32,9 @@ const SILENCE = [ // 编译单个组件 scss,用 postcss 提取全部 .nut-* class 名(去 . 前缀)。失败返回 null。 function extractClasses(scssPath) { - const entry = `@import '${VARIABLES_PATH}';\n@import '${scssPath}';` + // Sass @import 字符串里反斜杠是转义字符,Windows 路径需转 POSIX 正斜杠(各平台通用)。 + const toPosix = (p) => p.replace(/\\/g, '/') + const entry = `@import '${toPosix(VARIABLES_PATH)}';\n@import '${toPosix(scssPath)}';` let css try { ;({ css } = sass.compileString(entry, { From e79593e9096a72fdd10d5b394a21b99747622d65 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 15 Jul 2026 20:42:07 +0800 Subject: [PATCH 12/21] feat: add @nutui/nutui-react-cli package for AI coding support --- packages/nutui-react-cli/.gitignore | 5 + packages/nutui-react-cli/README.md | 70 ++++++ packages/nutui-react-cli/package.json | 53 +++++ .../nutui-react-cli/scripts/prepare-data.mjs | 83 +++++++ packages/nutui-react-cli/src/cli.ts | 111 ++++++++++ .../nutui-react-cli/src/commands/_shared.ts | 14 ++ packages/nutui-react-cli/src/commands/demo.ts | 51 +++++ packages/nutui-react-cli/src/commands/doc.ts | 34 +++ packages/nutui-react-cli/src/commands/info.ts | 48 +++++ packages/nutui-react-cli/src/commands/list.ts | 56 +++++ .../nutui-react-cli/src/commands/token.ts | 43 ++++ packages/nutui-react-cli/src/data.ts | 93 ++++++++ packages/nutui-react-cli/src/format.ts | 43 ++++ packages/nutui-react-cli/src/types.ts | 76 +++++++ packages/nutui-react-cli/tsconfig.json | 19 ++ packages/nutui-react-cli/tsup.config.ts | 15 ++ pnpm-lock.yaml | 203 +++++++++++++++--- pnpm-workspace.yaml | 3 +- 18 files changed, 987 insertions(+), 33 deletions(-) create mode 100644 packages/nutui-react-cli/.gitignore create mode 100644 packages/nutui-react-cli/README.md create mode 100644 packages/nutui-react-cli/package.json create mode 100644 packages/nutui-react-cli/scripts/prepare-data.mjs create mode 100644 packages/nutui-react-cli/src/cli.ts create mode 100644 packages/nutui-react-cli/src/commands/_shared.ts create mode 100644 packages/nutui-react-cli/src/commands/demo.ts create mode 100644 packages/nutui-react-cli/src/commands/doc.ts create mode 100644 packages/nutui-react-cli/src/commands/info.ts create mode 100644 packages/nutui-react-cli/src/commands/list.ts create mode 100644 packages/nutui-react-cli/src/commands/token.ts create mode 100644 packages/nutui-react-cli/src/data.ts create mode 100644 packages/nutui-react-cli/src/format.ts create mode 100644 packages/nutui-react-cli/src/types.ts create mode 100644 packages/nutui-react-cli/tsconfig.json create mode 100644 packages/nutui-react-cli/tsup.config.ts diff --git a/packages/nutui-react-cli/.gitignore b/packages/nutui-react-cli/.gitignore new file mode 100644 index 0000000000..f3f54af74e --- /dev/null +++ b/packages/nutui-react-cli/.gitignore @@ -0,0 +1,5 @@ +node_modules +dist +data +.DS_Store +*.log diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md new file mode 100644 index 0000000000..4b515a7a3f --- /dev/null +++ b/packages/nutui-react-cli/README.md @@ -0,0 +1,70 @@ +# @nutui/nutui-react-cli + +面向 AI Coding 的 **NutUI React 离线知识查询 CLI**。把组件的 Props、文档、示例、Design Token 打包随包分发,让 AI 编程助手(Claude Code / Cursor / Copilot 等)从「猜 API」变成「查 API」,从根源消除 API 幻觉。 + +## 特点 + +- **完全离线、零 API Key**:组件元数据与文档/示例在构建期打包进入,安装后本地毫秒级查询。 +- **结构化输出**:所有命令支持 `--format json`,供 Agent 直接解析,而非正则抓文本。 +- **拼写纠错**:组件名大小写不敏感,未命中时给出「你是否想找」建议。 + +## 使用 + +免安装(推荐): + +```bash +npx @nutui/nutui-react-cli list +npx @nutui/nutui-react-cli info Button +``` + +或全局安装后用 `nutui-react` 命令: + +```bash +npm i -g @nutui/nutui-react-cli +nutui-react info Button --format json +``` + +## 命令 + +| 命令 | 说明 | +| --- | --- | +| `nutui-react list [--category ]` | 按分类列出全部组件(名称 / 中文名 / 版本) | +| `nutui-react info ` | 查看组件 Props 表(属性 / 说明 / 类型 / 默认值) | +| `nutui-react doc [--lang zh\|en]` | 查看组件完整文档,默认中文 | +| `nutui-react demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | +| `nutui-react token [Component]` | 查看 Design Token;省略组件名则列出全局 token | + +全局选项:`--format, -f `(默认 `text`)、`--help, -h`、`--version, -v`。 + +示例: + +```bash +nutui-react list --category feedback +nutui-react info Button --format json +nutui-react doc Button --lang en +nutui-react demo Button # 列出示例 +nutui-react demo Button demo1 # 查看某个示例源码 +nutui-react token Button +``` + +## 本地开发 + +```bash +# 仓库根:确保 meta 最新 +npm run generate:meta +# 本包:构建(prepare-data + tsup) +pnpm --dir packages/nutui-react-cli build +# 本地试跑 +node packages/nutui-react-cli/dist/cli.js list +``` + +## 发布 + +```bash +# 1. 仓库根:确保 meta 最新(读 src/config.json 等,幂等可重复) +npm run generate:meta +# 2. 发布 beta(bumpp 选版本 -> prepublishOnly 跑 build -> pnpm publish --tag beta) +pnpm --dir packages/nutui-react-cli release:beta +# 或发布正式版 +pnpm --dir packages/nutui-react-cli release +``` diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json new file mode 100644 index 0000000000..b8986841b8 --- /dev/null +++ b/packages/nutui-react-cli/package.json @@ -0,0 +1,53 @@ +{ + "name": "@nutui/nutui-react-cli", + "version": "0.0.1", + "type": "module", + "description": "NutUI React 面向 AI Coding 的离线知识查询 CLI:list / info / doc / demo / token。", + "keywords": [ + "nutui", + "nutui-react", + "cli", + "ai-coding", + "llm", + "react component" + ], + "license": "MIT", + "author": "jdcfe", + "homepage": "https://github.com/jdf2e/nutui-react.git", + "repository": { + "type": "git", + "url": "https://github.com/jdf2e/nutui-react.git" + }, + "bin": { + "nutui-react": "./dist/cli.js" + }, + "files": [ + "dist", + "data" + ], + "engines": { + "node": ">=18.12.0" + }, + "publishConfig": { + "access": "public" + }, + "scripts": { + "prepare-data": "node scripts/prepare-data.mjs", + "build": "node scripts/prepare-data.mjs && tsup", + "dev": "tsup --watch", + "typecheck": "tsc --noEmit", + "prepublishOnly": "pnpm run build", + "release": "bumpp && pnpm publish", + "release:beta": "bumpp --preid beta && pnpm publish --tag beta" + }, + "dependencies": { + "yargs": "^17.7.2" + }, + "devDependencies": { + "@types/node": "^22.5.5", + "@types/yargs": "^17.0.33", + "bumpp": "^9.5.2", + "tsup": "^8.3.0", + "typescript": "^5.6.2" + } +} diff --git a/packages/nutui-react-cli/scripts/prepare-data.mjs b/packages/nutui-react-cli/scripts/prepare-data.mjs new file mode 100644 index 0000000000..86a13d72dc --- /dev/null +++ b/packages/nutui-react-cli/scripts/prepare-data.mjs @@ -0,0 +1,83 @@ +// 读仓库根 meta/components.json,为 @nutui/nutui-react-cli 产出自包含的 data/ 快照。 +// 仅 React(H5)端:docs 取 h5(中文)/enUS(英文),demos 取 h5。忽略 zhTW / taro 维度。 +// 让发布后的 CLI 无需依赖仓库源码即可离线运行 doc / demo 命令。 +// DO NOT manual edit the output (data/). Run: pnpm run prepare-data +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const PKG_DIR = path.resolve(__dirname, '..') +// 仓库根:packages/nutui-react-cli/scripts -> ../../.. +const REPO_ROOT = path.resolve(PKG_DIR, '..', '..') +const META_PATH = path.join(REPO_ROOT, 'meta/components.json') +const DATA_DIR = path.join(PKG_DIR, 'data') + +// meta.docs 的 key -> CLI 语言维度。仅保留 React/H5 端用到的两种。 +const DOC_KEYS = ['h5', 'enUS'] + +function readMeta() { + if (!fs.existsSync(META_PATH)) { + console.error( + `❌ 未找到 ${path.relative(REPO_ROOT, META_PATH)}。\n` + + ` 它是构建产物,请先在仓库根执行:npm run generate:meta` + ) + process.exit(1) + } + return JSON.parse(fs.readFileSync(META_PATH, 'utf-8')) +} + +// meta 里的路径始终是 posix 相对仓库根路径,用 posix 取 basename,再 join 到本地。 +function copyRepoFile(relPosixPath, destAbs) { + const srcAbs = path.join(REPO_ROOT, relPosixPath) + if (!fs.existsSync(srcAbs)) return false + fs.mkdirSync(path.dirname(destAbs), { recursive: true }) + fs.copyFileSync(srcAbs, destAbs) + return true +} + +function main() { + console.log('🚀 building @nutui/nutui-react-cli data snapshot (React/H5) ...') + const meta = readMeta() + + // 全量重建,避免残留上一版删掉的组件。 + fs.rmSync(DATA_DIR, { recursive: true, force: true }) + fs.mkdirSync(DATA_DIR, { recursive: true }) + + // 1. meta.json 逐字复制。 + fs.copyFileSync(META_PATH, path.join(DATA_DIR, 'meta.json')) + + let docCount = 0 + let demoCount = 0 + const missing = [] + + for (const c of Object.values(meta.components)) { + // 2. docs:仅 h5 / enUS 的非 null 路径。 + for (const key of DOC_KEYS) { + const rel = c.docs && c.docs[key] + if (!rel) continue + const ok = copyRepoFile(rel, path.join(DATA_DIR, 'docs', c.id, `${key}.md`)) + if (ok) docCount++ + else missing.push(rel) + } + + // 3. demos:仅 H5,扁平放到 data/demos//.tsx(无 platform 子层)。 + const h5Demos = (c.demos && c.demos.h5) || [] + for (const rel of h5Demos) { + const base = path.posix.basename(rel) + const ok = copyRepoFile(rel, path.join(DATA_DIR, 'demos', c.id, base)) + if (ok) demoCount++ + else missing.push(rel) + } + } + + console.log(`✅ 写入 ${path.relative(PKG_DIR, DATA_DIR)}/`) + console.log(` meta.json + docs ${docCount} 份 + demos ${demoCount} 份`) + if (missing.length) { + console.log(`\n⚠️ ${missing.length} 个 meta 引用的文件在仓库中缺失(已跳过):`) + for (const m of missing.slice(0, 20)) console.log(` - ${m}`) + if (missing.length > 20) console.log(` … 其余 ${missing.length - 20} 条省略`) + } +} + +main() diff --git a/packages/nutui-react-cli/src/cli.ts b/packages/nutui-react-cli/src/cli.ts new file mode 100644 index 0000000000..071b90ec30 --- /dev/null +++ b/packages/nutui-react-cli/src/cli.ts @@ -0,0 +1,111 @@ +import yargs from 'yargs' +import { hideBin } from 'yargs/helpers' +import { runList } from './commands/list.js' +import { runInfo } from './commands/info.js' +import { runDoc } from './commands/doc.js' +import { runDemo } from './commands/demo.js' +import { runToken } from './commands/token.js' +import type { Lang, OutputFormat } from './types.js' + +// eslint-disable-next-line @typescript-eslint/no-floating-promises +yargs(hideBin(process.argv)) + .scriptName('nutui-react') + .usage('$0 [options]') + .option('format', { + alias: 'f', + describe: '输出格式', + choices: ['text', 'json'] as const, + default: 'text' as OutputFormat, + global: true, + }) + .command( + ['list', 'ls'], + '列出全部组件(按分类)', + (y) => + y.option('category', { + alias: 'c', + type: 'string', + describe: '按分类 enName 筛选(如 base / feedback)', + }), + (argv) => + runList({ category: argv.category, format: argv.format as OutputFormat }) + ) + .command( + 'info ', + '查看组件 Props 表', + (y) => + y.positional('component', { + type: 'string', + describe: '组件名(大小写不敏感,如 Button)', + demandOption: true, + }), + (argv) => + runInfo({ + component: argv.component as string, + format: argv.format as OutputFormat, + }) + ) + .command( + 'doc ', + '查看组件完整文档', + (y) => + y + .positional('component', { + type: 'string', + describe: '组件名(大小写不敏感)', + demandOption: true, + }) + .option('lang', { + alias: 'l', + choices: ['zh', 'en'] as const, + default: 'zh' as Lang, + describe: '文档语言', + }), + (argv) => + runDoc({ + component: argv.component as string, + lang: argv.lang as Lang, + format: argv.format as OutputFormat, + }) + ) + .command( + 'demo [name]', + '列出或查看组件 H5 示例源码', + (y) => + y + .positional('component', { + type: 'string', + describe: '组件名(大小写不敏感)', + demandOption: true, + }) + .positional('name', { + type: 'string', + describe: '示例名(如 demo1);省略则列出全部', + }), + (argv) => + runDemo({ + component: argv.component as string, + name: argv.name as string | undefined, + format: argv.format as OutputFormat, + }) + ) + .command( + 'token [component]', + '查看 Design Token(省略组件名则列全局 token)', + (y) => + y.positional('component', { + type: 'string', + describe: '组件名(大小写不敏感);省略则列出全局 token', + }), + (argv) => + runToken({ + component: argv.component as string | undefined, + format: argv.format as OutputFormat, + }) + ) + .demandCommand(1, '请指定一个命令。运行 nutui-react --help 查看用法。') + .strict() + .alias('h', 'help') + .alias('v', 'version') + .wrap(null) + .parse() diff --git a/packages/nutui-react-cli/src/commands/_shared.ts b/packages/nutui-react-cli/src/commands/_shared.ts new file mode 100644 index 0000000000..3c48acfdce --- /dev/null +++ b/packages/nutui-react-cli/src/commands/_shared.ts @@ -0,0 +1,14 @@ +// 命令间共享:解析组件名,未命中则打印 did-you-mean 并退出。 +import { resolveComponent, suggestComponents } from '../data.js' +import type { Component, Meta } from '../types.js' + +export function resolveOrExit(meta: Meta, query: string): Component { + const comp = resolveComponent(meta, query) + if (comp) return comp + const suggestions = suggestComponents(meta, query) + let msg = `未找到组件「${query}」。` + if (suggestions.length) msg += ` 你是否想找:${suggestions.join(' / ')}?` + msg += `\n运行 nutui-react list 查看全部组件。` + process.stderr.write(`${msg}\n`) + process.exit(1) +} diff --git a/packages/nutui-react-cli/src/commands/demo.ts b/packages/nutui-react-cli/src/commands/demo.ts new file mode 100644 index 0000000000..df64564c30 --- /dev/null +++ b/packages/nutui-react-cli/src/commands/demo.ts @@ -0,0 +1,51 @@ +// nutui-react demo [name] —— 列出或输出 H5 demo 源码。 +import { listDemos, loadMeta, readDemo } from '../data.js' +import { output } from '../format.js' +import { resolveOrExit } from './_shared.js' +import type { OutputFormat } from '../types.js' + +export interface DemoArgs { + component: string + name?: string + format: OutputFormat +} + +export function runDemo(args: DemoArgs): void { + const meta = loadMeta() + const comp = resolveOrExit(meta, args.component) + const demos = listDemos(comp) + + // 无 name:列出全部 demo 文件名。 + if (!args.name) { + const jsonData = { id: comp.id, name: comp.name, demos } + output(args.format, jsonData, () => { + if (!demos.length) return `${comp.name} ${comp.cName} 暂无 H5 示例。` + return `${comp.name} ${comp.cName} 的 H5 示例(${demos.length} 个):\n${demos + .map((d) => ` - ${d}`) + .join('\n')}\n\n查看源码:nutui-react demo ${comp.name} ${demos[0]}` + }) + return + } + + // 有 name:输出该 demo 源码。 + const code = readDemo(comp, args.name) + if (code === null) { + const jsonData = { + id: comp.id, + name: comp.name, + demo: args.name, + code: null, + } + output(args.format, jsonData, () => { + const avail = demos.length + ? `可选:${demos.join(' / ')}` + : '该组件暂无 H5 示例' + return `未找到示例「${args.name}」。${avail}` + }) + process.exitCode = 1 + return + } + + const jsonData = { id: comp.id, name: comp.name, demo: args.name, code } + output(args.format, jsonData, () => code) +} diff --git a/packages/nutui-react-cli/src/commands/doc.ts b/packages/nutui-react-cli/src/commands/doc.ts new file mode 100644 index 0000000000..ea9d2936d8 --- /dev/null +++ b/packages/nutui-react-cli/src/commands/doc.ts @@ -0,0 +1,34 @@ +// nutui-react doc [--lang zh|en] —— 输出组件完整文档原文。 +import { loadMeta, readDoc } from '../data.js' +import { output } from '../format.js' +import { resolveOrExit } from './_shared.js' +import type { Lang, OutputFormat } from '../types.js' + +export interface DocArgs { + component: string + lang: Lang + format: OutputFormat +} + +export function runDoc(args: DocArgs): void { + const meta = loadMeta() + const comp = resolveOrExit(meta, args.component) + const content = readDoc(comp, args.lang) + + if (content === null) { + const jsonData = { + id: comp.id, + name: comp.name, + lang: args.lang, + content: null, + } + output(args.format, jsonData, () => { + const langName = args.lang === 'en' ? '英文' : '中文' + return `${comp.name} ${comp.cName} 暂无${langName}文档(可能是隐藏子组件)。` + }) + return + } + + const jsonData = { id: comp.id, name: comp.name, lang: args.lang, content } + output(args.format, jsonData, () => content) +} diff --git a/packages/nutui-react-cli/src/commands/info.ts b/packages/nutui-react-cli/src/commands/info.ts new file mode 100644 index 0000000000..cfbb3b82b6 --- /dev/null +++ b/packages/nutui-react-cli/src/commands/info.ts @@ -0,0 +1,48 @@ +// nutui-react info —— 输出组件 Props 表。 +import { loadMeta } from '../data.js' +import { output, renderTable } from '../format.js' +import { resolveOrExit } from './_shared.js' +import type { OutputFormat } from '../types.js' + +export interface InfoArgs { + component: string + format: OutputFormat +} + +export function runInfo(args: InfoArgs): void { + const meta = loadMeta() + const comp = resolveOrExit(meta, args.component) + const tables = comp.api?.tables ?? [] + const propTables = tables.filter((t) => t.kind === 'props') + + const jsonData = { + id: comp.id, + name: comp.name, + cName: comp.cName, + version: comp.version, + tables: propTables.map((t) => ({ + name: t.name, + subComponent: t.subComponent, + rows: t.rows, + })), + } + + output(args.format, jsonData, () => { + if (!propTables.length) { + const others = tables.map((t) => `${t.name}(${t.kind})`).join('、') + let msg = `${comp.name} ${comp.cName} 没有 Props 表` + msg += others + ? `。它可能是布局/子组件;现有其它表:${others}。` + : `(可能是布局或纯样式组件)。` + return msg + } + const blocks = propTables.map((t) => { + const title = t.subComponent + ? `${t.name}(${comp.name}.${t.subComponent})` + : t.name + const rows = t.rows.map((r) => [r.prop, r.desc, r.type, r.default]) + return `▍${title}\n${renderTable(['属性', '说明', '类型', '默认值'], rows)}` + }) + return `${comp.name} ${comp.cName}(v${comp.version})\n\n${blocks.join('\n\n')}` + }) +} diff --git a/packages/nutui-react-cli/src/commands/list.ts b/packages/nutui-react-cli/src/commands/list.ts new file mode 100644 index 0000000000..1e14e1aaf3 --- /dev/null +++ b/packages/nutui-react-cli/src/commands/list.ts @@ -0,0 +1,56 @@ +// nutui-react list —— 按分类列出组件。 +import { loadMeta } from '../data.js' +import { output, renderTable } from '../format.js' +import type { OutputFormat } from '../types.js' + +export interface ListArgs { + category?: string + format: OutputFormat +} + +export function runList(args: ListArgs): void { + const meta = loadMeta() + let categories = meta.categories + if (args.category) { + const key = args.category.toLowerCase() + categories = categories.filter( + (c) => c.enName.toLowerCase() === key || c.name === args.category + ) + if (!categories.length) { + const all = meta.categories.map((c) => c.enName).join(' / ') + process.stderr.write(`未找到分类「${args.category}」。可选:${all}\n`) + process.exit(1) + } + } + + const jsonData = categories.map((cat) => ({ + name: cat.name, + enName: cat.enName, + components: cat.components + .map((id) => meta.components[id]) + .filter(Boolean) + .map((c) => ({ + id: c.id, + name: c.name, + cName: c.cName, + version: c.version, + })), + })) + + output(args.format, jsonData, () => { + const blocks: string[] = [] + let total = 0 + for (const cat of categories) { + const comps = cat.components + .map((id) => meta.components[id]) + .filter(Boolean) + total += comps.length + const rows = comps.map((c) => [c.name, c.cName ?? '', c.version ?? '']) + blocks.push( + `▍${cat.name} (${cat.enName})\n${renderTable(['组件', '中文名', '版本'], rows)}` + ) + } + const header = `NutUI React(H5)共 ${meta.componentCount} 个组件,版本 ${meta.libVersion}` + return `${header}\n\n${blocks.join('\n\n')}\n\n合计:${total} 个` + }) +} diff --git a/packages/nutui-react-cli/src/commands/token.ts b/packages/nutui-react-cli/src/commands/token.ts new file mode 100644 index 0000000000..f610890fd0 --- /dev/null +++ b/packages/nutui-react-cli/src/commands/token.ts @@ -0,0 +1,43 @@ +// nutui-react token [Component] —— 输出 Design Token。无参列全局 token,有参列组件 token。 +import { loadMeta } from '../data.js' +import { output, renderTable } from '../format.js' +import { resolveOrExit } from './_shared.js' +import type { OutputFormat, Token } from '../types.js' + +export interface TokenArgs { + component?: string + format: OutputFormat +} + +export function runToken(args: TokenArgs): void { + const meta = loadMeta() + + // 无参:全局 token。 + if (!args.component) { + output(args.format, { scope: 'global', tokens: meta.globalTokens }, () => + renderTokenText( + `NutUI React 全局 Design Token(${meta.globalTokens.length} 个)`, + meta.globalTokens + ) + ) + return + } + + // 有参:组件 token。 + const comp = resolveOrExit(meta, args.component) + const tokens = comp.tokens ?? [] + output(args.format, { scope: comp.id, name: comp.name, tokens }, () => { + if (!tokens.length) { + return `${comp.name} ${comp.cName} 无专属 Design Token(可运行 nutui-react token 查看全局 token)。` + } + return renderTokenText( + `${comp.name} ${comp.cName} 的 Design Token(${tokens.length} 个)`, + tokens + ) + }) +} + +function renderTokenText(title: string, tokens: Token[]): string { + const rows = tokens.map((t) => [t.cssVar, t.scssVar, t.default ?? '']) + return `${title}\n${renderTable(['CSS 变量', 'SCSS 变量', '默认值'], rows)}` +} diff --git a/packages/nutui-react-cli/src/data.ts b/packages/nutui-react-cli/src/data.ts new file mode 100644 index 0000000000..1d957d427e --- /dev/null +++ b/packages/nutui-react-cli/src/data.ts @@ -0,0 +1,93 @@ +// 定位随包发布的 data/ 快照,加载 meta 与 doc/demo 文件。 +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' +import type { Component, Lang, Meta } from './types.js' +import { LANG_TO_DOC_KEY } from './types.js' + +// dist/cli.js 运行时,data/ 与 dist/ 同级(见 package.json files: [dist, data])。 +const DATA_DIR = fileURLToPath(new URL('../data/', import.meta.url)) + +let cachedMeta: Meta | null = null + +export function loadMeta(): Meta { + if (cachedMeta) return cachedMeta + const metaPath = path.join(DATA_DIR, 'meta.json') + if (!fs.existsSync(metaPath)) { + throw new Error( + `未找到打包数据 ${metaPath}。若为源码开发,请先运行 pnpm run build(或 pnpm run prepare-data)。` + ) + } + cachedMeta = JSON.parse(fs.readFileSync(metaPath, 'utf-8')) as Meta + return cachedMeta +} + +// 组件名大小写不敏感解析:Button / button / BUTTON 均可。命中返回组件,否则 null。 +export function resolveComponent(meta: Meta, query: string): Component | null { + const id = query.trim().toLowerCase() + return meta.components[id] ?? null +} + +// Levenshtein 编辑距离,用于未命中时的 did-you-mean 建议。 +function editDistance(a: string, b: string): number { + const dp = Array.from({ length: a.length + 1 }, (_, i) => [ + i, + ...Array(b.length).fill(0), + ]) + for (let j = 0; j <= b.length; j++) dp[0][j] = j + for (let i = 1; i <= a.length; i++) { + for (let j = 1; j <= b.length; j++) { + const cost = a[i - 1] === b[j - 1] ? 0 : 1 + dp[i][j] = Math.min( + dp[i - 1][j] + 1, + dp[i][j - 1] + 1, + dp[i - 1][j - 1] + cost + ) + } + } + return dp[a.length][b.length] +} + +// 返回与 query 最接近的若干组件名(用于「did you mean」)。 +export function suggestComponents( + meta: Meta, + query: string, + limit = 3 +): string[] { + const q = query.trim().toLowerCase() + return Object.values(meta.components) + .map((c) => ({ name: c.name, d: editDistance(q, c.id) })) + .sort((a, b) => a.d - b.d) + .slice(0, limit) + .filter((x) => x.d <= Math.max(3, Math.ceil(q.length / 2))) + .map((x) => x.name) +} + +// 读取组件某语言的文档原文。缺失返回 null。 +export function readDoc(component: Component, lang: Lang): string | null { + const key = LANG_TO_DOC_KEY[lang] + const file = path.join(DATA_DIR, 'docs', component.id, `${key}.md`) + return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null +} + +// 列出组件的全部 H5 demo 文件名(不含扩展名,如 demo1),按序号排序。 +export function listDemos(component: Component): string[] { + const dir = path.join(DATA_DIR, 'demos', component.id) + if (!fs.existsSync(dir)) return [] + return fs + .readdirSync(dir) + .filter((f) => f.endsWith('.tsx')) + .map((f) => f.replace(/\.tsx$/, '')) + .sort((a, b) => { + const na = Number(a.replace(/\D/g, '')) + const nb = Number(b.replace(/\D/g, '')) + return Number.isNaN(na) || Number.isNaN(nb) ? a.localeCompare(b) : na - nb + }) +} + +// 读取组件某个 demo 的源码。name 形如 demo1(也容忍带 .tsx)。缺失返回 null。 +export function readDemo(component: Component, name: string): string | null { + const base = name.endsWith('.tsx') ? name : `${name}.tsx` + const file = path.join(DATA_DIR, 'demos', component.id, base) + return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null +} diff --git a/packages/nutui-react-cli/src/format.ts b/packages/nutui-react-cli/src/format.ts new file mode 100644 index 0000000000..a191e5038b --- /dev/null +++ b/packages/nutui-react-cli/src/format.ts @@ -0,0 +1,43 @@ +// 输出辅助:统一 JSON 与人类可读文本两种形态。 +import type { OutputFormat } from './types.js' + +export function printJson(data: unknown): void { + process.stdout.write(`${JSON.stringify(data, null, 2)}\n`) +} + +export function printText(text: string): void { + process.stdout.write(`${text}\n`) +} + +// 渲染等宽对齐的文本表格。列宽按内容自适应(按显示宽度,中文按 2 计)。 +export function renderTable(headers: string[], rows: string[][]): string { + const widths = headers.map((h, i) => + Math.max(displayWidth(h), ...rows.map((r) => displayWidth(r[i] ?? ''))) + ) + const line = (cells: string[]) => + cells.map((c, i) => pad(c ?? '', widths[i])).join(' ') + const sep = widths.map((w) => '-'.repeat(w)).join(' ') + return [line(headers), sep, ...rows.map(line)].join('\n') +} + +// 东亚宽字符按 2 个显示宽度计,用于表格对齐。 +function displayWidth(s: string): number { + let w = 0 + for (const ch of s) + w += /[\u4e00-\u9fff\u3000-\u303f\uff00-\uffef]/.test(ch) ? 2 : 1 + return w +} + +function pad(s: string, width: number): string { + return s + ' '.repeat(Math.max(0, width - displayWidth(s))) +} + +// 统一的「按格式输出」入口:json 走 printJson,text 走回调产出的文本。 +export function output( + format: OutputFormat, + jsonData: unknown, + toText: () => string +): void { + if (format === 'json') printJson(jsonData) + else printText(toText()) +} diff --git a/packages/nutui-react-cli/src/types.ts b/packages/nutui-react-cli/src/types.ts new file mode 100644 index 0000000000..33171dea9b --- /dev/null +++ b/packages/nutui-react-cli/src/types.ts @@ -0,0 +1,76 @@ +// meta/components.json 的结构类型(React/H5 视角)。schema 见仓库 scripts/build-meta.mjs。 + +export interface Token { + cssVar: string + scssVar: string + default: string | null +} + +export type TableKind = 'props' | 'methods' | 'ref' | 'other' + +export interface ApiRow { + prop: string + desc: string + type: string + default: string +} + +export interface ApiTable { + name: string + kind: TableKind + sourceComponent: string + subComponent: string | null + rows: ApiRow[] +} + +export interface DocRefs { + h5: string | null + enUS: string | null + zhTW: string | null + taro: string | null +} + +export interface Component { + id: string + name: string + cName: string + version: string + category: { name: string; enName: string } + taro: boolean + v15: boolean + v16: boolean + author?: string + type?: string + desc?: string + sort?: number + show?: boolean + docs: DocRefs + demos: { h5: string[]; taro: string[] } + api: { tables: ApiTable[] } + tokens: Token[] +} + +export interface Category { + name: string + enName: string + components: string[] +} + +export interface Meta { + schemaVersion: string + libVersion: string + componentCount: number + apiComponentCount: number + categories: Category[] + globalTokens: Token[] + components: Record +} + +// CLI 语言维度 -> meta.docs 的 key。React 端只支持 zh / en。 +export type Lang = 'zh' | 'en' +export const LANG_TO_DOC_KEY: Record = { + zh: 'h5', + en: 'enUS', +} + +export type OutputFormat = 'text' | 'json' diff --git a/packages/nutui-react-cli/tsconfig.json b/packages/nutui-react-cli/tsconfig.json new file mode 100644 index 0000000000..697f0799e6 --- /dev/null +++ b/packages/nutui-react-cli/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es2022", + "lib": ["es2023"], + "moduleDetection": "force", + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "types": ["node"], + "strict": true, + "noUnusedLocals": true, + "declaration": false, + "esModuleInterop": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/packages/nutui-react-cli/tsup.config.ts b/packages/nutui-react-cli/tsup.config.ts new file mode 100644 index 0000000000..8a8a8ef473 --- /dev/null +++ b/packages/nutui-react-cli/tsup.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'tsup' + +export default defineConfig({ + entry: ['src/cli.ts'], + format: ['esm'], + target: 'node18.12', + splitting: false, + dts: false, + clean: true, + // 把运行时依赖打进产物,使 dist/cli.js 自包含、零安装依赖即可运行。 + noExternal: ['yargs'], + banner: { + js: '#!/usr/bin/env node', + }, +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index adb373abe7..481681fbc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,22 +116,22 @@ importers: version: 1.15.40(@swc/helpers@0.5.23) '@tarojs/components': specifier: 4.2.0 - version: 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) '@tarojs/plugin-platform-alipay': specifier: 4.2.0 - version: 4.2.0(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) + version: 4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) '@tarojs/plugin-platform-jd': specifier: 4.2.0 - version: 4.2.0(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) + version: 4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) '@tarojs/plugin-platform-weapp': specifier: 4.2.0 - version: 4.2.0(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) + version: 4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0) '@tarojs/react': specifier: 4.2.0 version: 4.2.0(react@18.3.1) '@tarojs/taro': specifier: 4.2.0 - version: 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + version: 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) '@testing-library/jest-dom': specifier: ^6.4.2 version: 6.9.1 @@ -486,6 +486,28 @@ importers: specifier: ^29.1.2 version: 29.4.11(@babel/core@7.29.7)(@jest/transform@30.4.1)(@jest/types@30.4.1)(babel-jest@30.4.1(@babel/core@7.29.7))(jest-util@30.4.1)(jest@30.4.2(@types/node@22.19.19))(typescript@5.9.3) + packages/nutui-react-cli: + dependencies: + yargs: + specifier: ^17.7.2 + version: 17.7.2 + devDependencies: + '@types/node': + specifier: ^22.5.5 + version: 22.19.19 + '@types/yargs': + specifier: ^17.0.33 + version: 17.0.35 + bumpp: + specifier: ^9.5.2 + version: 9.11.1(magicast@0.3.5) + tsup: + specifier: ^8.3.0 + version: 8.5.1(@microsoft/api-extractor@7.47.7(@types/node@22.19.19))(@swc/core@1.15.40(@swc/helpers@0.5.23))(jiti@2.7.0)(postcss@8.5.15)(tsx@4.22.4)(typescript@5.9.3)(yaml@2.9.0) + typescript: + specifier: ^5.6.2 + version: 5.9.3 + packages/nutui-replace-icons: dependencies: '@babel/cli': @@ -2691,48 +2713,56 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.125.0': resolution: {integrity: sha512-eIXyzpA12/+maKjMSsXdHfpzwQcoRfzokT+/ZhVEo6u/9RcXQrZZmZ70MmmJqwVcLez6U4ScjB/eiYlsEs7p0g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.125.0': resolution: {integrity: sha512-w7ir5OuqSJUKLadmsSAWwTNso/ZGem2bPT/1LSU7l+ecmKPyegIvU+wzY0ADhZ/t/goaedqyp24SDRxyLxO9zg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.125.0': resolution: {integrity: sha512-2KPTfWorcW8RNE8aEMHKbPSjHDBjFVYqg8nSLRBp7pe7VBqHsmkO9jpK8YmaYA5d5GcUy+J++5O4EgxkrQBEtw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.125.0': resolution: {integrity: sha512-Vsl8dmQdKtDsQiDPHP5VFjXOuVGcZQcziYMkU/yPnlaKHMqoX/q+bxt7K+BwResi9Cc8pnZ6oYGTgPcjAtt5QQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] + libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.125.0': resolution: {integrity: sha512-HwY5kuM818r/kHdHG2TZqzqxyF7fz90prPg85R/2VmgRWk8cMyGZo+8BNZDQAMJ6aGSTRvn2sdGXv3sZ5bsUWw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.125.0': resolution: {integrity: sha512-o7k6+xAI2pIkjBsCqM0elI4q+qY/3TexH6cpIlGm+nJze1tvx7QEHCKdiy6wnRacFvUYmySEZ5hWFBc9MbxrIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.125.0': resolution: {integrity: sha512-vksRynFD6vytE1sDZCaeIk6y6rCsq0a18T4kcXbfGHBq2q/qSyDogWLk3A3S3hl/ikNfse7yrEwAuQ8ldIJeAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] + libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.125.0': resolution: {integrity: sha512-AAtg4pnKvrKsay2ldZZRY98ALFBOgbyy3Gyxo658z6aecM0Zr5mI9BOHRCchSVKUHqMqmjhCA4wIdZvz02VrAw==} @@ -3006,66 +3036,79 @@ packages: resolution: {integrity: sha512-EIPRXTVQpHyF8WOo219AD2yEltPehLTcTMz2fn6JsatLYSzQf00hj3rulF+yauOlF9/FtM2WpkT/hJh/KJFGhA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.60.4': resolution: {integrity: sha512-J3Yh9PzzF1Ovah2At+lHiGQdsYgArxBbXv/zHfSyaiFQEqvNv7DcW98pCrmdjCZBrqBiKrKKe2V+aaSGWuBe/w==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.60.4': resolution: {integrity: sha512-BFDEZMYfUvLn37ONE1yMBojPxnMlTFsdyNoqncT0qFq1mAfllL+ATMMJd8TeuVMiX84s1KbcxcZbXInmcO2mRg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.60.4': resolution: {integrity: sha512-pc9EYOSlOgdQ2uPl1o9PF6/kLSgaUosia7gOuS8mB69IxJvlclko1MECXysjs5ryez1/5zjYqx3+xYU0TU6R1A==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.60.4': resolution: {integrity: sha512-NxnomyxYerDh5n4iLrNa+sH+Z+U4BMEE46V2PgQ/hoB909i8gV1M5wPojWg9fk1jWpO3IQnOs20K4wyZuFLEFQ==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.60.4': resolution: {integrity: sha512-nbJnQ8a3z1mtmrwImCYhc6BGpThAyYVRQxw9uKSKG4wR6aAYno9sVjJ0zaZcW9BPJX1GbrDPf+SvdWjgTuDmnw==} cpu: [loong64] os: [linux] + libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.60.4': resolution: {integrity: sha512-2EU6acNrQLd8tYvo/LXW535wupT3m6fo7HKo6lr7ktQoItxTyOL1ZCR/GfGCuXl2vR+zmfI6eRXkSemafv+iVg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.60.4': resolution: {integrity: sha512-WeBtoMuaMxiiIrO2IYP3xs6GMWkJP2C0EoT8beTLkUPmzV1i/UcOSVw1d5r9KBODtHKilG5yFxsGRnBbK3wJ4A==} cpu: [ppc64] os: [linux] + libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.60.4': resolution: {integrity: sha512-FJHFfqpKUI3A10WrWKiFbBZ7yVbGT4q4B5o1qKFFojqpaYoh9LrQgqWCmmcxQzVSXYtyB5bzkXrYzlHTs21MYA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.60.4': resolution: {integrity: sha512-mcEl6CUT5IAUmQf1m9FYSmVqCJlpQ8r8eyftFUHG8i9OhY7BkBXSUdnLH5DOf0wCOjcP9v/QO93zpmF1SptCCw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.60.4': resolution: {integrity: sha512-ynt3JxVd2w2buzoKDWIyiV1pJW93xlQic1THVLXilz429oijRpSHivZAgp65KBu+cMcgf1eVVjdnTLvPxgCuoQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.60.4': resolution: {integrity: sha512-Boiz5+MsaROEWDf+GGEwF8VMHGhlUoQMtIPjOgA5fv4osupqTVnJteQNKJwUcnUog2G55jYXH7KZFFiJe0TEzQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.60.4': resolution: {integrity: sha512-+qfSY27qIrFfI/Hom04KYFw3GKZSGU4lXus51wsb5EuySfFlWRwjkKWoE9emgRw/ukoT4Udsj4W/+xxG8VbPKg==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openbsd-x64@4.60.4': resolution: {integrity: sha512-VpTfOPHgVXEBeeR8hZ2O0F3aSso+JDWqTWmTmzcQKted54IAdUVbxE+j/MVxUsKa8L20HJhv3vUezVPoquqWjA==} @@ -3254,60 +3297,70 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-gnu@1.3.96': resolution: {integrity: sha512-c/IiJ0s1y3Ymm2BTpyC/xr6gOvoqAVETrivVXHq68xgNms95luSpbYQ28rqaZC8bQC8M5zdXpSc0T8DJu8RJGw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.15.40': resolution: {integrity: sha512-4z0MgHU+7M0pZDqBN1El7mFXDI1SBwinfcUkAyA4v8QrhOIUOZltySt2aStQLZGrdXVXM4Y4ylfiTC04ED+MoQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-arm64-musl@1.3.96': resolution: {integrity: sha512-i5/UTUwmJLri7zhtF6SAo/4QDQJDH2fhYJaBIUhrICmIkRO/ltURmpejqxsM/ye9Jqv5zG7VszMC0v/GYn/7BQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-ppc64-gnu@1.15.40': resolution: {integrity: sha512-fLI4iUgeSZu0eRWUXwe6YzPFx9gHbFiPkl8Rp3mJfP8OpNR3nTQCGPvHdDh9xniW7mVvgMY4ni7A4VzqI1KrpA==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] + libc: [glibc] '@swc/core-linux-s390x-gnu@1.15.40': resolution: {integrity: sha512-YqeKMAb7d4nQSGMJQ454IlaCENpzcDqhvBE9+CPfdnYpnUXxd+BSrB6Xk0YjW8UyoEhUj4p6quATCxbsp6J3jg==} engines: {node: '>=10'} cpu: [s390x] os: [linux] + libc: [glibc] '@swc/core-linux-x64-gnu@1.15.40': resolution: {integrity: sha512-7HOuS1iGcme/j/TuL1TfmmLGiMQrjv/GmjyZeydl00FKPtpGXEldwqfI56xgd1YzrzoB2svWjxbGGyQ0TEASxg==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-gnu@1.3.96': resolution: {integrity: sha512-USdaZu8lTIkm4Yf9cogct/j5eqtdZqTgcTib4I+NloUW0E/hySou3eSyp3V2UAA1qyuC72ld1otXuyKBna0YKQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.15.40': resolution: {integrity: sha512-h4kZYHc7dpc9P9u4brRJaS8Pl7tPVHAeiLSzw7T5RfIJgAoSdaCMKzI/2Uay9gFhaw8uyCDl0L5q37r0EpAfIA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-linux-x64-musl@1.3.96': resolution: {integrity: sha512-QYErutd+G2SNaCinUVobfL7jWWjGTI0QEoQ6hqTp7PxCJS/dmKmj3C5ZkvxRYcq7XcZt7ovrYCTwPTHzt6lZBg==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.15.40': resolution: {integrity: sha512-+mQgKZXSj6mV38Zh05QaxSjUDmGP/R2JWlXZTDLSPkDzHU6p3GxN9eeSf5dfyDVU86946fmCvSzyl/ucImx8+A==} @@ -3437,6 +3490,7 @@ packages: engines: {node: ^20 || ^22} cpu: [x64] os: [linux] + libc: [glibc] '@tarojs/binding-win32-x64-msvc@4.1.3': resolution: {integrity: sha512-5MO5k+LMP2oEhmvxK1HsDmcNwa33clIO517cpXoev0rj/chGizuJ/lCUVsvIxAW+wRPsigJjyD16hf3F/vt68w==} @@ -3474,6 +3528,10 @@ packages: resolution: {integrity: sha512-ReLy90gUHWS2u2lN2Xl3xO2oD5Q4K190sxiwkOCqTc5+lcfPAgNOOQ/hdVBORjT8ZDdclXSEjqsCDNwMJieAgQ==} engines: {node: ^20 || ^22} + '@tarojs/helper@4.2.0': + resolution: {integrity: sha512-F8D5EbwS/d0Kkh4PWFHhXoM1l1Iy2ZxjsWmXEkUratiq+CktogjQDa87pY+lyPLFsArA8oAd01p7rsQmVSDfoA==} + engines: {node: '>= 18'} + '@tarojs/parse-css-to-stylesheet-android-arm-eabi@0.0.69': resolution: {integrity: sha512-xfn55ehFWjbIzDTu+0QwMkCf8icC7jwAiDm2S7Cv5Og83gSzMUCb76KzEAwgTSTe0wiLrDai2HAhBftpE4V1Qw==} engines: {node: '>= 10'} @@ -3514,24 +3572,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tarojs/parse-css-to-stylesheet-linux-arm64-musl@0.0.69': resolution: {integrity: sha512-bYODGCEx1Ni4EMNuZU95IUPqVZAXsY9gIc5CPSfKQ2j167Vbeo/gskQk/uNVjmnYJ69PplgJ9npylINgLIPIrA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tarojs/parse-css-to-stylesheet-linux-x64-gnu@0.0.69': resolution: {integrity: sha512-89f03s+txGJ1c8Zc6Ib4qTAP4YhfFbVFq29XExqbC7eGvpQl5DeOtwonO5DBwMc7lA+LG4b1Q4CMXE3qodn2eA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tarojs/parse-css-to-stylesheet-linux-x64-musl@0.0.69': resolution: {integrity: sha512-vyewIf1KysXYNIJdkzc9JSPguTG9zD65Belk3H186mLR18KtsvrqNqlWnP8kKfduF4ixh6qt0F2PkKbeI9PZvg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tarojs/parse-css-to-stylesheet-win32-x64-msvc@0.0.69': resolution: {integrity: sha512-CHKlVjAiSAZTFNV8GkfXV88Jy9yyFSvKBAO3++l2KSQUBUWmPX775FbH+god2BOLf5SfAXRPd0HVAEK9qNeHXQ==} @@ -3571,24 +3633,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@tarojs/plugin-doctor-linux-arm64-musl@0.0.13': resolution: {integrity: sha512-V1HnFITOLgHVyQ+OCa1oPFKOtGFRtP91vlbUGfOwMA4GeOVw9g28W/hfTyucTCkfZWlrssLehgW6L2AGAMXh2w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@tarojs/plugin-doctor-linux-x64-gnu@0.0.13': resolution: {integrity: sha512-oetfzBW60uenPBBF4/NE6Mf0Iwkw1YGqIIBiN++aVQynbWrmMzWBsW8kleZ5vN1npxI9aud9EfRU1uM37DrG2A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@tarojs/plugin-doctor-linux-x64-musl@0.0.13': resolution: {integrity: sha512-OdIF/kFwwM0kQPDnpkanhvfWRaAI6EtDmpM9rQA/Lu2QcJq86w5d7X/WSN0U2xF1nialAUrfl79NyIaEzp4Fcw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@tarojs/plugin-doctor-win32-ia32-msvc@0.0.13': resolution: {integrity: sha512-nIbG2SliRhRwACLa1kNMskcfjsihp+3tZQMAxl+LoYUq6JRaWgP3vH2nHkDyZHTCheBTDtAaupqXWrYF3w+U6g==} @@ -3740,6 +3806,10 @@ packages: resolution: {integrity: sha512-GKQ/oMAGuUSXbn79yO48AkYW7mmQJ5YQm/QU2Tsn0cOZbcH9JMR54GnoqQk/LywbrrMzr3ojdGvxxJ3nN16RRw==} engines: {node: ^20 || ^22} + '@tarojs/runner-utils@4.2.0': + resolution: {integrity: sha512-M79iDSKjO3FNBBWfNiFlaihLsHGSQaXjSCglH0d9G1a/YWx2hfKtZaT67ca86YkfR/glz6ZBtIY5PTNQlED8AA==} + engines: {node: '>= 18'} + '@tarojs/runtime@4.1.3': resolution: {integrity: sha512-fJ0Jgi2243HrlFwAczufDgkD5+nCJpoQeCm4+0qnPCU7t+q+CFL7MG2PTfYdBOL3QbQwtB4NBeDcMt5E886ubQ==} engines: {node: ^20 || ^22} @@ -3752,6 +3822,10 @@ packages: resolution: {integrity: sha512-MYGj/H9TXh/v+ult/N/oNlXokD/QqNTl1UzTOpt+KyeDsXlmkOfunqE7v85Y2VYJVmraosCjqGrs2qyl8yctyA==} engines: {node: ^20 || ^22} + '@tarojs/service@4.2.0': + resolution: {integrity: sha512-shUXAkxUNjrlgucU5yP4S1ZZnKFQmAvlnpDiignCF1dUvsDB+7Q8I+XTwI6JuK39HcCXxs3xIgYeIsBEHrIbZw==} + engines: {node: '>= 18'} + '@tarojs/shared@4.1.3': resolution: {integrity: sha512-OWLojvDJGX7+Jd6UIllCZMr5ogOFKgWeI7g5QH0Ebv0c6BNoX5q2zY7zNPMbl3mqHlFnsmoHbB5PPTFCWJhnGw==} engines: {node: ^20 || ^22} @@ -4413,51 +4487,61 @@ packages: resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.12.2': resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} cpu: [loong64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-loong64-musl@1.12.2': resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} cpu: [loong64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] + libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.12.2': resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] + libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.12.2': resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] + libc: [musl] '@unrs/resolver-binding-openharmony-arm64@1.12.2': resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} @@ -8986,24 +9070,28 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] + libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] + libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -16321,12 +16409,12 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': dependencies: '@stencil/core': 2.22.3 '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 - '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) classnames: 2.5.1 hammerjs: 2.0.8 hls.js: 1.6.16 @@ -16344,12 +16432,12 @@ snapshots: - webpack-chain - webpack-dev-server - '@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': dependencies: '@stencil/core': 2.22.3 '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 - '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/taro': 4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) classnames: 2.5.1 hammerjs: 2.0.8 hls.js: 1.6.16 @@ -16394,6 +16482,33 @@ snapshots: - '@swc/helpers' - supports-color + '@tarojs/helper@4.2.0(@swc/helpers@0.5.23)': + dependencies: + '@babel/core': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@swc/core': 1.3.96(@swc/helpers@0.5.23) + '@swc/register': 0.1.10(@swc/core@1.3.96(@swc/helpers@0.5.23)) + ansi-escapes: 4.3.2 + chalk: 4.1.2 + chokidar: 3.6.0 + cross-spawn: 7.0.6 + debug: 4.4.3(supports-color@8.1.1) + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + esbuild: 0.21.5 + find-yarn-workspace-root: 2.0.0 + fs-extra: 11.3.5 + lodash: 4.18.1 + require-from-string: 2.0.2 + resolve: 1.22.12 + supports-hyperlinks: 3.2.0 + transitivePeerDependencies: + - '@swc/helpers' + - supports-color + '@tarojs/parse-css-to-stylesheet-android-arm-eabi@0.0.69': optional: true @@ -16516,9 +16631,9 @@ snapshots: '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/plugin-platform-alipay@4.2.0(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)': + '@tarojs/plugin-platform-alipay@4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)': dependencies: - '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) + '@tarojs/service': 4.2.0(@swc/helpers@0.5.23) '@tarojs/shared': 4.2.0 '@tarojs/plugin-platform-h5@4.1.3(61616c2ed6adcfead3c5df5cc362031d)': @@ -16591,9 +16706,9 @@ snapshots: '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/plugin-platform-jd@4.2.0(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)': + '@tarojs/plugin-platform-jd@4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)': dependencies: - '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) + '@tarojs/service': 4.2.0(@swc/helpers@0.5.23) '@tarojs/shared': 4.2.0 '@tarojs/plugin-platform-qq@4.1.3(@tarojs/plugin-platform-weapp@4.1.3(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.1.3))(@tarojs/shared@4.1.3)': @@ -16617,9 +16732,9 @@ snapshots: '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) '@tarojs/shared': 4.1.3 - '@tarojs/plugin-platform-weapp@4.2.0(@tarojs/service@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)': + '@tarojs/plugin-platform-weapp@4.2.0(@tarojs/service@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)': dependencies: - '@tarojs/service': 4.1.3(@swc/helpers@0.5.23) + '@tarojs/service': 4.2.0(@swc/helpers@0.5.23) '@tarojs/shared': 4.2.0 '@tarojs/react@4.1.3(react@18.3.1)': @@ -16657,6 +16772,15 @@ snapshots: - '@swc/helpers' - supports-color + '@tarojs/runner-utils@4.2.0(@swc/helpers@0.5.23)': + dependencies: + '@tarojs/helper': 4.2.0(@swc/helpers@0.5.23) + rollup: 3.30.0 + scss-bundle: 3.1.2 + transitivePeerDependencies: + - '@swc/helpers' + - supports-color + '@tarojs/runtime@4.1.3': dependencies: '@tarojs/shared': 4.1.3 @@ -16682,6 +16806,21 @@ snapshots: - '@swc/helpers' - supports-color + '@tarojs/service@4.2.0(@swc/helpers@0.5.23)': + dependencies: + '@tarojs/helper': 4.2.0(@swc/helpers@0.5.23) + '@tarojs/runner-utils': 4.2.0(@swc/helpers@0.5.23) + '@tarojs/shared': 4.2.0 + joi: 17.13.3 + lodash: 4.18.1 + ora: 5.4.1 + resolve: 1.22.12 + tapable: 2.3.3 + webpack-merge: 5.10.0 + transitivePeerDependencies: + - '@swc/helpers' + - supports-color + '@tarojs/shared@4.1.3': {} '@tarojs/shared@4.2.0': {} @@ -16732,10 +16871,10 @@ snapshots: webpack-chain: 6.5.1 webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.2.0)(@tarojs/shared@4.2.0) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 @@ -16743,28 +16882,28 @@ snapshots: postcss: 8.5.15 optionalDependencies: '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - rollup: 4.60.4 - webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + rollup: 3.30.0 + webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': + '@tarojs/taro@4.2.0(@tarojs/components@4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@tarojs/shared@4.2.0)(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15))': dependencies: '@tarojs/api': 4.2.0(@tarojs/runtime@4.2.0)(@tarojs/shared@4.2.0) - '@tarojs/components': 4.2.0(@tarojs/helper@4.1.3(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@3.30.0)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - '@tarojs/helper': 4.1.3(@swc/helpers@0.5.23) + '@tarojs/components': 4.2.0(@tarojs/helper@4.2.0(@swc/helpers@0.5.23))(@types/react@18.3.29)(html-webpack-plugin@5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(postcss@8.5.15)(rollup@4.60.4)(webpack-chain@6.5.1)(webpack-dev-server@4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)))(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + '@tarojs/helper': 4.2.0(@swc/helpers@0.5.23) '@tarojs/runtime': 4.2.0 '@tarojs/shared': 4.2.0 '@types/postcss-url': 10.0.4 postcss: 8.5.15 optionalDependencies: '@types/react': 18.3.29 - html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) - rollup: 3.30.0 - webpack: 5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) + html-webpack-plugin: 5.6.7(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + rollup: 4.60.4 + webpack: 5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15) webpack-chain: 6.5.1 - webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.3.96(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) + webpack-dev-server: 4.15.2(webpack@5.91.0(@swc/core@1.15.40(@swc/helpers@0.5.23))(lightningcss@1.32.0)(postcss@8.5.15)) '@tarojs/vite-runner@4.1.3(@swc/helpers@0.5.23)(@tarojs/runtime@4.1.3)(@types/babel__core@7.20.5)(jiti@2.7.0)(postcss@8.5.15)(rollup@3.30.0)(terser@5.48.0)(tsx@4.22.4)(typescript@5.9.3)(vite@5.4.21(@types/node@22.19.19)(less@3.13.1)(lightningcss@1.32.0)(sass@1.77.6)(stylus@0.64.0)(terser@5.48.0))': dependencies: @@ -17088,7 +17227,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.19.19 '@types/keyv@3.1.4': dependencies: @@ -17158,7 +17297,7 @@ snapshots: '@types/postcss-url@10.0.4': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.19.19 postcss: 8.5.15 '@types/prop-types@15.7.15': {} @@ -17255,7 +17394,7 @@ snapshots: '@types/vinyl@2.0.12': dependencies: '@types/expect': 1.20.4 - '@types/node': 20.19.41 + '@types/node': 22.19.19 '@types/webpack-env@1.18.8': {} @@ -17275,7 +17414,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.19.41 + '@types/node': 22.19.19 optional: true '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3)': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 70bb652a18..deb0fcfdaf 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,4 +2,5 @@ packages: - 'packages/nutui-codemod' - 'packages/nutui-auto-import' - 'packages/nutui-taro-demo' - - 'packages/nutui-replace-icons' \ No newline at end of file + - 'packages/nutui-replace-icons' + - 'packages/nutui-react-cli' \ No newline at end of file From 8b62e21fd88db0fd3f6bb08c5ad2a92b837ad7a8 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 15 Jul 2026 21:48:07 +0800 Subject: [PATCH 13/21] feat: implement MCP service in nutui-react-cli for IDE integration --- packages/nutui-react-cli/README.md | 45 +++ packages/nutui-react-cli/package.json | 1 + packages/nutui-react-cli/src/cli.ts | 13 + packages/nutui-react-cli/src/commands/mcp.ts | 99 ++++++ packages/nutui-react-cli/src/error.ts | 27 ++ packages/nutui-react-cli/src/mcp/prompts.ts | 29 ++ packages/nutui-react-cli/src/mcp/tools.ts | 258 +++++++++++++++ packages/nutui-react-cli/tsup.config.ts | 15 +- pnpm-lock.yaml | 326 +++++++++++++++++++ 9 files changed, 811 insertions(+), 2 deletions(-) create mode 100644 packages/nutui-react-cli/src/commands/mcp.ts create mode 100644 packages/nutui-react-cli/src/error.ts create mode 100644 packages/nutui-react-cli/src/mcp/prompts.ts create mode 100644 packages/nutui-react-cli/src/mcp/tools.ts diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index 4b515a7a3f..ce80ed632d 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -33,6 +33,7 @@ nutui-react info Button --format json | `nutui-react doc [--lang zh\|en]` | 查看组件完整文档,默认中文 | | `nutui-react demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | | `nutui-react token [Component]` | 查看 Design Token;省略组件名则列出全局 token | +| `nutui-react mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 调用 | 全局选项:`--format, -f `(默认 `text`)、`--help, -h`、`--version, -v`。 @@ -47,6 +48,50 @@ nutui-react demo Button demo1 # 查看某个示例源码 nutui-react token Button ``` +## MCP(IDE 集成) + +CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原生工具,让 Claude Code / Cursor / VS Code / Codex 在对话中**按需自动调用**,无需拼命令行字符串。二者复用同一份离线 meta 快照,等于给同一个知识库套了两种调用协议。 + +`nutui-react mcp` 启动一个 stdio MCP 服务,暴露 5 个只读工具与 2 个提示词: + +| 工具 | 说明 | +| --- | --- | +| `nutui_list` | 列出全部组件(可按分类筛选) | +| `nutui_info` | 组件 Props 规格 | +| `nutui_doc` | 组件完整文档(`lang: zh\|en`) | +| `nutui_demo` | H5 示例列表 / 源码 | +| `nutui_token` | Design Token(全局 / 组件级) | + +| 提示词 | 说明 | +| --- | --- | +| `nutui-expert` | 把 Agent 定位为 NutUI React 专家(先查后写) | +| `nutui-page-generator` | 基于组件生成完整可运行页面 | + +### 客户端配置 + +**Claude Code**(`.mcp.json` 或 `claude mcp add`)、**Cursor**(`.cursor/mcp.json`)、**VS Code**(`.vscode/mcp.json` 的 `servers` 字段)通用配置: + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +**Codex**(`~/.codex/config.toml`): + +```toml +[mcp_servers.nutui-react] +command = "npx" +args = ["-y", "@nutui/nutui-react-cli", "mcp"] +``` + +> `npx -y` 免全局安装即可拉起;也可全局安装后把 `command` 换成 `nutui-react`、`args` 换成 `["mcp"]`。 + ## 本地开发 ```bash diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json index b8986841b8..c26b546459 100644 --- a/packages/nutui-react-cli/package.json +++ b/packages/nutui-react-cli/package.json @@ -41,6 +41,7 @@ "release:beta": "bumpp --preid beta && pnpm publish --tag beta" }, "dependencies": { + "@modelcontextprotocol/sdk": "^1.29.0", "yargs": "^17.7.2" }, "devDependencies": { diff --git a/packages/nutui-react-cli/src/cli.ts b/packages/nutui-react-cli/src/cli.ts index 071b90ec30..e2d55faeab 100644 --- a/packages/nutui-react-cli/src/cli.ts +++ b/packages/nutui-react-cli/src/cli.ts @@ -5,6 +5,7 @@ import { runInfo } from './commands/info.js' import { runDoc } from './commands/doc.js' import { runDemo } from './commands/demo.js' import { runToken } from './commands/token.js' +import { runMcp } from './commands/mcp.js' import type { Lang, OutputFormat } from './types.js' // eslint-disable-next-line @typescript-eslint/no-floating-promises @@ -103,6 +104,18 @@ yargs(hideBin(process.argv)) format: argv.format as OutputFormat, }) ) + .command( + 'mcp', + '启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等调用', + (y) => + y.option('lang', { + alias: 'l', + choices: ['zh', 'en'] as const, + default: 'zh' as Lang, + describe: '默认文档语言(工具未显式指定 lang 时生效)', + }), + (argv) => runMcp({ lang: argv.lang as Lang }) + ) .demandCommand(1, '请指定一个命令。运行 nutui-react --help 查看用法。') .strict() .alias('h', 'help') diff --git a/packages/nutui-react-cli/src/commands/mcp.ts b/packages/nutui-react-cli/src/commands/mcp.ts new file mode 100644 index 0000000000..f486864888 --- /dev/null +++ b/packages/nutui-react-cli/src/commands/mcp.ts @@ -0,0 +1,99 @@ +// nutui-react mcp —— 启动本地 MCP(stdio)服务,供 Claude Code / Cursor / VS Code / Codex +// 等客户端按需调用。复用与 CLI 命令相同的 meta 快照与查询原语。 +import { Server } from '@modelcontextprotocol/sdk/server/index.js' +import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' +import { + CallToolRequestSchema, + GetPromptRequestSchema, + ListPromptsRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types.js' +import { createToolHandler, TOOL_DEFINITIONS } from '../mcp/tools.js' +import { + NUTUI_EXPERT_PROMPT, + NUTUI_PAGE_GENERATOR_PROMPT, +} from '../mcp/prompts.js' +import type { Lang } from '../types.js' + +// tsup define 注入的包版本号。 +declare const __CLI_VERSION__: string + +const PROMPTS = [ + { + name: 'nutui-expert', + description: 'NutUI React 专家助手:先查文档再写代码', + content: NUTUI_EXPERT_PROMPT, + }, + { + name: 'nutui-page-generator', + description: '基于 NutUI React 组件生成完整可运行页面', + content: NUTUI_PAGE_GENERATOR_PROMPT, + }, +] + +export interface McpArgs { + lang: Lang +} + +export async function runMcp(args: McpArgs): Promise { + // 在 TTY 直接运行时给出提示(MCP 走 stdio,不该在终端裸跑)。 + if (process.stdin.isTTY) { + process.stderr.write( + [ + 'NutUI React MCP Server', + '', + '该命令启动一个通过 stdio 通信的 MCP 服务,不应在终端直接运行。', + '请在 AI 工具中如下配置:', + '', + ' {', + ' "mcpServers": {', + ' "nutui-react": {', + ' "command": "npx",', + ' "args": ["-y", "@nutui/nutui-react-cli", "mcp"]', + ' }', + ' }', + ' }', + '', + '支持的客户端:Claude Code、Cursor、VS Code、Codex 等。', + '正在 stdio 上启动 MCP 服务……', + '', + ].join('\n') + ) + } + + const server = new Server( + { name: 'nutui-react', version: __CLI_VERSION__ }, + { capabilities: { tools: {}, prompts: {} } } + ) + + const handleTool = createToolHandler({ lang: args.lang }) + + server.setRequestHandler(ListToolsRequestSchema, async () => ({ + tools: TOOL_DEFINITIONS, + })) + + server.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: params } = request.params + return handleTool(name, (params as Record) ?? {}) + }) + + server.setRequestHandler(ListPromptsRequestSchema, async () => ({ + prompts: PROMPTS.map(({ name, description }) => ({ name, description })), + })) + + server.setRequestHandler(GetPromptRequestSchema, async (request) => { + const found = PROMPTS.find((p) => p.name === request.params.name) + if (!found) throw new Error(`未知提示词:${request.params.name}`) + return { + messages: [ + { + role: 'user' as const, + content: { type: 'text' as const, text: found.content }, + }, + ], + } + }) + + const transport = new StdioServerTransport() + await server.connect(transport) +} diff --git a/packages/nutui-react-cli/src/error.ts b/packages/nutui-react-cli/src/error.ts new file mode 100644 index 0000000000..9b2df21069 --- /dev/null +++ b/packages/nutui-react-cli/src/error.ts @@ -0,0 +1,27 @@ +// MCP 层的结构化错误。CLI 命令用 process.exit 退出,MCP 不能退出进程, +// 需返回带 error/code 字段的对象,供 Agent 解析。 +export const ErrorCodes = { + COMPONENT_NOT_FOUND: 'COMPONENT_NOT_FOUND', + DOC_NOT_FOUND: 'DOC_NOT_FOUND', + DEMO_NOT_FOUND: 'DEMO_NOT_FOUND', + UNKNOWN_TOOL: 'UNKNOWN_TOOL', +} as const + +export type ErrorCode = (typeof ErrorCodes)[keyof typeof ErrorCodes] + +export interface ErrorResult { + error: true + code: ErrorCode + message: string + suggestion?: string +} + +export function createError( + code: ErrorCode, + message: string, + suggestion?: string +): ErrorResult { + return suggestion + ? { error: true, code, message, suggestion } + : { error: true, code, message } +} diff --git a/packages/nutui-react-cli/src/mcp/prompts.ts b/packages/nutui-react-cli/src/mcp/prompts.ts new file mode 100644 index 0000000000..d3d9423668 --- /dev/null +++ b/packages/nutui-react-cli/src/mcp/prompts.ts @@ -0,0 +1,29 @@ +// MCP 提示词:把 Agent 定位为 NutUI React 专家 / 页面生成器。 + +const SHARED_TOOL_WORKFLOW = `## 工具使用流程 +1. 用 **nutui_list** 发现可用组件(中英文名、分类、版本) +2. 用 **nutui_info** 获取组件的 Props 规格(属性 / 说明 / 类型 / 默认值) +3. 用 **nutui_doc** 阅读组件完整文档 +4. 用 **nutui_demo** 获取组件的可运行示例源码 + +## 其它工具 +- 用 **nutui_token** 查询 Design Token(全局或组件级),用于主题定制(\`var(--nutui-*)\` 体系) + +## 规则 +- 查询先于编写:使用任何组件前,先用 nutui_info / nutui_doc 确认其真实 API,不要凭记忆猜 Prop 或枚举值 +- 避免重复调用:不要用相同参数重复调用同一个工具 +- 优先阅读真实文档与示例,而非编造用法 +- 组件采用 \`nut-\` 扁平 BEM 命名与 \`var(--nutui-*)\` Design Token,定制样式时优先用 token 而非硬编码颜色` + +export const NUTUI_EXPERT_PROMPT = `你是 NutUI React(京东风格的轻量级移动端组件库)的专家助手。 + +${SHARED_TOOL_WORKFLOW} +` + +export const NUTUI_PAGE_GENERATOR_PROMPT = `你是 NutUI React 页面生成专家,负责用 NutUI React 组件产出完整、可运行的 React 页面。 + +${SHARED_TOOL_WORKFLOW} +- 生成代码前,先拉取所有相关组件的文档与示例 +- 产出完整、可运行的代码,包含全部必要的 import +- 适当补充 TypeScript 类型 +` diff --git a/packages/nutui-react-cli/src/mcp/tools.ts b/packages/nutui-react-cli/src/mcp/tools.ts new file mode 100644 index 0000000000..90c8e75b74 --- /dev/null +++ b/packages/nutui-react-cli/src/mcp/tools.ts @@ -0,0 +1,258 @@ +// MCP 工具定义与处理器。复用 data.ts 原语,与 CLI 命令共享同一份 meta 快照, +// 输出结构与各命令的 --format json 保持一致。命名对齐 antd 风格(nutui_*)。 +import { + listDemos, + loadMeta, + readDemo, + readDoc, + resolveComponent, + suggestComponents, +} from '../data.js' +import { createError, ErrorCodes } from '../error.js' +import type { Component, Lang, Meta } from '../types.js' + +export interface McpContext { + lang: Lang +} + +function toMcpResult(data: unknown) { + const isError = + !!data && + typeof data === 'object' && + 'error' in data && + (data as { error: unknown }).error === true + const payload = { + content: [{ type: 'text' as const, text: JSON.stringify(data) }], + } + return isError ? { ...payload, isError: true } : payload +} + +// 解析组件名;未命中返回结构化错误(含 did-you-mean 建议),不退出进程。 +function resolve( + meta: Meta, + query: string +): Component | ReturnType { + const comp = resolveComponent(meta, query) + if (comp) return comp + const suggestions = suggestComponents(meta, query) + return createError( + ErrorCodes.COMPONENT_NOT_FOUND, + `未找到组件「${query}」。`, + suggestions.length + ? `你是否想找:${suggestions.join(' / ')}?或用 nutui_list 查看全部组件。` + : '用 nutui_list 查看全部组件。' + ) +} + +function isError(x: unknown): x is ReturnType { + return !!x && typeof x === 'object' && 'error' in x +} + +// 所有工具均为只读、无副作用、幂等、不访问外部世界。 +const TOOL_ANNOTATIONS = { + readOnlyHint: true, + destructiveHint: false, + idempotentHint: true, + openWorldHint: false, +} as const + +export const TOOL_DEFINITIONS = [ + { + name: 'nutui_list', + description: + '列出全部 NutUI React 组件(英文名、中文名、分类、版本)。可用 category 按分类筛选。', + inputSchema: { + type: 'object' as const, + properties: { + category: { + type: 'string', + description: + '按分类英文名筛选(如 base / feedback / form),省略则列出全部', + }, + }, + required: [] as string[], + }, + annotations: { title: '列出组件', ...TOOL_ANNOTATIONS }, + }, + { + name: 'nutui_info', + description: + '获取组件的 Props 规格(属性、说明、类型、默认值),按表格分组。', + inputSchema: { + type: 'object' as const, + properties: { + component: { + type: 'string', + description: '组件名(大小写不敏感,如 Button)', + }, + }, + required: ['component'], + }, + annotations: { title: '获取组件 Props', ...TOOL_ANNOTATIONS }, + }, + { + name: 'nutui_doc', + description: + '获取组件的完整 Markdown 文档。lang 可选 zh(中文,默认)或 en(英文)。', + inputSchema: { + type: 'object' as const, + properties: { + component: { + type: 'string', + description: '组件名(大小写不敏感,如 Button)', + }, + lang: { + type: 'string', + enum: ['zh', 'en'], + description: '文档语言,zh=中文(默认),en=英文', + }, + }, + required: ['component'], + }, + annotations: { title: '获取组件文档', ...TOOL_ANNOTATIONS }, + }, + { + name: 'nutui_demo', + description: + '获取组件的 H5 示例源码。不传 name 时列出全部示例名;传 name(如 demo1)时返回该示例源码。', + inputSchema: { + type: 'object' as const, + properties: { + component: { + type: 'string', + description: '组件名(大小写不敏感,如 Button)', + }, + name: { + type: 'string', + description: '示例名(如 demo1);省略则列出全部示例', + }, + }, + required: ['component'], + }, + annotations: { title: '获取组件示例', ...TOOL_ANNOTATIONS }, + }, + { + name: 'nutui_token', + description: + '查询 Design Token(var(--nutui-*) 体系)。不传 component 返回全局 token;传 component 返回组件级 token。', + inputSchema: { + type: 'object' as const, + properties: { + component: { + type: 'string', + description: '组件名,返回组件级 token;省略则返回全局 token', + }, + }, + required: [] as string[], + }, + annotations: { title: '查询 Design Token', ...TOOL_ANNOTATIONS }, + }, +] + +export function createToolHandler(ctx: McpContext) { + return async (name: string, params: Record) => { + const meta = loadMeta() + + switch (name) { + case 'nutui_list': { + const filter = params.category as string | undefined + let categories = meta.categories + if (filter) { + const key = filter.toLowerCase() + categories = categories.filter( + (c) => c.enName.toLowerCase() === key || c.name === filter + ) + } + const data = categories.map((cat) => ({ + name: cat.name, + enName: cat.enName, + components: cat.components + .map((id) => meta.components[id]) + .filter(Boolean) + .map((c) => ({ + name: c.name, + cName: c.cName, + version: c.version, + })), + })) + return toMcpResult({ libVersion: meta.libVersion, categories: data }) + } + + case 'nutui_info': { + const comp = resolve(meta, params.component as string) + if (isError(comp)) return toMcpResult(comp) + const propTables = (comp.api?.tables ?? []).filter( + (t) => t.kind === 'props' + ) + return toMcpResult({ + name: comp.name, + cName: comp.cName, + version: comp.version, + tables: propTables.map((t) => ({ + name: t.name, + subComponent: t.subComponent, + rows: t.rows, + })), + }) + } + + case 'nutui_doc': { + const comp = resolve(meta, params.component as string) + if (isError(comp)) return toMcpResult(comp) + const lang = (params.lang as Lang) === 'en' ? 'en' : ctx.lang + const content = readDoc(comp, lang) + if (content === null) { + return toMcpResult( + createError( + ErrorCodes.DOC_NOT_FOUND, + `${comp.name} ${comp.cName} 暂无${lang === 'en' ? '英文' : '中文'}文档。` + ) + ) + } + return toMcpResult({ name: comp.name, lang, doc: content }) + } + + case 'nutui_demo': { + const comp = resolve(meta, params.component as string) + if (isError(comp)) return toMcpResult(comp) + const demos = listDemos(comp) + const demoName = params.name as string | undefined + if (!demoName) { + return toMcpResult({ component: comp.name, demos }) + } + const code = readDemo(comp, demoName) + if (code === null) { + return toMcpResult( + createError( + ErrorCodes.DEMO_NOT_FOUND, + `${comp.name} 未找到示例「${demoName}」。`, + demos.length + ? `可选:${demos.join(' / ')}` + : '该组件暂无 H5 示例。' + ) + ) + } + return toMcpResult({ component: comp.name, demo: demoName, code }) + } + + case 'nutui_token': { + const query = params.component as string | undefined + if (!query) { + return toMcpResult({ scope: 'global', tokens: meta.globalTokens }) + } + const comp = resolve(meta, query) + if (isError(comp)) return toMcpResult(comp) + return toMcpResult({ + scope: comp.id, + component: comp.name, + tokens: comp.tokens ?? [], + }) + } + + default: + return toMcpResult( + createError(ErrorCodes.UNKNOWN_TOOL, `未知工具:${name}`) + ) + } + } +} diff --git a/packages/nutui-react-cli/tsup.config.ts b/packages/nutui-react-cli/tsup.config.ts index 8a8a8ef473..2a087a1912 100644 --- a/packages/nutui-react-cli/tsup.config.ts +++ b/packages/nutui-react-cli/tsup.config.ts @@ -1,5 +1,8 @@ +import { readFileSync } from 'node:fs' import { defineConfig } from 'tsup' +const { version } = JSON.parse(readFileSync('package.json', 'utf-8')) + export default defineConfig({ entry: ['src/cli.ts'], format: ['esm'], @@ -8,8 +11,16 @@ export default defineConfig({ dts: false, clean: true, // 把运行时依赖打进产物,使 dist/cli.js 自包含、零安装依赖即可运行。 - noExternal: ['yargs'], + noExternal: ['yargs', '@modelcontextprotocol/sdk'], banner: { - js: '#!/usr/bin/env node', + // MCP SDK 内部用到 CJS require,ESM 产物需补 createRequire。 + js: [ + '#!/usr/bin/env node', + 'import { createRequire } from "node:module";', + 'const require = createRequire(import.meta.url);', + ].join('\n'), + }, + define: { + __CLI_VERSION__: JSON.stringify(version), }, }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 481681fbc6..b2335d4c31 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -488,6 +488,9 @@ importers: packages/nutui-react-cli: dependencies: + '@modelcontextprotocol/sdk': + specifier: ^1.29.0 + version: 1.29.0(zod@4.4.3) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -2193,6 +2196,12 @@ packages: '@hapi/topo@6.0.2': resolution: {integrity: sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==} + '@hono/node-server@1.19.14': + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -2555,6 +2564,16 @@ packages: '@mixmark-io/domino@2.2.0': resolution: {integrity: sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==} + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + '@napi-rs/triples@1.2.0': resolution: {integrity: sha512-HAPjR3bnCsdXBsATpDIP5WCrw0JcACwhhrwIAQhiR46n+jm+a2F8kBsfseAuWtSyQ+H3Yebt2k43B5dy+04yMA==} @@ -4771,6 +4790,10 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-assertions@1.9.0: resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} deprecated: package has been renamed to acorn-import-attributes @@ -5342,6 +5365,10 @@ packages: resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@2.3.0: + resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} + engines: {node: '>=18'} + bonjour-service@1.4.0: resolution: {integrity: sha512-fGQtj1qdR9vIKjFiWPQd52qIqwjaYqhcI40JEiDuvlZ86E7ZBPBwY9fPgHy9r2rYGIjiRfctNPYz6OQU73ww2w==} @@ -5900,10 +5927,18 @@ packages: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + conventional-changelog-angular@8.3.1: resolution: {integrity: sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==} engines: {node: '>=18'} @@ -5926,6 +5961,10 @@ packages: cookie-signature@1.0.7: resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + cookie@0.7.2: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} @@ -5970,6 +6009,10 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + cosmiconfig-typescript-loader@6.3.0: resolution: {integrity: sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==} engines: {node: '>=v18'} @@ -7069,6 +7112,14 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + eventsource-parser@3.1.0: + resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + execa@0.4.0: resolution: {integrity: sha512-QPexBaNjeOjyiZ47q0FCukTO1kX3F+HMM0EWpnxXddcr3MZtElILMkz9Y38nmSZtp03+ZiSRMffrKWBPOIoSIg==} engines: {node: '>=0.12'} @@ -7120,10 +7171,20 @@ packages: expr-parser@1.0.0: resolution: {integrity: sha512-ncuWTCWH0M5KbaYikXxZ3FG3Q+FTYIEXeXAbxYscdZLFNnR5Le5gRU2r/a/JUZHnxwBDZcxWEWzCoPQlW9Engg==} + express-rate-limit@8.5.2: + resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + express@4.22.2: resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} engines: {node: '>= 0.10.0'} + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} @@ -7297,6 +7358,10 @@ packages: resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} engines: {node: '>= 0.8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + find-cache-dir@2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} engines: {node: '>=6'} @@ -7415,6 +7480,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + from2@2.3.0: resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} @@ -7902,6 +7971,10 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hono@4.12.30: + resolution: {integrity: sha512-emn+JoJjrN9YTpRDS5it/UI2SO9BAE37T6I3d963RxcZ81G9A4pr2SZTEiiaiKbzx+NKRg5BZ89fCL7gCJCUog==} + engines: {node: '>=16.9.0'} + hookified@1.15.1: resolution: {integrity: sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==} @@ -8453,6 +8526,9 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-redirect@1.0.0: resolution: {integrity: sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw==} engines: {node: '>=0.10.0'} @@ -8810,6 +8886,9 @@ packages: resolution: {integrity: sha512-2/OKlogiESf2Nh3TFCrRjrr9z1DRHeW0I+KReF67+4J0Ns+8hBtHRmoWAZ2OFU6I5+TWLEe6sVlSdXPjHm5UbQ==} engines: {node: '>= 20'} + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + joycon@3.1.1: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} @@ -8888,6 +8967,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -9495,6 +9577,10 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + memfs@3.5.3: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} @@ -9506,6 +9592,10 @@ packages: merge-descriptors@1.0.3: resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -9647,6 +9737,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} @@ -9862,6 +9956,10 @@ packages: resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} engines: {node: '>= 0.6'} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -10330,6 +10428,9 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -10410,6 +10511,10 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + pkg-dir@3.0.0: resolution: {integrity: sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==} engines: {node: '>=6'} @@ -10974,6 +11079,10 @@ packages: resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} engines: {node: '>= 0.8'} + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} @@ -11422,6 +11531,10 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + rrweb-cssom@0.7.1: resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} @@ -11592,6 +11705,10 @@ packages: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} @@ -11616,6 +11733,10 @@ packages: resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} engines: {node: '>= 0.8.0'} + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + set-cookie-parser@2.7.2: resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} @@ -12536,6 +12657,10 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -13306,6 +13431,14 @@ packages: yup@1.7.1: resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==} + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} + peerDependencies: + zod: ^3.25.28 || ^4 + + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -14839,6 +14972,10 @@ snapshots: dependencies: '@hapi/hoek': 11.0.7 + '@hono/node-server@1.19.14(hono@4.12.30)': + dependencies: + hono: 4.12.30 + '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -15507,6 +15644,28 @@ snapshots: '@mixmark-io/domino@2.2.0': {} + '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': + dependencies: + '@hono/node-server': 1.19.14(hono@4.12.30) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.0 + express: 5.2.1 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.30 + jose: 6.2.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.4.3 + zod-to-json-schema: 3.25.2(zod@4.4.3) + transitivePeerDependencies: + - supports-color + '@napi-rs/triples@1.2.0': {} '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': @@ -18109,6 +18268,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + acorn-import-assertions@1.9.0(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -18165,6 +18329,10 @@ snapshots: optionalDependencies: ajv: 8.13.0 + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + ajv-keywords@3.5.2(ajv@6.15.0): dependencies: ajv: 6.15.0 @@ -18708,6 +18876,20 @@ snapshots: transitivePeerDependencies: - supports-color + body-parser@2.3.0: + dependencies: + bytes: 3.1.2 + content-type: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + bonjour-service@1.4.0: dependencies: fast-deep-equal: 3.1.3 @@ -19366,8 +19548,12 @@ snapshots: dependencies: safe-buffer: 5.2.1 + content-disposition@1.1.0: {} + content-type@1.0.5: {} + content-type@2.0.0: {} + conventional-changelog-angular@8.3.1: dependencies: compare-func: 2.0.0 @@ -19387,6 +19573,8 @@ snapshots: cookie-signature@1.0.7: {} + cookie-signature@1.2.2: {} + cookie@0.7.2: {} cookie@1.1.1: {} @@ -19433,6 +19621,11 @@ snapshots: core-util-is@1.0.3: {} + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + cosmiconfig-typescript-loader@6.3.0(@types/node@20.19.41)(cosmiconfig@9.0.1(typescript@5.9.3))(typescript@5.9.3): dependencies: '@types/node': 20.19.41 @@ -20979,6 +21172,12 @@ snapshots: events@3.3.0: {} + eventsource-parser@3.1.0: {} + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.1.0 + execa@0.4.0: dependencies: cross-spawn-async: 2.2.5 @@ -21076,6 +21275,11 @@ snapshots: expr-parser@1.0.0: {} + express-rate-limit@8.5.2(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.2.0 + express@4.22.2: dependencies: accepts: 1.3.8 @@ -21112,6 +21316,39 @@ snapshots: transitivePeerDependencies: - supports-color + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.3.0 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3(supports-color@8.1.1) + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.2 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + exsolve@1.0.8: {} ext-list@2.2.2: @@ -21278,6 +21515,17 @@ snapshots: transitivePeerDependencies: - supports-color + finalhandler@2.1.1: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + find-cache-dir@2.1.0: dependencies: commondir: 1.0.1 @@ -21405,6 +21653,8 @@ snapshots: fresh@0.5.2: {} + fresh@2.0.0: {} + from2@2.3.0: dependencies: inherits: 2.0.4 @@ -22084,6 +22334,8 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hono@4.12.30: {} + hookified@1.15.1: {} hookified@2.2.0: {} @@ -22619,6 +22871,8 @@ snapshots: is-potential-custom-element-name@1.0.1: {} + is-promise@4.0.0: {} + is-redirect@1.0.0: {} is-reference@1.2.1: @@ -23176,6 +23430,8 @@ snapshots: '@hapi/topo': 6.0.2 '@standard-schema/spec': 1.1.0 + jose@6.2.3: {} + joycon@3.1.1: {} js-tokens@10.0.0: {} @@ -23268,6 +23524,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -23991,6 +24249,8 @@ snapshots: media-typer@0.3.0: {} + media-typer@1.1.0: {} + memfs@3.5.3: dependencies: fs-monkey: 1.1.0 @@ -23999,6 +24259,8 @@ snapshots: merge-descriptors@1.0.3: {} + merge-descriptors@2.0.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -24306,6 +24568,10 @@ snapshots: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + mime@1.6.0: {} mime@2.5.2: {} @@ -24502,6 +24768,8 @@ snapshots: negotiator@0.6.4: {} + negotiator@1.0.0: {} + neo-async@2.6.2: {} netmask@2.1.1: {} @@ -25080,6 +25348,8 @@ snapshots: path-to-regexp@6.3.0: {} + path-to-regexp@8.4.2: {} + path-type@4.0.0: {} path-type@5.0.0: {} @@ -25128,6 +25398,8 @@ snapshots: pirates@4.0.7: {} + pkce-challenge@5.0.1: {} + pkg-dir@3.0.0: dependencies: find-up: 3.0.0 @@ -25665,6 +25937,13 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + rc9@2.1.2: dependencies: defu: 6.1.7 @@ -26279,6 +26558,16 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.60.4 fsevents: 2.3.3 + router@2.2.0: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + rrweb-cssom@0.7.1: {} rrweb-cssom@0.8.0: {} @@ -26461,6 +26750,22 @@ snapshots: transitivePeerDependencies: - supports-color + send@1.2.1: + dependencies: + debug: 4.4.3(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + sentence-case@3.0.4: dependencies: no-case: 3.0.4 @@ -26498,6 +26803,15 @@ snapshots: transitivePeerDependencies: - supports-color + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + set-cookie-parser@2.7.2: {} set-function-length@1.2.2: @@ -27507,6 +27821,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 + type-is@2.1.0: + dependencies: + content-type: 2.0.0 + media-typer: 1.1.0 + mime-types: 3.0.2 + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -28686,4 +29006,10 @@ snapshots: toposort: 2.0.2 type-fest: 2.19.0 + zod-to-json-schema@3.25.2(zod@4.4.3): + dependencies: + zod: 4.4.3 + + zod@4.4.3: {} + zwitch@2.0.4: {} From 04442b666f235971c362bcb0c49770cd12cb6f71 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Wed, 15 Jul 2026 22:05:44 +0800 Subject: [PATCH 14/21] feat: add skills support and documentation for NutUI React CLI --- packages/nutui-react-cli/README.md | 13 ++ packages/nutui-react-cli/package.json | 3 +- packages/nutui-react-cli/skills/.npmignore | 1 + .../skills/nutui-react/SKILL.md | 135 ++++++++++++++++++ 4 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 packages/nutui-react-cli/skills/.npmignore create mode 100644 packages/nutui-react-cli/skills/nutui-react/SKILL.md diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index ce80ed632d..96b0a74c33 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -92,6 +92,19 @@ args = ["-y", "@nutui/nutui-react-cli", "mcp"] > `npx -y` 免全局安装即可拉起;也可全局安装后把 `command` 换成 `nutui-react`、`args` 换成 `["mcp"]`。 +## CLI 内 Skill(教 Agent 何时用) + +CLI 内置一份 [Skill 文件](./skills/nutui-react/SKILL.md)(遵循 Anthropic Agent Skills 规范),随 npm 包一起分发。CLI / MCP 提供的是「能力」,Skill 则约束 Agent「**什么时候、按什么顺序**」用这些能力——例如「写组件前先 `nutui-react info` 查 Props、再 `nutui-react demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 + +安装(skill 已随包 bundle,装好 CLI 后从本地路径装进当前项目): + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 [skills](https://github.com/vercel-labs/skills) 协议的 Agent。安装后,Agent 在遇到 NutUI React 相关任务时会自动遵循「先查后写」的流程。 + ## 本地开发 ```bash diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json index c26b546459..6ea6bbe63f 100644 --- a/packages/nutui-react-cli/package.json +++ b/packages/nutui-react-cli/package.json @@ -23,7 +23,8 @@ }, "files": [ "dist", - "data" + "data", + "skills" ], "engines": { "node": ">=18.12.0" diff --git a/packages/nutui-react-cli/skills/.npmignore b/packages/nutui-react-cli/skills/.npmignore new file mode 100644 index 0000000000..cf7098890e --- /dev/null +++ b/packages/nutui-react-cli/skills/.npmignore @@ -0,0 +1 @@ +**/node_modules diff --git a/packages/nutui-react-cli/skills/nutui-react/SKILL.md b/packages/nutui-react-cli/skills/nutui-react/SKILL.md new file mode 100644 index 0000000000..ddbc3dfdac --- /dev/null +++ b/packages/nutui-react-cli/skills/nutui-react/SKILL.md @@ -0,0 +1,135 @@ +--- +name: nutui-react +description: > + Use when the user's task involves NutUI React (@nutui/nutui-react) — writing + NutUI React components, debugging NutUI issues, or querying NutUI component + APIs/props/docs/demos/design-tokens. Triggers on NutUI-related code, imports + from '@nutui/nutui-react', or explicit NutUI questions. NutUI React is JD's + lightweight mobile (H5) component library. +allowed-tools: + - Bash(nutui-react *) + - Bash(npx -y @nutui/nutui-react-cli *) + - Bash(which nutui-react) +--- + +# NutUI React CLI + +You have access to `@nutui/nutui-react-cli` — a local CLI tool with bundled NutUI React metadata (component props, full docs, runnable demos, and Design Tokens). Use it to query component knowledge before writing code. All data is offline and packaged with the CLI — no network and no API key needed. + +## Setup + +Before first use, check if the CLI is available. If not, invoke it via `npx` (no global install required): + +```bash +which nutui-react || echo "use: npx -y @nutui/nutui-react-cli " +``` + +Both forms work — use whichever is available: + +- Installed globally: `nutui-react info Button` +- Via npx (no install): `npx -y @nutui/nutui-react-cli info Button` + +Examples below use the `nutui-react` form for brevity. + +**Always pass `--format json` for structured output you can parse programmatically** (default output is human-readable `text`). + +## Scenarios + +### 1. Writing NutUI React component code + +Before writing any NutUI component code, look up its API first — don't rely on memory. + +```bash +# Check what props are available (grouped by table, e.g. Props / sub-component props) +nutui-react info Button --format json + +# Get a runnable demo as a starting point +nutui-react demo Button # list all demo names first +nutui-react demo Button demo1 --format json # then fetch one demo's source + +# Check component-level Design Tokens for theming (var(--nutui-*) system) +nutui-react token Button --format json +``` + +**Workflow:** `nutui-react info` → understand props → `nutui-react demo` → grab a runnable example → write code. + +### 2. Looking up full documentation + +When you need comprehensive component docs (not just the props table): + +```bash +nutui-react doc Cell --format json # full markdown docs (Chinese, default) +nutui-react doc Cell --lang en --format json # English docs +``` + +`--lang` accepts `zh` (default) or `en`. + +### 3. Exploring available components + +When the user is choosing which component to use, or you need to confirm a component exists before importing it: + +```bash +# List all components with Chinese name and version, grouped by category +nutui-react list --format json + +# Filter to a category (pass the category enName, e.g. base / feedback / nav) +nutui-react list --category feedback --format json +``` + +If you query a component name that doesn't exist, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. + +### 4. Querying Design Tokens + +When customizing theme/colors/spacing, use the `var(--nutui-*)` token system rather than hardcoding values: + +```bash +# Global tokens (colors, spacing, radius, etc.) +nutui-react token --format json + +# Component-level tokens +nutui-react token Button --format json +``` + +### 5. Using as an MCP server + +If working in an IDE that supports MCP (Claude Code, Cursor, VS Code, Codex, etc.), the CLI can run as a local stdio MCP server, exposing the same knowledge-query capabilities as IDE-native tools: + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +This provides 5 tools (`nutui_list`, `nutui_info`, `nutui_doc`, `nutui_demo`, `nutui_token`) and 2 prompts (`nutui-expert`, `nutui-page-generator`) via the MCP protocol. When these tools are available in the conversation, prefer calling them directly over shelling out to the CLI. + +## Commands + +| Command | Purpose | +| --- | --- | +| `nutui-react list [--category ]` | List all components (name / Chinese name / version), grouped by category | +| `nutui-react info ` | Component props table (prop / desc / type / default), grouped by table | +| `nutui-react doc [--lang zh\|en]` | Full component markdown docs (default Chinese) | +| `nutui-react demo [name]` | Omit `name` to list demos; pass `name` (e.g. `demo1`) for source | +| `nutui-react token [Component]` | Design Tokens — omit component for global tokens | +| `nutui-react mcp` | Start a local stdio MCP server for IDE integration | + +## Global Flags + +| Flag | Purpose | +| --- | --- | +| `--format, -f ` | Output format; agents should prefer `json` (default: `text`) | +| `--lang, -l ` | Doc language for `doc` / `mcp` (default: `zh`) | +| `--help, -h` | Show help | +| `--version, -v` | Print CLI version | + +## Key Rules + +1. **Always query before writing** — Don't guess NutUI APIs, prop names, or enum values from memory. Run `nutui-react info` (and `nutui-react demo` for a working example) first. +2. **Use `--format json`** — Every command supports it. Parse the JSON output rather than regex-matching the human-readable text. +3. **Confirm the component exists** — If unsure of the exact name, run `nutui-react list` or rely on the CLI's "did you mean" suggestion instead of importing a guessed name. +4. **Use Design Tokens for styling** — NutUI uses `nut-` flat BEM class names and the `var(--nutui-*)` token system. When customizing appearance, query `nutui-react token` and use tokens rather than hardcoding colors or spacing. From 14ed61c9cf393f4b11638fee8d60b5300efc6db0 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 11:00:16 +0800 Subject: [PATCH 15/21] feat: update paths and add navigation for 'For Agents' in NutUI-React documentation --- src/sites/config/baseConfig.ts | 8 +- .../sites-react/doc/components/nav/nav.tsx | 30 ++++++ .../doc/docs/ai-react/cli.en-US.md | 91 +++++++++++++++++++ .../sites-react/doc/docs/ai-react/cli.md | 91 +++++++++++++++++++ .../doc/docs/ai-react/for-agents.en-US.md | 66 ++++++++++++++ .../doc/docs/ai-react/for-agents.md | 66 ++++++++++++++ .../doc/docs/ai-react/mcp.en-US.md | 79 ++++++++++++++++ .../sites-react/doc/docs/ai-react/mcp.md | 79 ++++++++++++++++ 8 files changed, 506 insertions(+), 4 deletions(-) create mode 100644 src/sites/sites-react/doc/docs/ai-react/cli.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/cli.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/for-agents.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md create mode 100644 src/sites/sites-react/doc/docs/ai-react/mcp.md diff --git a/src/sites/config/baseConfig.ts b/src/sites/config/baseConfig.ts index 5738631669..3e5a0ac1ec 100644 --- a/src/sites/config/baseConfig.ts +++ b/src/sites/config/baseConfig.ts @@ -46,8 +46,8 @@ export const SiteReact = { name: 'llms', cName: 'AI', eName: 'AI', - path: '/zh-CN/ai/llms', - pathName: 'llms' + path: '/zh-CN/ai/for-agents', + pathName: 'for-agents' } ], language: 'react' @@ -100,8 +100,8 @@ export const SiteReactTaro = { name: 'llms', cName: 'AI', eName: 'AI', - path: '/zh-CN/ai/llms', - pathName: 'llms' + path: '/zh-CN/ai/for-agents', + pathName: 'for-agents' } ], language: 'react' diff --git a/src/sites/sites-react/doc/components/nav/nav.tsx b/src/sites/sites-react/doc/components/nav/nav.tsx index 13a4f7790d..69b8e38ae0 100644 --- a/src/sites/sites-react/doc/components/nav/nav.tsx +++ b/src/sites/sites-react/doc/components/nav/nav.tsx @@ -46,6 +46,36 @@ const Nav = () => { {isAi ? (
          +
        • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/ai/for-agents`} + > + For Agents + +
        • +
        • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/ai/cli`} + > + CLI + +
        • +
        • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/ai/mcp`} + > + MCP Server + +
        • diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md new file mode 100644 index 0000000000..8a93ca2a20 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -0,0 +1,91 @@ +# CLI + +This guide explains how to use `@nutui/nutui-react-cli` to query NutUI-React component knowledge from the command line. + +## What is the NutUI-React CLI? + +[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) is an **offline knowledge-query CLI for NutUI-React**, built for AI coding. It bundles component props, docs, demos, and Design Tokens with the package, so AI coding assistants (Claude Code / Cursor / Copilot, etc.) can _look up_ APIs instead of _guessing_ them — eliminating API hallucinations at the source. + +## Highlights + +- **Fully offline, zero API key** — Component metadata, docs, and demos are bundled at build time. Once installed, queries run locally in milliseconds with no network requests and no latency. +- **Structured output** — Every command supports `--format json` for agents to parse directly, instead of regex-matching text. +- **Smart correction** — Component names are case-insensitive; typed `Buttn`? The CLI suggests `Button` based on edit distance rather than just erroring out. +- **Bilingual docs** — The `doc` command supports `--lang zh|en` to switch between Chinese and English. + +## Install + +```bash +npm install -g @nutui/nutui-react-cli +``` + +Requires Node.js `>=18.12.0`. You can also skip the install and invoke it via `npx` (recommended, always uses the latest version): + +```bash +npx @nutui/nutui-react-cli list +npx @nutui/nutui-react-cli info Button +``` + +After a global install, use the `nutui-react` command: + +```bash +nutui-react info Button --format json +``` + +## Quick start + +```bash +nutui-react list # List all components (by category) +nutui-react list --category feedback # Filter by category +nutui-react info Button # Props table (prop / desc / type / default) +nutui-react doc Button # Full Markdown docs (Chinese by default) +nutui-react doc Button --lang en # English docs +nutui-react demo Button # List all H5 demo names for the component +nutui-react demo Button demo1 # View a demo's source +nutui-react token # Global Design Tokens +nutui-react token Button # Component-level Design Tokens +nutui-react mcp # Start a local MCP server for IDE integration +``` + +## Commands + +| Command | Description | +| --- | --- | +| `nutui-react list [--category ]` | List all components (name / Chinese name / category / version); filter by category enName (e.g. `base` / `feedback`) | +| `nutui-react info ` | Component props table, grouped by table (prop / desc / type / default) | +| `nutui-react doc [--lang zh\|en]` | Full component Markdown docs (Chinese by default) | +| `nutui-react demo [name]` | Omit `name` to list all demos; pass `name` (e.g. `demo1`) for source | +| `nutui-react token [Component]` | Design Tokens; omit the component name to list global tokens | +| `nutui-react mcp` | Start a local MCP server (stdio) for Claude Code / Cursor / VS Code / Codex IDE integration | + +When a component name isn't found, the CLI returns a "did you mean" suggestion (e.g. `Buttn` → `Button`) — use it to correct the name rather than guessing. + +## Global flags + +| Flag | Description | Default | +| --- | --- | --- | +| `--format, -f ` | Output format; agents should prefer `json` | `text` | +| `--lang, -l ` | Doc language (for `doc` / `mcp`) | `zh` | +| `--help, -h` | Show help | - | +| `--version, -v` | Print the CLI version | - | + +## Usage with AI tools + +The CLI ships with a Skill file following the [Agent Skills](https://github.com/vercel-labs/skills) spec, distributed with the npm package. It guides the agent to call the right command at the right time — e.g. "look up props with `info` and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". + +Install into the current project (the skill is bundled with the package; install it from the local path after installing the CLI): + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +Once installed, the agent automatically follows the "look up first, then write" workflow when it encounters NutUI-React tasks. Compatible with Claude Code / Cursor / VS Code / Codex and any agent that supports the skills protocol. + +If your IDE supports MCP, the CLI can also run as an MCP server, registering the same capabilities as IDE-native tools. See the [MCP Server](/#/en-US/ai/mcp) guide. + +## Learn more + +- [MCP Server](/#/en-US/ai/mcp) +- [LLMs.txt](/#/en-US/ai/llms) +- [For Agents](/#/en-US/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md new file mode 100644 index 0000000000..ba64ddfb77 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -0,0 +1,91 @@ +# CLI + +本篇介绍如何使用 `@nutui/nutui-react-cli` 从命令行查询 NutUI-React 的组件知识。 + +## 什么是 NutUI-React CLI? + +[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) 是面向 AI Coding 的 **NutUI-React 离线知识查询 CLI**。它把组件的 Props、文档、示例与 Design Token 打包随包分发,让 AI 编程助手(Claude Code / Cursor / Copilot 等)从「猜 API」变成「查 API」,从根源消除 API 幻觉。 + +## 亮点 + +- **完全离线、零 API Key** — 组件元数据与文档、示例在构建期打包进入,安装后本地毫秒级查询,无网络请求、无延迟。 +- **结构化输出** — 所有命令支持 `--format json`,供 Agent 直接解析,而非正则抓文本。 +- **智能纠错** — 组件名大小写不敏感;输入 `Buttn`?CLI 基于编辑距离建议 `Button`,而非直接报错。 +- **双语文档** — `doc` 命令支持 `--lang zh|en` 切换中英文。 + +## 安装 + +```bash +npm install -g @nutui/nutui-react-cli +``` + +需要 Node.js `>=18.12.0`。也可以免安装,用 `npx` 直接调用(推荐,始终使用最新版): + +```bash +npx @nutui/nutui-react-cli list +npx @nutui/nutui-react-cli info Button +``` + +全局安装后使用 `nutui-react` 命令: + +```bash +nutui-react info Button --format json +``` + +## 快速开始 + +```bash +nutui-react list # 列出全部组件(按分类) +nutui-react list --category feedback # 按分类筛选 +nutui-react info Button # 组件 Props 表(属性 / 说明 / 类型 / 默认值) +nutui-react doc Button # 组件完整 Markdown 文档(默认中文) +nutui-react doc Button --lang en # 英文文档 +nutui-react demo Button # 列出组件的全部 H5 示例名 +nutui-react demo Button demo1 # 查看某个示例的源码 +nutui-react token # 全局 Design Token +nutui-react token Button # 组件级 Design Token +nutui-react mcp # 启动本地 MCP 服务,供 IDE 集成 +``` + +## 命令 + +| 命令 | 说明 | +| --- | --- | +| `nutui-react list [--category ]` | 列出全部组件(英文名 / 中文名 / 分类 / 版本),可按分类英文名筛选(如 `base` / `feedback`) | +| `nutui-react info ` | 组件 Props 表,按表格分组(属性 / 说明 / 类型 / 默认值) | +| `nutui-react doc [--lang zh\|en]` | 组件完整 Markdown 文档,默认中文 | +| `nutui-react demo [name]` | 省略 `name` 列出全部示例;指定 `name`(如 `demo1`)输出源码 | +| `nutui-react token [Component]` | Design Token;省略组件名则列出全局 token | +| `nutui-react mcp` | 启动本地 MCP 服务(stdio),供 Claude Code / Cursor / VS Code / Codex 等 IDE 集成 | + +未命中组件名时,CLI 会给出「你是否想找」建议(如 `Buttn` → `Button`),据此纠正而非凭空猜测。 + +## 全局参数 + +| 参数 | 说明 | 默认值 | +| --- | --- | --- | +| `--format, -f ` | 输出格式;Agent 应优先用 `json` | `text` | +| `--lang, -l ` | 文档语言(用于 `doc` / `mcp`) | `zh` | +| `--help, -h` | 显示帮助 | - | +| `--version, -v` | 打印 CLI 版本号 | - | + +## 在 AI 工具中使用 + +CLI 内置一份遵循 [Agent Skills](https://github.com/vercel-labs/skills) 规范的 Skill 文件,随 npm 包分发,指导 Agent 在正确的时机调用正确的命令——例如「写组件前先 `info` 查 Props、再 `demo` 拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 + +安装到当前项目(skill 已随包 bundle,装好 CLI 后从本地路径安装): + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +安装后,Agent 在遇到 NutUI-React 相关任务时会自动遵循「先查后写」的流程。兼容 Claude Code / Cursor / VS Code / Codex 等所有支持 skills 协议的 Agent。 + +如果你的 IDE 支持 MCP,CLI 也能作为 MCP 服务运行,把同一份能力注册成 IDE 原生工具,详见 [MCP Server](/#/zh-CN/ai/mcp) 指南。 + +## 了解更多 + +- [MCP Server](/#/zh-CN/ai/mcp) +- [LLMs.txt](/#/zh-CN/ai/llms) +- [For Agents](/#/zh-CN/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md new file mode 100644 index 0000000000..9ecb1c659f --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md @@ -0,0 +1,66 @@ +# For Agents + +This page provides a ready-to-use prompt that lets any AI coding agent work effectively with NutUI-React. + +## Copy this prompt + +Paste the following into your agent conversation or automation flow, so it builds the right context before writing any NutUI-React code: + +```text +Before writing any NutUI-React (@nutui/nutui-react) code, first read https://nutui.jd.com/h5/react/4x/llms-full.txt to understand the components' real APIs, usage, and style structure. Do not guess props or enum values from memory. Always look up the docs before using a component, then write code. + +If your environment supports skills, run: +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +## What the agent gets + +### CLI — offline knowledge query + +[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) bundles component props, docs, demos, and Design Tokens with the package, so queries run locally in milliseconds — no network, no API key. + +```bash +npx @nutui/nutui-react-cli info Button +``` + +Full reference: [CLI](/#/en-US/ai/cli) + +### MCP Server — IDE integration + +The CLI can also run as a local MCP server, registering the same knowledge as IDE-native tools so Claude Code, Cursor, VS Code, Codex, and others can call them on demand in conversation. It exposes 5 read-only tools and 2 prompts. + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +Full reference: [MCP Server](/#/en-US/ai/mcp) + +### Skill — teaches the agent when to use it + +The CLI ships with a Skill file following the Agent Skills spec. The CLI/MCP provide the _capabilities_; the Skill constrains _when and in what order_ the agent uses them — e.g. "look up props and grab a demo before writing a component" and "customize styles with `var(--nutui-*)` tokens instead of hardcoded colors". + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +### LLMs.txt — structured documentation + +Inject the complete component documentation directly into the AI context — ideal for tools that don't support CLI/MCP: + +| File | Description | +| --- | --- | +| [llms.txt](https://nutui.jd.com/h5/react/4x/llms.txt) | Documentation navigation index | +| [llms-full.txt](https://nutui.jd.com/h5/react/4x/llms-full.txt) | Complete component documentation (English) | +| [llms-full-cn.txt](https://nutui.jd.com/h5/react/4x/llms-full-cn.txt) | Complete component documentation (Chinese) | + +You can also fetch a single component's docs: `https://nutui.jd.com/h5/react/4x/components/button.md`. + +Full reference: [LLMs.txt](/#/en-US/ai/llms) diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.md new file mode 100644 index 0000000000..d6cf981861 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.md @@ -0,0 +1,66 @@ +# For Agents + +本页提供一段开箱即用的提示词,让任何 AI 编程 Agent 高效使用 NutUI-React。 + +## 复制这段提示词 + +把下面这段话复制到你的 Agent 对话或自动化流程中,让它在写 NutUI-React 代码前先建立正确的上下文: + +```text +在编写任何 NutUI-React(@nutui/nutui-react)代码之前,请先阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 理解组件的真实 API、用法与样式结构,不要凭记忆猜测 Prop 或枚举值。使用任何组件前先查文档,再写代码。 + +如果你的环境支持 skills,请运行: +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +## Agent 获得什么 + +### CLI — 离线知识查询 + +[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) 把组件的 Props、文档、示例与 Design Token 打包随包分发,安装后本地毫秒级查询,无需网络、无需 API Key。 + +```bash +npx @nutui/nutui-react-cli info Button +``` + +完整参考:[CLI](/#/zh-CN/ai/cli) + +### MCP Server — IDE 集成 + +CLI 同时可作为本地 MCP 服务运行,把同一份知识注册成 IDE 原生工具,让 Claude Code、Cursor、VS Code、Codex 等在对话中按需自动调用,提供 5 个只读工具与 2 个提示词。 + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +完整参考:[MCP Server](/#/zh-CN/ai/mcp) + +### Skill — 教 Agent 何时用 + +CLI 内置一份遵循 Agent Skills 规范的 Skill 文件,随包分发。CLI/MCP 提供的是「能力」,Skill 则约束 Agent「什么时候、按什么顺序」用这些能力——例如「写组件前先查 Props 再拿示例」「定制样式用 `var(--nutui-*)` token 而非硬编码颜色」。 + +```bash +npm i -D @nutui/nutui-react-cli +npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react +``` + +### LLMs.txt — 结构化文档 + +把完整的组件文档直接注入 AI 上下文,适合不支持 CLI/MCP 的工具: + +| 文件 | 说明 | +| --- | --- | +| [llms.txt](https://nutui.jd.com/h5/react/4x/llms.txt) | 文档导航索引 | +| [llms-full-cn.txt](https://nutui.jd.com/h5/react/4x/llms-full-cn.txt) | 全部组件文档(中文) | +| [llms-full.txt](https://nutui.jd.com/h5/react/4x/llms-full.txt) | 全部组件文档(英文) | + +也可以获取单个组件文档:`https://nutui.jd.com/h5/react/4x/components/button.md`。 + +完整参考:[LLMs.txt](/#/zh-CN/ai/llms) diff --git a/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md b/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md new file mode 100644 index 0000000000..88be6273a6 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/mcp.en-US.md @@ -0,0 +1,79 @@ +# MCP Server + +This guide explains how to use NutUI-React in AI tools through the Model Context Protocol (MCP). + +## What is MCP? + +[Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open protocol that lets AI models interact with external tools and data sources. Through MCP, AI assistants can directly access NutUI-React's component docs, code examples, and API references. + +The CLI is "the agent runs commands"; MCP registers the same capabilities as IDE-native tools, so Claude Code / Cursor / VS Code / Codex can call them **automatically on demand** in conversation, without assembling command-line strings. Both reuse the same offline metadata snapshot — two calling protocols over one knowledge base. + +## Start the MCP server + +`nutui-react mcp` starts a local MCP server that communicates over stdio, exposing 5 read-only tools and 2 prompts. This command shouldn't be run directly in a terminal — configure it in your AI tool instead (see below). + +### Tools + +| Tool | Description | +| --- | --- | +| `nutui_list` | List all components (filterable by category) | +| `nutui_info` | Get a component's props spec | +| `nutui_doc` | Get a component's full docs (`lang: zh\|en`) | +| `nutui_demo` | Get a component's H5 demo list / source | +| `nutui_token` | Query Design Tokens (global / component-level) | + +All tools are read-only, side-effect-free, and do not access the external network. + +### Prompts + +| Prompt | Description | +| --- | --- | +| `nutui-expert` | Positions the agent as a NutUI-React expert (look up first, then write) | +| `nutui-page-generator` | Generate a complete, runnable page from NutUI-React components | + +## Configuration + +Shared config for **Claude Code** (`.mcp.json` or `claude mcp add`), **Cursor** (`.cursor/mcp.json`), and **VS Code** (the `servers` field in `.vscode/mcp.json`): + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +**Codex** (`~/.codex/config.toml`): + +```toml +[mcp_servers.nutui-react] +command = "npx" +args = ["-y", "@nutui/nutui-react-cli", "mcp"] +``` + +`npx -y` launches it without a global install; alternatively, after a global install, change `command` to `nutui-react` and `args` to `["mcp"]`. + +## Usage with AI tools + +| Tool | Configuration | +| --- | --- | +| **Claude Code** | Add to `.mcp.json`, or use the `claude mcp add` command | +| **Cursor** | Add to `.cursor/mcp.json`, or Settings → MCP | +| **VS Code** | Add to the `servers` field in `.vscode/mcp.json` | +| **Codex** | Add to `~/.codex/config.toml` | + +When these tools are available in the conversation, the agent prefers to call them directly instead of assembling command-line strings. + +## Alternative: use LLMs.txt + +If your AI tool doesn't support MCP, use the [LLMs.txt](/#/en-US/ai/llms) support to inject complete component documentation directly into the AI context. + +## Learn more + +- [Model Context Protocol docs](https://modelcontextprotocol.io/) +- [CLI](/#/en-US/ai/cli) +- [LLMs.txt](/#/en-US/ai/llms) +- [For Agents](/#/en-US/ai/for-agents) diff --git a/src/sites/sites-react/doc/docs/ai-react/mcp.md b/src/sites/sites-react/doc/docs/ai-react/mcp.md new file mode 100644 index 0000000000..f153dd4e05 --- /dev/null +++ b/src/sites/sites-react/doc/docs/ai-react/mcp.md @@ -0,0 +1,79 @@ +# MCP Server + +本篇介绍如何通过 Model Context Protocol (MCP) 在 AI 工具中使用 NutUI-React。 + +## 什么是 MCP? + +[Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 是一个开放协议,使 AI 模型能够与外部工具和数据源交互。通过 MCP,AI 助手可以直接访问 NutUI-React 的组件文档、代码示例和 API 参考。 + +CLI 是「Agent 主动敲命令」,MCP 则把同一份能力注册成 IDE 原生工具,让 Claude Code / Cursor / VS Code / Codex 在对话中**按需自动调用**,无需拼命令行字符串。二者复用同一份离线元数据快照,等于给同一个知识库套了两种调用协议。 + +## 启动 MCP 服务 + +`nutui-react mcp` 启动一个通过 stdio 通信的本地 MCP 服务,暴露 5 个只读工具与 2 个提示词。该命令不应在终端直接裸跑,而应在 AI 工具中配置(见下方)。 + +### 工具 + +| 工具 | 说明 | +| --- | --- | +| `nutui_list` | 列出全部组件(可按分类筛选) | +| `nutui_info` | 获取组件的 Props 规格 | +| `nutui_doc` | 获取组件完整文档(`lang: zh\|en`) | +| `nutui_demo` | 获取组件 H5 示例列表 / 源码 | +| `nutui_token` | 查询 Design Token(全局 / 组件级) | + +所有工具均为只读、无副作用、不访问外部网络。 + +### 提示词 + +| 提示词 | 说明 | +| --- | --- | +| `nutui-expert` | 把 Agent 定位为 NutUI-React 专家(先查后写) | +| `nutui-page-generator` | 基于 NutUI-React 组件生成完整可运行页面 | + +## 配置 + +**Claude Code**(`.mcp.json` 或 `claude mcp add`)、**Cursor**(`.cursor/mcp.json`)、**VS Code**(`.vscode/mcp.json` 的 `servers` 字段)通用配置: + +```json +{ + "mcpServers": { + "nutui-react": { + "command": "npx", + "args": ["-y", "@nutui/nutui-react-cli", "mcp"] + } + } +} +``` + +**Codex**(`~/.codex/config.toml`): + +```toml +[mcp_servers.nutui-react] +command = "npx" +args = ["-y", "@nutui/nutui-react-cli", "mcp"] +``` + +`npx -y` 免全局安装即可拉起;也可全局安装 CLI 后把 `command` 换成 `nutui-react`、`args` 换成 `["mcp"]`。 + +## 在 AI 工具中的使用 + +| 工具 | 配置 | +| --- | --- | +| **Claude Code** | 添加到 `.mcp.json`,或用 `claude mcp add` 命令 | +| **Cursor** | 添加到 `.cursor/mcp.json`,或设置 → MCP | +| **VS Code** | 添加到 `.vscode/mcp.json` 的 `servers` 字段 | +| **Codex** | 添加到 `~/.codex/config.toml` | + +当这些工具在对话中可用时,Agent 会优先直接调用,而非再拼命令行字符串。 + +## 备选方案:使用 LLMs.txt + +如果你的 AI 工具不支持 MCP,可以使用 [LLMs.txt](/#/zh-CN/ai/llms) 支持,把完整的组件文档直接注入 AI 上下文。 + +## 了解更多 + +- [Model Context Protocol 文档](https://modelcontextprotocol.io/) +- [CLI](/#/zh-CN/ai/cli) +- [LLMs.txt](/#/zh-CN/ai/llms) +- [For Agents](/#/zh-CN/ai/for-agents) From 57f7748cad94a2a51202b9ffc26d9f8b10da1cea Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 11:39:35 +0800 Subject: [PATCH 16/21] feat: harden readDemo path checks and fix nutui_doc lang fallback Co-authored-by: Cursor --- packages/nutui-react-cli/src/data.ts | 4 ++++ packages/nutui-react-cli/src/mcp/tools.ts | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/nutui-react-cli/src/data.ts b/packages/nutui-react-cli/src/data.ts index 1d957d427e..32530c16b7 100644 --- a/packages/nutui-react-cli/src/data.ts +++ b/packages/nutui-react-cli/src/data.ts @@ -87,6 +87,10 @@ export function listDemos(component: Component): string[] { // 读取组件某个 demo 的源码。name 形如 demo1(也容忍带 .tsx)。缺失返回 null。 export function readDemo(component: Component, name: string): string | null { + // 防御路径穿越:确保 name 中不包含路径分隔符 + if (name.includes('/') || name.includes('\\')) { + return null + } const base = name.endsWith('.tsx') ? name : `${name}.tsx` const file = path.join(DATA_DIR, 'demos', component.id, base) return fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : null diff --git a/packages/nutui-react-cli/src/mcp/tools.ts b/packages/nutui-react-cli/src/mcp/tools.ts index 90c8e75b74..9a85ead9ce 100644 --- a/packages/nutui-react-cli/src/mcp/tools.ts +++ b/packages/nutui-react-cli/src/mcp/tools.ts @@ -199,7 +199,7 @@ export function createToolHandler(ctx: McpContext) { case 'nutui_doc': { const comp = resolve(meta, params.component as string) if (isError(comp)) return toMcpResult(comp) - const lang = (params.lang as Lang) === 'en' ? 'en' : ctx.lang + const lang = (params.lang as Lang) ?? ctx.lang const content = readDoc(comp, lang) if (content === null) { return toMcpResult( From 762fc2a885473b846821ec82d7b48f54623508bd Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 12:00:26 +0800 Subject: [PATCH 17/21] fix: add -y flag to npx commands in README for improved usability --- packages/nutui-react-cli/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index 96b0a74c33..db86784fa0 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -13,8 +13,8 @@ 免安装(推荐): ```bash -npx @nutui/nutui-react-cli list -npx @nutui/nutui-react-cli info Button +npx -y @nutui/nutui-react-cli list +npx -y @nutui/nutui-react-cli info Button ``` 或全局安装后用 `nutui-react` 命令: From 81c548e1281176f4f932afcc365b79f245b47dae Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 14:34:15 +0800 Subject: [PATCH 18/21] chore: update version to 0.1.0 in package.json for @nutui/nutui-react-cli --- packages/nutui-react-cli/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nutui-react-cli/package.json b/packages/nutui-react-cli/package.json index 6ea6bbe63f..1d8322e23a 100644 --- a/packages/nutui-react-cli/package.json +++ b/packages/nutui-react-cli/package.json @@ -1,6 +1,6 @@ { "name": "@nutui/nutui-react-cli", - "version": "0.0.1", + "version": "0.1.0", "type": "module", "description": "NutUI React 面向 AI Coding 的离线知识查询 CLI:list / info / doc / demo / token。", "keywords": [ From dc92d26032ab124eb4ebf9a247ae5d810153e50c Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 14:44:31 +0800 Subject: [PATCH 19/21] feat: enhance prepare-data script to auto-regenerate meta --- packages/nutui-react-cli/README.md | 8 ++--- .../nutui-react-cli/scripts/prepare-data.mjs | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/nutui-react-cli/README.md b/packages/nutui-react-cli/README.md index db86784fa0..faf8f29486 100644 --- a/packages/nutui-react-cli/README.md +++ b/packages/nutui-react-cli/README.md @@ -108,9 +108,7 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react ## 本地开发 ```bash -# 仓库根:确保 meta 最新 -npm run generate:meta -# 本包:构建(prepare-data + tsup) +# 本包:构建(build 会先自动 generate:meta 再 prepare-data + tsup) pnpm --dir packages/nutui-react-cli build # 本地试跑 node packages/nutui-react-cli/dist/cli.js list @@ -119,9 +117,7 @@ node packages/nutui-react-cli/dist/cli.js list ## 发布 ```bash -# 1. 仓库根:确保 meta 最新(读 src/config.json 等,幂等可重复) -npm run generate:meta -# 2. 发布 beta(bumpp 选版本 -> prepublishOnly 跑 build -> pnpm publish --tag beta) +# 发布 beta(bumpp 选版本 -> prepublishOnly 跑 build -> pnpm publish --tag beta) pnpm --dir packages/nutui-react-cli release:beta # 或发布正式版 pnpm --dir packages/nutui-react-cli release diff --git a/packages/nutui-react-cli/scripts/prepare-data.mjs b/packages/nutui-react-cli/scripts/prepare-data.mjs index 86a13d72dc..c4f3070506 100644 --- a/packages/nutui-react-cli/scripts/prepare-data.mjs +++ b/packages/nutui-react-cli/scripts/prepare-data.mjs @@ -1,22 +1,53 @@ // 读仓库根 meta/components.json,为 @nutui/nutui-react-cli 产出自包含的 data/ 快照。 // 仅 React(H5)端:docs 取 h5(中文)/enUS(英文),demos 取 h5。忽略 zhTW / taro 维度。 // 让发布后的 CLI 无需依赖仓库源码即可离线运行 doc / demo 命令。 +// 会先自动重生成 meta(generate:meta),无需手动同步。 // DO NOT manual edit the output (data/). Run: pnpm run prepare-data import fs from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' +import { execFileSync } from 'node:child_process' const __dirname = path.dirname(fileURLToPath(import.meta.url)) const PKG_DIR = path.resolve(__dirname, '..') // 仓库根:packages/nutui-react-cli/scripts -> ../../.. const REPO_ROOT = path.resolve(PKG_DIR, '..', '..') const META_PATH = path.join(REPO_ROOT, 'meta/components.json') +const BUILD_META_SCRIPT = path.join(REPO_ROOT, 'scripts/build-meta.mjs') const DATA_DIR = path.join(PKG_DIR, 'data') // meta.docs 的 key -> CLI 语言维度。仅保留 React/H5 端用到的两种。 const DOC_KEYS = ['h5', 'enUS'] +// 先重生成 meta 再读,确保快照与仓库源码(config/properties/demos/...)同步, +// 免去手动 generate:meta 的漏同步风险。build-meta 纯读源码且幂等,可安全重复执行。 +function regenerateMeta() { + if (!fs.existsSync(BUILD_META_SCRIPT)) { + // 脱离 monorepo(如已发布包被重新 build),无源码可生成,沿用现有快照。 + console.log('ℹ️ 未找到 build-meta 脚本,跳过 meta 重生成(沿用现有快照)') + return + } + console.log('🔄 重新生成 meta/components.json(generate:meta)...') + execFileSync(process.execPath, [BUILD_META_SCRIPT], { stdio: 'inherit' }) +} + function readMeta() { + try { + regenerateMeta() + } catch (err) { + // meta 生成失败:有旧快照则告警后沿用,否则无从继续。 + if (fs.existsSync(META_PATH)) { + console.warn( + `⚠️ meta 重生成失败(${err.message}),沿用现有 ${path.relative(REPO_ROOT, META_PATH)}` + ) + } else { + console.error( + `❌ meta 重生成失败且无现有快照:${err.message}\n` + + ` 请在仓库根手动执行:npm run generate:meta` + ) + process.exit(1) + } + } if (!fs.existsSync(META_PATH)) { console.error( `❌ 未找到 ${path.relative(REPO_ROOT, META_PATH)}。\n` + From d374fea8cd212d5d265c4a3e5f137fd150254031 Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 14:53:56 +0800 Subject: [PATCH 20/21] docs: add installation instruction for @nutui/nutui-react-cli in 'For Agents' documentation --- src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md | 1 + src/sites/sites-react/doc/docs/ai-react/for-agents.md | 1 + 2 files changed, 2 insertions(+) diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md index 9ecb1c659f..75f7ab6c65 100644 --- a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md @@ -10,6 +10,7 @@ Paste the following into your agent conversation or automation flow, so it build Before writing any NutUI-React (@nutui/nutui-react) code, first read https://nutui.jd.com/h5/react/4x/llms-full.txt to understand the components' real APIs, usage, and style structure. Do not guess props or enum values from memory. Always look up the docs before using a component, then write code. If your environment supports skills, run: +npm i -D @nutui/nutui-react-cli npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react ``` diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.md index d6cf981861..ea3160d7a2 100644 --- a/src/sites/sites-react/doc/docs/ai-react/for-agents.md +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.md @@ -10,6 +10,7 @@ 在编写任何 NutUI-React(@nutui/nutui-react)代码之前,请先阅读 https://nutui.jd.com/h5/react/4x/llms-full-cn.txt 理解组件的真实 API、用法与样式结构,不要凭记忆猜测 Prop 或枚举值。使用任何组件前先查文档,再写代码。 如果你的环境支持 skills,请运行: +npm i -D @nutui/nutui-react-cli npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react ``` From f39d6098e5fc86e20f26f4d37e23436c4bcb013f Mon Sep 17 00:00:00 2001 From: alvinhui Date: Thu, 16 Jul 2026 15:05:46 +0800 Subject: [PATCH 21/21] docs: update links to @nutui/nutui-react-cli in CLI documentation for consistency --- src/sites/sites-react/doc/docs/ai-react/cli.en-US.md | 2 +- src/sites/sites-react/doc/docs/ai-react/cli.md | 2 +- src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md | 2 +- src/sites/sites-react/doc/docs/ai-react/for-agents.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md index 8a93ca2a20..6acae8157c 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.en-US.md @@ -4,7 +4,7 @@ This guide explains how to use `@nutui/nutui-react-cli` to query NutUI-React com ## What is the NutUI-React CLI? -[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) is an **offline knowledge-query CLI for NutUI-React**, built for AI coding. It bundles component props, docs, demos, and Design Tokens with the package, so AI coding assistants (Claude Code / Cursor / Copilot, etc.) can _look up_ APIs instead of _guessing_ them — eliminating API hallucinations at the source. +[@nutui/nutui-react-cli](https://www.npmjs.com/package/@nutui/nutui-react-cli) is an **offline knowledge-query CLI for NutUI-React**, built for AI coding. It bundles component props, docs, demos, and Design Tokens with the package, so AI coding assistants (Claude Code / Cursor / Copilot, etc.) can _look up_ APIs instead of _guessing_ them — eliminating API hallucinations at the source. ## Highlights diff --git a/src/sites/sites-react/doc/docs/ai-react/cli.md b/src/sites/sites-react/doc/docs/ai-react/cli.md index ba64ddfb77..4772d759c5 100644 --- a/src/sites/sites-react/doc/docs/ai-react/cli.md +++ b/src/sites/sites-react/doc/docs/ai-react/cli.md @@ -4,7 +4,7 @@ ## 什么是 NutUI-React CLI? -[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) 是面向 AI Coding 的 **NutUI-React 离线知识查询 CLI**。它把组件的 Props、文档、示例与 Design Token 打包随包分发,让 AI 编程助手(Claude Code / Cursor / Copilot 等)从「猜 API」变成「查 API」,从根源消除 API 幻觉。 +[@nutui/nutui-react-cli](https://www.npmjs.com/package/@nutui/nutui-react-cli) 是面向 AI Coding 的 **NutUI-React 离线知识查询 CLI**。它把组件的 Props、文档、示例与 Design Token 打包随包分发,让 AI 编程助手(Claude Code / Cursor / Copilot 等)从「猜 API」变成「查 API」,从根源消除 API 幻觉。 ## 亮点 diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md index 75f7ab6c65..a0fdb3eb6f 100644 --- a/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.en-US.md @@ -18,7 +18,7 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react ### CLI — offline knowledge query -[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) bundles component props, docs, demos, and Design Tokens with the package, so queries run locally in milliseconds — no network, no API key. +[@nutui/nutui-react-cli](https://www.npmjs.com/package/@nutui/nutui-react-cli) bundles component props, docs, demos, and Design Tokens with the package, so queries run locally in milliseconds — no network, no API key. ```bash npx @nutui/nutui-react-cli info Button diff --git a/src/sites/sites-react/doc/docs/ai-react/for-agents.md b/src/sites/sites-react/doc/docs/ai-react/for-agents.md index ea3160d7a2..176a28a731 100644 --- a/src/sites/sites-react/doc/docs/ai-react/for-agents.md +++ b/src/sites/sites-react/doc/docs/ai-react/for-agents.md @@ -18,7 +18,7 @@ npx skills add ./node_modules/@nutui/nutui-react-cli/skills/nutui-react ### CLI — 离线知识查询 -[`@nutui/nutui-react-cli`](https://github.com/jdf2e/nutui-react) 把组件的 Props、文档、示例与 Design Token 打包随包分发,安装后本地毫秒级查询,无需网络、无需 API Key。 +[@nutui/nutui-react-cli](https://www.npmjs.com/package/@nutui/nutui-react-cli) 把组件的 Props、文档、示例与 Design Token 打包随包分发,安装后本地毫秒级查询,无需网络、无需 API Key。 ```bash npx @nutui/nutui-react-cli info Button