@synerise/ds-icon-picker 1.3.0 → 1.3.1

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/CHANGELOG.md CHANGED
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.3.1](https://github.com/Synerise/synerise-design/compare/@synerise/ds-icon-picker@1.3.0...@synerise/ds-icon-picker@1.3.1) (2025-05-26)
7
+
8
+ **Note:** Version bump only for package @synerise/ds-icon-picker
9
+
10
+
11
+
12
+
13
+
6
14
  # [1.3.0](https://github.com/Synerise/synerise-design/compare/@synerise/ds-icon-picker@1.2.2...@synerise/ds-icon-picker@1.3.0) (2025-05-19)
7
15
 
8
16
 
package/README.md CHANGED
@@ -48,5 +48,9 @@ import IconPicker from '@synerise/ds-icon-picker'
48
48
  | onSelect | Action on icon select | OnSelectType | - |
49
49
  | placeholder | Input placeholder | string | - |
50
50
  | trigger | Trigger type | `['click', 'hover', 'contextMenu']` | [] |
51
+ | onClear | Action on icon delete | OnSelectType | - |
52
+ | selectedIcon| Icon Node | ReactElement | - |
53
+ | clearTooltip| tooltip text | string | - |
54
+
51
55
 
52
56
  OnSelectType depends on the icon list source. For `design-system` or plain items provided as `DataSource[]` it is `(item: ReactNode) => void;`. For `font-awesome` it is `(item: [IconPrefix, IconName]) => void;`. See FontAwesome docs on how to use the IconPrefix and IconName to display an icon.
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import { IconPickerProps, SourceType } from './IconPicker.types';
3
- declare const IconPicker: <IconSource extends SourceType>({ button, data, onSelect, trigger, placeholder, noResultMsg, }: IconPickerProps<IconSource>) => React.JSX.Element;
3
+ declare const IconPicker: <IconSource extends SourceType>({ button, data, onSelect, trigger, placeholder, noResultMsg, onClear, selectedIcon, clearTooltip, }: IconPickerProps<IconSource>) => React.JSX.Element;
4
4
  export default IconPicker;
@@ -2,6 +2,10 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
2
2
  import React, { useEffect, useRef, useState } from 'react';
3
3
  import Dropdown from '@synerise/ds-dropdown';
4
4
  import { useOnClickOutside } from '@synerise/ds-utils';
5
+ import Button from '@synerise/ds-button';
6
+ import Icon, { AddM, Close3S } from '@synerise/ds-icon';
7
+ import ButtonGroup from '@synerise/ds-button-group';
8
+ import Tooltip from '@synerise/ds-tooltip';
5
9
  import * as S from './IconPicker.styles';
6
10
  import Overlay from './components/Overlay/Overlay';
7
11
  import { useIconSourceLoader } from './hooks/useIconSourceLoader';
@@ -12,7 +16,10 @@ var IconPicker = function IconPicker(_ref) {
12
16
  onSelect = _ref.onSelect,
13
17
  trigger = _ref.trigger,
14
18
  placeholder = _ref.placeholder,
15
- noResultMsg = _ref.noResultMsg;
19
+ noResultMsg = _ref.noResultMsg,
20
+ onClear = _ref.onClear,
21
+ selectedIcon = _ref.selectedIcon,
22
+ clearTooltip = _ref.clearTooltip;
16
23
  var items = useIconSourceLoader(data);
17
24
  var _useState = useState(items),
18
25
  filteredItems = _useState[0],
@@ -76,6 +83,27 @@ var IconPicker = function IconPicker(_ref) {
76
83
  focus: focus,
77
84
  noResultMsg: noResultMsg
78
85
  }))
79
- }, button);
86
+ }, button || (!selectedIcon ? /*#__PURE__*/React.createElement(Button, {
87
+ type: "secondary",
88
+ mode: "icon-label"
89
+ }, /*#__PURE__*/React.createElement(Icon, {
90
+ component: /*#__PURE__*/React.createElement(AddM, null)
91
+ }), "Choose icon") : /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(Button, {
92
+ onClick: function onClick() {
93
+ setOpen(!isOpen);
94
+ },
95
+ mode: "single-icon",
96
+ type: "secondary"
97
+ }, /*#__PURE__*/React.createElement(Icon, {
98
+ component: selectedIcon
99
+ })), /*#__PURE__*/React.createElement(Button, {
100
+ mode: "single-icon",
101
+ type: "secondary",
102
+ onClick: onClear
103
+ }, /*#__PURE__*/React.createElement(Tooltip, {
104
+ title: clearTooltip
105
+ }, /*#__PURE__*/React.createElement(S.ClearIcon, {
106
+ component: /*#__PURE__*/React.createElement(Close3S, null)
107
+ }))))));
80
108
  };
81
109
  export default IconPicker;
@@ -1,5 +1,7 @@
1
+ /// <reference types="react" />
1
2
  import { FixedSizeList } from 'react-window';
2
3
  export declare const List: import("styled-components").StyledComponent<"div", any, {}, never>;
