@licklist/design 0.78.34 → 0.78.36

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 (102) hide show
  1. package/dist/index.d.ts +4 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +8 -2
  4. package/dist/provider/location-input/LocationInput.js +1 -1
  5. package/dist/v2/components/ActionMenu/ActionMenu.d.ts.map +1 -1
  6. package/dist/v2/components/ActionMenu/ActionMenu.js +6 -16
  7. package/dist/v2/components/ActionMenu/ActionMenu.scss.js +1 -1
  8. package/dist/v2/components/Badge/Badge.d.ts +1 -0
  9. package/dist/v2/components/Badge/Badge.d.ts.map +1 -1
  10. package/dist/v2/components/Badge/Badge.js +2 -1
  11. package/dist/v2/components/Badge/Badge.scss.js +1 -1
  12. package/dist/v2/components/Button/Button.scss.js +1 -1
  13. package/dist/v2/components/Checkbox/Checkbox.scss.js +1 -1
  14. package/dist/v2/components/FormField/FormField.d.ts +3 -0
  15. package/dist/v2/components/FormField/FormField.d.ts.map +1 -1
  16. package/dist/v2/components/FormField/FormField.js +14 -3
  17. package/dist/v2/components/FormField/FormField.scss.js +1 -1
  18. package/dist/v2/components/IconButton/IconButton.d.ts +9 -0
  19. package/dist/v2/components/IconButton/IconButton.d.ts.map +1 -0
  20. package/dist/v2/components/IconButton/IconButton.js +137 -0
  21. package/dist/v2/components/IconButton/IconButton.scss.js +6 -0
  22. package/dist/v2/components/IconButton/index.d.ts +3 -0
  23. package/dist/v2/components/IconButton/index.d.ts.map +1 -0
  24. package/dist/v2/components/NewInput/NewInput.d.ts +1 -0
  25. package/dist/v2/components/NewInput/NewInput.d.ts.map +1 -1
  26. package/dist/v2/components/NewInput/NewInput.js +7 -4
  27. package/dist/v2/components/NewPageHeader/NewPageHeader.scss.js +1 -1
  28. package/dist/v2/components/QuickFilter/QuickFilter.scss.js +1 -1
  29. package/dist/v2/components/TableSortIcon/TableSortIcon.d.ts.map +1 -1
  30. package/dist/v2/components/TableSortIcon/TableSortIcon.js +5 -3
  31. package/dist/v2/components/ZoneCard/AddResourceButton.d.ts +8 -0
  32. package/dist/v2/components/ZoneCard/AddResourceButton.d.ts.map +1 -0
  33. package/dist/v2/components/ZoneCard/AddResourceButton.js +17 -0
  34. package/dist/v2/components/ZoneCard/ResourceRow.d.ts +28 -0
  35. package/dist/v2/components/ZoneCard/ResourceRow.d.ts.map +1 -0
  36. package/dist/v2/components/ZoneCard/ResourceRow.js +191 -0
  37. package/dist/v2/components/ZoneCard/ZoneCard.d.ts +25 -0
  38. package/dist/v2/components/ZoneCard/ZoneCard.d.ts.map +1 -0
  39. package/dist/v2/components/ZoneCard/ZoneCard.js +43 -0
  40. package/dist/v2/components/ZoneCard/ZoneCard.scss.js +6 -0
  41. package/dist/v2/components/ZoneCard/ZoneContainer.d.ts +12 -0
  42. package/dist/v2/components/ZoneCard/ZoneContainer.d.ts.map +1 -0
  43. package/dist/v2/components/ZoneCard/ZoneContainer.js +16 -0
  44. package/dist/v2/components/ZoneCard/ZoneHeader.d.ts +20 -0
  45. package/dist/v2/components/ZoneCard/ZoneHeader.d.ts.map +1 -0
  46. package/dist/v2/components/ZoneCard/ZoneHeader.js +149 -0
  47. package/dist/v2/components/ZoneCard/index.d.ts +11 -0
  48. package/dist/v2/components/ZoneCard/index.d.ts.map +1 -0
  49. package/dist/v2/components/index.d.ts +5 -1
  50. package/dist/v2/components/index.d.ts.map +1 -1
  51. package/dist/v2/icons/index.d.ts +36 -2
  52. package/dist/v2/icons/index.d.ts.map +1 -1
  53. package/dist/v2/icons/index.js +97 -29
  54. package/dist/v2/index.d.ts +10 -0
  55. package/dist/v2/index.d.ts.map +1 -1
  56. package/dist/v2/pages/Settings/components/SidebarCustomisation.js +5 -0
  57. package/dist/v2/pages/Settings/components/SidebarNavItem.js +5 -0
  58. package/dist/v2/pages/ZonesResources/ZonesResourcesPage.d.ts +12 -0
  59. package/dist/v2/pages/ZonesResources/ZonesResourcesPage.d.ts.map +1 -0
  60. package/dist/v2/pages/ZonesResources/ZonesResourcesPage.js +47 -0
  61. package/dist/v2/pages/ZonesResources/ZonesResourcesPage.scss.js +6 -0
  62. package/dist/v2/pages/ZonesResources/index.d.ts +3 -0
  63. package/dist/v2/pages/ZonesResources/index.d.ts.map +1 -0
  64. package/dist/v2/styles/form/NewInput.scss.js +1 -1
  65. package/package.json +3 -3
  66. package/src/index.ts +4 -1
  67. package/src/provider/location-input/LocationInput.tsx +1 -1
  68. package/src/v2/components/ActionMenu/ActionMenu.scss +7 -20
  69. package/src/v2/components/ActionMenu/ActionMenu.stories.tsx +58 -0
  70. package/src/v2/components/ActionMenu/ActionMenu.tsx +3 -6
  71. package/src/v2/components/Badge/Badge.scss +25 -23
  72. package/src/v2/components/Badge/Badge.tsx +3 -0
  73. package/src/v2/components/Checkbox/Checkbox.scss +3 -3
  74. package/src/v2/components/Customer/CustomersList.scss +60 -9
  75. package/src/v2/components/FormField/FormField.scss +20 -1
  76. package/src/v2/components/FormField/FormField.tsx +33 -19
  77. package/src/v2/components/IconButton/IconButton.scss +81 -0
  78. package/src/v2/components/IconButton/IconButton.stories.tsx +51 -0
  79. package/src/v2/components/IconButton/IconButton.tsx +50 -0
  80. package/src/v2/components/IconButton/index.ts +2 -0
  81. package/src/v2/components/NewInput/NewInput.tsx +5 -2
  82. package/src/v2/components/NewPageHeader/NewPageHeader.scss +1 -5
  83. package/src/v2/components/NewPageHeader/NewPageHeader.stories.tsx +28 -0
  84. package/src/v2/components/QuickFilter/QuickFilter.scss +14 -3
  85. package/src/v2/components/TableSortIcon/TableSortIcon.tsx +3 -5
  86. package/src/v2/components/ZoneCard/AddResourceButton.tsx +20 -0
  87. package/src/v2/components/ZoneCard/ResourceRow.tsx +115 -0
  88. package/src/v2/components/ZoneCard/ZoneCard.scss +226 -0
  89. package/src/v2/components/ZoneCard/ZoneCard.stories.tsx +137 -0
  90. package/src/v2/components/ZoneCard/ZoneCard.tsx +69 -0
  91. package/src/v2/components/ZoneCard/ZoneContainer.tsx +26 -0
  92. package/src/v2/components/ZoneCard/ZoneHeader.tsx +84 -0
  93. package/src/v2/components/ZoneCard/index.ts +14 -0
  94. package/src/v2/components/index.ts +13 -1
  95. package/src/v2/icons/index.tsx +147 -14
  96. package/src/v2/index.ts +21 -0
  97. package/src/v2/pages/ZonesResources/ZonesResourcesPage.scss +43 -0
  98. package/src/v2/pages/ZonesResources/ZonesResourcesPage.stories.tsx +46 -0
  99. package/src/v2/pages/ZonesResources/ZonesResourcesPage.tsx +49 -0
  100. package/src/v2/pages/ZonesResources/index.ts +2 -0
  101. package/src/v2/styles/components/Button.scss +1 -0
  102. package/src/v2/styles/form/NewInput.scss +39 -6
