@ably/ui 8.7.0-dev.9659fc3 → 8.7.0-dev.98edac1

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 (72) hide show
  1. package/README.md +9 -2
  2. package/core/.DS_Store +0 -0
  3. package/core/DropdownMenu/component.js +1 -0
  4. package/core/DropdownMenu.jsx +313 -0
  5. package/core/{MeganavContentWhyAbly → DropdownMenuPreview}/component.js +0 -0
  6. package/core/{MeganavContentWhyAbly.jsx → DropdownMenuPreview.jsx} +0 -0
  7. package/core/Flash.jsx +129 -57
  8. package/core/Footer/component.css +10 -0
  9. package/core/Footer.jsx +135 -44
  10. package/core/Logo.jsx +28 -113
  11. package/core/Meganav/component.json +1 -1
  12. package/core/Meganav.jsx +186 -185
  13. package/core/MeganavContentDevelopers.jsx +21 -9
  14. package/core/MeganavContentUseCases.jsx +1 -1
  15. package/core/MeganavItemsDesktop.jsx +1 -1
  16. package/core/MeganavItemsMobile.jsx +1 -1
  17. package/core/Notice/component.js +1 -1
  18. package/core/Notice.jsx +130 -58
  19. package/core/images/ably-logo.png +0 -0
  20. package/core/images/high-performer-2022.png +0 -0
  21. package/core/images/highest-user-adoption-2022.png +0 -0
  22. package/core/images/users-love-us-2022.png +0 -0
  23. package/core/sprites.svg +42 -1
  24. package/core/styles.css +2 -0
  25. package/package.json +1 -1
  26. package/src/.DS_Store +0 -0
  27. package/src/core/.DS_Store +0 -0
  28. package/{preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/log/.keep → src/core/DropdownMenu/component.js} +0 -0
  29. package/src/core/DropdownMenu/component.jsx +112 -0
  30. package/src/core/FeatureFooter/component.html.erb +1 -1
  31. package/src/core/Flash/component.jsx +40 -14
  32. package/src/core/Footer/component.css +10 -0
  33. package/src/core/Footer/component.html.erb +110 -48
  34. package/src/core/Footer/component.jsx +121 -46
  35. package/src/core/Logo/component.html.erb +2 -27
  36. package/src/core/Logo/component.jsx +7 -40
  37. package/src/core/Logo/component.rb +15 -6
  38. package/src/core/Meganav/component.html.erb +1 -1
  39. package/src/core/Meganav/component.json +1 -1
  40. package/src/core/Meganav/component.jsx +1 -1
  41. package/src/core/Meganav/component.rb +3 -2
  42. package/src/core/MeganavContentDevelopers/component.html.erb +17 -8
  43. package/src/core/MeganavContentDevelopers/component.jsx +17 -8
  44. package/src/core/MeganavContentUseCases/component.html.erb +1 -1
  45. package/src/core/MeganavContentUseCases/component.jsx +1 -1
  46. package/src/core/MeganavSearchSuggestions/component.html.erb +1 -1
  47. package/src/core/core.rb +12 -4
  48. package/src/core/icons/github.svg +1 -1
  49. package/src/core/icons/google.svg +3 -0
  50. package/src/core/icons/icon-display-chat-col.svg +4 -0
  51. package/src/core/icons/icon-display-integrations-col.svg +8 -0
  52. package/src/core/icons/icon-gui-check-circled-fill-black.svg +4 -0
  53. package/src/core/icons/icon-gui-filter-flow-step-1.svg +5 -0
  54. package/src/core/icons/icon-gui-filter-flow-step-2.svg +5 -0
  55. package/src/core/icons/icon-gui-filter-flow-step-3.svg +5 -0
  56. package/src/core/icons/icon-gui-resources.svg +3 -0
  57. package/src/core/icons/stackoverflow.svg +3 -0
  58. package/src/core/icons/youtube.svg +11 -0
  59. package/src/core/images/ably-logo.png +0 -0
  60. package/src/core/images/high-performer-2022.png +0 -0
  61. package/src/core/images/highest-user-adoption-2022.png +0 -0
  62. package/src/core/images/users-love-us-2022.png +0 -0
  63. package/src/core/styles/properties.css +2 -0
  64. package/tailwind.config.js +1 -0
  65. package/core/fonts/.DS_Store +0 -0
  66. package/core/images/.DS_Store +0 -0
  67. package/core/scripts.js.LICENSE.txt +0 -32
  68. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/tmp/.keep +0 -0
  69. package/preview/vendor/bundle/ruby/3.0.0/bundler/gems/ably-ui-abffd210ec0f/preview/tmp/pids/.keep +0 -0
  70. package/src/core/fonts/.DS_Store +0 -0
  71. package/src/core/images/.DS_Store +0 -0
  72. package/src/reset/.DS_Store +0 -0
