superdesk-ui-framework 3.0.1 → 3.0.4

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 (43) hide show
  1. package/app/styles/app.scss +2 -1
  2. package/app/styles/editor/_editor-themes.scss +6 -1
  3. package/app/styles/form-elements/_inputs.scss +8 -8
  4. package/app/styles/layout/_editor.scss +5 -2
  5. package/app/styles/primereact/_pr-tag-input.scss +61 -0
  6. package/app-typescript/components/Layouts/AuthoringInnerBody.tsx +8 -1
  7. package/app-typescript/components/Layouts/AuthoringMain.tsx +2 -1
  8. package/app-typescript/components/MultiSelect.tsx +4 -2
  9. package/app-typescript/components/Navigation/SideBarTabs.tsx +34 -36
  10. package/app-typescript/components/TagInput.tsx +49 -233
  11. package/app-typescript/index.ts +0 -2
  12. package/dist/examples.bundle.js +2524 -2235
  13. package/dist/playgrounds/react-playgrounds/EditorTest.tsx +21 -18
  14. package/dist/playgrounds/react-playgrounds/Multiedit.tsx +29 -21
  15. package/dist/react/Index.tsx +3 -3
  16. package/dist/react/MultiSelect.tsx +4 -3
  17. package/dist/react/TagInputDocs.tsx +82 -0
  18. package/dist/superdesk-ui.bundle.css +73 -2
  19. package/dist/superdesk-ui.bundle.js +1506 -1704
  20. package/dist/vendor.bundle.js +19 -19
  21. package/examples/pages/playgrounds/react-playgrounds/EditorTest.tsx +21 -18
  22. package/examples/pages/playgrounds/react-playgrounds/Multiedit.tsx +29 -21
  23. package/examples/pages/react/Index.tsx +3 -3
  24. package/examples/pages/react/MultiSelect.tsx +4 -3
  25. package/examples/pages/react/TagInputDocs.tsx +82 -0
  26. package/package.json +2 -2
  27. package/react/components/Layouts/AuthoringInnerBody.d.ts +1 -0
  28. package/react/components/Layouts/AuthoringInnerBody.js +5 -1
  29. package/react/components/Layouts/AuthoringMain.d.ts +1 -0
  30. package/react/components/Layouts/AuthoringMain.js +1 -1
  31. package/react/components/MultiSelect.d.ts +2 -1
  32. package/react/components/MultiSelect.js +4 -1
  33. package/react/components/Navigation/SideBarTabs.d.ts +7 -8
  34. package/react/components/Navigation/SideBarTabs.js +21 -22
  35. package/react/index.d.ts +0 -2
  36. package/react/index.js +1 -6
  37. package/app-typescript/components/TagInputTest.tsx +0 -76
  38. package/dist/react/TagInputs.tsx +0 -92
  39. package/examples/pages/react/TagInputs.tsx +0 -92
  40. package/react/components/TagInput.d.ts +0 -7
  41. package/react/components/TagInput.js +0 -200
  42. package/react/components/TagInputTest.d.ts +0 -18
  43. package/react/components/TagInputTest.js +0 -91
@@ -1,23 +1,22 @@
1
1
  import * as React from 'react';
2
2
  interface IProps {
3
+ activeTab: string | null;
4
+ onActiveTabChange(val: string | null): void;
3
5
  items: Array<ISideBarTab | 'divider'>;
4
6
  side?: 'none' | 'left' | 'right';
5
7
  }
6
8
  export interface ISideBarTab {
9
+ id: string;
7
10
  icon: string;
8
11
  size: 'small' | 'big';
9
12
  tooltip?: string;
10
- active?: boolean;
11
13
  badgeValue?: string;
12
- onClick(event: React.MouseEvent<HTMLButtonElement, MouseEvent>): void;
14
+ onClick(event: React.MouseEvent<HTMLAnchorElement, MouseEvent>): void;
13
15
  }
