@ndla/ui 22.0.1 → 22.0.2

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 (53) hide show
  1. package/es/ContentLoader/index.js +8 -3
  2. package/es/Resource/BlockResource.js +105 -18
  3. package/es/Resource/ListResource.js +124 -26
  4. package/es/SnackBar/DefaultSnackbar.js +56 -0
  5. package/es/SnackBar/SnackbarProvider.js +179 -0
  6. package/es/SnackBar/index.js +2 -2
  7. package/es/index.js +1 -1
  8. package/es/locale/messages-en.js +9 -2
  9. package/es/locale/messages-nb.js +9 -2
  10. package/es/locale/messages-nn.js +9 -2
  11. package/es/locale/messages-se.js +9 -2
  12. package/es/locale/messages-sma.js +9 -2
  13. package/lib/ContentLoader/index.d.ts +4 -8
  14. package/lib/ContentLoader/index.js +8 -3
  15. package/lib/Resource/BlockResource.d.ts +2 -1
  16. package/lib/Resource/BlockResource.js +106 -18
  17. package/lib/Resource/ListResource.d.ts +2 -1
  18. package/lib/Resource/ListResource.js +125 -26
  19. package/lib/SnackBar/DefaultSnackbar.d.ts +11 -0
  20. package/lib/SnackBar/DefaultSnackbar.js +70 -0
  21. package/lib/SnackBar/SnackbarProvider.d.ts +32 -0
  22. package/lib/SnackBar/SnackbarProvider.js +197 -0
  23. package/lib/SnackBar/index.d.ts +3 -3
  24. package/lib/SnackBar/index.js +23 -3
  25. package/lib/index.d.ts +2 -2
  26. package/lib/index.js +24 -3
  27. package/lib/locale/messages-en.d.ts +7 -0
  28. package/lib/locale/messages-en.js +9 -2
  29. package/lib/locale/messages-nb.d.ts +7 -0
  30. package/lib/locale/messages-nb.js +9 -2
  31. package/lib/locale/messages-nn.d.ts +7 -0
  32. package/lib/locale/messages-nn.js +9 -2
  33. package/lib/locale/messages-se.d.ts +7 -0
  34. package/lib/locale/messages-se.js +9 -2
  35. package/lib/locale/messages-sma.d.ts +7 -0
  36. package/lib/locale/messages-sma.js +9 -2
  37. package/package.json +5 -5
  38. package/src/ContentLoader/index.tsx +9 -9
  39. package/src/Resource/BlockResource.tsx +65 -4
  40. package/src/Resource/ListResource.tsx +85 -10
  41. package/src/SnackBar/DefaultSnackbar.tsx +70 -0
  42. package/src/SnackBar/SnackbarProvider.tsx +147 -0
  43. package/src/SnackBar/index.ts +3 -5
  44. package/src/index.ts +2 -2
  45. package/src/locale/messages-en.ts +7 -0
  46. package/src/locale/messages-nb.ts +7 -0
  47. package/src/locale/messages-nn.ts +7 -0
  48. package/src/locale/messages-se.ts +7 -0
  49. package/src/locale/messages-sma.ts +7 -0
  50. package/es/SnackBar/SnackBar.js +0 -117
  51. package/lib/SnackBar/SnackBar.d.ts +0 -23
  52. package/lib/SnackBar/SnackBar.js +0 -127
  53. package/src/SnackBar/SnackBar.tsx +0 -183
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = exports.BaseSnack = exports.SnackbarProvider = exports.useSnack = void 0;
9
+
10
+ var _styledBase = _interopRequireDefault(require("@emotion/styled-base"));
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _core = require("@emotion/core");
15
+
16
+ var _core2 = require("@ndla/core");
17
+
18
+ var _DefaultSnackbar = _interopRequireDefault(require("./DefaultSnackbar"));
19
+
20
+ function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
21
+
22
+ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+
24
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
31
+
32
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
33
+
34
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
35
+
36
+ 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."); }
37
+
38
+ 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); }
39
+
40
+ 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; }
41
+
42
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_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; }
43
+
44
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
45
+
46
+ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
47
+
48
+ var SnackbarContext = /*#__PURE__*/(0, _react.createContext)(undefined);
49
+
50
+ var useSnack = function useSnack() {
51
+ var context = (0, _react.useContext)(SnackbarContext);
52
+
53
+ if (!context) {
54
+ throw new Error('useSnack can only be used within a SnackbarProvider!');
55
+ }
56
+
57
+ return context;
58
+ };
59
+
60
+ exports.useSnack = useSnack;
61
+
62
+ var SnackbarProvider = function SnackbarProvider(_ref) {
63
+ var children = _ref.children;
64
+
65
+ var _useState = (0, _react.useState)([]),
66
+ _useState2 = _slicedToArray(_useState, 2),
67
+ snacks = _useState2[0],
68
+ setSnacks = _useState2[1];
69
+
70
+ var addSnack = (0, _react.useCallback)(function (snack) {
71
+ setSnacks(function (prev) {
72
+ return prev.filter(function (s) {
73
+ return s.id !== snack.id;
74
+ }).concat(snack);
75
+ });
76
+ }, []);
77
+ var removeSnack = (0, _react.useCallback)(function (snackId) {
78
+ setSnacks(function (prev) {
79
+ return prev.filter(function (_ref2) {
80
+ var id = _ref2.id;
81
+ return snackId !== id;
82
+ });
83
+ });
84
+ }, []);
85
+ var closeSnack = (0, _react.useCallback)(function (snack) {
86
+ setSnacks(function (prev) {
87
+ return prev.map(function (p) {
88
+ return p.id === snack.id ? _objectSpread(_objectSpread({}, p), {}, {
89
+ duration: 0
90
+ }) : p;
91
+ });
92
+ });
93
+ }, []);
94
+ var clearSnacks = (0, _react.useCallback)(function () {
95
+ return setSnacks([]);
96
+ }, []);
97
+ var value = (0, _react.useMemo)(function () {
98
+ return {
99
+ addSnack: addSnack,
100
+ removeSnack: removeSnack,
101
+ clearSnacks: clearSnacks,
102
+ closeSnack: closeSnack
103
+ };
104
+ }, [addSnack, removeSnack, clearSnacks, closeSnack]);
105
+ return (0, _core.jsx)(SnackbarContext.Provider, {
106
+ value: value
107
+ }, children, (0, _core.jsx)(SnackbarContainer, {
108
+ snacks: snacks
109
+ }));
110
+ };
111
+
112
+ exports.SnackbarProvider = SnackbarProvider;
113
+ var snackbarInAnimation = (0, _core.keyframes)({
114
+ '0%': {
115
+ transform: "translateY(".concat(_core2.spacing.medium, ")"),
116
+ opacity: 0
117
+ },
118
+ '100%': {
119
+ opacity: 1
120
+ }
121
+ });
122
+ var snackbarOutAnimation = (0, _core.keyframes)({
123
+ '0%': {
124
+ opacity: 1
125
+ },
126
+ '100%': {
127
+ transform: "translateY(".concat(_core2.spacing.medium, ")"),
128
+ opacity: 0
129
+ }
130
+ });
131
+ var BaseSnackContainer = (0, _styledBase["default"])("li", {
132
+ target: "e12tl09b0",
133
+ label: "BaseSnackContainer"
134
+ })("display:flex;flex-direction:column;align-items:center;animation:", function (p) {
135
+ return p.expired ? snackbarOutAnimation : snackbarInAnimation;
136
+ }, " 200ms ease-in-out;animation-fill-mode:forwards;" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNuYWNrYmFyUHJvdmlkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTZGNkQiLCJmaWxlIjoiU25hY2tiYXJQcm92aWRlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgY3JlYXRlQ29udGV4dCwgUmVhY3ROb2RlLCB1c2VTdGF0ZSwgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBzcGFjaW5nIH0gZnJvbSAnQG5kbGEvY29yZSc7XG5pbXBvcnQgRGVmYXVsdFNuYWNrIGZyb20gJy4vRGVmYXVsdFNuYWNrYmFyJztcblxuZXhwb3J0IGludGVyZmFjZSBTbmFjayB7XG4gIGNvbnRlbnQ/OiBSZWFjdE5vZGU7XG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuICByZW5kZXI/OiAoaWQ6IHN0cmluZywgb25DbG9zZT86ICgpID0+IHZvaWQpID0+IFJlYWN0Tm9kZTtcbiAgaWQ6IHN0cmluZztcbiAgaWNvbj86IFJlYWN0Tm9kZTtcbiAgY2xvc2FibGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNuYWNrQ29udGV4dCB7XG4gIGFkZFNuYWNrOiAoc25hY2s6IFNuYWNrKSA9PiB2b2lkO1xuICByZW1vdmVTbmFjazogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyU25hY2tzOiAoKSA9PiB2b2lkO1xuICBjbG9zZVNuYWNrOiAoc25hY2s6IFNuYWNrKSA9PiB2b2lkO1xufVxuXG5jb25zdCBTbmFja2JhckNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNuYWNrQ29udGV4dCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IHVzZVNuYWNrID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChTbmFja2JhckNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNuYWNrIGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGEgU25hY2tiYXJQcm92aWRlciEnKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IFNuYWNrYmFyUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiBQcm9wcykgPT4ge1xuICBjb25zdCBbc25hY2tzLCBzZXRTbmFja3NdID0gdXNlU3RhdGU8U25hY2tbXT4oW10pO1xuXG4gIGNvbnN0IGFkZFNuYWNrID0gdXNlQ2FsbGJhY2soKHNuYWNrOiBTbmFjaykgPT4ge1xuICAgIHNldFNuYWNrcygocHJldikgPT4gcHJldi5maWx0ZXIoKHMpID0+IHMuaWQgIT09IHNuYWNrLmlkKS5jb25jYXQoc25hY2spKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlbW92ZVNuYWNrID0gdXNlQ2FsbGJhY2soKHNuYWNrSWQ6IHN0cmluZykgPT4ge1xuICAgIHNldFNuYWNrcygocHJldikgPT4gcHJldi5maWx0ZXIoKHsgaWQgfSkgPT4gc25hY2tJZCAhPT0gaWQpKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNsb3NlU25hY2sgPSB1c2VDYWxsYmFjaygoc25hY2s6IFNuYWNrKSA9PiB7XG4gICAgc2V0U25hY2tzKChwcmV2KSA9PiBwcmV2Lm1hcCgocCkgPT4gKHAuaWQgPT09IHNuYWNrLmlkID8geyAuLi5wLCBkdXJhdGlvbjogMCB9IDogcCkpKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNsZWFyU25hY2tzID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0U25hY2tzKFtdKSwgW10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoeyBhZGRTbmFjaywgcmVtb3ZlU25hY2ssIGNsZWFyU25hY2tzLCBjbG9zZVNuYWNrIH0pLFxuICAgIFthZGRTbmFjaywgcmVtb3ZlU25hY2ssIGNsZWFyU25hY2tzLCBjbG9zZVNuYWNrXSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTbmFja2JhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDxTbmFja2JhckNvbnRhaW5lciBzbmFja3M9e3NuYWNrc30gLz5cbiAgICA8L1NuYWNrYmFyQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBCYXNlU25hY2tQcm9wcyBleHRlbmRzIFNuYWNrIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIEJhc2VTbmFja0NvbnRhaW5lclByb3BzIHtcbiAgZXhwaXJlZDogYm9vbGVhbjtcbn1cblxuY29uc3Qgc25hY2tiYXJJbkFuaW1hdGlvbiA9IGtleWZyYW1lcyh7XG4gICcwJSc6IHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWSgke3NwYWNpbmcubWVkaXVtfSlgLCBvcGFjaXR5OiAwIH0sXG4gICcxMDAlJzogeyBvcGFjaXR5OiAxIH0sXG59KTtcblxuY29uc3Qgc25hY2tiYXJPdXRBbmltYXRpb24gPSBrZXlmcmFtZXMoe1xuICAnMCUnOiB7IG9wYWNpdHk6IDEgfSxcbiAgJzEwMCUnOiB7IHRyYW5zZm9ybTogYHRyYW5zbGF0ZVkoJHtzcGFjaW5nLm1lZGl1bX0pYCwgb3BhY2l0eTogMCB9LFxufSk7XG5cbmNvbnN0IEJhc2VTbmFja0NvbnRhaW5lciA9IHN0eWxlZC5saTxCYXNlU25hY2tDb250YWluZXJQcm9wcz5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogJHsocCkgPT4gKHAuZXhwaXJlZCA/IHNuYWNrYmFyT3V0QW5pbWF0aW9uIDogc25hY2tiYXJJbkFuaW1hdGlvbil9IDIwMG1zIGVhc2UtaW4tb3V0O1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbmA7XG5cbmV4cG9ydCBjb25zdCBCYXNlU25hY2sgPSAoeyBkdXJhdGlvbiA9IDUwMDAsIGlkLCBjaGlsZHJlbiB9OiBCYXNlU25hY2tQcm9wcykgPT4ge1xuICBjb25zdCB7IHJlbW92ZVNuYWNrIH0gPSB1c2VTbmFjaygpO1xuICBjb25zdCBbZXhwaXJlZCwgc2V0RXhwaXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBzZXRFeHBpcmVkKHRydWUpLCBkdXJhdGlvbik7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfSwgW2R1cmF0aW9uXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QmFzZVNuYWNrQ29udGFpbmVyIGV4cGlyZWQ9e2V4cGlyZWR9IG9uQW5pbWF0aW9uRW5kPXsoKSA9PiBleHBpcmVkICYmIHJlbW92ZVNuYWNrKGlkKX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9CYXNlU25hY2tDb250YWluZXI+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU25hY2tiYXJDb250YWluZXJQcm9wcyB7XG4gIHNuYWNrczogU25hY2tbXTtcbn1cblxuY29uc3QgU3R5bGVkU25hY2tMaXN0ID0gc3R5bGVkLnVsYFxuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDA7XG4gIGJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDQwcHgpO1xuICByaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCwgMHB4KTtcbiAgbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0LCAwcHgpO1xuYDtcblxuY29uc3QgU25hY2tiYXJDb250YWluZXIgPSAoeyBzbmFja3MgfTogU25hY2tiYXJDb250YWluZXJQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTdHlsZWRTbmFja0xpc3QgYXJpYS1saXZlPVwicG9saXRlXCIgcm9sZT1cInJlZ2lvblwiPlxuICAgICAge3NuYWNrcy5tYXAoKHNuYWNrKSA9PiAoXG4gICAgICAgIDxCYXNlU25hY2sga2V5PXtzbmFjay5pZH0gey4uLnNuYWNrfT5cbiAgICAgICAgICB7c25hY2sucmVuZGVyPy4oc25hY2suaWQpID8/IDxEZWZhdWx0U25hY2sgey4uLnNuYWNrfSAvPn1cbiAgICAgICAgPC9CYXNlU25hY2s+XG4gICAgICApKX1cbiAgICA8L1N0eWxlZFNuYWNrTGlzdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNuYWNrYmFyUHJvdmlkZXI7XG4iXX0= */"));
137
+
138
+ var BaseSnack = function BaseSnack(_ref3) {
139
+ var _ref3$duration = _ref3.duration,
140
+ duration = _ref3$duration === void 0 ? 5000 : _ref3$duration,
141
+ id = _ref3.id,
142
+ children = _ref3.children;
143
+
144
+ var _useSnack = useSnack(),
145
+ removeSnack = _useSnack.removeSnack;
146
+
147
+ var _useState3 = (0, _react.useState)(false),
148
+ _useState4 = _slicedToArray(_useState3, 2),
149
+ expired = _useState4[0],
150
+ setExpired = _useState4[1];
151
+
152
+ (0, _react.useEffect)(function () {
153
+ var timeout = setTimeout(function () {
154
+ return setExpired(true);
155
+ }, duration);
156
+ return function () {
157
+ return clearTimeout(timeout);
158
+ };
159
+ }, [duration]);
160
+ return (0, _core.jsx)(BaseSnackContainer, {
161
+ expired: expired,
162
+ onAnimationEnd: function onAnimationEnd() {
163
+ return expired && removeSnack(id);
164
+ }
165
+ }, children);
166
+ };
167
+
168
+ exports.BaseSnack = BaseSnack;
169
+ var StyledSnackList = (0, _styledBase["default"])("ul", {
170
+ target: "e12tl09b1",
171
+ label: "StyledSnackList"
172
+ })(process.env.NODE_ENV === "production" ? {
173
+ name: "m4hu4a",
174
+ styles: "position:fixed;z-index:99999;display:flex;flex-direction:column;pointer-events:none;margin:0 auto;padding:0;bottom:env(safe-area-inset-bottom,40px);right:env(safe-area-inset-right,0px);left:env(safe-area-inset-left,0px);"
175
+ } : {
176
+ name: "m4hu4a",
177
+ styles: "position:fixed;z-index:99999;display:flex;flex-direction:column;pointer-events:none;margin:0 auto;padding:0;bottom:env(safe-area-inset-bottom,40px);right:env(safe-area-inset-right,0px);left:env(safe-area-inset-left,0px);",
178
+ map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNuYWNrYmFyUHJvdmlkZXIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlIaUMiLCJmaWxlIjoiU25hY2tiYXJQcm92aWRlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgY3JlYXRlQ29udGV4dCwgUmVhY3ROb2RlLCB1c2VTdGF0ZSwgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQGVtb3Rpb24vY29yZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgeyBzcGFjaW5nIH0gZnJvbSAnQG5kbGEvY29yZSc7XG5pbXBvcnQgRGVmYXVsdFNuYWNrIGZyb20gJy4vRGVmYXVsdFNuYWNrYmFyJztcblxuZXhwb3J0IGludGVyZmFjZSBTbmFjayB7XG4gIGNvbnRlbnQ/OiBSZWFjdE5vZGU7XG4gIGR1cmF0aW9uPzogbnVtYmVyO1xuICByZW5kZXI/OiAoaWQ6IHN0cmluZywgb25DbG9zZT86ICgpID0+IHZvaWQpID0+IFJlYWN0Tm9kZTtcbiAgaWQ6IHN0cmluZztcbiAgaWNvbj86IFJlYWN0Tm9kZTtcbiAgY2xvc2FibGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNuYWNrQ29udGV4dCB7XG4gIGFkZFNuYWNrOiAoc25hY2s6IFNuYWNrKSA9PiB2b2lkO1xuICByZW1vdmVTbmFjazogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsZWFyU25hY2tzOiAoKSA9PiB2b2lkO1xuICBjbG9zZVNuYWNrOiAoc25hY2s6IFNuYWNrKSA9PiB2b2lkO1xufVxuXG5jb25zdCBTbmFja2JhckNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNuYWNrQ29udGV4dCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGNvbnN0IHVzZVNuYWNrID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChTbmFja2JhckNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVNuYWNrIGNhbiBvbmx5IGJlIHVzZWQgd2l0aGluIGEgU25hY2tiYXJQcm92aWRlciEnKTtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufTtcblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuZXhwb3J0IGNvbnN0IFNuYWNrYmFyUHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiBQcm9wcykgPT4ge1xuICBjb25zdCBbc25hY2tzLCBzZXRTbmFja3NdID0gdXNlU3RhdGU8U25hY2tbXT4oW10pO1xuXG4gIGNvbnN0IGFkZFNuYWNrID0gdXNlQ2FsbGJhY2soKHNuYWNrOiBTbmFjaykgPT4ge1xuICAgIHNldFNuYWNrcygocHJldikgPT4gcHJldi5maWx0ZXIoKHMpID0+IHMuaWQgIT09IHNuYWNrLmlkKS5jb25jYXQoc25hY2spKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IHJlbW92ZVNuYWNrID0gdXNlQ2FsbGJhY2soKHNuYWNrSWQ6IHN0cmluZykgPT4ge1xuICAgIHNldFNuYWNrcygocHJldikgPT4gcHJldi5maWx0ZXIoKHsgaWQgfSkgPT4gc25hY2tJZCAhPT0gaWQpKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNsb3NlU25hY2sgPSB1c2VDYWxsYmFjaygoc25hY2s6IFNuYWNrKSA9PiB7XG4gICAgc2V0U25hY2tzKChwcmV2KSA9PiBwcmV2Lm1hcCgocCkgPT4gKHAuaWQgPT09IHNuYWNrLmlkID8geyAuLi5wLCBkdXJhdGlvbjogMCB9IDogcCkpKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNsZWFyU25hY2tzID0gdXNlQ2FsbGJhY2soKCkgPT4gc2V0U25hY2tzKFtdKSwgW10pO1xuXG4gIGNvbnN0IHZhbHVlID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoeyBhZGRTbmFjaywgcmVtb3ZlU25hY2ssIGNsZWFyU25hY2tzLCBjbG9zZVNuYWNrIH0pLFxuICAgIFthZGRTbmFjaywgcmVtb3ZlU25hY2ssIGNsZWFyU25hY2tzLCBjbG9zZVNuYWNrXSxcbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTbmFja2JhckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDxTbmFja2JhckNvbnRhaW5lciBzbmFja3M9e3NuYWNrc30gLz5cbiAgICA8L1NuYWNrYmFyQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBCYXNlU25hY2tQcm9wcyBleHRlbmRzIFNuYWNrIHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn1cblxuaW50ZXJmYWNlIEJhc2VTbmFja0NvbnRhaW5lclByb3BzIHtcbiAgZXhwaXJlZDogYm9vbGVhbjtcbn1cblxuY29uc3Qgc25hY2tiYXJJbkFuaW1hdGlvbiA9IGtleWZyYW1lcyh7XG4gICcwJSc6IHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWSgke3NwYWNpbmcubWVkaXVtfSlgLCBvcGFjaXR5OiAwIH0sXG4gICcxMDAlJzogeyBvcGFjaXR5OiAxIH0sXG59KTtcblxuY29uc3Qgc25hY2tiYXJPdXRBbmltYXRpb24gPSBrZXlmcmFtZXMoe1xuICAnMCUnOiB7IG9wYWNpdHk6IDEgfSxcbiAgJzEwMCUnOiB7IHRyYW5zZm9ybTogYHRyYW5zbGF0ZVkoJHtzcGFjaW5nLm1lZGl1bX0pYCwgb3BhY2l0eTogMCB9LFxufSk7XG5cbmNvbnN0IEJhc2VTbmFja0NvbnRhaW5lciA9IHN0eWxlZC5saTxCYXNlU25hY2tDb250YWluZXJQcm9wcz5gXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGFuaW1hdGlvbjogJHsocCkgPT4gKHAuZXhwaXJlZCA/IHNuYWNrYmFyT3V0QW5pbWF0aW9uIDogc25hY2tiYXJJbkFuaW1hdGlvbil9IDIwMG1zIGVhc2UtaW4tb3V0O1xuICBhbmltYXRpb24tZmlsbC1tb2RlOiBmb3J3YXJkcztcbmA7XG5cbmV4cG9ydCBjb25zdCBCYXNlU25hY2sgPSAoeyBkdXJhdGlvbiA9IDUwMDAsIGlkLCBjaGlsZHJlbiB9OiBCYXNlU25hY2tQcm9wcykgPT4ge1xuICBjb25zdCB7IHJlbW92ZVNuYWNrIH0gPSB1c2VTbmFjaygpO1xuICBjb25zdCBbZXhwaXJlZCwgc2V0RXhwaXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiBzZXRFeHBpcmVkKHRydWUpLCBkdXJhdGlvbik7XG4gICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgfSwgW2R1cmF0aW9uXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QmFzZVNuYWNrQ29udGFpbmVyIGV4cGlyZWQ9e2V4cGlyZWR9IG9uQW5pbWF0aW9uRW5kPXsoKSA9PiBleHBpcmVkICYmIHJlbW92ZVNuYWNrKGlkKX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9CYXNlU25hY2tDb250YWluZXI+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgU25hY2tiYXJDb250YWluZXJQcm9wcyB7XG4gIHNuYWNrczogU25hY2tbXTtcbn1cblxuY29uc3QgU3R5bGVkU25hY2tMaXN0ID0gc3R5bGVkLnVsYFxuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHotaW5kZXg6IDk5OTk5O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDA7XG4gIGJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDQwcHgpO1xuICByaWdodDogZW52KHNhZmUtYXJlYS1pbnNldC1yaWdodCwgMHB4KTtcbiAgbGVmdDogZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0LCAwcHgpO1xuYDtcblxuY29uc3QgU25hY2tiYXJDb250YWluZXIgPSAoeyBzbmFja3MgfTogU25hY2tiYXJDb250YWluZXJQcm9wcykgPT4ge1xuICByZXR1cm4gKFxuICAgIDxTdHlsZWRTbmFja0xpc3QgYXJpYS1saXZlPVwicG9saXRlXCIgcm9sZT1cInJlZ2lvblwiPlxuICAgICAge3NuYWNrcy5tYXAoKHNuYWNrKSA9PiAoXG4gICAgICAgIDxCYXNlU25hY2sga2V5PXtzbmFjay5pZH0gey4uLnNuYWNrfT5cbiAgICAgICAgICB7c25hY2sucmVuZGVyPy4oc25hY2suaWQpID8/IDxEZWZhdWx0U25hY2sgey4uLnNuYWNrfSAvPn1cbiAgICAgICAgPC9CYXNlU25hY2s+XG4gICAgICApKX1cbiAgICA8L1N0eWxlZFNuYWNrTGlzdD5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNuYWNrYmFyUHJvdmlkZXI7XG4iXX0= */",
179
+ toString: _EMOTION_STRINGIFIED_CSS_ERROR__
180
+ });
181
+
182
+ var SnackbarContainer = function SnackbarContainer(_ref4) {
183
+ var snacks = _ref4.snacks;
184
+ return (0, _core.jsx)(StyledSnackList, {
185
+ "aria-live": "polite",
186
+ role: "region"
187
+ }, snacks.map(function (snack) {
188
+ var _snack$render, _snack$render2;
189
+
190
+ return (0, _core.jsx)(BaseSnack, _extends({
191
+ key: snack.id
192
+ }, snack), (_snack$render = (_snack$render2 = snack.render) === null || _snack$render2 === void 0 ? void 0 : _snack$render2.call(snack, snack.id)) !== null && _snack$render !== void 0 ? _snack$render : (0, _core.jsx)(_DefaultSnackbar["default"], snack));
193
+ }));
194
+ };
195
+
196
+ var _default = SnackbarProvider;
197
+ exports["default"] = _default;
@@ -5,6 +5,6 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
- import SnackBar from './SnackBar';
9
- export type { SnackBarItem } from './SnackBar';
10
- export { SnackBar };
8
+ export type { Snack, SnackContext } from './SnackbarProvider';
9
+ export { SnackbarProvider, useSnack, BaseSnack } from './SnackbarProvider';
10
+ export { default as DefaultSnackbar } from './DefaultSnackbar';
@@ -3,13 +3,33 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "SnackBar", {
6
+ Object.defineProperty(exports, "SnackbarProvider", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _SnackBar["default"];
9
+ return _SnackbarProvider.SnackbarProvider;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "useSnack", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _SnackbarProvider.useSnack;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "BaseSnack", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _SnackbarProvider.BaseSnack;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "DefaultSnackbar", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _DefaultSnackbar["default"];
28
+ }
29
+ });
30
+
31
+ var _SnackbarProvider = require("./SnackbarProvider");
12
32
 