4
+ export declare const ClearIcon: import("styled-components").StyledComponent<({ name, component, className, ...rest }: import("@synerise/ds-icon").IconProps) => import("react").JSX.Element, any, {}, never>;
3
5
  export declare const ListItem: import("styled-components").StyledComponent<"div", any, {
4
6
  itemsPerRow: number;
5
7
  }, never>;
@@ -14,6 +16,6 @@ export declare const Title: import("styled-components").StyledComponent<"div", a
14
16
  export declare const FontIcon: import("styled-components").StyledComponent<"div", any, {}, never>;
15
17
  export declare const IconTrigger: import("styled-components").StyledComponent<"div", any, {}, never>;
16
18
  export declare const NoResults: import("styled-components").StyledComponent<"div", any, {}, never>;
17
- export declare const Icon: import("styled-components").StyledComponent<"div", any, {}, never>;
18
19
  export declare const Content: import("styled-components").StyledComponent<"div", any, {}, never>;
19
20
  export declare const ListRow: import("styled-components").StyledComponent<"div", any, {}, never>;
21
+ export declare const NoResultIcon: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -1,28 +1,37 @@
1
1
  import { FixedSizeList } from 'react-window';
2
2
  import styled from 'styled-components';
3
+ import Icon from '@synerise/ds-icon';
3
4
  export var List = styled.div.withConfig({
4
5
  displayName: "IconPickerstyles__List",
5
6
  componentId: "sc-iun0xm-0"
6
7
  })(["display:flex;flex-wrap:wrap;"]);
8
+ export var ClearIcon = styled(Icon).withConfig({
9
+ displayName: "IconPickerstyles__ClearIcon",
10
+ componentId: "sc-iun0xm-1"
11
+ })(["&&&&&,&&&&&:hover{svg{color:", ";fill:", ";}}"], function (props) {
12
+ return props.theme.palette['red-600'];
13
+ }, function (props) {
14
+ return props.theme.palette['red-600'];
15
+ });
7
16
  export var ListItem = styled.div.withConfig({
8
17
  displayName: "IconPickerstyles__ListItem",
9
- componentId: "sc-iun0xm-1"
18
+ componentId: "sc-iun0xm-2"
10
19
  })(["display:flex;width:", "%;align-items:center;justify-content:center;button{transition-duration:0s;}"], function (props) {
11
20
  return 100 / props.itemsPerRow;
12
21
  });
13
22
  export var OverlayWrapper = styled.div.withConfig({
14
23
  displayName: "IconPickerstyles__OverlayWrapper",
15
- componentId: "sc-iun0xm-2"
24
+ componentId: "sc-iun0xm-3"
16
25
  })(["padding:6px;"]);
17
26
  export var VirtualList = styled(FixedSizeList).withConfig({
18
27
  displayName: "IconPickerstyles__VirtualList",
19
- componentId: "sc-iun0xm-3"
28
+ componentId: "sc-iun0xm-4"
20
29
  })(["max-height:", "px;height:auto !important;overflow-x:unset !important;overflow-y:unset !important;"], function (props) {
21
30
  return props.listHeight;
22
31
  });
