@licklist/design 0.78.32 → 0.78.33

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 (123) hide show
  1. package/dist/Maintenance/MaintenancePage.js +1 -0
  2. package/dist/index.js +8 -1
  3. package/dist/v2/components/ActionMenu/ActionMenu.d.ts +14 -0
  4. package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -0
  5. package/dist/v2/components/ActionMenu/ActionMenu.js +159 -0
  6. package/dist/v2/components/ActionMenu/ActionMenu.scss.js +6 -0
  7. package/dist/v2/components/ActionMenu/index.d.ts +2 -0
  8. package/dist/v2/components/ActionMenu/index.d.ts.map +1 -0
  9. package/dist/v2/components/Alert/Alert.scss.js +1 -1
  10. package/dist/v2/components/Badge/Badge.d.ts +10 -0
  11. package/dist/v2/components/Badge/Badge.d.ts.map +1 -0
  12. package/dist/v2/components/Badge/Badge.js +19 -0
  13. package/dist/v2/components/Badge/Badge.scss.js +6 -0
  14. package/dist/v2/components/Badge/index.d.ts +2 -0
  15. package/dist/v2/components/Badge/index.d.ts.map +1 -0
  16. package/dist/v2/components/Button/Button.d.ts +3 -2
  17. package/dist/v2/components/Button/Button.d.ts.map +1 -1
  18. package/dist/v2/components/Button/Button.js +13 -6
  19. package/dist/v2/components/Button/Button.scss.js +1 -1
  20. package/dist/v2/components/Button/GhostButton.scss.js +1 -1
  21. package/dist/v2/components/Button/index.d.ts +2 -0
  22. package/dist/v2/components/Button/index.d.ts.map +1 -1
  23. package/dist/v2/components/Checkbox/Checkbox.scss.js +1 -1
  24. package/dist/v2/components/FormField/FormField.d.ts.map +1 -1
  25. package/dist/v2/components/FormField/FormField.scss.js +1 -1
  26. package/dist/v2/components/Modal/DeleteModal.d.ts +15 -0
  27. package/dist/v2/components/Modal/DeleteModal.d.ts.map +1 -0
  28. package/dist/v2/components/Modal/DeleteModal.js +151 -0
  29. package/dist/v2/components/Modal/DeleteModal.scss.js +6 -0
  30. package/dist/v2/components/Modal/index.d.ts +3 -0
  31. package/dist/v2/components/Modal/index.d.ts.map +1 -0
  32. package/dist/v2/components/NewInput/NewInput.d.ts +2 -0
  33. package/dist/v2/components/NewInput/NewInput.d.ts.map +1 -1
  34. package/dist/v2/components/NewInput/NewInput.js +37 -12
  35. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts +4 -1
  36. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts.map +1 -1
  37. package/dist/v2/components/NewPageHeader/NewPageHeader.js +18 -11
  38. package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
  39. package/dist/v2/components/NewTable/NewTable.d.ts +21 -0
  40. package/dist/v2/components/NewTable/NewTable.d.ts.map +1 -0
  41. package/dist/v2/components/NewTable/NewTable.js +63 -0
  42. package/dist/v2/components/NewTable/NewTable.scss.js +6 -0
  43. package/dist/v2/components/NewTable/index.d.ts +2 -0
  44. package/dist/v2/components/NewTable/index.d.ts.map +1 -0
  45. package/dist/v2/components/Pagination/Pagination.d.ts +13 -0
  46. package/dist/v2/components/Pagination/Pagination.d.ts.map +1 -0
  47. package/dist/v2/components/Pagination/Pagination.js +76 -0
  48. package/dist/v2/components/Pagination/Pagination.scss.js +6 -0
  49. package/dist/v2/components/Pagination/index.d.ts +2 -0
  50. package/dist/v2/components/Pagination/index.d.ts.map +1 -0
  51. package/dist/v2/components/QuickFilter/QuickFilter.d.ts +14 -0
  52. package/dist/v2/components/QuickFilter/QuickFilter.d.ts.map +1 -0
  53. package/dist/v2/components/QuickFilter/QuickFilter.js +70 -0
  54. package/dist/v2/components/QuickFilter/QuickFilter.scss.js +6 -0
  55. package/dist/v2/components/QuickFilter/index.d.ts +2 -0
  56. package/dist/v2/components/QuickFilter/index.d.ts.map +1 -0
  57. package/dist/v2/components/SectionHeader/SectionHeader.d.ts.map +1 -1
  58. package/dist/v2/components/Select/Select.d.ts +7 -4
  59. package/dist/v2/components/Select/Select.d.ts.map +1 -1
  60. package/dist/v2/components/Select/Select.js +53 -24
  61. package/dist/v2/components/Select/Select.scss.js +1 -1
  62. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts +9 -0
  63. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts.map +1 -0
  64. package/dist/v2/components/TableSortIcon/TableSortIcon.js +14 -0
  65. package/dist/v2/components/TableSortIcon/index.d.ts +2 -0
  66. package/dist/v2/components/TableSortIcon/index.d.ts.map +1 -0
  67. package/dist/v2/components/WYSIWYGEditor/Icons.js +2 -2
  68. package/dist/v2/components/WYSIWYGEditor/WYSIWYGEditor.scss.js +1 -1
  69. package/dist/v2/components/index.d.ts +17 -4
  70. package/dist/v2/components/index.d.ts.map +1 -1
  71. package/dist/v2/icons/index.d.ts +46 -0
  72. package/dist/v2/icons/index.d.ts.map +1 -1
  73. package/dist/v2/icons/index.js +358 -4
  74. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.d.ts.map +1 -1
  75. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.js +4 -8
  76. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +9 -3
  77. package/dist/v2/pages/Settings/components/SidebarNavItem.js +9 -3
  78. package/dist/v2/styles/form/NewInput.scss.js +1 -1
  79. package/package.json +3 -3
  80. package/src/v2/components/ActionMenu/ActionMenu.scss +106 -0
  81. package/src/v2/components/ActionMenu/ActionMenu.tsx +115 -0
  82. package/src/v2/components/ActionMenu/index.ts +1 -0
  83. package/src/v2/components/Badge/Badge.scss +82 -0
  84. package/src/v2/components/Badge/Badge.tsx +25 -0
  85. package/src/v2/components/Badge/index.ts +1 -0
  86. package/src/v2/components/Button/Button.tsx +18 -4
  87. package/src/v2/components/Button/GhostButton.scss +11 -1
  88. package/src/v2/components/Button/index.ts +2 -0
  89. package/src/v2/components/Customer/CustomerDetail.scss +319 -0
  90. package/src/v2/components/Customer/CustomersList.scss +815 -0
  91. package/src/v2/components/FormField/FormField.tsx +19 -21
  92. package/src/v2/components/Modal/DeleteModal.scss +254 -0
  93. package/src/v2/components/Modal/DeleteModal.tsx +102 -0
  94. package/src/v2/components/Modal/index.ts +3 -0
  95. package/src/v2/components/NewInput/NewInput.stories.tsx +3 -18
  96. package/src/v2/components/NewInput/NewInput.tsx +35 -12
  97. package/src/v2/components/NewPageHeader/NewPageHeader.scss +17 -8
  98. package/src/v2/components/NewPageHeader/NewPageHeader.tsx +17 -10
  99. package/src/v2/components/NewTable/NewTable.scss +126 -0
  100. package/src/v2/components/NewTable/NewTable.tsx +92 -0
  101. package/src/v2/components/NewTable/index.ts +1 -0
  102. package/src/v2/components/Pagination/Pagination.scss +142 -0
  103. package/src/v2/components/Pagination/Pagination.tsx +80 -0
  104. package/src/v2/components/Pagination/index.ts +1 -0
  105. package/src/v2/components/QuickFilter/QuickFilter.scss +67 -0
  106. package/src/v2/components/QuickFilter/QuickFilter.tsx +51 -0
  107. package/src/v2/components/QuickFilter/index.ts +1 -0
  108. package/src/v2/components/SectionHeader/SectionHeader.tsx +5 -7
  109. package/src/v2/components/Select/Select.scss +61 -24
  110. package/src/v2/components/Select/Select.stories.tsx +77 -1
  111. package/src/v2/components/Select/Select.tsx +63 -34
  112. package/src/v2/components/TableSortIcon/TableSortIcon.tsx +20 -0
  113. package/src/v2/components/TableSortIcon/index.ts +1 -0
  114. package/src/v2/components/WYSIWYGEditor/Icons.tsx +2 -2
  115. package/src/v2/components/index.ts +44 -5
  116. package/src/v2/icons/index.tsx +123 -3
  117. package/src/v2/navigation/DashboardLayout/ProviderSidebar.tsx +3 -1
  118. package/src/v2/navigation/config.tsx +1 -1
  119. package/src/v2/pages/Settings/components/SidebarCustomisation.tsx +1 -1
  120. package/src/v2/styles/common.scss +7 -0
  121. package/src/v2/styles/components/Button.scss +34 -2
  122. package/src/v2/styles/form/NewInput.scss +45 -21
  123. package/src/v2/styles/index.scss +1 -0