14
- interface IState {
15
- index: number;
16
- closeIndex: number;
17
- }
18
- export declare class SideBarTabs extends React.PureComponent<IProps, IState> {
16
+ export declare class SideBarTabs extends React.PureComponent<IProps> {
19
17
  constructor(props: IProps);
20
- handleClick(item: ISideBarTab, indexNumber: number, event: any): void;
18
+ componentDidMount(): void;
19
+ handleClick(item: ISideBarTab, event: React.MouseEvent<HTMLAnchorElement, MouseEvent>): void;
21
20
  render(): JSX.Element;
22
21
  }
23
22
  export {};
@@ -33,34 +33,37 @@ var __importStar = (this && this.__importStar) || function (mod) {
33
33
  __setModuleDefault(result, mod);
34
34
  return result;
35
35
  };
36
+ var __importDefault = (this && this.__importDefault) || function (mod) {
37
+ return (mod && mod.__esModule) ? mod : { "default": mod };
38
+ };
36
39
  Object.defineProperty(exports, "__esModule", { value: true });
37
40
  exports.SideBarTabs = void 0;
38
41
  var React = __importStar(require("react"));
39
42
  var Icon_1 = require("../Icon");
40
43
  var Badge_1 = require("../Badge");
44
+ var classnames_1 = __importDefault(require("classnames"));
41
45
  var SideBarTabs = /** @class */ (function (_super) {
42
46
  __extends(SideBarTabs, _super);
43
47
  function SideBarTabs(props) {
44
48
  var _this = _super.call(this, props) || this;
45
- _this.state = {
46
- index: -1,
47
- closeIndex: -1,
48
- };
49
49
  _this.handleClick = _this.handleClick.bind(_this);
50
50
  return _this;
51
51
  }
52
- SideBarTabs.prototype.handleClick = function (item, indexNumber, event) {
53
- this.setState({
54
- index: indexNumber,
55
- });
56
- if (this.state.index === indexNumber) {
57
- this.setState({
58
- closeIndex: indexNumber,
59
- index: -1,
60
- });
52
+ SideBarTabs.prototype.componentDidMount = function () {
53
+ var _this = this;
54
+ var activeItem = this.props.items.find(function (item) { return item !== 'divider' && item.id === _this.props.activeTab; });
55
+ if (activeItem != null && activeItem !== 'divider') {
56
+ this.props.onActiveTabChange(activeItem.id);
57
+ }
58
+ };
59
+ SideBarTabs.prototype.handleClick = function (item, event) {
60
+ if (this.props.activeTab === item.id) {
61
+ this.props.onActiveTabChange(null);
62
+ }
63
+ else {
64
+ this.props.onActiveTabChange(item.id);
65
+ item.onClick(event);
61
66
  }
62
- item.active = !item.active;
63
- item.onClick(event);
64
67
  };
65
68
  SideBarTabs.prototype.render = function () {
66
69
  var _this = this;
@@ -70,13 +73,9 @@ var SideBarTabs = /** @class */ (function (_super) {
70
73
  return (React.createElement("li", { key: index, className: 'sd-sidetab-menu__spacer' }));
71
74
  }
72
75
  else {
73
- return (React.createElement("li", { key: index, "data-sd-tooltip": item['tooltip'], "data-flow": 'left' },
74
- React.createElement("a", { role: 'button', "aria-label": item['tooltip'], className: 'sd-sidetab-menu__btn' + (item['active'] ?
75
- ' sd-sidetab-menu__btn--active' :
76
- (index === _this.state.index ? ' sd-sidetab-menu__btn--active' : '')), onClick: function () { return _this.handleClick(item, index, event); } },
77
- item['badgeValue'] != null
78
- ? (React.createElement(Badge_1.Badge, { text: item['badgeValue'], type: 'primary' }))
79
- : null,
76
+ return (React.createElement("li", { key: index, "data-sd-tooltip": item.tooltip, "data-flow": 'left' },
77
+ React.createElement("a", { role: 'button', "aria-label": item.tooltip, className: (0, classnames_1.default)('sd-sidetab-menu__btn', { 'sd-sidetab-menu__btn--active': item.id === _this.props.activeTab }), onClick: function (event) { return _this.handleClick(item, event); } },
78
+ item.badgeValue != null && (React.createElement(Badge_1.Badge, { text: item['badgeValue'], type: 'primary' })),
80
79
  React.createElement("span", { className: 'sd-sidetab-menu__main-icon ' },
81
80
  React.createElement(Icon_1.Icon, { size: item['size'], name: item['icon'] })),
82
81
  React.createElement("i", { className: 'sd-sidetab-menu__helper-icon icon-close-small' }))));
package/react/index.d.ts CHANGED
@@ -54,8 +54,6 @@ export { Autocomplete } from './components/Autocomplete';
54
54
  export { DonutChart } from './components/DonutChart';
55
55
  export { Carousel } from './components/Carousel';
56
56
  export { Modal } from './components/Modal';
57
- export { TagInput } from './components/TagInput';
58
- export { TagInputTest } from './components/TagInputTest';
59
57
  export { GridList } from './components/GridList';
60
58
  export { GridItem, GridItemContent, GridItemMedia, GridItemFooter, GridItemContentBlock, GridItemTime, GridItemTitle, GridItemText, GridItemSlug, GridItemFooterBlock, GridItemFooterActions, GridItemTopActions, GridItemCheckWrapper } from './components/GridItem';
61
59
  export { toasted } from './components/Toast';
package/react/index.js CHANGED
@@ -13,8 +13,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.DropdownLabel = exports.DropdownItem = exports.DropdownFirst = exports.HeadingText = exports.ContentDivider = exports.Divider = exports.Icon = exports.Prop = exports.PropsList = exports.StrechBar = exports.SlidingToolbar = exports.SubNavDivider = exports.SubNav = exports.LeftMenu = exports.TabList = exports.Tab = exports.NavButton = exports.CheckButtonGroup = exports.CheckGroup = exports.CheckboxButton = exports.RadioButtonGroup = exports.Checkbox = exports.RadioGroup = exports.Loader = exports.ButtonGroup = exports.SwitchGroup = exports.Switch = exports.FormLabel = exports.TimePicker = exports.DatePickerISO = exports.DatePicker = exports.getDurationString = exports.DurationInput = exports.Tooltip = exports.IconLabel = exports.IconButton = exports.AvatarGroup = exports.AvatarContentImage = exports.AvatarContentText = exports.AvatarWrapper = exports.Alert = exports.Badge = exports.Label = exports.Popover = exports.SelectWithTemplate = exports.Option = exports.Select = exports.Input = exports.Button = exports.HelloWorld = void 0;
16
- exports.ContentListItem = exports.TableListItem = exports.TableList = exports.TreeSelect = exports.BottomNav = exports.Heading = exports.Time = exports.Text = exports.LoadingOverlay = exports.Spinner = exports.ListItemLoader = exports.Skeleton = exports.WithSizeObserver = exports.SearchBar = exports.CreateButton = exports.DropZone = exports.ThemeSelector = exports.IconPicker = exports.SelectGrid = exports.ToggleBox = exports.Menu = exports.toasted = exports.GridItemCheckWrapper = exports.GridItemTopActions = exports.GridItemFooterActions = exports.GridItemFooterBlock = exports.GridItemSlug = exports.GridItemText = exports.GridItemTitle = exports.GridItemTime = exports.GridItemContentBlock = exports.GridItemFooter = exports.GridItemMedia = exports.GridItemContent = exports.GridItem = exports.GridList = exports.TagInputTest = exports.TagInput = exports.Modal = exports.Carousel = exports.DonutChart = exports.Autocomplete = exports.EmptyState = exports.Tabs = exports.TabContent = exports.TabPanel = exports.TabLabel = exports.Tag = exports.Dropdown = exports.DropdownDivider = void 0;
17
- exports.MultiSelect = void 0;
16
+ exports.MultiSelect = exports.ContentListItem = exports.TableListItem = exports.TableList = exports.TreeSelect = exports.BottomNav = exports.Heading = exports.Time = exports.Text = exports.LoadingOverlay = exports.Spinner = exports.ListItemLoader = exports.Skeleton = exports.WithSizeObserver = exports.SearchBar = exports.CreateButton = exports.DropZone = exports.ThemeSelector = exports.IconPicker = exports.SelectGrid = exports.ToggleBox = exports.Menu = exports.toasted = exports.GridItemCheckWrapper = exports.GridItemTopActions = exports.GridItemFooterActions = exports.GridItemFooterBlock = exports.GridItemSlug = exports.GridItemText = exports.GridItemTitle = exports.GridItemTime = exports.GridItemContentBlock = exports.GridItemFooter = exports.GridItemMedia = exports.GridItemContent = exports.GridItem = exports.GridList = exports.Modal = exports.Carousel = exports.DonutChart = exports.Autocomplete = exports.EmptyState = exports.Tabs = exports.TabContent = exports.TabPanel = exports.TabLabel = exports.Tag = exports.Dropdown = exports.DropdownDivider = void 0;
18
17
  var HelloWorld_1 = require("./components/HelloWorld");
19
18
  Object.defineProperty(exports, "HelloWorld", { enumerable: true, get: function () { return HelloWorld_1.HelloWorld; } });
20
19
  var Button_1 = require("./components/Button");
@@ -132,10 +131,6 @@ var Carousel_1 = require("./components/Carousel");
132
131
  Object.defineProperty(exports, "Carousel", { enumerable: true, get: function () { return Carousel_1.Carousel; } });
133
132
  var Modal_1 = require("./components/Modal");
134
133
  Object.defineProperty(exports, "Modal", { enumerable: true, get: function () { return Modal_1.Modal; } });
135
- var TagInput_1 = require("./components/TagInput");
136
- Object.defineProperty(exports, "TagInput", { enumerable: true, get: function () { return TagInput_1.TagInput; } });
137
- var TagInputTest_1 = require("./components/TagInputTest");
138
- Object.defineProperty(exports, "TagInputTest", { enumerable: true, get: function () { return TagInputTest_1.TagInputTest; } });
139
134
  var GridList_1 = require("./components/GridList");
140
135
  Object.defineProperty(exports, "GridList", { enumerable: true, get: function () { return GridList_1.GridList; } });
141
136
  var GridItem_1 = require("./components/GridItem");
@@ -1,76 +0,0 @@
1
- import * as React from 'react';
2
- import { AutoComplete } from '@superdesk/primereact/autocomplete';
3
-
4
- // work in progress used Autocomplete from primereact miss:
5
- // 1. style for component
6
- // 2. category select
7
- // 3. freetype text
8
-
9
- interface IProps {
10
- items: Array<any>;
11
- keyValue: string; // Field of a suggested object to resolve and display
12
- minLength?: number;
13
- }
14
-
15
- interface IState {
16
- selectedItem: any;
17
- filteredItems: any;
18
- }
19
-
20
- export class TagInputTest extends React.Component<IProps, IState> {
21
- constructor(props: IProps) {
22
- super(props);
23
- this.state = {
24
- selectedItem: null,
25
- filteredItems: null,
26
- };
27
-
28
- this.searchItem = this.searchItem.bind(this);
29
- this.itemTemplate = this.itemTemplate.bind(this);
30
- this.handleItem = this.handleItem.bind(this);
31
- }
32
-
33
- searchItem(event: any) {
34
- setTimeout(() => {
35
- let filteredItems;
36
- if (!event.query.trim().length) {
37
- filteredItems = [...this.props.items];
38
- } else {
39
- filteredItems = this.props.items.filter((item) => {
40
- return item[this.props.keyValue].toLowerCase().startsWith(event.query.toLowerCase());
41
- });
42
- }
43
-
44
- this.setState({ filteredItems });
45
- }, 250);
46
- }
47
-
48
- itemTemplate(item: any) {
49
- return (
50
- <div>
51
- <div>{item[this.props.keyValue]}</div>
52
- </div>
53
- );
54
- }
55
-
56
- handleItem(e: any) {
57
- this.setState({ selectedItem: e.value });
58
- }
59
-
60
- render() {
61
- return (
62
- <div>
63
- <AutoComplete
64
- value={this.state.selectedItem}
65
- suggestions={this.state.filteredItems}
66
- completeMethod={this.searchItem}
67
- field={this.props.keyValue}
68
- multiple
69
- dropdown={true}
70
- minLength={this.props.minLength ? this.props.minLength : 1}
71
- onChange={(e) => this.handleItem(e)} />
72
-
73
- </div>
74
- );
75
- }
76
- }
@@ -1,92 +0,0 @@
1
- import * as React from 'react';
2
- import * as Markup from '../../js/react';
3
- import { TagInput, TagInputTest } from '../../../app-typescript';
4
-
5
- export default class TagInputDoc extends React.Component {
6
- render() {
7
- return (
8
- <React.Fragment>
9
- <section className="docs-page__container">
10
- <h2 className="docs-page__h2">Tag Input IN PROGRESS</h2>
11
- <p className="docs-page__paragraph">
12
- A tag input is an input box that automatically creates tags – also called tokens – out of typed text every time a certain key is pressed. It's useful for tagging and highlighting information right on the input box.
13
- </p>
14
- <Markup.ReactMarkupCodePreview>{`
15
-
16
- `}
17
- </Markup.ReactMarkupCodePreview>
18
- <p className='docs-page__paragraph'>PRIME REACT TEST</p>
19
- <Markup.ReactMarkup>
20
- <Markup.ReactMarkupPreview>
21
- <p className="docs-page__paragraph">Test Tag Input</p>
22
- <div className='form__row'>
23
- <TagInputTest
24
- items={[
25
- { name: 'Afghanistan', code: 'AF' },
26
- { name: 'Åland Islands', code: 'AX' },
27
- { name: 'Albania', code: 'AL' },
28
- { name: 'Algeria', code: 'DZ' },
29
- { name: 'American Samoa', code: 'AS' },
30
- { name: 'AndorrA', code: 'AD' },
31
- { name: 'Angola', code: 'AO' },
32
- { name: 'Anguilla', code: 'AI' },
33
- { name: 'Antarctica', code: 'AQ' },
34
- { name: 'Antigua and Barbuda', code: 'AG' },
35
- { name: 'Argentina', code: 'AR' },
36
- { name: 'Armenia', code: 'AM' },
37
- { name: 'Aruba', code: 'AW' },
38
- { name: 'Australia', code: 'AU' },
39
- { name: 'Austria', code: 'AT' },
40
- { name: 'Azerbaijan', code: 'AZ' },
41
- { name: 'Bahamas', code: 'BS' },
42
- { name: 'Bahrain', code: 'BH' },
43
- { name: 'Bangladesh', code: 'BD' },
44
- { name: 'Barbados', code: 'BB' },
45
- { name: 'Belarus', code: 'BY' },
46
- { name: 'Belgium', code: 'BE' },
47
- { name: 'Belize', code: 'BZ' },
48
- { name: 'Benin', code: 'BJ' },
49
- { name: 'Bermuda', code: 'BM' },
50
- { name: 'Bhutan', code: 'BT' },
51
- { name: 'Bolivia', code: 'BO' },
52
- { name: 'Bosnia and Herzegovina', code: 'BA' },
53
- { name: 'Botswana', code: 'BW' },
54
- { name: 'Bouvet Island', code: 'BV' }]}
55
- keyValue='name'
56
- />
57
- </div>
58
- </Markup.ReactMarkupPreview>
59
- <Markup.ReactMarkupCode>{`
60
-
61
- `}
62
- </Markup.ReactMarkupCode>
63
- </Markup.ReactMarkup>
64
-
65
- <p className='docs-page__paragraph'>TAG INPUT FROM SCRATCH TEST</p>
66
- <Markup.ReactMarkup>
67
- <Markup.ReactMarkupPreview>
68
- <p className="docs-page__paragraph">// Tag input with button for picking items from list</p>
69
- <div className='form__row'>
70
- <TagInput label='Cars' items={['Audi', 'BMW', 'Hyundai', 'Opel', 'Audi2', 'BMW2', 'Hyundai2', 'Opel2', 'Audi3', 'BMW3', 'Hyundai3', 'Opel3', 'Audi4', 'BMW4', 'Hyundai4', 'Opel4', 'Audi5', 'BMW5', 'Hyundai5', 'Opel5', 'Audi6', 'BMW6', 'Hyundai6', 'Opel6']} />
71
- </div>
72
-
73
- <p className="docs-page__paragraph">// Tag input with suggestions + freetype text</p>
74
- <div className='form__row'>
75
- <TagInput label='Cars' freetype={true} items={['Audi', 'BMW', 'Hyundai', 'Opel', 'Audi2', 'BMW2', 'Hyundai2', 'Opel2', 'Audi3', 'BMW3', 'Hyundai3', 'Opel3', 'Audi4', 'BMW4', 'Hyundai4', 'Opel4', 'Audi5', 'BMW5', 'Hyundai5', 'Opel5', 'Audi6', 'BMW6', 'Hyundai6', 'Opel6']} />
76
- </div>
77
-
78
- <p className="docs-page__paragraph">// Only freetype text</p>
79
- <div className='form__row'>
80
- <TagInput label='Cars' freetype={true} />
81
- </div>
82
- </Markup.ReactMarkupPreview>
83
- <Markup.ReactMarkupCode>{`
84
-
85
- `}
86
- </Markup.ReactMarkupCode>
87
- </Markup.ReactMarkup>
88
- </section>
89
- </React.Fragment>
90
- )
91
- }
92
- }
@@ -1,92 +0,0 @@
1
- import * as React from 'react';
2
- import * as Markup from '../../js/react';
3
- import { TagInput, TagInputTest } from '../../../app-typescript';
4
-
5
- export default class TagInputDoc extends React.Component {
6
- render() {
7
- return (
8
- <React.Fragment>
9
- <section className="docs-page__container">
10
- <h2 className="docs-page__h2">Tag Input IN PROGRESS</h2>
11
- <p className="docs-page__paragraph">
12
- A tag input is an input box that automatically creates tags – also called tokens – out of typed text every time a certain key is pressed. It's useful for tagging and highlighting information right on the input box.
13
- </p>
14
- <Markup.ReactMarkupCodePreview>{`
15
-
16
- `}
17
- </Markup.ReactMarkupCodePreview>
18
- <p className='docs-page__paragraph'>PRIME REACT TEST</p>
19
- <Markup.ReactMarkup>
20
- <Markup.ReactMarkupPreview>
21
- <p className="docs-page__paragraph">Test Tag Input</p>
22
- <div className='form__row'>
23
- <TagInputTest
24
- items={[
25
- { name: 'Afghanistan', code: 'AF' },
26
- { name: 'Åland Islands', code: 'AX' },
27
- { name: 'Albania', code: 'AL' },
28
- { name: 'Algeria', code: 'DZ' },
29
- { name: 'American Samoa', code: 'AS' },
30
- { name: 'AndorrA', code: 'AD' },
31
- { name: 'Angola', code: 'AO' },
32
- { name: 'Anguilla', code: 'AI' },
33
- { name: 'Antarctica', code: 'AQ' },
34
- { name: 'Antigua and Barbuda', code: 'AG' },
35
- { name: 'Argentina', code: 'AR' },
36
- { name: 'Armenia', code: 'AM' },
37
- { name: 'Aruba', code: 'AW' },
38
- { name: 'Australia', code: 'AU' },
39
- { name: 'Austria', code: 'AT' },
40
- { name: 'Azerbaijan', code: 'AZ' },
41
- { name: 'Bahamas', code: 'BS' },
42
- { name: 'Bahrain', code: 'BH' },
43
- { name: 'Bangladesh', code: 'BD' },
44
- { name: 'Barbados', code: 'BB' },
45
- { name: 'Belarus', code: 'BY' },
46
- { name: 'Belgium', code: 'BE' },
47
- { name: 'Belize', code: 'BZ' },
48
- { name: 'Benin', code: 'BJ' },
49
- { name: 'Bermuda', code: 'BM' },
50
- { name: 'Bhutan', code: 'BT' },
51
- { name: 'Bolivia', code: 'BO' },
52
- { name: 'Bosnia and Herzegovina', code: 'BA' },
53
- { name: 'Botswana', code: 'BW' },
54
- { name: 'Bouvet Island', code: 'BV' }]}
55
- keyValue='name'
56
- />
57
- </div>
58
- </Markup.ReactMarkupPreview>
59
- <Markup.ReactMarkupCode>{`
60
-
61
- `}
62
- </Markup.ReactMarkupCode>
63
- </Markup.ReactMarkup>
64
-
65
- <p className='docs-page__paragraph'>TAG INPUT FROM SCRATCH TEST</p>
66
- <Markup.ReactMarkup>
67
- <Markup.ReactMarkupPreview>
68
- <p className="docs-page__paragraph">// Tag input with button for picking items from list</p>
69
- <div className='form__row'>
70
- <TagInput label='Cars' items={['Audi', 'BMW', 'Hyundai', 'Opel', 'Audi2', 'BMW2', 'Hyundai2', 'Opel2', 'Audi3', 'BMW3', 'Hyundai3', 'Opel3', 'Audi4', 'BMW4', 'Hyundai4', 'Opel4', 'Audi5', 'BMW5', 'Hyundai5', 'Opel5', 'Audi6', 'BMW6', 'Hyundai6', 'Opel6']} />
71
- </div>
72
-
73
- <p className="docs-page__paragraph">// Tag input with suggestions + freetype text</p>
74
- <div className='form__row'>
75
- <TagInput label='Cars' freetype={true} items={['Audi', 'BMW', 'Hyundai', 'Opel', 'Audi2', 'BMW2', 'Hyundai2', 'Opel2', 'Audi3', 'BMW3', 'Hyundai3', 'Opel3', 'Audi4', 'BMW4', 'Hyundai4', 'Opel4', 'Audi5', 'BMW5', 'Hyundai5', 'Opel5', 'Audi6', 'BMW6', 'Hyundai6', 'Opel6']} />
76
- </div>
77
-
78
- <p className="docs-page__paragraph">// Only freetype text</p>
79
- <div className='form__row'>
80
- <TagInput label='Cars' freetype={true} />
81
- </div>
82
- </Markup.ReactMarkupPreview>
83
- <Markup.ReactMarkupCode>{`
84
-
85
- `}
86
- </Markup.ReactMarkupCode>
87
- </Markup.ReactMarkup>
88
- </section>
89
- </React.Fragment>
90
- )
91
- }
92
- }
@@ -1,7 +0,0 @@
1
- interface ITagInput {
2
- items?: Array<any>;
3
- label: string;
4
- freetype?: boolean;
5
- }
6
- export declare const TagInput: ({ items, label, freetype }: ITagInput) => JSX.Element;
7
- export {};
@@ -1,200 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- var __importDefault = (this && this.__importDefault) || function (mod) {
22
- return (mod && mod.__esModule) ? mod : { "default": mod };
23
- };
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.TagInput = void 0;
26
- var React = __importStar(require("react"));
27
- var classnames_1 = __importDefault(require("classnames"));
28
- var core_1 = require("@popperjs/core");
29
- var lodash_1 = require("lodash");
30
- var TagInput = function (_a) {
31
- var items = _a.items, label = _a.label, freetype = _a.freetype;
32
- var _b = React.useState([]), tags = _b[0], setTags = _b[1];
33
- var _c = React.useState(false), openSuggestion = _c[0], setOpenSuggestion = _c[1];
34
- var inputRef = React.useRef(null);
35
- var refTagInput = React.useRef(null);
36
- var refSuggestions = React.useRef(null);
37
- // number for select
38
- var _d = React.useState(-1), selectNumber = _d[0], setSelectNumber = _d[1];
39
- // autocomplete
40
- var _e = React.useState([]), suggestions = _e[0], setSuggestions = _e[1];
41
- // focused
42
- var _f = React.useState(false), focus = _f[0], setFocus = _f[1];
43
- // invalid-tag
44
- var _g = React.useState(false), invalid = _g[0], setInvalid = _g[1];
45
- React.useEffect(function () {
46
- var menuRef = refSuggestions.current;
47
- var toggleRef = refTagInput.current;
48
- if (toggleRef && menuRef) {
49
- (0, core_1.createPopper)(toggleRef, menuRef, {
50
- placement: 'bottom-start',
51
- });
52
- }
53
- }, [suggestions]);
54
- function inputKeyDown(e) {
55
- var val = e.target.value;
56
- if (val.length > 1) {
57
- setInvalid(false);
58
- }
59
- if (e.key === 'Enter' && val) {
60
- if (val.length > 2 && freetype) {
61
- setInvalid(false);
62
- if (checkTag(val) === 0) {
63
- setTags(function (tag) { return tag.concat(val); });
64
- var inputRefVariable = inputRef.current;
65
- if (inputRefVariable) {
66
- inputRefVariable.value = null;
67
- }
68
- }
69
- }
70
- else {
71
- setInvalid(true);
72
- }
73
- }
74
- else if (e.key === 'Backspace' && !val) {
75
- setSelectNumber(tags.length - 1);
76
- if (selectNumber !== -1) {
77
- removeTag(selectNumber);
78
- setSelectNumber(-1);
79
- }
80
- }
81
- else if (e.key === 'ArrowLeft' && !val) {
82
- if (selectNumber > 0) {
83
- setSelectNumber(selectNumber - 1);
84
- }
85
- else {
86
- setSelectNumber(tags.length - 1);
87
- }
88
- }
89
- else if (e.key === 'ArrowRight' && !val) {
90
- if (selectNumber !== -1 && selectNumber < tags.length - 1) {
91
- setSelectNumber(selectNumber + 1);
92
- }
93
- else {
94
- setSelectNumber(0);
95
- }
96
- }
97
- }
98
- function checkTag(newTag) {
99
- var count = 0;
100
- tags.forEach(function (tag) {
101
- if (tag === newTag) {
102
- count = 1;
103
- }
104
- });
105
- return count;
106
- }
107
- function removeTag(i) {
108
- var newTags = (0, lodash_1.clone)(tags);
109
- newTags.splice(i, 1);
110
- setTags(newTags);
111
- }
112
- function onTextChanged(e) {
113
- if (items) {
114
- var value = e.target.value;
115
- var newSuggestions = [];
116
- if (value.length > 1) {
117
- var regex_1 = new RegExp("^".concat(value), 'i');
118
- newSuggestions = items.sort().filter(function (v) { return regex_1.test(v); });
119
- }
120
- setSuggestions(newSuggestions);
121
- }
122
- }
123
- function addTag(item) {
124
- if (checkTag(item) === 0) {
125
- setTags(function (tag) { return tag.concat(item); });
126
- var inputRefVariable = inputRef.current;
127
- if (inputRefVariable) {
128
- inputRefVariable.value = null;
129
- }
130
- }
131
- setSuggestions([]);
132
- }
133
- function toggleSuggestions() {
134
- if (!openSuggestion) {
135
- setOpenSuggestion(true);
136
- document.addEventListener('click', closeSuggestions);
137
- }
138
- else {
139
- setOpenSuggestion(false);
140
- }
141
- }
142
- function closeSuggestions() {
143
- document.removeEventListener('click', closeSuggestions);
144
- setOpenSuggestion(false);
145
- }
146
- function toggleFocus() {
147
- if (!focus) {
148
- setFocus(true);
149
- document.addEventListener('click', removeFocus);
150
- }
151
- else {
152
- setFocus(false);
153
- }
154
- }
155
- function removeFocus() {
156
- document.removeEventListener('click', removeFocus);
157
- setFocus(false);
158
- }
159
- function renderSuggestions() {
160
- if (openSuggestion) {
161
- return (React.createElement("div", { className: 'autocomplete', ref: refSuggestions },
162
- React.createElement("ul", { className: 'suggestion-list' }, suggestions.length !== 0 ? (suggestions.map(function (item, index) {
163
- return React.createElement("li", { className: 'suggestion-item', onClick: function () { return addTag(item); }, key: index }, item);
164
- })) : (items === null || items === void 0 ? void 0 : items.map(function (item, index) {
165
- return React.createElement("li", { className: 'suggestion-item', onClick: function () { return addTag(item); }, key: index }, item);
166
- })))));
167
- }
168
- else if (suggestions.length === 0) {
169
- return null;
170
- }
171
- else {
172
- return (React.createElement("div", { className: 'autocomplete', ref: refSuggestions },
173
- React.createElement("ul", { className: 'suggestion-list' }, suggestions.map(function (item, index) {
174
- return React.createElement("li", { className: 'suggestion-item', onClick: function () { return addTag(item); }, key: index }, item);
175
- }))));
176
- }
177
- }
178
- var classes = (0, classnames_1.default)('tags-input__tags', {
179
- 'focused': focus,
180
- 'tag-input__invalid-tag': invalid,
181
- });
182
- return (React.createElement("div", { className: 'sd-tag-input', "data-label": label },
183
- React.createElement("label", { className: 'tags-input__label' }, label),
184
- React.createElement("div", { className: 'tags-input', ref: refTagInput },
185
- React.createElement("div", { className: classes },
186
- items ?
187
- React.createElement("button", { className: "tags-input__add-button", onClick: toggleSuggestions },
188
- React.createElement("i", { className: "icon-plus-large" })) : null,
189
- React.createElement("ul", { className: 'tags-input__tag-list' },
190
- tags.map(function (tag, i) {
191
- return (React.createElement("li", { className: 'tags-input__tag-item' + (selectNumber === i ? ' selected' : ''), key: i },
192
- tag,
193
- React.createElement("a", { type: 'button', className: 'tags-input__remove-button', onClick: function () { return removeTag(i); } },
194
- React.createElement("i", { className: 'icon-close-small' }))));
195
- }),
196
- React.createElement("li", { className: 'input-tag__tags__input' },
197
- React.createElement("input", { type: 'text', className: 'tags-input__input' + (invalid ? ' invalid-tag' : ''), onChange: onTextChanged, ref: inputRef, onKeyDown: inputKeyDown, onClick: toggleFocus })))),
198
- items ? renderSuggestions() : null)));
199
- };
200
- exports.TagInput = TagInput;
@@ -1,18 +0,0 @@
1
- import * as React from 'react';
2
- interface IProps {
3
- items: Array<any>;
4
- keyValue: string;
5
- minLength?: number;
6
- }
7
- interface IState {
8
- selectedItem: any;
9
- filteredItems: any;
10
- }
11
- export declare class TagInputTest extends React.Component<IProps, IState> {
12
- constructor(props: IProps);
13
- searchItem(event: any): void;
14
- itemTemplate(item: any): JSX.Element;
15
- handleItem(e: any): void;
16
- render(): JSX.Element;
17
- }
18
- export {};