package/README.md CHANGED
@@ -239,7 +239,14 @@ yarn link @ably/ui
239
239
 
240
240
  For `ruby`:
241
241
 
242
- In `preview/Gemfile` replace `source: "https://rubygems.pkg.github.com/ably"` with `path: '../'` and run:
242
+ In `preview/Gemfile` replace the Ably UI gem version number with `path: '../'` like this:
243
+
244
+ ```bash
245
+ # in preview
246
+ gem 'ably-ui', path: '../', require: 'ably_ui'
247
+ ```
248
+
249
+ and run:
243
250
 
244
251
  ```bash
245
252
  # in preview
@@ -284,7 +291,7 @@ To deploy a review app with your in-progress code, you can use the `pre-release`
284
291
 
285
292
  ```bash
286
293
  # in root
287
- ./pre-release
294
+ scripts/pre-release.sh
288
295
  ```
289
296
 
290
297
  This will do a couple of things:
package/core/.DS_Store CHANGED
Binary file
@@ -0,0 +1 @@
1
+ !function(e,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.AblyUi=o():(e.AblyUi=e.AblyUi||{},e.AblyUi.Core=e.AblyUi.Core||{},e.AblyUi.Core.DropdownMenu=o())}(this,(function(){return{}.default}));
@@ -0,0 +1,313 @@
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory(require("react"), require("prop-types"));
4
+ else if(typeof define === 'function' && define.amd)
5
+ define([, ], factory);
6
+ else {
7
+ var a = typeof exports === 'object' ? factory(require("react"), require("prop-types")) : factory(root[undefined], root[undefined]);
8
+ for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
9
+ }
10
+ })(this, function(__WEBPACK_EXTERNAL_MODULE__9281__, __WEBPACK_EXTERNAL_MODULE__3474__) {
11
+ return /******/ (() => { // webpackBootstrap
12
+ /******/ "use strict";
13
+ /******/ var __webpack_modules__ = ({
14
+
15
+ /***/ 9008:
16
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
17
+
18
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
19
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
20
+ /* harmony export */ });
21
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9281);
22
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
23
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3474);
24
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
25
+ var _excluded = ["name", "size", "color", "additionalCSS"];
26
+
27
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
28
+
29
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
30
+
31
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
32
+
33
+
34
+
35
+
36
+ var Icon = function Icon(_ref) {
37
+ var name = _ref.name,
38
+ _ref$size = _ref.size,
39
+ size = _ref$size === void 0 ? "0.75rem" : _ref$size,
40
+ _ref$color = _ref.color,
41
+ color = _ref$color === void 0 ? "" : _ref$color,
42
+ _ref$additionalCSS = _ref.additionalCSS,
43
+ additionalCSS = _ref$additionalCSS === void 0 ? "" : _ref$additionalCSS,
44
+ additionalAttributes = _objectWithoutProperties(_ref, _excluded);
45
+
46
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", _extends({
47
+ className: "".concat(color, " ").concat(additionalCSS),
48
+ style: {
49
+ width: size,
50
+ height: size
51
+ }
52
+ }, additionalAttributes), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("use", {
53
+ xlinkHref: "#sprite-".concat(name)
54
+ }));
55
+ };
56
+
57
+ Icon.propTypes = {
58
+ name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string.isRequired),
59
+ size: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
60
+ color: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
61
+ additionalCSS: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)
62
+ };
63
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Icon);
64
+
65
+ /***/ }),
66
+
67
+ /***/ 3474:
68
+ /***/ ((module) => {
69
+
70
+ module.exports = __WEBPACK_EXTERNAL_MODULE__3474__;
71
+
72
+ /***/ }),
73
+
74
+ /***/ 9281:
75
+ /***/ ((module) => {
76
+
77
+ module.exports = __WEBPACK_EXTERNAL_MODULE__9281__;
78
+
79
+ /***/ })
80
+
81
+ /******/ });
82
+ /************************************************************************/
83
+ /******/ // The module cache
84
+ /******/ var __webpack_module_cache__ = {};
85
+ /******/
86
+ /******/ // The require function
87
+ /******/ function __webpack_require__(moduleId) {
88
+ /******/ // Check if module is in cache
89
+ /******/ var cachedModule = __webpack_module_cache__[moduleId];
90
+ /******/ if (cachedModule !== undefined) {
91
+ /******/ return cachedModule.exports;
92
+ /******/ }
93
+ /******/ // Create a new module (and put it into the cache)
94
+ /******/ var module = __webpack_module_cache__[moduleId] = {
95
+ /******/ // no module.id needed
96
+ /******/ // no module.loaded needed
97
+ /******/ exports: {}
98
+ /******/ };
99
+ /******/
100
+ /******/ // Execute the module function
101
+ /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
102
+ /******/
103
+ /******/ // Return the exports of the module
104
+ /******/ return module.exports;
105
+ /******/ }
106
+ /******/
107
+ /************************************************************************/
108
+ /******/ /* webpack/runtime/compat get default export */
109
+ /******/ (() => {
110
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
111
+ /******/ __webpack_require__.n = (module) => {
112
+ /******/ var getter = module && module.__esModule ?
113
+ /******/ () => (module['default']) :
114
+ /******/ () => (module);
115
+ /******/ __webpack_require__.d(getter, { a: getter });
116
+ /******/ return getter;
117
+ /******/ };
118
+ /******/ })();
119
+ /******/
120
+ /******/ /* webpack/runtime/define property getters */
121
+ /******/ (() => {
122
+ /******/ // define getter functions for harmony exports
123
+ /******/ __webpack_require__.d = (exports, definition) => {
124
+ /******/ for(var key in definition) {
125
+ /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
126
+ /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
127
+ /******/ }
128
+ /******/ }
129
+ /******/ };
130
+ /******/ })();
131
+ /******/
132
+ /******/ /* webpack/runtime/hasOwnProperty shorthand */
133
+ /******/ (() => {
134
+ /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
135
+ /******/ })();
136
+ /******/
137
+ /******/ /* webpack/runtime/make namespace object */
138
+ /******/ (() => {
139
+ /******/ // define __esModule on exports
140
+ /******/ __webpack_require__.r = (exports) => {
141
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
142
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
143
+ /******/ }
144
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
145
+ /******/ };
146
+ /******/ })();
147
+ /******/
148
+ /************************************************************************/
149
+ var __webpack_exports__ = {};
150
+ // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
151
+ (() => {
152
+ __webpack_require__.r(__webpack_exports__);
153
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
154
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
155
+ /* harmony export */ });
156
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9281);
157
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
158
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3474);
159
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
160
+ /* harmony import */ var _Icon_component_jsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(9008);
161
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
162
+
163
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
164
+
165
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
166
+
167
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
168
+
169
+ function _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
170
+
171
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
172
+
173
+
174
+
175
+
176
+ var DropdownMenuContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();
177
+
178
+ var DropdownMenu = function DropdownMenu(_ref) {
179
+ var children = _ref.children;
180
+
181
+ var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
182
+ _useState2 = _slicedToArray(_useState, 2),
183
+ isOpen = _useState2[0],
184
+ setOpen = _useState2[1];
185
+
186
+ var ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
187
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
188
+ var clickHandler = function clickHandler(e) {
189
+ var _ref$current;
190
+
191
+ if (ref !== null && ref !== void 0 && (_ref$current = ref.current) !== null && _ref$current !== void 0 && _ref$current.contains(e.target)) return;
192
+ setOpen(false);
193
+ };
194
+
195
+ document.addEventListener("click", clickHandler);
196
+ return function () {
197
+ document.removeEventListener("click", clickHandler);
198
+ };
199
+ }, []);
200
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DropdownMenuContext.Provider, {
201
+ value: {
202
+ isOpen: isOpen,
203
+ setOpen: setOpen
204
+ }
205
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
206
+ id: "dropdown-menu",
207
+ className: "relative",
208
+ ref: ref
209
+ }, children));
210
+ };
211
+
212
+ DropdownMenu.propTypes = {
213
+ children: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().node)
214
+ };
215
+
216
+ var Trigger = function Trigger(_ref2) {
217
+ var children = _ref2.children,
218
+ _ref2$additionalTrigg = _ref2.additionalTriggerCSS,
219
+ additionalTriggerCSS = _ref2$additionalTrigg === void 0 ? "" : _ref2$additionalTrigg;
220
+
221
+ var _useContext = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(DropdownMenuContext),
222
+ isOpen = _useContext.isOpen,
223
+ setOpen = _useContext.setOpen;
224
+
225
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
226
+ id: "menu-trigger",
227
+ onClick: function onClick() {
228
+ return setOpen(!isOpen);
229
+ },
230
+ className: "".concat(additionalTriggerCSS, " flex items-center p-8 ml-8 group hover:text-gui-hover hover:bg-light-grey active:text-gui-active focus:text-gui-focus focus:outline-none rounded-lg")
231
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("span", {
232
+ className: "leading-normal"
233
+ }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Icon_component_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
234
+ name: "icon-gui-disclosure-arrow",
235
+ color: "text-cool-black",
236
+ size: "1.25rem",
237
+ additionalCSS: "transform rotate-90 group-hover:text-gui-hover group-active:text-gui-active group-focus:text-gui-focus"
238
+ }));
239
+ };
240
+
241
+ Trigger.propTypes = {
242
+ children: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().node),
243
+ additionalTriggerCSS: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)
244
+ };
245
+
246
+ var Content = function Content(_ref3) {
247
+ var children = _ref3.children,
248
+ _ref3$anchorPosition = _ref3.anchorPosition,
249
+ anchorPosition = _ref3$anchorPosition === void 0 ? "right" : _ref3$anchorPosition,
250
+ additionalContentCSS = _ref3.additionalContentCSS;
251
+
252
+ var _useContext2 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(DropdownMenuContext),
253
+ isOpen = _useContext2.isOpen;
254
+
255
+ if (!isOpen) {
256
+ return null;
257
+ }
258
+
259
+ var anchorPositionClasses = anchorPosition === "right" ? "right-0" : "left-0";
260
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
261
+ id: "menu-content",
262
+ className: "".concat(additionalContentCSS, " absolute p-8 z-10 border border-mid-grey bg-white rounded shadow-container ").concat(anchorPositionClasses),
263
+ style: {
264
+ minWidth: 275,
265
+ top: 44
266
+ }
267
+ }, children);
268
+ };
269
+
270
+ Content.propTypes = {
271
+ children: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().node),
272
+ anchorPosition: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
273
+ additionalContentCSS: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)
274
+ };
275
+
276
+ var Link = function Link(_ref4) {
277
+ var url = _ref4.url,
278
+ title = _ref4.title,
279
+ subtitle = _ref4.subtitle,
280
+ iconName = _ref4.iconName,
281
+ children = _ref4.children;
282
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
283
+ href: url,
284
+ className: "menu-link group block p-8 hover:bg-light-grey hover:text-cool-black rounded"
285
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
286
+ className: "mb-4"
287
+ }, title, iconName ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Icon_component_jsx__WEBPACK_IMPORTED_MODULE_2__.default, {
288
+ name: iconName,
289
+ size: "1rem",
290
+ color: "text-cool-black",
291
+ additionalCSS: "align-middle ml-8 relative -top-1 -left-4"
292
+ }) : null), subtitle ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
293
+ className: "text-p3 mb-16 text-dark-grey"
294
+ }, subtitle) : null, children);
295
+ };
296
+
297
+ Link.propTypes = {
298
+ url: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
299
+ title: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
300
+ subtitle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
301
+ iconName: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
302
+ children: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().node)
303
+ };
304
+ DropdownMenu.Trigger = Trigger;
305
+ DropdownMenu.Content = Content;
306
+ DropdownMenu.Link = Link;
307
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DropdownMenu);
308
+ })();
309
+
310
+ /******/ return __webpack_exports__;
311
+ /******/ })()
312
+ ;
313
+ });
package/core/Flash.jsx CHANGED
@@ -285,22 +285,55 @@ module.exports = __WEBPACK_EXTERNAL_MODULE__5044__;
285
285
  var __webpack_exports__ = {};
286
286
  // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
287
287
  (() => {
288
+ // ESM COMPAT FLAG
288
289
  __webpack_require__.r(__webpack_exports__);
289
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
290
- /* harmony export */ "reducerFlashes": () => (/* binding */ reducerFlashes),
291
- /* harmony export */ "FLASH_DATA_ID": () => (/* binding */ FLASH_DATA_ID),
292
- /* harmony export */ "Flashes": () => (/* binding */ Flashes),
293
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
294
- /* harmony export */ });
295
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9281);
296
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
297
- /* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6357);
298
- /* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_1__);
299
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3474);
300
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);
301
- /* harmony import */ var _remote_data_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3511);
302
- /* harmony import */ var _ConnectStateWrapper_component_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9787);
303
- /* harmony import */ var _Icon_component_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9008);
290
+
291
+ // EXPORTS
292
+ __webpack_require__.d(__webpack_exports__, {
293
+ "FLASH_DATA_ID": () => (/* binding */ FLASH_DATA_ID),
294
+ "Flashes": () => (/* binding */ Flashes),
295
+ "default": () => (/* binding */ Flash_component),
296
+ "reducerFlashes": () => (/* binding */ reducerFlashes)
297
+ });
298
+
299
+ // EXTERNAL MODULE: external {"commonjs":"react","commonjs2":"react"}
300
+ var external_commonjs_react_commonjs2_react_ = __webpack_require__(9281);
301
+ var external_commonjs_react_commonjs2_react_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_react_commonjs2_react_);
302
+ // EXTERNAL MODULE: external {"commonjs":"dompurify","commonjs2":"dompurify"}
303
+ var external_commonjs_dompurify_commonjs2_dompurify_ = __webpack_require__(6357);
304
+ var external_commonjs_dompurify_commonjs2_dompurify_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_dompurify_commonjs2_dompurify_);
305
+ // EXTERNAL MODULE: external {"commonjs":"prop-types","commonjs2":"prop-types"}
306
+ var external_commonjs_prop_types_commonjs2_prop_types_ = __webpack_require__(3474);
307
+ var external_commonjs_prop_types_commonjs2_prop_types_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_prop_types_commonjs2_prop_types_);
308
+ ;// CONCATENATED MODULE: ./node_modules/nanoid/non-secure/index.js
309
+ let urlAlphabet =
310
+ 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
311
+ let customAlphabet = (alphabet, defaultSize = 21) => {
312
+ return (size = defaultSize) => {
313
+ let id = ''
314
+ let i = size
315
+ while (i--) {
316
+ id += alphabet[(Math.random() * alphabet.length) | 0]
317
+ }
318
+ return id
319
+ }
320
+ }
321
+ let nanoid = (size = 21) => {
322
+ let id = ''
323
+ let i = size
324
+ while (i--) {
325
+ id += urlAlphabet[(Math.random() * 64) | 0]
326
+ }
327
+ return id
328
+ }
329
+
330
+ // EXTERNAL MODULE: ./src/core/remote-data-store.js
331
+ var remote_data_store = __webpack_require__(3511);
332
+ // EXTERNAL MODULE: ./src/core/ConnectStateWrapper/component.jsx
333
+ var component = __webpack_require__(9787);
334
+ // EXTERNAL MODULE: ./src/core/Icon/component.jsx
335
+ var Icon_component = __webpack_require__(9008);
336
+ ;// CONCATENATED MODULE: ./src/core/Flash/component.jsx
304
337
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
305
338
 
306
339
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
@@ -335,6 +368,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
335
368
 
336
369
 
337
370
 
371
+
338
372
  var REDUCER_KEY = "flashes";
339
373
  var FLASH_DATA_ID = "ui-flashes";
340
374
  var initialState = {
@@ -364,8 +398,8 @@ var selectFlashes = function selectFlashes(store) {
364
398
  };
365
399
 
366
400
  var FlashT = {
367
- type: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf(["error", "success", "notice", "info", "alert"]),
368
- content: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)
401
+ type: external_commonjs_prop_types_commonjs2_prop_types_default().oneOf(["error", "success", "notice", "info", "alert"]),
402
+ content: (external_commonjs_prop_types_commonjs2_prop_types_default()).string
369
403
  };
370
404
  var FLASH_BG_COLOR = {
371
405
  error: "bg-gui-error",
@@ -384,48 +418,60 @@ var FLASH_TEXT_COLOR = {
384
418
  var AUTO_HIDE = ["success", "info", "notice"];
385
419
  var AUTO_HIDE_TIME = 8000;
386
420
 
421
+ var useAutoHide = function useAutoHide(type, closeFlash) {
422
+ var timeoutId = (0,external_commonjs_react_commonjs2_react_.useRef)(null);
423
+ (0,external_commonjs_react_commonjs2_react_.useEffect)(function () {
424
+ if (AUTO_HIDE.includes(type)) {
425
+ timeoutId.current = setTimeout(function () {
426
+ closeFlash();
427
+ }, AUTO_HIDE_TIME);
428
+ }
429
+
430
+ return function () {
431
+ if (timeoutId.current) {
432
+ clearTimeout(timeoutId.current);
433
+ }
434
+ };
435
+ }, []);
436
+ };
437
+
387
438
  var Flash = function Flash(_ref) {
388
- var type = _ref.type,
389
- content = _ref.content;
390
- var ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
439
+ var id = _ref.id,
440
+ type = _ref.type,
441
+ content = _ref.content,
442
+ removeFlash = _ref.removeFlash;
443
+ var ref = (0,external_commonjs_react_commonjs2_react_.useRef)(null);
391
444
 
392
- var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
445
+ var _useState = (0,external_commonjs_react_commonjs2_react_.useState)(false),
393
446
  _useState2 = _slicedToArray(_useState, 2),
394
447
  closed = _useState2[0],
395
448
  setClosed = _useState2[1];
396
449
 
397
- var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),
450
+ var _useState3 = (0,external_commonjs_react_commonjs2_react_.useState)(0),
398
451
  _useState4 = _slicedToArray(_useState3, 2),
399
452
  flashHeight = _useState4[0],
400
453
  setFlashHeight = _useState4[1];
401
454
 
402
- var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
455
+ var _useState5 = (0,external_commonjs_react_commonjs2_react_.useState)(false),
403
456
  _useState6 = _slicedToArray(_useState5, 2),
404
457
  triggerEntryAnimation = _useState6[0],
405
458
  setTriggerEntryAnimation = _useState6[1];
406
459
 
407
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
408
- return setTriggerEntryAnimation(true);
409
- }, []);
410
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
411
- if (AUTO_HIDE.includes(type)) {
412
- setTimeout(function () {
413
- // closeFlash is idempotent, we can call it even if the flash has been already closed
414
- closeFlash();
415
- }, AUTO_HIDE_TIME);
416
- }
417
- }, [closed]);
418
-
419
460
  var closeFlash = function closeFlash() {
420
461
  if (ref.current) {
421
462
  setFlashHeight(ref.current.getBoundingClientRect().height);
422
463
  }
423
464
 
465
+ setClosed(true);
424
466
  setTimeout(function () {
425
- return setClosed(true);
426
- }, 0);
467
+ removeFlash(id);
468
+ }, 100);
427
469
  };
428
470
 
471
+ (0,external_commonjs_react_commonjs2_react_.useEffect)(function () {
472
+ return setTriggerEntryAnimation(true);
473
+ }, []);
474
+ useAutoHide(type, closeFlash);
429
475
  var animateEntry = triggerEntryAnimation && !closed;
430
476
  var style;
431
477
 
@@ -443,7 +489,7 @@ var Flash = function Flash(_ref) {
443
489
  style = {};
444
490
  }
445
491
 
446
- var safeContent = dompurify__WEBPACK_IMPORTED_MODULE_1___default().sanitize(content, {
492
+ var safeContent = external_commonjs_dompurify_commonjs2_dompurify_default().sanitize(content, {
447
493
  ALLOWED_TAGS: ["a"],
448
494
  ALLOWED_ATTR: ["href", "data-method", "rel"]
449
495
  });
@@ -459,28 +505,28 @@ var Flash = function Flash(_ref) {
459
505
  error: "text-white",
460
506
  alert: "text-white"
461
507
  };
462
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
508
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement("div", {
463
509
  className: "ui-flash-message ui-grid-px ".concat(animateEntry ? "ui-flash-message-enter" : ""),
464
510
  style: style,
465
511
  ref: ref,
466
512
  "data-id": "ui-flash"
467
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
513
+ }, /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement("div", {
468
514
  className: "".concat(FLASH_BG_COLOR[type], " p-32 flex align-center rounded shadow-container-subtle")
469
- }, withIcons[type] && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Icon_component_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
515
+ }, withIcons[type] && /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement(Icon_component.default, {
470
516
  name: withIcons[type],
471
517
  color: iconColor[type],
472
518
  size: "1.5rem",
473
519
  additionalCSS: "mr-16 self-baseline"
474
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
520
+ }), /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement("p", {
475
521
  className: "ui-flash-text ".concat(FLASH_TEXT_COLOR[type]),
476
522
  dangerouslySetInnerHTML: {
477
523
  __html: safeContent
478
524
  }
479
- }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
525
+ }), /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement("button", {
480
526
  type: "button",
481
527
  className: "p-0 ml-auto self-start focus:outline-none",
482
528
  onClick: closeFlash
483
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Icon_component_jsx__WEBPACK_IMPORTED_MODULE_5__.default, {
529
+ }, /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement(Icon_component.default, {
484
530
  name: "icon-gui-close",
485
531
  color: iconColor[type],
486
532
  size: "1.5rem",
@@ -492,26 +538,52 @@ Flash.propTypes = _objectSpread({}, FlashT);
492
538
 
493
539
  var Flashes = function Flashes(_ref2) {
494
540
  var flashes = _ref2.flashes;
495
- var items = (flashes === null || flashes === void 0 ? void 0 : flashes.items) || [];
496
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
541
+
542
+ var _useState7 = (0,external_commonjs_react_commonjs2_react_.useState)([]),
543
+ _useState8 = _slicedToArray(_useState7, 2),
544
+ flashesWithIds = _useState8[0],
545
+ setFlashesWithIds = _useState8[1];
546
+
547
+ var removeFlash = function removeFlash(flashId) {
548
+ return setFlashesWithIds(function (items) {
549
+ return items.filter(function (item) {
550
+ return item.id !== flashId;
551
+ });
552
+ });
553
+ };
554
+
555
+ (0,external_commonjs_react_commonjs2_react_.useEffect)(function () {
556
+ setFlashesWithIds(function (state) {
557
+ return [].concat(_toConsumableArray(state), _toConsumableArray(((flashes === null || flashes === void 0 ? void 0 : flashes.items) || []).map(function (flash) {
558
+ return _objectSpread(_objectSpread({}, flash), {}, {
559
+ id: nanoid(),
560
+ removed: false
561
+ });
562
+ })));
563
+ });
564
+ }, [flashes]);
565
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement("div", {
497
566
  className: "ui-flash",
498
567
  "data-id": FLASH_DATA_ID
499
- }, items.map(function (flash) {
500
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Flash, _extends({
501
- key: flash.type
568
+ }, flashesWithIds.filter(function (item) {
569
+ return !item.removed;
570
+ }).map(function (flash) {
571
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement(Flash, _extends({
572
+ removeFlash: removeFlash,
573
+ key: flash.id
502
574
  }, flash));
503
575
  }));
504
576
  };
505
577
 
506
578
  Flashes.propTypes = {
507
- flashes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({
508
- items: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape(FlashT))
579
+ flashes: external_commonjs_prop_types_commonjs2_prop_types_default().shape({
580
+ items: external_commonjs_prop_types_commonjs2_prop_types_default().arrayOf(external_commonjs_prop_types_commonjs2_prop_types_default().shape(FlashT))
509
581
  })
510
582
  };
511
583
 
512
584
  var BackendFlashes = function BackendFlashes(_ref3) {
513
585
  var flashes = _ref3.flashes;
514
- (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
586
+ (0,external_commonjs_react_commonjs2_react_.useEffect)(function () {
515
587
  var transformedFlashes = flashes.map(function (flash) {
516
588
  var _flash = _slicedToArray(flash, 2),
517
589
  type = _flash[0],
@@ -524,24 +596,24 @@ var BackendFlashes = function BackendFlashes(_ref3) {
524
596
  }) || [];
525
597
 
526
598
  if (transformedFlashes.length > 0) {
527
- var store = (0,_remote_data_store__WEBPACK_IMPORTED_MODULE_3__/* .getRemoteDataStore */ .cO)();
599
+ var store = (0,remote_data_store/* getRemoteDataStore */.cO)();
528
600
  store.dispatch({
529
601
  type: "flash/push",
530
602
  payload: transformedFlashes
531
603
  });
532
604
  }
533
605
  }, []);
534
- var WrappedFlashes = (0,_ConnectStateWrapper_component_jsx__WEBPACK_IMPORTED_MODULE_4__.default)(Flashes, {
606
+ var WrappedFlashes = (0,component.default)(Flashes, {
535
607
  flashes: selectFlashes
536
608
  });
537
- return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(WrappedFlashes, null);
609
+ return /*#__PURE__*/external_commonjs_react_commonjs2_react_default().createElement(WrappedFlashes, null);
538
610
  };
539
611
 
540
612
  BackendFlashes.propTypes = {
541
- flashes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)))
613
+ flashes: external_commonjs_prop_types_commonjs2_prop_types_default().arrayOf(external_commonjs_prop_types_commonjs2_prop_types_default().arrayOf((external_commonjs_prop_types_commonjs2_prop_types_default()).string))
542
614
  };
543
615
 
544
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BackendFlashes);
616
+ /* harmony default export */ const Flash_component = (BackendFlashes);
545
617
  })();
546
618
 
547
619
  /******/ return __webpack_exports__;