@sneat/extensions-schedulus-shared 0.3.0

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 (194) hide show
  1. package/esm2022/index.js +2 -0
  2. package/esm2022/index.js.map +1 -0
  3. package/esm2022/lib/components/calendar/calendar-base.component.js +83 -0
  4. package/esm2022/lib/components/calendar/calendar-base.component.js.map +1 -0
  5. package/esm2022/lib/components/calendar/calendar-brief.component.js +57 -0
  6. package/esm2022/lib/components/calendar/calendar-brief.component.js.map +1 -0
  7. package/esm2022/lib/components/calendar/calendar-component-types.js +2 -0
  8. package/esm2022/lib/components/calendar/calendar-component-types.js.map +1 -0
  9. package/esm2022/lib/components/calendar/calendar-state.service.js +90 -0
  10. package/esm2022/lib/components/calendar/calendar-state.service.js.map +1 -0
  11. package/esm2022/lib/components/calendar/calendar.component.js +284 -0
  12. package/esm2022/lib/components/calendar/calendar.component.js.map +1 -0
  13. package/esm2022/lib/components/calendar/components/calendar-add-buttons/calendar-add-buttons.component.js +45 -0
  14. package/esm2022/lib/components/calendar/components/calendar-add-buttons/calendar-add-buttons.component.js.map +1 -0
  15. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-base.component.js +26 -0
  16. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-base.component.js.map +1 -0
  17. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-card.component.js +67 -0
  18. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-card.component.js.map +1 -0
  19. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-tab.component.js +74 -0
  20. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-tab.component.js.map +1 -0
  21. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-title.component.js +27 -0
  22. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day-title.component.js.map +1 -0
  23. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day.component.js +129 -0
  24. package/esm2022/lib/components/calendar/components/calendar-day/calendar-day.component.js.map +1 -0
  25. package/esm2022/lib/components/calendar/components/calendar-filter/calendar-filter.component.js +162 -0
  26. package/esm2022/lib/components/calendar/components/calendar-filter/calendar-filter.component.js.map +1 -0
  27. package/esm2022/lib/components/calendar/components/calendar-filter/calendar-filter.js +17 -0
  28. package/esm2022/lib/components/calendar/components/calendar-filter/calendar-filter.js.map +1 -0
  29. package/esm2022/lib/components/calendar/components/calendar-filter/contacts-filter.component.js +95 -0
  30. package/esm2022/lib/components/calendar/components/calendar-filter/contacts-filter.component.js.map +1 -0
  31. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week-card.component.js +50 -0
  32. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week-card.component.js.map +1 -0
  33. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week-tab.component.js +18 -0
  34. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week-tab.component.js.map +1 -0
  35. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week-title.component.js +15 -0
  36. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week-title.component.js.map +1 -0
  37. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week.component.js +78 -0
  38. package/esm2022/lib/components/calendar/components/calendar-week/calendar-week.component.js.map +1 -0
  39. package/esm2022/lib/components/calendar/components/calendar-weekday/calendar-weekday.component.js +66 -0
  40. package/esm2022/lib/components/calendar/components/calendar-weekday/calendar-weekday.component.js.map +1 -0
  41. package/esm2022/lib/components/calendar/components/day-slot-item/day-slot-item.component.js +93 -0
  42. package/esm2022/lib/components/calendar/components/day-slot-item/day-slot-item.component.js.map +1 -0
  43. package/esm2022/lib/components/calendar/components/day-slot-item/slot-context-menu.component.js +324 -0
  44. package/esm2022/lib/components/calendar/components/day-slot-item/slot-context-menu.component.js.map +1 -0
  45. package/esm2022/lib/components/calendar/components/recurrings-tab/recurrings-tab.component.js +36 -0
  46. package/esm2022/lib/components/calendar/components/recurrings-tab/recurrings-tab.component.js.map +1 -0
  47. package/esm2022/lib/components/calendar/components/singles-tab/single-happenings-list.component.js +65 -0
  48. package/esm2022/lib/components/calendar/components/singles-tab/single-happenings-list.component.js.map +1 -0
  49. package/esm2022/lib/components/calendar/components/singles-tab/singles-tab.component.js +106 -0
  50. package/esm2022/lib/components/calendar/components/singles-tab/singles-tab.component.js.map +1 -0
  51. package/esm2022/lib/components/calendar/components/timing-badge/timing-badge.component.js +25 -0
  52. package/esm2022/lib/components/calendar/components/timing-badge/timing-badge.component.js.map +1 -0
  53. package/esm2022/lib/components/calendar/weekday.js +2 -0
  54. package/esm2022/lib/components/calendar/weekday.js.map +1 -0
  55. package/esm2022/lib/components/calendar-core.js +64 -0
  56. package/esm2022/lib/components/calendar-core.js.map +1 -0
  57. package/esm2022/lib/components/calendar-filter.service.js +28 -0
  58. package/esm2022/lib/components/calendar-filter.service.js.map +1 -0
  59. package/esm2022/lib/components/calendar-slots.js +30 -0
  60. package/esm2022/lib/components/calendar-slots.js.map +1 -0
  61. package/esm2022/lib/components/happening-base.component.js +188 -0
  62. package/esm2022/lib/components/happening-base.component.js.map +1 -0
  63. package/esm2022/lib/components/happening-card/happening-card.component.js +69 -0
  64. package/esm2022/lib/components/happening-card/happening-card.component.js.map +1 -0
  65. package/esm2022/lib/components/happening-component-base-params.js +37 -0
  66. package/esm2022/lib/components/happening-component-base-params.js.map +1 -0
  67. package/esm2022/lib/components/happening-form/happening-form.component.js +348 -0
  68. package/esm2022/lib/components/happening-form/happening-form.component.js.map +1 -0
  69. package/esm2022/lib/components/happening-form/happening-price-form/happening-price-modal.component.js +161 -0
  70. package/esm2022/lib/components/happening-form/happening-price-form/happening-price-modal.component.js.map +1 -0
  71. package/esm2022/lib/components/happening-form/happening-prices/happening-prices.component.js +142 -0
  72. package/esm2022/lib/components/happening-form/happening-prices/happening-prices.component.js.map +1 -0
  73. package/esm2022/lib/components/happening-participants/happening-participants.component.js +195 -0
  74. package/esm2022/lib/components/happening-participants/happening-participants.component.js.map +1 -0
  75. package/esm2022/lib/components/happening-slot-form/happening-slot-form.component.js +505 -0
  76. package/esm2022/lib/components/happening-slot-form/happening-slot-form.component.js.map +1 -0
  77. package/esm2022/lib/components/happening-slot-form/happening-slot-modal.component.js +140 -0
  78. package/esm2022/lib/components/happening-slot-form/happening-slot-modal.component.js.map +1 -0
  79. package/esm2022/lib/components/happening-slot-form/happening-slot-modal.service.js +47 -0
  80. package/esm2022/lib/components/happening-slot-form/happening-slot-modal.service.js.map +1 -0
  81. package/esm2022/lib/components/happening-slot-participants/happening-slot-participants.component.js +74 -0
  82. package/esm2022/lib/components/happening-slot-participants/happening-slot-participants.component.js.map +1 -0
  83. package/esm2022/lib/components/happening-slots/happening-slots.component.js +130 -0
  84. package/esm2022/lib/components/happening-slots/happening-slots.component.js.map +1 -0
  85. package/esm2022/lib/components/index.js +20 -0
  86. package/esm2022/lib/components/index.js.map +1 -0
  87. package/esm2022/lib/components/start-end-dates-range-form/start-end-dates-range-form.component.js +68 -0
  88. package/esm2022/lib/components/start-end-dates-range-form/start-end-dates-range-form.component.js.map +1 -0
  89. package/esm2022/lib/components/start-end-datetime-form/start-end-datetime-form.component.js +377 -0
  90. package/esm2022/lib/components/start-end-datetime-form/start-end-datetime-form.component.js.map +1 -0
  91. package/esm2022/lib/components/start-end-datetime-form/time-selector.component.js +92 -0
  92. package/esm2022/lib/components/start-end-datetime-form/time-selector.component.js.map +1 -0
  93. package/esm2022/lib/components/swipeable-base.component.js +112 -0
  94. package/esm2022/lib/components/swipeable-base.component.js.map +1 -0
  95. package/esm2022/lib/components/swipeable-ui.js +64 -0
  96. package/esm2022/lib/components/swipeable-ui.js.map +1 -0
  97. package/esm2022/lib/components/week.js +2 -0
  98. package/esm2022/lib/components/week.js.map +1 -0
  99. package/esm2022/lib/components/weekday-functions.js +13 -0
  100. package/esm2022/lib/components/weekday-functions.js.map +1 -0
  101. package/esm2022/lib/components/weekdays/weekdays-form-base.js +72 -0
  102. package/esm2022/lib/components/weekdays/weekdays-form-base.js.map +1 -0
  103. package/esm2022/lib/index.js +3 -0
  104. package/esm2022/lib/index.js.map +1 -0
  105. package/esm2022/lib/modals/happening-title-modal/happening-title-modal.component.js +87 -0
  106. package/esm2022/lib/modals/happening-title-modal/happening-title-modal.component.js.map +1 -0
  107. package/esm2022/lib/services/calendar-data-provider.js +271 -0
  108. package/esm2022/lib/services/calendar-data-provider.js.map +1 -0
  109. package/esm2022/lib/services/calendar-day.js +179 -0
  110. package/esm2022/lib/services/calendar-day.js.map +1 -0
  111. package/esm2022/lib/services/calendar-day.service.js +37 -0
  112. package/esm2022/lib/services/calendar-day.service.js.map +1 -0
  113. package/esm2022/lib/services/calendar-nav.service.js +36 -0
  114. package/esm2022/lib/services/calendar-nav.service.js.map +1 -0
  115. package/esm2022/lib/services/calendar-space.js +152 -0
  116. package/esm2022/lib/services/calendar-space.js.map +1 -0
  117. package/esm2022/lib/services/calendar-types.js +52 -0
  118. package/esm2022/lib/services/calendar-types.js.map +1 -0
  119. package/esm2022/lib/services/calendarium-services.module.js +16 -0
  120. package/esm2022/lib/services/calendarium-services.module.js.map +1 -0
  121. package/esm2022/lib/services/calendarium-space.service.js +16 -0
  122. package/esm2022/lib/services/calendarium-space.service.js.map +1 -0
  123. package/esm2022/lib/services/happening.service.js +225 -0
  124. package/esm2022/lib/services/happening.service.js.map +1 -0
  125. package/esm2022/lib/services/index.js +6 -0
  126. package/esm2022/lib/services/index.js.map +1 -0
  127. package/esm2022/sneat-extensions-schedulus-shared.js +5 -0
  128. package/esm2022/sneat-extensions-schedulus-shared.js.map +1 -0
  129. package/index.d.ts +1 -0
  130. package/lib/components/calendar/calendar-base.component.d.ts +23 -0
  131. package/lib/components/calendar/calendar-brief.component.d.ts +11 -0
  132. package/lib/components/calendar/calendar-component-types.d.ts +1 -0
  133. package/lib/components/calendar/calendar-state.service.d.ts +15 -0
  134. package/lib/components/calendar/calendar.component.d.ts +32 -0
  135. package/lib/components/calendar/components/calendar-add-buttons/calendar-add-buttons.component.d.ts +13 -0
  136. package/lib/components/calendar/components/calendar-day/calendar-day-base.component.d.ts +10 -0
  137. package/lib/components/calendar/components/calendar-day/calendar-day-card.component.d.ts +17 -0
  138. package/lib/components/calendar/components/calendar-day/calendar-day-tab.component.d.ts +19 -0
  139. package/lib/components/calendar/components/calendar-day/calendar-day-title.component.d.ts +10 -0
  140. package/lib/components/calendar/components/calendar-day/calendar-day.component.d.ts +30 -0
  141. package/lib/components/calendar/components/calendar-filter/calendar-filter.component.d.ts +39 -0
  142. package/lib/components/calendar/components/calendar-filter/calendar-filter.d.ts +10 -0
  143. package/lib/components/calendar/components/calendar-filter/contacts-filter.component.d.ts +20 -0
  144. package/lib/components/calendar/components/calendar-week/calendar-week-card.component.d.ts +15 -0
  145. package/lib/components/calendar/components/calendar-week/calendar-week-tab.component.d.ts +9 -0
  146. package/lib/components/calendar/components/calendar-week/calendar-week-title.component.d.ts +7 -0
  147. package/lib/components/calendar/components/calendar-week/calendar-week.component.d.ts +20 -0
  148. package/lib/components/calendar/components/calendar-weekday/calendar-weekday.component.d.ts +23 -0
  149. package/lib/components/calendar/components/day-slot-item/day-slot-item.component.d.ts +19 -0
  150. package/lib/components/calendar/components/day-slot-item/slot-context-menu.component.d.ts +40 -0
  151. package/lib/components/calendar/components/recurrings-tab/recurrings-tab.component.d.ts +15 -0
  152. package/lib/components/calendar/components/singles-tab/single-happenings-list.component.d.ts +22 -0
  153. package/lib/components/calendar/components/singles-tab/singles-tab.component.d.ts +29 -0
  154. package/lib/components/calendar/components/timing-badge/timing-badge.component.d.ts +17 -0
  155. package/lib/components/calendar/weekday.d.ts +7 -0
  156. package/lib/components/calendar-core.d.ts +10 -0
  157. package/lib/components/calendar-filter.service.d.ts +8 -0
  158. package/lib/components/calendar-slots.d.ts +5 -0
  159. package/lib/components/happening-base.component.d.ts +46 -0
  160. package/lib/components/happening-card/happening-card.component.d.ts +11 -0
  161. package/lib/components/happening-component-base-params.d.ts +16 -0
  162. package/lib/components/happening-form/happening-form.component.d.ts +52 -0
  163. package/lib/components/happening-form/happening-price-form/happening-price-modal.component.d.ts +29 -0
  164. package/lib/components/happening-form/happening-prices/happening-prices.component.d.ts +16 -0
  165. package/lib/components/happening-participants/happening-participants.component.d.ts +24 -0
  166. package/lib/components/happening-slot-form/happening-slot-form.component.d.ts +76 -0
  167. package/lib/components/happening-slot-form/happening-slot-modal.component.d.ts +26 -0
  168. package/lib/components/happening-slot-form/happening-slot-modal.service.d.ts +18 -0
  169. package/lib/components/happening-slot-participants/happening-slot-participants.component.d.ts +19 -0
  170. package/lib/components/happening-slots/happening-slots.component.d.ts +28 -0
  171. package/lib/components/index.d.ts +5 -0
  172. package/lib/components/start-end-dates-range-form/start-end-dates-range-form.component.d.ts +16 -0
  173. package/lib/components/start-end-datetime-form/start-end-datetime-form.component.d.ts +53 -0
  174. package/lib/components/start-end-datetime-form/time-selector.component.d.ts +15 -0
  175. package/lib/components/swipeable-base.component.d.ts +25 -0
  176. package/lib/components/swipeable-ui.d.ts +24 -0
  177. package/lib/components/week.d.ts +4 -0
  178. package/lib/components/weekday-functions.d.ts +3 -0
  179. package/lib/components/weekdays/weekdays-form-base.d.ts +31 -0
  180. package/lib/index.d.ts +2 -0
  181. package/lib/modals/happening-title-modal/happening-title-modal.component.d.ts +24 -0
  182. package/lib/services/calendar-data-provider.d.ts +33 -0
  183. package/lib/services/calendar-day.d.ts +45 -0
  184. package/lib/services/calendar-day.service.d.ts +18 -0
  185. package/lib/services/calendar-nav.service.d.ts +14 -0
  186. package/lib/services/calendar-space.d.ts +23 -0
  187. package/lib/services/calendar-types.d.ts +10 -0
  188. package/lib/services/calendarium-services.module.d.ts +6 -0
  189. package/lib/services/calendarium-space.service.d.ts +8 -0
  190. package/lib/services/happening.service.d.ts +99 -0
  191. package/lib/services/index.d.ts +5 -0
  192. package/package.json +26 -0
  193. package/sneat-extensions-schedulus-shared.d.ts +5 -0
  194. package/tsconfig.lib.prod.tsbuildinfo +1 -0