@@ -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{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)}";
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{align-items:center;color:var(--label-primary);display:flex;font-size:15px;font-weight:600;justify-content:space-between;line-height:20px;width:100%}.new-form-input__label,.new-form-input__label-optional{font-family:var(--font-family-sans,\"Geist\",sans-serif);font-style:normal}.new-form-input__label-optional{color:var(--label-secondary);font-size:13px;font-weight:400;line-height:16px}.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--on-surface .new-form-input__input,.new-form-input--on-surface .new-form-input__input-with-icon,.new-form-input--on-surface .new-form-input__textarea{background-color:var(--surface-primary,#fff);background:var(--surface-primary,#fff)}.new-form-input--on-surface .new-form-input__input-with-icon:focus,.new-form-input--on-surface .new-form-input__input-with-icon:focus-within,.new-form-input--on-surface .new-form-input__input:focus,.new-form-input--on-surface .new-form-input__input:focus-within,.new-form-input--on-surface .new-form-input__textarea:focus,.new-form-input--on-surface .new-form-input__textarea:focus-within{background-color:var(--surface-primary,#fff)}.new-form-input.dob-input .new-form-input__label{color:var(--label-secondary,#626a90)}.surface-context--secondary .new-form-input__input,.surface-context--secondary .new-form-input__input-with-icon,.surface-context--secondary .new-form-input__textarea{background-color:var(--surface-primary,#fff);background:var(--surface-primary,#fff)}.surface-context--secondary .new-form-input__input-with-icon:focus,.surface-context--secondary .new-form-input__input-with-icon:focus-within,.surface-context--secondary .new-form-input__input:focus,.surface-context--secondary .new-form-input__input:focus-within,.surface-context--secondary .new-form-input__textarea:focus,.surface-context--secondary .new-form-input__textarea:focus-within{background-color:var(--surface-primary,#fff)}";
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.34",
3
+ "version": "0.78.36",
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.12",
45
+ "@licklist/core": "0.36.13",
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.12",
67
+ "@licklist/core": "0.36.13",
68
68
  "@licklist/eslint-config": "0.5.6",
69
69
  "@licklist/plugins": "0.36.10",
70
70
  "@mantine/core": "6.0.22",
package/src/index.ts CHANGED
@@ -29,7 +29,8 @@ export * from './report'
29
29
  export * from './venue-map-sets'
30
30
  export * from './affiliate'
31
31
  export * from './typeahead-helper'
32
- export * from './zone'
32
+ export { ZoneForm } from './zone/form'
33
+ export type { ZoneFormProps } from './zone/form'
33
34
  export * from './resource'
34
35
  export * from './virtualized'
35
36
  export * from './customers'
@@ -50,3 +51,5 @@ export * from './v2/components'
50
51
  export * from './v2/dashboard-analytics'
51
52
  export * from './v2/navigation/DashboardLayout'
52
53
  export * from './v2/pages/Settings'
54
+ export * from './v2/pages/ZonesResources'
55
+ export * from './v2/components'
@@ -71,7 +71,7 @@ export function LocationInput({ path }: { path: TimeZonePath }) {
71
71
  <option key='' value='' disabled>
72
72
  {t('chooseTimeZone')}
73
73
  </option>
74
- {data.map((zone) => (
74
+ {data?.map((zone) => (
75
75
  <option key={zone.id} value={zone.id.toString()}>
76
76
  {zone.name}
77
77
  </option>
@@ -7,46 +7,33 @@
7
7
 
8
8
  &__trigger {
9
9
  display: flex;
10
- width: 40px;
11
- height: 40px;
12
- padding: 8px;
10
+ width: 32px;
11
+ height: 32px;
12
+ padding: 0;
13
13
  justify-content: center;
14
14
  align-items: center;
15
15
  border-radius: 50%;
16
- border: 1px solid var(--border-primary, #E8E9EF);
16
+ border: none;
17
17
  background: var(--surface-action-soft);
18
18
  color: var(--actions-regular, #5D5BF4);
19
19
  cursor: pointer;
20
20
  transition: all 0.2s ease;
21
+ position: relative;
21
22
 
22
23
  &:hover {
23
- background: var(--surface-action-soft);
24
+ opacity: 0.8;
24
25
  }
25
26
 
26
27
  &--close {
27
28
  border-radius: 50%;
28
29
  background: #F4F4FE;
29
- border: 1px solid #F4F4FE;
30
30
 
31
31
  &:hover {
32
32
  background: #E8E8FD;
33
+ opacity: 1;
33
34
  }
34
35
  }
35
36
 
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
37
  }
51
38
 
52
39
  &__dropdown {
@@ -0,0 +1,58 @@
1
+ import React from 'react'
2
+ import { Meta, StoryObj } from '@storybook/react'
3
+ import { ActionMenu } from './ActionMenu'
4
+
5
+ export default {
6
+ title: 'v2/Components/ActionMenu',
7
+ component: ActionMenu,
8
+ } as Meta<typeof ActionMenu>
9
+
10
+ type Story = StoryObj<typeof ActionMenu>
11
+
12
+ const defaultItems = [
13
+ { label: 'Edit', onClick: () => console.log('Edit') },
14
+ { label: 'Duplicate', onClick: () => console.log('Duplicate') },
15
+ { label: 'Delete', onClick: () => console.log('Delete'), variant: 'danger' as const },
16
+ ]
17
+
18
+ export const Default: Story = {
19
+ args: {
20
+ items: defaultItems,
21
+ },
22
+ decorators: [
23
+ (Story) => (
24
+ <div style={{ display: 'flex', justifyContent: 'flex-end', paddingTop: 200 }}>
25
+ <Story />
26
+ </div>
27
+ ),
28
+ ],
29
+ }
30
+
31
+ export const OpenDown: Story = {
32
+ args: {
33
+ items: defaultItems,
34
+ direction: 'down',
35
+ },
36
+ decorators: [
37
+ (Story) => (
38
+ <div style={{ display: 'flex', justifyContent: 'flex-end', paddingTop: 20 }}>
39
+ <Story />
40
+ </div>
41
+ ),
42
+ ],
43
+ }
44
+
45
+ export const WithCustomIconColour: Story = {
46
+ args: {
47
+ items: defaultItems,
48
+ iconColour: '#E0423A',
49
+ direction: 'down',
50
+ },
51
+ }
52
+
53
+ export const SingleItem: Story = {
54
+ args: {
55
+ items: [{ label: 'Edit', onClick: () => console.log('Edit') }],
56
+ direction: 'down',
57
+ },
58
+ }
@@ -1,5 +1,5 @@
1
1
  import React, { useState, useRef, useEffect, useLayoutEffect } from 'react'
2
- import { CloseIcon, EllipsisIcon, CircleIcon } from '../../icons'
2
+ import { CloseIcon, EllipsisIcon } from '../../icons'
3
3
  import './ActionMenu.scss'
4
4
 
5
5
  export interface ActionMenuItem {
@@ -83,10 +83,7 @@ export const ActionMenu: React.FC<ActionMenuProps> = ({ items, className = '', i
83
83
  {isOpen ? (
84
84
  <CloseIcon width={18} height={18} />
85
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
- </>
86
+ <EllipsisIcon width={18} height={4} fill="var(--fill-action)" />
90
87
  )}
91
88
  </button>
92
89
 
@@ -112,4 +109,4 @@ export const ActionMenu: React.FC<ActionMenuProps> = ({ items, className = '', i
112
109
  )}
113
110
  </div>
114
111
  )
115
- }
112
+ }
@@ -1,19 +1,20 @@
1
1
  .new-badge {
2
+ font-family: var(--font-family-mono, 'Geist Mono', monospace);
2
3
  display: inline-flex;
3
- align-items: center;
4
+ padding: 6px 10px;
4
5
  justify-content: center;
5
- padding: 2px 12px;
6
- border-radius: 100px;
6
+ align-items: center;
7
+ gap: 1px;
8
+ color: var(--label-primary, #121E52);
9
+ font-size: 11px;
10
+ font-style: normal;
11
+ font-weight: 600;
12
+ line-height: 14px;
13
+ height: 28px;
7
14
 
8
15
  &--with-icon {
9
- padding-left: 8px;
16
+ padding-left: 6px;
10
17
  }
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
 
18
19
  &__icon {
19
20
  display: inline-flex;
@@ -21,39 +22,40 @@
21
22
  justify-content: center;
22
23
 
23
24
  svg {
24
- width: 16px;
25
- height: 16px;
25
+ width: 18px;
26
+ height: 18px;
26
27
  }
27
28
  }
28
29
 
29
30
  &--success {
30
- background-color: var(--surface-status-success, #EEF9EA);
31
- color: var(--label-status-success, #3A8A1F);
31
+ border-radius: var(--padding-lg, 24px);
32
32
  border: 1px solid var(--border-status-success, #C9ECBD);
33
+ background: var(--surface-colour-green-soft, #EEF9EA);
33
34
  }
34
35
 
35
36
  &--danger {
36
- background-color: var(--surface-status-error, #FCECEB);
37
- color: var(--label-status-error, #CC3C35);
37
+ border-radius: var(--padding-lg, 24px);
38
38
  border: 1px solid var(--border-status-error, #F5C4C2);
39
+ background: var(--surface-colour-red-soft, #FCECEB);
39
40
  }
40
41
 
41
42
  &--warning {
42
- background-color: var(--surface-status-alert, #FCF6E7);
43
- color: var(--label-status-alert, #FD7E14);
43
+ border-radius: var(--padding-lg, 24px);
44
44
  border: 1px solid var(--border-status-alert, #FED7B6);
45
+ background: var(--surface-colour-yellow-soft, #FCF6E7);
45
46
  }
46
47
 
47
48
  &--info {
48
- background-color: var(--surface-status-info, #E7F4FC);
49
- color: var(--label-status-info, #0D7FCE);
49
+ border-radius: var(--padding-lg, 24px);
50
50
  border: 1px solid var(--border-status-info, #B4DBF6);
51
+ background: var(--surface-colour-blue-soft, #E7F4FC);
51
52
  }
52
53
 
53
54
  &--neutral {
54
55
  background-color: var(--surface-secondary, #F8F8FA);
55
56
  color: var(--label-secondary, #9399B3);
56
- border: 1px solid var(--border-primary, #E8E9EF);
57
+ border-radius: var(--padding-lg, 24px);
58
+ border: 1px solid var(--border-colour-overlay, rgba(18, 30, 82, 0.10));
57
59
  }
58
60
  }
59
61
 
@@ -71,11 +73,11 @@
71
73
 
72
74
  @media (max-width: 480px) {
73
75
  .new-badge {
74
- padding: 1px 8px;
76
+ padding: 1px 10px;
75
77
  font-size: 11px;
76
78
 
77
79
  &--with-icon {
78
- padding-left: 4px;
80
+ padding-left: 6px;
79
81
  }
80
82
  }
81
83
  }
@@ -6,6 +6,7 @@ export interface BadgeProps {
6
6
  variant?: 'success' | 'danger' | 'warning' | 'info' | 'neutral'
7
7
  className?: string
8
8
  icon?: React.ReactNode
9
+ onClick?: (e: React.MouseEvent) => void
9
10
  }
10
11
 
11
12
  export const Badge: React.FC<BadgeProps> = ({
@@ -13,11 +14,13 @@ export const Badge: React.FC<BadgeProps> = ({
13
14
  variant = 'neutral',
14
15
  className = '',
15
16
  icon,
17
+ onClick,
16
18
  }) => (
17
19
  <span
18
20
  className={`new-badge new-badge--${variant} ${
19
21
  icon ? 'new-badge--with-icon' : ''
20
22
  } ${className}`}
23
+ onClick={onClick}
21
24
  >
22
25
  {icon && <span className="new-badge__icon">{icon}</span>}
23
26
  {children}
@@ -3,9 +3,8 @@
3
3
  .checkbox {
4
4
  display: flex;
5
5
  max-width: 500px;
6
- align-items: flex-start;
6
+ align-items: center;
7
7
  gap: 11px;
8
- align-self: stretch;
9
8
 
10
9
  @media (min-width: 992px) {
11
10
  max-width: unset;
@@ -13,11 +12,12 @@
13
12
 
14
13
  &__wrapper {
15
14
  display: flex;
16
- align-items: flex-start;
15
+ align-items: center;
17
16
  gap: 11px;
18
17
  cursor: pointer;
19
18
  user-select: none;
20
19
  width: 100%;
20
+ margin: 0;
21
21
  }
22
22
 
23
23
  &__input {
@@ -54,6 +54,7 @@
54
54
  width: 30px;
55
55
  height: 30px;
56
56
  flex-shrink: 0;
57
+ fill: var(--shade-lighter);
57
58
  }
58
59
  }
59
60
 
@@ -111,6 +112,10 @@
111
112
 
112
113
  .search-input-wrapper {
113
114
  width: 70%;
115
+
116
+ .new-form-input__icon {
117
+ color: var(--shade-lighter);
118
+ }
114
119
  }
115
120
 
116
121
  .search-helper-text {
@@ -125,13 +130,21 @@
125
130
 
126
131
  .filters-actions-row {
127
132
  display: flex;
128
- justify-content: space-between;
129
- align-items: center;
130
- gap: 24px;
133
+ flex-direction: column;
134
+ align-items: flex-start;
135
+ gap: 16px;
131
136
  width: 100%;
137
+
138
+ @media (min-width: 1024px) {
139
+ flex-direction: row;
140
+ justify-content: space-between;
141
+ align-items: center;
142
+ gap: 24px;
143
+ }
132
144
  }
133
145
 
134
146
  .quick-filters-wrapper {
147
+ width: 100%;
135
148
  flex: 1;
136
149
  }
137
150
 
@@ -139,6 +152,12 @@
139
152
  display: flex;
140
153
  gap: 12px;
141
154
  align-items: center;
155
+
156
+ .ghost-button {
157
+ &__icon svg {
158
+ fill: var(--shade-lighter);
159
+ }
160
+ }
142
161
  }
143
162
 
144
163
  &__row {
@@ -165,19 +184,46 @@
165
184
  &__sub {
166
185
  font-size: 13px;
167
186
  color: #9399B3;
187
+ display: block !important;
168
188
  }
169
189
  &__id {
170
190
  font-size: 13px;
171
191
  color: #9399B3;
172
- display: none;
192
+ display: none !important;
173
193
  }
174
194
 
175
195
  &:hover {
176
196
  .entity-cell__id {
177
- display: block;
197
+ display: block !important;
178
198
  }
179
199
  .entity-cell__sub {
180
- display: none;
200
+ display: none !important;
201
+ }
202
+ }
203
+
204
+ // Ensure hover state on the row also triggers the same behavior
205
+ // This addresses potential flickering when moving between cells
206
+ :is(.new-table__row:hover) & {
207
+ .entity-cell__id {
208
+ display: block !important;
209
+ }
210
+ .entity-cell__sub {
211
+ display: none !important;
212
+ }
213
+ }
214
+
215
+ // When entity-cell__sub is missing (like in template list),
216
+ // showing entity-cell__id on hover causes height jump.
217
+ // We only want to swap if both exist, or ensure height is stable.
218
+ &:not(:has(.entity-cell__sub)) {
219
+ .entity-cell__id {
220
+ display: block !important;
221
+ }
222
+ }
223
+
224
+ :is(.new-table__row:hover) &:not(:has(.entity-cell__sub)) {
225
+ .entity-cell__id {
226
+ display: block !important;
181
227
  }
182
228
  }
183
229
  }
@@ -542,6 +588,7 @@
542
588
  "customer bookings"
543
589
  "divider divider"
544
590
  "next last"
591
+ "status status"
545
592
  "actions actions";
546
593
  grid-template-columns: 1fr auto;
547
594
  border: 1px solid var(--border-primary, #E8E9EF);
@@ -604,6 +651,10 @@
604
651
  grid-area: last; // Reuse 'last' area for waiver in waiver list
605
652
  text-align: right;
606
653
  }
654
+ &.waiver-col-mb {
655
+ grid-area: status;
656
+ text-align: left;
657
+ }
607
658
  }
608
659
  }
609
660
  }
@@ -679,7 +730,7 @@
679
730
  .waiver-cell {
680
731
  display: flex;
681
732
  flex-direction: column;
682
- align-items: flex-end;
733
+ align-items: flex-start;
683
734
  min-width: 0;
684
735
  overflow: hidden;
685
736
 
@@ -688,7 +739,7 @@
688
739
  color: #626A90;
689
740
  font-weight: 500;
690
741
  margin-bottom: 4px;
691
- text-align: right;
742
+ text-align: left;
692
743
  white-space: nowrap;
693
744
  overflow: hidden;
694
745
  text-overflow: ellipsis;
@@ -697,7 +748,7 @@
697
748
 
698
749
  .v2-badge {
699
750
  display: inline-flex;
700
- margin-left: auto;
751
+ margin-right: auto;
701
752
  }
702
753
  }
703
754
 
@@ -33,7 +33,7 @@
33
33
  padding: 8px 10px;
34
34
  height: 40px;
35
35
  font-family: var(--font-family-sans, 'Geist', sans-serif);
36
- font-size: var(--text-regular-size, 15px);
36
+ font-size: var(--text-regular-size, 16px);
37
37
  line-height: var(--text-regular-line, 20px);
38
38
  color: var(--label-primary, #121e52);
39
39
  background-color: var(--surface-secondary, #f8f8fa);
@@ -66,6 +66,14 @@
66
66
  cursor: not-allowed;
67
67
  opacity: 0.6;
68
68
  }
69
+
70
+ &--on-surface {
71
+ background-color: var(--surface-primary, #fff);
72
+
73
+ &:focus {
74
+ background-color: var(--surface-primary, #fff);
75
+ }
76
+ }
69
77
  }
70
78
 
71
79
  &__help-text {
@@ -81,3 +89,14 @@
81
89
  }
82
90
  }
83
91
 
92
+ // Auto-detect: swap input backgrounds when inside a surface-secondary container
93
+ .surface-context--secondary {
94
+ .form-field__input {
95
+ background-color: var(--surface-primary, #fff);
96
+
97
+ &:focus {
98
+ background-color: var(--surface-primary, #fff);
99
+ }
100
+ }
101
+ }
102
+
@@ -4,30 +4,44 @@ import './FormField.scss'
4
4
  export interface FormFieldProps extends InputHTMLAttributes<HTMLInputElement> {
5
5
  label?: string
6
6
  error?: string
7
+ hasError?: boolean
8
+ success?: boolean
7
9
  helpText?: string
8
10
  required?: boolean
11
+ variant?: 'default' | 'on-surface'
9
12
  }
10
13
 
11
14
  export const FormField = forwardRef<HTMLInputElement, FormFieldProps>(
12
- ({ label, error, helpText, required, className = '', ...props }, ref) => (
13
- <div className={`form-field ${className}`}>
14
- {label && (
15
- <label className="form-field__label">
16
- {label}
17
- {required && <span className="form-field__required">*</span>}
18
- </label>
19
- )}
20
- <input
21
- ref={ref}
22
- className={`form-field__input ${error ? 'form-field__input--error' : ''}`}
23
- {...props}
24
- />
25
- {helpText && !error && (
26
- <span className="form-field__help-text">{helpText}</span>
27
- )}
28
- {error && <span className="form-field__error-text">{error}</span>}
29
- </div>
30
- )
15
+ ({ label, error, hasError, success, helpText, required, variant, className = '', ...props }, ref) => {
16
+ const showError = error || hasError
17
+ const showSuccess = success && !showError
18
+ const inputClassName = [
19
+ 'form-field__input',
20
+ showError ? 'form-field__input--error' : '',
21
+ showSuccess ? 'form-field__input--success' : '',
22
+ variant === 'on-surface' ? 'form-field__input--on-surface' : '',
23
+ ].filter(Boolean).join(' ')
24
+
25
+ return (
26
+ <div className={`form-field ${className}`}>
27
+ {label && (
28
+ <label className="form-field__label">
29
+ {label}
30
+ {required && <span className="form-field__required">*</span>}
31
+ </label>
32
+ )}
33
+ <input
34
+ ref={ref}
35
+ className={inputClassName}
36
+ {...props}
37
+ />
38
+ {helpText && !showError && (
39
+ <span className="form-field__help-text">{helpText}</span>
40
+ )}
41
+ {error && <span className="form-field__error-text">{error}</span>}
42
+ </div>
43
+ )
44
+ }
31
45
  )
32
46
 
33
47
  FormField.displayName = 'FormField'