@licklist/design 0.78.5-dev.57 → 0.78.5-dev.59

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 (83) hide show
  1. package/dist/Maintenance/MaintenancePage.js +1 -0
  2. package/dist/index.js +3 -1
  3. package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -1
  4. package/dist/v2/components/ActionMenu/ActionMenu.js +60 -8
  5. package/dist/v2/components/ActionMenu/ActionMenu.scss.js +1 -1
  6. package/dist/v2/components/Alert/Alert.d.ts.map +1 -1
  7. package/dist/v2/components/Alert/Alert.js +48 -1
  8. package/dist/v2/components/Alert/Alert.scss.js +1 -1
  9. package/dist/v2/components/Badge/Badge.d.ts.map +1 -1
  10. package/dist/v2/components/Badge/Badge.js +1 -1
  11. package/dist/v2/components/Badge/Badge.scss.js +1 -1
  12. package/dist/v2/components/Button/Button.d.ts +1 -1
  13. package/dist/v2/components/Button/Button.d.ts.map +1 -1
  14. package/dist/v2/components/Button/Button.js +1 -0
  15. package/dist/v2/components/Button/GhostButton.scss.js +1 -1
  16. package/dist/v2/components/Button/index.d.ts +2 -0
  17. package/dist/v2/components/Button/index.d.ts.map +1 -1
  18. package/dist/v2/components/FormField/FormField.d.ts.map +1 -1
  19. package/dist/v2/components/Modal/DeleteModal.d.ts.map +1 -1
  20. package/dist/v2/components/Modal/DeleteModal.js +4 -0
  21. package/dist/v2/components/NPSScore/NPSScore.d.ts +3 -1
  22. package/dist/v2/components/NPSScore/NPSScore.d.ts.map +1 -1
  23. package/dist/v2/components/NPSScore/NPSScore.js +4 -7
  24. package/dist/v2/components/NPSScore/NPSScore.scss.js +1 -1
  25. package/dist/v2/components/NewInput/NewInput.d.ts.map +1 -1
  26. package/dist/v2/components/NewInput/NewInput.js +8 -0
  27. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts +2 -1
  28. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts.map +1 -1
  29. package/dist/v2/components/NewPageHeader/NewPageHeader.js +3 -2
  30. package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
  31. package/dist/v2/components/NewTable/NewTable.d.ts.map +1 -1
  32. package/dist/v2/components/NewTable/NewTable.js +1 -0
  33. package/dist/v2/components/NewTable/NewTable.scss.js +1 -1
  34. package/dist/v2/components/Pagination/Pagination.js +1 -4
  35. package/dist/v2/components/Pagination/Pagination.scss.js +1 -1
  36. package/dist/v2/components/QuickFilter/QuickFilter.d.ts.map +1 -1
  37. package/dist/v2/components/QuickFilter/QuickFilter.js +5 -2
  38. package/dist/v2/components/QuickFilter/QuickFilter.scss.js +1 -1
  39. package/dist/v2/components/SectionHeader/SectionHeader.d.ts.map +1 -1
  40. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts +9 -0
  41. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts.map +1 -0
  42. package/dist/v2/components/TableSortIcon/TableSortIcon.js +14 -0
  43. package/dist/v2/components/TableSortIcon/index.d.ts +2 -0
  44. package/dist/v2/components/TableSortIcon/index.d.ts.map +1 -0
  45. package/dist/v2/components/WYSIWYGEditor/Icons.js +2 -2
  46. package/dist/v2/components/index.d.ts +5 -3
  47. package/dist/v2/components/index.d.ts.map +1 -1
  48. package/dist/v2/icons/index.d.ts +10 -0
  49. package/dist/v2/icons/index.d.ts.map +1 -1
  50. package/dist/v2/icons/index.js +61 -1
  51. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +2 -3
  52. package/dist/v2/pages/Settings/components/SidebarNavItem.js +2 -2
  53. package/package.json +1 -1
  54. package/src/v2/components/ActionMenu/ActionMenu.scss +22 -5
  55. package/src/v2/components/ActionMenu/ActionMenu.tsx +53 -5
  56. package/src/v2/components/Alert/Alert.scss +8 -19
  57. package/src/v2/components/Alert/Alert.tsx +24 -1
  58. package/src/v2/components/Badge/Badge.scss +13 -0
  59. package/src/v2/components/Badge/Badge.tsx +10 -8
  60. package/src/v2/components/Button/Button.tsx +13 -2
  61. package/src/v2/components/Button/GhostButton.scss +11 -1
  62. package/src/v2/components/Button/index.ts +2 -0
  63. package/src/v2/components/Customer/CustomersList.scss +72 -115
  64. package/src/v2/components/FormField/FormField.tsx +19 -21
  65. package/src/v2/components/Modal/DeleteModal.tsx +4 -2
  66. package/src/v2/components/NPSScore/NPSScore.scss +4 -0
  67. package/src/v2/components/NPSScore/NPSScore.tsx +6 -7
  68. package/src/v2/components/NewInput/NewInput.tsx +13 -1
  69. package/src/v2/components/NewPageHeader/NewPageHeader.scss +8 -5
  70. package/src/v2/components/NewPageHeader/NewPageHeader.tsx +21 -21
  71. package/src/v2/components/NewTable/NewTable.scss +17 -1
  72. package/src/v2/components/NewTable/NewTable.tsx +1 -0
  73. package/src/v2/components/Pagination/Pagination.scss +18 -18
  74. package/src/v2/components/Pagination/Pagination.tsx +1 -1
  75. package/src/v2/components/QuickFilter/QuickFilter.scss +17 -34
  76. package/src/v2/components/QuickFilter/QuickFilter.tsx +7 -5
  77. package/src/v2/components/SectionHeader/SectionHeader.tsx +5 -7
  78. package/src/v2/components/TableSortIcon/TableSortIcon.tsx +20 -0
  79. package/src/v2/components/TableSortIcon/index.ts +1 -0
  80. package/src/v2/components/WYSIWYGEditor/Icons.tsx +2 -2
  81. package/src/v2/components/index.ts +8 -3
  82. package/src/v2/icons/index.tsx +14 -0
  83. package/src/v2/pages/Settings/components/SidebarCustomisation.tsx +1 -1
