@licklist/design 0.70.0-dev.4 → 0.70.0-dev.5

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 (29) hide show
  1. package/dist/assets/iframe/available.svg +4 -4
  2. package/dist/assets/iframe/available.svg.js +16 -18
  3. package/dist/availability-indicator/AvailabilityIndicator.d.ts +3 -1
  4. package/dist/availability-indicator/AvailabilityIndicator.d.ts.map +1 -1
  5. package/dist/availability-indicator/AvailabilityIndicator.js +112 -18
  6. package/dist/calendar/Calendar.d.ts +2 -0
  7. package/dist/calendar/Calendar.d.ts.map +1 -1
  8. package/dist/calendar/components/CalendarDates/CalendarDates.d.ts +2 -2
  9. package/dist/calendar/components/CalendarDates/CalendarDates.d.ts.map +1 -1
  10. package/dist/calendar/components/CalendarDates/CalendarDates.js +3 -2
  11. package/dist/date-time-button/DateTimeButton.d.ts +3 -1
  12. package/dist/date-time-button/DateTimeButton.d.ts.map +1 -1
  13. package/dist/date-time-button/DateTimeButton.js +2 -1
  14. package/dist/iframe/activity-card/ActivityCard.d.ts +3 -1
  15. package/dist/iframe/activity-card/ActivityCard.d.ts.map +1 -1
  16. package/dist/iframe/activity-card/ActivityCard.js +5 -3
  17. package/dist/snippet/snippet-template/preview/Preview.js +1 -0
  18. package/dist/styles/availability-indicator/AvailabilityIndicator.scss +9 -0
  19. package/dist/styles/date-time-button/DateTimeButton.scss +1 -1
  20. package/package.json +4 -4
  21. package/src/assets/iframe/available.svg +4 -4
  22. package/src/availability-indicator/AvailabilityIndicator.tsx +91 -16
  23. package/src/calendar/Calendar.tsx +2 -0
  24. package/src/calendar/components/CalendarDates/CalendarDates.tsx +3 -0
  25. package/src/date-time-button/DateTimeButton.tsx +4 -0
  26. package/src/iframe/activity-card/ActivityCard.tsx +15 -2
  27. package/src/styles/availability-indicator/AvailabilityIndicator.scss +9 -0
  28. package/src/styles/date-time-button/DateTimeButton.scss +1 -1
  29. package/yarn.lock +19 -19
@@ -1,5 +1,5 @@
1
- <svg width="7" height="11" viewBox="0 0 7 11" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect x="0.943939" y="1.03658" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
3
- <rect x="0.943939" y="4.10976" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
4
- <rect x="0.943939" y="7.18292" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
1
+ <svg viewBox="auto" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="14%" y="0" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
3
+ <rect x="14%" y="33%" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
4
+ <rect x="14%" y="66%" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
5
5
  </svg>
@@ -4,33 +4,31 @@ var _rect, _rect2, _rect3;
4
4
  function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
5
5
  const SvgAvailable = props => /*#__PURE__*/React.createElement("svg", _extends({
6
6
  xmlns: "http://www.w3.org/2000/svg",
7
- width: 7,
8
- height: 11,
9
- fill: "none"
7
+ fill: "none",
8
+ viewBox: "auto"
10
9
  }, props), _rect || (_rect = /*#__PURE__*/React.createElement("rect", {
11
- width: 5.252,
12
- height: 3.049,
13
- x: 0.944,
14
- y: 1.037,
10
+ width: "63%",
11
+ height: "29%",
12
+ x: "14%",
15
13
  fill: "#4CF973",
16
14
  stroke: "#fff",
17
- rx: 1.5
15
+ rx: "15%"
18
16
  })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement("rect", {
19
- width: 5.252,
20
- height: 3.049,
21
- x: 0.944,
22
- y: 4.11,
17
+ width: "63%",
18
+ height: "29%",
19
+ x: "14%",
20
+ y: "33%",
23
21
  fill: "#4CF973",
24
22
  stroke: "#fff",
25
- rx: 1.5
23
+ rx: "15%"
26
24
  })), _rect3 || (_rect3 = /*#__PURE__*/React.createElement("rect", {
27
- width: 5.252,
28
- height: 3.049,
29
- x: 0.944,
30
- y: 7.183,
25
+ width: "63%",
26
+ height: "29%",
27
+ x: "14%",
28
+ y: "66%",
31
29
  fill: "#4CF973",
32
30
  stroke: "#fff",
33
- rx: 1.5
31
+ rx: "15%"
34
32
  })));
35
33
 
36
34
  export { SvgAvailable as ReactComponent };
@@ -1,9 +1,11 @@
1
1
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper';
2
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper';
2
3
  type AvailabilityIndicatorProps = {
3
4
  resources: ZoneResourcesAvailability;
4
5
  isUnavailable?: boolean;
5
6
  isSoldOut?: boolean;
7
+ availabilityFormat?: AvailabilityFormat | null;
6
8
  };
7
- export declare const AvailabilityIndicator: ({ resources, isUnavailable, isSoldOut, }: AvailabilityIndicatorProps) => import("react/jsx-runtime").JSX.Element;
9
+ export declare const AvailabilityIndicator: ({ resources, isUnavailable, isSoldOut: _isSoldOut, availabilityFormat, }: AvailabilityIndicatorProps) => import("react/jsx-runtime").JSX.Element;
8
10
  export {};
9
11
  //# sourceMappingURL=AvailabilityIndicator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AvailabilityIndicator.d.ts","sourceRoot":"","sources":["../../src/availability-indicator/AvailabilityIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAA;AAiCpH,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,yBAAyB,CAAA;IACpC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,eAAO,MAAM,qBAAqB,6CAI/B,0BAA0B,4CAc5B,CAAA"}