23
32
  export var Overlay = styled.span.withConfig({
24
33
  displayName: "IconPickerstyles__Overlay",
25
- componentId: "sc-iun0xm-4"
34
+ componentId: "sc-iun0xm-5"
26
35
  })(["width:250px;background-color:", ";position:relative;display:block;border-radius:3px;", ":not(:last-child){&::after{content:'';display:flex;width:calc(100% - 6px);height:1px;background-image:linear-gradient( to right,", " 40%,", " 100%,transparent 0% );background-position:0 bottom;background-size:4px 1px;background-repeat:repeat-x;margin:4px auto 0;}}", ":first-child{padding-top:16px;}"], function (props) {
27
36
  return props.theme.palette.white;
28
37
  }, OverlayWrapper, function (_ref) {
@@ -34,7 +43,7 @@ export var Overlay = styled.span.withConfig({
34
43
  }, OverlayWrapper);
35
44
  export var Title = styled.div.withConfig({
36
45
  displayName: "IconPickerstyles__Title",
37
- componentId: "sc-iun0xm-5"
46
+ componentId: "sc-iun0xm-6"
38
47
  })(["font-size:10px;line-height:1.6;font-weight:500;text-transform:uppercase;color:", ";padding:0 12px;flex-basis:100%;height:", ";line-height:", ";"], function (props) {
39
48
  return props.theme.palette['grey-500'];
40
49
  }, function (props) {
@@ -44,20 +53,16 @@ export var Title = styled.div.withConfig({
44
53
  });
45
54
  export var FontIcon = styled.div.withConfig({
46
55
  displayName: "IconPickerstyles__FontIcon",
47
- componentId: "sc-iun0xm-6"
56
+ componentId: "sc-iun0xm-7"
48
57
  })(["font-family:'apple color emoji,segoe ui emoji,noto color emoji,android emoji,emojisymbols,emojione mozilla,twemoji mozilla,segoe ui symbol';font-size:18px;line-height:35px;"]);
49
58
  export var IconTrigger = styled.div.withConfig({
50
59
  displayName: "IconPickerstyles__IconTrigger",
51
- componentId: "sc-iun0xm-7"
60
+ componentId: "sc-iun0xm-8"
52
61
  })(["display:inline-block;cursor:pointer;&&&{.icon-wrapper{display:flex;pointer-events:none;svg{fill:currentColor;}}}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:144dpi){letter-spacing:-0.2em;}"]);
53
62
  export var NoResults = styled.div.withConfig({
54
63
  displayName: "IconPickerstyles__NoResults",
55
- componentId: "sc-iun0xm-8"
56
- })(["min-height:206px;display:flex;justify-content:center;"]);
57
- export var Icon = styled.div.withConfig({
58
- displayName: "IconPickerstyles__Icon",
59
64
  componentId: "sc-iun0xm-9"
60
- })(["width:40px;height:40px;background:rgba(148,158,166,0.05);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto;"]);
65
+ })(["min-height:206px;display:flex;justify-content:center;"]);
61
66
  export var Content = styled.div.withConfig({
62
67
  displayName: "IconPickerstyles__Content",
63
68
  componentId: "sc-iun0xm-10"
@@ -65,4 +70,8 @@ export var Content = styled.div.withConfig({
65
70
  export var ListRow = styled.div.withConfig({
66
71
  displayName: "IconPickerstyles__ListRow",
67
72
  componentId: "sc-iun0xm-11"
68
- })(["display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;box-sizing:border-box;width:100%;height:100%;max-width:100%;"]);
73
+ })(["display:flex;flex-wrap:wrap;justify-content:flex-start;align-items:center;box-sizing:border-box;width:100%;height:100%;max-width:100%;"]);
74
+ export var NoResultIcon = styled.div.withConfig({
75
+ displayName: "IconPickerstyles__NoResultIcon",
76
+ componentId: "sc-iun0xm-12"
77
+ })(["width:40px;height:40px;background:rgba(148,158,166,0.05);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto;"]);
@@ -32,6 +32,9 @@ export type IconPickerProps<Source extends SourceType> = {
32
32
  trigger: ('click' | 'hover' | 'contextMenu')[];
33
33
  placeholder: string;
34
34
  noResultMsg?: ReactNode;
35
+ selectedIcon?: ReactNode;
36
+ onClear?: () => void;
37
+ clearTooltip?: ReactNode;
35
38
  };
36
39
  export type ListItemData<Source extends SourceType> = {
37
40
  elementSize: number;
@@ -31,7 +31,7 @@ var List = function List(_ref) {
31
31
  "data-testid": "icon-list",
32
32
  maxHeight: 330,
33
33
  onScroll: handleScroll
34
- }, !data.length ? /*#__PURE__*/React.createElement(S.OverlayWrapper, null, /*#__PURE__*/React.createElement(S.NoResults, null, /*#__PURE__*/React.createElement(S.Content, null, /*#__PURE__*/React.createElement(S.Icon, null, /*#__PURE__*/React.createElement(Icon, {
34
+ }, !data.length ? /*#__PURE__*/React.createElement(S.OverlayWrapper, null, /*#__PURE__*/React.createElement(S.NoResults, null, /*#__PURE__*/React.createElement(S.Content, null, /*#__PURE__*/React.createElement(S.NoResultIcon, null, /*#__PURE__*/React.createElement(Icon, {
35
35
  component: /*#__PURE__*/React.createElement(SearchNoResultsM, null),
36
36
  color: theme.palette['grey-600']
37
37
  })), /*#__PURE__*/React.createElement("p", null, noResultMsg)))) : /*#__PURE__*/React.createElement(S.VirtualList, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synerise/ds-icon-picker",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "IconPicker UI Component for the Synerise Design System",
5
5
  "license": "ISC",
6
6
  "repository": "Synerise/synerise-design",
@@ -31,11 +31,13 @@
31
31
  "sideEffects": false,
32
32
  "types": "dist/index.d.ts",
33
33
  "dependencies": {
34
- "@synerise/ds-button": "^1.3.0",
35
- "@synerise/ds-dropdown": "^1.0.8",
36
- "@synerise/ds-icon": "^1.5.0",
37
- "@synerise/ds-scrollbar": "^1.0.8",
38
- "@synerise/ds-utils": "^1.1.0",
34
+ "@synerise/ds-button": "^1.3.1",
35
+ "@synerise/ds-button-group": "^1.1.1",
36
+ "@synerise/ds-dropdown": "^1.0.9",
37
+ "@synerise/ds-icon": "^1.5.1",
38
+ "@synerise/ds-scrollbar": "^1.0.9",
39
+ "@synerise/ds-tooltip": "^1.1.8",
40
+ "@synerise/ds-utils": "^1.1.1",
39
41
  "memoize-one": "^5.1.1",
40
42
  "react-window": "^1.8.11"
41
43
  },
@@ -50,5 +52,5 @@
50
52
  "react-intl": ">=3.12.0 <= 6.8",
51
53
  "styled-components": "^5.3.3"
52
54
  },
53
- "gitHead": "8aa16b27c86c97e3ac774d92561ab0a03176c439"
55
+ "gitHead": "9e9cc54e3690b4d51323f91c81b3b79305984da6"
54
56
  }