13
- var _SnackBar = _interopRequireDefault(require("./SnackBar"));
33
+ var _DefaultSnackbar = _interopRequireDefault(require("./DefaultSnackbar"));
14
34
 
15
35
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
package/lib/index.d.ts CHANGED
@@ -84,8 +84,8 @@ export { ListResource, BlockResource } from './Resource';
84
84
  export type { ListResourceProps } from './Resource';
85
85
  export type { TagType } from './TagSelector';
86
86
  export { TagSelector } from './TagSelector';
87
- export type { SnackBarItem } from './SnackBar';
88
- export { SnackBar } from './SnackBar';
87
+ export { SnackbarProvider, useSnack, BaseSnack, DefaultSnackbar } from './SnackBar';
88
+ export type { Snack, SnackContext } from './SnackBar';
89
89
  export { InfoBlock } from './InfoBlock';
90
90
  export { TreeStructure } from './TreeStructure';
91
91
  export type { FolderType, TreeStructureProps, TreeStructureMenuProps } from './TreeStructure';
package/lib/index.js CHANGED
@@ -183,7 +183,10 @@ var _exportNames = {
183
183
  ListResource: true,
184
184
  BlockResource: true,
185
185
  TagSelector: true,
186
- SnackBar: true,
186
+ SnackbarProvider: true,
187
+ useSnack: true,
188
+ BaseSnack: true,
189
+ DefaultSnackbar: true,
187
190
  InfoBlock: true,
188
191
  TreeStructure: true
189
192
  };