@@ -8,8 +8,10 @@ export interface NPSScoreProps {
8
8
  firstName?: string
9
9
  /** Callback when NPS is submitted */
10
10
  onSubmit?: (data: NPSSubmitData) => void
11
- /** Callback when dismissed */
11
+ /** Callback when dismissed without submitting */
12
12
  onDismiss?: () => void
13
+ /** Callback when success alert is dismissed after submission */
14
+ onSubmitDismiss?: () => void
13
15
  }
14
16
 
15
17
  export interface NPSSubmitData {
@@ -44,6 +46,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
44
46
  firstName,
45
47
  onSubmit,
46
48
  onDismiss,
49
+ onSubmitDismiss,
47
50
  }) => {
48
51
  const [selectedScore, setSelectedScore] = useState<number | null>(null)
49
52
  const [reason, setReason] = useState('')
@@ -56,11 +59,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
56
59
  const handleSubmit = async () => {
57
60
  if (!selectedScore) return
58
61
 
59
- // Validate required fields - reason required for all scores
60
62
  const newErrors: { reason?: string; role?: string } = {}
61
- if (!reason.trim()) {
62
- newErrors.reason = 'Please provide a reason for your score'
63
- }
64
63
  if (!role) {
65
64
  newErrors.role = 'Please select your role'
66
65
  }
@@ -92,7 +91,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
92
91
  variant="success"
93
92
  title="Thank you!"
94
93
  message="Your feedback has been submitted successfully."
95
- onDismiss={onDismiss}
94
+ onDismiss={onSubmitDismiss}
96
95
  />
97
96
  </div>
98
97
  )
@@ -143,7 +142,7 @@ export const NPSScore: React.FC<NPSScoreProps> = ({
143
142
  {/* Reason textarea - always visible */}
144
143
  <div className="nps-score__field">
145
144
  <label className="nps-score__field-label">
146
- Reason for this score?
145
+ Reason for this score? (Optional)
147
146
  </label>
148
147
  <textarea
149
148
  value={reason}
@@ -62,7 +62,19 @@ export const NewInput = forwardRef<HTMLInputElement | HTMLTextAreaElement, NewIn
62
62
  ref={inputRef}
63
63
  {...(props as React.InputHTMLAttributes<HTMLInputElement>)}
64
64
  />
65
- <div className="icon" onClick={handleIconClick} style={{ cursor: (onIconClick || (props as any).type === 'date') ? 'pointer' : 'default' }}>
65
+ <div
66
+ className="icon"
67
+ role="button"
68
+ tabIndex={0}
69
+ onClick={handleIconClick}
70
+ onKeyDown={(e) => {
71
+ if (e.key === 'Enter' || e.key === ' ') {
72
+ e.preventDefault();
73
+ handleIconClick();
74
+ }
75
+ }}
76
+ style={{ cursor: (onIconClick || (props as any).type === 'date') ? 'pointer' : 'default' }}
77
+ >
66
78
  {icon}
67
79
  </div>
68
80
  </div>
@@ -2,13 +2,17 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  align-items: flex-start;
5
- gap: 14px;
5
+ gap: 0;
6
6
  align-self: stretch;
7
- padding: 32px 32px 0 32px;
7
+ padding: 32px 32px 0px 32px;
8
8
 
9
9
  @media (max-width: 768px) {
10
- padding: 16px 16px 0 16px;
11
- gap: 10px;
10
+ padding: 16px 16px 0px 16px;
11
+ gap: 0;
12
+ }
13
+
14
+ @media (max-width: 480px) {
15
+ padding: 16px 12px 0px 12px;
12
16
  }
13
17
  }
14
18
 
@@ -49,5 +53,4 @@
49
53
  height: 1px;
50
54
  border: none;
51
55
  background-color: var(--border-primary, #e8e9ef);
52
- margin: 0;
53
56
  }
@@ -9,6 +9,7 @@ export interface NewPageHeaderProps {
9
9
  renderRight?: () => React.ReactNode;
10
10
  className?: string;
11
11
  showDivider?: boolean;
12
+ dividerClassName?: string;
12
13
  }
13
14
 
14
15
  export const NewPageHeader = ({
@@ -17,26 +18,25 @@ export const NewPageHeader = ({
17
18
  onCancel,
18
19
  renderRight,
19
20
  className = '',
20
- showDivider = true
21
- }: NewPageHeaderProps) => {
22
- return (
23
- <div className={`new-page-header-container ${className}`}>
24
- <div className="new-page-header">
25
- <h1 className="new-page-header__title">{title}</h1>
26
- <div className="new-page-header__actions">
27
- {renderRight && renderRight()}
28
- {onCancel && (
29
- <Button
30
- type="button"
31
- variant="destructive-soft"
32
- onClick={onCancel}
33
- >
34
- <ButtonText color="danger">{cancelLabel}</ButtonText>
35
- </Button>
36
- )}
37
- </div>
21
+ showDivider = true,
22
+ dividerClassName = ''
23
+ }: NewPageHeaderProps) => (
24
+ <div className={`new-page-header-container ${className}`}>
25
+ <div className="new-page-header">
26
+ <h1 className="new-page-header__title">{title}</h1>
27
+ <div className="new-page-header__actions">
28
+ {renderRight && renderRight()}
29
+ {onCancel && (
30
+ <Button
31
+ type="button"
32
+ variant="destructive-soft"
33
+ onClick={onCancel}
34
+ >
35
+ <ButtonText color="danger">{cancelLabel}</ButtonText>
36
+ </Button>
37
+ )}
38
38
  </div>
39
- {showDivider && <hr className="new-page-header__divider" />}
40
39
  </div>
41
- );
42
- };
40
+ {showDivider && <hr className={`new-page-header__divider ${dividerClassName}`} />}
41
+ </div>
42
+ );
@@ -1,6 +1,11 @@
1
1
  .new-table-wrapper {
2
2
  width: 100%;
3
3
  overflow-x: auto;
4
+ overflow-y: visible;
5
+
6
+ &.action-menu-open {
7
+ overflow: visible !important;
8
+ }
4
9
  }
5
10
 
6
11
  .new-table {
@@ -28,6 +33,17 @@
28
33
  &__row {
29
34
  border-bottom: 1px solid var(--border-primary, #E8E9EF);
30
35
  transition: background-color 0.2s ease;
36
+ overflow: visible;
37
+
38
+ &.action-menu-open {
39
+ overflow: visible !important;
40
+ z-index: 20;
41
+ position: relative;
42
+
43
+ .new-table__cell {
44
+ overflow: visible !important;
45
+ }
46
+ }
31
47
 
32
48
  &:last-child {
33
49
  border-bottom: none;
@@ -46,6 +62,7 @@
46
62
  font-size: var(--text-base-size, 14px);
47
63
  color: var(--label-primary, #121E52);
48
64
  vertical-align: middle;
65
+ overflow: visible;
49
66
  }
50
67
 
51
68
  &__no-data-cell {
@@ -60,7 +77,6 @@
60
77
  // Mobile styles
61
78
  @media (max-width: 768px) {
62
79
  .new-table-wrapper {
63
- overflow-x: auto;
64
80
  -webkit-overflow-scrolling: touch;
65
81
  }
66
82
 
@@ -62,6 +62,7 @@ export function NewTable<T extends { id?: string | number }>({
62
62
  <td
63
63
  key={colIndex}
64
64
  className={`new-table__cell ${column.className || ''}`}
65
+ role="presentation"
65
66
  onClick={(e) => {
66
67
  if (column.disableRowClick) {
67
68
  e.stopPropagation()
@@ -13,8 +13,8 @@
13
13
  display: flex;
14
14
  align-items: center;
15
15
  justify-content: center;
16
- width: 40px;
17
- height: 40px;
16
+ width: 44px;
17
+ height: 44px;
18
18
  border-radius: 50%;
19
19
  border: none;
20
20
  cursor: pointer;
@@ -43,8 +43,8 @@
43
43
  }
44
44
 
45
45
  svg {
46
- width: 20px;
47
- height: 20px;
46
+ width: 24px;
47
+ height: 24px;
48
48
  flex-shrink: 0; // Prevent SVG from shrinking
49
49
  }
50
50
  }
@@ -56,13 +56,13 @@
56
56
  }
57
57
 
58
58
  &__page-number {
59
- font-size: 14px;
59
+ font-size: 15px;
60
60
  font-weight: 600;
61
61
  color: #14215a; // Main fill primary
62
62
  }
63
63
 
64
64
  &__showing {
65
- font-size: 12px;
65
+ font-size: 13px;
66
66
  font-weight: 500;
67
67
  color: #626a90; // Secondary text color
68
68
  }
@@ -78,12 +78,12 @@
78
78
  }
79
79
 
80
80
  &__button {
81
- width: 36px;
82
- height: 36px;
81
+ width: 40px;
82
+ height: 40px;
83
83
 
84
84
  svg {
85
- width: 18px;
86
- height: 18px;
85
+ width: 20px;
86
+ height: 20px;
87
87
  }
88
88
  }
89
89
 
@@ -92,11 +92,11 @@
92
92
  }
93
93
 
94
94
  &__page-number {
95
- font-size: 13px;
95
+ font-size: 14px;
96
96
  }
97
97
 
98
98
  &__showing {
99
- font-size: 11px;
99
+ font-size: 12px;
100
100
  }
101
101
  }
102
102
  }
@@ -114,12 +114,12 @@
114
114
  }
115
115
 
116
116
  &__button {
117
- width: 32px;
118
- height: 32px;
117
+ width: 36px;
118
+ height: 36px;
119
119
 
120
120
  svg {
121
- width: 16px;
122
- height: 16px;
121
+ width: 18px;
122
+ height: 18px;
123
123
  }
124
124
  }
125
125
 
@@ -131,11 +131,11 @@
131
131
  }
132
132
 
133
133
  &__page-number {
134
- font-size: 12px;
134
+ font-size: 13px;
135
135
  }
136
136
 
137
137
  &__showing {
138
- font-size: 10px;
138
+ font-size: 11px;
139
139
  }
140
140
  }
141
141
  }
@@ -59,7 +59,7 @@ export const Pagination: React.FC<PaginationProps> = ({
59
59
  disabled={isLastPage}
60
60
  aria-label={t('App:next', { defaultValue: 'Next' })}
61
61
  >
62
- <ArrowRightIcon width={32} height={32} />
62
+ <ArrowRightIcon />
63
63
  </button>
64
64
  </div>
65
65
  <div className="v2-pagination__info">
@@ -14,28 +14,9 @@
14
14
  display: flex;
15
15
  flex-wrap: wrap;
16
16
  gap: 8px;
17
- }
18
-
19
- &__option {
20
- padding: 4px 16px;
21
- border-radius: 100px;
22
- border: 1px solid var(--border-primary, #E8E9EF);
23
- background-color: var(--neutral-white, #FFFFFF);
24
- font-size: var(--text-small-size, 13px);
25
- font-weight: 500;
26
- color: var(--label-primary, #121E52);
27
- cursor: pointer;
28
- transition: all 0.2s ease;
29
17
 
30
- &:hover:not(&--active) {
31
- background-color: var(--surface-primary-hover, #F8F8FA);
32
- }
33
-
34
- &--active {
35
- background-color: var(--fill-primary);
36
- border-color: var(--border-selected, #121E52);
37
- color: var(--neutral-white, #FFFFFF);
38
- font-weight: 600;
18
+ .ghost-button {
19
+ border-radius: 100px;
39
20
  }
40
21
  }
41
22
  }
@@ -43,29 +24,36 @@
43
24
  // Mobile styles
44
25
  @media (max-width: 768px) {
45
26
  .quick-filter {
46
- flex-direction: column;
27
+ display: flex;
28
+ flex-direction: row;
47
29
  align-items: flex-start;
48
- gap: 8px;
30
+ gap: 12px;
31
+ width: 100%;
49
32
 
50
33
  &__label {
51
34
  font-size: 12px;
52
35
  }
53
36
 
54
37
  &__options {
55
- width: 100%;
38
+ flex: 1;
39
+ display: flex;
40
+ flex-wrap: wrap;
56
41
  gap: 6px;
57
- }
42
+ padding: 0;
43
+ margin: 0;
44
+ min-width: 0;
58
45
 
59
- &__option {
60
- padding: 3px 12px;
61
- font-size: 12px;
46
+ .ghost-button {
47
+ flex-shrink: 0;
48
+ border-radius: 100px;
49
+ }
62
50
  }
63
51
  }
64
52
  }
65
53
 
66
54
  @media (max-width: 480px) {
67
55
  .quick-filter {
68
- gap: 6px;
56
+ gap: 8px;
69
57
 
70
58
  &__label {
71
59
  font-size: 11px;
@@ -74,11 +62,6 @@
74
62
  &__options {
75
63
  gap: 4px;
76
64
  }
77
-
78
- &__option {
79
- padding: 2px 10px;
80
- font-size: 11px;
81
- }
82
65
  }
83
66
  }
84
67
 
@@ -1,4 +1,5 @@
1
1
  import React from 'react'
2
+ import { GhostButton } from '../Button'
2
3
  import './QuickFilter.scss'
3
4
 
4
5
  export interface QuickFilterOption {
@@ -32,16 +33,17 @@ export const QuickFilter: React.FC<QuickFilterProps> = ({
32
33
  {label && <span className="quick-filter__label">{label}</span>}
33
34
  <div className="quick-filter__options">
34
35
  {options.map((option) => (
35
- <button
36
+ <GhostButton
36
37
  key={option.value}
37
38
  type="button"
38
- className={`quick-filter__option ${
39
- selectedValues?.includes(option.value) ? 'quick-filter__option--active' : ''
40
- }`}
39
+ size="sm"
40
+ className={
41
+ selectedValues?.includes(option.value) ? 'active' : ''
42
+ }
41
43
  onClick={() => toggleOption(option.value)}
42
44
  >
43
45
  {option.label}
44
- </button>
46
+ </GhostButton>
45
47
  ))}
46
48
  </div>
47
49
  </div>
@@ -6,10 +6,8 @@ export interface SectionHeaderProps {
6
6
  className?: string;
7
7
  }
8
8
 
9
- export const SectionHeader: React.FC<SectionHeaderProps> = ({ title, className = '' }) => {
10
- return (
11
- <span className={`section-header ${className}`}>
12
- {title}
13
- </span>
14
- );
15
- };
9
+ export const SectionHeader: React.FC<SectionHeaderProps> = ({ title, className = '' }) => (
10
+ <span className={`section-header ${className}`}>
11
+ {title}
12
+ </span>
13
+ );
@@ -0,0 +1,20 @@
1
+ import React from 'react'
2
+ import { ArrowUpIcon, ArrowDownIcon } from '../../icons'
3
+
4
+ export type SortDirection = 'asc' | 'desc' | null
5
+
6
+ export interface TableSortIconProps {
7
+ active?: boolean
8
+ direction: SortDirection
9
+ className?: string
10
+ }
11
+
12
+ export const TableSortIcon: React.FC<TableSortIconProps> = ({ active = false, direction, className = '' }) => {
13
+ if (!active || !direction) return null
14
+
15
+ return (
16
+ <span className={className}>
17
+ {direction === 'asc' ? <ArrowUpIcon /> : <ArrowDownIcon />}
18
+ </span>
19
+ )
20
+ }
@@ -0,0 +1 @@
1
+ export * from './TableSortIcon'
@@ -62,8 +62,8 @@ export const QuoteAltIcon = () => (
62
62
  export const DividerIcon = () => (
63
63
  <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
64
64
  <rect x="5.25" y="11.25" width="13.5" height="1.5" fill="#626A90"/>
65
- <circle cx="21.75" cy="12" r="0.75" fill="#626A90" fill-opacity="0.5"/>
66
- <circle cx="2.25" cy="12" r="0.75" fill="#626A90" fill-opacity="0.5"/>
65
+ <circle cx="21.75" cy="12" r="0.75" fill="#626A90" fillOpacity="0.5"/>
66
+ <circle cx="2.25" cy="12" r="0.75" fill="#626A90" fillOpacity="0.5"/>
67
67
  </svg>
68
68
  );
69
69
 
@@ -7,6 +7,9 @@ export type { QuickFilterProps, QuickFilterOption } from './QuickFilter'
7
7
  export { NewTable } from './NewTable'
8
8
  export type { NewTableProps, NewTableColumn } from './NewTable'
9
9
 
10
+ export { TableSortIcon } from './TableSortIcon'
11
+ export type { TableSortIconProps } from './TableSortIcon'
12
+
10
13
 
11
14
  export { ActionMenu } from './ActionMenu'
12
15
  export type { ActionMenuProps, ActionMenuItem } from './ActionMenu'
@@ -34,8 +37,8 @@ export { SectionHeader } from './SectionHeader'
34
37
  export type { SectionHeaderProps } from './SectionHeader'
35
38
 
36
39
  // Existing Components
37
- export { Button, ButtonText } from './Button'
38
- export type { ButtonProps, ButtonTextProps } from './Button'
40
+ export { Button, ButtonText, GhostButton } from './Button'
41
+ export type { ButtonProps, ButtonTextProps, GhostButtonProps } from './Button'
39
42
 
40
43
  export { Select } from './Select'
41
44
 
@@ -69,6 +72,8 @@ export {
69
72
  ExternalLinkIcon,
70
73
  ExportIcon,
71
74
  ClearIcon,
72
- CloseIcon
75
+ CloseIcon,
76
+ EllipsisIcon,
77
+ CircleIcon
73
78
  } from '../icons'
74
79
 
@@ -207,5 +207,19 @@ export const CloseIcon = ({width = 24, height = 24, ...props
207
207
  </svg>
208
208
  )
209
209
 
210
+ export const EllipsisIcon = ({ width = 32, height = 32, fill = 'black', ...props }: React.SVGProps<SVGSVGElement> & { width?: number; height?: number; fill?: string } = {}) => (
211
+ <svg width={width} height={height} viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}>
212
+ <circle cx="8" cy="16" r="3" fill={fill} />
213
+ <circle cx="16" cy="16" r="3" fill={fill} />
214
+ <circle cx="24" cy="16" r="3" fill={fill} />
215
+ </svg>
216
+ )
217
+
218
+ export const CircleIcon = ({ width = 32, height = 32, fill = 'var(--surface-action-soft)', className = '', ...props }: React.SVGProps<SVGSVGElement> & { width?: number; height?: number; fill?: string } = {}) => (
219
+ <svg width={width} height={height} viewBox="0 0 32 32" fill="none" className={className} xmlns="http://www.w3.org/2000/svg" {...props}>
220
+ <circle cx="16" cy="16" r="16" fill={fill} />
221
+ </svg>
222
+ )
223
+
210
224
 
211
225
 
@@ -174,4 +174,4 @@ export const SidebarCustomisation: React.FC<SidebarCustomisationProps> = ({
174
174
  )
175
175
  }
176
176
 
177
- export default SidebarCustomisation
177
+ export default SidebarCustomisation