@ndla/ui 30.6.1 → 30.7.0

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.
@@ -0,0 +1,57 @@
1
+ import _styled from "@emotion/styled/base";
2
+ /**
3
+ * Copyright (c) 2022-present, NDLA.
4
+ *
5
+ * This source code is licensed under the GPLv3 license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ */
9
+
10
+ import React, { useMemo } from 'react';
11
+ import { colors, fonts, spacing } from '@ndla/core';
12
+ import { useTranslation } from 'react-i18next';
13
+ import { IconButtonV2 as IconButton } from '@ndla/button';
14
+ import { alphabet } from './alphabet';
15
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
16
+ var StyledUL = /*#__PURE__*/_styled("ul", {
17
+ target: "e1uzf2ke1",
18
+ label: "StyledUL"
19
+ })("list-style:none;display:flex;flex-direction:row;flex-wrap:wrap;gap:", spacing.xsmall, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxldHRlckZpbHRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZTBCIiwiZmlsZSI6IkxldHRlckZpbHRlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IEljb25CdXR0b25WMiBhcyBJY29uQnV0dG9uIH0gZnJvbSAnQG5kbGEvYnV0dG9uJztcbmltcG9ydCB7IGFscGhhYmV0IH0gZnJvbSAnLi9hbHBoYWJldCc7XG5cbmNvbnN0IFN0eWxlZFVMID0gc3R5bGVkLnVsYFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogJHtzcGFjaW5nLnhzbWFsbH07XG5gO1xuXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQoSWNvbkJ1dHRvbilgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogJHtzcGFjaW5nLm5vcm1hbH07XG4gIGhlaWdodDogJHtzcGFjaW5nLm5vcm1hbH07XG4gIHBhZGRpbmc6IDA7XG4gICR7Zm9udHMuc2l6ZXMoMTgpfTtcbiAgJiYge1xuICAgIGZvbnQtd2VpZ2h0OiAke2ZvbnRzLndlaWdodC5zZW1pYm9sZH07XG4gIH1cblxuICA6ZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5saWdodH07XG4gIH1cbmA7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIHZhbHVlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvbkNoYW5nZTogKHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBlbmFibGVkTGV0dGVyczogc3RyaW5nW107XG59XG5cbmNvbnN0IExldHRlckZpbHRlciA9ICh7IHZhbHVlLCBvbkNoYW5nZSwgZW5hYmxlZExldHRlcnMgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJzID0gdXNlTWVtbygoKSA9PiBlbmFibGVkTGV0dGVycy5tYXAoKGxldHRlcikgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKCkpLCBbZW5hYmxlZExldHRlcnNdKTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRVTD5cbiAgICAgIHthbHBoYWJldC5tYXAoKGxldHRlcikgPT4ge1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9ICF1cHBlcmNhc2VMZXR0ZXJzLmluY2x1ZGVzKGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBsZXR0ZXIudG9VcHBlckNhc2UoKSA9PT0gdmFsdWU/LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGxpIGtleT17bGV0dGVyfT5cbiAgICAgICAgICAgIDxTdHlsZWRCdXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gKHNlbGVjdGVkID8gb25DaGFuZ2UodW5kZWZpbmVkKSA6IG9uQ2hhbmdlKGxldHRlcikpfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdsaXN0dmlldy5maWx0ZXJzLmFscGhhYmV0LmxldHRlckZpbHRlcicsIHsgbGV0dGVyIH0pfVxuICAgICAgICAgICAgICB2YXJpYW50PXshc2VsZWN0ZWQgPyAnZ2hvc3QnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBjb2xvclRoZW1lPXshc2VsZWN0ZWQgPyAnbGlnaHRlcicgOiAncHJpbWFyeSd9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgc2l6ZT1cInhzbWFsbFwiPlxuICAgICAgICAgICAgICB7bGV0dGVyfVxuICAgICAgICAgICAgPC9TdHlsZWRCdXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvU3R5bGVkVUw+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMZXR0ZXJGaWx0ZXI7XG4iXX0= */"));
20
+ var StyledButton = /*#__PURE__*/_styled(IconButton, {
21
+ target: "e1uzf2ke0",
22
+ label: "StyledButton"
23
+ })("display:flex;align-items:center;justify-content:center;width:", spacing.normal, ";height:", spacing.normal, ";padding:0;", fonts.sizes(18), ";&&{font-weight:", fonts.weight.semibold, ";}:disabled{pointer-events:none;color:", colors.brand.light, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxldHRlckZpbHRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJ1QyIsImZpbGUiOiJMZXR0ZXJGaWx0ZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbG9ycywgZm9udHMsIHNwYWNpbmcgfSBmcm9tICdAbmRsYS9jb3JlJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBJY29uQnV0dG9uVjIgYXMgSWNvbkJ1dHRvbiB9IGZyb20gJ0BuZGxhL2J1dHRvbic7XG5pbXBvcnQgeyBhbHBoYWJldCB9IGZyb20gJy4vYWxwaGFiZXQnO1xuXG5jb25zdCBTdHlsZWRVTCA9IHN0eWxlZC51bGBcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6ICR7c3BhY2luZy54c21hbGx9O1xuYDtcblxuY29uc3QgU3R5bGVkQnV0dG9uID0gc3R5bGVkKEljb25CdXR0b24pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6ICR7c3BhY2luZy5ub3JtYWx9O1xuICBoZWlnaHQ6ICR7c3BhY2luZy5ub3JtYWx9O1xuICBwYWRkaW5nOiAwO1xuICAke2ZvbnRzLnNpemVzKDE4KX07XG4gICYmIHtcbiAgICBmb250LXdlaWdodDogJHtmb250cy53ZWlnaHQuc2VtaWJvbGR9O1xuICB9XG5cbiAgOmRpc2FibGVkIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjb2xvcjogJHtjb2xvcnMuYnJhbmQubGlnaHR9O1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICB2YWx1ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25DaGFuZ2U6ICh2YWx1ZT86IHN0cmluZykgPT4gdm9pZDtcbiAgZW5hYmxlZExldHRlcnM6IHN0cmluZ1tdO1xufVxuXG5jb25zdCBMZXR0ZXJGaWx0ZXIgPSAoeyB2YWx1ZSwgb25DaGFuZ2UsIGVuYWJsZWRMZXR0ZXJzIH06IFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgdXBwZXJjYXNlTGV0dGVycyA9IHVzZU1lbW8oKCkgPT4gZW5hYmxlZExldHRlcnMubWFwKChsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKSwgW2VuYWJsZWRMZXR0ZXJzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkVUw+XG4gICAgICB7YWxwaGFiZXQubWFwKChsZXR0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSAhdXBwZXJjYXNlTGV0dGVycy5pbmNsdWRlcyhsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gbGV0dGVyLnRvVXBwZXJDYXNlKCkgPT09IHZhbHVlPy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSBrZXk9e2xldHRlcn0+XG4gICAgICAgICAgICA8U3R5bGVkQnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IChzZWxlY3RlZCA/IG9uQ2hhbmdlKHVuZGVmaW5lZCkgOiBvbkNoYW5nZShsZXR0ZXIpKX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbGlzdHZpZXcuZmlsdGVycy5hbHBoYWJldC5sZXR0ZXJGaWx0ZXInLCB7IGxldHRlciB9KX1cbiAgICAgICAgICAgICAgdmFyaWFudD17IXNlbGVjdGVkID8gJ2dob3N0JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgY29sb3JUaGVtZT17IXNlbGVjdGVkID8gJ2xpZ2h0ZXInIDogJ3ByaW1hcnknfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHNpemU9XCJ4c21hbGxcIj5cbiAgICAgICAgICAgICAge2xldHRlcn1cbiAgICAgICAgICAgIDwvU3R5bGVkQnV0dG9uPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L1N0eWxlZFVMPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTGV0dGVyRmlsdGVyO1xuIl19 */"));
24
+ var LetterFilter = function LetterFilter(_ref) {
25
+ var value = _ref.value,
26
+ onChange = _ref.onChange,
27
+ enabledLetters = _ref.enabledLetters;
28
+ var _useTranslation = useTranslation(),
29
+ t = _useTranslation.t;
30
+ var uppercaseLetters = useMemo(function () {
31
+ return enabledLetters.map(function (letter) {
32
+ return letter.toUpperCase();
33
+ });
34
+ }, [enabledLetters]);
35
+ return _jsx(StyledUL, {
36
+ children: alphabet.map(function (letter) {
37
+ var disabled = !uppercaseLetters.includes(letter.toUpperCase());
38
+ var selected = letter.toUpperCase() === (value === null || value === void 0 ? void 0 : value.toUpperCase());
39
+ return _jsx("li", {
40
+ children: _jsx(StyledButton, {
41
+ onClick: function onClick() {
42
+ return selected ? onChange(undefined) : onChange(letter);
43
+ },
44
+ "aria-label": t('listview.filters.alphabet.letterFilter', {
45
+ letter: letter
46
+ }),
47
+ variant: !selected ? 'ghost' : undefined,
48
+ colorTheme: !selected ? 'lighter' : 'primary',
49
+ disabled: disabled,
50
+ size: "xsmall",
51
+ children: letter
52
+ })
53
+ }, letter);
54
+ })
55
+ });
56
+ };
57
+ export default LetterFilter;
@@ -0,0 +1,44 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ 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."); }
3
+ 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); }
4
+ 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; }
5
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : 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; }
6
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
7
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
+ 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; }
10
+ /**
11
+ * Copyright (c) 2022-present, NDLA.
12
+ *
13
+ * This source code is licensed under the GPLv3 license found in the
14
+ * LICENSE file in the root directory of this source tree.
15
+ *
16
+ */
17
+
18
+ import { useArgs } from '@storybook/client-api';
19
+ import React from 'react';
20
+ import { defaultParameters } from '../../../designmanual/stories/defaults';
21
+ import LetterFilter from './LetterFilter';
22
+ import { jsx as _jsx } from "@emotion/react/jsx-runtime";
23
+ export default {
24
+ title: 'Enkle komponenter/LetterFilter',
25
+ component: LetterFilter,
26
+ parameters: _objectSpread({}, defaultParameters),
27
+ args: {
28
+ enabledLetters: ['a', 'c'],
29
+ onChange: function onChange(value) {}
30
+ }
31
+ };
32
+ export var LetterFilterStory = function LetterFilterStory(args) {
33
+ var _useArgs = useArgs(),
34
+ _useArgs2 = _slicedToArray(_useArgs, 2),
35
+ updateArgs = _useArgs2[1];
36
+ return _jsx(LetterFilter, _objectSpread(_objectSpread({}, args), {}, {
37
+ onChange: function onChange(val) {
38
+ return updateArgs({
39
+ value: val
40
+ });
41
+ }
42
+ }));
43
+ };
44
+ LetterFilterStory.storyName = 'LetterFilter';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ export var alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Æ', 'Ø', 'Å'];
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import LetterFilter from './LetterFilter';
10
+ export default LetterFilter;
package/es/index.js CHANGED
@@ -86,4 +86,5 @@ export { TagSelector } from './TagSelector';
86
86
  export { SnackbarProvider, useSnack, BaseSnack, DefaultSnackbar } from './SnackBar';
