@licklist/design 0.78.31 → 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 (139) hide show
  1. package/dist/Maintenance/Maintenance.scss.js +1 -1
  2. package/dist/Maintenance/MaintenancePage.d.ts.map +1 -1
  3. package/dist/Maintenance/MaintenancePage.js +4 -2
  4. package/dist/PageNotFound/PageNotFound.js +1 -1
  5. package/dist/index.js +9 -1
  6. package/dist/v2/components/ActionMenu/ActionMenu.d.ts +14 -0
  7. package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -0
  8. package/dist/v2/components/ActionMenu/ActionMenu.js +159 -0
  9. package/dist/v2/components/ActionMenu/ActionMenu.scss.js +6 -0
  10. package/dist/v2/components/ActionMenu/index.d.ts +2 -0
  11. package/dist/v2/components/ActionMenu/index.d.ts.map +1 -0
  12. package/dist/v2/components/Alert/Alert.scss.js +1 -1
  13. package/dist/v2/components/Badge/Badge.d.ts +10 -0
  14. package/dist/v2/components/Badge/Badge.d.ts.map +1 -0
  15. package/dist/v2/components/Badge/Badge.js +19 -0
  16. package/dist/v2/components/Badge/Badge.scss.js +6 -0
  17. package/dist/v2/components/Badge/index.d.ts +2 -0
  18. package/dist/v2/components/Badge/index.d.ts.map +1 -0
  19. package/dist/v2/components/Button/Button.d.ts +3 -2
  20. package/dist/v2/components/Button/Button.d.ts.map +1 -1
  21. package/dist/v2/components/Button/Button.js +13 -6
  22. package/dist/v2/components/Button/Button.scss.js +1 -1
  23. package/dist/v2/components/Button/GhostButton.d.ts +8 -0
  24. package/dist/v2/components/Button/GhostButton.d.ts.map +1 -0
  25. package/dist/v2/components/Button/GhostButton.js +111 -0
  26. package/dist/v2/components/Button/GhostButton.scss.js +6 -0
  27. package/dist/v2/components/Button/index.d.ts +2 -0
  28. package/dist/v2/components/Button/index.d.ts.map +1 -1
  29. package/dist/v2/components/Checkbox/Checkbox.scss.js +1 -1
  30. package/dist/v2/components/FormField/FormField.d.ts.map +1 -1
  31. package/dist/v2/components/FormField/FormField.scss.js +1 -1
  32. package/dist/v2/components/Modal/DeleteModal.d.ts +15 -0
  33. package/dist/v2/components/Modal/DeleteModal.d.ts.map +1 -0
  34. package/dist/v2/components/Modal/DeleteModal.js +151 -0
  35. package/dist/v2/components/Modal/DeleteModal.scss.js +6 -0
  36. package/dist/v2/components/Modal/index.d.ts +3 -0
  37. package/dist/v2/components/Modal/index.d.ts.map +1 -0
  38. package/dist/v2/components/NewInput/NewInput.d.ts +2 -0
  39. package/dist/v2/components/NewInput/NewInput.d.ts.map +1 -1
  40. package/dist/v2/components/NewInput/NewInput.js +37 -12
  41. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts +4 -1
  42. package/dist/v2/components/NewPageHeader/NewPageHeader.d.ts.map +1 -1
  43. package/dist/v2/components/NewPageHeader/NewPageHeader.js +18 -11
  44. package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
  45. package/dist/v2/components/NewTable/NewTable.d.ts +21 -0
  46. package/dist/v2/components/NewTable/NewTable.d.ts.map +1 -0
  47. package/dist/v2/components/NewTable/NewTable.js +63 -0
  48. package/dist/v2/components/NewTable/NewTable.scss.js +6 -0
  49. package/dist/v2/components/NewTable/index.d.ts +2 -0
  50. package/dist/v2/components/NewTable/index.d.ts.map +1 -0
  51. package/dist/v2/components/Pagination/Pagination.d.ts +13 -0
  52. package/dist/v2/components/Pagination/Pagination.d.ts.map +1 -0
  53. package/dist/v2/components/Pagination/Pagination.js +76 -0
  54. package/dist/v2/components/Pagination/Pagination.scss.js +6 -0
  55. package/dist/v2/components/Pagination/index.d.ts +2 -0
  56. package/dist/v2/components/Pagination/index.d.ts.map +1 -0
  57. package/dist/v2/components/QuickFilter/QuickFilter.d.ts +14 -0
  58. package/dist/v2/components/QuickFilter/QuickFilter.d.ts.map +1 -0
  59. package/dist/v2/components/QuickFilter/QuickFilter.js +70 -0
  60. package/dist/v2/components/QuickFilter/QuickFilter.scss.js +6 -0
  61. package/dist/v2/components/QuickFilter/index.d.ts +2 -0
  62. package/dist/v2/components/QuickFilter/index.d.ts.map +1 -0
  63. package/dist/v2/components/SectionHeader/SectionHeader.d.ts.map +1 -1
  64. package/dist/v2/components/Select/Select.d.ts +7 -4
  65. package/dist/v2/components/Select/Select.d.ts.map +1 -1
  66. package/dist/v2/components/Select/Select.js +53 -24
  67. package/dist/v2/components/Select/Select.scss.js +1 -1
  68. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts +9 -0
  69. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts.map +1 -0
  70. package/dist/v2/components/TableSortIcon/TableSortIcon.js +14 -0
  71. package/dist/v2/components/TableSortIcon/index.d.ts +2 -0
  72. package/dist/v2/components/TableSortIcon/index.d.ts.map +1 -0
  73. package/dist/v2/components/WYSIWYGEditor/Icons.js +2 -2
  74. package/dist/v2/components/WYSIWYGEditor/WYSIWYGEditor.scss.js +1 -1
  75. package/dist/v2/components/index.d.ts +17 -2
  76. package/dist/v2/components/index.d.ts.map +1 -1
  77. package/dist/v2/icons/index.d.ts +46 -0
  78. package/dist/v2/icons/index.d.ts.map +1 -1
  79. package/dist/v2/icons/index.js +358 -4
  80. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.d.ts.map +1 -1
  81. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.js +6 -10
  82. package/dist/v2/navigation/DashboardLayout/ProviderSidebar.scss.js +1 -1
  83. package/dist/v2/pages/Settings/components/SidebarCustomisation.d.ts.map +1 -1
  84. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +12 -11
  85. package/dist/v2/pages/Settings/components/SidebarCustomisation.scss.js +1 -1
  86. package/dist/v2/pages/Settings/components/SidebarNavItem.js +9 -2
  87. package/dist/v2/styles/form/NewInput.scss.js +1 -1
  88. package/package.json +3 -3
  89. package/src/Maintenance/Maintenance.scss +7 -7
  90. package/src/Maintenance/MaintenancePage.tsx +4 -3
  91. package/src/PageNotFound/PageNotFound.tsx +1 -1
  92. package/src/v2/components/ActionMenu/ActionMenu.scss +106 -0
  93. package/src/v2/components/ActionMenu/ActionMenu.tsx +115 -0
  94. package/src/v2/components/ActionMenu/index.ts +1 -0
  95. package/src/v2/components/Badge/Badge.scss +82 -0
  96. package/src/v2/components/Badge/Badge.tsx +25 -0
  97. package/src/v2/components/Badge/index.ts +1 -0
  98. package/src/v2/components/Button/Button.tsx +18 -4
  99. package/src/v2/components/Button/GhostButton.scss +63 -0
  100. package/src/v2/components/Button/GhostButton.tsx +28 -0
  101. package/src/v2/components/Button/index.ts +2 -0
  102. package/src/v2/components/Customer/CustomerDetail.scss +319 -0
  103. package/src/v2/components/Customer/CustomersList.scss +815 -0
  104. package/src/v2/components/FormField/FormField.scss +0 -4
  105. package/src/v2/components/FormField/FormField.tsx +19 -21
  106. package/src/v2/components/Modal/DeleteModal.scss +254 -0
  107. package/src/v2/components/Modal/DeleteModal.tsx +102 -0
  108. package/src/v2/components/Modal/index.ts +3 -0
  109. package/src/v2/components/NewInput/NewInput.stories.tsx +3 -18
  110. package/src/v2/components/NewInput/NewInput.tsx +35 -12
  111. package/src/v2/components/NewPageHeader/NewPageHeader.scss +17 -8
  112. package/src/v2/components/NewPageHeader/NewPageHeader.tsx +17 -10
  113. package/src/v2/components/NewTable/NewTable.scss +126 -0
  114. package/src/v2/components/NewTable/NewTable.tsx +92 -0
  115. package/src/v2/components/NewTable/index.ts +1 -0
  116. package/src/v2/components/Pagination/Pagination.scss +142 -0
  117. package/src/v2/components/Pagination/Pagination.tsx +80 -0
  118. package/src/v2/components/Pagination/index.ts +1 -0
  119. package/src/v2/components/QuickFilter/QuickFilter.scss +67 -0
  120. package/src/v2/components/QuickFilter/QuickFilter.tsx +51 -0
  121. package/src/v2/components/QuickFilter/index.ts +1 -0
  122. package/src/v2/components/SectionHeader/SectionHeader.tsx +5 -7
  123. package/src/v2/components/Select/Select.scss +61 -24
  124. package/src/v2/components/Select/Select.stories.tsx +77 -1
  125. package/src/v2/components/Select/Select.tsx +63 -34
  126. package/src/v2/components/TableSortIcon/TableSortIcon.tsx +20 -0
  127. package/src/v2/components/TableSortIcon/index.ts +1 -0
  128. package/src/v2/components/WYSIWYGEditor/Icons.tsx +2 -2
  129. package/src/v2/components/index.ts +44 -2
  130. package/src/v2/icons/index.tsx +123 -3
  131. package/src/v2/navigation/DashboardLayout/ProviderSidebar.scss +41 -0
  132. package/src/v2/navigation/DashboardLayout/ProviderSidebar.tsx +7 -5
  133. package/src/v2/navigation/config.tsx +1 -1
  134. package/src/v2/pages/Settings/components/SidebarCustomisation.scss +0 -34
  135. package/src/v2/pages/Settings/components/SidebarCustomisation.tsx +6 -7
  136. package/src/v2/styles/common.scss +7 -0
  137. package/src/v2/styles/components/Button.scss +34 -2
  138. package/src/v2/styles/form/NewInput.scss +45 -21
  139. package/src/v2/styles/index.scss +1 -0
