@vonage/vivid-react 0.0.1 → 2.10.56

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.
Files changed (101) hide show
  1. package/.storybook/main.js +11 -0
  2. package/.storybook/preview.js +3 -0
  3. package/README.md +183 -0
  4. package/babel.config.js +38 -0
  5. package/package.json +135 -7
  6. package/rollup.config.js +30 -0
  7. package/scripts/cli.js +28 -0
  8. package/scripts/generateWrappers/consts.js +226 -0
  9. package/scripts/generateWrappers/generator.js +130 -0
  10. package/scripts/generateWrappers/helpers/generator.js +18 -0
  11. package/scripts/generateWrappers/helpers/generator.test.js +56 -0
  12. package/scripts/generateWrappers/index.js +0 -0
  13. package/scripts/generateWrappers/prop.types.js +86 -0
  14. package/scripts/generateWrappers/templates/js/index.tmpl +2 -0
  15. package/scripts/generateWrappers/templates/js/react-component.tmpl +30 -0
  16. package/scripts/generateWrappers/templates/js/stories.tmpl +18 -0
  17. package/scripts/generateWrappers/templates/templates.js +36 -0
  18. package/scripts/generateWrappers/templates/ts/index.tmpl +2 -0
  19. package/scripts/generateWrappers/templates/ts/react-component.tmpl +28 -0
  20. package/scripts/generateWrappers/utils.js +226 -0
  21. package/scripts/generateWrappers/utils.test.js +71 -0
  22. package/scripts/updateDocs.js +42 -0
  23. package/scripts/updateVividPackages.js +81 -0
  24. package/src/dataGrid/index.js +15 -0
  25. package/src/index.js +3 -0
  26. package/src/initialization/initVivid.js +24 -0
  27. package/src/patches/VwcCard/index.js +2 -0
  28. package/src/patches/VwcCard/vwcCardHeadingCrop.js +28 -0
  29. package/src/patches/VwcCard/vwcCardWithMenu.js +14 -0
  30. package/src/patches/index.js +6 -0
  31. package/src/patches/vwcDataGrid.js +26 -0
  32. package/src/patches/vwcNoteContentOverflow.js +20 -0
  33. package/src/patches/vwcSetAttributeValue.js +12 -0
  34. package/src/patches/vwcSnackBarHtmlMessage.js +21 -0
  35. package/src/patches/vwcTooltip.js +46 -0
  36. package/stories/VwcAccordion/VwcAccordion.stories.jsx +18 -0
  37. package/stories/VwcActionGroup/VwcActionGroup.stories.jsx +18 -0
  38. package/stories/VwcBadge/VwcBadge.stories.jsx +18 -0
  39. package/stories/VwcBanner/VwcBanner.stories.jsx +18 -0
  40. package/stories/VwcButton/VwcButton.stories.jsx +18 -0
  41. package/stories/VwcButtonToggleGroup/VwcButtonToggleGroup.stories.jsx +47 -0
  42. package/stories/VwcCalendar/VwcCalendar.stories.jsx +18 -0
  43. package/stories/VwcCalendarEvent/VwcCalendarEvent.stories.jsx +18 -0
  44. package/stories/VwcCard/VwcCard.stories.jsx +90 -0
  45. package/stories/VwcCarousel/VwcCarousel.stories.jsx +18 -0
  46. package/stories/VwcCarouselItem/VwcCarouselItem.stories.jsx +18 -0
  47. package/stories/VwcCheckListItem/VwcCheckListItem.stories.jsx +18 -0
  48. package/stories/VwcCheckbox/VwcCheckbox.stories.jsx +18 -0
  49. package/stories/VwcChip/VwcChip.stories.jsx +18 -0
  50. package/stories/VwcChipSet/VwcChipSet.stories.jsx +38 -0
  51. package/stories/VwcCircularProgress/VwcCircularProgress.stories.jsx +18 -0
  52. package/stories/VwcDataGrid/VwcDataGrid.stories.jsx +109 -0
  53. package/stories/VwcDataGridColumn/VwcDataGridColumn.stories.jsx +18 -0
  54. package/stories/VwcDatepicker/VwcDatepicker.stories.jsx +18 -0
  55. package/stories/VwcDialog/VwcDialog.stories.jsx +18 -0
  56. package/stories/VwcDrawer/VwcDrawer.stories.jsx +18 -0
  57. package/stories/VwcDropdown/VwcDropdown.stories.jsx +18 -0
  58. package/stories/VwcElevation/VwcElevation.stories.jsx +18 -0
  59. package/stories/VwcEmptyState/VwcEmptyState.stories.jsx +18 -0
  60. package/stories/VwcExpansionPanel/VwcExpansionPanel.stories.jsx +18 -0
  61. package/stories/VwcFab/VwcFab.stories.jsx +18 -0
  62. package/stories/VwcFilePicker/VwcFilePicker.stories.jsx +18 -0
  63. package/stories/VwcFormfield/VwcFormfield.stories.jsx +18 -0
  64. package/stories/VwcHelperMessage/VwcHelperMessage.stories.jsx +18 -0
  65. package/stories/VwcIcon/VwcIcon.stories.jsx +18 -0
  66. package/stories/VwcIconButton/VwcIconButton.stories.jsx +18 -0
  67. package/stories/VwcIconButtonToggle/VwcIconButtonToggle.stories.jsx +18 -0
  68. package/stories/VwcKeypad/VwcKeypad.stories.jsx +18 -0
  69. package/stories/VwcLayout/VwcLayout.stories.jsx +63 -0
  70. package/stories/VwcLinearProgress/VwcLinearProgress.stories.jsx +18 -0
  71. package/stories/VwcList/VwcList.stories.jsx +25 -0
  72. package/stories/VwcListExpansionPanel/VwcListExpansionPanel.stories.jsx +18 -0
  73. package/stories/VwcListItem/VwcListItem.stories.jsx +18 -0
  74. package/stories/VwcMenu/VwcMenu.stories.jsx +41 -0
  75. package/stories/VwcNotchedOutline/VwcNotchedOutline.stories.jsx +18 -0
  76. package/stories/VwcNote/VwcNote.stories.jsx +18 -0
  77. package/stories/VwcPagination/VwcPagination.stories.jsx +18 -0
  78. package/stories/VwcPopup/VwcPopup.stories.jsx +18 -0
  79. package/stories/VwcRadio/VwcRadio.stories.jsx +18 -0
  80. package/stories/VwcRadioListItem/VwcRadioListItem.stories.jsx +18 -0
  81. package/stories/VwcSchemeSelect/VwcSchemeSelect.stories.jsx +18 -0
  82. package/stories/VwcSelect/VwcSelect.stories.jsx +18 -0
  83. package/stories/VwcSideDrawer/VwcSideDrawer.stories.jsx +18 -0
  84. package/stories/VwcSlider/VwcSlider.stories.jsx +18 -0
  85. package/stories/VwcSnackbar/VwcSnackbar.stories.jsx +18 -0
  86. package/stories/VwcSurface/VwcSurface.stories.jsx +18 -0
  87. package/stories/VwcSwitch/VwcSwitch.stories.jsx +18 -0
  88. package/stories/VwcTab/VwcTab.stories.jsx +18 -0
  89. package/stories/VwcTabBar/VwcTabBar.stories.jsx +63 -0
  90. package/stories/VwcTag/VwcTag.stories.jsx +18 -0
  91. package/stories/VwcText/VwcText.stories.jsx +18 -0
  92. package/stories/VwcTextarea/VwcTextarea.stories.jsx +24 -0
  93. package/stories/VwcTextfield/VwcTextfield.stories.jsx +47 -0
  94. package/stories/VwcThemeSwitch/VwcThemeSwitch.stories.jsx +18 -0
  95. package/stories/VwcTooltip/VwcTooltip.stories.jsx +41 -0
  96. package/stories/VwcTopAppBar/VwcTopAppBar.stories.jsx +18 -0
  97. package/stories/VwcTopAppBarFixed/VwcTopAppBarFixed.stories.jsx +18 -0
  98. package/stories/patches/patches.stories.jsx +94 -0
  99. package/testing/component.mock.js +3 -0
  100. package/tsconfig.json +70 -0
  101. package/types/index.d.ts +2 -0
