@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/Typography.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Link, Paragraph, Text, Title, Typography } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
export { Link, Paragraph, Text, Title, Typography } from './chunk-I7WLFADD.js';
|
|
2
|
+
import './chunk-QOGROEVD.js';
|
|
3
3
|
//# sourceMappingURL=Typography.js.map
|
|
4
4
|
//# sourceMappingURL=Typography.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./tokens-
|
|
3
|
+
var chunkYCHUHMNP_cjs = require('./chunk-YCHUHMNP.cjs');
|
|
4
|
+
require('./tokens-BIIUTPKN.css');
|
|
5
5
|
require('./shared-NJHRNLRH.css');
|
|
6
|
-
require('./Toast-
|
|
6
|
+
require('./Toast-6PVSAXQ5.css');
|
|
7
7
|
var React = require('react');
|
|
8
8
|
var ReactDOM = require('react-dom');
|
|
9
9
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -73,12 +73,12 @@ var ToastContainer = ({ placement = "top-right" }) => {
|
|
|
73
73
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: `toast-container ${placement}`, children: list.map((t) => {
|
|
74
74
|
const iconName = t.type === "success" ? "check2" : t.type === "warning" ? "alert" : t.type === "danger" ? "alert" : "info";
|
|
75
75
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `toast ${t.type}`, role: "status", children: [
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: iconName, size: 18, className: "toast-icon" }),
|
|
77
77
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "toast-body", children: [
|
|
78
78
|
t.title && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast-title", children: t.title }),
|
|
79
79
|
t.message && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "toast-msg", children: t.message })
|
|
80
80
|
] }),
|
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast-close", onClick: () => toast.dismiss(t.id), "aria-label": "Dismiss", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", className: "toast-close", onClick: () => toast.dismiss(t.id), "aria-label": "Dismiss", children: /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "x", size: 14 }) })
|
|
82
82
|
] }, t.id);
|
|
83
83
|
}) }),
|
|
84
84
|
document.body
|
|
@@ -87,5 +87,5 @@ var ToastContainer = ({ placement = "top-right" }) => {
|
|
|
87
87
|
|
|
88
88
|
exports.ToastContainer = ToastContainer;
|
|
89
89
|
exports.toast = toast;
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
//# sourceMappingURL=chunk-2ENTRT7R.cjs.map
|
|
91
|
+
//# sourceMappingURL=chunk-2ENTRT7R.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Toast/Toast.tsx"],"names":["React","ReactDOM","jsx","jsxs","Icon"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Toast/Toast.tsx"],"names":["React","ReactDOM","jsx","jsxs","Icon"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,IAAM,SAAA,uBAAgB,GAAA,EAAgC;AACtD,IAAI,QAAuB,EAAC;AAC5B,IAAI,GAAA,GAAM,CAAA;AAEV,SAAS,IAAA,GAAO;AACd,EAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA;AACnC;AAEO,IAAM,KAAA,GAAQ;AAAA,EACnB,KAAK,CAAA,EAA0B;AAC7B,IAAA,MAAM,KAAK,EAAE,GAAA;AACb,IAAA,KAAA,GAAQ,CAAC,GAAG,KAAA,EAAO,EAAE,GAAG,CAAA,EAAG,EAAA,EAAI,QAAA,EAAU,CAAA,CAAE,QAAA,IAAY,IAAA,EAAM,CAAA;AAC7D,IAAA,IAAA,EAAK;AACL,IAAA,IAAI,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,WAAY,CAAA,EAAG;AACzC,MAAA,UAAA,CAAW,MAAM,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG,MAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE,QAAQ,CAAA;AAAA,IACtE;AACA,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AAAA,EACA,IAAA,EAAM,CAAC,OAAA,EAA0B,KAAA,KAA4B,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EACxG,OAAA,EAAS,CAAC,OAAA,EAA0B,KAAA,KAA4B,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EAC9G,IAAA,EAAM,CAAC,OAAA,EAA0B,KAAA,KAA4B,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EAC3G,KAAA,EAAO,CAAC,OAAA,EAA0B,KAAA,KAA4B,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,CAAA;AAAA,EAC3G,QAAQ,EAAA,EAAY;AAClB,IAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACvC,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAAA,EACA,KAAA,GAAQ;AACN,IAAA,KAAA,GAAQ,EAAC;AACT,IAAA,IAAA,EAAK;AAAA,EACP;AACF;AAOO,IAAM,cAAA,GAAgD,CAAC,EAAE,SAAA,GAAY,aAAY,KAAM;AAC5F,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAUA,0BAAwB,KAAK,CAAA;AAC3D,EAAMA,2BAAU,MAAM;AACpB,IAAA,SAAA,CAAU,IAAI,OAAO,CAAA;AACrB,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,CAAU,OAAO,OAAO,CAAA;AAAA,IAC1B,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,EAAA,OAAOC,yBAAA,CAAS,YAAA;AAAA,oBACdC,cAAA,CAAC,SAAI,SAAA,EAAW,CAAA,gBAAA,EAAmB,SAAS,CAAA,CAAA,EACzC,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM;AACf,MAAA,MAAM,QAAA,GACJ,CAAA,CAAE,IAAA,KAAS,SAAA,GAAY,QAAA,GAAW,CAAA,CAAE,IAAA,KAAS,SAAA,GAAY,OAAA,GAAU,CAAA,CAAE,IAAA,KAAS,QAAA,GAAW,OAAA,GAAU,MAAA;AACrG,MAAA,uBACEC,eAAA,CAAC,SAAe,SAAA,EAAW,CAAA,MAAA,EAAS,EAAE,IAAI,CAAA,CAAA,EAAI,MAAK,QAAA,EACjD,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAACE,0BAAK,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,EAAA,EAAI,WAAU,YAAA,EAAa,CAAA;AAAA,wBACvDD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACZ,QAAA,EAAA;AAAA,UAAA,CAAA,CAAE,yBAASD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,YAAE,KAAA,EAAM,CAAA;AAAA,UACjD,EAAE,OAAA,oBAAWA,cAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAa,YAAE,OAAA,EAAQ;AAAA,SAAA,EACtD,CAAA;AAAA,wBACAA,cAAA,CAAC,YAAO,IAAA,EAAK,QAAA,EAAS,WAAU,aAAA,EAAc,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA,CAAQ,EAAE,EAAE,CAAA,EAAG,cAAW,SAAA,EAC3F,QAAA,kBAAAA,cAAA,CAACE,0BAAK,IAAA,EAAK,GAAA,EAAI,IAAA,EAAM,EAAA,EAAI,CAAA,EAC3B;AAAA,OAAA,EAAA,EARQ,EAAE,EASZ,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF","file":"chunk-2ENTRT7R.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Toast.css\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Icon } from \"../Icon\";\n\nexport type ToastType = \"info\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface ToastItem {\n id: number;\n type: ToastType;\n title?: React.ReactNode;\n message?: React.ReactNode;\n duration?: number;\n}\n\ntype ListenerState = ToastItem[];\nconst listeners = new Set<(s: ListenerState) => void>();\nlet items: ListenerState = [];\nlet uid = 0;\n\nfunction emit() {\n listeners.forEach((l) => l(items));\n}\n\nexport const toast = {\n show(t: Omit<ToastItem, \"id\">) {\n const id = ++uid;\n items = [...items, { ...t, id, duration: t.duration ?? 3200 }];\n emit();\n if (items[items.length - 1].duration! > 0) {\n setTimeout(() => toast.dismiss(id), items[items.length - 1].duration);\n }\n return id;\n },\n info: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"info\", message, title }),\n success: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"success\", message, title }),\n warn: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"warning\", message, title }),\n error: (message: React.ReactNode, title?: React.ReactNode) => toast.show({ type: \"danger\", message, title }),\n dismiss(id: number) {\n items = items.filter((i) => i.id !== id);\n emit();\n },\n clear() {\n items = [];\n emit();\n },\n};\n\nexport interface ToastContainerProps {\n placement?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\" | \"top-center\";\n}\n\n/** `ToastContainer` — mount once at your app root; subscribes to `toast.*` calls. */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({ placement = \"top-right\" }) => {\n const [list, setList] = React.useState<ListenerState>(items);\n React.useEffect(() => {\n listeners.add(setList);\n return () => {\n listeners.delete(setList);\n };\n }, []);\n if (typeof document === \"undefined\") return null;\n return ReactDOM.createPortal(\n <div className={`toast-container ${placement}`}>\n {list.map((t) => {\n const iconName =\n t.type === \"success\" ? \"check2\" : t.type === \"warning\" ? \"alert\" : t.type === \"danger\" ? \"alert\" : \"info\";\n return (\n <div key={t.id} className={`toast ${t.type}`} role=\"status\">\n <Icon name={iconName} size={18} className=\"toast-icon\" />\n <div className=\"toast-body\">\n {t.title && <div className=\"toast-title\">{t.title}</div>}\n {t.message && <div className=\"toast-msg\">{t.message}</div>}\n </div>\n <button type=\"button\" className=\"toast-close\" onClick={() => toast.dismiss(t.id)} aria-label=\"Dismiss\">\n <Icon name=\"x\" size={14} />\n </button>\n </div>\n );\n })}\n </div>,\n document.body\n );\n};\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
require('./tokens-
|
|
3
|
+
require('./tokens-BIIUTPKN.css');
|
|
4
4
|
require('./shared-NJHRNLRH.css');
|
|
5
5
|
require('./AppShell-RCALXUCZ.css');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -86,5 +86,5 @@ exports.AppShell = AppShell;
|
|
|
86
86
|
exports.Sidebar = Sidebar;
|
|
87
87
|
exports.TitleBar = TitleBar;
|
|
88
88
|
exports.WindowControls = WindowControls;
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
89
|
+
//# sourceMappingURL=chunk-33TIL25B.cjs.map
|
|
90
|
+
//# sourceMappingURL=chunk-33TIL25B.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-FI7QO3I5.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./AppShell.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface WindowControlsProps {\n /** macOS traffic lights or Windows-style buttons. */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n className?: string;\n}\n\n/**\n * `WindowControls` — standalone window control buttons.\n * Mac: traffic lights (close/min/max). Windows: rectangular controls.\n */\nexport const WindowControls: React.FC<WindowControlsProps> = ({\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n className = \"\",\n}) => {\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n if (platform === \"windows\") {\n return (\n <div className={`win-controls windows ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 5h8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <rect x=\"1\" y=\"1\" width=\"8\" height=\"8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 1l8 8M9 1l-8 8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n </div>\n );\n }\n return (\n <div className={`win-controls mac ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\" />\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\" />\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\" />\n </div>\n );\n};\n\nexport interface TitleBarProps {\n title?: React.ReactNode;\n /** Platform appearance — affects button placement. Default \"mac\". */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n /** Extra content in the center. */\n center?: React.ReactNode;\n /** Extra content on the trailing side. */\n actions?: React.ReactNode;\n /** Make the whole bar draggable (Electron `-webkit-app-region: drag`). */\n draggable?: boolean;\n className?: string;\n}\n\n/**\n * `TitleBar` — Electron-style window chrome. Attach at the top of your app.\n * Buttons are non-draggable regions so clicks register correctly.\n */\nexport const TitleBar: React.FC<TitleBarProps> = ({\n title,\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n center,\n actions,\n draggable = true,\n className = \"\",\n}) => {\n const dragStyle = draggable ? ({ WebkitAppRegion: \"drag\" } as React.CSSProperties) : undefined;\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n\n return (\n <div className={`titlebar ${platform} ${className}`} style={dragStyle}>\n {platform === \"mac\" && (\n <WindowControls platform=\"mac\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n <div className=\"titlebar-title\">{title}</div>\n {center && (\n <div className=\"titlebar-center\" style={noDragStyle}>\n {center}\n </div>\n )}\n {actions && (\n <div className=\"titlebar-actions\" style={noDragStyle}>\n {actions}\n </div>\n )}\n {platform === \"windows\" && (\n <WindowControls platform=\"windows\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n </div>\n );\n};\n\nexport interface SidebarItem {\n key: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items: SidebarItem[];\n activeKey?: string;\n onSelect?: (key: string) => void;\n /** Collapsed: icons only. */\n collapsed?: boolean;\n /** Header slot (e.g. workspace switcher). */\n header?: React.ReactNode;\n /** Footer slot (e.g. user card). */\n footer?: React.ReactNode;\n className?: string;\n}\n\n/** `Sidebar` — navigation rail. Pair with `AppShell`. */\nexport const Sidebar: React.FC<SidebarProps> = ({\n items,\n activeKey,\n onSelect,\n collapsed,\n header,\n footer,\n className = \"\",\n}) => (\n <aside className={`sidebar ${collapsed ? \"collapsed\" : \"\"} ${className}`}>\n {header && <div className=\"sidebar-header\">{header}</div>}\n <nav className=\"sidebar-nav\">\n {items.map((it) => (\n <button\n type=\"button\"\n key={it.key}\n className={`sidebar-item ${activeKey === it.key ? \"active\" : \"\"}`}\n onClick={() => onSelect?.(it.key)}\n >\n {it.icon && <span className=\"sidebar-icon\">{it.icon}</span>}\n {!collapsed && <span className=\"sidebar-label\">{it.label}</span>}\n {!collapsed && it.badge && <span className=\"sidebar-badge\">{it.badge}</span>}\n </button>\n ))}\n </nav>\n {footer && <div className=\"sidebar-footer\">{footer}</div>}\n </aside>\n);\n\nexport interface AppShellProps {\n sidebar?: React.ReactNode;\n titleBar?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `AppShell` — 3-zone Electron layout: title bar across top, sidebar on left, content fills rest.\n */\nexport const AppShell: React.FC<AppShellProps> = ({ sidebar, titleBar, children, className = \"\" }) => (\n <div className={`app-shell ${className}`}>\n {titleBar}\n <div className=\"app-shell-body\">\n {sidebar}\n <main className=\"app-shell-main\">{children}</main>\n </div>\n </div>\n);\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/AppShell/AppShell.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-33TIL25B.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./AppShell.css\";\nimport * as React from \"react\";\nimport { Icon } from \"../Icon\";\n\nexport interface WindowControlsProps {\n /** macOS traffic lights or Windows-style buttons. */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n className?: string;\n}\n\n/**\n * `WindowControls` — standalone window control buttons.\n * Mac: traffic lights (close/min/max). Windows: rectangular controls.\n */\nexport const WindowControls: React.FC<WindowControlsProps> = ({\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n className = \"\",\n}) => {\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n if (platform === \"windows\") {\n return (\n <div className={`win-controls windows ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 5h8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <rect x=\"1\" y=\"1\" width=\"8\" height=\"8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\">\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden>\n <path d=\"M1 1l8 8M9 1l-8 8\" stroke=\"currentColor\" strokeWidth=\"1\" />\n </svg>\n </button>\n </div>\n );\n }\n return (\n <div className={`win-controls mac ${className}`} style={noDragStyle}>\n <button type=\"button\" className=\"win-btn close\" onClick={onClose} aria-label=\"Close\" />\n <button type=\"button\" className=\"win-btn minimize\" onClick={onMinimize} aria-label=\"Minimize\" />\n <button type=\"button\" className=\"win-btn maximize\" onClick={onMaximize} aria-label=\"Maximize\" />\n </div>\n );\n};\n\nexport interface TitleBarProps {\n title?: React.ReactNode;\n /** Platform appearance — affects button placement. Default \"mac\". */\n platform?: \"mac\" | \"windows\";\n onMinimize?: () => void;\n onMaximize?: () => void;\n onClose?: () => void;\n /** Extra content in the center. */\n center?: React.ReactNode;\n /** Extra content on the trailing side. */\n actions?: React.ReactNode;\n /** Make the whole bar draggable (Electron `-webkit-app-region: drag`). */\n draggable?: boolean;\n className?: string;\n}\n\n/**\n * `TitleBar` — Electron-style window chrome. Attach at the top of your app.\n * Buttons are non-draggable regions so clicks register correctly.\n */\nexport const TitleBar: React.FC<TitleBarProps> = ({\n title,\n platform = \"mac\",\n onMinimize,\n onMaximize,\n onClose,\n center,\n actions,\n draggable = true,\n className = \"\",\n}) => {\n const dragStyle = draggable ? ({ WebkitAppRegion: \"drag\" } as React.CSSProperties) : undefined;\n const noDragStyle = { WebkitAppRegion: \"no-drag\" } as React.CSSProperties;\n\n return (\n <div className={`titlebar ${platform} ${className}`} style={dragStyle}>\n {platform === \"mac\" && (\n <WindowControls platform=\"mac\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n <div className=\"titlebar-title\">{title}</div>\n {center && (\n <div className=\"titlebar-center\" style={noDragStyle}>\n {center}\n </div>\n )}\n {actions && (\n <div className=\"titlebar-actions\" style={noDragStyle}>\n {actions}\n </div>\n )}\n {platform === \"windows\" && (\n <WindowControls platform=\"windows\" onMinimize={onMinimize} onMaximize={onMaximize} onClose={onClose} />\n )}\n </div>\n );\n};\n\nexport interface SidebarItem {\n key: string;\n label: React.ReactNode;\n icon?: React.ReactNode;\n badge?: React.ReactNode;\n children?: SidebarItem[];\n}\n\nexport interface SidebarProps {\n items: SidebarItem[];\n activeKey?: string;\n onSelect?: (key: string) => void;\n /** Collapsed: icons only. */\n collapsed?: boolean;\n /** Header slot (e.g. workspace switcher). */\n header?: React.ReactNode;\n /** Footer slot (e.g. user card). */\n footer?: React.ReactNode;\n className?: string;\n}\n\n/** `Sidebar` — navigation rail. Pair with `AppShell`. */\nexport const Sidebar: React.FC<SidebarProps> = ({\n items,\n activeKey,\n onSelect,\n collapsed,\n header,\n footer,\n className = \"\",\n}) => (\n <aside className={`sidebar ${collapsed ? \"collapsed\" : \"\"} ${className}`}>\n {header && <div className=\"sidebar-header\">{header}</div>}\n <nav className=\"sidebar-nav\">\n {items.map((it) => (\n <button\n type=\"button\"\n key={it.key}\n className={`sidebar-item ${activeKey === it.key ? \"active\" : \"\"}`}\n onClick={() => onSelect?.(it.key)}\n >\n {it.icon && <span className=\"sidebar-icon\">{it.icon}</span>}\n {!collapsed && <span className=\"sidebar-label\">{it.label}</span>}\n {!collapsed && it.badge && <span className=\"sidebar-badge\">{it.badge}</span>}\n </button>\n ))}\n </nav>\n {footer && <div className=\"sidebar-footer\">{footer}</div>}\n </aside>\n);\n\nexport interface AppShellProps {\n sidebar?: React.ReactNode;\n titleBar?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * `AppShell` — 3-zone Electron layout: title bar across top, sidebar on left, content fills rest.\n */\nexport const AppShell: React.FC<AppShellProps> = ({ sidebar, titleBar, children, className = \"\" }) => (\n <div className={`app-shell ${className}`}>\n {titleBar}\n <div className=\"app-shell-body\">\n {sidebar}\n <main className=\"app-shell-main\">{children}</main>\n </div>\n </div>\n);\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./tokens-
|
|
3
|
+
var chunkYCHUHMNP_cjs = require('./chunk-YCHUHMNP.cjs');
|
|
4
|
+
require('./tokens-BIIUTPKN.css');
|
|
5
5
|
require('./shared-NJHRNLRH.css');
|
|
6
6
|
require('./Typography-NKPWTJCV.css');
|
|
7
7
|
var React = require('react');
|
|
@@ -74,8 +74,8 @@ var CopyAction = ({ config, fallbackText }) => {
|
|
|
74
74
|
timerRef.current = window.setTimeout(() => setCopied(false), 2400);
|
|
75
75
|
};
|
|
76
76
|
const [defIcon, doneIcon] = config.icon ?? [
|
|
77
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
78
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
77
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "copy", size: 12 }, "def"),
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "check", size: 12 }, "done")
|
|
79
79
|
];
|
|
80
80
|
const tipText = config.tooltips === false ? void 0 : Array.isArray(config.tooltips) ? copied ? config.tooltips[1] : config.tooltips[0] : copied ? "\u5DF2\u590D\u5236" : "\u590D\u5236";
|
|
81
81
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -213,7 +213,7 @@ function useTypographyBody(props) {
|
|
|
213
213
|
}
|
|
214
214
|
},
|
|
215
215
|
className: "typo-action typo-edit",
|
|
216
|
-
children: editConf.icon ?? /* @__PURE__ */ jsxRuntime.jsx(
|
|
216
|
+
children: editConf.icon ?? /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: "edit", size: 12 })
|
|
217
217
|
}
|
|
218
218
|
);
|
|
219
219
|
}
|
|
@@ -473,7 +473,7 @@ var Link = React__namespace.forwardRef(
|
|
|
473
473
|
...anchorRest,
|
|
474
474
|
children: [
|
|
475
475
|
body.inner,
|
|
476
|
-
external && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-link-ext", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
476
|
+
external && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "typo-link-ext", "aria-hidden": true, children: /* @__PURE__ */ jsxRuntime.jsx(chunkYCHUHMNP_cjs.Icon, { name: externalIcon, size: 12 }) }),
|
|
477
477
|
body.expandNode,
|
|
478
478
|
body.copyNode,
|
|
479
479
|
body.editIconNode
|
|
@@ -506,5 +506,5 @@ exports.Paragraph = Paragraph;
|
|
|
506
506
|
exports.Text = Text;
|
|
507
507
|
exports.Title = Title;
|
|
508
508
|
exports.Typography = Typography;
|
|
509
|
-
//# sourceMappingURL=chunk-
|
|
510
|
-
//# sourceMappingURL=chunk-
|
|
509
|
+
//# sourceMappingURL=chunk-3BZ47QNV.cjs.map
|
|
510
|
+
//# sourceMappingURL=chunk-3BZ47QNV.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Typography/Typography.tsx"],"names":["React","Icon","jsx","jsxs"],"mappings":"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","file":"chunk-5WF6M47X.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Typography.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\n/* ============================================================================\n * Shared types\n * ========================================================================== */\n\nexport type TypographyType = \"secondary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface CopyableConfig {\n /** Text to copy. Defaults to the rendered children string. */\n text?: string;\n /** Fired after a successful copy. */\n onCopy?: (event: React.MouseEvent<HTMLSpanElement>) => void;\n /** Custom icons `[default, copied]`. */\n icon?: [React.ReactNode, React.ReactNode];\n /** Custom tooltip text `[default, copied]`. Pass `false` to disable. */\n tooltips?: [React.ReactNode, React.ReactNode] | false;\n /** Format/MIME hint when calling `navigator.clipboard.write` is not used. */\n format?: \"text/plain\" | \"text/html\";\n}\n\nexport interface EditableConfig {\n /** Controlled editing flag. Omit for uncontrolled (click icon to start). */\n editing?: boolean;\n /** Text shown in the editor; falls back to `children` string. */\n text?: string;\n /** Fired with the new value when the user confirms. */\n onChange?: (value: string) => void;\n /** Fired when the user cancels (Escape or blur without confirm). */\n onCancel?: () => void;\n /** Fired when editing starts. */\n onStart?: () => void;\n /** Fired when editing ends (regardless of save/cancel). */\n onEnd?: () => void;\n /** Maximum input length. */\n maxLength?: number;\n /** Auto resize textarea. `true` = autosize; or pass row bounds. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** What triggers entering edit mode. Defaults to `[\"icon\"]`. */\n triggerType?: Array<\"icon\" | \"text\">;\n /** Override the edit icon. */\n icon?: React.ReactNode;\n /** Tooltip text on the trigger icon. Pass `false` to disable. */\n tooltip?: React.ReactNode | false;\n /** Use a single-line input instead of textarea. */\n enterIcon?: React.ReactNode;\n}\n\nexport interface EllipsisConfig {\n /** Number of rows to clamp at. Defaults to 1. */\n rows?: number;\n /** Show an \"Expand\" affordance after clamping. */\n expandable?: boolean;\n /** Custom expand-button label. */\n symbol?: React.ReactNode;\n /** Fired on expand. */\n onExpand?: (event: React.MouseEvent<HTMLElement>) => void;\n /** Show full text in a `title` attribute. */\n tooltip?: boolean | React.ReactNode;\n /** Optional suffix that should always remain visible (e.g. an em-dash author). */\n suffix?: string;\n}\n\nexport interface BaseTypographyProps {\n /** Semantic color. */\n type?: TypographyType;\n /** Render disabled (muted + not selectable). */\n disabled?: boolean;\n /** Highlight with mark background. */\n mark?: boolean;\n /** Render as inline `<code>`. */\n code?: boolean;\n /** Render as keyboard key `<kbd>`. */\n keyboard?: boolean;\n /** Underline. */\n underline?: boolean;\n /** Strikethrough. */\n delete?: boolean;\n /** Bold. */\n strong?: boolean;\n /** Italic. */\n italic?: boolean;\n /** Add a copy button. Pass an object to customize. */\n copyable?: boolean | CopyableConfig;\n /** Add an edit button. Pass an object to customize. */\n editable?: boolean | EditableConfig;\n /** Truncate to N rows with optional expand affordance. */\n ellipsis?: boolean | EllipsisConfig;\n /** Extra class names. */\n className?: string;\n /** Inline style. */\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\n/* ============================================================================\n * Internals\n * ========================================================================== */\n\nfunction toText(node: React.ReactNode): string {\n if (node == null || node === false) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(toText).join(\"\");\n if (React.isValidElement(node)) {\n const props = node.props as { children?: React.ReactNode };\n return toText(props.children);\n }\n return \"\";\n}\n\nfunction buildClass(props: BaseTypographyProps, base: string, extra?: string) {\n return [\n base,\n props.type,\n props.disabled && \"disabled\",\n props.mark && \"mark\",\n props.code && \"code\",\n props.keyboard && \"kbd\",\n props.underline && \"underline\",\n props.delete && \"del\",\n props.strong && \"strong\",\n props.italic && \"italic\",\n extra,\n props.className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\n/* ---------- Copy button ---------- */\n\nconst CopyAction: React.FC<{\n config: CopyableConfig;\n fallbackText: string;\n}> = ({ config, fallbackText }) => {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const handleCopy = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.stopPropagation();\n const text = config.text ?? fallbackText;\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {\n /* swallow — user-visible feedback is already minimal */\n });\n }\n config.onCopy?.(event);\n setCopied(true);\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setCopied(false), 2400);\n };\n\n const [defIcon, doneIcon] = config.icon ?? [\n <Icon key=\"def\" name=\"copy\" size={12} />,\n <Icon key=\"done\" name=\"check\" size={12} />,\n ];\n const tipText =\n config.tooltips === false\n ? undefined\n : Array.isArray(config.tooltips)\n ? copied\n ? config.tooltips[1]\n : config.tooltips[0]\n : copied\n ? \"已复制\"\n : \"复制\";\n\n return (\n <span\n role=\"button\"\n aria-label={typeof tipText === \"string\" ? tipText : \"Copy\"}\n tabIndex={0}\n title={typeof tipText === \"string\" ? tipText : undefined}\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy(e as unknown as React.MouseEvent<HTMLSpanElement>);\n }\n }}\n className={`typo-action typo-copy ${copied ? \"copied\" : \"\"}`}\n >\n {copied ? doneIcon : defIcon}\n </span>\n );\n};\n\n/* ---------- Edit affordance + inline editor ---------- */\n\nconst EditableEditor: React.FC<{\n initial: string;\n multiline: boolean;\n maxLength?: number;\n autoSize?: EditableConfig[\"autoSize\"];\n onConfirm: (value: string) => void;\n onCancel: () => void;\n}> = ({ initial, multiline, maxLength, autoSize, onConfirm, onCancel }) => {\n const [value, setValue] = React.useState(initial);\n const ref = React.useRef<HTMLTextAreaElement | HTMLInputElement | null>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (el) {\n el.focus();\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }, []);\n\n const resize = React.useCallback(() => {\n const el = ref.current as HTMLTextAreaElement | null;\n if (!el || !multiline || !autoSize) return;\n el.style.height = \"auto\";\n const computed = window.getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const padding =\n parseFloat(computed.paddingTop) + parseFloat(computed.paddingBottom);\n const bounds = typeof autoSize === \"object\" ? autoSize : {};\n const min = (bounds.minRows ?? 1) * lineHeight + padding;\n const max = bounds.maxRows ? bounds.maxRows * lineHeight + padding : Infinity;\n const next = Math.min(Math.max(el.scrollHeight, min), max);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [autoSize, multiline]);\n\n React.useEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n return;\n }\n if (e.key === \"Enter\" && (!multiline || (e.metaKey || e.ctrlKey))) {\n e.preventDefault();\n onConfirm(value);\n }\n };\n\n const common = {\n ref: ref as never,\n value,\n maxLength,\n className: \"typo-editor\",\n onChange: (\n e: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => setValue(e.target.value),\n onBlur: () => onConfirm(value),\n onKeyDown: handleKeyDown,\n } as const;\n\n return multiline ? (\n <textarea rows={1} {...common} />\n ) : (\n <input type=\"text\" {...common} />\n );\n};\n\n/* ============================================================================\n * Hook: shared rendering body\n * ========================================================================== */\n\ninterface RenderableProps extends BaseTypographyProps {\n ellipsisRows?: number;\n multilineEdit?: boolean;\n}\n\nfunction useTypographyBody(props: RenderableProps) {\n const fallbackText = React.useMemo(\n () => toText(props.children),\n [props.children]\n );\n\n /* ---- editable state ---- */\n const editable = props.editable;\n const editConf: EditableConfig =\n editable && typeof editable === \"object\" ? editable : {};\n const triggers = editConf.triggerType ?? [\"icon\"];\n const isControlledEdit = editConf.editing != null;\n const [editingState, setEditingState] = React.useState(false);\n const editing = isControlledEdit ? editConf.editing! : editingState;\n\n const startEdit = () => {\n editConf.onStart?.();\n if (!isControlledEdit) setEditingState(true);\n };\n const endEdit = () => {\n editConf.onEnd?.();\n if (!isControlledEdit) setEditingState(false);\n };\n const handleConfirm = (value: string) => {\n if (value !== (editConf.text ?? fallbackText)) editConf.onChange?.(value);\n endEdit();\n };\n const handleCancel = () => {\n editConf.onCancel?.();\n endEdit();\n };\n\n /* ---- ellipsis state ---- */\n const ellipsis = props.ellipsis;\n const ellConf: EllipsisConfig =\n ellipsis && typeof ellipsis === \"object\" ? ellipsis : {};\n const rows = ellConf.rows ?? props.ellipsisRows ?? 1;\n const wantClamp = !!ellipsis;\n const [expanded, setExpanded] = React.useState(false);\n\n /* ---- content ---- */\n let inner: React.ReactNode = props.children;\n\n if (props.code) inner = <code>{inner}</code>;\n if (props.keyboard) inner = <kbd>{inner}</kbd>;\n if (props.mark) inner = <mark>{inner}</mark>;\n if (props.delete) inner = <del>{inner}</del>;\n if (props.underline) inner = <u>{inner}</u>;\n if (props.strong) inner = <strong>{inner}</strong>;\n if (props.italic) inner = <i>{inner}</i>;\n\n /* ---- copy node ---- */\n let copyNode: React.ReactNode = null;\n if (props.copyable) {\n const conf =\n typeof props.copyable === \"object\" ? props.copyable : ({} as CopyableConfig);\n copyNode = <CopyAction config={conf} fallbackText={fallbackText} />;\n }\n\n /* ---- edit node ---- */\n let editIconNode: React.ReactNode = null;\n if (editable) {\n const tip = editConf.tooltip ?? \"编辑\";\n editIconNode = (\n <span\n role=\"button\"\n aria-label={typeof tip === \"string\" ? tip : \"Edit\"}\n tabIndex={0}\n title={typeof tip === \"string\" && tip !== \"\" ? tip : undefined}\n onClick={(e) => {\n e.stopPropagation();\n startEdit();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEdit();\n }\n }}\n className=\"typo-action typo-edit\"\n >\n {editConf.icon ?? <Icon name=\"edit\" size={12} />}\n </span>\n );\n }\n\n /* ---- text-trigger edit ---- */\n if (editable && triggers.includes(\"text\") && !editing) {\n inner = (\n <span\n className=\"typo-edit-text-trigger\"\n onClick={() => startEdit()}\n >\n {inner}\n </span>\n );\n }\n\n /* ---- clamp / expand ---- */\n let style: React.CSSProperties | undefined = props.style;\n let extraCls: string | undefined;\n if (wantClamp && !expanded) {\n extraCls = rows > 1 ? \"ellipsis-multi\" : \"ellipsis\";\n if (rows > 1) {\n style = {\n ...style,\n WebkitLineClamp: rows,\n } as React.CSSProperties;\n }\n }\n\n let expandNode: React.ReactNode = null;\n if (wantClamp && ellConf.expandable && !expanded) {\n expandNode = (\n <a\n className=\"typo-expand\"\n onClick={(e) => {\n ellConf.onExpand?.(e);\n setExpanded(true);\n }}\n >\n {ellConf.symbol ?? \"展开\"}\n </a>\n );\n }\n\n /* ---- title attribute fallback ---- */\n const titleAttr =\n wantClamp && ellConf.tooltip\n ? typeof ellConf.tooltip === \"string\"\n ? ellConf.tooltip\n : fallbackText\n : undefined;\n\n return {\n editing,\n editConf,\n fallbackText,\n handleConfirm,\n handleCancel,\n inner,\n copyNode,\n editIconNode,\n expandNode,\n style,\n extraCls,\n titleAttr,\n };\n}\n\n/* ============================================================================\n * Title (h1–h5)\n * ========================================================================== */\n\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface TitleProps extends BaseTypographyProps {\n /** Heading level — 1..5. Defaults to 1. */\n level?: TitleLevel;\n}\n\n/**\n * `Typography.Title` — semantic heading.\n *\n * @example\n * <Title level={2} copyable>章节标题</Title>\n */\nexport const Title = React.forwardRef<HTMLElement, TitleProps>((props, ref) => {\n const { level = 1, ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = (`h${level}`) as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nTitle.displayName = \"Typography.Title\";\n\n/* ============================================================================\n * Text — inline span\n * ========================================================================== */\n\nexport interface TextProps extends BaseTypographyProps {\n /** Force the rendered tag (default `<span>`). */\n as?: keyof JSX.IntrinsicElements;\n}\n\n/**\n * `Typography.Text` — inline text with semantic / decorative variants.\n *\n * @example\n * <Text type=\"success\" strong>成功</Text>\n * <Text code>npm install</Text>\n * <Text copyable>可复制内容</Text>\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>((props, ref) => {\n const { as = \"span\", ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = as as \"span\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nText.displayName = \"Typography.Text\";\n\n/* ============================================================================\n * Paragraph — block <p>\n * ========================================================================== */\n\nexport interface ParagraphProps extends BaseTypographyProps {}\n\n/**\n * `Typography.Paragraph` — block paragraph with the same decorations as `Text`.\n *\n * @example\n * <Paragraph ellipsis={{ rows: 3, expandable: true }}>{long}</Paragraph>\n */\nexport const Paragraph = React.forwardRef<HTMLParagraphElement, ParagraphProps>(\n (props, ref) => {\n const body = useTypographyBody({ ...props, multilineEdit: true });\n\n if (body.editing) {\n return (\n <div\n ref={ref as unknown as React.Ref<HTMLDivElement>}\n className={buildClass(props, \"typo typo-paragraph\", \"editing\")}\n style={props.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize ?? true}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </div>\n );\n }\n\n return (\n <p\n ref={ref}\n className={buildClass(props, \"typo typo-paragraph\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </p>\n );\n }\n);\nParagraph.displayName = \"Typography.Paragraph\";\n\n/* ============================================================================\n * Link — anchor\n * ========================================================================== */\n\nexport interface LinkProps\n extends BaseTypographyProps,\n Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseTypographyProps | \"type\"\n > {\n href?: string;\n /** Add the leading external icon. */\n external?: boolean;\n /** Override the external icon. */\n externalIcon?: IconName;\n}\n\n/**\n * `Typography.Link` — styled `<a>` that participates in the same decoration\n * system as `Text`. Adds a small `arrow` for `external` links.\n *\n * @example\n * <Link href=\"https://example.com\" external>外部链接</Link>\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (props, ref) => {\n const {\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n external,\n externalIcon = \"arrowRight\",\n target,\n rel,\n ...anchorRest\n } = props;\n const body = useTypographyBody({\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n });\n\n const safeRel =\n target === \"_blank\" ? rel ?? \"noopener noreferrer\" : rel;\n\n if (body.editing) {\n return (\n <span\n className={buildClass(props, \"typo typo-link\", \"editing\")}\n style={style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </span>\n );\n }\n\n return (\n <a\n ref={ref}\n className={buildClass(props, \"typo typo-link\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n target={target}\n rel={safeRel}\n aria-disabled={disabled || undefined}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n anchorRest.onClick?.(e);\n }}\n {...anchorRest}\n >\n {body.inner}\n {external && (\n <span className=\"typo-link-ext\" aria-hidden>\n <Icon name={externalIcon} size={12} />\n </span>\n )}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </a>\n );\n }\n);\nLink.displayName = \"Typography.Link\";\n\n/* ============================================================================\n * Typography wrapper (article-style block)\n * ========================================================================== */\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent\n extends React.ForwardRefExoticComponent<\n TypographyProps & React.RefAttributes<HTMLDivElement>\n > {\n Title: typeof Title;\n Text: typeof Text;\n Paragraph: typeof Paragraph;\n Link: typeof Link;\n}\n\n/**\n * `Typography` — optional article-style wrapper that applies consistent\n * vertical rhythm to its `Title` / `Paragraph` / `Text` / `Link` children.\n *\n * @example\n * <Typography>\n * <Typography.Title level={2}>标题</Typography.Title>\n * <Typography.Paragraph>段落…</Typography.Paragraph>\n * </Typography>\n */\nconst TypographyBase = React.forwardRef<HTMLDivElement, TypographyProps>(\n ({ className = \"\", children, ...rest }, ref) => (\n <article\n ref={ref as unknown as React.Ref<HTMLElement>}\n className={`typo-root ${className}`}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n >\n {children}\n </article>\n )\n) as unknown as TypographyComponent;\n\nTypographyBase.Title = Title;\nTypographyBase.Text = Text;\nTypographyBase.Paragraph = Paragraph;\nTypographyBase.Link = Link;\n(TypographyBase as React.ForwardRefExoticComponent<unknown>).displayName =\n \"Typography\";\n\nexport const Typography = TypographyBase;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Typography/Typography.tsx"],"names":["React","Icon","jsx","jsxs"],"mappings":"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","file":"chunk-3BZ47QNV.cjs","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Typography.css\";\nimport * as React from \"react\";\nimport { Icon, type IconName } from \"../Icon\";\n\n/* ============================================================================\n * Shared types\n * ========================================================================== */\n\nexport type TypographyType = \"secondary\" | \"success\" | \"warning\" | \"danger\";\n\nexport interface CopyableConfig {\n /** Text to copy. Defaults to the rendered children string. */\n text?: string;\n /** Fired after a successful copy. */\n onCopy?: (event: React.MouseEvent<HTMLSpanElement>) => void;\n /** Custom icons `[default, copied]`. */\n icon?: [React.ReactNode, React.ReactNode];\n /** Custom tooltip text `[default, copied]`. Pass `false` to disable. */\n tooltips?: [React.ReactNode, React.ReactNode] | false;\n /** Format/MIME hint when calling `navigator.clipboard.write` is not used. */\n format?: \"text/plain\" | \"text/html\";\n}\n\nexport interface EditableConfig {\n /** Controlled editing flag. Omit for uncontrolled (click icon to start). */\n editing?: boolean;\n /** Text shown in the editor; falls back to `children` string. */\n text?: string;\n /** Fired with the new value when the user confirms. */\n onChange?: (value: string) => void;\n /** Fired when the user cancels (Escape or blur without confirm). */\n onCancel?: () => void;\n /** Fired when editing starts. */\n onStart?: () => void;\n /** Fired when editing ends (regardless of save/cancel). */\n onEnd?: () => void;\n /** Maximum input length. */\n maxLength?: number;\n /** Auto resize textarea. `true` = autosize; or pass row bounds. */\n autoSize?: boolean | { minRows?: number; maxRows?: number };\n /** What triggers entering edit mode. Defaults to `[\"icon\"]`. */\n triggerType?: Array<\"icon\" | \"text\">;\n /** Override the edit icon. */\n icon?: React.ReactNode;\n /** Tooltip text on the trigger icon. Pass `false` to disable. */\n tooltip?: React.ReactNode | false;\n /** Use a single-line input instead of textarea. */\n enterIcon?: React.ReactNode;\n}\n\nexport interface EllipsisConfig {\n /** Number of rows to clamp at. Defaults to 1. */\n rows?: number;\n /** Show an \"Expand\" affordance after clamping. */\n expandable?: boolean;\n /** Custom expand-button label. */\n symbol?: React.ReactNode;\n /** Fired on expand. */\n onExpand?: (event: React.MouseEvent<HTMLElement>) => void;\n /** Show full text in a `title` attribute. */\n tooltip?: boolean | React.ReactNode;\n /** Optional suffix that should always remain visible (e.g. an em-dash author). */\n suffix?: string;\n}\n\nexport interface BaseTypographyProps {\n /** Semantic color. */\n type?: TypographyType;\n /** Render disabled (muted + not selectable). */\n disabled?: boolean;\n /** Highlight with mark background. */\n mark?: boolean;\n /** Render as inline `<code>`. */\n code?: boolean;\n /** Render as keyboard key `<kbd>`. */\n keyboard?: boolean;\n /** Underline. */\n underline?: boolean;\n /** Strikethrough. */\n delete?: boolean;\n /** Bold. */\n strong?: boolean;\n /** Italic. */\n italic?: boolean;\n /** Add a copy button. Pass an object to customize. */\n copyable?: boolean | CopyableConfig;\n /** Add an edit button. Pass an object to customize. */\n editable?: boolean | EditableConfig;\n /** Truncate to N rows with optional expand affordance. */\n ellipsis?: boolean | EllipsisConfig;\n /** Extra class names. */\n className?: string;\n /** Inline style. */\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\n/* ============================================================================\n * Internals\n * ========================================================================== */\n\nfunction toText(node: React.ReactNode): string {\n if (node == null || node === false) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(toText).join(\"\");\n if (React.isValidElement(node)) {\n const props = node.props as { children?: React.ReactNode };\n return toText(props.children);\n }\n return \"\";\n}\n\nfunction buildClass(props: BaseTypographyProps, base: string, extra?: string) {\n return [\n base,\n props.type,\n props.disabled && \"disabled\",\n props.mark && \"mark\",\n props.code && \"code\",\n props.keyboard && \"kbd\",\n props.underline && \"underline\",\n props.delete && \"del\",\n props.strong && \"strong\",\n props.italic && \"italic\",\n extra,\n props.className,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\n/* ---------- Copy button ---------- */\n\nconst CopyAction: React.FC<{\n config: CopyableConfig;\n fallbackText: string;\n}> = ({ config, fallbackText }) => {\n const [copied, setCopied] = React.useState(false);\n const timerRef = React.useRef<number | null>(null);\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const handleCopy = (event: React.MouseEvent<HTMLSpanElement>) => {\n event.stopPropagation();\n const text = config.text ?? fallbackText;\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n navigator.clipboard.writeText(text).catch(() => {\n /* swallow — user-visible feedback is already minimal */\n });\n }\n config.onCopy?.(event);\n setCopied(true);\n if (timerRef.current != null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setCopied(false), 2400);\n };\n\n const [defIcon, doneIcon] = config.icon ?? [\n <Icon key=\"def\" name=\"copy\" size={12} />,\n <Icon key=\"done\" name=\"check\" size={12} />,\n ];\n const tipText =\n config.tooltips === false\n ? undefined\n : Array.isArray(config.tooltips)\n ? copied\n ? config.tooltips[1]\n : config.tooltips[0]\n : copied\n ? \"已复制\"\n : \"复制\";\n\n return (\n <span\n role=\"button\"\n aria-label={typeof tipText === \"string\" ? tipText : \"Copy\"}\n tabIndex={0}\n title={typeof tipText === \"string\" ? tipText : undefined}\n onClick={handleCopy}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleCopy(e as unknown as React.MouseEvent<HTMLSpanElement>);\n }\n }}\n className={`typo-action typo-copy ${copied ? \"copied\" : \"\"}`}\n >\n {copied ? doneIcon : defIcon}\n </span>\n );\n};\n\n/* ---------- Edit affordance + inline editor ---------- */\n\nconst EditableEditor: React.FC<{\n initial: string;\n multiline: boolean;\n maxLength?: number;\n autoSize?: EditableConfig[\"autoSize\"];\n onConfirm: (value: string) => void;\n onCancel: () => void;\n}> = ({ initial, multiline, maxLength, autoSize, onConfirm, onCancel }) => {\n const [value, setValue] = React.useState(initial);\n const ref = React.useRef<HTMLTextAreaElement | HTMLInputElement | null>(null);\n\n React.useEffect(() => {\n const el = ref.current;\n if (el) {\n el.focus();\n const len = el.value.length;\n el.setSelectionRange(len, len);\n }\n }, []);\n\n const resize = React.useCallback(() => {\n const el = ref.current as HTMLTextAreaElement | null;\n if (!el || !multiline || !autoSize) return;\n el.style.height = \"auto\";\n const computed = window.getComputedStyle(el);\n const lineHeight = parseFloat(computed.lineHeight) || 20;\n const padding =\n parseFloat(computed.paddingTop) + parseFloat(computed.paddingBottom);\n const bounds = typeof autoSize === \"object\" ? autoSize : {};\n const min = (bounds.minRows ?? 1) * lineHeight + padding;\n const max = bounds.maxRows ? bounds.maxRows * lineHeight + padding : Infinity;\n const next = Math.min(Math.max(el.scrollHeight, min), max);\n el.style.height = `${next}px`;\n el.style.overflowY = el.scrollHeight > max ? \"auto\" : \"hidden\";\n }, [autoSize, multiline]);\n\n React.useEffect(() => {\n resize();\n }, [value, resize]);\n\n const handleKeyDown = (\n e: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n onCancel();\n return;\n }\n if (e.key === \"Enter\" && (!multiline || (e.metaKey || e.ctrlKey))) {\n e.preventDefault();\n onConfirm(value);\n }\n };\n\n const common = {\n ref: ref as never,\n value,\n maxLength,\n className: \"typo-editor\",\n onChange: (\n e: React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>\n ) => setValue(e.target.value),\n onBlur: () => onConfirm(value),\n onKeyDown: handleKeyDown,\n } as const;\n\n return multiline ? (\n <textarea rows={1} {...common} />\n ) : (\n <input type=\"text\" {...common} />\n );\n};\n\n/* ============================================================================\n * Hook: shared rendering body\n * ========================================================================== */\n\ninterface RenderableProps extends BaseTypographyProps {\n ellipsisRows?: number;\n multilineEdit?: boolean;\n}\n\nfunction useTypographyBody(props: RenderableProps) {\n const fallbackText = React.useMemo(\n () => toText(props.children),\n [props.children]\n );\n\n /* ---- editable state ---- */\n const editable = props.editable;\n const editConf: EditableConfig =\n editable && typeof editable === \"object\" ? editable : {};\n const triggers = editConf.triggerType ?? [\"icon\"];\n const isControlledEdit = editConf.editing != null;\n const [editingState, setEditingState] = React.useState(false);\n const editing = isControlledEdit ? editConf.editing! : editingState;\n\n const startEdit = () => {\n editConf.onStart?.();\n if (!isControlledEdit) setEditingState(true);\n };\n const endEdit = () => {\n editConf.onEnd?.();\n if (!isControlledEdit) setEditingState(false);\n };\n const handleConfirm = (value: string) => {\n if (value !== (editConf.text ?? fallbackText)) editConf.onChange?.(value);\n endEdit();\n };\n const handleCancel = () => {\n editConf.onCancel?.();\n endEdit();\n };\n\n /* ---- ellipsis state ---- */\n const ellipsis = props.ellipsis;\n const ellConf: EllipsisConfig =\n ellipsis && typeof ellipsis === \"object\" ? ellipsis : {};\n const rows = ellConf.rows ?? props.ellipsisRows ?? 1;\n const wantClamp = !!ellipsis;\n const [expanded, setExpanded] = React.useState(false);\n\n /* ---- content ---- */\n let inner: React.ReactNode = props.children;\n\n if (props.code) inner = <code>{inner}</code>;\n if (props.keyboard) inner = <kbd>{inner}</kbd>;\n if (props.mark) inner = <mark>{inner}</mark>;\n if (props.delete) inner = <del>{inner}</del>;\n if (props.underline) inner = <u>{inner}</u>;\n if (props.strong) inner = <strong>{inner}</strong>;\n if (props.italic) inner = <i>{inner}</i>;\n\n /* ---- copy node ---- */\n let copyNode: React.ReactNode = null;\n if (props.copyable) {\n const conf =\n typeof props.copyable === \"object\" ? props.copyable : ({} as CopyableConfig);\n copyNode = <CopyAction config={conf} fallbackText={fallbackText} />;\n }\n\n /* ---- edit node ---- */\n let editIconNode: React.ReactNode = null;\n if (editable) {\n const tip = editConf.tooltip ?? \"编辑\";\n editIconNode = (\n <span\n role=\"button\"\n aria-label={typeof tip === \"string\" ? tip : \"Edit\"}\n tabIndex={0}\n title={typeof tip === \"string\" && tip !== \"\" ? tip : undefined}\n onClick={(e) => {\n e.stopPropagation();\n startEdit();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n startEdit();\n }\n }}\n className=\"typo-action typo-edit\"\n >\n {editConf.icon ?? <Icon name=\"edit\" size={12} />}\n </span>\n );\n }\n\n /* ---- text-trigger edit ---- */\n if (editable && triggers.includes(\"text\") && !editing) {\n inner = (\n <span\n className=\"typo-edit-text-trigger\"\n onClick={() => startEdit()}\n >\n {inner}\n </span>\n );\n }\n\n /* ---- clamp / expand ---- */\n let style: React.CSSProperties | undefined = props.style;\n let extraCls: string | undefined;\n if (wantClamp && !expanded) {\n extraCls = rows > 1 ? \"ellipsis-multi\" : \"ellipsis\";\n if (rows > 1) {\n style = {\n ...style,\n WebkitLineClamp: rows,\n } as React.CSSProperties;\n }\n }\n\n let expandNode: React.ReactNode = null;\n if (wantClamp && ellConf.expandable && !expanded) {\n expandNode = (\n <a\n className=\"typo-expand\"\n onClick={(e) => {\n ellConf.onExpand?.(e);\n setExpanded(true);\n }}\n >\n {ellConf.symbol ?? \"展开\"}\n </a>\n );\n }\n\n /* ---- title attribute fallback ---- */\n const titleAttr =\n wantClamp && ellConf.tooltip\n ? typeof ellConf.tooltip === \"string\"\n ? ellConf.tooltip\n : fallbackText\n : undefined;\n\n return {\n editing,\n editConf,\n fallbackText,\n handleConfirm,\n handleCancel,\n inner,\n copyNode,\n editIconNode,\n expandNode,\n style,\n extraCls,\n titleAttr,\n };\n}\n\n/* ============================================================================\n * Title (h1–h5)\n * ========================================================================== */\n\nexport type TitleLevel = 1 | 2 | 3 | 4 | 5;\n\nexport interface TitleProps extends BaseTypographyProps {\n /** Heading level — 1..5. Defaults to 1. */\n level?: TitleLevel;\n}\n\n/**\n * `Typography.Title` — semantic heading.\n *\n * @example\n * <Title level={2} copyable>章节标题</Title>\n */\nexport const Title = React.forwardRef<HTMLElement, TitleProps>((props, ref) => {\n const { level = 1, ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = (`h${level}`) as \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"h5\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLHeadingElement>}\n className={buildClass(rest, `typo typo-title h${level}`, body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nTitle.displayName = \"Typography.Title\";\n\n/* ============================================================================\n * Text — inline span\n * ========================================================================== */\n\nexport interface TextProps extends BaseTypographyProps {\n /** Force the rendered tag (default `<span>`). */\n as?: keyof JSX.IntrinsicElements;\n}\n\n/**\n * `Typography.Text` — inline text with semantic / decorative variants.\n *\n * @example\n * <Text type=\"success\" strong>成功</Text>\n * <Text code>npm install</Text>\n * <Text copyable>可复制内容</Text>\n */\nexport const Text = React.forwardRef<HTMLElement, TextProps>((props, ref) => {\n const { as = \"span\", ...rest } = props;\n const body = useTypographyBody({ ...rest, multilineEdit: false });\n const Tag = as as \"span\";\n\n if (body.editing) {\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", \"editing\")}\n style={rest.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </Tag>\n );\n }\n\n return (\n <Tag\n ref={ref as React.Ref<HTMLSpanElement>}\n className={buildClass(rest, \"typo typo-text\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </Tag>\n );\n});\nText.displayName = \"Typography.Text\";\n\n/* ============================================================================\n * Paragraph — block <p>\n * ========================================================================== */\n\nexport interface ParagraphProps extends BaseTypographyProps {}\n\n/**\n * `Typography.Paragraph` — block paragraph with the same decorations as `Text`.\n *\n * @example\n * <Paragraph ellipsis={{ rows: 3, expandable: true }}>{long}</Paragraph>\n */\nexport const Paragraph = React.forwardRef<HTMLParagraphElement, ParagraphProps>(\n (props, ref) => {\n const body = useTypographyBody({ ...props, multilineEdit: true });\n\n if (body.editing) {\n return (\n <div\n ref={ref as unknown as React.Ref<HTMLDivElement>}\n className={buildClass(props, \"typo typo-paragraph\", \"editing\")}\n style={props.style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize ?? true}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </div>\n );\n }\n\n return (\n <p\n ref={ref}\n className={buildClass(props, \"typo typo-paragraph\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n >\n {body.inner}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </p>\n );\n }\n);\nParagraph.displayName = \"Typography.Paragraph\";\n\n/* ============================================================================\n * Link — anchor\n * ========================================================================== */\n\nexport interface LinkProps\n extends BaseTypographyProps,\n Omit<\n React.AnchorHTMLAttributes<HTMLAnchorElement>,\n keyof BaseTypographyProps | \"type\"\n > {\n href?: string;\n /** Add the leading external icon. */\n external?: boolean;\n /** Override the external icon. */\n externalIcon?: IconName;\n}\n\n/**\n * `Typography.Link` — styled `<a>` that participates in the same decoration\n * system as `Text`. Adds a small `arrow` for `external` links.\n *\n * @example\n * <Link href=\"https://example.com\" external>外部链接</Link>\n */\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n (props, ref) => {\n const {\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n external,\n externalIcon = \"arrowRight\",\n target,\n rel,\n ...anchorRest\n } = props;\n const body = useTypographyBody({\n type,\n disabled,\n mark,\n code,\n keyboard,\n underline,\n delete: del,\n strong,\n italic,\n copyable,\n editable,\n ellipsis,\n className,\n style,\n children,\n });\n\n const safeRel =\n target === \"_blank\" ? rel ?? \"noopener noreferrer\" : rel;\n\n if (body.editing) {\n return (\n <span\n className={buildClass(props, \"typo typo-link\", \"editing\")}\n style={style}\n >\n <EditableEditor\n initial={body.editConf.text ?? body.fallbackText}\n multiline={false}\n maxLength={body.editConf.maxLength}\n autoSize={body.editConf.autoSize}\n onConfirm={body.handleConfirm}\n onCancel={body.handleCancel}\n />\n </span>\n );\n }\n\n return (\n <a\n ref={ref}\n className={buildClass(props, \"typo typo-link\", body.extraCls)}\n style={body.style}\n title={body.titleAttr}\n target={target}\n rel={safeRel}\n aria-disabled={disabled || undefined}\n onClick={(e) => {\n if (disabled) {\n e.preventDefault();\n return;\n }\n anchorRest.onClick?.(e);\n }}\n {...anchorRest}\n >\n {body.inner}\n {external && (\n <span className=\"typo-link-ext\" aria-hidden>\n <Icon name={externalIcon} size={12} />\n </span>\n )}\n {body.expandNode}\n {body.copyNode}\n {body.editIconNode}\n </a>\n );\n }\n);\nLink.displayName = \"Typography.Link\";\n\n/* ============================================================================\n * Typography wrapper (article-style block)\n * ========================================================================== */\n\nexport interface TypographyProps extends React.HTMLAttributes<HTMLDivElement> {\n children?: React.ReactNode;\n}\n\ninterface TypographyComponent\n extends React.ForwardRefExoticComponent<\n TypographyProps & React.RefAttributes<HTMLDivElement>\n > {\n Title: typeof Title;\n Text: typeof Text;\n Paragraph: typeof Paragraph;\n Link: typeof Link;\n}\n\n/**\n * `Typography` — optional article-style wrapper that applies consistent\n * vertical rhythm to its `Title` / `Paragraph` / `Text` / `Link` children.\n *\n * @example\n * <Typography>\n * <Typography.Title level={2}>标题</Typography.Title>\n * <Typography.Paragraph>段落…</Typography.Paragraph>\n * </Typography>\n */\nconst TypographyBase = React.forwardRef<HTMLDivElement, TypographyProps>(\n ({ className = \"\", children, ...rest }, ref) => (\n <article\n ref={ref as unknown as React.Ref<HTMLElement>}\n className={`typo-root ${className}`}\n {...(rest as React.HTMLAttributes<HTMLElement>)}\n >\n {children}\n </article>\n )\n) as unknown as TypographyComponent;\n\nTypographyBase.Title = Title;\nTypographyBase.Text = Text;\nTypographyBase.Paragraph = Paragraph;\nTypographyBase.Link = Link;\n(TypographyBase as React.ForwardRefExoticComponent<unknown>).displayName =\n \"Typography\";\n\nexport const Typography = TypographyBase;\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useFloating } from './chunk-V2DIQ3RH.js';
|
|
2
|
-
import './tokens-
|
|
2
|
+
import './tokens-BIIUTPKN.css';
|
|
3
3
|
import './shared-NJHRNLRH.css';
|
|
4
|
-
import './Popover-
|
|
4
|
+
import './Popover-NYEKT5CQ.css';
|
|
5
5
|
import * as React from 'react';
|
|
6
6
|
import { createPortal } from 'react-dom';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
@@ -62,5 +62,5 @@ var Popover = ({
|
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
export { Popover };
|
|
65
|
-
//# sourceMappingURL=chunk-
|
|
66
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
//# sourceMappingURL=chunk-3UU2PUK4.js.map
|
|
66
|
+
//# sourceMappingURL=chunk-3UU2PUK4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Popover/Popover.tsx"],"names":[],"mappings":";;;;;;;;AAmBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,OAAA,GAAU,OAAA;AAAA,EACV,WAAA,GAAc,KAAA;AAAA,EACd,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAS,WAAW,CAAA;AACpD,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,IAAA,GAAQ,KAAA;AACpC,EAAA,MAAM,QAAA,GAAiB,aAAwB,IAAI,CAAA;AAEnD,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAa,WAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,GAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAe;AAC1B,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,CAAC,CAAA;AAC7B,IAAA,YAAA,GAAe,CAAC,CAAA;AAAA,EAClB,CAAA;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,OAAA,KAAY,OAAA,IAAW,CAAC,IAAA,EAAM;AAClC,IAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAkB;AAC3B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACrC,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,KAAK,CAAA;AAAA,IACX,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,CAAC,CAAA;AAAA,EAE1D,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,QAAA,GACJ,YAAY,OAAA,GACR,EAAE,cAAc,MAAM,GAAA,CAAI,IAAI,CAAA,EAAG,YAAA,EAAc,MAAM,GAAA,CAAI,KAAK,GAAE,GAChE,EAAE,SAAS,MAAM,GAAA,CAAI,CAAC,IAAI,CAAA,EAAE;AAElC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAW,kBAAkB,SAAS,CAAA,CAAA;AAAA,QACtC,KAAA,EAAO,EAAE,OAAA,EAAS,aAAA,EAAc;AAAA,QAC/B,GAAG,QAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,sBACE,GAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAK,QAAA,EAAU,SAAA,EAAW,WAAW,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,aAAA,EAC3D,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Popover/Popover.tsx"],"names":[],"mappings":";;;;;;;;AAmBO,IAAM,UAAkC,CAAC;AAAA,EAC9C,OAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,OAAA,GAAU,OAAA;AAAA,EACV,WAAA,GAAc,KAAA;AAAA,EACd,IAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAS,WAAW,CAAA;AACpD,EAAA,MAAM,eAAe,IAAA,KAAS,MAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,IAAA,GAAQ,KAAA;AACpC,EAAA,MAAM,QAAA,GAAiB,aAAwB,IAAI,CAAA;AAEnD,EAAA,MAAM,EAAE,UAAA,EAAY,aAAA,EAAe,SAAA,EAAW,QAAA,KAAa,WAAA,CAA6B;AAAA,IACtF,IAAA,EAAM,IAAA;AAAA,IACN,SAAA;AAAA,IACA,UAAA,EAAY,GAAA;AAAA,IACZ,WAAA,EAAa,GAAA;AAAA,IACb,UAAA,EAAY;AAAA,GACb,CAAA;AAED,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAe;AAC1B,IAAA,IAAI,CAAC,YAAA,EAAc,QAAA,CAAS,CAAC,CAAA;AAC7B,IAAA,YAAA,GAAe,CAAC,CAAA;AAAA,EAClB,CAAA;AAEA,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,OAAA,KAAY,OAAA,IAAW,CAAC,IAAA,EAAM;AAClC,IAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAkB;AAC3B,MAAA,MAAM,IAAI,CAAA,CAAE,MAAA;AACZ,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACrC,MAAA,IAAI,QAAA,CAAS,OAAA,EAAS,QAAA,CAAS,CAAC,CAAA,EAAG;AACnC,MAAA,GAAA,CAAI,KAAK,CAAA;AAAA,IACX,CAAA;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACxC,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,CAAC,CAAA;AAAA,EAE1D,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAElB,EAAA,MAAM,QAAA,GACJ,YAAY,OAAA,GACR,EAAE,cAAc,MAAM,GAAA,CAAI,IAAI,CAAA,EAAG,YAAA,EAAc,MAAM,GAAA,CAAI,KAAK,GAAE,GAChE,EAAE,SAAS,MAAM,GAAA,CAAI,CAAC,IAAI,CAAA,EAAE;AAElC,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAW,kBAAkB,SAAS,CAAA,CAAA;AAAA,QACtC,KAAA,EAAO,EAAE,OAAA,EAAS,aAAA,EAAc;AAAA,QAC/B,GAAG,QAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,IACC,IAAA,IAAQ,OAAO,QAAA,KAAa,WAAA,IAC3B,YAAA;AAAA,sBACE,GAAA,CAAC,MAAA,EAAA,EAAK,GAAA,EAAK,QAAA,EAAU,SAAA,EAAW,WAAW,QAAQ,CAAA,CAAA,EAAI,KAAA,EAAO,aAAA,EAC3D,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,MACA,QAAA,CAAS;AAAA;AACX,GAAA,EACJ,CAAA;AAEJ","file":"chunk-3UU2PUK4.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Popover.css\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useFloating } from \"../../utils/useFloating\";\n\nexport interface PopoverProps {\n content: React.ReactNode;\n placement?: \"top\" | \"bottom\" | \"left\" | \"right\";\n trigger?: \"click\" | \"hover\";\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n children: React.ReactElement;\n className?: string;\n}\n\n/** `Popover` — rich content bubble. */\nexport const Popover: React.FC<PopoverProps> = ({\n content,\n placement = \"bottom\",\n trigger = \"click\",\n defaultOpen = false,\n open,\n onOpenChange,\n children,\n className = \"\",\n}) => {\n const [inner, setInner] = React.useState(defaultOpen);\n const isControlled = open !== undefined;\n const show = isControlled ? open! : inner;\n const panelRef = React.useRef<HTMLSpanElement>(null);\n\n const { triggerRef, floatingStyle, placement: resolved } = useFloating<HTMLSpanElement>({\n open: show,\n placement,\n panelWidth: 240,\n panelHeight: 160,\n alignCross: \"center\",\n });\n\n const set = (v: boolean) => {\n if (!isControlled) setInner(v);\n onOpenChange?.(v);\n };\n\n React.useEffect(() => {\n if (trigger !== \"click\" || !show) return;\n const h = (e: MouseEvent) => {\n const t = e.target as Node;\n if (triggerRef.current?.contains(t)) return;\n if (panelRef.current?.contains(t)) return;\n set(false);\n };\n document.addEventListener(\"mousedown\", h);\n return () => document.removeEventListener(\"mousedown\", h);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [show, trigger]);\n\n const interact =\n trigger === \"hover\"\n ? { onMouseEnter: () => set(true), onMouseLeave: () => set(false) }\n : { onClick: () => set(!show) };\n\n return (\n <>\n <span\n ref={triggerRef}\n className={`popover-anchor ${className}`}\n style={{ display: \"inline-flex\" }}\n {...interact}\n >\n {children}\n </span>\n {show && typeof document !== \"undefined\" &&\n createPortal(\n <span ref={panelRef} className={`popover ${resolved}`} style={floatingStyle}>\n {content}\n </span>,\n document.body\n )}\n </>\n );\n};\n"]}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import './tokens-BIIUTPKN.css';
|
|
2
|
+
import './shared-NJHRNLRH.css';
|
|
3
|
+
import './Splitter-DHNOY4NC.css';
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
// src/components/Splitter/Splitter.tsx
|
|
8
|
+
var Splitter = ({
|
|
9
|
+
direction = "horizontal",
|
|
10
|
+
defaultSize = 240,
|
|
11
|
+
size,
|
|
12
|
+
onResize,
|
|
13
|
+
onResizeEnd,
|
|
14
|
+
min = 80,
|
|
15
|
+
max = Infinity,
|
|
16
|
+
step = 16,
|
|
17
|
+
children,
|
|
18
|
+
className = "",
|
|
19
|
+
handleClassName = ""
|
|
20
|
+
}) => {
|
|
21
|
+
const isControlled = size !== void 0;
|
|
22
|
+
const [inner, setInner] = React.useState(defaultSize);
|
|
23
|
+
const current = isControlled ? size : inner;
|
|
24
|
+
const containerRef = React.useRef(null);
|
|
25
|
+
const [dragging, setDragging] = React.useState(false);
|
|
26
|
+
const clamp = React.useCallback(
|
|
27
|
+
(n) => {
|
|
28
|
+
const el = containerRef.current;
|
|
29
|
+
const bound = el ? direction === "horizontal" ? el.clientWidth : el.clientHeight : Infinity;
|
|
30
|
+
return Math.max(min, Math.min(Math.min(max, Math.max(0, bound - 24)), n));
|
|
31
|
+
},
|
|
32
|
+
[direction, min, max]
|
|
33
|
+
);
|
|
34
|
+
const commit = React.useCallback(
|
|
35
|
+
(n) => {
|
|
36
|
+
const clamped = clamp(n);
|
|
37
|
+
if (!isControlled) setInner(clamped);
|
|
38
|
+
onResize?.(clamped);
|
|
39
|
+
return clamped;
|
|
40
|
+
},
|
|
41
|
+
[clamp, isControlled, onResize]
|
|
42
|
+
);
|
|
43
|
+
const onPointerDown = (e) => {
|
|
44
|
+
if (e.button !== 0) return;
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
const el = containerRef.current;
|
|
47
|
+
if (!el) return;
|
|
48
|
+
const rect = el.getBoundingClientRect();
|
|
49
|
+
setDragging(true);
|
|
50
|
+
e.target.setPointerCapture?.(e.pointerId);
|
|
51
|
+
let latest = current;
|
|
52
|
+
const move = (ev) => {
|
|
53
|
+
const next = direction === "horizontal" ? ev.clientX - rect.left : ev.clientY - rect.top;
|
|
54
|
+
latest = commit(next);
|
|
55
|
+
};
|
|
56
|
+
const up = () => {
|
|
57
|
+
setDragging(false);
|
|
58
|
+
onResizeEnd?.(latest);
|
|
59
|
+
window.removeEventListener("pointermove", move);
|
|
60
|
+
window.removeEventListener("pointerup", up);
|
|
61
|
+
};
|
|
62
|
+
window.addEventListener("pointermove", move);
|
|
63
|
+
window.addEventListener("pointerup", up);
|
|
64
|
+
};
|
|
65
|
+
const onKeyDown = (e) => {
|
|
66
|
+
const inc = (n) => commit(current + n);
|
|
67
|
+
if (direction === "horizontal") {
|
|
68
|
+
if (e.key === "ArrowLeft") {
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
inc(-step);
|
|
71
|
+
}
|
|
72
|
+
if (e.key === "ArrowRight") {
|
|
73
|
+
e.preventDefault();
|
|
74
|
+
inc(step);
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
if (e.key === "ArrowUp") {
|
|
78
|
+
e.preventDefault();
|
|
79
|
+
inc(-step);
|
|
80
|
+
}
|
|
81
|
+
if (e.key === "ArrowDown") {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
inc(step);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const firstStyle = direction === "horizontal" ? { width: current } : { height: current };
|
|
88
|
+
return /* @__PURE__ */ jsxs(
|
|
89
|
+
"div",
|
|
90
|
+
{
|
|
91
|
+
ref: containerRef,
|
|
92
|
+
className: `splitter ${direction} ${dragging ? "dragging" : ""} ${className}`,
|
|
93
|
+
children: [
|
|
94
|
+
/* @__PURE__ */ jsx("div", { className: "splitter-panel first", style: firstStyle, children: children[0] }),
|
|
95
|
+
/* @__PURE__ */ jsx(
|
|
96
|
+
"div",
|
|
97
|
+
{
|
|
98
|
+
role: "separator",
|
|
99
|
+
tabIndex: 0,
|
|
100
|
+
"aria-orientation": direction === "horizontal" ? "vertical" : "horizontal",
|
|
101
|
+
"aria-valuenow": current,
|
|
102
|
+
"aria-valuemin": min,
|
|
103
|
+
"aria-valuemax": Number.isFinite(max) ? max : void 0,
|
|
104
|
+
className: `splitter-handle ${handleClassName}`,
|
|
105
|
+
onPointerDown,
|
|
106
|
+
onKeyDown,
|
|
107
|
+
children: /* @__PURE__ */ jsx("span", { className: "splitter-handle-grip", "aria-hidden": true })
|
|
108
|
+
}
|
|
109
|
+
),
|
|
110
|
+
/* @__PURE__ */ jsx("div", { className: "splitter-panel second", children: children[1] })
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export { Splitter };
|
|
117
|
+
//# sourceMappingURL=chunk-47Z4NIU4.js.map
|
|
118
|
+
//# sourceMappingURL=chunk-47Z4NIU4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Splitter/Splitter.tsx"],"names":[],"mappings":"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","file":"chunk-47Z4NIU4.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Splitter.css\";\nimport * as React from \"react\";\n\nexport type SplitterDirection = \"horizontal\" | \"vertical\";\n\nexport interface SplitterProps {\n /**\n * Layout direction.\n * - `\"horizontal\"` (default) — children placed left/right, handle is a vertical bar.\n * - `\"vertical\"` — children placed top/bottom, handle is a horizontal bar.\n */\n direction?: SplitterDirection;\n /** Uncontrolled initial size (px) of the first panel. */\n defaultSize?: number;\n /** Controlled size (px) of the first panel. */\n size?: number;\n /** Fires while the user drags. */\n onResize?: (size: number) => void;\n /** Fires once when the drag ends. */\n onResizeEnd?: (size: number) => void;\n /** Minimum size (px) of the first panel. Default 80. */\n min?: number;\n /** Maximum size (px) of the first panel. Default Infinity. */\n max?: number;\n /** Keyboard step in px. Default 16. */\n step?: number;\n /** Exactly two children: the two panels. */\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n /** Extra className on the drag handle. */\n handleClassName?: string;\n}\n\n/**\n * `Splitter` — draggable split between two panels. Keyboard-accessible.\n *\n * @example\n * ```tsx\n * <Splitter defaultSize={240} min={160} max={400}>\n * <Sidebar ... />\n * <main>...</main>\n * </Splitter>\n * ```\n */\nexport const Splitter: React.FC<SplitterProps> = ({\n direction = \"horizontal\",\n defaultSize = 240,\n size,\n onResize,\n onResizeEnd,\n min = 80,\n max = Infinity,\n step = 16,\n children,\n className = \"\",\n handleClassName = \"\",\n}) => {\n const isControlled = size !== undefined;\n const [inner, setInner] = React.useState(defaultSize);\n const current = isControlled ? (size as number) : inner;\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const [dragging, setDragging] = React.useState(false);\n\n const clamp = React.useCallback(\n (n: number) => {\n const el = containerRef.current;\n const bound = el\n ? direction === \"horizontal\"\n ? el.clientWidth\n : el.clientHeight\n : Infinity;\n return Math.max(min, Math.min(Math.min(max, Math.max(0, bound - 24)), n));\n },\n [direction, min, max]\n );\n\n const commit = React.useCallback(\n (n: number) => {\n const clamped = clamp(n);\n if (!isControlled) setInner(clamped);\n onResize?.(clamped);\n return clamped;\n },\n [clamp, isControlled, onResize]\n );\n\n const onPointerDown = (e: React.PointerEvent) => {\n if (e.button !== 0) return;\n e.preventDefault();\n const el = containerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setDragging(true);\n (e.target as Element).setPointerCapture?.(e.pointerId);\n\n let latest = current;\n const move = (ev: PointerEvent) => {\n const next =\n direction === \"horizontal\" ? ev.clientX - rect.left : ev.clientY - rect.top;\n latest = commit(next);\n };\n const up = () => {\n setDragging(false);\n onResizeEnd?.(latest);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const inc = (n: number) => commit(current + n);\n if (direction === \"horizontal\") {\n if (e.key === \"ArrowLeft\") { e.preventDefault(); inc(-step); }\n if (e.key === \"ArrowRight\") { e.preventDefault(); inc(step); }\n } else {\n if (e.key === \"ArrowUp\") { e.preventDefault(); inc(-step); }\n if (e.key === \"ArrowDown\") { e.preventDefault(); inc(step); }\n }\n };\n\n const firstStyle: React.CSSProperties =\n direction === \"horizontal\" ? { width: current } : { height: current };\n\n return (\n <div\n ref={containerRef}\n className={`splitter ${direction} ${dragging ? \"dragging\" : \"\"} ${className}`}\n >\n <div className=\"splitter-panel first\" style={firstStyle}>\n {children[0]}\n </div>\n <div\n role=\"separator\"\n tabIndex={0}\n aria-orientation={direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n aria-valuenow={current}\n aria-valuemin={min}\n aria-valuemax={Number.isFinite(max) ? max : undefined}\n className={`splitter-handle ${handleClassName}`}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n >\n <span className=\"splitter-handle-grip\" aria-hidden />\n </div>\n <div className=\"splitter-panel second\">{children[1]}</div>\n </div>\n );\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import './tokens-
|
|
1
|
+
import './tokens-BIIUTPKN.css';
|
|
2
2
|
import './shared-NJHRNLRH.css';
|
|
3
3
|
import './Card-RG7ECXL2.css';
|
|
4
4
|
import * as React from 'react';
|
|
@@ -37,5 +37,5 @@ var Panel = ({
|
|
|
37
37
|
] });
|
|
38
38
|
|
|
39
39
|
export { Card, Panel };
|
|
40
|
-
//# sourceMappingURL=chunk-
|
|
41
|
-
//# sourceMappingURL=chunk-
|
|
40
|
+
//# sourceMappingURL=chunk-4SCDDSXY.js.map
|
|
41
|
+
//# sourceMappingURL=chunk-4SCDDSXY.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":[],"mappings":";;;;;;;AAkBO,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,OAAA,GAAU,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,SAAA,EAAW,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC7F,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,KAAY,IAAA,IAAQ,CAAA,IAAA,EAAO,OAAO,CAAA,CAAA;AAAA,MAClC,SAAA,IAAa,WAAA;AAAA,MACb;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,2BACG,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,GAAA,EAAM,GAAG,MAChC,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAYZ,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,0BACG,KAAA,EAAA,EAAI,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACtC,QAAA,EAAA;AAAA,EAAA,CAAA,KAAA,IAAS,OAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,WAAA,oBAAe,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC3D,CAAA;AAAA,IACC,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACtD,CAAA;AAAA,kBAEF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS;AAAA,CAAA,EACxC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Card/Card.tsx"],"names":[],"mappings":";;;;;;;AAkBO,IAAM,IAAA,GAAa,KAAA,CAAA,UAAA;AAAA,EACxB,CAAC,EAAE,OAAA,GAAU,QAAA,EAAU,OAAA,GAAU,IAAA,EAAM,SAAA,EAAW,SAAA,GAAY,EAAA,EAAI,QAAA,EAAU,GAAG,IAAA,IAAQ,GAAA,KAAQ;AAC7F,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,MAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA,KAAY,IAAA,IAAQ,CAAA,IAAA,EAAO,OAAO,CAAA,CAAA;AAAA,MAClC,SAAA,IAAa,WAAA;AAAA,MACb;AAAA,KACF,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACX,IAAA,2BACG,KAAA,EAAA,EAAI,GAAA,EAAU,WAAW,GAAA,EAAM,GAAG,MAChC,QAAA,EACH,CAAA;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAYZ,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,0BACG,KAAA,EAAA,EAAI,SAAA,EAAW,SAAS,SAAS,CAAA,CAAA,EAAK,GAAG,IAAA,EACtC,QAAA,EAAA;AAAA,EAAA,CAAA,KAAA,IAAS,OAAA,qBACT,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EACZ,QAAA,EAAA;AAAA,MAAA,KAAA,oBAAS,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7C,WAAA,oBAAe,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAc,QAAA,EAAA,WAAA,EAAY;AAAA,KAAA,EAC3D,CAAA;AAAA,IACC,OAAA,oBAAW,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EACtD,CAAA;AAAA,kBAEF,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS;AAAA,CAAA,EACxC","file":"chunk-4SCDDSXY.js","sourcesContent":["import \"../../styles/tokens.css\";\nimport \"../../styles/shared.css\";\nimport \"./Card.css\";\nimport * as React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Visual variant. `raised` protrudes; `sunken` recesses; `flat` is subtle. */\n variant?: \"raised\" | \"sunken\" | \"flat\";\n /** Inner padding. */\n padding?: \"none\" | \"sm\" | \"md\" | \"lg\";\n /** When true, the card raises and lifts on hover. */\n hoverable?: boolean;\n children?: React.ReactNode;\n}\n\n/**\n * `Card` — neumorphic surface container. Use to group related content.\n */\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ variant = \"raised\", padding = \"md\", hoverable, className = \"\", children, ...rest }, ref) => {\n const cls = [\n \"card\",\n variant,\n padding !== \"md\" && `pad-${padding}`,\n hoverable && \"hoverable\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <div ref={ref} className={cls} {...rest}>\n {children}\n </div>\n );\n }\n);\nCard.displayName = \"Card\";\n\nexport interface PanelProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n title?: React.ReactNode;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n children?: React.ReactNode;\n}\n\n/**\n * `Panel` — a titled `Card` with optional actions row.\n */\nexport const Panel: React.FC<PanelProps> = ({\n title,\n description,\n actions,\n children,\n className = \"\",\n ...rest\n}) => (\n <div className={`panel ${className}`} {...rest}>\n {(title || actions) && (\n <div className=\"panel-head\">\n <div className=\"panel-titles\">\n {title && <div className=\"panel-title\">{title}</div>}\n {description && <div className=\"panel-desc\">{description}</div>}\n </div>\n {actions && <div className=\"panel-actions\">{actions}</div>}\n </div>\n )}\n <div className=\"panel-body\">{children}</div>\n </div>\n);\n"]}
|