@mieweb/ui 0.8.0 → 0.9.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/README.md +162 -739
- package/agent/mieweb-ui.instructions.md +34 -16
- package/dist/Animated-Cs-naa2g.d.cts +175 -0
- package/dist/Animated-Cs-naa2g.d.ts +175 -0
- package/dist/CsvBlock-D7Z6ZCRP.js +6 -0
- package/dist/{CsvBlock-PUSTBQ5B.js.map → CsvBlock-D7Z6ZCRP.js.map} +1 -1
- package/dist/CsvBlock-QXXZ7ZUM.cjs +15 -0
- package/dist/{CsvBlock-OTFG3PYZ.cjs.map → CsvBlock-QXXZ7ZUM.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-AADG7MVB.cjs +15 -0
- package/dist/{HtmlPreviewBlock-QHLSIMWJ.cjs.map → HtmlPreviewBlock-AADG7MVB.cjs.map} +1 -1
- package/dist/HtmlPreviewBlock-F5VDM2EN.js +6 -0
- package/dist/{HtmlPreviewBlock-YF2YVKKX.js.map → HtmlPreviewBlock-F5VDM2EN.js.map} +1 -1
- package/dist/MermaidBlock-6PLITRBZ.js +6 -0
- package/dist/{MermaidBlock-H3TWNC4D.js.map → MermaidBlock-6PLITRBZ.js.map} +1 -1
- package/dist/MermaidBlock-TQ2O5CLV.cjs +15 -0
- package/dist/{MermaidBlock-ZLLBO3VY.cjs.map → MermaidBlock-TQ2O5CLV.cjs.map} +1 -1
- package/dist/SurveyBlock-OYL3VNU5.cjs +15 -0
- package/dist/{SurveyBlock-M2ZRTGVJ.cjs.map → SurveyBlock-OYL3VNU5.cjs.map} +1 -1
- package/dist/SurveyBlock-W5PSQ62F.js +6 -0
- package/dist/{SurveyBlock-JLHS3YQD.js.map → SurveyBlock-W5PSQ62F.js.map} +1 -1
- package/dist/ag-grid.cjs +5 -5
- package/dist/ag-grid.js +1 -1
- package/dist/brands/index.cjs +7 -7
- package/dist/brands/index.js +2 -2
- package/dist/{chunk-RZJXCI53.js → chunk-22CYDCXA.js} +3 -3
- package/dist/{chunk-RZJXCI53.js.map → chunk-22CYDCXA.js.map} +1 -1
- package/dist/{chunk-OTQ72WX3.js → chunk-2BPIVWAK.js} +3 -3
- package/dist/{chunk-OTQ72WX3.js.map → chunk-2BPIVWAK.js.map} +1 -1
- package/dist/{chunk-6EWJGRC3.js → chunk-3JWAABYI.js} +6 -6
- package/dist/chunk-3JWAABYI.js.map +1 -0
- package/dist/{chunk-5JZIDILK.cjs → chunk-3LHICE4I.cjs} +6 -6
- package/dist/chunk-3LHICE4I.cjs.map +1 -0
- package/dist/{chunk-JHZW3Y62.js → chunk-3RB35GYK.js} +5 -5
- package/dist/chunk-3RB35GYK.js.map +1 -0
- package/dist/{chunk-BOW7ZGI2.cjs → chunk-4SM3I7WE.cjs} +170 -10
- package/dist/chunk-4SM3I7WE.cjs.map +1 -0
- package/dist/{chunk-26DPQUSB.cjs → chunk-5BVFVXHN.cjs} +224 -157
- package/dist/chunk-5BVFVXHN.cjs.map +1 -0
- package/dist/{chunk-QHTDWIED.js → chunk-5H7SAEQO.js} +5 -5
- package/dist/{chunk-QHTDWIED.js.map → chunk-5H7SAEQO.js.map} +1 -1
- package/dist/{chunk-EMMYFHOT.js → chunk-5WOB4UBD.js} +3 -3
- package/dist/{chunk-EMMYFHOT.js.map → chunk-5WOB4UBD.js.map} +1 -1
- package/dist/{chunk-4CUFXCC5.cjs → chunk-5Z6UPVGC.cjs} +6 -6
- package/dist/{chunk-4CUFXCC5.cjs.map → chunk-5Z6UPVGC.cjs.map} +1 -1
- package/dist/{chunk-YIXTGWT4.cjs → chunk-6QKMMKRY.cjs} +5 -5
- package/dist/{chunk-YIXTGWT4.cjs.map → chunk-6QKMMKRY.cjs.map} +1 -1
- package/dist/{chunk-F57VRLKP.js → chunk-6SAYPXHX.js} +4 -4
- package/dist/{chunk-F57VRLKP.js.map → chunk-6SAYPXHX.js.map} +1 -1
- package/dist/{chunk-SK7H3Z67.cjs → chunk-6XDPJWSC.cjs} +99 -83
- package/dist/chunk-6XDPJWSC.cjs.map +1 -0
- package/dist/{chunk-4AE2L6AO.cjs → chunk-7FTBPLA6.cjs} +8 -8
- package/dist/chunk-7FTBPLA6.cjs.map +1 -0
- package/dist/{chunk-KVE7PQ5P.cjs → chunk-7KN6J7XV.cjs} +20 -20
- package/dist/{chunk-KVE7PQ5P.cjs.map → chunk-7KN6J7XV.cjs.map} +1 -1
- package/dist/{chunk-K4S4FAYX.cjs → chunk-AHINB2TP.cjs} +11 -11
- package/dist/{chunk-K4S4FAYX.cjs.map → chunk-AHINB2TP.cjs.map} +1 -1
- package/dist/{chunk-MYFZYUPR.cjs → chunk-AOHJILLU.cjs} +38 -3
- package/dist/chunk-AOHJILLU.cjs.map +1 -0
- package/dist/chunk-BKSPDTX4.js +3 -0
- package/dist/{chunk-3PXOIAF6.js.map → chunk-BKSPDTX4.js.map} +1 -1
- package/dist/chunk-BN75TLUN.cjs +163 -0
- package/dist/chunk-BN75TLUN.cjs.map +1 -0
- package/dist/{chunk-WWJIW2IH.cjs → chunk-BVMABVC4.cjs} +3 -3
- package/dist/{chunk-WWJIW2IH.cjs.map → chunk-BVMABVC4.cjs.map} +1 -1
- package/dist/{chunk-H7QSGFMZ.cjs → chunk-BZAGP5W6.cjs} +17 -10
- package/dist/chunk-BZAGP5W6.cjs.map +1 -0
- package/dist/{chunk-RS5VA6QU.cjs → chunk-C3DUS2VE.cjs} +3 -3
- package/dist/{chunk-RS5VA6QU.cjs.map → chunk-C3DUS2VE.cjs.map} +1 -1
- package/dist/{chunk-NLBT5O2X.js → chunk-CK3KLRNF.js} +3 -3
- package/dist/{chunk-NLBT5O2X.js.map → chunk-CK3KLRNF.js.map} +1 -1
- package/dist/{chunk-L6D4CKLV.cjs → chunk-CXDMZT45.cjs} +135 -4
- package/dist/chunk-CXDMZT45.cjs.map +1 -0
- package/dist/{chunk-TXRQQMG5.js → chunk-CYMZ2QS5.js} +2 -2
- package/dist/{chunk-TXRQQMG5.js.map → chunk-CYMZ2QS5.js.map} +1 -1
- package/dist/{chunk-DX64KLSN.js → chunk-D25WH7MH.js} +7 -7
- package/dist/{chunk-DX64KLSN.js.map → chunk-D25WH7MH.js.map} +1 -1
- package/dist/{chunk-XBKOZRDO.js → chunk-DFYMIRMW.js} +4 -4
- package/dist/{chunk-XBKOZRDO.js.map → chunk-DFYMIRMW.js.map} +1 -1
- package/dist/{chunk-AESFOMSH.js → chunk-DGRXAIWK.js} +135 -4
- package/dist/chunk-DGRXAIWK.js.map +1 -0
- package/dist/{chunk-UZ5NGGMI.js → chunk-EG7XFZ3W.js} +4 -4
- package/dist/{chunk-UZ5NGGMI.js.map → chunk-EG7XFZ3W.js.map} +1 -1
- package/dist/{chunk-RYQ3S3KO.cjs → chunk-FQBTGS3E.cjs} +23 -20
- package/dist/chunk-FQBTGS3E.cjs.map +1 -0
- package/dist/{chunk-LQHI44OZ.cjs → chunk-FUFBRKOG.cjs} +59 -59
- package/dist/{chunk-LQHI44OZ.cjs.map → chunk-FUFBRKOG.cjs.map} +1 -1
- package/dist/{chunk-DG7KE4YJ.cjs → chunk-FYAKUU2A.cjs} +38 -21
- package/dist/chunk-FYAKUU2A.cjs.map +1 -0
- package/dist/{chunk-7L7OPISJ.cjs → chunk-H4AVMUOC.cjs} +12 -6
- package/dist/chunk-H4AVMUOC.cjs.map +1 -0
- package/dist/{chunk-I2ECTLON.cjs → chunk-HXSA6QC5.cjs} +3 -3
- package/dist/{chunk-I2ECTLON.cjs.map → chunk-HXSA6QC5.cjs.map} +1 -1
- package/dist/{chunk-DCBMTFLE.js → chunk-HZ4MBUC3.js} +3 -3
- package/dist/{chunk-DCBMTFLE.js.map → chunk-HZ4MBUC3.js.map} +1 -1
- package/dist/{chunk-X5ZPYYMS.js → chunk-I3DQXUSC.js} +3 -3
- package/dist/{chunk-X5ZPYYMS.js.map → chunk-I3DQXUSC.js.map} +1 -1
- package/dist/{chunk-FN6VHMLM.cjs → chunk-IB54SKWB.cjs} +8 -8
- package/dist/{chunk-FN6VHMLM.cjs.map → chunk-IB54SKWB.cjs.map} +1 -1
- package/dist/{chunk-JP5SGIXA.cjs → chunk-IFDC4TXM.cjs} +4 -4
- package/dist/{chunk-JP5SGIXA.cjs.map → chunk-IFDC4TXM.cjs.map} +1 -1
- package/dist/{chunk-RDGRKYQ5.cjs → chunk-IINZWUGK.cjs} +58 -6
- package/dist/chunk-IINZWUGK.cjs.map +1 -0
- package/dist/{chunk-U3JU6BI5.cjs → chunk-JEIW7BSV.cjs} +3 -3
- package/dist/{chunk-U3JU6BI5.cjs.map → chunk-JEIW7BSV.cjs.map} +1 -1
- package/dist/{chunk-D2GID3YK.js → chunk-KREUYVMZ.js} +58 -6
- package/dist/chunk-KREUYVMZ.js.map +1 -0
- package/dist/{chunk-Y6YSJPVC.js → chunk-KRU6IGV7.js} +11 -3
- package/dist/chunk-KRU6IGV7.js.map +1 -0
- package/dist/{chunk-LZU7YBXG.js → chunk-KU3XRHWA.js} +169 -10
- package/dist/chunk-KU3XRHWA.js.map +1 -0
- package/dist/{chunk-P2VTQ5AR.cjs → chunk-L52N6BEN.cjs} +39 -23
- package/dist/chunk-L52N6BEN.cjs.map +1 -0
- package/dist/{chunk-XWYKLEKG.js → chunk-L5W7TJQ5.js} +11 -5
- package/dist/chunk-L5W7TJQ5.js.map +1 -0
- package/dist/{chunk-PAM5UUBL.cjs → chunk-L7L5S2HO.cjs} +18 -2
- package/dist/{chunk-PAM5UUBL.cjs.map → chunk-L7L5S2HO.cjs.map} +1 -1
- package/dist/{chunk-SEPYBAML.js → chunk-LAEIVOIY.js} +38 -21
- package/dist/chunk-LAEIVOIY.js.map +1 -0
- package/dist/{chunk-Z5KFXHDP.cjs → chunk-MM7QKUE3.cjs} +5 -5
- package/dist/{chunk-Z5KFXHDP.cjs.map → chunk-MM7QKUE3.cjs.map} +1 -1
- package/dist/{chunk-FJ7YPVKV.js → chunk-MUIDWFYJ.js} +3 -3
- package/dist/{chunk-FJ7YPVKV.js.map → chunk-MUIDWFYJ.js.map} +1 -1
- package/dist/{chunk-FDV7EQWH.js → chunk-MXQ7J4BB.js} +21 -18
- package/dist/chunk-MXQ7J4BB.js.map +1 -0
- package/dist/{chunk-YMHOF6WA.cjs → chunk-MYAU2ZUC.cjs} +3 -3
- package/dist/{chunk-YMHOF6WA.cjs.map → chunk-MYAU2ZUC.cjs.map} +1 -1
- package/dist/{chunk-5J5PEUUA.js → chunk-NHN6A3ZO.js} +6 -6
- package/dist/{chunk-5J5PEUUA.js.map → chunk-NHN6A3ZO.js.map} +1 -1
- package/dist/{chunk-EPQPUFS6.cjs → chunk-NYJIXR4Y.cjs} +6 -6
- package/dist/chunk-NYJIXR4Y.cjs.map +1 -0
- package/dist/{chunk-EKRT7K2K.js → chunk-O6GJ4IYS.js} +222 -157
- package/dist/chunk-O6GJ4IYS.js.map +1 -0
- package/dist/{chunk-WIYQI35R.cjs → chunk-O7XHHTTP.cjs} +8 -8
- package/dist/{chunk-WIYQI35R.cjs.map → chunk-O7XHHTTP.cjs.map} +1 -1
- package/dist/{chunk-IILJGFI5.js → chunk-OAZUDUGX.js} +8 -6
- package/dist/chunk-OAZUDUGX.js.map +1 -0
- package/dist/{chunk-JHGMZX4I.cjs → chunk-OCV33S5Q.cjs} +6 -6
- package/dist/{chunk-JHGMZX4I.cjs.map → chunk-OCV33S5Q.cjs.map} +1 -1
- package/dist/{chunk-IYXCFIMP.js → chunk-ODYQYLO2.js} +33 -17
- package/dist/chunk-ODYQYLO2.js.map +1 -0
- package/dist/{chunk-FPVRQCCL.js → chunk-OHDIJOGG.js} +4 -4
- package/dist/{chunk-FPVRQCCL.js.map → chunk-OHDIJOGG.js.map} +1 -1
- package/dist/{chunk-GQVL2JKQ.cjs → chunk-OHKO5THF.cjs} +3 -3
- package/dist/{chunk-GQVL2JKQ.cjs.map → chunk-OHKO5THF.cjs.map} +1 -1
- package/dist/{chunk-LMBXJZLG.js → chunk-ON4JULCA.js} +3 -3
- package/dist/{chunk-LMBXJZLG.js.map → chunk-ON4JULCA.js.map} +1 -1
- package/dist/{chunk-A5YOIJKL.js → chunk-ONNY7UO4.js} +15 -15
- package/dist/{chunk-A5YOIJKL.js.map → chunk-ONNY7UO4.js.map} +1 -1
- package/dist/{chunk-DWCYEPTT.js → chunk-OSPTA4UR.js} +4 -4
- package/dist/{chunk-DWCYEPTT.js.map → chunk-OSPTA4UR.js.map} +1 -1
- package/dist/{chunk-FDUA6OGN.js → chunk-PFKRHNYV.js} +8 -8
- package/dist/chunk-PFKRHNYV.js.map +1 -0
- package/dist/{chunk-XMECP2MD.js → chunk-PHK4XBO5.js} +4 -4
- package/dist/{chunk-XMECP2MD.js.map → chunk-PHK4XBO5.js.map} +1 -1
- package/dist/{chunk-ZZJ4ZVYR.cjs → chunk-PJ6CC53R.cjs} +3 -3
- package/dist/{chunk-ZZJ4ZVYR.cjs.map → chunk-PJ6CC53R.cjs.map} +1 -1
- package/dist/{chunk-N3Y43KOB.js → chunk-PYHFVYVZ.js} +12 -5
- package/dist/chunk-PYHFVYVZ.js.map +1 -0
- package/dist/{chunk-XMCIXHGH.js → chunk-Q7G56ZIO.js} +39 -23
- package/dist/chunk-Q7G56ZIO.js.map +1 -0
- package/dist/{chunk-4PIW3Y5M.js → chunk-QAKASRE6.js} +34 -26
- package/dist/chunk-QAKASRE6.js.map +1 -0
- package/dist/{chunk-QGZC43L7.js → chunk-QAQOCS2J.js} +5 -5
- package/dist/{chunk-QGZC43L7.js.map → chunk-QAQOCS2J.js.map} +1 -1
- package/dist/{chunk-YVIH26FG.cjs → chunk-QKAYRHWP.cjs} +12 -12
- package/dist/{chunk-YVIH26FG.cjs.map → chunk-QKAYRHWP.cjs.map} +1 -1
- package/dist/{chunk-P3JEMF6E.cjs → chunk-RSCA5AZW.cjs} +4 -4
- package/dist/{chunk-P3JEMF6E.cjs.map → chunk-RSCA5AZW.cjs.map} +1 -1
- package/dist/{chunk-5Y5FSR4N.js → chunk-SCXELRRZ.js} +3 -3
- package/dist/{chunk-5Y5FSR4N.js.map → chunk-SCXELRRZ.js.map} +1 -1
- package/dist/{chunk-JWTCEWQ4.cjs → chunk-SNEQXSC5.cjs} +2 -2
- package/dist/{chunk-JWTCEWQ4.cjs.map → chunk-SNEQXSC5.cjs.map} +1 -1
- package/dist/{chunk-U5TTXN45.cjs → chunk-SRA2L3SQ.cjs} +9 -7
- package/dist/chunk-SRA2L3SQ.cjs.map +1 -0
- package/dist/{chunk-5U6GETAW.js → chunk-TQDZLRIE.js} +3 -3
- package/dist/chunk-TQDZLRIE.js.map +1 -0
- package/dist/{chunk-HK3AMH3Q.cjs → chunk-VROIMIHB.cjs} +11 -3
- package/dist/chunk-VROIMIHB.cjs.map +1 -0
- package/dist/{chunk-3SHLOF4V.cjs → chunk-VTR2KGLY.cjs} +9 -9
- package/dist/{chunk-3SHLOF4V.cjs.map → chunk-VTR2KGLY.cjs.map} +1 -1
- package/dist/{chunk-XO3WLK65.js → chunk-VVDE4CHU.js} +3 -3
- package/dist/{chunk-XO3WLK65.js.map → chunk-VVDE4CHU.js.map} +1 -1
- package/dist/{chunk-XS35KPBZ.cjs → chunk-WIAQQNFU.cjs} +4 -4
- package/dist/{chunk-XS35KPBZ.cjs.map → chunk-WIAQQNFU.cjs.map} +1 -1
- package/dist/{chunk-BOOJDRJO.js → chunk-WSNMQQ4P.js} +38 -3
- package/dist/chunk-WSNMQQ4P.js.map +1 -0
- package/dist/chunk-WYMO3IIK.js +136 -0
- package/dist/chunk-WYMO3IIK.js.map +1 -0
- package/dist/{chunk-SPWVKDGC.cjs → chunk-X5QRRMGB.cjs} +35 -27
- package/dist/chunk-X5QRRMGB.cjs.map +1 -0
- package/dist/{chunk-SH6B4MG5.js → chunk-XBXDUAIM.js} +4 -4
- package/dist/{chunk-SH6B4MG5.js.map → chunk-XBXDUAIM.js.map} +1 -1
- package/dist/{chunk-56QJHQ5C.cjs → chunk-XEEVDZDK.cjs} +5 -5
- package/dist/{chunk-56QJHQ5C.cjs.map → chunk-XEEVDZDK.cjs.map} +1 -1
- package/dist/{chunk-GXODR6V4.js → chunk-XOIIUO6O.js} +3 -3
- package/dist/{chunk-GXODR6V4.js.map → chunk-XOIIUO6O.js.map} +1 -1
- package/dist/{chunk-ELYGV32O.cjs → chunk-XTHMC76F.cjs} +5 -5
- package/dist/{chunk-ELYGV32O.cjs.map → chunk-XTHMC76F.cjs.map} +1 -1
- package/dist/{chunk-FF235PKY.cjs → chunk-XWZEECEX.cjs} +3 -3
- package/dist/chunk-XWZEECEX.cjs.map +1 -0
- package/dist/{chunk-TVLZZI5Q.cjs → chunk-YJP6DUFO.cjs} +9 -9
- package/dist/{chunk-TVLZZI5Q.cjs.map → chunk-YJP6DUFO.cjs.map} +1 -1
- package/dist/{chunk-EHQ77LL5.js → chunk-ZB54MTMQ.js} +3 -3
- package/dist/{chunk-EHQ77LL5.js.map → chunk-ZB54MTMQ.js.map} +1 -1
- package/dist/components/Accordion/index.cjs +2 -2
- package/dist/components/Accordion/index.js +1 -1
- package/dist/components/Alert/index.cjs +5 -5
- package/dist/components/Alert/index.d.cts +1 -1
- package/dist/components/Alert/index.d.ts +1 -1
- package/dist/components/Alert/index.js +1 -1
- package/dist/components/AlertDialog/index.cjs +6 -5
- package/dist/components/AlertDialog/index.js +5 -4
- package/dist/components/AudioPlayer/index.cjs +6 -6
- package/dist/components/AudioPlayer/index.js +1 -1
- package/dist/components/Autocomplete/index.cjs +4 -4
- package/dist/components/Autocomplete/index.js +3 -3
- package/dist/components/Avatar/index.cjs +5 -5
- package/dist/components/Avatar/index.js +1 -1
- package/dist/components/Badge/index.d.cts +1 -1
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/Breadcrumb/index.cjs +3 -3
- package/dist/components/Breadcrumb/index.js +1 -1
- package/dist/components/Button/index.cjs +3 -3
- package/dist/components/Button/index.js +1 -1
- package/dist/components/Card/index.d.cts +2 -2
- package/dist/components/Card/index.d.ts +2 -2
- package/dist/components/CountryCodeDropdown/index.cjs +6 -6
- package/dist/components/CountryCodeDropdown/index.d.cts +11 -1
- package/dist/components/CountryCodeDropdown/index.d.ts +11 -1
- package/dist/components/CountryCodeDropdown/index.js +3 -3
- package/dist/components/CustomizableDashboard/index.cjs +11 -11
- package/dist/components/CustomizableDashboard/index.js +4 -4
- package/dist/components/DateInput/index.cjs +4 -4
- package/dist/components/DateInput/index.js +3 -3
- package/dist/components/Dropdown/index.cjs +13 -9
- package/dist/components/Dropdown/index.d.cts +38 -2
- package/dist/components/Dropdown/index.d.ts +38 -2
- package/dist/components/Dropdown/index.js +3 -3
- package/dist/components/FloatingWindow/index.cjs +4 -4
- package/dist/components/FloatingWindow/index.js +2 -2
- package/dist/components/GlossaryTooltip/index.cjs +4 -4
- package/dist/components/GlossaryTooltip/index.js +3 -3
- package/dist/components/KeyboardShortcutsOverlay/index.cjs +6 -5
- package/dist/components/KeyboardShortcutsOverlay/index.js +4 -3
- package/dist/components/Markdown/index.cjs +19 -19
- package/dist/components/Markdown/index.js +7 -7
- package/dist/components/MediaEditor/index.cjs +15 -14
- package/dist/components/MediaEditor/index.js +10 -9
- package/dist/components/MediaPlayer/index.cjs +6 -6
- package/dist/components/MediaPlayer/index.js +3 -3
- package/dist/components/Modal/index.cjs +11 -10
- package/dist/components/Modal/index.d.cts +1 -1
- package/dist/components/Modal/index.d.ts +1 -1
- package/dist/components/Modal/index.js +3 -2
- package/dist/components/Pagination/index.cjs +4 -4
- package/dist/components/Pagination/index.d.cts +1 -1
- package/dist/components/Pagination/index.d.ts +1 -1
- package/dist/components/Pagination/index.js +1 -1
- package/dist/components/PhoneInput/index.cjs +4 -4
- package/dist/components/PhoneInput/index.js +2 -2
- package/dist/components/Progress/index.d.cts +1 -1
- package/dist/components/Progress/index.d.ts +1 -1
- package/dist/components/QuickAction/index.cjs +6 -6
- package/dist/components/QuickAction/index.js +1 -1
- package/dist/components/RecordButton/index.d.cts +1 -1
- package/dist/components/RecordButton/index.d.ts +1 -1
- package/dist/components/RichTextEditor/index.cjs +9 -9
- package/dist/components/RichTextEditor/index.js +6 -6
- package/dist/components/SectionSpyNav/index.cjs +4 -4
- package/dist/components/SectionSpyNav/index.js +3 -3
- package/dist/components/Select/index.cjs +5 -5
- package/dist/components/Select/index.js +3 -3
- package/dist/components/Sheet/index.cjs +11 -11
- package/dist/components/Sheet/index.js +2 -2
- package/dist/components/Slider/index.cjs +5 -5
- package/dist/components/Slider/index.d.cts +2 -2
- package/dist/components/Slider/index.d.ts +2 -2
- package/dist/components/Slider/index.js +1 -1
- package/dist/components/SourceTip/index.cjs +4 -4
- package/dist/components/SourceTip/index.js +3 -3
- package/dist/components/SuperChat/index.cjs +264 -106
- package/dist/components/SuperChat/index.cjs.map +1 -1
- package/dist/components/SuperChat/index.d.cts +13 -5
- package/dist/components/SuperChat/index.d.ts +13 -5
- package/dist/components/SuperChat/index.js +255 -97
- package/dist/components/SuperChat/index.js.map +1 -1
- package/dist/components/SuperChat/plugins/index.cjs +7 -7
- package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
- package/dist/components/SuperChat/plugins/index.d.cts +2 -2
- package/dist/components/SuperChat/plugins/index.d.ts +2 -2
- package/dist/components/SuperChat/plugins/index.js +6 -6
- package/dist/components/SuperChat/plugins/index.js.map +1 -1
- package/dist/components/Text/index.d.cts +1 -1
- package/dist/components/Text/index.d.ts +1 -1
- package/dist/components/ThemeProvider/index.cjs +9 -9
- package/dist/components/ThemeProvider/index.d.cts +1 -1
- package/dist/components/ThemeProvider/index.d.ts +1 -1
- package/dist/components/ThemeProvider/index.js +3 -3
- package/dist/components/Toggle/index.d.cts +1 -1
- package/dist/components/Toggle/index.d.ts +1 -1
- package/dist/components/Tooltip/index.cjs +3 -3
- package/dist/components/Tooltip/index.js +2 -2
- package/dist/components/TranscriptView/index.cjs +3 -3
- package/dist/components/TranscriptView/index.js +1 -1
- package/dist/datavis.cjs +2 -2
- package/dist/datavis.js +1 -1
- package/dist/esheet.cjs +15 -14
- package/dist/esheet.cjs.map +1 -1
- package/dist/esheet.js +12 -11
- package/dist/esheet.js.map +1 -1
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.d.cts +1 -1
- package/dist/hooks/index.d.ts +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/index.cjs +2399 -1640
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +278 -43
- package/dist/index.d.ts +278 -43
- package/dist/index.js +1296 -574
- package/dist/index.js.map +1 -1
- package/dist/motion.cjs +87 -0
- package/dist/motion.cjs.map +1 -0
- package/dist/motion.d.cts +52 -0
- package/dist/motion.d.ts +52 -0
- package/dist/motion.js +50 -0
- package/dist/motion.js.map +1 -0
- package/dist/styles/init.css +25 -0
- package/dist/styles.css +1 -1
- package/dist/tailwind-preset.cjs +4 -4
- package/dist/tailwind-preset.js +1 -1
- package/dist/{types-BoTeTPdH.d.ts → types-9vK_YdEb.d.ts} +12 -1
- package/dist/{types-DyIB9HYT.d.cts → types-DZDroUW8.d.cts} +12 -1
- package/dist/{useAnchoredPosition-C7PNglzD.d.ts → useAnchoredPosition-CKwLSQW8.d.cts} +10 -3
- package/dist/{useAnchoredPosition-C7PNglzD.d.cts → useAnchoredPosition-CKwLSQW8.d.ts} +10 -3
- package/package.json +21 -2
- package/dist/CsvBlock-OTFG3PYZ.cjs +0 -15
- package/dist/CsvBlock-PUSTBQ5B.js +0 -6
- package/dist/HtmlPreviewBlock-QHLSIMWJ.cjs +0 -15
- package/dist/HtmlPreviewBlock-YF2YVKKX.js +0 -6
- package/dist/MermaidBlock-H3TWNC4D.js +0 -6
- package/dist/MermaidBlock-ZLLBO3VY.cjs +0 -15
- package/dist/SurveyBlock-JLHS3YQD.js +0 -6
- package/dist/SurveyBlock-M2ZRTGVJ.cjs +0 -15
- package/dist/chunk-26DPQUSB.cjs.map +0 -1
- package/dist/chunk-3PXOIAF6.js +0 -3
- package/dist/chunk-4AE2L6AO.cjs.map +0 -1
- package/dist/chunk-4PIW3Y5M.js.map +0 -1
- package/dist/chunk-5JZIDILK.cjs.map +0 -1
- package/dist/chunk-5U6GETAW.js.map +0 -1
- package/dist/chunk-6EWJGRC3.js.map +0 -1
- package/dist/chunk-7L7OPISJ.cjs.map +0 -1
- package/dist/chunk-AESFOMSH.js.map +0 -1
- package/dist/chunk-BOOJDRJO.js.map +0 -1
- package/dist/chunk-BOW7ZGI2.cjs.map +0 -1
- package/dist/chunk-D2GID3YK.js.map +0 -1
- package/dist/chunk-DG7KE4YJ.cjs.map +0 -1
- package/dist/chunk-EKRT7K2K.js.map +0 -1
- package/dist/chunk-EPQPUFS6.cjs.map +0 -1
- package/dist/chunk-FDUA6OGN.js.map +0 -1
- package/dist/chunk-FDV7EQWH.js.map +0 -1
- package/dist/chunk-FF235PKY.cjs.map +0 -1
- package/dist/chunk-H7QSGFMZ.cjs.map +0 -1
- package/dist/chunk-HK3AMH3Q.cjs.map +0 -1
- package/dist/chunk-IILJGFI5.js.map +0 -1
- package/dist/chunk-IYXCFIMP.js.map +0 -1
- package/dist/chunk-JHZW3Y62.js.map +0 -1
- package/dist/chunk-L6D4CKLV.cjs.map +0 -1
- package/dist/chunk-LZU7YBXG.js.map +0 -1
- package/dist/chunk-MYFZYUPR.cjs.map +0 -1
- package/dist/chunk-N3Y43KOB.js.map +0 -1
- package/dist/chunk-P2VTQ5AR.cjs.map +0 -1
- package/dist/chunk-RDGRKYQ5.cjs.map +0 -1
- package/dist/chunk-RYQ3S3KO.cjs.map +0 -1
- package/dist/chunk-SEPYBAML.js.map +0 -1
- package/dist/chunk-SK7H3Z67.cjs.map +0 -1
- package/dist/chunk-SPWVKDGC.cjs.map +0 -1
- package/dist/chunk-U5TTXN45.cjs.map +0 -1
- package/dist/chunk-XMCIXHGH.js.map +0 -1
- package/dist/chunk-XWYKLEKG.js.map +0 -1
- package/dist/chunk-Y6YSJPVC.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,619 +1,136 @@
|
|
|
1
1
|
# @mieweb/ui
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- 🎨 **Fully Themeable** - Customize colors, fonts, border radius, and more using CSS variables
|
|
8
|
-
- 🏢 **Multi-Brand Support** - Pre-configured themes for BlueHive, Enterprise Health, WebChart, Waggleline, and MIE
|
|
9
|
-
- ♿ **Accessible** - Built with WCAG guidelines in mind, including proper ARIA attributes and keyboard navigation
|
|
10
|
-
- 🌳 **Tree-Shakeable** - Import only the components you need
|
|
11
|
-
- 🌙 **Dark Mode** - Built-in dark mode support with system preference detection
|
|
12
|
-
- 📦 **Dual Format** - ESM and CommonJS support
|
|
13
|
-
- 🎯 **TypeScript** - Full TypeScript support with comprehensive type definitions
|
|
14
|
-
- 📚 **Storybook** - Interactive documentation and component playground
|
|
15
|
-
|
|
16
|
-
## Table of Contents
|
|
17
|
-
|
|
18
|
-
- [Installation](#installation)
|
|
19
|
-
- [Quick Start](#quick-start)
|
|
20
|
-
- [Development](#development)
|
|
21
|
-
- [Date & Time Standard](#date--time-standard)
|
|
22
|
-
- [Storybook](#storybook)
|
|
23
|
-
- [Using in Other Projects](#using-in-other-projects)
|
|
24
|
-
- [Brand System](#brand-system)
|
|
25
|
-
- [Theming](#theming)
|
|
26
|
-
- [Components](#components)
|
|
27
|
-
- [Hooks](#hooks)
|
|
28
|
-
- [Utilities](#utilities)
|
|
29
|
-
- [Releases](#releases)
|
|
30
|
-
- [Contributing](#contributing)
|
|
31
|
-
|
|
32
|
-
## Installation
|
|
3
|
+
**Build applications that feel familiar from the first interaction.**
|
|
33
4
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
pnpm add @mieweb/ui
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### Peer Dependencies
|
|
43
|
-
|
|
44
|
-
This library requires React 18+ and React DOM 18+:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
npm install react react-dom
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
### Optional Add-ons
|
|
51
|
-
|
|
52
|
-
Heavy or specialized dependencies are kept in separate entry points so they don't bloat the core bundle. Install the peer dependencies for the add-ons you need:
|
|
53
|
-
|
|
54
|
-
| Entry point | Install | Import path |
|
|
55
|
-
| ------------------------ | --------------------------------------------- | -------------------- |
|
|
56
|
-
| **AG Grid** (deprecated) | `npm install ag-grid-community ag-grid-react` | `@mieweb/ui/ag-grid` |
|
|
57
|
-
| **DataVis** | `npm install @mieweb/datavis datavis-ace` | `@mieweb/ui/datavis` |
|
|
58
|
-
|
|
59
|
-
> ⚠️ **AGGrid is deprecated.** Use DataVis NITRO (`@mieweb/ui/datavis`) for all
|
|
60
|
-
> tables. The `@mieweb/ui/ag-grid` entry remains available for existing
|
|
61
|
-
> consumers but will be removed in a future major release.
|
|
62
|
-
|
|
63
|
-
### AI Agent Rules
|
|
64
|
-
|
|
65
|
-
Working with AI coding agents (Copilot, Claude Code, Cursor, …)? Install
|
|
66
|
-
@mieweb/ui's agent rules into your repo so agents use library components
|
|
67
|
-
(DataVis NITRO for tables, `Button`/`Badge`/`Modal`/… instead of raw HTML):
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npx @mieweb/ui init-agent
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
This writes `.github/instructions/mieweb-ui.instructions.md` (auto-applied by
|
|
74
|
-
VS Code Copilot) and a marked block in `AGENTS.md` (the cross-tool convention).
|
|
75
|
-
Idempotent — rerun after upgrading to refresh the rules. See [agent/](agent/).
|
|
76
|
-
|
|
77
|
-
## Quick Start
|
|
78
|
-
|
|
79
|
-
### Option 1: With Tailwind CSS (Recommended)
|
|
80
|
-
|
|
81
|
-
If your project uses Tailwind CSS 4, you can use the library's Tailwind preset for the best experience:
|
|
82
|
-
|
|
83
|
-
1. Add the preset to your `tailwind.config.js`:
|
|
84
|
-
|
|
85
|
-
```js
|
|
86
|
-
// tailwind.config.js
|
|
87
|
-
module.exports = {
|
|
88
|
-
presets: [require('@mieweb/ui/tailwind-preset')],
|
|
89
|
-
content: [
|
|
90
|
-
// ... your content
|
|
91
|
-
'./node_modules/@mieweb/ui/dist/**/*.js',
|
|
92
|
-
],
|
|
93
|
-
// Override theme values to match your brand
|
|
94
|
-
theme: {
|
|
95
|
-
extend: {
|
|
96
|
-
colors: {
|
|
97
|
-
primary: {
|
|
98
|
-
500: '#your-brand-color',
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
```
|
|
5
|
+
People should not have to relearn how to navigate, fill out a form, or recover
|
|
6
|
+
from an error every time they open another application. Clean, consistent
|
|
7
|
+
interfaces let users carry what they already know from one task to the next.
|
|
8
|
+
Predictable controls and clear feedback reduce hesitation and leave more
|
|
9
|
+
attention for the work that matters.
|
|
105
10
|
|
|
106
|
-
|
|
11
|
+
That consistency should extend beyond appearance. A coherent experience adapts
|
|
12
|
+
from mobile to desktop, remains legible in light and dark mode, accommodates
|
|
13
|
+
different languages and right-to-left layouts, and supports keyboard and
|
|
14
|
+
assistive-technology users. Responsive design, internationalization (i18n), and
|
|
15
|
+
accessibility (a11y) belong in the foundation, not on a finishing checklist.
|
|
107
16
|
|
|
108
|
-
|
|
109
|
-
|
|
17
|
+
`@mieweb/ui` brings that approach to your browser interface through reusable
|
|
18
|
+
controls, navigation, forms, feedback, and data displays. Shared interaction
|
|
19
|
+
patterns provide familiarity; theme and brand tokens give you room to make the
|
|
20
|
+
application your own. Developed at MIE, the library is available for applications
|
|
21
|
+
in any domain under its [license terms](#license), not just MIE products.
|
|
110
22
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
<Button>Submit</Button>
|
|
116
|
-
</Card>
|
|
117
|
-
);
|
|
118
|
-
}
|
|
119
|
-
```
|
|
23
|
+
The components are built with React, but your application does not have to be.
|
|
24
|
+
Use them throughout a React application or embed them in selected areas of
|
|
25
|
+
Bootstrap-based, server-rendered, or other non-React pages. Adopt a component or
|
|
26
|
+
a workflow at a time without rewriting the rest of your interface.
|
|
120
27
|
|
|
121
|
-
|
|
28
|
+
Start with a common foundation and spend more time on what makes your application
|
|
29
|
+
valuable. The components support inclusive design; they do not automatically
|
|
30
|
+
translate your content or guarantee accessibility. Validate their composition,
|
|
31
|
+
language, and behavior with the people and devices your application serves.
|
|
122
32
|
|
|
123
|
-
|
|
33
|
+
**The library is `@mieweb/ui`. Storybook is its documentation and experimentation
|
|
34
|
+
environment**, where you can explore those components without building an app
|
|
35
|
+
first. This introduction is shared by GitHub, npm, and Storybook.
|
|
124
36
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
37
|
+
- [See it in action](#see-it-in-action), no installation needed.
|
|
38
|
+
- [Get started](#get-started), with or without an AI coding agent.
|
|
39
|
+
- [Explore and compose components](#explore-and-compose-components).
|
|
40
|
+
- [Contribute or run locally](#contribute-or-run-locally).
|
|
129
41
|
|
|
130
|
-
##
|
|
42
|
+
## See It In Action
|
|
131
43
|
|
|
132
|
-
|
|
44
|
+
[](https://ui.mieweb.org/?path=/story/dashboards-dashboard-demo--dashboard)
|
|
133
45
|
|
|
134
|
-
|
|
46
|
+
**[Open the interactive dashboard](https://ui.mieweb.org/?path=/story/dashboards-dashboard-demo--dashboard)**
|
|
47
|
+
to see navigation, headers, cards, and data displays working together in an
|
|
48
|
+
application layout. Try the brand and theme switchers to see how the same
|
|
49
|
+
components adapt. No installation required.
|
|
135
50
|
|
|
136
|
-
|
|
137
|
-
git clone --recurse-submodules https://github.com/mieweb/ui.git
|
|
138
|
-
cd ui
|
|
139
|
-
```
|
|
51
|
+
## Get Started
|
|
140
52
|
|
|
141
|
-
|
|
53
|
+
### Install in Your Application
|
|
142
54
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
git submodule update --init --recursive
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
2. **Install dependencies:**
|
|
150
|
-
|
|
151
|
-
```bash
|
|
152
|
-
npm install
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Use one package manager consistently per clone. The commands below use npm.
|
|
156
|
-
|
|
157
|
-
3. **eSheet packages build automatically.** A `prestorybook` hook runs `npm run build:esheet` before Storybook starts, so the `@esheet/*` packages are compiled on first run with no manual step. It's a near-instant no-op on later runs once the artifacts exist.
|
|
158
|
-
|
|
159
|
-
If `packages/esheet` is updated later (submodule update, branch switch, or pull) and you need to force a fresh rebuild, remove the built artifacts and run the build again:
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
rm -f packages/esheet/packages/core/dist/index.d.ts packages/esheet/packages/renderer/src/index.output.css
|
|
163
|
-
npm run build:esheet
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
4. **Start Storybook:**
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
npm run storybook
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
This starts the Storybook development server at [http://localhost:6006](http://localhost:6006) with all components, including eSheet, DataVis NITRO, and YChart.
|
|
173
|
-
|
|
174
|
-
### How the Sub-Packages Are Wired
|
|
175
|
-
|
|
176
|
-
Storybook integrates three sibling MIE projects, each sourced differently:
|
|
177
|
-
|
|
178
|
-
- **DataVis NITRO** — npm package `@mieweb/datavis`. No build step; consumed as a published package (no submodule needed).
|
|
179
|
-
- **eSheet** — git submodule `packages/esheet`. Built automatically by the `prestorybook` hook; rebuilds only when its artifacts are missing.
|
|
180
|
-
- **YChart** — git submodule `packages/ychart`. No build step; the story imports it directly from source via a relative dynamic import, and Storybook's Vite config adds a `virtual:git-info` plugin, a `__YCHART_VERSION__` define, and dependency pre-bundling (`optimizeDeps`).
|
|
181
|
-
|
|
182
|
-
### Library Development (watch mode)
|
|
183
|
-
|
|
184
|
-
To rebuild the library on file changes (for consumers that link this repo locally):
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
npm run dev
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
This watches for source changes and rebuilds automatically. It does **not** start Storybook.
|
|
191
|
-
|
|
192
|
-
### Available Scripts
|
|
193
|
-
|
|
194
|
-
| Script | Description |
|
|
195
|
-
| ------------------------- | ------------------------------------------------------------------------------------------------- |
|
|
196
|
-
| `npm run dev` | Watch & rebuild the library (for local consumers, not Storybook) |
|
|
197
|
-
| `npm run build:esheet` | Build eSheet submodule packages (auto-run by `prestorybook`/`prebuild`; skips when already built) |
|
|
198
|
-
| `npm run build` | Build the library for production |
|
|
199
|
-
| `npm run storybook` | Start Storybook development server |
|
|
200
|
-
| `npm run build-storybook` | Build Storybook for static hosting |
|
|
201
|
-
| `npm run typecheck` | Run TypeScript type checking |
|
|
202
|
-
| `npm run lint` | Run ESLint |
|
|
203
|
-
| `npm run lint:fix` | Run ESLint with auto-fix |
|
|
204
|
-
| `npm run format` | Check code formatting with Prettier |
|
|
205
|
-
| `npm run format:fix` | Fix code formatting with Prettier |
|
|
206
|
-
| `npm run test` | Run tests |
|
|
207
|
-
| `npm run test:watch` | Run tests in watch mode |
|
|
208
|
-
|
|
209
|
-
## Date & Time Standard
|
|
210
|
-
|
|
211
|
-
For UI/UX date and time behavior, this project uses **Luxon** as the preferred library.
|
|
212
|
-
|
|
213
|
-
### Guidelines
|
|
214
|
-
|
|
215
|
-
- Use `DateTime` from `luxon` for all new date/time parsing, formatting, and comparisons.
|
|
216
|
-
- Keep timezone explicit when logic depends on business rules (for example: office hours, “open now”, appointment windows).
|
|
217
|
-
- Use IANA timezone identifiers (for example: `America/New_York`) instead of abbreviations.
|
|
218
|
-
- Prefer storing/transmitting ISO-8601 values and convert for display at the component edge.
|
|
219
|
-
- Avoid adding new date logic with raw `Date` math unless there is a clear performance or compatibility reason.
|
|
220
|
-
|
|
221
|
-
### Examples
|
|
222
|
-
|
|
223
|
-
```ts
|
|
224
|
-
import { DateTime } from 'luxon';
|
|
225
|
-
|
|
226
|
-
const localDisplay = DateTime.fromISO(timestamp).toFormat('LLL d, yyyy h:mm a');
|
|
227
|
-
|
|
228
|
-
const inProviderZone = DateTime.fromISO(timestamp, {
|
|
229
|
-
zone: 'America/New_York',
|
|
230
|
-
});
|
|
231
|
-
|
|
232
|
-
const isOpen =
|
|
233
|
-
DateTime.now().setZone('America/New_York') <
|
|
234
|
-
inProviderZone.plus({ hours: 1 });
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Storybook
|
|
238
|
-
|
|
239
|
-
Storybook provides interactive documentation and a component playground where you can explore all components with different props and themes.
|
|
240
|
-
|
|
241
|
-
### Running Storybook
|
|
242
|
-
|
|
243
|
-
```bash
|
|
244
|
-
npm run storybook
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
This starts the Storybook development server at [http://localhost:6006](http://localhost:6006).
|
|
248
|
-
|
|
249
|
-
### Features in Storybook
|
|
250
|
-
|
|
251
|
-
- **Component Explorer**: Browse all components with live examples
|
|
252
|
-
- **Props Documentation**: See all available props for each component
|
|
253
|
-
- **Theme Switcher**: Toggle between light and dark modes
|
|
254
|
-
- **Brand Switcher**: Preview components with different brand themes (BlueHive, Enterprise Health, WebChart, Waggleline, MIE)
|
|
255
|
-
- **Accessibility Panel**: Check accessibility compliance for each component
|
|
256
|
-
- **Controls**: Interactively modify component props
|
|
257
|
-
|
|
258
|
-
### Building Storybook
|
|
259
|
-
|
|
260
|
-
To build a static version of Storybook for deployment:
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
npm run build-storybook
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
The output will be in the `storybook-static` directory.
|
|
267
|
-
|
|
268
|
-
### Configuring the Ozwell API (AI stories)
|
|
269
|
-
|
|
270
|
-
The AI stories (AIChat, Hands-Free Chat, and the DataVis NITRO **Ozwell Assistant**
|
|
271
|
-
story) call the real Ozwell backend when a key is configured and fall back to a
|
|
272
|
-
canned reply when it isn't. Set the key and endpoint from the browser console:
|
|
273
|
-
|
|
274
|
-
```js
|
|
275
|
-
// Recommended — survives reloads and is shared with the story iframe:
|
|
276
|
-
localStorage.setItem(
|
|
277
|
-
'ozwellConfig',
|
|
278
|
-
JSON.stringify({ apiKey: 'YOUR_KEY', baseURL: 'https://your-ozwell-host' })
|
|
279
|
-
);
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
`baseURL` is optional (defaults to `https://api.ozwell.ai`); other optional keys are
|
|
283
|
-
`model`, `system`, and `temperature`. Never commit a key — see
|
|
284
|
-
[src/components/AI/OZWELL-BACKEND.md](src/components/AI/OZWELL-BACKEND.md) for full
|
|
285
|
-
details, including why `window.__ozwell` is unreliable inside Storybook iframes and
|
|
286
|
-
how to proxy the key for public deploys.
|
|
287
|
-
|
|
288
|
-
## Using in Other Projects
|
|
289
|
-
|
|
290
|
-
### Method 1: NPM Package (Recommended)
|
|
291
|
-
|
|
292
|
-
Once published, install the package in your project:
|
|
55
|
+
The components require React 18+ and React DOM 18+ to render, including when
|
|
56
|
+
embedded in a non-React page. If your project already has those dependencies:
|
|
293
57
|
|
|
294
58
|
```bash
|
|
295
59
|
npm install @mieweb/ui
|
|
296
60
|
```
|
|
297
61
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
import { Button, Card, Input, ThemeProvider } from '@mieweb/ui';
|
|
302
|
-
import '@mieweb/ui/styles.css'; // or use a brand CSS file
|
|
303
|
-
|
|
304
|
-
function App() {
|
|
305
|
-
return (
|
|
306
|
-
<ThemeProvider>
|
|
307
|
-
<Card>
|
|
308
|
-
<Card.Header>
|
|
309
|
-
<Card.Title>Welcome</Card.Title>
|
|
310
|
-
</Card.Header>
|
|
311
|
-
<Card.Content>
|
|
312
|
-
<Input label="Email" type="email" placeholder="you@example.com" />
|
|
313
|
-
<Button className="mt-4">Submit</Button>
|
|
314
|
-
</Card.Content>
|
|
315
|
-
</Card>
|
|
316
|
-
</ThemeProvider>
|
|
317
|
-
);
|
|
318
|
-
}
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
### Method 2: Local Development (npm link)
|
|
322
|
-
|
|
323
|
-
For local development across projects:
|
|
62
|
+
Use `pnpm add @mieweb/ui` or `yarn add @mieweb/ui` if that is your project's
|
|
63
|
+
package manager. You do not need to clone this repository or run Storybook to use
|
|
64
|
+
the library.
|
|
324
65
|
|
|
325
|
-
|
|
66
|
+
For a project without React, install the rendering dependencies:
|
|
326
67
|
|
|
327
68
|
```bash
|
|
328
|
-
|
|
329
|
-
npm run build
|
|
330
|
-
npm link
|
|
69
|
+
npm install react react-dom
|
|
331
70
|
```
|
|
332
71
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
cd /path/to/your-project
|
|
337
|
-
npm link @mieweb/ui
|
|
338
|
-
```
|
|
72
|
+
Using an AI coding agent? [Set up its instructions](#set-up-your-ai-coding-agent)
|
|
73
|
+
and [read the component-selection and integration rules](https://github.com/mieweb/ui/blob/main/agent/mieweb-ui.instructions.md)
|
|
74
|
+
before asking it to add components to your application.
|
|
339
75
|
|
|
340
|
-
|
|
76
|
+
Mount components into a dedicated DOM element with React DOM's `createRoot`, leaving the rest of
|
|
77
|
+
the page under its existing framework's control. Unmount the React root when the
|
|
78
|
+
host removes that area. This requires a JavaScript build that supports React;
|
|
79
|
+
the components are not framework-free HTML widgets.
|
|
341
80
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
```
|
|
81
|
+
When embedding alongside Bootstrap or other stylesheets, check CSS resets,
|
|
82
|
+
global selectors, and theme styles for conflicts. Mounting into a separate DOM
|
|
83
|
+
element does not isolate CSS.
|
|
346
84
|
|
|
347
|
-
###
|
|
85
|
+
### Set Up Your AI Coding Agent
|
|
348
86
|
|
|
349
|
-
|
|
87
|
+
From your application's repository root, run:
|
|
350
88
|
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
{
|
|
354
|
-
"dependencies": {
|
|
355
|
-
"@mieweb/ui": "file:../mieweb-ui"
|
|
356
|
-
}
|
|
357
|
-
}
|
|
89
|
+
```bash
|
|
90
|
+
npx @mieweb/ui init-agent
|
|
358
91
|
```
|
|
359
92
|
|
|
360
|
-
|
|
93
|
+
This installs component-selection, composition, theming, and accessibility rules
|
|
94
|
+
so your agent can start with existing library components. It writes
|
|
95
|
+
`mieweb-ui.instructions.md` in `.github/instructions/` for VS Code Copilot and
|
|
96
|
+
updates a managed block in `AGENTS.md` for agents that read that file. Rerun after upgrading
|
|
97
|
+
`@mieweb/ui` to refresh the rules.
|
|
361
98
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
```tsx
|
|
367
|
-
// app/layout.tsx or pages/_app.tsx
|
|
368
|
-
import '@mieweb/ui/brands/bluehive.css';
|
|
369
|
-
import { ThemeProvider } from '@mieweb/ui';
|
|
99
|
+
Read the [agent setup guide and rules](https://github.com/mieweb/ui/tree/main/agent).
|
|
100
|
+
These are instructions for coding agents, not an automatic PR reviewer or merge
|
|
101
|
+
gate. Agent-assisted and manual development use the same library and setup below.
|
|
370
102
|
|
|
371
|
-
|
|
372
|
-
return (
|
|
373
|
-
<html lang="en">
|
|
374
|
-
<body>
|
|
375
|
-
<ThemeProvider>{children}</ThemeProvider>
|
|
376
|
-
</body>
|
|
377
|
-
</html>
|
|
378
|
-
);
|
|
379
|
-
}
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
#### Vite
|
|
383
|
-
|
|
384
|
-
```tsx
|
|
385
|
-
// main.tsx
|
|
386
|
-
import React from 'react';
|
|
387
|
-
import ReactDOM from 'react-dom/client';
|
|
388
|
-
import '@mieweb/ui/brands/enterprise-health.css';
|
|
389
|
-
import { ThemeProvider } from '@mieweb/ui';
|
|
390
|
-
import App from './App';
|
|
391
|
-
|
|
392
|
-
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
393
|
-
<React.StrictMode>
|
|
394
|
-
<ThemeProvider>
|
|
395
|
-
<App />
|
|
396
|
-
</ThemeProvider>
|
|
397
|
-
</React.StrictMode>
|
|
398
|
-
);
|
|
399
|
-
```
|
|
103
|
+
### Render Your First Component
|
|
400
104
|
|
|
401
|
-
|
|
105
|
+
Import the precompiled stylesheet once in your application's entry point or root
|
|
106
|
+
layout. Import a brand stylesheet after it when you want that brand's tokens:
|
|
402
107
|
|
|
403
108
|
```tsx
|
|
404
|
-
|
|
405
|
-
import { Meteor } from 'meteor/meteor';
|
|
406
|
-
import React from 'react';
|
|
407
|
-
import { createRoot } from 'react-dom/client';
|
|
109
|
+
import '@mieweb/ui/styles.css';
|
|
408
110
|
import '@mieweb/ui/brands/bluehive.css';
|
|
409
|
-
import { ThemeProvider } from '@mieweb/ui';
|
|
410
|
-
import App from '/imports/ui/App';
|
|
411
|
-
|
|
412
|
-
Meteor.startup(() => {
|
|
413
|
-
const container = document.getElementById('react-target');
|
|
414
|
-
const root = createRoot(container!);
|
|
415
|
-
root.render(
|
|
416
|
-
<ThemeProvider>
|
|
417
|
-
<App />
|
|
418
|
-
</ThemeProvider>
|
|
419
|
-
);
|
|
420
|
-
});
|
|
421
|
-
```
|
|
422
|
-
|
|
423
|
-
## Brand System
|
|
424
|
-
|
|
425
|
-
The library includes pre-configured themes for multiple brands. Each brand has its own design system with unique colors, typography, border radius, and shadows.
|
|
426
|
-
|
|
427
|
-
### Available Brands
|
|
428
|
-
|
|
429
|
-
| Brand | Primary Color | Font | Description |
|
|
430
|
-
| --------------------- | -------------------- | ------ | ------------------------------------------------- |
|
|
431
|
-
| **BlueHive** | `#27AAE1` (Blue) | Nunito | DOT Physical scheduling and healthcare compliance |
|
|
432
|
-
| **Enterprise Health** | `#6E2B68` (Burgundy) | Jost | Employee health and occupational medicine |
|
|
433
|
-
| **WebChart** | `#F5841F` (Orange) | Inter | Future-ready electronic health record system |
|
|
434
|
-
| **Waggleline** | `#17AEED` (Blue) | Inter | Experience visualization and orchestration |
|
|
435
|
-
| **MIE** | `#27AE60` (Green) | Inter | Healthcare software and services |
|
|
436
|
-
|
|
437
|
-
### Using a Brand Theme
|
|
438
|
-
|
|
439
|
-
#### Method 1: Import the brand CSS file
|
|
440
|
-
|
|
441
|
-
```tsx
|
|
442
|
-
// Import the brand's CSS file
|
|
443
|
-
import '@mieweb/ui/brands/enterprise-health.css';
|
|
444
|
-
|
|
445
|
-
import { Button, Card } from '@mieweb/ui';
|
|
446
111
|
```
|
|
447
112
|
|
|
448
|
-
|
|
113
|
+
This CSS path does not require Tailwind in your application. For a first interactive
|
|
114
|
+
example, render a theme switcher inside the provider:
|
|
449
115
|
|
|
450
116
|
```tsx
|
|
451
|
-
import { ThemeProvider } from '@mieweb/ui';
|
|
452
|
-
import { enterpriseHealthBrand } from '@mieweb/ui/brands';
|
|
453
|
-
|
|
454
|
-
function App() {
|
|
455
|
-
return (
|
|
456
|
-
<ThemeProvider brand={enterpriseHealthBrand}>
|
|
457
|
-
<YourApp />
|
|
458
|
-
</ThemeProvider>
|
|
459
|
-
);
|
|
460
|
-
}
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
#### Method 3: Tailwind CSS preset
|
|
464
|
-
|
|
465
|
-
```js
|
|
466
|
-
// tailwind.config.js
|
|
467
|
-
const { enterpriseHealthBrand } = require('@mieweb/ui/brands');
|
|
468
|
-
const { createBrandPreset } = require('@mieweb/ui/brands/types');
|
|
469
|
-
|
|
470
|
-
module.exports = {
|
|
471
|
-
presets: [createBrandPreset(enterpriseHealthBrand)],
|
|
472
|
-
// ...
|
|
473
|
-
};
|
|
474
|
-
```
|
|
475
|
-
|
|
476
|
-
### Brand Design Tokens
|
|
477
|
-
|
|
478
|
-
Each brand defines the following design tokens:
|
|
479
|
-
|
|
480
|
-
#### Enterprise Health
|
|
481
|
-
|
|
482
|
-
Extracted from [enterprisehealth.com](https://enterprisehealth.com):
|
|
483
|
-
|
|
484
|
-
```css
|
|
485
|
-
/* Primary: Burgundy/Purple */
|
|
486
|
-
--mieweb-primary-600: #6e2b68;
|
|
487
|
-
|
|
488
|
-
/* Secondary: Deep Teal Blue (for gradients) */
|
|
489
|
-
--mieweb-secondary: #00497a;
|
|
490
|
-
|
|
491
|
-
/* Accent: Gold/Yellow (logo) */
|
|
492
|
-
--mieweb-accent: #f8b700;
|
|
493
|
-
|
|
494
|
-
/* Brand Gradient */
|
|
495
|
-
--mieweb-gradient: linear-gradient(111.02deg, #00497a, #6e2b68);
|
|
496
|
-
|
|
497
|
-
/* Typography */
|
|
498
|
-
--mieweb-font-sans: 'Jost', ui-sans-serif, system-ui, sans-serif;
|
|
499
|
-
|
|
500
|
-
/* Border Radius (larger, more rounded) */
|
|
501
|
-
--mieweb-radius-sm: 0.375rem; /* 6px - badges */
|
|
502
|
-
--mieweb-radius-md: 0.625rem; /* 10px - buttons */
|
|
503
|
-
--mieweb-radius-lg: 0.75rem; /* 12px - inputs */
|
|
504
|
-
--mieweb-radius-2xl: 1.5rem; /* 24px - cards */
|
|
505
|
-
|
|
506
|
-
/* Shadows (subtle, layered) */
|
|
507
|
-
--mieweb-shadow-card:
|
|
508
|
-
0 16px 32px 0 rgba(34, 35, 38, 0.05), 0 8px 16px 0 rgba(34, 35, 38, 0.05);
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
#### BlueHive
|
|
512
|
-
|
|
513
|
-
```css
|
|
514
|
-
/* Primary: Blue */
|
|
515
|
-
--mieweb-primary-500: #27aae1;
|
|
516
|
-
|
|
517
|
-
/* Typography */
|
|
518
|
-
--mieweb-font-sans: 'Nunito', ui-sans-serif, system-ui, sans-serif;
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
### Creating a Custom Brand
|
|
522
|
-
|
|
523
|
-
You can create your own brand configuration:
|
|
524
|
-
|
|
525
|
-
```ts
|
|
526
|
-
import type { BrandConfig } from '@mieweb/ui/brands/types';
|
|
527
|
-
|
|
528
|
-
export const myBrand: BrandConfig = {
|
|
529
|
-
name: 'my-brand',
|
|
530
|
-
displayName: 'My Brand',
|
|
531
|
-
description: 'Custom brand for my application',
|
|
532
|
-
|
|
533
|
-
colors: {
|
|
534
|
-
primary: {
|
|
535
|
-
50: '#f0f9ff',
|
|
536
|
-
// ... full color scale 50-950
|
|
537
|
-
600: '#0284c7', // Main brand color
|
|
538
|
-
// ...
|
|
539
|
-
},
|
|
540
|
-
light: {
|
|
541
|
-
background: '#ffffff',
|
|
542
|
-
foreground: '#171717',
|
|
543
|
-
// ... semantic colors
|
|
544
|
-
},
|
|
545
|
-
dark: {
|
|
546
|
-
background: '#171717',
|
|
547
|
-
foreground: '#fafafa',
|
|
548
|
-
// ... semantic colors
|
|
549
|
-
},
|
|
550
|
-
},
|
|
551
|
-
|
|
552
|
-
typography: {
|
|
553
|
-
fontFamily: {
|
|
554
|
-
sans: ['Your Font', 'ui-sans-serif', 'system-ui', 'sans-serif'],
|
|
555
|
-
mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'monospace'],
|
|
556
|
-
},
|
|
557
|
-
},
|
|
558
|
-
|
|
559
|
-
borderRadius: {
|
|
560
|
-
none: '0',
|
|
561
|
-
sm: '0.25rem',
|
|
562
|
-
md: '0.5rem',
|
|
563
|
-
lg: '0.75rem',
|
|
564
|
-
xl: '1rem',
|
|
565
|
-
'2xl': '1.5rem',
|
|
566
|
-
full: '9999px',
|
|
567
|
-
},
|
|
568
|
-
|
|
569
|
-
boxShadow: {
|
|
570
|
-
card: '0 1px 3px 0 rgb(0 0 0 / 0.1)',
|
|
571
|
-
dropdown: '0 4px 6px -1px rgb(0 0 0 / 0.1)',
|
|
572
|
-
modal: '0 10px 15px -3px rgb(0 0 0 / 0.1)',
|
|
573
|
-
},
|
|
574
|
-
};
|
|
575
|
-
```
|
|
576
|
-
|
|
577
|
-
## Theming
|
|
578
|
-
|
|
579
|
-
The library uses CSS custom properties for theming. Override these variables to customize the appearance:
|
|
580
|
-
|
|
581
|
-
```css
|
|
582
|
-
:root {
|
|
583
|
-
/* Primary color scale */
|
|
584
|
-
--mieweb-primary-500: #27aae1;
|
|
585
|
-
|
|
586
|
-
/* Semantic colors */
|
|
587
|
-
--mieweb-background: hsl(0 0% 100%);
|
|
588
|
-
--mieweb-foreground: hsl(222.2 84% 4.9%);
|
|
589
|
-
|
|
590
|
-
/* Border radius */
|
|
591
|
-
--mieweb-radius-md: 0.5rem;
|
|
592
|
-
|
|
593
|
-
/* Font */
|
|
594
|
-
--mieweb-font-sans: 'Your Font', sans-serif;
|
|
595
|
-
}
|
|
596
|
-
```
|
|
597
|
-
|
|
598
|
-
### Dark Mode
|
|
599
|
-
|
|
600
|
-
The library supports dark mode via the `.dark` class or `data-theme="dark"` attribute on a parent element:
|
|
601
|
-
|
|
602
|
-
```tsx
|
|
603
|
-
import { ThemeProvider, useThemeContext, Button } from '@mieweb/ui';
|
|
117
|
+
import { Button, ThemeProvider, useThemeContext } from '@mieweb/ui';
|
|
604
118
|
|
|
605
119
|
function ThemeToggle() {
|
|
606
120
|
const { resolvedTheme, setTheme } = useThemeContext();
|
|
121
|
+
|
|
607
122
|
return (
|
|
608
123
|
<Button
|
|
124
|
+
aria-label="Dark mode"
|
|
125
|
+
aria-pressed={resolvedTheme === 'dark'}
|
|
609
126
|
onClick={() => setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')}
|
|
610
127
|
>
|
|
611
|
-
|
|
128
|
+
Dark mode
|
|
612
129
|
</Button>
|
|
613
130
|
);
|
|
614
131
|
}
|
|
615
132
|
|
|
616
|
-
function App() {
|
|
133
|
+
export default function App() {
|
|
617
134
|
return (
|
|
618
135
|
<ThemeProvider>
|
|
619
136
|
<ThemeToggle />
|
|
@@ -622,186 +139,92 @@ function App() {
|
|
|
622
139
|
}
|
|
623
140
|
```
|
|
624
141
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
-
|
|
632
|
-
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
All components are fully typed. Import types as needed:
|
|
703
|
-
|
|
704
|
-
```tsx
|
|
705
|
-
import type { ButtonProps, InputProps, Theme } from '@mieweb/ui';
|
|
706
|
-
```
|
|
707
|
-
|
|
708
|
-
## Releases
|
|
709
|
-
|
|
710
|
-
This package uses automated releases via GitHub Actions. There are two release channels:
|
|
711
|
-
|
|
712
|
-
### Release Channels
|
|
713
|
-
|
|
714
|
-
| Channel | npm Tag | Install Command | Description |
|
|
715
|
-
| -------------- | -------- | ----------------------------- | ------------------------- |
|
|
716
|
-
| **Stable** | `latest` | `npm install @mieweb/ui` | Production-ready releases |
|
|
717
|
-
| **Prerelease** | `next` | `npm install @mieweb/ui@next` | Latest from `main` branch |
|
|
718
|
-
|
|
719
|
-
### Prerelease (Automatic)
|
|
720
|
-
|
|
721
|
-
Every push to the `main` branch automatically publishes a prerelease version to npm:
|
|
722
|
-
|
|
723
|
-
- **Version format:** `x.y.z-dev.{run_number}` (e.g., `0.1.0-dev.45`)
|
|
724
|
-
- **npm tag:** `next`
|
|
725
|
-
- **Install:** `npm install @mieweb/ui@next`
|
|
726
|
-
|
|
727
|
-
This allows consumers to test the latest changes before a stable release.
|
|
728
|
-
|
|
729
|
-
### Stable Release (Manual)
|
|
730
|
-
|
|
731
|
-
To create a stable release:
|
|
732
|
-
|
|
733
|
-
1. Go to the repository on GitHub
|
|
734
|
-
2. Navigate to **Actions** → **Create Stable Release**
|
|
735
|
-
3. Click **Run workflow**
|
|
736
|
-
4. Select the version bump type:
|
|
737
|
-
- `patch` - Bug fixes (0.1.0 → 0.1.1)
|
|
738
|
-
- `minor` - New features (0.1.0 → 0.2.0)
|
|
739
|
-
- `major` - Breaking changes (0.1.0 → 1.0.0)
|
|
740
|
-
5. Click **Run workflow**
|
|
741
|
-
|
|
742
|
-
The workflow will:
|
|
743
|
-
|
|
744
|
-
1. Bump the version in `package.json`
|
|
745
|
-
2. Commit and push the change
|
|
746
|
-
3. Create a git tag (e.g., `v0.2.0`)
|
|
747
|
-
4. Trigger the release workflow which publishes to npm and creates a GitHub Release
|
|
748
|
-
|
|
749
|
-
### Manual Tag Release
|
|
750
|
-
|
|
751
|
-
You can also create a release by pushing a version tag directly:
|
|
752
|
-
|
|
753
|
-
```bash
|
|
754
|
-
# Create and push a tag
|
|
755
|
-
git tag v1.0.0
|
|
756
|
-
git push origin v1.0.0
|
|
757
|
-
```
|
|
758
|
-
|
|
759
|
-
The release workflow will automatically:
|
|
760
|
-
|
|
761
|
-
- Run tests and build
|
|
762
|
-
- Publish to npm with the appropriate tag (`latest` for stable, `next` for prereleases like `v1.0.0-beta.1`)
|
|
763
|
-
- Create a GitHub Release with auto-generated release notes
|
|
764
|
-
|
|
765
|
-
### Version Guidelines
|
|
766
|
-
|
|
767
|
-
We follow [Semantic Versioning](https://semver.org/):
|
|
768
|
-
|
|
769
|
-
- **MAJOR** version for incompatible API changes
|
|
770
|
-
- **MINOR** version for backwards-compatible functionality additions
|
|
771
|
-
- **PATCH** version for backwards-compatible bug fixes
|
|
772
|
-
|
|
773
|
-
## Contributing
|
|
774
|
-
|
|
775
|
-
We welcome contributions! This README and the [Storybook](https://ui.mieweb.org)
|
|
776
|
-
are the **consumer** docs (how to _use_ the library). If you want to _build or
|
|
777
|
-
change_ the library itself, the **provider / maintainer** guide is
|
|
778
|
-
**[CONTRIBUTING.md](CONTRIBUTING.md)** — it covers repo layout, the component
|
|
779
|
-
anatomy and conventions, the autodocs story pattern, exports & tree-shaking,
|
|
780
|
-
build, testing (unit + visual baselines), submodules, brands, and the release
|
|
781
|
-
process.
|
|
782
|
-
|
|
783
|
-
Quick start for contributors:
|
|
784
|
-
|
|
785
|
-
```bash
|
|
786
|
-
git clone --recurse-submodules https://github.com/mieweb/ui.git
|
|
787
|
-
cd ui && pnpm install
|
|
788
|
-
pnpm storybook # http://localhost:6006
|
|
789
|
-
# before opening a PR:
|
|
790
|
-
pnpm typecheck && pnpm lint && pnpm format && pnpm test
|
|
791
|
-
```
|
|
792
|
-
|
|
793
|
-
Non-trivial modules also carry a `MAINTAINERS.md` next to the code with internals,
|
|
794
|
-
invariants, and gotchas for that module — see the table in
|
|
795
|
-
[CONTRIBUTING.md](CONTRIBUTING.md#per-component-maintainer-notes).
|
|
142
|
+
In production, supply translated labels through your application's i18n system.
|
|
143
|
+
In Next.js App Router, put this interactive example in a client component and
|
|
144
|
+
import global styles from the root layout.
|
|
145
|
+
|
|
146
|
+
Already using Tailwind? Follow the
|
|
147
|
+
[Tailwind 4 integration guide](https://github.com/mieweb/ui/blob/main/lessons/tailwind4-integration.md)
|
|
148
|
+
for CSS-first configuration, `@source`, and theme tokens. Tailwind 3 consumers can
|
|
149
|
+
use `@mieweb/ui/tailwind-preset`. Do not apply a Tailwind 3 configuration as a
|
|
150
|
+
Tailwind 4 setup.
|
|
151
|
+
|
|
152
|
+
### Add Specialized Capabilities When Needed
|
|
153
|
+
|
|
154
|
+
Heavy integrations use separate entry points and optional peer dependencies so
|
|
155
|
+
you only install what you need:
|
|
156
|
+
|
|
157
|
+
- **Data grids:** [DataVis NITRO](https://ui.mieweb.org/?path=/docs/grids-datavis-nitro--docs), imported from `@mieweb/ui/datavis`.
|
|
158
|
+
- **Form authoring and rendering:** [eSheet integration](https://github.com/mieweb/ui/blob/main/src/components/ESheet/MAINTAINERS.md), imported from `@mieweb/ui/esheet`.
|
|
159
|
+
- **Rich text and code editing:** [Kerebron editor setup](https://github.com/mieweb/ui/tree/main/src/components/RichEditor), imported from `@mieweb/ui/kerebron`.
|
|
160
|
+
|
|
161
|
+
Check the selected integration's dependencies before importing its entry point.
|
|
162
|
+
AGGrid is deprecated for new work; start with DataVis NITRO for tabular data.
|
|
163
|
+
|
|
164
|
+
## Explore and Compose Components
|
|
165
|
+
|
|
166
|
+
Open [the component explorer](https://ui.mieweb.org/). Storybook is the wrapper
|
|
167
|
+
around the examples: its sidebar selects components, a **story** demonstrates a
|
|
168
|
+
particular configuration, and **Docs** presents guidance and the API. **Controls**
|
|
169
|
+
change example props; theme and brand tools let you inspect different appearances.
|
|
170
|
+
Those tools belong to Storybook, not to the component you install.
|
|
171
|
+
|
|
172
|
+
Start with the user's task, then compare components before choosing an API:
|
|
173
|
+
|
|
174
|
+
- **Browse and work with records:** start with [DataVis NITRO](https://ui.mieweb.org/?path=/docs/grids-datavis-nitro--docs)
|
|
175
|
+
and compare [Table](https://ui.mieweb.org/?path=/docs/grids-table--docs).
|
|
176
|
+
NITRO provides integrated data tooling; Table provides lower-level markup.
|
|
177
|
+
Consider the behavior your application would need to supply and consult the
|
|
178
|
+
selection rules before choosing an exception.
|
|
179
|
+
- **Navigate a long document:** compare [TableOfContents](https://ui.mieweb.org/?path=/docs/navigation-tableofcontents--docs)
|
|
180
|
+
and [ReadingProgressBar](https://ui.mieweb.org/?path=/docs/navigation-readingprogressbar--docs).
|
|
181
|
+
A TOC provides named destinations and navigation. A reading bar is a decorative
|
|
182
|
+
document-scroll cue, not navigation or proof of reading. They can complement
|
|
183
|
+
each other; neither may be needed for short content.
|
|
184
|
+
- **Assemble an application view:** explore the [Dashboard example](https://ui.mieweb.org/?path=/story/dashboards-dashboard-demo--dashboard).
|
|
185
|
+
Inspect how navigation, headers, and content fit together, then adapt the
|
|
186
|
+
composition to your workflow rather than copying the layout indiscriminately.
|
|
187
|
+
|
|
188
|
+
For each choice, ask why it fits, when an alternative would be better, what state
|
|
189
|
+
your application owns, and how it behaves alongside neighboring components.
|
|
190
|
+
Exercise loading, empty, error, keyboard, and narrow-screen states in the actual
|
|
191
|
+
application, not only the isolated story.
|
|
192
|
+
|
|
193
|
+
The catalog is still being improved: not every component has comparison or
|
|
194
|
+
composition guidance yet. Do not treat an isolated example as evidence that no
|
|
195
|
+
related component exists. Use the
|
|
196
|
+
[component policy](https://github.com/mieweb/ui/blob/main/lessons/component-policy.md)
|
|
197
|
+
and flag missing or conflicting guidance in a
|
|
198
|
+
[documentation issue](https://github.com/mieweb/ui/issues/new).
|
|
199
|
+
|
|
200
|
+
### Go Deeper
|
|
201
|
+
|
|
202
|
+
- [Branding](https://ui.mieweb.org/?path=/docs/branding--docs): the brand system and visual tokens.
|
|
203
|
+
- [Adoption guides](https://github.com/mieweb/ui/blob/main/lessons/README.md): integration pitfalls and migration paths for existing applications.
|
|
204
|
+
- [AI-assisted migration plan](https://github.com/mieweb/ui/blob/main/lessons/execution-plan.md): an ordered approach to adopting the library.
|
|
205
|
+
- [Meteor migration](https://github.com/mieweb/ui/blob/main/lessons/migration-meteor-blaze-to-react.md): framework-specific migration guidance.
|
|
206
|
+
|
|
207
|
+
## Contribute or Run Locally
|
|
208
|
+
|
|
209
|
+
To change the library, improve its guidance, or run your own Storybook, follow
|
|
210
|
+
[CONTRIBUTING.md](https://github.com/mieweb/ui/blob/main/CONTRIBUTING.md). It covers
|
|
211
|
+
repository setup, local development, tests, component conventions, and releases.
|
|
212
|
+
Those steps are not required to consume the npm package.
|
|
213
|
+
|
|
214
|
+
Found unclear selection advice or an undocumented relationship? Documentation
|
|
215
|
+
contributions are welcome alongside component fixes.
|
|
216
|
+
[Edit this introduction](https://github.com/mieweb/ui/edit/main/README.md) to
|
|
217
|
+
improve the shared GitHub, npm, and Storybook content. Published copies update
|
|
218
|
+
when the package is released or the documentation site is deployed.
|
|
796
219
|
|
|
797
220
|
## License
|
|
798
221
|
|
|
799
222
|
Copyright © 2026 Medical Informatics Engineering, Inc. All rights reserved.
|
|
800
223
|
|
|
801
|
-
This software is **source available
|
|
224
|
+
This software is **source available**:
|
|
802
225
|
|
|
803
|
-
-
|
|
804
|
-
-
|
|
805
|
-
-
|
|
226
|
+
- **Free for open source projects:** use, modify, and distribute in open source projects with attribution.
|
|
227
|
+
- **Free for non-commercial use:** personal projects, education, and research.
|
|
228
|
+
- **Commercial license required:** for proprietary products or commercial use, contact [licensing@mieweb.com](mailto:licensing@mieweb.com).
|
|
806
229
|
|
|
807
|
-
See the [LICENSE](LICENSE)
|
|
230
|
+
See the [LICENSE](https://github.com/mieweb/ui/blob/main/LICENSE) for full terms.
|