@@ -1249,10 +1252,28 @@ Object.defineProperty(exports, "TagSelector", {
1249
1252
  return _TagSelector.TagSelector;
1250
1253
  }
1251
1254
  });
1252
- Object.defineProperty(exports, "SnackBar", {
1255
+ Object.defineProperty(exports, "SnackbarProvider", {
1253
1256
  enumerable: true,
1254
1257
  get: function get() {
1255
- return _SnackBar.SnackBar;
1258
+ return _SnackBar.SnackbarProvider;
1259
+ }
1260
+ });
1261
+ Object.defineProperty(exports, "useSnack", {
1262
+ enumerable: true,
1263
+ get: function get() {
1264
+ return _SnackBar.useSnack;
1265
+ }
1266
+ });
1267
+ Object.defineProperty(exports, "BaseSnack", {
1268
+ enumerable: true,
1269
+ get: function get() {
1270
+ return _SnackBar.BaseSnack;
1271
+ }
1272
+ });
1273
+ Object.defineProperty(exports, "DefaultSnackbar", {
1274
+ enumerable: true,
1275
+ get: function get() {
1276
+ return _SnackBar.DefaultSnackbar;
1256
1277
  }
1257
1278
  });
1258
1279
  Object.defineProperty(exports, "InfoBlock", {
@@ -63,6 +63,7 @@ declare const messages: {
63
63
  delete: string;
64
64
  edit: string;
65
65
  missingName: string;
66
+ folderDeleted: string;
66
67
  };
67
68
  tags: string;
68
69
  tags_plural: string;
@@ -127,8 +128,14 @@ declare const messages: {
127
128
  removeTitle: string;
128
129
  confirmRemove: string;
129
130
  copyLink: string;
131
+ linkCopied: string;
130
132
  addToMyNdla: string;
131
133
  addedToMyNdla: string;
134
+ addedToFolder: string;
135
+ removedFromFolder: string;
136
+ titleUpdated: string;
137
+ tagsUpdated: string;
138
+ show: string;
132
139
  };
133
140
  };
134
141
  snackbar: {
@@ -957,7 +957,8 @@ var messages = _objectSpread(_objectSpread({
957
957
  folder: 'Folder',
958
958
  "delete": 'Delete',
959
959
  edit: 'Edit',
960
- missingName: 'Folder name required'
960
+ missingName: 'Folder name required',
961
+ folderDeleted: '"{{folderName}}" deleted'
961
962
  },
962
963
  tags: '{{count}} tag',
963
964
  tags_plural: '{{count}} tags',
@@ -1022,8 +1023,14 @@ var messages = _objectSpread(_objectSpread({
1022
1023
  removeTitle: 'Remove resource',
1023
1024
  confirmRemove: 'Are you sure you want to remove the resource from this folder?',
1024
1025
  copyLink: 'Copy link to this page',
1026
+ linkCopied: 'Copied to clipboard',
1025
1027
  addToMyNdla: 'Add to My NDLA',
1026
- addedToMyNdla: 'Added to My NDLA'
1028
+ addedToMyNdla: 'Added to My NDLA',
1029
+ addedToFolder: 'Resource added to "{{folderName}}"',
1030
+ removedFromFolder: 'Removed from "{{folderName}}"',
1031
+ titleUpdated: 'Title updated',
1032
+ tagsUpdated: 'Tags updated',
1033
+ show: 'Show'
1027
1034
  }
1028
1035
  },
1029
1036
  snackbar: {
@@ -63,6 +63,7 @@ declare const messages: {
63
63
  delete: string;
64
64
  edit: string;
65
65
  missingName: string;
66
+ folderDeleted: string;
66
67
  };
67
68
  tags: string;
68
69
  tags_plural: string;
@@ -127,8 +128,14 @@ declare const messages: {
127
128
  removeTitle: string;
128
129
  confirmRemove: string;
129
130
  copyLink: string;
131
+ linkCopied: string;
130
132
  addToMyNdla: string;
131
133
  addedToMyNdla: string;
134
+ addedToFolder: string;
135
+ removedFromFolder: string;
136
+ titleUpdated: string;
137
+ tagsUpdated: string;
138
+ show: string;
132
139
  };
133
140
  };
134
141
  snackbar: {
@@ -957,7 +957,8 @@ var messages = _objectSpread(_objectSpread({
957
957
  folder: 'Mappe',
958
958
  "delete": 'Slett',
959
959
  edit: 'Rediger',
960
- missingName: 'Mappenavn er påkrevd'
960
+ missingName: 'Mappenavn er påkrevd',
961
+ folderDeleted: '"{{folderName}}" er slettet'
961
962
  },
962
963
  tags: '{{count}} tag',
963
964
  tags_plural: '{{count}} tags',
@@ -1022,8 +1023,14 @@ var messages = _objectSpread(_objectSpread({
1022
1023
  removeTitle: 'Fjern ressurs',
1023
1024
  confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen fra denne mappen?',
1024
1025
  copyLink: 'Kopier lenke til siden',
1026
+ linkCopied: 'Kopiert til utklippstavle',
1025
1027
  addToMyNdla: 'Legg i Min NDLA',
1026
- addedToMyNdla: 'Lagt i Min NDLA'
1028
+ addedToMyNdla: 'Lagt i Min NDLA',
1029
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1030
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1031
+ titleUpdated: 'Tittel oppdatert',
1032
+ tagsUpdated: 'Tags oppdatert',
1033
+ show: 'Vis'
1027
1034
  }
1028
1035
  },
1029
1036
  snackbar: {
@@ -63,6 +63,7 @@ declare const messages: {
63
63
  delete: string;
64
64
  edit: string;
65
65
  missingName: string;
66
+ folderDeleted: string;
66
67
  };
67
68
  tags: string;
68
69
  tags_plural: string;
@@ -127,8 +128,14 @@ declare const messages: {
127
128
  removeTitle: string;
128
129
  confirmRemove: string;
129
130
  copyLink: string;
131
+ linkCopied: string;
130
132
  addToMyNdla: string;
131
133
  addedToMyNdla: string;
134
+ addedToFolder: string;
135
+ removedFromFolder: string;
136
+ titleUpdated: string;
137
+ tagsUpdated: string;
138
+ show: string;
132
139
  };
133
140
  };
134
141
  snackbar: {
@@ -957,7 +957,8 @@ var messages = _objectSpread(_objectSpread({
957
957
  folder: 'Mappe',
958
958
  "delete": 'Slett',
959
959
  edit: 'Rediger',
960
- missingName: 'Mappenavn er påkrevd'
960
+ missingName: 'Mappenavn er påkrevd',
961
+ folderDeleted: '"{{folderName}}" er sletta'
961
962
  },
962
963
  tags: '{{count}} tag',
963
964
  tags_plural: '{{count}} tags',
@@ -1022,8 +1023,14 @@ var messages = _objectSpread(_objectSpread({
1022
1023
  removeTitle: 'Fjern ressurs',
1023
1024
  confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen frå denne mappen?',
1024
1025
  copyLink: 'Kopier lenke til sida',
1026
+ linkCopied: 'Kopiert til utklippstavla',
1025
1027
  addToMyNdla: 'Legg i Min NDLA',
1026
- addedToMyNdla: 'Lagt i Min NDLA'
1028
+ addedToMyNdla: 'Lagt i Min NDLA',
1029
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1030
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1031
+ titleUpdated: 'Tittel oppdatert',
1032
+ tagsUpdated: 'Tags oppdatert',
1033
+ show: 'Vis'
1027
1034
  }
1028
1035
  },
1029
1036
  snackbar: {
@@ -63,6 +63,7 @@ declare const messages: {
63
63
  delete: string;
64
64
  edit: string;
65
65
  missingName: string;
66
+ folderDeleted: string;
66
67
  };
67
68
  tags: string;
68
69
  tags_plural: string;
@@ -127,8 +128,14 @@ declare const messages: {
127
128
  removeTitle: string;
128
129
  confirmRemove: string;
129
130
  copyLink: string;
131
+ linkCopied: string;
130
132
  addToMyNdla: string;
131
133
  addedToMyNdla: string;
134
+ addedToFolder: string;
135
+ removedFromFolder: string;
136
+ titleUpdated: string;
137
+ tagsUpdated: string;
138
+ show: string;
132
139
  };
133
140
  };
134
141
  snackbar: {
@@ -957,7 +957,8 @@ var messages = _objectSpread(_objectSpread({
957
957
  folder: 'Mappe',
958
958
  "delete": 'Slett',
959
959
  edit: 'Rediger',
960
- missingName: 'Mappenavn er påkrevd'
960
+ missingName: 'Mappenavn er påkrevd',
961
+ folderDeleted: '"{{folderName}}" er sletta'
961
962
  },
962
963
  tags: '{{count}} tag',
963
964
  tags_plural: '{{count}} tags',
@@ -1022,8 +1023,14 @@ var messages = _objectSpread(_objectSpread({
1022
1023
  removeTitle: 'Fjern ressurs',
1023
1024
  confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen frå denne mappen?',
1024
1025
  copyLink: 'Kopier lenke til siden',
1026
+ linkCopied: 'Kopiert til utklippstavla',
1025
1027
  addToMyNdla: 'Legg i Min NDLA',
1026
- addedToMyNdla: 'Lagt i Min NDLA'
1028
+ addedToMyNdla: 'Lagt i Min NDLA',
1029
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1030
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1031
+ titleUpdated: 'Tittel oppdatert',
1032
+ tagsUpdated: 'Tags oppdatert',
1033
+ show: 'Vis'
1027
1034
  }
1028
1035
  },
1029
1036
  snackbar: {
@@ -63,6 +63,7 @@ declare const messages: {
63
63
  delete: string;
64
64
  edit: string;
65
65
  missingName: string;
66
+ folderDeleted: string;
66
67
  };
67
68
  tags: string;
68
69
  tags_plural: string;
@@ -127,8 +128,14 @@ declare const messages: {
127
128
  removeTitle: string;
128
129
  confirmRemove: string;
129
130
  copyLink: string;
131
+ linkCopied: string;
130
132
  addToMyNdla: string;
131
133
  addedToMyNdla: string;
134
+ addedToFolder: string;
135
+ removedFromFolder: string;
136
+ titleUpdated: string;
137
+ tagsUpdated: string;
138
+ show: string;
132
139
  };
133
140
  };
134
141
  snackbar: {
@@ -957,7 +957,8 @@ var messages = _objectSpread(_objectSpread({
957
957
  folder: 'Mappe',
958
958
  "delete": 'Slett',
959
959
  edit: 'Rediger',
960
- missingName: 'Mappenavn er påkrevd'
960
+ missingName: 'Mappenavn er påkrevd',
961
+ folderDeleted: '"{{folderName}}" er sletta'
961
962
  },
962
963
  tags: '{{count}} tag',
963
964
  tags_plural: '{{count}} tags',
@@ -1022,8 +1023,14 @@ var messages = _objectSpread(_objectSpread({
1022
1023
  removeTitle: 'Fjern ressurs',
1023
1024
  confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen frå denne mappen?',
1024
1025
  copyLink: 'Kopier lenke til siden',
1026
+ linkCopied: 'Kopiert til utklippstavla',
1025
1027
  addToMyNdla: 'Legg i Min NDLA',
1026
- addedToMyNdla: 'Lagt i Min NDLA'
1028
+ addedToMyNdla: 'Lagt i Min NDLA',
1029
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1030
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1031
+ titleUpdated: 'Tittel oppdatert',
1032
+ tagsUpdated: 'Tags oppdatert',
1033
+ show: 'Vis'
1027
1034
  }
1028
1035
  },
1029
1036
  snackbar: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "22.0.1",
3
+ "version": "22.0.2",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -31,7 +31,7 @@
31
31
  "types"
32
32
  ],
33
33
  "dependencies": {
34
- "@ndla/button": "^3.2.0",
34
+ "@ndla/button": "^3.2.1",
35
35
  "@ndla/carousel": "^1.2.15",
36
36
  "@ndla/core": "^2.3.3",
37
37
  "@ndla/forms": "^3.1.3",
@@ -39,8 +39,8 @@
39
39
  "@ndla/icons": "^1.11.3",
40
40
  "@ndla/licenses": "^5.0.6",
41
41
  "@ndla/modal": "^1.2.16",
42
- "@ndla/notion": "^3.1.26",
43
- "@ndla/safelink": "^2.2.4",
42
+ "@ndla/notion": "^3.1.27",
43
+ "@ndla/safelink": "^2.2.5",
44
44
  "@ndla/switch": "^0.1.10",
45
45
  "@ndla/tabs": "^1.1.14",
46
46
  "@ndla/tooltip": "^2.1.5",
@@ -83,5 +83,5 @@
83
83
  "publishConfig": {
84
84
  "access": "public"
85
85
  },
86
- "gitHead": "b4b0a48ca5d00d92fadafa85326a8ee86b91f152"
86
+ "gitHead": "d26b1f085bcef66dcc1d8ed829072ab1223d28eb"
87
87
  }
@@ -6,18 +6,14 @@
6
6
  *
7
7
  */
8
8
 
9
- import React, { ReactNode } from 'react';
9
+ import React, { ReactNode, SVGProps } from 'react';
10
10
  import { uuid } from '@ndla/util';
11
11
 
12
- interface Props {
12
+ interface Props extends Omit<SVGProps<SVGSVGElement>, 'viewBox'> {
13
13
  children?: ReactNode;
14
- speed?: number;
15
- width?: number;
16
- height?: number;
17
14
  primaryColor?: string;
18
15
  secondaryColor?: string;
19
- preserveAspectRatio?: string;
20
- className?: string;
16
+ viewBox?: string | null;
21
17
  }
22
18
 
23
19
  const ContentLoader = ({
@@ -29,18 +25,22 @@ const ContentLoader = ({
29
25
  primaryColor = '#f0f0f0',
30
26
  secondaryColor = '#e0e0e0',
31
27
  speed = 2,
28
+ viewBox: viewBoxProp,
32
29
  ...rest
33
30
  }: Props) => {
34
31
  const idClip = uuid();
35
32
  const idGradient = uuid();
33
+ const viewBox = viewBoxProp === undefined ? `0 0 ${width} ${height}` : viewBoxProp;
36
34
 
37
35
  return (
38
36
  <svg
39
- viewBox={`0 0 ${width} ${height}`}
37
+ viewBox={viewBox ?? undefined}
40
38
  version="1.1"
41
39
  preserveAspectRatio={preserveAspectRatio}
42
40
  className={className}
43
- {...rest}>
41
+ {...rest}
42
+ height={typeof height === 'string' ? height : undefined}
43
+ width={typeof width === 'string' ? width : undefined}>
44
44
  <rect
45
45
  style={{ fill: `url(#${idGradient})` }}
46
46
  clipPath={`url(#${idClip})`}