mainstack-design-system 1.1.2 → 1.2.1
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 +30 -773
- package/dist/assets/styles.css +1 -1
- package/dist/index-DJT9m8v7.js +54 -0
- package/dist/index-DvzX668K.cjs +1 -0
- package/dist/index.d.ts +64 -84
- package/dist/mainstack-design-system.cjs +1 -1
- package/dist/mainstack-design-system.js +390 -392
- package/dist/mainstack-design-system17.cjs +1 -1
- package/dist/mainstack-design-system17.js +4 -4
- package/dist/mainstack-design-system18.cjs +1 -1
- package/dist/mainstack-design-system18.js +4 -4
- package/dist/mainstack-design-system19.cjs +1 -1
- package/dist/mainstack-design-system19.js +4 -4
- package/dist/mainstack-design-system26.cjs +1 -1
- package/dist/mainstack-design-system26.js +4 -4
- package/dist/mainstack-design-system30.cjs +1 -1
- package/dist/mainstack-design-system30.js +4 -4
- package/dist/mainstack-design-system35.cjs +1 -1
- package/dist/mainstack-design-system35.js +5 -5
- package/dist/mainstack-design-system357.cjs +1 -1
- package/dist/mainstack-design-system357.js +3 -3
- package/dist/mainstack-design-system358.cjs +1 -1
- package/dist/mainstack-design-system358.js +3 -3
- package/dist/mainstack-design-system359.cjs +1 -1
- package/dist/mainstack-design-system359.js +8 -8
- package/dist/mainstack-design-system36.cjs +1 -1
- package/dist/mainstack-design-system36.js +3 -3
- package/dist/mainstack-design-system360.cjs +1 -1
- package/dist/mainstack-design-system360.js +9 -9
- package/dist/mainstack-design-system361.cjs +1 -1
- package/dist/mainstack-design-system361.js +1 -1
- package/dist/mainstack-design-system362.cjs +1 -1
- package/dist/mainstack-design-system362.js +1 -1
- package/dist/mainstack-design-system363.cjs +1 -1
- package/dist/mainstack-design-system363.js +6 -6
- package/dist/mainstack-design-system364.cjs +1 -1
- package/dist/mainstack-design-system364.js +41 -31
- package/dist/mainstack-design-system365.cjs +1 -1
- package/dist/mainstack-design-system365.js +9 -9
- package/dist/mainstack-design-system366.cjs +1 -1
- package/dist/mainstack-design-system366.js +4 -4
- package/dist/mainstack-design-system367.cjs +1 -1
- package/dist/mainstack-design-system367.js +5 -5
- package/dist/mainstack-design-system368.cjs +1 -1
- package/dist/mainstack-design-system368.js +3 -3
- package/dist/mainstack-design-system369.cjs +1 -1
- package/dist/mainstack-design-system369.js +16 -16
- package/dist/mainstack-design-system37.cjs +1 -1
- package/dist/mainstack-design-system37.js +7 -7
- package/dist/mainstack-design-system370.cjs +1 -1
- package/dist/mainstack-design-system370.js +7 -7
- package/dist/mainstack-design-system371.cjs +1 -1
- package/dist/mainstack-design-system371.js +6 -6
- package/dist/mainstack-design-system372.cjs +1 -1
- package/dist/mainstack-design-system372.js +6 -6
- package/dist/mainstack-design-system373.cjs +1 -1
- package/dist/mainstack-design-system373.js +5 -5
- package/dist/mainstack-design-system374.cjs +1 -1
- package/dist/mainstack-design-system374.js +4 -4
- package/dist/mainstack-design-system375.cjs +1 -1
- package/dist/mainstack-design-system375.js +4 -4
- package/dist/mainstack-design-system376.cjs +1 -1
- package/dist/mainstack-design-system376.js +12 -12
- package/dist/mainstack-design-system377.cjs +1 -1
- package/dist/mainstack-design-system377.js +1 -1
- package/dist/mainstack-design-system378.cjs +1 -1
- package/dist/mainstack-design-system378.js +1 -1
- package/dist/mainstack-design-system379.cjs +1 -1
- package/dist/mainstack-design-system379.js +5 -5
- package/dist/mainstack-design-system38.cjs +1 -1
- package/dist/mainstack-design-system38.js +7 -7
- package/dist/mainstack-design-system380.cjs +1 -1
- package/dist/mainstack-design-system380.js +10 -10
- package/dist/mainstack-design-system381.cjs +1 -1
- package/dist/mainstack-design-system381.js +5 -5
- package/dist/mainstack-design-system382.cjs +1 -1
- package/dist/mainstack-design-system382.js +17 -18
- package/dist/mainstack-design-system383.cjs +1 -1
- package/dist/mainstack-design-system383.js +17 -5
- package/dist/mainstack-design-system384.cjs +1 -2
- package/dist/mainstack-design-system384.js +69 -29
- package/dist/mainstack-design-system385.cjs +1 -2
- package/dist/mainstack-design-system385.js +7 -29
- package/dist/mainstack-design-system386.cjs +87 -3
- package/dist/mainstack-design-system386.js +235 -11
- package/dist/mainstack-design-system387.cjs +1 -1
- package/dist/mainstack-design-system387.js +19 -19
- package/dist/mainstack-design-system388.cjs +1 -1
- package/dist/mainstack-design-system388.js +5 -16
- package/dist/mainstack-design-system389.cjs +2 -1
- package/dist/mainstack-design-system389.js +27 -15
- package/dist/mainstack-design-system39.cjs +1 -1
- package/dist/mainstack-design-system39.js +11 -13
- package/dist/mainstack-design-system390.cjs +2 -1
- package/dist/mainstack-design-system390.js +17 -16
- package/dist/mainstack-design-system391.cjs +1 -1
- package/dist/mainstack-design-system391.js +7 -9
- package/dist/mainstack-design-system392.cjs +1 -1
- package/dist/mainstack-design-system392.js +30 -16
- package/dist/mainstack-design-system393.cjs +1 -1
- package/dist/mainstack-design-system393.js +7 -17
- package/dist/mainstack-design-system394.cjs +1 -1
- package/dist/mainstack-design-system394.js +15 -68
- package/dist/mainstack-design-system395.cjs +1 -1
- package/dist/mainstack-design-system395.js +16 -7
- package/dist/mainstack-design-system396.cjs +1 -87
- package/dist/mainstack-design-system396.js +14 -236
- package/dist/mainstack-design-system397.cjs +1 -2
- package/dist/mainstack-design-system397.js +18 -17
- package/dist/mainstack-design-system398.cjs +1 -1
- package/dist/mainstack-design-system398.js +18 -7
- package/dist/mainstack-design-system399.cjs +1 -1
- package/dist/mainstack-design-system399.js +20 -28
- package/dist/mainstack-design-system40.cjs +1 -1
- package/dist/mainstack-design-system40.js +4 -4
- package/dist/mainstack-design-system400.cjs +1 -1
- package/dist/mainstack-design-system400.js +21 -7
- package/dist/mainstack-design-system401.cjs +1 -1
- package/dist/mainstack-design-system401.js +27 -12
- package/dist/mainstack-design-system402.cjs +1 -1
- package/dist/mainstack-design-system402.js +14 -11
- package/dist/mainstack-design-system403.cjs +1 -1
- package/dist/mainstack-design-system403.js +17 -16
- package/dist/mainstack-design-system404.cjs +1 -1
- package/dist/mainstack-design-system404.js +14 -14
- package/dist/mainstack-design-system405.cjs +1 -1
- package/dist/mainstack-design-system405.js +16 -14
- package/dist/mainstack-design-system406.cjs +1 -1
- package/dist/mainstack-design-system406.js +15 -24
- package/dist/mainstack-design-system407.cjs +1 -1
- package/dist/mainstack-design-system407.js +12 -17
- package/dist/mainstack-design-system408.cjs +1 -1
- package/dist/mainstack-design-system408.js +12 -27
- package/dist/mainstack-design-system409.cjs +1 -1
- package/dist/mainstack-design-system409.js +7 -18
- package/dist/mainstack-design-system41.cjs +1 -1
- package/dist/mainstack-design-system41.js +6 -6
- package/dist/mainstack-design-system410.cjs +1 -1
- package/dist/mainstack-design-system410.js +18 -17
- package/dist/mainstack-design-system411.cjs +1 -1
- package/dist/mainstack-design-system411.js +13 -15
- package/dist/mainstack-design-system412.cjs +1 -1
- package/dist/mainstack-design-system412.js +15 -16
- package/dist/mainstack-design-system413.cjs +1 -1
- package/dist/mainstack-design-system413.js +14 -12
- package/dist/mainstack-design-system414.cjs +1 -1
- package/dist/mainstack-design-system414.js +68 -16
- package/dist/mainstack-design-system415.cjs +1 -1
- package/dist/mainstack-design-system415.js +13 -12
- package/dist/mainstack-design-system416.cjs +1 -1
- package/dist/mainstack-design-system416.js +20 -8
- package/dist/mainstack-design-system417.cjs +1 -1
- package/dist/mainstack-design-system417.js +19 -41
- package/dist/mainstack-design-system418.cjs +1 -1
- package/dist/mainstack-design-system418.js +13 -18
- package/dist/mainstack-design-system419.cjs +1 -1
- package/dist/mainstack-design-system419.js +37 -16
- package/dist/mainstack-design-system42.cjs +1 -1
- package/dist/mainstack-design-system42.js +8 -8
- package/dist/mainstack-design-system420.cjs +1 -1
- package/dist/mainstack-design-system420.js +25 -15
- package/dist/mainstack-design-system421.cjs +1 -1
- package/dist/mainstack-design-system421.js +15 -18
- package/dist/mainstack-design-system422.cjs +1 -1
- package/dist/mainstack-design-system422.js +15 -68
- package/dist/mainstack-design-system423.cjs +1 -1
- package/dist/mainstack-design-system423.js +19 -17
- package/dist/mainstack-design-system424.cjs +1 -1
- package/dist/mainstack-design-system424.js +13 -20
- package/dist/mainstack-design-system425.cjs +1 -1
- package/dist/mainstack-design-system425.js +19 -20
- package/dist/mainstack-design-system426.cjs +1 -1
- package/dist/mainstack-design-system426.js +15 -13
- package/dist/mainstack-design-system427.cjs +1 -1
- package/dist/mainstack-design-system427.js +8 -38
- package/dist/mainstack-design-system428.cjs +1 -1
- package/dist/mainstack-design-system428.js +7 -29
- package/dist/mainstack-design-system429.cjs +1 -1
- package/dist/mainstack-design-system429.js +16 -9
- package/dist/mainstack-design-system430.cjs +1 -1
- package/dist/mainstack-design-system430.js +24 -11
- package/dist/mainstack-design-system431.cjs +2 -1
- package/dist/mainstack-design-system431.js +40 -19
- package/dist/mainstack-design-system432.cjs +2 -1
- package/dist/mainstack-design-system432.js +26 -13
- package/dist/mainstack-design-system433.cjs +2 -1
- package/dist/mainstack-design-system433.js +31 -17
- package/dist/mainstack-design-system434.cjs +2 -1
- package/dist/mainstack-design-system434.js +19 -13
- package/dist/mainstack-design-system435.cjs +2 -1
- package/dist/mainstack-design-system435.js +29 -6
- package/dist/mainstack-design-system436.cjs +2 -1
- package/dist/mainstack-design-system436.js +20 -6
- package/dist/mainstack-design-system437.cjs +2 -1
- package/dist/mainstack-design-system437.js +39 -20
- package/dist/mainstack-design-system438.cjs +2 -1
- package/dist/mainstack-design-system438.js +31 -27
- package/dist/mainstack-design-system439.cjs +1 -1
- package/dist/mainstack-design-system439.js +27 -27
- package/dist/mainstack-design-system440.cjs +1 -1
- package/dist/mainstack-design-system440.js +51 -21
- package/dist/mainstack-design-system441.cjs +1 -1
- package/dist/mainstack-design-system441.js +21 -28
- package/dist/mainstack-design-system442.cjs +1 -1
- package/dist/mainstack-design-system442.js +29 -16
- package/dist/mainstack-design-system443.cjs +1 -1
- package/dist/mainstack-design-system443.js +15 -25
- package/dist/mainstack-design-system444.cjs +1 -1
- package/dist/mainstack-design-system444.js +25 -16
- package/dist/mainstack-design-system445.cjs +1 -1
- package/dist/mainstack-design-system445.js +16 -23
- package/dist/mainstack-design-system446.cjs +1 -1
- package/dist/mainstack-design-system446.js +40 -32
- package/dist/mainstack-design-system447.cjs +1 -1
- package/dist/mainstack-design-system447.js +30 -38
- package/dist/mainstack-design-system448.cjs +1 -2
- package/dist/mainstack-design-system448.js +18 -56
- package/dist/mainstack-design-system449.cjs +1 -2
- package/dist/mainstack-design-system449.js +18 -26
- package/dist/mainstack-design-system450.cjs +1 -2
- package/dist/mainstack-design-system450.js +16 -33
- package/dist/mainstack-design-system451.cjs +1 -2
- package/dist/mainstack-design-system451.js +20 -20
- package/dist/mainstack-design-system452.cjs +1 -2
- package/dist/mainstack-design-system452.js +19 -30
- package/dist/mainstack-design-system453.cjs +1 -2
- package/dist/mainstack-design-system453.js +17 -21
- package/dist/mainstack-design-system454.cjs +1 -1
- package/dist/mainstack-design-system454.js +50 -26
- package/dist/mainstack-design-system455.cjs +1 -1
- package/dist/mainstack-design-system455.js +52 -30
- package/dist/mainstack-design-system456.cjs +2 -1
- package/dist/mainstack-design-system456.js +99 -18
- package/dist/mainstack-design-system457.cjs +2 -1
- package/dist/mainstack-design-system457.js +35 -18
- package/dist/mainstack-design-system458.cjs +2 -1
- package/dist/mainstack-design-system458.js +76 -16
- package/dist/mainstack-design-system459.cjs +2 -1
- package/dist/mainstack-design-system459.js +74 -20
- package/dist/mainstack-design-system460.cjs +2 -1
- package/dist/mainstack-design-system460.js +45 -19
- package/dist/mainstack-design-system461.cjs +2 -1
- package/dist/mainstack-design-system461.js +80 -17
- package/dist/mainstack-design-system462.cjs +1 -2
- package/dist/mainstack-design-system462.js +8 -53
- package/dist/mainstack-design-system463.cjs +1 -2
- package/dist/mainstack-design-system463.js +12 -54
- package/dist/mainstack-design-system464.cjs +1 -2
- package/dist/mainstack-design-system464.js +17 -92
- package/dist/mainstack-design-system465.cjs +1 -2
- package/dist/mainstack-design-system465.js +13 -30
- package/dist/mainstack-design-system466.cjs +1 -2
- package/dist/mainstack-design-system466.js +20 -39
- package/dist/mainstack-design-system467.cjs +1 -2
- package/dist/mainstack-design-system467.js +23 -71
- package/dist/mainstack-design-system468.cjs +1 -2
- package/dist/mainstack-design-system468.js +28 -39
- package/dist/mainstack-design-system469.cjs +1 -2
- package/dist/mainstack-design-system469.js +7 -81
- package/dist/mainstack-design-system470.cjs +1 -1
- package/dist/mainstack-design-system470.js +85 -8
- package/dist/mainstack-design-system471.cjs +1 -1
- package/dist/mainstack-design-system471.js +27 -12
- package/dist/mainstack-design-system472.cjs +1 -1
- package/dist/mainstack-design-system472.js +19 -14
- package/dist/mainstack-design-system473.cjs +1 -1
- package/dist/mainstack-design-system473.js +22 -13
- package/dist/mainstack-design-system474.cjs +2 -1
- package/dist/mainstack-design-system474.js +31 -20
- package/dist/mainstack-design-system475.cjs +2 -1
- package/dist/mainstack-design-system475.js +31 -26
- package/dist/mainstack-design-system476.cjs +2 -1
- package/dist/mainstack-design-system476.js +40 -30
- package/dist/mainstack-design-system477.cjs +2 -1
- package/dist/mainstack-design-system477.js +31 -7
- package/dist/mainstack-design-system478.cjs +2 -1
- package/dist/mainstack-design-system478.js +59 -80
- package/dist/mainstack-design-system479.cjs +2 -1
- package/dist/mainstack-design-system479.js +29 -25
- package/dist/mainstack-design-system480.cjs +2 -1
- package/dist/mainstack-design-system480.js +103 -21
- package/dist/mainstack-design-system481.cjs +2 -1
- package/dist/mainstack-design-system481.js +31 -21
- package/dist/mainstack-design-system482.cjs +1 -1
- package/dist/mainstack-design-system482.js +23 -23
- package/dist/mainstack-design-system483.cjs +1 -1
- package/dist/mainstack-design-system483.js +75 -27
- package/dist/mainstack-design-system484.cjs +1 -1
- package/dist/mainstack-design-system484.js +20 -43
- package/dist/mainstack-design-system485.cjs +1 -1
- package/dist/mainstack-design-system485.js +122 -26
- package/dist/mainstack-design-system486.cjs +1 -1
- package/dist/mainstack-design-system486.js +28 -55
- package/dist/mainstack-design-system487.cjs +1 -1
- package/dist/mainstack-design-system487.js +21 -21
- package/dist/mainstack-design-system488.cjs +1 -1
- package/dist/mainstack-design-system488.js +30 -102
- package/dist/mainstack-design-system489.cjs +1 -1
- package/dist/mainstack-design-system489.js +32 -25
- package/dist/mainstack-design-system490.cjs +3 -2
- package/dist/mainstack-design-system490.js +16 -31
- package/dist/mainstack-design-system491.cjs +1 -2
- package/dist/mainstack-design-system491.js +17 -79
- package/dist/mainstack-design-system492.cjs +1 -2
- package/dist/mainstack-design-system492.js +11 -17
- package/dist/mainstack-design-system493.cjs +1 -2
- package/dist/mainstack-design-system493.js +15 -126
- package/dist/mainstack-design-system494.cjs +1 -2
- package/dist/mainstack-design-system494.js +14 -35
- package/dist/mainstack-design-system495.cjs +1 -2
- package/dist/mainstack-design-system495.js +15 -31
- package/dist/mainstack-design-system496.cjs +1 -2
- package/dist/mainstack-design-system496.js +8 -31
- package/dist/mainstack-design-system497.cjs +1 -1
- package/dist/mainstack-design-system497.js +14 -8
- package/dist/mainstack-design-system498.cjs +1 -1
- package/dist/mainstack-design-system498.js +14 -10
- package/dist/mainstack-design-system499.cjs +1 -1
- package/dist/mainstack-design-system499.js +13 -15
- package/dist/mainstack-design-system500.cjs +1 -1
- package/dist/mainstack-design-system500.js +14 -13
- package/dist/mainstack-design-system501.cjs +1 -1
- package/dist/mainstack-design-system501.js +30 -16
- package/dist/mainstack-design-system502.cjs +1 -1
- package/dist/mainstack-design-system502.js +16 -31
- package/dist/mainstack-design-system503.cjs +1 -1
- package/dist/mainstack-design-system503.js +42 -16
- package/dist/mainstack-design-system504.cjs +2 -1
- package/dist/mainstack-design-system504.js +28 -39
- package/dist/mainstack-design-system505.cjs +1 -2
- package/dist/mainstack-design-system505.js +71 -27
- package/dist/mainstack-design-system506.cjs +1 -1
- package/dist/mainstack-design-system506.js +20 -73
- package/dist/mainstack-design-system507.cjs +2 -1
- package/dist/mainstack-design-system507.js +14 -22
- package/dist/mainstack-design-system508.cjs +1 -1
- package/dist/mainstack-design-system508.js +37 -13
- package/dist/mainstack-design-system509.cjs +1 -1
- package/dist/mainstack-design-system509.js +31 -36
- package/dist/mainstack-design-system510.cjs +1 -1
- package/dist/mainstack-design-system510.js +38 -31
- package/dist/mainstack-design-system511.cjs +1 -1
- package/dist/mainstack-design-system511.js +43 -24
- package/dist/mainstack-design-system512.cjs +1 -1
- package/dist/mainstack-design-system512.js +13 -46
- package/dist/mainstack-design-system513.cjs +1 -1
- package/dist/mainstack-design-system513.js +32 -13
- package/dist/mainstack-design-system514.cjs +1 -1
- package/dist/mainstack-design-system514.js +38 -31
- package/dist/mainstack-design-system515.cjs +1 -1
- package/dist/mainstack-design-system515.js +43 -24
- package/dist/mainstack-design-system516.cjs +1 -2
- package/dist/mainstack-design-system516.js +17 -48
- package/dist/mainstack-design-system517.cjs +1 -1
- package/dist/mainstack-design-system517.js +17 -12
- package/dist/mainstack-design-system518.cjs +1 -1
- package/dist/mainstack-design-system518.js +44 -17
- package/dist/mainstack-design-system519.cjs +1 -1
- package/dist/mainstack-design-system519.js +27 -47
- package/dist/mainstack-design-system520.cjs +2 -1
- package/dist/mainstack-design-system520.js +24 -26
- package/dist/mainstack-design-system521.cjs +1 -1
- package/dist/mainstack-design-system521.js +32 -21
- package/dist/mainstack-design-system522.cjs +1 -2
- package/dist/mainstack-design-system522.js +15 -32
- package/dist/mainstack-design-system523.cjs +1 -1
- package/dist/mainstack-design-system523.js +13 -13
- package/dist/mainstack-design-system524.cjs +1 -1
- package/dist/mainstack-design-system524.js +10 -10
- package/dist/mainstack-design-system525.cjs +1 -1
- package/dist/mainstack-design-system525.js +11 -13
- package/dist/mainstack-design-system526.cjs +1 -1
- package/dist/mainstack-design-system526.js +10 -11
- package/dist/mainstack-design-system527.cjs +2 -1
- package/dist/mainstack-design-system527.js +16 -11
- package/dist/mainstack-design-system528.cjs +1 -1
- package/dist/mainstack-design-system528.js +4 -20
- package/dist/mainstack-design-system529.cjs +1 -1
- package/dist/mainstack-design-system529.js +8 -4
- package/dist/mainstack-design-system530.cjs +1 -1
- package/dist/mainstack-design-system530.js +5 -8
- package/dist/mainstack-design-system531.cjs +1 -2
- package/dist/mainstack-design-system531.js +15 -6
- package/dist/mainstack-design-system532.cjs +1 -1
- package/dist/mainstack-design-system532.js +13 -14
- package/dist/mainstack-design-system533.cjs +2 -1
- package/dist/mainstack-design-system533.js +17 -13
- package/dist/mainstack-design-system534.cjs +1 -1
- package/dist/mainstack-design-system534.js +20 -10
- package/dist/mainstack-design-system535.cjs +1 -1
- package/dist/mainstack-design-system535.js +14 -21
- package/dist/mainstack-design-system536.cjs +1 -1
- package/dist/mainstack-design-system536.js +22 -15
- package/dist/mainstack-design-system537.cjs +1 -2
- package/dist/mainstack-design-system537.js +29 -24
- package/dist/mainstack-design-system538.cjs +1 -1
- package/dist/mainstack-design-system538.js +15 -29
- package/dist/mainstack-design-system539.cjs +1 -1
- package/dist/mainstack-design-system539.js +9 -12
- package/dist/mainstack-design-system540.cjs +1 -1
- package/dist/mainstack-design-system540.js +18 -8
- package/dist/mainstack-design-system541.cjs +1 -1
- package/dist/mainstack-design-system541.js +15 -18
- package/dist/mainstack-design-system542.cjs +1 -1
- package/dist/mainstack-design-system542.js +14 -14
- package/dist/mainstack-design-system543.cjs +1 -1
- package/dist/mainstack-design-system543.js +18 -16
- package/dist/mainstack-design-system544.cjs +1 -1
- package/dist/mainstack-design-system544.js +11 -17
- package/dist/mainstack-design-system545.cjs +1 -1
- package/dist/mainstack-design-system545.js +11 -11
- package/dist/mainstack-design-system546.cjs +1 -1
- package/dist/mainstack-design-system546.js +55 -15
- package/dist/mainstack-design-system547.cjs +1 -1
- package/dist/mainstack-design-system547.js +35 -55
- package/dist/mainstack-design-system548.cjs +1 -1
- package/dist/mainstack-design-system548.js +23 -35
- package/dist/mainstack-design-system549.cjs +1 -1
- package/dist/mainstack-design-system549.js +15 -15
- package/dist/mainstack-design-system550.cjs +5 -1
- package/dist/mainstack-design-system550.js +50 -19
- package/dist/mainstack-design-system551.cjs +1 -5
- package/dist/mainstack-design-system551.js +30 -51
- package/dist/mainstack-design-system552.cjs +1 -1
- package/dist/mainstack-design-system552.js +7 -33
- package/dist/mainstack-design-system553.cjs +2 -1
- package/dist/mainstack-design-system553.js +84 -6
- package/dist/mainstack-design-system554.cjs +1 -2
- package/dist/mainstack-design-system554.js +203 -85
- package/dist/mainstack-design-system555.cjs +1 -1
- package/dist/mainstack-design-system555.js +33 -153
- package/dist/mainstack-design-system556.cjs +1 -1
- package/dist/mainstack-design-system556.js +5 -83
- package/dist/mainstack-design-system557.cjs +1 -1
- package/dist/mainstack-design-system557.js +22 -21
- package/dist/mainstack-design-system558.cjs +1 -1
- package/dist/mainstack-design-system558.js +9 -5
- package/dist/mainstack-design-system559.cjs +1 -1
- package/dist/mainstack-design-system559.js +42 -22
- package/dist/mainstack-design-system560.cjs +1 -1
- package/dist/mainstack-design-system560.js +14 -9
- package/dist/mainstack-design-system561.cjs +1 -1
- package/dist/mainstack-design-system561.js +48 -13
- package/dist/mainstack-design-system562.cjs +1 -1
- package/dist/mainstack-design-system562.js +14 -44
- package/dist/mainstack-design-system563.cjs +1 -1
- package/dist/mainstack-design-system563.js +98 -18
- package/dist/mainstack-design-system564.cjs +1 -1
- package/dist/mainstack-design-system564.js +34 -58
- package/dist/mainstack-design-system565.cjs +1 -1
- package/dist/mainstack-design-system565.js +13 -37
- package/dist/mainstack-design-system566.cjs +1 -1
- package/dist/mainstack-design-system566.js +255 -14
- package/dist/mainstack-design-system567.cjs +1 -1
- package/dist/mainstack-design-system567.js +12 -255
- package/dist/mainstack-design-system568.cjs +1 -1
- package/dist/mainstack-design-system568.js +7 -10
- package/dist/mainstack-design-system569.cjs +1 -1
- package/dist/mainstack-design-system569.js +47 -9
- package/dist/mainstack-design-system570.cjs +1 -1
- package/dist/mainstack-design-system570.js +14 -47
- package/dist/mainstack-design-system571.cjs +1 -1
- package/dist/mainstack-design-system571.js +21 -13
- package/dist/mainstack-design-system587.cjs +2 -1
- package/dist/mainstack-design-system587.js +97 -74
- package/dist/mainstack-design-system588.cjs +1 -1
- package/dist/mainstack-design-system588.js +75 -20
- package/dist/mainstack-design-system589.cjs +1 -2
- package/dist/mainstack-design-system589.js +18 -148
- package/dist/mainstack-design-system591.cjs +2 -2
- package/dist/mainstack-design-system591.js +5 -4
- package/dist/mainstack-design-system594.cjs +1 -1
- package/dist/mainstack-design-system594.js +1 -1
- package/dist/mainstack-design-system595.cjs +1 -1
- package/dist/mainstack-design-system595.js +1 -1
- package/dist/mainstack-design-system596.cjs +1 -1
- package/dist/mainstack-design-system596.js +5 -5
- package/dist/mainstack-design-system598.cjs +1 -1
- package/dist/mainstack-design-system598.js +11 -1
- package/package.json +4 -4
- package/dist/index-D1Vkm5Kx.cjs +0 -1
- package/dist/index-oS7tHm-8.js +0 -106
- package/dist/mainstack-design-system599.cjs +0 -1
- package/dist/mainstack-design-system599.js +0 -11
package/README.md
CHANGED
|
@@ -14,790 +14,47 @@ ability to auto-maintain this document. Please use the Joggr editor to edit this
|
|
|
14
14
|
-->
|
|
15
15
|
<!-- @joggr:warning:end -->
|
|
16
16
|
|
|
17
|
-
##
|
|
17
|
+
## Documentation
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
You can find the Mainstack-Design-System documentation [here](https://design.mainstack.co/).
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Examples
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- **[UTILITIES.md](./UTILITIES.md)** - Utility functions, hooks, and types (4 min read)
|
|
26
|
-
|
|
27
|
-
The design system includes many utilities that don't map to Figma:
|
|
28
|
-
|
|
29
|
-
- **Helper functions**: `cn()`, `sanitizeNumberInputValue()`, `formatPriceDigit()`
|
|
30
|
-
- **Hooks**: `useElementWidth()`, `useMainstackDesignSystemTheme()`
|
|
31
|
-
- **Provider**: `MainstackDesignSystemProvider` (theme management)
|
|
32
|
-
- **Type utilities**: `PolymorphicProps`, `CountryIso2CodeType`
|
|
33
|
-
|
|
34
|
-
# Design System Development Guide
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## Design Tokens
|
|
39
|
-
|
|
40
|
-
### Token Naming Convention
|
|
41
|
-
|
|
42
|
-
All custom CSS variables must follow the `--ms-name-of-variable` pattern using kebab-case.
|
|
43
|
-
|
|
44
|
-
```css
|
|
45
|
-
/* ✅ Correct */
|
|
46
|
-
--ms-primary-color: #3b82f6;
|
|
47
|
-
--ms-text-base: 1rem;
|
|
48
|
-
|
|
49
|
-
/* ❌ Incorrect */
|
|
50
|
-
--primaryColor: #3b82f6;
|
|
51
|
-
--ms_text_base: 1rem;
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Token Inference
|
|
55
|
-
|
|
56
|
-
Tokens should be inferred directly from design documentation on Figma.
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
# Component Architecture
|
|
61
|
-
|
|
62
|
-
## Composition Component Pattern Guide
|
|
63
|
-
|
|
64
|
-
### Overview
|
|
65
|
-
|
|
66
|
-
Our design system uses a composition architecture pattern that provides both **simple** and **advanced** APIs for components. This guide explains when and how to use each pattern.
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
## Pattern 1: Direct Composition (`Comp.Root`)
|
|
71
|
-
|
|
72
|
-
**Use when:** The component requires multiple sub-components in most use cases.
|
|
73
|
-
|
|
74
|
-
### Structure
|
|
23
|
+
We have several examples [on the storybook doc](https://design.mainstack.co/). Here is the first one to get you started:
|
|
75
24
|
|
|
76
25
|
```tsx
|
|
77
|
-
// Most common usage requires composition
|
|
78
|
-
Dialog.Root;
|
|
79
|
-
Dialog.Trigger;
|
|
80
|
-
Dialog.Content;
|
|
81
|
-
Dialog.Header;
|
|
82
|
-
Dialog.Footer;
|
|
83
|
-
|
|
84
|
-
DialogRoot;
|
|
85
|
-
DialogTrigger;
|
|
86
|
-
DialogContent;
|
|
87
|
-
DialogHeader;
|
|
88
|
-
DialogFooter;
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### Example: Dialog Component
|
|
92
|
-
|
|
93
|
-
```tsx
|
|
94
|
-
//Dialog almost always needs multiple parts
|
|
95
|
-
import { Dialog } from "@/components/dialog";
|
|
96
|
-
|
|
97
|
-
<Dialog.Root open={open} onOpenChange={setOpen}>
|
|
98
|
-
<Dialog.Trigger asChild>
|
|
99
|
-
<button>Open Dialog</button>
|
|
100
|
-
</Dialog.Trigger>
|
|
101
|
-
|
|
102
|
-
<Dialog.Content>
|
|
103
|
-
<Dialog.Header>
|
|
104
|
-
<Dialog.Title>Confirm Action</Dialog.Title>
|
|
105
|
-
</Dialog.Header>
|
|
106
|
-
|
|
107
|
-
<p>Are you sure you want to continue?</p>
|
|
108
|
-
|
|
109
|
-
<Dialog.Footer>
|
|
110
|
-
<Dialog.Close asChild>
|
|
111
|
-
<button>Cancel</button>
|
|
112
|
-
</Dialog.Close>
|
|
113
|
-
<button>Confirm</button>
|
|
114
|
-
</Dialog.Footer>
|
|
115
|
-
</Dialog.Content>
|
|
116
|
-
</Dialog.Root>;
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
```tsx
|
|
120
|
-
// Tree shaking example
|
|
121
26
|
import {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
<
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
<button>Confirm</button>
|
|
146
|
-
</DialogFooter>
|
|
147
|
-
</DialogContent>
|
|
148
|
-
</DialogRoot>;
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### When to Use
|
|
152
|
-
|
|
153
|
-
- Component is **interactive** and requires multiple parts to function
|
|
154
|
-
- **No simplified version** makes sense
|
|
155
|
-
- Examples: Dialog, Dropdown, Accordion, Tabs,
|
|
156
|
-
|
|
157
|
-
---
|
|
158
|
-
|
|
159
|
-
## Pattern 2: Simple + Composition (`Comp` + `CompGroup.Root` or `CompRoot`)
|
|
160
|
-
|
|
161
|
-
**Use when:** The component is **presentational** and typically only needs **one sub-component** (like a label), but can be extended with additional parts.
|
|
162
|
-
|
|
163
|
-
### Structure
|
|
164
|
-
|
|
165
|
-
```tsx
|
|
166
|
-
// Simple component for common case
|
|
167
|
-
Comp;
|
|
168
|
-
|
|
169
|
-
// Composiition for tree shaking
|
|
170
|
-
CompRoot;
|
|
171
|
-
CompLabel;
|
|
172
|
-
CompIcon;
|
|
173
|
-
|
|
174
|
-
// Composition for advanced cases
|
|
175
|
-
CompGroup.Root;
|
|
176
|
-
CompGroup.Label;
|
|
177
|
-
CompGroup.Icon;
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
### Example: Tag Component
|
|
181
|
-
|
|
182
|
-
```tsx
|
|
183
|
-
// SIMPLE (80% of use cases)
|
|
184
|
-
import { Tag } from '@/components/tag'
|
|
185
|
-
|
|
186
|
-
<Tag>React</Tag>
|
|
187
|
-
<Tag variant="success">Active</Tag>
|
|
188
|
-
<Tag>TypeScript</Tag>
|
|
189
|
-
|
|
190
|
-
// ADVANCED with tree shaking (10% of use cases)
|
|
191
|
-
import { TagRoot, TagIcon, TagLabel } from '@/components/tag'
|
|
192
|
-
|
|
193
|
-
<TagRoot variant="success">
|
|
194
|
-
<TagIcon>
|
|
195
|
-
<Check className="h-3 w-3" />
|
|
196
|
-
</TagIcon>
|
|
197
|
-
<TagLabel>Verified User</TagLabel>
|
|
198
|
-
</TagRoot>
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
// ADVANCED import all composables (10% of use cases)
|
|
202
|
-
import { TagGroup } from '@/components/tag'
|
|
203
|
-
|
|
204
|
-
<TagGroup.Root variant="success">
|
|
205
|
-
<TagGroup.Icon>
|
|
206
|
-
<Check className="h-3 w-3" />
|
|
207
|
-
</TagGroup.Icon>
|
|
208
|
-
<TagGroup.Label>Verified User</TagGroup.Label>
|
|
209
|
-
</TagGroup.Root>
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
### When to Use
|
|
213
|
-
|
|
214
|
-
- Component is **presentational** (non-interactive by default)
|
|
215
|
-
- **Most use cases** only need text/label
|
|
216
|
-
- Can be extended with icons, badges, or other decorations
|
|
217
|
-
- Examples: Tag, Button, Chip,
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Pattern 3: Single Component with Props
|
|
222
|
-
|
|
223
|
-
**Use when:** The component has variations but doesn't need composition.
|
|
224
|
-
|
|
225
|
-
### Structure
|
|
226
|
-
|
|
227
|
-
```tsx
|
|
228
|
-
// Single component with variants
|
|
229
|
-
Avatar;
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
### Example: Button Component
|
|
233
|
-
|
|
234
|
-
```tsx
|
|
235
|
-
// ✅ Props handle all variations
|
|
236
|
-
import { Avatar } from "@/components/Avatar";
|
|
237
|
-
|
|
238
|
-
<Avatar variant="picture">Click me</Avatar>;
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### When to Use
|
|
242
|
-
|
|
243
|
-
- Component variations are handled by **props** (variant, size, state)
|
|
244
|
-
- No need for multiple sub-components
|
|
245
|
-
- Example: Avatar
|
|
246
|
-
|
|
247
|
-
---
|
|
248
|
-
|
|
249
|
-
#### Controlled vs Uncontrolled
|
|
250
|
-
|
|
251
|
-
Components should support both controlled and uncontrolled usage for maximum flexibility.
|
|
252
|
-
This can ba achieved with `@radix-ui/react-use-controllable-state`
|
|
253
|
-
|
|
254
|
-
#### asChild Pattern
|
|
255
|
-
|
|
256
|
-
**Default to `asChild` with Radix Slot for interactive components.**
|
|
257
|
-
|
|
258
|
-
```tsx
|
|
259
|
-
import { Slot } from "@radix-ui/react-slot";
|
|
260
|
-
|
|
261
|
-
interface ButtonProps {
|
|
262
|
-
asChild?: boolean;
|
|
263
|
-
// other props
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
const Button = ({ asChild = false, ...props }: ButtonProps) => {
|
|
267
|
-
const Comp = asChild ? Slot : "button";
|
|
268
|
-
return <Comp {...props} />;
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
// Usage
|
|
272
|
-
<Button asChild>
|
|
273
|
-
<a href="/home">Go Home</a>
|
|
274
|
-
</Button>;
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
**Use `as` prop only for non-interactive primitives** (Typography, Tags, etc.)
|
|
278
|
-
|
|
279
|
-
```tsx
|
|
280
|
-
// ✅ Correct - Non-interactive primitive
|
|
281
|
-
<Text as="h1">Heading</Text>
|
|
282
|
-
<Text as="p">Paragraph</Text>
|
|
283
|
-
|
|
284
|
-
// ❌ Incorrect - Interactive component
|
|
285
|
-
<Button as="a" href="/home">Link</Button> // Use asChild instead
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## Styling Conventions
|
|
291
|
-
|
|
292
|
-
### Class Names
|
|
293
|
-
|
|
294
|
-
**Always use kebab-case for class names.**
|
|
295
|
-
|
|
296
|
-
```tsx
|
|
297
|
-
// ✅ Correct
|
|
298
|
-
className = "button-primary";
|
|
299
|
-
className = "dialog-content";
|
|
300
|
-
className = "form-field-error";
|
|
301
|
-
|
|
302
|
-
// ❌ Incorrect
|
|
303
|
-
className = "buttonPrimary";
|
|
304
|
-
className = "DialogContent";
|
|
305
|
-
className = "form_field_error";
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
Pass user classes and props last as overrides to variants and any other component styling.
|
|
309
|
-
|
|
310
|
-
### State Management with data-state
|
|
311
|
-
|
|
312
|
-
**Use `data-state` attributes for styling element states.**
|
|
313
|
-
|
|
314
|
-
```tsx
|
|
315
|
-
// Component
|
|
316
|
-
<button
|
|
317
|
-
data-state={isOpen ? "open" : "closed"}
|
|
318
|
-
data-disabled={disabled}
|
|
319
|
-
data-loading={isLoading}
|
|
320
|
-
>
|
|
321
|
-
{children}
|
|
322
|
-
</button>
|
|
323
|
-
|
|
324
|
-
// CSS/Tailwind
|
|
325
|
-
<button
|
|
326
|
-
className="
|
|
327
|
-
data-[state=open]:opacity-50
|
|
328
|
-
data-[disabled]:cursor-not-allowed
|
|
329
|
-
data-[loading]:bg-primary
|
|
330
|
-
"
|
|
331
|
-
>
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
### data-slot for Composition Styling
|
|
335
|
-
|
|
336
|
-
**Use `data-slot` for styling specific parts in composition patterns.**
|
|
337
|
-
|
|
338
|
-
```tsx
|
|
339
|
-
// Component
|
|
340
|
-
const Card = {
|
|
341
|
-
Root: ({ children }) => (
|
|
342
|
-
<div data-slot="root" className="card">
|
|
343
|
-
{children}
|
|
344
|
-
</div>
|
|
345
|
-
),
|
|
346
|
-
Header: ({ children }) => (
|
|
347
|
-
<div data-slot="header" className="card-header">
|
|
348
|
-
{children}
|
|
349
|
-
</div>
|
|
350
|
-
),
|
|
351
|
-
Body: ({ children }) => (
|
|
352
|
-
<div data-slot="body" className="card-body">
|
|
353
|
-
{children}
|
|
354
|
-
</div>
|
|
355
|
-
),
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
// CSS targeting
|
|
359
|
-
.card [data-slot="header"] {
|
|
360
|
-
/* Header-specific styles when inside card */
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
.card [data-slot="body"] {
|
|
364
|
-
/* Body-specific styles when inside card */
|
|
365
|
-
}
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
# Client And Server Component Approach
|
|
369
|
-
|
|
370
|
-
The design system is built on React 19 and as such component built should support SSR, Server component (if applicable) and Client Component. Please reference react doc [here](https://react.dev/reference/rsc/use-client#when-to-use-use-client) for more info.
|
|
371
|
-
|
|
372
|
-
> **Please Note:** That SSR is different from React Server Component. This article [here](https://www.joshwcomeau.com/react/server-components/) explained it better.
|
|
373
|
-
|
|
374
|
-
## Server Component Support
|
|
375
|
-
|
|
376
|
-
The rule of thumb here is components with only styling, presentation component with no client-side interactivity, state management, context provider usage or browser APIs usage should be server compatible.
|
|
377
|
-
|
|
378
|
-
So server component can't have `useState` or `useEffect` in them, hence why they are presentational component with styling alone.
|
|
379
|
-
|
|
380
|
-
E.g Typograhy and Icon components; `DisplayText`, `BodyText` and `HeadlineText`
|
|
381
|
-
|
|
382
|
-
> **Please Note:** This component should not be exported with the `use client` directives
|
|
383
|
-
|
|
384
|
-
## Client Component Support And SSR
|
|
385
|
-
|
|
386
|
-
The rule of thumb here is components with client-side interactivity, state management, context provider usage or browser APIs usage should be client compatible and as such have the `use client` directives.
|
|
387
|
-
|
|
388
|
-
E.g `ImageUploader`, `Tooltip`
|
|
389
|
-
|
|
390
|
-
> **Please Note:** This component should be exported with the `use client` directives
|
|
391
|
-
|
|
392
|
-
That being said there are cases where Radix UI doesn't serve all your needs and you would need to build the component your self while keeping SSR in mind.
|
|
393
|
-
|
|
394
|
-
- Avoid Browser-Specific APIs in Rendering Logic: Browser APIs like window, document, localStorage, or sessionStorage.
|
|
395
|
-
- Always use `useEffect` hook for any side effect. Also use the `typeof window !== 'undefined'` to ensure browser-specific code only executes on the client.
|
|
396
|
-
- Avoid Time-Dependent Logic: Do not use time-dependent APIs like `Date()` constructors in your rendering logic, as the server and client might render at slightly different times, causing a mismatch.
|
|
397
|
-
|
|
398
|
-
While using the composition Component Pattern, only mark component as client with the `use client` directive on a per component level.
|
|
399
|
-
|
|
400
|
-
**Example:**
|
|
401
|
-
|
|
402
|
-
```tsx
|
|
403
|
-
"use client";
|
|
404
|
-
import { useState, useEffect } from "react";
|
|
405
|
-
|
|
406
|
-
interface DialogRootProps {
|
|
407
|
-
// dialog props
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
export const DialogRoot = ({ asChild = false, ...props }: DialogRootProps) => {
|
|
411
|
-
const [dialogOpen, setDialogOpen] = useState();
|
|
412
|
-
const Comp = asChild ? Slot : "div";
|
|
413
|
-
|
|
414
|
-
useEffect(() => {
|
|
415
|
-
// Make some side effect
|
|
416
|
-
}, []);
|
|
417
|
-
return <Comp open={dialogOpen} onOpen={setDialogOpen} {...props} />;
|
|
418
|
-
};
|
|
419
|
-
```
|
|
420
|
-
|
|
421
|
-
```tsx
|
|
422
|
-
interface DialogBodyProps {
|
|
423
|
-
// dialog props
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
export const DialogBody = ({ asChild = false, ...props }: DialogBodyProps) => {
|
|
427
|
-
const Comp = asChild ? Slot : "div";
|
|
428
|
-
return <Comp open={dialogOpen} onOpen={setDialogOpen} {...props} />;
|
|
429
|
-
};
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
```tsx
|
|
433
|
-
import { DialogRoot, DialogBody } from "./dialog";
|
|
434
|
-
|
|
435
|
-
const App = () => {
|
|
436
|
-
return (
|
|
437
|
-
<DialogRoot>
|
|
438
|
-
<DialogBody>// Your content</DialogBody>
|
|
439
|
-
</DialogRoot>
|
|
440
|
-
);
|
|
441
|
-
};
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
In the example above `DialogBody` is a composable component that's meant to be used with `DialogRoot` but we only mark `DialogRoot` as client because it's using a state and an effect.
|
|
445
|
-
|
|
446
|
-
If `DialogBody` and `DialogRoot` were imported into a React server component, `DialogBody` will render on the server while `DialogRoot` will render on client. This works as a result of react [module dependency tree](https://react.dev/reference/rsc/use-client#how-use-client-marks-client-code)
|
|
447
|
-
|
|
448
|
-
Summary:
|
|
449
|
-
|
|
450
|
-
- If the component uses any React State or context provider, mark as client.
|
|
451
|
-
- If the component uses any Browser API, mark as client.
|
|
452
|
-
|
|
453
|
-
---
|
|
454
|
-
|
|
455
|
-
## Folder Structure
|
|
456
|
-
|
|
457
|
-
### Component Organization
|
|
458
|
-
|
|
459
|
-
**Every component must be in a named folder with barrel exports.**
|
|
460
|
-
|
|
461
|
-
```
|
|
462
|
-
src/components/Button/
|
|
463
|
-
├── Button.tsx # Main component
|
|
464
|
-
├── Button.stories.tsx # Storybook stories
|
|
465
|
-
├── Button.test.tsx # Tests
|
|
466
|
-
├── useButton.ts # Component-specific hook (if needed)
|
|
467
|
-
├── buttonVariants.ts # CVA variants (if needed)
|
|
468
|
-
└── index.ts # Barrel export
|
|
469
|
-
|
|
470
|
-
src/components/Dialog/
|
|
471
|
-
├── DialogRoot.tsx
|
|
472
|
-
├── DialogTrigger.tsx
|
|
473
|
-
├── DialogContent.tsx
|
|
474
|
-
├── DialogHeader.tsx
|
|
475
|
-
├── DialogFooter.tsx
|
|
476
|
-
├── useDialog.ts # Dialog-specific hook
|
|
477
|
-
├── Dialog.stories.tsx
|
|
478
|
-
├── Dialog.test.tsx
|
|
479
|
-
└── index.ts # Exports all parts
|
|
480
|
-
```
|
|
481
|
-
|
|
482
|
-
### Barrel Export Pattern
|
|
483
|
-
|
|
484
|
-
```typescript
|
|
485
|
-
// index.ts
|
|
486
|
-
|
|
487
|
-
// single component
|
|
488
|
-
export { Button } from "./Button";
|
|
489
|
-
|
|
490
|
-
// Composition components
|
|
491
|
-
export { ButtonRoot } from "./ButtonRoot";
|
|
492
|
-
export type { ButtonRootProps } from "./ButtonRoot";
|
|
493
|
-
|
|
494
|
-
export { ButtonIcon } from "./ButtonIcon";
|
|
495
|
-
export type { ButtonIconProps } from "./ButtonIcon";
|
|
496
|
-
|
|
497
|
-
export { ButtonLabel } from "./ButtonLabel";
|
|
498
|
-
export type { ButtonLabelProps } from "./ButtonLabel";
|
|
499
|
-
|
|
500
|
-
export { buttonVariants } from "./buttonVariants";
|
|
501
|
-
|
|
502
|
-
// Composition object for dot notation usage
|
|
503
|
-
import { ButtonRoot } from "./ButtonRoot";
|
|
504
|
-
import { ButtonIcon } from "./ButtonIcon";
|
|
505
|
-
import { ButtonLabel } from "./ButtonLabel";
|
|
506
|
-
|
|
507
|
-
export const ButtonGroup = {
|
|
508
|
-
Root: ButtonRoot,
|
|
509
|
-
Icon: ButtonIcon,
|
|
510
|
-
Label: ButtonLabel,
|
|
511
|
-
};
|
|
512
|
-
|
|
513
|
-
// Composition without simple exported component
|
|
514
|
-
import { AccordionRoot } from "./AccordionRoot";
|
|
515
|
-
import { AccordionHeader } from "./AccordionHeader";
|
|
516
|
-
import { AccordionTrigger } from "./AccordionTrigger";
|
|
517
|
-
|
|
518
|
-
export const Accordion = {
|
|
519
|
-
Root: AccordionRoot,
|
|
520
|
-
Header: AccordionHeader,
|
|
521
|
-
Trigger: AccordionTrigger,
|
|
522
|
-
};
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
### Tree Shaking Rules
|
|
526
|
-
|
|
527
|
-
**Keep component-specific code colocated:**
|
|
528
|
-
|
|
529
|
-
- ✅ Component-specific helpers → Stay in component folder
|
|
530
|
-
- ✅ Component-specific hooks → Stay in component folder
|
|
531
|
-
- ✅ Component-specific types → Stay in component folder
|
|
532
|
-
|
|
533
|
-
**Move to shared when:**
|
|
534
|
-
|
|
535
|
-
- ❌ Used in more than one component → Move to `src/utils/` or `src/hooks/`
|
|
536
|
-
|
|
537
|
-
---
|
|
538
|
-
|
|
539
|
-
## Documentation Standards
|
|
540
|
-
|
|
541
|
-
### Storybook Stories
|
|
542
|
-
|
|
543
|
-
**Every component must have:**
|
|
544
|
-
|
|
545
|
-
1. **1-2 major variants stories** (immediately visible)
|
|
546
|
-
2. **One example with changeable controls** for other variants
|
|
547
|
-
|
|
548
|
-
```typescript
|
|
549
|
-
import type { Meta, StoryObj } from "@storybook/react";
|
|
550
|
-
import { Button } from "./button";
|
|
551
|
-
|
|
552
|
-
const meta: Meta<typeof Button> = {
|
|
553
|
-
title: "Components/UI/Button",
|
|
554
|
-
component: Button,
|
|
555
|
-
parameters: {
|
|
556
|
-
layout: "centered",
|
|
557
|
-
},
|
|
558
|
-
tags: ["autodocs"],
|
|
559
|
-
};
|
|
560
|
-
|
|
561
|
-
export default meta;
|
|
562
|
-
type Story = StoryObj<typeof Button>;
|
|
563
|
-
|
|
564
|
-
export const Primary: Story = {
|
|
565
|
-
args: {
|
|
566
|
-
children: "Primary Button",
|
|
567
|
-
variant: "primary",
|
|
568
|
-
},
|
|
569
|
-
};
|
|
570
|
-
|
|
571
|
-
export const Secondary: Story = {
|
|
572
|
-
args: {
|
|
573
|
-
children: "Secondary Button",
|
|
574
|
-
variant: "secondary",
|
|
575
|
-
},
|
|
576
|
-
};
|
|
577
|
-
|
|
578
|
-
export const Secondary: Story = {
|
|
579
|
-
args: {
|
|
580
|
-
children: "Primary Button",
|
|
581
|
-
variant: "primary",
|
|
582
|
-
size: "lg",
|
|
583
|
-
},
|
|
584
|
-
};
|
|
585
|
-
|
|
586
|
-
export const Secondary: Story = {
|
|
587
|
-
args: {
|
|
588
|
-
children: "Primary Button",
|
|
589
|
-
variant: "primary",
|
|
590
|
-
size: "md",
|
|
591
|
-
},
|
|
592
|
-
};
|
|
593
|
-
|
|
594
|
-
// All Other Variants - One example with controls
|
|
595
|
-
export const Playground: Story = {
|
|
596
|
-
args: {
|
|
597
|
-
children: "Playground Button",
|
|
598
|
-
},
|
|
599
|
-
argTypes: {
|
|
600
|
-
variant: {
|
|
601
|
-
control: "select",
|
|
602
|
-
options: ["primary", "secondary", "outline", "ghost", "destructive"],
|
|
603
|
-
},
|
|
604
|
-
size: {
|
|
605
|
-
control: "select",
|
|
606
|
-
options: ["sm", "md", "lg"],
|
|
607
|
-
},
|
|
608
|
-
disabled: {
|
|
609
|
-
control: "boolean",
|
|
610
|
-
},
|
|
611
|
-
},
|
|
612
|
-
};
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
---
|
|
616
|
-
|
|
617
|
-
## Accessibility
|
|
618
|
-
|
|
619
|
-
### Semantic HTML First
|
|
620
|
-
|
|
621
|
-
**Always use semantic HTML elements as the foundation.**
|
|
622
|
-
|
|
623
|
-
```tsx
|
|
624
|
-
// ✅ Correct - Semantic HTML
|
|
625
|
-
<button type="button">Click me</button>
|
|
626
|
-
<nav>Navigation</nav>
|
|
627
|
-
<main>Main content</main>
|
|
628
|
-
<article>Article content</article>
|
|
629
|
-
|
|
630
|
-
// ❌ Incorrect - Non-semantic
|
|
631
|
-
<div onClick={handleClick}>Click me</div>
|
|
632
|
-
<div>Navigation</div>
|
|
633
|
-
<div>Main content</div>
|
|
634
|
-
```
|
|
635
|
-
|
|
636
|
-
### ARIA for Exceptions
|
|
637
|
-
|
|
638
|
-
**Use ARIA attributes only when semantic HTML is insufficient.**
|
|
639
|
-
|
|
640
|
-
```tsx
|
|
641
|
-
// ✅ Correct - ARIA only when needed
|
|
642
|
-
<div
|
|
643
|
-
role="button"
|
|
644
|
-
tabIndex={0}
|
|
645
|
-
aria-label="Close dialog"
|
|
646
|
-
onKeyDown={handleKeyDown}
|
|
647
|
-
>
|
|
648
|
-
<CloseIcon />
|
|
649
|
-
</div>
|
|
650
|
-
|
|
651
|
-
// ✅ Correct - Complex widget states
|
|
652
|
-
<button
|
|
653
|
-
aria-expanded={isOpen}
|
|
654
|
-
aria-controls="menu-content"
|
|
655
|
-
aria-haspopup="true"
|
|
656
|
-
>
|
|
657
|
-
Menu
|
|
658
|
-
</button>
|
|
659
|
-
|
|
660
|
-
// ❌ Incorrect - Unnecessary ARIA
|
|
661
|
-
<button aria-label="Submit">Submit</button> // Text already visible
|
|
662
|
-
```
|
|
663
|
-
|
|
664
|
-
### Accessibility Checklist
|
|
665
|
-
|
|
666
|
-
- ✅ Keyboard navigation support
|
|
667
|
-
- ✅ Focus management
|
|
668
|
-
- ✅ Screen reader announcements
|
|
669
|
-
- ✅ Color contrast (WCAG AA minimum)
|
|
670
|
-
- ✅ Touch target sizes (minimum 44x44px)
|
|
671
|
-
- ✅ Reduced motion support
|
|
672
|
-
|
|
673
|
-
---
|
|
674
|
-
|
|
675
|
-
## API Design
|
|
676
|
-
|
|
677
|
-
### Prop Naming
|
|
678
|
-
|
|
679
|
-
**Ensure prop names don't clash with HTML attributes except where explicitly needed to override.**
|
|
680
|
-
|
|
681
|
-
```tsx
|
|
682
|
-
// ✅ Correct - No clash
|
|
683
|
-
interface ButtonProps {
|
|
684
|
-
variant?: "primary" | "secondary";
|
|
685
|
-
isLoading?: boolean; // Not "loading" (clashes with HTML)
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
// ✅ Correct - Intentional override
|
|
689
|
-
interface InputProps {
|
|
690
|
-
type?: "text" | "email" | "password"; // Override HTML type
|
|
691
|
-
disabled?: boolean; // Override HTML disabled
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
// ❌ Incorrect - Unintentional clash
|
|
695
|
-
interface CustomInputProps {
|
|
696
|
-
value?: string; // Clashes with HTML value
|
|
697
|
-
name?: string; // Clashes with HTML name
|
|
698
|
-
// Should use different names or explicitly document override
|
|
699
|
-
}
|
|
27
|
+
SelectRoot,
|
|
28
|
+
SelectPortal,
|
|
29
|
+
SelectOptions,
|
|
30
|
+
SelectOptionItem,
|
|
31
|
+
} from "mainstack-design-system";
|
|
32
|
+
|
|
33
|
+
export default () => (
|
|
34
|
+
<FormItem>
|
|
35
|
+
<FormLabel>Label</FormLabel>
|
|
36
|
+
<Select {...args}>
|
|
37
|
+
<SelectOptions>
|
|
38
|
+
{({ options }) =>
|
|
39
|
+
options.map((option) => (
|
|
40
|
+
<SelectOptionItem key={option.value} value={option.value}>
|
|
41
|
+
{option.label}
|
|
42
|
+
</SelectOptionItem>
|
|
43
|
+
))
|
|
44
|
+
}
|
|
45
|
+
</SelectOptions>
|
|
46
|
+
</Select>
|
|
47
|
+
<FormSuccessStatus>Success message</FormSuccessStatus>
|
|
48
|
+
</FormItem>
|
|
49
|
+
);
|
|
700
50
|
```
|
|
701
51
|
|
|
702
|
-
---
|
|
703
|
-
|
|
704
52
|
## Contributing
|
|
705
53
|
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
1. Follow this guide
|
|
709
|
-
2. Include comprehensive Storybook documentation
|
|
710
|
-
3. Ensure TypeScript types are exported
|
|
711
|
-
4. Test controlled and uncontrolled modes
|
|
712
|
-
5. Verify keyboard navigation
|
|
713
|
-
6. Check responsive behavior
|
|
714
|
-
7. Submit with visual regression tests
|
|
715
|
-
|
|
716
|
-
<!-- v0 Documentation-->
|
|
717
|
-
|
|
718
|
-
# Usage
|
|
719
|
-
|
|
720
|
-
Install the design system
|
|
721
|
-
|
|
722
|
-
`yarn add mainstack-design-system`
|
|
723
|
-
|
|
724
|
-
Add the Design system provider to your root file
|
|
725
|
-
|
|
726
|
-
```typescript
|
|
727
|
-
import { MainstackProvider } from "mainstack-design-system";
|
|
728
|
-
|
|
729
|
-
<MainstackProvider>
|
|
730
|
-
<App />
|
|
731
|
-
</MainstackProvider>;
|
|
732
|
-
```
|
|
733
|
-
|
|
734
|
-
## Components
|
|
54
|
+
Read our [Contributing Guide](https://github.com/The-Mainstack/mainstack-design-system/blob/v1/CONTRIBUTING.md).
|
|
735
55
|
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
`import { Button } from 'mainstack-design-system';`
|
|
739
|
-
|
|
740
|
-
## Icons
|
|
741
|
-
|
|
742
|
-
Icons are imported from the `'mainstack-design-system` directory. For example:
|
|
743
|
-
|
|
744
|
-
`import { ArrowRightIcon } from 'mainstack-design-system';`
|
|
745
|
-
|
|
746
|
-
## Colors
|
|
747
|
-
|
|
748
|
-
Colors are imported from the `mainstack-design-system` directory. For example:
|
|
749
|
-
|
|
750
|
-
```typescript
|
|
751
|
-
import { Colors } from "mainstack-design-system";
|
|
752
|
-
|
|
753
|
-
<Text color={Colors.black300}>Hello World</Text>;
|
|
754
|
-
```
|
|
755
|
-
|
|
756
|
-
## Contributing
|
|
757
|
-
|
|
758
|
-
Installing the application (as a developer) is simple in the following steps:
|
|
759
|
-
|
|
760
|
-
- Access and Clone this repository
|
|
761
|
-
|
|
762
|
-
```shell
|
|
763
|
-
git clone git clone https://github.com/The-Mainstack/mainstack-design-system.git && cd [repo-name]
|
|
764
|
-
```
|
|
765
|
-
|
|
766
|
-
- Make your forked repo the remote upstream (at origin)
|
|
767
|
-
|
|
768
|
-
```shell
|
|
769
|
-
git remote add origin https://github.com/The-Mainstack/mainstack-design-system.git
|
|
770
|
-
```
|
|
771
|
-
|
|
772
|
-
- Navigate into the cloned directory and install dependencies with Yarn
|
|
773
|
-
|
|
774
|
-
```typescript
|
|
775
|
-
yarn add
|
|
776
|
-
```
|
|
777
|
-
|
|
778
|
-
- Make a duplicate of the **env** file and update its content accordingly. Most times, this is just fine with no update.
|
|
779
|
-
|
|
780
|
-
```shell
|
|
781
|
-
cp .env.sample .env
|
|
782
|
-
```
|
|
783
|
-
|
|
784
|
-
- Run the app in the development mode. Open [http://localhost:\[port\]](http://localhost:%5Bport%5D) to view it in the browser and start developing.
|
|
785
|
-
|
|
786
|
-
```typescript
|
|
787
|
-
yarn dev
|
|
788
|
-
```
|
|
789
|
-
|
|
790
|
-
To run storybook, run the following command:
|
|
791
|
-
|
|
792
|
-
```typescript
|
|
793
|
-
yarn storybook
|
|
794
|
-
```
|
|
795
|
-
|
|
796
|
-
To Publish to NPM, run the following command:
|
|
797
|
-
|
|
798
|
-
```typescript
|
|
799
|
-
npm publish --access public
|
|
800
|
-
```
|
|
56
|
+
This project’s **Contributing Guide** also acts as our **Design System Development Guide**.
|
|
57
|
+
It outlines the standards, workflows, naming conventions, and component principles that keep the Design System consistent, scalable, and easy for everyone to build on. Before you begin, please take a moment to read through it so your work aligns with our shared practices.
|
|
801
58
|
|
|
802
59
|
<!-- @joggr:editLink(b428f959-2d9d-45aa-8134-1d4f284d1469):start -->
|
|
803
60
|
|