@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.
- package/es/LetterFilter/LetterFilter.js +57 -0
- package/es/LetterFilter/LetterFilter.stories.js +44 -0
- package/es/LetterFilter/alphabet.js +9 -0
- package/es/LetterFilter/index.js +10 -0
- package/es/index.js +2 -1
- package/lib/LetterFilter/LetterFilter.d.ts +14 -0
- package/lib/LetterFilter/LetterFilter.js +68 -0
- package/lib/LetterFilter/LetterFilter.stories.js +45 -0
- package/lib/LetterFilter/alphabet.d.ts +8 -0
- package/lib/LetterFilter/alphabet.js +16 -0
- package/lib/LetterFilter/index.d.ts +9 -0
- package/lib/LetterFilter/index.js +17 -0
- package/lib/User/apiTypes.d.ts +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +9 -1
- package/package.json +2 -2
- package/src/LetterFilter/LetterFilter.stories.tsx +33 -0
- package/src/LetterFilter/LetterFilter.tsx +75 -0
- package/src/LetterFilter/alphabet.ts +39 -0
- package/src/LetterFilter/index.ts +11 -0
- package/src/User/apiTypes.ts +1 -0
- package/src/index.ts +1 -0
|
@@ -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,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,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;
|
package/lib/User/apiTypes.d.ts
CHANGED
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.
|
|
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": "
|
|
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;
|
package/src/User/apiTypes.ts
CHANGED
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';
|