87
87
  export { InfoBlock } from './InfoBlock';
88
88
  export { TreeStructure } from './TreeStructure';
89
- export { SearchField, SearchResultList, SearchResultItem, ActiveFilters, ToggleSearchButton } from './Search';
89
+ export { SearchField, SearchResultList, SearchResultItem, ActiveFilters, ToggleSearchButton } from './Search';
90
+ export { default as LetterFilter } from './LetterFilter';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ interface Props {
9
+ value?: string | undefined;
10
+ onChange: (value?: string) => void;
11
+ enabledLetters: string[];
12
+ }
13
+ declare const LetterFilter: ({ value, onChange, enabledLetters }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
14
+ export default LetterFilter;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+
3
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _base = _interopRequireDefault(require("@emotion/styled/base"));
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _core = require("@ndla/core");
11
+ var _reactI18next = require("react-i18next");
12
+ var _button = require("@ndla/button");
13
+ var _alphabet = require("./alphabet");
14
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
15
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
18
+ /**
19
+ * Copyright (c) 2022-present, NDLA.
20
+ *
21
+ * This source code is licensed under the GPLv3 license found in the
22
+ * LICENSE file in the root directory of this source tree.
23
+ *
24
+ */
25
+
26
+ var StyledUL = /*#__PURE__*/(0, _base["default"])("ul", {
27
+ target: "e1uzf2ke1",
28
+ label: "StyledUL"
29
+ })("list-style:none;display:flex;flex-direction:row;flex-wrap:wrap;gap:", _core.spacing.xsmall, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxldHRlckZpbHRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZTBCIiwiZmlsZSI6IkxldHRlckZpbHRlci50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcbmltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IEljb25CdXR0b25WMiBhcyBJY29uQnV0dG9uIH0gZnJvbSAnQG5kbGEvYnV0dG9uJztcbmltcG9ydCB7IGFscGhhYmV0IH0gZnJvbSAnLi9hbHBoYWJldCc7XG5cbmNvbnN0IFN0eWxlZFVMID0gc3R5bGVkLnVsYFxuICBsaXN0LXN0eWxlOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogJHtzcGFjaW5nLnhzbWFsbH07XG5gO1xuXG5jb25zdCBTdHlsZWRCdXR0b24gPSBzdHlsZWQoSWNvbkJ1dHRvbilgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB3aWR0aDogJHtzcGFjaW5nLm5vcm1hbH07XG4gIGhlaWdodDogJHtzcGFjaW5nLm5vcm1hbH07XG4gIHBhZGRpbmc6IDA7XG4gICR7Zm9udHMuc2l6ZXMoMTgpfTtcbiAgJiYge1xuICAgIGZvbnQtd2VpZ2h0OiAke2ZvbnRzLndlaWdodC5zZW1pYm9sZH07XG4gIH1cblxuICA6ZGlzYWJsZWQge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5saWdodH07XG4gIH1cbmA7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIHZhbHVlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBvbkNoYW5nZTogKHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkO1xuICBlbmFibGVkTGV0dGVyczogc3RyaW5nW107XG59XG5cbmNvbnN0IExldHRlckZpbHRlciA9ICh7IHZhbHVlLCBvbkNoYW5nZSwgZW5hYmxlZExldHRlcnMgfTogUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB1cHBlcmNhc2VMZXR0ZXJzID0gdXNlTWVtbygoKSA9PiBlbmFibGVkTGV0dGVycy5tYXAoKGxldHRlcikgPT4gbGV0dGVyLnRvVXBwZXJDYXNlKCkpLCBbZW5hYmxlZExldHRlcnNdKTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRVTD5cbiAgICAgIHthbHBoYWJldC5tYXAoKGxldHRlcikgPT4ge1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9ICF1cHBlcmNhc2VMZXR0ZXJzLmluY2x1ZGVzKGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBsZXR0ZXIudG9VcHBlckNhc2UoKSA9PT0gdmFsdWU/LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPGxpIGtleT17bGV0dGVyfT5cbiAgICAgICAgICAgIDxTdHlsZWRCdXR0b25cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gKHNlbGVjdGVkID8gb25DaGFuZ2UodW5kZWZpbmVkKSA6IG9uQ2hhbmdlKGxldHRlcikpfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdsaXN0dmlldy5maWx0ZXJzLmFscGhhYmV0LmxldHRlckZpbHRlcicsIHsgbGV0dGVyIH0pfVxuICAgICAgICAgICAgICB2YXJpYW50PXshc2VsZWN0ZWQgPyAnZ2hvc3QnIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBjb2xvclRoZW1lPXshc2VsZWN0ZWQgPyAnbGlnaHRlcicgOiAncHJpbWFyeSd9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgc2l6ZT1cInhzbWFsbFwiPlxuICAgICAgICAgICAgICB7bGV0dGVyfVxuICAgICAgICAgICAgPC9TdHlsZWRCdXR0b24+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvU3R5bGVkVUw+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBMZXR0ZXJGaWx0ZXI7XG4iXX0= */"));
30
+ var StyledButton = /*#__PURE__*/(0, _base["default"])(_button.IconButtonV2, {
31
+ target: "e1uzf2ke0",
32
+ label: "StyledButton"
33
+ })("display:flex;align-items:center;justify-content:center;width:", _core.spacing.normal, ";height:", _core.spacing.normal, ";padding:0;", _core.fonts.sizes(18), ";&&{font-weight:", _core.fonts.weight.semibold, ";}:disabled{pointer-events:none;color:", _core.colors.brand.light, ";}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxldHRlckZpbHRlci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJ1QyIsImZpbGUiOiJMZXR0ZXJGaWx0ZXIudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItcHJlc2VudCwgTkRMQS5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEx2MyBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICpcbiAqL1xuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbG9ycywgZm9udHMsIHNwYWNpbmcgfSBmcm9tICdAbmRsYS9jb3JlJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBJY29uQnV0dG9uVjIgYXMgSWNvbkJ1dHRvbiB9IGZyb20gJ0BuZGxhL2J1dHRvbic7XG5pbXBvcnQgeyBhbHBoYWJldCB9IGZyb20gJy4vYWxwaGFiZXQnO1xuXG5jb25zdCBTdHlsZWRVTCA9IHN0eWxlZC51bGBcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6ICR7c3BhY2luZy54c21hbGx9O1xuYDtcblxuY29uc3QgU3R5bGVkQnV0dG9uID0gc3R5bGVkKEljb25CdXR0b24pYFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6ICR7c3BhY2luZy5ub3JtYWx9O1xuICBoZWlnaHQ6ICR7c3BhY2luZy5ub3JtYWx9O1xuICBwYWRkaW5nOiAwO1xuICAke2ZvbnRzLnNpemVzKDE4KX07XG4gICYmIHtcbiAgICBmb250LXdlaWdodDogJHtmb250cy53ZWlnaHQuc2VtaWJvbGR9O1xuICB9XG5cbiAgOmRpc2FibGVkIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjb2xvcjogJHtjb2xvcnMuYnJhbmQubGlnaHR9O1xuICB9XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMge1xuICB2YWx1ZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25DaGFuZ2U6ICh2YWx1ZT86IHN0cmluZykgPT4gdm9pZDtcbiAgZW5hYmxlZExldHRlcnM6IHN0cmluZ1tdO1xufVxuXG5jb25zdCBMZXR0ZXJGaWx0ZXIgPSAoeyB2YWx1ZSwgb25DaGFuZ2UsIGVuYWJsZWRMZXR0ZXJzIH06IFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgdXBwZXJjYXNlTGV0dGVycyA9IHVzZU1lbW8oKCkgPT4gZW5hYmxlZExldHRlcnMubWFwKChsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKSwgW2VuYWJsZWRMZXR0ZXJzXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkVUw+XG4gICAgICB7YWxwaGFiZXQubWFwKChsZXR0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSAhdXBwZXJjYXNlTGV0dGVycy5pbmNsdWRlcyhsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gbGV0dGVyLnRvVXBwZXJDYXNlKCkgPT09IHZhbHVlPy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxsaSBrZXk9e2xldHRlcn0+XG4gICAgICAgICAgICA8U3R5bGVkQnV0dG9uXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IChzZWxlY3RlZCA/IG9uQ2hhbmdlKHVuZGVmaW5lZCkgOiBvbkNoYW5nZShsZXR0ZXIpKX1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbGlzdHZpZXcuZmlsdGVycy5hbHBoYWJldC5sZXR0ZXJGaWx0ZXInLCB7IGxldHRlciB9KX1cbiAgICAgICAgICAgICAgdmFyaWFudD17IXNlbGVjdGVkID8gJ2dob3N0JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgY29sb3JUaGVtZT17IXNlbGVjdGVkID8gJ2xpZ2h0ZXInIDogJ3ByaW1hcnknfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHNpemU9XCJ4c21hbGxcIj5cbiAgICAgICAgICAgICAge2xldHRlcn1cbiAgICAgICAgICAgIDwvU3R5bGVkQnV0dG9uPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L1N0eWxlZFVMPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTGV0dGVyRmlsdGVyO1xuIl19 */"));
34
+ var LetterFilter = function LetterFilter(_ref) {
35
+ var value = _ref.value,
36
+ onChange = _ref.onChange,
37
+ enabledLetters = _ref.enabledLetters;
38
+ var _useTranslation = (0, _reactI18next.useTranslation)(),
39
+ t = _useTranslation.t;
40
+ var uppercaseLetters = (0, _react.useMemo)(function () {
41
+ return enabledLetters.map(function (letter) {
42
+ return letter.toUpperCase();
43
+ });
44
+ }, [enabledLetters]);
45
+ return (0, _jsxRuntime.jsx)(StyledUL, {
46
+ children: _alphabet.alphabet.map(function (letter) {
47
+ var disabled = !uppercaseLetters.includes(letter.toUpperCase());
48
+ var selected = letter.toUpperCase() === (value === null || value === void 0 ? void 0 : value.toUpperCase());
49
+ return (0, _jsxRuntime.jsx)("li", {
50
+ children: (0, _jsxRuntime.jsx)(StyledButton, {
51
+ onClick: function onClick() {
52
+ return selected ? onChange(undefined) : onChange(letter);
53
+ },
54
+ "aria-label": t('listview.filters.alphabet.letterFilter', {
55
+ letter: letter
56
+ }),
57
+ variant: !selected ? 'ghost' : undefined,
58
+ colorTheme: !selected ? 'lighter' : 'primary',
59
+ disabled: disabled,
60
+ size: "xsmall",
61
+ children: letter
62
+ })
63
+ }, letter);
64
+ })
65
+ });
66
+ };
67
+ var _default = LetterFilter;
68
+ exports["default"] = _default;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.LetterFilterStory = void 0;
7
+ var _clientApi = require("@storybook/client-api");
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _defaults = require("../../../designmanual/stories/defaults");
10
+ var _LetterFilter = _interopRequireDefault(require("./LetterFilter"));
11
+ var _jsxRuntime = require("@emotion/react/jsx-runtime");
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
14
+ 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."); }
15
+ 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); }
16
+ 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; }
17
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : 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; }
18
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
19
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
20
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
21
+ 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; }
22
+ var _default = {
23
+ title: 'Enkle komponenter/LetterFilter',
24
+ component: _LetterFilter["default"],
25
+ parameters: _objectSpread({}, _defaults.defaultParameters),
26
+ args: {
27
+ enabledLetters: ['a', 'c'],
28
+ onChange: function onChange(value) {}
29
+ }
30
+ };
31
+ exports["default"] = _default;
32
+ var LetterFilterStory = function LetterFilterStory(args) {
33
+ var _useArgs = (0, _clientApi.useArgs)(),
34
+ _useArgs2 = _slicedToArray(_useArgs, 2),
35
+ updateArgs = _useArgs2[1];
36
+ return (0, _jsxRuntime.jsx)(_LetterFilter["default"], _objectSpread(_objectSpread({}, args), {}, {
37
+ onChange: function onChange(val) {
38
+ return updateArgs({
39
+ value: val
40
+ });
41
+ }
42
+ }));
43
+ };
44
+ exports.LetterFilterStory = LetterFilterStory;
45
+ LetterFilterStory.storyName = 'LetterFilter';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ export declare const alphabet: string[];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.alphabet = void 0;
7
+ /**
8
+ * Copyright (c) 2022-present, NDLA.
9
+ *
10
+ * This source code is licensed under the GPLv3 license found in the
11
+ * LICENSE file in the root directory of this source tree.
12
+ *
13
+ */
14
+
15
+ var alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'Æ', 'Ø', 'Å'];
16
+ exports.alphabet = alphabet;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+ import LetterFilter from './LetterFilter';
9
+ export default LetterFilter;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _LetterFilter = _interopRequireDefault(require("./LetterFilter"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
9
+ /**
10
+ * Copyright (c) 2022-present, NDLA.
11
+ *
12
+ * This source code is licensed under the GPLv3 license found in the
13
+ * LICENSE file in the root directory of this source tree.
14
+ *
15
+ */
16
+ var _default = _LetterFilter["default"];
17
+ exports["default"] = _default;
@@ -65,5 +65,6 @@ export interface FeideUser {
65
65
  export interface FeideUserApiType extends FeideUser {
66
66
  groups: FeideGroup[];
67
67
  primarySchool?: FeideGroup;
68
+ baseOrg?: FeideGroup;
68
69
  }
69
70
  export {};
package/lib/index.d.ts CHANGED
@@ -95,3 +95,4 @@ export { InfoBlock } from './InfoBlock';
95
95
  export { TreeStructure } from './TreeStructure';
96
96
  export type { FolderType, TreeStructureProps } from './TreeStructure';
97
97
  export { SearchField, SearchResultList, SearchResultItem, ActiveFilters, ToggleSearchButton } from './Search';
98
+ export { default as LetterFilter } from './LetterFilter';
package/lib/index.js CHANGED
@@ -199,7 +199,8 @@ var _exportNames = {
199
199
  SearchResultList: true,
200
200
  SearchResultItem: true,
201
201
  ActiveFilters: true,
202
- ToggleSearchButton: true
202
+ ToggleSearchButton: true,
203
+ LetterFilter: true
203
204
  };
204
205
  Object.defineProperty(exports, "AboutNdlaFilm", {
205
206
  enumerable: true,
@@ -759,6 +760,12 @@ Object.defineProperty(exports, "LearningPathWrapper", {
759
760
  return _LearningPaths.LearningPathWrapper;
760
761
  }
761
762
  });
763
+ Object.defineProperty(exports, "LetterFilter", {
764
+ enumerable: true,
765
+ get: function get() {
766
+ return _LetterFilter["default"];
767
+ }
768
+ });
762
769
  Object.defineProperty(exports, "ListResource", {
763
770
  enumerable: true,
764
771
  get: function get() {
@@ -1458,6 +1465,7 @@ var _SnackBar = require("./SnackBar");
1458
1465
  var _InfoBlock = require("./InfoBlock");
1459
1466
  var _TreeStructure = require("./TreeStructure");
1460
1467
  var _Search = require("./Search");
1468
+ var _LetterFilter = _interopRequireDefault(require("./LetterFilter"));
1461
1469
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
1462
1470
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && 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; }
1463
1471
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "30.6.1",
3
+ "version": "30.7.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -86,5 +86,5 @@
86
86
  "publishConfig": {
87
87
  "access": "public"
88
88
  },
89
- "gitHead": "f546c06948084793c19a88dffeaea8da60e854bc"
89
+ "gitHead": "ca95292ccece036a5da6c3d4b5c494b35171a71f"
90
90
  }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import { ComponentStory, ComponentMeta } from '@storybook/react';
10
+ import { useArgs } from '@storybook/client-api';
11
+ import React from 'react';
12
+ import { defaultParameters } from '../../../designmanual/stories/defaults';
13
+ import LetterFilter from './LetterFilter';
14
+
15
+ export default {
16
+ title: 'Enkle komponenter/LetterFilter',
17
+ component: LetterFilter,
18
+ parameters: {
19
+ ...defaultParameters,
20
+ },
21
+ args: {
22
+ enabledLetters: ['a', 'c'],
23
+ onChange: (value?: string) => {},
24
+ },
25
+ } as ComponentMeta<typeof LetterFilter>;
26
+
27
+ export const LetterFilterStory: ComponentStory<typeof LetterFilter> = (args) => {
28
+ const [, updateArgs] = useArgs();
29
+
30
+ return <LetterFilter {...args} onChange={(val) => updateArgs({ value: val })} />;
31
+ };
32
+
33
+ LetterFilterStory.storyName = 'LetterFilter';
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import styled from '@emotion/styled';
10
+ import React, { useMemo } from 'react';
11
+ import { colors, fonts, spacing } from '@ndla/core';
12
+ import { useTranslation } from 'react-i18next';
13
+ import { IconButtonV2 as IconButton } from '@ndla/button';
14
+ import { alphabet } from './alphabet';
15
+
16
+ const StyledUL = styled.ul`
17
+ list-style: none;
18
+ display: flex;
19
+ flex-direction: row;
20
+ flex-wrap: wrap;
21
+ gap: ${spacing.xsmall};
22
+ `;
23
+
24
+ const StyledButton = styled(IconButton)`
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ width: ${spacing.normal};
29
+ height: ${spacing.normal};
30
+ padding: 0;
31
+ ${fonts.sizes(18)};
32
+ && {
33
+ font-weight: ${fonts.weight.semibold};
34
+ }
35
+
36
+ :disabled {
37
+ pointer-events: none;
38
+ color: ${colors.brand.light};
39
+ }
40
+ `;
41
+
42
+ interface Props {
43
+ value?: string | undefined;
44
+ onChange: (value?: string) => void;
45
+ enabledLetters: string[];
46
+ }
47
+
48
+ const LetterFilter = ({ value, onChange, enabledLetters }: Props) => {
49
+ const { t } = useTranslation();
50
+ const uppercaseLetters = useMemo(() => enabledLetters.map((letter) => letter.toUpperCase()), [enabledLetters]);
51
+
52
+ return (
53
+ <StyledUL>
54
+ {alphabet.map((letter) => {
55
+ const disabled = !uppercaseLetters.includes(letter.toUpperCase());
56
+ const selected = letter.toUpperCase() === value?.toUpperCase();
57
+ return (
58
+ <li key={letter}>
59
+ <StyledButton
60
+ onClick={() => (selected ? onChange(undefined) : onChange(letter))}
61
+ aria-label={t('listview.filters.alphabet.letterFilter', { letter })}
62
+ variant={!selected ? 'ghost' : undefined}
63
+ colorTheme={!selected ? 'lighter' : 'primary'}
64
+ disabled={disabled}
65
+ size="xsmall">
66
+ {letter}
67
+ </StyledButton>
68
+ </li>
69
+ );
70
+ })}
71
+ </StyledUL>
72
+ );
73
+ };
74
+
75
+ export default LetterFilter;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ export const alphabet = [
10
+ 'A',
11
+ 'B',
12
+ 'C',
13
+ 'D',
14
+ 'E',
15
+ 'F',
16
+ 'G',
17
+ 'H',
18
+ 'I',
19
+ 'J',
20
+ 'K',
21
+ 'L',
22
+ 'M',
23
+ 'N',
24
+ 'O',
25
+ 'P',
26
+ 'Q',
27
+ 'R',
28
+ 'S',
29
+ 'T',
30
+ 'U',
31
+ 'V',
32
+ 'W',
33
+ 'X',
34
+ 'Y',
35
+ 'Z',
36
+ 'Æ',
37
+ 'Ø',
38
+ 'Å',
39
+ ];
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Copyright (c) 2022-present, NDLA.
3
+ *
4
+ * This source code is licensed under the GPLv3 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ */
8
+
9
+ import LetterFilter from './LetterFilter';
10
+
11
+ export default LetterFilter;
@@ -80,4 +80,5 @@ export interface FeideUser {
80
80
  export interface FeideUserApiType extends FeideUser {
81
81
  groups: FeideGroup[];
82
82
  primarySchool?: FeideGroup;
83
+ baseOrg?: FeideGroup;
83
84
  }
package/src/index.ts CHANGED
@@ -254,3 +254,4 @@ export { TreeStructure } from './TreeStructure';
254
254
  export type { FolderType, TreeStructureProps } from './TreeStructure';
255
255
 
256
256
  export { SearchField, SearchResultList, SearchResultItem, ActiveFilters, ToggleSearchButton } from './Search';
257
+ export { default as LetterFilter } from './LetterFilter';