@@ -0,0 +1,78 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, input, Output, signal, } from '@angular/core';
2
+ import { dateToIso } from '@sneat/core';
3
+ import { createWeekdays } from '../../../calendar-core';
4
+ import { CalendarWeekdayComponent } from '../calendar-weekday/calendar-weekday.component';
5
+ import * as i0 from "@angular/core";
6
+ export class CalendarWeekComponent {
7
+ constructor() {
8
+ this.$space = input.required(...(ngDevMode ? [{ debugName: "$space" }] : []));
9
+ this.$week = input.required(...(ngDevMode ? [{ debugName: "$week" }] : []));
10
+ this.$spaceDaysProvider = input.required(...(ngDevMode ? [{ debugName: "$spaceDaysProvider" }] : []));
11
+ // @Input() filter?: ICalendarFilter;
12
+ this.goNew = new EventEmitter();
13
+ this.dateSelected = new EventEmitter();
14
+ /* Having trouble to make it computed due to:
15
+ ERROR RuntimeError: NG0602: effect() cannot be called from within a reactive context. Call `effect` outside of a reactive context. For example, schedule the effect inside the component constructor. Find more at https://angular.dev/errors/NG0602
16
+ at assertNotInReactiveContext (core.mjs:8451:15)
17
+ at effect (core.mjs:39579:9)
18
+ at calendar-day.ts:101:27
19
+ at runInInjectionContext (core.mjs:2467:16)
20
+ at new CalendarDay (calendar-day.ts:100:24)
21
+ at CalendarDataProvider.getCalendarDay (calendar-data-provider.ts:182:10)
22
+ at calendar-week.component.ts:54:28
23
+ at Array.map (<anonymous>)
24
+ at Object.computation (calendar-week.component.ts:50:19)
25
+ */
26
+ this.$weekdays = signal(createWeekdays(), ...(ngDevMode ? [{ debugName: "$weekdays" }] : []));
27
+ }
28
+ ngOnChanges(changes) {
29
+ if (changes['$week']) {
30
+ this.onWeekInputChanged(changes['$week']);
31
+ }
32
+ if (changes['$spaceDaysProvider']) {
33
+ this.onSpaceChanged();
34
+ }
35
+ }
36
+ onSpaceChanged() {
37
+ const week = this.$week();
38
+ if (week.startDate) {
39
+ this.recreateWeekdays(week.startDate);
40
+ }
41
+ }
42
+ recreateWeekdays(startDate) {
43
+ const spaceDaysProvider = this.$spaceDaysProvider();
44
+ const startDateN = startDate.getDate();
45
+ this.$weekdays.update((weekdays) => weekdays.map((wd, i) => {
46
+ const date = new Date(new Date().setDate(startDateN + i));
47
+ return {
48
+ ...wd,
49
+ day: spaceDaysProvider.getCalendarDay(date),
50
+ };
51
+ }));
52
+ }
53
+ onWeekInputChanged(weekChange) {
54
+ // console.log('ScheduleWeekComponent.onWeekInputChanged()', week);
55
+ const prevWeek = weekChange.previousValue;
56
+ const currentWeek = weekChange.currentValue;
57
+ if (!currentWeek ||
58
+ prevWeek === currentWeek ||
59
+ (prevWeek &&
60
+ currentWeek &&
61
+ dateToIso(prevWeek.startDate) == dateToIso(currentWeek.startDate))) {
62
+ return;
63
+ }
64
+ this.recreateWeekdays(currentWeek.startDate);
65
+ // console.log('ScheduleWeekComponent.onWeekInputChanged() => startDate', startDate, currentWeek.startDate);
66
+ }
67
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CalendarWeekComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
68
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: CalendarWeekComponent, isStandalone: true, selector: "sneat-calendar-week", inputs: { $space: { classPropertyName: "$space", publicName: "$space", isSignal: true, isRequired: true, transformFunction: null }, $week: { classPropertyName: "$week", publicName: "$week", isSignal: true, isRequired: true, transformFunction: null }, $spaceDaysProvider: { classPropertyName: "$spaceDaysProvider", publicName: "$spaceDaysProvider", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { goNew: "goNew", dateSelected: "dateSelected" }, usesOnChanges: true, ngImport: i0, template: "@for (weekday of $weekdays(); track weekday.id) {\n <!--\t<ion-item-group>-->\n <sneat-calendar-weekday\n [$space]=\"$space()\"\n [$weekday]=\"weekday\"\n (dateSelected)=\"dateSelected.emit($event)\"\n />\n <!--\t</ion-item-group>-->\n}\n", dependencies: [{ kind: "component", type: CalendarWeekdayComponent, selector: "sneat-calendar-weekday", inputs: ["$space", "$weekday"], outputs: ["dateSelected"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CalendarWeekComponent, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'sneat-calendar-week', imports: [CalendarWeekdayComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "@for (weekday of $weekdays(); track weekday.id) {\n <!--\t<ion-item-group>-->\n <sneat-calendar-weekday\n [$space]=\"$space()\"\n [$weekday]=\"weekday\"\n (dateSelected)=\"dateSelected.emit($event)\"\n />\n <!--\t</ion-item-group>-->\n}\n" }]
73
+ }], propDecorators: { $space: [{ type: i0.Input, args: [{ isSignal: true, alias: "$space", required: true }] }], $week: [{ type: i0.Input, args: [{ isSignal: true, alias: "$week", required: true }] }], $spaceDaysProvider: [{ type: i0.Input, args: [{ isSignal: true, alias: "$spaceDaysProvider", required: true }] }], goNew: [{
74
+ type: Output
75
+ }], dateSelected: [{
76
+ type: Output
77
+ }] } });
78
+ //# sourceMappingURL=calendar-week.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-week.component.js","sourceRoot":"","sources":["../../../../../../../../../../../libs/extensions/schedulus/shared/src/lib/components/calendar/components/calendar-week/calendar-week.component.ts","../../../../../../../../../../../libs/extensions/schedulus/shared/src/lib/components/calendar/components/calendar-week/calendar-week.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,YAAY,EACZ,KAAK,EAEL,MAAM,EACN,MAAM,GAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gDAAgD,CAAC;;AAQ1F,MAAM,OAAO,qBAAqB;IANlC;QAOkB,WAAM,GAAG,KAAK,CAAC,QAAQ,iDAA6B,CAAC;QACrD,UAAK,GAAG,KAAK,CAAC,QAAQ,gDAAQ,CAAC;QAE/B,uBAAkB,GAAG,KAAK,CAAC,QAAQ,6DAAwB,CAAC;QAC5E,qCAAqC;QAElB,UAAK,GAAG,IAAI,YAAY,EAAsB,CAAC;QAC/C,iBAAY,GAAG,IAAI,YAAY,EAAQ,CAAC;QAE3D;;;;;;;;;;;aAWE;QACiB,cAAS,GAAG,MAAM,CAAC,cAAc,EAAE,qDAAC,CAAC;KAgDzD;IA9CC,WAAW,CAAC,OAAsB;QAChC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAC,SAAe;QACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACjC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACrB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO;gBACL,GAAG,EAAE;gBACL,GAAG,EAAE,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC;aAC5C,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,UAAwB;QACjD,mEAAmE;QACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,aAAiC,CAAC;QAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,YAAgC,CAAC;QAChE,IACE,CAAC,WAAW;YACZ,QAAQ,KAAK,WAAW;YACxB,CAAC,QAAQ;gBACP,WAAW;gBACX,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EACpE,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC7C,4GAA4G;IAC9G,CAAC;8GArEU,qBAAqB;kGAArB,qBAAqB,0jBCzBlC,6PASA,4CDaY,wBAAwB;;2FAGvB,qBAAqB;kBANjC,SAAS;+BACE,qBAAqB,WAEtB,CAAC,wBAAwB,CAAC,mBAClB,uBAAuB,CAAC,MAAM;;sBAS9C,MAAM;;sBACN,MAAM","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n input,\n OnChanges,\n Output,\n signal,\n SimpleChange,\n SimpleChanges,\n} from '@angular/core';\nimport { dateToIso } from '@sneat/core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { CalendarDataProvider } from '../../../../services/calendar-data-provider';\nimport { NewHappeningParams } from '@sneat/mod-schedulus-core';\nimport { Week } from '../../../week';\nimport { createWeekdays } from '../../../calendar-core';\nimport { CalendarWeekdayComponent } from '../calendar-weekday/calendar-weekday.component';\n\n@Component({\n selector: 'sneat-calendar-week',\n templateUrl: './calendar-week.component.html',\n imports: [CalendarWeekdayComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CalendarWeekComponent implements OnChanges {\n public readonly $space = input.required<ISpaceContext | undefined>();\n public readonly $week = input.required<Week>();\n\n public readonly $spaceDaysProvider = input.required<CalendarDataProvider>();\n // @Input() filter?: ICalendarFilter;\n\n @Output() readonly goNew = new EventEmitter<NewHappeningParams>();\n @Output() readonly dateSelected = new EventEmitter<Date>();\n\n /* Having trouble to make it computed due to:\n\tERROR RuntimeError: NG0602: effect() cannot be called from within a reactive context. Call `effect` outside of a reactive context. For example, schedule the effect inside the component constructor. Find more at https://angular.dev/errors/NG0602\n at assertNotInReactiveContext (core.mjs:8451:15)\n at effect (core.mjs:39579:9)\n at calendar-day.ts:101:27\n at runInInjectionContext (core.mjs:2467:16)\n at new CalendarDay (calendar-day.ts:100:24)\n at CalendarDataProvider.getCalendarDay (calendar-data-provider.ts:182:10)\n at calendar-week.component.ts:54:28\n at Array.map (<anonymous>)\n at Object.computation (calendar-week.component.ts:50:19)\n\t */\n protected readonly $weekdays = signal(createWeekdays());\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['$week']) {\n this.onWeekInputChanged(changes['$week']);\n }\n if (changes['$spaceDaysProvider']) {\n this.onSpaceChanged();\n }\n }\n\n private onSpaceChanged(): void {\n const week = this.$week();\n if (week.startDate) {\n this.recreateWeekdays(week.startDate);\n }\n }\n\n private recreateWeekdays(startDate: Date): void {\n const spaceDaysProvider = this.$spaceDaysProvider();\n const startDateN = startDate.getDate();\n this.$weekdays.update((weekdays) =>\n weekdays.map((wd, i) => {\n const date = new Date(new Date().setDate(startDateN + i));\n return {\n ...wd,\n day: spaceDaysProvider.getCalendarDay(date),\n };\n }),\n );\n }\n\n private onWeekInputChanged(weekChange: SimpleChange): void {\n // console.log('ScheduleWeekComponent.onWeekInputChanged()', week);\n const prevWeek = weekChange.previousValue as Week | undefined;\n const currentWeek = weekChange.currentValue as Week | undefined;\n if (\n !currentWeek ||\n prevWeek === currentWeek ||\n (prevWeek &&\n currentWeek &&\n dateToIso(prevWeek.startDate) == dateToIso(currentWeek.startDate))\n ) {\n return;\n }\n this.recreateWeekdays(currentWeek.startDate);\n // console.log('ScheduleWeekComponent.onWeekInputChanged() => startDate', startDate, currentWeek.startDate);\n }\n}\n","@for (weekday of $weekdays(); track weekday.id) {\n <!--\t<ion-item-group>-->\n <sneat-calendar-weekday\n [$space]=\"$space()\"\n [$weekday]=\"weekday\"\n (dateSelected)=\"dateSelected.emit($event)\"\n />\n <!--\t</ion-item-group>-->\n}\n"]}
@@ -0,0 +1,66 @@
1
+ import { ChangeDetectionStrategy, Component, computed, EventEmitter, inject, input, Output, signal, } from '@angular/core';
2
+ import { IonButton, IonButtons, IonIcon, IonItem, IonItemDivider, IonLabel, IonSpinner, } from '@ionic/angular/standalone';
3
+ import { ShortMonthNamePipe } from '@sneat/components';
4
+ import { ScheduleNavService, } from '@sneat/mod-schedulus-core';
5
+ import { ClassName, SneatBaseComponent } from '@sneat/ui';
6
+ import { emptyCalendarFilter, CalendarFilterService, } from '../../../calendar-filter.service';
7
+ import { isSlotVisible } from '../../../calendar-slots';
8
+ import { DaySlotItemComponent } from '../day-slot-item/day-slot-item.component';
9
+ import * as i0 from "@angular/core";
10
+ export class CalendarWeekdayComponent extends SneatBaseComponent {
11
+ constructor() {
12
+ super();
13
+ this.$space = input.required(...(ngDevMode ? [{ debugName: "$space" }] : []));
14
+ this.$weekday = input.required(...(ngDevMode ? [{ debugName: "$weekday" }] : []));
15
+ this.$day = computed(() => this.$weekday().day, ...(ngDevMode ? [{ debugName: "$day" }] : []));
16
+ this.dateSelected = new EventEmitter();
17
+ this.$filter = signal(emptyCalendarFilter, ...(ngDevMode ? [{ debugName: "$filter" }] : []));
18
+ this.scheduleNavService = inject(ScheduleNavService);
19
+ const filterService = inject(CalendarFilterService);
20
+ filterService.filter
21
+ .pipe(this.takeUntilDestroyed())
22
+ .subscribe(this.$filter.set);
23
+ }
24
+ // we pass day and filter to let the template know about the dependencies.
25
+ showSlot(slot, day, filter) {
26
+ return !!day && isSlotVisible(slot, filter);
27
+ }
28
+ onDateSelected() {
29
+ // console.log('onDateSelected', event);
30
+ const day = this.$weekday().day;
31
+ if (day?.date) {
32
+ this.dateSelected.next(day.date);
33
+ }
34
+ }
35
+ goNewHappening(type) {
36
+ const space = this.$space();
37
+ if (!space) {
38
+ return;
39
+ }
40
+ const params = {
41
+ type,
42
+ wd: this.$weekday().id,
43
+ date: this.$weekday().day?.dateID,
44
+ };
45
+ this.scheduleNavService.goNewHappening(space, params);
46
+ }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CalendarWeekdayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: CalendarWeekdayComponent, isStandalone: true, selector: "sneat-calendar-weekday", inputs: { $space: { classPropertyName: "$space", publicName: "$space", isSignal: true, isRequired: true, transformFunction: null }, $weekday: { classPropertyName: "$weekday", publicName: "$weekday", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { dateSelected: "dateSelected" }, providers: [{ provide: ClassName, useValue: 'CalendarWeekdayComponent' }], usesInheritance: true, ngImport: i0, template: "@let weekday = $weekday();\n@let day = $day();\n\n<ion-item-divider color=\"light\" class=\"sneat-tiny-end-padding\">\n <ion-label (click)=\"onDateSelected()\" tappable>\n @if (day?.slots?.length) {\n <b>{{ weekday.longTitle }}</b>\n } @else if (!day?.slots?.length) {\n {{ weekday.longTitle }}\n }\n @if (day?.date) {\n , {{ day?.date?.getDate() }}\n {{ day?.date?.getMonth() | shortMonthName }}\n }\n </ion-label>\n @if (day?.$isLoading()) {\n <ion-spinner style=\"opacity: 0.2\" name=\"lines-small\" slot=\"end\" />\n }\n <ion-buttons slot=\"end\">\n <ion-button title=\"Add recurring\" (click)=\"goNewHappening('recurring')\">\n <ion-icon name=\"duplicate-outline\" />\n </ion-button>\n <ion-button title=\"Add one-timer\" (click)=\"goNewHappening('single')\">\n <ion-icon name=\"add-circle-outline\" />\n </ion-button>\n </ion-buttons>\n</ion-item-divider>\n@if (!day || day.$isLoading()) {\n <ion-item>\n <ion-label color=\"medium\" style=\"font-style: italic\"\n >Loading data for {{ weekday.longTitle }} isLoading={{\n day?.$isLoading()\n }}... weekday.day.id: {{ weekday.day?.dateID }}\n </ion-label>\n <ion-spinner name=\"lines-small\" slot=\"end\" color=\"medium\" />\n </ion-item>\n} @else if (day) {\n @for (slot of day.slots; track slot.slot.id) {\n @if (showSlot(slot, $day(), $filter())) {\n <sneat-day-slot-item\n [$space]=\"slot.happening.space\"\n [dateID]=\"day.dateID\"\n [$slotContext]=\"slot\"\n />\n }\n } @empty {\n <ion-item lines=\"full\">\n <ion-label color=\"medium\" style=\"font-style: italic\"\n >Nothing scheduled yet for {{ weekday.longTitle }}.\n </ion-label>\n </ion-item>\n }\n}\n", dependencies: [{ kind: "component", type: DaySlotItemComponent, selector: "sneat-day-slot-item", inputs: ["$slotContext", "dateID", "mode", "color", "contactusSpace"] }, { kind: "component", type: IonItemDivider, selector: "ion-item-divider", inputs: ["color", "mode", "sticky"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "pipe", type: ShortMonthNamePipe, name: "shortMonthName" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CalendarWeekdayComponent, decorators: [{
51
+ type: Component,
52
+ args: [{ imports: [
53
+ DaySlotItemComponent,
54
+ ShortMonthNamePipe,
55
+ IonItemDivider,
56
+ IonLabel,
57
+ IonSpinner,
58
+ IonButtons,
59
+ IonButton,
60
+ IonIcon,
61
+ IonItem,
62
+ ], providers: [{ provide: ClassName, useValue: 'CalendarWeekdayComponent' }], selector: 'sneat-calendar-weekday', changeDetection: ChangeDetectionStrategy.OnPush, template: "@let weekday = $weekday();\n@let day = $day();\n\n<ion-item-divider color=\"light\" class=\"sneat-tiny-end-padding\">\n <ion-label (click)=\"onDateSelected()\" tappable>\n @if (day?.slots?.length) {\n <b>{{ weekday.longTitle }}</b>\n } @else if (!day?.slots?.length) {\n {{ weekday.longTitle }}\n }\n @if (day?.date) {\n , {{ day?.date?.getDate() }}\n {{ day?.date?.getMonth() | shortMonthName }}\n }\n </ion-label>\n @if (day?.$isLoading()) {\n <ion-spinner style=\"opacity: 0.2\" name=\"lines-small\" slot=\"end\" />\n }\n <ion-buttons slot=\"end\">\n <ion-button title=\"Add recurring\" (click)=\"goNewHappening('recurring')\">\n <ion-icon name=\"duplicate-outline\" />\n </ion-button>\n <ion-button title=\"Add one-timer\" (click)=\"goNewHappening('single')\">\n <ion-icon name=\"add-circle-outline\" />\n </ion-button>\n </ion-buttons>\n</ion-item-divider>\n@if (!day || day.$isLoading()) {\n <ion-item>\n <ion-label color=\"medium\" style=\"font-style: italic\"\n >Loading data for {{ weekday.longTitle }} isLoading={{\n day?.$isLoading()\n }}... weekday.day.id: {{ weekday.day?.dateID }}\n </ion-label>\n <ion-spinner name=\"lines-small\" slot=\"end\" color=\"medium\" />\n </ion-item>\n} @else if (day) {\n @for (slot of day.slots; track slot.slot.id) {\n @if (showSlot(slot, $day(), $filter())) {\n <sneat-day-slot-item\n [$space]=\"slot.happening.space\"\n [dateID]=\"day.dateID\"\n [$slotContext]=\"slot\"\n />\n }\n } @empty {\n <ion-item lines=\"full\">\n <ion-label color=\"medium\" style=\"font-style: italic\"\n >Nothing scheduled yet for {{ weekday.longTitle }}.\n </ion-label>\n </ion-item>\n }\n}\n" }]
63
+ }], ctorParameters: () => [], propDecorators: { $space: [{ type: i0.Input, args: [{ isSignal: true, alias: "$space", required: true }] }], $weekday: [{ type: i0.Input, args: [{ isSignal: true, alias: "$weekday", required: true }] }], dateSelected: [{
64
+ type: Output
65
+ }] } });
66
+ //# sourceMappingURL=calendar-weekday.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar-weekday.component.js","sourceRoot":"","sources":["../../../../../../../../../../../libs/extensions/schedulus/shared/src/lib/components/calendar/components/calendar-weekday/calendar-weekday.component.ts","../../../../../../../../../../../libs/extensions/schedulus/shared/src/lib/components/calendar/components/calendar-weekday/calendar-weekday.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n inject,\n input,\n Output,\n signal,\n} from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonIcon,\n IonItem,\n IonItemDivider,\n IonLabel,\n IonSpinner,\n} from '@ionic/angular/standalone';\nimport { ShortMonthNamePipe } from '@sneat/components';\nimport { HappeningType } from '@sneat/mod-schedulus-core';\nimport {\n ISlotUIContext,\n NewHappeningParams,\n ScheduleNavService,\n} from '@sneat/mod-schedulus-core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { ClassName, SneatBaseComponent } from '@sneat/ui';\nimport { CalendarDay } from '../../../../services/calendar-day';\nimport {\n emptyCalendarFilter,\n CalendarFilterService,\n} from '../../../calendar-filter.service';\nimport { isSlotVisible } from '../../../calendar-slots';\nimport { Weekday } from '../../weekday';\nimport { ICalendarFilter } from '../calendar-filter/calendar-filter';\nimport { DaySlotItemComponent } from '../day-slot-item/day-slot-item.component';\n\n@Component({\n imports: [\n DaySlotItemComponent,\n ShortMonthNamePipe,\n IonItemDivider,\n IonLabel,\n IonSpinner,\n IonButtons,\n IonButton,\n IonIcon,\n IonItem,\n ],\n providers: [{ provide: ClassName, useValue: 'CalendarWeekdayComponent' }],\n selector: 'sneat-calendar-weekday',\n templateUrl: './calendar-weekday.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CalendarWeekdayComponent extends SneatBaseComponent {\n public readonly $space = input.required<ISpaceContext | undefined>();\n\n public readonly $weekday = input.required<Weekday>();\n protected readonly $day = computed(() => this.$weekday().day);\n\n @Output() readonly dateSelected = new EventEmitter<Date>();\n\n protected readonly $filter = signal(emptyCalendarFilter);\n\n private readonly scheduleNavService = inject(ScheduleNavService);\n\n constructor() {\n super();\n const filterService = inject(CalendarFilterService);\n filterService.filter\n .pipe(this.takeUntilDestroyed())\n .subscribe(this.$filter.set);\n }\n\n // we pass day and filter to let the template know about the dependencies.\n protected showSlot(\n slot: ISlotUIContext,\n day: CalendarDay | undefined,\n filter: ICalendarFilter,\n ): boolean {\n return !!day && isSlotVisible(slot, filter);\n }\n\n protected onDateSelected(): void {\n // console.log('onDateSelected', event);\n const day = this.$weekday().day;\n if (day?.date) {\n this.dateSelected.next(day.date);\n }\n }\n\n protected goNewHappening(type: HappeningType): void {\n const space = this.$space();\n if (!space) {\n return;\n }\n const params: NewHappeningParams = {\n type,\n wd: this.$weekday().id,\n date: this.$weekday().day?.dateID,\n };\n this.scheduleNavService.goNewHappening(space, params);\n }\n}\n","@let weekday = $weekday();\n@let day = $day();\n\n<ion-item-divider color=\"light\" class=\"sneat-tiny-end-padding\">\n <ion-label (click)=\"onDateSelected()\" tappable>\n @if (day?.slots?.length) {\n <b>{{ weekday.longTitle }}</b>\n } @else if (!day?.slots?.length) {\n {{ weekday.longTitle }}\n }\n @if (day?.date) {\n , {{ day?.date?.getDate() }}\n {{ day?.date?.getMonth() | shortMonthName }}\n }\n </ion-label>\n @if (day?.$isLoading()) {\n <ion-spinner style=\"opacity: 0.2\" name=\"lines-small\" slot=\"end\" />\n }\n <ion-buttons slot=\"end\">\n <ion-button title=\"Add recurring\" (click)=\"goNewHappening('recurring')\">\n <ion-icon name=\"duplicate-outline\" />\n </ion-button>\n <ion-button title=\"Add one-timer\" (click)=\"goNewHappening('single')\">\n <ion-icon name=\"add-circle-outline\" />\n </ion-button>\n </ion-buttons>\n</ion-item-divider>\n@if (!day || day.$isLoading()) {\n <ion-item>\n <ion-label color=\"medium\" style=\"font-style: italic\"\n >Loading data for {{ weekday.longTitle }} isLoading={{\n day?.$isLoading()\n }}... weekday.day.id: {{ weekday.day?.dateID }}\n </ion-label>\n <ion-spinner name=\"lines-small\" slot=\"end\" color=\"medium\" />\n </ion-item>\n} @else if (day) {\n @for (slot of day.slots; track slot.slot.id) {\n @if (showSlot(slot, $day(), $filter())) {\n <sneat-day-slot-item\n [$space]=\"slot.happening.space\"\n [dateID]=\"day.dateID\"\n [$slotContext]=\"slot\"\n />\n }\n } @empty {\n <ion-item lines=\"full\">\n <ion-label color=\"medium\" style=\"font-style: italic\"\n >Nothing scheduled yet for {{ weekday.longTitle }}.\n </ion-label>\n </ion-item>\n }\n}\n"]}
@@ -0,0 +1,93 @@
1
+ import { Component, Input, input, computed, ChangeDetectionStrategy, inject, } from '@angular/core';
2
+ import { PopoverController, IonBadge, IonButton, IonButtons, IonIcon, IonItem, IonLabel, IonText, } from '@ionic/angular/standalone';
3
+ import { ContactusSpaceService } from '@sneat/contactus-services';
4
+ import { ContactsSelectorModule } from '@sneat/contactus-shared';
5
+ import { WithSpaceInput } from '@sneat/space-services';
6
+ import { ClassName } from '@sneat/ui';
7
+ import { CalendarNavService, CalendarNavServicesModule, HappeningServiceModule, } from '../../../../services';
8
+ import { HappeningSlotModalServiceModule } from '../../../happening-slot-form/happening-slot-modal.service';
9
+ import { HappeningSlotParticipantsComponent } from '../../../happening-slot-participants/happening-slot-participants.component';
10
+ import { TimingBadgeComponent } from '../timing-badge/timing-badge.component';
11
+ import * as i0 from "@angular/core";
12
+ export class DaySlotItemComponent extends WithSpaceInput {
13
+ constructor() {
14
+ super();
15
+ this.popoverController = inject(PopoverController);
16
+ this.calendarNavService = inject(CalendarNavService);
17
+ this.$slotContext = input.required(...(ngDevMode ? [{ debugName: "$slotContext" }] : []));
18
+ this.mode = 'full';
19
+ this.$isCanceled = computed(() => {
20
+ const { happening, adjustment } = this.$slotContext();
21
+ return happening?.brief?.status === 'canceled' || !!adjustment?.canceled;
22
+ }, ...(ngDevMode ? [{ debugName: "$isCanceled" }] : []));
23
+ }
24
+ onSlotClicked(event) {
25
+ event.stopPropagation();
26
+ const slot = this.$slotContext();
27
+ if (!slot) {
28
+ return;
29
+ }
30
+ this.calendarNavService.navigateToHappeningPage({
31
+ slot: slot,
32
+ event,
33
+ });
34
+ }
35
+ async showContextMenu(event) {
36
+ event?.preventDefault();
37
+ event?.stopPropagation();
38
+ // Need to import dynamically due to circular depndency with DaySlotItemComponent
39
+ import('./slot-context-menu.component').then(async (m) => {
40
+ const slotContext = this.$slotContext();
41
+ const popoverOptions = {
42
+ component: m.SlotContextMenuComponent,
43
+ componentProps: {
44
+ $space: this.$space,
45
+ slotContext,
46
+ dateID: this.dateID,
47
+ // state: stateOutput,
48
+ },
49
+ event,
50
+ };
51
+ const popover = await this.popoverController.create(popoverOptions);
52
+ await popover.present(event);
53
+ });
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DaySlotItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: DaySlotItemComponent, isStandalone: true, selector: "sneat-day-slot-item", inputs: { $slotContext: { classPropertyName: "$slotContext", publicName: "$slotContext", isSignal: true, isRequired: true, transformFunction: null }, dateID: { classPropertyName: "dateID", publicName: "dateID", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: false, isRequired: false, transformFunction: null }, contactusSpace: { classPropertyName: "contactusSpace", publicName: "contactusSpace", isSignal: false, isRequired: false, transformFunction: null } }, providers: [
57
+ { provide: ClassName, useValue: 'DaySlotItemComponent' },
58
+ ContactusSpaceService,
59
+ ], usesInheritance: true, ngImport: i0, template: "<style>\n .canceled {\n text-decoration: line-through;\n color: grey;\n }\n</style>\n@let slotContext = $slotContext();\n\n<ion-item\n tappable=\"true\"\n lines=\"full\"\n (click)=\"onSlotClicked($event)\"\n class=\"sneat-tiny-end-padding\"\n [color]=\"color\"\n>\n <ion-icon\n class=\"sneat-tiny-end-margin\"\n [name]=\"\n slotContext?.happening?.brief?.type === 'recurring'\n ? 'calendar-outline'\n : 'today-outline'\n \"\n slot=\"start\"\n />\n\n <ion-badge\n color=\"light\"\n slot=\"start\"\n class=\"sneat-small-end-margin\"\n [class.canceled]=\"$isCanceled()\"\n style=\"font-weight: normal; background-color: white\"\n >\n <!-- We use ion-badge here trying to workaround issue with ion-buttons slot=end not rendering on 1st paint -->\n <sneat-timing-badge\n [$isCanceled]=\"$isCanceled()\"\n [$timing]=\"slotContext.timing\"\n [$adjustment]=\"slotContext.adjustment\"\n />\n </ion-badge>\n\n <ion-label class=\"ion-text-wrap\">\n <span\n style=\"font-size: 1em; margin-bottom: 0.4em; font-weight: bold\"\n [class.canceled]=\"$isCanceled()\"\n >\n {{ slotContext?.title }}\n </span>\n @if ($isCanceled()) {\n <ion-text color=\"medium\">&nbsp;&mdash; canceled</ion-text>\n }\n\n <!--\t\t@if (mode === 'full') {-->\n <!--\t\t\t<sneat-members-as-badges-->\n <!--\t\t\t\t[showDelete]=\"false\"-->\n <!--\t\t\t\t[members]=\"-->\n <!--\t\t\t\t\t\tslot?.happening?.brief?.contactIDs || []-->\n <!--\t\t\t\t\t\t\t| selectedMembers: contactusTeam?.dto?.contacts-->\n <!--\t\t\t\t\t\"-->\n <!--\t\t\t/>-->\n <!--\t\t}-->\n\n @if (mode === \"full\") {\n @if (slotContext?.location?.title || slotContext?.location?.address) {\n <p>\n {{ slotContext?.location?.title || slotContext?.location?.address }}\n </p>\n }\n @if (slotContext.participants || slotContext.levels?.length) {\n <p>\n @if (slotContext.levels?.length) {\n @for (level of slotContext.levels || []; track level) {\n <ion-badge color=\"light\" style=\"margin-right: 0.5em\">\n \uD83C\uDF9A\uFE0F {{ level[0].toUpperCase() + level.substring(1) }}\n </ion-badge>\n }\n }\n </p>\n }\n }\n\n <p>\n <sneat-happening-slot-participants [$happeningSlot]=\"slotContext\" />\n </p>\n </ion-label>\n <ion-buttons slot=\"end\">\n <ion-button\n (click)=\"showContextMenu($event)\"\n color=\"medium\"\n title=\"Actions\"\n >\n <ion-icon name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n</ion-item>\n", styles: [".canceled{text-decoration:line-through;color:gray}\n"], dependencies: [{ kind: "ngmodule", type: HappeningServiceModule }, { kind: "ngmodule", type: ContactsSelectorModule }, { kind: "ngmodule", type: HappeningSlotModalServiceModule }, { kind: "component", type: HappeningSlotParticipantsComponent, selector: "sneat-happening-slot-participants", inputs: ["$happeningSlot"] }, { kind: "component", type: TimingBadgeComponent, selector: "sneat-timing-badge", inputs: ["$isCanceled", "$timing", "$adjustment"] }, { kind: "ngmodule", type:
60
+ // MembersAsBadgesComponent,
61
+ CalendarNavServicesModule }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: DaySlotItemComponent, decorators: [{
64
+ type: Component,
65
+ args: [{ imports: [
66
+ HappeningServiceModule,
67
+ ContactsSelectorModule,
68
+ HappeningSlotModalServiceModule,
69
+ HappeningSlotParticipantsComponent,
70
+ TimingBadgeComponent,
71
+ // MembersAsBadgesComponent,
72
+ CalendarNavServicesModule,
73
+ IonItem,
74
+ IonIcon,
75
+ IonLabel,
76
+ IonText,
77
+ IonBadge,
78
+ IonButtons,
79
+ IonButton,
80
+ ], providers: [
81
+ { provide: ClassName, useValue: 'DaySlotItemComponent' },
82
+ ContactusSpaceService,
83
+ ], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-day-slot-item', template: "<style>\n .canceled {\n text-decoration: line-through;\n color: grey;\n }\n</style>\n@let slotContext = $slotContext();\n\n<ion-item\n tappable=\"true\"\n lines=\"full\"\n (click)=\"onSlotClicked($event)\"\n class=\"sneat-tiny-end-padding\"\n [color]=\"color\"\n>\n <ion-icon\n class=\"sneat-tiny-end-margin\"\n [name]=\"\n slotContext?.happening?.brief?.type === 'recurring'\n ? 'calendar-outline'\n : 'today-outline'\n \"\n slot=\"start\"\n />\n\n <ion-badge\n color=\"light\"\n slot=\"start\"\n class=\"sneat-small-end-margin\"\n [class.canceled]=\"$isCanceled()\"\n style=\"font-weight: normal; background-color: white\"\n >\n <!-- We use ion-badge here trying to workaround issue with ion-buttons slot=end not rendering on 1st paint -->\n <sneat-timing-badge\n [$isCanceled]=\"$isCanceled()\"\n [$timing]=\"slotContext.timing\"\n [$adjustment]=\"slotContext.adjustment\"\n />\n </ion-badge>\n\n <ion-label class=\"ion-text-wrap\">\n <span\n style=\"font-size: 1em; margin-bottom: 0.4em; font-weight: bold\"\n [class.canceled]=\"$isCanceled()\"\n >\n {{ slotContext?.title }}\n </span>\n @if ($isCanceled()) {\n <ion-text color=\"medium\">&nbsp;&mdash; canceled</ion-text>\n }\n\n <!--\t\t@if (mode === 'full') {-->\n <!--\t\t\t<sneat-members-as-badges-->\n <!--\t\t\t\t[showDelete]=\"false\"-->\n <!--\t\t\t\t[members]=\"-->\n <!--\t\t\t\t\t\tslot?.happening?.brief?.contactIDs || []-->\n <!--\t\t\t\t\t\t\t| selectedMembers: contactusTeam?.dto?.contacts-->\n <!--\t\t\t\t\t\"-->\n <!--\t\t\t/>-->\n <!--\t\t}-->\n\n @if (mode === \"full\") {\n @if (slotContext?.location?.title || slotContext?.location?.address) {\n <p>\n {{ slotContext?.location?.title || slotContext?.location?.address }}\n </p>\n }\n @if (slotContext.participants || slotContext.levels?.length) {\n <p>\n @if (slotContext.levels?.length) {\n @for (level of slotContext.levels || []; track level) {\n <ion-badge color=\"light\" style=\"margin-right: 0.5em\">\n \uD83C\uDF9A\uFE0F {{ level[0].toUpperCase() + level.substring(1) }}\n </ion-badge>\n }\n }\n </p>\n }\n }\n\n <p>\n <sneat-happening-slot-participants [$happeningSlot]=\"slotContext\" />\n </p>\n </ion-label>\n <ion-buttons slot=\"end\">\n <ion-button\n (click)=\"showContextMenu($event)\"\n color=\"medium\"\n title=\"Actions\"\n >\n <ion-icon name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n</ion-item>\n" }]
84
+ }], ctorParameters: () => [], propDecorators: { $slotContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "$slotContext", required: true }] }], dateID: [{
85
+ type: Input
86
+ }], mode: [{
87
+ type: Input
88
+ }], color: [{
89
+ type: Input
90
+ }], contactusSpace: [{
91
+ type: Input
92
+ }] } });
93
+ //# sourceMappingURL=day-slot-item.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"day-slot-item.component.js","sourceRoot":"","sources":["../../../../../../../../../../../libs/extensions/schedulus/shared/src/lib/components/calendar/components/day-slot-item/day-slot-item.component.ts","../../../../../../../../../../../libs/extensions/schedulus/shared/src/lib/components/calendar/components/day-slot-item/day-slot-item.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,KAAK,EACL,KAAK,EACL,QAAQ,EACR,uBAAuB,EACvB,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EAEjB,QAAQ,EACR,SAAS,EACT,UAAU,EACV,OAAO,EACP,OAAO,EACP,QAAQ,EACR,OAAO,GACR,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,+BAA+B,EAAE,MAAM,2DAA2D,CAAC;AAC5G,OAAO,EAAE,kCAAkC,EAAE,MAAM,4EAA4E,CAAC;AAChI,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;;AA2B9E,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAkBtD;QACE,KAAK,EAAE,CAAC;QAlBO,sBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC9C,uBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAEjD,iBAAY,GAAG,KAAK,CAAC,QAAQ,uDAAkB,CAAC;QAIvD,SAAI,GAAqB,MAAM,CAAC;QAKtB,gBAAW,GAAG,QAAQ,CAAC,GAAG,EAAE;YAC7C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtD,OAAO,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC3E,CAAC,uDAAC,CAAC;IAIH,CAAC;IAES,aAAa,CAAC,KAAY;QAClC,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC;YAC9C,IAAI,EAAE,IAAI;YACV,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAES,KAAK,CAAC,eAAe,CAC7B,KAKa;QAEb,KAAK,EAAE,cAAc,EAAE,CAAC;QACxB,KAAK,EAAE,eAAe,EAAE,CAAC;QAEzB,iFAAiF;QACjF,MAAM,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACvD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,cAAc,GAAmB;gBACrC,SAAS,EAAE,CAAC,CAAC,wBAAwB;gBACrC,cAAc,EAAE;oBACd,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,WAAW;oBACX,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,sBAAsB;iBACvB;gBACD,KAAK;aACN,CAAC;YAEF,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACpE,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;8GA9DU,oBAAoB;kGAApB,oBAAoB,ytBARpB;YACT,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE;YACxD,qBAAqB;SACtB,iDCtDH,6pFA8FA,6GD1DI,sBAAsB,8BACtB,sBAAsB,8BACtB,+BAA+B,+BAC/B,kCAAkC,0GAClC,oBAAoB;gBACpB,4BAA4B;gBAC5B,yBAAyB,+BACzB,OAAO,0NACP,OAAO,2JACP,QAAQ,6FACR,OAAO,gFACP,QAAQ,iFACR,UAAU,8EACV,SAAS;;2FAUA,oBAAoB;kBAzBhC,SAAS;8BACC;wBACP,sBAAsB;wBACtB,sBAAsB;wBACtB,+BAA+B;wBAC/B,kCAAkC;wBAClC,oBAAoB;wBACpB,4BAA4B;wBAC5B,yBAAyB;wBACzB,OAAO;wBACP,OAAO;wBACP,QAAQ;wBACR,OAAO;wBACP,QAAQ;wBACR,UAAU;wBACV,SAAS;qBACV,aACU;wBACT,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,sBAAsB,EAAE;wBACxD,qBAAqB;qBACtB,mBACgB,uBAAuB,CAAC,MAAM,YACrC,qBAAqB;;sBAS9B,KAAK;;sBAEL,KAAK;;sBACL,KAAK;;sBAEL,KAAK","sourcesContent":["import {\n Component,\n Input,\n input,\n computed,\n ChangeDetectionStrategy,\n inject,\n} from '@angular/core';\nimport {\n PopoverController,\n PopoverOptions,\n IonBadge,\n IonButton,\n IonButtons,\n IonIcon,\n IonItem,\n IonLabel,\n IonText,\n} from '@ionic/angular/standalone';\nimport { IContactusSpaceDboAndID } from '@sneat/contactus-core';\nimport { ContactusSpaceService } from '@sneat/contactus-services';\nimport { ContactsSelectorModule } from '@sneat/contactus-shared';\nimport { WithSpaceInput } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport {\n CalendarNavService,\n CalendarNavServicesModule,\n HappeningServiceModule,\n} from '../../../../services';\nimport { ISlotUIContext } from '@sneat/mod-schedulus-core';\nimport { HappeningSlotModalServiceModule } from '../../../happening-slot-form/happening-slot-modal.service';\nimport { HappeningSlotParticipantsComponent } from '../../../happening-slot-participants/happening-slot-participants.component';\nimport { TimingBadgeComponent } from '../timing-badge/timing-badge.component';\n\n@Component({\n imports: [\n HappeningServiceModule,\n ContactsSelectorModule,\n HappeningSlotModalServiceModule,\n HappeningSlotParticipantsComponent,\n TimingBadgeComponent,\n // MembersAsBadgesComponent,\n CalendarNavServicesModule,\n IonItem,\n IonIcon,\n IonLabel,\n IonText,\n IonBadge,\n IonButtons,\n IonButton,\n ],\n providers: [\n { provide: ClassName, useValue: 'DaySlotItemComponent' },\n ContactusSpaceService,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-day-slot-item',\n templateUrl: './day-slot-item.component.html',\n})\nexport class DaySlotItemComponent extends WithSpaceInput {\n private readonly popoverController = inject(PopoverController);\n private readonly calendarNavService = inject(CalendarNavService);\n\n public readonly $slotContext = input.required<ISlotUIContext>();\n\n @Input() dateID?: string;\n\n @Input() mode: 'full' | 'brief' = 'full';\n @Input() color?: 'light';\n\n @Input() contactusSpace?: IContactusSpaceDboAndID;\n\n protected readonly $isCanceled = computed(() => {\n const { happening, adjustment } = this.$slotContext();\n return happening?.brief?.status === 'canceled' || !!adjustment?.canceled;\n });\n\n public constructor() {\n super();\n }\n\n protected onSlotClicked(event: Event): void {\n event.stopPropagation();\n const slot = this.$slotContext();\n if (!slot) {\n return;\n }\n this.calendarNavService.navigateToHappeningPage({\n slot: slot,\n event,\n });\n }\n\n protected async showContextMenu(\n event:\n | MouseEvent\n | TouchEvent\n | PointerEvent\n | CustomEvent<unknown>\n | undefined,\n ): Promise<void> {\n event?.preventDefault();\n event?.stopPropagation();\n\n // Need to import dynamically due to circular depndency with DaySlotItemComponent\n import('./slot-context-menu.component').then(async (m) => {\n const slotContext = this.$slotContext();\n const popoverOptions: PopoverOptions = {\n component: m.SlotContextMenuComponent,\n componentProps: {\n $space: this.$space,\n slotContext,\n dateID: this.dateID,\n // state: stateOutput,\n },\n event,\n };\n\n const popover = await this.popoverController.create(popoverOptions);\n await popover.present(event);\n });\n }\n}\n","<style>\n .canceled {\n text-decoration: line-through;\n color: grey;\n }\n</style>\n@let slotContext = $slotContext();\n\n<ion-item\n tappable=\"true\"\n lines=\"full\"\n (click)=\"onSlotClicked($event)\"\n class=\"sneat-tiny-end-padding\"\n [color]=\"color\"\n>\n <ion-icon\n class=\"sneat-tiny-end-margin\"\n [name]=\"\n slotContext?.happening?.brief?.type === 'recurring'\n ? 'calendar-outline'\n : 'today-outline'\n \"\n slot=\"start\"\n />\n\n <ion-badge\n color=\"light\"\n slot=\"start\"\n class=\"sneat-small-end-margin\"\n [class.canceled]=\"$isCanceled()\"\n style=\"font-weight: normal; background-color: white\"\n >\n <!-- We use ion-badge here trying to workaround issue with ion-buttons slot=end not rendering on 1st paint -->\n <sneat-timing-badge\n [$isCanceled]=\"$isCanceled()\"\n [$timing]=\"slotContext.timing\"\n [$adjustment]=\"slotContext.adjustment\"\n />\n </ion-badge>\n\n <ion-label class=\"ion-text-wrap\">\n <span\n style=\"font-size: 1em; margin-bottom: 0.4em; font-weight: bold\"\n [class.canceled]=\"$isCanceled()\"\n >\n {{ slotContext?.title }}\n </span>\n @if ($isCanceled()) {\n <ion-text color=\"medium\">&nbsp;&mdash; canceled</ion-text>\n }\n\n <!--\t\t@if (mode === 'full') {-->\n <!--\t\t\t<sneat-members-as-badges-->\n <!--\t\t\t\t[showDelete]=\"false\"-->\n <!--\t\t\t\t[members]=\"-->\n <!--\t\t\t\t\t\tslot?.happening?.brief?.contactIDs || []-->\n <!--\t\t\t\t\t\t\t| selectedMembers: contactusTeam?.dto?.contacts-->\n <!--\t\t\t\t\t\"-->\n <!--\t\t\t/>-->\n <!--\t\t}-->\n\n @if (mode === \"full\") {\n @if (slotContext?.location?.title || slotContext?.location?.address) {\n <p>\n {{ slotContext?.location?.title || slotContext?.location?.address }}\n </p>\n }\n @if (slotContext.participants || slotContext.levels?.length) {\n <p>\n @if (slotContext.levels?.length) {\n @for (level of slotContext.levels || []; track level) {\n <ion-badge color=\"light\" style=\"margin-right: 0.5em\">\n 🎚️ {{ level[0].toUpperCase() + level.substring(1) }}\n </ion-badge>\n }\n }\n </p>\n }\n }\n\n <p>\n <sneat-happening-slot-participants [$happeningSlot]=\"slotContext\" />\n </p>\n </ion-label>\n <ion-buttons slot=\"end\">\n <ion-button\n (click)=\"showContextMenu($event)\"\n color=\"medium\"\n title=\"Actions\"\n >\n <ion-icon name=\"ellipsis-vertical-outline\"></ion-icon>\n </ion-button>\n </ion-buttons>\n</ion-item>\n"]}