@@ -180,7 +180,7 @@ var defaultNavItems = [
180
180
  {
181
181
  id: 'customers',
182
182
  label: 'Customers',
183
- path: '/customers',
183
+ path: '/customers/overview',
184
184
  icon: /*#__PURE__*/ jsx(CustomersIcon, {})
185
185
  },
186
186
  {
@@ -201,13 +201,9 @@ var defaultNavItems = [
201
201
  path: '/marketing',
202
202
  icon: /*#__PURE__*/ jsx(MarketingIcon, {})
203
203
  },
204
- {
205
- id: 'waivers',
206
- label: 'Waivers',
207
- path: '/waivers',
208
- icon: /*#__PURE__*/ jsx(WaiversIcon, {})
209
- },
210
- {
204
+ /*
205
+ { id: 'waivers', label: 'Waivers', path: '/waivers', icon: <WaiversIcon /> },
206
+ */ {
211
207
  id: 'settings',
212
208
  label: 'Settings',
213
209
  path: '/settings',
@@ -3,14 +3,19 @@ import { useState, useEffect } from 'react';
3
3
  import { SidebarNavItem } from './SidebarNavItem.js';
4
4
  import './SidebarCustomisation.scss.js';
5
5
  import { CalendarIcon, BookingsIcon, BookingTypesIcon, LoyaltyIcon, CustomersIcon, MarketingIcon, WaiversIcon, SettingsIcon, EditIcon } from '../../../icons/index.js';
6
- import '../../../components/FormField/FormField.js';
6
+ import '../../../components/Badge/Badge.scss.js';
7
+ import { Button } from '../../../components/Button/Button.js';
8
+ import { GhostButton } from '../../../components/Button/GhostButton.js';
9
+ import '../../../components/QuickFilter/QuickFilter.scss.js';
10
+ import '../../../components/NewTable/NewTable.scss.js';
11
+ import '../../../components/ActionMenu/ActionMenu.scss.js';
12
+ import '../../../components/Modal/DeleteModal.scss.js';
7
13
  import '../../../components/NewInput/NewInput.js';
14
+ import '../../../components/FormField/FormField.js';
8
15
  import '../../../components/Checkbox/Checkbox.js';
9
16
  import '../../../components/WYSIWYGEditor/WYSIWYGEditor.scss.js';
10
- import { Button } from '../../../components/Button/Button.js';
11
17
  import '../../../components/NewPageHeader/NewPageHeader.scss.js';
12
18
  import '../../../components/SectionHeader/SectionHeader.scss.js';
13
- import { GhostButton } from '../../../components/Button/GhostButton.js';
14
19
  import '../../../components/Select/Select.scss.js';
15
20
  import '../../../components/Tooltip/Tooltip.js';
16
21
  import '../../../components/UserAvatar/UserAvatar.scss.js';
@@ -18,6 +23,7 @@ import '../../../components/UserPanel/UserPanel.scss.js';
18
23
  import '../../../components/EntityHeader/EntityHeader.scss.js';
19
24
  import '../../../components/Alert/Alert.scss.js';
20
25
  import '../../../components/NPSScore/NPSScore.scss.js';
26
+ import '../../../components/Pagination/Pagination.scss.js';
21
27
 
22
28
  function _array_like_to_array(arr, len) {
23
29
  if (len == null || len > arr.length) len = arr.length;
@@ -1,13 +1,18 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import 'react';
3
- import { FormField } from '../../../components/FormField/FormField.js';
3
+ import '../../../components/Badge/Badge.scss.js';
4
+ import '../../../components/Button/Button.scss.js';
5
+ import '../../../components/Button/GhostButton.scss.js';
6
+ import '../../../components/QuickFilter/QuickFilter.scss.js';
7
+ import '../../../components/NewTable/NewTable.scss.js';
8
+ import '../../../components/ActionMenu/ActionMenu.scss.js';
9
+ import '../../../components/Modal/DeleteModal.scss.js';
4
10
  import '../../../components/NewInput/NewInput.js';
11
+ import { FormField } from '../../../components/FormField/FormField.js';
5
12
  import '../../../components/Checkbox/Checkbox.js';
6
13
  import '../../../components/WYSIWYGEditor/WYSIWYGEditor.scss.js';
7
- import '../../../components/Button/Button.scss.js';
8
14
  import '../../../components/NewPageHeader/NewPageHeader.scss.js';
9
15
  import '../../../components/SectionHeader/SectionHeader.scss.js';
10
- import '../../../components/Button/GhostButton.scss.js';
11
16
  import '../../../components/Select/Select.scss.js';
12
17
  import '../../../components/Tooltip/Tooltip.js';
13
18
  import '../../../components/UserAvatar/UserAvatar.scss.js';
@@ -15,6 +20,7 @@ import '../../../components/UserPanel/UserPanel.scss.js';
15
20
  import '../../../components/EntityHeader/EntityHeader.scss.js';
16
21
  import '../../../components/Alert/Alert.scss.js';
17
22
  import '../../../components/NPSScore/NPSScore.scss.js';
23
+ import '../../../components/Pagination/Pagination.scss.js';
18
24
  import './SidebarNavItem.scss.js';
19
25
 
20
26
  var SidebarNavItem = function(param) {
@@ -1,6 +1,6 @@
1
1
  import styleInject from '/opt/atlassian/pipelines/agent/build/node_modules/style-inject/dist/style-inject.es.js';
2
2
 
3
- var css_248z = ":root{--font-family-sans:\"Geist\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;--font-family-mono:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--heading-xxl-size:44px;--heading-xxl-line:48px;--heading-xxl-weight:600;--heading-xl-size:32px;--heading-xl-line:36px;--heading-xl-weight:700;--heading-h1-size:24px;--heading-h1-line:28px;--heading-h1-weight:600;--heading-h2-size:20px;--heading-h2-line:24px;--heading-h2-weight:600;--heading-h3-size:17px;--heading-h3-line:20px;--heading-h3-weight:600;--heading-h4-size:15px;--heading-h4-line:18px;--heading-h4-weight:600;--heading-h5-size:13px;--heading-h5-line:16px;--heading-h5-weight:500;--heading-h6-size:11px;--heading-h6-line:14px;--heading-h6-weight:500;--heading-xxl-mobile-size:32px;--heading-xxl-mobile-line:36px;--heading-xxl-mobile-weight:600;--heading-xl-mobile-size:26px;--heading-xl-mobile-line:30px;--heading-xl-mobile-weight:700;--heading-h1-mobile-size:20px;--heading-h1-mobile-line:23px;--heading-h1-mobile-weight:600;--heading-h2-mobile-size:18px;--heading-h2-mobile-line:22px;--heading-h2-mobile-weight:600;--heading-h3-mobile-size:16px;--heading-h3-mobile-line:18px;--heading-h3-mobile-weight:600;--heading-h4-mobile-size:14px;--heading-h4-mobile-line:16px;--heading-h4-mobile-weight:600;--heading-h5-mobile-size:13px;--heading-h5-mobile-line:16px;--heading-h5-mobile-weight:500;--heading-h6-mobile-size:11px;--heading-h6-mobile-line:14px;--heading-h6-mobile-weight:500;--text-xl-size:20px;--text-xl-line:26px;--text-xl-weight:400;--text-large-size:18px;--text-large-line:24px;--text-large-weight:400;--text-regular-size:15px;--text-regular-line:20px;--text-regular-weight:400;--text-small-size:13px;--text-small-line:16px;--text-small-weight:400;--text-small-emphasis-weight:500;--text-small-bold-weight:600;--text-xs-size:10px;--text-xs-line:13px;--text-xs-weight:500;--text-xs-bold-weight:600}.new-form-input{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:var(--spacing-sm);width:100%}.new-form-input__label{color:var(--label-primary,#121e52);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:15px;font-style:normal;font-weight:600;line-height:20px}.new-form-input__label-optional{color:var(--labels-main-label-secondary,#626a90);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-xs-size,11px);font-weight:400;line-height:var(--text-xs-line,14px);text-align:right}.new-form-input__label-row{align-items:center;display:flex;gap:var(--spacing-reg,16px);justify-content:space-between;width:100%}.new-form-input__input{background-color:var(--surfaces-main-background-secondary);background:var(--surface-secondary);border:2px solid var(--border-primary);border-radius:var(--radius-md);color:var(--labels-main-label-primary,#121e52);flex:1 0 0;font-family:var(--font-family-sans);font-size:var(--text-regular-size);font-weight:var(--text-regular-weight);line-height:var(--text-regular-line);min-height:40px;padding:8px 10px;transition:all .2s ease;width:100%}@media (max-width:768px){.new-form-input__input{font-size:16px}}.new-form-input__input:focus{background-color:var(--surfaces-main-background-secondary,#f8f8fa);border-color:var(--border-selected,#6200ee);outline:none}.new-form-input__input::placeholder{color:var(--labels-main-label-secondary,#626a90)}.new-form-input__textarea{background-color:var(--surfaces-main-background-secondary,#f8f8fa);border:1px solid var(--borders-main-border-primary,#e8e9ef);border-radius:var(--radius-md,4px);color:var(--labels-main-label-primary,#121e52);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-regular-size,15px);line-height:var(--text-regular-line,20px);min-height:120px;padding:8px 10px;resize:vertical;transition:all .2s ease;width:100%}@media (max-width:768px){.new-form-input__textarea{font-size:16px}}.new-form-input__textarea:focus{border-color:var(--border-selected,#6200ee);outline:none}.new-form-input__textarea::placeholder{color:var(--labels-main-label-secondary,#626a90)}.new-form-input__input-with-icon{align-items:center;background-color:var(--surfaces-main-background-secondary,#f8f8fa);border:2px solid var(--borders-main-border-primary,#e8e9ef);border-radius:var(--radius-md,4px);display:flex;gap:var(--spacing-sm,8px);min-height:40px;padding:5px}.new-form-input__input-with-icon input{background:#0000;border:none;color:var(--label-primary);flex:1;font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-regular-size,15px);line-height:var(--text-regular-line,20px)}@media (max-width:768px){.new-form-input__input-with-icon input{font-size:16px}}.new-form-input__input-with-icon input:focus{outline:none}.new-form-input__input-with-icon input::placeholder{color:var(--labels-main-label-secondary,#626a90)}.new-form-input__input-with-icon .icon{flex-shrink:0;height:22px;width:22px}.new-form-input__verification-code{display:flex;gap:var(--spacing-sm,8px);height:62px}.new-form-input__verification-code .code-input{background-color:var(--surfaces-main-background-secondary,#f8f8fa);border:2px solid var(--borders-main-border-primary,#e8e9ef);border-radius:var(--radius-md,4px);color:var(--labels-main-label-primary,#121e52);flex:1;font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-lg-size,18px);font-weight:var(--heading-h3-weight,600);text-align:center;transition:all .2s ease}.new-form-input__verification-code .code-input:focus{border-color:var(--border-selected,#6200ee);outline:none}.new-form-input__helper-text{color:var(--label-secondary,#626a90);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-regular-size,15px);font-style:normal;font-weight:400;line-height:var(--text-regular-line,20px);margin-top:2px;min-width:max-content;white-space:nowrap}@media (max-width:768px){.new-form-input__helper-text{word-wrap:break-word;min-width:unset;white-space:normal}}.new-form-input__error-text{color:var(--labels-status-label-error,#ef4444);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:11px;font-style:normal;font-weight:400;line-height:14px;margin-top:2px}.new-form-input--active .new-form-input__input{border-color:var(--border-selected,#6200ee)}.new-form-input--error .new-form-input__input{border-color:var(--borders-status-border-error,#ef4444)}.new-form-input--disabled{opacity:var(--opacity-50,.5);pointer-events:none}";
3
+ var css_248z = ":root{--font-family-sans:\"Geist\",-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",Arial,sans-serif;--font-family-mono:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--heading-xxl-size:44px;--heading-xxl-line:48px;--heading-xxl-weight:600;--heading-xl-size:32px;--heading-xl-line:36px;--heading-xl-weight:700;--heading-h1-size:24px;--heading-h1-line:28px;--heading-h1-weight:600;--heading-h2-size:20px;--heading-h2-line:24px;--heading-h2-weight:600;--heading-h3-size:17px;--heading-h3-line:20px;--heading-h3-weight:600;--heading-h4-size:15px;--heading-h4-line:18px;--heading-h4-weight:600;--heading-h5-size:13px;--heading-h5-line:16px;--heading-h5-weight:500;--heading-h6-size:11px;--heading-h6-line:14px;--heading-h6-weight:500;--heading-xxl-mobile-size:32px;--heading-xxl-mobile-line:36px;--heading-xxl-mobile-weight:600;--heading-xl-mobile-size:26px;--heading-xl-mobile-line:30px;--heading-xl-mobile-weight:700;--heading-h1-mobile-size:20px;--heading-h1-mobile-line:23px;--heading-h1-mobile-weight:600;--heading-h2-mobile-size:18px;--heading-h2-mobile-line:22px;--heading-h2-mobile-weight:600;--heading-h3-mobile-size:16px;--heading-h3-mobile-line:18px;--heading-h3-mobile-weight:600;--heading-h4-mobile-size:14px;--heading-h4-mobile-line:16px;--heading-h4-mobile-weight:600;--heading-h5-mobile-size:13px;--heading-h5-mobile-line:16px;--heading-h5-mobile-weight:500;--heading-h6-mobile-size:11px;--heading-h6-mobile-line:14px;--heading-h6-mobile-weight:500;--text-xl-size:20px;--text-xl-line:26px;--text-xl-weight:400;--text-large-size:18px;--text-large-line:24px;--text-large-weight:400;--text-regular-size:15px;--text-regular-line:20px;--text-regular-weight:400;--text-small-size:13px;--text-small-line:16px;--text-small-weight:400;--text-small-emphasis-weight:500;--text-small-bold-weight:600;--text-xs-size:10px;--text-xs-line:13px;--text-xs-weight:500;--text-xs-bold-weight:600}.new-form-input{align-items:flex-start;align-self:stretch;display:flex;flex-direction:column;gap:var(--spacing-sm);width:100%}.new-form-input__label{display:block;font-style:normal}.new-form-input__label,.new-form-input__label-optional{color:var(--label-primary,#121e52);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:15px;font-weight:600;line-height:20px}.new-form-input__input{background-color:var(--surfaces-main-background-secondary);background:var(--surface-secondary);border:2px solid var(--border-primary);border-radius:var(--radius-md);color:var(--labels-main-label-primary,#121e52);flex:1 0 0;font-family:var(--font-family-sans);font-size:var(--text-regular-size);font-weight:var(--text-regular-weight);line-height:var(--text-regular-line);min-height:40px;padding:8px 10px;transition:all .2s ease;width:100%}@media (max-width:768px){.new-form-input__input{font-size:16px}}.new-form-input__input:focus{background-color:var(--surfaces-main-background-secondary,#f8f8fa);border-color:var(--border-selected,#6200ee);outline:none}.new-form-input__input::placeholder{color:var(--labels-main-label-secondary,#626a90)}.new-form-input__textarea{background-color:var(--surfaces-main-background-secondary,#f8f8fa);border:1px solid var(--borders-main-border-primary,#e8e9ef);border-radius:var(--radius-md,4px);color:var(--labels-main-label-primary,#121e52);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-regular-size,15px);line-height:var(--text-regular-line,20px);min-height:120px;padding:8px 10px;resize:vertical;transition:all .2s ease;width:100%}@media (max-width:768px){.new-form-input__textarea{font-size:16px}}.new-form-input__textarea:focus{border-color:var(--border-selected,#6200ee);outline:none}.new-form-input__textarea::placeholder{color:var(--labels-main-label-secondary,#626a90)}.new-form-input__input-with-icon{align-items:center;background-color:var(--surfaces-main-background-secondary,#f8f8fa);border:2px solid var(--border-primary,#e8e9ef);border-radius:var(--radius-md,4px);display:flex;gap:var(--spacing-sm,8px);min-height:52px;padding:8px 10px;transition:all .2s ease;width:70%}.new-form-input__input-with-icon:focus-within{border-color:var(--border-selected,#6200ee)}.new-form-input__input-with-icon .icon{align-items:center;display:flex;flex-shrink:0;height:24px;justify-content:center;order:-1;width:24px}.new-form-input__input-with-icon--right .icon{order:1}.new-form-input__input-with-icon input{background:#0000;border:none;color:var(--label-primary);flex:1;font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-regular-size,15px);line-height:var(--text-regular-line,20px)}@media (max-width:768px){.new-form-input__input-with-icon input{font-size:16px}}.new-form-input__input-with-icon input:focus{outline:none}.new-form-input__input-with-icon input::placeholder{color:var(--labels-main-label-secondary,#626a90)}.new-form-input__input-with-icon input[type=date]::-webkit-calendar-picker-indicator{-webkit-appearance:none;display:none}.new-form-input__input-with-icon input[type=date]::-webkit-inner-spin-button,.new-form-input__input-with-icon input[type=date]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.new-form-input__verification-code{display:flex;gap:var(--spacing-sm,8px);height:62px}.new-form-input__verification-code .code-input{background-color:var(--surfaces-main-background-secondary,#f8f8fa);border:2px solid var(--borders-main-border-primary,#e8e9ef);border-radius:var(--radius-md,4px);color:var(--labels-main-label-primary,#121e52);flex:1;font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-lg-size,18px);font-weight:var(--heading-h3-weight,600);text-align:center;transition:all .2s ease}.new-form-input__verification-code .code-input:focus{border-color:var(--border-selected,#6200ee);outline:none}.new-form-input__helper-text{color:var(--label-secondary,#626a90);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:var(--text-regular-size,15px);font-style:normal;font-weight:400;line-height:var(--text-regular-line,20px);margin-top:2px;min-width:max-content;white-space:nowrap}@media (max-width:768px){.new-form-input__helper-text{word-wrap:break-word;min-width:unset;white-space:normal}}.new-form-input__error-text{color:var(--labels-status-label-error,#ef4444);font-family:var(--font-family-sans,\"Geist\",sans-serif);font-size:11px;font-style:normal;font-weight:400;line-height:14px;margin-top:2px}.new-form-input--active .new-form-input__input{border-color:var(--border-selected,#6200ee)}.new-form-input--error .new-form-input__input{border-color:var(--borders-status-border-error,#ef4444)}.new-form-input--disabled{opacity:var(--opacity-50,.5);pointer-events:none}.new-form-input.dob-input .new-form-input__label{color:var(--label-secondary,#626a90)}";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@licklist/design",
3
- "version": "0.78.32",
3
+ "version": "0.78.33",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@bitbucket.org/bookedit-licklist/licklist_design.git"
@@ -42,7 +42,7 @@
42
42
  ]
43
43
  },
44
44
  "peerDependencies": {
45
- "@licklist/core": "0.36.10",
45
+ "@licklist/core": "0.36.11",
46
46
  "@licklist/eslint-config": "0.5.6",
47
47
  "@licklist/plugins": "0.36.10",
48
48
  "clsx": "2.1.1",
@@ -64,7 +64,7 @@
64
64
  "@dnd-kit/utilities": "2.0.0",
65
65
  "@fortawesome/fontawesome-svg-core": "1.2.34",
66
66
  "@fortawesome/free-solid-svg-icons": "5.15.2",
67
- "@licklist/core": "0.36.10",
67
+ "@licklist/core": "0.36.11",
68
68
  "@licklist/eslint-config": "0.5.6",
69
69
  "@licklist/plugins": "0.36.10",
70
70
  "@mantine/core": "6.0.22",
@@ -0,0 +1,106 @@
1
+ @import '../../styles/tokens/typography';
2
+ @import '../../styles/tokens/colors';
3
+
4
+ .action-menu {
5
+ position: relative;
6
+ display: inline-block;
7
+
8
+ &__trigger {
9
+ display: flex;
10
+ width: 40px;
11
+ height: 40px;
12
+ padding: 8px;
13
+ justify-content: center;
14
+ align-items: center;
15
+ border-radius: 50%;
16
+ border: 1px solid var(--border-primary, #E8E9EF);
17
+ background: var(--surface-action-soft);
18
+ color: var(--actions-regular, #5D5BF4);
19
+ cursor: pointer;
20
+ transition: all 0.2s ease;
21
+
22
+ &:hover {
23
+ background: var(--surface-action-soft);
24
+ }
25
+
26
+ &--close {
27
+ border-radius: 50%;
28
+ background: #F4F4FE;
29
+ border: 1px solid #F4F4FE;
30
+
31
+ &:hover {
32
+ background: #E8E8FD;
33
+ }
34
+ }
35
+
36
+ svg {
37
+ width: 28px;
38
+ height: 28px;
39
+ }
40
+
41
+ .action-menu__circle {
42
+ position: absolute;
43
+ top: 50%;
44
+ left: 50%;
45
+ transform: translate(-50%, -50%);
46
+ width: 32px;
47
+ height: 32px;
48
+ z-index: -1;
49
+ }
50
+ }
51
+
52
+ &__dropdown {
53
+ position: absolute;
54
+ right: 0;
55
+ z-index: 1000;
56
+ display: flex;
57
+ min-width: 180px;
58
+ flex-direction: column;
59
+ align-items: flex-start;
60
+ border-radius: 12px;
61
+ background: var(--surface-primary, #FFF);
62
+ box-shadow: 0 4px 20px 0 rgba(18, 30, 82, 0.15);
63
+ overflow: hidden;
64
+ border: 1px solid var(--border-primary, #E8E9EF);
65
+
66
+ &--bottom {
67
+ top: calc(100% + 4px);
68
+ }
69
+
70
+ &--top {
71
+ bottom: calc(100% + 4px);
72
+ }
73
+ }
74
+
75
+
76
+ &__item {
77
+ display: flex;
78
+ padding: 12px 16px;
79
+ align-items: center;
80
+ gap: 8px;
81
+ align-self: stretch;
82
+ border: none;
83
+ background: none;
84
+ cursor: pointer;
85
+ @include typography('text.small.emphasis');
86
+ text-align: left;
87
+ transition: background 0.2s ease;
88
+ white-space: nowrap;
89
+
90
+ &--default {
91
+ color: var(--label-primary, #121E52);
92
+
93
+ &:hover {
94
+ background: var(--surface-primary-hover, #F8F8FA);
95
+ }
96
+ }
97
+
98
+ &--danger {
99
+ color: var(--label-danger, #E0423A);
100
+
101
+ &:hover {
102
+ background: var(--surface-danger-soft, #FCECEB);
103
+ }
104
+ }
105
+ }
106
+ }
@@ -0,0 +1,115 @@
1
+ import React, { useState, useRef, useEffect, useLayoutEffect } from 'react'
2
+ import { CloseIcon, EllipsisIcon, CircleIcon } from '../../icons'
3
+ import './ActionMenu.scss'
4
+
5
+ export interface ActionMenuItem {
6
+ label: string
7
+ onClick: () => void
8
+ variant?: 'default' | 'danger'
9
+ }
10
+
11
+ export interface ActionMenuProps {
12
+ items: ActionMenuItem[]
13
+ className?: string
14
+ iconColour?: string
15
+ }
16
+
17
+ export const ActionMenu: React.FC<ActionMenuProps> = ({ items, className = '', iconColour = '' }) => {
18
+ const [isOpen, setIsOpen] = useState(false)
19
+ const [placement, setPlacement] = useState<'top' | 'bottom'>('bottom')
20
+ const menuRef = useRef<HTMLDivElement>(null)
21
+ const dropdownRef = useRef<HTMLDivElement>(null)
22
+
23
+ useLayoutEffect(() => {
24
+ if (isOpen && menuRef.current && dropdownRef.current) {
25
+ const menuRect = menuRef.current.getBoundingClientRect()
26
+ const dropdownRect = dropdownRef.current.getBoundingClientRect()
27
+ const viewportHeight = window.innerHeight
28
+
29
+ const spaceBelow = viewportHeight - menuRect.bottom
30
+ const spaceAbove = menuRect.top
31
+
32
+ if (spaceBelow < dropdownRect.height && spaceAbove > spaceBelow) {
33
+ setPlacement('top')
34
+ } else {
35
+ setPlacement('bottom')
36
+ }
37
+ }
38
+ }, [isOpen])
39
+
40
+ useEffect(() => {
41
+ const parentRow = menuRef.current?.closest('tr')
42
+ const tableWrapper = menuRef.current?.closest('.new-table-wrapper')
43
+
44
+ if (isOpen) {
45
+ parentRow?.classList.add('action-menu-open')
46
+ tableWrapper?.classList.add('action-menu-open')
47
+ } else {
48
+ parentRow?.classList.remove('action-menu-open')
49
+ tableWrapper?.classList.remove('action-menu-open')
50
+ }
51
+
52
+ return () => {
53
+ parentRow?.classList.remove('action-menu-open')
54
+ tableWrapper?.classList.remove('action-menu-open')
55
+ }
56
+ }, [isOpen])
57
+
58
+ useEffect(() => {
59
+ const handleClickOutside = (event: MouseEvent) => {
60
+ if (menuRef.current && !menuRef.current.contains(event.target as Node)) {
61
+ setIsOpen(false)
62
+ }
63
+ }
64
+
65
+ if (isOpen) {
66
+ document.addEventListener('mousedown', handleClickOutside)
67
+ }
68
+
69
+ return () => {
70
+ document.removeEventListener('mousedown', handleClickOutside)
71
+ }
72
+ }, [isOpen])
73
+
74
+ return (
75
+ <div className={`action-menu ${className}`} ref={menuRef}>
76
+ <button
77
+ type="button"
78
+ className={`action-menu__trigger ${isOpen ? 'action-menu__trigger--close' : ''}`}
79
+ onClick={() => setIsOpen(!isOpen)}
80
+ aria-expanded={isOpen}
81
+ style={{ color: iconColour }}
82
+ >
83
+ {isOpen ? (
84
+ <CloseIcon width={18} height={18} />
85
+ ) : (
86
+ <>
87
+ <CircleIcon width={32} height={32} className="action-menu__circle" fill="var(--surface-action-soft)" />
88
+ <EllipsisIcon width={18} height={18} fill="var(--fill-action)" />
89
+ </>
90
+ )}
91
+ </button>
92
+
93
+ {isOpen && (
94
+ <div
95
+ ref={dropdownRef}
96
+ className={`action-menu__dropdown action-menu__dropdown--${placement}`}
97
+ >
98
+ {items.map((item, index) => (
99
+ <button
100
+ key={index}
101
+ type="button"
102
+ className={`action-menu__item action-menu__item--${item.variant || 'default'}`}
103
+ onClick={() => {
104
+ item.onClick()
105
+ setIsOpen(false)
106
+ }}
107
+ >
108
+ {item.label}
109
+ </button>
110
+ ))}
111
+ </div>
112
+ )}
113
+ </div>
114
+ )
115
+ }
@@ -0,0 +1 @@
1
+ export * from './ActionMenu'
@@ -0,0 +1,82 @@
1
+ .new-badge {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ padding: 2px 12px;
6
+ border-radius: 100px;
7
+
8
+ &--with-icon {
9
+ padding-left: 8px;
10
+ }
11
+ font-family: var(--font-family-mono, 'Geist Mono', monospace);
12
+ font-size: var(--text-small-size, 13px);
13
+ font-weight: 500;
14
+ line-height: 1.2;
15
+ white-space: nowrap;
16
+ gap: 4px;
17
+
18
+ &__icon {
19
+ display: inline-flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+
23
+ svg {
24
+ width: 16px;
25
+ height: 16px;
26
+ }
27
+ }
28
+
29
+ &--success {
30
+ background-color: var(--surface-status-success, #EEF9EA);
31
+ color: var(--label-status-success, #3A8A1F);
32
+ border: 1px solid var(--border-status-success, #C9ECBD);
33
+ }
34
+
35
+ &--danger {
36
+ background-color: var(--surface-status-error, #FCECEB);
37
+ color: var(--label-status-error, #CC3C35);
38
+ border: 1px solid var(--border-status-error, #F5C4C2);
39
+ }
40
+
41
+ &--warning {
42
+ background-color: var(--surface-status-alert, #FCF6E7);
43
+ color: var(--label-status-alert, #FD7E14);
44
+ border: 1px solid var(--border-status-alert, #FED7B6);
45
+ }
46
+
47
+ &--info {
48
+ background-color: var(--surface-status-info, #E7F4FC);
49
+ color: var(--label-status-info, #0D7FCE);
50
+ border: 1px solid var(--border-status-info, #B4DBF6);
51
+ }
52
+
53
+ &--neutral {
54
+ background-color: var(--surface-secondary, #F8F8FA);
55
+ color: var(--label-secondary, #9399B3);
56
+ border: 1px solid var(--border-primary, #E8E9EF);
57
+ }
58
+ }
59
+
60
+ // Mobile styles
61
+ @media (max-width: 768px) {
62
+ .new-badge {
63
+ padding: 1px 10px;
64
+ font-size: 12px;
65
+
66
+ &--with-icon {
67
+ padding-left: 6px;
68
+ }
69
+ }
70
+ }
71
+
72
+ @media (max-width: 480px) {
73
+ .new-badge {
74
+ padding: 1px 8px;
75
+ font-size: 11px;
76
+
77
+ &--with-icon {
78
+ padding-left: 4px;
79
+ }
80
+ }
81
+ }
82
+
@@ -0,0 +1,25 @@
1
+ import React from 'react'
2
+ import './Badge.scss'
3
+
4
+ export interface BadgeProps {
5
+ children: React.ReactNode
6
+ variant?: 'success' | 'danger' | 'warning' | 'info' | 'neutral'
7
+ className?: string
8
+ icon?: React.ReactNode
9
+ }
10
+
11
+ export const Badge: React.FC<BadgeProps> = ({
12
+ children,
13
+ variant = 'neutral',
14
+ className = '',
15
+ icon,
16
+ }) => (
17
+ <span
18
+ className={`new-badge new-badge--${variant} ${
19
+ icon ? 'new-badge--with-icon' : ''
20
+ } ${className}`}
21
+ >
22
+ {icon && <span className="new-badge__icon">{icon}</span>}
23
+ {children}
24
+ </span>
25
+ )
@@ -0,0 +1 @@
1
+ export * from './Badge'
@@ -2,14 +2,26 @@ import { ButtonHTMLAttributes } from 'react'
2
2
  import './Button.scss'
3
3
 
4
4
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
- variant?: 'primary' | 'primary-soft' | 'primary-outline' | 'secondary' | 'destructive-soft' | 'destructive-strong' | 'info' | 'disabled'
5
+ variant?:
6
+ | 'primary'
7
+ | 'primary-soft'
8
+ | 'secondary-soft'
9
+ | 'tertiary-soft'
10
+ | 'primary-outline'
11
+ | 'secondary'
12
+ | 'destructive-soft'
13
+ | 'destructive-strong'
14
+ | 'info'
15
+ | 'disabled'
6
16
  size?: 'sm' | 'md' | 'lg'
17
+ isLoading?: boolean
7
18
  }
8
19
 
9
20
  export function Button({
10
21
  variant = 'primary',
11
- size = 'md',
22
+ size: _size = 'md',
12
23
  disabled = false,
24
+ isLoading = false,
13
25
  className = '',
14
26
  children,
15
27
  ...props
@@ -17,7 +29,7 @@ export function Button({
17
29
  const classes = [
18
30
  'new-button',
19
31
  `new-button--${variant}`,
20
- disabled ? 'new-button--disabled' : '',
32
+ disabled || isLoading ? 'new-button--disabled' : '',
21
33
  className
22
34
  ].filter(Boolean).join(' ')
23
35
 
@@ -27,10 +39,12 @@ export function Button({
27
39
 
28
40
  return (
29
41
  <button
42
+ type="button"
30
43
  className={classes}
31
- disabled={disabled}
44
+ disabled={disabled || isLoading}
32
45
  {...props}
33
46
  >
47
+ {isLoading && <div className="new-button__spinner" />}
34
48
  {content}
35
49
  </button>
36
50
  )
@@ -13,7 +13,7 @@
13
13
  cursor: pointer;
14
14
  transition: background-color 0.2s ease;
15
15
 
16
- &:hover:not(:disabled) {
16
+ &:not(.active):hover:not(:disabled) {
17
17
  background-color: var(--surfaces-main-background-tertiary, #E8E9EF);
18
18
  }
19
19
 
@@ -27,6 +27,16 @@
27
27
  outline-offset: 2px;
28
28
  }
29
29
 
30
+ &.active {
31
+ background-color: var(--fill-primary, #6200EE);
32
+ border-color: var(--border-selected, #121E52);
33
+ color: var(--neutral-white, #FFFFFF);
34
+
35
+ .ghost-button__text {
36
+ color: var(--neutral-white, #FFFFFF);
37
+ }
38
+ }
39
+
30
40
  &--sm {
31
41
  height: 28px;
32
42
  padding: 0 8px 0 8px;
@@ -1,3 +1,5 @@
1
1
  export { Button, ButtonText } from './Button'
2
2
  export type { ButtonProps, ButtonTextProps } from './Button'
3
+ export { GhostButton } from './GhostButton'
4
+ export type { GhostButtonProps } from './GhostButton'
3
5