1
+ {"version":3,"file":"AvailabilityIndicator.d.ts","sourceRoot":"","sources":["../../src/availability-indicator/AvailabilityIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAA;AACpH,OAAO,EAEL,kBAAkB,EACnB,MAAM,2DAA2D,CAAA;AAuFlE,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,yBAAyB,CAAA;IACpC,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,eAAO,MAAM,qBAAqB,6EAK/B,0BAA0B,4CAwB5B,CAAA"}
@@ -1,40 +1,117 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { useTranslation } from 'react-i18next';
3
+ import { AVAILABILITY_FORMAT_NUMBER } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper';
4
+ import { useWindowDimensions } from '@licklist/plugins';
3
5
  import { ReactComponent as SvgAvailable } from '../assets/iframe/available.svg.js';
4
6
  import { ReactComponent as SvgLimited } from '../assets/iframe/limited.svg.js';
5
7
  import { ReactComponent as SvgSoldOut } from '../assets/iframe/soldOut.svg.js';
8
+ import { TAB_WIDTH } from '../iframe/page/components/PageBody/constants.js';
6
9
 
10
+ function _define_property(obj, key, value) {
11
+ if (key in obj) {
12
+ Object.defineProperty(obj, key, {
13
+ value: value,
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true
17
+ });
18
+ } else {
19
+ obj[key] = value;
20
+ }
21
+ return obj;
22
+ }
23
+ function _object_spread(target) {
24
+ for(var i = 1; i < arguments.length; i++){
25
+ var source = arguments[i] != null ? arguments[i] : {};
26
+ var ownKeys = Object.keys(source);
27
+ if (typeof Object.getOwnPropertySymbols === "function") {
28
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
29
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
30
+ }));
31
+ }
32
+ ownKeys.forEach(function(key) {
33
+ _define_property(target, key, source[key]);
34
+ });
35
+ }
36
+ return target;
37
+ }
38
+ function ownKeys(object, enumerableOnly) {
39
+ var keys = Object.keys(object);
40
+ if (Object.getOwnPropertySymbols) {
41
+ var symbols = Object.getOwnPropertySymbols(object);
42
+ if (enumerableOnly) {
43
+ symbols = symbols.filter(function(sym) {
44
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
45
+ });
46
+ }
47
+ keys.push.apply(keys, symbols);
48
+ }
49
+ return keys;
50
+ }
51
+ function _object_spread_props(target, source) {
52
+ source = source != null ? source : {};
53
+ if (Object.getOwnPropertyDescriptors) {
54
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
55
+ } else {
56
+ ownKeys(Object(source)).forEach(function(key) {
57
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
58
+ });
59
+ }
60
+ return target;
61
+ }
7
62
  var LOTS_OF_SPACE_LIMIT = 0.2;
8
63
  var LIMITED_LIMIT = 0.8;
