@mirai/ui 1.0.59 → 1.0.61
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 +50 -8
- package/build/components/Button/Button.module.css +4 -4
- package/build/components/Calendar/Calendar.Month.js +2 -6
- package/build/components/Calendar/Calendar.Month.js.map +1 -1
- package/build/components/Calendar/__tests__/__snapshots__/Calendar.test.jsx.snap +240 -360
- package/build/components/InputNumber/InputNumber.js +2 -2
- package/build/components/InputNumber/InputNumber.js.map +1 -1
- package/build/components/InputNumber/__tests__/__snapshots__/InputNumber.test.js.snap +180 -260
- package/build/components/InputOption/InputOption.js +6 -4
- package/build/components/InputOption/InputOption.js.map +1 -1
- package/build/components/InputOption/InputOption.module.css +2 -1
- package/build/components/InputOption/InputOption.stories.js +1 -0
- package/build/components/InputOption/InputOption.stories.js.map +1 -1
- package/build/components/InputOption/__tests__/__snapshots__/InputOption.test.js.snap +103 -14
- package/build/components/InputSelect/InputSelect.js +2 -2
- package/build/components/InputSelect/InputSelect.js.map +1 -1
- package/build/components/InputSelect/__tests__/__snapshots__/InputSelect.test.js.snap +71 -54
- package/build/components/InputText/InputText.js +4 -4
- package/build/components/InputText/InputText.js.map +1 -1
- package/build/components/InputText/InputText.stories.js +6 -2
- package/build/components/InputText/InputText.stories.js.map +1 -1
- package/build/components/InputText/__tests__/__snapshots__/InputText.test.js.snap +20 -39
- package/build/components/Menu/Menu.Option.js +2 -2
- package/build/components/Menu/Menu.Option.js.map +1 -1
- package/build/components/Menu/Menu.js +2 -2
- package/build/components/Menu/Menu.js.map +1 -1
- package/build/components/Menu/Menu.stories.js +2 -3
- package/build/components/Menu/Menu.stories.js.map +1 -1
- package/build/components/Menu/__tests__/__snapshots__/Menu.test.jsx.snap +16 -33
- package/build/components/Modal/Modal.js +2 -2
- package/build/components/Modal/Modal.js.map +1 -1
- package/build/components/Modal/__tests__/__snapshots__/Modal.test.js.snap +28 -26
- package/build/components/Notification/Notification.js +11 -14
- package/build/components/Notification/Notification.js.map +1 -1
- package/build/components/Notification/__tests__/__snapshots__/Notification.test.js.snap +58 -73
- package/build/components/Table/Table.Row.js +1 -1
- package/build/components/Table/Table.Row.js.map +1 -1
- package/build/components/Table/__tests__/__snapshots__/Table.test.js.snap +200 -300
- package/build/helpers/getIconState.js +20 -0
- package/build/helpers/getIconState.js.map +1 -0
- package/build/helpers/index.js +4 -4
- package/build/helpers/index.js.map +1 -1
- package/build/primitives/Icon/Icon.constants.js +34 -34
- package/build/primitives/Icon/Icon.constants.js.map +1 -1
- package/build/primitives/Icon/Icon.js +8 -8
- package/build/primitives/Icon/Icon.js.map +1 -1
- package/build/primitives/Icon/Icon.stories.js +36 -12
- package/build/primitives/Icon/Icon.stories.js.map +1 -1
- package/build/primitives/Icon/__tests__/__snapshots__/Icon.test.js.snap +548 -58
- package/build/primitives/Icon/index.js +3 -3
- package/build/primitives/Icon/index.js.map +1 -1
- package/build/primitives/Switch/Switch.module.css +7 -0
- package/build/theme/default.theme.css +15 -7
- package/package.json +1 -1
- package/build/helpers/getIconName.js +0 -18
- package/build/helpers/getIconName.js.map +0 -1
package/README.md
CHANGED
|
@@ -40,19 +40,26 @@ const MyComponent = () => (
|
|
|
40
40
|
|
|
41
41
|
### Icon
|
|
42
42
|
|
|
43
|
-
This primitive returns a span with an icon based on a mandatory string prop `name
|
|
43
|
+
This primitive returns a span with an icon based on a mandatory string prop `name`.
|
|
44
|
+
|
|
45
|
+
- `action:boolean` modifying font-size
|
|
46
|
+
- `headline:boolean` modifying font-size (default headline:3)
|
|
47
|
+
- `level:number` assign the level of heading (1, 2, 3 or 4)
|
|
48
|
+
- `paragraph:boolean` modifying font-size
|
|
49
|
+
- `small:boolean` modifying font-size
|
|
50
|
+
- `value:func` Enum value
|
|
44
51
|
|
|
45
52
|
```jsx
|
|
46
|
-
import { Icon, View } from '@mirai/ui';
|
|
53
|
+
import { Icon, ICON, View } from '@mirai/ui';
|
|
47
54
|
|
|
48
55
|
const MyComponent = () => (
|
|
49
56
|
<View>
|
|
50
|
-
<Icon
|
|
57
|
+
<Icon value={ICON.LEFT} />
|
|
51
58
|
</View>
|
|
52
59
|
);
|
|
53
60
|
```
|
|
54
61
|
|
|
55
|
-
> ℹ️ Current available
|
|
62
|
+
> ℹ️ Current available values: Left, Right, Up, Down, Check, Add, Remove, ExpandLess, ExpandMore, EyeOpen, EyeClose, Close, Error, Info, Success, Warning, List, Lock, Bed, Calendar, Person, Account.
|
|
56
63
|
|
|
57
64
|
### Input
|
|
58
65
|
|
|
@@ -197,6 +204,40 @@ const MyComponent = () => (
|
|
|
197
204
|
--mirai-ui-radio-size: var(--mirai-ui-space-L);
|
|
198
205
|
```
|
|
199
206
|
|
|
207
|
+
### Switch
|
|
208
|
+
|
|
209
|
+
This primitive returns a _mobile_ checkbox button based on the following properties:
|
|
210
|
+
|
|
211
|
+
- `checked:boolean` if true, the checkbox button is checked
|
|
212
|
+
- `disabled:boolean` applying 'disabled' attribute
|
|
213
|
+
- `name:string` input name (required)
|
|
214
|
+
- `onChange:function` executed when input value changes
|
|
215
|
+
|
|
216
|
+
```jsx
|
|
217
|
+
import { Switch } from '@mirai/ui';
|
|
218
|
+
|
|
219
|
+
const MyComponent = () => (
|
|
220
|
+
<Switch
|
|
221
|
+
name="checkbox"
|
|
222
|
+
checked={false}
|
|
223
|
+
disabled={false}
|
|
224
|
+
onChange={() => console.log('change')}
|
|
225
|
+
/>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Theming variables**
|
|
229
|
+
|
|
230
|
+
```css
|
|
231
|
+
--mirai-ui-switch-base: var(--mirai-ui-base);
|
|
232
|
+
--mirai-ui-switch-border-color: var(--mirai-ui-content-light);
|
|
233
|
+
--mirai-ui-switch-border-size: calc(var(--mirai-ui-space-XS) / 4);
|
|
234
|
+
--mirai-ui-switch-border-radius: var(--mirai-ui-space-L);
|
|
235
|
+
--mirai-ui-switch-checked: var(--mirai-ui-accent);
|
|
236
|
+
--mirai-ui-switch-disabled: var(--mirai-ui-content-border);
|
|
237
|
+
--mirai-ui-switch-color-hover: var(--mirai-ui-content);
|
|
238
|
+
--mirai-ui-switch-size: var(--mirai-ui-space-L);
|
|
239
|
+
```
|
|
240
|
+
|
|
200
241
|
### ScrollView
|
|
201
242
|
|
|
202
243
|
This primitive is used to make vertically scrollable views and receives the following props:
|
|
@@ -315,7 +356,7 @@ const MyComponent = (props) => {
|
|
|
315
356
|
--mirai-ui-button-busy-motion: calc(var(--mirai-ui-motion-expand) * 10);
|
|
316
357
|
--mirai-ui-button-color: var(--mirai-ui-base);
|
|
317
358
|
--mirai-ui-button-color-active: rgba(255, 255, 255, 0.2);
|
|
318
|
-
--mirai-ui-button-color-
|
|
359
|
+
--mirai-ui-button-color-hover: var(--mirai-ui-content);
|
|
319
360
|
--mirai-ui-button-disabled-background: var(--mirai-ui-content-border);
|
|
320
361
|
--mirai-ui-button-disabled-color: var(--mirai-ui-content-light);
|
|
321
362
|
--mirai-ui-button-font: var(--mirai-ui-font);
|
|
@@ -426,6 +467,7 @@ This component is used to display a radio button or checkbox base on a mandatory
|
|
|
426
467
|
|
|
427
468
|
- `checked:boolean` if true, the input is checked
|
|
428
469
|
- `disabled:boolean` applying 'disabled' attribute
|
|
470
|
+
- `indeterminate:boolean` applying 'indeterminate' attribute (only for type checkbox)
|
|
429
471
|
- `label:string` input label
|
|
430
472
|
- `name:string` input name
|
|
431
473
|
- `reverse:boolean` if true the label is placed on the left side of the input element (false by default)
|
|
@@ -559,15 +601,15 @@ const MyComponent = () => {
|
|
|
559
601
|
<Menu
|
|
560
602
|
options={[
|
|
561
603
|
{ icon: 'EyeOpen', label: 'Show results', value: 1 },
|
|
562
|
-
{ icon: '
|
|
563
|
-
{ icon: '
|
|
604
|
+
{ icon: 'Add', label: 'Add item', disabled: true, value: 2 },
|
|
605
|
+
{ icon: 'Remove', label: 'Remove item', divider: true, value: 'three' },
|
|
564
606
|
{ label: 'Using child', children: <Button small>Add</Button>, value: 'four' },
|
|
565
607
|
]}
|
|
566
608
|
visible={visible}
|
|
567
609
|
onPress={(value, event) => console.log('<Menu>::onPress', value, event)}
|
|
568
610
|
>
|
|
569
611
|
<Button squared secondary onPress={() => setVisible(!visible)}>
|
|
570
|
-
<Icon name="
|
|
612
|
+
<Icon name="Add" />
|
|
571
613
|
</Button>
|
|
572
614
|
</Menu>;
|
|
573
615
|
};
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
.large:not(.squared) {
|
|
64
|
-
font-size: var(--mirai-ui-font-size-
|
|
64
|
+
font-size: var(--mirai-ui-font-size-paragraph);
|
|
65
65
|
padding: var(--mirai-ui-button-padding-y)
|
|
66
66
|
calc(var(--mirai-ui-button-padding-x) + calc(var(--mirai-ui-button-padding-y) / 2));
|
|
67
67
|
}
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.rounded {
|
|
80
|
-
border-radius:
|
|
80
|
+
border-radius: var(--mirai-ui-space-XXL);
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
.small:not(.squared) {
|
|
@@ -98,11 +98,11 @@
|
|
|
98
98
|
|
|
99
99
|
@media only screen and (min-width: 600px) {
|
|
100
100
|
.button:not(:disabled).secondary:hover:not(:active) {
|
|
101
|
-
box-shadow: inset 0 0 0 var(--mirai-ui-border-width) var(--mirai-ui-button-color-
|
|
101
|
+
box-shadow: inset 0 0 0 var(--mirai-ui-border-width) var(--mirai-ui-button-color-hover);
|
|
102
102
|
color: var(--mirai-ui-button-color-focus);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
.button:not(:disabled):not(.secondary):hover {
|
|
106
|
-
background-color: var(--mirai-ui-button-color-
|
|
106
|
+
background-color: var(--mirai-ui-button-color-hover);
|
|
107
107
|
}
|
|
108
108
|
}
|
|
@@ -74,9 +74,7 @@ var Month = function Month(_ref) {
|
|
|
74
74
|
onPress: onPrevious,
|
|
75
75
|
"data-testid": testID ? "".concat(testID, "-previous") : undefined
|
|
76
76
|
}, /*#__PURE__*/_react.default.createElement(_primitives.Icon, {
|
|
77
|
-
|
|
78
|
-
level: 4,
|
|
79
|
-
name: "Left"
|
|
77
|
+
value: _primitives.ICON.LEFT
|
|
80
78
|
})), /*#__PURE__*/_react.default.createElement(_primitives.Text, {
|
|
81
79
|
headline: true,
|
|
82
80
|
level: 4,
|
|
@@ -86,9 +84,7 @@ var Month = function Month(_ref) {
|
|
|
86
84
|
className: _CalendarModule.default.pressable,
|
|
87
85
|
"data-testid": testID ? "".concat(testID, "-next") : undefined
|
|
88
86
|
}, /*#__PURE__*/_react.default.createElement(_primitives.Icon, {
|
|
89
|
-
|
|
90
|
-
level: 4,
|
|
91
|
-
name: "Right"
|
|
87
|
+
value: _primitives.ICON.RIGHT
|
|
92
88
|
}))), isDesktop && /*#__PURE__*/_react.default.createElement(_Calendar3.Weekdays, {
|
|
93
89
|
locale: locale
|
|
94
90
|
}), _Calendar.VISIBLE_WEEKS.map(function (week) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.Month.js","names":["Month","focus","instance","selected","disabledPast","format","from","locale","range","to","onChange","onFocus","onNext","onPrevious","others","isDesktop","weekNumber","testID","style","month","className","header","undefined","title","pressable","VISIBLE_WEEKS","map","week","getMonth","getFullYear","displayName","propTypes","captions","PropTypes","shape","any","disabledDates","arrayOf","string","bool","instanceOf","Date","value","oneOfType","func"],"sources":["../../../src/components/Calendar/Calendar.Month.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { styles } from '../../helpers';\nimport { useDevice } from '../../hooks';\nimport { Icon, Pressable, Text, View } from '../../primitives';\nimport { VISIBLE_WEEKS } from './Calendar.constants';\nimport style from './Calendar.module.css';\nimport { Week } from './Calendar.Week';\nimport { Weekdays } from './Calendar.Weekdays';\nimport { getHeader, getWeekNumber } from './helpers';\n\nexport const Month = ({\n focus,\n instance,\n selected,\n disabledPast,\n format,\n from,\n locale,\n range = false,\n to,\n onChange = () => {},\n onFocus = () => {},\n onNext,\n onPrevious,\n ...others\n}) => {\n const { isDesktop } = useDevice();\n const weekNumber = getWeekNumber(instance);\n\n const { ['data-testid']: testID } = others;\n\n return (\n <View className={styles(style.month, others.className)}>\n <View row className={style.header}>\n {onPrevious && (\n <Pressable onPress={onPrevious} data-testid={testID ? `${testID}-previous` : undefined}>\n <Icon
|
|
1
|
+
{"version":3,"file":"Calendar.Month.js","names":["Month","focus","instance","selected","disabledPast","format","from","locale","range","to","onChange","onFocus","onNext","onPrevious","others","isDesktop","weekNumber","testID","style","month","className","header","undefined","ICON","LEFT","title","pressable","RIGHT","VISIBLE_WEEKS","map","week","getMonth","getFullYear","displayName","propTypes","captions","PropTypes","shape","any","disabledDates","arrayOf","string","bool","instanceOf","Date","value","oneOfType","func"],"sources":["../../../src/components/Calendar/Calendar.Month.jsx"],"sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { styles } from '../../helpers';\nimport { useDevice } from '../../hooks';\nimport { Icon, ICON, Pressable, Text, View } from '../../primitives';\nimport { VISIBLE_WEEKS } from './Calendar.constants';\nimport style from './Calendar.module.css';\nimport { Week } from './Calendar.Week';\nimport { Weekdays } from './Calendar.Weekdays';\nimport { getHeader, getWeekNumber } from './helpers';\n\nexport const Month = ({\n focus,\n instance,\n selected,\n disabledPast,\n format,\n from,\n locale,\n range = false,\n to,\n onChange = () => {},\n onFocus = () => {},\n onNext,\n onPrevious,\n ...others\n}) => {\n const { isDesktop } = useDevice();\n const weekNumber = getWeekNumber(instance);\n\n const { ['data-testid']: testID } = others;\n\n return (\n <View className={styles(style.month, others.className)}>\n <View row className={style.header}>\n {onPrevious && (\n <Pressable onPress={onPrevious} data-testid={testID ? `${testID}-previous` : undefined}>\n <Icon value={ICON.LEFT} />\n </Pressable>\n )}\n <Text headline level={4} className={style.title}>\n {getHeader(instance, locale)}\n </Text>\n {onNext && (\n <Pressable onPress={onNext} className={style.pressable} data-testid={testID ? `${testID}-next` : undefined}>\n <Icon value={ICON.RIGHT} />\n </Pressable>\n )}\n </View>\n\n {isDesktop && <Weekdays locale={locale} />}\n\n {VISIBLE_WEEKS.map((week) => (\n <Week\n {...{\n ...others,\n disabledPast,\n focus,\n format,\n from,\n locale,\n to,\n range,\n selected,\n }}\n key={week}\n month={instance.getMonth()}\n number={weekNumber + week}\n year={instance.getFullYear()}\n onFocus={onFocus}\n onPress={onChange}\n />\n ))}\n </View>\n );\n};\n\nMonth.displayName = 'Component:Calendar:Month';\n\nMonth.propTypes = {\n captions: PropTypes.shape({}),\n focus: PropTypes.any,\n instance: PropTypes.any,\n selected: PropTypes.any,\n disabledDates: PropTypes.arrayOf(PropTypes.string),\n disabledPast: PropTypes.bool,\n format: PropTypes.string,\n from: PropTypes.instanceOf(Date),\n locale: PropTypes.string,\n range: PropTypes.bool,\n to: PropTypes.instanceOf(Date),\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.string)]),\n onChange: PropTypes.func,\n onFocus: PropTypes.func,\n onNext: PropTypes.func,\n onPrevious: PropTypes.func,\n};\n"],"mappings":"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"}
|