@fangxinyan/lumina 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Accordion-3TQPKNN3.css → Accordion-REMDCQUD.css} +0 -1
- package/dist/Accordion.cjs +3 -3
- package/dist/Accordion.js +2 -2
- package/dist/Alert.cjs +3 -3
- package/dist/Alert.js +2 -2
- package/dist/AppShell.cjs +5 -5
- package/dist/AppShell.js +1 -1
- package/dist/AutoComplete-P5KZMZO5.css +54 -0
- package/dist/AutoComplete.cjs +15 -0
- package/dist/AutoComplete.cjs.map +1 -0
- package/dist/AutoComplete.d.cts +51 -0
- package/dist/AutoComplete.d.ts +51 -0
- package/dist/AutoComplete.js +6 -0
- package/dist/AutoComplete.js.map +1 -0
- package/dist/Avatar.cjs +2 -2
- package/dist/Avatar.js +1 -1
- package/dist/Button.cjs +4 -4
- package/dist/Button.js +2 -2
- package/dist/Calendar.cjs +3 -3
- package/dist/Calendar.js +2 -2
- package/dist/Card.cjs +3 -3
- package/dist/Card.js +1 -1
- package/dist/{Cascader-DTRTTXC2.css → Cascader-VSYEKQCG.css} +1 -1
- package/dist/Cascader.cjs +3 -3
- package/dist/Cascader.js +2 -2
- package/dist/Checkbox.cjs +4 -4
- package/dist/Checkbox.js +2 -2
- package/dist/{ColorPicker-GP7AQYUU.css → ColorPicker-SDDQGHCM.css} +1 -1
- package/dist/ColorPicker.cjs +2 -2
- package/dist/ColorPicker.js +1 -1
- package/dist/CommandPalette-T45DBMPY.css +139 -0
- package/dist/CommandPalette.cjs +14 -0
- package/dist/CommandPalette.cjs.map +1 -0
- package/dist/CommandPalette.d.cts +65 -0
- package/dist/CommandPalette.d.ts +65 -0
- package/dist/CommandPalette.js +5 -0
- package/dist/CommandPalette.js.map +1 -0
- package/dist/ContextMenu-FKW6CQW4.css +76 -0
- package/dist/ContextMenu.cjs +12 -0
- package/dist/ContextMenu.cjs.map +1 -0
- package/dist/ContextMenu.d.cts +50 -0
- package/dist/ContextMenu.d.ts +50 -0
- package/dist/ContextMenu.js +3 -0
- package/dist/ContextMenu.js.map +1 -0
- package/dist/Divider.cjs +2 -2
- package/dist/Divider.js +1 -1
- package/dist/Drawer.cjs +3 -3
- package/dist/Drawer.js +2 -2
- package/dist/Empty.cjs +4 -4
- package/dist/Empty.js +1 -1
- package/dist/Form-5GRVZNDO.css +67 -0
- package/dist/Form.cjs +20 -0
- package/dist/Form.cjs.map +1 -0
- package/dist/Form.d.cts +85 -0
- package/dist/Form.d.ts +85 -0
- package/dist/Form.js +3 -0
- package/dist/Form.js.map +1 -0
- package/dist/Icon.cjs +3 -3
- package/dist/Icon.d.cts +1 -1
- package/dist/Icon.d.ts +1 -1
- package/dist/Icon.js +1 -1
- package/dist/{Image-WYWORJT4.css → Image-4MN34O6P.css} +1 -1
- package/dist/Image.cjs +4 -4
- package/dist/Image.js +2 -2
- package/dist/Input.cjs +4 -4
- package/dist/Input.js +2 -2
- package/dist/InputNumber-VXQIWLQC.css +40 -0
- package/dist/InputNumber.cjs +14 -0
- package/dist/InputNumber.cjs.map +1 -0
- package/dist/InputNumber.d.cts +46 -0
- package/dist/InputNumber.d.ts +46 -0
- package/dist/InputNumber.js +5 -0
- package/dist/InputNumber.js.map +1 -0
- package/dist/List.cjs +2 -2
- package/dist/List.js +1 -1
- package/dist/{Modal-N4YVLEWW.css → Modal-XSDMU4XJ.css} +1 -1
- package/dist/Modal.cjs +4 -4
- package/dist/Modal.js +3 -3
- package/dist/Pagination.cjs +5 -5
- package/dist/Pagination.js +4 -4
- package/dist/{Popover-MGCMOXYP.css → Popover-NYEKT5CQ.css} +1 -1
- package/dist/Popover.cjs +2 -2
- package/dist/Popover.js +1 -1
- package/dist/Progress.cjs +3 -3
- package/dist/Progress.js +1 -1
- package/dist/{Select-EDG37C37.css → Select-J3CCVFJ7.css} +1 -1
- package/dist/Select.cjs +4 -4
- package/dist/Select.js +3 -3
- package/dist/Slider.cjs +2 -2
- package/dist/Slider.js +1 -1
- package/dist/Splitter-DHNOY4NC.css +66 -0
- package/dist/Splitter.cjs +12 -0
- package/dist/Splitter.cjs.map +1 -0
- package/dist/Splitter.d.cts +44 -0
- package/dist/Splitter.d.ts +44 -0
- package/dist/Splitter.js +3 -0
- package/dist/Splitter.js.map +1 -0
- package/dist/StatusBar-CDS2GPSI.css +58 -0
- package/dist/StatusBar.cjs +16 -0
- package/dist/StatusBar.cjs.map +1 -0
- package/dist/StatusBar.d.cts +39 -0
- package/dist/StatusBar.d.ts +39 -0
- package/dist/StatusBar.js +3 -0
- package/dist/StatusBar.js.map +1 -0
- package/dist/Switch.cjs +2 -2
- package/dist/Switch.js +1 -1
- package/dist/{Table-YKVM42SW.css → Table-2LPTOUIR.css} +1 -1
- package/dist/Table.cjs +8 -8
- package/dist/Table.js +6 -6
- package/dist/Tabs.cjs +3 -3
- package/dist/Tabs.js +1 -1
- package/dist/Tag.cjs +4 -4
- package/dist/Tag.js +2 -2
- package/dist/Theme.cjs +10 -10
- package/dist/Theme.js +1 -1
- package/dist/{Toast-ERHDN3WG.css → Toast-6PVSAXQ5.css} +1 -1
- package/dist/Toast.cjs +4 -4
- package/dist/Toast.js +2 -2
- package/dist/Tooltip.cjs +2 -2
- package/dist/Tooltip.js +1 -1
- package/dist/Typography.cjs +7 -7
- package/dist/Typography.js +2 -2
- package/dist/{chunk-IKI5CS4L.cjs → chunk-2ENTRT7R.cjs} +7 -7
- package/dist/{chunk-IKI5CS4L.cjs.map → chunk-2ENTRT7R.cjs.map} +1 -1
- package/dist/{chunk-FI7QO3I5.cjs → chunk-33TIL25B.cjs} +3 -3
- package/dist/{chunk-FI7QO3I5.cjs.map → chunk-33TIL25B.cjs.map} +1 -1
- package/dist/{chunk-5WF6M47X.cjs → chunk-3BZ47QNV.cjs} +8 -8
- package/dist/{chunk-5WF6M47X.cjs.map → chunk-3BZ47QNV.cjs.map} +1 -1
- package/dist/{chunk-NE4YEBFH.js → chunk-3UU2PUK4.js} +4 -4
- package/dist/{chunk-NE4YEBFH.js.map → chunk-3UU2PUK4.js.map} +1 -1
- package/dist/chunk-47Z4NIU4.js +118 -0
- package/dist/chunk-47Z4NIU4.js.map +1 -0
- package/dist/{chunk-4U4OY5RA.js → chunk-4SCDDSXY.js} +3 -3
- package/dist/{chunk-4U4OY5RA.js.map → chunk-4SCDDSXY.js.map} +1 -1
- package/dist/{chunk-NXOAYNG2.cjs → chunk-5BFETKVP.cjs} +3 -3
- package/dist/{chunk-NXOAYNG2.cjs.map → chunk-5BFETKVP.cjs.map} +1 -1
- package/dist/{chunk-VICGQC6G.cjs → chunk-5EAVXFFD.cjs} +3 -3
- package/dist/{chunk-VICGQC6G.cjs.map → chunk-5EAVXFFD.cjs.map} +1 -1
- package/dist/{chunk-OYGFMXAA.js → chunk-5N7347MI.js} +3 -3
- package/dist/{chunk-OYGFMXAA.js.map → chunk-5N7347MI.js.map} +1 -1
- package/dist/{chunk-VJN637MT.js → chunk-5PREWYTB.js} +3 -3
- package/dist/{chunk-VJN637MT.js.map → chunk-5PREWYTB.js.map} +1 -1
- package/dist/{chunk-BBPNQ44M.js → chunk-6GNFRP2H.js} +3 -3
- package/dist/{chunk-BBPNQ44M.js.map → chunk-6GNFRP2H.js.map} +1 -1
- package/dist/{chunk-ZVCMXDTP.js → chunk-6XZ362VL.js} +6 -6
- package/dist/{chunk-ZVCMXDTP.js.map → chunk-6XZ362VL.js.map} +1 -1
- package/dist/chunk-6Z24VO3K.js +184 -0
- package/dist/chunk-6Z24VO3K.js.map +1 -0
- package/dist/{chunk-K7PVJLW4.cjs → chunk-77TZHI76.cjs} +8 -8
- package/dist/{chunk-K7PVJLW4.cjs.map → chunk-77TZHI76.cjs.map} +1 -1
- package/dist/{chunk-QPZZNSRB.js → chunk-7M7NAMR5.js} +5 -5
- package/dist/{chunk-QPZZNSRB.js.map → chunk-7M7NAMR5.js.map} +1 -1
- package/dist/chunk-7T2SLRNL.cjs +140 -0
- package/dist/chunk-7T2SLRNL.cjs.map +1 -0
- package/dist/chunk-7YQWG7HR.cjs +45 -0
- package/dist/chunk-7YQWG7HR.cjs.map +1 -0
- package/dist/{chunk-TYQ5CN2C.js → chunk-AESLEYST.js} +5 -5
- package/dist/{chunk-TYQ5CN2C.js.map → chunk-AESLEYST.js.map} +1 -1
- package/dist/{chunk-PBBHUUXU.cjs → chunk-B5JH7NRZ.cjs} +3 -3
- package/dist/{chunk-PBBHUUXU.cjs.map → chunk-B5JH7NRZ.cjs.map} +1 -1
- package/dist/chunk-BCPAY65C.cjs +169 -0
- package/dist/chunk-BCPAY65C.cjs.map +1 -0
- package/dist/{chunk-E6R63QOL.js → chunk-CTYW42GG.js} +7 -7
- package/dist/{chunk-E6R63QOL.js.map → chunk-CTYW42GG.js.map} +1 -1
- package/dist/chunk-E62JFAHW.js +147 -0
- package/dist/chunk-E62JFAHW.js.map +1 -0
- package/dist/{chunk-WNGG25QX.js → chunk-FFZLSY2N.js} +3 -3
- package/dist/{chunk-WNGG25QX.js.map → chunk-FFZLSY2N.js.map} +1 -1
- package/dist/{chunk-IWVKITPN.js → chunk-FXQGPHK2.js} +4 -4
- package/dist/{chunk-IWVKITPN.js.map → chunk-FXQGPHK2.js.map} +1 -1
- package/dist/{chunk-Z7P6QGMT.js → chunk-GR5STMOA.js} +3 -3
- package/dist/{chunk-Z7P6QGMT.js.map → chunk-GR5STMOA.js.map} +1 -1
- package/dist/{chunk-RDLPX7RK.cjs → chunk-HJIKU6MF.cjs} +33 -7
- package/dist/chunk-HJIKU6MF.cjs.map +1 -0
- package/dist/{chunk-QESLHLTG.cjs → chunk-HXSAH4Y6.cjs} +9 -9
- package/dist/{chunk-QESLHLTG.cjs.map → chunk-HXSAH4Y6.cjs.map} +1 -1
- package/dist/{chunk-RPD2OIIP.js → chunk-I2HHC6QW.js} +4 -4
- package/dist/{chunk-RPD2OIIP.js.map → chunk-I2HHC6QW.js.map} +1 -1
- package/dist/{chunk-GZGZR4FT.js → chunk-I7WLFADD.js} +4 -4
- package/dist/{chunk-GZGZR4FT.js.map → chunk-I7WLFADD.js.map} +1 -1
- package/dist/chunk-IHACXMOI.js +307 -0
- package/dist/chunk-IHACXMOI.js.map +1 -0
- package/dist/chunk-IJA26LRY.cjs +209 -0
- package/dist/chunk-IJA26LRY.cjs.map +1 -0
- package/dist/chunk-IOWREUEP.js +170 -0
- package/dist/chunk-IOWREUEP.js.map +1 -0
- package/dist/{chunk-AXMEZGEG.cjs → chunk-IZDJCEMF.cjs} +3 -3
- package/dist/{chunk-AXMEZGEG.cjs.map → chunk-IZDJCEMF.cjs.map} +1 -1
- package/dist/{chunk-V34OPWKZ.js → chunk-JSDQVVQB.js} +3 -3
- package/dist/{chunk-V34OPWKZ.js.map → chunk-JSDQVVQB.js.map} +1 -1
- package/dist/{chunk-77BVQNAQ.js → chunk-JXHMJUVI.js} +4 -4
- package/dist/{chunk-77BVQNAQ.js.map → chunk-JXHMJUVI.js.map} +1 -1
- package/dist/{chunk-GIVMKGZN.js → chunk-KW7Z4IQC.js} +4 -4
- package/dist/{chunk-GIVMKGZN.js.map → chunk-KW7Z4IQC.js.map} +1 -1
- package/dist/{chunk-QTGDYQOT.cjs → chunk-LLNEDEST.cjs} +4 -4
- package/dist/{chunk-QTGDYQOT.cjs.map → chunk-LLNEDEST.cjs.map} +1 -1
- package/dist/{chunk-AJZKESHB.js → chunk-LXNR6TQK.js} +4 -4
- package/dist/{chunk-AJZKESHB.js.map → chunk-LXNR6TQK.js.map} +1 -1
- package/dist/{chunk-SBMOIE5C.cjs → chunk-MDQNUKCP.cjs} +14 -14
- package/dist/{chunk-SBMOIE5C.cjs.map → chunk-MDQNUKCP.cjs.map} +1 -1
- package/dist/{chunk-JKLQOB2F.cjs → chunk-MUFMJPRT.cjs} +3 -3
- package/dist/{chunk-JKLQOB2F.cjs.map → chunk-MUFMJPRT.cjs.map} +1 -1
- package/dist/{chunk-AEJJGUEN.cjs → chunk-N73JGXYZ.cjs} +5 -5
- package/dist/{chunk-AEJJGUEN.cjs.map → chunk-N73JGXYZ.cjs.map} +1 -1
- package/dist/{chunk-C5TGQ7CV.cjs → chunk-NN7WMXY4.cjs} +5 -5
- package/dist/{chunk-C5TGQ7CV.cjs.map → chunk-NN7WMXY4.cjs.map} +1 -1
- package/dist/{chunk-7H453VPW.cjs → chunk-NQQWCIE6.cjs} +3 -3
- package/dist/{chunk-7H453VPW.cjs.map → chunk-NQQWCIE6.cjs.map} +1 -1
- package/dist/{chunk-ZWP4LSS3.js → chunk-NS3C2ZSE.js} +3 -3
- package/dist/{chunk-ZWP4LSS3.js.map → chunk-NS3C2ZSE.js.map} +1 -1
- package/dist/{chunk-HKAQILD2.cjs → chunk-O2HMH5BI.cjs} +4 -4
- package/dist/{chunk-HKAQILD2.cjs.map → chunk-O2HMH5BI.cjs.map} +1 -1
- package/dist/{chunk-4MR4GVTD.js → chunk-O7C6S644.js} +32 -6
- package/dist/chunk-O7C6S644.js.map +1 -0
- package/dist/{chunk-K5MHL732.js → chunk-OM76QWUN.js} +5 -5
- package/dist/{chunk-K5MHL732.js.map → chunk-OM76QWUN.js.map} +1 -1
- package/dist/chunk-OWNVDXRQ.js +42 -0
- package/dist/chunk-OWNVDXRQ.js.map +1 -0
- package/dist/{chunk-3UFU63X7.cjs → chunk-OZVPJWXO.cjs} +3 -3
- package/dist/{chunk-3UFU63X7.cjs.map → chunk-OZVPJWXO.cjs.map} +1 -1
- package/dist/{chunk-M6CGYGEO.js → chunk-PKXXR76Q.js} +4 -4
- package/dist/{chunk-M6CGYGEO.js.map → chunk-PKXXR76Q.js.map} +1 -1
- package/dist/{chunk-7U6I44RV.cjs → chunk-Q7CDWNM6.cjs} +3 -3
- package/dist/{chunk-7U6I44RV.cjs.map → chunk-Q7CDWNM6.cjs.map} +1 -1
- package/dist/{chunk-437LB2V4.js → chunk-QJGKI2BD.js} +3 -3
- package/dist/{chunk-437LB2V4.js.map → chunk-QJGKI2BD.js.map} +1 -1
- package/dist/{chunk-GEYMWUW6.js → chunk-QOGROEVD.js} +23 -5
- package/dist/chunk-QOGROEVD.js.map +1 -0
- package/dist/chunk-QVFEKGKI.cjs +331 -0
- package/dist/chunk-QVFEKGKI.cjs.map +1 -0
- package/dist/chunk-RFU5HN4E.js +149 -0
- package/dist/chunk-RFU5HN4E.js.map +1 -0
- package/dist/{chunk-URF6RBW6.cjs → chunk-RQV7SMIZ.cjs} +6 -6
- package/dist/{chunk-URF6RBW6.cjs.map → chunk-RQV7SMIZ.cjs.map} +1 -1
- package/dist/{chunk-OPTTHURA.cjs → chunk-RWHWEQQX.cjs} +7 -7
- package/dist/{chunk-OPTTHURA.cjs.map → chunk-RWHWEQQX.cjs.map} +1 -1
- package/dist/{chunk-CCBHZYE6.cjs → chunk-SMHXSEBD.cjs} +9 -9
- package/dist/{chunk-CCBHZYE6.cjs.map → chunk-SMHXSEBD.cjs.map} +1 -1
- package/dist/{chunk-EPFYIR63.cjs → chunk-T4PI2ZX7.cjs} +16 -16
- package/dist/{chunk-EPFYIR63.cjs.map → chunk-T4PI2ZX7.cjs.map} +1 -1
- package/dist/{chunk-YEOARJKR.cjs → chunk-TQLCIXCK.cjs} +3 -3
- package/dist/{chunk-YEOARJKR.cjs.map → chunk-TQLCIXCK.cjs.map} +1 -1
- package/dist/{chunk-LSLYY5FN.js → chunk-TZLM5GF4.js} +6 -6
- package/dist/{chunk-LSLYY5FN.js.map → chunk-TZLM5GF4.js.map} +1 -1
- package/dist/{chunk-Z5X5AMLA.cjs → chunk-TZXEZFCI.cjs} +6 -6
- package/dist/{chunk-Z5X5AMLA.cjs.map → chunk-TZXEZFCI.cjs.map} +1 -1
- package/dist/{chunk-3WAFIUDQ.js → chunk-UQB5OHMO.js} +3 -3
- package/dist/{chunk-3WAFIUDQ.js.map → chunk-UQB5OHMO.js.map} +1 -1
- package/dist/chunk-VQBZKRIB.cjs +192 -0
- package/dist/chunk-VQBZKRIB.cjs.map +1 -0
- package/dist/{chunk-I7SSCSFH.js → chunk-W6I67HQQ.js} +3 -3
- package/dist/{chunk-I7SSCSFH.js.map → chunk-W6I67HQQ.js.map} +1 -1
- package/dist/{chunk-4GT5TOHP.js → chunk-WDBJVKSR.js} +3 -3
- package/dist/{chunk-4GT5TOHP.js.map → chunk-WDBJVKSR.js.map} +1 -1
- package/dist/{chunk-NSUD5B22.js → chunk-WUOFJPZ4.js} +4 -4
- package/dist/{chunk-NSUD5B22.js.map → chunk-WUOFJPZ4.js.map} +1 -1
- package/dist/{chunk-TWBJCFEJ.cjs → chunk-WVBFQB26.cjs} +8 -8
- package/dist/{chunk-TWBJCFEJ.cjs.map → chunk-WVBFQB26.cjs.map} +1 -1
- package/dist/chunk-WZ73TWB2.cjs +174 -0
- package/dist/chunk-WZ73TWB2.cjs.map +1 -0
- package/dist/{chunk-H6FCIJOP.js → chunk-XCYE4OQV.js} +4 -4
- package/dist/{chunk-H6FCIJOP.js.map → chunk-XCYE4OQV.js.map} +1 -1
- package/dist/{chunk-F7HW2PYR.cjs → chunk-XUT2Z2L6.cjs} +3 -3
- package/dist/{chunk-F7HW2PYR.cjs.map → chunk-XUT2Z2L6.cjs.map} +1 -1
- package/dist/{chunk-TZSWDH5T.cjs → chunk-XYVJ3FBQ.cjs} +6 -6
- package/dist/{chunk-TZSWDH5T.cjs.map → chunk-XYVJ3FBQ.cjs.map} +1 -1
- package/dist/{chunk-YVO7XO4W.cjs → chunk-YCHUHMNP.cjs} +22 -4
- package/dist/chunk-YCHUHMNP.cjs.map +1 -0
- package/dist/{chunk-LDENBYRC.cjs → chunk-YFBHVTKN.cjs} +8 -8
- package/dist/{chunk-LDENBYRC.cjs.map → chunk-YFBHVTKN.cjs.map} +1 -1
- package/dist/{chunk-IDM6JJLP.cjs → chunk-YZ2I7CDF.cjs} +3 -3
- package/dist/{chunk-IDM6JJLP.cjs.map → chunk-YZ2I7CDF.cjs.map} +1 -1
- package/dist/{chunk-OEHCA5IV.js → chunk-ZFJHUOFU.js} +5 -5
- package/dist/{chunk-OEHCA5IV.js.map → chunk-ZFJHUOFU.js.map} +1 -1
- package/dist/index.cjs +168 -121
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +8 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.js +39 -32
- package/dist/index.js.map +1 -1
- package/dist/styles.css +25 -18
- package/dist/{tokens-HWQ7KWPG.css → tokens-BIIUTPKN.css} +17 -9
- package/dist/tokens.css +17 -9
- package/docs/llms/autocomplete.md +56 -0
- package/docs/llms/commandpalette.md +58 -0
- package/docs/llms/contextmenu.md +55 -0
- package/docs/llms/form.md +121 -0
- package/docs/llms/inputnumber.md +57 -0
- package/docs/llms/splitter.md +63 -0
- package/docs/llms/statusbar.md +53 -0
- package/docs/llms.md +8 -1
- package/package.json +1 -1
- package/dist/chunk-4MR4GVTD.js.map +0 -1
- package/dist/chunk-GEYMWUW6.js.map +0 -1
- package/dist/chunk-RDLPX7RK.cjs.map +0 -1
- package/dist/chunk-YVO7XO4W.cjs.map +0 -1
package/dist/styles.css
CHANGED
|
@@ -17,14 +17,15 @@
|
|
|
17
17
|
/* ---- Shadows ---- */
|
|
18
18
|
--shadow-dark: rgba(163, 177, 198, 0.55);
|
|
19
19
|
--shadow-light: rgba(255, 255, 255, 0.95);
|
|
20
|
-
--shadow-blur: 16px;
|
|
21
|
-
--shadow-offset: 6px;
|
|
22
|
-
--shadow-inset-blur: 10px;
|
|
23
|
-
--shadow-inset-offset: 4px;
|
|
24
20
|
|
|
25
|
-
/* Distance multiplier (
|
|
21
|
+
/* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
|
|
26
22
|
--d: 1;
|
|
27
23
|
|
|
24
|
+
--shadow-blur: calc(16px * var(--d));
|
|
25
|
+
--shadow-offset: calc(6px * var(--d));
|
|
26
|
+
--shadow-inset-blur: calc(10px * var(--d));
|
|
27
|
+
--shadow-inset-offset: calc(4px * var(--d));
|
|
28
|
+
|
|
28
29
|
--neu-out:
|
|
29
30
|
var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
|
|
30
31
|
calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
|
|
@@ -49,6 +50,13 @@
|
|
|
49
50
|
1px 1px 2px var(--shadow-dark),
|
|
50
51
|
-1px -1px 2px var(--shadow-light);
|
|
51
52
|
|
|
53
|
+
/* Floating-overlay elevation.
|
|
54
|
+
No top-left highlight — there's no continuous surface beneath an overlay
|
|
55
|
+
panel, so the neumorphic light-reflection metaphor would read as a halo. */
|
|
56
|
+
--neu-float:
|
|
57
|
+
0 calc(var(--shadow-offset) * 1.8) calc(var(--shadow-blur) * 2.2) var(--shadow-dark),
|
|
58
|
+
0 calc(var(--shadow-offset) * 0.4) calc(var(--shadow-blur) * 0.7) var(--shadow-dark);
|
|
59
|
+
|
|
52
60
|
/* ---- Accent (default sky) ---- */
|
|
53
61
|
--accent: oklch(68% 0.14 235);
|
|
54
62
|
--accent-ink: oklch(42% 0.12 235);
|
|
@@ -114,10 +122,10 @@
|
|
|
114
122
|
--shadow-dark: rgba(0, 0, 0, 0.55);
|
|
115
123
|
--shadow-light: rgba(130, 145, 180, 0.06);
|
|
116
124
|
/* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
|
|
117
|
-
--shadow-offset: 4px;
|
|
118
|
-
--shadow-blur: 10px;
|
|
119
|
-
--shadow-inset-offset: 3px;
|
|
120
|
-
--shadow-inset-blur: 7px;
|
|
125
|
+
--shadow-offset: calc(4px * var(--d));
|
|
126
|
+
--shadow-blur: calc(10px * var(--d));
|
|
127
|
+
--shadow-inset-offset: calc(3px * var(--d));
|
|
128
|
+
--shadow-inset-blur: calc(7px * var(--d));
|
|
121
129
|
--accent-soft: oklch(35% 0.06 235);
|
|
122
130
|
--accent-ink: oklch(82% 0.09 235);
|
|
123
131
|
--accent-glow: oklch(68% 0.14 235 / 0.18);
|
|
@@ -1084,7 +1092,6 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
1084
1092
|
color: var(--fg-muted);
|
|
1085
1093
|
font-size: 13px;
|
|
1086
1094
|
}
|
|
1087
|
-
.accordion-item.open .accordion-body { max-height: 320px; }
|
|
1088
1095
|
.accordion-body-inner { padding: 0 18px 16px; }
|
|
1089
1096
|
.accordion-chev {
|
|
1090
1097
|
transition: transform var(--dur) var(--ease), color var(--dur) var(--ease);
|
|
@@ -1311,7 +1318,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
1311
1318
|
.menu {
|
|
1312
1319
|
background: var(--bg);
|
|
1313
1320
|
border-radius: var(--r-md);
|
|
1314
|
-
box-shadow: var(--neu-
|
|
1321
|
+
box-shadow: var(--neu-float);
|
|
1315
1322
|
padding: 6px;
|
|
1316
1323
|
min-width: 180px;
|
|
1317
1324
|
z-index: 1000;
|
|
@@ -1366,7 +1373,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
1366
1373
|
.modal {
|
|
1367
1374
|
background: var(--bg);
|
|
1368
1375
|
border-radius: var(--r-xl);
|
|
1369
|
-
box-shadow: var(--neu-
|
|
1376
|
+
box-shadow: var(--neu-float);
|
|
1370
1377
|
padding: var(--gap-6);
|
|
1371
1378
|
width: min(480px, 92vw);
|
|
1372
1379
|
animation: modalIn var(--dur-slow) var(--ease);
|
|
@@ -1553,7 +1560,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
1553
1560
|
.toast {
|
|
1554
1561
|
background: var(--bg);
|
|
1555
1562
|
border-radius: var(--r-md);
|
|
1556
|
-
box-shadow: var(--neu-
|
|
1563
|
+
box-shadow: var(--neu-float);
|
|
1557
1564
|
padding: 12px 16px;
|
|
1558
1565
|
min-width: 240px;
|
|
1559
1566
|
display: flex; align-items: flex-start; gap: 10px;
|
|
@@ -1588,7 +1595,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
1588
1595
|
border-radius: var(--r-md);
|
|
1589
1596
|
padding: var(--gap-3);
|
|
1590
1597
|
min-width: 220px;
|
|
1591
|
-
box-shadow: var(--neu-
|
|
1598
|
+
box-shadow: var(--neu-float);
|
|
1592
1599
|
animation: menuIn var(--dur) var(--ease);
|
|
1593
1600
|
}
|
|
1594
1601
|
/* ============ Alert ============ */
|
|
@@ -1819,7 +1826,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
1819
1826
|
max-width: 260px;
|
|
1820
1827
|
background: var(--bg);
|
|
1821
1828
|
border-radius: var(--r-md);
|
|
1822
|
-
box-shadow: var(--neu-
|
|
1829
|
+
box-shadow: var(--neu-float);
|
|
1823
1830
|
padding: 10px;
|
|
1824
1831
|
animation: menuIn var(--dur) var(--ease);
|
|
1825
1832
|
}
|
|
@@ -2333,7 +2340,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
2333
2340
|
max-width: 80vw;
|
|
2334
2341
|
max-height: 80vh;
|
|
2335
2342
|
border-radius: var(--r-lg);
|
|
2336
|
-
box-shadow: var(--neu-
|
|
2343
|
+
box-shadow: var(--neu-float);
|
|
2337
2344
|
}
|
|
2338
2345
|
/* ============ Cascader ============ */
|
|
2339
2346
|
.cascader {
|
|
@@ -2366,7 +2373,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
2366
2373
|
display: flex;
|
|
2367
2374
|
background: var(--bg);
|
|
2368
2375
|
border-radius: var(--r-md);
|
|
2369
|
-
box-shadow: var(--neu-
|
|
2376
|
+
box-shadow: var(--neu-float);
|
|
2370
2377
|
padding: 6px;
|
|
2371
2378
|
animation: menuIn var(--dur) var(--ease);
|
|
2372
2379
|
gap: 4px;
|
|
@@ -2695,7 +2702,7 @@ input, textarea, select { font-family: inherit; color: inherit; }
|
|
|
2695
2702
|
padding: 12px;
|
|
2696
2703
|
background: var(--bg);
|
|
2697
2704
|
border-radius: var(--r-md);
|
|
2698
|
-
box-shadow: var(--neu-
|
|
2705
|
+
box-shadow: var(--neu-float);
|
|
2699
2706
|
display: flex;
|
|
2700
2707
|
flex-direction: column;
|
|
2701
2708
|
gap: 10px;
|
|
@@ -17,14 +17,15 @@
|
|
|
17
17
|
/* ---- Shadows ---- */
|
|
18
18
|
--shadow-dark: rgba(163, 177, 198, 0.55);
|
|
19
19
|
--shadow-light: rgba(255, 255, 255, 0.95);
|
|
20
|
-
--shadow-blur: 16px;
|
|
21
|
-
--shadow-offset: 6px;
|
|
22
|
-
--shadow-inset-blur: 10px;
|
|
23
|
-
--shadow-inset-offset: 4px;
|
|
24
20
|
|
|
25
|
-
/* Distance multiplier (
|
|
21
|
+
/* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
|
|
26
22
|
--d: 1;
|
|
27
23
|
|
|
24
|
+
--shadow-blur: calc(16px * var(--d));
|
|
25
|
+
--shadow-offset: calc(6px * var(--d));
|
|
26
|
+
--shadow-inset-blur: calc(10px * var(--d));
|
|
27
|
+
--shadow-inset-offset: calc(4px * var(--d));
|
|
28
|
+
|
|
28
29
|
--neu-out:
|
|
29
30
|
var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
|
|
30
31
|
calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
|
|
@@ -49,6 +50,13 @@
|
|
|
49
50
|
1px 1px 2px var(--shadow-dark),
|
|
50
51
|
-1px -1px 2px var(--shadow-light);
|
|
51
52
|
|
|
53
|
+
/* Floating-overlay elevation.
|
|
54
|
+
No top-left highlight — there's no continuous surface beneath an overlay
|
|
55
|
+
panel, so the neumorphic light-reflection metaphor would read as a halo. */
|
|
56
|
+
--neu-float:
|
|
57
|
+
0 calc(var(--shadow-offset) * 1.8) calc(var(--shadow-blur) * 2.2) var(--shadow-dark),
|
|
58
|
+
0 calc(var(--shadow-offset) * 0.4) calc(var(--shadow-blur) * 0.7) var(--shadow-dark);
|
|
59
|
+
|
|
52
60
|
/* ---- Accent (default sky) ---- */
|
|
53
61
|
--accent: oklch(68% 0.14 235);
|
|
54
62
|
--accent-ink: oklch(42% 0.12 235);
|
|
@@ -115,10 +123,10 @@
|
|
|
115
123
|
--shadow-dark: rgba(0, 0, 0, 0.55);
|
|
116
124
|
--shadow-light: rgba(130, 145, 180, 0.06);
|
|
117
125
|
/* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
|
|
118
|
-
--shadow-offset: 4px;
|
|
119
|
-
--shadow-blur: 10px;
|
|
120
|
-
--shadow-inset-offset: 3px;
|
|
121
|
-
--shadow-inset-blur: 7px;
|
|
126
|
+
--shadow-offset: calc(4px * var(--d));
|
|
127
|
+
--shadow-blur: calc(10px * var(--d));
|
|
128
|
+
--shadow-inset-offset: calc(3px * var(--d));
|
|
129
|
+
--shadow-inset-blur: calc(7px * var(--d));
|
|
122
130
|
--accent-soft: oklch(35% 0.06 235);
|
|
123
131
|
--accent-ink: oklch(82% 0.09 235);
|
|
124
132
|
--accent-glow: oklch(68% 0.14 235 / 0.18);
|
package/dist/tokens.css
CHANGED
|
@@ -17,14 +17,15 @@
|
|
|
17
17
|
/* ---- Shadows ---- */
|
|
18
18
|
--shadow-dark: rgba(163, 177, 198, 0.55);
|
|
19
19
|
--shadow-light: rgba(255, 255, 255, 0.95);
|
|
20
|
-
--shadow-blur: 16px;
|
|
21
|
-
--shadow-offset: 6px;
|
|
22
|
-
--shadow-inset-blur: 10px;
|
|
23
|
-
--shadow-inset-offset: 4px;
|
|
24
20
|
|
|
25
|
-
/* Distance multiplier (
|
|
21
|
+
/* Distance multiplier — driven by ThemeProvider `intensity` (1..10 → 0.4..1.6). */
|
|
26
22
|
--d: 1;
|
|
27
23
|
|
|
24
|
+
--shadow-blur: calc(16px * var(--d));
|
|
25
|
+
--shadow-offset: calc(6px * var(--d));
|
|
26
|
+
--shadow-inset-blur: calc(10px * var(--d));
|
|
27
|
+
--shadow-inset-offset: calc(4px * var(--d));
|
|
28
|
+
|
|
28
29
|
--neu-out:
|
|
29
30
|
var(--shadow-offset) var(--shadow-offset) var(--shadow-blur) var(--shadow-dark),
|
|
30
31
|
calc(var(--shadow-offset) * -1) calc(var(--shadow-offset) * -1) var(--shadow-blur) var(--shadow-light);
|
|
@@ -49,6 +50,13 @@
|
|
|
49
50
|
1px 1px 2px var(--shadow-dark),
|
|
50
51
|
-1px -1px 2px var(--shadow-light);
|
|
51
52
|
|
|
53
|
+
/* Floating-overlay elevation.
|
|
54
|
+
No top-left highlight — there's no continuous surface beneath an overlay
|
|
55
|
+
panel, so the neumorphic light-reflection metaphor would read as a halo. */
|
|
56
|
+
--neu-float:
|
|
57
|
+
0 calc(var(--shadow-offset) * 1.8) calc(var(--shadow-blur) * 2.2) var(--shadow-dark),
|
|
58
|
+
0 calc(var(--shadow-offset) * 0.4) calc(var(--shadow-blur) * 0.7) var(--shadow-dark);
|
|
59
|
+
|
|
52
60
|
/* ---- Accent (default sky) ---- */
|
|
53
61
|
--accent: oklch(68% 0.14 235);
|
|
54
62
|
--accent-ink: oklch(42% 0.12 235);
|
|
@@ -115,10 +123,10 @@
|
|
|
115
123
|
--shadow-dark: rgba(0, 0, 0, 0.55);
|
|
116
124
|
--shadow-light: rgba(130, 145, 180, 0.06);
|
|
117
125
|
/* 同时收紧阴影尺寸,深色模式下拟态更内敛 */
|
|
118
|
-
--shadow-offset: 4px;
|
|
119
|
-
--shadow-blur: 10px;
|
|
120
|
-
--shadow-inset-offset: 3px;
|
|
121
|
-
--shadow-inset-blur: 7px;
|
|
126
|
+
--shadow-offset: calc(4px * var(--d));
|
|
127
|
+
--shadow-blur: calc(10px * var(--d));
|
|
128
|
+
--shadow-inset-offset: calc(3px * var(--d));
|
|
129
|
+
--shadow-inset-blur: calc(7px * var(--d));
|
|
122
130
|
--accent-soft: oklch(35% 0.06 235);
|
|
123
131
|
--accent-ink: oklch(82% 0.09 235);
|
|
124
132
|
--accent-glow: oklch(68% 0.14 235 / 0.18);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# AutoComplete 自动补全
|
|
2
|
+
|
|
3
|
+
> 输入时展示建议下拉,不限定必须从候选中选。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 基础
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<AutoComplete
|
|
11
|
+
options={[
|
|
12
|
+
{ value: "light" },
|
|
13
|
+
{ value: "dark" },
|
|
14
|
+
{ value: "system" },
|
|
15
|
+
]}
|
|
16
|
+
placeholder="主题"
|
|
17
|
+
/>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 自定义 label
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
options={[{ value: "zh", label: "中文 · Chinese" }]}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 动态加载
|
|
27
|
+
|
|
28
|
+
onSearch 在用户输入时触发,常配合后端检索使用。
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
const [opts, setOpts] = useState([]);
|
|
32
|
+
<AutoComplete
|
|
33
|
+
options={opts}
|
|
34
|
+
onSearch={(text) => setOpts(generate(text))}
|
|
35
|
+
/>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## API
|
|
39
|
+
|
|
40
|
+
**AutoComplete**
|
|
41
|
+
|
|
42
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| value / defaultValue | `string` | — | 受控 / 初始值 |
|
|
45
|
+
| onChange | `(value, option?) => void` | — | 文本变更 |
|
|
46
|
+
| onSelect | `(value, option) => void` | — | 选中项回调 |
|
|
47
|
+
| onSearch | `(text) => void` | — | 输入变化回调 |
|
|
48
|
+
| options \* | `{ value, label?, disabled? }[]` | — | 候选项 |
|
|
49
|
+
| filterOption | `boolean | (input, option) => boolean` | `true` | 过滤函数,false 关闭过滤 |
|
|
50
|
+
| notFoundContent | `ReactNode` | — | 无匹配占位 |
|
|
51
|
+
| allowClear / disabled / size / autoFocus / placeholder | `-` | — | 常规属性 |
|
|
52
|
+
| matchTriggerWidth | `boolean` | `true` | 下拉宽度跟随输入框 |
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
[← 回到索引](../llms.md)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# CommandPalette ⌘K 命令面板
|
|
2
|
+
|
|
3
|
+
> 全局命令搜索与执行入口。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 基础 + 快捷键
|
|
8
|
+
|
|
9
|
+
在当前页面按 ⌘K / Ctrl+K 打开。分组、快捷键提示、键盘导航都已内置。
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
const [open, setOpen] = useState(false);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
const h = (e: KeyboardEvent) => {
|
|
15
|
+
if ((e.metaKey || e.ctrlKey) && e.key === "k") {
|
|
16
|
+
e.preventDefault();
|
|
17
|
+
setOpen(o => !o);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
window.addEventListener("keydown", h);
|
|
21
|
+
return () => window.removeEventListener("keydown", h);
|
|
22
|
+
}, []);
|
|
23
|
+
|
|
24
|
+
<CommandPalette open={open} onOpenChange={setOpen} items={[...]} />
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## API
|
|
28
|
+
|
|
29
|
+
**CommandPalette**
|
|
30
|
+
|
|
31
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
32
|
+
| --- | --- | --- | --- |
|
|
33
|
+
| open / onOpenChange \* | `boolean / (open: boolean) => void` | — | 受控开关 |
|
|
34
|
+
| items \* | `CommandItem[]` | — | 所有命令项 |
|
|
35
|
+
| placeholder | `string` | `"搜索命令…"` | 搜索框占位文本 |
|
|
36
|
+
| filter | `(item, query) => boolean` | `子序列匹配` | 自定义过滤函数 |
|
|
37
|
+
| emptyText | `ReactNode` | — | 无结果占位 |
|
|
38
|
+
| resetOnOpen | `boolean` | `true` | 打开时清空输入 |
|
|
39
|
+
| footer | `ReactNode` | — | 底部区;null 隐藏 |
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
**CommandItem**
|
|
43
|
+
|
|
44
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
45
|
+
| --- | --- | --- | --- |
|
|
46
|
+
| key \* | `string` | — | 唯一键 |
|
|
47
|
+
| label \* | `string` | — | 主文案(也参与搜索) |
|
|
48
|
+
| description | `ReactNode` | — | 副标题 |
|
|
49
|
+
| icon | `ReactNode` | — | 前置图标 |
|
|
50
|
+
| shortcut | `ReactNode` | — | 右侧快捷键 |
|
|
51
|
+
| keywords | `string[]` | — | 额外搜索关键词 |
|
|
52
|
+
| group | `string` | — | 分组标题 |
|
|
53
|
+
| disabled | `boolean` | — | 禁用 |
|
|
54
|
+
| onSelect | `() => void` | — | 选中回调(会自动关闭面板) |
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
[← 回到索引](../llms.md)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# ContextMenu 右键菜单
|
|
2
|
+
|
|
3
|
+
> 桌面应用风格的右键上下文菜单。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 基础
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<ContextMenu items={[
|
|
11
|
+
{ key: "copy", label: "复制", shortcut: "⌘C", onSelect: () => {} },
|
|
12
|
+
{ key: "cut", label: "剪切", shortcut: "⌘X", onSelect: () => {} },
|
|
13
|
+
{ key: "d", type: "divider" },
|
|
14
|
+
{ key: "del", label: "删除", danger: true, onSelect: () => {} },
|
|
15
|
+
]}>
|
|
16
|
+
<div>右键点击我</div>
|
|
17
|
+
</ContextMenu>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 文件管理器示例
|
|
21
|
+
|
|
22
|
+
典型的文件右键菜单,带图标、快捷键、分组分隔、危险操作高亮。
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
<ContextMenu items={[...]}>...
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## API
|
|
29
|
+
|
|
30
|
+
**ContextMenu**
|
|
31
|
+
|
|
32
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
33
|
+
| --- | --- | --- | --- |
|
|
34
|
+
| items \* | `ContextMenuItem[]` | — | 菜单项 |
|
|
35
|
+
| children \* | `ReactElement` | — | 触发元素(恰好一个) |
|
|
36
|
+
| disabled | `boolean` | — | 禁用,恢复浏览器原生菜单 |
|
|
37
|
+
| minWidth | `number` | `180` | 面板最小宽度 |
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
**ContextMenuItem**
|
|
41
|
+
|
|
42
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| key \* | `string` | — | 唯一键 |
|
|
45
|
+
| label | `ReactNode` | — | 文案 |
|
|
46
|
+
| icon | `ReactNode` | — | 前置图标 |
|
|
47
|
+
| shortcut | `ReactNode` | — | 右侧快捷键提示 |
|
|
48
|
+
| disabled | `boolean` | — | 禁用 |
|
|
49
|
+
| danger | `boolean` | — | 危险态(红色) |
|
|
50
|
+
| type | `"divider"` | — | 置为 "divider" 渲染分隔线 |
|
|
51
|
+
| onSelect | `() => void` | — | 选中回调 |
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
[← 回到索引](../llms.md)
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Form 表单
|
|
2
|
+
|
|
3
|
+
> 受控表单,字段绑定 + 校验,API 对齐 antd。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 基础
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
const [form] = Form.useForm();
|
|
11
|
+
|
|
12
|
+
<Form form={form} layout="vertical" onFinish={(values) => console.log(values)}>
|
|
13
|
+
<Form.Item name="username" label="用户名" rules={[{ required: true }]}>
|
|
14
|
+
<Input placeholder="输入用户名" />
|
|
15
|
+
</Form.Item>
|
|
16
|
+
<Form.Item name="email" label="邮箱" rules={[{ type: "email", message: "邮箱格式不正确" }]}>
|
|
17
|
+
<Input placeholder="foo@example.com" />
|
|
18
|
+
</Form.Item>
|
|
19
|
+
<Form.Item>
|
|
20
|
+
<Button type="submit" variant="primary">提交</Button>
|
|
21
|
+
</Form.Item>
|
|
22
|
+
</Form>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 复合校验 + 自定义 validator
|
|
26
|
+
|
|
27
|
+
rules 支持 required / min / max / pattern / type / validator。validator 可返回 Promise。
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
rules={[
|
|
31
|
+
{ required: true, message: "必填" },
|
|
32
|
+
{ pattern: /^[a-z0-9_]+$/, message: "只允许小写字母、数字和下划线" },
|
|
33
|
+
{
|
|
34
|
+
validator: async (_, value) => {
|
|
35
|
+
if (value === "admin") throw new Error("admin 已被占用");
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
]}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 非 value 类控件
|
|
42
|
+
|
|
43
|
+
Checkbox / Switch 的绑定属性不是 value,需要用 valuePropName 指定;对应的 trigger 名称通常仍是 onChange。
|
|
44
|
+
|
|
45
|
+
```tsx
|
|
46
|
+
<Form.Item name="agree" valuePropName="checked">
|
|
47
|
+
<Checkbox>同意协议</Checkbox>
|
|
48
|
+
</Form.Item>
|
|
49
|
+
|
|
50
|
+
<Form.Item name="notify" valuePropName="checked">
|
|
51
|
+
<Switch />
|
|
52
|
+
</Form.Item>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 命令式 API
|
|
56
|
+
|
|
57
|
+
通过 Form.useForm() 拿到实例,外部可主动 setFieldsValue / validateFields / resetFields。
|
|
58
|
+
|
|
59
|
+
```tsx
|
|
60
|
+
form.setFieldsValue({ title: "..." })
|
|
61
|
+
form.validateFields().then(values => {...})
|
|
62
|
+
form.resetFields()
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## API
|
|
66
|
+
|
|
67
|
+
**Form**
|
|
68
|
+
|
|
69
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
70
|
+
| --- | --- | --- | --- |
|
|
71
|
+
| form | `FormInstance` | — | 由 useForm() 创建的实例,受控推荐传入 |
|
|
72
|
+
| layout | `"horizontal" | "vertical" | "inline"` | `"horizontal"` | 布局方式 |
|
|
73
|
+
| initialValues | `Partial<V>` | — | 字段初始值 |
|
|
74
|
+
| onFinish / onFinishFailed | `(values | {values, errorFields}) => void` | — | 提交成功/失败 |
|
|
75
|
+
| onValuesChange | `(changed, all) => void` | — | 任一字段变化 |
|
|
76
|
+
| requiredMark | `boolean` | `true` | 是否在必填 label 前显示 * |
|
|
77
|
+
| disabled | `boolean` | — | 整体禁用 |
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
**Form.Item**
|
|
81
|
+
|
|
82
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
83
|
+
| --- | --- | --- | --- |
|
|
84
|
+
| name | `string` | — | 字段 key;省略则仅布局不绑定 |
|
|
85
|
+
| label | `ReactNode` | — | 字段标签 |
|
|
86
|
+
| rules | `Rule[]` | — | 校验规则数组 |
|
|
87
|
+
| noStyle | `boolean` | — | 不渲染外层 item 包装 |
|
|
88
|
+
| valuePropName | `string` | `"value"` | 注入值的 prop 名 |
|
|
89
|
+
| trigger | `string` | `"onChange"` | 监听的事件名 |
|
|
90
|
+
| initialValue | `any` | — | 此字段初始值;优先级低于 Form initialValues |
|
|
91
|
+
| help / extra | `ReactNode` | — | 辅助/补充说明 |
|
|
92
|
+
| hidden | `boolean` | — | 隐藏(字段仍保留) |
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
**Rule**
|
|
96
|
+
|
|
97
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
98
|
+
| --- | --- | --- | --- |
|
|
99
|
+
| required | `boolean` | — | 必填 |
|
|
100
|
+
| message | `string` | — | 错误提示文案 |
|
|
101
|
+
| pattern | `RegExp` | — | 正则校验 |
|
|
102
|
+
| min / max / len | `number` | — | 字符串/数组长度或数字范围 |
|
|
103
|
+
| type | `string` | — | "string" \| "number" \| "email" \| "url" \| "array" |
|
|
104
|
+
| validator | `(rule, value) => Promise<void>` | — | 自定义,抛出错误或 reject 视为失败 |
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
**FormInstance**
|
|
108
|
+
|
|
109
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
110
|
+
| --- | --- | --- | --- |
|
|
111
|
+
| getFieldValue / getFieldsValue | `(name?) => any` | — | 读取字段值 |
|
|
112
|
+
| setFieldValue / setFieldsValue | `(name/obj, value) => void` | — | 写入字段值 |
|
|
113
|
+
| validateFields | `(names?) => Promise<V>` | — | 触发校验,返回 Promise<values>,失败时 reject({errorFields}) |
|
|
114
|
+
| resetFields | `(names?) => void` | — | 重置到初始值 |
|
|
115
|
+
| isFieldTouched | `(name) => boolean` | — | 字段是否交互过 |
|
|
116
|
+
| getFieldError | `(name) => string[]` | — | 字段当前错误信息 |
|
|
117
|
+
| submit | `() => void` | — | 等同于触发提交 |
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
[← 回到索引](../llms.md)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# InputNumber 数字输入
|
|
2
|
+
|
|
3
|
+
> 带步进按钮的数字输入框。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 基础
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<InputNumber defaultValue={5} min={0} max={100} />
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### 小数精度
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<InputNumber defaultValue={0.5} min={0} max={1} step={0.1} precision={2} />
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### 尺寸
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
<InputNumber size="sm" /> / <InputNumber /> / <InputNumber size="lg" />
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 隐藏步进按钮
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
<InputNumber controls={false} defaultValue={100} />
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 受控
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
const [v, setV] = useState(10);
|
|
35
|
+
<InputNumber value={v} onChange={setV} />
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## API
|
|
39
|
+
|
|
40
|
+
**InputNumber**
|
|
41
|
+
|
|
42
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| value / defaultValue | `number | null` | — | 受控 / 初始值 |
|
|
45
|
+
| onChange | `(value: number | null) => void` | — | 变更回调 |
|
|
46
|
+
| onPressEnter | `(e) => void` | — | 回车事件 |
|
|
47
|
+
| min / max | `number` | — | 数值范围 |
|
|
48
|
+
| step | `number` | `1` | 步进值 |
|
|
49
|
+
| precision | `number` | — | 小数位数 |
|
|
50
|
+
| size | `"sm" | "md" | "lg"` | `"md"` | 尺寸 |
|
|
51
|
+
| controls | `boolean` | `true` | 是否显示步进按钮 |
|
|
52
|
+
| disabled / readOnly / placeholder | `-` | — | 常规属性 |
|
|
53
|
+
| prefix / suffix | `ReactNode` | — | 内嵌前/后置内容 |
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
[← 回到索引](../llms.md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Splitter 可拖拽分栏
|
|
2
|
+
|
|
3
|
+
> 两栏之间可拖拽的分隔条,支持横向、纵向与嵌套。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 水平分栏
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<Splitter defaultSize={200} min={120} max={360}>
|
|
11
|
+
<SidePanel />
|
|
12
|
+
<MainPanel />
|
|
13
|
+
</Splitter>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 垂直分栏
|
|
17
|
+
|
|
18
|
+
direction="vertical" 让面板上下排列,分隔条变成横条。
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
<Splitter direction="vertical" defaultSize={120} min={60}>...</Splitter>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 嵌套分栏
|
|
25
|
+
|
|
26
|
+
组合使用两个 Splitter 可以搭出 IDE 风格的三区布局。
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
<Splitter defaultSize={180}>
|
|
30
|
+
<SideNav />
|
|
31
|
+
<Splitter direction="vertical" defaultSize={180}>
|
|
32
|
+
<Editor />
|
|
33
|
+
<Terminal />
|
|
34
|
+
</Splitter>
|
|
35
|
+
</Splitter>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 受控模式
|
|
39
|
+
|
|
40
|
+
通过 size / onResize 可以持久化宽度或与其他状态联动。
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
const [w, setW] = useState(220);
|
|
44
|
+
<Splitter size={w} onResize={setW}>...</Splitter>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## API
|
|
48
|
+
|
|
49
|
+
**Splitter**
|
|
50
|
+
|
|
51
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
52
|
+
| --- | --- | --- | --- |
|
|
53
|
+
| direction | `"horizontal" | "vertical"` | `"horizontal"` | 布局方向 |
|
|
54
|
+
| defaultSize | `number` | `240` | 非受控初始宽/高 (px) |
|
|
55
|
+
| size / onResize | `number / (n: number) => void` | — | 受控宽/高 |
|
|
56
|
+
| onResizeEnd | `(n: number) => void` | — | 拖动结束回调 |
|
|
57
|
+
| min / max | `number` | `80 / Infinity` | 尺寸限制 (px) |
|
|
58
|
+
| step | `number` | `16` | 方向键步长 (px) |
|
|
59
|
+
| children \* | `[ReactNode, ReactNode]` | — | 必须恰好两个子节点 |
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
[← 回到索引](../llms.md)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# StatusBar 状态栏
|
|
2
|
+
|
|
3
|
+
> 窗口底部状态栏,展示分支、编码、行列等应用元信息。
|
|
4
|
+
|
|
5
|
+
## 示例
|
|
6
|
+
|
|
7
|
+
### 基础
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
<StatusBar
|
|
11
|
+
left={<StatusBar.Item icon={<Icon name="check" size={12} />} tone="success">Ready</StatusBar.Item>}
|
|
12
|
+
right={<StatusBar.Item tone="muted">UTF-8</StatusBar.Item>}
|
|
13
|
+
/>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### 可点击项
|
|
17
|
+
|
|
18
|
+
为 Item 提供 onClick 会渲染成按钮,支持悬停高亮。
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
<StatusBar.Item onClick={...}>TypeScript</StatusBar.Item>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 语义色
|
|
25
|
+
|
|
26
|
+
tone 控制文字颜色:default / muted / accent / success / warning / danger。
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
<StatusBar.Item tone="danger">3 errors</StatusBar.Item>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## API
|
|
33
|
+
|
|
34
|
+
**StatusBar**
|
|
35
|
+
|
|
36
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
37
|
+
| --- | --- | --- | --- |
|
|
38
|
+
| left | `ReactNode` | — | 左侧槽位 |
|
|
39
|
+
| center | `ReactNode` | — | 中部槽位(绝对居中) |
|
|
40
|
+
| right | `ReactNode` | — | 右侧槽位 |
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
**StatusBar.Item**
|
|
44
|
+
|
|
45
|
+
| Prop | 类型 | 默认 | 说明 |
|
|
46
|
+
| --- | --- | --- | --- |
|
|
47
|
+
| icon | `ReactNode` | — | 前置图标 |
|
|
48
|
+
| tone | `"default" | "muted" | "accent" | "success" | "warning" | "danger"` | `"default"` | 语义色 |
|
|
49
|
+
| onClick | `(e) => void` | — | 点击回调(提供时渲染为 button) |
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
[← 回到索引](../llms.md)
|