9
- var getIconsAndLabels = function(param) {
10
- var bookedResources = param.bookedResources, totalResources = param.totalResources;
11
- if (bookedResources === totalResources) {
64
+ var getLabelsWithArgument = function(param) {
65
+ var bookedResources = param.bookedResources, totalResources = param.totalResources, availabilityFormat = param.availabilityFormat, label = param.label;
66
+ var availableResources = totalResources - bookedResources;
67
+ if (availabilityFormat !== AVAILABILITY_FORMAT_NUMBER) {
12
68
  return {
13
- label: 'soldOut',
14
- Icon: SvgSoldOut
69
+ label: label
15
70
  };
16
71
  }
72
+ return availableResources === 1 ? {
73
+ label: 'availableSingleResource'
74
+ } : {
75
+ label: 'availableMultipleResources',
76
+ argument: availableResources
77
+ };
78
+ };
79
+ var getIconsAndLabelsWithArgument = function(param) {
80
+ var bookedResources = param.bookedResources, totalResources = param.totalResources, availabilityFormat = param.availabilityFormat;
17
81
  // lots of space if less than 80% booked
18
82
  if (bookedResources / totalResources <= LOTS_OF_SPACE_LIMIT) {
19
- return {
20
- label: 'lotsOfSpace',
83
+ return _object_spread_props(_object_spread({}, getLabelsWithArgument({
84
+ bookedResources: bookedResources,
85
+ totalResources: totalResources,
86
+ availabilityFormat: availabilityFormat,
87
+ label: 'lotsOfSpace'
88
+ })), {
21
89
  Icon: SvgAvailable
22
- };
90
+ });
23
91
  }
24
92
  if (bookedResources / totalResources >= LIMITED_LIMIT) {
25
- return {
26
- label: 'limited',
93
+ return _object_spread_props(_object_spread({}, getLabelsWithArgument({
94
+ bookedResources: bookedResources,
95
+ totalResources: totalResources,
96
+ availabilityFormat: availabilityFormat,
97
+ label: 'limited'
98
+ })), {
27
99
  Icon: SvgLimited
28
- };
100
+ });
29
101
  }
30
- return {
31
- label: 'available',
102
+ return _object_spread_props(_object_spread({}, getLabelsWithArgument({
103
+ bookedResources: bookedResources,
104
+ totalResources: totalResources,
105
+ availabilityFormat: availabilityFormat,
106
+ label: 'available'
107
+ })), {
32
108
  Icon: SvgAvailable
33
- };
109
+ });
34
110
  };
35
111
  var AvailabilityIndicator = function(param) {
36
- var resources = param.resources, isUnavailable = param.isUnavailable, isSoldOut = param.isSoldOut;
112
+ var resources = param.resources, isUnavailable = param.isUnavailable, _isSoldOut = param.isSoldOut, availabilityFormat = param.availabilityFormat;
37
113
  var t = useTranslation('Design').t;
114
+ var isSoldOut = _isSoldOut || resources.bookedResources === resources.totalResources;
38
115
  if (isUnavailable) {
39
116
  return /*#__PURE__*/ jsx(Indicator, {
40
117
  Icon: SvgSoldOut,
@@ -47,19 +124,36 @@ var AvailabilityIndicator = function(param) {
47
124
  label: t('soldOut')
48
125
  });
49
126
  }
50
- var _getIconsAndLabels = getIconsAndLabels(resources), Icon = _getIconsAndLabels.Icon, label = _getIconsAndLabels.label;
127
+ var _getIconsAndLabelsWithArgument = getIconsAndLabelsWithArgument(_object_spread_props(_object_spread({}, resources), {
128
+ availabilityFormat: availabilityFormat
129
+ })), Icon = _getIconsAndLabelsWithArgument.Icon, label = _getIconsAndLabelsWithArgument.label, argument = _getIconsAndLabelsWithArgument.argument;
51
130
  return /*#__PURE__*/ jsx(Indicator, {
52
131
  Icon: Icon,
53
- label: t(label)
132
+ label: t(label, argument ? {
133
+ argument: argument
134
+ } : undefined)
54
135
  });
55
136
  };
56
137
  var Indicator = function(param) {
57
138
  var Icon = param.Icon, label = param.label;
139
+ var width = useWindowDimensions().width;
140
+ var iconSizes = width > TAB_WIDTH ? {
141
+ height: 15,
142
+ width: 11
143
+ } : {
144
+ height: 11,
145
+ width: 7
146
+ };
58
147
  return /*#__PURE__*/ jsxs("div", {
59
148
  className: "availability-indicator",
60
149
  children: [
61
- /*#__PURE__*/ jsx(Icon, {}),
150
+ /*#__PURE__*/ jsx(Icon, {
151
+ height: iconSizes.height,
152
+ width: iconSizes.width,
153
+ viewBox: "auto"
154
+ }),
62
155
  /*#__PURE__*/ jsx("div", {
156
+ className: "indicator-label",
63
157
  children: label
64
158
  })
65
159
  ]
@@ -1,5 +1,6 @@
1
1
  import { Dispatch, ReactElement, SetStateAction } from 'react';
2
2
  import { DateTime } from 'luxon';
3
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper';
3
4
  import { DateTimeButtonProps } from 'src/date-time-button';
4
5
  export declare const defaultStartDay: DateTime<true>;
5
6
  export type CalendarProps = {
@@ -11,6 +12,7 @@ export type CalendarProps = {
11
12
  fromPrice?: string | ReactElement | null;
12
13
  isLoading?: boolean;
13
14
  initialDate?: DateTime;
15
+ availabilityFormat?: AvailabilityFormat | null;
14
16
  getDateTimeButtonProps: (date: DateTime) => Pick<DateTimeButtonProps, 'resources' | 'showResources' | 'isDisabled'>;
15
17
  };
16
18
  export declare const Calendar: (props: CalendarProps) => import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAK1D,eAAO,MAAM,eAAe,gBAK1B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,QAAQ,CAAA;IACrB,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClD,aAAa,EAAE,QAAQ,EAAE,CAAA;IACzB,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC7B,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAA;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,QAAQ,CAAA;IACtB,sBAAsB,EAAE,CACtB,IAAI,EAAE,QAAQ,KACX,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,eAAe,GAAG,YAAY,CAAC,CAAA;CAC7E,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,aAAa,4CAW5C,CAAA"}
1
+ {"version":3,"file":"Calendar.d.ts","sourceRoot":"","sources":["../../src/calendar/Calendar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAA;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAK1D,eAAO,MAAM,eAAe,gBAK1B,CAAA;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,QAAQ,CAAA;IACrB,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAA;IAClD,aAAa,EAAE,QAAQ,EAAE,CAAA;IACzB,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC7B,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAA;IAC1D,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW,CAAC,EAAE,QAAQ,CAAA;IACtB,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC9C,sBAAsB,EAAE,CACtB,IAAI,EAAE,QAAQ,KACX,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,eAAe,GAAG,YAAY,CAAC,CAAA;CAC7E,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,aAAa,4CAW5C,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import { CalendarProps } from '../../Calendar';
2
- export type CalendarDatesProps = Pick<CalendarProps, 'calendarDates' | 'selectedDate' | 'setSelectedDate' | 'fromPrice' | 'getDateTimeButtonProps'>;
3
- export declare const CalendarDates: ({ calendarDates, selectedDate, setSelectedDate, fromPrice, getDateTimeButtonProps, }: CalendarDatesProps) => import("react/jsx-runtime").JSX.Element;
2
+ export type CalendarDatesProps = Pick<CalendarProps, 'calendarDates' | 'selectedDate' | 'setSelectedDate' | 'fromPrice' | 'getDateTimeButtonProps' | 'availabilityFormat'>;
3
+ export declare const CalendarDates: ({ calendarDates, selectedDate, setSelectedDate, fromPrice, availabilityFormat, getDateTimeButtonProps, }: CalendarDatesProps) => import("react/jsx-runtime").JSX.Element;
4
4
  //# sourceMappingURL=CalendarDates.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarDates.d.ts","sourceRoot":"","sources":["../../../../src/calendar/components/CalendarDates/CalendarDates.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,aAAa,EACX,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,WAAW,GACX,wBAAwB,CAC3B,CAAA;AAED,eAAO,MAAM,aAAa,yFAMvB,kBAAkB,4CA4CpB,CAAA"}
1
+ {"version":3,"file":"CalendarDates.d.ts","sourceRoot":"","sources":["../../../../src/calendar/components/CalendarDates/CalendarDates.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,aAAa,EACX,eAAe,GACf,cAAc,GACd,iBAAiB,GACjB,WAAW,GACX,wBAAwB,GACxB,oBAAoB,CACvB,CAAA;AAED,eAAO,MAAM,aAAa,6GAOvB,kBAAkB,4CA6CpB,CAAA"}
@@ -57,7 +57,7 @@ function _unsupported_iterable_to_array(o, minLen) {
57
57
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
58
58
  }
59
59
  var CalendarDates = function(param) {
60
- var calendarDates = param.calendarDates, selectedDate = param.selectedDate, setSelectedDate = param.setSelectedDate, fromPrice = param.fromPrice, getDateTimeButtonProps = param.getDateTimeButtonProps;
60
+ var calendarDates = param.calendarDates, selectedDate = param.selectedDate, setSelectedDate = param.setSelectedDate, fromPrice = param.fromPrice, availabilityFormat = param.availabilityFormat, getDateTimeButtonProps = param.getDateTimeButtonProps;
61
61
  var fillCalendarDates = useMemo(function() {
62
62
  var _calendarDates_;
63
63
  var _calendarDates__weekday;
@@ -90,7 +90,8 @@ var CalendarDates = function(param) {
90
90
  return setSelectedDate(date);
91
91
  },
92
92
  price: fromPrice,
93
- variant: Variant.month
93
+ variant: Variant.month,
94
+ availabilityFormat: availabilityFormat
94
95
  }, props), +date);
95
96
  })
96
97
  })
@@ -1,6 +1,7 @@
1
1
  import { ReactElement } from 'react';
2
2
  import { DateTime } from 'luxon';
3
3
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper';
4
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper';
4
5
  export declare enum Variant {
5
6
  week = "week",
6
7
  month = "month",
@@ -16,6 +17,7 @@ export type DateTimeButtonProps = {
16
17
  resources?: ZoneResourcesAvailability | null;
17
18
  showResources?: boolean;
18
19
  variant: Variant;
20
+ availabilityFormat?: AvailabilityFormat | null;
19
21
  };
20
- export declare const DateTimeButton: ({ date, isDisabled: _isDisabled, isSelected, isSoldOut: _isSoldOut, onSelect, price, resources, showResources, variant, }: DateTimeButtonProps) => import("react/jsx-runtime").JSX.Element;
22
+ export declare const DateTimeButton: ({ date, isDisabled: _isDisabled, isSelected, isSoldOut: _isSoldOut, onSelect, price, resources, showResources, variant, availabilityFormat, }: DateTimeButtonProps) => import("react/jsx-runtime").JSX.Element;
21
23
  //# sourceMappingURL=DateTimeButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateTimeButton.d.ts","sourceRoot":"","sources":["../../src/date-time-button/DateTimeButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAA;AAIpH,oBAAY,OAAO;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,CAAA;IAC7C,SAAS,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,cAAc,8HAUxB,mBAAmB,4CA2CrB,CAAA"}
1
+ {"version":3,"file":"DateTimeButton.d.ts","sourceRoot":"","sources":["../../src/date-time-button/DateTimeButton.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAChC,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAA;AACpH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAA;AAI9F,oBAAY,OAAO;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,CAAA;IAC7C,SAAS,CAAC,EAAE,yBAAyB,GAAG,IAAI,CAAA;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,eAAO,MAAM,cAAc,kJAWxB,mBAAmB,4CA4CrB,CAAA"}
@@ -11,7 +11,7 @@ var Variant;
11
11
  Variant["time"] = "time";
12
12
  })(Variant || (Variant = {}));
13
13
  var DateTimeButton = function(param) {
14
- var date = param.date, _isDisabled = param.isDisabled, isSelected = param.isSelected, _isSoldOut = param.isSoldOut, onSelect = param.onSelect, price = param.price, resources = param.resources, showResources = param.showResources, _param_variant = param.variant, variant = _param_variant === void 0 ? "week" : _param_variant;
14
+ var date = param.date, _isDisabled = param.isDisabled, isSelected = param.isSelected, _isSoldOut = param.isSoldOut, onSelect = param.onSelect, price = param.price, resources = param.resources, showResources = param.showResources, _param_variant = param.variant, variant = _param_variant === void 0 ? "week" : _param_variant, availabilityFormat = param.availabilityFormat;
15
15
  var isSoldOut = _isSoldOut || resources && resources.bookedResources >= resources.totalResources;
16
16
  var isTimeVariant = variant === "time";
17
17
  var isPast = variant === "time" ? isPastTime(date) : isPastDate(date);
@@ -36,6 +36,7 @@ var DateTimeButton = function(param) {
36
36
  children: price
37
37
  }),
38
38
  showResources && resources && /*#__PURE__*/ jsx(AvailabilityIndicator, {
39
+ availabilityFormat: availabilityFormat,
39
40
  resources: resources,
40
41
  isUnavailable: _isDisabled || isPast,
41
42
  isSoldOut: isSoldOut
@@ -1,6 +1,7 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { Image } from '@licklist/core/dist/DataMapper/Media/ImageDataMapper';
3
3
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper';
4
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper';
4
5
  export declare const LAYOUT_GRID = "grid";
5
6
  export declare const LAYOUT_LIST = "list";
6
7
  export type ActivityCardProps = {
@@ -14,6 +15,7 @@ export type ActivityCardProps = {
14
15
  availableTimes?: string | null;
15
16
  image?: Image | null;
16
17
  resources?: ZoneResourcesAvailability;
18
+ availabilityFormat?: AvailabilityFormat | null;
17
19
  };
18
- export declare const ActivityCard: ({ title, duration, price, description, availableTimes, image, onSelect, isSelected, layout, resources, }: ActivityCardProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const ActivityCard: ({ title, duration, price, description, availableTimes, image, onSelect, isSelected, layout, availabilityFormat, resources, }: ActivityCardProps) => import("react/jsx-runtime").JSX.Element;
19
21
  //# sourceMappingURL=ActivityCard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityCard.d.ts","sourceRoot":"","sources":["../../../src/iframe/activity-card/ActivityCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,sDAAsD,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAA;AAGpH,eAAO,MAAM,WAAW,SAAS,CAAA;AACjC,eAAO,MAAM,WAAW,SAAS,CAAA;AAEjC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,WAAW,GAAG,OAAO,WAAW,CAAA;IAChD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,yBAAyB,CAAA;CACtC,CAAA;AAED,eAAO,MAAM,YAAY,6GAWtB,iBAAiB,4CAmDnB,CAAA"}
1
+ {"version":3,"file":"ActivityCard.d.ts","sourceRoot":"","sources":["../../../src/iframe/activity-card/ActivityCard.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,sDAAsD,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0EAA0E,CAAA;AACpH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2DAA2D,CAAA;AAG9F,eAAO,MAAM,WAAW,SAAS,CAAA;AACjC,eAAO,MAAM,WAAW,SAAS,CAAA;AAEjC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,EAAE,SAAS,CAAA;IACnB,KAAK,EAAE,SAAS,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,UAAU,EAAE,OAAO,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,WAAW,GAAG,OAAO,WAAW,CAAA;IAChD,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAA;IACpB,SAAS,CAAC,EAAE,yBAAyB,CAAA;IACrC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC/C,CAAA;AAED,eAAO,MAAM,YAAY,iIAYtB,iBAAiB,4CA6DnB,CAAA"}
@@ -5,7 +5,7 @@ import { AvailabilityIndicator } from '../../availability-indicator/Availability
5
5
  var LAYOUT_GRID = 'grid';
6
6
  var LAYOUT_LIST = 'list';
7
7
  var ActivityCard = function(param) {
8
- var title = param.title, duration = param.duration, price = param.price, description = param.description, availableTimes = param.availableTimes, image = param.image, onSelect = param.onSelect, isSelected = param.isSelected, _param_layout = param.layout, layout = _param_layout === void 0 ? LAYOUT_GRID : _param_layout, resources = param.resources;
8
+ var title = param.title, duration = param.duration, price = param.price, description = param.description, availableTimes = param.availableTimes, image = param.image, onSelect = param.onSelect, isSelected = param.isSelected, _param_layout = param.layout, layout = _param_layout === void 0 ? LAYOUT_GRID : _param_layout, availabilityFormat = param.availabilityFormat, resources = param.resources;
9
9
  if (layout === LAYOUT_GRID) {
10
10
  return /*#__PURE__*/ jsxs("button", {
11
11
  type: "button",
@@ -35,7 +35,8 @@ var ActivityCard = function(param) {
35
35
  children: description
36
36
  }),
37
37
  resources && /*#__PURE__*/ jsx(AvailabilityIndicator, {
38
- resources: resources
38
+ resources: resources,
39
+ availabilityFormat: availabilityFormat
39
40
  })
40
41
  ]
41
42
  })
@@ -74,7 +75,8 @@ var ActivityCard = function(param) {
74
75
  children: description
75
76
  }),
76
77
  resources && /*#__PURE__*/ jsx(AvailabilityIndicator, {
77
- resources: resources
78
+ resources: resources,
79
+ availabilityFormat: availabilityFormat
78
80
  })
79
81
  ]
80
82
  }),
@@ -56,6 +56,7 @@ import 'react-bootstrap/ModalTitle';
56
56
  import 'react-bootstrap/ModalBody';
57
57
  import 'react-bootstrap/Modal';
58
58
  import '../../../iframe/payment/payment-status-page/PaymentStatusPage.js';
59
+ import '@licklist/plugins';
59
60
  import '@licklist/plugins/dist/services/Form/HookFormService';
60
61
  import 'luxon';
61
62
  import '../../../static/manual-date-picker/constants/index.js';
@@ -4,6 +4,15 @@
4
4
  align-items: center;
5
5
  gap: 0.5rem;
6
6
  font-weight: 300;
7
+ width: 100%;
8
+
9
+
10
+ .indicator-label {
11
+ text-overflow: ellipsis;
12
+ white-space: nowrap;
13
+ overflow: hidden;
14
+ flex-shrink: 2;
15
+ }
7
16
 
8
17
  @include media-breakpoint-down(sm) {
9
18
  div {
@@ -79,7 +79,7 @@
79
79
 
80
80
  &.only-time-container {
81
81
  min-width: 5.3rem;
82
- max-width: 5.3rem;
82
+ max-width: 8.3rem;
83
83
  min-height: 2.75rem;
84
84
  border: 2px solid $snippet-calendar-disabled-button-border-color;
85
85
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@licklist/design",
3
- "version": "0.70.0-dev.4",
3
+ "version": "0.70.0-dev.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@bitbucket.org/artelogicsoft/licklist_design.git"
@@ -42,7 +42,7 @@
42
42
  ]
43
43
  },
44
44
  "peerDependencies": {
45
- "@licklist/core": "0.31.0-dev.0",
45
+ "@licklist/core": "0.31.1-dev.2",
46
46
  "@licklist/eslint-config": "0.5.6",
47
47
  "@licklist/plugins": "0.34.0-dev.4",
48
48
  "lodash": "4.17.21",
@@ -61,7 +61,7 @@
61
61
  "@dnd-kit/utilities": "2.0.0",
62
62
  "@fortawesome/fontawesome-svg-core": "1.2.34",
63
63
  "@fortawesome/free-solid-svg-icons": "5.15.2",
64
- "@licklist/core": "0.31.0-dev.0",
64
+ "@licklist/core": "0.31.1-dev.2",
65
65
  "@licklist/eslint-config": "0.5.6",
66
66
  "@licklist/plugins": "0.34.0-dev.4",
67
67
  "@mantine/core": "6.0.22",
@@ -208,4 +208,4 @@
208
208
  "yarn": "4.4.0"
209
209
  },
210
210
  "stableVersion": "0.69.1-dev.3"
211
- }
211
+ }
@@ -1,5 +1,5 @@
1
- <svg width="7" height="11" viewBox="0 0 7 11" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect x="0.943939" y="1.03658" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
3
- <rect x="0.943939" y="4.10976" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
4
- <rect x="0.943939" y="7.18292" width="5.25188" height="3.04878" rx="1.5" fill="#4CF973" stroke="white"/>
1
+ <svg viewBox="auto" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect x="14%" y="0" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
3
+ <rect x="14%" y="33%" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
4
+ <rect x="14%" y="66%" width="63%" height="29%" rx="15%" fill="#4CF973" stroke="white"/>
5
5
  </svg>
@@ -1,9 +1,15 @@
1
1
  import { FunctionComponent, SVGProps } from 'react'
2
2
  import { useTranslation } from 'react-i18next'
3
3
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper'
4
+ import {
5
+ AVAILABILITY_FORMAT_NUMBER,
6
+ AvailabilityFormat,
7
+ } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
8
+ import { useWindowDimensions } from '@licklist/plugins'
4
9
  import { ReactComponent as AvailableIcon } from '../assets/iframe/available.svg'
5
10
  import { ReactComponent as LimitedIcon } from '../assets/iframe/limited.svg'
6
11
  import { ReactComponent as SoldOutIcon } from '../assets/iframe/soldOut.svg'
12
+ import { TAB_WIDTH } from '../iframe/page/components/PageBody/constants'
7
13
 
8
14
  const LOTS_OF_SPACE_LIMIT = 0.2
9
15
  const LIMITED_LIMIT = 0.8
@@ -13,38 +19,94 @@ type Config = {
13
19
  Icon: FunctionComponent<SVGProps<SVGSVGElement>>
14
20
  }
15
21
 
16
- const getIconsAndLabels = ({
22
+ type GetIconsAndLabelsWithArgumentResult = Config & {
23
+ argument?: number
24
+ }
25
+
26
+ interface GetIconsAndLabels extends ZoneResourcesAvailability {
27
+ availabilityFormat?: AvailabilityFormat | null
28
+ }
29
+ interface GetAppropreateLabelFormat extends GetIconsAndLabels {
30
+ label?: string
31
+ }
32
+
33
+ const getLabelsWithArgument = ({
17
34
  bookedResources,
18
35
  totalResources,
19
- }: ZoneResourcesAvailability): Config => {
20
- if (bookedResources === totalResources) {
21
- return { label: 'soldOut', Icon: SoldOutIcon }
36
+ availabilityFormat,
37
+ label,
38
+ }: GetAppropreateLabelFormat): {
39
+ label: string
40
+ argument?: number
41
+ } => {
42
+ const availableResources = totalResources - bookedResources
43
+
44
+ if (availabilityFormat !== AVAILABILITY_FORMAT_NUMBER) {
45
+ return { label }
22
46
  }
23
47
 
48
+ return availableResources === 1
49
+ ? { label: 'availableSingleResource' }
50
+ : { label: 'availableMultipleResources', argument: availableResources }
51
+ }
52
+
53
+ const getIconsAndLabelsWithArgument = ({
54
+ bookedResources,
55
+ totalResources,
56
+ availabilityFormat,
57
+ }: GetIconsAndLabels): GetIconsAndLabelsWithArgumentResult => {
24
58
  // lots of space if less than 80% booked
25
59
  if (bookedResources / totalResources <= LOTS_OF_SPACE_LIMIT) {
26
- return { label: 'lotsOfSpace', Icon: AvailableIcon }
60
+ return {
61
+ ...getLabelsWithArgument({
62
+ bookedResources,
63
+ totalResources,
64
+ availabilityFormat,
65
+ label: 'lotsOfSpace',
66
+ }),
67
+ Icon: AvailableIcon,
68
+ }
27
69
  }
28
70
 
29
71
  if (bookedResources / totalResources >= LIMITED_LIMIT) {
30
- return { label: 'limited', Icon: LimitedIcon }
72
+ return {
73
+ ...getLabelsWithArgument({
74
+ bookedResources,
75
+ totalResources,
76
+ availabilityFormat,
77
+ label: 'limited',
78
+ }),
79
+ Icon: LimitedIcon,
80
+ }
31
81
  }
32
82
 
33
- return { label: 'available', Icon: AvailableIcon }
83
+ return {
84
+ ...getLabelsWithArgument({
85
+ bookedResources,
86
+ totalResources,
87
+ availabilityFormat,
88
+ label: 'available',
89
+ }),
90
+ Icon: AvailableIcon,
91
+ }
34
92
  }
35
93
 
36
94
  type AvailabilityIndicatorProps = {
37
95
  resources: ZoneResourcesAvailability
38
96
  isUnavailable?: boolean
39
97
  isSoldOut?: boolean
98
+ availabilityFormat?: AvailabilityFormat | null
40
99
  }
41
100
 
42
101
  export const AvailabilityIndicator = ({
43
102
  resources,
44
103
  isUnavailable,
45
- isSoldOut,
104
+ isSoldOut: _isSoldOut,
105
+ availabilityFormat,
46
106
  }: AvailabilityIndicatorProps) => {
47
107
  const { t } = useTranslation('Design')
108
+ const isSoldOut =
109
+ _isSoldOut || resources.bookedResources === resources.totalResources
48
110
 
49
111
  if (isUnavailable) {
50
112
  return <Indicator Icon={SoldOutIcon} label={t('notAvailable')} />
@@ -54,14 +116,27 @@ export const AvailabilityIndicator = ({
54
116
  return <Indicator Icon={SoldOutIcon} label={t('soldOut')} />
55
117
  }
56
118
 
57
- const { Icon, label } = getIconsAndLabels(resources)
119
+ const { Icon, label, argument } = getIconsAndLabelsWithArgument({
120
+ ...resources,
121
+ availabilityFormat,
122
+ })
58
123
 
59
- return <Indicator Icon={Icon} label={t(label)} />
124
+ return (
125
+ <Indicator
126
+ Icon={Icon}
127
+ label={t(label, argument ? { argument } : undefined)}
128
+ />
129
+ )
60
130
  }
61
131
 
62
- const Indicator = ({ Icon, label }: Config) => (
63
- <div className='availability-indicator'>
64
- <Icon />
65
- <div>{label}</div>
66
- </div>
67
- )
132
+ const Indicator = ({ Icon, label }: Config) => {
133
+ const { width } = useWindowDimensions()
134
+ const iconSizes =
135
+ width > TAB_WIDTH ? { height: 15, width: 11 } : { height: 11, width: 7 }
136
+ return (
137
+ <div className='availability-indicator'>
138
+ <Icon height={iconSizes.height} width={iconSizes.width} viewBox='auto' />
139
+ <div className='indicator-label'>{label}</div>
140
+ </div>
141
+ )
142
+ }
@@ -1,5 +1,6 @@
1
1
  import { Dispatch, ReactElement, SetStateAction } from 'react'
2
2
  import { DateTime } from 'luxon'
3
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
3
4
  import { DateTimeButtonProps } from 'src/date-time-button'
4
5
  import { CalendarButtons } from './components/CalendarButtons'
5
6
  import { CalendarDates } from './components/CalendarDates'
@@ -21,6 +22,7 @@ export type CalendarProps = {
21
22
  fromPrice?: string | ReactElement | null
22
23
  isLoading?: boolean
23
24
  initialDate?: DateTime
25
+ availabilityFormat?: AvailabilityFormat | null
24
26
  getDateTimeButtonProps: (
25
27
  date: DateTime,
26
28
  ) => Pick<DateTimeButtonProps, 'resources' | 'showResources' | 'isDisabled'>
@@ -11,6 +11,7 @@ export type CalendarDatesProps = Pick<
11
11
  | 'setSelectedDate'
12
12
  | 'fromPrice'
13
13
  | 'getDateTimeButtonProps'
14
+ | 'availabilityFormat'
14
15
  >
15
16
 
16
17
  export const CalendarDates = ({
@@ -18,6 +19,7 @@ export const CalendarDates = ({
18
19
  selectedDate,
19
20
  setSelectedDate,
20
21
  fromPrice,
22
+ availabilityFormat,
21
23
  getDateTimeButtonProps,
22
24
  }: CalendarDatesProps) => {
23
25
  const fillCalendarDates = useMemo(() => {
@@ -56,6 +58,7 @@ export const CalendarDates = ({
56
58
  onSelect={() => setSelectedDate(date)}
57
59
  price={fromPrice}
58
60
  variant={Variant.month}
61
+ availabilityFormat={availabilityFormat}
59
62
  {...props}
60
63
  />
61
64
  )
@@ -2,6 +2,7 @@ import { ReactElement } from 'react'
2
2
  import clsx from 'clsx'
3
3
  import { DateTime } from 'luxon'
4
4
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper'
5
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
5
6
  import { AvailabilityIndicator } from '../availability-indicator'
6
7
  import { DateContent } from './DateContent'
7
8
 
@@ -21,6 +22,7 @@ export type DateTimeButtonProps = {
21
22
  resources?: ZoneResourcesAvailability | null
22
23
  showResources?: boolean
23
24
  variant: Variant
25
+ availabilityFormat?: AvailabilityFormat | null
24
26
  }
25
27
 
26
28
  export const DateTimeButton = ({
@@ -33,6 +35,7 @@ export const DateTimeButton = ({
33
35
  resources,
34
36
  showResources,
35
37
  variant = Variant.week,
38
+ availabilityFormat,
36
39
  }: DateTimeButtonProps) => {
37
40
  const isSoldOut =
38
41
  _isSoldOut ||
@@ -69,6 +72,7 @@ export const DateTimeButton = ({
69
72
  {price && !isDisabled && <div className='price'>{price}</div>}
70
73
  {showResources && resources && (
71
74
  <AvailabilityIndicator
75
+ availabilityFormat={availabilityFormat}
72
76
  resources={resources}
73
77
  isUnavailable={_isDisabled || isPast}
74
78
  isSoldOut={isSoldOut}
@@ -2,6 +2,7 @@ import { ReactNode } from 'react'
2
2
  import clsx from 'clsx'
3
3
  import { Image } from '@licklist/core/dist/DataMapper/Media/ImageDataMapper'
4
4
  import { ZoneResourcesAvailability } from '@licklist/core/dist/DataMapper/Order/ZoneResourcesAvailabilityDataMapper'
5
+ import { AvailabilityFormat } from '@licklist/core/dist/DataMapper/Provider/SnippetDataMapper'
5
6
  import { AvailabilityIndicator } from '../../availability-indicator'
6
7
 
7
8
  export const LAYOUT_GRID = 'grid'
@@ -18,6 +19,7 @@ export type ActivityCardProps = {
18
19
  availableTimes?: string | null
19
20
  image?: Image | null
20
21
  resources?: ZoneResourcesAvailability
22
+ availabilityFormat?: AvailabilityFormat | null
21
23
  }
22
24
 
23
25
  export const ActivityCard = ({
@@ -30,6 +32,7 @@ export const ActivityCard = ({
30
32
  onSelect,
31
33
  isSelected,
32
34
  layout = LAYOUT_GRID,
35
+ availabilityFormat,
33
36
  resources,
34
37
  }: ActivityCardProps) => {
35
38
  if (layout === LAYOUT_GRID) {
@@ -50,7 +53,12 @@ export const ActivityCard = ({
50
53
  {description && (
51
54
  <div className='mt-2 activity-card-description'>{description}</div>
52
55
  )}
53
- {resources && <AvailabilityIndicator resources={resources} />}
56
+ {resources && (
57
+ <AvailabilityIndicator
58
+ resources={resources}
59
+ availabilityFormat={availabilityFormat}
60
+ />
61
+ )}
54
62
  </div>
55
63
  </button>
56
64
  )
@@ -76,7 +84,12 @@ export const ActivityCard = ({
76
84
  {description && (
77
85
  <div className='mt-2 activity-card-description'>{description}</div>
78
86
  )}
79
- {resources && <AvailabilityIndicator resources={resources} />}
87
+ {resources && (
88
+ <AvailabilityIndicator
89
+ resources={resources}
90
+ availabilityFormat={availabilityFormat}
91
+ />
92
+ )}
80
93
  </div>
81
94
 
82
95
  <hr className='list-activity-card-hr' />
@@ -4,6 +4,15 @@
4
4
  align-items: center;
5
5
  gap: 0.5rem;
6
6
  font-weight: 300;
7
+ width: 100%;
8
+
9
+
10
+ .indicator-label {
11
+ text-overflow: ellipsis;
12
+ white-space: nowrap;
13
+ overflow: hidden;
14
+ flex-shrink: 2;
15
+ }
7
16
 
8
17
  @include media-breakpoint-down(sm) {
9
18
  div {
@@ -79,7 +79,7 @@
79
79
 
80
80
  &.only-time-container {
81
81
  min-width: 5.3rem;
82
- max-width: 5.3rem;
82
+ max-width: 8.3rem;
83
83
  min-height: 2.75rem;
84
84
  border: 2px solid $snippet-calendar-disabled-button-border-color;
85
85
  }
package/yarn.lock CHANGED
@@ -2466,9 +2466,9 @@ __metadata:
2466
2466
  languageName: node
2467
2467
  linkType: hard
2468
2468
 
2469
- "@licklist/core@npm:0.31.0-dev.0":
2470
- version: 0.31.0-dev.0
2471
- resolution: "@licklist/core@npm:0.31.0-dev.0"
2469
+ "@licklist/core@npm:0.31.0-dev.2":
2470
+ version: 0.31.0-dev.2
2471
+ resolution: "@licklist/core@npm:0.31.0-dev.2"
2472
2472
  dependencies:
2473
2473
  "@sentry/browser": "npm:6.2.0"
2474
2474
  axios: "npm:0.26.0"
@@ -2490,13 +2490,13 @@ __metadata:
2490
2490
  react-i18next: 11.8.8
2491
2491
  react-intl: 6.6.8
2492
2492
  zustand: 3.7.2
2493
- checksum: 10c0/db5c0810a9837b67b9a410ed8232dfcef258242faf9b0ddb1a0ed7435c2bd4c23076882b569eec48dcd76fb6dcb73f20eae62eef35b75b466c87d932c3ff1d69
2493
+ checksum: 10c0/fcefd4631fbf3d116a36833b748fc9b557cae8b580acae4c1bd7d29f1665a42456b1109a3f80620f6f7244161f8260d6243680ff739a2a544221e1b7e4a01e57
2494
2494
  languageName: node
2495
2495
  linkType: hard
2496
2496
 
2497
- "@licklist/core@npm:0.31.0-dev.2":
2498
- version: 0.31.0-dev.2
2499
- resolution: "@licklist/core@npm:0.31.0-dev.2"
2497
+ "@licklist/core@npm:0.31.1-dev.2":
2498
+ version: 0.31.1-dev.2
2499
+ resolution: "@licklist/core@npm:0.31.1-dev.2"
2500
2500
  dependencies:
2501
2501
  "@sentry/browser": "npm:6.2.0"
2502
2502
  axios: "npm:0.26.0"
@@ -2518,7 +2518,7 @@ __metadata:
2518
2518
  react-i18next: 11.8.8
2519
2519
  react-intl: 6.6.8
2520
2520
  zustand: 3.7.2
2521
- checksum: 10c0/fcefd4631fbf3d116a36833b748fc9b557cae8b580acae4c1bd7d29f1665a42456b1109a3f80620f6f7244161f8260d6243680ff739a2a544221e1b7e4a01e57
2521
+ checksum: 10c0/8ee0e6a248dac589063eb9ebe11acb6df3b9af48a86568678b1ae78b528655e889d94e64050f9a0892e2a4df2f941660c040861a3bcbf24196c219bf56f0999f
2522
2522
  languageName: node
2523
2523
  linkType: hard
2524
2524
 
@@ -2533,7 +2533,7 @@ __metadata:
2533
2533
  "@dnd-kit/utilities": "npm:2.0.0"
2534
2534
  "@fortawesome/fontawesome-svg-core": "npm:1.2.34"
2535
2535
  "@fortawesome/free-solid-svg-icons": "npm:5.15.2"
2536
- "@licklist/core": "npm:0.31.0-dev.0"
2536
+ "@licklist/core": "npm:0.31.1-dev.2"
2537
2537
  "@licklist/eslint-config": "npm:0.5.6"
2538
2538
  "@licklist/plugins": "npm:0.34.0-dev.4"
2539
2539
  "@mantine/core": "npm:6.0.22"
@@ -2664,7 +2664,7 @@ __metadata:
2664
2664
  vite-plugin-svgr: "npm:4.2.0"
2665
2665
  vite-tsconfig-paths: "npm:5.0.1"
2666
2666
  peerDependencies:
2667
- "@licklist/core": 0.31.0-dev.0
2667
+ "@licklist/core": 0.31.1-dev.2
2668
2668
  "@licklist/eslint-config": 0.5.6
2669
2669
  "@licklist/plugins": 0.34.0-dev.4
2670
2670
  lodash: 4.17.21
@@ -5698,11 +5698,11 @@ __metadata:
5698
5698
  linkType: hard
5699
5699
 
5700
5700
  "@types/node@npm:*":
5701
- version: 22.8.1
5702
- resolution: "@types/node@npm:22.8.1"
5701
+ version: 22.8.2
5702
+ resolution: "@types/node@npm:22.8.2"
5703
5703
  dependencies:
5704
5704
  undici-types: "npm:~6.19.8"
5705
- checksum: 10c0/83550fdf72a7db5b55eceac3f4fb038844eaee20202bdd2297a8248370cfa08317bda1605b781a8043eda4f173b75e73632e652fc85509eb14dfef78fa17337f
5705
+ checksum: 10c0/c6fa6c54c23e61015cace1517c4101602cae0ff3c4f6604f6cdb89875143921830e5602cabe8b4f90f90363451687a0497f1d07d30be8104fee758d6d44c90ac
5706
5706
  languageName: node
5707
5707
  linkType: hard
5708
5708
 
@@ -8080,9 +8080,9 @@ __metadata:
8080
8080
  linkType: hard
8081
8081
 
8082
8082
  "caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001125, caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001669":
8083
- version: 1.0.30001673
8084
- resolution: "caniuse-lite@npm:1.0.30001673"
8085
- checksum: 10c0/0e73a2b0f06973052e563dec9990a6fd440d510fa2ff54fa50310e736abb86e96c96b43c10e609fc22f2109f98fe76428b70441baf6b1a49f69ccf50c1879f6b
8083
+ version: 1.0.30001674
8084
+ resolution: "caniuse-lite@npm:1.0.30001674"
8085
+ checksum: 10c0/6ec4170fb5274f074fdfa6f372c40245fe94f5984df705ddc133c55f2c662eb4af5a4900441a24ef7e4f31e1dac338b7af4ce7a304ffc432958331c953e3f45f
8086
8086
  languageName: node
8087
8087
  linkType: hard
8088
8088
 
@@ -9840,9 +9840,9 @@ __metadata:
9840
9840
  linkType: hard
9841
9841
 
9842
9842
  "electron-to-chromium@npm:^1.3.564, electron-to-chromium@npm:^1.5.41":
9843
- version: 1.5.47
9844
- resolution: "electron-to-chromium@npm:1.5.47"
9845
- checksum: 10c0/5f8c4a9f0698695960f7bef5242d52b1043020ce50b51fb534409a768847f9bdc9672cb4a6a560eeb8f8b47a04327ae9b31b2cee376cb637b3eb04a4daeaa3b8
9843
+ version: 1.5.49
9844
+ resolution: "electron-to-chromium@npm:1.5.49"
9845
+ checksum: 10c0/7b22141c7ebea2f49b87adcbe2b353919abbe44066c50e5e44dd47759c4ef07f0a802b9fc8ce2eaa832a293945b6d49064c859f0fef36d10c12fb46af2c1005d
9846
9846
  languageName: node
9847
9847
  linkType: hard
9848
9848