@@ -1,10 +1,16 @@
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
16
  import '../../../components/Select/Select.scss.js';
@@ -14,6 +20,7 @@ import '../../../components/UserPanel/UserPanel.scss.js';
14
20
  import '../../../components/EntityHeader/EntityHeader.scss.js';
15
21
  import '../../../components/Alert/Alert.scss.js';
16
22
  import '../../../components/NPSScore/NPSScore.scss.js';
23
+ import '../../../components/Pagination/Pagination.scss.js';
17
24
  import './SidebarNavItem.scss.js';
18
25
 
19
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.31",
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",
@@ -60,7 +60,7 @@
60
60
  }
61
61
 
62
62
  &__label-text {
63
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
63
+ font-family: var(--font-family-sans);
64
64
  font-weight: 500;
65
65
  font-size: 13px;
66
66
  line-height: 16px;
@@ -124,7 +124,7 @@
124
124
  gap: 8px;
125
125
  opacity: var(--opacity-80, 0.8);
126
126
  color: var(--labels-main-label-secondary, #626A90);
127
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
127
+ font-family: var(--font-family-sans);
128
128
  font-size: 11px;
129
129
  font-style: normal;
130
130
  font-weight: 500;
@@ -149,7 +149,7 @@
149
149
  .maintenance-page-title {
150
150
  align-self: stretch;
151
151
  color: var(--labels-main-label-primary, #121E52);
152
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
152
+ font-family: var(--font-family-sans);
153
153
  font-size: 32px;
154
154
  font-style: normal;
155
155
  font-weight: 700;
@@ -162,7 +162,7 @@
162
162
 
163
163
  .maintenance-page-subheading {
164
164
  color: var(--labels-main-label-primary, #121E52);
165
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
165
+ font-family: var(--font-family-sans);
166
166
  font-size: 20px;
167
167
  font-style: normal;
168
168
  font-weight: 600;
@@ -175,7 +175,7 @@
175
175
 
176
176
  .maintenance-page-body {
177
177
  color: var(--labels-main-label-primary, #121E52);
178
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
178
+ font-family: var(--font-family-sans);
179
179
  font-size: 20px;
180
180
  font-style: normal;
181
181
  font-weight: 400;
@@ -200,7 +200,7 @@
200
200
  justify-content: center;
201
201
  align-items: center;
202
202
  gap: 8px;
203
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
203
+ font-family: var(--font-family-sans);
204
204
  font-size: 15px;
205
205
  font-style: normal;
206
206
  font-weight: 600;
@@ -222,7 +222,7 @@
222
222
  gap: 8px;
223
223
  border-color: none;
224
224
  color: var(--labels-main-label-white, #FFF);
225
- font-family: 'Geist', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
225
+ font-family: var(--font-family-sans);
226
226
  font-size: 15px;
227
227
  font-style: normal;
228
228
  font-weight: 600;
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import { Button } from "../v2/components/Button";
2
3
 
3
4
  interface MaintenancePageProps {
4
5
  svg: React.ReactNode;
@@ -32,12 +33,12 @@ export const MaintenancePage: React.FC<MaintenancePageProps> = ({
32
33
  <h6 className="maintenance-page-body">{body}</h6>
33
34
 
34
35
  {buttonLabel && (
35
- <button
36
- className="back-button"
36
+ <Button
37
+ variant="primary"
37
38
  onClick={onButtonClick}
38
39
  >
39
40
  {buttonLabel}
40
- </button>
41
+ </Button>
41
42
  )}
42
43
 
43
44
  <div className="maintenance-page-footer-logo">
@@ -29,7 +29,7 @@ export const PageNotFound: React.FC<PageNotFoundProps> = ({ app, buttonLabel, on
29
29
  */}
30
30
  <MaintenancePage
31
31
  svg={<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64" fill="none">
32
- <path d="M18 50H22V48H40V44H44V48H48V52H22V54H18V52H15.9863C14.8893 51.9997 14.0001 51.0894 14 50.0166V44H18V50ZM22 44H18V40H22V44ZM49.999 44H46V38H49.999V44ZM18 40H14V30H18V40ZM54 38H50V34H54V38ZM46 34H42V30H46V34ZM14 30H10V26H14V30ZM49.999 22V30H46V24H38V22H40V18H38V16H36V12H40L49.999 22ZM22 14H26V12H32V16H26V18H22V16H16V20H18V26H14V20H12V16H14V13.9834C14.0001 12.888 14.8951 12 15.9971 12H22V14ZM38 22H34V18H38V22Z" fill="#626A90" />
32
+ <path d="M18 50H22V48H40V44H44V48H48V52H22V54H18V52H15.9863C14.8893 51.9997 14.0001 51.0894 14 50.0166V44H18V50ZM22 44H18V40H22V44ZM49.999 44H46V38H49.999V44ZM18 40H14V30H18V40ZM54 38H50V34H54V38ZM46 34H42V30H46V34ZM14 30H10V26H14V30ZM49.999 22V30H46V24H38V22H40V18H38V16H36V12H40L49.999 22ZM22 14H26V12H32V16H26V18H22V16H16V20H18V26H14V20H12V16H14V13.9834C14.0001 12.888 14.8951 12 15.9971 12H22V14ZM38 22H34V18H38V22Z" fill="var(--fills-main-fill-secondary, #626A90)" />
33
33
  </svg>}
34
34
  title="Page not found."
35
35
  subheading="It looks like that page doesn’t exist."
@@ -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
  )
@@ -0,0 +1,63 @@
1
+ .ghost-button {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ justify-content: center;
5
+ gap: 6px;
6
+ border-radius: 6px;
7
+ border: 1px solid var(--borders-main-border-primary, #E8E9EF);
8
+ background: transparent;
9
+ color: var(--labels-main-label-primary, #121E52);
10
+ font-family: var(--font-family-sans);
11
+ font-weight: 500;
12
+ white-space: nowrap;
13
+ cursor: pointer;
14
+ transition: background-color 0.2s ease;
15
+
16
+ &:not(.active):hover:not(:disabled) {
17
+ background-color: var(--surfaces-main-background-tertiary, #E8E9EF);
18
+ }
19
+
20
+ &:disabled {
21
+ cursor: default;
22
+ opacity: 0.5;
23
+ }
24
+
25
+ &:focus-visible {
26
+ outline: 2px solid var(--fills-main-fill-action, #6200EE);
27
+ outline-offset: 2px;
28
+ }
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
+
40
+ &--sm {
41
+ height: 28px;
42
+ padding: 0 8px 0 8px;
43
+ font-size: 13px;
44
+ }
45
+
46
+ &--md {
47
+ height: 36px;
48
+ padding: 0 12px 0 8px;
49
+ font-size: 14px;
50
+ }
51
+
52
+ &__icon {
53
+ display: flex;
54
+ align-items: center;
55
+ justify-content: center;
56
+ flex-shrink: 0;
57
+
58
+ svg {
59
+ width: 20px;
60
+ height: 20px;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,28 @@
1
+ import { ButtonHTMLAttributes } from 'react'
2
+ import './GhostButton.scss'
3
+
4
+ export interface GhostButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
5
+ icon?: React.ReactNode
6
+ size?: 'sm' | 'md'
7
+ }
8
+
9
+ export function GhostButton({
10
+ icon,
11
+ size = 'md',
12
+ className = '',
13
+ children,
14
+ ...props
15
+ }: GhostButtonProps) {
16
+ const classes = [
17
+ 'ghost-button',
18
+ `ghost-button--${size}`,
19
+ className
20
+ ].filter(Boolean).join(' ')
21
+
22
+ return (
23
+ <button className={classes} {...props}>
24
+ {icon && <span className="ghost-button__icon">{icon}</span>}
25
+ {children && <span className="ghost-button__text">{children}</span>}
26
+ </button>
27
+ )
28
+ }
@@ -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