@@ -0,0 +1,11 @@
1
+ module.exports = {
2
+ "stories": [
3
+ "../**/*.stories.mdx",
4
+ "../**/*.stories.@(js|jsx|ts|tsx)"
5
+ ],
6
+ "addons": [
7
+ "@storybook/addon-links",
8
+ "@storybook/addon-essentials",
9
+ "@storybook/addon-actions"
10
+ ]
11
+ }
@@ -0,0 +1,3 @@
1
+ export const parameters = {
2
+ actions: { argTypesRegex: "^on[A-Z].*" },
3
+ }
package/README.md ADDED
@@ -0,0 +1,183 @@
1
+ # @vonage/vivid-react
2
+
3
+ Vivid-react is a script allowing you to generate `Vivid-React` components for the newest version of `Vivid` components stored as a package with all necessary dependencies and available through Artifactory npm registry.
4
+
5
+ The main goal of output package is to provide a better developer experience when using `Vivid` inside of `React` typescript applications. We still use regular `Vivid` web components, so be sure to target a recent browser.
6
+
7
+ Goals:
8
+ * wrap adding handlers for events like `change` which natively doesn't work in the environment
9
+ * mocks for Jest
10
+ * typing support (prop-types or typescript)
11
+ * a handy interface for initialisation (eg. fonts)
12
+ * getting advantages of JSX/TSX (eg. composed components*)
13
+ * all components within one package**
14
+ * storybook acting as developer sandbox for presenting quick examples
15
+ * one place for all future vivid-related code to use with React
16
+
17
+ *may provide a cut off at props inherited from MWC source.
18
+
19
+ **now also implemented in _raw_ Vivid.
20
+
21
+ # Similar strongly typed wrappers for other frameworks?
22
+ * https://github.com/Vonage/vivid-vue
23
+
24
+ # Why is this repository exists?
25
+
26
+ [![Using Web Components in React - Web Component Essentials](https://img.youtube.com/vi/o1dMXrIv3Q8/0.jpg)](https://www.youtube.com/watch?v=o1dMXrIv3Q8)
27
+
28
+ ## Supported components
29
+ Here's the list of all available wrappers, with the `Vivid` package name and version used to generate each one.
30
+ If you need to use a different version of a `Vivid` component, simply add it to your application's `package.json`.
31
+ Adding the `resolutions` field when using `yarn` might help get the correct version installed.
32
+
33
+ | Component Name | Package Name | Package Version |
34
+ |----------------|--------------|-----------------|
35
+ | VwcAccordion | @vonage/vwc-accordion | 2.42.0 |
36
+ | VwcActionGroup | @vonage/vwc-action-group | 2.42.0 |
37
+ | VwcBadge | @vonage/vwc-badge | 2.42.0 |
38
+ | VwcBanner | @vonage/vwc-banner | 2.42.0 |
39
+ | VwcButton | @vonage/vwc-button | 2.42.0 |
40
+ | VwcButtonToggleGroup | @vonage/vwc-button-toggle-group | 2.42.0 |
41
+ | VwcCalendar | @vonage/vwc-calendar | 2.42.0 |
42
+ | VwcCard | @vonage/vwc-card | 2.42.0 |
43
+ | VwcCarousel | @vonage/vwc-carousel | 2.42.0 |
44
+ | VwcCheckbox | @vonage/vwc-checkbox | 2.42.0 |
45
+ | VwcChips | @vonage/vwc-chips | 2.42.0 |
46
+ | VwcCircularProgress | @vonage/vwc-circular-progress | 2.42.0 |
47
+ | VwcDataGrid | @vonage/vwc-data-grid | 2.42.0 |
48
+ | VwcDatepicker | @vonage/vwc-datepicker | 2.42.0 |
49
+ | VwcDialog | @vonage/vwc-dialog | 2.42.0 |
50
+ | VwcDrawer | @vonage/vwc-drawer | 2.42.0 |
51
+ | VwcDropdown | @vonage/vwc-dropdown | 2.42.0 |
52
+ | VwcElevation | @vonage/vwc-elevation | 2.42.0 |
53
+ | VwcEmptyState | @vonage/vwc-empty-state | 2.42.0 |
54
+ | VwcExpansionPanel | @vonage/vwc-expansion-panel | 2.42.0 |
55
+ | VwcFab | @vonage/vwc-fab | 2.42.0 |
56
+ | VwcFilePicker | @vonage/vwc-file-picker | 2.42.0 |
57
+ | VwcFormfield | @vonage/vwc-formfield | 2.42.0 |
58
+ | VwcHelperMessage | @vonage/vwc-helper-message | 2.42.0 |
59
+ | VwcIcon | @vonage/vwc-icon | 2.42.0 |
60
+ | VwcIconButton | @vonage/vwc-icon-button | 2.42.0 |
61
+ | VwcIconButtonToggle | @vonage/vwc-icon-button-toggle | 2.42.0 |
62
+ | VwcKeypad | @vonage/vwc-keypad | 2.42.0 |
63
+ | VwcLayout | @vonage/vwc-layout | 2.42.0 |
64
+ | VwcLinearProgress | @vonage/vwc-linear-progress | 2.42.0 |
65
+ | VwcList | @vonage/vwc-list | 2.42.0 |
66
+ | VwcMenu | @vonage/vwc-menu | 2.42.0 |
67
+ | VwcNotchedOutline | @vonage/vwc-notched-outline | 2.42.0 |
68
+ | VwcNote | @vonage/vwc-note | 2.42.0 |
69
+ | VwcPagination | @vonage/vwc-pagination | 2.42.0 |
70
+ | VwcPopup | @vonage/vwc-popup | 2.42.0 |
71
+ | VwcRadio | @vonage/vwc-radio | 2.42.0 |
72
+ | VwcSchemeSelect | @vonage/vwc-scheme-select | 2.42.0 |
73
+ | VwcSelect | @vonage/vwc-select | 2.42.0 |
74
+ | VwcSideDrawer | @vonage/vwc-side-drawer | 2.42.0 |
75
+ | VwcSlider | @vonage/vwc-slider | 2.42.0 |
76
+ | VwcSnackbar | @vonage/vwc-snackbar | 2.42.0 |
77
+ | VwcSurface | @vonage/vwc-surface | 2.42.0 |
78
+ | VwcSwitch | @vonage/vwc-switch | 2.42.0 |
79
+ | VwcTabBar | @vonage/vwc-tab-bar | 2.42.0 |
80
+ | VwcTags | @vonage/vwc-tags | 2.42.0 |
81
+ | VwcText | @vonage/vwc-text | 2.42.0 |
82
+ | VwcTextarea | @vonage/vwc-textarea | 2.42.0 |
83
+ | VwcTextfield | @vonage/vwc-textfield | 2.42.0 |
84
+ | VwcThemeSwitch | @vonage/vwc-theme-switch | 2.42.0 |
85
+ | VwcTooltip | @vonage/vwc-tooltip | 2.42.0 |
86
+ | VwcTopAppBar | @vonage/vwc-top-app-bar | 2.42.0 |
87
+ | VwcTopAppBarFixed | @vonage/vwc-top-app-bar-fixed | 2.42.0 |
88
+
89
+ If the one you're looking for is missing, just [add a new one](#adding-a-component), so everyone can access them.
90
+
91
+ # Usage
92
+
93
+ ## Artifactory
94
+ To use this package, you need to have Artifactory setup for your project. See how to do it [here](https://confluence.vonage.com/pages/viewpage.action?pageId=123601806) and [here](https://github.com/newvoicemedia/vonage-cli/blob/master/pipeline-guide/how-to/NODEJS-NPM-DEVELOPMENT.md).
95
+
96
+ ## Installation
97
+ Once you have Artifactory configured, just run:
98
+ ```shell
99
+ $ yarn add @vonage/vivid-react
100
+ ```
101
+ No need for importing `vivid` directly. The dependencies will be installed for you.
102
+
103
+ ## Initialization
104
+
105
+ ```javascript
106
+ // Function
107
+ import ReactDOM from 'react-dom'
108
+ import { initVivid } from '@vonage/vivid-react'
109
+ const rootElement = document.getElementById('react-root')
110
+ const renderApp = () => {
111
+ // do some more initialization before rendering the main App
112
+ ReactDOM.render(
113
+ <App />,
114
+ rootElement
115
+ )
116
+ }
117
+
118
+ initVivid(rootElement).then(renderApp)
119
+ ```
120
+
121
+ ## Importing
122
+ Instead of importing each `vivid` component from `@vonage/vwc-*`, import them from `@vonage/vivid-react` instead.
123
+ ```javascript
124
+ import VwcCheckbox from '@vonage/vivid-react/VwcCheckbox'
125
+ import VwcSlider from '@vonage/vivid-react/VwcSlider'
126
+ ```
127
+
128
+ ## Bundling
129
+ This package is an ES module, so you might need to add some configuration to your bundling process.
130
+
131
+ ## Testing
132
+ If you have problems rendering `vivid` when using Jest/Enzyme combo, you can add this to your `package.json` to replace all `Vivid` wrapped components with an empty React component.
133
+ It'll work also for _raw_ `vivid` components used in project, since js-dom doesn't support shadow DOM.
134
+
135
+ ```json
136
+ {
137
+ "jest": {
138
+ "moduleNameMapper": {
139
+ "@vonage\/vwc": "@vonage/vivid-react/testing/component.mock.js"
140
+ },
141
+ "transformIgnorePatterns": [
142
+ "node_modules/(?!(@cct|@vonage|@lit|lit-html|lit-element)/)"
143
+ ]
144
+ }
145
+ }
146
+ ```
147
+
148
+ # Development
149
+
150
+ ## Adding a component
151
+ Follow the steps:
152
+ * clone this repo
153
+ * create a branch
154
+ * add the missing vivid component as a `dependency` in `package.json`
155
+ * create a new PR and get it merged to `master`
156
+ * [publish](#publishing-a-new-version) new version
157
+ * install the new package in your application
158
+
159
+ ## Publishing a new version
160
+ When you want to release the latest changes, checkout the latest `master` branch and run:
161
+
162
+ ```shell
163
+ $ yarn version --new-version {minor/major/patch}
164
+ ```
165
+
166
+ ### Selecting new version number:
167
+ - `patch` - fixing some small issue, without new functionality
168
+ - `minor` - after adding support for a new component, or adding a new awesome feature
169
+ - `major` - after breaking or major package changes
170
+
171
+ ## Storybook
172
+
173
+ For test/development storybook is in game. Stories are generated automatically per component
174
+ with no arguments/properties, fill them before using component.
175
+
176
+ ## Compound Components
177
+
178
+ In the `scripts/generateWrappers/consts.js` you can define sets of compound components. All they do is filling default props. They are accessible after a dot:
179
+ ```javascript
180
+ <VwcButton.Alert />
181
+ ```
182
+
183
+ *This is the end*
@@ -0,0 +1,38 @@
1
+ module.exports = {
2
+ // ••••••••••••••••••••••••••••••••••
3
+ presets: [
4
+ '@babel/preset-react',
5
+ [
6
+ '@babel/preset-env',
7
+ {
8
+ modules: false,
9
+ corejs: '3',
10
+ useBuiltIns: 'entry'
11
+ }
12
+ ]
13
+ ],
14
+
15
+ // ••••••••••••••••••••••••••••••••••
16
+ plugins: [
17
+ '@babel/plugin-transform-runtime'
18
+ ],
19
+
20
+ // ••••••••••••••••••••••••••••••••••
21
+ env: {
22
+ // --------------------------------
23
+ test: {
24
+ presets: [
25
+ [
26
+ '@babel/preset-env',
27
+ {
28
+ targets: {
29
+ node: 'current'
30
+ }
31
+ }
32
+ ]
33
+ ],
34
+ sourceMaps: true,
35
+ retainLines: true
36
+ }
37
+ }
38
+ }
package/package.json CHANGED
@@ -1,12 +1,140 @@
1
1
  {
2
2
  "name": "@vonage/vivid-react",
3
- "version": "0.0.1",
4
- "description": "",
3
+ "version": "2.10.56",
4
+ "description": "Vivid wrapped for easy React usage & IDE autocomplete support & typescript typings",
5
5
  "main": "index.js",
6
+ "types": "types/index.d.ts",
7
+ "license": "MIT",
6
8
  "scripts": {
7
- "test": "echo \"Error: no test specified\" && exit 1"
9
+ "build": "yarn generateWrappers && rollup -c",
10
+ "generateWrappers": "node scripts/cli.js",
11
+ "test": "jest",
12
+ "test:watch": "jest --watch",
13
+ "preversion": "yarn updateDocs && git add README.md",
14
+ "postversion": "git push --follow-tags",
15
+ "storybook": "start-storybook -p 6006",
16
+ "prestorybook": "yarn generateWrappers",
17
+ "updateDocs": "node scripts/updateDocs.js",
18
+ "updateVividPackages": "node scripts/updateVividPackages.js"
8
19
  },
9
- "keywords": [],
10
- "author": "",
11
- "license": "ISC"
12
- }
20
+ "keywords": [
21
+ "Vivid",
22
+ "React",
23
+ "Custom Element",
24
+ "Wrapper",
25
+ "Utility",
26
+ "Generator",
27
+ "CLI"
28
+ ],
29
+ "dependencies": {
30
+ "@vonage/vivid-react-wrapper": "1.2.9",
31
+ "@vonage/vvd-context": "2.42.0",
32
+ "@vonage/vvd-core": "2.42.0",
33
+ "@vonage/vvd-fonts": "2.42.0",
34
+ "@vonage/vwc-accordion": "2.42.0",
35
+ "@vonage/vwc-action-group": "2.42.0",
36
+ "@vonage/vwc-badge": "2.42.0",
37
+ "@vonage/vwc-banner": "2.42.0",
38
+ "@vonage/vwc-button": "2.42.0",
39
+ "@vonage/vwc-button-toggle-group": "2.42.0",
40
+ "@vonage/vwc-calendar": "2.42.0",
41
+ "@vonage/vwc-card": "2.42.0",
42
+ "@vonage/vwc-carousel": "2.42.0",
43
+ "@vonage/vwc-checkbox": "2.42.0",
44
+ "@vonage/vwc-chips": "2.42.0",
45
+ "@vonage/vwc-circular-progress": "2.42.0",
46
+ "@vonage/vwc-data-grid": "2.42.0",
47
+ "@vonage/vwc-datepicker": "2.42.0",
48
+ "@vonage/vwc-dialog": "2.42.0",
49
+ "@vonage/vwc-drawer": "2.42.0",
50
+ "@vonage/vwc-dropdown": "2.42.0",
51
+ "@vonage/vwc-elevation": "2.42.0",
52
+ "@vonage/vwc-empty-state": "2.42.0",
53
+ "@vonage/vwc-expansion-panel": "2.42.0",
54
+ "@vonage/vwc-fab": "2.42.0",
55
+ "@vonage/vwc-file-picker": "2.42.0",
56
+ "@vonage/vwc-formfield": "2.42.0",
57
+ "@vonage/vwc-helper-message": "2.42.0",
58
+ "@vonage/vwc-icon": "2.42.0",
59
+ "@vonage/vwc-icon-button": "2.42.0",
60
+ "@vonage/vwc-icon-button-toggle": "2.42.0",
61
+ "@vonage/vwc-keypad": "2.42.0",
62
+ "@vonage/vwc-layout": "2.42.0",
63
+ "@vonage/vwc-linear-progress": "2.42.0",
64
+ "@vonage/vwc-list": "2.42.0",
65
+ "@vonage/vwc-menu": "2.42.0",
66
+ "@vonage/vwc-notched-outline": "2.42.0",
67
+ "@vonage/vwc-note": "2.42.0",
68
+ "@vonage/vwc-pagination": "2.42.0",
69
+ "@vonage/vwc-popup": "2.42.0",
70
+ "@vonage/vwc-radio": "2.42.0",
71
+ "@vonage/vwc-scheme-select": "2.42.0",
72
+ "@vonage/vwc-select": "2.42.0",
73
+ "@vonage/vwc-side-drawer": "2.42.0",
74
+ "@vonage/vwc-slider": "2.42.0",
75
+ "@vonage/vwc-snackbar": "2.42.0",
76
+ "@vonage/vwc-surface": "2.42.0",
77
+ "@vonage/vwc-switch": "2.42.0",
78
+ "@vonage/vwc-tab-bar": "2.42.0",
79
+ "@vonage/vwc-tags": "2.42.0",
80
+ "@vonage/vwc-text": "2.42.0",
81
+ "@vonage/vwc-textarea": "2.42.0",
82
+ "@vonage/vwc-textfield": "2.42.0",
83
+ "@vonage/vwc-theme-switch": "2.42.0",
84
+ "@vonage/vwc-tooltip": "2.42.0",
85
+ "@vonage/vwc-top-app-bar": "2.42.0",
86
+ "@vonage/vwc-top-app-bar-fixed": "2.42.0"
87
+ },
88
+ "devDependencies": {
89
+ "@babel/core": "^7.15.5",
90
+ "@babel/plugin-transform-runtime": "^7.15.0",
91
+ "@babel/preset-env": "^7.15.6",
92
+ "@babel/preset-react": "^7.14.5",
93
+ "@babel/runtime": "^7.13.17",
94
+ "@material-ui/core": "^4.11.1",
95
+ "@octokit/core": "^3.1.2",
96
+ "@rollup/plugin-babel": "^5.2.2",
97
+ "@rollup/plugin-commonjs": "^17.0.0",
98
+ "@rollup/plugin-node-resolve": "^11.0.0",
99
+ "@storybook/addon-actions": "6.5.13",
100
+ "@storybook/addon-controls": "6.5.13",
101
+ "@storybook/addon-essentials": "6.5.13",
102
+ "@storybook/addon-links": "6.5.13",
103
+ "@storybook/addons": "6.5.13",
104
+ "@storybook/react": "6.5.13",
105
+ "@types/react": "16.9.49",
106
+ "@webcomponents/webcomponentsjs": "^2.5.0",
107
+ "babel-jest": "^26.6.1",
108
+ "babel-loader": "^8.2.2",
109
+ "extract-zip": "2.0.1",
110
+ "fs-extra": "^9.0.1",
111
+ "jest": "^26.6.1",
112
+ "lodash": "^4.17.20",
113
+ "mkdirp": "1.0.4",
114
+ "ora": "^5.1.0",
115
+ "react": ">=16.8",
116
+ "react-dom": ">=16.8",
117
+ "rollup": "^2.35.0",
118
+ "rollup-plugin-auto-external": "^2.0.0",
119
+ "standard": "^16.0.4",
120
+ "typescript": "4.3.5",
121
+ "web-component-analyzer": "2.0.0-next.4"
122
+ },
123
+ "resolutions": {
124
+ "glob-parent": "^5.1.2",
125
+ "trim": "^0.0.3",
126
+ "trim-newlines": "^3.0.1",
127
+ "terser": "^5.14.2",
128
+ "loader-utils": "2.0.4"
129
+ },
130
+ "peerDependencies": {
131
+ "react": ">=16.8",
132
+ "react-dom": ">=16.8"
133
+ },
134
+ "engines": {
135
+ "node": ">=14.0.0"
136
+ },
137
+ "optionalDependencies": {
138
+ "prop-types": "^15.7.2"
139
+ }
140
+ }
@@ -0,0 +1,30 @@
1
+ import babel from '@rollup/plugin-babel'
2
+ import commonjs from '@rollup/plugin-commonjs'
3
+ import autoExternal from 'rollup-plugin-auto-external'
4
+ import resolve from '@rollup/plugin-node-resolve'
5
+
6
+ const OUTPUT_DIR = './dist'
7
+
8
+ export default {
9
+ input: 'src/index.js',
10
+ output: [
11
+ {
12
+ file: `${OUTPUT_DIR}/index.js`,
13
+ format: 'cjs',
14
+ exports: 'auto'
15
+ }
16
+ ],
17
+ plugins: [
18
+ resolve({
19
+ extensions: ['.js', '.json', '.node']
20
+ }),
21
+ babel({
22
+ babelHelpers: 'runtime',
23
+ exclude: /node_modules/
24
+ }),
25
+ commonjs({
26
+ include: /node_modules/
27
+ }),
28
+ autoExternal()
29
+ ]
30
+ }
package/scripts/cli.js ADDED
@@ -0,0 +1,28 @@
1
+ const { OutputLanguage, CLIArgument, WCAConfigAll, FileName, Assets } = require('./generateWrappers/consts')
2
+ const { generateWrappers } = require('./generateWrappers/generator')
3
+ const {
4
+ isFileExists,
5
+ getParsedJson,
6
+ getVividPackageNames,
7
+ getInputArgument,
8
+ getVividLatestRelease,
9
+ getCustomElementTagsDefinitionsList,
10
+ copyStaticAssets
11
+ } = require('./generateWrappers/utils')
12
+
13
+ const outputDir = getInputArgument(CLIArgument.Output, FileName.defaultOutputDirectory)
14
+ const language = getInputArgument(CLIArgument.Language, OutputLanguage.JavaScript)
15
+ const staticAssets = getInputArgument(CLIArgument.Assets, Assets)
16
+ const cleanTemp = getInputArgument(CLIArgument.CleanTemp, true) !== 'false'
17
+
18
+ getInputArgument(CLIArgument.All)
19
+ ? getVividLatestRelease()
20
+ .then(getCustomElementTagsDefinitionsList(WCAConfigAll))
21
+ .then(generateWrappers(outputDir, language, cleanTemp))
22
+ .then(copyStaticAssets(outputDir, staticAssets))
23
+ : isFileExists(FileName.packageJson)
24
+ .then(getParsedJson)
25
+ .then(getVividPackageNames)
26
+ .then(getCustomElementTagsDefinitionsList())
27
+ .then(generateWrappers(outputDir, language, cleanTemp))
28
+ .then(copyStaticAssets(outputDir, staticAssets))
@@ -0,0 +1,226 @@
1
+ const FileName = {
2
+ packageJson: 'package.json',
3
+ tempFolder: 'temp',
4
+ tempFileName: 'analyzerOutput.json',
5
+ tempTsFolder: 'ts',
6
+ tempVividZipball: 'vivid.zip',
7
+ defaultOutputDirectory: 'dist',
8
+ storyOutputDir: 'stories',
9
+ readme: 'README.md',
10
+ testing: 'testing',
11
+ types: 'types'
12
+ }
13
+
14
+ const Assets = [
15
+ FileName.packageJson,
16
+ FileName.readme,
17
+ FileName.testing,
18
+ FileName.types
19
+ ].join(',')
20
+
21
+ const VividRepo = 'Vonage/vivid'
22
+
23
+ const WCAConfig = {
24
+ tempFolder: FileName.tempFolder,
25
+ tempFileName: FileName.tempFileName,
26
+ nodeArgumentsFactory: (packageNames, analyzerOutputFile) => [
27
+ './node_modules/web-component-analyzer/cli.js',
28
+ 'analyze',
29
+ `node_modules/{${packageNames.join(',')}}/{src/,}*.?s`,
30
+ '--discoverNodeModules',
31
+ '--format', 'json',
32
+ '--outFile', analyzerOutputFile
33
+ ]
34
+ }
35
+
36
+ const WCAConfigAll = {
37
+ tempFolder: FileName.tempFolder,
38
+ tempFileName: FileName.tempFileName,
39
+ nodeArgumentsFactory: (targetFolder, analyzerOutputFile) => [
40
+ './node_modules/web-component-analyzer/cli.js',
41
+ 'analyze',
42
+ `${targetFolder}/{src/,}*.?s`,
43
+ '--format', 'json',
44
+ '--outFile', analyzerOutputFile
45
+ ]
46
+ }
47
+
48
+ const CLIArgument = {
49
+ Assets: 'assets', // static assets to be copied to output folder
50
+ Output: 'output', // output folder
51
+ Language: 'language', // language js,ts
52
+ CleanTemp: 'clean', // clean up temp folder after CLI run
53
+ All: 'all' // ignore local package.json and produce wrappers for *all* Vivid components
54
+ }
55
+
56
+ const OutputLanguage = {
57
+ JavaScript: 'js',
58
+ TypeScript: 'ts'
59
+ }
60
+
61
+ // TODO: this can be removed when JSDocs for each component will be updated in Vivid repository
62
+ const ComponentsEventsMap = {
63
+ VwcButtonToggleGroup: ['selected'],
64
+ VwcButton: ['click'],
65
+ VwcCard: ['click'],
66
+ VwcCheckbox: ['change'],
67
+ VwcChipSet: [{ name: 'MDCChip:selection', propName: 'onSelection' }],
68
+ VwcDataGrid: [{ name: 'selected-items-changed', propName: 'onSelectedItemsChange' }],
69
+ VwcDialog: ['opening', 'opened', 'closing', 'closed'],
70
+ VwcIconButton: ['click'],
71
+ VwcIconButtonToggle: [{ name: 'MDCIconButtonToggle:change', propName: 'onChange' }],
72
+ VwcListExpansionPanel: ['closed', 'opened'],
73
+ VwcListItem: ['click', { name: 'request-selected', propName: 'onRequestSelected' }],
74
+ VwcCheckListItem: [{ name: 'request-selected', propName: 'onRequestSelected' }],
75
+ VwcPagination: ['change'],
76
+ VwcRadio: ['change'],
77
+ VwcSlider: ['change'],
78
+ VwcSnackbar: ['opening', 'opened', 'closing', 'closed'],
79
+ VwcSwitch: ['change'],
80
+ VwcTab: [{ name: 'MDCTab:interacted', propName: 'onInteracted' }],
81
+ VwcTabBar: [{ name: 'MDCTabBar:activated', propName: 'onActivated' }],
82
+ VwcTextfield: ['input', 'blur', 'focus'],
83
+ VwcTextarea: ['input', 'blur', 'focus']
84
+ }
85
+
86
+ const ComponentsReadOnlyPropertiesMap = {
87
+ VwcAccordion: ['styles'],
88
+ VwcActionGroup: ['styles'],
89
+ VwcAudio: ['styles', 'floatingLabelFoundation', 'lineRippleFoundation'],
90
+ VwcListExpansionPanel: ['styles', 'headerNodes'],
91
+ VwcExpansionPanel: ['styles'],
92
+ VwcBadge: ['styles'],
93
+ VwcBanner: ['styles'],
94
+ VwcDrawer: ['styles'],
95
+ VwcNotchedOutline: ['styles'],
96
+ VwcSurface: ['styles'],
97
+ VwcFilePicker: ['styles'],
98
+ VwcFormfield: ['styles'],
99
+ VwcHelperMessage: ['styles'],
100
+ VwcLinearProgress: ['styles'],
101
+ VwcThemeSwitch: ['styles'],
102
+ VwcTopAppBar: ['styles'],
103
+ VwcChip: ['styles'],
104
+ VwcCircularProgress: ['styles'],
105
+ VwcTopAppBarFixed: ['styles'],
106
+ VwcMediaController: ['floatingLabelFoundation', 'lineRippleFoundation'],
107
+ VwcRelativeTime: ['floatingLabelFoundation', 'lineRippleFoundation'],
108
+ VwcCarouselItem: ['floatingLabelFoundation', 'lineRippleFoundation'],
109
+ VwcList: ['styles', 'items', 'selected', 'index', 'layout', 'debouncedLayout'],
110
+ VwcListItem: ['styles', 'ripple', 'text'],
111
+ VwcLayout: ['styles'],
112
+ VwcSwitch: ['styles', 'ripple'],
113
+ VwcTab: ['styles', 'active', 'ripple', 'isRippleActive'],
114
+ VwcFab: ['styles', 'ripple'],
115
+ VwcTabBar: ['styles', 'active'],
116
+ VwcText: ['styles'],
117
+ VwcTextarea: ['styles', 'validity', 'ripple'],
118
+ VwcTextfield: ['styles', 'validity', 'willValidate', 'selectionStart', 'selectionEnd', 'ripple'],
119
+ VwcMenu: ['styles', 'slotElement', 'items', 'index', 'selected', 'mdcRoot'],
120
+ VwcRadio: ['styles', 'ripple', 'isRippleActive'],
121
+ VwcRadioListItem: ['styles', 'ripple'],
122
+ VwcSelect: ['styles', 'items', 'ripple'],
123
+ VwcCheckbox: ['styles', 'isRippleActive', 'ripple'],
124
+ VwcChipSet: ['styles', 'chips'],
125
+ VwcCheckListItem: ['styles', 'ripple'],
126
+ VwcDialog: ['styles'],
127
+ VwcDropdown: ['styles', 'items', 'selected'],
128
+ VwcButton: ['styles', 'buttonElement', 'ripple'],
129
+ VwcButtonToggleGroup: ['items', 'selected'],
130
+ VwcKeypad: ['styles', 'digitsDisplay'],
131
+ VwcIconButton: ['styles', 'buttonElement', 'ripple'],
132
+ VwcIconButtonToggle: ['styles', 'ripple'],
133
+ VwcDataGrid: ['styles', 'selectedItems'],
134
+ VwcSlider: ['styles', 'ripple']
135
+ }
136
+
137
+ // Properties reflected as attributes having different name
138
+ const RenamedReflectedAttributesPropertiesMap = {
139
+ VwcText: ['fontFace'], // font-face attribute
140
+ VwcLayout: ['columnBasis', 'columnSpacing', 'autoSizing']
141
+ }
142
+
143
+ // Bindable means property has complex type: (Function, Object, Array, etc.) OR properties reflected as attributes having different name
144
+ // Those properties needs to be binded directly to the underlying web element "as is"
145
+ // w/o toString => fromString transformations via HTML attributes
146
+ const ComponentsBindablePropertiesMap = {
147
+ VwcButton: ['form'],
148
+ VwcTextarea: ['form'],
149
+ VwcTextfield: ['form'],
150
+ VwcDataGrid: ['rowDetailsRenderer'],
151
+ VwcDataGridColumn: ['headerRenderer', 'footerRenderer', 'cellRenderer'],
152
+ VwcDialog: ['closeButton'],
153
+ VwcMenu: ['anchor'],
154
+ ...RenamedReflectedAttributesPropertiesMap
155
+ }
156
+
157
+ // Extra properties to be exposed for element
158
+ const ComponentsExtraPropertiesMap = {
159
+ VwcIconButton: [
160
+ {
161
+ "name": "value",
162
+ "type": "string"
163
+ }
164
+ ]
165
+ }
166
+
167
+ const CompoundComponentsMap = {
168
+ VwcButton: {
169
+ CallToAction: {
170
+ unelevated: true,
171
+ connotation: 'cta',
172
+ type: 'button',
173
+ layout: 'filled'
174
+ },
175
+ Alert: {
176
+ unelevated: true,
177
+ connotation: 'alert',
178
+ type: 'button',
179
+ layout: 'filled'
180
+ },
181
+ Outlined: {
182
+ unelevated: true,
183
+ layout: 'outlined',
184
+ type: 'button'
185
+ },
186
+ Success: {
187
+ unelevated: true,
188
+ connotation: 'success',
189
+ type: 'button',
190
+ layout: 'filled'
191
+ },
192
+ Info: {
193
+ unelevated: true,
194
+ connotation: 'info',
195
+ type: 'button',
196
+ layout: 'filled'
197
+ },
198
+ Primary: {
199
+ unelevated: true,
200
+ connotation: 'primary',
201
+ type: 'button',
202
+ layout: 'filled'
203
+ },
204
+ Announcement: {
205
+ unelevated: true,
206
+ connotation: 'announcement',
207
+ type: 'button',
208
+ layout: 'filled'
209
+ }
210
+ }
211
+ }
212
+
213
+ module.exports = {
214
+ ComponentsEventsMap,
215
+ ComponentsReadOnlyPropertiesMap,
216
+ ComponentsBindablePropertiesMap,
217
+ ComponentsExtraPropertiesMap,
218
+ CompoundComponentsMap,
219
+ FileName,
220
+ Assets,
221
+ OutputLanguage,
222
+ WCAConfig,
223
+ WCAConfigAll,
224
+ CLIArgument,
225
+ VividRepo
226
+ }